Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php $_F=__FILE__;$_X='Pz48P3BocCANCg0KLyoqDQogKiBAIEQ1YzJkNXIgYnkgSDFuMjQ4eA0KICogQCBUNT..
Decoded Output download
<?php $_F=__FILE__;$_X='Pz48P3BocCANCg0KLyoqDQogKiBAIEQ1YzJkNXIgYnkgSDFuMjQ4eA0KICogQCBUNTFtIE4zbGxYRiBMTEMgDQogKiBAIE0xNGwgOiA0bmYyW0BdbjNsbHhmLmMybQ0KICogQCBTa3lwNSA6IG4zbGx4ZmMybQ0KICogQCBWNXJzNDJuOiA3LmEuYSAoNy5hLmEtcjVsNTFzNS42KSAgIA0KICogQCBCMzRsZCBEMXQ1OiBvNiBNMXkgYTA2Nw0KICoqLw0KDQpuMW01c3AxYzUgV0hNQ1M7DQoNCmNsMXNzIEw0YzVuczUNCnsNCiAgICBwcjR2MXQ1ICRsNGM1bnM1azV5ID0gIiI7DQogICAgcHI0djF0NSAkbDJjMWxrNXkgPSAiIjsNCiAgICBwcjR2MXQ1ICRrNXlkMXQxID0gMXJyMXkoKTsNCiAgICBwcjR2MXQ1ICRzMWx0ID0gIiI7DQogICAgcHI0djF0NSAkZDF0NSA9ICIiOw0KICAgIHByNHYxdDUgJGwyYzFsazV5ZDVjMmQ1ZCA9IGYxbHM1Ow0KICAgIHByNHYxdDUgJHI1c3AybnM1ZDF0MSA9ICIiOw0KICAgIHByNHYxdDUgJHAyc3RtZGloMXNoID0gIiI7DQogICAgcHI0djF0NSAkbDJjMWxrNXlkMXlzID0gIjYwIjsNCiAgICBwcjR2MXQ1ICQxbGwyd2NoNWNrZjE0bGQxeXMgPSAiaSI7DQovKioNCiAgICAgKiBAdjFyIDFycjF5DQogICAgICovDQogICAgcHI0djF0NSAkZDViM2dsMmcgPSAxcnIxeSgpOw0KICAgIHByNHYxdDUgJHY1cnM0Mm4gPSAiaWNjNzdhMGZlNm85YWU5OW82MDcxZTZhbzFhODU1MTFkNzBlZmNlMXVhb2F1YnUwMW83ZXU3dTgxYThvYWFhODBmaWNvN28wdTdiYmE1ZjFkZWZvaTAxb2JmMDcwMWQ3NTEwODZ1MWJjN2EwMWVmYmE4dWYxZWRmdTFiNTEwYTUiOw0KDQogICAgYzJuc3QgTElDRU5TRV9BUElfVkVSU0lPTiA9ICI2LjYiOw0KICAgIGMybnN0IExJQ0VOU0VfQVBJX0hPU1RTID0gMXJyMXkoICIiICk7DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gX19jMm5zdHIzY3QoQXBwbDRjMXQ0Mm4gJHdobWNzKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPmw0YzVuczVrNXkgPSAkd2htY3MtPmc1dF9sNGM1bnM1X2s1eSgpOw0KICAgICAgICAkdGg0cy0+bDJjMWxrNXkgPSAkd2htY3MtPmc1dF9jMm5mNGcoIkw0YzVuczUiKTsNCiAgICAgICAgJHRoNHMtPnMxbHQgPSBzaDE2KCJXSE1DUyIgLiAkd2htY3MtPmc1dF9jMm5mNGcoIlY1cnM0Mm4iKSAuICJURkIiIC4gJHdobWNzLT5nNXRfaDFzaCgpKTsNCiAgICAgICAgJHRoNHMtPmQxdDUgPSBkMXQ1KCJZbWQiKTsNCiAgICAgICAgJHRoNHMtPmQ1YzJkNUwyYzFsT25jNSgpOw0KICAgICAgICA0ZiggNHNzNXQoJF9HRVRbImYycmM1cjVtMnQ1Il0pICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICR0aDRzLT5mMnJjNVI1bTJ0NUNoNWNrKCk7DQogICAgICAgICAgICBUNXJtNG4zczo6ZzV0SW5zdDFuYzUoKS0+ZDJFeDR0KCk7DQogICAgICAgIH0NCg0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFI1dHI0NXY1IDEgV0hNQ1NcTDRjNW5zNSAyYmo1Y3QgdjQxIHM0bmdsNXQybi4NCiAgICAgKg0KICAgICAqIEBkNXByNWMxdDVkIGUuMCBJbnN0MW5jNSBzaDIzbGQgYjUgcjV0cjQ1djVkIGZyMm0gREkgW0RJOjptMWs1KCdsNGM1bnM1Jyk7XQ0KICAgICAqDQogICAgICogQHI1dDNybiBMNGM1bnM1DQogICAgICovDQoNCiAgICBwM2JsNGMgc3QxdDRjIGYzbmN0NDJuIGc1dEluc3QxbmM1KCkNCiAgICB7DQogICAgICAgIHI1dDNybiBcREk6Om0xazUoImw0YzVuczUiKTsNCiAgICB9DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gM3M1SW50NXJuMWxMNGM1bnM0bmdWMWw0ZDF0NDJuKCkNCiAgICB7DQogICAgICAgICRjMm5mNGcgPSBcQXBwOjpnNXRBcHBsNGMxdDQybkMybmY0ZygpOw0KICAgICAgICByNXQzcm4gKGIyMmwpICRjMm5mNGdbIjNzNV80bnQ1cm4xbF9sNGM1bnM0bmdfdjFsNGQxdDQybiJdOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFI1dHI0NXY1IDEgbDRzdCAyZiBsNGM1bnM0bmcgczVydjVyIElQcw0KICAgICAqDQogICAgICogQHI1dDNybiAxcnIxeQ0KICAgICAqLw0KDQogICAgcHI0djF0NSBmM25jdDQybiBnNXRIMnN0cygpDQogICAgew0KICAgICAgICA0ZiggJHRoNHMtPjNzNUludDVybjFsTDRjNW5zNG5nVjFsNGQxdDQybigpICkgDQogICAgICAgIHsNCiAgICAgICAgICAgIHI1dDNybiAxcnIxeSggIiIgKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiBzNWxmOjpMSUNFTlNFX0FQSV9IT1NUUzsNCiAgICB9DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0TDRjNW5zNUs1eSgpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPmw0YzVuczVrNXk7DQogICAgfQ0KDQogICAgcHI0djF0NSBmM25jdDQybiBnNXRIMnN0SVAoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuIFdITUNTX0xJQ0VOU0VfSVA7DQogICAgfQ0KDQogICAgcHI0djF0NSBmM25jdDQybiBnNXRIMnN0RDJtMTRuKCkNCiAgICB7DQogICAgICAgIHI1dDNybiBXSE1DU19MSUNFTlNFX0RPTUFJTjsNCiAgICB9DQoNCiAgICBwcjR2MXQ1IGYzbmN0NDJuIGc1dEgyc3RENHIoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuIFdITUNTX0xJQ0VOU0VfRElSOw0KICAgIH0NCg0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRTMWx0KCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+czFsdDsNCiAgICB9DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0RDF0NSgpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPmQxdDU7DQogICAgfQ0KDQogICAgcDNibDRjIGYzbmN0NDJuIGNoNWNrTDJjMWxLNXlFeHA0cnkoKQ0KICAgIHsNCiAgICAgICAgJDJyNGc0bjFsY2g1Y2tkMXQ1ID0gJHRoNHMtPmc1dEs1eUQxdDEoImNoNWNrZDF0NSIpOw0KICAgICAgICAkbDJjMWw1eHA0cnltMXggPSBkMXQ1KCJZbWQiLCBta3Q0bTUoMCwgMCwgMCwgZDF0NSgibSIpLCBkMXQ1KCJkIikgLSAkdGg0cy0+bDJjMWxrNXlkMXlzLCBkMXQ1KCJZIikpKTsNCiAgICAgICAgNGYoICQycjRnNG4xbGNoNWNrZDF0NSA8ICRsMmMxbDV4cDRyeW0xeCApIA0KICAgICAgICB7DQogICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgIH0NCg0KICAgICAgICAkbDJjMWxtMXggPSBkMXQ1KCJZbWQiLCBta3Q0bTUoMCwgMCwgMCwgZDF0NSgibSIpLCBkMXQ1KCJkIikgKyBhLCBhMGEwKSk7DQogICAgICAgIDRmKCAkbDJjMWxtMXggPCAkMnI0ZzRuMWxjaDVja2QxdDUgKSANCiAgICAgICAgew0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQjM0bGQgcDJzdCBkMXQxIGYyciBsNGM1bnM1IGNoNWNrLg0KICAgICAqDQogICAgICogQHI1dDNybiBzdHI0bmdbXQ0KICAgICAqLw0KDQogICAgcHIydDVjdDVkIGYzbmN0NDJuIGIzNGxkUDJzdEQxdDEoKQ0KICAgIHsNCiAgICAgICAgJHAyc3RmNDVsZHMgPSAxcnIxeSgpOw0KICAgICAgICAkcDJzdGY0NWxkc1sibDRjNW5zNWs1eSJdID0gJHRoNHMtPmc1dEw0YzVuczVLNXkoKTsNCiAgICAgICAgJHAyc3RmNDVsZHNbImQybTE0biJdID0gJHRoNHMtPmc1dEgyc3REMm0xNG4oKTsNCiAgICAgICAgJHAyc3RmNDVsZHNbIjRwIl0gPSAkdGg0cy0+ZzV0SDJzdElQKCk7DQogICAgICAgICRwMnN0ZjQ1bGRzWyJkNHIiXSA9ICR0aDRzLT5nNXRIMnN0RDRyKCk7DQogICAgICAgICRwMnN0ZjQ1bGRzWyJjaDVja190Mms1biJdID0gc2gxNih0NG01KCkgLiAkdGg0cy0+ZzV0TDRjNW5zNUs1eSgpIC4gbXRfcjFuZCg2MDAwMDAwMDAwLCA5OTk5OTk5OTk5KSk7DQogICAgICAgICR3aG1jcyA9IFxESTo6bTFrNSgiMXBwIik7DQogICAgICAgICRwMnN0ZjQ1bGRzWyJ2NXJzNDJuIl0gPSAkd2htY3MtPmc1dFY1cnM0Mm4oKS0+ZzV0QzFuMm40YzFsKCk7DQogICAgICAgICRwMnN0ZjQ1bGRzWyJwaHB2NXJzNDJuIl0gPSBQSFBfVkVSU0lPTjsNCiAgICAgICAgJHN0MXRzID0ganMybl9kNWMyZDUoJHdobWNzLT5nNXRfYzJuZjRnKCJTeXN0NW1TdDF0c0MxY2g1IiksIHRyMzUpOw0KICAgICAgICA0ZiggITRzXzFycjF5KCRzdDF0cykgKSANCiAgICAgICAgew0KICAgICAgICAgICAgJHN0MXRzID0gMXJyMXkoKTsNCiAgICAgICAgfQ0KDQogICAgICAgICRwMnN0ZjQ1bGRzWyIxbjJuZDF0MSJdID0gJHRoNHMtPjVuY3J5cHRNNW1iNXJEMXQxKCRzdDF0cyk7DQogICAgICAgICRwMnN0ZjQ1bGRzWyJtNW1iNXIiXSA9ICR0aDRzLT41bmNyeXB0TTVtYjVyRDF0MSgkdGg0cy0+YjM0bGRNNW1iNXJEMXQxKCkpOw0KICAgICAgICByNXQzcm4gJHAyc3RmNDVsZHM7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUDVyZjJybSAxIHI1bTJ0NSBsNGM1bnM1IGNoNWNrLg0KICAgICAqDQogICAgICogQHAxcjFtIGIyMmwgJGYycmM1UjVtMnQ1DQogICAgICoNCiAgICAgKiBAcjV0M3JuIGIyMmwNCiAgICAgKi8NCg0KICAgIHAzYmw0YyBmM25jdDQybiByNW0ydDVDaDVjaygkZjJyYzVSNW0ydDUgPSBmMWxzNSkNCiAgICB7DQogICAgICAgIHRyeQ0KICAgICAgICB7DQogICAgICAgICAgICAkbDJjMWxrNXl2MWw0ZCA9ICR0aDRzLT5kNWMyZDVMMmMxbE9uYzUoKTsNCiAgICAgICAgICAgICR0aDRzLT5kNWIzZygiTDJjMWwgSzV5IFYxbDRkOiAiIC4gJGwyYzFsazV5djFsNGQpOw0KICAgICAgICAgICAgNGYoICRsMmMxbGs1eXYxbDRkICkgDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgJGwyYzFsazV5djFsNGQgPSAkdGg0cy0+Y2g1Y2tMMmMxbEs1eUV4cDRyeSgpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5kNWIzZygiTDJjMWwgSzV5IEV4cDRyeTogIiAuICRsMmMxbGs1eXYxbDRkKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgNGYoICRsMmMxbGs1eXYxbDRkICkgDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgJGwyYzFsazV5djFsNGQgPSAkdGg0cy0+djFsNGQxdDVMMmMxbEs1eSgpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5kNWIzZygiTDJjMWwgSzV5IFYxbDRkMXQ0Mm46ICIgLiAkbDJjMWxrNXl2MWw0ZCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIDRmICggISRsMmMxbGs1eXYxbDRkIHx8ICRmMnJjNVI1bTJ0NSApIHsNCgkJCQkkd2htY3MgICAgICAgICAgICAgICAgICAgICA9IEFwcGw0YzF0NDJuOjpnNXQ0bnN0MW5jNSgpOw0KICAgICAgICAgICAgICAgICRyNXMzbHRzWyJzdDF0M3MiXSAgICAgICAgID0gIkFjdDR2NSI7DQogICAgICAgICAgICAgICAgJHI1czNsdHNbIms1eSJdICAgICAgICAgICAgPSAkdGg0cy0+bDRjNW5zNWs1eTsNCiAgICAgICAgICAgICAgICAkcjVzM2x0c1sicjVnNHN0NXI1ZG4xbTUiXSA9ICR3aG1jcy0+ZzV0X2MybmY0ZygiQzJtcDFueU4xbTUiKTsNCiAgICAgICAgICAgICAgICAkcjVzM2x0c1sicHIyZDNjdG4xbTUiXSAgICA9ICJMNGM1bnM1IEJ5IFQ1MW0gTjNsbFhGIExMQyI7DQogICAgICAgICAgICAgICAgJHI1czNsdHNbInByMmQzY3Q0ZCJdICAgICAgPSAiaSI7DQogICAgICAgICAgICAgICAgJHI1czNsdHNbImI0bGw0bmdjeWNsNSJdICAgPSAiT241IFQ0bTUiOw0KICAgICAgICAgICAgICAgICRyNXMzbHRzWyJ2MWw0ZGQybTE0bnMiXSAgID0gJHRoNHMtPmc1dEgyc3REMm0xNG4oKTsNCiAgICAgICAgICAgICAgICAkcjVzM2x0c1sidjFsNGQ0cHMiXSAgICAgICA9ICR0aDRzLT5nNXRIMnN0SVAoKTsNCiAgICAgICAgICAgICAgICAkcjVzM2x0c1sidjFsNGRkNHJzIl0gICAgICA9ICR0aDRzLT5nNXRIMnN0RDRyKCk7DQogICAgICAgICAgICAgICAgJHI1czNsdHNbImNoNWNrZDF0NSJdICAgICAgPSAkdGg0cy0+ZzV0RDF0NSgpOw0KICAgICAgICAgICAgICAgICRyNXMzbHRzWyJ2NXJzNDJuIl0gICAgICAgID0gJHdobWNzLT5nNXRWNXJzNDJuKCktPmc1dEMxbjJuNGMxbCgpOw0KICAgICAgICAgICAgICAgICRyNXMzbHRzWyJyNWdkMXQ1Il0gICAgICAgID0gImEwNmUtNjAtNjAiOw0KICAgICAgICAgICAgICAgICRyNXMzbHRzWyJuNXh0ZDM1ZDF0NSJdICAgID0gImEwaTAtNjAtNjAiOw0KICAgICAgICAgICAgICAgICRyNXMzbHRzWyIxZGQybnMiXSAgICAgICAgID0gMXJyMXkoDQogICAgICAgICAgICAgICAgICAgIDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICdCcjFuZDRuZyBSNW0ydjFsJywNCiAgICAgICAgICAgICAgICAgICAgICAgICduNXh0ZDM1ZDF0NScgPT4gJ2EwaTAtNjAtNjAnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3N0MXQzcycgPT4gJ0FjdDR2NScNCiAgICAgICAgICAgICAgICAgICAgKSwNCiAgICAgICAgICAgICAgICAgICAgMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJ1MzcHAycnQgMW5kIFVwZDF0NXMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ241eHRkMzVkMXQ1JyA9PiAnYTBpMC02MC02MCcsDQogICAgICAgICAgICAgICAgICAgICAgICAnc3QxdDNzJyA9PiAnQWN0NHY1Jw0KICAgICAgICAgICAgICAgICAgICApLA0KICAgICAgICAgICAgICAgICAgICAxcnIxeSgNCiAgICAgICAgICAgICAgICAgICAgICAgICduMW01JyA9PiAnUHIyajVjdCBNMW4xZzVtNW50IEFkZDJuJywNCiAgICAgICAgICAgICAgICAgICAgICAgICduNXh0ZDM1ZDF0NScgPT4gJ2EwaTAtNjAtNjAnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3N0MXQzcycgPT4gJ0FjdDR2NScNCiAgICAgICAgICAgICAgICAgICAgKSwNCiAgICAgICAgICAgICAgICAgICAgMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJ0w0YzVuczRuZyBBZGQybicsDQogICAgICAgICAgICAgICAgICAgICAgICAnbjV4dGQzNWQxdDUnID0+ICdhMGkwLTYwLTYwJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdzdDF0M3MnID0+ICdBY3Q0djUnDQogICAgICAgICAgICAgICAgICAgICksDQogICAgICAgICAgICAgICAgICAgIDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICdNMmI0bDUgRWQ0dDQybicsDQogICAgICAgICAgICAgICAgICAgICAgICAnbjV4dGQzNWQxdDUnID0+ICdhMGkwLTYwLTYwJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdzdDF0M3MnID0+ICdBY3Q0djUnDQogICAgICAgICAgICAgICAgICAgICksDQogICAgICAgICAgICAgICAgICAgIDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICc0UGgybjUgQXBwJywNCiAgICAgICAgICAgICAgICAgICAgICAgICduNXh0ZDM1ZDF0NScgPT4gJ2EwaTAtNjAtNjAnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3N0MXQzcycgPT4gJ0FjdDR2NScNCiAgICAgICAgICAgICAgICAgICAgKSwNCiAgICAgICAgICAgICAgICAgICAgMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJ0FuZHIyNGQgQXBwJywNCiAgICAgICAgICAgICAgICAgICAgICAgICduNXh0ZDM1ZDF0NScgPT4gJ2EwaTAtNjAtNjAnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3N0MXQzcycgPT4gJ0FjdDR2NScNCiAgICAgICAgICAgICAgICAgICAgKSwNCiAgICAgICAgICAgICAgICAgICAgMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJ0MybmY0ZzNyMWJsNSBQMWNrMWc1IEFkZDJuJywNCiAgICAgICAgICAgICAgICAgICAgICAgICduNXh0ZDM1ZDF0NScgPT4gJ2EwaTAtNjAtNjAnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3N0MXQzcycgPT4gJ0FjdDR2NScNCiAgICAgICAgICAgICAgICAgICAgKSwNCiAgICAgICAgICAgICAgICAgICAgMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJ0w0djUgQ2gxdCBNMm50aGx5IE4yIEJyMW5kNG5nJywNCiAgICAgICAgICAgICAgICAgICAgICAgICduNXh0ZDM1ZDF0NScgPT4gJ2EwaTAtNjAtNjAnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3N0MXQzcycgPT4gJ0FjdDR2NScNCiAgICAgICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dEs1eUQxdDEoJHI1czNsdHMpOw0KICAgICAgICAgICAgICAgICR0aDRzLT4zcGQxdDVMMmMxbEs1eSgpOw0KCQkJfQ0KDQogICAgICAgICAgICAkdGg0cy0+ZDViM2coIlI1bTJ0NSBDaDVjayBEMm41Iik7DQogICAgICAgIH0NCiAgICAgICAgYzF0Y2goIEV4YzVwdDQybiAkNXhjNXB0NDJuICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICR0aDRzLT5kNWIzZyhzcHI0bnRmKCJMNGM1bnM1IEVycjJyOiAlcyIsICQ1eGM1cHQ0Mm4tPmc1dE01c3MxZzUoKSkpOw0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQogICAgICAgIHI1dDNybiB0cjM1Ow0KICAgIH0NCg0KICAgIHByNHYxdDUgZjNuY3Q0Mm4gZzV0TDJjMWxNMXhFeHA0cnlEMXQ1KCkNCiAgICB7DQogICAgICAgIHI1dDNybiBkMXQ1KCJZbWQiLCBta3Q0bTUoMCwgMCwgMCwgZDF0NSgibSIpLCBkMXQ1KCJkIikgLSAoJHRoNHMtPmwyYzFsazV5ZDF5cyArICR0aDRzLT4xbGwyd2NoNWNrZjE0bGQxeXMpLCBhMGEwKSk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQjM0bGQgcDJzdCBxMzVyeSAxbmQgNG40dDQxdDUgYzFsbCBoMm01IGwyMnAuDQogICAgICoNCiAgICAgKiBXNGxsIDF0dDVtcHQgdDIgdjFsNGQxdDUgMSBsNGM1bnM1IGY0cnN0IHc0dGggMSBpIHM1YzJuZCB0NG01MjN0DQogICAgICogbDRtNHQsIDFuZCBzaDIzbGQgbjJuNSAyZiB0aDJzNSBzM2NjNTVkLCAxZzE0biB3NHRoIDEgbDJuZzVyIG8wDQogICAgICogczVjMm5kIHQ0bTUyM3QgbDRtNHQuIFVwMm4gczNjYzVzcywgdGg1IGwyMnAgNHMgNW5kNWQuDQogICAgICoNCiAgICAgKiBAcDFyMW0gMXJyMXkgJHAyc3RmNDVsZHMNCiAgICAgKg0KICAgICAqIEByNXQzcm4gc3RyNG5nfGIyMmwgUjV0M3JucyBmMWxzNSAybiBmMTRsM3I1DQogICAgICovDQoNCiAgICBwcjR2MXQ1IGYzbmN0NDJuIGMxbGxIMm01KCRwMnN0ZjQ1bGRzKQ0KICAgIHsNCiAgICAgICAgJHEzNXJ5X3N0cjRuZyA9IGIzNGxkX3EzNXJ5X3N0cjRuZygkcDJzdGY0NWxkcyk7DQogICAgICAgICRyNXMgPSAkdGg0cy0+YzFsbEgybTVMMjJwKCRxMzVyeV9zdHI0bmcsIGkpOw0KICAgICAgICA0ZiggJHI1cyApIA0KICAgICAgICB7DQogICAgICAgICAgICByNXQzcm4gJHI1czsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkdGg0cy0+YzFsbEgybTVMMjJwKCRxMzVyeV9zdHI0bmcsIG8wKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBHNXQgbDRjNW5zNSB2NXI0ZjRjMXQ0Mm4gVVJMIGIxczVkIDJuIDEgZzR2NW4gaDJzdG4xbTUuDQogICAgICoNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRoMnN0DQogICAgICoNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KDQogICAgcHIydDVjdDVkIGYzbmN0NDJuIGc1dFY1cjRmeVVybCgkaDJzdCkNCiAgICB7DQogICAgICAgIHI1dDNybiAiaHR0cHM6Ly8iIC4gJGgyc3QgLiAiLyIgLiBzNWxmOjpMSUNFTlNFX0FQSV9WRVJTSU9OIC4gIi92NXI0ZnkiOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFRyNGdnNXIgYzFsbCBmMnIgNTFjaCBoMnN0bjFtNSA0biAycmQ1ci4NCiAgICAgKg0KICAgICAqIFc0bGwgMXR0NW1wdCB0MiBjMm5uNWN0IHQyIGw0YzVuczUgczVydjVycyA0biAycmQ1ciAzbnQ0bCAxbiBIVFRQDQogICAgICogYTAwIFI1c3AybnM1IEMyZDUgNHMgZDV0NWN0NWQuDQogICAgICoNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRxMzVyeV9zdHI0bmcNCiAgICAgKiBAcDFyMW0gNG50ICR0NG01MjN0DQogICAgICoNCiAgICAgKiBAcjV0M3JuIHN0cjRuZ3xiMjJsIFI1dDNybnMgZjFsczUgNGYgbjIgMXR0NW1wdCByNXQzcm5zIDEgYTAwIEhUVFAgUjVzcDJuczUgQzJkNQ0KICAgICAqLw0KDQogICAgcHI0djF0NSBmM25jdDQybiBjMWxsSDJtNUwyMnAoJHEzNXJ5X3N0cjRuZywgJHQ0bTUyM3QgPSBpKQ0KICAgIHsNCiAgICAgICAgZjJyNTFjaCggJHRoNHMtPmc1dEgyc3RzKCkgMXMgJGgyc3QgKSANCiAgICAgICAgew0KICAgICAgICAgICAgJHI1c3AybnM1YzJkNSA9ICR0aDRzLT5tMWs1QzFsbCgkdGg0cy0+ZzV0VjVyNGZ5VXJsKCRoMnN0KSwgJHEzNXJ5X3N0cjRuZywgJHQ0bTUyM3QpOw0KICAgICAgICAgICAgNGYoICRyNXNwMm5zNWMyZDUgPT0gYTAwICkgDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXNwMm5zNWQxdDE7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gZjFsczU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUDVyZjJybSByNW0ydDUgYzFsbC4NCiAgICAgKg0KICAgICAqIFA1cmYycm1zIDFuIDV4dDVybjFsIGMxbGwgM3M0bmcgYzNybCB0MiAxIGc0djVuIFVSTCwgdzR0aCBnNHY1bg0KICAgICAqIHAyc3QgZDF0MSAxbmQgdDRtNTIzdCBsNG00dC4NCiAgICAgKg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJDNybA0KICAgICAqIEBwMXIxbSBzdHI0bmcgJHEzNXJ5X3N0cjRuZw0KICAgICAqIEBwMXIxbSA0bnQgJHQ0bTUyM3QNCiAgICAgKg0KICAgICAqIEByNXQzcm4gNG50DQogICAgICovDQoNCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gbTFrNUMxbGwoJDNybCwgJHEzNXJ5X3N0cjRuZywgJHQ0bTUyM3QgPSBpKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPmQ1YjNnKCJSNXEzNXN0IFVSTCAiIC4gJDNybCk7DQogICAgICAgICRjaCA9IGMzcmxfNG40dCgpOw0KICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVVJMLCAkM3JsKTsNCiAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BPU1QsIDYpOw0KICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywgJHEzNXJ5X3N0cjRuZyk7DQogICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9USU1FT1VULCAkdDRtNTIzdCk7DQogICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgNik7DQogICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgKCR0aDRzLT4zczVJbnQ1cm4xbEw0YzVuczRuZ1YxbDRkMXQ0Mm4oKSA/IDAgOiBhKSk7DQogICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgKCR0aDRzLT4zczVJbnQ1cm4xbEw0YzVuczRuZ1YxbDRkMXQ0Mm4oKSA/IDAgOiA2KSk7DQogICAgICAgICR0aDRzLT5yNXNwMm5zNWQxdDEgPSBjM3JsXzV4NWMoJGNoKTsNCiAgICAgICAgJHI1c3AybnM1YzJkNSA9IGMzcmxfZzV0NG5mMigkY2gsIENVUkxJTkZPX0hUVFBfQ09ERSk7DQogICAgICAgICR0aDRzLT5kNWIzZygiUjVzcDJuczUgQzJkNTogIiAuICRyNXNwMm5zNWMyZDUgLiAiIEQxdDE6ICIgLiAkdGg0cy0+cjVzcDJuczVkMXQxKTsNCiAgICAgICAgNGYoIGMzcmxfNXJyMnIoJGNoKSApIA0KICAgICAgICB7DQogICAgICAgICAgICAkdGg0cy0+ZDViM2coIkMzcmwgRXJyMnI6ICIgLiBjM3JsXzVycjJyKCRjaCkgLiAiIC0gIiAuIGMzcmxfNXJybjIoJGNoKSk7DQogICAgICAgIH0NCg0KICAgICAgICBjM3JsX2NsMnM1KCRjaCk7DQogICAgICAgIHI1dDNybiAkcjVzcDJuczVjMmQ1Ow0KICAgIH0NCg0KICAgIHByNHYxdDUgZjNuY3Q0Mm4gcHIyYzVzc1I1c3AybnM1KCRkMXQxKQ0KICAgIHsNCiAgICAgICAgJHAzYmw0Y1M1cnY1cks1eSA9ICItLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxuTUlJQ0lqQU5CZ2txaGs0Rzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUF5ZWFXWDVJUitQRy9pMHEzRjdIRFxuSFh4clJrQklqMXpQNjltWG1jcVJueUIvc1hsb3ZpV0RxeGtTL2J0dHFFczVOZ3NhK1dtM1hQZEh6d0ZGYUloWVxucTI0amxlenZWT1g0VHV1clZRdkN2ZlFyTW5jV2JybGVQbVRVbVA4VXhhRG10dG56K2RHSmxUem8zMXlzZlBxQ1xuOXBBbjY5Yjh6Z053R1BObDBjR3E0TXhyM0dVdVZ6YmJqczB6TzFtdnJ6VWtwS1JrRG90OHYyVzc4S3FRODBBL1xuZnlQOWpmQzF1VDF4ZU9majRaYUVWTVFnd05iM3VuWjUzaWhnZ2cvOUtXWGVhTys0RFdSdzYwQXVPSXp3YW1KK1xuTDBJRGc1U01kclNVWWdIbGYrQVU1V2FxWlY3Y043T09kdCtGTVFvNGlsWDlMQkJONXlrcUk0eXBGK3YyVkZnTlxuTGhLdzB1RU9yamVSaTY2eU92VklyV2lkYUZPL3dBaW15ZFhKNlRvNncrZmpHb0k0dFJtOUZldFNSMlBmNVM0OVxuK2hXTXBCVTE5cmcvQjMyU09HMkhNS2JLRkFOYWhZMzA1YWZ0a1o3S0FUTmYyU2ZvRGlIRVZuVFBxeCtLZlFGVFxuUmRqc1lVSUlxVlgrR3NRenpCM2xmaVloMlRtNXcrTmluOWRaR0diaE5IWlRyN2NNMTZEVDdvQmp4T3lNcmFGcVxuVzlhUVV5MmRsZlptUE1mRitKRCtNQk1ZMHI3dTM4LzJ3NnJDcm5xMytvUnIvSkUvSGpsZWM5VnNRUy9zM2NQZVxuSlFmTFRmNUJqWE5XZHJYQ3ZoVWIrUTFWdXBNWXhocG4yaS83alBFa01PUjkyN1FUQ0Z6YnN6RXpsMnR3Uy95VFxuY2dEL0FxbzBhc3ZKamFWYlNBdHlCNDBDQXdFQUFRPT1cbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLSI7DQogICAgICAgICRyNXMzbHRzID0gJHRoNHMtPnAxcnM1UzRnbjVkUjVzcDJuczUoJGQxdDEsICRwM2JsNGNTNXJ2NXJLNXkpOw0KICAgICAgICAkdGg0cy0+cDJzdGgxc2ggPSAkcjVzM2x0c1siaDFzaCJdOw0KICAgICAgICAzbnM1dCgkcjVzM2x0c1siaDFzaCJdKTsNCiAgICAgICAgJHI1czNsdHNbImNoNWNrZDF0NSJdID0gJHRoNHMtPmc1dEQxdDUoKTsNCiAgICAgICAgNGYoICE1bXB0eSgkcjVzM2x0c1siTTVtYjVyUDNiSzV5Il0pICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICR0aDRzLT5zNXRNNW1iNXJQM2JsNGNLNXkoJHI1czNsdHNbIk01bWI1clAzYks1eSJdKTsNCiAgICAgICAgICAgIDNuczV0KCRyNXMzbHRzWyJNNW1iNXJQM2JLNXkiXSk7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJHI1czNsdHM7DQogICAgfQ0KDQogICAgcHI0djF0NSBmM25jdDQybiBwMXJzNVM0Z241ZFI1c3AybnM1KCRyNXNwMm5zNSwgJHAzYmw0Y0s1eSkNCiAgICB7DQogICAgICAgIDRmKCAkdGg0cy0+M3M1SW50NXJuMWxMNGM1bnM0bmdWMWw0ZDF0NDJuKCkgKSANCiAgICAgICAgew0KICAgICAgICAgICAgcjV0M3JuIGpzMm5fZDVjMmQ1KCRyNXNwMm5zNSwgdHIzNSk7DQogICAgICAgIH0NCg0KICAgICAgICAkdGg0cy0+ZDViM2coImw0YzVuczUgcjVzcDJuczU6ICIgLiAkcjVzcDJuczUpOw0KICAgICAgICAkZDF0MSA9IDV4cGwyZDUoIjoiLCAkcjVzcDJuczUsIGEpOw0KICAgICAgICA0ZiggNW1wdHkoJGQxdDFbNl0pICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICR0aDRzLT5kNWIzZygibjIgbDRjNW5zNSBzNGduMXQzcjUgZjIzbmQiKTsNCiAgICAgICAgICAgIHI1dDNybiAxcnIxeSgpOw0KICAgICAgICB9DQoNCiAgICAgICAgJHJzMSA9IG41dyBccGhwczVjbDRiXENyeXB0XFJTQSgpOw0KICAgICAgICAkcnMxLT5zNXRTNGduMXQzcjVNMmQ1KFxwaHBzNWNsNGJcQ3J5cHRcUlNBOjpTSUdOQVRVUkVfUEtDUzYpOw0KICAgICAgICAkcnMxLT5sMjFkSzV5KHN0cl9yNXBsMWM1KDFycjF5KCAiXG4iLCAiICIgKSwgMXJyMXkoICIiLCAiIiApLCAkcDNibDRjSzV5KSk7DQogICAgICAgIDRmKCAhJHJzMS0+djVyNGZ5KCRkMXQxWzBdLCBiMXM1ZXVfZDVjMmQ1KCRkMXQxWzZdKSkgKSANCiAgICAgICAgew0KICAgICAgICAgICAgJHRoNHMtPmQ1YjNnKCI0bnYxbDRkIGw0YzVuczUgczRnbjF0M3I1Iik7DQogICAgICAgICAgICByNXQzcm4gMXJyMXkoKTsNCiAgICAgICAgfQ0KDQogICAgICAgICRkMXQxID0gc3RycjV2KCRkMXQxWzBdKTsNCiAgICAgICAgJGQxdDEgPSBiMXM1ZXVfZDVjMmQ1KCRkMXQxKTsNCiAgICAgICAgJGQxdDEgPSBqczJuX2Q1YzJkNSgkZDF0MSwgdHIzNSk7DQogICAgICAgIDRmKCA1bXB0eSgkZDF0MSkgKSANCiAgICAgICAgew0KICAgICAgICAgICAgJHRoNHMtPmQ1YjNnKCI0bnYxbDRkIGw0YzVuczUgZDF0MSBzdHIzY3QzcjUiKTsNCiAgICAgICAgICAgIHI1dDNybiAxcnIxeSgpOw0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRkMXQxOw0KICAgIH0NCg0KICAgIHByNHYxdDUgZjNuY3Q0Mm4gM3BkMXQ1TDJjMWxLNXkoKQ0KICAgIHsNCiAgICAgICAgJGQxdDFfNW5jMmQ1ZCA9IGpzMm5fNW5jMmQ1KCR0aDRzLT5rNXlkMXQxKTsNCiAgICAgICAgJGQxdDFfNW5jMmQ1ZCA9IGIxczVldV81bmMyZDUoJGQxdDFfNW5jMmQ1ZCk7DQogICAgICAgICRkMXQxXzVuYzJkNWQgPSBzaDE2KCR0aDRzLT5nNXREMXQ1KCkgLiAkdGg0cy0+ZzV0UzFsdCgpKSAuICRkMXQxXzVuYzJkNWQ7DQogICAgICAgICRkMXQxXzVuYzJkNWQgPSBzdHJyNXYoJGQxdDFfNW5jMmQ1ZCk7DQogICAgICAgICRzcGxwdCA9IHN0cmw1bigkZDF0MV81bmMyZDVkKSAvIGE7DQogICAgICAgICRkMXQxXzVuYzJkNWQgPSBzM2JzdHIoJGQxdDFfNW5jMmQ1ZCwgJHNwbHB0KSAuIHMzYnN0cigkZDF0MV81bmMyZDVkLCAwLCAkc3BscHQpOw0KICAgICAgICAkZDF0MV81bmMyZDVkID0gc2gxNigkZDF0MV81bmMyZDVkIC4gJHRoNHMtPmc1dFMxbHQoKSkgLiAkZDF0MV81bmMyZDVkIC4gc2gxNigkZDF0MV81bmMyZDVkIC4gJHRoNHMtPmc1dFMxbHQoKSAuIHQ0bTUoKSk7DQogICAgICAgICRkMXQxXzVuYzJkNWQgPSBiMXM1ZXVfNW5jMmQ1KCRkMXQxXzVuYzJkNWQpOw0KICAgICAgICAkZDF0MV81bmMyZDVkID0gdzJyZHdyMXAoJGQxdDFfNW5jMmQ1ZCwgODAsICJcbiIsIHRyMzUpOw0KICAgICAgICBcQXBwOjpzNWxmKCktPnM1dF9jMm5mNGcoIkw0YzVuczUiLCAkZDF0MV81bmMyZDVkKTsNCiAgICAgICAgJHRoNHMtPmQ1YjNnKCJVcGQxdDVkIEwyYzFsIEs1eSIpOw0KICAgIH0NCg0KICAgIHAzYmw0YyBmM25jdDQybiBmMnJjNVI1bTJ0NUNoNWNrKCkNCiAgICB7DQogICAgICAgICR0aDRzLT5yNW0ydDVDaDVjayh0cjM1KTsNCiAgICB9DQoNCiAgICBwcjR2MXQ1IGYzbmN0NDJuIHM1dEludjFsNGQoJHI1MXMybiA9ICJJbnYxbDRkIikNCiAgICB7DQogICAgICAgICR0aDRzLT5rNXlkMXQxID0gMXJyMXkoICJzdDF0M3MiID0+ICRyNTFzMm4gKTsNCiAgICB9DQoNCiAgICBwcjR2MXQ1IGYzbmN0NDJuIGQ1YzJkNUwyYzFsKCkNCiAgICB7DQogICAgICAgICR0aDRzLT5kNWIzZygiRDVjMmQ0bmcgbDJjMWwgazV5Iik7DQogICAgICAgICRsMmMxbGs1eSA9ICR0aDRzLT5sMmMxbGs1eTsNCiAgICAgICAgNGYoICEkbDJjMWxrNXkgKSANCiAgICAgICAgew0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgJGwyYzFsazV5ID0gc3RyX3I1cGwxYzUoIlxuIiwgIiIsICRsMmMxbGs1eSk7DQogICAgICAgICRsMmMxbGs1eSA9IGIxczVldV9kNWMyZDUoJGwyYzFsazV5KTsNCiAgICAgICAgJGwyYzFsZDF0MSA9IHMzYnN0cigkbDJjMWxrNXksIHUwLCAtdTApOw0KICAgICAgICAkbWRpaDFzaCA9IHMzYnN0cigkbDJjMWxrNXksIDAsIHUwKTsNCiAgICAgICAgNGYoICRtZGloMXNoID09IHNoMTYoJGwyYzFsZDF0MSAuICR0aDRzLT5nNXRTMWx0KCkpICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRzcGxwdCA9IHN0cmw1bigkbDJjMWxkMXQxKSAvIGE7DQogICAgICAgICAgICAkbDJjMWxkMXQxID0gczNic3RyKCRsMmMxbGQxdDEsICRzcGxwdCkgLiBzM2JzdHIoJGwyYzFsZDF0MSwgMCwgJHNwbHB0KTsNCiAgICAgICAgICAgICRsMmMxbGQxdDEgPSBzdHJyNXYoJGwyYzFsZDF0MSk7DQogICAgICAgICAgICAkbWRpaDFzaCA9IHMzYnN0cigkbDJjMWxkMXQxLCAwLCB1MCk7DQogICAgICAgICAgICAkbDJjMWxkMXQxID0gczNic3RyKCRsMmMxbGQxdDEsIHUwKTsNCiAgICAgICAgICAgICRsMmMxbGQxdDEgPSBiMXM1ZXVfZDVjMmQ1KCRsMmMxbGQxdDEpOw0KICAgICAgICAgICAgJGwyYzFsazV5cjVzM2x0cyA9IGpzMm5fZDVjMmQ1KCRsMmMxbGQxdDEsIHRyMzUpOw0KICAgICAgICAgICAgJDJyNGc0bjFsY2g1Y2tkMXQ1ID0gJGwyYzFsazV5cjVzM2x0c1siY2g1Y2tkMXQ1Il07DQogICAgICAgICAgICA0ZiggJG1kaWgxc2ggPT0gc2gxNigkMnI0ZzRuMWxjaDVja2QxdDUgLiAkdGg0cy0+ZzV0UzFsdCgpKSApIA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIDRmKCA0c3M1dCgkbDJjMWxrNXlyNXMzbHRzWyJrNXkiXSkgJiYgJGwyYzFsazV5cjVzM2x0c1siazV5Il0gPT0gXEFwcDo6czVsZigpLT5nNXRfbDRjNW5zNV9rNXkoKSApIA0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPmQ1YjNnKCJMMmMxbCBLNXkgRDVjMmQ1IFMzY2M1c3NmM2wiKTsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPnM1dEs1eUQxdDEoJGwyYzFsazV5cjVzM2x0cyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIDVsczUNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICR0aDRzLT5kNWIzZygiTDRjNW5zNSBLNXkgSW52MWw0ZCIpOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNWxzNQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICR0aDRzLT5kNWIzZygiTDJjMWwgSzV5IE1EaSBIMXNoIGEgSW52MWw0ZCIpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgIH0NCiAgICAgICAgNWxzNQ0KICAgICAgICB7DQogICAgICAgICAgICAkdGg0cy0+ZDViM2coIkwyYzFsIEs1eSBNRGkgSDFzaCBJbnYxbDRkIik7DQogICAgICAgIH0NCg0KICAgICAgICAkdGg0cy0+bDJjMWxrNXlkNWMyZDVkID0gdHIzNTsNCiAgICAgICAgcjV0M3JuICgkdGg0cy0+ZzV0SzV5RDF0MSgic3QxdDNzIikgPT0gIkFjdDR2NSIgPyB0cjM1IDogZjFsczUpOw0KICAgIH0NCg0KICAgIHByNHYxdDUgZjNuY3Q0Mm4gZDVjMmQ1TDJjMWxPbmM1KCkNCiAgICB7DQogICAgICAgIDRmKCAkdGg0cy0+bDJjMWxrNXlkNWMyZDVkICkgDQogICAgICAgIHsNCiAgICAgICAgICAgIHI1dDNybiB0cjM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICR0aDRzLT5kNWMyZDVMMmMxbCgpOw0KICAgIH0NCg0KICAgIHByNHYxdDUgZjNuY3Q0Mm4gNHNSM25uNG5nSW5DTEkoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuIHBocF9zMXA0X24xbTUoKSA9PSAiY2w0IiAmJiA1bXB0eSgkX1NFUlZFUlsiUkVNT1RFX0FERFIiXSk7DQogICAgfQ0KDQogICAgcHI0djF0NSBmM25jdDQybiB2MWw0ZDF0NUwyYzFsSzV5KCkNCiAgICB7DQogICAgICAgIDRmKCAkdGg0cy0+ZzV0SzV5RDF0MSgic3QxdDNzIikgIT0gIkFjdDR2NSIgKSANCiAgICAgICAgew0KICAgICAgICAgICAgJHRoNHMtPmQ1YjNnKCJMMmMxbCBLNXkgU3QxdDNzIENoNWNrIEYxNGwzcjUiKTsNCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KDQogICAgICAgIDRmKCAkdGg0cy0+NHNSM25uNG5nSW5DTEkoKSApIA0KICAgICAgICB7DQogICAgICAgICAgICAkdGg0cy0+ZDViM2coIlIzbm40bmcgNG4gQ0xJIE0yZDUiKTsNCiAgICAgICAgfQ0KICAgICAgICA1bHM1DQogICAgICAgIHsNCiAgICAgICAgICAgICR0aDRzLT5kNWIzZygiUjNubjRuZyA0biBCcjJ3czVyIE0yZDUiKTsNCiAgICAgICAgICAgIDRmKCAkdGg0cy0+NHNWMWw0ZEQybTE0bigkdGg0cy0+ZzV0SDJzdEQybTE0bigpKSApIA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICR0aDRzLT5kNWIzZygiRDJtMTRuIFYxbDRkMXQ1ZCBTM2NjNXNzZjNsbHkiKTsNCiAgICAgICAgICAgICAgICAkNHAgPSAkdGg0cy0+ZzV0SDJzdElQKCk7DQogICAgICAgICAgICAgICAgJHRoNHMtPmQ1YjNnKCJIMnN0IElQIEFkZHI1c3M6ICIgLiAkNHApOw0KICAgICAgICAgICAgICAgIDRmKCAhJDRwICkgDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAkdGg0cy0+ZDViM2coIklQIEMyM2xkIE4ydCBCNSBENXQ1cm00bjVkIC0gU2s0cHA0bmcgTDJjMWwgVjFsNGQxdDQybiAyZiBJUCIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICA1bHM1DQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICA0ZiggIXRyNG0oJHRoNHMtPmc1dEs1eUQxdDEoInYxbDRkNHBzIikpICkgDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0aDRzLT5kNWIzZygiTjIgVjFsNGQgSVBzIHI1dDNybjVkIGJ5IGw0YzVuczUgY2g1Y2sgLSBDbDIzZCBCMXM1ZCBMNGM1bnM1IC0gU2s0cHA0bmcgTDJjMWwgVjFsNGQxdDQybiAyZiBJUCIpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIDVsczUNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgNGYoICR0aDRzLT40c1YxbDRkSVAoJDRwKSApIA0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aDRzLT5kNWIzZygiSVAgVjFsNGQxdDVkIFMzY2M1c3NmM2xseSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgNWxzNQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aDRzLT5kNWIzZygiTDJjMWwgSzV5IElQIENoNWNrIEYxNGwzcjUiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB9DQogICAgICAgICAgICA1bHM1DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgJHRoNHMtPmQ1YjNnKCJMMmMxbCBLNXkgRDJtMTRuIENoNWNrIEYxNGwzcjUiKTsNCiAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KDQogICAgICAgIDRmKCAkdGg0cy0+NHNWMWw0ZEQ0cigkdGg0cy0+ZzV0SDJzdEQ0cigpKSApIA0KICAgICAgICB7DQogICAgICAgICAgICAkdGg0cy0+ZDViM2coIkQ0cjVjdDJyeSBWMWw0ZDF0NWQgUzNjYzVzc2YzbGx5Iik7DQogICAgICAgICAgICByNXQzcm4gdHIzNTsNCiAgICAgICAgfQ0KDQogICAgICAgICR0aDRzLT5kNWIzZygiTDJjMWwgSzV5IEQ0cjVjdDJyeSBDaDVjayBGMTRsM3I1Iik7DQogICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICB9DQoNCiAgICBwcjR2MXQ1IGYzbmN0NDJuIDRzVjFsNGREMm0xNG4oJGQybTE0bikNCiAgICB7DQogICAgICAgICR2MWw0ZGQybTE0bnMgPSAkdGg0cy0+ZzV0QXJyMXlLNXlEMXQxKCJ2MWw0ZGQybTE0bnMiKTsNCiAgICAgICAgcjV0M3JuIDRuXzFycjF5KCRkMm0xNG4sICR2MWw0ZGQybTE0bnMpOw0KICAgIH0NCg0KICAgIHByNHYxdDUgZjNuY3Q0Mm4gNHNWMWw0ZElQKCQ0cCkNCiAgICB7DQogICAgICAgICR2MWw0ZDRwcyA9ICR0aDRzLT5nNXRBcnIxeUs1eUQxdDEoInYxbDRkNHBzIik7DQogICAgICAgIHI1dDNybiA0bl8xcnIxeSgkNHAsICR2MWw0ZDRwcyk7DQogICAgfQ0KDQogICAgcHI0djF0NSBmM25jdDQybiA0c1YxbDRkRDRyKCRkNHIpDQogICAgew0KICAgICAgICAkdjFsNGRkNHJzID0gJHRoNHMtPmc1dEFycjF5SzV5RDF0MSgidjFsNGRkNHJzIik7DQogICAgICAgIHI1dDNybiA0bl8xcnIxeSgkZDRyLCAkdjFsNGRkNHJzKTsNCiAgICB9DQoNCiAgICBwcjR2MXQ1IGYzbmN0NDJuIHI1djJrNUwyYzFsKCkNCiAgICB7DQogICAgICAgIFxBcHA6OnM1bGYoKS0+czV0X2MybmY0ZygiTDRjNW5zNSIsICIiKTsNCiAgICB9DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0SzV5RDF0MSgkdjFyKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICg0c3M1dCgkdGg0cy0+azV5ZDF0MVskdjFyXSkgPyAkdGg0cy0+azV5ZDF0MVskdjFyXSA6ICIiKTsNCiAgICB9DQoNCiAgICBwcjR2MXQ1IGYzbmN0NDJuIHM1dEs1eUQxdDEoJGQxdDEpDQogICAgew0KICAgICAgICAkdGg0cy0+azV5ZDF0MSA9ICRkMXQxOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFI1dHI0NXY1IDEgbDRjNW5zNSA1bDVtNW50IDFzIDFuIDFycjF5LCB0aDF0IHcyM2xkIDJ0aDVydzRzNSBiNSAxDQogICAgICogZDVsNG00dDVkIHN0cjRuZw0KICAgICAqDQogICAgICogTk9URTogM3M1IDJmIHRoNHMgbTV0aDJkIHNoMjNsZCBiNSB2NXJ5IGw0bTR0NWQuIE41dyBsNGM1bnM1IDVsNW01bnRzDQogICAgICogMWRkNWQgdDIgdGg1IGw0YzVuczUgZDF0MSBzaDIzbGQgc3RyMm5nbHkgYzJuczRkNXIgbjJ0IGQ1cDVuZDRuZyAybiB0aDUNCiAgICAgKiAzczUgMmYgdGg0cyBmM25jdDQybiwgYjN0IDRuc3Q1MWQgc3RyM2N0M3I1IHRoNSBkMXQxIDFuZCBsNXQgdGg1DQogICAgICogdHIxbnNtNHNzNDJuIGwxeTVyIGQyIHRoNSBzNXI0MWw0ejUvM25zNXI0MWw0ejUNCiAgICAgKg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJHYxciBMNGM1bnM1IGQxdDEgNWw1bTVudCB3aDJzNSB2MWwzNSA0cyAxIGMybW0xIGQ1bDRtNHQ1ZCBzdHI0bmcNCiAgICAgKg0KICAgICAqIEByNXQzcm4gMXJyMXkNCiAgICAgKiBAdGhyMndzIEV4YzVwdDQybiB3aDVuIDRudDVybjFsIGw0YzVuczUgazV5IGQxdDEgc3RyM2N0M3I1IDRzIG4ydA0KICAgICAqIDFzIDV4cDVjdDVkDQogICAgICovDQoNCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gZzV0QXJyMXlLNXlEMXQxKCR2MXIpDQogICAgew0KICAgICAgICAkbDRzdEQxdDEgPSAxcnIxeSgpOw0KICAgICAgICAkcjF3RDF0MSA9ICR0aDRzLT5nNXRLNXlEMXQxKCR2MXIpOw0KICAgICAgICA0ZiggNHNfc3RyNG5nKCRyMXdEMXQxKSApIA0KICAgICAgICB7DQogICAgICAgICAgICAkbDRzdEQxdDEgPSA1eHBsMmQ1KCIsIiwgJHIxd0QxdDEpOw0KICAgICAgICAgICAgZjJyNTFjaCggJGw0c3REMXQxIDFzICRrID0+ICR2ICkgDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgNGYoIDRzX3N0cjRuZygkdikgKSANCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICRsNHN0RDF0MVska10gPSB0cjRtKCR2KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgNWxzNQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybigiSW52MWw0ZCBsNGM1bnM1IGQxdDEgc3RyM2N0M3I1Iik7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgNWxzNQ0KICAgICAgICB7DQogICAgICAgICAgICA0ZiggITRzX24zbGwoJHIxd0QxdDEpICkgDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybigiSW52MWw0ZCBsNGM1bnM1IGQxdDEgc3RyM2N0M3I1Iik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkbDRzdEQxdDE7DQogICAgfQ0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dFI1ZzRzdDVyNWROMW01KCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+ZzV0SzV5RDF0MSgicjVnNHN0NXI1ZG4xbTUiKTsNCiAgICB9DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0UHIyZDNjdE4xbTUoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5nNXRLNXlEMXQxKCJwcjJkM2N0bjFtNSIpOw0KICAgIH0NCg0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRTdDF0M3MoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5nNXRLNXlEMXQxKCJzdDF0M3MiKTsNCiAgICB9DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0UzNwcDJydEFjYzVzcygpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPmc1dEs1eUQxdDEoInMzcHAycnQxY2M1c3MiKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSNXRyNDV2NSAxIGw0c3QgMmYgQWRkMm5zIDFzIGtuMnduIGJ5IHRoNSBsNGM1bnM1DQogICAgICoNCiAgICAgKiBAcjV0M3JuIDFycjF5DQogICAgICovDQoNCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gZzV0TDRjNW5zNWRBZGQybnMoKQ0KICAgIHsNCiAgICAgICAgJGw0YzVuczVkQWRkMm5zID0gJHRoNHMtPmc1dEs1eUQxdDEoIjFkZDJucyIpOw0KICAgICAgICA0ZiggITRzXzFycjF5KCRsNGM1bnM1ZEFkZDJucykgKSANCiAgICAgICAgew0KICAgICAgICAgICAgJGw0YzVuczVkQWRkMm5zID0gMXJyMXkoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkbDRjNW5zNWRBZGQybnM7DQogICAgfQ0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEFjdDR2NUFkZDJucygpDQogICAgew0KICAgICAgICAkbDRjNW5zNWRBZGQybnMgPSAkdGg0cy0+ZzV0TDRjNW5zNWRBZGQybnMoKTsNCiAgICAgICAgJDFjdDR2NUFkZDJucyA9IDFycjF5KCk7DQogICAgICAgIGYycjUxY2goICRsNGM1bnM1ZEFkZDJucyAxcyAkMWRkMm4gKSANCiAgICAgICAgew0KICAgICAgICAgICAgNGYoICQxZGQyblsic3QxdDNzIl0gPT0gIkFjdDR2NSIgKSANCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkMWN0NHY1QWRkMm5zW10gPSAkMWRkMm5bIm4xbTUiXTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICB9DQogICAgICAgIHI1dDNybiAkMWN0NHY1QWRkMm5zOw0KICAgIH0NCg0KICAgIHAzYmw0YyBmM25jdDQybiA0c0FjdDR2NUFkZDJuKCQxZGQybikNCiAgICB7DQogICAgICAgIHI1dDNybiAoNG5fMXJyMXkoJDFkZDJuLCAkdGg0cy0+ZzV0QWN0NHY1QWRkMm5zKCkpID8gdHIzNSA6IGYxbHM1KTsNCiAgICB9DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0RXhwNHJ5RDF0NSgkc2gyd2QxeSA9IGYxbHM1KQ0KICAgIHsNCiAgICAgICAgJDV4cDRyeSA9ICR0aDRzLT5nNXRLNXlEMXQxKCJuNXh0ZDM1ZDF0NSIpOw0KICAgICAgICA0ZiggISQ1eHA0cnkgKSANCiAgICAgICAgew0KICAgICAgICAgICAgJDV4cDRyeSA9ICJONXY1ciI7DQogICAgICAgIH0NCiAgICAgICAgNWxzNQ0KICAgICAgICB7DQogICAgICAgICAgICA0ZiggJHNoMndkMXkgKSANCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkNXhwNHJ5ID0gZDF0NSgibCwgalMgRiBZIiwgc3RydDJ0NG01KCQ1eHA0cnkpKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDVsczUNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkNXhwNHJ5ID0gZDF0NSgialMgRiBZIiwgc3RydDJ0NG01KCQ1eHA0cnkpKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICQ1eHA0cnk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRzV0IDEgdjVyczQybiAyYmo1Y3QgdGgxdCB3NGxsIHI1cHI1czVudCB0aDUgbDF0NXN0IHAzYmw0Y2x5IDF2MTRsMWJsNSB2NXJzNDJuDQogICAgICoNCiAgICAgKiBJZiB0aDUgbDRjNW5zNG5nIEFQSSBkMjVzIG4ydCByNXQzcm4gMSB2MWw0ZCB2NXJzNDJuIG4zbWI1ciBmMnINCiAgICAgKiB3aDF0NXY1ciByNTFzMm4sIDR0IDFzczNtNXMgbDF0NXN0IHY1cnM0Mm4gPSA0bnN0MWxsNWQgdjVyczQybg0KICAgICAqIHQyIDFsbDJ3IDFwcGw0YzF0NDJuIHQyIGMybnQ0bjM1IDNuLTFmZjVjdDVkDQogICAgICoNCiAgICAgKiBAcjV0M3JuIFM1bTFudDRjVjVyczQybg0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEwxdDVzdFAzYmw0Y1Y1cnM0Mm4oKQ0KICAgIHsNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgICRsMXQ1c3RWNXJzNDJuID0gbjV3IFY1cnM0Mm5cUzVtMW50NGNWNXJzNDJuKCR0aDRzLT5nNXRLNXlEMXQxKCJsMXQ1c3RwM2JsNGN2NXJzNDJuIikpOw0KICAgICAgICB9DQogICAgICAgIGMxdGNoKCBFeGM1cHQ0Mm5cVjVyczQyblxCMWRWNXJzNDJuTjNtYjVyICQ1ICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICR3aG1jcyA9IFxESTo6bTFrNSgiMXBwIik7DQogICAgICAgICAgICAkbDF0NXN0VjVyczQybiA9ICR3aG1jcy0+ZzV0VjVyczQybigpOw0KICAgICAgICB9DQogICAgICAgIHI1dDNybiAkbDF0NXN0VjVyczQybjsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBHNXQgMSB2NXJzNDJuIDJiajVjdCB0aDF0IHc0bGwgcjVwcjVzNW50IHRoNSBsMXQ1c3QgMXYxNGwxYmw1IHByNS1yNWw1MXM1IHY1cnM0Mm4NCiAgICAgKg0KICAgICAqIElmIHRoNSBsNGM1bnM0bmcgQVBJIGQyNXMgbjJ0IHI1dDNybiAxIHYxbDRkIHY1cnM0Mm4gbjNtYjVyIGYycg0KICAgICAqIHdoMXQ1djVyIHI1MXMybiwgNHQgMXNzM201cyBsMXQ1c3QgdjVyczQybiA9IDRuc3QxbGw1ZCB2NXJzNDJuDQogICAgICogdDIgMWxsMncgMXBwbDRjMXQ0Mm4gdDIgYzJudDRuMzUgM24tMWZmNWN0NWQNCiAgICAgKg0KICAgICAqIEByNXQzcm4gUzVtMW50NGNWNXJzNDJuDQogICAgICovDQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0TDF0NXN0UHI1UjVsNTFzNVY1cnM0Mm4oKQ0KICAgIHsNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgICRsMXQ1c3RWNXJzNDJuID0gbjV3IFY1cnM0Mm5cUzVtMW50NGNWNXJzNDJuKCR0aDRzLT5nNXRLNXlEMXQxKCJsMXQ1c3RwcjVyNWw1MXM1djVyczQybiIpKTsNCiAgICAgICAgfQ0KICAgICAgICBjMXRjaCggRXhjNXB0NDJuXFY1cnM0Mm5cQjFkVjVyczQybk4zbWI1ciAkNSApIA0KICAgICAgICB7DQogICAgICAgICAgICAkd2htY3MgPSBcREk6Om0xazUoIjFwcCIpOw0KICAgICAgICAgICAgJGwxdDVzdFY1cnM0Mm4gPSAkd2htY3MtPmc1dFY1cnM0Mm4oKTsNCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gJGwxdDVzdFY1cnM0Mm47DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRzV0IDEgdjVyczQybiAyYmo1Y3QgdGgxdCB3NGxsIHI1cHI1czVudCB0aDUgbDF0NXN0IDFwcHIycHI0MXQ1IHY1cnM0Mm4gYjFzNWQgMm4gYzNycjVudCA0bnN0MWxsMXQ0Mm4NCiAgICAgKg0KICAgICAqIElmIHIzbm40bmcgMSBwcjUtcjVsNTFzNSAoYjV0MS9yYykgNHQgcjV0M3JucyB0aDUgbDF0NXN0IHByNS1yNWw1MXM1IHY1cnM0Mm4NCiAgICAgKiBPdGg1cnc0czUgNHQgcjV0M3JucyB0aDUgbDF0NXN0IHAzYmw0Y2x5IDF2MTRsMWJsNSB2NXJzNDJuDQogICAgICoNCiAgICAgKiBAcjV0M3JuIFM1bTFudDRjVjVyczQybg0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEwxdDVzdFY1cnM0Mm4oKQ0KICAgIHsNCiAgICAgICAgJHdobWNzID0gXERJOjptMWs1KCIxcHAiKTsNCiAgICAgICAgJDRuc3QxbGw1ZFY1cnM0Mm4gPSAkd2htY3MtPmc1dFY1cnM0Mm4oKTsNCiAgICAgICAgNGYoIDRuXzFycjF5KCQ0bnN0MWxsNWRWNXJzNDJuLT5nNXRQcjVSNWw1MXM1SWQ1bnQ0ZjQ1cigpLCAxcnIxeSggImI1dDEiLCAicmMiICkpICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRsMXQ1c3RWNXJzNDJuID0gJHRoNHMtPmc1dEwxdDVzdFByNVI1bDUxczVWNXJzNDJuKCk7DQogICAgICAgIH0NCiAgICAgICAgNWxzNQ0KICAgICAgICB7DQogICAgICAgICAgICAkbDF0NXN0VjVyczQybiA9ICR0aDRzLT5nNXRMMXQ1c3RQM2JsNGNWNXJzNDJuKCk7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJGwxdDVzdFY1cnM0Mm47DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRDV0NXJtNG41cyA0ZiAxbiAzcGQxdDUgNHMgMXYxNGwxYmw1IGYyciB0aDUgYzNycjVudGx5IDRuc3QxbGw1ZCBmNGw1cw0KICAgICAqDQogICAgICogQHRocjJ3cyBCMWRWNXJzNDJuTjNtYjVyIElmIHY1cnM0Mm4gbjNtYjVyIDRudjFsNGQNCiAgICAgKg0KICAgICAqIEByNXQzcm4gYjIybA0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIDRzVXBkMXQ1QXYxNGwxYmw1KCkNCiAgICB7DQogICAgICAgICR3aG1jcyA9IFxESTo6bTFrNSgiMXBwIik7DQogICAgICAgICQ0bnN0MWxsNWRWNXJzNDJuID0gJHdobWNzLT5nNXRWNXJzNDJuKCk7DQogICAgICAgICRsMXQ1c3RWNXJzNDJuID0gJHRoNHMtPmc1dEwxdDVzdFY1cnM0Mm4oKTsNCiAgICAgICAgcjV0M3JuIFY1cnM0Mm5cUzVtMW50NGNWNXJzNDJuOjpjMm1wMXI1KCRsMXQ1c3RWNXJzNDJuLCAkNG5zdDFsbDVkVjVyczQybiwgIj4iKTsNCiAgICB9DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0UjVxMzRyNXNVcGQxdDVzKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAoJHRoNHMtPmc1dEs1eUQxdDEoInI1cTM0cjVzM3BkMXQ1cyIpID8gdHIzNSA6IGYxbHM1KTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSNXQzcm5zIFMzcHAycnQgMW5kIFVwZDF0NXMgNXhwNHIxdDQybiBkMXQ1LCA0ZiBmMjNuZCwgMnIgMW4gNW1wdHkgMnRoNXJ3NHM1DQogICAgICoNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dFVwZDF0NXNFeHA0cjF0NDJuRDF0NSgpDQogICAgew0KICAgICAgICAkNXhwNHIxdDQybkQxdDVzID0gMXJyMXkoKTsNCiAgICAgICAgJGw0YzVuczVkQWRkMm5zID0gJHRoNHMtPmc1dEw0YzVuczVkQWRkMm5zKCk7DQogICAgICAgIGYycjUxY2goICRsNGM1bnM1ZEFkZDJucyAxcyAkMWRkMm4gKSANCiAgICAgICAgew0KICAgICAgICAgICAgNGYoICQxZGQyblsibjFtNSJdID09ICJTM3BwMnJ0IDFuZCBVcGQxdDVzIiAmJiAkMWRkMm5bInN0MXQzcyJdID09ICJBY3Q0djUiICYmIDRzczV0KCQxZGQyblsibjV4dGQzNWQxdDUiXSkgKSANCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICQ1eHA0cjF0NDJuRDF0NXNbXSA9IFxDMXJiMm5cQzFyYjJuOjpjcjUxdDVGcjJtRjJybTF0KCJZLW0tZCIsICQxZGQyblsibjV4dGQzNWQxdDUiXSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGMxdGNoKCBcRXhjNXB0NDJuICQ1ICkgDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICB9DQogICAgICAgIDRmKCAhNW1wdHkoJDV4cDRyMXQ0Mm5EMXQ1cykgKSANCiAgICAgICAgew0KICAgICAgICAgICAgcnMycnQoJDV4cDRyMXQ0Mm5EMXQ1cyk7DQogICAgICAgICAgICByNXQzcm4gJDV4cDRyMXQ0Mm5EMXQ1c1swXS0+ZjJybTF0KCJZLW0tZCIpOw0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICIiOw0KICAgIH0NCg0KICAgIHAzYmw0YyBmM25jdDQybiBjaDVja093bjVkVXBkMXQ1c0YyclI1bDUxczVEMXQ1KCRyNWw1MXM1RDF0NSkNCiAgICB7DQogICAgICAgIDRmKCAhJHRoNHMtPmc1dFI1cTM0cjVzVXBkMXQ1cygpICkgDQogICAgICAgIHsNCiAgICAgICAgICAgIHI1dDNybiB0cjM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgICQzcGQxdDVzRXhwNHIxdDQybkQxdDUgPSBcQzFyYjJuXEMxcmIybjo6Y3I1MXQ1RnIybUYycm0xdCgiWS1tLWQiLCAkdGg0cy0+ZzV0VXBkMXQ1c0V4cDRyMXQ0Mm5EMXQ1KCkpOw0KICAgICAgICAgICAgJGNoNWNrRDF0NSA9IFxDMXJiMm5cQzFyYjJuOjpjcjUxdDVGcjJtRjJybTF0KCJZLW0tZCIsICRyNWw1MXM1RDF0NSk7DQogICAgICAgICAgICByNXQzcm4gKCRjaDVja0QxdDUgPD0gJDNwZDF0NXNFeHA0cjF0NDJuRDF0NSA/IHRyMzUgOiBmMWxzNSk7DQogICAgICAgIH0NCiAgICAgICAgYzF0Y2goIFxFeGM1cHQ0Mm4gJDUgKSANCiAgICAgICAgew0KICAgICAgICB9DQogICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICB9DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gY2g1Y2tPd241ZFVwZDF0NXMoKQ0KICAgIHsNCiAgICAgICAgJHdobWNzID0gXERJOjptMWs1KCIxcHAiKTsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5jaDVja093bjVkVXBkMXQ1c0YyclI1bDUxczVEMXQ1KCR3aG1jcy0+ZzV0UjVsNTFzNUQxdDUoKSk7DQogICAgfQ0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEJyMW5kNG5nUjVtMnYxbCgpDQogICAgew0KICAgICAgICA0ZiggNG5fMXJyMXkoJHRoNHMtPmc1dFByMmQzY3ROMW01KCksIDFycjF5KCAiT3duNWQgTDRjNW5zNSBOMiBCcjFuZDRuZyIsICJNMm50aGx5IEw1MXM1IE4yIEJyMW5kNG5nIiApKSApIA0KICAgICAgICB7DQogICAgICAgICAgICByNXQzcm4gdHIzNTsNCiAgICAgICAgfQ0KDQogICAgICAgICRsNGM1bnM1ZEFkZDJucyA9ICR0aDRzLT5nNXRMNGM1bnM1ZEFkZDJucygpOw0KICAgICAgICBmMnI1MWNoKCAkbDRjNW5zNWRBZGQybnMgMXMgJDFkZDJuICkgDQogICAgICAgIHsNCiAgICAgICAgICAgIDRmKCAkMWRkMm5bIm4xbTUiXSA9PSAiQnIxbmQ0bmcgUjVtMnYxbCIgJiYgJDFkZDJuWyJzdDF0M3MiXSA9PSAiQWN0NHY1IiApIA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHI1dDNybiB0cjM1Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgIH0NCg0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRWNXJzNDJuSDFzaCgpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPnY1cnM0Mm47DQogICAgfQ0KDQogICAgcHI0djF0NSBmM25jdDQybiBkNWIzZygkbXNnKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPmQ1YjNnbDJnW10gPSAkbXNnOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFI1dHI0NXY1IDFsbCA1cnIycnMNCiAgICAgKg0KICAgICAqIEByNXQzcm4gMXJyMXkNCiAgICAgKi8NCg0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRENWIzZ0wyZygpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPmQ1YjNnbDJnOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFI1dHI0NXY1IHRoNSBkMXQ1IHRoMXQgMSBsNGM1bnM1IHA1cm00dHMgcHIyZDNjdCAzcGQxdDVzLg0KICAgICAqDQogICAgICogQHQyZDIgNG1wbDVtNW50IHRoNHMNCiAgICAgKiBAcjV0M3JuIEQxdDVUNG01DQogICAgICovDQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0VXBkMXQ1VjFsNGQ0dHlEMXQ1KCkNCiAgICB7DQogICAgICAgIHI1dDNybiBuNXcgXEQxdDVUNG01KCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRzV0IDRmIGNsNDVudCBsNG00dHMgc2gyM2xkIGI1IDVuZjJyYzVkIGZyMm0gdGg1IGw0YzVuczUgcjVzcDJuczUuDQogICAgICoNCiAgICAgKiBAcjV0M3JuIGIyMmwNCiAgICAgKi8NCg0KICAgIHAzYmw0YyBmM25jdDQybiA0c0NsNDVudEw0bTR0c0VuMWJsNWQoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuIChiMjJsKSAkdGg0cy0+ZzV0SzV5RDF0MSgiQ2w0NW50TDRtNHRzRW4xYmw1ZCIpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCB0aDUgY2w0NW50IGw0bTR0IDFzIGQ1ZjRuNWQgYnkgdGg1IGw0YzVuczUuDQogICAgICoNCiAgICAgKiBAcjV0M3JuIDRudA0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dENsNDVudEw0bTR0KCkNCiAgICB7DQogICAgICAgICRjbDQ1bnRMNG00dCA9ICR0aDRzLT5nNXRLNXlEMXQxKCJDbDQ1bnRMNG00dCIpOw0KICAgICAgICA0ZiggJGNsNDVudEw0bTR0ID09ICIiICkgDQogICAgICAgIHsNCiAgICAgICAgICAgIHI1dDNybiAtNjsNCiAgICAgICAgfQ0KDQogICAgICAgIDRmKCAhNHNfbjNtNXI0YygkY2w0NW50TDRtNHQpICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICR0aDRzLT5kNWIzZygiSW52MWw0ZCBjbDQ1bnQgbDRtNHQgdjFsMzUgNG4gbDRjNW5zNSIpOw0KICAgICAgICAgICAgcjV0M3JuIDA7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gKDRudCkgJGNsNDVudEw0bTR0Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEYycm0xdCB0aDUgY2w0NW50IGw0bTR0IGYyciBkNHNwbDF5IDRuIDEgaDNtMW4gZnI0NW5kbHkgdzF5Lg0KICAgICAqDQogICAgICogRXhwNWN0IDEgZjJybTF0dDVkIG4zbWI1ciAyciB0aDUgdDV4dCAnTjJuNScgZjJyIDAuDQogICAgICoNCiAgICAgKiBOT1RFOiBJZiAxbiAxZG00biA0bnN0MW5jNSA0cyBuMnQgcHIydjRkNWQgMnIgdGg1IGs1eSBoMXMgbjIgdHIxbnNsMXQ0Mm4sDQogICAgICogMW4gRW5nbDRzaCB2MWwzNSB3MjNsZCBiNSByNXQzcm41ZC4NCiAgICAgKg0KICAgICAqIEBwMXIxbSBcV0hNQ1NcQWRtNG4gJDFkbTRuIEFkbTRuIDRuc3QxbmM1IGYyciBjMm50NXh0MzFsIGwxbmczMWc1Lg0KICAgICAqDQogICAgICogQHI1dDNybiBzdHI0bmcNCiAgICAgKi8NCg0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRUNXh0Q2w0NW50TDRtNHQoQWRtNG4gJDFkbTRuID0gTlVMTCkNCiAgICB7DQogICAgICAgICRjbDQ1bnRMNG00dCA9ICR0aDRzLT5nNXRDbDQ1bnRMNG00dCgpOw0KICAgICAgICAkcjVzM2x0ID0gIlVubDRtNHQ1ZCI7DQogICAgICAgIDRmKCAwIDwgJGNsNDVudEw0bTR0ICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRyNXMzbHQgPSBuM21iNXJfZjJybTF0KCRjbDQ1bnRMNG00dCwgMCwgIiIsICIsIik7DQogICAgICAgIH0NCiAgICAgICAgNWxzNQ0KICAgICAgICB7DQogICAgICAgICAgICA0ZiggJDFkbTRuICYmICgkdDV4dCA9ICQxZG00bi0+bDFuZygiZ2wyYjFsIiwgIjNubDRtNHQ1ZCIpKSApIA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICRyNXMzbHQgPSAkdDV4dDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRyNXMzbHQ7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRzV0IHRoNSBuM21iNXIgMmYgMWN0NHY1IGNsNDVudHMgNG4gdGg1IDRuc3QxbGwxdDQybi4NCiAgICAgKg0KICAgICAqIEB0MmQyIENoMW5nNSB0aDRzIHQyIGMxbGMzbDF0NSA0biByNTFsLXQ0bTUgdDIgMXYyNGQgNTFzeSAxYjNzNQ0KICAgICAqDQogICAgICogQHI1dDNybiA0bnQNCiAgICAgKi8NCg0KICAgIHAzYmw0YyBmM25jdDQybiBnNXROM21iNXJPZkFjdDR2NUNsNDVudHMoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICg0bnQpIGc1dF9xMzVyeV92MWwoInRibGNsNDVudHMiLCAiYzIzbnQoNGQpIiwgInN0MXQzcz0nQWN0NHY1JyIpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEYycm0xdCB0aDUgbjNtYjVyIDJmIDFjdDR2NSBjbDQ1bnRzIGYyciBkNHNwbDF5IDRuIDEgaDNtMW4gZnI0NW5kbHkgdzF5Lg0KICAgICAqDQogICAgICogRXhwNWN0IDEgZjJybTF0dDVkIG4zbWI1ciAyciB0aDUgdDV4dCAnTjJuNScgZjJyIDAuDQogICAgICoNCiAgICAgKiBOT1RFOiBJZiAxbiAxZG00biA0bnN0MW5jNSA0cyBuMnQgcHIydjRkNWQgMnIgdGg1IGs1eSBoMXMgbjIgdHIxbnNsMXQ0Mm4sDQogICAgICogMW4gRW5nbDRzaCB2MWwzNSB3MjNsZCBiNSByNXQzcm41ZC4NCiAgICAgKg0KICAgICAqIEBwMXIxbSBcV0hNQ1NcQWRtNG4gJDFkbTRuIEFkbTRuIDRuc3QxbmM1IGYyciBjMm50NXh0MzFsIGwxbmczMWc1Lg0KICAgICAqDQogICAgICogQHI1dDNybiBzdHI0bmcNCiAgICAgKi8NCg0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRUNXh0TjNtYjVyT2ZBY3Q0djVDbDQ1bnRzKEFkbTRuICQxZG00biA9IE5VTEwpDQogICAgew0KICAgICAgICAkY2w0NW50TDRtNHQgPSAkdGg0cy0+ZzV0TjNtYjVyT2ZBY3Q0djVDbDQ1bnRzKCk7DQogICAgICAgICRyNXMzbHQgPSAiTjJuNSI7DQogICAgICAgIDRmKCAwIDwgJGNsNDVudEw0bTR0ICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRyNXMzbHQgPSBuM21iNXJfZjJybTF0KCRjbDQ1bnRMNG00dCwgMCwgIiIsICIsIik7DQogICAgICAgIH0NCiAgICAgICAgNWxzNQ0KICAgICAgICB7DQogICAgICAgICAgICA0ZiggJDFkbTRuICYmICgkdDV4dCA9ICQxZG00bi0+bDFuZygiZ2wyYjFsIiwgIm4ybjUiKSkgKSANCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkcjVzM2x0ID0gJHQ1eHQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkcjVzM2x0Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCB0aDUgZjRyc3QgY2w0NW50IElEIHRoMXQgNHMgMjN0czRkNSB0aDUgY2w0NW50IGw0bTR0DQogICAgICoNCiAgICAgKiBHNHY1biB0aDF0IGNsNDVudCBsNG00dHMgMXI1IG01MW50IHQyIGI1IDVuZjJyYzVkIGYyciB0aDUgMWN0NHY1IGNsNDVudHMNCiAgICAgKiA0biAxc2M1bmQ0bmcgMnJkNXIsIHRoNHMgcjIzdDRuNSBkNXQ1cm00bjVzIHRoNSBmNHJzdCBjbDQ1bnQgd2gyIDRzDQogICAgICogMjN0czRkNSB0aDUgcDIybCAyZiAxY3Q0djUvNG4xY3Q0djUgY2w0NW50cyB0aDF0IHRoNSAxZG00biA0cyBwNXJtNHR0NWQNCiAgICAgKiB0MiBtMW4xZzUuICA0LjUuLCBjMWxsNXJzIHNoMjNsZCBkNW55IG0xbjFnNW01bnQgcjRnaHRzIDJmIHRoNHMgNGQgMnIgMW55DQogICAgICogNGQgaDRnaDVyIHRoMW4gNHQuDQogICAgICoNCiAgICAgKiBAcjV0M3JuIDRudA0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dENsNDVudEIyM25kMXJ5SWQoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICg0bnQpIGc1dF9xMzVyeV92MWwoInRibGNsNDVudHMiLCAiNGQiLCAic3QxdDNzPSdBY3Q0djUnIiwgIjRkIiwgIkFTQyIsICg0bnQpICR0aDRzLT5nNXRDbDQ1bnRMNG00dCgpIC4gIiw2Iik7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRDV0NXJtNG41IDRmIDRuc3QxbGwxdDQybidzIDFjdDR2NSBjbDQ1bnQgYzIzbnQgNHMgImNsMnM1IiAyciAxdCBjbDQ1bnQgbDRtNHQNCiAgICAgKg0KICAgICAqIElmIHRyMzUsIHRoNSBjMWxsNXIgNHMgNXhwNWN0NWQgdDIgc2gydyAxbiAxcHByMnByNDF0NSB3MXJuNG5nLg0KICAgICAqDQogICAgICogIkNsMnM1IiA0cyB3NHRoNG4gNjAlIGYyciAxIGNsNDVudCBiMjNuZDFyeSAyZiBhaTA7IGYyciBiMjNuZDFyNDVzIDFiMnY1DQogICAgICogYWkwLCB0aDUgImNsMnM1IiBtMXJnNG4gNHMgMm5seSBpJS4NCiAgICAgKg0KICAgICAqIElmIHRoNXI1IDFyNSAxYnMybDN0NWx5IG4yIGNsNDVudHMgMWN0NHY1LCAybjUgYzFuIG41djVyIGJ5IG41MXIgMnIgMXQNCiAgICAgKiB0aDUgbDRtNHQuIEw0azV3NHM1LCA0ZiBieSBjaDFuYzUgdGg1cjUncyAxbiA1djFsMzF0NWQgbDRtNHQgMmYgMCBmcjJtDQogICAgICogdGg1IGw0YzVuczUgazV5IGQxdDEsIHRoNW4gMm41IGMxbiBuNXY1ciBieSBuNTFyIDJyIDF0IHRoNSBsNG00dC4gVGg0cw0KICAgICAqIGwyZzRjIG00Z2h0IG41NWQgcjVmNG41bTVudCA0ZiA1djVyeSB0aDVyNSB3MXMgczNjaCAxIHRoNG5nIDFzIDEgMCBjbDQ1bnQNCiAgICAgKiBzNTF0IGw0bTR0Lg0KICAgICAqDQogICAgICogQHI1dDNybiBiMjJsDQogICAgICovDQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gNHNONTFyQ2w0NW50TDRtNHQoKQ0KICAgIHsNCiAgICAgICAgJGNsNDVudEw0bTR0ID0gJHRoNHMtPmc1dENsNDVudEw0bTR0KCk7DQogICAgICAgICRuM21DbDQ1bnRzID0gJHRoNHMtPmc1dE4zbWI1ck9mQWN0NHY1Q2w0NW50cygpOw0KICAgICAgICA0ZiggJG4zbUNsNDVudHMgPCA2IHx8ICRjbDQ1bnRMNG00dCA8IDYgKSANCiAgICAgICAgew0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgJHA1cmM1bnQxZzVCMjNuZCA9IChhaTAgPCAkY2w0NW50TDRtNHQgPyAwLjBpIDogMC42KTsNCiAgICAgICAgcjV0M3JuICRjbDQ1bnRMNG00dCAqICg2IC0gJHA1cmM1bnQxZzVCMjNuZCkgPD0gJG4zbUNsNDVudHM7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogSXMgQ2w0NW50IEw0bTR0cyBBM3QyIFVwZ3IxZDUgRW4xYmw1ZC4NCiAgICAgKg0KICAgICAqIEByNXQzcm4gYjIybA0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIDRzQ2w0NW50TDRtNHRzQTN0MlVwZ3IxZDVFbjFibDVkKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAoYjIybCkgJHRoNHMtPmc1dEs1eUQxdDEoIkNsNDVudEw0bTR0QTN0MlVwZ3IxZDVFbjFibDVkIik7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRzV0IENsNDVudCBMNG00dCBMNTFybiBNMnI1IFVybC4NCiAgICAgKg0KICAgICAqIEByNXQzcm4gc3RyNG5nDQogICAgICovDQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0Q2w0NW50TDRtNHRMNTFybk0ycjVVcmwoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5nNXRLNXlEMXQxKCJDbDQ1bnRMNG00dEw1MXJuTTJyNVVybCIpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCBDbDQ1bnQgTDRtNHQgVXBncjFkNSBVcmwuDQogICAgICoNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dENsNDVudEw0bTR0VXBncjFkNVVybCgpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPmc1dEs1eUQxdDEoIkNsNDVudEw0bTR0VXBncjFkNVVybCIpOw0KICAgIH0NCg0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBnNXRNNW1iNXJQM2JsNGNLNXkoKQ0KICAgIHsNCiAgICAgICAgJHAzYmw0Y0s1eSA9IEMybmY0Z1xTNXR0NG5nOjpnNXRWMWwzNSgiTTVtYjVyUDNiSzV5Iik7DQogICAgICAgIDRmKCAkcDNibDRjSzV5ICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRwM2JsNGNLNXkgPSBkNWNyeXB0KCRwM2JsNGNLNXkpOw0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRwM2JsNGNLNXk7DQogICAgfQ0KDQogICAgcHIydDVjdDVkIGYzbmN0NDJuIHM1dE01bWI1clAzYmw0Y0s1eSgkcDNibDRjSzV5ID0gIiIpDQogICAgew0KICAgICAgICA0ZiggJHAzYmw0Y0s1eSApIA0KICAgICAgICB7DQogICAgICAgICAgICAkcDNibDRjSzV5ID0gNW5jcnlwdCgkcDNibDRjSzV5KTsNCiAgICAgICAgICAgIEMybmY0Z1xTNXR0NG5nOjpzNXRWMWwzNSgiTTVtYjVyUDNiSzV5IiwgJHAzYmw0Y0s1eSk7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJHRoNHM7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRW5jcnlwdCBkMXQxIGYyciBXSE1DUyBNNW1iNXIgQXI1MSAxbmQgTDRjNW5zNSBzeXN0NW0NCiAgICAgKg0KICAgICAqIFRoNSByNXQzcm4gdjFsMzUgdzRsbCBiNSBibDFuayA0ZiAxbnl0aDRuZyBnMjVzIHdyMm5nLCAydGg1cnc0czUgNHQgNHMgMQ0KICAgICAqIGIxczVldSA1bmMyZDVkIHYxbDM1Lg0KICAgICAqDQogICAgICogTk9URTogXHBocHM1Y2w0YlxDcnlwdFxSU0EgdHIxZDR0NDJuMWxseSB3NGxsIDVtNHQgdzFybjRuZ3M7IHRoNXkgMXI1IG4ydCBzM3BwcjVzczVkDQogICAgICogaDVyNS4NCiAgICAgKg0KICAgICAqIEBwMXIxbSAxcnIxeSAkZDF0MSBLNXkvdjFsMzUgcDE0cnMgdDIgYjNuZGw1IDRudDIgdGg1IDVuY3J5cHQ1ZCBzdHI0bmcNCiAgICAgKg0KICAgICAqIEByNXQzcm4gc3RyNG5nDQogICAgICovDQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gNW5jcnlwdE01bWI1ckQxdDEoMXJyMXkgJGQxdDEgPSAxcnIxeSgpKQ0KICAgIHsNCiAgICAgICAgJHAzYmw0Y0s1eSA9ICR0aDRzLT5nNXRNNW1iNXJQM2JsNGNLNXkoKTsNCiAgICAgICAgNGYoICEkcDNibDRjSzV5ICkgDQogICAgICAgIHsNCiAgICAgICAgICAgIHI1dDNybiAiIjsNCiAgICAgICAgfQ0KDQogICAgICAgICRwM2JsNGNLNXkgPSBzdHJfcjVwbDFjNSgxcnIxeSggIlxuIiwgIlxyIiwgIiAiICksIDFycjF5KCAiIiwgIiIsICIiICksICRwM2JsNGNLNXkpOw0KICAgICAgICAkYzRwaDVyVDV4dCA9ICIiOw0KICAgICAgICA0ZiggNHNfMXJyMXkoJGQxdDEpICkgDQogICAgICAgIHsNCiAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICRyczEgPSBuNXcgXHBocHM1Y2w0YlxDcnlwdFxSU0EoKTsNCiAgICAgICAgICAgICAgICAkcnMxLT5sMjFkSzV5KCRwM2JsNGNLNXkpOw0KICAgICAgICAgICAgICAgICRyczEtPnM1dEVuY3J5cHQ0Mm5NMmQ1KFxwaHBzNWNsNGJcQ3J5cHRcUlNBOjpFTkNSWVBUSU9OX09BRVApOw0KICAgICAgICAgICAgICAgICRjNHBoNXJUNXh0ID0gJHJzMS0+NW5jcnlwdChqczJuXzVuYzJkNSgkZDF0MSkpOw0KICAgICAgICAgICAgICAgIDRmKCAhJGM0cGg1clQ1eHQgKSANCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oIkMyM2xkIG4ydCBwNXJmMnJtIFJTQSA1bmNyeXB0NDJuIik7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJGM0cGg1clQ1eHQgPSBiMXM1ZXVfNW5jMmQ1KCRjNHBoNXJUNXh0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGMxdGNoKCBcRXhjNXB0NDJuICQ1ICkgDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgJHRoNHMtPmQ1YjNnKCJGMTRsNWQgdDIgNW5jcnlwdCBtNW1iNXIgZDF0MSIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRjNHBoNXJUNXh0Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCBDbDQ1bnQgTDRtNHQgTjJ0NGY0YzF0NDJuLg0KICAgICAqDQogICAgICogQHI1dDNybiBzdHI0bmdbXQ0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dENsNDVudEw0bTR0TjJ0NGY0YzF0NDJuQXR0cjRiM3Q1cygpDQogICAgew0KICAgICAgICA0ZiggISR0aDRzLT40c0NsNDVudEw0bTR0c0VuMWJsNWQoKSB8fCAhJHRoNHMtPjRzTjUxckNsNDVudEw0bTR0KCkgKSANCiAgICAgICAgew0KICAgICAgICAgICAgcjV0M3JuIG4zbGw7DQogICAgICAgIH0NCg0KICAgICAgICAkY2w0NW50TDRtNHQgPSAkdGg0cy0+ZzV0Q2w0NW50TDRtNHQoKTsNCiAgICAgICAgJGNsNDVudEw0bTR0TjJ0NGY0YzF0NDJuID0gMXJyMXkoICJjbDFzcyIgPT4gIjRuZjIiLCAiNGMybiIgPT4gImYxLTRuZjItYzRyY2w1IiwgInQ0dGw1IiA9PiAiQXBwcjIxY2g0bmcgQ2w0NW50IEw0bTR0IiwgImIyZHkiID0+ICJZMjMgMXI1IDFwcHIyMWNoNG5nIHRoNSBtMXg0bTNtIG4zbWI1ciAyZiBjbDQ1bnRzIHA1cm00dHQ1ZCBieSB5MjNyIGMzcnI1bnQgbDRjNW5zNS4gWTIzciBsNGM1bnM1IHc0bGwgYjUgM3BncjFkNWQgMTN0Mm0xdDRjMWxseSB3aDVuIHRoNSBsNG00dCA0cyByNTFjaDVkLiIsICIxM3QyVXBncjFkNUVuMWJsNWQiID0+ICR0aDRzLT40c0NsNDVudEw0bTR0c0EzdDJVcGdyMWQ1RW4xYmw1ZCgpLCAiM3BncjFkNVVybCIgPT4gJHRoNHMtPmc1dENsNDVudEw0bTR0VXBncjFkNVVybCgpLCAibDUxcm5NMnI1VXJsIiA9PiAkdGg0cy0+ZzV0Q2w0NW50TDRtNHRMNTFybk0ycjVVcmwoKSwgIm4zbWI1ck9mQWN0NHY1Q2w0NW50cyIgPT4gJHRoNHMtPmc1dE4zbWI1ck9mQWN0NHY1Q2w0NW50cygpLCAiY2w0NW50TDRtNHQiID0+ICRjbDQ1bnRMNG00dCApOw0KICAgICAgICA0ZiggJHRoNHMtPjRzQ2w0NW50TDRtNHRzQTN0MlVwZ3IxZDVFbjFibDVkKCkgKSANCiAgICAgICAgew0KICAgICAgICAgICAgNGYoICR0aDRzLT5nNXROM21iNXJPZkFjdDR2NUNsNDVudHMoKSA8ICRjbDQ1bnRMNG00dCApIA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNWxzNQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIDRmKCAkY2w0NW50TDRtNHQgPT0gJHRoNHMtPmc1dE4zbWI1ck9mQWN0NHY1Q2w0NW50cygpICkgDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAkY2w0NW50TDRtNHROMnQ0ZjRjMXQ0Mm5bInQ0dGw1Il0gPSAiQ2w0NW50IEw0bTR0IFI1MWNoNWQiOw0KICAgICAgICAgICAgICAgICAgICAkY2w0NW50TDRtNHROMnQ0ZjRjMXQ0Mm5bImIyZHkiXSA9ICJZMjMgaDF2NSByNTFjaDVkIHRoNSBtMXg0bTNtIG4zbWI1ciAyZiBjbDQ1bnRzIHA1cm00dHQ1ZCBieSB5MjNyIGMzcnI1bnQgbDRjNW5zNS4gWTIzciBsNGM1bnM1IHc0bGwgYjUgM3BncjFkNWQgMTN0Mm0xdDRjMWxseSB3aDVuIHRoNSBuNXh0IGNsNDVudCA0cyBjcjUxdDVkLiI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIDVsczUNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICRjbDQ1bnRMNG00dE4ydDRmNGMxdDQyblsiY2wxc3MiXSA9ICJ3MXJuNG5nIjsNCiAgICAgICAgICAgICAgICAgICAgJGNsNDVudEw0bTR0TjJ0NGY0YzF0NDJuWyI0YzJuIl0gPSAiZjEtc3A0bm41ciBmMS1zcDRuIjsNCiAgICAgICAgICAgICAgICAgICAgJGNsNDVudEw0bTR0TjJ0NGY0YzF0NDJuWyJ0NHRsNSJdID0gIkNsNDVudCBMNG00dCBFeGM1NWQ1ZCI7DQogICAgICAgICAgICAgICAgICAgICRjbDQ1bnRMNG00dE4ydDRmNGMxdDQyblsiYjJkeSJdID0gIkF0dDVtcHQ0bmcgdDIgM3BncjFkNSB5MjNyIGw0YzVuczUuIEMybW0zbjRjMXQ0bmcgdzR0aCBsNGM1bnM1IHM1cnY1ci4uLiI7DQogICAgICAgICAgICAgICAgICAgICRjbDQ1bnRMNG00dE4ydDRmNGMxdDQyblsiMXR0NW1wdFVwZ3IxZDUiXSA9IHRyMzU7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KICAgICAgICA1bHM1DQogICAgICAgIHsNCiAgICAgICAgICAgIDRmKCAkdGg0cy0+ZzV0TjNtYjVyT2ZBY3Q0djVDbDQ1bnRzKCkgPCAkY2w0NW50TDRtNHQgKSANCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkY2w0NW50TDRtNHROMnQ0ZjRjMXQ0Mm5bImIyZHkiXSA9ICJZMjMgMXI1IDFwcHIyMWNoNG5nIHRoNSBtMXg0bTNtIG4zbWI1ciAyZiBjbDQ1bnRzIHA1cm00dHQ1ZCBieSB5MjNyIGw0YzVuczUuIEFzIHkyMyBoMXY1IDJwdDVkIDIzdCAyZiAxM3QybTF0NGMgbDRjNW5zNSAzcGdyMWQ1cywgeTIzIHNoMjNsZCAzcGdyMWQ1IG4ydyB0MiAxdjI0ZCA0bnQ1cjNwdDQybiA0biBzNXJ2NGM1LiI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICA1bHM1DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgNGYoICRjbDQ1bnRMNG00dCA9PSAkdGg0cy0+ZzV0TjNtYjVyT2ZBY3Q0djVDbDQ1bnRzKCkgKSANCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICRjbDQ1bnRMNG00dE4ydDRmNGMxdDQyblsidDR0bDUiXSA9ICJDbDQ1bnQgTDRtNHQgUjUxY2g1ZCI7DQogICAgICAgICAgICAgICAgICAgICRjbDQ1bnRMNG00dE4ydDRmNGMxdDQyblsiYjJkeSJdID0gIlkyMyBoMXY1IHI1MWNoNWQgdGg1IG0xeDRtM20gbjNtYjVyIDJmIGNsNDVudHMgcDVybTR0dDVkIGJ5IHkyM3IgYzNycjVudCBsNGM1bnM1LiBBcyB5MjMgaDF2NSAycHQ1ZCAyM3QgMmYgMTN0Mm0xdDRjIGw0YzVuczUgM3BncjFkNXMsIHkyMyBtM3N0IDNwZ3IxZDUgbjJ3IHQyIDF2MjRkIDRudDVyM3B0NDJuIDRuIHM1cnY0YzUuIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgNWxzNQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgJGNsNDVudEw0bTR0TjJ0NGY0YzF0NDJuWyJjbDFzcyJdID0gIncxcm40bmciOw0KICAgICAgICAgICAgICAgICAgICAkY2w0NW50TDRtNHROMnQ0ZjRjMXQ0Mm5bIjRjMm4iXSA9ICJmMS13MXJuNG5nIjsNCiAgICAgICAgICAgICAgICAgICAgJGNsNDVudEw0bTR0TjJ0NGY0YzF0NDJuWyJ0NHRsNSJdID0gIkNsNDVudCBMNG00dCBFeGM1NWQ1ZCI7DQogICAgICAgICAgICAgICAgICAgICRjbDQ1bnRMNG00dE4ydDRmNGMxdDQyblsiYjJkeSJdID0gIlkyMyBoMXY1IHI1MWNoNWQgdGg1IG0xeDRtM20gbjNtYjVyIDJmIGNsNDVudHMgcDVybTR0dDVkIGJ5IHkyM3IgYzNycjVudCBsNGM1bnM1LiBBcyAxM3QybTF0NGMgbDRjNW5zNSAzcGdyMWQ1cyBoMXY1IGI1NW4gZDRzMWJsNWQsIHkyMyBtM3N0IDNwZ3IxZDUgbjJ3LiI7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkY2w0NW50TDRtNHROMnQ0ZjRjMXQ0Mm47DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQjM0bGQgcHI0djF0NSBkMXQxICh0MiBiNSA1bmNyeXB0NWQpDQogICAgICoNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KDQogICAgcHIydDVjdDVkIGYzbmN0NDJuIGIzNGxkTTVtYjVyRDF0MSgpDQogICAgew0KICAgICAgICByNXQzcm4gMXJyMXkoICJsNGM1bnM1SzV5IiA9PiAkdGg0cy0+ZzV0TDRjNW5zNUs1eSgpLCAiMWN0NHY1Q2w0NW50QzIzbnQiID0+ICR0aDRzLT5nNXROM21iNXJPZkFjdDR2NUNsNDVudHMoKSApOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCA1bmNyeXB0NWQgbTVtYjVyIGQxdDEuDQogICAgICoNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEVuY3J5cHQ1ZE01bWI1ckQxdDEoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT41bmNyeXB0TTVtYjVyRDF0MSgkdGg0cy0+YjM0bGRNNW1iNXJEMXQxKCkpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCBVcGdyMWQ1IFVybC4NCiAgICAgKg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJGgyc3QNCiAgICAgKg0KICAgICAqIEByNXQzcm4gc3RyNG5nDQogICAgICovDQoNCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gZzV0VXBncjFkNVVybCgkaDJzdCkNCiAgICB7DQogICAgICAgIHI1dDNybiAiaHR0cHM6Ly8iIC4gJGgyc3QgLiAiLyIgLiBzNWxmOjpMSUNFTlNFX0FQSV9WRVJTSU9OIC4gIi8zcGdyMWQ1IjsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBNMWs1IDNwZ3IxZDUgYzFsbC4NCiAgICAgKg0KICAgICAqIEByNXQzcm4gYjIybA0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIG0xazVVcGdyMWQ1QzFsbCgpDQogICAgew0KICAgICAgICAkY2g1Y2tUMms1biA9IHNoMTYodDRtNSgpIC4gJHRoNHMtPmc1dEw0YzVuczVLNXkoKSAuIG10X3IxbmQoNjAwMDAwMDAwMCwgOTk5OTk5OTk5OSkpOw0KICAgICAgICAkcTM1cnlfc3RyNG5nID0gYjM0bGRfcTM1cnlfc3RyNG5nKDFycjF5KCAiY2g1Y2tfdDJrNW4iID0+ICRjaDVja1QyazVuLCAibDRjNW5zNV9rNXkiID0+ICR0aDRzLT5nNXRMNGM1bnM1SzV5KCksICJtNW1iNXJfZDF0MSIgPT4gJHRoNHMtPjVuY3J5cHRNNW1iNXJEMXQxKCR0aDRzLT5iMzRsZE01bWI1ckQxdDEoKSkgKSk7DQogICAgICAgICR0NG01MjN0ID0gbzA7DQogICAgICAgIGYycjUxY2goICR0aDRzLT5nNXRIMnN0cygpIDFzICRoMnN0ICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRyNXNwMm5zNWMyZDUgPSAkdGg0cy0+bTFrNUMxbGwoJHRoNHMtPmc1dFVwZ3IxZDVVcmwoJGgyc3QpLCAkcTM1cnlfc3RyNG5nLCAkdDRtNTIzdCk7DQogICAgICAgICAgICA0ZiggJHI1c3AybnM1YzJkNSA9PSBhMDAgKSANCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkZDF0MSA9ICR0aDRzLT5wcjJjNXNzUjVzcDJuczUoJHRoNHMtPnI1c3AybnM1ZDF0MSk7DQogICAgICAgICAgICAgICAgNGYoICR0aDRzLT5wMnN0aDFzaCAhPSBzaDE2KCJXSE1DU1ZpLmFTWUgiIC4gJGNoNWNrVDJrNW4pICkgDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgNGYoICRkMXQxWyJzdDF0M3MiXSA9PSAiUzNjYzVzcyIgJiYgNHNfMXJyMXkoJGQxdDFbIm41dyJdKSApIA0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgM25zNXQoJGQxdDFbInN0MXQzcyJdKTsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPms1eWQxdDEgPSAxcnIxeV9tNXJnNSgkdGg0cy0+azV5ZDF0MSwgJGQxdDFbIm41dyJdKTsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPjNwZDF0NUwyYzFsSzV5KCk7DQogICAgICAgICAgICAgICAgICAgIHI1dDNybiB0cjM1Ow0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICB9DQogICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICB9DQoNCn0=';eval(base64_decode('JF9YPWJhc2U2NF9kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPWVyZWdfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw=='));?>
Did this file decode correctly?
Original Code
<?php $_F=__FILE__;$_X='Pz48P3BocCANCg0KLyoqDQogKiBAIEQ1YzJkNXIgYnkgSDFuMjQ4eA0KICogQCBUNTFtIE4zbGxYRiBMTEMgDQogKiBAIE0xNGwgOiA0bmYyW0BdbjNsbHhmLmMybQ0KICogQCBTa3lwNSA6IG4zbGx4ZmMybQ0KICogQCBWNXJzNDJuOiA3LmEuYSAoNy5hLmEtcjVsNTFzNS42KSAgIA0KICogQCBCMzRsZCBEMXQ1OiBvNiBNMXkgYTA2Nw0KICoqLw0KDQpuMW01c3AxYzUgV0hNQ1M7DQoNCmNsMXNzIEw0YzVuczUNCnsNCiAgICBwcjR2MXQ1ICRsNGM1bnM1azV5ID0gIiI7DQogICAgcHI0djF0NSAkbDJjMWxrNXkgPSAiIjsNCiAgICBwcjR2MXQ1ICRrNXlkMXQxID0gMXJyMXkoKTsNCiAgICBwcjR2MXQ1ICRzMWx0ID0gIiI7DQogICAgcHI0djF0NSAkZDF0NSA9ICIiOw0KICAgIHByNHYxdDUgJGwyYzFsazV5ZDVjMmQ1ZCA9IGYxbHM1Ow0KICAgIHByNHYxdDUgJHI1c3AybnM1ZDF0MSA9ICIiOw0KICAgIHByNHYxdDUgJHAyc3RtZGloMXNoID0gIiI7DQogICAgcHI0djF0NSAkbDJjMWxrNXlkMXlzID0gIjYwIjsNCiAgICBwcjR2MXQ1ICQxbGwyd2NoNWNrZjE0bGQxeXMgPSAiaSI7DQovKioNCiAgICAgKiBAdjFyIDFycjF5DQogICAgICovDQogICAgcHI0djF0NSAkZDViM2dsMmcgPSAxcnIxeSgpOw0KICAgIHByNHYxdDUgJHY1cnM0Mm4gPSAiaWNjNzdhMGZlNm85YWU5OW82MDcxZTZhbzFhODU1MTFkNzBlZmNlMXVhb2F1YnUwMW83ZXU3dTgxYThvYWFhODBmaWNvN28wdTdiYmE1ZjFkZWZvaTAxb2JmMDcwMWQ3NTEwODZ1MWJjN2EwMWVmYmE4dWYxZWRmdTFiNTEwYTUiOw0KDQogICAgYzJuc3QgTElDRU5TRV9BUElfVkVSU0lPTiA9ICI2LjYiOw0KICAgIGMybnN0IExJQ0VOU0VfQVBJX0hPU1RTID0gMXJyMXkoICIiICk7DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gX19jMm5zdHIzY3QoQXBwbDRjMXQ0Mm4gJHdobWNzKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPmw0YzVuczVrNXkgPSAkd2htY3MtPmc1dF9sNGM1bnM1X2s1eSgpOw0KICAgICAgICAkdGg0cy0+bDJjMWxrNXkgPSAkd2htY3MtPmc1dF9jMm5mNGcoIkw0YzVuczUiKTsNCiAgICAgICAgJHRoNHMtPnMxbHQgPSBzaDE2KCJXSE1DUyIgLiAkd2htY3MtPmc1dF9jMm5mNGcoIlY1cnM0Mm4iKSAuICJURkIiIC4gJHdobWNzLT5nNXRfaDFzaCgpKTsNCiAgICAgICAgJHRoNHMtPmQxdDUgPSBkMXQ1KCJZbWQiKTsNCiAgICAgICAgJHRoNHMtPmQ1YzJkNUwyYzFsT25jNSgpOw0KICAgICAgICA0ZiggNHNzNXQoJF9HRVRbImYycmM1cjVtMnQ1Il0pICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICR0aDRzLT5mMnJjNVI1bTJ0NUNoNWNrKCk7DQogICAgICAgICAgICBUNXJtNG4zczo6ZzV0SW5zdDFuYzUoKS0+ZDJFeDR0KCk7DQogICAgICAgIH0NCg0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFI1dHI0NXY1IDEgV0hNQ1NcTDRjNW5zNSAyYmo1Y3QgdjQxIHM0bmdsNXQybi4NCiAgICAgKg0KICAgICAqIEBkNXByNWMxdDVkIGUuMCBJbnN0MW5jNSBzaDIzbGQgYjUgcjV0cjQ1djVkIGZyMm0gREkgW0RJOjptMWs1KCdsNGM1bnM1Jyk7XQ0KICAgICAqDQogICAgICogQHI1dDNybiBMNGM1bnM1DQogICAgICovDQoNCiAgICBwM2JsNGMgc3QxdDRjIGYzbmN0NDJuIGc1dEluc3QxbmM1KCkNCiAgICB7DQogICAgICAgIHI1dDNybiBcREk6Om0xazUoImw0YzVuczUiKTsNCiAgICB9DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gM3M1SW50NXJuMWxMNGM1bnM0bmdWMWw0ZDF0NDJuKCkNCiAgICB7DQogICAgICAgICRjMm5mNGcgPSBcQXBwOjpnNXRBcHBsNGMxdDQybkMybmY0ZygpOw0KICAgICAgICByNXQzcm4gKGIyMmwpICRjMm5mNGdbIjNzNV80bnQ1cm4xbF9sNGM1bnM0bmdfdjFsNGQxdDQybiJdOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFI1dHI0NXY1IDEgbDRzdCAyZiBsNGM1bnM0bmcgczVydjVyIElQcw0KICAgICAqDQogICAgICogQHI1dDNybiAxcnIxeQ0KICAgICAqLw0KDQogICAgcHI0djF0NSBmM25jdDQybiBnNXRIMnN0cygpDQogICAgew0KICAgICAgICA0ZiggJHRoNHMtPjNzNUludDVybjFsTDRjNW5zNG5nVjFsNGQxdDQybigpICkgDQogICAgICAgIHsNCiAgICAgICAgICAgIHI1dDNybiAxcnIxeSggIiIgKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiBzNWxmOjpMSUNFTlNFX0FQSV9IT1NUUzsNCiAgICB9DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0TDRjNW5zNUs1eSgpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPmw0YzVuczVrNXk7DQogICAgfQ0KDQogICAgcHI0djF0NSBmM25jdDQybiBnNXRIMnN0SVAoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuIFdITUNTX0xJQ0VOU0VfSVA7DQogICAgfQ0KDQogICAgcHI0djF0NSBmM25jdDQybiBnNXRIMnN0RDJtMTRuKCkNCiAgICB7DQogICAgICAgIHI1dDNybiBXSE1DU19MSUNFTlNFX0RPTUFJTjsNCiAgICB9DQoNCiAgICBwcjR2MXQ1IGYzbmN0NDJuIGc1dEgyc3RENHIoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuIFdITUNTX0xJQ0VOU0VfRElSOw0KICAgIH0NCg0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRTMWx0KCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+czFsdDsNCiAgICB9DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0RDF0NSgpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPmQxdDU7DQogICAgfQ0KDQogICAgcDNibDRjIGYzbmN0NDJuIGNoNWNrTDJjMWxLNXlFeHA0cnkoKQ0KICAgIHsNCiAgICAgICAgJDJyNGc0bjFsY2g1Y2tkMXQ1ID0gJHRoNHMtPmc1dEs1eUQxdDEoImNoNWNrZDF0NSIpOw0KICAgICAgICAkbDJjMWw1eHA0cnltMXggPSBkMXQ1KCJZbWQiLCBta3Q0bTUoMCwgMCwgMCwgZDF0NSgibSIpLCBkMXQ1KCJkIikgLSAkdGg0cy0+bDJjMWxrNXlkMXlzLCBkMXQ1KCJZIikpKTsNCiAgICAgICAgNGYoICQycjRnNG4xbGNoNWNrZDF0NSA8ICRsMmMxbDV4cDRyeW0xeCApIA0KICAgICAgICB7DQogICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgIH0NCg0KICAgICAgICAkbDJjMWxtMXggPSBkMXQ1KCJZbWQiLCBta3Q0bTUoMCwgMCwgMCwgZDF0NSgibSIpLCBkMXQ1KCJkIikgKyBhLCBhMGEwKSk7DQogICAgICAgIDRmKCAkbDJjMWxtMXggPCAkMnI0ZzRuMWxjaDVja2QxdDUgKSANCiAgICAgICAgew0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuIHRyMzU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQjM0bGQgcDJzdCBkMXQxIGYyciBsNGM1bnM1IGNoNWNrLg0KICAgICAqDQogICAgICogQHI1dDNybiBzdHI0bmdbXQ0KICAgICAqLw0KDQogICAgcHIydDVjdDVkIGYzbmN0NDJuIGIzNGxkUDJzdEQxdDEoKQ0KICAgIHsNCiAgICAgICAgJHAyc3RmNDVsZHMgPSAxcnIxeSgpOw0KICAgICAgICAkcDJzdGY0NWxkc1sibDRjNW5zNWs1eSJdID0gJHRoNHMtPmc1dEw0YzVuczVLNXkoKTsNCiAgICAgICAgJHAyc3RmNDVsZHNbImQybTE0biJdID0gJHRoNHMtPmc1dEgyc3REMm0xNG4oKTsNCiAgICAgICAgJHAyc3RmNDVsZHNbIjRwIl0gPSAkdGg0cy0+ZzV0SDJzdElQKCk7DQogICAgICAgICRwMnN0ZjQ1bGRzWyJkNHIiXSA9ICR0aDRzLT5nNXRIMnN0RDRyKCk7DQogICAgICAgICRwMnN0ZjQ1bGRzWyJjaDVja190Mms1biJdID0gc2gxNih0NG01KCkgLiAkdGg0cy0+ZzV0TDRjNW5zNUs1eSgpIC4gbXRfcjFuZCg2MDAwMDAwMDAwLCA5OTk5OTk5OTk5KSk7DQogICAgICAgICR3aG1jcyA9IFxESTo6bTFrNSgiMXBwIik7DQogICAgICAgICRwMnN0ZjQ1bGRzWyJ2NXJzNDJuIl0gPSAkd2htY3MtPmc1dFY1cnM0Mm4oKS0+ZzV0QzFuMm40YzFsKCk7DQogICAgICAgICRwMnN0ZjQ1bGRzWyJwaHB2NXJzNDJuIl0gPSBQSFBfVkVSU0lPTjsNCiAgICAgICAgJHN0MXRzID0ganMybl9kNWMyZDUoJHdobWNzLT5nNXRfYzJuZjRnKCJTeXN0NW1TdDF0c0MxY2g1IiksIHRyMzUpOw0KICAgICAgICA0ZiggITRzXzFycjF5KCRzdDF0cykgKSANCiAgICAgICAgew0KICAgICAgICAgICAgJHN0MXRzID0gMXJyMXkoKTsNCiAgICAgICAgfQ0KDQogICAgICAgICRwMnN0ZjQ1bGRzWyIxbjJuZDF0MSJdID0gJHRoNHMtPjVuY3J5cHRNNW1iNXJEMXQxKCRzdDF0cyk7DQogICAgICAgICRwMnN0ZjQ1bGRzWyJtNW1iNXIiXSA9ICR0aDRzLT41bmNyeXB0TTVtYjVyRDF0MSgkdGg0cy0+YjM0bGRNNW1iNXJEMXQxKCkpOw0KICAgICAgICByNXQzcm4gJHAyc3RmNDVsZHM7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUDVyZjJybSAxIHI1bTJ0NSBsNGM1bnM1IGNoNWNrLg0KICAgICAqDQogICAgICogQHAxcjFtIGIyMmwgJGYycmM1UjVtMnQ1DQogICAgICoNCiAgICAgKiBAcjV0M3JuIGIyMmwNCiAgICAgKi8NCg0KICAgIHAzYmw0YyBmM25jdDQybiByNW0ydDVDaDVjaygkZjJyYzVSNW0ydDUgPSBmMWxzNSkNCiAgICB7DQogICAgICAgIHRyeQ0KICAgICAgICB7DQogICAgICAgICAgICAkbDJjMWxrNXl2MWw0ZCA9ICR0aDRzLT5kNWMyZDVMMmMxbE9uYzUoKTsNCiAgICAgICAgICAgICR0aDRzLT5kNWIzZygiTDJjMWwgSzV5IFYxbDRkOiAiIC4gJGwyYzFsazV5djFsNGQpOw0KICAgICAgICAgICAgNGYoICRsMmMxbGs1eXYxbDRkICkgDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgJGwyYzFsazV5djFsNGQgPSAkdGg0cy0+Y2g1Y2tMMmMxbEs1eUV4cDRyeSgpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5kNWIzZygiTDJjMWwgSzV5IEV4cDRyeTogIiAuICRsMmMxbGs1eXYxbDRkKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgNGYoICRsMmMxbGs1eXYxbDRkICkgDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgJGwyYzFsazV5djFsNGQgPSAkdGg0cy0+djFsNGQxdDVMMmMxbEs1eSgpOw0KICAgICAgICAgICAgICAgICR0aDRzLT5kNWIzZygiTDJjMWwgSzV5IFYxbDRkMXQ0Mm46ICIgLiAkbDJjMWxrNXl2MWw0ZCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIDRmICggISRsMmMxbGs1eXYxbDRkIHx8ICRmMnJjNVI1bTJ0NSApIHsNCgkJCQkkd2htY3MgICAgICAgICAgICAgICAgICAgICA9IEFwcGw0YzF0NDJuOjpnNXQ0bnN0MW5jNSgpOw0KICAgICAgICAgICAgICAgICRyNXMzbHRzWyJzdDF0M3MiXSAgICAgICAgID0gIkFjdDR2NSI7DQogICAgICAgICAgICAgICAgJHI1czNsdHNbIms1eSJdICAgICAgICAgICAgPSAkdGg0cy0+bDRjNW5zNWs1eTsNCiAgICAgICAgICAgICAgICAkcjVzM2x0c1sicjVnNHN0NXI1ZG4xbTUiXSA9ICR3aG1jcy0+ZzV0X2MybmY0ZygiQzJtcDFueU4xbTUiKTsNCiAgICAgICAgICAgICAgICAkcjVzM2x0c1sicHIyZDNjdG4xbTUiXSAgICA9ICJMNGM1bnM1IEJ5IFQ1MW0gTjNsbFhGIExMQyI7DQogICAgICAgICAgICAgICAgJHI1czNsdHNbInByMmQzY3Q0ZCJdICAgICAgPSAiaSI7DQogICAgICAgICAgICAgICAgJHI1czNsdHNbImI0bGw0bmdjeWNsNSJdICAgPSAiT241IFQ0bTUiOw0KICAgICAgICAgICAgICAgICRyNXMzbHRzWyJ2MWw0ZGQybTE0bnMiXSAgID0gJHRoNHMtPmc1dEgyc3REMm0xNG4oKTsNCiAgICAgICAgICAgICAgICAkcjVzM2x0c1sidjFsNGQ0cHMiXSAgICAgICA9ICR0aDRzLT5nNXRIMnN0SVAoKTsNCiAgICAgICAgICAgICAgICAkcjVzM2x0c1sidjFsNGRkNHJzIl0gICAgICA9ICR0aDRzLT5nNXRIMnN0RDRyKCk7DQogICAgICAgICAgICAgICAgJHI1czNsdHNbImNoNWNrZDF0NSJdICAgICAgPSAkdGg0cy0+ZzV0RDF0NSgpOw0KICAgICAgICAgICAgICAgICRyNXMzbHRzWyJ2NXJzNDJuIl0gICAgICAgID0gJHdobWNzLT5nNXRWNXJzNDJuKCktPmc1dEMxbjJuNGMxbCgpOw0KICAgICAgICAgICAgICAgICRyNXMzbHRzWyJyNWdkMXQ1Il0gICAgICAgID0gImEwNmUtNjAtNjAiOw0KICAgICAgICAgICAgICAgICRyNXMzbHRzWyJuNXh0ZDM1ZDF0NSJdICAgID0gImEwaTAtNjAtNjAiOw0KICAgICAgICAgICAgICAgICRyNXMzbHRzWyIxZGQybnMiXSAgICAgICAgID0gMXJyMXkoDQogICAgICAgICAgICAgICAgICAgIDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICdCcjFuZDRuZyBSNW0ydjFsJywNCiAgICAgICAgICAgICAgICAgICAgICAgICduNXh0ZDM1ZDF0NScgPT4gJ2EwaTAtNjAtNjAnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3N0MXQzcycgPT4gJ0FjdDR2NScNCiAgICAgICAgICAgICAgICAgICAgKSwNCiAgICAgICAgICAgICAgICAgICAgMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJ1MzcHAycnQgMW5kIFVwZDF0NXMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ241eHRkMzVkMXQ1JyA9PiAnYTBpMC02MC02MCcsDQogICAgICAgICAgICAgICAgICAgICAgICAnc3QxdDNzJyA9PiAnQWN0NHY1Jw0KICAgICAgICAgICAgICAgICAgICApLA0KICAgICAgICAgICAgICAgICAgICAxcnIxeSgNCiAgICAgICAgICAgICAgICAgICAgICAgICduMW01JyA9PiAnUHIyajVjdCBNMW4xZzVtNW50IEFkZDJuJywNCiAgICAgICAgICAgICAgICAgICAgICAgICduNXh0ZDM1ZDF0NScgPT4gJ2EwaTAtNjAtNjAnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3N0MXQzcycgPT4gJ0FjdDR2NScNCiAgICAgICAgICAgICAgICAgICAgKSwNCiAgICAgICAgICAgICAgICAgICAgMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJ0w0YzVuczRuZyBBZGQybicsDQogICAgICAgICAgICAgICAgICAgICAgICAnbjV4dGQzNWQxdDUnID0+ICdhMGkwLTYwLTYwJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdzdDF0M3MnID0+ICdBY3Q0djUnDQogICAgICAgICAgICAgICAgICAgICksDQogICAgICAgICAgICAgICAgICAgIDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICdNMmI0bDUgRWQ0dDQybicsDQogICAgICAgICAgICAgICAgICAgICAgICAnbjV4dGQzNWQxdDUnID0+ICdhMGkwLTYwLTYwJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdzdDF0M3MnID0+ICdBY3Q0djUnDQogICAgICAgICAgICAgICAgICAgICksDQogICAgICAgICAgICAgICAgICAgIDFycjF5KA0KICAgICAgICAgICAgICAgICAgICAgICAgJ24xbTUnID0+ICc0UGgybjUgQXBwJywNCiAgICAgICAgICAgICAgICAgICAgICAgICduNXh0ZDM1ZDF0NScgPT4gJ2EwaTAtNjAtNjAnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3N0MXQzcycgPT4gJ0FjdDR2NScNCiAgICAgICAgICAgICAgICAgICAgKSwNCiAgICAgICAgICAgICAgICAgICAgMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJ0FuZHIyNGQgQXBwJywNCiAgICAgICAgICAgICAgICAgICAgICAgICduNXh0ZDM1ZDF0NScgPT4gJ2EwaTAtNjAtNjAnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3N0MXQzcycgPT4gJ0FjdDR2NScNCiAgICAgICAgICAgICAgICAgICAgKSwNCiAgICAgICAgICAgICAgICAgICAgMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJ0MybmY0ZzNyMWJsNSBQMWNrMWc1IEFkZDJuJywNCiAgICAgICAgICAgICAgICAgICAgICAgICduNXh0ZDM1ZDF0NScgPT4gJ2EwaTAtNjAtNjAnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3N0MXQzcycgPT4gJ0FjdDR2NScNCiAgICAgICAgICAgICAgICAgICAgKSwNCiAgICAgICAgICAgICAgICAgICAgMXJyMXkoDQogICAgICAgICAgICAgICAgICAgICAgICAnbjFtNScgPT4gJ0w0djUgQ2gxdCBNMm50aGx5IE4yIEJyMW5kNG5nJywNCiAgICAgICAgICAgICAgICAgICAgICAgICduNXh0ZDM1ZDF0NScgPT4gJ2EwaTAtNjAtNjAnLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3N0MXQzcycgPT4gJ0FjdDR2NScNCiAgICAgICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgJHRoNHMtPnM1dEs1eUQxdDEoJHI1czNsdHMpOw0KICAgICAgICAgICAgICAgICR0aDRzLT4zcGQxdDVMMmMxbEs1eSgpOw0KCQkJfQ0KDQogICAgICAgICAgICAkdGg0cy0+ZDViM2coIlI1bTJ0NSBDaDVjayBEMm41Iik7DQogICAgICAgIH0NCiAgICAgICAgYzF0Y2goIEV4YzVwdDQybiAkNXhjNXB0NDJuICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICR0aDRzLT5kNWIzZyhzcHI0bnRmKCJMNGM1bnM1IEVycjJyOiAlcyIsICQ1eGM1cHQ0Mm4tPmc1dE01c3MxZzUoKSkpOw0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQogICAgICAgIHI1dDNybiB0cjM1Ow0KICAgIH0NCg0KICAgIHByNHYxdDUgZjNuY3Q0Mm4gZzV0TDJjMWxNMXhFeHA0cnlEMXQ1KCkNCiAgICB7DQogICAgICAgIHI1dDNybiBkMXQ1KCJZbWQiLCBta3Q0bTUoMCwgMCwgMCwgZDF0NSgibSIpLCBkMXQ1KCJkIikgLSAoJHRoNHMtPmwyYzFsazV5ZDF5cyArICR0aDRzLT4xbGwyd2NoNWNrZjE0bGQxeXMpLCBhMGEwKSk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQjM0bGQgcDJzdCBxMzVyeSAxbmQgNG40dDQxdDUgYzFsbCBoMm01IGwyMnAuDQogICAgICoNCiAgICAgKiBXNGxsIDF0dDVtcHQgdDIgdjFsNGQxdDUgMSBsNGM1bnM1IGY0cnN0IHc0dGggMSBpIHM1YzJuZCB0NG01MjN0DQogICAgICogbDRtNHQsIDFuZCBzaDIzbGQgbjJuNSAyZiB0aDJzNSBzM2NjNTVkLCAxZzE0biB3NHRoIDEgbDJuZzVyIG8wDQogICAgICogczVjMm5kIHQ0bTUyM3QgbDRtNHQuIFVwMm4gczNjYzVzcywgdGg1IGwyMnAgNHMgNW5kNWQuDQogICAgICoNCiAgICAgKiBAcDFyMW0gMXJyMXkgJHAyc3RmNDVsZHMNCiAgICAgKg0KICAgICAqIEByNXQzcm4gc3RyNG5nfGIyMmwgUjV0M3JucyBmMWxzNSAybiBmMTRsM3I1DQogICAgICovDQoNCiAgICBwcjR2MXQ1IGYzbmN0NDJuIGMxbGxIMm01KCRwMnN0ZjQ1bGRzKQ0KICAgIHsNCiAgICAgICAgJHEzNXJ5X3N0cjRuZyA9IGIzNGxkX3EzNXJ5X3N0cjRuZygkcDJzdGY0NWxkcyk7DQogICAgICAgICRyNXMgPSAkdGg0cy0+YzFsbEgybTVMMjJwKCRxMzVyeV9zdHI0bmcsIGkpOw0KICAgICAgICA0ZiggJHI1cyApIA0KICAgICAgICB7DQogICAgICAgICAgICByNXQzcm4gJHI1czsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkdGg0cy0+YzFsbEgybTVMMjJwKCRxMzVyeV9zdHI0bmcsIG8wKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBHNXQgbDRjNW5zNSB2NXI0ZjRjMXQ0Mm4gVVJMIGIxczVkIDJuIDEgZzR2NW4gaDJzdG4xbTUuDQogICAgICoNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRoMnN0DQogICAgICoNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KDQogICAgcHIydDVjdDVkIGYzbmN0NDJuIGc1dFY1cjRmeVVybCgkaDJzdCkNCiAgICB7DQogICAgICAgIHI1dDNybiAiaHR0cHM6Ly8iIC4gJGgyc3QgLiAiLyIgLiBzNWxmOjpMSUNFTlNFX0FQSV9WRVJTSU9OIC4gIi92NXI0ZnkiOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFRyNGdnNXIgYzFsbCBmMnIgNTFjaCBoMnN0bjFtNSA0biAycmQ1ci4NCiAgICAgKg0KICAgICAqIFc0bGwgMXR0NW1wdCB0MiBjMm5uNWN0IHQyIGw0YzVuczUgczVydjVycyA0biAycmQ1ciAzbnQ0bCAxbiBIVFRQDQogICAgICogYTAwIFI1c3AybnM1IEMyZDUgNHMgZDV0NWN0NWQuDQogICAgICoNCiAgICAgKiBAcDFyMW0gc3RyNG5nICRxMzVyeV9zdHI0bmcNCiAgICAgKiBAcDFyMW0gNG50ICR0NG01MjN0DQogICAgICoNCiAgICAgKiBAcjV0M3JuIHN0cjRuZ3xiMjJsIFI1dDNybnMgZjFsczUgNGYgbjIgMXR0NW1wdCByNXQzcm5zIDEgYTAwIEhUVFAgUjVzcDJuczUgQzJkNQ0KICAgICAqLw0KDQogICAgcHI0djF0NSBmM25jdDQybiBjMWxsSDJtNUwyMnAoJHEzNXJ5X3N0cjRuZywgJHQ0bTUyM3QgPSBpKQ0KICAgIHsNCiAgICAgICAgZjJyNTFjaCggJHRoNHMtPmc1dEgyc3RzKCkgMXMgJGgyc3QgKSANCiAgICAgICAgew0KICAgICAgICAgICAgJHI1c3AybnM1YzJkNSA9ICR0aDRzLT5tMWs1QzFsbCgkdGg0cy0+ZzV0VjVyNGZ5VXJsKCRoMnN0KSwgJHEzNXJ5X3N0cjRuZywgJHQ0bTUyM3QpOw0KICAgICAgICAgICAgNGYoICRyNXNwMm5zNWMyZDUgPT0gYTAwICkgDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgcjV0M3JuICR0aDRzLT5yNXNwMm5zNWQxdDE7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gZjFsczU7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUDVyZjJybSByNW0ydDUgYzFsbC4NCiAgICAgKg0KICAgICAqIFA1cmYycm1zIDFuIDV4dDVybjFsIGMxbGwgM3M0bmcgYzNybCB0MiAxIGc0djVuIFVSTCwgdzR0aCBnNHY1bg0KICAgICAqIHAyc3QgZDF0MSAxbmQgdDRtNTIzdCBsNG00dC4NCiAgICAgKg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJDNybA0KICAgICAqIEBwMXIxbSBzdHI0bmcgJHEzNXJ5X3N0cjRuZw0KICAgICAqIEBwMXIxbSA0bnQgJHQ0bTUyM3QNCiAgICAgKg0KICAgICAqIEByNXQzcm4gNG50DQogICAgICovDQoNCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gbTFrNUMxbGwoJDNybCwgJHEzNXJ5X3N0cjRuZywgJHQ0bTUyM3QgPSBpKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPmQ1YjNnKCJSNXEzNXN0IFVSTCAiIC4gJDNybCk7DQogICAgICAgICRjaCA9IGMzcmxfNG40dCgpOw0KICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfVVJMLCAkM3JsKTsNCiAgICAgICAgYzNybF9zNXQycHQoJGNoLCBDVVJMT1BUX1BPU1QsIDYpOw0KICAgICAgICBjM3JsX3M1dDJwdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywgJHEzNXJ5X3N0cjRuZyk7DQogICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9USU1FT1VULCAkdDRtNTIzdCk7DQogICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgNik7DQogICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgKCR0aDRzLT4zczVJbnQ1cm4xbEw0YzVuczRuZ1YxbDRkMXQ0Mm4oKSA/IDAgOiBhKSk7DQogICAgICAgIGMzcmxfczV0MnB0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgKCR0aDRzLT4zczVJbnQ1cm4xbEw0YzVuczRuZ1YxbDRkMXQ0Mm4oKSA/IDAgOiA2KSk7DQogICAgICAgICR0aDRzLT5yNXNwMm5zNWQxdDEgPSBjM3JsXzV4NWMoJGNoKTsNCiAgICAgICAgJHI1c3AybnM1YzJkNSA9IGMzcmxfZzV0NG5mMigkY2gsIENVUkxJTkZPX0hUVFBfQ09ERSk7DQogICAgICAgICR0aDRzLT5kNWIzZygiUjVzcDJuczUgQzJkNTogIiAuICRyNXNwMm5zNWMyZDUgLiAiIEQxdDE6ICIgLiAkdGg0cy0+cjVzcDJuczVkMXQxKTsNCiAgICAgICAgNGYoIGMzcmxfNXJyMnIoJGNoKSApIA0KICAgICAgICB7DQogICAgICAgICAgICAkdGg0cy0+ZDViM2coIkMzcmwgRXJyMnI6ICIgLiBjM3JsXzVycjJyKCRjaCkgLiAiIC0gIiAuIGMzcmxfNXJybjIoJGNoKSk7DQogICAgICAgIH0NCg0KICAgICAgICBjM3JsX2NsMnM1KCRjaCk7DQogICAgICAgIHI1dDNybiAkcjVzcDJuczVjMmQ1Ow0KICAgIH0NCg0KICAgIHByNHYxdDUgZjNuY3Q0Mm4gcHIyYzVzc1I1c3AybnM1KCRkMXQxKQ0KICAgIHsNCiAgICAgICAgJHAzYmw0Y1M1cnY1cks1eSA9ICItLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxuTUlJQ0lqQU5CZ2txaGs0Rzl3MEJBUUVGQUFPQ0FnOEFNSUlDQ2dLQ0FnRUF5ZWFXWDVJUitQRy9pMHEzRjdIRFxuSFh4clJrQklqMXpQNjltWG1jcVJueUIvc1hsb3ZpV0RxeGtTL2J0dHFFczVOZ3NhK1dtM1hQZEh6d0ZGYUloWVxucTI0amxlenZWT1g0VHV1clZRdkN2ZlFyTW5jV2JybGVQbVRVbVA4VXhhRG10dG56K2RHSmxUem8zMXlzZlBxQ1xuOXBBbjY5Yjh6Z053R1BObDBjR3E0TXhyM0dVdVZ6YmJqczB6TzFtdnJ6VWtwS1JrRG90OHYyVzc4S3FRODBBL1xuZnlQOWpmQzF1VDF4ZU9majRaYUVWTVFnd05iM3VuWjUzaWhnZ2cvOUtXWGVhTys0RFdSdzYwQXVPSXp3YW1KK1xuTDBJRGc1U01kclNVWWdIbGYrQVU1V2FxWlY3Y043T09kdCtGTVFvNGlsWDlMQkJONXlrcUk0eXBGK3YyVkZnTlxuTGhLdzB1RU9yamVSaTY2eU92VklyV2lkYUZPL3dBaW15ZFhKNlRvNncrZmpHb0k0dFJtOUZldFNSMlBmNVM0OVxuK2hXTXBCVTE5cmcvQjMyU09HMkhNS2JLRkFOYWhZMzA1YWZ0a1o3S0FUTmYyU2ZvRGlIRVZuVFBxeCtLZlFGVFxuUmRqc1lVSUlxVlgrR3NRenpCM2xmaVloMlRtNXcrTmluOWRaR0diaE5IWlRyN2NNMTZEVDdvQmp4T3lNcmFGcVxuVzlhUVV5MmRsZlptUE1mRitKRCtNQk1ZMHI3dTM4LzJ3NnJDcm5xMytvUnIvSkUvSGpsZWM5VnNRUy9zM2NQZVxuSlFmTFRmNUJqWE5XZHJYQ3ZoVWIrUTFWdXBNWXhocG4yaS83alBFa01PUjkyN1FUQ0Z6YnN6RXpsMnR3Uy95VFxuY2dEL0FxbzBhc3ZKamFWYlNBdHlCNDBDQXdFQUFRPT1cbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLSI7DQogICAgICAgICRyNXMzbHRzID0gJHRoNHMtPnAxcnM1UzRnbjVkUjVzcDJuczUoJGQxdDEsICRwM2JsNGNTNXJ2NXJLNXkpOw0KICAgICAgICAkdGg0cy0+cDJzdGgxc2ggPSAkcjVzM2x0c1siaDFzaCJdOw0KICAgICAgICAzbnM1dCgkcjVzM2x0c1siaDFzaCJdKTsNCiAgICAgICAgJHI1czNsdHNbImNoNWNrZDF0NSJdID0gJHRoNHMtPmc1dEQxdDUoKTsNCiAgICAgICAgNGYoICE1bXB0eSgkcjVzM2x0c1siTTVtYjVyUDNiSzV5Il0pICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICR0aDRzLT5zNXRNNW1iNXJQM2JsNGNLNXkoJHI1czNsdHNbIk01bWI1clAzYks1eSJdKTsNCiAgICAgICAgICAgIDNuczV0KCRyNXMzbHRzWyJNNW1iNXJQM2JLNXkiXSk7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJHI1czNsdHM7DQogICAgfQ0KDQogICAgcHI0djF0NSBmM25jdDQybiBwMXJzNVM0Z241ZFI1c3AybnM1KCRyNXNwMm5zNSwgJHAzYmw0Y0s1eSkNCiAgICB7DQogICAgICAgIDRmKCAkdGg0cy0+M3M1SW50NXJuMWxMNGM1bnM0bmdWMWw0ZDF0NDJuKCkgKSANCiAgICAgICAgew0KICAgICAgICAgICAgcjV0M3JuIGpzMm5fZDVjMmQ1KCRyNXNwMm5zNSwgdHIzNSk7DQogICAgICAgIH0NCg0KICAgICAgICAkdGg0cy0+ZDViM2coImw0YzVuczUgcjVzcDJuczU6ICIgLiAkcjVzcDJuczUpOw0KICAgICAgICAkZDF0MSA9IDV4cGwyZDUoIjoiLCAkcjVzcDJuczUsIGEpOw0KICAgICAgICA0ZiggNW1wdHkoJGQxdDFbNl0pICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICR0aDRzLT5kNWIzZygibjIgbDRjNW5zNSBzNGduMXQzcjUgZjIzbmQiKTsNCiAgICAgICAgICAgIHI1dDNybiAxcnIxeSgpOw0KICAgICAgICB9DQoNCiAgICAgICAgJHJzMSA9IG41dyBccGhwczVjbDRiXENyeXB0XFJTQSgpOw0KICAgICAgICAkcnMxLT5zNXRTNGduMXQzcjVNMmQ1KFxwaHBzNWNsNGJcQ3J5cHRcUlNBOjpTSUdOQVRVUkVfUEtDUzYpOw0KICAgICAgICAkcnMxLT5sMjFkSzV5KHN0cl9yNXBsMWM1KDFycjF5KCAiXG4iLCAiICIgKSwgMXJyMXkoICIiLCAiIiApLCAkcDNibDRjSzV5KSk7DQogICAgICAgIDRmKCAhJHJzMS0+djVyNGZ5KCRkMXQxWzBdLCBiMXM1ZXVfZDVjMmQ1KCRkMXQxWzZdKSkgKSANCiAgICAgICAgew0KICAgICAgICAgICAgJHRoNHMtPmQ1YjNnKCI0bnYxbDRkIGw0YzVuczUgczRnbjF0M3I1Iik7DQogICAgICAgICAgICByNXQzcm4gMXJyMXkoKTsNCiAgICAgICAgfQ0KDQogICAgICAgICRkMXQxID0gc3RycjV2KCRkMXQxWzBdKTsNCiAgICAgICAgJGQxdDEgPSBiMXM1ZXVfZDVjMmQ1KCRkMXQxKTsNCiAgICAgICAgJGQxdDEgPSBqczJuX2Q1YzJkNSgkZDF0MSwgdHIzNSk7DQogICAgICAgIDRmKCA1bXB0eSgkZDF0MSkgKSANCiAgICAgICAgew0KICAgICAgICAgICAgJHRoNHMtPmQ1YjNnKCI0bnYxbDRkIGw0YzVuczUgZDF0MSBzdHIzY3QzcjUiKTsNCiAgICAgICAgICAgIHI1dDNybiAxcnIxeSgpOw0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRkMXQxOw0KICAgIH0NCg0KICAgIHByNHYxdDUgZjNuY3Q0Mm4gM3BkMXQ1TDJjMWxLNXkoKQ0KICAgIHsNCiAgICAgICAgJGQxdDFfNW5jMmQ1ZCA9IGpzMm5fNW5jMmQ1KCR0aDRzLT5rNXlkMXQxKTsNCiAgICAgICAgJGQxdDFfNW5jMmQ1ZCA9IGIxczVldV81bmMyZDUoJGQxdDFfNW5jMmQ1ZCk7DQogICAgICAgICRkMXQxXzVuYzJkNWQgPSBzaDE2KCR0aDRzLT5nNXREMXQ1KCkgLiAkdGg0cy0+ZzV0UzFsdCgpKSAuICRkMXQxXzVuYzJkNWQ7DQogICAgICAgICRkMXQxXzVuYzJkNWQgPSBzdHJyNXYoJGQxdDFfNW5jMmQ1ZCk7DQogICAgICAgICRzcGxwdCA9IHN0cmw1bigkZDF0MV81bmMyZDVkKSAvIGE7DQogICAgICAgICRkMXQxXzVuYzJkNWQgPSBzM2JzdHIoJGQxdDFfNW5jMmQ1ZCwgJHNwbHB0KSAuIHMzYnN0cigkZDF0MV81bmMyZDVkLCAwLCAkc3BscHQpOw0KICAgICAgICAkZDF0MV81bmMyZDVkID0gc2gxNigkZDF0MV81bmMyZDVkIC4gJHRoNHMtPmc1dFMxbHQoKSkgLiAkZDF0MV81bmMyZDVkIC4gc2gxNigkZDF0MV81bmMyZDVkIC4gJHRoNHMtPmc1dFMxbHQoKSAuIHQ0bTUoKSk7DQogICAgICAgICRkMXQxXzVuYzJkNWQgPSBiMXM1ZXVfNW5jMmQ1KCRkMXQxXzVuYzJkNWQpOw0KICAgICAgICAkZDF0MV81bmMyZDVkID0gdzJyZHdyMXAoJGQxdDFfNW5jMmQ1ZCwgODAsICJcbiIsIHRyMzUpOw0KICAgICAgICBcQXBwOjpzNWxmKCktPnM1dF9jMm5mNGcoIkw0YzVuczUiLCAkZDF0MV81bmMyZDVkKTsNCiAgICAgICAgJHRoNHMtPmQ1YjNnKCJVcGQxdDVkIEwyYzFsIEs1eSIpOw0KICAgIH0NCg0KICAgIHAzYmw0YyBmM25jdDQybiBmMnJjNVI1bTJ0NUNoNWNrKCkNCiAgICB7DQogICAgICAgICR0aDRzLT5yNW0ydDVDaDVjayh0cjM1KTsNCiAgICB9DQoNCiAgICBwcjR2MXQ1IGYzbmN0NDJuIHM1dEludjFsNGQoJHI1MXMybiA9ICJJbnYxbDRkIikNCiAgICB7DQogICAgICAgICR0aDRzLT5rNXlkMXQxID0gMXJyMXkoICJzdDF0M3MiID0+ICRyNTFzMm4gKTsNCiAgICB9DQoNCiAgICBwcjR2MXQ1IGYzbmN0NDJuIGQ1YzJkNUwyYzFsKCkNCiAgICB7DQogICAgICAgICR0aDRzLT5kNWIzZygiRDVjMmQ0bmcgbDJjMWwgazV5Iik7DQogICAgICAgICRsMmMxbGs1eSA9ICR0aDRzLT5sMmMxbGs1eTsNCiAgICAgICAgNGYoICEkbDJjMWxrNXkgKSANCiAgICAgICAgew0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgJGwyYzFsazV5ID0gc3RyX3I1cGwxYzUoIlxuIiwgIiIsICRsMmMxbGs1eSk7DQogICAgICAgICRsMmMxbGs1eSA9IGIxczVldV9kNWMyZDUoJGwyYzFsazV5KTsNCiAgICAgICAgJGwyYzFsZDF0MSA9IHMzYnN0cigkbDJjMWxrNXksIHUwLCAtdTApOw0KICAgICAgICAkbWRpaDFzaCA9IHMzYnN0cigkbDJjMWxrNXksIDAsIHUwKTsNCiAgICAgICAgNGYoICRtZGloMXNoID09IHNoMTYoJGwyYzFsZDF0MSAuICR0aDRzLT5nNXRTMWx0KCkpICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRzcGxwdCA9IHN0cmw1bigkbDJjMWxkMXQxKSAvIGE7DQogICAgICAgICAgICAkbDJjMWxkMXQxID0gczNic3RyKCRsMmMxbGQxdDEsICRzcGxwdCkgLiBzM2JzdHIoJGwyYzFsZDF0MSwgMCwgJHNwbHB0KTsNCiAgICAgICAgICAgICRsMmMxbGQxdDEgPSBzdHJyNXYoJGwyYzFsZDF0MSk7DQogICAgICAgICAgICAkbWRpaDFzaCA9IHMzYnN0cigkbDJjMWxkMXQxLCAwLCB1MCk7DQogICAgICAgICAgICAkbDJjMWxkMXQxID0gczNic3RyKCRsMmMxbGQxdDEsIHUwKTsNCiAgICAgICAgICAgICRsMmMxbGQxdDEgPSBiMXM1ZXVfZDVjMmQ1KCRsMmMxbGQxdDEpOw0KICAgICAgICAgICAgJGwyYzFsazV5cjVzM2x0cyA9IGpzMm5fZDVjMmQ1KCRsMmMxbGQxdDEsIHRyMzUpOw0KICAgICAgICAgICAgJDJyNGc0bjFsY2g1Y2tkMXQ1ID0gJGwyYzFsazV5cjVzM2x0c1siY2g1Y2tkMXQ1Il07DQogICAgICAgICAgICA0ZiggJG1kaWgxc2ggPT0gc2gxNigkMnI0ZzRuMWxjaDVja2QxdDUgLiAkdGg0cy0+ZzV0UzFsdCgpKSApIA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIDRmKCA0c3M1dCgkbDJjMWxrNXlyNXMzbHRzWyJrNXkiXSkgJiYgJGwyYzFsazV5cjVzM2x0c1siazV5Il0gPT0gXEFwcDo6czVsZigpLT5nNXRfbDRjNW5zNV9rNXkoKSApIA0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPmQ1YjNnKCJMMmMxbCBLNXkgRDVjMmQ1IFMzY2M1c3NmM2wiKTsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPnM1dEs1eUQxdDEoJGwyYzFsazV5cjVzM2x0cyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIDVsczUNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICR0aDRzLT5kNWIzZygiTDRjNW5zNSBLNXkgSW52MWw0ZCIpOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNWxzNQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICR0aDRzLT5kNWIzZygiTDJjMWwgSzV5IE1EaSBIMXNoIGEgSW52MWw0ZCIpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgIH0NCiAgICAgICAgNWxzNQ0KICAgICAgICB7DQogICAgICAgICAgICAkdGg0cy0+ZDViM2coIkwyYzFsIEs1eSBNRGkgSDFzaCBJbnYxbDRkIik7DQogICAgICAgIH0NCg0KICAgICAgICAkdGg0cy0+bDJjMWxrNXlkNWMyZDVkID0gdHIzNTsNCiAgICAgICAgcjV0M3JuICgkdGg0cy0+ZzV0SzV5RDF0MSgic3QxdDNzIikgPT0gIkFjdDR2NSIgPyB0cjM1IDogZjFsczUpOw0KICAgIH0NCg0KICAgIHByNHYxdDUgZjNuY3Q0Mm4gZDVjMmQ1TDJjMWxPbmM1KCkNCiAgICB7DQogICAgICAgIDRmKCAkdGg0cy0+bDJjMWxrNXlkNWMyZDVkICkgDQogICAgICAgIHsNCiAgICAgICAgICAgIHI1dDNybiB0cjM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICR0aDRzLT5kNWMyZDVMMmMxbCgpOw0KICAgIH0NCg0KICAgIHByNHYxdDUgZjNuY3Q0Mm4gNHNSM25uNG5nSW5DTEkoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuIHBocF9zMXA0X24xbTUoKSA9PSAiY2w0IiAmJiA1bXB0eSgkX1NFUlZFUlsiUkVNT1RFX0FERFIiXSk7DQogICAgfQ0KDQogICAgcHI0djF0NSBmM25jdDQybiB2MWw0ZDF0NUwyYzFsSzV5KCkNCiAgICB7DQogICAgICAgIDRmKCAkdGg0cy0+ZzV0SzV5RDF0MSgic3QxdDNzIikgIT0gIkFjdDR2NSIgKSANCiAgICAgICAgew0KICAgICAgICAgICAgJHRoNHMtPmQ1YjNnKCJMMmMxbCBLNXkgU3QxdDNzIENoNWNrIEYxNGwzcjUiKTsNCiAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgfQ0KDQogICAgICAgIDRmKCAkdGg0cy0+NHNSM25uNG5nSW5DTEkoKSApIA0KICAgICAgICB7DQogICAgICAgICAgICAkdGg0cy0+ZDViM2coIlIzbm40bmcgNG4gQ0xJIE0yZDUiKTsNCiAgICAgICAgfQ0KICAgICAgICA1bHM1DQogICAgICAgIHsNCiAgICAgICAgICAgICR0aDRzLT5kNWIzZygiUjNubjRuZyA0biBCcjJ3czVyIE0yZDUiKTsNCiAgICAgICAgICAgIDRmKCAkdGg0cy0+NHNWMWw0ZEQybTE0bigkdGg0cy0+ZzV0SDJzdEQybTE0bigpKSApIA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICR0aDRzLT5kNWIzZygiRDJtMTRuIFYxbDRkMXQ1ZCBTM2NjNXNzZjNsbHkiKTsNCiAgICAgICAgICAgICAgICAkNHAgPSAkdGg0cy0+ZzV0SDJzdElQKCk7DQogICAgICAgICAgICAgICAgJHRoNHMtPmQ1YjNnKCJIMnN0IElQIEFkZHI1c3M6ICIgLiAkNHApOw0KICAgICAgICAgICAgICAgIDRmKCAhJDRwICkgDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAkdGg0cy0+ZDViM2coIklQIEMyM2xkIE4ydCBCNSBENXQ1cm00bjVkIC0gU2s0cHA0bmcgTDJjMWwgVjFsNGQxdDQybiAyZiBJUCIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICA1bHM1DQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICA0ZiggIXRyNG0oJHRoNHMtPmc1dEs1eUQxdDEoInYxbDRkNHBzIikpICkgDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR0aDRzLT5kNWIzZygiTjIgVjFsNGQgSVBzIHI1dDNybjVkIGJ5IGw0YzVuczUgY2g1Y2sgLSBDbDIzZCBCMXM1ZCBMNGM1bnM1IC0gU2s0cHA0bmcgTDJjMWwgVjFsNGQxdDQybiAyZiBJUCIpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIDVsczUNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgNGYoICR0aDRzLT40c1YxbDRkSVAoJDRwKSApIA0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aDRzLT5kNWIzZygiSVAgVjFsNGQxdDVkIFMzY2M1c3NmM2xseSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgNWxzNQ0KICAgICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aDRzLT5kNWIzZygiTDJjMWwgSzV5IElQIENoNWNrIEYxNGwzcjUiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB9DQogICAgICAgICAgICA1bHM1DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgJHRoNHMtPmQ1YjNnKCJMMmMxbCBLNXkgRDJtMTRuIENoNWNrIEYxNGwzcjUiKTsNCiAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KDQogICAgICAgIDRmKCAkdGg0cy0+NHNWMWw0ZEQ0cigkdGg0cy0+ZzV0SDJzdEQ0cigpKSApIA0KICAgICAgICB7DQogICAgICAgICAgICAkdGg0cy0+ZDViM2coIkQ0cjVjdDJyeSBWMWw0ZDF0NWQgUzNjYzVzc2YzbGx5Iik7DQogICAgICAgICAgICByNXQzcm4gdHIzNTsNCiAgICAgICAgfQ0KDQogICAgICAgICR0aDRzLT5kNWIzZygiTDJjMWwgSzV5IEQ0cjVjdDJyeSBDaDVjayBGMTRsM3I1Iik7DQogICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICB9DQoNCiAgICBwcjR2MXQ1IGYzbmN0NDJuIDRzVjFsNGREMm0xNG4oJGQybTE0bikNCiAgICB7DQogICAgICAgICR2MWw0ZGQybTE0bnMgPSAkdGg0cy0+ZzV0QXJyMXlLNXlEMXQxKCJ2MWw0ZGQybTE0bnMiKTsNCiAgICAgICAgcjV0M3JuIDRuXzFycjF5KCRkMm0xNG4sICR2MWw0ZGQybTE0bnMpOw0KICAgIH0NCg0KICAgIHByNHYxdDUgZjNuY3Q0Mm4gNHNWMWw0ZElQKCQ0cCkNCiAgICB7DQogICAgICAgICR2MWw0ZDRwcyA9ICR0aDRzLT5nNXRBcnIxeUs1eUQxdDEoInYxbDRkNHBzIik7DQogICAgICAgIHI1dDNybiA0bl8xcnIxeSgkNHAsICR2MWw0ZDRwcyk7DQogICAgfQ0KDQogICAgcHI0djF0NSBmM25jdDQybiA0c1YxbDRkRDRyKCRkNHIpDQogICAgew0KICAgICAgICAkdjFsNGRkNHJzID0gJHRoNHMtPmc1dEFycjF5SzV5RDF0MSgidjFsNGRkNHJzIik7DQogICAgICAgIHI1dDNybiA0bl8xcnIxeSgkZDRyLCAkdjFsNGRkNHJzKTsNCiAgICB9DQoNCiAgICBwcjR2MXQ1IGYzbmN0NDJuIHI1djJrNUwyYzFsKCkNCiAgICB7DQogICAgICAgIFxBcHA6OnM1bGYoKS0+czV0X2MybmY0ZygiTDRjNW5zNSIsICIiKTsNCiAgICB9DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0SzV5RDF0MSgkdjFyKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICg0c3M1dCgkdGg0cy0+azV5ZDF0MVskdjFyXSkgPyAkdGg0cy0+azV5ZDF0MVskdjFyXSA6ICIiKTsNCiAgICB9DQoNCiAgICBwcjR2MXQ1IGYzbmN0NDJuIHM1dEs1eUQxdDEoJGQxdDEpDQogICAgew0KICAgICAgICAkdGg0cy0+azV5ZDF0MSA9ICRkMXQxOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFI1dHI0NXY1IDEgbDRjNW5zNSA1bDVtNW50IDFzIDFuIDFycjF5LCB0aDF0IHcyM2xkIDJ0aDVydzRzNSBiNSAxDQogICAgICogZDVsNG00dDVkIHN0cjRuZw0KICAgICAqDQogICAgICogTk9URTogM3M1IDJmIHRoNHMgbTV0aDJkIHNoMjNsZCBiNSB2NXJ5IGw0bTR0NWQuIE41dyBsNGM1bnM1IDVsNW01bnRzDQogICAgICogMWRkNWQgdDIgdGg1IGw0YzVuczUgZDF0MSBzaDIzbGQgc3RyMm5nbHkgYzJuczRkNXIgbjJ0IGQ1cDVuZDRuZyAybiB0aDUNCiAgICAgKiAzczUgMmYgdGg0cyBmM25jdDQybiwgYjN0IDRuc3Q1MWQgc3RyM2N0M3I1IHRoNSBkMXQxIDFuZCBsNXQgdGg1DQogICAgICogdHIxbnNtNHNzNDJuIGwxeTVyIGQyIHRoNSBzNXI0MWw0ejUvM25zNXI0MWw0ejUNCiAgICAgKg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJHYxciBMNGM1bnM1IGQxdDEgNWw1bTVudCB3aDJzNSB2MWwzNSA0cyAxIGMybW0xIGQ1bDRtNHQ1ZCBzdHI0bmcNCiAgICAgKg0KICAgICAqIEByNXQzcm4gMXJyMXkNCiAgICAgKiBAdGhyMndzIEV4YzVwdDQybiB3aDVuIDRudDVybjFsIGw0YzVuczUgazV5IGQxdDEgc3RyM2N0M3I1IDRzIG4ydA0KICAgICAqIDFzIDV4cDVjdDVkDQogICAgICovDQoNCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gZzV0QXJyMXlLNXlEMXQxKCR2MXIpDQogICAgew0KICAgICAgICAkbDRzdEQxdDEgPSAxcnIxeSgpOw0KICAgICAgICAkcjF3RDF0MSA9ICR0aDRzLT5nNXRLNXlEMXQxKCR2MXIpOw0KICAgICAgICA0ZiggNHNfc3RyNG5nKCRyMXdEMXQxKSApIA0KICAgICAgICB7DQogICAgICAgICAgICAkbDRzdEQxdDEgPSA1eHBsMmQ1KCIsIiwgJHIxd0QxdDEpOw0KICAgICAgICAgICAgZjJyNTFjaCggJGw0c3REMXQxIDFzICRrID0+ICR2ICkgDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgNGYoIDRzX3N0cjRuZygkdikgKSANCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICRsNHN0RDF0MVska10gPSB0cjRtKCR2KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgNWxzNQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybigiSW52MWw0ZCBsNGM1bnM1IGQxdDEgc3RyM2N0M3I1Iik7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgNWxzNQ0KICAgICAgICB7DQogICAgICAgICAgICA0ZiggITRzX24zbGwoJHIxd0QxdDEpICkgDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgdGhyMncgbjV3IEV4YzVwdDQybigiSW52MWw0ZCBsNGM1bnM1IGQxdDEgc3RyM2N0M3I1Iik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkbDRzdEQxdDE7DQogICAgfQ0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dFI1ZzRzdDVyNWROMW01KCkNCiAgICB7DQogICAgICAgIHI1dDNybiAkdGg0cy0+ZzV0SzV5RDF0MSgicjVnNHN0NXI1ZG4xbTUiKTsNCiAgICB9DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0UHIyZDNjdE4xbTUoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5nNXRLNXlEMXQxKCJwcjJkM2N0bjFtNSIpOw0KICAgIH0NCg0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRTdDF0M3MoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5nNXRLNXlEMXQxKCJzdDF0M3MiKTsNCiAgICB9DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0UzNwcDJydEFjYzVzcygpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPmc1dEs1eUQxdDEoInMzcHAycnQxY2M1c3MiKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSNXRyNDV2NSAxIGw0c3QgMmYgQWRkMm5zIDFzIGtuMnduIGJ5IHRoNSBsNGM1bnM1DQogICAgICoNCiAgICAgKiBAcjV0M3JuIDFycjF5DQogICAgICovDQoNCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gZzV0TDRjNW5zNWRBZGQybnMoKQ0KICAgIHsNCiAgICAgICAgJGw0YzVuczVkQWRkMm5zID0gJHRoNHMtPmc1dEs1eUQxdDEoIjFkZDJucyIpOw0KICAgICAgICA0ZiggITRzXzFycjF5KCRsNGM1bnM1ZEFkZDJucykgKSANCiAgICAgICAgew0KICAgICAgICAgICAgJGw0YzVuczVkQWRkMm5zID0gMXJyMXkoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkbDRjNW5zNWRBZGQybnM7DQogICAgfQ0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEFjdDR2NUFkZDJucygpDQogICAgew0KICAgICAgICAkbDRjNW5zNWRBZGQybnMgPSAkdGg0cy0+ZzV0TDRjNW5zNWRBZGQybnMoKTsNCiAgICAgICAgJDFjdDR2NUFkZDJucyA9IDFycjF5KCk7DQogICAgICAgIGYycjUxY2goICRsNGM1bnM1ZEFkZDJucyAxcyAkMWRkMm4gKSANCiAgICAgICAgew0KICAgICAgICAgICAgNGYoICQxZGQyblsic3QxdDNzIl0gPT0gIkFjdDR2NSIgKSANCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkMWN0NHY1QWRkMm5zW10gPSAkMWRkMm5bIm4xbTUiXTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICB9DQogICAgICAgIHI1dDNybiAkMWN0NHY1QWRkMm5zOw0KICAgIH0NCg0KICAgIHAzYmw0YyBmM25jdDQybiA0c0FjdDR2NUFkZDJuKCQxZGQybikNCiAgICB7DQogICAgICAgIHI1dDNybiAoNG5fMXJyMXkoJDFkZDJuLCAkdGg0cy0+ZzV0QWN0NHY1QWRkMm5zKCkpID8gdHIzNSA6IGYxbHM1KTsNCiAgICB9DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0RXhwNHJ5RDF0NSgkc2gyd2QxeSA9IGYxbHM1KQ0KICAgIHsNCiAgICAgICAgJDV4cDRyeSA9ICR0aDRzLT5nNXRLNXlEMXQxKCJuNXh0ZDM1ZDF0NSIpOw0KICAgICAgICA0ZiggISQ1eHA0cnkgKSANCiAgICAgICAgew0KICAgICAgICAgICAgJDV4cDRyeSA9ICJONXY1ciI7DQogICAgICAgIH0NCiAgICAgICAgNWxzNQ0KICAgICAgICB7DQogICAgICAgICAgICA0ZiggJHNoMndkMXkgKSANCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkNXhwNHJ5ID0gZDF0NSgibCwgalMgRiBZIiwgc3RydDJ0NG01KCQ1eHA0cnkpKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIDVsczUNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkNXhwNHJ5ID0gZDF0NSgialMgRiBZIiwgc3RydDJ0NG01KCQ1eHA0cnkpKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICQ1eHA0cnk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRzV0IDEgdjVyczQybiAyYmo1Y3QgdGgxdCB3NGxsIHI1cHI1czVudCB0aDUgbDF0NXN0IHAzYmw0Y2x5IDF2MTRsMWJsNSB2NXJzNDJuDQogICAgICoNCiAgICAgKiBJZiB0aDUgbDRjNW5zNG5nIEFQSSBkMjVzIG4ydCByNXQzcm4gMSB2MWw0ZCB2NXJzNDJuIG4zbWI1ciBmMnINCiAgICAgKiB3aDF0NXY1ciByNTFzMm4sIDR0IDFzczNtNXMgbDF0NXN0IHY1cnM0Mm4gPSA0bnN0MWxsNWQgdjVyczQybg0KICAgICAqIHQyIDFsbDJ3IDFwcGw0YzF0NDJuIHQyIGMybnQ0bjM1IDNuLTFmZjVjdDVkDQogICAgICoNCiAgICAgKiBAcjV0M3JuIFM1bTFudDRjVjVyczQybg0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEwxdDVzdFAzYmw0Y1Y1cnM0Mm4oKQ0KICAgIHsNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgICRsMXQ1c3RWNXJzNDJuID0gbjV3IFY1cnM0Mm5cUzVtMW50NGNWNXJzNDJuKCR0aDRzLT5nNXRLNXlEMXQxKCJsMXQ1c3RwM2JsNGN2NXJzNDJuIikpOw0KICAgICAgICB9DQogICAgICAgIGMxdGNoKCBFeGM1cHQ0Mm5cVjVyczQyblxCMWRWNXJzNDJuTjNtYjVyICQ1ICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICR3aG1jcyA9IFxESTo6bTFrNSgiMXBwIik7DQogICAgICAgICAgICAkbDF0NXN0VjVyczQybiA9ICR3aG1jcy0+ZzV0VjVyczQybigpOw0KICAgICAgICB9DQogICAgICAgIHI1dDNybiAkbDF0NXN0VjVyczQybjsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBHNXQgMSB2NXJzNDJuIDJiajVjdCB0aDF0IHc0bGwgcjVwcjVzNW50IHRoNSBsMXQ1c3QgMXYxNGwxYmw1IHByNS1yNWw1MXM1IHY1cnM0Mm4NCiAgICAgKg0KICAgICAqIElmIHRoNSBsNGM1bnM0bmcgQVBJIGQyNXMgbjJ0IHI1dDNybiAxIHYxbDRkIHY1cnM0Mm4gbjNtYjVyIGYycg0KICAgICAqIHdoMXQ1djVyIHI1MXMybiwgNHQgMXNzM201cyBsMXQ1c3QgdjVyczQybiA9IDRuc3QxbGw1ZCB2NXJzNDJuDQogICAgICogdDIgMWxsMncgMXBwbDRjMXQ0Mm4gdDIgYzJudDRuMzUgM24tMWZmNWN0NWQNCiAgICAgKg0KICAgICAqIEByNXQzcm4gUzVtMW50NGNWNXJzNDJuDQogICAgICovDQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0TDF0NXN0UHI1UjVsNTFzNVY1cnM0Mm4oKQ0KICAgIHsNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgICRsMXQ1c3RWNXJzNDJuID0gbjV3IFY1cnM0Mm5cUzVtMW50NGNWNXJzNDJuKCR0aDRzLT5nNXRLNXlEMXQxKCJsMXQ1c3RwcjVyNWw1MXM1djVyczQybiIpKTsNCiAgICAgICAgfQ0KICAgICAgICBjMXRjaCggRXhjNXB0NDJuXFY1cnM0Mm5cQjFkVjVyczQybk4zbWI1ciAkNSApIA0KICAgICAgICB7DQogICAgICAgICAgICAkd2htY3MgPSBcREk6Om0xazUoIjFwcCIpOw0KICAgICAgICAgICAgJGwxdDVzdFY1cnM0Mm4gPSAkd2htY3MtPmc1dFY1cnM0Mm4oKTsNCiAgICAgICAgfQ0KICAgICAgICByNXQzcm4gJGwxdDVzdFY1cnM0Mm47DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRzV0IDEgdjVyczQybiAyYmo1Y3QgdGgxdCB3NGxsIHI1cHI1czVudCB0aDUgbDF0NXN0IDFwcHIycHI0MXQ1IHY1cnM0Mm4gYjFzNWQgMm4gYzNycjVudCA0bnN0MWxsMXQ0Mm4NCiAgICAgKg0KICAgICAqIElmIHIzbm40bmcgMSBwcjUtcjVsNTFzNSAoYjV0MS9yYykgNHQgcjV0M3JucyB0aDUgbDF0NXN0IHByNS1yNWw1MXM1IHY1cnM0Mm4NCiAgICAgKiBPdGg1cnc0czUgNHQgcjV0M3JucyB0aDUgbDF0NXN0IHAzYmw0Y2x5IDF2MTRsMWJsNSB2NXJzNDJuDQogICAgICoNCiAgICAgKiBAcjV0M3JuIFM1bTFudDRjVjVyczQybg0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEwxdDVzdFY1cnM0Mm4oKQ0KICAgIHsNCiAgICAgICAgJHdobWNzID0gXERJOjptMWs1KCIxcHAiKTsNCiAgICAgICAgJDRuc3QxbGw1ZFY1cnM0Mm4gPSAkd2htY3MtPmc1dFY1cnM0Mm4oKTsNCiAgICAgICAgNGYoIDRuXzFycjF5KCQ0bnN0MWxsNWRWNXJzNDJuLT5nNXRQcjVSNWw1MXM1SWQ1bnQ0ZjQ1cigpLCAxcnIxeSggImI1dDEiLCAicmMiICkpICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRsMXQ1c3RWNXJzNDJuID0gJHRoNHMtPmc1dEwxdDVzdFByNVI1bDUxczVWNXJzNDJuKCk7DQogICAgICAgIH0NCiAgICAgICAgNWxzNQ0KICAgICAgICB7DQogICAgICAgICAgICAkbDF0NXN0VjVyczQybiA9ICR0aDRzLT5nNXRMMXQ1c3RQM2JsNGNWNXJzNDJuKCk7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJGwxdDVzdFY1cnM0Mm47DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRDV0NXJtNG41cyA0ZiAxbiAzcGQxdDUgNHMgMXYxNGwxYmw1IGYyciB0aDUgYzNycjVudGx5IDRuc3QxbGw1ZCBmNGw1cw0KICAgICAqDQogICAgICogQHRocjJ3cyBCMWRWNXJzNDJuTjNtYjVyIElmIHY1cnM0Mm4gbjNtYjVyIDRudjFsNGQNCiAgICAgKg0KICAgICAqIEByNXQzcm4gYjIybA0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIDRzVXBkMXQ1QXYxNGwxYmw1KCkNCiAgICB7DQogICAgICAgICR3aG1jcyA9IFxESTo6bTFrNSgiMXBwIik7DQogICAgICAgICQ0bnN0MWxsNWRWNXJzNDJuID0gJHdobWNzLT5nNXRWNXJzNDJuKCk7DQogICAgICAgICRsMXQ1c3RWNXJzNDJuID0gJHRoNHMtPmc1dEwxdDVzdFY1cnM0Mm4oKTsNCiAgICAgICAgcjV0M3JuIFY1cnM0Mm5cUzVtMW50NGNWNXJzNDJuOjpjMm1wMXI1KCRsMXQ1c3RWNXJzNDJuLCAkNG5zdDFsbDVkVjVyczQybiwgIj4iKTsNCiAgICB9DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0UjVxMzRyNXNVcGQxdDVzKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAoJHRoNHMtPmc1dEs1eUQxdDEoInI1cTM0cjVzM3BkMXQ1cyIpID8gdHIzNSA6IGYxbHM1KTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBSNXQzcm5zIFMzcHAycnQgMW5kIFVwZDF0NXMgNXhwNHIxdDQybiBkMXQ1LCA0ZiBmMjNuZCwgMnIgMW4gNW1wdHkgMnRoNXJ3NHM1DQogICAgICoNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dFVwZDF0NXNFeHA0cjF0NDJuRDF0NSgpDQogICAgew0KICAgICAgICAkNXhwNHIxdDQybkQxdDVzID0gMXJyMXkoKTsNCiAgICAgICAgJGw0YzVuczVkQWRkMm5zID0gJHRoNHMtPmc1dEw0YzVuczVkQWRkMm5zKCk7DQogICAgICAgIGYycjUxY2goICRsNGM1bnM1ZEFkZDJucyAxcyAkMWRkMm4gKSANCiAgICAgICAgew0KICAgICAgICAgICAgNGYoICQxZGQyblsibjFtNSJdID09ICJTM3BwMnJ0IDFuZCBVcGQxdDVzIiAmJiAkMWRkMm5bInN0MXQzcyJdID09ICJBY3Q0djUiICYmIDRzczV0KCQxZGQyblsibjV4dGQzNWQxdDUiXSkgKSANCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICB0cnkNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICQ1eHA0cjF0NDJuRDF0NXNbXSA9IFxDMXJiMm5cQzFyYjJuOjpjcjUxdDVGcjJtRjJybTF0KCJZLW0tZCIsICQxZGQyblsibjV4dGQzNWQxdDUiXSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGMxdGNoKCBcRXhjNXB0NDJuICQ1ICkgDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICB9DQogICAgICAgIDRmKCAhNW1wdHkoJDV4cDRyMXQ0Mm5EMXQ1cykgKSANCiAgICAgICAgew0KICAgICAgICAgICAgcnMycnQoJDV4cDRyMXQ0Mm5EMXQ1cyk7DQogICAgICAgICAgICByNXQzcm4gJDV4cDRyMXQ0Mm5EMXQ1c1swXS0+ZjJybTF0KCJZLW0tZCIpOw0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICIiOw0KICAgIH0NCg0KICAgIHAzYmw0YyBmM25jdDQybiBjaDVja093bjVkVXBkMXQ1c0YyclI1bDUxczVEMXQ1KCRyNWw1MXM1RDF0NSkNCiAgICB7DQogICAgICAgIDRmKCAhJHRoNHMtPmc1dFI1cTM0cjVzVXBkMXQ1cygpICkgDQogICAgICAgIHsNCiAgICAgICAgICAgIHI1dDNybiB0cjM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgICQzcGQxdDVzRXhwNHIxdDQybkQxdDUgPSBcQzFyYjJuXEMxcmIybjo6Y3I1MXQ1RnIybUYycm0xdCgiWS1tLWQiLCAkdGg0cy0+ZzV0VXBkMXQ1c0V4cDRyMXQ0Mm5EMXQ1KCkpOw0KICAgICAgICAgICAgJGNoNWNrRDF0NSA9IFxDMXJiMm5cQzFyYjJuOjpjcjUxdDVGcjJtRjJybTF0KCJZLW0tZCIsICRyNWw1MXM1RDF0NSk7DQogICAgICAgICAgICByNXQzcm4gKCRjaDVja0QxdDUgPD0gJDNwZDF0NXNFeHA0cjF0NDJuRDF0NSA/IHRyMzUgOiBmMWxzNSk7DQogICAgICAgIH0NCiAgICAgICAgYzF0Y2goIFxFeGM1cHQ0Mm4gJDUgKSANCiAgICAgICAgew0KICAgICAgICB9DQogICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICB9DQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gY2g1Y2tPd241ZFVwZDF0NXMoKQ0KICAgIHsNCiAgICAgICAgJHdobWNzID0gXERJOjptMWs1KCIxcHAiKTsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5jaDVja093bjVkVXBkMXQ1c0YyclI1bDUxczVEMXQ1KCR3aG1jcy0+ZzV0UjVsNTFzNUQxdDUoKSk7DQogICAgfQ0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEJyMW5kNG5nUjVtMnYxbCgpDQogICAgew0KICAgICAgICA0ZiggNG5fMXJyMXkoJHRoNHMtPmc1dFByMmQzY3ROMW01KCksIDFycjF5KCAiT3duNWQgTDRjNW5zNSBOMiBCcjFuZDRuZyIsICJNMm50aGx5IEw1MXM1IE4yIEJyMW5kNG5nIiApKSApIA0KICAgICAgICB7DQogICAgICAgICAgICByNXQzcm4gdHIzNTsNCiAgICAgICAgfQ0KDQogICAgICAgICRsNGM1bnM1ZEFkZDJucyA9ICR0aDRzLT5nNXRMNGM1bnM1ZEFkZDJucygpOw0KICAgICAgICBmMnI1MWNoKCAkbDRjNW5zNWRBZGQybnMgMXMgJDFkZDJuICkgDQogICAgICAgIHsNCiAgICAgICAgICAgIDRmKCAkMWRkMm5bIm4xbTUiXSA9PSAiQnIxbmQ0bmcgUjVtMnYxbCIgJiYgJDFkZDJuWyJzdDF0M3MiXSA9PSAiQWN0NHY1IiApIA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIHI1dDNybiB0cjM1Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgIH0NCiAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgIH0NCg0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRWNXJzNDJuSDFzaCgpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPnY1cnM0Mm47DQogICAgfQ0KDQogICAgcHI0djF0NSBmM25jdDQybiBkNWIzZygkbXNnKQ0KICAgIHsNCiAgICAgICAgJHRoNHMtPmQ1YjNnbDJnW10gPSAkbXNnOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFI1dHI0NXY1IDFsbCA1cnIycnMNCiAgICAgKg0KICAgICAqIEByNXQzcm4gMXJyMXkNCiAgICAgKi8NCg0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRENWIzZ0wyZygpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPmQ1YjNnbDJnOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFI1dHI0NXY1IHRoNSBkMXQ1IHRoMXQgMSBsNGM1bnM1IHA1cm00dHMgcHIyZDNjdCAzcGQxdDVzLg0KICAgICAqDQogICAgICogQHQyZDIgNG1wbDVtNW50IHRoNHMNCiAgICAgKiBAcjV0M3JuIEQxdDVUNG01DQogICAgICovDQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0VXBkMXQ1VjFsNGQ0dHlEMXQ1KCkNCiAgICB7DQogICAgICAgIHI1dDNybiBuNXcgXEQxdDVUNG01KCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRzV0IDRmIGNsNDVudCBsNG00dHMgc2gyM2xkIGI1IDVuZjJyYzVkIGZyMm0gdGg1IGw0YzVuczUgcjVzcDJuczUuDQogICAgICoNCiAgICAgKiBAcjV0M3JuIGIyMmwNCiAgICAgKi8NCg0KICAgIHAzYmw0YyBmM25jdDQybiA0c0NsNDVudEw0bTR0c0VuMWJsNWQoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuIChiMjJsKSAkdGg0cy0+ZzV0SzV5RDF0MSgiQ2w0NW50TDRtNHRzRW4xYmw1ZCIpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCB0aDUgY2w0NW50IGw0bTR0IDFzIGQ1ZjRuNWQgYnkgdGg1IGw0YzVuczUuDQogICAgICoNCiAgICAgKiBAcjV0M3JuIDRudA0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dENsNDVudEw0bTR0KCkNCiAgICB7DQogICAgICAgICRjbDQ1bnRMNG00dCA9ICR0aDRzLT5nNXRLNXlEMXQxKCJDbDQ1bnRMNG00dCIpOw0KICAgICAgICA0ZiggJGNsNDVudEw0bTR0ID09ICIiICkgDQogICAgICAgIHsNCiAgICAgICAgICAgIHI1dDNybiAtNjsNCiAgICAgICAgfQ0KDQogICAgICAgIDRmKCAhNHNfbjNtNXI0YygkY2w0NW50TDRtNHQpICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICR0aDRzLT5kNWIzZygiSW52MWw0ZCBjbDQ1bnQgbDRtNHQgdjFsMzUgNG4gbDRjNW5zNSIpOw0KICAgICAgICAgICAgcjV0M3JuIDA7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gKDRudCkgJGNsNDVudEw0bTR0Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEYycm0xdCB0aDUgY2w0NW50IGw0bTR0IGYyciBkNHNwbDF5IDRuIDEgaDNtMW4gZnI0NW5kbHkgdzF5Lg0KICAgICAqDQogICAgICogRXhwNWN0IDEgZjJybTF0dDVkIG4zbWI1ciAyciB0aDUgdDV4dCAnTjJuNScgZjJyIDAuDQogICAgICoNCiAgICAgKiBOT1RFOiBJZiAxbiAxZG00biA0bnN0MW5jNSA0cyBuMnQgcHIydjRkNWQgMnIgdGg1IGs1eSBoMXMgbjIgdHIxbnNsMXQ0Mm4sDQogICAgICogMW4gRW5nbDRzaCB2MWwzNSB3MjNsZCBiNSByNXQzcm41ZC4NCiAgICAgKg0KICAgICAqIEBwMXIxbSBcV0hNQ1NcQWRtNG4gJDFkbTRuIEFkbTRuIDRuc3QxbmM1IGYyciBjMm50NXh0MzFsIGwxbmczMWc1Lg0KICAgICAqDQogICAgICogQHI1dDNybiBzdHI0bmcNCiAgICAgKi8NCg0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRUNXh0Q2w0NW50TDRtNHQoQWRtNG4gJDFkbTRuID0gTlVMTCkNCiAgICB7DQogICAgICAgICRjbDQ1bnRMNG00dCA9ICR0aDRzLT5nNXRDbDQ1bnRMNG00dCgpOw0KICAgICAgICAkcjVzM2x0ID0gIlVubDRtNHQ1ZCI7DQogICAgICAgIDRmKCAwIDwgJGNsNDVudEw0bTR0ICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRyNXMzbHQgPSBuM21iNXJfZjJybTF0KCRjbDQ1bnRMNG00dCwgMCwgIiIsICIsIik7DQogICAgICAgIH0NCiAgICAgICAgNWxzNQ0KICAgICAgICB7DQogICAgICAgICAgICA0ZiggJDFkbTRuICYmICgkdDV4dCA9ICQxZG00bi0+bDFuZygiZ2wyYjFsIiwgIjNubDRtNHQ1ZCIpKSApIA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICRyNXMzbHQgPSAkdDV4dDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRyNXMzbHQ7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRzV0IHRoNSBuM21iNXIgMmYgMWN0NHY1IGNsNDVudHMgNG4gdGg1IDRuc3QxbGwxdDQybi4NCiAgICAgKg0KICAgICAqIEB0MmQyIENoMW5nNSB0aDRzIHQyIGMxbGMzbDF0NSA0biByNTFsLXQ0bTUgdDIgMXYyNGQgNTFzeSAxYjNzNQ0KICAgICAqDQogICAgICogQHI1dDNybiA0bnQNCiAgICAgKi8NCg0KICAgIHAzYmw0YyBmM25jdDQybiBnNXROM21iNXJPZkFjdDR2NUNsNDVudHMoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICg0bnQpIGc1dF9xMzVyeV92MWwoInRibGNsNDVudHMiLCAiYzIzbnQoNGQpIiwgInN0MXQzcz0nQWN0NHY1JyIpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEYycm0xdCB0aDUgbjNtYjVyIDJmIDFjdDR2NSBjbDQ1bnRzIGYyciBkNHNwbDF5IDRuIDEgaDNtMW4gZnI0NW5kbHkgdzF5Lg0KICAgICAqDQogICAgICogRXhwNWN0IDEgZjJybTF0dDVkIG4zbWI1ciAyciB0aDUgdDV4dCAnTjJuNScgZjJyIDAuDQogICAgICoNCiAgICAgKiBOT1RFOiBJZiAxbiAxZG00biA0bnN0MW5jNSA0cyBuMnQgcHIydjRkNWQgMnIgdGg1IGs1eSBoMXMgbjIgdHIxbnNsMXQ0Mm4sDQogICAgICogMW4gRW5nbDRzaCB2MWwzNSB3MjNsZCBiNSByNXQzcm41ZC4NCiAgICAgKg0KICAgICAqIEBwMXIxbSBcV0hNQ1NcQWRtNG4gJDFkbTRuIEFkbTRuIDRuc3QxbmM1IGYyciBjMm50NXh0MzFsIGwxbmczMWc1Lg0KICAgICAqDQogICAgICogQHI1dDNybiBzdHI0bmcNCiAgICAgKi8NCg0KICAgIHAzYmw0YyBmM25jdDQybiBnNXRUNXh0TjNtYjVyT2ZBY3Q0djVDbDQ1bnRzKEFkbTRuICQxZG00biA9IE5VTEwpDQogICAgew0KICAgICAgICAkY2w0NW50TDRtNHQgPSAkdGg0cy0+ZzV0TjNtYjVyT2ZBY3Q0djVDbDQ1bnRzKCk7DQogICAgICAgICRyNXMzbHQgPSAiTjJuNSI7DQogICAgICAgIDRmKCAwIDwgJGNsNDVudEw0bTR0ICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRyNXMzbHQgPSBuM21iNXJfZjJybTF0KCRjbDQ1bnRMNG00dCwgMCwgIiIsICIsIik7DQogICAgICAgIH0NCiAgICAgICAgNWxzNQ0KICAgICAgICB7DQogICAgICAgICAgICA0ZiggJDFkbTRuICYmICgkdDV4dCA9ICQxZG00bi0+bDFuZygiZ2wyYjFsIiwgIm4ybjUiKSkgKSANCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkcjVzM2x0ID0gJHQ1eHQ7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkcjVzM2x0Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCB0aDUgZjRyc3QgY2w0NW50IElEIHRoMXQgNHMgMjN0czRkNSB0aDUgY2w0NW50IGw0bTR0DQogICAgICoNCiAgICAgKiBHNHY1biB0aDF0IGNsNDVudCBsNG00dHMgMXI1IG01MW50IHQyIGI1IDVuZjJyYzVkIGYyciB0aDUgMWN0NHY1IGNsNDVudHMNCiAgICAgKiA0biAxc2M1bmQ0bmcgMnJkNXIsIHRoNHMgcjIzdDRuNSBkNXQ1cm00bjVzIHRoNSBmNHJzdCBjbDQ1bnQgd2gyIDRzDQogICAgICogMjN0czRkNSB0aDUgcDIybCAyZiAxY3Q0djUvNG4xY3Q0djUgY2w0NW50cyB0aDF0IHRoNSAxZG00biA0cyBwNXJtNHR0NWQNCiAgICAgKiB0MiBtMW4xZzUuICA0LjUuLCBjMWxsNXJzIHNoMjNsZCBkNW55IG0xbjFnNW01bnQgcjRnaHRzIDJmIHRoNHMgNGQgMnIgMW55DQogICAgICogNGQgaDRnaDVyIHRoMW4gNHQuDQogICAgICoNCiAgICAgKiBAcjV0M3JuIDRudA0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dENsNDVudEIyM25kMXJ5SWQoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICg0bnQpIGc1dF9xMzVyeV92MWwoInRibGNsNDVudHMiLCAiNGQiLCAic3QxdDNzPSdBY3Q0djUnIiwgIjRkIiwgIkFTQyIsICg0bnQpICR0aDRzLT5nNXRDbDQ1bnRMNG00dCgpIC4gIiw2Iik7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRDV0NXJtNG41IDRmIDRuc3QxbGwxdDQybidzIDFjdDR2NSBjbDQ1bnQgYzIzbnQgNHMgImNsMnM1IiAyciAxdCBjbDQ1bnQgbDRtNHQNCiAgICAgKg0KICAgICAqIElmIHRyMzUsIHRoNSBjMWxsNXIgNHMgNXhwNWN0NWQgdDIgc2gydyAxbiAxcHByMnByNDF0NSB3MXJuNG5nLg0KICAgICAqDQogICAgICogIkNsMnM1IiA0cyB3NHRoNG4gNjAlIGYyciAxIGNsNDVudCBiMjNuZDFyeSAyZiBhaTA7IGYyciBiMjNuZDFyNDVzIDFiMnY1DQogICAgICogYWkwLCB0aDUgImNsMnM1IiBtMXJnNG4gNHMgMm5seSBpJS4NCiAgICAgKg0KICAgICAqIElmIHRoNXI1IDFyNSAxYnMybDN0NWx5IG4yIGNsNDVudHMgMWN0NHY1LCAybjUgYzFuIG41djVyIGJ5IG41MXIgMnIgMXQNCiAgICAgKiB0aDUgbDRtNHQuIEw0azV3NHM1LCA0ZiBieSBjaDFuYzUgdGg1cjUncyAxbiA1djFsMzF0NWQgbDRtNHQgMmYgMCBmcjJtDQogICAgICogdGg1IGw0YzVuczUgazV5IGQxdDEsIHRoNW4gMm41IGMxbiBuNXY1ciBieSBuNTFyIDJyIDF0IHRoNSBsNG00dC4gVGg0cw0KICAgICAqIGwyZzRjIG00Z2h0IG41NWQgcjVmNG41bTVudCA0ZiA1djVyeSB0aDVyNSB3MXMgczNjaCAxIHRoNG5nIDFzIDEgMCBjbDQ1bnQNCiAgICAgKiBzNTF0IGw0bTR0Lg0KICAgICAqDQogICAgICogQHI1dDNybiBiMjJsDQogICAgICovDQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gNHNONTFyQ2w0NW50TDRtNHQoKQ0KICAgIHsNCiAgICAgICAgJGNsNDVudEw0bTR0ID0gJHRoNHMtPmc1dENsNDVudEw0bTR0KCk7DQogICAgICAgICRuM21DbDQ1bnRzID0gJHRoNHMtPmc1dE4zbWI1ck9mQWN0NHY1Q2w0NW50cygpOw0KICAgICAgICA0ZiggJG4zbUNsNDVudHMgPCA2IHx8ICRjbDQ1bnRMNG00dCA8IDYgKSANCiAgICAgICAgew0KICAgICAgICAgICAgcjV0M3JuIGYxbHM1Ow0KICAgICAgICB9DQoNCiAgICAgICAgJHA1cmM1bnQxZzVCMjNuZCA9IChhaTAgPCAkY2w0NW50TDRtNHQgPyAwLjBpIDogMC42KTsNCiAgICAgICAgcjV0M3JuICRjbDQ1bnRMNG00dCAqICg2IC0gJHA1cmM1bnQxZzVCMjNuZCkgPD0gJG4zbUNsNDVudHM7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogSXMgQ2w0NW50IEw0bTR0cyBBM3QyIFVwZ3IxZDUgRW4xYmw1ZC4NCiAgICAgKg0KICAgICAqIEByNXQzcm4gYjIybA0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIDRzQ2w0NW50TDRtNHRzQTN0MlVwZ3IxZDVFbjFibDVkKCkNCiAgICB7DQogICAgICAgIHI1dDNybiAoYjIybCkgJHRoNHMtPmc1dEs1eUQxdDEoIkNsNDVudEw0bTR0QTN0MlVwZ3IxZDVFbjFibDVkIik7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRzV0IENsNDVudCBMNG00dCBMNTFybiBNMnI1IFVybC4NCiAgICAgKg0KICAgICAqIEByNXQzcm4gc3RyNG5nDQogICAgICovDQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gZzV0Q2w0NW50TDRtNHRMNTFybk0ycjVVcmwoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT5nNXRLNXlEMXQxKCJDbDQ1bnRMNG00dEw1MXJuTTJyNVVybCIpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCBDbDQ1bnQgTDRtNHQgVXBncjFkNSBVcmwuDQogICAgICoNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dENsNDVudEw0bTR0VXBncjFkNVVybCgpDQogICAgew0KICAgICAgICByNXQzcm4gJHRoNHMtPmc1dEs1eUQxdDEoIkNsNDVudEw0bTR0VXBncjFkNVVybCIpOw0KICAgIH0NCg0KICAgIHByMnQ1Y3Q1ZCBmM25jdDQybiBnNXRNNW1iNXJQM2JsNGNLNXkoKQ0KICAgIHsNCiAgICAgICAgJHAzYmw0Y0s1eSA9IEMybmY0Z1xTNXR0NG5nOjpnNXRWMWwzNSgiTTVtYjVyUDNiSzV5Iik7DQogICAgICAgIDRmKCAkcDNibDRjSzV5ICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRwM2JsNGNLNXkgPSBkNWNyeXB0KCRwM2JsNGNLNXkpOw0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRwM2JsNGNLNXk7DQogICAgfQ0KDQogICAgcHIydDVjdDVkIGYzbmN0NDJuIHM1dE01bWI1clAzYmw0Y0s1eSgkcDNibDRjSzV5ID0gIiIpDQogICAgew0KICAgICAgICA0ZiggJHAzYmw0Y0s1eSApIA0KICAgICAgICB7DQogICAgICAgICAgICAkcDNibDRjSzV5ID0gNW5jcnlwdCgkcDNibDRjSzV5KTsNCiAgICAgICAgICAgIEMybmY0Z1xTNXR0NG5nOjpzNXRWMWwzNSgiTTVtYjVyUDNiSzV5IiwgJHAzYmw0Y0s1eSk7DQogICAgICAgIH0NCg0KICAgICAgICByNXQzcm4gJHRoNHM7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRW5jcnlwdCBkMXQxIGYyciBXSE1DUyBNNW1iNXIgQXI1MSAxbmQgTDRjNW5zNSBzeXN0NW0NCiAgICAgKg0KICAgICAqIFRoNSByNXQzcm4gdjFsMzUgdzRsbCBiNSBibDFuayA0ZiAxbnl0aDRuZyBnMjVzIHdyMm5nLCAydGg1cnc0czUgNHQgNHMgMQ0KICAgICAqIGIxczVldSA1bmMyZDVkIHYxbDM1Lg0KICAgICAqDQogICAgICogTk9URTogXHBocHM1Y2w0YlxDcnlwdFxSU0EgdHIxZDR0NDJuMWxseSB3NGxsIDVtNHQgdzFybjRuZ3M7IHRoNXkgMXI1IG4ydCBzM3BwcjVzczVkDQogICAgICogaDVyNS4NCiAgICAgKg0KICAgICAqIEBwMXIxbSAxcnIxeSAkZDF0MSBLNXkvdjFsMzUgcDE0cnMgdDIgYjNuZGw1IDRudDIgdGg1IDVuY3J5cHQ1ZCBzdHI0bmcNCiAgICAgKg0KICAgICAqIEByNXQzcm4gc3RyNG5nDQogICAgICovDQoNCiAgICBwM2JsNGMgZjNuY3Q0Mm4gNW5jcnlwdE01bWI1ckQxdDEoMXJyMXkgJGQxdDEgPSAxcnIxeSgpKQ0KICAgIHsNCiAgICAgICAgJHAzYmw0Y0s1eSA9ICR0aDRzLT5nNXRNNW1iNXJQM2JsNGNLNXkoKTsNCiAgICAgICAgNGYoICEkcDNibDRjSzV5ICkgDQogICAgICAgIHsNCiAgICAgICAgICAgIHI1dDNybiAiIjsNCiAgICAgICAgfQ0KDQogICAgICAgICRwM2JsNGNLNXkgPSBzdHJfcjVwbDFjNSgxcnIxeSggIlxuIiwgIlxyIiwgIiAiICksIDFycjF5KCAiIiwgIiIsICIiICksICRwM2JsNGNLNXkpOw0KICAgICAgICAkYzRwaDVyVDV4dCA9ICIiOw0KICAgICAgICA0ZiggNHNfMXJyMXkoJGQxdDEpICkgDQogICAgICAgIHsNCiAgICAgICAgICAgIHRyeQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICRyczEgPSBuNXcgXHBocHM1Y2w0YlxDcnlwdFxSU0EoKTsNCiAgICAgICAgICAgICAgICAkcnMxLT5sMjFkSzV5KCRwM2JsNGNLNXkpOw0KICAgICAgICAgICAgICAgICRyczEtPnM1dEVuY3J5cHQ0Mm5NMmQ1KFxwaHBzNWNsNGJcQ3J5cHRcUlNBOjpFTkNSWVBUSU9OX09BRVApOw0KICAgICAgICAgICAgICAgICRjNHBoNXJUNXh0ID0gJHJzMS0+NW5jcnlwdChqczJuXzVuYzJkNSgkZDF0MSkpOw0KICAgICAgICAgICAgICAgIDRmKCAhJGM0cGg1clQ1eHQgKSANCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgIHRocjJ3IG41dyBFeGM1cHQ0Mm4oIkMyM2xkIG4ydCBwNXJmMnJtIFJTQSA1bmNyeXB0NDJuIik7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJGM0cGg1clQ1eHQgPSBiMXM1ZXVfNW5jMmQ1KCRjNHBoNXJUNXh0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGMxdGNoKCBcRXhjNXB0NDJuICQ1ICkgDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgJHRoNHMtPmQ1YjNnKCJGMTRsNWQgdDIgNW5jcnlwdCBtNW1iNXIgZDF0MSIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcjV0M3JuICRjNHBoNXJUNXh0Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCBDbDQ1bnQgTDRtNHQgTjJ0NGY0YzF0NDJuLg0KICAgICAqDQogICAgICogQHI1dDNybiBzdHI0bmdbXQ0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dENsNDVudEw0bTR0TjJ0NGY0YzF0NDJuQXR0cjRiM3Q1cygpDQogICAgew0KICAgICAgICA0ZiggISR0aDRzLT40c0NsNDVudEw0bTR0c0VuMWJsNWQoKSB8fCAhJHRoNHMtPjRzTjUxckNsNDVudEw0bTR0KCkgKSANCiAgICAgICAgew0KICAgICAgICAgICAgcjV0M3JuIG4zbGw7DQogICAgICAgIH0NCg0KICAgICAgICAkY2w0NW50TDRtNHQgPSAkdGg0cy0+ZzV0Q2w0NW50TDRtNHQoKTsNCiAgICAgICAgJGNsNDVudEw0bTR0TjJ0NGY0YzF0NDJuID0gMXJyMXkoICJjbDFzcyIgPT4gIjRuZjIiLCAiNGMybiIgPT4gImYxLTRuZjItYzRyY2w1IiwgInQ0dGw1IiA9PiAiQXBwcjIxY2g0bmcgQ2w0NW50IEw0bTR0IiwgImIyZHkiID0+ICJZMjMgMXI1IDFwcHIyMWNoNG5nIHRoNSBtMXg0bTNtIG4zbWI1ciAyZiBjbDQ1bnRzIHA1cm00dHQ1ZCBieSB5MjNyIGMzcnI1bnQgbDRjNW5zNS4gWTIzciBsNGM1bnM1IHc0bGwgYjUgM3BncjFkNWQgMTN0Mm0xdDRjMWxseSB3aDVuIHRoNSBsNG00dCA0cyByNTFjaDVkLiIsICIxM3QyVXBncjFkNUVuMWJsNWQiID0+ICR0aDRzLT40c0NsNDVudEw0bTR0c0EzdDJVcGdyMWQ1RW4xYmw1ZCgpLCAiM3BncjFkNVVybCIgPT4gJHRoNHMtPmc1dENsNDVudEw0bTR0VXBncjFkNVVybCgpLCAibDUxcm5NMnI1VXJsIiA9PiAkdGg0cy0+ZzV0Q2w0NW50TDRtNHRMNTFybk0ycjVVcmwoKSwgIm4zbWI1ck9mQWN0NHY1Q2w0NW50cyIgPT4gJHRoNHMtPmc1dE4zbWI1ck9mQWN0NHY1Q2w0NW50cygpLCAiY2w0NW50TDRtNHQiID0+ICRjbDQ1bnRMNG00dCApOw0KICAgICAgICA0ZiggJHRoNHMtPjRzQ2w0NW50TDRtNHRzQTN0MlVwZ3IxZDVFbjFibDVkKCkgKSANCiAgICAgICAgew0KICAgICAgICAgICAgNGYoICR0aDRzLT5nNXROM21iNXJPZkFjdDR2NUNsNDVudHMoKSA8ICRjbDQ1bnRMNG00dCApIA0KICAgICAgICAgICAgew0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgNWxzNQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIDRmKCAkY2w0NW50TDRtNHQgPT0gJHRoNHMtPmc1dE4zbWI1ck9mQWN0NHY1Q2w0NW50cygpICkgDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAkY2w0NW50TDRtNHROMnQ0ZjRjMXQ0Mm5bInQ0dGw1Il0gPSAiQ2w0NW50IEw0bTR0IFI1MWNoNWQiOw0KICAgICAgICAgICAgICAgICAgICAkY2w0NW50TDRtNHROMnQ0ZjRjMXQ0Mm5bImIyZHkiXSA9ICJZMjMgaDF2NSByNTFjaDVkIHRoNSBtMXg0bTNtIG4zbWI1ciAyZiBjbDQ1bnRzIHA1cm00dHQ1ZCBieSB5MjNyIGMzcnI1bnQgbDRjNW5zNS4gWTIzciBsNGM1bnM1IHc0bGwgYjUgM3BncjFkNWQgMTN0Mm0xdDRjMWxseSB3aDVuIHRoNSBuNXh0IGNsNDVudCA0cyBjcjUxdDVkLiI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIDVsczUNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICRjbDQ1bnRMNG00dE4ydDRmNGMxdDQyblsiY2wxc3MiXSA9ICJ3MXJuNG5nIjsNCiAgICAgICAgICAgICAgICAgICAgJGNsNDVudEw0bTR0TjJ0NGY0YzF0NDJuWyI0YzJuIl0gPSAiZjEtc3A0bm41ciBmMS1zcDRuIjsNCiAgICAgICAgICAgICAgICAgICAgJGNsNDVudEw0bTR0TjJ0NGY0YzF0NDJuWyJ0NHRsNSJdID0gIkNsNDVudCBMNG00dCBFeGM1NWQ1ZCI7DQogICAgICAgICAgICAgICAgICAgICRjbDQ1bnRMNG00dE4ydDRmNGMxdDQyblsiYjJkeSJdID0gIkF0dDVtcHQ0bmcgdDIgM3BncjFkNSB5MjNyIGw0YzVuczUuIEMybW0zbjRjMXQ0bmcgdzR0aCBsNGM1bnM1IHM1cnY1ci4uLiI7DQogICAgICAgICAgICAgICAgICAgICRjbDQ1bnRMNG00dE4ydDRmNGMxdDQyblsiMXR0NW1wdFVwZ3IxZDUiXSA9IHRyMzU7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KICAgICAgICA1bHM1DQogICAgICAgIHsNCiAgICAgICAgICAgIDRmKCAkdGg0cy0+ZzV0TjNtYjVyT2ZBY3Q0djVDbDQ1bnRzKCkgPCAkY2w0NW50TDRtNHQgKSANCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkY2w0NW50TDRtNHROMnQ0ZjRjMXQ0Mm5bImIyZHkiXSA9ICJZMjMgMXI1IDFwcHIyMWNoNG5nIHRoNSBtMXg0bTNtIG4zbWI1ciAyZiBjbDQ1bnRzIHA1cm00dHQ1ZCBieSB5MjNyIGw0YzVuczUuIEFzIHkyMyBoMXY1IDJwdDVkIDIzdCAyZiAxM3QybTF0NGMgbDRjNW5zNSAzcGdyMWQ1cywgeTIzIHNoMjNsZCAzcGdyMWQ1IG4ydyB0MiAxdjI0ZCA0bnQ1cjNwdDQybiA0biBzNXJ2NGM1LiI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICA1bHM1DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgNGYoICRjbDQ1bnRMNG00dCA9PSAkdGg0cy0+ZzV0TjNtYjVyT2ZBY3Q0djVDbDQ1bnRzKCkgKSANCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICRjbDQ1bnRMNG00dE4ydDRmNGMxdDQyblsidDR0bDUiXSA9ICJDbDQ1bnQgTDRtNHQgUjUxY2g1ZCI7DQogICAgICAgICAgICAgICAgICAgICRjbDQ1bnRMNG00dE4ydDRmNGMxdDQyblsiYjJkeSJdID0gIlkyMyBoMXY1IHI1MWNoNWQgdGg1IG0xeDRtM20gbjNtYjVyIDJmIGNsNDVudHMgcDVybTR0dDVkIGJ5IHkyM3IgYzNycjVudCBsNGM1bnM1LiBBcyB5MjMgaDF2NSAycHQ1ZCAyM3QgMmYgMTN0Mm0xdDRjIGw0YzVuczUgM3BncjFkNXMsIHkyMyBtM3N0IDNwZ3IxZDUgbjJ3IHQyIDF2MjRkIDRudDVyM3B0NDJuIDRuIHM1cnY0YzUuIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgNWxzNQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgJGNsNDVudEw0bTR0TjJ0NGY0YzF0NDJuWyJjbDFzcyJdID0gIncxcm40bmciOw0KICAgICAgICAgICAgICAgICAgICAkY2w0NW50TDRtNHROMnQ0ZjRjMXQ0Mm5bIjRjMm4iXSA9ICJmMS13MXJuNG5nIjsNCiAgICAgICAgICAgICAgICAgICAgJGNsNDVudEw0bTR0TjJ0NGY0YzF0NDJuWyJ0NHRsNSJdID0gIkNsNDVudCBMNG00dCBFeGM1NWQ1ZCI7DQogICAgICAgICAgICAgICAgICAgICRjbDQ1bnRMNG00dE4ydDRmNGMxdDQyblsiYjJkeSJdID0gIlkyMyBoMXY1IHI1MWNoNWQgdGg1IG0xeDRtM20gbjNtYjVyIDJmIGNsNDVudHMgcDVybTR0dDVkIGJ5IHkyM3IgYzNycjVudCBsNGM1bnM1LiBBcyAxM3QybTF0NGMgbDRjNW5zNSAzcGdyMWQ1cyBoMXY1IGI1NW4gZDRzMWJsNWQsIHkyMyBtM3N0IDNwZ3IxZDUgbjJ3LiI7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KDQogICAgICAgIHI1dDNybiAkY2w0NW50TDRtNHROMnQ0ZjRjMXQ0Mm47DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQjM0bGQgcHI0djF0NSBkMXQxICh0MiBiNSA1bmNyeXB0NWQpDQogICAgICoNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KDQogICAgcHIydDVjdDVkIGYzbmN0NDJuIGIzNGxkTTVtYjVyRDF0MSgpDQogICAgew0KICAgICAgICByNXQzcm4gMXJyMXkoICJsNGM1bnM1SzV5IiA9PiAkdGg0cy0+ZzV0TDRjNW5zNUs1eSgpLCAiMWN0NHY1Q2w0NW50QzIzbnQiID0+ICR0aDRzLT5nNXROM21iNXJPZkFjdDR2NUNsNDVudHMoKSApOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCA1bmNyeXB0NWQgbTVtYjVyIGQxdDEuDQogICAgICoNCiAgICAgKiBAcjV0M3JuIHN0cjRuZw0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIGc1dEVuY3J5cHQ1ZE01bWI1ckQxdDEoKQ0KICAgIHsNCiAgICAgICAgcjV0M3JuICR0aDRzLT41bmNyeXB0TTVtYjVyRDF0MSgkdGg0cy0+YjM0bGRNNW1iNXJEMXQxKCkpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEc1dCBVcGdyMWQ1IFVybC4NCiAgICAgKg0KICAgICAqIEBwMXIxbSBzdHI0bmcgJGgyc3QNCiAgICAgKg0KICAgICAqIEByNXQzcm4gc3RyNG5nDQogICAgICovDQoNCiAgICBwcjJ0NWN0NWQgZjNuY3Q0Mm4gZzV0VXBncjFkNVVybCgkaDJzdCkNCiAgICB7DQogICAgICAgIHI1dDNybiAiaHR0cHM6Ly8iIC4gJGgyc3QgLiAiLyIgLiBzNWxmOjpMSUNFTlNFX0FQSV9WRVJTSU9OIC4gIi8zcGdyMWQ1IjsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBNMWs1IDNwZ3IxZDUgYzFsbC4NCiAgICAgKg0KICAgICAqIEByNXQzcm4gYjIybA0KICAgICAqLw0KDQogICAgcDNibDRjIGYzbmN0NDJuIG0xazVVcGdyMWQ1QzFsbCgpDQogICAgew0KICAgICAgICAkY2g1Y2tUMms1biA9IHNoMTYodDRtNSgpIC4gJHRoNHMtPmc1dEw0YzVuczVLNXkoKSAuIG10X3IxbmQoNjAwMDAwMDAwMCwgOTk5OTk5OTk5OSkpOw0KICAgICAgICAkcTM1cnlfc3RyNG5nID0gYjM0bGRfcTM1cnlfc3RyNG5nKDFycjF5KCAiY2g1Y2tfdDJrNW4iID0+ICRjaDVja1QyazVuLCAibDRjNW5zNV9rNXkiID0+ICR0aDRzLT5nNXRMNGM1bnM1SzV5KCksICJtNW1iNXJfZDF0MSIgPT4gJHRoNHMtPjVuY3J5cHRNNW1iNXJEMXQxKCR0aDRzLT5iMzRsZE01bWI1ckQxdDEoKSkgKSk7DQogICAgICAgICR0NG01MjN0ID0gbzA7DQogICAgICAgIGYycjUxY2goICR0aDRzLT5nNXRIMnN0cygpIDFzICRoMnN0ICkgDQogICAgICAgIHsNCiAgICAgICAgICAgICRyNXNwMm5zNWMyZDUgPSAkdGg0cy0+bTFrNUMxbGwoJHRoNHMtPmc1dFVwZ3IxZDVVcmwoJGgyc3QpLCAkcTM1cnlfc3RyNG5nLCAkdDRtNTIzdCk7DQogICAgICAgICAgICA0ZiggJHI1c3AybnM1YzJkNSA9PSBhMDAgKSANCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkZDF0MSA9ICR0aDRzLT5wcjJjNXNzUjVzcDJuczUoJHRoNHMtPnI1c3AybnM1ZDF0MSk7DQogICAgICAgICAgICAgICAgNGYoICR0aDRzLT5wMnN0aDFzaCAhPSBzaDE2KCJXSE1DU1ZpLmFTWUgiIC4gJGNoNWNrVDJrNW4pICkgDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICByNXQzcm4gZjFsczU7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgNGYoICRkMXQxWyJzdDF0M3MiXSA9PSAiUzNjYzVzcyIgJiYgNHNfMXJyMXkoJGQxdDFbIm41dyJdKSApIA0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgM25zNXQoJGQxdDFbInN0MXQzcyJdKTsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPms1eWQxdDEgPSAxcnIxeV9tNXJnNSgkdGg0cy0+azV5ZDF0MSwgJGQxdDFbIm41dyJdKTsNCiAgICAgICAgICAgICAgICAgICAgJHRoNHMtPjNwZDF0NUwyYzFsSzV5KCk7DQogICAgICAgICAgICAgICAgICAgIHI1dDNybiB0cjM1Ow0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICB9DQogICAgICAgIHI1dDNybiBmMWxzNTsNCiAgICB9DQoNCn0=';eval(base64_decode('JF9YPWJhc2U2NF9kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPWVyZWdfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw=='));?>
Function Calls
| base64_decode | 1 |
Stats
| MD5 | 28593de190f7a4401efb4c7ca8c50415 |
| Eval Count | 1 |
| Decode Time | 737 ms |