IyEvdXNyL2Jpbi9wZXJsIC13IC1UCgpteSAkaGF2ZV9saWJpZG47CkJFR0lOIHsKICBldmFsIHsgcmVxdWlyZSBOZXQ6OkxpYklETiB9IGFuZCBkbyB7ICRoYXZlX2xpYmlkbiA9IDEgfTsKfQoKdXNlIHN0cmljdDsKdXNlIFRlc3Q6Ok1vcmU7CnVzZSBsaWIgJy4nOyB1c2UgbGliICd0JzsKdXNlIFNBVGVzdDsgc2FfdF9pbml0KCJ1cmkiKTsKCm15ICR0ZXN0cyA9IDEwMzsKJHRlc3RzICs9IDUgaWYgJGhhdmVfbGliaWRuOwoKcGxhbiB0ZXN0cyA9PiAkdGVzdHM7Cgp1c2UgTWFpbDo6U3BhbUFzc2Fzc2luOwp1c2UgTWFpbDo6U3BhbUFzc2Fzc2luOjpIVE1MOwp1c2UgTWFpbDo6U3BhbUFzc2Fzc2luOjpVdGlsOwoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKdHN0bG9jYWxydWxlcyAoIgogIHV0aWxfcmJfMnRsZCBsaXZlLmNvbQogIHV0aWxfcmJfM3RsZCB0aHJlZS4zbGRsaXZlLmNvbQoiKTsKCiMgaW5pdGlhbGl6ZSBTcGFtQXNzYXNzaW4KbXkgJHNhID0gY3JlYXRlX3Nhb2JqKHsnZG9udF9jb3B5X3ByZWZzJyA9PiAxLAogICAgICAgICMgJ2RlYnVnJyA9PiAxCn0pOwoKJHNhLT5pbml0KDApOyAjIHBhcnNlIHJ1bGVzCgpvcGVuIChJTiwgIjxkYXRhL3NwYW0vMDA5Iik7Cm15ICRtYWlsID0gJHNhLT5wYXJzZShcKklOKTsKY2xvc2UgSU47Cm15ICRtc2cgPSBNYWlsOjpTcGFtQXNzYXNzaW46OlBlck1zZ1N0YXR1cy0+bmV3KCRzYSwgJG1haWwpOwoKbXkgQHVyaXMgPSAkbXNnLT5nZXRfdXJpX2xpc3QoKTsKcHJpbnQgImdvdCBVUklzOiAiLmpvaW4gKCIsICIsIEB1cmlzKS4iXG4iOwpvayAoQHVyaXMgPj0gNSk7Cm15ICV1cmltYXAgPSBtYXAgeyAkXyA9PiAxIH0gQHVyaXM7Cm9rICgkdXJpbWFweydodHRwOi8vNjIuMTYuMTAxLjU5L2xpdmVzZXguaHRtJ30pOwpvayAoJHVyaW1hcHsnaHR0cDovLzY2LjkyLjY5LjIyMS8nfSk7Cm9rICgkdXJpbWFweydodHRwOi8vNjYuOTIuNjkuMjIyLyd9KTsKb2sgKCR1cmltYXB7J2h0dHA6Ly82Ni45Mi42OS4yMjMvJ30pOwpvayAoJHVyaW1hcHsnaHR0cDovLzY2LjkyLjY5LjIyNC8nfSk7Cm9rICgkdXJpbWFweydodHRwOi8vc3BhbWFzc2Fzc2luLm9yZyd9KTsKb2sgKCEkdXJpbWFweydDVU1TTFVUUy4nfSk7Cm9rICghJHVyaW1hcHsnQ1VNU0xVVFMuLlZJUkdJTid9KTsKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCnN1YiB0cnlfZG9tYWlucyB7CiAgbXkoJHRyeSwgJGV4cGVjdCkgPSBAXzsKICBteSAkcmVzdWx0ID0gJHNhLT57cmVnaXN0cnlib3VuZGFyaWVzfS0+dXJpX3RvX2RvbWFpbigkdHJ5KTsKCiAgIyB1bmRlZiBpcyB2YWxpZCBpbiBzb21lIHNpdHVhdGlvbnMsIHNvIGRlYWwgd2l0aCBpdC4uLgogIGlmICghZGVmaW5lZCAkZXhwZWN0KSB7CiAgICB3YXJuKCJ0cnlfZG9tYWluczogZmFpbGVkISBleHBlY3Q6IHVuZGVmaW5lZCBnb3Q6ICckcmVzdWx0J1xuIikgaWYgKGRlZmluZWQgJHJlc3VsdCk7CiAgICByZXR1cm4gIWRlZmluZWQgJHJlc3VsdDsKICB9CiAgZWxzaWYgKCFkZWZpbmVkICRyZXN1bHQpIHsKICAgIHdhcm4gInRyeV9kb21haW5zOiBmYWlsZWQhIGV4cGVjdDogJyRleHBlY3QnIGdvdDogdW5kZWZpbmVkXG4iOwogICAgcmV0dXJuIDA7CiAgfQoKICBpZiAoJGV4cGVjdCBlcSAkcmVzdWx0KSB7CiAgICByZXR1cm4gMTsKICB9IGVsc2UgewogICAgd2FybiAidHJ5X2RvbWFpbnM6IGZhaWxlZCEgZXhwZWN0OiAnJGV4cGVjdCcgZ290OiAnJHJlc3VsdCdcbiI7CiAgICByZXR1cm4gMDsKICB9Cn0KCm9rKHRyeV9kb21haW5zKCdqYXZhc2NyaXB0Ontzb21lIGNyYXB9JywgdW5kZWYpKTsKb2sodHJ5X2RvbWFpbnMoJ21haWx0bzpub2JvZHlAZXhhbXBsZS5jb20nLCAnZXhhbXBsZS5jb20nKSk7Cm9rKHRyeV9kb21haW5zKCdtYWlsdG86bm9ib2R5QGV4YW1wbGUuY29tP3N1YmplY3Q9Zm9vJywgJ2V4YW1wbGUuY29tJykpOwpvayh0cnlfZG9tYWlucygnbWFpbHRvOm5vYm9keScsIHVuZGVmKSk7Cm9rKHRyeV9kb21haW5zKCdjaWQ6Zm9vYmFyLm5ldCcsIHVuZGVmKSk7Cm9rKHRyeV9kb21haW5zKCdodHRwOi8vNjYuOTIuNjkuMjIxLycsICc2Ni45Mi42OS4yMjEnKSk7Cm9rKHRyeV9kb21haW5zKCdodHRwOi8vd3d3LnNwYW1hc3Nhc3Npbi5vcmc6ODA4MC9saXN0cy5odG1sJywgJ3NwYW1hc3Nhc3Npbi5vcmcnKSk7Cm9rKHRyeV9kb21haW5zKCdodHRwOi8vd3d3LnNwYW1hc3Nhc3Npbi5vcmcvbGlzdHMuaHRtbCNzb21lX3RhZycsICdzcGFtYXNzYXNzaW4ub3JnJykpOwpvayh0cnlfZG9tYWlucygnaHR0cDovL3VzZXJuYW1lQHd3dy5zcGFtYXNzYXNzaW4ub3JnL2xpc3RzLmh0bWwnLCAnc3BhbWFzc2Fzc2luLm9yZycpKTsKb2sodHJ5X2RvbWFpbnMoJ2h0dHA6Ly91c2VybmFtZTpwYXNzd29yZEB3d3cuc3BhbWFzc2Fzc2luLm9yZy9saXN0cy5odG1sJywgJ3NwYW1hc3Nhc3Npbi5vcmcnKSk7Cm9rKHRyeV9kb21haW5zKCdodHRwOi8lNzclNzclNzcuc3BhbWFzc2Fzc2luLm9yZy9saXN0cy5odG1sJywgdW5kZWYpKTsKb2sodHJ5X2RvbWFpbnMoJ2h0dHA6L3d3dy5zcGFtYXNzYXNzaW4ub3JnL2xpc3RzLmh0bWwnLCAnc3BhbWFzc2Fzc2luLm9yZycpKTsKb2sodHJ5X2RvbWFpbnMoJ2h0dHA6d3d3LnNwYW1hc3Nhc3Npbi5vcmcvbGlzdHMuaHRtbCcsICdzcGFtYXNzYXNzaW4ub3JnJykpOwpvayh0cnlfZG9tYWlucygnaHR0cDovL2t1bmcucGFvLmNvbS5jbicsICdwYW8uY29tLmNuJykpOwpvayh0cnlfZG9tYWlucygna3VuZy5wYW8uY29tLmNuJywgJ3Bhby5jb20uY24nKSk7Cm9rKHRyeV9kb21haW5zKCdrdW5nLXBhby5jb20uY24nLCAna3VuZy1wYW8uY29tLmNuJykpOwpvayh0cnlfZG9tYWlucygndXNlcm5hbWU6cGFzc3dvcmRAd3d3LnNwYW1hc3Nhc3Npbi5vcmcvbGlzdHMuaHRtbCcsICdzcGFtYXNzYXNzaW4ub3JnJykpOwpvayh0cnlfZG9tYWlucygnc3BhbWFzc2Fzc2luLm9yZycsICdzcGFtYXNzYXNzaW4ub3JnJykpOwpvayh0cnlfZG9tYWlucygnU1BBTUFTU0FTU0lOLk9SRycsICdzcGFtYXNzYXNzaW4ub3JnJykpOwpvayh0cnlfZG9tYWlucygnV1dXLlNQQU1BU1NBU1NJTi5PUkcnLCAnc3BhbWFzc2Fzc2luLm9yZycpKTsKb2sodHJ5X2RvbWFpbnMoJ3NwYW1hc3Nhc3Npbi50eHQnLCB1bmRlZikpOwpvayh0cnlfZG9tYWlucygnbG9uZ2VyLnVybC5idXQubm90LnNwYW1hc3Nhc3Npbi50eHQnLCB1bmRlZikpOwojIFByb2JhYmx5IGRvZXNuJ3Qgd29yayB0aGVzZSBkYXlzPz8gTWVzc2VzIHVwIGlzX2ZxZG5fdmFsaWQKI29rKHRyeV9kb21haW5zKCdodHRwOi8vZWJnJnZvc3hmb3YuY29tLm11bmdlZC1yeHNwZWNpYWxzLm5ldC9iL1RyM2YwYW1HJywnbXVuZ2VkLXJ4c3BlY2lhbHMubmV0JykpOwpvayh0cnlfZG9tYWlucygnaHR0cDovL2ViZyZ2b3N4Zm92LmNvbS5tdW5nZWQtcnhzcGVjaWFscy5uZXQvYi9UcjNmMGFtRycsdW5kZWYpKTsKb2sodHJ5X2RvbWFpbnMoJ2h0dHA6Ly9ibGFoLmJsYWguY29tOi8nLCAnYmxhaC5jb20nKSk7CiMgUHJvYmFibHkgZG9lc24ndCB3b3JrIHRoZXNlIGRheXM/PyBNZXNzZXMgdXAgaXNfZnFkbl92YWxpZAojb2sodHJ5X2RvbWFpbnMoJ2h0dHA6Ly9leGFtcGxlLmNvbS4lMjAuaG9zdC5leGFtcGxlLmluZm8vJywgJ2V4YW1wbGUuaW5mbycpKTsKb2sodHJ5X2RvbWFpbnMoJ2h0dHA6Ly9leGFtcGxlLmNvbS4lMjAuaG9zdC5leGFtcGxlLmluZm8vJywgdW5kZWYpKTsKb2sodHJ5X2RvbWFpbnMoJ2h0dHA6Ly9mb28uLmJhckBleGFtcGxlLmNvbScsICdleGFtcGxlLmNvbScpKTsKb2sodHJ5X2RvbWFpbnMoJ2Jhci4uZXhhbXBsZS5jb20nLCB1bmRlZikpOwpvayh0cnlfZG9tYWlucygnaHR0cDovL2V4YW1wbGUuLmNvbScsIHVuZGVmKSk7CgppZiAoJGhhdmVfbGliaWRuKSB7CiAgb2sodHJ5X2RvbWFpbnMoJ0NpbultYS5jYScsICd4bi0tY2lubWEtZHNhLmNhJykpOwogIG9rKHRyeV9kb21haW5zKCdtYXJjYWVzcGHxYS5lcycsICd4bi0tbWFyY2Flc3BhYS0xOWEuZXMnKSk7CiAgb2sodHJ5X2RvbWFpbnMoJ+Rr5HNsb21wb2xvLmZpJywgJ3huLS1rc2xvbXBvbG8tdTJhYi5maScpKTsKICBvayh0cnlfZG9tYWlucygnZm9vLnhuLS1maXFzOHMnLCAnZm9vLnhuLS1maXFzOHMnKSk7CiAgb2sodHJ5X2RvbWFpbnMoImZvb1x4MmVceGU5XHhhNlx4OTlceGU2XHhiOFx4YWYiLCAnZm9vLnhuLS1qNncxOTNnJykpOwp9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpzdWIgYXJyYXlfY21wIHsKICBteSgkYSwgJGIpID0gQF87CiAgcmV0dXJuIDAgaWYgKEB7JGF9ICE9IEB7JGJ9KTsKICBmb3IobXkgJGkgPSAwOyAkaTxAeyRhfTsgJGkrKykgewogICAgcmV0dXJuIDAgaWYgKCRhLT5bJGldIG5lICRiLT5bJGldKTsKICB9CiAgcmV0dXJuIDE7Cn0KCnN1YiB0cnlfY2Fub24gewogIG15KCRpbnB1dCwgJGV4cGVjdCkgPSBAXzsKICBteSAkcmVkaXJzID0gJHNhLT57Y29uZn0tPntyZWRpcmVjdG9yX3BhdHRlcm5zfTsKICBteSBAaW5wdXQgPSBzb3J0IHsgJGEgY21wICRiIH0gTWFpbDo6U3BhbUFzc2Fzc2luOjpVdGlsOjp1cmlfbGlzdF9jYW5vbmljYWxpemUoJHJlZGlycywgJGlucHV0LCAkc2EtPntyZWdpc3RyeWJvdW5kYXJpZXN9KTsKICBteSBAZXhwZWN0ID0gc29ydCB7ICRhIGNtcCAkYiB9IEB7JGV4cGVjdH07CgogICMgb3V0cHV0IHdoYXQgd2Ugd2FudC9nZXQgZm9yIGRlYnVnZ2luZwogIG15ICRyZXMgPSBhcnJheV9jbXAoXEBpbnB1dCwgXEBleHBlY3QpOwogIGlmICghJHJlcykgewogICAgd2FybiAiPj4gZXhwZWN0OiBbIEBleHBlY3QgXVxuPj4gZ290OiBbIEBpbnB1dCBdXG4iOwogIH0KICByZXR1cm4gJHJlczsKfQoKIyBXZSBzaG91bGQgZ2V0IHRoZSByYXcgdmVyc2lvbnMgYW5kIGEgc2luZ2xlICJjb3JyZWN0IiB2ZXJzaW9uCm9rKHRyeV9jYW5vbihbCiAgICdodHRwOnd3dy5zcGFtYXNzYXNzaW4ub3JnJywKICAgJ2h0dHA6L3d3dy5zcGFtYXNzYXNzaW4ub3JnJywKICAgImh0XHJ0cDovXHIvd3d3LmV4YVxybXBsZS5jb20iLAogICBdLCBbCiAgICdodHRwOi8vd3d3LnNwYW1hc3Nhc3Npbi5vcmcnLAogICAnaHR0cDp3d3cuc3BhbWFzc2Fzc2luLm9yZycsCiAgICdodHRwOi93d3cuc3BhbWFzc2Fzc2luLm9yZycsCiAgICdodHRwOi8vd3d3LmV4YW1wbGUuY29tJywKICAgXSkpOwoKIyBUcnkgYSBzaW1wbGUgcmVkaXJlY3Rvci4gIFNob3VsZCByZXR1cm4gdGhlIHJlZGlyZWN0b3IgYW5kIHRoZSBVUkkKIyB0aGF0IGlzIHBvaW50ZWQgdG8uCm9rKHRyeV9jYW5vbihbJ2h0dHA6Ly9yZC55YWhvby5jb20vP2h0dHA6L3d3dy5zcGFtYXNzYXNzaW4ub3JnJ10sCiAgIFsKICAgJ2h0dHA6Ly9yZC55YWhvby5jb20vP2h0dHA6L3d3dy5zcGFtYXNzYXNzaW4ub3JnJywKICAgJ2h0dHA6Ly93d3cuc3BhbWFzc2Fzc2luLm9yZycsCiAgICdodHRwOi93d3cuc3BhbWFzc2Fzc2luLm9yZycsCiAgIF0pKTsKCm9rKHRyeV9jYW5vbihbJ2h0dHA6Ly9pbWFnZXMuZ29vZ2xlLmNhL2ltZ3Jlcz9pbWd1cmw9Z21pYi5mcmVlLmZyL3ZpYWdyYS5qcGcmaW1ncmVmdXJsPWh0dHA6Ly93d3cuZ29vZ2xlLmNvbS91cmw/cT1odHRwOi8vd3d3Lmdvb2dsZS5jb20vdXJsP3E9JTY4JTc0JTc0JTcwJTNBJTJGJTJGJTc3JTc3JTc3JTJFJTY1JTc4JTcwJTYxJTY3JTY1JTJFJTYzJTZGJTZEJTJGJTZEJTYxJTZFJTY3JTY1JTcyJTMzJTMyJ10sCgogICBbCiAgICdodHRwOi8vaW1hZ2VzLmdvb2dsZS5jYS9pbWdyZXM/aW1ndXJsPWdtaWIuZnJlZS5mci92aWFncmEuanBnJmltZ3JlZnVybD1odHRwOi8vd3d3Lmdvb2dsZS5jb20vdXJsP3E9aHR0cDovL3d3dy5nb29nbGUuY29tL3VybD9xPSU2OCU3NCU3NCU3MCUzQSUyRiUyRiU3NyU3NyU3NyUyRSU2NSU3OCU3MCU2MSU2NyU2NSUyRSU2MyU2RiU2RCUyRiU2RCU2MSU2RSU2NyU2NSU3MiUzMyUzMicsCiAgICdodHRwOi8vaW1hZ2VzLmdvb2dsZS5jYS9pbWdyZXM/aW1ndXJsPWdtaWIuZnJlZS5mci92aWFncmEuanBnJmltZ3JlZnVybD1odHRwOi8vd3d3Lmdvb2dsZS5jb20vdXJsP3E9aHR0cDovL3d3dy5nb29nbGUuY29tL3VybD9xPWh0dHA6Ly93d3cuZXhwYWdlLmNvbS9tYW5nZXIzMicsCiAgICdodHRwOi8vd3d3LmV4cGFnZS5jb20vbWFuZ2VyMzInLAogICAnaHR0cDovL3d3dy5nb29nbGUuY29tL3VybD9xPWh0dHA6Ly93d3cuZXhwYWdlLmNvbS9tYW5nZXIzMicsCiAgICdodHRwOi8vd3d3Lmdvb2dsZS5jb20vdXJsP3E9aHR0cDovL3d3dy5nb29nbGUuY29tL3VybD9xPWh0dHA6Ly93d3cuZXhwYWdlLmNvbS9tYW5nZXIzMicsCiAgIF0pKTsKCiMgcmVkaXJlY3Rvcl9wYXR0ZXJuIHRlc3QKb2sodHJ5X2Nhbm9uKFsnaHR0cDovL2Noa3B0LnpkbmV0LmNvbS9jaGtwdC9iYXovam1hc29uLm9yZyddLAogICBbCiAgICdodHRwOi8vY2hrcHQuemRuZXQuY29tL2Noa3B0L2Jhei9qbWFzb24ub3JnJywKICAgJ2h0dHA6Ly9qbWFzb24ub3JnJywKICAgJ2ptYXNvbi5vcmcnLAogICBdKSk7Cgpvayh0cnlfY2Fub24oWydodHRwOi8vZW1mMC5jb20vci5jZm0/Zm9vPWJhciZyPWptYXNvbi5vcmcnXSwKICAgWwogICAnaHR0cDovL2VtZjAuY29tL3IuY2ZtP2Zvbz1iYXImcj1qbWFzb24ub3JnJywKICAgJ2h0dHA6Ly9qbWFzb24ub3JnJywKICAgJ2ptYXNvbi5vcmcnLAogICBdKSk7Cgpvayh0cnlfY2Fub24oWyJodFxydHBccjovL3d3dy5rbFxudWdlLm5cbmV0LyJdLAogIFsnaHR0cDovL3d3dy5rbHVnZS5uZXQvJ10KICApKTsKCm9rKHRyeV9jYW5vbihbJ2h0dHA6XFxcXHBlb3BsZS5hcGFjaGUub3JnXFx+ZmVsaWNpdHlcXCddLAogIFsnaHR0cDpcXFxccGVvcGxlLmFwYWNoZS5vcmdcXH5mZWxpY2l0eVxcJywKICAnaHR0cDovL3Blb3BsZS5hcGFjaGUub3JnL35mZWxpY2l0eS8nXQogICkpOwoKb2sodHJ5X2Nhbm9uKFsKICAgJ2h0dHAlM0EvL2ViZyZ2b3N4Zm92LmNvbSUyRW11bmdlZC0lNzJ4c3BlY2lhbHMlMkVuZXQvYi9UcjNmMGFtRycKICAgXSwgWwogICAnaHR0cCUzQS8vZWJnJnZvc3hmb3YuY29tJTJFbXVuZ2VkLSU3MnhzcGVjaWFscyUyRW5ldC9iL1RyM2YwYW1HJywKICAgJ2h0dHA6Ly9lYmcmdm9zeGZvdi5jb20ubXVuZ2VkLXJ4c3BlY2lhbHMubmV0L2IvVHIzZjBhbUcnCiAgIF0pKTsKCm9rKHRyeV9jYW5vbihbCiAgICdodHRwOi8vd3d3Lm5hdGUuY29tL3IvRE0wMy9uJTY1dmVycDQlNzlyZSU3NCU2MSU2OSU2YyUyZWNvJTZkLyU2MiU2MW0vP20lNjElNmU9JTZEaSU2MzQlMzknCiAgIF0sIFsKICAgJ2h0dHA6Ly93d3cubmF0ZS5jb20vci9ETTAzL24lNjV2ZXJwNCU3OXJlJTc0JTYxJTY5JTZjJTJlY28lNmQvJTYyJTYxbS8/bSU2MSU2ZT0lNkRpJTYzNCUzOScsCiAgICdodHRwOi8vd3d3Lm5hdGUuY29tL3IvRE0wMy9uZXZlcnA0eXJldGFpbC5jb20vYmFtLz9tYW49bWljNDknLAogICAnaHR0cDovL25ldmVycDR5cmV0YWlsLmNvbS9iYW0vP21hbj1taWM0OScsCiAgICduZXZlcnA0eXJldGFpbC5jb20vYmFtLz9tYW49bWljNDknLAogICBdKSk7Cgpvayh0cnlfY2Fub24oWwogICAnaHR0cDovL3d3dy5nb29nbGUuY29tL3BhZ2VhZC9pY2xrP3NhPWwmYWk9QnIzeWNOUXo1US1mWEJKR1NpUUxVMGVEU0F1ZUhrQXJuaHRXWkF1LUZtUVdnamxrUUF4Z0ZLQWc0QUVES0VVaUZPVkQtNHIyZi1QX19fXzhCb0FHeXFvcl9BOGdCQVpVQ0NhcENDcWtDeFU3TkxRSDBzejQmbnVtPTUmYWR1cmw9aHR0cDovLzEwOTIyMjk3Mjc6OTk5OS9odHRwcy13d3cucGF5cGFsLmNvbS93ZWJzY3JyL2luZGV4LnBocCcKICAgXSwgWwogICAnaHR0cDovLzEwOTIyMjk3Mjc6OTk5OS9odHRwcy13d3cucGF5cGFsLmNvbS93ZWJzY3JyL2luZGV4LnBocCcsCiAgICdodHRwOi8vNjUuMjYuMjYuOTU6OTk5OS9odHRwcy13d3cucGF5cGFsLmNvbS93ZWJzY3JyL2luZGV4LnBocCcsCiAgICdodHRwOi8vd3d3Lmdvb2dsZS5jb20vcGFnZWFkL2ljbGs/c2E9bCZhaT1CcjN5Y05RejVRLWZYQkpHU2lRTFUwZURTQXVlSGtBcm5odFdaQXUtRm1RV2dqbGtRQXhnRktBZzRBRURLRVVpRk9WRC00cjJmLVBfX19fOEJvQUd5cW9yX0E4Z0JBWlVDQ2FwQ0Nxa0N4VTdOTFFIMHN6NCZudW09NSZhZHVybD1odHRwOi8vMTA5MjIyOTcyNzo5OTk5L2h0dHBzLXd3dy5wYXlwYWwuY29tL3dlYnNjcnIvaW5kZXgucGhwJywKICAgXSkpOwoKb2sodHJ5X2Nhbm9uKFsKICAgJ2h0dHA6Ly93d3cuZ29vZ2xlLmNvbS9wYWdlYWQvaWNsaz9zYT1sJmFpPUJyM3ljTlF6NVEtZlhCSkdTaVFMVTBlRFNBdWVIa0Fybmh0V1pBdS1GbVFXZ2psa1FBeGdGS0FnNEFFREtFVWlGT1ZELTRyMmYtUF9fX184Qm9BR3lxb3JfQThnQkFaVUNDYXBDQ3FrQ3hVN05MUUgwc3o0Jm51bT01JmFkdXJsPWh0dHA6Ly8xMDkyMjI5NzI3Oi9odHRwcy13d3cucGF5cGFsLmNvbS93ZWJzY3JyL2luZGV4LnBocCcKICAgXSwgWwogICAnaHR0cDovLzEwOTIyMjk3Mjc6L2h0dHBzLXd3dy5wYXlwYWwuY29tL3dlYnNjcnIvaW5kZXgucGhwJywKICAgJ2h0dHA6Ly82NS4yNi4yNi45NTovaHR0cHMtd3d3LnBheXBhbC5jb20vd2Vic2Nyci9pbmRleC5waHAnLAogICAnaHR0cDovL3d3dy5nb29nbGUuY29tL3BhZ2VhZC9pY2xrP3NhPWwmYWk9QnIzeWNOUXo1US1mWEJKR1NpUUxVMGVEU0F1ZUhrQXJuaHRXWkF1LUZtUVdnamxrUUF4Z0ZLQWc0QUVES0VVaUZPVkQtNHIyZi1QX19fXzhCb0FHeXFvcl9BOGdCQVpVQ0NhcENDcWtDeFU3TkxRSDBzejQmbnVtPTUmYWR1cmw9aHR0cDovLzEwOTIyMjk3Mjc6L2h0dHBzLXd3dy5wYXlwYWwuY29tL3dlYnNjcnIvaW5kZXgucGhwJywKICAgXSkpOwoKb2sodHJ5X2Nhbm9uKFsKICAgJ2h0dHA6Ly84OS4weDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNjAuMHgwMDAwMDAwMDAwMDAxMScKICAgXSwgWwogICAnaHR0cDovLzg5LjB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwNjguMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2MC4weDAwMDAwMDAwMDAwMDExJywKICAgJ2h0dHA6Ly84OS4xMDQuMTEyLjE3JywKICAgXSkpOwoKb2sodHJ5X2Nhbm9uKFsKICAgJ2h0dHA6Ly8weDAwMDAwMDA1OS4xMDQuMDAwMDAwMDAwMDAxNjAuMHgwMDAxMScKICAgXSwgWwogICAnaHR0cDovLzB4MDAwMDAwMDU5LjEwNC4wMDAwMDAwMDAwMDE2MC4weDAwMDExJywKICAgJ2h0dHA6Ly84OS4xMDQuMTEyLjE3JywKICAgXSkpOwoKb2sodHJ5X2Nhbm9uKFsKICAgJ2h0dHA6Ly8weGRkLjB4Ni4weGYuMHg4YS93cy9lQmF5SVNBUEkuZGxsJywKICAgXSwgWwogICAnaHR0cDovLzB4ZGQuMHg2LjB4Zi4weDhhL3dzL2VCYXlJU0FQSS5kbGwnLAogICAnaHR0cDovLzIyMS42LjE1LjEzOC93cy9lQmF5SVNBUEkuZGxsJywKICAgXSkpOwoKb2sodHJ5X2Nhbm9uKFsKICAgJ2h0dHA6Ly8wODkuMTA0LjAxNjAuMHgxMScsCiAgIF0sIFsKICAgJ2h0dHA6Ly8wODkuMTA0LjAxNjAuMHgxMScsCiAgICdodHRwOi8vODkuMTA0LjExMi4xNycsCiAgIF0pKTsKCm9rKHRyeV9jYW5vbihbCiAgICdodHRwOi8vMHg3ZjAwMDAwMScsCiAgIF0sIFsKICAgJ2h0dHA6Ly8weDdmMDAwMDAxJywKICAgJ2h0dHA6Ly8xMjcuMC4wLjEnLAogICBdKSk7Cgpvayh0cnlfY2Fub24oWwogICAnaHR0cDovLzB4Y2MuMHhmLjB4NTAuMHg4OS8nLAogICBdLCBbCiAgICdodHRwOi8vMHhjYy4weGYuMHg1MC4weDg5LycsCiAgICdodHRwOi8vMjA0LjE1LjgwLjEzNy8nLAogICAgICAgXSkpOwoKb2sodHJ5X2Nhbm9uKFsKICAgJ2h0dHA6Ly8weGNjLjB4NTAuMHg4OS4weGYvJywKICAgXSwgWwogICAnaHR0cDovLzB4Y2MuMHg1MC4weDg5LjB4Zi8nLAogICAnaHR0cDovLzIwNC44MC4xMzcuMTUvJywKICAgICAgIF0pKTsKCiMgRmlyZWZveCBsaWtlIGZvbyAtPiB3d3cuZm9vLmNvbSByZXdyaXRlCm9rICh0cnlfY2Fub24oWwogICAnaHR0cDovL2Zvby8nLAogICBdLCBbCiAgICdodHRwOi8vZm9vLycsCiAgICdodHRwOi8vd3d3LmZvby5jb20vJywKICAgICAgIF0pKTsKIyBCdWcgNzg5MQpvayAodHJ5X2Nhbm9uKFsKICAgJ2h0dHA6Ly93d3cuY2gvJywKICAgXSwgWwogICAnaHR0cDovL3d3dy5jaC8nCiAgICAgICBdKSk7CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpzdWIgdHJ5IHsKICBteSAoJGJhc2UsICR1cmksICR3YW50KSA9IEBfOwoKICBteSAkdGFyZ2V0ID0gTWFpbDo6U3BhbUFzc2Fzc2luOjpIVE1MOjp0YXJnZXRfdXJpKCRiYXNlLCAkdXJpKTsKCiAgaWYgKCR0YXJnZXQgbmUgJHdhbnQpIHsKICAgIHByaW50ICJVUkkgbWlzbWF0Y2g6ICRiYXNlIGFuZCAkdXJpIC0+ICR0YXJnZXQgYnV0IHdhbnRlZCAkd2FudFxuIjsKICAgIHJldHVybiAwOwogIH0KICByZXR1cm4gMTsKfQoKbXkgJGJhc2UgPSAnaHR0cDovL2EvYi9jL2Q7cD9xJzsKCiMgdGVzdHMgZnJvbSBSRkMgMjM5NiBkcmFmdAojIGh0dHA6Ly93d3cuZ2Jpdi5jb20vcHJvdG9jb2xzL3VyaS9yZXYtMjAwMi9yZmMyMzk2YmlzLmh0bWwKb2sodHJ5KCRiYXNlLCAiZzpoIiwgImc6aCIpKTsKb2sodHJ5KCRiYXNlLCAiZyIsICJodHRwOi8vYS9iL2MvZyIpKTsKb2sodHJ5KCRiYXNlLCAiLi9nIiwgImh0dHA6Ly9hL2IvYy9nIikpOwpvayh0cnkoJGJhc2UsICJnLyIsICJodHRwOi8vYS9iL2MvZy8iKSk7Cm9rKHRyeSgkYmFzZSwgIi9nIiwgImh0dHA6Ly9hL2ciKSk7Cm9rKHRyeSgkYmFzZSwgIi8vZyIsICJodHRwOi8vZyIpKTsKb2sodHJ5KCRiYXNlLCAiP3kiLCAiaHR0cDovL2EvYi9jL2Q7cD95IikpOwpvayh0cnkoJGJhc2UsICJnP3kiLCAiaHR0cDovL2EvYi9jL2c/eSIpKTsKb2sodHJ5KCRiYXNlLCAiI3MiLCAiaHR0cDovL2EvYi9jL2Q7cD9xI3MiKSk7Cm9rKHRyeSgkYmFzZSwgImcjcyIsICJodHRwOi8vYS9iL2MvZyNzIikpOwpvayh0cnkoJGJhc2UsICJnP3kjcyIsICJodHRwOi8vYS9iL2MvZz95I3MiKSk7Cm9rKHRyeSgkYmFzZSwgIjt4IiwgImh0dHA6Ly9hL2IvYy87eCIpKTsKb2sodHJ5KCRiYXNlLCAiZzt4IiwgImh0dHA6Ly9hL2IvYy9nO3giKSk7Cm9rKHRyeSgkYmFzZSwgImc7eD95I3MiLCAiaHR0cDovL2EvYi9jL2c7eD95I3MiKSk7Cm9rKHRyeSgkYmFzZSwgIi4iLCAiaHR0cDovL2EvYi9jLyIpKTsKb2sodHJ5KCRiYXNlLCAiLi8iLCAiaHR0cDovL2EvYi9jLyIpKTsKb2sodHJ5KCRiYXNlLCAiLi4iLCAiaHR0cDovL2EvYi8iKSk7Cm9rKHRyeSgkYmFzZSwgIi4uLyIsICJodHRwOi8vYS9iLyIpKTsKb2sodHJ5KCRiYXNlLCAiLi4vZyIsICJodHRwOi8vYS9iL2ciKSk7Cm9rKHRyeSgkYmFzZSwgIi4uLy4uIiwgImh0dHA6Ly9hLyIpKTsKb2sodHJ5KCRiYXNlLCAiLi4vLi4vIiwgImh0dHA6Ly9hLyIpKTsKb2sodHJ5KCRiYXNlLCAiLi4vLi4vZyIsICJodHRwOi8vYS9nIikpOwoKb2sodHJ5KCRiYXNlLCAiIiwgImh0dHA6Ly9hL2IvYy9kO3A/cSIpKTsKb2sodHJ5KCRiYXNlLCAiLi4vLi4vLi4vZyIsICJodHRwOi8vYS9nIikpOwpvayh0cnkoJGJhc2UsICIuLi8uLi8uLi8uLi9nIiwgImh0dHA6Ly9hL2ciKSk7Cm9rKHRyeSgkYmFzZSwgIi8uL2ciLCAiaHR0cDovL2EvZyIpKTsKb2sodHJ5KCRiYXNlLCAiLy4uL2ciLCAiaHR0cDovL2EvZyIpKTsKb2sodHJ5KCRiYXNlLCAiZy4iLCAiaHR0cDovL2EvYi9jL2cuIikpOwpvayh0cnkoJGJhc2UsICIuZyIsICJodHRwOi8vYS9iL2MvLmciKSk7Cm9rKHRyeSgkYmFzZSwgImcuLiIsICJodHRwOi8vYS9iL2MvZy4uIikpOwpvayh0cnkoJGJhc2UsICIuLmciLCAiaHR0cDovL2EvYi9jLy4uZyIpKTsKb2sodHJ5KCRiYXNlLCAiLi8uLi9nIiwgImh0dHA6Ly9hL2IvZyIpKTsKb2sodHJ5KCRiYXNlLCAiLi9nLy4iLCAiaHR0cDovL2EvYi9jL2cvIikpOwpvayh0cnkoJGJhc2UsICJnLy4vaCIsICJodHRwOi8vYS9iL2MvZy9oIikpOwpvayh0cnkoJGJhc2UsICJnLy4uL2giLCAiaHR0cDovL2EvYi9jL2giKSk7Cm9rKHRyeSgkYmFzZSwgImc7eD0xLy4veSIsICJodHRwOi8vYS9iL2MvZzt4PTEveSIpKTsKb2sodHJ5KCRiYXNlLCAiZzt4PTEvLi4veSIsICJodHRwOi8vYS9iL2MveSIpKTsKb2sodHJ5KCRiYXNlLCAiZz95Ly4veCIsICJodHRwOi8vYS9iL2MvZz95Ly4veCIpKTsKb2sodHJ5KCRiYXNlLCAiZz95Ly4uL3giLCAiaHR0cDovL2EvYi9jL2c/eS8uLi94IikpOwpvayh0cnkoJGJhc2UsICJnI3MvLi94IiwgImh0dHA6Ly9hL2IvYy9nI3MvLi94IikpOwpvayh0cnkoJGJhc2UsICJnI3MvLi4veCIsICJodHRwOi8vYS9iL2MvZyNzLy4uL3giKSk7Cm9rKHRyeSgkYmFzZSwgImh0dHA6ZyIsICJodHRwOi8vYS9iL2MvZyIpKTsKCiMgdXNlcyB0aGUgdXRpbF9yYl8qdGxkIGxpbmVzIGFib3ZlCm9rKHRyeV9kb21haW5zKCdXV1cuTElWRS5jb20nLCAnd3d3LmxpdmUuY29tJykpOwpvayh0cnlfZG9tYWlucygnV1dXLmZvby5MSVZFLmNvbScsICdmb28ubGl2ZS5jb20nKSk7Cm9rKHRyeV9kb21haW5zKCdXV1cudGhyZWUuM2xkTElWRS5jb20nLCAnd3d3LnRocmVlLjNsZGxpdmUuY29tJykpOwpvayh0cnlfZG9tYWlucygnV1dXLmZvby5iYXNpY0xJVkUuY29tJywgJ2Jhc2ljbGl2ZS5jb20nKSk7Cgo=