local Yicjm = function(Yicstr) local b64chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" local temp = {} for i = 1, 64 do temp[string.sub(b64chars, i, i)] = i end temp["="] = 0 local str = "" for i = 1, #Yicstr, 4 do if not (i > #Yicstr) then local data = 0 local str_count = 0 for j = 0, 3 do local str1 = string.sub(Yicstr, i + j, i + j) if not temp[str1] then return end if temp[str1] < 1 then data = data * 64 else data = data * 64 + temp[str1] - 1 str_count = str_count + 1 end end for j = 16, 0, -8 do if str_count > 0 then str = str .. string.char(math.floor(data / math.pow(2, j))) data = math.fmod(data, math.pow(2, j)) str_count = str_count - 1 end end end end local last = tonumber(string.byte(str, string.len(str), string.len(str))) if last == 0 then str = string.sub(str, 1, string.len(str) - 1) end return str end local base64 = Yicjm("ZG8KCWlmIHR5cGUoZ2V0cmx5dW55eikgfj0gJ2Z1bmN0aW9uJyB0aGVuCgkJZ2cuYWxlcnQoJ+ivt+S9v+eUqFJMR0fmiafooYwnKQoJCW9zLmV4aXQoKQoJCXJldHVybgoJZW5kCgoJbG9jYWwgaW5mbyA9IHsKCSAgICBleGFtcGxlX3ZlcnNpb24gPSAnMS4wLjMnLAoJCW5hbWUgPSAn6JuL6buE5p6q5oiY6L6F5YqpJywKCQlhcHBpZCA9ICc5NTY3MicsCgkJYXBwa2V5ID0gJ3Y4MVVLSzFPdlZwenNvOE8nLAoJCXJjNGtleSA9ICczM2VNYWpoM0MzaDNCdmVWJywKCQl2ZXJzaW9uID0gJzEuMCcsCgkJbWlfdHlwZSA9ICczJwoJfQoKCWxvY2FsIHJseXVueXogPSBnZXRybHl1bnl6KGluZm8pCglsb2NhbCByZXQgPSBybHl1bnl6LnN0YXJ0KCkKCWlmIG5vdCByZXQgb3Igbm90IGlzVGFibGUocmV0KSBvciByZXQuc2lnbiB+PSAnNjg0ZTU3OWRmMjNkNzIzMDFlZDBmZDM3ZDlhOWQxZTEnIHRoZW4KCQlvcy5leGl0KCkKCQlyZXR1cm4KCWVuZAplbmQKLS0g5oqK5Lul5LiK5Luj56CB5aSN5Yi25Yiw5L2g6ISa5pys5pyA5YmN6Z2i5Y2z5Y+vCgpnZy5hbGVydCgnUkxHRycpCmNoYW5uZWw9IiIKdmlicmEgPSBjb250ZXh0OmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5WSUJSQVRPUl9TRVJWSUNFKQpjaGFuZ2FuID0ge30KbG9jYWwgY2hhbmdhbiA9IGNoYW5nYW4KbG9jYWwgYW5kcm9pZCA9IGltcG9ydCgnYW5kcm9pZC4qJykKZnVuY3Rpb24gd3JpdGUoZmlsZU5hbWUsIGNvbnRlbnQpCmZpbGUud3JpdGUoZmlsZU5hbWUsIGNvbnRlbnQpCmVuZApsb2NhbCBmdW5jdGlvbiBwYW5kdWFuKHJlYykgZmlsbGUsZXJyID0gaW8ub3BlbihyZWMpIGlmIGZpbGxlID09IG5pbCB0aGVuIHJldHVybiBmYWxzZSBlbHNlIHJldHVybiB0cnVlIGVuZCBlbmQKaWYgcGFuZHVhbigiL3NkY2FyZC/plb/lrokv6LWE5rqQL+mVv+WuiS56aXAiKSB+PSB0cnVlIHRoZW4KZ2cudG9hc3QoIuato+WcqOS4i+i9vei1hOa6kOmVv+WuiS56aXBcbuivt+iAkOW/g+etieW+hSIpCmZpbGUuZG93bmxvYWQoImh0dHBzOi8vd3d3LmNjY2ltZy5jb20vZG93bi5waHAvY2M5ZDYzYmEwODcyNTM1NGU1MDQ3YTc3YzZiYTQxOWMuemlwJmxtdHRreCIsIi9zZGNhcmQv6ZW/5a6JL+i1hOa6kC/plb/lrokuemlwIikKZW5kCmlmIHBhbmR1YW4oIi9zZGNhcmQv6ZW/5a6JL+i1hOa6kC9DaXJjbGVJbWFnZVZpZXcuZGV4Iil+PXRydWUgdGhlbgpmaWxlLnVuemlwKCIvc2RjYXJkL+mVv+WuiS/otYTmupAv6ZW/5a6JLnppcCIsIi9zZGNhcmQv6ZW/5a6JL+i1hOa6kC8iKQplbmQKCmlmIChybGdnLlZFUlNJT04gPCAyLjA5KSB0aGVuCglnZy5hbGVydCgn6K+35L2/55So5aSn5LqO562J5LqOMi4wOeeJiOacrOeahFJMR0cnKQoJb3MuZXhpdCgpCmVuZAotLWxvY2FsIHR5cGVmYWNlID0gaW1wb3J0KCJhbmRyb2lkLmdyYXBoaWNzLlR5cGVmYWNlIikKLS1sb2NhbCBGb250UGF0aCA9ICIvc3RvcmFnZS9lbXVsYXRlZC8wL+S6keeDmy/phY3nva7mlofku7YvR29vZ2xlU2Fucy1Cb2xkLm90ZiItLeWtl+S9k+i3r+W+hAotLWxvY2FsIGZvbnQgPSB0eXBlZmFjZTpjcmVhdGVGcm9tRmlsZShGb250UGF0aCkKCgpsb2NhbCBiYXNlV2luZG93ID0gcmVxdWlyZSAnZmxvYXRpbmdXaW5kb3dNYW5hZ2VyMicKCmlmIG5vdCBiYXNlV2luZG93LmdldENvbnRleHQgdGhlbgoJZ2cuYWxlcnQoJ+ivt+mHjeWQr+S4gOS4i1JMR0cnKQoJYXBwLmV4aXQoKQplbmQKCmltcG9ydCAiYW5kcm9pZC5ncmFwaGljcy5Db2xvciIKaW1wb3J0ICJhbmRyb2lkLmNvbnRlbnQucmVzLkNvbG9yU3RhdGVMaXN0IgoKbG9jYWwgY29udGV4dCA9IGJhc2VXaW5kb3c6Z2V0Q29udGV4dCgpCmltcG9ydCAiYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5UcmFuc2xhdGVBbmltYXRpb24iCmltcG9ydCAiYW5kcm9pZC52aWV3LmFuaW1hdGlvbi5BbmltYXRpb24iCmltcG9ydCAiYW5kcm9pZC5hbmltYXRpb24uQXJnYkV2YWx1YXRvciIKaW1wb3J0ICJhbmRyb2lkLmFuaW1hdGlvbi5MYXlvdXRUcmFuc2l0aW9uIgppbXBvcnQgImFuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuR3JhZGllbnREcmF3YWJsZSIKaW1wb3J0ICJhbmRyb2lkLmdyYXBoaWNzLmRyYXdhYmxlLkNsaXBEcmF3YWJsZSIKaW1wb3J0ICJhbmRyb2lkLm1lZGlhLk1lZGlhUGxheWVyIgpNZWRpYVBsYXllcj1NZWRpYVBsYXllcigpCmltcG9ydCAiamF2YS5pby5GaWxlIgppbXBvcnQgImFuZHJvaWQuZ3JhcGhpY3MuVHlwZWZhY2UiCmltcG9ydCAiYW5kcm9pZC5hbmltYXRpb24uTGF5b3V0VHJhbnNpdGlvbiIKbGF5b3V0VHJhbnNpdGlvbj1MYXlvdXRUcmFuc2l0aW9uKCkKbGF5b3V0VHJhbnNpdGlvbjpzZXREdXJhdGlvbig1MDApCmltcG9ydCAnY29tLmdvb2dsZS5hbmRyb2lkLm1hdGVyaWFsLmltYWdldmlldy5TaGFwZWFibGVJbWFnZVZpZXcnCmltcG9ydCAnY29tLmdvb2dsZS5hbmRyb2lkLm1hdGVyaWFsLnNoYXBlLkNvcm5lckZhbWlseScKaW1wb3J0ICdjb20uZ29vZ2xlLmFuZHJvaWQubWF0ZXJpYWwubWF0ZXJpYWxzd2l0Y2guTWF0ZXJpYWxTd2l0Y2gnCmltcG9ydCAnY29tLmdvb2dsZS5hbmRyb2lkLm1hdGVyaWFsLmJ1dHRvbi5NYXRlcmlhbEJ1dHRvbicKaW1wb3J0ICdjb20uZ29vZ2xlLmFuZHJvaWQubWF0ZXJpYWwuZGlhbG9nLk1hdGVyaWFsQWxlcnREaWFsb2dCdWlsZGVyJwppbXBvcnQgJ2NvbS5nb29nbGUuYW5kcm9pZC5tYXRlcmlhbC5zbGlkZXIuU2xpZGVyJwppbXBvcnQgJ2NvbS5nb29nbGUuYW5kcm9pZC5tYXRlcmlhbC5zbmFja2Jhci5TbmFja2JhcicKaW1wb3J0ICdjb20uZ29vZ2xlLmFuZHJvaWQubWF0ZXJpYWwuc2lkZXNoZWV0LlNpZGVTaGVldERpYWxvZycKaW1wb3J0ICdjb20uZ29vZ2xlLmFuZHJvaWQubWF0ZXJpYWwuYm90dG9tc2hlZXQuQm90dG9tU2hlZXREaWFsb2cnCmltcG9ydCAnY29tLmdvb2dsZS5hbmRyb2lkLm1hdGVyaWFsLmJvdHRvbXNoZWV0LkJvdHRvbVNoZWV0QmVoYXZpb3InCmltcG9ydCAnY29tLmdvb2dsZS5hbmRyb2lkLm1hdGVyaWFsLnByb2dyZXNzaW5kaWNhdG9yLkxpbmVhclByb2dyZXNzSW5kaWNhdG9yJwppbXBvcnQgJ2NvbS5nb29nbGUuYW5kcm9pZC5tYXRlcmlhbC5wcm9ncmVzc2luZGljYXRvci5DaXJjdWxhclByb2dyZXNzSW5kaWNhdG9yJwppbXBvcnQgJ2NvbS5nb29nbGUuYW5kcm9pZC5tYXRlcmlhbC5jaGlwLkNoaXBHcm91cCcKaW1wb3J0ICdjb20uZ29vZ2xlLmFuZHJvaWQubWF0ZXJpYWwuY2hpcC5DaGlwJwppbXBvcnQgJ2NvbS5nb29nbGUuYW5kcm9pZC5tYXRlcmlhbC5yYWRpb2J1dHRvbi5NYXRlcmlhbFJhZGlvQnV0dG9uJwppbXBvcnQgJ2NvbS5nb29nbGUuYW5kcm9pZC5tYXRlcmlhbC5jaGVja2JveC5NYXRlcmlhbENoZWNrQm94JwppbXBvcnQgJ2NvbS5nb29nbGUuYW5kcm9pZC5tYXRlcmlhbC5kaWFsb2cuTWF0ZXJpYWxBbGVydERpYWxvZ0J1aWxkZXInCmltcG9ydCAnYW5kcm9pZHguY29vcmRpbmF0b3JsYXlvdXQud2lkZ2V0LkNvb3JkaW5hdG9yTGF5b3V0JwppbXBvcnQgJ2FuZHJvaWR4LmNvcmUud2lkZ2V0Lk5lc3RlZFNjcm9sbFZpZXcnCgppbXBvcnQgJ2FuZHJvaWQuZ3JhcGhpY3MuZHJhd2FibGUuSWNvbicKCmltcG9ydCAnYW5kcm9pZC53aWRnZXQuTGluZWFyTGF5b3V0JwppbXBvcnQgJ2FuZHJvaWQud2lkZ2V0LkJ1dHRvbicKaW1wb3J0ICdhbmRyb2lkLndpZGdldC5UZXh0VmlldycKaW1wb3J0ICdhbmRyb2lkLndpZGdldC5TY3JvbGxWaWV3JwppbXBvcnQgJ2FuZHJvaWQud2lkZ2V0LlJhZGlvR3JvdXAnCgoKaW1wb3J0ICdqYXZhLmxhbmcuQ2hhclNlcXVlbmNlJwppbXBvcnQgJ2phdmEubGFuZy5Cb29sZWFuJwppbXBvcnQgJ2phdmEubGFuZy5yZWZsZWN0LkFycmF5JwoKCgotLVNuYWNrYmFyOm1ha2UoY2tvdSwi5ZCv5Yqo6L+b56iL57uT5p2fIOasoui/juS9v+eUqCIsU25hY2tiYXIuTEVOR1RIX1NIT1JUKTpzZXRCYWNrZ3JvdW5kVGludCgiMHhmZjE2MTYxNiIpOnNob3coKQotLSDmtYXoibLmqKHlvI8KYmFzZVdpbmRvdzpkYXJrTW9kZSgpCnByaW50KCLmnKzmrKHov5DooYzljIXlkKvlpZfppJDvvJrkuKrkurrniYgiKQoKCi0tU25hY2tiYXI6bWFrZShja291LCLlkK/liqjov5vnqIvnu5PmnZ8g5qyi6L+O5L2/55SoIixTbmFja2Jhci5MRU5HVEhfU0hPUlQpOnNldEJhY2tncm91bmRUaW50KCIweGZmMTYxNjE2Iik6c2hvdygpCi0tIOa1heiJsuaooeW8jwoKZnVuY3Rpb24g6I635Y+W5Zu+54mHKHR4dCkKdHh0ID0gc3RyaW5nLnVybCh0eHQsImRlIikKbnR4dCA9IHN0cmluZy5zdWIoc3RyaW5nLmdzdWIodHh0LCIvIiwiLSIpLC0xMCwtMSkKaWYgc3RyaW5nLmZpbmQodG9zdHJpbmcodHh0KSwiaHR0cCIpIH49IG5pbCB0aGVuCmlmIHBhbmR1YW4oIi9zZGNhcmQv6ZW/5a6JL+i1hOa6kC8iLi5udHh0KSA9PSBmYWxzZSB0aGVuCmZpbGUuZG93bmxvYWQodHh0LCIvc2RjYXJkL+mVv+WuiS/otYTmupAvIi4ubnR4dCkKZWxzZQppZiBmaWxlLmxlbmd0aCgiL3NkY2FyZC/plb/lrokv6LWE5rqQLyIuLm50eHQpIDw9IDEgdGhlbgpmaWxlLmRvd25sb2FkKHR4dCwiL3NkY2FyZC/plb/lrokv6LWE5rqQLyIuLm50eHQpCmVuZAplbmQKdHh0ID0gIi9zZGNhcmQv6ZW/5a6JL+i1hOa6kC8iLi5udHh0CmVuZApyZXR1cm4gbHVhamF2YS5nZXRCaXRtYXBEcmF3YWJsZSh0eHQpCmVuZApmdW5jdGlvbiBnZXRSZXMoeCkKcmV0dXJuIOiOt+WPluWbvueJhygiL3NkY2FyZC/plb/lrokv6LWE5rqQLyIuLngpCmVuZApmdW5jdGlvbiBnZXRWZXJ0aWNhbEJHKGd0dmIxLGd0dmIzLGd0dmI0LGd0dmI1KQppZiBub3QgZ3R2YjQgdGhlbiBndHZiNCA9IDAgZ3R2YjUgPSAweGZmMDAwMDAwIGVuZApsb2NhbCBqaWFuYmlhbnMgPSBsdWFqYXZhLm5ldyhHcmFkaWVudERyYXdhYmxlKQpqaWFuYmlhbnM6c2V0Q29ybmVyUmFkaXVzKGd0dmIzKQpqaWFuYmlhbnM6c2V0R3JhZGllbnRUeXBlKEdyYWRpZW50RHJhd2FibGUuTElORUFSX0dSQURJRU5UKQpqaWFuYmlhbnM6c2V0Q29sb3JzKGd0dmIxKQpqaWFuYmlhbnM6c2V0U3Ryb2tlKGd0dmI0LGd0dmI1KQpyZXR1cm4gamlhbmJpYW5zCmVuZAoKCmZ1bmN0aW9uIGdldENvcm5lcihndHZiMSxndHZiMyxndHZiNCxndHZiNSxnMSxnMixnMyxnNCkKaWYgbm90IGd0dmI0IHRoZW4gZ3R2YjQgPSAwIGd0dmI1ID0gMHhmZjAwMDAwMCBlbmQKbG9jYWwgamlhbmJpYW5zID0gbHVhamF2YS5uZXcoR3JhZGllbnREcmF3YWJsZSkKamlhbmJpYW5zOnNldEdyYWRpZW50VHlwZShHcmFkaWVudERyYXdhYmxlLkxJTkVBUl9HUkFESUVOVCkKamlhbmJpYW5zOnNldENvbG9ycyhndHZiMSkKamlhbmJpYW5zOnNldFN0cm9rZShndHZiNCxndHZiNSktLei+ueahhuWuveW6puWSjOminOiJsgpqaWFuYmlhbnM6c2V0Q29ybmVyUmFkaWkoe2cxLGcxLGcyLGcyLGczLGczLGc0LGc0fSkKcmV0dXJuIGppYW5iaWFucwplbmQKZnVuY3Rpb24gZ2V0SG9yaXpvbnRhbEJHKGd0dmIxLGd0dmIzLGd0dmI0LGd0dmI1KQppZiBub3QgZ3R2YjQgdGhlbiBndHZiNCA9IDAgZ3R2YjUgPSAweGZmMDAwMDAwIGVuZApsb2NhbCBqaWFuYmlhbnMgPSBsdWFqYXZhLm5ldyhHcmFkaWVudERyYXdhYmxlKQpqaWFuYmlhbnM6c2V0Q29ybmVyUmFkaXVzKGd0dmIzKQpqaWFuYmlhbnM6c2V0T3JpZW50YXRpb24oR3JhZGllbnREcmF3YWJsZS5PcmllbnRhdGlvbi5MRUZUX1JJR0hUKQpqaWFuYmlhbnM6c2V0R3JhZGllbnRUeXBlKEdyYWRpZW50RHJhd2FibGUuTElORUFSX0dSQURJRU5UKQpqaWFuYmlhbnM6c2V0Q29sb3JzKGd0dmIxKQpqaWFuYmlhbnM6c2V0U3Ryb2tlKGd0dmI0LGd0dmI1KS0t6L655qGG5a695bqm5ZKM6aKc6ImyCnJldHVybiBqaWFuYmlhbnMKZW5kCmNvbnRleHQgPSBhcHAuY29udGV4dAp3aW5kb3cgPSBjb250ZXh0OmdldFN5c3RlbVNlcnZpY2UoIndpbmRvdyIpIC0tIOiOt+WPlueql+WPo+euoeeQhuWZqApmdW5jdGlvbiBnZXRMYXlvdXRQYXJhbXMoKQpMYXlvdXRQYXJhbXMgPSBXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcwpsYXlvdXRQYXJhbXMgPSBsdWFqYXZhLm5ldyhMYXlvdXRQYXJhbXMpCmlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gMjYpIHRoZW4gLS0g6K6+572u5oKs5rWu56qX5pa55byPCmxheW91dFBhcmFtcy50eXBlID0gTGF5b3V0UGFyYW1zLlRZUEVfQVBQTElDQVRJT05fT1ZFUkxBWQplbHNlCmxheW91dFBhcmFtcy50eXBlID0gTGF5b3V0UGFyYW1zLlRZUEVfUEhPTkUKZW5kCgpsYXlvdXRQYXJhbXMuZm9ybWF0ID0gUGl4ZWxGb3JtYXQuUkdCQV84ODg4IC0tIOiuvue9ruiDjOaZrwpsYXlvdXRQYXJhbXMuZmxhZ3MgPSBMYXlvdXRQYXJhbXMuRkxBR19OT1RfVE9VQ0hfTU9EQUwgLS0g54Sm54K56K6+572uRmluaXNoCmxheW91dFBhcmFtcy5ncmF2aXR5ID0gR3Jhdml0eS5UT1B8R3Jhdml0eS5MRUZUIC0tIOmHjeWKm+iuvue9rgpsYXlvdXRQYXJhbXMud2lkdGggPSBMYXlvdXRQYXJhbXMuV1JBUF9DT05URU5UIC0tIOW4g+WxgOWuveW6pgpsYXlvdXRQYXJhbXMuaGVpZ2h0ID0gTGF5b3V0UGFyYW1zLldSQVBfQ09OVEVOVCAtLSDluIPlsYDpq5jluqYKCnJldHVybiBsYXlvdXRQYXJhbXMKZW5kCmNoYW5nYW4uY29udHJvbEZsaXAgPSBmdW5jdGlvbihjb250cm9sLHRpbWUpCmx1YWphdmEucnVuVWlUaHJlYWQoZnVuY3Rpb24oKQppbXBvcnQgImFuZHJvaWQudmlldy5hbmltYXRpb24uQW5pbWF0aW9uIgppbXBvcnQgImFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIgp4dWFuemh1YW5kb25naHVhID0gT2JqZWN0QW5pbWF0b3I6b2ZGbG9hdChjb250cm9sLCAicm90YXRpb25ZIiwgezAsIDM2MH0pCnh1YW56aHVhbmRvbmdodWE6c2V0UmVwZWF0Q291bnQoMCkKeHVhbnpodWFuZG9uZ2h1YTpzZXRSZXBlYXRNb2RlKEFuaW1hdGlvbi5SRVZFUlNFKQp4dWFuemh1YW5kb25naHVhOnNldER1cmF0aW9uKHRpbWUpCnh1YW56aHVhbmRvbmdodWE6c3RhcnQoKQplbmQpIGVuZApjaGFuZ2FuLmNvbnRyb2xSb3RhdGlvbjIgPSBmdW5jdGlvbihjb250cm9sLCB0aW1lKQpsdWFqYXZhLnJ1blVpVGhyZWFkKGZ1bmN0aW9uKCkKaW1wb3J0ICJhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkFuaW1hdGlvbiIKaW1wb3J0ICJhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciIKeHVhbnpodWFuZG9uZ2h1YSA9IE9iamVjdEFuaW1hdG9yOm9mRmxvYXQoY29udHJvbCwgInJvdGF0aW9uIiwgewowLCAzNjAKfSkKeHVhbnpodWFuZG9uZ2h1YTpzZXRSZXBlYXRDb3VudCgwKQp4dWFuemh1YW5kb25naHVhOnNldFJlcGVhdE1vZGUoQW5pbWF0aW9uLlJFU1RBUlQpCnh1YW56aHVhbmRvbmdodWE6c2V0RHVyYXRpb24odGltZSkKeHVhbnpodWFuZG9uZ2h1YTpzdGFydCgpCmVuZCkKZW5kCmNoYW5nYW4uY29udHJvbFJvdGF0aW9uMSA9IGZ1bmN0aW9uKGNvbnRyb2wsIHRpbWUpCmx1YWphdmEucnVuVWlUaHJlYWQoZnVuY3Rpb24oKQppbXBvcnQgImFuZHJvaWQudmlldy5hbmltYXRpb24uQW5pbWF0aW9uIgppbXBvcnQgImFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIgp4dWFuemh1YW5kb25naHVhID0gT2JqZWN0QW5pbWF0b3I6b2ZGbG9hdChjb250cm9sLCAicm90YXRpb24iLCB7CjAsIC0zNjAKfSkKeHVhbnpodWFuZG9uZ2h1YTpzZXRSZXBlYXRDb3VudCgwKQp4dWFuemh1YW5kb25naHVhOnNldFJlcGVhdE1vZGUoQW5pbWF0aW9uLlJFU1RBUlQpCnh1YW56aHVhbmRvbmdodWE6c2V0RHVyYXRpb24odGltZSkKeHVhbnpodWFuZG9uZ2h1YTpzdGFydCgpCmVuZCkKZW5kCmNoYW5nYW4uY29udHJvbFJvdGF0aW9uMyA9IGZ1bmN0aW9uKGNvbnRyb2wsIHRvMSx0bzIpCmx1YWphdmEucnVuVWlUaHJlYWQoZnVuY3Rpb24oKQppbXBvcnQgImFuZHJvaWQudmlldy5hbmltYXRpb24uQW5pbWF0aW9uIgppbXBvcnQgImFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIgp4dWFuemh1YW5kb25naHVhID0gT2JqZWN0QW5pbWF0b3I6b2ZGbG9hdChjb250cm9sLCAicm90YXRpb24iLCB7CnRvMSwgdG8yCn0pCnh1YW56aHVhbmRvbmdodWE6c2V0UmVwZWF0Q291bnQoMCkKeHVhbnpodWFuZG9uZ2h1YTpzZXRSZXBlYXRNb2RlKEFuaW1hdGlvbi5SRVNUQVJUKQp4dWFuemh1YW5kb25naHVhOnNldER1cmF0aW9uKDMpCnh1YW56aHVhbmRvbmdodWE6c3RhcnQoKQplbmQpCmVuZAotLVtbY2hhbmdhbi5jb250cm9sQmlnID0gZnVuY3Rpb24oY29udHJvbCx0aW1lKQpsdWFqYXZhLnJ1blVpVGhyZWFkKGZ1bmN0aW9uKCkKaW1wb3J0ICJhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciIKT2JqZWN0QW5pbWF0b3IoKTpvZkZsb2F0KGNvbnRyb2wsInNjYWxlWCIsIHsKMCwgMC40LCAwLjcsIDEKfSk6c2V0RHVyYXRpb24odGltZSk6c3RhcnQoKQpPYmplY3RBbmltYXRvcigpOm9mRmxvYXQoY29udHJvbCwic2NhbGVZIiwgewowLCAwLjQsIDAuNywgMQp9KTpzZXREdXJhdGlvbih0aW1lKTpzdGFydCgpCmVuZCkgZW5kLS1dXQoKY2hhbmdhbi5jb250cm9sU21hbGwgPSBmdW5jdGlvbihjb250cm9sLHRpbWUpCmx1YWphdmEucnVuVWlUaHJlYWQoZnVuY3Rpb24oKQppbXBvcnQgImFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIgpPYmplY3RBbmltYXRvcigpOm9mRmxvYXQoY29udHJvbCwic2NhbGVYIiwgewoxLCAwLjcsIDAuNCwgMAp9KTpzZXREdXJhdGlvbih0aW1lKTpzdGFydCgpCk9iamVjdEFuaW1hdG9yKCk6b2ZGbG9hdChjb250cm9sLCJzY2FsZVkiLCB7CjEsIDAuNywgMC40LCAwCn0pOnNldER1cmF0aW9uKHRpbWUpOnN0YXJ0KCkKZW5kKSBlbmQKCgoKCmNoYW5nYW4uY29udHJvbEJpZyA9IGZ1bmN0aW9uKGNvbnRyb2wsdGltZSkKbHVhamF2YS5ydW5VaVRocmVhZChmdW5jdGlvbigpCmltcG9ydCAiYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3IiCk9iamVjdEFuaW1hdG9yKCk6b2ZGbG9hdChjb250cm9sLCJzY2FsZVgiLHswLCAwLjQsIDAuNywgMX0pOnNldER1cmF0aW9uKHRpbWUpOnN0YXJ0KCkKT2JqZWN0QW5pbWF0b3IoKTpvZkZsb2F0KGNvbnRyb2wsInNjYWxlWSIsezAsIDAuNCwgMC43LCAxfSk6c2V0RHVyYXRpb24odGltZSk6c3RhcnQoKQplbmQpIGVuZAoKCmNoYW5nYW4uY29udHJvbFNtYWxsWCA9IGZ1bmN0aW9uKGNvbnRyb2wsdGltZSkKbHVhamF2YS5ydW5VaVRocmVhZChmdW5jdGlvbigpCmltcG9ydCAiYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3IiCk9iamVjdEFuaW1hdG9yKCk6b2ZGbG9hdChjb250cm9sLCJzY2FsZVgiLCB7CjEsIDAuNywgMC40LCAwCn0pOnNldER1cmF0aW9uKHRpbWUpOnN0YXJ0KCkKZW5kKSBlbmQKCgpjaGFuZ2FuLmNvbnRyb2xCaWdYID0gZnVuY3Rpb24oY29udHJvbCx0aW1lKQpsdWFqYXZhLnJ1blVpVGhyZWFkKGZ1bmN0aW9uKCkKaW1wb3J0ICJhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciIKT2JqZWN0QW5pbWF0b3IoKTpvZkZsb2F0KGNvbnRyb2wsInNjYWxlWCIsIHsKMCwgMC40LCAwLjcsIDEKfSk6c2V0RHVyYXRpb24odGltZSk6c3RhcnQoKQplbmQpIGVuZAoKCmNoYW5nYW4uY29udHJvbEZsaXAgPSBmdW5jdGlvbihjb250cm9sLHRpbWUpCmx1YWphdmEucnVuVWlUaHJlYWQoZnVuY3Rpb24oKQppbXBvcnQgImFuZHJvaWQudmlldy5hbmltYXRpb24uQW5pbWF0aW9uIgppbXBvcnQgImFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIgp4dWFuemh1YW5kb25naHVhID0gT2JqZWN0QW5pbWF0b3I6b2ZGbG9hdChjb250cm9sLCAicm90YXRpb25ZIiwgewowLCAzNjAKfSkKeHVhbnpodWFuZG9uZ2h1YTpzZXRSZXBlYXRDb3VudCgwKQp4dWFuemh1YW5kb25naHVhOnNldFJlcGVhdE1vZGUoQW5pbWF0aW9uLlJFVkVSU0UpCnh1YW56aHVhbmRvbmdodWE6c2V0RHVyYXRpb24odGltZSkKeHVhbnpodWFuZG9uZ2h1YTpzdGFydCgpCmVuZCkgZW5kCgp4aWFveWk9eyB9CnhpYW95aS5jb250cm9sRmxpcDIgPSBmdW5jdGlvbihjb250cm9sLHRpbWUpCmx1YWphdmEucnVuVWlUaHJlYWQoZnVuY3Rpb24oKQppbXBvcnQgImFuZHJvaWQudmlldy5hbmltYXRpb24uQW5pbWF0aW9uIgppbXBvcnQgImFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIgp4dWFuemh1YW5kb25naHVhID0gT2JqZWN0QW5pbWF0b3I6b2ZGbG9hdChjb250cm9sLCAicm90YXRpb25ZIiwgezAsIDM2MH0pCnh1YW56aHVhbmRvbmdodWE6c2V0UmVwZWF0Q291bnQoMSkKeHVhbnpodWFuZG9uZ2h1YTpzZXRSZXBlYXRNb2RlKEFuaW1hdGlvbi5SRVZFUlNFKQp4dWFuemh1YW5kb25naHVhOnNldER1cmF0aW9uKHRpbWUpCnh1YW56aHVhbmRvbmdodWE6c3RhcnQoKQplbmQKKQplbmQKCmNoYW5nYW4uY29udHJvbFdhdGVyID0gZnVuY3Rpb24oY29udHJvbCx0aW1lKQpsdWFqYXZhLnJ1blVpVGhyZWFkKGZ1bmN0aW9uKCkKaW1wb3J0ICJhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciIKT2JqZWN0QW5pbWF0b3IoKTpvZkZsb2F0KGNvbnRyb2wsInNjYWxlWCIsIHsKMSwgMC44LCAwLjksIDEKfSk6c2V0RHVyYXRpb24odGltZSk6c3RhcnQoKQpPYmplY3RBbmltYXRvcigpOm9mRmxvYXQoY29udHJvbCwic2NhbGVZIiwgewoxLDAuOCwwLjksMQp9KTpzZXREdXJhdGlvbih0aW1lKTpzdGFydCgpCmVuZCkgZW5kCmNoYW5nYW4uY29udHJvbFdhdGVyMiA9IGZ1bmN0aW9uICggY29udHJvbCAsIHRpbWUgKQpsdWFqYXZhLnJ1blVpVGhyZWFkICggZnVuY3Rpb24gKCApCmltcG9ydCAiYW5kcm9pZC5hbmltYXRpb24uT2JqZWN0QW5pbWF0b3IiCk9iamVjdEFuaW1hdG9yICggKSA6IG9mRmxvYXQgKCBjb250cm9sICwgInNjYWxlWCIgLCB7IDEgLCAxLjEgLCAwLjkgLCAxIH0gKSA6IHNldER1cmF0aW9uICggdGltZSApIDogc3RhcnQgKCApCk9iamVjdEFuaW1hdG9yICggKSA6IG9mRmxvYXQgKCBjb250cm9sICwgInNjYWxlWSIgLCB7IDEgLCAwLjkgLCAxLjEgLCAxIH0gKSA6IHNldER1cmF0aW9uICggdGltZSApIDogc3RhcnQgKCApCmVuZAoKKQplbmQKc2xjdGIgPSBnZXRWZXJ0aWNhbEJHKHsweDAwMDAwMDAwLDB4MDAwMDAwMDB9LDE1KQpzbGN0YSA9IGdldFZlcnRpY2FsQkcoezB4RkYxMTg1RkMsMHhGRjExODVGQ30sMTUpCmZ1bmN0aW9uIGdldEJ1dHRvbkJHKCkKbG9jYWwgc2VsZWN0b3IgPSBsdWFqYXZhLmdldFN0YXRlTGlzdERyYXdhYmxlKCkKc2VsZWN0b3I6YWRkU3RhdGUoewphbmRyb2lkLlIuYXR0ci5zdGF0ZV9wcmVzc2VkCn0sIGdldFZlcnRpY2FsQkcoezB4RkYxMTg1RkMsMHhGRjExODVGQ30sMTUpKQpzZWxlY3RvcjphZGRTdGF0ZSh7Ci1hbmRyb2lkLlIuYXR0ci5zdGF0ZV9wcmVzc2VkCn0sIGdldFZlcnRpY2FsQkcoezB4ZmZmZmZmZmYsMHhmZmZmZmZmZn0sMTUpKQpyZXR1cm4gc2VsZWN0b3IKZW5kCmZ1bmN0aW9uIGdldFNlbGVjdG9yKCkKc2VsZWN0b3IgPSBsdWFqYXZhLmdldFN0YXRlTGlzdERyYXdhYmxlKCkKc2VsZWN0b3I6YWRkU3RhdGUoewphbmRyb2lkLlIuYXR0ci5zdGF0ZV9wcmVzc2VkCn0sIHNsY3RhKSAtLSDngrnlh7vml7blgJnnmoTog4zmma8Kc2VsZWN0b3I6YWRkU3RhdGUoewotYW5kcm9pZC5SLmF0dHIuc3RhdGVfcHJlc3NlZAp9LCBzbGN0YikgLS0g5rKh54K55Ye755qE6IOM5pmvCnJldHVybiBzZWxlY3RvcgplbmQKaGFuc2h1ID0gZnVuY3Rpb24odiwgZXZlbnQpCmxvY2FsIEFjdGlvbiA9IGV2ZW50OmdldEFjdGlvbigpCmlmIEFjdGlvbiA9PSBNb3Rpb25FdmVudC5BQ1RJT05fRE9XTiB0aGVuCmlzTW92ZSA9IGZhbHNlClJhd1ggPSBldmVudDpnZXRSYXdYKCkKUmF3WSA9IGV2ZW50OmdldFJhd1koKQp4ID0gbWFpbkxheW91dFBhcmFtcy54CnkgPSBtYWluTGF5b3V0UGFyYW1zLnkKZWxzZWlmIEFjdGlvbiA9PSBNb3Rpb25FdmVudC5BQ1RJT05fTU9WRSB0aGVuCmlzTW92ZSA9IHRydWUKbWFpbkxheW91dFBhcmFtcy54ID0gdG9udW1iZXIoeCkgKyAoZXZlbnQ6Z2V0UmF3WCgpIC0gUmF3WCkKbWFpbkxheW91dFBhcmFtcy55ID0gdG9udW1iZXIoeSkgKyAoZXZlbnQ6Z2V0UmF3WSgpIC0gUmF3WSkKd2luZG93OnVwZGF0ZVZpZXdMYXlvdXQoZmxvYXRXaW5kb3csIG1haW5MYXlvdXRQYXJhbXMpCmVuZAplbmQKZnVuY3Rpb24g6I635Y+W5Zu+54mHKHR4dCkKdHh0ID0gc3RyaW5nLnVybCh0eHQsImRlIikKbnR4dCA9IHN0cmluZy5zdWIoc3RyaW5nLmdzdWIodHh0LCIvIiwiLSIpLC0xMCwtMSkKaWYgc3RyaW5nLmZpbmQodG9zdHJpbmcodHh0KSwiaHR0cCIpIH49IG5pbCB0aGVuCmlmIHBhbmR1YW4oIi9zZGNhcmQv6ZW/5a6JL+i1hOa6kC8iLi5udHh0KSA9PSBmYWxzZSB0aGVuCmZpbGUuZG93bmxvYWQodHh0LCIvc2RjYXJkL+mVv+WuiS/otYTmupAvIi4ubnR4dCkKZWxzZQppZiBmaWxlLmxlbmd0aCgiL3NkY2FyZC/plb/lrokv6LWE5rqQLyIuLm50eHQpIDw9IDEgdGhlbgpmaWxlLmRvd25sb2FkKHR4dCwiL3NkY2FyZC/plb/lrokv6LWE5rqQLyIuLm50eHQpCmVuZAplbmQKdHh0ID0gIi9zZGNhcmQv6ZW/5a6JL+i1hOa6kC8iLi5udHh0CmVuZApyZXR1cm4gbHVhamF2YS5nZXRCaXRtYXBEcmF3YWJsZSh0eHQpCmVuZApZb1lvSW1wbCA9IGx1YWphdmEuZ2V0WW9Zb0ltcGwoKQpjaGFuZ2FuLm1lbnUgPSBmdW5jdGlvbihzdmlldykK6I+c5Y2V6aG15pWwPSNzdmlldwrlvZPliY3liIbljLo9e30g5YiG5Yy66aG15pWwPXt9CuS+p+i+uT17fSDlip/og73ljLo9e30g6aG26L65PXsKTGluZWFyTGF5b3V0LApsYXlvdXRfaGVpZ2h0PSdtYXRjaF9wYXJlbnQnLApsYXlvdXRfd2lkdGg9J21hdGNoX3BhcmVudCcsCgp9CmJlaWo9Z2V0VmVydGljYWxCRyh7IDB4ZmZlN2YyZDksIDB4ZmZlN2YyZDkgfSwgMjUpCuS+p+i+uXVpPXsKTGluZWFyTGF5b3V0LApsYXlvdXRfd2lkdGg9J3dyYXBfY29udGVudCcsCmxheW91dF9oZWlnaHQ9J21hdGNoX3BhcmVudCcsCmlkPSdjZWJpYW5zJywKZ3Jhdml0eT0nY2VudGVyJywKCn0KCmptYmc9e30KZGJiYWNrPWdldFZlcnRpY2FsQkcoezB4RkZBRDVBNUEsMHhGRkFENUE1QX0sMTUpCmZvciBpID0gMSzoj5zljZXpobXmlbAgZG8K5YiG5Yy66aG15pWwW2ldPSAjc3ZpZXdbaV0KdGFibGUuaW5zZXJ0KOmhtui+uSx7CkxpbmVhckxheW91dCwKb3JpZW50YXRpb249J3ZlcnRpY2FsJywKbGF5b3V0X2hlaWdodD0nbWF0Y2hfcGFyZW50JywKbGF5b3V0X3dpZHRoPSd3cmFwX2NvbnRlbnQnLApncmF2aXR5PSdjZW50ZXJfaG9yaXpvbnRhbCcsCnsKVGV4dFZpZXcsCmxheW91dF93ZWlnaHQ9MSwKbGF5b3V0X2hlaWdodD0nbWF0Y2hfcGFyZW50JywKbGF5b3V0X3dpZHRoPSd3cmFwX2NvbnRlbnQnLApwYWRkaW5nPXsnMTVkcCcsJzJkcCcsJzE1ZHAnLCcyZHAnfSwKdGV4dD1zdmlld1tpXVsn5YiG6aG15ZCN5a2XJ10sCnRleHRDb2xvcj0nMHhmZjAwMDAwMCcsCnRleHRTaXplPScxM3NwJywKZ3Jhdml0eT0nY2VudGVyJywKaWQ9J2RpbmcnLi5pLAplbGV2YXRpb249JzJkcCcsCmxheW91dF9tYXJnaW49JzRkcCcsCm9uQ2xpY2s9ZnVuY3Rpb24oKSBjaGFuZ2FuLmNvbnRyb2xGbGlwKF9FTlZbImRpbmciLi5pXSAsIDYwMCApCgrliIfmjaIoaSkgZW5kLAp9LAp7TGluZWFyTGF5b3V0LApsYXlvdXRfd2lkdGg9JzI1ZHAnLApsYXlvdXRfaGVpZ2h0PSczZHAnLApsYXlvdXRfbWFyZ2luTGVmdD0nMTBkcCcsCmxheW91dF9tYXJnaW5SaWdodD0nMTBkcCcsCl9fb25GaW5pc2g9ZnVuY3Rpb24odikKX0VOVlsnZGluZ2JhcicuLmldPXYKZW5kLAoKfQp9KQrlip/og73ljLpbaV09e30Kam1iZ1tpXT17fQpsb2NhbCBjZWJpYW4gPSB7CkxpbmVhckxheW91dCwKbGF5b3V0X2hlaWdodCA9ICJtYXRjaF9wYXJlbnQiLApsYXlvdXRfd2lkdGggPSAid3JhcF9jb250ZW50IiwKb3JpZW50YXRpb24gPSAiaG9yaXpvbnRhbCIsCmdyYXZpdHkgPSAiY2VudGVyIiwKb3JpZW50YXRpb249J3ZlcnRpY2FsJywKcGFkZGluZz17JzRkcCcsJzBkcCcsJzBkcCcsJzBkcCd9LAp9CmxvY2FsIGxheW91dG09ewpMaW5lYXJMYXlvdXQsCmlkID0gImxheW91dG0iLi5pLApwYWRkaW5nPSc0ZHAnLApsYXlvdXRfd2lkdGggPSAibWF0Y2hfcGFyZW50IiwKb3JpZW50YXRpb24gPSAidmVydGljYWwiLApncmF2aXR5ID0gImNlbnRlcl9ob3Jpem9udGFsIiwKfQoKZm9yIGogPSAxLOWIhuWMuumhteaVsFtpXSBkbwpqbWJnW2ldW2pdPXsKZ2V0VmVydGljYWxCRyh7IDB4MDAwMDAwMDAsMHgwMDAwMDAwMCB9LCAxNSwyLDB4ZmZhMmQ0YzYpLApnZXRDb3JuZXIoezB4ZmZhMmQ0YzYsMHhmZmEyZDRjNn0sMjAsMCwweGZmMDAwMDAwLDIwLDEwLDEwLDEwKSwKfQpjZWJpYW5bI2NlYmlhbisxXSA9CnsKVGV4dFZpZXcsCmxheW91dF9tYXJnaW49JzZkcCcsCmlkID0gImptIi4uaS4uaiwKYmFja2dyb3VuZD1qbWJnW2ldW2pdWzFdLAp0ZXh0ID0gc3ZpZXdbaV1bal1bJ+WIhuWMuuWQjeWtlyddLApncmF2aXR5ID0gImNlbnRlciIsCnRleHRTaXplID0gIjEyc3AiLAp0ZXh0Q29sb3IgPSAiMHhmZjAwMDAwMCIsCmxheW91dF9oZWlnaHQgPSAiMjVkcCIsCmxheW91dF93aWR0aCA9ICI2MGRwIiwKb25DbGljaz1mdW5jdGlvbigpY2hhbmdhbi5jb250cm9sRmxpcChfRU5WWyJqbSIuLmkuLmpdICwgNjAwICkKCiDliIbljLooaikgZW5kCgp9CmxvY2FsIG1lbnVsYXlvdXQ9ewpMaW5lYXJMYXlvdXQsCmxheW91dF93aWR0aD0nbWF0Y2hfcGFyZW50JywKbGF5b3V0X2hlaWdodD0nd3JhcF9jb250ZW50JywKdmlzaWJpbGl0eSA9ICJnb25lIiwKb3JpZW50YXRpb24gPSAidmVydGljYWwiLAppZD0nbWVudScuLmkuLmosCgp9CmZvciBrLHYgaW4gcGFpcnMoc3ZpZXdbaV1bal1bJ+WKn+iDvemFjee9riddKSBkbwp0YWJsZS5pbnNlcnQobWVudWxheW91dCx2KQplbmQKbG9jYWwgbWVudWxheW91dD1sdWFqYXZhLmxvYWRsYXlvdXQobWVudWxheW91dCkK5Yqf6IO95Yy6W2ldW2pdPW1lbnVsYXlvdXQKdGFibGUuaW5zZXJ0KGxheW91dG0sbWVudWxheW91dCkKZW5kCuS+p+i+uVtpXSA9IGx1YWphdmEubG9hZGxheW91dCgKewpMaW5lYXJMYXlvdXQsCmxheW91dF9oZWlnaHQgPSAid3JhcF9jb250ZW50IiwKbGF5b3V0X3dpZHRoID0gIndyYXBfY29udGVudCIsCgpvcmllbnRhdGlvbj0ndmVydGljYWwnLApsYXlvdXRfbWFyZ2luTGVmdD0nOGRwJywKbGF5b3V0X21hcmdpblJpZ2h0PSdkcCcsCmxheW91dF9tYXJnaW5Cb3R0b209JzhkcCcsCnsKCgoKU2Nyb2xsVmlldywKCgpsYXlvdXRfaGVpZ2h0ID0gIm1hdGNoX3BhcmVudCIsCmxheW91dF93aWR0aCA9ICJ3cmFwX2NvbnRlbnQiLApjZWJpYW4KCn19KQp0YWJsZS5pbnNlcnQo5L6n6L65dWks5L6n6L65W2ldKQpsb2NhbCBtZW51cz17CkxpbmVhckxheW91dCwKbGF5b3V0X3dpZHRoID0gIjI3MGRwIiwKbGF5b3V0X2hlaWdodCA9ICIyMjBkcCIsCnZpc2liaWxpdHkgPSAiZ29uZSIsCm9yaWVudGF0aW9uID0gInZlcnRpY2FsIiwKaWQ9bHVhamF2YS5pZHNbJ21lbnVzJ10sCmJhY2tncm91bmQ96I+c5Y2V6IOM5pmvLAoKewpTY3JvbGxWaWV3LApmaWxsVmlld3BvcnQgPSAidHJ1ZSIsCi0tcGFkZGluZyA9ICIxMGRwIiwKZ3Jhdml0eSA9ICJjZW50ZXIiLApsYXlvdXRfd2lkdGggPSAibWF0Y2hfcGFyZW50IiwKbGF5b3V0X2hlaWdodCA9ICIyMjBkcCIsCm9yaWVudGF0aW9uID0gImhvcml6b250YWwiLApsYXlvdXRtCn19CgpfRU5WWyJsYXlvdXQiLi5pXSA9IGx1YWphdmEubG9hZGxheW91dChtZW51cykKZW5kCumhtui+uT17TGluZWFyTGF5b3V0LApsYXlvdXRfd2lkdGg9J21hdGNoX3BhcmVudCcsCmxheW91dF9oZWlnaHQ9J21hdGNoX3BhcmVudCcsCmxheW91dF9tYXJnaW5MZWZ0PScxMGRwJywKbGF5b3V0X21hcmdpblJpZ2h0ID0gIjYwZHAiLApvbkNsaWNrPWZ1bmN0aW9uKCkgZW5kLApvblRvdWNoPWhhbnNodSwK6aG26L65Cn0KY2tvdSA9IHsKTGluZWFyTGF5b3V0LApsYXlvdXRfd2lkdGggPSAid3JhcF9jb250ZW50IiwKbGF5b3V0X2hlaWdodCA9ICJ3cmFwX2NvbnRlbnQiLAoKCntTY3JvbGxWaWV3LApsYXlvdXRfbWFyZ2luTGVmdD0nOGRwJywKbGF5b3V0X2hlaWdodD0nMjIwZHAnLApsYXlvdXRfd2lkdGg9JzcwZHAnLApiYWNrZ3JvdW5kPeS+p+i+ueiDjOaZrywK5L6n6L65dWkKfQp9CmZvciBpID0gMSzoj5zljZXpobXmlbAgZG8KY2tvdVsjY2tvdSsxXSA9IF9FTlZbImxheW91dCIuLmldCmVuZApmdW5jdGlvbiB0b3BTZWxlY3QoKQpsb2NhbCBzZWxlY3RvciA9IGx1YWphdmEuZ2V0U3RhdGVMaXN0RHJhd2FibGUoKQpzZWxlY3RvcjphZGRTdGF0ZSh7CmFuZHJvaWQuUi5hdHRyLnN0YXRlX3ByZXNzZWQKfSwgZ2V0VmVydGljYWxCRyh7MHgyMjE2MTYxNiwweDIyMTYxNjE2fSwzMCkpCnNlbGVjdG9yOmFkZFN0YXRlKHsKLWFuZHJvaWQuUi5hdHRyLnN0YXRlX3ByZXNzZWQKfSwgZW1wdHkpCnJldHVybiBzZWxlY3RvcgplbmQKdG9wYmFyID0gbHVhamF2YS5sb2FkbGF5b3V0KHsKTGluZWFyTGF5b3V0LApsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIsCmxheW91dF9oZWlnaHQ9IjM1ZHAiLApsYXlvdXRfbWFyZ2luUmlnaHQgPSAiMTBkcCIsCmJhY2tncm91bmQ9Z2V0Q29ybmVyKHsweDAwMDAwMDAwLDB4MDAwMDAwMDB9LDE1LDAsMHhmZjIzMjMyMywyMCwyMCwwLDApLApvbkNsaWNrPWZ1bmN0aW9uKCkgZW5kLApvblRvdWNoPWhhbnNodSwKe0xpbmVhckxheW91dCwKbGF5b3V0X3dpZHRoPSIzNWRwIiwKbGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IiwKZ3Jhdml0eT0iY2VudGVyIiwKCnsKRnJhbWVMYXlvdXQsCmxheW91dF9ncmF2aXR5PSJsZWZ0fGNlbnRlciIsCmJhY2tncm91bmQ9Z2V0VmVydGljYWxCRyh7MHhmZkU2RTZFNiwweGZmRTZFNkU2fSw5MCksCmxheW91dF93aWR0aCA9ICIyMGRwIiwKbGF5b3V0X2hlaWdodCA9ICIyMGRwIiwKbGF5b3V0X21hcmdpbkxlZnQgPSAiNWRwIiwKb25DbGljayA9IOmakOiXjywKb25Ub3VjaCA9IGhhbnNodSwKe0xpbmVhckxheW91dCwKICBsYXlvdXRfaGVpZ2h0PSIyZHAiLAogIGxheW91dF93aWR0aD0iMTBkcCIsCiAgbGF5b3V0X2dyYXZpdHk9ImNlbnRlciIsCiAgYmFja2dyb3VuZD1nZXRWZXJ0aWNhbEJHKHsweGZmMmMyYzJjLDB4ZmYyYzJjMmN9LDQ1KSwKfQp9Cn0sCgp7TGluZWFyTGF5b3V0LApsYXlvdXRfd2lkdGg9IjBkcCIsCmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIsCmdyYXZpdHk9ImNlbnRlciIsCnsKTGluZWFyTGF5b3V0LAppZD0nY3Z2JywKbGF5b3V0X3dpZHRoPScwZHAnLApsYXlvdXRfaGVpZ2h0PSdtYXRjaF9wYXJlbnQnLApncmF2aXR5PSJjZW50ZXIiLAoKCn0KfQp9KQpja291ID0gbHVhamF2YS5sb2FkbGF5b3V0KGNrb3UpCmZsb2F0V2luZG93ID0gewpGcmFtZUxheW91dCwKaWQgPSAibW90aW9uIiwKZWxldmF0aW9uID0gIjEwZHAiLApvblRvdWNoID0gaGFuc2h1LApvbkNsaWNrID0gZnVuY3Rpb24oKSBlbmQsCmxheW91dF93aWR0aCA9ICJ3cmFwX2NvbnRlbnQiLApvcmllbnRhdGlvbiA9ICJ2ZXJ0aWNhbCIsCmdyYXZpdHkgPSAiY2VudGVyX3ZlcnRpY2FsIiwKbGF5b3V0X2hlaWdodCA9ICJ3cmFwX2NvbnRlbnQiLAp7TGluZWFyTGF5b3V0LApvcmllbnRhdGlvbj0ndmVydGljYWwnLAppZD0nY2h1YW5naycsCnZpc2liaWxpdHk9J2dvbmUnLAoKey0t6aG26YOo5qCPCkZyYW1lTGF5b3V0LApvcmllbnRhdGlvbiA9ICJob3Jpem9udGFsIiwKcGFkZGluZyA9ICIyZHAiLApsYXlvdXRfaGVpZ2h0PSczNWRwJywKbGF5b3V0X3dpZHRoPSIzMzVkcCIsCmJhY2tncm91bmQ9Z2V0Q29ybmVyKHsweDAwMDAwMDAwLDB4MDAwMDAwMDB9LDIwLDAsMHhmZkZGRTU0MywyNSwyNSwyNSwyNSksCnRvcGJhciwKewpGcmFtZUxheW91dCwKbGF5b3V0X2dyYXZpdHk9InJpZ2h0fGNlbnRlciIsCgpsYXlvdXRfd2lkdGggPSAiMjBkcCIsCmxheW91dF9oZWlnaHQgPSAiMjBkcCIsCmxheW91dF9tYXJnaW5MZWZ0ID0gIjVkcCIsCm9uQ2xpY2sgPSDpmpDol48sCm9uVG91Y2ggPSBoYW5zaHUsCntJbWFnZVZpZXcsCnBhZGRpbmcgPSAiNWRwIiwKbGF5b3V0X2dyYXZpdHk9ImNlbnRlciIsCnNyYyA9IGdldFJlcygiaGVpeCIpLApiYWNrZ3JvdW5kID0gZ2V0VmVydGljYWxCRyh7IDB4ZmZFNkU2RTYsIDB4ZmZFNkU2RTYgfSwgOTApLApsYXlvdXRfd2lkdGggPSAiMjBkcCIsCmxheW91dF9oZWlnaHQgPSAiMjBkcCIsCmxheW91dF9tYXJnaW5SaWdodCA9ICI1ZHAiLApsYXlvdXRfbWFyZ2luTGVmdCA9ICI1ZHAiLApvbkNsaWNrID0g6ZqQ6JePLApvblRvdWNoID0gaGFuc2h1LAp9Cn0KfSwKCmNrb3UsCnsKRnJhbWVMYXlvdXQsCm9yaWVudGF0aW9uID0gImhvcml6b250YWwiLApwYWRkaW5nID0gIjJkcCIsCmxheW91dF9oZWlnaHQ9JzQ1ZHAnLApsYXlvdXRfd2lkdGg9ImZpbGxfcGFyZW50IiwKYmFja2dyb3VuZD1nZXRDb3JuZXIoezB4MDAwMDAwMDAsMHgwMDAwMDAwMH0sNDUsMCwweGZmRkZFNTQzLDI1LDI1LDI1LDI1KSwK6aG26L65LAp9LAp9LAp7CkZyYW1lTGF5b3V0LAppZCA9ICJkcHJ3IiwKbGF5b3V0X3dpZHRoID0gIjM1MGRwIiwKbGF5b3V0X2hlaWdodCA9ICIzMDBkcCIsCmdyYXZpdHkgPSAiY2VudGVyIiwKewpJbWFnZVZpZXcsCmxheW91dF9ncmF2aXR5ID0gInJpZ2h0fGJvdHRvbSIsCmxheW91dF93aWR0aCA9ICI2MGRwIiwKbGF5b3V0X2hlaWdodCA9ICI2MGRwIiwKc3JjPeiOt+WPluWbvueJhyjlupXpg6jkurrniakpLAp9Cn0sCnsKICAgIEZyYW1lTGF5b3V0LAogICAgaWQgPSAibGluZ2RvbmdkYW9kYiIsCiAgICBsYXlvdXRfd2lkdGggPSAiMzUwZHAiLAogICAgbGF5b3V0X2hlaWdodCA9ICIzMDBkcCIsCiAgICBvcmllbnRhdGlvbiA9ICJ2ZXJ0aWNhbCIsCiAgICB7TGluZWFyTGF5b3V0LAogICAgICBsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIsCiAgICAgIGxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIsCiAgICAgIGdyYXZpdHk9ImNlbnRlciIsCiAgICAgIGlkPSJsZGRkYiIsCiAgICAgIHtMaW5lYXJMYXlvdXQsCiAgICAgICAgbGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IiwKICAgICAgICBsYXlvdXRfd2lkdGg9IndyYXBfY29uY2VydCIsICAgICAgICAKICAgICAgICBncmF2aXR5PSJ0b3AiLAogICAgICAgIHBhZGRpbmcgPSAiN2RwIiwKICAgICAgICBsYXlvdXRfZ3Jhdml0eSA9ICJjZW50ZXJ8dG9wIiwKICAgICAgICBvblRvdWNoPWhhbnNodSwKICAgICAgICB7TGluZWFyTGF5b3V0LAoJY2hhbmdhbi5sZGRMc2xhbmQyKHvngbXliqjlspvmlofmnKwsCgktLWNoYW5nYW4udGV4dCgiICAiLi7pobnnm67lkI3np7AsIjB4ZmZmZmZmZmYiLCIxM3NwIix0cnVlKSwKCXtGcmFtZUxheW91dCwKICAgIGxheW91dF93aWR0aCA9ICJtYXRjaF9wYXJlbnQiLAogICAgbGF5b3V0X2hlaWdodCA9ICIxMjVkcCIsCiAgICBsYXlvdXRfbWFyZ2luUmlnaHQgPSAiNGRwIiwKCSAgbGF5b3V0X21hcmdpbkxlZnQgPSAiNGRwIiwKCQl7TGluZWFyTGF5b3V0LAoJCWxheW91dF9ncmF2aXR5PSJ0b3B8Y2VudGVyIiwKCQlsYXlvdXRfbWFyZ2luVG9wPSIxMGRwIiwKCQlsYXlvdXRfbWFyZ2luQnV0dG9uPSIxMGRwIiwKCQkJb3JpZW50YXRpb249InZlcnRpY2FsIiwKCXsKCQlUZXh0VmlldyAsIAoJCSBpZD0idGltZV9NVVNJQyIsCgkJdGV4dCA9IuWkqeWkqeW8gOW/gyIsCgkJCgkJdGV4dFNpemUgPSAiMTFzcCIgLAoJCWxheW91dF9ncmF2aXR5ID0gImNlbnRlcnx0b3AiLAoJCXRleHRDb2xvciA9IiNmZmZmZmYiLAoJfSwKCXsKCQkKCVRleHRWaWV3ICwgCgkJCgkJdGV4dCA9Iuavj+aXpeS4gOiogDoiLAoJCWxheW91dF93aWR0aCA9ICIxODBkcCIsCgkJdGV4dFNpemUgPSAiMThzcCIgLAoJCWxheW91dF9ncmF2aXR5ID0gImxlZnR8dG9wIiwKCQl0ZXh0Q29sb3IgPSIweGZmNjc1MGE0IiwKCQlsYXlvdXRfbWFyZ2luQnV0dG9uPSI0ZHAiLAoJfSx7CgkJCgkJVGV4dFZpZXcgLCAKCQkKCQl0ZXh0ID1UZXh0UmFuZCgpLAoJCWxheW91dF93aWR0aCA9ICIxODBkcCIsCgkJdGV4dFNpemUgPSAiMTVzcCIgLAoJCWxheW91dF9ncmF2aXR5ID0gImxlZnR8dG9wIiwKCQl0ZXh0Q29sb3IgPSIweGZmNjc1MGE0IiwKCQlsYXlvdXRfbWFyZ2luQnV0dG9uPSI0ZHAiLAoJCX0sewoJCUxpbmVhckxheW91dCwKCQlsYXlvdXRfZ3Jhdml0eT0iY2VudGVyIiwKCQkKY2hhbmdhbi5jaGlwKHsKCQkJCQkJIHsKCQkJCQkJCSJR576kIiwKCQkJCQkJCWZ1bmN0aW9uKCkKCQkJCQkJCQlnZy5hbGVydCgiUVHnvqTogYo6Ii4ucXVuKQoJCQkJCQkJZW5kLAoJCQkJCQkJZnVuY3Rpb24oKQoJCQkJCQkJCWdnLmFsZXJ0KCJRUee+pOiBijoiLi5xdW4pCgkJCQkJCQllbmQKCQkJCQkJfSwgewoJCQkJCQkJIlRHIiwKCQkJCQkJCWZ1bmN0aW9uKCkKCQkJCQkJCQlnZy5hbGVydCgiVEfpopHpgZM6Ii4udGcpCgkJCQkJCQllbmQsCgkJCQkJCQlmdW5jdGlvbigpCgkJCQkJCQkJZ2cuYWxlcnQoIlRH6aKR6YGTOiIuLnRnKQoJCQkJCQkJZW5kCgkJCQkJCX0sCgkJCQkJfSksCgoJfSx9LAoKCSAgCgkgIH0sCgl9KSwKICAgICAgICAgIAogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIH0sCnsKSW1hZ2VWaWV3LAppZCA9ICJjb250cm9sIiwKYmFja2dyb3VuZCA9IOiOt+WPluWbvueJhyjmgqzmta7nqpflm77moIcpLApsYXlvdXRfd2lkdGggPSAiNDBkcCIsCmxheW91dF9oZWlnaHQgPSAiNDBkcCIsCm9uVG91Y2ggPSBoYW5zaHUsCm9uQ2xpY2sgPSDpmpDol48sCn0KfQoKCmxvY2FsIGZ1bmN0aW9uIGludm9rZSgpCmxvY2FsIG9rCmxvY2FsIFJhd1gsIFJhd1ksIHgsIHkKbWFpbkxheW91dFBhcmFtcyA9IGdldExheW91dFBhcmFtcygpCmZsb2F0V2luZG93ID0gbHVhamF2YS5sb2FkbGF5b3V0KGZsb2F0V2luZG93KQpsb2NhbCBmdW5jdGlvbiBpbnZva2UyKCkKCndpbmRvdzphZGRWaWV3KGZsb2F0V2luZG93LCBtYWluTGF5b3V0UGFyYW1zKQoKYmxvY2soJ2VuZCcpCmVuZApmb3IgaT0xLCNNU3dpdGNoIGRvClN3aXRjaENvbG9yKGx1YWphdmEuZ2V0SWRWaWV3KE1Td2l0Y2hbaV0pLDB4ZmYwMDAwMDAsCjB4MjhGRkZGRkYsIC0t6L2o6YGTKOW8gCzlhbMpCjB4RkZGRkZGRkYsCjB4ODg4ODg4ODgtLea3seiTneiJsgopCmVuZAoKbG9jYWwgcnVubmFibGUgPSBsdWFqYXZhLmdldFJ1bm5hYmxlKGludm9rZTIpCmxvY2FsIGhhbmRsZXIgPSBsdWFqYXZhLmdldEhhbmRsZXIoKQpoYW5kbGVyOnBvc3QocnVubmFibGUpCmJsb2NrKCdqb2luJykKCmxvY2FsIGlzTW92ZQoKCmVuZAoKaW52b2tlKHN3aWIxLHN3aWIyKQppZiBmZnVpfj1uaWwgdGhlbiBmZnVpKCkgZW5kCuWIh+aNoigxKSDliIbljLooMSkK6ZqQ6JePKCkKZ2cuc2V0VmlzaWJsZShmYWxzZSkKbHVhamF2YS5zZXRGbG9hdGluZ1dpbmRvd0hpZGUodHJ1ZSkKcWhrYWkgPSAwCnFpZWh1YW4gPSBmdW5jdGlvbigpCmlmIHFoa2FpID09IDAgdGhlbgpxaGthaSA9IDEKZHJhdy5yZW1vdmUoKQpsdWFqYXZhLnJ1blVpVGhyZWFkKGZ1bmN0aW9uKCkKZm9yIGssdiBpbiBwYWlycyhmbG9hdHRhYmxlKSBkbwppZiB2PT0xIHRoZW4KY2hhbmdhbi5jb250cm9sU21hbGwoX0VOVltrXSw0MDApCmVuZAplbmQKY2hhbmdhbi5jb250cm9sU21hbGwoZmxvYXRXaW5kb3csNDAwKQplbmQpCmdnLnNsZWVwKDQwMCkKbHVhamF2YS5ydW5VaVRocmVhZChmdW5jdGlvbigpCmZsb2F0V2luZG93OnNldFZpc2liaWxpdHkoVmlldy5HT05FKQpmb3Igayx2IGluIHBhaXJzKGZsb2F0dGFibGUpIGRvCmlmIHY9PTEgdGhlbgpfRU5WW2tdOnNldFZpc2liaWxpdHkoVmlldy5HT05FKQplbmQKZW5kCmVuZCkKZWxzZQpxaGthaSA9IDAKaHVpeigpCmRyYXcudGV4dCgnLicsIC05MjAwLC05MjAwKQpsdWFqYXZhLnJ1blVpVGhyZWFkKGZ1bmN0aW9uKCkKZmxvYXRXaW5kb3c6c2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpCmNoYW5nYW4uY29udHJvbEJpZyhmbG9hdFdpbmRvdyw0MDApCmZvciBrLHYgaW4gcGFpcnMoZmxvYXR0YWJsZSkgZG8KaWYgdj09MSB0aGVuCmNoYW5nYW4uY29udHJvbEJpZyhfRU5WW2tdLDQwMCkKX0VOVltrXTpzZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSkKZW5kCmVuZAplbmQpCgplbmQKZW5kCgpodWl6KCkKZHJhdy50ZXh0KCcuJywgLTkyMDAsLTkyMDApCndoaWxlIHRydWUgZG8KaWYgdHVpY2h1PT0xIHRoZW4gYnJlYWsgZW5kCmlmIOmfs+mHj+mUriB0aGVuCmppYW50aW5nMyhxaWVodWFuKQpnZy5zbGVlcCgxMzApCmVuZAplbmQKbHVhamF2YS5zZXRGbG9hdGluZ1dpbmRvd0hpZGUoZmFsc2UpCgpsdWFqYXZhLnNldEZsb2F0aW5nV2luZG93SGlkZShmYWxzZSkKZW5kLS0tbWVudQppbXBvcnQnYW5kcm9pZC5oYXJkd2FyZS4qJzsKLS0tQHR5cGUgYW5kcm9pZC5oYXJkd2FyZS5TZW5zb3JFdmVudExpc3RlbmVyCmxvY2FsIHNlbnNvciA9IGx1YWphdmEuY3JlYXRlUHJveHkoJ2FuZHJvaWQuaGFyZHdhcmUuU2Vuc29yRXZlbnRMaXN0ZW5lcicsIHsKb25TZW5zb3JDaGFuZ2VkID0gZnVuY3Rpb25zLmRlYm91bmNlKGZ1bmN0aW9uKCkKaWYg5pGH5LiA5pGHPT1mYWxzZSB0aGVuIHJldHVybiAwIGVuZAppZiBxaGthaX49MCB0aGVuCnFoa2FpPTAKbHVhamF2YS5ydW5VaVRocmVhZChmdW5jdGlvbigpCmZsb2F0V2luZG93OnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKQoKWW9Zb0ltcGw6d2l0aCgiRmFkZUluIik6ZHVyYXRpb24oMzAwKTpwbGF5T24oZmxvYXRXaW5kb3cpCmVuZCkKZWxzZQpxaGthaT0xCmx1YWphdmEubmV3VGhyZWFkKGZ1bmN0aW9uKCkKbHVhamF2YS5ydW5VaVRocmVhZChmdW5jdGlvbigpCllvWW9JbXBsOndpdGgoIkZhZGVPdXQiKTpkdXJhdGlvbigzMDApOnBsYXlPbihmbG9hdFdpbmRvdykKZW5kKQpnZy5zbGVlcCg0MDApCmx1YWphdmEucnVuVWlUaHJlYWQoZnVuY3Rpb24oKQpmbG9hdFdpbmRvdzpzZXRWaXNpYmlsaXR5KFZpZXcuR09ORSkKZW5kKQpkcmF3LnJlbW92ZSgpCmdnLnRvYXN0KCLpmpDol48iKQplbmQpOnN0YXJ0KCkKCmVuZAplbmQsNTAwKQp9KQpkZXhsb2FkZXI9ZGV4LmxvYWRmaWxlKCcvc2RjYXJkL+mVv+WuiS/otYTmupAvY2xhc3NlczMuZGV4JykKTXlTZW5zb3JNYW5hZ2VyID0gZGV4bG9hZGVyOmxvYWRDbGFzcygneWFvY24ucmx5dW4ueWFveWl5YW8uTXlTZW5zb3JNYW5hZ2VyJykKbHVhamF2YS5ydW5PblVpVGhyZWFkKGZ1bmN0aW9uKCkKTXlTZW5zb3JNYW5hZ2VyKGNvbnRleHQsIHNlbnNvcikKZW5kKQrmkYfkuIDmkYc9dHJ1ZQpjaGFuZ2FuLmNvbnRyb2xSb3RhdGlvbjkgPSBmdW5jdGlvbihjb250cm9sLCB0aW1lLHQpCmx1YWphdmEucnVuVWlUaHJlYWQoZnVuY3Rpb24oKQppbXBvcnQgImFuZHJvaWQudmlldy5hbmltYXRpb24uQW5pbWF0aW9uIgppbXBvcnQgImFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIgp4dWFuemh1YW5kb25naHVhID0gT2JqZWN0QW5pbWF0b3I6b2ZGbG9hdChjb250cm9sLCAicm90YXRpb24iLCB7CnRpbWUsdAp9KQp4dWFuemh1YW5kb25naHVhOnNldFJlcGVhdENvdW50KDApCnh1YW56aHVhbmRvbmdodWE6c2V0UmVwZWF0TW9kZShBbmltYXRpb24uUkVTVEFSVCkKeHVhbnpodWFuZG9uZ2h1YTpzZXREdXJhdGlvbig0MDApCnh1YW56aHVhbmRvbmdodWE6c3RhcnQoKQplbmQpCmVuZApuYW1lbGlzdCA9IHt9CnBhcmFtMSA9IHt9CmZsb2F0dGFibGUgPSB7fQpmdW5jdGlvbiDmiZPlvIDpobXpnaIobmFtZSkKaWYgX0VOVlsnZmVueWUnLi5uYW1lXT09bmlsIHRoZW4gZ2cuYWxlcnQobmFtZS4uJ+mhtemdouacquWIm+W7uicpIHJldHVybiAwIGVuZAppZiBmbG9hdHRhYmxlWydmZW55ZScuLm5hbWVdPT0xIHRoZW4g5YWz6Zet6aG16Z2iKG5hbWUpIHJldHVybiBlbmQKZmxvYXR0YWJsZVsnZmVueWUnLi5uYW1lXT0xCndpbmRvdyA9IGNvbnRleHQ6Z2V0U3lzdGVtU2VydmljZSgid2luZG93IikgLS0g6I635Y+W56qX5Y+j566h55CG5ZmoCmxvY2FsIGZ1bmN0aW9uIGludm9rZShuYW1lLGZ1bmMxLGZ1bmMyKQpsb2NhbCBmdW5jdGlvbiBpbnZva2UyKCkKd2luZG93OmFkZFZpZXcoX0VOVlsnZmVueWUnLi5uYW1lXSwgcGFyYW0xW25hbWVdKQplbmQKCmxvY2FsIHJ1bm5hYmxlID0gbHVhamF2YS5nZXRSdW5uYWJsZShpbnZva2UyKQpsb2NhbCBoYW5kbGVyID0gbHVhamF2YS5nZXRIYW5kbGVyKCkKaGFuZGxlcjpwb3N0KHJ1bm5hYmxlKQoKZW5kCgppbnZva2UobmFtZSxmdW5jMSxmdW5jMikKZW5kCgpmdW5jdGlvbiDlhbPpl63pobXpnaIobmFtZSkKaWYgX0VOVlsnZmVueWUnLi5uYW1lXT09bmlsIHRoZW4gZ2cuYWxlcnQobmFtZS4uJ+mhtemdouacquWIm+W7uicpIHJldHVybiAwIGVuZAppZiBmbG9hdHRhYmxlWydmZW55ZScuLm5hbWVdPT0wIHRoZW4gcmV0dXJuIDAgZW5kCmZsb2F0dGFibGVbJ2ZlbnllJy4ubmFtZV09MApsb2NhbCBmdW5jdGlvbiBpbnZva2UyKCkKd2luZG93OnJlbW92ZVZpZXcoX0VOVlsnZmVueWUnLi5uYW1lXSkKZW5kCmxvY2FsIHJ1bm5hYmxlID0gbHVhamF2YS5nZXRSdW5uYWJsZShpbnZva2UyKQpsb2NhbCBoYW5kbGVyID0gbHVhamF2YS5nZXRIYW5kbGVyKCkKaGFuZGxlcjpwb3N0KHJ1bm5hYmxlKQplbmQKCgpmdW5jdGlvbiDliJvlu7rpobXpnaIobmFtZSx2cykKaWYgdHlwZSh2cyl+PSd0YWJsZScgdGhlbiBnZy5hbGVydChuYW1lLi4n5Yib5bu66aG16Z2i5qC85byP6ZSZ6K+vJykgb3MuZXhpdCgpIGVuZApsb2NhbCB0bXA9e0xpbmVhckxheW91dCwKbGF5b3V0X3dpZHRoPSdtYXRjaF9wYXJlbnQnLApvcmllbnRhdGlvbj0ndmVydGljYWwnCn0KZm9yIGk9MSwjdnMgZG8KdGFibGUuaW5zZXJ0KHRtcCx2c1tpXSkKZW5kCnBhcmFtMVtuYW1lXSA9IGdldExheW91dFBhcmFtczIoKQpfRU5WWydmZW55ZScuLm5hbWVdID0gbHVhamF2YS5sb2FkbGF5b3V0KAp7CkxpbmVhckxheW91dCwKbGF5b3V0X3dpZHRoID0gIndyYXBfY29udGVudCIsCmxheW91dF9oZWlnaHQgPSAid3JhcF9jb250ZW50IiwKb3JpZW50YXRpb249J3ZlcnRpY2FsJywKZ3Jhdml0eT0nY2VudGVyX2hvcml6b250YWwnLApiYWNrZ3JvdW5kPWx1YWphdmEubG9hZGxheW91dCh7CkdyYWRpZW50RHJhd2FibGUgLApjb2xvciA9ICIweGZmZWVlZWVlIiAsCmNvcm5lclJhZGl1cyA9IDE1Cn0gKSwKcGFkZGluZz17JzEwZHAnLCc1ZHAnLCcxMGRwJywnNWRwJ30sCnsKVGV4dFZpZXcsCnRleHRDb2xvcj0nMHhmZjAwMDAwMCcsCnRleHQgPSBuYW1lLAp0ZXh0U2l6ZT0nMTRzcCcsCmdyYXZpdHkgPSAiY2VudGVyIiwKbGF5b3V0X3dpZHRoID0gIjcwZHAiLApsYXlvdXRfaGVpZ2h0ID0gIndyYXBfY29udGVudCIsCgpvbkNsaWNrPWZ1bmN0aW9uKCkKbG9jYWwgdmlzPWx1YWphdmEuZ2V0SWRWaWV3KG5hbWUpCmlmIHZpczpnZXRWaXNpYmlsaXR5KCk9PTguMCB0aGVuCmNoYW5nYW4uY29udHJvbEJpZyh2aXMsNDAwKQp2aXM6c2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpCmVsc2UKY2hhbmdhbi5jb250cm9sU21hbGwodmlzLDQwMCkKdmlzOnNldFZpc2liaWxpdHkoVmlldy5HT05FKQplbmQKZW5kLApvblRvdWNoPWZ1bmN0aW9uKHYsIGV2ZW50KQpsb2NhbCBBY3Rpb24gPSBldmVudDpnZXRBY3Rpb24oKQppZiBBY3Rpb24gPT0gTW90aW9uRXZlbnQuQUNUSU9OX0RPV04gdGhlbgppc01vdmUgPSBmYWxzZQpSYXdYID0gZXZlbnQ6Z2V0UmF3WCgpClJhd1kgPSBldmVudDpnZXRSYXdZKCkKeCA9IHBhcmFtMVtuYW1lXS54CnkgPSBwYXJhbTFbbmFtZV0ueQplbHNlaWYgQWN0aW9uID09IE1vdGlvbkV2ZW50LkFDVElPTl9NT1ZFIHRoZW4KaXNNb3ZlID0gdHJ1ZQpwYXJhbTFbbmFtZV0ueCA9IHRvbnVtYmVyKHgpICsgKGV2ZW50OmdldFJhd1goKSAtIFJhd1gpCnBhcmFtMVtuYW1lXS55ID0gdG9udW1iZXIoeSkgKyAoZXZlbnQ6Z2V0UmF3WSgpIC0gUmF3WSkKd2luZG93OnVwZGF0ZVZpZXdMYXlvdXQoX0VOVlsnZmVueWUnLi5uYW1lXSwgcGFyYW0xW25hbWVdKQplbmQKZW5kLAp9LAp7U2Nyb2xsVmlldywKdmlzaWJpbGl0eT0nZ29uZScsCmlkPWx1YWphdmEubmV3SWQobmFtZSksCmxheW91dF93aWR0aD0nMTIwZHAnLApsYXlvdXRfaGVpZ2h0PScyNTBkcCcsCnRtcAp9Cn0pCmlmIHR5cGUoX0VOVlsnZmVueWUnLi5uYW1lXSl+PSd1c2VyZGF0YScgdGhlbiBnZy5hbGVydChuYW1lLi4n55Sf5oiQ5aSx6LSlJykgb3MuZXhpdCgpIGVuZAplbmQKcGFyYW10ID0ge30KdGl0bGV0YWJsZSA9IHt9CmNvcmIgPSB0cnVlCmZ1bmN0aW9uIGdldExheW91dFBhcmFtczIoKQpsb2NhbCBwcm0gPSBsdWFqYXZhLm5ldyhXaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtcykKCmxheW91dFBhcmFtczEgPSBwcm0KaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSAyNikgdGhlbiAtLSDorr7nva7mgqzmta7nqpfmlrnlvI8KbGF5b3V0UGFyYW1zMS50eXBlID0gcHJtLlRZUEVfQVBQTElDQVRJT05fT1ZFUkxBWQplbHNlCmxheW91dFBhcmFtczEudHlwZSA9IHBybS5UWVBFX1BIT05FCmVuZApsYXlvdXRQYXJhbXMxLmZvcm1hdCA9IFBpeGVsRm9ybWF0LlJHQkFfODg4OCAtLSDorr7nva7og4zmma8KbGF5b3V0UGFyYW1zMS5mbGFncyA9IHBybS5GTEFHX05PVF9GT0NVU0FCTEUgLS0g54Sm54K56K6+572uRmluaXNoCmxheW91dFBhcmFtczEuZ3Jhdml0eSA9IEdyYXZpdHkuQ0VOVEVSIC0tIOmHjeWKm+iuvue9rgpsYXlvdXRQYXJhbXMxLndpZHRoID0gcHJtLldSQVBfQ09OVEVOVCAtLSDluIPlsYDlrr3luqYKbGF5b3V0UGFyYW1zMS5oZWlnaHQgPSBwcm0uV1JBUF9DT05URU5UIC0tIOW4g+WxgOmrmOW6pgpyZXR1cm4gbGF5b3V0UGFyYW1zMQplbmQKCmZ1bmN0aW9uIGdldGpiKCkKbG9jYWwgamlhbmJpYW5zID0gbHVhamF2YS5uZXcoR3JhZGllbnREcmF3YWJsZSkKamlhbmJpYW5zOnNldENvcm5lclJhZGl1cygxNSkKamlhbmJpYW5zOnNldEdyYWRpZW50VHlwZShHcmFkaWVudERyYXdhYmxlLkxJTkVBUl9HUkFESUVOVCkKamlhbmJpYW5zOnNldENvbG9ycyh7MHhmZjM5N0VGOCwweGZmMjVDNEZEfSkKamlhbmJpYW5zOnNldE9yaWVudGF0aW9uKEdyYWRpZW50RHJhd2FibGUuT3JpZW50YXRpb24uTEVGVF9SSUdIVCkKcmV0dXJuIGppYW5iaWFucwplbmQKCmZ1bmN0aW9uIGdldGpiKCkKbG9jYWwgamlhbmJpYW5zID0gbHVhamF2YS5uZXcoR3JhZGllbnREcmF3YWJsZSkKamlhbmJpYW5zOnNldENvcm5lclJhZGl1cygxNSkKamlhbmJpYW5zOnNldEdyYWRpZW50VHlwZShHcmFkaWVudERyYXdhYmxlLkxJTkVBUl9HUkFESUVOVCkKamlhbmJpYW5zOnNldENvbG9ycyh7MHhmZjM5N0VGOCwweGZmMjVDNEZEfSkKamlhbmJpYW5zOnNldE9yaWVudGF0aW9uKEdyYWRpZW50RHJhd2FibGUuT3JpZW50YXRpb24uTEVGVF9SSUdIVCkKcmV0dXJuIGppYW5iaWFucwplbmQKdGpiMT1nZXRqYigpCnRqYjI9bHVhamF2YS5sb2FkbGF5b3V0IHsKR3JhZGllbnREcmF3YWJsZSwKY29sb3IgPSAiI2FhMDA4MkZGIiwKY29ybmVyUmFkaXVzID0gMTIKfQpmdW5jdGlvbiBjaGF0YmcoKQpsb2NhbCBqYj1nZXRWZXJ0aWNhbEJHKHsweGFhMTYxNjE2LDB4YWExNjE2MTZ9LDE3LDIsMHhmZmQ4ZDhkOCkKcmV0dXJuIGpiCmVuZApmdW5jdGlvbiBnZXRTaGFwZTMoKQpqaWFuYmlhbnMgPSBsdWFqYXZhLmxvYWRsYXlvdXQoewpHcmFkaWVudERyYXdhYmxlLAp0eXBlID0gImxpbmVhciIsCmFuZ2xlID0gIjEzNSIsCgp9KQpqaWFuYmlhbnM6c2V0Q29ybmVyUmFkaXVzKDIyKQpqaWFuYmlhbnM6c2V0T3JpZW50YXRpb24oR3JhZGllbnREcmF3YWJsZS5PcmllbnRhdGlvbi5UTF9CUikKamlhbmJpYW5zOnNldENvbG9ycyh7CjB4NTVmZmZmZmYsMHg1NWZmZmZmZgp9KQpqaWFuYmlhbnM6c2V0U3Ryb2tlKDUsMHhmZmZmZmZmZiktLei+ueahhuWuveW6puWSjOminOiJsgpyZXR1cm4gamlhbmJpYW5zCmVuZAoKZnVuY3Rpb24gY2hhdGJnMigpCmxvY2FsIHNlbGVjdG9yID0gbHVhamF2YS5nZXRTdGF0ZUxpc3REcmF3YWJsZSgpCnNlbGVjdG9yOmFkZFN0YXRlKHsKYW5kcm9pZC5SLmF0dHIuc3RhdGVfcHJlc3NlZAp9LCBsdWFqYXZhLmxvYWRsYXlvdXQgewpHcmFkaWVudERyYXdhYmxlLApjb2xvciA9ICIjYWEyRDhCRkYiLApjb3JuZXJSYWRpdXMgPSAxMgp9KSAtLSDngrnlh7vml7blgJnnmoTog4zmma8Kc2VsZWN0b3I6YWRkU3RhdGUoewotYW5kcm9pZC5SLmF0dHIuc3RhdGVfcHJlc3NlZAp9LCBnZXRqYigpKSAtLSDmsqHngrnlh7vnmoTog4zmma8KcmV0dXJuIHNlbGVjdG9yCmVuZAoKCmZ1bmN0aW9uIHZpc2kgKHRpZCAsIHR0aWQpCnZpYnJhOnZpYnJhdGUoNCkKbG9jYWwgdHZpZXcgPSBsdWFqYXZhLmdldElkVmFsdWUgKHRpZCkKbG9jYWwgdHR2aWV3ID0gbHVhamF2YS5nZXRJZFZhbHVlICh0dGlkKQppZiBub3QgdHZpZXcgdGhlbgpyZXR1cm4gMAplbmQKaWYgdG9udW1iZXIgKHRvc3RyaW5nICh0dmlldyA6IGdldFZpc2liaWxpdHkgKCkpKSA9PSA4LjAgdGhlbgoKWW9Zb0ltcGw6d2l0aCgiRmFkZUluIik6ZHVyYXRpb24oMjAwKTpwbGF5T24oYm94ZXNbdGlkXSkKY2hhbmdhbi5jb250cm9sUm90YXRpb245KGJveHBpY1t0aWRdLDkwLDApCmVsc2UKCgpjaGFuZ2FuLmNvbnRyb2xSb3RhdGlvbjkoYm94cGljW3RpZF0sMCw5MCkKZW5kCmVuZApmdW5jdGlvbiB2aXNpMiAodGlkICwgdHRpZCkKbG9jYWwgdHZpZXcgPSBsdWFqYXZhLmdldElkVmFsdWUgKHRpZCkKbG9jYWwgdHR2aWV3ID0gbHVhamF2YS5nZXRJZFZhbHVlICh0dGlkKQppZiBub3QgdHZpZXcgdGhlbgpyZXR1cm4gMAplbmQKaWYgdG9udW1iZXIgKHRvc3RyaW5nICh0dmlldyA6IGdldFZpc2liaWxpdHkgKCkpKSA9PSA4LjAgdGhlbgp0dmlldyA6IHNldFZpc2liaWxpdHkgKFZpZXcuVklTSUJMRSkKZWxzZQp0dmlldyA6IHNldFZpc2liaWxpdHkgKFZpZXcuR09ORSkKZW5kCmVuZApmdW5jdGlvbiBqeWJnKGNvbG9yLGppYW8pCnJldHVybiBsdWFqYXZhLmxvYWRsYXlvdXR7R3JhZGllbnREcmF3YWJsZSxjb2xvcj1jb2xvciwKY29ybmVyUmFkaXVzPWppYW99CmVuZApib3hlcyA9IHt9IGJveHBpYyA9IHt9CmZ1bmN0aW9uIGNoYW5nYW4uYm94ICh2aWV3cykKbG9jYWwgdGlkID0gImJveCIuLmd1aWQgKCkKYm94cGljW3RpZF0gPSBsdWFqYXZhLmxvYWRsYXlvdXQgewpJbWFnZVZpZXcgLApiYWNrZ3JvdW5kID0gZ2V0UmVzKCJyaWdodCIpLApsYXlvdXRfd2lkdGggPSAiMjRkcCIgLApsYXlvdXRfaGVpZ2h0ID0gIjI0ZHAiICwKfQpsb2NhbCB0dGlkID0gdGlkLi4iNiIKbG9jYWwgdDFpZCA9IGd1aWQgKCkKZmlyYWRpbyA9IHsKTGluZWFyTGF5b3V0ICwKbGF5b3V0X3dpZHRoID0gJ2ZpbGxfcGFyZW50JyAsCmxheW91dF9oZWlnaHQgPSAid3JhcF9jb250ZW50IiAsCmxheW91dF9tYXJnaW5Ub3AgPSAiNGRwIiAsCmxheW91dF9tYXJnaW5Cb3R0b20gPSAiM2RwIiAsCmdyYXZpdHkgPSAiY2VudGVyIiAsCmJhY2tncm91bmQ9bHVhamF2YS5sb2FkbGF5b3V0IHsKR3JhZGllbnREcmF3YWJsZSAsCmNvbG9yID0gMHhmZmZmZmZmZiAsCmNvcm5lclJhZGl1cyA9IDE1Cn0gLHBhZGRpbmcgPSB7CiIwZHAiLCIwZHAiLCI2ZHAiLCIwZHAiCn0sCm9yaWVudGF0aW9uID0gInZlcnRpY2FsIiAsCm9uVG91Y2ggPSBmdW5jdGlvbigpIHZpc2kyICh0aWQgLCB0dGlkKSB2aXNpKHRpZCx0dGlkKQplbmQsCkxheW91dFRyYW5zaXRpb249bGF5b3V0VHJhbnNpdGlvbiwKfQppZiB0eXBlICh2aWV3cyBbMV0pID09ICJzdHJpbmciIG9yIHR5cGUgKHZpZXdzIFsxXSkgPT0gIm51bWJlciIgdGhlbgpmaXJhZGlvIFsjIGZpcmFkaW8gKyAxXSA9IHsKTGluZWFyTGF5b3V0ICwKbGF5b3V0X3dpZHRoID0gJ2ZpbGxfcGFyZW50JyAsCmxheW91dF9oZWlnaHQgPSAiNDBkcCIgLApncmF2aXR5ID0gImNlbnRlcl92ZXJ0aWNhbCIgLApsYXlvdXRfbWFyZ2luVG9wID0gIjJkcCIgLApsYXlvdXRfbWFyZ2luTGVmdD0nMmRwJywKbGF5b3V0X21hcmdpblJpZ2h0PScyZHAnLAplbGV2YXRpb249JzJkcCcsCmxheW91dF9tYXJnaW5Cb3R0b20gPSAiMmRwIiAsCkxheW91dFRyYW5zaXRpb249bGF5b3V0VHJhbnNpdGlvbiwKb25DbGljayA9IGZ1bmN0aW9uICgpCnZpc2kyICh0aWQgLCB0dGlkKQp2aXNpICh0aWQgLCB0dGlkKQplbmQKLApiYWNrZ3JvdW5kID0gbHVhamF2YS5sb2FkbGF5b3V0IHsKR3JhZGllbnREcmF3YWJsZSAsCmNvbG9yID0gMHhmZmZmZmZmZiAsCmNvcm5lclJhZGl1cyA9IDE1Cn0gLHBhZGRpbmcgPSB7CiIwZHAiLCIwZHAiLCI2ZHAiLCIwZHAiCn0sCnsKVGV4dFZpZXcgLCB0ZXh0ID0gdmlld3MgWzFdICwKdGV4dFNpemUgPSAiMTNzcCIgLApsYXlvdXRfbWFyZ2luTGVmdCA9ICIxMGRwIiAsCmxheW91dF93aWR0aCA9ICJtYXRjaF9wYXJlbnQiICwKbGF5b3V0X3dlaWdodD0xLAp0ZXh0Q29sb3IgPSAiIzMzMzMzMyIgLApncmF2aXR5ID0gImxlZnQiICwKVHlwZWZhY2U9Zm9udCwKfSx7CkxpbmVhckxheW91dCAsCnBhZGRpbmc9eyIwZHAiLCIwZHAiLCIxMGRwIiwiMGRwIn0sCmxheW91dF93aWR0aCA9ICIzMGRwIiAsCmxheW91dF9oZWlnaHQgPSAiMzBkcCIgLApncmF2aXR5ID0gImNlbnRlciIsCmJveHBpY1t0aWRdLAp9Cn0gZWxzZQpnZy5hbGVydCAoImNoYW5nYW4uYm9455qEdGFibGXlhoXnrKzkuIDkuKrlhYPntKDlv4XpobvmmK9zdHJpbmciKSBvcy5leGl0ICgpCmVuZApyYWRpb3MgPSB7CkxpbmVhckxheW91dCAsCmxheW91dF9tYXJnaW5MZWZ0ID0gIjBkcCIgLApsYXlvdXRfbWFyZ2luUmlnaHQgPSAiMGRwIiAsCm9yaWVudGF0aW9uID0gInZlcnRpY2FsIiAsCnZpc2liaWxpdHkgPSAiZ29uZSIgLAppZCA9IGx1YWphdmEubmV3SWQgKHRpZCkgLApwYWRkaW5nID0gIjBkcCIgLApsYXlvdXRfd2lkdGggPSAnZmlsbF9wYXJlbnQnICwKTGF5b3V0VHJhbnNpdGlvbj1sYXlvdXRUcmFuc2l0aW9uLAp9CmZvciBpID0gMiAsICMgdmlld3MgZG8KcmFkaW9zIFsjIHJhZGlvcyArIDFdID0gdmlld3MgW2ldCmVuZApib3hlc1t0aWRdID0gbHVhamF2YS5sb2FkbGF5b3V0KHJhZGlvcykKZmlyYWRpbyBbIyBmaXJhZGlvICsgMV0gPSBib3hlc1t0aWRdCl9FTlYgW3QxaWRdID0gbHVhamF2YS5sb2FkbGF5b3V0IChmaXJhZGlvKQpyZXR1cm4gX0VOViBbdDFpZF0KZW5kCmNvcmJrID0gdHJ1ZQrlvZPliY11aSA9IDEKCmZ1bmN0aW9uIOWIhuWMuih4KQrlvZPliY3liIbljLpb5b2T5YmNdWldPXgKbHVhamF2YS5ydW5VaVRocmVhZChmdW5jdGlvbigpCmZvciBpPTEs5YiG5Yy66aG15pWwW+W9k+WJjXVpXSBkbwpfRU5WWydtZW51Jy4u5b2T5YmNdWkuLmldOnNldFZpc2liaWxpdHkoVmlldy5HT05FKQpfRU5WWydqbScuLuW9k+WJjXVpLi5pXTpzZXRUZXh0Q29sb3IoMHhmZjAwMDAwMCkKX0VOVlsnam0nLi7lvZPliY11aS4uaV06c2V0QmFja2dyb3VuZChqbWJnW+W9k+WJjXVpXVtpXVsxXSkKCmVuZApfRU5WWydtZW51Jy4u5b2T5YmNdWkuLuW9k+WJjeWIhuWMulvlvZPliY11aV1dOnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKQpfRU5WWydqbScuLuW9k+WJjXVpLi7lvZPliY3liIbljLpb5b2T5YmNdWldXTpzZXRUZXh0Q29sb3IoMHhmZmZmZmZmZikKX0VOVlsnam0nLi7lvZPliY11aS4u5b2T5YmN5YiG5Yy6W+W9k+WJjXVpXV06c2V0QmFja2dyb3VuZChnZXRWZXJ0aWNhbEJHKHsgMHhmZmEyZDRjNiwgMHhmZmEyZDRjNiB9LCAxNSkpCmNoYW5nYW4uY29udHJvbEJpZ1koX0VOVlsnam0nLi7lvZPliY11aS4u5b2T5YmN5YiG5Yy6W+W9k+WJjXVpXV0sNjAwKQplbmQpCmVuZApmdW5jdGlvbiDliIfmjaIoeCkK5b2T5YmNdWkgPSB4Cmx1YWphdmEucnVuVWlUaHJlYWQoZnVuY3Rpb24oKQppZiDlvZPliY3liIbljLpb5b2T5YmNdWldPT1uaWwgdGhlbgrliIbljLooMSkKZW5kCmZvciBpID0gMSzoj5zljZXpobXmlbAgZG8KX0VOVlsiZGluZyIuLmldOnNldFRleHRDb2xvcigweGZmMDAwMDAwKQpfRU5WWyJkaW5nIi4uaV06c2V0QmFja2dyb3VuZChnZXRWZXJ0aWNhbEJHKHsgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiB9LCAxNSkpCl9FTlZbJ2RpbmdiYXInLi5pXTpzZXRCYWNrZ3JvdW5kKGVtcHR5KQpfRU5WWyJsYXlvdXQiLi5pXTpzZXRWaXNpYmlsaXR5KFZpZXcuR09ORSkK5L6n6L65W2ldOnNldFZpc2liaWxpdHkoVmlldy5HT05FKQplbmQKX0VOVlsiZGluZyIuLuW9k+WJjXVpXTpzZXRUZXh0Q29sb3IoMHhmZmZmZmZmZikKX0VOVlsiZGluZyIuLuW9k+WJjXVpXTpzZXRCYWNrZ3JvdW5kKGdldFZlcnRpY2FsQkcoeyAweGZmYTJkNGM2LCAweGZmYTJkNGM2IH0sIDE1KSkKX0VOVlsibGF5b3V0Ii4u5b2T5YmNdWldOnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKQpfRU5WWydkaW5nYmFyJy4u5b2T5YmNdWldOnNldEJhY2tncm91bmQoZW1wdHkpCmNoYW5nYW4uY29udHJvbEJpZ1koX0VOVlsnZGluZ2JhcicuLuW9k+WJjXVpXSw2MDApCuS+p+i+uVvlvZPliY11aV06c2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpCmVuZCkKZW5kCuaYvuekuiA9IDAKYmVpajIgPSBsdWFqYXZhLmxvYWRsYXlvdXQoewpHcmFkaWVudERyYXdhYmxlLApjb2xvciA9ICIjMDAxRTFDMjciLApjb3JuZXJSYWRpdXMgPSAxMAp9KQpmdW5jdGlvbiBjaGFuZ2FuLnRleHQodHh0LGNvbG9yLHNpemUpCmlmIG5vdCB0eHQgdGhlbiB0eHQgPSAi5pyq6K6+572u5paH5a2XIiBlbmQKaWYgbm90IGNvbG9yIHRoZW4gY29sb3IgPSAiIzU0NTQ1NCIgZW5kCmlmIG5vdCBzaXplIHRoZW4gc2l6ZSA9ICIxMnNwIiBlbmQKcmV0dXJuIGx1YWphdmEubG9hZGxheW91dCgKewpUZXh0VmlldywKdGV4dCA9IHR4dCwKdGV4dFNpemUgPSBzaXplLAp0ZXh0Q29sb3IgPSBjb2xvciwKbGF5b3V0X3dpZHRoID0gIm1hdGNoX3BhcmVudCIsCnBhZGRpbmc9eycxMGRwJywnMGRwJywnMGRwJywnMGRwJ30KfSkKZW5kCgrmmL7npLogPSAwCmZ1bmN0aW9uIOmakOiXjygpCmFscmVhZHk9dHJ1ZQpsdWFqYXZhLnJ1blVpVGhyZWFkKGZ1bmN0aW9uKCkKaWYgdG9udW1iZXIodG9zdHJpbmcoY2h1YW5nazpnZXRWaXNpYmlsaXR5KCkpKSA9PSA4LjAgdGhlbgpjb250cm9sOnNldFZpc2liaWxpdHkoVmlldy5HT05FKQrmmL7npLogPSAxCmNodWFuZ2s6c2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpCgpfRU5WWyJsYXlvdXQiLi7lvZPliY11aV06c2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpCmRwcnc6c2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpCmxpbmdkb25nZGFvZGI6c2V0VmlzaWJpbGl0eShWaWV3LlZJU0lCTEUpCllvWW9JbXBsOndpdGgoIkZhZGVJbiIpOmR1cmF0aW9uKDUwMCk6cGxheU9uKGZsb2F0V2luZG93KQpmbG9hdFdpbmRvdzpzZXRCYWNrZ3JvdW5kKGJlaWopCm1haW5MYXlvdXRQYXJhbXMuZmxhZ3MgPSBMYXlvdXRQYXJhbXMuRkxBR19OT1RfVE9VQ0hfTU9EQUwKd2luZG93IDogdXBkYXRlVmlld0xheW91dCAoZmxvYXRXaW5kb3cgLCBtYWluTGF5b3V0UGFyYW1zKQplbHNlCuaYvuekuiA9IDAKbHVhamF2YS5zdGFydFRocmVhZChmdW5jdGlvbigpCmx1YWphdmEucnVuVWlUaHJlYWQoZnVuY3Rpb24oKQpZb1lvSW1wbDp3aXRoKCJGYWRlT3V0Iik6ZHVyYXRpb24oNTAwKTpwbGF5T24oZmxvYXRXaW5kb3cpCmVuZCkKZ2cuc2xlZXAoNTAwKQpsdWFqYXZhLnJ1blVpVGhyZWFkKGZ1bmN0aW9uKCkKCmNodWFuZ2s6c2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpCgpmbG9hdFdpbmRvdzpzZXRCYWNrZ3JvdW5kKGJlaWoyKQpjb250cm9sOnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKQpfRU5WWyJsYXlvdXQiLi7lvZPliY11aV06c2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpCmRwcnc6c2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpCmxpbmdkb25nZGFvZGI6c2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpCm1haW5MYXlvdXRQYXJhbXMuZmxhZ3MgPSBMYXlvdXRQYXJhbXMuRkxBR19OT1RfRk9DVVNBQkxFCndpbmRvdyA6IHVwZGF0ZVZpZXdMYXlvdXQgKGZsb2F0V2luZG93ICwgbWFpbkxheW91dFBhcmFtcykKWW9Zb0ltcGw6d2l0aCgiRmFkZUluIik6ZHVyYXRpb24oNDAwKTpwbGF5T24oZmxvYXRXaW5kb3cpCmVuZCkKZW5kKQplbmQKZW5kKQplbmQKaW1wb3J0KCJhbmRyb2lkLm1lZGlhLkF1ZGlvTWFuYWdlciIpCmF1ZGkgPSBjb250ZXh0OmdldFN5c3RlbVNlcnZpY2UoImF1ZGlvIikKYXVkaW90eXBlID0gewpBdWRpb01hbmFnZXIuU1RSRUFNX0FMQVJNLCAtLeaJi+acuumXuemTg+eahOWjsOmfswpBdWRpb01hbmFnZXIuU1RSRUFNX01VU0lDLCAtLeaJi+acuumfs+S5kOeahOWjsOmfswpBdWRpb01hbmFnZXIuU1RSRUFNX05PVElGSUNBVElPTiwgLS3ns7vnu5/mj5DnpLrnmoTpgJrnn6UKQXVkaW9NYW5hZ2VyLlNUUkVBTV9SSU5HLCAtLeeUteivnemTg+WjsOeahOWjsOmfswpBdWRpb01hbmFnZXIuU1RSRUFNX1NZU1RFTSwgLS3miYvmnLrns7vnu5/nmoTlo7Dpn7MKQXVkaW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxMLCAtLeivremfs+eUteivneeahOWjsOmfswpBdWRpb01hbmFnZXIuU1RSRUFNX0RUTUYsIC0tRFRNRumfs+iwg+eahOWjsOmfswp9CnlpbmwgPSB7fQpmb3IgaSA9IDEsI2F1ZGlvdHlwZSBkbwp5aW5sW2ldID0ge30KeWlubFtpXS50eXBlID0gYXVkaW90eXBlW2ldCnlpbmxbaV0ubWluID0gYXVkaTpnZXRTdHJlYW1NaW5Wb2x1bWUoYXVkaW90eXBlW2ldKQp5aW5sW2ldLm1heCA9IGF1ZGk6Z2V0U3RyZWFtTWF4Vm9sdW1lKGF1ZGlvdHlwZVtpXSkKeWlubFtpXS5ub3cgPSBhdWRpOmdldFN0cmVhbVZvbHVtZShhdWRpb3R5cGVbaV0pCmVuZApmdW5jdGlvbiBqaWFudGluZzIoKQp5aW5sbiA9IHt9CmZvciBpID0gMSwjYXVkaW90eXBlIGRvCnlpbmxuW2ldID0ge30KeWlubG5baV0udHlwZSA9IGF1ZGlvdHlwZVtpXQp5aW5sbltpXS5taW4gPSBhdWRpOmdldFN0cmVhbU1pblZvbHVtZShhdWRpb3R5cGVbaV0pCnlpbmxuW2ldLm1heCA9IGF1ZGk6Z2V0U3RyZWFtTWF4Vm9sdW1lKGF1ZGlvdHlwZVtpXSkKeWlubG5baV0ubm93ID0gYXVkaTpnZXRTdHJlYW1Wb2x1bWUoYXVkaW90eXBlW2ldKQoKaWYgeWlubG5baV0ubm93ID4geWlubFtpXS5ub3cgdGhlbgphdWRpOmFkanVzdFN0cmVhbVZvbHVtZSh5aW5sbltpXS50eXBlLEF1ZGlvTWFuYWdlci5BREpVU1RfTE9XRVIsMCkKZ2cuYWxlcnQoInVwIikKZWxzZWlmIHlpbmxuW2ldLm5vdyA8IHlpbmxbaV0ubm93IHRoZW4KYXVkaTphZGp1c3RTdHJlYW1Wb2x1bWUoeWlubG5baV0udHlwZSxBdWRpb01hbmFnZXIuQURKVVNUX1JBSVNFLDApCmdnLmFsZXJ0KCJkb3duXG4iLi55aW5sbltpXS5ub3cuLiJcbiIuLnlpbmxbaV0ubm93KQplbmQKZW5kCgplbmQKeWx0eXBlID0gMApmdW5jdGlvbiBqaWFudGluZzMoZnVuYykKeWlubG4gPSB7fQpmb3IgaSA9IDEsI2F1ZGlvdHlwZSBkbwp5aW5sbltpXSA9IHt9CnlpbmxuW2ldLnR5cGUgPSBhdWRpb3R5cGVbaV0KeWlubG5baV0ubm93ID0gYXVkaTpnZXRTdHJlYW1Wb2x1bWUoYXVkaW90eXBlW2ldKQppZiB5aW5sbltpXS5ub3cgPiB5aW5sW2ldLm5vdyB0aGVuCnlpbmxbaV0ubm93ID0geWlubG5baV0ubm93CmlmIHlsdHlwZSA9PSAxIHRoZW4KeWx0eXBlID0gMApmdW5jKCkKZW5kCmVsc2VpZiB5aW5sbltpXS5ub3cgPCB5aW5sW2ldLm5vdyB0aGVuCnlpbmxbaV0ubm93ID0geWlubG5baV0ubm93CmlmIHlsdHlwZSA9PSAwIHRoZW4KeWx0eXBlID0gMQpmdW5jKCkKZW5kCmVuZAplbmQKZW5kCmZ1bmN0aW9uIGppYW50aW5nKGZ1bmMpCnlpbmxuID0ge30KZm9yIGkgPSAxLCNhdWRpb3R5cGUgZG8KeWlubG5baV0gPSB7fQp5aW5sbltpXS50eXBlID0gYXVkaW90eXBlW2ldCnlpbmxuW2ldLm5vdyA9IGF1ZGk6Z2V0U3RyZWFtVm9sdW1lKGF1ZGlvdHlwZVtpXSkKaWYgeWlubG5baV0ubm93ID49IHlpbmxbaV0ubWF4IHRoZW4KYXVkaTphZGp1c3RTdHJlYW1Wb2x1bWUoeWlubG5baV0udHlwZSxBdWRpb01hbmFnZXIuQURKVVNUX0xPV0VSLDApCmVuZAppZiB5aW5sbltpXS5ub3cgPiB5aW5sW2ldLm5vdyB0aGVuCmF1ZGk6c2V0U3RyZWFtVm9sdW1lKHlpbmxuW2ldLnR5cGUseWlubFtpXS5ub3csMCkKZnVuYygpCmVuZAplbmQKZW5kCmZ1bmN0aW9uIGd1aWQoKQpzZWVkID0gewonZScsJzEnLCcyJywnMycsJzQnLCc1JywnNicsJzcnLCc4JywnOScsJ2EnLCdiJywnYycsJ2QnLCdlJywnZicKfQp0YiA9IHt9CmZvciBpID0gMSwzMiBkbwp0YWJsZS5pbnNlcnQodGIsc2VlZFttYXRoLnJhbmRvbSgxLDE2KV0pCmVuZApzaWQgPSB0YWJsZS5jb25jYXQodGIpCnJldHVybiBzdHJpbmcuZm9ybWF0KCclcyVzJXMlcyVzJywKc3RyaW5nLnN1YihzaWQsMSw4KSwKc3RyaW5nLnN1YihzaWQsMTAsMTIpLApzdHJpbmcuc3ViKHNpZCwyMSwyMikpCi4uc3RyaW5nLmZvcm1hdCgnJXMlcyVzJXMlcycsCnN0cmluZy5zdWIoc2lkLDEsNiksCnN0cmluZy5zdWIoc2lkLDIxLDI1KQopCmVuZAoKCmxvY2FsIGZ1bmN0aW9uIGV4aXQoKQp0dWljaHUgPSAxCmx1YWphdmEuc2V0RmxvYXRpbmdXaW5kb3dIaWRlKGZhbHNlKQoKbHVhamF2YS5wb3N0KGZ1bmN0aW9uKCkKd2luZG93OnJlbW92ZVZpZXcoZmxvYXRXaW5kb3cpCmZvciBrLHYgaW4gcGFpcnMoZmxvYXR0YWJsZSkgZG8KaWYgdj09MSB0aGVuCndpbmRvdzpyZW1vdmVWaWV3KF9FTlZba10pCmVuZAplbmQKZW5kKQplbmQKCgpzZXRFeGl0RXZlbnQoZXhpdCkKY2hhbmdhbi5jb250cm9sV2F0ZXIgPSBmdW5jdGlvbihjb250cm9sLHRpbWUpCmx1YWphdmEucnVuVWlUaHJlYWQoZnVuY3Rpb24oKQppbXBvcnQgImFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIgpPYmplY3RBbmltYXRvcigpOm9mRmxvYXQoY29udHJvbCwic2NhbGVYIiwgewoxLCAwLjgsIDAuOSwgMQp9KTpzZXREdXJhdGlvbih0aW1lKTpzdGFydCgpCk9iamVjdEFuaW1hdG9yKCk6b2ZGbG9hdChjb250cm9sLCJzY2FsZVkiLCB7CjEsMC44LDAuOSwxCn0pOnNldER1cmF0aW9uKHRpbWUpOnN0YXJ0KCkKZW5kKSBlbmQKY2hhbmdhbi5jb250cm9sU21hbGwgPSBmdW5jdGlvbihjb250cm9sLHRpbWUpCmx1YWphdmEucnVuVWlUaHJlYWQoZnVuY3Rpb24oKQppbXBvcnQgImFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIgpPYmplY3RBbmltYXRvcigpOm9mRmxvYXQoY29udHJvbCwic2NhbGVYIiwgewoxLCAwLjcsIDAuNCwgMAp9KTpzZXREdXJhdGlvbih0aW1lKTpzdGFydCgpCk9iamVjdEFuaW1hdG9yKCk6b2ZGbG9hdChjb250cm9sLCJzY2FsZVkiLCB7CjEsIDAuNywgMC40LCAwCn0pOnNldER1cmF0aW9uKHRpbWUpOnN0YXJ0KCkKZW5kKSBlbmQKY2hhbmdhbi5jb250cm9sQmlnID0gZnVuY3Rpb24oY29udHJvbCx0aW1lKQpsdWFqYXZhLnJ1blVpVGhyZWFkKGZ1bmN0aW9uKCkKaW1wb3J0ICJhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciIKT2JqZWN0QW5pbWF0b3IoKTpvZkZsb2F0KGNvbnRyb2wsInNjYWxlWCIsIHsKMCwgMC40LCAwLjcsIDEKfSk6c2V0RHVyYXRpb24odGltZSk6c3RhcnQoKQpPYmplY3RBbmltYXRvcigpOm9mRmxvYXQoY29udHJvbCwic2NhbGVZIiwgewowLCAwLjQsIDAuNywgMQp9KTpzZXREdXJhdGlvbih0aW1lKTpzdGFydCgpCmVuZCkgZW5kCmNoYW5nYW4uY29udHJvbEJpZ1kgPSBmdW5jdGlvbihjb250cm9sLHRpbWUpCmx1YWphdmEucnVuVWlUaHJlYWQoZnVuY3Rpb24oKQppbXBvcnQgImFuZHJvaWQuYW5pbWF0aW9uLk9iamVjdEFuaW1hdG9yIgpPYmplY3RBbmltYXRvcigpOm9mRmxvYXQoY29udHJvbCwic2NhbGVYIiwgewowLCAwLjQsIDAuNywgMQp9KTpzZXREdXJhdGlvbih0aW1lKTpzdGFydCgpCmVuZCkgZW5kCmZ1bmN0aW9uIElzbGFuZOW8gOWFsyhuYW1lLGZ1bmMxLGZ1bmMyLG5pZCkKbmFtZSA9IG5hbWUuLmd1aWQoKQpfRU5WW25hbWVdID0gIuWFsyIKaWYgZnVuYzEgPT0gbmlsIHRoZW4gZnVuYzEgPSBmdW5jdGlvbigpIGVuZCBlbmQKaWYgZnVuYzIgPT0gbmlsIHRoZW4gZnVuYzIgPSBmdW5jdGlvbigpIGVuZCBlbmQKaWYgdHlwZShmdW5jMSkgPT0gImZ1bmN0aW9uIiB0aGVuCnJldHVybiBmdW5jdGlvbigpCm5hbWVycyA9IF9FTlZbbmFtZV0KaWYgbmFtZXJzIH49ICLlvIAiIHRoZW4KbHVhamF2YS5ydW5VaVRocmVhZChmdW5jdGlvbigpCQoJbHVhamF2YS5nZXRJZFZhbHVlKG5pZC4uImsiKTpzZXRCYWNrZ3JvdW5kKGdldEhvcml6b250YWxCRyh7MHgwMEMyNEMzOCwweDAwRjc4RjVDfSw1KSkKCWx1YWphdmEuZ2V0SWRWYWx1ZShuaWQuLiJnIik6c2V0QmFja2dyb3VuZChnZXRIb3Jpem9udGFsQkcoeyIweGZmZmYwMDAwIiwiMHhmZmZmMDAwMCIsIjB4ZmZmZjAwMDAifSw1LDMsIjB4ZmZmZjAwMDAiKSkKCWVuZCkKX0VOVltuYW1lXSA9ICLlvIAiCnZpYnJhOnZpYnJhdGUoNikKcGNhbGwoZnVuYzEpCmVsc2UKCWx1YWphdmEucnVuVWlUaHJlYWQoZnVuY3Rpb24oKQoJbHVhamF2YS5nZXRJZFZhbHVlKG5pZC4uImciKTpzZXRCYWNrZ3JvdW5kKGdldEhvcml6b250YWxCRyh7MHgwMEMyNEMzOCwweDAwRjc4RjVDfSw1KSkKCWx1YWphdmEuZ2V0SWRWYWx1ZShuaWQuLiJrIik6c2V0QmFja2dyb3VuZChnZXRIb3Jpem9udGFsQkcoeyIweGZmZmYwMDAwIiwiMHhmZmZmMDAwMCIsIjB4ZmZmZjAwMDAifSw1LDMsIjB4ZmZmZjAwMDAiKSkKCWVuZCkKX0VOVltuYW1lXSA9ICLlhbMiCnZpYnJhOnZpYnJhdGUoNikKcGNhbGwoZnVuYzIpCmVuZAplbmQKZW5kCmVuZApmdW5jdGlvbiB2aXNpMyh0aWQsIHR0aWQpCiAgICBsb2NhbCB0dmlldyA9IGx1YWphdmEuZ2V0SWRWYWx1ZSh0aWQpCiAgICBsb2NhbCB0dHZpZXcgPSBsdWFqYXZhLmdldElkVmFsdWUodHRpZCkKICAgIGlmIG5vdCB0dmlldyB0aGVuCiAgICAgICAgcmV0dXJuIDAKICAgIGVuZAogICAgaWYgdG9udW1iZXIodG9zdHJpbmcodHZpZXc6Z2V0VmlzaWJpbGl0eSgpKSkgPT0gOC4wIHRoZW4KICAgICAgICB0dmlldzpzZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSkKICAgICAgICAtLSDorr7nva7mlofmnKzop4blm77kuI3lj6/op4EKICAgICAgICB0b3BfbXVzaWM6c2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpCiAgICBlbHNlCiAgICAgICAgdHZpZXc6c2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpCiAgICAgICAgLS0g6K6+572u5paH5pys6KeG5Zu+5Y+v6KeBCiAgICAgICAgdG9wX211c2ljOnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKQogICAgZW5kCmVuZApib3hlcyA9IHt9IGJveHBpYyA9IHt9CmZ1bmN0aW9uIGNoYW5nYW4ubGRkTHNsYW5kMih2aWV3cykKbG9jYWwgdGlkID0gIkxERFMiLi5ndWlkICgpCmxvY2FsIHR0aWQgPSB0aWQuLiI2Igpsb2NhbCB0MWlkID0gZ3VpZCAoKQprZ2lkID0gdmlld3NbMV0uLiLlhbMiCmlkID0gdmlld3NbMV0uLiJpZCIKbG9jYWwgZnVuYyA9IElzbGFuZOW8gOWFsyh2aWV3c1sxXSxmdW5jMSxmdW5jMikKSUQgPSB2aWV3c1sxXS4uImlkIi4uZ3VpZCgpCmJveHBpY1t0aWRdID0gbHVhamF2YS5sb2FkbGF5b3V0IHsKCUltYWdlVmlldyAsCgkKfQpmaXJhZGlvID0gewogICAgTGluZWFyTGF5b3V0LAogICAgbGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiLAogICAgbGF5b3V0X2hlaWdodCA9ICJ3cmFwX2NvbnRlbnQiICwKICAgIGdyYXZpdHkgPSAiY2VudGVyIiwKICAgIG9yaWVudGF0aW9uID0gInZlcnRpY2FsIiwKICAgIExheW91dFRyYW5zaXRpb249bGF5b3V0VHJhbnNpdGlvbiwKICAgIG9uVG91Y2ggPSBmdW5jdGlvbigpIHZpc2kzICh0aWQgLCB0dGlkKSAKICAgIGVuZAp9CmlmIHR5cGUgKHZpZXdzIFsxXSkgPT0gInN0cmluZyIgb3IgdHlwZSAodmlld3MgWzFdKSA9PSAibnVtYmVyIiB0aGVuCmZpcmFkaW8gWyMgZmlyYWRpbyArIDFdID0gewogICAgICBMaW5lYXJMYXlvdXQsCiAgICBsYXlvdXRfd2lkdGggPSAnbWF0Y2hfcGFyZW50JywgICAgCiAgICAgbGF5b3V0X2hlaWdodCA9ICIyNWRwIiwKICAgICAgZ3Jhdml0eSA9ICJjZW50ZXIiLAogICAgICBlbGV2YXRpb24gPSAiMmRwIiwKICAgICAgbGF5b3V0X21hcmdpblJpZ2h0ID0gIjRkcCIsCgkgIGxheW91dF9tYXJnaW5MZWZ0ID0gIjRkcCIsCglncmF2aXR5ID0gImNlbnRlcl92ZXJ0aWNhbCIsCglMYXlvdXRUcmFuc2l0aW9uPWxheW91dFRyYW5zaXRpb24sCgl7CglMaW5lYXJMYXlvdXQgLAoJbGF5b3V0X3dpZHRoID0gJ2ZpbGxfcGFyZW50JyAsCglsYXlvdXRfaGVpZ2h0ID0gIjYwZHAiLAoJZ3Jhdml0eSA9ICJjZW50ZXJfdmVydGljYWwiICwKCWJhY2tncm91bmQgPeeBteWKqOWymywKCXsKCQlUZXh0VmlldyAsCgkJaWQ9InRvcF9tdXNpYyIsCgkJICB0ZXh0ID12aWV3c1sxXSwKCQl0ZXh0U2l6ZSA9ICI5c3AiICwKCQlsYXlvdXRfd2lkdGggPSAiOTBkcCIgLAoJCWxheW91dF93ZWlnaHQ9MSwKCQl0ZXh0Q29sb3IgPSAiI2ZmZmZmZiIgLAoJICAgIFR5cGVmYWNlPWZvbnQsCgkJZ3Jhdml0eSA9ICJjZW50ZXIiICwKCX0sCn0gCn1lbHNlCm9zLmV4aXQgKCkKZW5kCnJhZGlvcyA9IHsKCUxpbmVhckxheW91dCAsCglvcmllbnRhdGlvbiA9ICJ2ZXJ0aWNhbCIgLAoJdmlzaWJpbGl0eSA9ICJnb25lIiAsCglpZCA9IGx1YWphdmEubmV3SWQgKHRpZCkgLAoJbGF5b3V0X3dpZHRoID0gJ2ZpbGxfcGFyZW50JyAsCgllbGV2YXRpb24gPSAiM2RwIiwKCQp9CmZvciBpID0gMiAsICMgdmlld3MgZG8KcmFkaW9zIFsjIHJhZGlvcyArIDFdID0gdmlld3MgW2ldCmVuZApib3hlc1t0aWRdID0gbHVhamF2YS5sb2FkbGF5b3V0KHJhZGlvcykKZmlyYWRpbyBbIyBmaXJhZGlvICsgMV0gPSBib3hlc1t0aWRdCl9FTlYgW3QxaWRdID0gbHVhamF2YS5sb2FkbGF5b3V0ICh7CiAgICBMaW5lYXJMYXlvdXQsCiAgICBsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIsCiAgICBsYXlvdXRfaGVpZ2h0ID0gIndyYXBfY29udGVudCIsCiAgICBncmF2aXR5ID0gImNlbnRlciIsCiAgICB7CiAgICAgIExpbmVhckxheW91dCwKICAgICAgbGF5b3V0X3dpZHRoID0gJ21hdGNoX3BhcmVudCcsCiAgICAgIGxheW91dF9oZWlnaHQgPSAid3JhcF9jb250ZW50IiwKICAgICAgZ3Jhdml0eSA9ICJjZW50ZXIiLAogICAgICBlbGV2YXRpb24gPSAiMmRwIiwKICAgICAgbGF5b3V0X21hcmdpblJpZ2h0ID0gIjRkcCIsCgkgIGxheW91dF9tYXJnaW5MZWZ0ID0gIjRkcCIsCiAgICAgIGJhY2tncm91bmQgPSBsdWFqYXZhLmxvYWRsYXlvdXR7R3JhZGllbnREcmF3YWJsZSxjb2xvcj3ngbXliqjlspssY29ybmVyUmFkaXVzPTQwfSwKICAgICAgZmlyYWRpbwogICAgICB9CiAgICAgIH0pCnJldHVybiBfRU5WIFt0MWlkXQplbmQKTVN3aXRjaCA9IHt9CmZ1bmN0aW9uIGNoYW5nYW4uc3dpdGNoKG5hbWUsZnVuYzEsZnVuYzIpCklEID0gbmFtZS4uZ3VpZCgpCk1Td2l0Y2hbI01Td2l0Y2grMV0gPSBJRApDaGVja2VkID0gZmFsc2UKaWYgbmFtZT09Iumfs+mHj+mUrumakOiXj1VJIiB0aGVuCumfs+mHj+mUriA9IHRydWUKQ2hlY2tlZCA9IHRydWUKZW5kCmlmIG5hbWU9PSLmkYfkuIDmkYfpmpDol49VSSIgdGhlbgrmkYfkuIDmkYcgPSB0cnVlCkNoZWNrZWQgPSB0cnVlCmVuZAoKcmVzdCA9IGx1YWphdmEubG9hZGxheW91dCh7CkxpbmVhckxheW91dCwKbGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIsCmxheW91dF9oZWlnaHQgPSAiNDdkcCIsCmdyYXZpdHkgPSAiY2VudGVyIiwKewpMaW5lYXJMYXlvdXQsCmxheW91dF93aWR0aCA9ICdmaWxsX3BhcmVudCcsCmxheW91dF9oZWlnaHQgPSAiNDBkcCIsCmdyYXZpdHkgPSAiY2VudGVyIiwKZWxldmF0aW9uID0gIjJkcCIsCmxheW91dF9tYXJnaW5SaWdodCA9ICI0ZHAiLApsYXlvdXRfbWFyZ2luTGVmdCA9ICI0ZHAiLApiYWNrZ3JvdW5kID0gbHVhamF2YS5sb2FkbGF5b3V0IHsKR3JhZGllbnREcmF3YWJsZSAsCmNvbG9yID0gMHhmZmZmZmZmZiAsCmNvcm5lclJhZGl1cyA9IDE1Cn0gLHBhZGRpbmcgPSB7CiIwZHAiLCIwZHAiLCI2ZHAiLCIwZHAiCn0sCnsKVGV4dFZpZXcsClR5cGVmYWNlPWZvbnQsCmdyYXZpdHkgPSAidG9wIiwKdGV4dCA9IG5hbWUsCnRleHRDb2xvciA9ICIweGZmMDAwMDAwIiwKdGV4dFNpemUgPSAiMTNzcCIsCmxheW91dF93ZWlnaHQgPSAxLApsYXlvdXRfd2lkdGggPSAnZmlsbF9wYXJlbnQnLApsYXlvdXRfbWFyZ2luTGVmdCA9ICIxMGRwIiwKbGF5b3V0X21hcmdpblJpZ2h0ID0gIjIwZHAiLAp9LAoKewpNYXRlcmlhbFN3aXRjaCwKaWQgPSBsdWFqYXZhLm5ld0lkKElEKSwKbGF5b3V0X3dlaWdodCA9IDEsCgpjaGVja2VkID0gQ2hlY2tlZCwKbGF5b3V0X3dpZHRoID0gJ2ZpbGxfcGFyZW50JywKbGF5b3V0X2hlaWdodCA9ICd3cmFwX2NvbnRlbnQnLApvbkNoZWNrZWRDaGFuZ2UgPSBmdW5jdGlvbihjb21wb3VuZEJ1dHRvbiwgaXNDaGVja2VkKQpsdWFqYXZhLm5ld1RocmVhZChmdW5jdGlvbigpCmlmIGlzQ2hlY2tlZCB0aGVuCnBjYWxsKGZ1bmMxKQplbHNlCnBjYWxsKGZ1bmMyKQplbmQKZW5kKTpzdGFydCgpCmVuZAp9Cn0KfSkKcmV0dXJuIHJlc3QKZW5kCmltcG9ydCAiYW5kcm9pZC5ncmFwaGljcy5Db2xvciIKaW1wb3J0ICJhbmRyb2lkLmNvbnRlbnQucmVzLkNvbG9yU3RhdGVMaXN0IgpmdW5jdGlvbiBTbGlkZXJDb2xvcihpZCxjb2xvcjEsY29sb3IyLGNvbG9yMykKaWQ6c2V0VHJhY2tBY3RpdmVUaW50TGlzdChDb2xvclN0YXRlTGlzdCh7e319LHtjb2xvcjF9KSkKaWQ6c2V0VHJhY2tJbmFjdGl2ZVRpbnRMaXN0KENvbG9yU3RhdGVMaXN0KHt7fX0se2NvbG9yMn0pKQppZDpzZXRUaHVtYlRpbnRMaXN0KENvbG9yU3RhdGVMaXN0KHt7fX0se2NvbG9yM30pKQplbmQKZnVuY3Rpb24gU3dpdGNoQ29sb3IoaWQsY29sb3IxLGNvbG9yMixjb2xvcjMsY29sb3I0KQppZDpzZXRUcmFja1RpbnRMaXN0KENvbG9yU3RhdGVMaXN0KHt7YW5kcm9pZC5SLmF0dHIuc3RhdGVfY2hlY2tlZH0se319LHtjb2xvcjEsY29sb3IyfSkpCmlkOnNldFRodW1iVGludExpc3QoQ29sb3JTdGF0ZUxpc3Qoe3thbmRyb2lkLlIuYXR0ci5zdGF0ZV9jaGVja2VkfSx7LWFuZHJvaWQuUi5hdHRyLnN0YXRlX2NoZWNrZWR9fSx7Y29sb3IzLGNvbG9yNH0pKQplbmQKY2hhbmdhbi5jb250cm9sUm90YXRpb245ID0gZnVuY3Rpb24oY29udHJvbCwgdGltZSx0KQpsdWFqYXZhLnJ1blVpVGhyZWFkKGZ1bmN0aW9uKCkKaW1wb3J0ICJhbmRyb2lkLnZpZXcuYW5pbWF0aW9uLkFuaW1hdGlvbiIKaW1wb3J0ICJhbmRyb2lkLmFuaW1hdGlvbi5PYmplY3RBbmltYXRvciIKeHVhbnpodWFuZG9uZ2h1YSA9IE9iamVjdEFuaW1hdG9yOm9mRmxvYXQoY29udHJvbCwgInJvdGF0aW9uIiwgewp0aW1lLHQKfSkKeHVhbnpodWFuZG9uZ2h1YTpzZXRSZXBlYXRDb3VudCgwKQp4dWFuemh1YW5kb25naHVhOnNldFJlcGVhdE1vZGUoQW5pbWF0aW9uLlJFU1RBUlQpCnh1YW56aHVhbmRvbmdodWE6c2V0RHVyYXRpb24oNDAwKQp4dWFuemh1YW5kb25naHVhOnN0YXJ0KCkKZW5kKQplbmQKCmJ1dHM9e30KZnVuY3Rpb24gY2hhbmdhbi5idXR0b24odHh0LGZ1bmMsdHh0YykKaWYgbm90IHR4dCB0aGVuIHR4dCA9ICLmnKrorr7nva4iIGVuZAppZiBub3QgdHh0YyB0aGVuIHR4dGM9IjB4ZmYwMDAwMDAiIGVuZApsb2NhbCB0aWQ9IkNidXR0b24iLi5ndWlkKCkKYnV0c1t0aWRdPWx1YWphdmEubG9hZGxheW91dCh7CkxpbmVhckxheW91dCwKbGF5b3V0X3dpZHRoID0gJ21hdGNoX3BhcmVudCcsCmxheW91dF9oZWlnaHQgPSAiNDBkcCIsCmdyYXZpdHkgPSAiY2VudGVyIiwKewpMaW5lYXJMYXlvdXQsCmxheW91dF93aWR0aCA9ICdtYXRjaF9wYXJlbnQnLApsYXlvdXRfaGVpZ2h0ID0gIjM1ZHAiLApncmF2aXR5ID0gImNlbnRlciIsCmVsZXZhdGlvbiA9ICIyZHAiLApsYXlvdXRfbWFyZ2luUmlnaHQgPSAiNGRwIiwKbGF5b3V0X21hcmdpbkxlZnQgPSAiNGRwIiwKYmFja2dyb3VuZCA9IGdldEJ1dHRvbkJHKCksCnBhZGRpbmcgPSB7CiIwZHAiLCIwZHAiLCI2ZHAiLCIwZHAiCn0sCm9uQ2xpY2sgPSBmdW5jdGlvbigpCmNoYW5nYW4uY29udHJvbFdhdGVyKGJ1dHNbdGlkXSwzMDApCmx1YWphdmEubmV3VGhyZWFkKGZ1bmMpOnN0YXJ0KCkgZW5kLAp7ClRleHRWaWV3LApUeXBlZmFjZT1mb250LApncmF2aXR5ID0gInRvcCIsCnRleHQgPSB0eHQsCnRleHRDb2xvciA9IHR4dGMsCnRleHRTaXplID0gIjEzc3AiLApsYXlvdXRfd2VpZ2h0ID0gMSwKbGF5b3V0X3dpZHRoID0gJ2ZpbGxfcGFyZW50JywKbGF5b3V0X21hcmdpbkxlZnQgPSAiMTBkcCIsCmxheW91dF9tYXJnaW5SaWdodCA9ICIyMGRwIiwKfSwKewpJbWFnZVZpZXcsCmxheW91dF93ZWlnaHQgPSAxLApzcmM9Z2V0UmVzKCJoZWlyIiksCkNvbG9yRmlsdGVyID0gIjB4ZmZlZWVlZWUiLApsYXlvdXRfbWFyZ2luUmlnaHQgPSAiNGRwIiwKbGF5b3V0X2hlaWdodD0iMzBkcCIsCmxheW91dF9ncmF2aXR5ID0gImNlbnRlciIsCmxheW91dF93aWR0aD0iMzBkcCIsCn0KfQp9KQpyZXR1cm4gYnV0c1t0aWRdCmVuZApmdW5jdGlvbiBnZXRCdXR0b25CRygpCmxvY2FsIHNlbGVjdG9yID0gbHVhamF2YS5nZXRTdGF0ZUxpc3REcmF3YWJsZSgpCnNlbGVjdG9yOmFkZFN0YXRlKHsKYW5kcm9pZC5SLmF0dHIuc3RhdGVfcHJlc3NlZAp9LCBnZXRWZXJ0aWNhbEJHKHsweDM0MDAwNDAwLDB4MzQwMDA0MDB9LDE3KSkKc2VsZWN0b3I6YWRkU3RhdGUoewotYW5kcm9pZC5SLmF0dHIuc3RhdGVfcHJlc3NlZAp9LCBnZXRWZXJ0aWNhbEJHKHsweGZmZmZmZmZmLDB4ZmZmZmZmZmZ9LDE3KSkKcmV0dXJuIHNlbGVjdG9yCmVuZApmdW5jdGlvbiBjaGFuZ2FuLmludGNoZWNrKG5hbWUsZnVuYzEsZnVuYzIpCm5pZCA9IG5hbWUuLmd1aWQoKQpzd2l0c1tuaWRdPXsKZ2V0VmVydGljYWxCRyh7MHhmZjAwOTFGRiwweGZmNEY4MkZGfSwxOCksCmdldFZlcnRpY2FsQkcoezB4ODgxNjE2MTYsMHg4ODE2MTYxNn0sMTgpLApmYWxzZSwKfQoKbG9jYWwgZnVuYyA9IOW8gOWFszUobmFtZSxmdW5jMSxmdW5jMixuaWQpCmlmIG5vdCBuYW1lIHRoZW4gbmFtZSA9ICLmnKrorr7nva4iIGVuZAoKX0VOVltuaWQuLiJrIl09bHVhamF2YS5sb2FkbGF5b3V0KHsKVGV4dFZpZXcsCmlkID0gbHVhamF2YS5uZXdJZChuaWQuLiJrIiksCmJhY2tncm91bmQgPSBzd2l0c1tuaWRdWzJdLApsYXlvdXRfd2lkdGggPSAnd3JhcF9jb250ZW50JywKbGF5b3V0X2hlaWdodCA9ICd3cmFwX2NvbnRlbnQnLApwYWRkaW5nPXsiMTNkcCIsIjNkcCIsIjEzZHAiLCIzZHAifSwKZ3Jhdml0eT0iY2VudGVyIiwKdGV4dD0i5YWzIiwKdGV4dENvbG9yPSIjZmZmZmZmIiwKdGV4dFNpemU9IjEzc3AiLAp9KQpfRU5WW25pZC4uImciXT1sdWFqYXZhLmxvYWRsYXlvdXQoe0xpbmVhckxheW91dCwKewpUZXh0VmlldywKbGF5b3V0X21hcmdpbkxlZnQ9IjdkcCIsCmlkID0gbHVhamF2YS5uZXdJZChuaWQuLiJnIiksCmJhY2tncm91bmQgPSBlbXB0eSwKbGF5b3V0X3dpZHRoID0gJ3dyYXBfY29udGVudCcsCmxheW91dF9oZWlnaHQgPSAnd3JhcF9jb250ZW50JywKcGFkZGluZz17IjEzZHAiLCIzZHAiLCIxM2RwIiwiM2RwIn0sCmdyYXZpdHk9ImNlbnRlciIsCnRleHQ9IuW8gCIsCnRleHRDb2xvcj0iI2ZmZmZmZiIsCnRleHRTaXplPSIxM3NwIiwKfX0pCmxvY2FsIHJlc3QgPSBsdWFqYXZhLmxvYWRsYXlvdXQoewpGcmFtZUxheW91dCwKbGF5b3V0X3dpZHRoID0gJ3dyYXBfY29udGVudCcsCmxheW91dF9oZWlnaHQgPSAid3JhcF9jb250ZW50IiwKbGF5b3V0X21hcmdpblRvcCA9ICIxZHAiLApsYXlvdXRfbWFyZ2luQm90dG9tID0gIjFkcCIsCnBhZGRpbmc9eyIwZHAiLCIwZHAiLCIwZHAiLCIwZHAifSwKewpMaW5lYXJMYXlvdXQsCmxheW91dF9tYXJnaW5MZWZ0PSI4ZHAiLApsYXlvdXRfbWFyZ2luVG9wPSIzZHAiLApsYXlvdXRfbWFyZ2luQm90dG9tPSIzZHAiLApsYXlvdXRfbWFyZ2luUmlnaHQ9IjZkcCIsCm9uQ2xpY2sgPSBmdW5jdGlvbigpIGx1YWphdmEubmV3VGhyZWFkKGZ1bmN0aW9uKCkgZnVuYygpIGVuZCk6c3RhcnQoKSBlbmQsCmxheW91dF93aWR0aCA9ICdmaWxsX3BhcmVudCcsCmxheW91dF9oZWlnaHQgPSAid3JhcF9jb250ZW50IiwKZ3Jhdml0eSA9ICJjZW50ZXJfdmVydGljYWwiLApsYXlvdXRfZ3Jhdml0eT0iY2VudGVyIiwKLS1iYWNrZ3JvdW5kID0gcmFuZGJnMigpLApvcmllbnRhdGlvbj0idmVydGljYWwiLAp7ClRleHRWaWV3LApncmF2aXR5ID0gImxlZnQiLAp0ZXh0ID0gbmFtZSwKdGV4dENvbG9yPSIjMDAwMDAwIiwKdGV4dFNpemUgPSAiMTFzcCIsCmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIsCmxheW91dF93aWR0aCA9ICcxMDBkcCcsCn0sCnsKTGluZWFyTGF5b3V0LAppZCA9IGx1YWphdmEubmV3SWQobmlkKSwKYmFja2dyb3VuZCA9IGdldFZlcnRpY2FsQkcoezB4ZTg0QjdDRkYsMHg4ODk3NEJGRn0sMTgsNCwweGZmNjlDMkZGKSwKbGF5b3V0X3dpZHRoID0gJ3dyYXBfY29udGVudCcsCmxheW91dF9oZWlnaHQgPSAnd3JhcF9jb250ZW50JywKcGFkZGluZyA9ICI1ZHAiLApfRU5WW25pZC4uImsiXSwgX0VOVltuaWQuLiJnIl0KfX0sCntMaW5lYXJMYXlvdXQsCmxheW91dF9oZWlnaHQ9IjE1ZHAiLApsYXlvdXRfd2lkdGg9IjE1ZHAiLApsYXlvdXRfbWFyZ2luTGVmdD0iNGRwIiwKbGF5b3V0X21hcmdpblRvcD0iMTRkcCIsCgp9LHtMaW5lYXJMYXlvdXQsCmxheW91dF9oZWlnaHQ9IjIwZHAiLApsYXlvdXRfd2lkdGg9IjMwZHAiLApsYXlvdXRfZ3Jhdml0eT0icmlnaHR8Ym90dG9tIgp9Cn0pCgpyZXR1cm4gcmVzdAplbmQKZnVuY3Rpb24g5byA5YWzNShuYW1lLGZ1bmMxLGZ1bmMyLG5pZCkKbG9jYWwgc25hbWUgPSBuaWQKbG9jYWwgbG9jYWxuYW1lPW5hbWUKbmFtZSA9IG5pZC4uZ3VpZCgpCl9FTlZbbmFtZV0gPSAi5YWzIgppZiBmdW5jMSA9PSBuaWwgdGhlbiBmdW5jMSA9ICIiIGVuZAppZiBmdW5jMiA9PSBuaWwgdGhlbiBmdW5jMiA9ICIiIGVuZAppZiB0eXBlKGZ1bmMxKSA9PSAiZnVuY3Rpb24iIHRoZW4KcmV0dXJuIGZ1bmN0aW9uKCkKbmFtZXJzID0gX0VOVltuYW1lXQppZiBuYW1lcnMgfj0gIuW8gCIgdGhlbgpzd2l0c1tzbmFtZV1bM109dHJ1ZQp2aWJyYTp2aWJyYXRlKDE0KQpsdWFqYXZhLnJ1blVpVGhyZWFkKGZ1bmN0aW9uKCkKbHVhamF2YS5nZXRJZFZhbHVlKHNuYW1lLi4iayIpOnNldEJhY2tncm91bmQoZW1wdHkpCmx1YWphdmEuZ2V0SWRWYWx1ZShzbmFtZS4uImciKTpzZXRCYWNrZ3JvdW5kKHN3aXRzW3NuYW1lXVsxXSkKWW9Zb0ltcGw6d2l0aCgiRmFkZUluTGVmdCIpOmR1cmF0aW9uKDQwMCk6cGxheU9uKF9FTlZbbmlkLi4iZyJdKQplbmQpCl9FTlZbbmFtZV0gPSAi5byAIgpwY2FsbChmdW5jMSkKCmVsc2UKc3dpdHNbc25hbWVdWzNdPWZhbHNlCnZpYnJhOnZpYnJhdGUoMTQpCmx1YWphdmEucnVuVWlUaHJlYWQoZnVuY3Rpb24oKQpsdWFqYXZhLmdldElkVmFsdWUoc25hbWUuLiJrIik6c2V0QmFja2dyb3VuZChzd2l0c1tzbmFtZV1bMl0pCmx1YWphdmEuZ2V0SWRWYWx1ZShzbmFtZS4uImciKTpzZXRCYWNrZ3JvdW5kKGVtcHR5KQpZb1lvSW1wbDp3aXRoKCJGYWRlSW5SaWdodCIpOmR1cmF0aW9uKDQwMCk6cGxheU9uKF9FTlZbbmlkLi4iayJdKQplbmQpCl9FTlZbbmFtZV0gPSAi5YWzIgpwY2FsbChmdW5jMikKZW5kCmVuZAplbmQKZW5kCmltcG9ydCAiYW5kcm9pZC5ncmFwaGljcy5Db2xvciIKaW1wb3J0ICJhbmRyb2lkLmNvbnRlbnQucmVzLkNvbG9yU3RhdGVMaXN0IgoKZnVuY3Rpb24gY2hhbmdhbi5jaGVjayhja2xpc3QpCmlmICNja2xpc3Q9PTAgdGhlbiByZXR1cm4gbmlsIGVuZApsb2NhbCByZXN0ID0gewpMaW5lYXJMYXlvdXQsCmxheW91dF93aWR0aCA9ICdtYXRjaF9wYXJlbnQnLApsYXlvdXRfaGVpZ2h0ID0gIndyYXBfY29udGVudCIsCmdyYXZpdHkgPSAiY2VudGVyIiwKb3JpZW50YXRpb249InZlcnRpY2FsIiwKCn0KCmZvciBpID0gMSwgI2NrbGlzdCwyIGRvCmxvY2FsIHRlbXBUYWJsZSA9IHtMaW5lYXJMYXlvdXQsCmxheW91dF93aWR0aCA9ICdtYXRjaF9wYXJlbnQnLApsYXlvdXRfaGVpZ2h0ID0gIndyYXBfY29udGVudCIsCmdyYXZpdHkgPSAibGVmdCIsCm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgp9CmZvciBqID0gMCwgMSBkbwppZiBja2xpc3RbaSArIGpdIH49IG5pbCB0aGVuCmxvY2FsIG5hbWUgPSBja2xpc3RbaSArIGpdWzFdCmxvY2FsIGZ1bmMxID0gY2tsaXN0W2kgKyBqXVsyXQpsb2NhbCBmdW5jMiA9IGNrbGlzdFtpICsgal1bM10KaWYgbm90IG5hbWUgdGhlbiBuYW1lID0gIuacquiuvue9riIgZW5kCnJzdHQgPSBjaGFuZ2FuLmludGNoZWNrKG5hbWUsZnVuYzEsZnVuYzIpCnRhYmxlLmluc2VydCh0ZW1wVGFibGUsIHJzdHQpCmVsc2UKdGFibGUuaW5zZXJ0KHRlbXBUYWJsZSwge0xpbmVhckxheW91dCwKbGF5b3V0X3dpZHRoID0gJ21hdGNoX3BhcmVudCcsCmxheW91dF93ZWlnaHQ9MSx9KQplbmQKZW5kCnRhYmxlLmluc2VydChyZXN0LCB0ZW1wVGFibGUpCmVuZApyZXR1cm4gbHVhamF2YS5sb2FkbGF5b3V0KHJlc3QpCmVuZApmdW5jdGlvbiDlvIDlhbMobmFtZSxmdW5jMSxmdW5jMikKbG9jYWwgbG9jYWxuYW1lPW5hbWUKaWYgZnVuYzEgPT0gbmlsIHRoZW4gZnVuYzEgPSBmdW5jdGlvbigpIGVuZCBlbmQKaWYgZnVuYzIgPT0gbmlsIHRoZW4gZnVuYzIgPSBmdW5jdGlvbigpIGVuZCBlbmQKaWYgdHlwZShmdW5jMSkgPT0gImZ1bmN0aW9uIiB0aGVuCnJldHVybiBmdW5jdGlvbigpCm5hbWVycyA9IF9FTlZbbmFtZV0KaWYgbmFtZXJzIH49ICLlvIAiIHRoZW4KX0VOVltuYW1lXSA9ICLlvIAiCgoKcGNhbGwoZnVuYzEpCmVsc2UKX0VOVltuYW1lXSA9ICLlhbMiCgoKcGNhbGwoZnVuYzIpCmVuZAoKZW5kCmVuZAplbmQKZnVuY3Rpb24gY2hhbmdhbi5pbnRjaGVjayhuYW1lLGZ1bmMxLGZ1bmMyLHNpemUpCm5pZCA9IG5hbWUuLmd1aWQoKQpsbmFtZT1uYW1lCmxvY2FsIGZ1bmMgPSDlvIDlhbMobmlkLGZ1bmMxLGZ1bmMyLGxuYW1lKQppZiBub3QgbmFtZSB0aGVuIG5hbWUgPSAi5pyq6K6+572uIiBlbmQKSUQgPSBuYW1lLi5ndWlkKCkKbG9jYWwgcmVzdCA9IHsKTGluZWFyTGF5b3V0LApsYXlvdXRfd2lkdGggPSAnbWF0Y2hfcGFyZW50JywKbGF5b3V0X3dlaWdodD0xLApsYXlvdXRfaGVpZ2h0ID0gIjQyZHAiLApsYXlvdXRfbWFyZ2luVG9wID0gIjFkcCIsCmxheW91dF9tYXJnaW5Cb3R0b20gPSAiMWRwIiwKcGFkZGluZyA9ICIxZHAiLAp7CkxpbmVhckxheW91dCwKcGFkZGluZz0iM2RwIiwKbGF5b3V0X3dpZHRoID0gJ2ZpbGxfcGFyZW50JywKbGF5b3V0X2hlaWdodCA9ICJ3cmFwX2NvbnRlbnQiLApncmF2aXR5ID0gImNlbnRlcl92ZXJ0aWNhbCIsCnsKQ2hlY2tCb3gsCmlkID0gbHVhamF2YS5uZXdJZChJRCksCmxheW91dF9oZWlnaHQgPSAiMzJkcCIsCmxheW91dF93aWR0aCA9ICIzMmRwIiwKY2hlY2tlZFN0YXRlPSJpbmRldGVybWluYXRlIiwKYnV0dG9uVGludExpc3Q9Q29sb3JTdGF0ZUxpc3Qoe3thbmRyb2lkLlIuYXR0ci5zdGF0ZV9jaGVja2VkfSx7LWFuZHJvaWQuUi5hdHRyLnN0YXRlX2NoZWNrZWR9fSx7MHhGZjAwMDAwMCwweGZmMDAwMDAwfSx7MHhmZjAwMDAwMCwweGZmMDAwMDAwfSksCm9uQ2xpY2s9ZnVuY3Rpb24oKQpsdWFqYXZhLm5ld1RocmVhZChmdW5jdGlvbigpCnBjYWxsKGZ1bmMpCmVuZCk6c3RhcnQoKSBlbmQKfSwKewpUZXh0VmlldywKdGV4dD1uYW1lLAp0ZXh0U2l6ZSA9ICIxM3NwIiwKdGV4dENvbG9yPSIweGZmMDAwMDAwIiwKbGF5b3V0X3dpZHRoID0gIm1hdGNoX3BhcmVudCIsCi0tbGF5b3V0X3dlaWdodD0xLAp9Cn0KfQoKcmV0dXJuIHJlc3QKZW5kCnJhZGlvZz17fQpmdW5jdGlvbiBjaGFuZ2FuLnJhZGlvIChja2xpc3QpCmlmIG5vdCByYWRvZmYgdGhlbgpyYWRvbj1nZXRWZXJ0aWNhbEJHKHsweGZmZmZmZmZmLDB4ZmZmZmZmZmZ9LDM2MCwyMCwweEZGMDAwMDAwKQpyYWRvZmY9Z2V0VmVydGljYWxCRyh7MHgwMGZmZmZmZiwweDAwZmZmZmZmfSwzNjAsOCwweGZmYWFhYWFhKQoKZW5kCmxvY2FsIHJpZD1ndWlkKCkKcmFkaW9nW3JpZF09e30KcmVzdCA9IHsKTGluZWFyTGF5b3V0ICwKbGF5b3V0X3dpZHRoID0gJ21hdGNoX3BhcmVudCcgLApsYXlvdXRfaGVpZ2h0ID0gIndyYXBfY29udGVudCIgLApsYXlvdXRfbWFyZ2luVG9wID0gIjEwZHAiICwKZ3Jhdml0eSA9ICJ0b3AiICwKb3JpZW50YXRpb24gPSAidmVydGljYWwiICwKCn0KaWYgdHlwZSAoY2tsaXN0IFsxXSkgPT0gInN0cmluZyIgdGhlbgpyZHM9MgpyZXN0IFsjIHJlc3QgKyAxXSA9IHsKVGV4dFZpZXcgLApncmF2aXR5ID0gImxlZnQiICwKcGFkZGluZz0iNWRwIiwKdGV4dCA9IGNrbGlzdCBbMV0gLAp0ZXh0U2l6ZSA9ICIxM3NwIiAsCnRleHRDb2xvciA9ICIjMDAwMDAwIiAsCmxheW91dF93aWR0aCA9ICdmaWxsX3BhcmVudCcgLApsYXlvdXRfaGVpZ2h0ID0gJ3dyYXBfY29udGVudCcgLApsYXlvdXRfbWFyZ2luTGVmdCA9ICIxMGRwIiAsCmxheW91dF9tYXJnaW5SaWdodCA9ICI1ZHAiICwKbGF5b3V0X21hcmdpblRvcCA9ICIwZHAiICwKbGF5b3V0X21hcmdpbkJvdHRvbSA9ICIwZHAiICwKfQplbHNlCnJkcz0xCmVuZApsb2NhbCByZXN0dD17CkxpbmVhckxheW91dCAsCmxheW91dF93aWR0aCA9ICdtYXRjaF9wYXJlbnQnICwKbGF5b3V0X2hlaWdodCA9ICJ3cmFwX2NvbnRlbnQiICwKbGF5b3V0X21hcmdpblRvcCA9ICIxMGRwIiAsCmdyYXZpdHkgPSAidG9wIiAsCm9yaWVudGF0aW9uID0gInZlcnRpY2FsIiAsCmJhY2tncm91bmQgPSBnZXRCdXR0b25CRygpLApwYWRkaW5nID0gewoiMGRwIiwiMGRwIiwiNmRwIiwiMGRwIgp9LH0KZm9yIGkgPSByZHMgLCAjIGNrbGlzdCBkbwpsb2NhbCBuYW1lID0gY2tsaXN0IFtpXSBbMV0KbG9jYWwgZnVuYyA9IGNrbGlzdCBbaV0gWzJdCmlmIG5vdCBuYW1lIHRoZW4KbmFtZSA9ICLmnKrorr7nva4iCmVuZApuaWQgPSBuYW1lLi5ndWlkICgpCnJhZGlvZ1tyaWRdW25pZF09ZmFsc2UKbG9jYWwgZnVuYyA9IHJhZGluKHJpZCxuaWQsZnVuYykKbG9jYWwgdGlkID0gbmlkLi5ndWlkICgpCl9FTlYgW3RpZF0gPSBsdWFqYXZhLmxvYWRsYXlvdXQgKCB7CkxpbmVhckxheW91dCAsCmxheW91dF93aWR0aCA9ICcyNTBkcCcgLApsYXlvdXRfaGVpZ2h0ID0gIjMwZHAiICwKbGF5b3V0X21hcmdpblRvcCA9ICI1ZHAiICwKbGF5b3V0X21hcmdpbkJvdHRvbSA9ICIxNWRwIiAsCmxheW91dF9tYXJnaW5MZWZ0ID0gIjRkcCIgLApsYXlvdXRfbWFyZ2luUmlnaHQgPSAiMTBkcCIgLApncmF2aXR5ID0gImNlbnRlcl92ZXJ0aWNhbCIgLApvbkNsaWNrID0gZnVuY3Rpb24gKCkKY2hhbmdhbi5jb250cm9sV2F0ZXIgKF9FTlYgW3RpZF0gLCAyMDApCmZ1bmMoKQplbmQKCiwKewpJbWFnZVZpZXcgLAppZCA9IGx1YWphdmEubmV3SWQgKG5pZCkgLApsYXlvdXRfd2lkdGggPSAnMjBkcCcgLApsYXlvdXRfaGVpZ2h0ID0gIjIwZHAiICwKbGF5b3V0X21hcmdpbkxlZnQgPSAiNWRwIiAsCmxheW91dF9tYXJnaW5SaWdodCA9ICIwZHAiICwKYmFja2dyb3VuZCA9cmFkb2ZmICwKfSAsIHsKVGV4dFZpZXcgLApncmF2aXR5ID0gInRvcCIgLAp0ZXh0ID0gbmFtZSAsCnRleHRTaXplPSIxM3NwIiwKdGV4dENvbG9yID0gIiMwMDAwMDAiICwKbGF5b3V0X3dpZHRoID0gJ3dyYXBfY29udGVudCcgLApsYXlvdXRfaGVpZ2h0ID0gJ3dyYXBfY29udGVudCcgLApsYXlvdXRfbWFyZ2luTGVmdCA9ICIxMGRwIiAsCmxheW91dF9tYXJnaW5SaWdodCA9ICI1ZHAiICwKfQp9KQpyZXN0dCBbIyByZXN0dCArIDFdID0gX0VOViBbdGlkXQplbmQKcmVzdCBbIyByZXN0ICsgMV0gPSByZXN0dApyZXR1cm4gbHVhamF2YS5sb2FkbGF5b3V0IChyZXN0KQplbmQKZnVuY3Rpb24gcmFkaW4ocmlkLG5pZCxmdW5jKQpyZXR1cm4gZnVuY3Rpb24oKQpmb3Igayx2IGluIHBhaXJzKHJhZGlvZ1tyaWRdKSBkbwpjb2xvcnZzW2tdPXtmYWxzZSwicmFkIn0KbHVhamF2YS5nZXRJZFZhbHVlKGspOnNldEJhY2tncm91bmQocmFkb2ZmKQppZiBrPT1uaWQgYW5kIHZ+PXRydWUgdGhlbgpsdWFqYXZhLmdldElkVmFsdWUoayk6c2V0QmFja2dyb3VuZChyYWRvbikKY29sb3J2c1trXT17dHJ1ZSwicmFkIn0Kdj10cnVlCmx1YWphdmEubmV3VGhyZWFkKGZ1bmMpOnN0YXJ0KCkKZW5kCmVuZAplbmQKZW5kCmNvbG9ydnM9e30K5b2T5YmNdWk9MQpmdW5jdGlvbiBjaGFuZ2VDb2xvcihjbykK5o6n5Lu26aKc6ImyPWNvCmx1YWphdmEucnVuVWlUaHJlYWQoZnVuY3Rpb24oKQpfRU5WWyJqbSIuLuW9k+WJjXVpLi4idCJdOnNldFRleHRDb2xvcijmjqfku7bpopzoibIpCl9FTlZbImptIi4u5b2T5YmNdWkuLiJwIl06c2V0Q29sb3JGaWx0ZXIo5o6n5Lu26aKc6ImyKQpsdWFqYXZhLmdldElkVmlldygiYmFja3YiKTpzZXRDb2xvckZpbHRlcijmjqfku7bpopzoibIpCmNoZWNrYmcgPSBnZXRTaGFwZTIoNDUse+aOp+S7tuminOiJsizmjqfku7bpopzoibJ9LDQs5o6n5Lu26aKc6ImyKQpyYWRvbj1nZXRWZXJ0aWNhbEJHKHsweGZmZmZmZmZmLDB4ZmZmZmZmZmZ9LDM2MCwyMCzmjqfku7bpopzoibIpCmZvciBrLHYgaW4gcGFpcnMoY29sb3J2cykgZG8KaWYgdlsxXT09dHJ1ZSB0aGVuCmlmIHZbMl09PSJzd2l0Y2giIHRoZW4KbHVhamF2YS5nZXRJZFZhbHVlKGspOnNldEJhY2tncm91bmQoY2hlY2tiZykKZWxzZWlmIHZbMl09PSJib3giIHRoZW4KYm94cGljW2tdOnNldENvbG9yRmlsdGVyKOaOp+S7tuminOiJsikKZWxzZWlmIHZbMl09PSJ0eHQiIHRoZW4KbHVhamF2YS5nZXRJZFZhbHVlKGspOnNldFRleHRDb2xvcijmjqfku7bpopzoibIpCmVsc2VpZiB2WzJdPT0iaW1nIiB0aGVuCmx1YWphdmEuZ2V0SWRWYWx1ZShrKTpzZXRDb2xvckZpbHRlcijmjqfku7bpopzoibIpCmVsc2VpZiB2WzJdPT0icmFkIiB0aGVuCmx1YWphdmEuZ2V0SWRWYWx1ZShrKTpzZXRCYWNrZ3JvdW5kKHJhZG9uKQplbHNlaWYgdlsyXT09InNlZWsiIHRoZW4KbHVhamF2YS5nZXRJZFZpZXcoayk6c2V0UHJvZ3Jlc3NEcmF3YWJsZSggZ2V0VmVydGljYWxCRyh75o6n5Lu26aKc6ImyLOaOp+S7tuminOiJsn0sNDUpKQplbmQKZW5kCmVuZAplbmQpCmVuZApjdXJyZW50SW5kZXggPSAxCgotLSDlrprkuYnkuIDkuKrlh73mlbDmnaXmiZPljbDlvZPliY3pgY3ljobliLDnmoR0YWJsZemhue+8jOW5tuabtOaWsOe0ouW8leS9jee9rgpmdW5jdGlvbiDpooTnva7popzoibIoKQotLSDojrflj5blvZPliY3pgY3ljobliLDnmoTpobkKbG9jYWwgY3VycmVudEl0ZW0gPSDpopzoibLooahbY3VycmVudEluZGV4XQoKLS0g5omT5Y2w5b2T5YmN6aG5CmNoYW5nZUNvbG9yKGN1cnJlbnRJdGVtKQoKLS0g5pu05paw57Si5byV5L2N572uCmN1cnJlbnRJbmRleCA9IGN1cnJlbnRJbmRleCArIDEKCi0tIOWmguaenOe0ouW8leW3sue7j+i+vuWIsOacgOWkp+WAvO+8jOWImemHjee9ruS4ujHvvIzlm57liLDnrKzkuIDpobkKaWYgY3VycmVudEluZGV4ID4gI+minOiJsuihqCB0aGVuCmN1cnJlbnRJbmRleCA9IDEKZW5kCmVuZApmdW5jdGlvbiBjaGFuZ2FuLmltYWdlKGltZyxoZWlnaHQsd2lkdGgscGFkLGZ1bmMpCmlmIG5vdCBmdW5jIHRoZW4gZnVuYz1mdW5jdGlvbigpIGVuZCBlbmQKaWYgbm90IHBhZCB0aGVuIHBhZD0iMGRwIiBlbmQKaWYgbm90IGhlaWdodCB0aGVuIGhlaWdodD0iODBkcCIgZW5kCmlmIG5vdCB3aWR0aCB0aGVuIHdpZHRoPSI4MGRwIiBlbmQKcmV0dXJuIGx1YWphdmEubG9hZGxheW91dCh7CkxpbmVhckxheW91dCwKbGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiwKbGF5b3V0X3dpZHRoPSJmaWxsX3BhcmVudCIsCmdyYXZpdHk9ImNlbnRlciIsCnsKSW1hZ2VWaWV3LApsYXlvdXRfaGVpZ2h0PWhlaWdodCwKbGF5b3V0X3dpZHRoPXdpZHRoLApwYWRkaW5nPXBhZCwKc3JjPeiOt+WPluWbvueJhyhpbWcpLApvbkNsaWNrPWZ1bmN0aW9uKCkgbHVhamF2YS5uZXdUaHJlYWQoZnVuYyk6c3RhcnQoKSBlbmQsCn19KQoKZW5kCmZ1bmN0aW9uIGNoYW5nYW4uZWRpdCAobmFtZSAsIGhpbnQpCl9FTlYgW25hbWVdID0gbmFtZS4uZ3VpZCAoKQppZiBub3QgaGludCB0aGVuCmhpbnQgPSBuYW1lCmVuZApyZXN0ID0gbHVhamF2YS5sb2FkbGF5b3V0ICggewpMaW5lYXJMYXlvdXQgLApsYXlvdXRfd2lkdGggPSAnZmlsbF9wYXJlbnQnICwKewpMaW5lYXJMYXlvdXQgLApsYXlvdXRfd2lkdGggPSAnZmlsbF9wYXJlbnQnICwKbGF5b3V0X2hlaWdodCA9ICI0MGRwIiAsCmxheW91dF9tYXJnaW5Ub3AgPSAiNWRwIiAsCmxheW91dF9tYXJnaW5Cb3R0b20gPSAiNWRwIiAsCmxheW91dF9tYXJnaW5MZWZ0ID0gIjBkcCIgLApsYXlvdXRfbWFyZ2luUmlnaHQgPSAiMGRwIiAsCmdyYXZpdHkgPSAiY2VudGVyX3ZlcnRpY2FsIiAsCnsKRWRpdFRleHQgLApiYWNrZ3JvdW5kID0gbHVhamF2YS5sb2FkbGF5b3V0IHsKR3JhZGllbnREcmF3YWJsZSAsCmNvbG9yID0gMHhmZmZmZmZmZiAsCmNvcm5lclJhZGl1cyA9IDE1Cn0gLHBhZGRpbmcgPSB7CiIwZHAiLCIwZHAiLCI2ZHAiLCIwZHAiCn0sCmdyYXZpdHkgPSAiY2VudGVyIiAsCmhpbnQgPSBoaW50ICwKdGV4dENvbG9yPTB4ZmYwMDAwMDAsCnRleHRTaXplID0gIjEzc3AiLApsYXlvdXRfaGVpZ2h0ID0gIjQwZHAiICwKbGF5b3V0X21hcmdpbkJvdHRvbSA9ICItMmRwIiwKaWQ9bHVhamF2YS5uZXdJZChfRU5WIFtuYW1lXSksCmxheW91dF93aWR0aCA9ICdmaWxsJyAsCgp9Cn0KfSkKbHVhamF2YS5nZXRJZFZhbHVlKF9FTlYgW25hbWVdKTpzZXRIaW50VGV4dENvbG9yKDB4ZmY1NDU0NTQpCnJldHVybiByZXN0CmVuZApmdW5jdGlvbiBjaGFuZ2FuLmdldGVkaXQgKG5hbWUpCmVkaXQgPSB0b3N0cmluZyAobHVhamF2YS5nZXRJZFZhbHVlIChfRU5WIFtuYW1lXSkgOiBnZXRUZXh0ICgpKQpyZXR1cm4gZWRpdAplbmQKZnVuY3Rpb24gY2hhbmdhbi5zZXRlZGl0IChuYW1lICwgdHh0KQp0eHQgPSB0b3N0cmluZyAodHh0KQpsdWFqYXZhLnJ1blVpVGhyZWFkIChmdW5jdGlvbiAoKQpsdWFqYXZhLmdldElkVmFsdWUgKF9FTlYgW25hbWVdKSA6IHNldFRleHQgKHR4dCkKZW5kCgopCmVuZApjaGF6aGk9e30gY2hhanY9e30KZnVuY3Rpb24gY2hhbmdhbi5zZWVrKG5hbWUsYmlhbixzbWluLHNtYXgsbm93cykKX0VOVltiaWFuXSA9bm93cwpzbWluPXRvbnVtYmVyKHNtaW4pIHNtYXg9dG9udW1iZXIoc21heCkKaWYgX0VOVltiaWFuXSA9PSBuaWwgdGhlbiBfRU5WW2JpYW5dID0gMS4wIGVuZAppZiBub3QgbmFtZSB0aGVuIG5hbWUgPSAi5pyq6K6+572uIiBlbmQKbG9jYWwgbmFtZXMgPSBuYW1lLi5ndWlkKCkKa2lkPWd1aWQoKS4uInNrIgpyZXN0ID0gbHVhamF2YS5sb2FkbGF5b3V0KHsKTGluZWFyTGF5b3V0LApsYXlvdXRfd2lkdGggPSAnbWF0Y2hfcGFyZW50JywKbGF5b3V0X2hpZ2h0ID0gIm1hdGNoX3BhcmVudCIsCnsKTGluZWFyTGF5b3V0LAppZD1sdWFqYXZhLm5ld0lkKGtpZCksCmxheW91dF93aWR0aCA9ICdtYXRjaF9wYXJlbnQnLApsYXlvdXRfaGlnaHQgPSAibWF0Y2hfcGFyZW50IiwKbGF5b3V0X21hcmdpblRvcCA9ICIzZHAiLApsYXlvdXRfbWFyZ2luQm90dG9tID0gIjNkcCIsCmxheW91dF9tYXJnaW5MZWZ0ID0gIjVkcCIgLApsYXlvdXRfbWFyZ2luUmlnaHQgPSAiNWRwIiAsCmdyYXZpdHkgPSAiY2VudGVyX3ZlcnRpY2FsIiwKZWxldmF0aW9uPSczZHAnLApiYWNrZ3JvdW5kID0gbHVhamF2YS5sb2FkbGF5b3V0IHsKR3JhZGllbnREcmF3YWJsZSAsCmNvbG9yID0gMHhmZmZmZmZmZiAsCmNvcm5lclJhZGl1cyA9IDE1Cn0gLHBhZGRpbmcgPSB7CiIwZHAiLCIwZHAiLCI2ZHAiLCIwZHAiCn0sCnsKVGV4dFZpZXcsCnBhZGRpbmc9eyI1ZHAiLCIxMGRwIiwiMGRwIiwiMTBkcCIsfSwKZ3Jhdml0eSA9ICJ0b3AiLAp0ZXh0Q29sb3I9JzB4ZmYwMDAwMDAnLAp0ZXh0ID0gbmFtZSwKaWQgPSBsdWFqYXZhLm5ld0lkKG5hbWVzKSwKbGF5b3V0X3dpZHRoID0gJzEwMGRwJywKLS1sYXlvdXRfbWFyZ2luTGVmdCA9ICI1ZHAiLApsYXlvdXRfbWFyZ2luUmlnaHQgPSAiMGRwIiwKfSwKewpTbGlkZXIsCnRodW1iSGVpZ2h0PScyM2RwJywKdHJhY2tIZWlnaHQ9JzE1ZHAnLAp0cmFja1N0b3BJbmRpY2F0b3JTaXplPScwZHAnLAp0aWNrVmlzaWJsZT1mYWxzZSwKX19vbkZpbmlzaD1mdW5jdGlvbih2KQp2OnNldFRyYWNrQWN0aXZlVGludExpc3QoQ29sb3JTdGF0ZUxpc3Qoe3t9LH0sezB4ZmYwMDAwMDB9KSkKdjpzZXRUcmFja0luYWN0aXZlVGludExpc3QoQ29sb3JTdGF0ZUxpc3Qoe3t9LH0sezB4ZmYwMDAwMDB9KSkKdjpzZXRUaHVtYlRpbnRMaXN0KENvbG9yU3RhdGVMaXN0KHt7fSx9LHsweGZmMDAwMDAwfSkpCmx1YWphdmEuc2V0SW50ZXJmYWNlKHYsICdhZGRPbkNoYW5nZUxpc3RlbmVyJywKZnVuY3Rpb24oU2Vla0JhciwgdmFyMiwgdmFyMykKX0VOVltiaWFuXSA9IHZhcjIKZW5kKQplbmQsCmxheW91dF93aWR0aCA9ICdtYXRjaF9wYXJlbnQnLAppZD1sdWFqYXZhLm5ld0lkKG5hbWUuLiJzZWVrYmFyIiksCnZhbHVlRnJvbT1zbWluLAp2YWx1ZVRvPXNtYXgsCnZhbHVlPW5vd3MsCnN0ZXBTaXplPTEuMCwKfQp9fSkKbHVhamF2YS5nZXRJZFZpZXcobmFtZS4uJ3NlZWtiYXInKTpzZXRIYWxvUmFkaXVzKDEwKS0t5ouW5Yqo5pe26IOM5pmv6Zi05b2x5aSn5bCPCnJldHVybiByZXN0CmVuZAoKCgppbXBvcnQoJ2FuZHJvaWQuY29udGVudC5yZXMuQ29sb3JTdGF0ZUxpc3QnKQpsb2NhbCBzd2Z1bmNzPXt9CnN3Y0RyYXc9Q29sb3JTdGF0ZUxpc3Qoewp7YW5kcm9pZC5SLmF0dHIuc3RhdGVfY2hlY2tlZH0sCnstYW5kcm9pZC5SLmF0dHIuc3RhdGVfY2hlY2tlZH0sCn0sIHsKMHhmZjAwNjJmZiwKMHgzM2Q3ZDdkNywKfSkKc3djVGh1bWI9Q29sb3JTdGF0ZUxpc3Qoewp7YW5kcm9pZC5SLmF0dHIuc3RhdGVfY2hlY2tlZH0sCnthbmRyb2lkLlIuYXR0ci5zdGF0ZV9wcmVzc2VkfSwKey1hbmRyb2lkLlIuYXR0ci5zdGF0ZV9wcmVzc2VkfSwKfSwgewoweGZmZmZmZmZmLAoweGZmMDAwMDAwLAoweGZmMDAwMDAwCn0pCnN3ZnVuY3M9e30KZnVuY3Rpb24gY2hhbmdhbi50ZXh0KHRleHQsY29sb3Isc2l6ZSxpc2p6KQppZiBub3QgY29sb3IgdGhlbiBjb2xvcj0iIzE2MTYxNiIgZW5kCmlmIGlzanogdGhlbgpyZXR1cm4gbHVhamF2YS5sb2FkbGF5b3V0KAp7ClRleHRWaWV3LAp0ZXh0PXRleHQsCnRleHRDb2xvcj1jb2xvciwKdGV4dFNpemU9c2l6ZSwKZ3Jhdml0eT0iY2VudGVyIiwKbGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiwKbGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiLAphdXRvU2l6ZVRleHRUeXBlPSJ1bmlmb3JtIiwKfSkKZWxzZQpyZXR1cm4gbHVhamF2YS5sb2FkbGF5b3V0KHsKVGV4dFZpZXcsCnRleHQ9dGV4dCwKdGV4dENvbG9yPWNvbG9yLAp0ZXh0U2l6ZT1zaXplLApsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLApsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIsCmF1dG9TaXplVGV4dFR5cGU9InVuaWZvcm0iLAp9KQplbmQKZW5kCmZ1bmN0aW9uIGdldFNoYXBlOCgpCmppYW5iaWFucyA9IGx1YWphdmEubmV3KEdyYWRpZW50RHJhd2FibGUpCmppYW5iaWFuczpzZXRDb3JuZXJSYWRpdXMoMTApCmppYW5iaWFuczpzZXRHcmFkaWVudFR5cGUoR3JhZGllbnREcmF3YWJsZS5MSU5FQVJfR1JBRElFTlQpCmppYW5iaWFuczpzZXRDb2xvcnMoewoweGZmMDAwMDAwLDB4ZmZmZmZmZmYsCn0pCmppYW5iaWFuczpzZXRPcmllbnRhdGlvbihHcmFkaWVudERyYXdhYmxlLk9yaWVudGF0aW9uLkJMX1RSKQpyZXR1cm4gamlhbmJpYW5zCmVuZApwZTAgPSBnZXRTaGFwZTgoKQpmdW5jdGlvbiBjaGFuZ2FuLmxpbmUoKQpyZXR1cm4gbHVhamF2YS5sb2FkbGF5b3V0KHsKTGluZWFyTGF5b3V0LApsYXlvdXRfd2lkdGggPSAiZmlsbF9wYXJlbnQiLApsYXlvdXRfaGVpZ2h0ID0gIjJkcCIsCmJhY2tncm91bmQgPSBwZTAsCn0pCmVuZAoKCgpmdW5jdGlvbiBodW9xdSh0eHQpCnJldHVybiB0YWJsZS5qc29uKGdnLm1ha2VSZXF1ZXN0KHd5eWdldCAuLiAic29uZy91cmwvdjE/aWQ9IiAuLiB0eHQgLi4gIiZsZXZlbD1zdGFuZGFyZCIpLmNvbnRlbnQpCmVuZApmdW5jdGlvbiBzb3V5eSh0eHQpCnJldHVybiB0YWJsZS5qc29uKApnZy5tYWtlUmVxdWVzdCgiaHR0cDovL211c2ljLjE2My5jb20vYXBpL3NlYXJjaC9nZXQ/cz0iIC4uIHR4dCAuLiAiJnR5cGU9MSZvZmZzZXQ9MCZ0b3RhbD10cnVlJmxpbWl0PTEwIikuY29udGVudAopCmVuZApmdW5jdGlvbiBkZXZlbG8odGFiYikKZ2cuYWxlcnQodG9zdHJpbmcodGFiYikpCmVuZApmdW5jdGlvbiBkZXZlbG8yKHRhYmIpCmdnLmNvcHlUZXh0KHRvc3RyaW5nKHRhYmIpKQplbmQKZnVuY3Rpb24gdGFibGVrSW4odGJsLCBrZXkpCmlmIHRibCA9PSBuaWwgdGhlbgpyZXR1cm4gZmFsc2UKZW5kCmZvciBrLCB2IGluIHBhaXJzKHRibCkgZG8KaWYgayA9PSBrZXkgdGhlbgpyZXR1cm4gdHJ1ZQplbmQKZW5kCnJldHVybiBmYWxzZQplbmQKZnVuY3Rpb24gZ2V0YmcoKQpqaWFuYmlhbnMgPSBsdWFqYXZhLm5ldyhHcmFkaWVudERyYXdhYmxlKQpqaWFuYmlhbnM6c2V0Q29ybmVyUmFkaXVzKDUpCmppYW5iaWFuczpzZXRHcmFkaWVudFR5cGUoR3JhZGllbnREcmF3YWJsZS5MSU5FQVJfR1JBRElFTlQpCmppYW5iaWFuczpzZXRDb2xvcnMoeyAweEZGRkZGRkZGLCAweEZGRkZGRkZGIH0pCmppYW5iaWFuczpzZXRTdHJva2UoMiwgIjB4MTEwMDAwMDAiKSAtLei+ueahhuWuveW6puWSjOminOiJsgotLWVsZXZhdGlvbj0nM2RwJywKc2VsZWN0b3IgPSBsdWFqYXZhLmdldFN0YXRlTGlzdERyYXdhYmxlKCkKc2VsZWN0b3I6YWRkU3RhdGUoCnsKYW5kcm9pZC5SLmF0dHIuc3RhdGVfcHJlc3NlZCwKfSwKbHVhamF2YS5sb2FkbGF5b3V0KHsKR3JhZGllbnREcmF3YWJsZSwKY29sb3IgPSAiIzB4MTEwMDAwMDAiLApjb3JuZXJSYWRpdXMgPSAxMCwKfSkKKSAtLSDngrnlh7vml7blgJnnmoTog4zmma8Kc2VsZWN0b3I6YWRkU3RhdGUoewotYW5kcm9pZC5SLmF0dHIuc3RhdGVfcHJlc3NlZCwKfSwgamlhbmJpYW5zKSAtLSDmsqHngrnlh7vnmoTog4zmma8KcmV0dXJuIHNlbGVjdG9yCmVuZApmdW5jdGlvbiBzZWFyY2htdXNpYygpCmlmIG5vdCBsYXN0dG0gdGhlbgpsYXN0dG0gPSBvcy50aW1lKCkKZWxzZQppZiBvcy50aW1lKCkgLSBsYXN0dG0gPD0gNSB0aGVuCmdnLmFsZXJ0KCLor7flnKgiIC4uICg1IC0gKG9zLnRpbWUoKSAtIGxhc3R0bSkpIC4uICLnp5LlhrfljbTlkI7mkJzntKIiKQpyZXR1cm4gMAplbmQKZW5kCmlmIG5vdCB3cnl0IHRoZW4KZWxzZQpydW5uYWJsZSA9IGx1YWphdmEuZ2V0UnVubmFibGUoZnVuY3Rpb24oKQpsdWFqYXZhLmdldElkVmlldygi5pCc57Si5YiX6KGoIik6cmVtb3ZlVmlldyh3eXIpCmVuZCkKaGFuZGxlciA9IGx1YWphdmEuZ2V0SGFuZGxlcigpCmhhbmRsZXI6cG9zdChydW5uYWJsZSkKZW5kCm11c3R4dCA9IGx1YWphdmEuZ2V0SWRWaWV3KCLmkJzntKIiKTpnZXRUZXh0KCkKaWYgc3RyaW5nLmxlbih0b3N0cmluZyhtdXN0eHQpKSA8PSAyIG9yIHRvc3RyaW5nKG11c3R4dCkgPT0gbmlsIHRoZW4KZ2cuYWxlcnQoIuiHs+Wwkei+k+WFpTLkuKrlrZfnrKYiKQpyZXR1cm4gMAplbmQKbXVzdHh0ID0gdG9zdHJpbmcobXVzdHh0KQpsdWFqYXZhLnJ1blVpVGhyZWFkKGZ1bmN0aW9uKCkKbHVhamF2YS5nZXRJZFZpZXcoImp6eiIpOnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKQpsdWFqYXZhLmdldElkVmlldygic3R4dCIpOnNldFZpc2liaWxpdHkoVmlldy5HT05FKQplbmQpCmxhc3R0bSA9IG9zLnRpbWUoKQptdXN0YWJsZSA9IHNvdXl5KG11c3R4dCkKbXVzdGFibGUgPSBtdXN0YWJsZS5yZXN1bHQuc29uZ3MKCi0tIHByaW50KG11c3RhYmxlKQoKbXVzbmFtZXMgPSB7fQptdXNpZHMgPSB7fQptdXNhcnRzID0ge30KbXVzaWN0YWJsZSA9IHt9CmZvciBrLCB2IGluIHBhaXJzKG11c3RhYmxlKSBkbwptdXNpY3RhYmxlWyNtdXNpY3RhYmxlICsgMV0gPSB2CmVuZAotLSBnZy5hbGVydCh0b3N0cmluZyhtdXN0YWJsZSkpCi0tIGdnLmFsZXJ0KHRvc3RyaW5nKG11c2ljdGFibGUpKQotLSBnZy5jb3B5VGV4dCh0b3N0cmluZyhtdXN0YWJsZSkpCi0tIGdnLmFsZXJ0KCNtdXNpY3RhYmxlKQp3cmZ1biA9IHt9CndyeXQgPSB7CkxpbmVhckxheW91dCwKaWQgPSBsdWFqYXZhLm5ld0lkKCLmkJzntKLnu5PmnpwiKSwKbGF5b3V0X21hcmdpblRvcCA9ICI1ZHAiLApsYXlvdXRfd2lkdGggPSAibWF0Y2hfcGFyZW50IiwKbGF5b3V0X21hcmdpbkJvdHRvbSA9ICI1ZHAiLApvcmllbnRhdGlvbiA9ICJ2ZXJ0aWNhbCIsCn0KZm9yIGkgPSAxLCAjbXVzaWN0YWJsZSBkbwptdXNpZCA9IG11c2ljdGFibGVbaV0uaWQKbXVzaWRzWyNtdXNpZHMgKyAxXSA9IG11c2lkCm11c25hbWUgPSBtdXNpY3RhYmxlW2ldLm5hbWUKaWYgdGFibGVrSW4obXVzaWN0YWJsZVtpXSwgInRyYW5zTmFtZXMiKSB+PSBmYWxzZSB0aGVuCm11c25hbWUgPSBtdXNuYW1lIC4uICJcbigiIC4uIG11c2ljdGFibGVbaV0udHJhbnNOYW1lc1swXSAuLiAiKSIKZW5kCm11c25hbWVzWyNtdXNuYW1lcyArIDFdID0gbXVzbmFtZQptdXNhcnQgPSBtdXNpY3RhYmxlW2ldLmFydGlzdHNbMF0ubmFtZQptdXNhcnRzWyNtdXNhcnRzICsgMV0gPSBtdXNhcnQKd3J5dFsjd3J5dCArIDFdID0gewpMaW5lYXJMYXlvdXQsCm9yaWVudGF0aW9uID0gInZlcnRpY2FsIiwKbGF5b3V0X21hcmdpblRvcCA9ICIyZHAiLApsYXlvdXRfbWFyZ2luQm90dG9tID0gIjJkcCIsCmxheW91dF9tYXJnaW5MZWZ0ID0gIjVkcCIsCmxheW91dF9tYXJnaW5SaWdodCA9ICI1ZHAiLApsYXlvdXRfd2lkdGggPSAibWF0Y2hfcGFyZW50IiwKYmFja2dyb3VuZCA9IGdldGJnKCksCmlkID0gbHVhamF2YS5uZXdJZCgi6Z+zIiAuLiBtdXNpZCksCm9uQ2xpY2sgPSBmdW5jdGlvbigpCnRocmVhZCA9IGx1YWphdmEuZ2V0VGhyZWFkKGZ1bmN0aW9uKCkKYm9mYW5nKG11c25hbWUsIG11c2lkKQplbmQpCnRocmVhZDpzdGFydCgpCmVuZCwKewpUZXh0VmlldywKbGF5b3V0X21hcmdpblRvcCA9ICI1ZHAiLAp0ZXh0U2l6ZSA9ICIxM3NwIiwKdGV4dENvbG9yID0gIiM1QzZCQzAiLApsYXlvdXRfbWFyZ2luQm90dG9tID0gIjBkcCIsCnRleHQgPSBtdXNuYW1lLApsYXlvdXRfaGlnaHQgPSAiMTBkcCIsCmxheW91dF93aWR0aCA9ICJtYXRjaF9wYXJlbnQiLApncmF2aXR5ID0gImNlbnRlciIsCn0sCnsKVGV4dFZpZXcsCmxheW91dF9tYXJnaW5Ub3AgPSAiMGRwIiwKdGV4dENvbG9yID0gIiNGRjdGN0Y3RiIsCnRleHRTaXplID0gIjExc3AiLApsYXlvdXRfbWFyZ2luQm90dG9tID0gIjVkcCIsCnRleHQgPSBtdXNhcnQsCmxheW91dF9oaWdodCA9ICIxMGRwIiwKbGF5b3V0X3dpZHRoID0gIm1hdGNoX3BhcmVudCIsCmdyYXZpdHkgPSAiY2VudGVyIiwKfSwKfQp3cnl0WyN3cnl0XS5vbkNsaWNrID0gZnVuY3Rpb24oKQoJCQktLSAoZnVuY3Rpb24oKQoJCQktLSAJYm9mYW5nKG11c25hbWVzW2ldIC4uIG11c2FydHNbaV0sIG11c2lkc1tpXSkKCQkJLS0gZW5kKTpzdGFydCgpCgkJCWx1YWphdmEuc3RhcnRUaHJlYWQoZnVuY3Rpb24oKQoJCQkJYm9mYW5nKG11c25hbWVzW2ldIC4uIG11c2FydHNbaV0sIG11c2lkc1tpXSkKCQkJCSB0aW1lX01VU0lDOnNldFRleHQobXVzbmFtZXNbaV0pCgkJCQkgIHRvcF9tdXNpYzpzZXRUZXh0KG11c25hbWVzW2ldKQoJCQkJCgkJCWVuZCkKCQllbmQKCWVuZAoJd3lyID0gbHVhamF2YS5sb2FkbGF5b3V0KHdyeXQpCnd5ciA9IGx1YWphdmEubG9hZGxheW91dCh3cnl0KQpydW5uYWJsZSA9IGx1YWphdmEuZ2V0UnVubmFibGUoZnVuY3Rpb24oKQpsdWFqYXZhLmdldElkVmlldygi5pCc57Si5YiX6KGoIik6YWRkVmlldyh3eXIpCmVuZCkKaGFuZGxlciA9IGx1YWphdmEuZ2V0SGFuZGxlcigpCmhhbmRsZXI6cG9zdChydW5uYWJsZSkKbHVhamF2YS5ydW5VaVRocmVhZChmdW5jdGlvbigpCmx1YWphdmEuZ2V0SWRWaWV3KCJqenoiKTpzZXRWaXNpYmlsaXR5KFZpZXcuR09ORSkKbHVhamF2YS5nZXRJZFZpZXcoInN0eHQiKTpzZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSkKZW5kKQplbmQKZnVuY3Rpb24gYm9mYW5nKGdxbXosIGdkbW4pCmx1YWphdmEucnVuVWlUaHJlYWQoZnVuY3Rpb24oKQpsdWFqYXZhLmdldElkVmlldygi5pCc57Si57uT5p6cIik6c2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpCmx1YWphdmEuZ2V0SWRWaWV3KCLliqDovb0iKTpzZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSkKZW5kKQpnZy5wbGF5TXVzaWMoImh0dHA6Ly9tdXNpYy4xNjMuY29tL3NvbmcvbWVkaWEvb3V0ZXIvdXJsP2lkPSIgLi4gZ2RtbiAuLiAiLm1wMyIgb3IgaHVvcXUoZ2RtbikuZGF0YVswXS51cmwpCmdnLnNsZWVwKDIwMDApCmx1YWphdmEucnVuVWlUaHJlYWQoZnVuY3Rpb24oKQpsdWFqYXZhLmdldElkVmlldygi5Yqg6L29Iik6c2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpCmx1YWphdmEuZ2V0SWRWaWV3KCLmkJzntKLnu5PmnpwiKTpzZXRWaXNpYmlsaXR5KFZpZXcuVklTSUJMRSkKZW5kKQplbmQKc3R4dCA9IHsKVGV4dFZpZXcsCnRleHQgPSAi5pCc57SiIiwKdGV4dENvbG9yID0gIiNGRjAwMDAwMCIsCmJhY2tncm91bmQgPSBnZXRiZygpLApsYXlvdXRfaGVpZ2h0ID0gIm1hdGNoX3BhcmVudCIsCnZpc2liaWxpdHkgPSAidmlzaWJsZSIsCmdyYXZpdHkgPSAiY2VudGVyIiwKbGF5b3V0X21hcmdpblJpZ2h0ID0gIjVkcCIsCmlkID0gbHVhamF2YS5uZXdJZCgic3R4dCIpLApsYXlvdXRfbWFyZ2luTGVmdCA9ICIzZHAiLAp0ZXh0U2l6ZSA9ICIxM3NwIiwKcGFkZGluZyA9IHsgIjEzLjVkcCIsICIwZHAiLCAiMTMuNWRwIiwgIjBkcCIgfSwKb25DbGljayA9IGZ1bmN0aW9uKCkKdGhyZWFkID0gbHVhamF2YS5nZXRUaHJlYWQoZnVuY3Rpb24oKQpzZWFyY2htdXNpYygpCmVuZCkKdGhyZWFkOnN0YXJ0KCkKZW5kLAp9Cmp6eiA9IHsKVGV4dFZpZXcsCnRleHQgPSAi5Yqg6L295LitIiwKdmlzaWJpbGl0eSA9ICJnb25lIiwKaWQgPSBsdWFqYXZhLm5ld0lkKCJqenoiKSwKbGF5b3V0X21hcmdpbkxlZnQgPSAiMTBkcCIsCnRleHRTaXplID0gIjEyc3AiLAp0ZXh0Q29sb3IgPSAiIzAwMDAwMCIsCn0KamlheiA9IHsKTGluZWFyTGF5b3V0LApvcmllbnRhdGlvbiA9ICJ2ZXJ0aWNhbCIsCnZpc2liaWxpdHkgPSAiZ29uZSIsCmlkID0gbHVhamF2YS5uZXdJZCgi5Yqg6L29IiksCnsKVGV4dFZpZXcsCnRleHQgPSAi5q2j5Zyo5Yqg6L295q2M5puy6LWE5rqQIiwKdGV4dFNpemUgPSAiMTVzcCIsCmdyYXZpdHkgPSAiY2VudGVyIiwKdGV4dENvbG9yID0gIiMwMDAwMDAiLAp9LAp9Cnd5eWxvZyA9IGx1YWphdmEubG9hZGxheW91dCh7CkxpbmVhckxheW91dCwKb3JpZW50YXRpb24gPSAidmVydGljYWwiLApsYXlvdXRfd2lkdGggPSAibWF0Y2hfcGFyZW50IiwKewpTY3JvbGxWaWV3LApsYXlvdXRfaGlnaHQgPSAibWF0Y2hfcGFyZW50IiwKZ3Jhdml0eSA9ICJjZW50ZXJfaG9yaXpvbnRhbCIsCmxheW91dF93aWR0aCA9ICJtYXRjaF9wYXJlbnQiLAp7CkxpbmVhckxheW91dCwKbGF5b3V0X3dpZHRoID0gIm1hdGNoX3BhcmVudCIsCnsKTGluZWFyTGF5b3V0LApwYWRkaW5nID0gIjRkcCIsCmdyYXZpdHkgPSAiY2VudGVyIiwKb3JpZW50YXRpb24gPSAidmVydGljYWwiLAppZCA9IGx1YWphdmEubmV3SWQoIuWbuuWumumfs+S5kCIpLAp9LAoKaWQgPSBsdWFqYXZhLm5ld0lkKCLmkJzntKLliJfooagiKSwKb3JpZW50YXRpb24gPSAidmVydGljYWwiLApsYXlvdXRfd2lkdGggPSAibWF0Y2hfcGFyZW50IiwKZ3Jhdml0eSA9ICJjZW50ZXJfaG9yaXpvbnRhbCIsCgp7CkxpbmVhckxheW91dCwKb3JpZW50YXRpb24gPSAiaG9yaXpvbnRhbCIsCmxheW91dF93aWR0aCA9ICJtYXRjaF9wYXJlbnQiLAoKewpFZGl0VGV4dCwKaGludCA9ICLmkJzntKLmrYzmm7LlkI3np7AiLAp0ZXh0Q29sb3IgPSAiIzAwMDAwMCIsCmlkID0gbHVhamF2YS5uZXdJZCgi5pCc57SiIiksCmJhY2tncm91bmQgPSBnZXRiZygpLApsYXlvdXRfbWFyZ2luTGVmdCA9ICI1ZHAiLApmb2N1c2FibGUgPSB0cnVlLApmb2N1c2FibGVJblRvdWNoTW9kZSA9IHRydWUsCnRleHRTaXplID0gIjEzc3AiLApzaW5nbGVMaW5lID0gInRydWUiLApsYXlvdXRfd2VpZ2h0ID0gMSwKZ3Jhdml0eSA9ICJjZW50ZXIiLApsYXlvdXRfd2lkdGggPSAibWF0Y2hfcGFyZW50IiwKX19vbkZpbmlzaCA9IGZ1bmN0aW9uKHYpCnY6c2V0SGludFRleHRDb2xvcigweGZmNjQ2NDY0KQp2OnJlcXVlc3RGb2N1cygpCmVuZCwKfSwKc3R4dCwKanp6LAp9LApqaWF6LAp9LAp9LAp9KQoKZnVuY3Rpb24gY2hhbmdhbi5jaGlwKGNrbGlzdCkKCWlmICNja2xpc3Q9PTAgdGhlbiByZXR1cm4gbmlsIGVuZAoJbG9jYWwgcmVzdCA9IHsKCQlMaW5lYXJMYXlvdXQsCgkJbGF5b3V0X3dpZHRoID0gJ2ZpbGxfcGFyZW50JywKCQlsYXlvdXRfaGVpZ2h0ID0gIndyYXBfY29udGVudCIsCgkJZ3Jhdml0eSA9ICJjZW50ZXIiLAoJCW9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIsCgkJCgl9CgoJZm9yIGkgPSAxLCAjY2tsaXN0LDIgZG8KCWxvY2FsIHRlbXBUYWJsZSA9IHtMaW5lYXJMYXlvdXQsCgkJbGF5b3V0X3dpZHRoID0gJ2ZpbGxfcGFyZW50JywKCQlsYXlvdXRfaGVpZ2h0ID0gIndyYXBfY29udGVudCIsCgkJZ3Jhdml0eSA9ICJsZWZ0IiwKCQlvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKCX0KCWZvciBqID0gMCwgMSBkbwoJCWlmIGNrbGlzdFtpICsgal0gfj0gbmlsIHRoZW4KCQlsb2NhbCBuYW1lID0gY2tsaXN0W2kgKyBqXVsxXQoJCWxvY2FsIGZ1bmMxID0gY2tsaXN0W2kgKyBqXVsyXQoJCWxvY2FsIGZ1bmMyID0gY2tsaXN0W2kgKyBqXVszXQoJCWlmIG5vdCBuYW1lIHRoZW4gbmFtZSA9ICLmnKrorr7nva4iIGVuZAoJCQlyc3R0ID0gY2hhbmdhbi5pbnRjaGlwKG5hbWUsZnVuYzEsZnVuYzIpCgkJCXRhYmxlLmluc2VydCh0ZW1wVGFibGUsIHJzdHQpCgkJZWxzZQoJCQl0YWJsZS5pbnNlcnQodGVtcFRhYmxlLCB7TGluZWFyTGF5b3V0LAoJCQlsYXlvdXRfd2lkdGggPSAnbWF0Y2hfcGFyZW50JywKCQkJbGF5b3V0X3dlaWdodD0xLH0pCgkJZW5kCgllbmQKCXRhYmxlLmluc2VydChyZXN0LCB0ZW1wVGFibGUpCgllbmQKCXJldHVybiBsdWFqYXZhLmxvYWRsYXlvdXQocmVzdCkKZW5kCmZ1bmN0aW9uIOW8gOWFsyhuYW1lLGZ1bmMxLGZ1bmMyKQoJbG9jYWwgbG9jYWxuYW1lPW5hbWUKCWlmIGZ1bmMxID09IG5pbCB0aGVuIGZ1bmMxID0gZnVuY3Rpb24oKSBlbmQgZW5kCglpZiBmdW5jMiA9PSBuaWwgdGhlbiBmdW5jMiA9IGZ1bmN0aW9uKCkgZW5kIGVuZAoJaWYgdHlwZShmdW5jMSkgPT0gImZ1bmN0aW9uIiB0aGVuCgkJcmV0dXJuIGZ1bmN0aW9uKCkKCQkJbmFtZXJzID0gX0VOVltuYW1lXQoJCQlpZiBuYW1lcnMgfj0gIuW8gCIgdGhlbgoJCQkJX0VOVltuYW1lXSA9ICLlvIAiCgoKCQkJCXBjYWxsKGZ1bmMxKQoJCQkJZWxzZQoJCQkJX0VOVltuYW1lXSA9ICLlhbMiCgoKCQkJCXBjYWxsKGZ1bmMyKQoJCQllbmQKCgkJZW5kCgllbmQKZW5kCmNoaXBzPXt9CmZ1bmN0aW9uIGNoYW5nYW4uaW50Y2hpcChuYW1lLGZ1bmMxLGZ1bmMyLHNpemUpCgluaWQgPSBuYW1lLi5ndWlkKCkKCWxuYW1lPW5hbWUKCWxvY2FsIGZ1bmMgPSDlvIDlhbMobmlkLGZ1bmMxLGZ1bmMyLGxuYW1lKQoJaWYgbm90IG5hbWUgdGhlbiBuYW1lID0gIuacquiuvue9riIgZW5kCglJRCA9IG5hbWUuLmd1aWQoKQoJbG9jYWwgcmVzdCA9IHsKCQlMaW5lYXJMYXlvdXQsCgkJbGF5b3V0X3dpZHRoID0gJ21hdGNoX3BhcmVudCcsCgkJbGF5b3V0X3dlaWdodD0xLAoJCWxheW91dF9oZWlnaHQgPSAiNDJkcCIsCgkJbGF5b3V0X21hcmdpblRvcCA9ICIxZHAiLAoJCWxheW91dF9tYXJnaW5Cb3R0b20gPSAiMWRwIiwKCQlwYWRkaW5nID0gIjFkcCIsCgkJewoJCQlDaGlwR3JvdXAsCgkJCXBhZGRpbmc9IjNkcCIsCgkJCWxheW91dF93aWR0aCA9ICdmaWxsX3BhcmVudCcsCgkJCWxheW91dF9oZWlnaHQgPSAid3JhcF9jb250ZW50IiwKCQkJZ3Jhdml0eSA9ICJjZW50ZXJfdmVydGljYWwiLAoJCQl7CgkJCQlDaGlwLAogICAgbGF5b3V0X3dpZHRoID0gJ3dyYXBfY29udGVudCcsCglsYXlvdXRfaGVpZ2h0ID0gJzQwZHAnLCAgICAgICAgCiAgICBjaGVja2VkPSJ0cnVlIiwKICAgIHRleHQ9bmFtZSwgICAgCiAgICAKICAgIHNldENoZWNrYWJsZSA9IHRydWUsCiAgICBzZXRDaGlwSWNvblZpc2libGUgPSB0cnVlLCAtLeaYvuekumljb24KICAgc2V0Q2hpcEljb24gPSBsdWFqYXZhLmdldEJpdG1hcERyYXdhYmxlKGNoaXDlm77niYcpLAoJCQkJb25DbGljaz1mdW5jdGlvbigpCgkJCQkJbHVhamF2YS5uZXdUaHJlYWQoZnVuY3Rpb24oKQoJCQkJCQlwY2FsbChmdW5jKQoJCQkJCWVuZCk6c3RhcnQoKSBlbmQKCgkJfQoJfX0KCglyZXR1cm4gcmVzdAplbmQKZnVuY3Rpb24gY2hhbmdhbi50dXAoc3ZpZXcpCglsb2NhbCBsYXlvdXQ9ewoJCUdyaWRMYXlvdXQsCgkJY29sdW1uQ291bnQ9JzQnLAoJCWxheW91dF93aWR0aD0nbWF0Y2hfcGFyZW50JywKCQlsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiLAoJfQoJZm9yIGk9MSwjc3ZpZXcgZG8KCWxvY2FsIG5pZD1zdmlld1tpXVsi5ZCN5a2XIl0uLnN0cmluZy5yYW5kb21VVUlEKHRydWUpCgkJbGF5b3V0WyNsYXlvdXQrMV09ewoJCQlMaW5lYXJMYXlvdXQsCgkJCWxheW91dF93aWR0aD0nODVkcCcsCgkJCWxheW91dF9oZWlnaHQ9Ijg1ZHAiLAoJCQlvbkNsaWNrPWZ1bmN0aW9uKCkKCQkJCWx1YWphdmEubmV3VGhyZWFkKGZ1bmN0aW9uKCkKCQkJCQlpZiBfRU5WWyLnirbmgIEiLi5uaWRdIH49IHRydWUgdGhlbgoJCQkJCQlsdWFqYXZhLnJ1bk9uVWlUaHJlYWQoZnVuY3Rpb24oKQoJCQkJCQkJbHVhamF2YS5nZXRJZFZpZXcobmlkLi4iMSIpOnNldFZpc2liaWxpdHkoVmlldy5HT05FKQoJCQkJCQkJbHVhamF2YS5nZXRJZFZpZXcobmlkLi4iMiIpOnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKQoJCQkJCQllbmQpCgkJCQkJCXBjYWxsKHN2aWV3W2ldWyLlip/og73lvIAiXSkKCQkJCQkJX0VOVlsi54q25oCBIi4ubmlkXT10cnVlCgkJCQkJZWxzZQoJCQkJCQlsdWFqYXZhLnJ1bk9uVWlUaHJlYWQoZnVuY3Rpb24oKQoJCQkJCQkJbHVhamF2YS5nZXRJZFZpZXcobmlkLi4iMSIpOnNldFZpc2liaWxpdHkoVmlldy5WSVNJQkxFKQoJCQkJCQkJbHVhamF2YS5nZXRJZFZpZXcobmlkLi4iMiIpOnNldFZpc2liaWxpdHkoVmlldy5HT05FKQoJCQkJCQllbmQpCgkJCQkJCXBjYWxsKHN2aWV3W2ldWyLlip/og73lhbMiXSkKCQkJCQkJX0VOVlsi54q25oCBIi4ubmlkXT1mYWxzZQoJCQkJCWVuZAoJCQkJZW5kKTpzdGFydCgpCgkJCWVuZCwKCQkJewoJCQkJRnJhbWVMYXlvdXQsCgkJCQlsYXlvdXRfd2lkdGg9J21hdGNoX3BhcmVudCcsCgkJCQlsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiLAoJCQkJbGF5b3V0X21hcmdpbj0iN2RwIiwKCQkJCWVsZXZhdGlvbj0iM2RwIiwKCQkJCWJhY2tncm91bmQ9e0dyYWRpZW50RHJhd2FibGUsY29sb3I9MHhmZmZmZmZmZixjb3JuZXJSYWRpdXM9MjB9LAoJCQkJewoJCQkJCUltYWdlVmlldywKCQkJCQlwYWRkaW5nPSIxMGRwIiwKCQkJCQlsYXlvdXRfbWFyZ2luPSIyZHAiLAoJCQkJCWxheW91dF93aWR0aD0nbWF0Y2hfcGFyZW50JywKCQkJCQlsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiLAoJCQkJCXNyYz1zdmlld1tpXVsi5Zu+54mHIl0sCgkJCQl9LAoJCQkJewoJCQkJCVRleHRWaWV3LAoJCQkJCXRleHRTaXplPSIxMXNwIiwKCQkJCQl0ZXh0Q29sb3I9IiMxNjE2MTYiLAoJCQkJCXRleHQ9c3ZpZXdbaV1bIuWQjeWtlyJdLAoJCQkJCWxheW91dF9tYXJnaW5SaWdodD0iMmRwIiwKCQkJCQlsYXlvdXRfbWFyZ2luQm90dG9tPSIyZHAiLAoJCQkJCWxheW91dF9ncmF2aXR5PSJyaWdodHxib3R0b20iLAoJCQkJfSwKCQkJCXsKCQkJCQlMaW5lYXJMYXlvdXQsCgkJCQkJaWQ9bHVhamF2YS5uZXdJZChuaWQuLiIxIiksCgkJCQkJbGF5b3V0X21hcmdpbj0iMTBkcCIsCgkJCQkJbGF5b3V0X3dpZHRoPSc3ZHAnLAoJCQkJCWxheW91dF9oZWlnaHQ9IjdkcCIsCgkJCQkJYmFja2dyb3VuZD17R3JhZGllbnREcmF3YWJsZSxjb2xvcj0weGZmRkZDMENCLGNvcm5lclJhZGl1cz05MH0sCgkJCQl9LAoJCQkJewoJCQkJCUltYWdlVmlldywKCQkJCQlpZD1sdWFqYXZhLm5ld0lkKG5pZC4uIjIiKSwKCQkJCQl2aXNpYmlsaXR5PSJnb25lIiwKCQkJCQlncmF2aXR5PSJjZW50ZXJ8Ym90dG9tIiwKCQkJCQlsYXlvdXRfbWFyZ2luPSIyZHAiLAoJCQkJCWxheW91dF93aWR0aD0nMjBkcCcsCgkJCQkJbGF5b3V0X2hlaWdodD0iMjBkcCIsCgkJCQkJc3JjPSJodHRwczovL3d3dy5jY2NpbWcuY29tL2Rvd24ucGhwL2Q1NmMyODNjOThiM2U1OTQ2NTg0MjRlMDE2NTQzOGIwLiIsCgkJCQl9LAoJCQl9CgkJfQoJZW5kCglyZXR1cm4gbGF5b3V0CmVuZAkKbG9jYWwgX1RleHQgPSB7fQpsb2NhbCB0ZXh0PVs9WwoKW+S4g+aciOWIneS4gyDmt67msLTnq7nkuq0uXQpb6Iul6IO96L2s5LiW57ut57yYIOaYr+WmluWPiOWmguS9le+8n10KW+aEv+S6uumXtOeZvemmliDkuI7kvaDlhbHlkIzlgZXogIEuXQpb5ruh5bqt55qE6Iqs6IqzIOS4jeWPiuS9oOS4gOS6ui5dClvmiJHnmoTmhI/kuK3kurrllYog5pys5bCx5piv5Liq55uW5LiW6Iux6ZuELl0KW+eOi+adg+aXoOaarizlho3ml6Dmmq7lubQuXQpb5oiR5Y+v5Lul5oCA552A5YmR5b+D5p2l5om+5L2g5LqGLl0KW+WkqeWQhOS4gOaWuSDkuI3lj6/okazkuIDlnLAuXQpb5YaN5qyh5oi05LiK6Z2i5YW3IOWPiOS7v+S9m+WbnuWIsOS6humCo+aXti5dClvmiJHmnIDlubjov5DnmoTmmK8g5LiK5aSp6K6p5oiR6YGH6KeB5LqG5L2gLl0KW+memOesm+ebuOS+nSDljbTml6Dnu63nvJguXQpb55e05oOF55qE5aaW5oCq5ZWKIOivt+WGjeetieS4gOS4luWQpy5dClvoi6bmg4Xlt6jmoJHllYog5L2g5ZCs6KeB5LqG5ZCXLl0KW+S4h+awtOWNg+WxsSDkvaDmhL/mhI/pmarmiJHljrvnnIvlkJcuXQpb56u55Lqt5o2i6Zmi5Lqt77yM5ZCb5Zyo5b+D5LiN5ZyoLl0KW+S4lueVjOWwseS4gOS4quS9oCDmiJHlvZPnhLbopoHlpb3lpb3nj43mg5wuXQpb5q+P5qyh5pyJ5Lq66Zeu5oiR5bm456aP5piv5LuA5LmIIOaIkeiEkea1t+mHjOaAu+aYr+esrOS4gOS4quaDs+WIsOS9oC5dClvlpb3mg7PmirHmirHkvaAg6ICM5LiN5piv5a+5552A5omL5py66K+05oOz5L2gLl0KW+W/g+mHjOa4qeaflOaYr+S9oCDnm67lhYnmiYDoh7PmmK/kvaAuXQpb5oiR5LiN6KaB5b6I5LmFIOaIkeimgeS4gOeUn+S4gOS4li5dClvmiJborrjmiJHkuIDkuKrkurrotbAg5pu05rWq5ryr5LqbLl0KW+edoeWcqOaipumHjCDphpLlnKjmoqblooMuXQpb5aSp5Zyo5bCG6buR5pyq6buR5pe25pyA576OIOaDheWcqOassuivreacquivreaXtuacgOecny5dClvkvaDnmoTlh7rnjrAg5pep5bCx6IOc6L+H5LqG5omA5pyJ5Lq6IOS9oOiDveS4jeiDveS4gOebtOmZquedgOaIkS5dClvmiJHmm77kurLoh6rln4vokazmiJHnmoTmoqbmg7MuXQpb5piv6Iqx6Ieq54S26aaZIOaYr+eIseiHqueEtumVvy5dClvkvaDoi6XmmK/nj43mg5zmiJEg6L+Z5p2h6Lev5YaN57Sv5oiR6YO96Zmq5L2g6LWwLl0KW+elneWlvSDlnKjmlbDkuI3lsL3nmoTmmI7lpKkuXQpb5LiK6KiA6ZW/55u45oCdIOS4i+iogOS5heemu+WIqy5dClvmnKzmmK/muIXnga/kuI3lvZLlrqIg5Y205Zug5rWK6YWS5oGL57qi5bCYLl0KW+aIkeaYr+acqOe6s+eahOagkSDkvaDmmK/oh6rnlLHnmoTpo44uXQpb5Lq655Sf5pys6L+H5a6iIOS9leW/heWNg+WNg+e7ky5dClvkvaDkuI3mmK/ku5bku6zmiYDosJPnmoTmnq/mnp3otKXlj7Yg5L2g5piv5oiR5rC46L+c55qE5pilLl0KW+iKseWcqOmjjuS4reaRh+aRhuS4jeWumiDlsLHlg4/miJHlr7nkvaDnmoTniLHkuIDmoLfms6LojaHotbfkvI8uXQpb5oiR5LiN5piv6IOh5Zu+5Zu+IOS9huaIkeWPquWbvuS9oOWcqOaIkei6q+i+uS5dClvmiJHnibnliKvluIzmnJsg5ZKM5oiR6LWw5Yiw5pyA5ZCO55qE5piv5L2gLl0KW+iusuecn+eahCDmiJHlpKrmg7PlkozkvaDmnInku6XlkI7kuoYuXQpb5rKh5Lq66IO95Luj5pu/5L2gIOWNs+S9v+aIkeS7rOWlveS5heS4jeingS5dClvkvaDotbDlkI4g5oiR55qE5LiW55WM5Y+q5pyJ5oiR5LqGLl0KW+WcqOaXoOaVsOS4quedoeS4jeedgOeahOWknOmHjCDmiJHpg73lj43lpI3pl67oh6rlt7Eg5oiR55yf55qE5LiN5aW95ZCXLl0KW+aIkeS5n+aDs+W+gOWJjei1sCDkvYbmmK/lm57lv4bljovnmoTmiJHpopHnuYHlm57lpLQuXQpb5LiN6KaB5Zug5Li66YGH6KeB5LiN5a+555qE5Lq6IOiAjOWQpuWumuiHquW3sS5dClvmiJborrjmiJHnnJ/nmoTkuI3lpb0g5bCx5YOP5L2g6K+055qE6YKj5qC3Ll0KW+aIkeWni+e7iOeMnOS4jemAj+S9oCDlj4jmiJborrjkvaDku47mnKrlnKjkuY7ov4fmiJEuXQpb5LiA5Y+l5aSH5rOoIOS9oOaIkeeahOaVheS6i+W8gOWniy5dClvmnInkvaDnmoTlnLDmlrkg5oiR5YGc55WZ5LqG5aW95LmFLl0KW+WRveWlvSDpgYfop4HkuobkvaAg6LCi6LCi5L2g5YyF5a655oiR55qE5LiN5a6M576OLl0KW+S4lueVjOaDheaDheeIseeIsSDkvZXlv4Xoi6boi6bmgJ3lv7UuXQpb6YCB5aa76IyJ6I6JIOaEv+Wmu+iOq+emuy5dClvlprvoi6XkuI3nprsg5L2V6ZyA6IyJ6I6JLl0KW+aIkeacieS4quaci+WPi+W+iOW8gOaclyDlj6/lpbnniLHotbfkurrmnaXmgLvmtYHms6ouXQpb5aaC5p6c6Zi06Zuo57u157u1IOmCo+aIkeWBmuS9oOeahOaZtOWkqS5dClvlkJHmnaXnvJjmtYUg5aWI5L2V5oOF5rexLl0KW+aLqeS6uuWFiOaLqei3ryDniLHkurrlhYjniLHlt7EuXQpb5q+U6LW35aSx5Y67IOaIkeabtOWus+aAleWIq+S6uuaLpeacieS9oF0KW+eIseaYr+eLrOeJueeahOa7pOmVnCDkvaDlnKjmiJHlv4Pph4zmnIDlpb1dClvpgqPkupvmiJHkuI3ogq/lv5jnmoTlm57lv4Yg5L2g6K+05b+Y5bCx5b+YLl0KW+i/t+mAlOacqui/nCDlvqronbTonbbkuYvouKrlj6/mirXmmKXlpKkuXQpb6KeC5oiR5b6A5penIOWQjOaIkeS7sOaYpS5dClvmsLjmgZLnmoTmmKUg5LiN5py955qE6K+XLl0KW+acgOe+juWlveeahOW5tOWNjiDkuI7kvaDmkLrmiYvlhbHluqYuXQpb5oS/5L2g5YOP5pm05aSp5LiA5qC35piO5aqaIOeEtuWQjiDlpb3lpb3lkIPppa0uXQpb5aaC5p6c5piv5L2gIOS4gOS4h+mBjeS5n+WbnuWktC5dClvllpzmrKLmmbTlpKkg5Zac5qyi5LuK5aSpIOS5n+WWnOasouacieS9oOeahOavj+S4gOWkqS5dClvmiJHopoHkvaDpo47lhYnml5bml44g5ZCR5pil5bGx5LiN6K6h6Ium6Zq+Ll0KW+aer+acqOmAouaYpSDmiJHpgKLkvaAuXQpb5L2g5Zyo55qE5q+P5LiA5Liq556s6Ze0IOaIkemDveaDs+ivtOacieS9oOecn+WlvS5dClvmhL/lpJrlubTku6XlkI7mhJ/mg4XkuI3lj5gg5L2g5Lmf5bi45Zyo6Lqr6L65Ll0KW+ebuOmAouWmgumqpOmbqOWIneaZtCDnprvliKvmgbDkuYzkupHln4vlpKkuXQpb6Iqx6JC95LiL556s6Ze05piv5oiR5ZKM5L2g55qE5byA5aeLLl0KW+WNs+S9v+WkqeWQhOS4gOaWuSDkvp3nhLbniLHkvaDlpoLliJ0uXQpb6Zuo6YeM55qE5rW35qOg55yf55qE5aW957udIOivpeeUqOS7gOS5iOeQhueUseWIhuS6q+e7meS9oC5dClvmgJ3mgYvor4nkuojmtbfmo6Ag5oOF5Lid5YyW5L2c5b6u6ZuoLl0KW+a1t+ajoOiKseW8gOaYpeaEj+a1kyDmgJ3lv7Xpmo/po47lhaXmoqbkuK0uXQpb5rW35qOg5peg6aaZIOaEj+S4uuaal+aBiy5dClvkvaDpgKLkurrlsLHngqvogIDnmoTnjqvnkbAg5p6v6I+x5pe26K+l5oCO5LmI5pS25Zy6Ll0KW+i/n+aXqeimgeWIhuW8gOeahOivnSDpgqPnm7jpgYfnmoTmhI/kuYnlj4jmmK/ku4DkuYguXQpb5oiR6KaB5L2g6aOO5YWJ5peW5peOIOWQkeaYpeWxseS4jeiuoeiLpumavi5dClvlnKjmnYLojYnkuK3nlJ/plb/nvo7kuL3nmoToirEg6L+e5p2C6I2J6YO95piv6Zmq6KGsLl0KWyDmiornjqvnkbDol4/kuo7nm5vlpI8g5oqK5rW35qOg6JeP5LqO5rex56eLLl0KW+a1t+ajoOiKseW8gOeahOeDreeDiCDniLHmgajmg4Xku4fkuZ/nu4jkuo7mnInkuoblvZLlsZ4uXQpb5rW35qOg6Iqx5pyq55ygIOWfjuWNl+iKseW3suW8gCDmlYXkurrlt7LkuI3lnKguXQpb5YeM5pmo5Zub54K55oiR55yL6KeB5rW35qOg6Iqx5pyq55ygIOaAu+inieW+l+i/meaXtuS9oOW6lOivpeWcqOaIkei6q+i+uS5dClvmipjmnp3lv7XmmZrlroEg5rW35qOg6LWg5b6u6ZuoLl0KW+aZmuWknOW+rumbqOmXrua1t+ajoOaal+mmmeiagOmqqOivneemu+auhy5dClvmtbfmo6DkuI3mg5zog63ohILoibIg54us56uL6JKZ6JKZ57uG6Zuo5LitLl0KW+S4juWFtuiuqeWtpOacqOmAouaYpSDkuI3lpoLmiJDkuLrmmKXlpKnorqnlraTmnKjmsLjmgZIuXQpb5oiR5b+D5rC46L+c5YGP5ZCR5L2gIOS7juS9oOaIkeebuOivhumCo+Wkqei1ty5dClvkuI3luIzmnJvkvaDlv4PlrZjng6bmgbwg5biM5pyb5L2g5aSp5aSp5byA5b+DLl0KCl09XQoKZm9yIHggaW4gc3RyaW5nLmdtYXRjaCh0ZXh0LCclWyguLSklXScpIGRvCl9UZXh0WyNfVGV4dCsxXT14CmVuZApmdW5jdGlvbiBUZXh0UmFuZCgpCiAgcmV0dXJuIF9UZXh0W21hdGgucmFuZG9tKDEsI19UZXh0KV0KZW5kCgrngbXliqjlspvmlofmnKw9IueBteWKqOWymyIKCnRnPSLml6AiCnF1bj0iNzk2NDc3NTU4IgrngbXliqjlsps9MHhmZjAwMDAwMApjaGlw5Zu+54mHPSIvc2RjYXJkL+mVv+WuiS/otYTmupAvMWRmNTQzLnBuZyIK5bqV6YOo5Lq654mpPSJodHRwczovL3Bhbi5qbDgudG9wL3ZpZXcucGhwL2NkYWQ1MTRkYzJkYzcwZWM5MTJjYjdjOTEyMWRmNTQzLnBuZyIKCuS+p+i+ueiDjOaZrz1nZXRWZXJ0aWNhbEJHKHsweGZmZmZmZmZmLDB4ZmZmZmZmZmZ9LDE1LDIsMHhmZmEyZDRjNikK6I+c5Y2V6IOM5pmvPWdldFZlcnRpY2FsQkcoezB4ZmZmZmZmZmYsMHhmZmZmZmZmZn0sMCkKCgrmgqzmta7nqpflm77moIcgPSAiaHR0cHM6Ly9wYW4uamw4LnRvcC92aWV3LnBocC81ZTAzNmYyNDUxZDdjMmJkNmJiMWQ4ZmMxNzNkNzIzMS5qcGciCgpmdW5jdGlvbiBodWl6KCktLS3nu5jliLblv4XpobvmlL7lnKjov5nph4zpnaIKCmVuZAoK5Yib5bu66aG16Z2iKCfpmLLlsIEnLAp7CgpjaGFuZ2FuLnN3aXRjaCgKIui/h+ajgOa1izEiLApmdW5jdGlvbigpCmlmIGdnLmdldFJhbmdlc0xpc3QoImxpYk5ldEhUUHJvdGVjdC5zbyIpWzFdIHRoZW4KCWxvY2FsIHQgPSB7fQoJdFsxXSA9IGdnLmdldFJhbmdlc0xpc3QoImxpYk5ldEhUUHJvdGVjdC5zbyIpWzFdWyJzdGFydCJdICsgMHgyRDcyMzg7IC0tIOaVsOWAvOWcsOWdgDoweDc4NUI1NzcyMzgKCXRbMl0gPSBnZy5nZXRSYW5nZXNMaXN0KCJsaWJOZXRIVFByb3RlY3Quc28iKVsxXVsic3RhcnQiXSArIDB4MkQ3MjNDOyAtLSDmlbDlgLzlnLDlnYA6MHg3ODVCNTc3MjNDCgl0WzNdID0gZ2cuZ2V0UmFuZ2VzTGlzdCgibGliTmV0SFRQcm90ZWN0LnNvIilbMV1bInN0YXJ0Il0gKyAweDJENzI0MDsgLS0g5pWw5YC85Zyw5Z2AOjB4Nzg1QjU3NzI0MAoJdFs0XSA9IGdnLmdldFJhbmdlc0xpc3QoImxpYk5ldEhUUHJvdGVjdC5zbyIpWzFdWyJzdGFydCJdICsgMHgyRDcyNDQ7IC0tIOaVsOWAvOWcsOWdgDoweDc4NUI1NzcyNDQKCWdnLnNldFZhbHVlcyh7CgkJWzFdID0geyAKCQkJYWRkcmVzcyA9IHRbMV0sCgkJCWZsYWdzID0gNCwKCQkJdmFsdWUgPSAtNzIxMjE1NDU3LAoJCX0sCgkJWzJdID0geyAKCQkJYWRkcmVzcyA9IHRbMl0sCgkJCWZsYWdzID0gNCwKCQkJdmFsdWUgPSAtNzIxMjE1NDU3LAoJCX0sCgkJWzNdID0geyAKCQkJYWRkcmVzcyA9IHRbM10sCgkJCWZsYWdzID0gNCwKCQkJdmFsdWUgPSAtNzIxMjE1NDU3LAoJCX0sCgkJWzRdID0geyAKCQkJYWRkcmVzcyA9IHRbNF0sCgkJCWZsYWdzID0gNCwKCQkJdmFsdWUgPSAzMzU1NDQzMjAsCgkJfSwKCX0pCglnZy50b2FzdCgi5byA5ZCv5oiQ5YqfIikKZW5kCmVuZCwKZnVuY3Rpb24oKQoKZW5kKSwKCmNoYW5nYW4uc3dpdGNoKAoi5pegIiwKZnVuY3Rpb24oKQoKZW5kLApmdW5jdGlvbigpCgplbmQpLAoKY2hhbmdhbi5zd2l0Y2goCiLml6AiLApmdW5jdGlvbigpCgplbmQsCmZ1bmN0aW9uKCkKCmVuZCksCn0pCuesrOS4gOmhtSA9IHstLeWIm+W7uuWIhumhte+8jOe7k+Wwvuiwg+eUqApbJ+WIhumhteWQjeWtlyddPSLpppbpobUiLApbMV09ey0t56ys5LiA5YiG5Yy6Clsn5YiG5Yy65ZCN5a2XJ109IuWFrOWRiiIsClsn5Yqf6IO96YWN572uJ109ewpjaGFuZ2FuLmxpbmUoKSwKY2hhbmdhbi5idXR0b24oIumAieaLqei/m+eoiyIsCmZ1bmN0aW9uKCkKZ2cuc2V0UHJvY2Vzc1goKQplbmQpLAoKY2hhbmdhbi5zd2l0Y2goCiLpmLLlsIHoj5zljZUiLApmdW5jdGlvbigpCuaJk+W8gOmhtemdoign6Ziy5bCBJykKZW5kLApmdW5jdGlvbigpCuWFs+mXremhtemdoign6Ziy5bCBJykKZW5kKSwKfX0sClsyXT17LS3nrKzkuozliIbljLoKWyfliIbljLrlkI3lrZcnXT0i56iz5a6a5Yqf6IO95Yy6IiwKWyflip/og73phY3nva4nXT17CmNoYW5nYW4uYm94KHsKIuWKn+iDveiPnOWNlSIsCmNoYW5nYW4uY2hlY2soewp7CiLlrZDlvLnml6DpmZAiLApmdW5jdGlvbigpCnNvID0gZ2cuZ2V0UmFuZ2VzTGlzdCgnbGliaWwyY3BwLnNvJylbMV0uc3RhcnQKc2V0dmFsdWUoc28gKyAweDI4RjMxRjgsIDQsICd+QSBMRFJCTEUgUjAsIFtQQ10sIC1SMCwgQVNSICM3JyApCi0tZ2cudG9hc3QoImlkLUNz5a2Q5by55peg6ICX5bey5rOo5YWlIikKCmVuZAp9LCB7CiLoh6rnnoQiLApmdW5jdGlvbigpClNvKHsi6ZSB5a6a556E5YeGIiwyMDAsMzIsMTZ9LAp7ezIsLTQsMTZ9LHs0NSwtOCwxNn0sezIsLTEyLDE2fSx7MS4yNSw0LDE2fX0sCnt7MzUuMCw0LDE2LDF9LHsyLjUsLTIwLDE2LDF9fSkKc28gPSBnZy5nZXRSYW5nZXNMaXN0KCdsaWJpbDJjcHAuc28nKVsxXS5zdGFydApsb2NhbCBhZGRyZXNzZXMgPSB7CnthZGRyZXNzID0gc28gKyAweDI0QTY0NjgsIGZsYWdzID0gNCwgdmFsdWUgPSAnfkEgQ0RQTkUgMCwgMiwgQ1IxMywgQ1I3LCBDUjQsIHswfScgfSwKe2FkZHJlc3MgPSBzbyArIDB4MjRBNjVBMCwgZmxhZ3MgPSA0LCB2YWx1ZSA9ICd+QSBDRFBORSAwLCAyLCBDUjEzLCBDUjcsIENSNCwgezB9JyB9Cn0KZ2cuc2V0VmFsdWVzKGFkZHJlc3NlcykKLS1nZy50b2FzdCgiaWQtQ3PlhajlsY/nnoTlh4blt7Lms6jlhaUiKQplbmQsCmZ1bmN0aW9uKCkKCmVuZAp9LCB7CiLml6DlkI7pmLLmipYiLApmdW5jdGlvbigpCnNvID0gZ2cuZ2V0UmFuZ2VzTGlzdCgnbGliaWwyY3BwLnNvJylbMV0uc3RhcnQKc2V0dmFsdWUoc28gKyAweDFCN0Q3NzgsIDQsICd+QSBMRFJCTEUgUjAsIFtQQ10sIC1SMCwgQVNSICM3JyApCi0tZ2cudG9hc3QoImlkLUNz5peg5ZCO6Ziy5oqW5bey5rOo5YWlIikKZW5kLApmdW5jdGlvbigpCgplbmQKfSwKfSksCmNoYW5nYW4udHVwKHsKCQkJCQl7CgkJCQkJCVsi5Zu+54mHIl095oKs5rWu56qX5Zu+5qCHLAoJCQkJCQlbIuWQjeWtlyJdPSLmrablmajlvLrljJYiLAoJCQkJCQlbIuWKn+iDveW8gCJdPWZ1bmN0aW9uKCkgLS1BPWdnLmFsZXJ0KCLwn46J6K+36YCJ5oup5qih5byPIiwi6YeO6JuuIiwi77iP5Lq657G7IikKLS1pZiBBPT0xIHRoZW4gR0o9IjEwIiBlbHNlIEdKPSIzLjAiIGVuZAotLVNvKHsi5q2m5Zmo5Y2H57qnIiwtMTEwMjI2MzA5MSwzMiw0fSwKLS17ezEwNDY1NjI3MzQsLTUyLDR9LHsxMDUwMjUzNzIyLC00NCw0fSx7MTA0NTIyMDU1NywtNDAsNH19LAotLXt7MCwtNTYsMTZ9LHswLC02MCwxNn0se0dKLC02NCwxNn0sezAsLTcyLDE2fX0pCi0tU28oeyLmiZPlh7vmlbDph48iLDEwMCwzMiwzMn0sCi0te3sxMiw0OCw0fSx7MSwyOCw0fX0sCi0te3syMTQ3NDgzNjQ3LDEyLDR9fSkKLS1Tbyh7IuenkuaNouWtkOW8uSIsMTA1MDI1MzcyMiwzMiw0fSx7ezEsMHgxMCw0fSx7MSwtNCw0fSx7MSwweDE4LDR9LHswLDQsNH19LHt7MCw4LDE2fSx7MCwweDE0LDE2fX0pCnNvID0gZ2cuZ2V0UmFuZ2VzTGlzdCgnbGliaWwyY3BwLnNvJylbMV0uc3RhcnQKc2V0dmFsdWUoc28gKyAweDIxMjlBOEMsIDQsICd+QSBFT1JDQyBSMCwgUjYsICMyMzIsIDE0JyApLS3lh73mlbDosIPnlKjlrZDlvLnmlbDph48Kc28gPSBnZy5nZXRSYW5nZXNMaXN0KCdsaWJpbDJjcHAuc28nKVsxXS5zdGFydApzZXR2YWx1ZShzbyArIDB4NTQ1NTUzMCwgMTYsIDMuNGUrMzggKS0t5Ye95pWw6LCD55So5p6q5qKw5bCE6YCfCi0tZ2cudG9hc3QoImlkLUNz5q2m5Zmo5Y2H57qn5bey5rOo5YWlIikKZ2cuYWxlcnQoIuW8gCIpIGVuZCwKCQkJCQkJWyLlip/og73lhbMiXT1mdW5jdGlvbigpIGdnLmFsZXJ0KCLlhbMiKSBlbmQKCQkJCQl9LHsKCQkJCQkJWyLlm77niYciXT3mgqzmta7nqpflm77moIcsCgkJCQkJCVsi5ZCN5a2XIl09IuWtkOW8ueepv+WimSIsCgkJCQkJCVsi5Yqf6IO95byAIl09ZnVuY3Rpb24oKXNvID0gZ2cuZ2V0UmFuZ2VzTGlzdCgnbGlidW5pdHkuc28nKVsxXS5zdGFydApzZXR2YWx1ZShzbyArIDB4MTA1OEE5MCwgNCwgJ35BIFNUUkxFIFIyLCBbUjMsIy0zMV0nICkKLS1nZy50b2FzdCgiaWQtQ3PlrZDlvLnnqb/lopnlt7LlvIDlkK8iKQogZW5kLAoJCQkJCQlbIuWKn+iDveWFsyJdPWZ1bmN0aW9uKCkgZW5kCgkJCQkJfSx7CgkJCQkJCVsi5Zu+54mHIl095oKs5rWu56qX5Zu+5qCHLAoJCQkJCQlbIuWQjeWtlyJdPSLmloflrZfpga7mjKEiLAoJCQkJCQlbIuWKn+iDveW8gCJdPWZ1bmN0aW9uKClzbyA9IGdnLmdldFJhbmdlc0xpc3QoJ2xpYmlsMmNwcC5zbycpWzFdLnN0YXJ0CnNldHZhbHVlKHNvICsgMHgzOEIwOTI4LCA0LCAnfkEgTERSQkxFIFIwLCBbUENdLCAtUjAsIEFTUiAjNycgKQotLWdnLnRvYXN0KCJpZC1Dc+aWh+Wtl+mBruaMoeW3suW8gOWQryIpIAplbmQsCgkJCQkJCVsi5Yqf6IO95YWzIl09ZnVuY3Rpb24oKXNvID0gZ2cuZ2V0UmFuZ2VzTGlzdCgnbGliaWwyY3BwLnNvJylbMV0uc3RhcnQKc2V0dmFsdWUoc28gKyAweDM4QjA5MjgsIDQsIC03ODg0Nzg5NzcgKQotLWdnLnRvYXN0KCJpZC1Dc+aWh+Wtl+mBruaMoeW3suWFs+mXrSIpIAplbmQKCQkJCQl9LHsKCQkJCQkJWyLlm77niYciXT3mgqzmta7nqpflm77moIcsCgkJCQkJCVsi5ZCN5a2XIl09Iua1i+ivlSIsCgkJCQkJCVsi5Yqf6IO95byAIl09ZnVuY3Rpb24oKSBlbmQsCgkJCQkJCVsi5Yqf6IO95YWzIl09ZnVuY3Rpb24oKSBlbmQKCQkJCQl9CgkJCQl9KSwKY2hhbmdhbi5zd2l0Y2goCiLlub/op5IiLApmdW5jdGlvbigpCnNvID0gZ2cuZ2V0UmFuZ2VzTGlzdCgnbGlidW5pdHkuc28nKVszXS5zdGFydApzZXR2YWx1ZShzbyArIDB4RDFBQzI4LCAxNiwgMTYwLjAgKQotLWdnLnRvYXN0KCJpZC1Dc+W5v+inkuinhumHjuW3suazqOWFpSIpCmVuZCwKZnVuY3Rpb24oKQoKZW5kCiksCmNoYW5nYW4uc3dpdGNoKAoi54m55q6K5Yqf6IO96YeN5YqbIiwKZnVuY3Rpb24oKQpsb2NhbCB6bCA9IGdnLnByb21wdCh7Iuivt+i+k+WFpeS/ruaUueaVsOWAvCJ9LHtbMV09IiJ9LHtbMV09Im51bWJlciJ9KVsxXQpTbyh7IumHjeWKm+iwg+ivlSIsMTExNzc4MjAxNiwzMiwzMn0se3sxLC0xNiw0fSx7MCwtOCw0fSx7MTA2NTM1MzIxNiwtNCw0fX0se3t6bCwtNjQsMTYsMX0sfSkKZ2cuYWxlcnQoImlkLUNz6Lez6LeD6auY5bqm5bey5L+u5pS55Li6OiIuLnpsKQplbmQsCmZ1bmN0aW9uKCkKCmVuZAopLApjaGFuZ2FuLnN3aXRjaCgKIuepuuS4reWKoOmAnyIsCmZ1bmN0aW9uKCkKbG9jYWwgVyA9IGdnLnByb21wdCh7Iuivt+i+k+WFpeS/ruaUueaVsOWAvCJ9LHtbMV09IiJ9LHtbMV09Im51bWJlciJ9KVsxXQpTbyh7IuepuuS4reWKoOmAnyIsMTExNzc4MjAxNiwzMiwzMn0se3sxLC0xNiw0fSx7MCwtOCw0fSx7MTA2NTM1MzIxNiwtNCw0fX0se3tXLC01NiwxNiwxfSx9KQpnZy5hbGVydCgiaWQtQ3PliqDpgJ/lt7Lkv67mlLnkuLo6Ii4uVykKZW5kLApmdW5jdGlvbigpCgplbmQKKSwKY2hhbmdhbi5zd2l0Y2goCiLml6AiLApmdW5jdGlvbigpCgplbmQsCmZ1bmN0aW9uKCkKCmVuZAopLAp9KSwKCgp9fSwKWzNdPXstLeesrOS4ieWIhuWMugpbJ+WIhuWMuuWQjeWtlyddPSLljbHpmanlip/og73ljLoiLApbJ+WKn+iDvemFjee9riddPXsKY2hhbmdhbi5saW5lKCksCmNoYW5nYW4ucmFkaW8oewp7CiLliqDpgJ8iLApmdW5jdGlvbigpCnNvID0gZ2cuZ2V0UmFuZ2VzTGlzdCgnbGliaWwyY3BwLnNvJylbMV0uc3RhcnQKbG9jYWwgYWRkcmVzc2VzID0gewp7YWRkcmVzcyA9IHNvICsgMHgxQTUxNEQ4LCBmbGFncyA9IDQsIHZhbHVlID0gJ35BIExEUkJMRSBSMCwgW1BDXSwgLVIwLCBBU1IgIzcnIH0sLS3mjIHnianliqDpgJ8KfQpnZy5zZXRWYWx1ZXMoYWRkcmVzc2VzKQotLWdnLnRvYXN0KCJpZC1Dc+WKoOmAn+iwg+ivleW3suazqOWFpSIpCgplbmQsCmZ1bmN0aW9uKCkKbG9jYWwgdCA9IGdnLnByb21wdCh7Iuivt+i+k+WFpeS/ruaUueaVsOWAvCJ9LHtbMV09IiJ9LHtbMV09Im51bWJlciJ9KVsxXQppZiB0b251bWJlcih0KT09MSB0aGVuIHQ9MC4wMDk5OTk5OTk3OCBlbmQKU28oeyLkurrnianpo57lpKkiLDEwNjA0MzkyODMsMzIsMzJ9LHt7MTA2NTM1MzIxNiw4LDR9fSx7e3QsMjAsMTZ9fSkKZ2cuYWxlcnQoImlkLUNz6auY5bqm5bey5L+u5pS55Li6OiIuLnQpCmVuZCwi6LCo5oWO5byA5ZCvIn0sewoi5Lq654mp6aOe5aSpIiwKZnVuY3Rpb24oKQoKCmVuZCwKZnVuY3Rpb24oKQotLUE9Z2cuYWxlcnQoIvCfjonor7fpgInmi6nmqKHlvI8iLCLph47om64iLCLvuI/kurrnsbsiKQotLWlmIEE9PTEgdGhlbiBHSj0iNS4yIiBlbHNlIEdKPSIyLjYiIGVuZAotLVNvKHsi5Lq657G7Lei/keaImOWNh+e6pyIsIjEwMzAxMDAxfjEwMzAxMDI4IiwzMiw0fSwKLS17eyIxMDMwMTAwMX4xMDMwMTAyOCIsMjgsMzJ9fSwKLS17e0dKLDgwLDE2fSx7R0osODQsMTZ9LHtHSiw4OCwxNn0se0dKLDkyLDE2fX0pCi0tU28oeyLmlLvlh7vmlbDph48iLDQ1MTA4MDUzODg0OTIyNzU3MTIsMzIsMzJ9LAotLXt7MTA1MDI1MzcyMiw0LDR9LHsxLDE2LDR9fSwKLS17ezMuNSwxMiwxNn0sezIxNDc0ODM2NDcsMTYsNH19KQpzbyA9IGdnLmdldFJhbmdlc0xpc3QoJ2xpYmlsMmNwcC5zbycpWzFdLnN0YXJ0CmxvY2FsIGFkZHJlc3NlcyA9IHsKe2FkZHJlc3MgPSBzbyArIDB4MUQ1MEEwQywgZmxhZ3MgPSA0LCB2YWx1ZSA9ICd+QSBBTkRTQ0MgUjMsIFIxMiwgIzIzMiwgMzAnIH0sLS3mlLvlh7vmlbDph48Ke2FkZHJlc3MgPSBzbyArIDB4NTU2NzdDOCwgZmxhZ3MgPSAxNiwgdmFsdWUgPSA5OTk5OTkuMCB9LS3mlLvlh7vojIPlm7QKfQpnZy5zZXRWYWx1ZXMoYWRkcmVzc2VzKQotLWdnLnRvYXN0KCJpZC1Dc+i/keaImOWNh+e6p+W3suazqOWFpSIpCmVuZCwi5Y2x6Zmp5Yqf6IO9Igp9LHsKIui/keaImOW8uuWMliIsCmZ1bmN0aW9uKCkKc28gPSBnZy5nZXRSYW5nZXNMaXN0KCdsaWJpbDJjcHAuc28nKVsxXS5zdGFydApsb2NhbCBhZGRyZXNzZXMgPSB7CnthZGRyZXNzID0gc28gKyAweDFGQzNBNDgsIGZsYWdzID0gNCwgdmFsdWUgPSAnfkEgU1RDTExUIDUsIENSMCwgW1IwLCMtMF0nIH0sLS3liLrliIDpl7TpmpQKfQpnZy5zZXRWYWx1ZXMoYWRkcmVzc2VzKQotLWdnLnRvYXN0KCJpZC1Dc+WIuuWIgOWNh+e6p+W3suazqOWFpSIpCgplbmQsCmZ1bmN0aW9uKCkKCmVuZCwiW+iwqOaFjuW8gOWQr10iCn0sewoi5Yi65YiA5by65YyWIiwKZnVuY3Rpb24oKQoKZW5kLApmdW5jdGlvbigpCgplbmQsIlvpgIDlh7rml7blv4XlvIBdIgp9LAp9KQp9fSwKWzRdPXstLeesrOWbm+WIhuWMugpbJ+WIhuWMuuWQjeWtlyddPSLml6DnlKjljLoiLApbJ+WKn+iDvemFjee9riddPXsKY2hhbmdhbi5zZWVrKCLml6DnlKgiLCJsdHh4IiwxLDIwLDEpLC0t4oCcbHR4eOKAneS4uuatpOaLieadoeWPmOmHj+WQjeWtl++8jOS9v+eUqOaXtuavj+S4quaLieadoeS4jeWPr+mHjeWkjQpjaGFuZ2FuLmJ1dHRvbigKIuaXoOeUqCIsCmZ1bmN0aW9uKCkKCmVuZCksCn19LApbNV09ey0t56ys5LqU5YiG5Yy6Clsn5YiG5Yy65ZCN5a2XJ109Iue+juWMluWMuiIsClsn5Yqf6IO96YWN572uJ109ewpjaGFuZ2FuLmNoZWNrKHsKewoi576O5YyW6Ieq5pS5IiwKZnVuY3Rpb24oKQotLSDljp/lp4vmrablmajooagKbG9jYWwgd2VhcG9uTGlzdCA9IFtbCuatpuWZqOWQjeensD1TQ0FSCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoxMDEwMTAwMSBTQ0FSCjEwMTAxMDAyIFNDQVIt6LCD5p+l5bGACjEwMTAxMDAzIFNDQVIt5py65qKw6ZmN56WeCjEwMTAxMDA0IFNDQVIt55a+55S1CjEwMTAxMDA1IFNDQVIt546E5q2mCjEwMTAxMDA2IFNDQVIt5aWH5bm75YaS6ZmpCjEwMTAxMDA3IFNDQVIt5raC6bim5LmQ5ZutCjEwMTAxMDA4IFNDQVIt5bCP5oap5pe25YWJCjEwMTAxMDA5IFNDQVIt6I2j6ICACjEwMTAxMDAwMDEgU0NBUi3pu5HlpKnpuYUKMTAxMDEwMDAwMiBTQ0FSLeacquadpeibh+W9sQoxMDEwMTAwMDAzIFNDQVIt5rWu5LiW5p6r5bqtCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPUFLNDcK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTAxMDExIEFLNDcKMTAxMDEwMTIgQUst6LCD5p+l5bGACjEwMTAxMDEzIEFLNDct57u/6YeO5LuZ6LiqCjEwMTAxMDE0IEFLNDct5rOV6ICBCjEwMTAxMDE1IEFLNDct56ev5pyo54uC6bKoCjEwMTAxMDE2IEFLNDct5qC45by55Y2x5py6CjEwMTAxMDE3IEFLNDct5o2j6JuL6ay8CjEwMTAxMDE4IEFLNDct5Y6f5oGS5pifCjEwMTAxMDE5IEFLNDct6I2j6ICACjEwMTAxMDEwMDEgQUs0Ny3ljp/lrZDpo47mmrQKMTAxMDEwMTAwMiBBSzQ3LeiQneWNnOaeqgoxMDEwMTAxMDAzIEFLNDct55m96JmOCjEwMTAxMDEwMDQgQUs0Ny3nu53lkb3lpKnlkK8KMTAxMDEwMTAwNSBBSzQ3LeiQjOm+meeJueaUu+mYnwoxMDEwMTAxMDA2IEFLNDct55m9576K5bqnCjEwMTAxMDEwMDcgQUs0Ny3lhbPnvr3Ct+mdkum+meWBg+aciAoxMDEwMTAxMDA4IEFLNDct6JOQ5pS2CjEwMTAxMDEwMDkgQUs0Ny3ojaPoqonoi7Hpm4QKMTAxMDEwMTAxMCBBSzQ3LeeBq+WwluaeqgoxMDEwMTAxMDExIEFLNDct5Luj56CBOk1JTkkKMTAxMDEwMTAxMiBBSzQ3LemZhuWcsOmihuS4uwoxMDEwMTAxMDEzIEFLNDct5Y2D5py66bi/5b2xCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPU00CuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoxMDEwMTAyMSBNNAoxMDEwMTAyMiBNNC3osIPmn6XlsYAKMTAxMDEwMjMgTTQt5Y2x6Zmp5YiG5a2QCjEwMTAxMDI0IE00LeaNo+ibi+msvAoxMDEwMTAyNSBNNC3np6/mnKjlt6jps4QKMTAxMDEwMjYgTTQt6b6Z6IifCjEwMTAxMDI3IE00LeacuuaisOmZjeelngoxMDEwMTAyOCBNNC3ljp/lrZDpo47mmrQKMTAxMDEwMjkgTTQt6I2j6ICACjEwMTAxMDIwMDEgTTQt5Y6f5oGS5pifCjEwMTAxMDIwMDIgTTQt55a+55S1CjEwMTAxMDIwMDMgTTQt6Z2S6b6ZCjEwMTAxMDIwMDQgTTQt5aWH5bm75YaS6ZmpCjEwMTAxMDIwMDUgTTQt6LW15LqRwrfpvpnog4bkuq7pk7YKMTAxMDEwMjAwNiBNNC3okIzliqjlh7rlh7sKMTAxMDEwMjAwNyBNNC3ku6PnoIFNSU5JCjEwMTAxMDIwMDggTTQt6b2Q5aSp5aSn5ZyjCjEwMTAxMDIwMDkgTTQt56Wd6J6NCjEwMTAxMDIwMTAgTTQt5ZG96L+Q5LmL6L2uCjEwMTAxMDIwMTEgTTQt6Z2S55O35rWu5qKmCjEwMTAxMDIwMTIgTTQt57uu5qKm5bm75peFCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPUFVRwrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDEwMzEgQVVHCjEwMTAxMDMyIEFVRy3osIPmn6XlsYAKMTAxMDEwMzMgQVVHLeadpeaJk+aIkem4rQoxMDEwMTAzNCBBVUct5oCl6YCf6Z+z56ymCjEwMTAxMDM1IEFVRy3ojaPogIAKMTAxMDEwMzYgQVVHLem+meiInwoxMDEwMTAzNyBBVUct5Y6f5a2Q6aOO5pq0CjEwMTAxMDM4IEFVRy3pvpnooYzlpKnkuIsKMTAxMDEwMzkgQVVHLeWPjOWtkOW6pwoxMDEwMTAzMDAxIEFVRy3mnqrnpZ4KMTAxMDEwMzAwMiBBVUct55S1546p5Zu95bqmCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPUdyb3phCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoxMDEwMTA0MSBHcm96YQoxMDEwMTA0MiBHcm96YS3oiJ7ni64t6b6Z6IW+6JmO6LeDCjEwMTAxMDQzIEdyb3phLeiInueLri3ohb7po57kupHpnIQKMTAxMDEwNDQgR3JvemEt6Iie54uuLee5geiKseWknOiIngoxMDEwMTA0NSBHcm96YS3oiJ7ni64t5rWu5YWJ6LeD6YeRCjEwMTAxMDQ2IEdyb3phLeiQjOWKqOWHuuWHuwoxMDEwMTA0NyBHcm96YS3ojaPogIAKMTAxMDEwNDggR3JvemEt5bm75b2p54G16am5CuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPU03NjIK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTAxMDUxIE03NjIKMTAxMDEwNTIgTTc2Mi3ml5flvIDlvpfog5wKMTAxMDEwNTMgTTc2Mi3ojaPogIAKMTAxMDEwNTQgTTc2Mi3nlr7nlLUKMTAxMDEwNTUgTTc2Mi3mnqrnpZ4KMTAxMDEwNTYgTTc2Mi3lpYflubvlhpLpmakKMTAxMDEwNTcgTTc2Mi3niafph47lr7voirMKMTAxMDEwNTggTTc2Mi3pm6rlnLDov7flvakKMTAxMDEwNTkgTTc2Mi3njonpnaLnjoTni5AKMTAxMDEwNTAwMSBNNzYyLea1ruS4luaeq+W6rQrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD1RQlo5NQrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDEwNjAgUUJaLeaXheihjOiAhQoxMDEwMTA2MSBRQloKMTAxMDEwNjIgUUJaLeeIhuijggoxMDEwMTA2MyBRQlot6I2j6ICACjEwMTAxMDY0IFFCWi3nlr7nlLUKMTAxMDEwNjUgUUJaLeW8oOmjnsK35LiI5YWr6JuH55+bCjEwMTAxMDY2IFFCWi3lhrDljp/lsITmiYsKMTAxMDEwNjcgUUJaLeacsembgAoxMDEwMTA2OCBRQlot6Zuq5Zyw6L+35b2pCjEwMTAxMDY5IFFCWi3ku6PnoIE6TUlOSQoxMDEwMTA2MDAxIFFCWi3ppZXppK7nm5vlrrQKMTAxMDEwNjAwMiBRQlot5rC055O25bqnCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPU0xNgrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDEwNzAgTTE2CjEwMTAxMDcxIE0xNi3lkozlubPkvb/ogIUKMTAxMDEwNzIgTTE2LemSoumTgeS5i+W/gwoxMDEwMTA3MyBNMTYt6I2j6ICACjEwMTAxMDc0IE0xNi3mnqrnpZ4KMTAxMDEwNzUgTTE2LeWYt+aciOS5i+eOiwoxMDEwMTA3NiBNMTYt5Za15pif54uC5oOzCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPUFLMTUK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTAxMDgwIEFLMTUKMTAxMDEwODEgQUsxNS3ojaPogIAKMTAxMDEwODIgQUsxNS3ljp/lrZDpo47mmrQKMTAxMDEwODMgQUsxNS3ns5bmnpzlsYsKMTAxMDEwODQgQUsxNS3lj6XoipIKMTAxMDEwODUgQUsxNS3pm6rlnLDov7flvakKMTAxMDEwODYgQUsxNS3ok5DmlLYKMTAxMDEwODcgQUsxNS3ojInojokK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A9U0c1MTYK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTAxMDkwIFNHNTE2CjEwMTAxMDkxIFNHNTE2LeiNo+iAgAoxMDEwMTA5MiBTRzUxNi3nlr7nlLUKMTAxMDEwOTMgU0c1MTYt57ud5ZG95aSp5ZCvCjEwMTAxMDk0IFNHNTE2LeelneiejQoxMDEwMTA5NSBTRzUxNi3lhZTlhZTojLbor53kvJoK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A9QVNWYWwK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTAxMTAwIOW3qOa1qgoxMDEwMTEwMSDlt6jmtaot5YWJ5qOxLeWGsOaZtumjjuaatAoxMDEwMTEwMiDlt6jmtaot5YWJ5qOxLee6ouiOsueLguiIngoxMDEwMTEwMyDlt6jmtaot5YWJ5qOxLeaaruiJsueMjuW9sQoxMDEwMTEwNCDlt6jmtaot5YWJ5qOxLeegtOaZk+aZqOaYnwoxMDEwMTEwNSDlt6jmtaot5Y+l6IqSCjEwMTAxMTA2IOW3qOa1qi3lpKfngbDni7wKMTAxMDExMDcg5beo5rWqLeivuOeOi+Wco+WQrwrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD1GQU1BUwrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDEyMDAgRmFtYXMKMTAxMDEyMDEgRmFtYXMt5aSP5pel5L2c5oiYCjEwMTAxMjAyIEZhbWFzLembquWcsOi/t+W9qQoxMDEwMTIwMyBGYW1hcy3nurjotKjpm5XliLsK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A9RzM2CuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoxMDEwMTMwMCBHMzYKMTAxMDEzMDEgRzM2LeWkqeiTrOWFg+W4hQoxMDEwMTMwMiBHMzYt5peF6KGM6ICFCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPUFOOTQK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTAxNDAwIEFOOTQKMTAxMDE0MDEgQU45NC3lgYfpnaLoiJ7kvJoKMTAxMDE0MDIgQU45NC3njoTlhqUKMTAxMDE0MDMgQU45NC3nmb7lj5johLjosLEK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A9Rk5GQUwK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTAxNTAxIEZORkFMLeeOhOWGpQrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD1BU2gxMgrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDE2MDEgQVNoMTIt6Z2S55O35rWu5qKmCjEwMTAxNjAyIEFTaDEyLeWuiOaKpOiAhQrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD1RQloxOTEK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTAxNzAxIFFCWjE5MS3pqazotoXCt+iZjuWktOa5m+mHkQrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD1TS1MK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTAyMDAxIFNLUwoxMDEwMjAwMiBTS1Mt6LCD5p+l5bGACjEwMTAyMDAzIFNLUy3ntKvnm64KMTAxMDIwMDQgU0tTLee6oueah+WQjgoxMDEwMjAwNSBTS1Mt54yO5omLCjEwMTAyMDA2IFNLUy3ku6PnoIFNSU5JCjEwMTAyMDA5IFNLUy3ojaPogIAK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A9TUsxMgrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDIwMTEgTUsxMgoxMDEwMjAxMiBNSzEyLeiwg+afpeWxgAoxMDEwMjAxMyBNSzEyLeW5tOW5tOaciemxvAoxMDEwMjAxNCBNSzEyLeijgeWGs+S5i+ecvAoxMDEwMjAxNSBNSzEyLeWGsOWOn+WwhOaJiwoxMDEwMjAxNiBNSzEyLeW3qOifueW6pwoxMDEwMjAxOSBNSzEyLeiNo+iAgArigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD1NSU5JMTQK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTAyMDIxIE1JTkkxNAoxMDEwMjAyMiBNSU5sMTQt6Z2S55O35rWu5qKmCgrmrablmajlkI3np7A9TUsxNArigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDIwMzEgTUsxNAoxMDEwMjAzMiBNSzE0LeeGlOWyqeaAkuWQvAoxMDEwMjAzMyBNSzE0LeaatOi1sOeUnOW/gwrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD1RQlUK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTAyMDQwIFFCVQoxMDEwMjA0MSBRQlUt5LqM6YOO56WeCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPU0yNArigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDMwMDAgTTI0LeWuiOaKpOiAhQoxMDEwMzAwMSBNMjQKMTAxMDMwMDIgTTI0Leiwg+afpeWxgAoxMDEwMzAwMyBNMjQt6aOf5Lq66bG8CjEwMTAzMDA0IE0yNC3kv6HmnaEKMTAxMDMwMDUgTTI0LeaYn+S5i+e/vAoxMDEwMzAwNiBNMjQt54iG6KOCCjEwMTAzMDA3IE0yNC3lpYflubvlhpLpmakKMTAxMDMwMDggTTI0LeelneiejQoxMDEwMzAwOSBNMjQt6I2j6ICACuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPeW3tOmbt+eJuQrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDMwMTEg5be06Zu354m5CjEwMTAzMDEyIOW3tOmbt+eJuS3osIPmn6XlsYAKMTAxMDMwMTMg5be06Zu354m5LeeCveeDreiKguaLjQoxMDEwMzAxNCDlt7Tpm7fnibkt5aWH5bm75YaS6ZmpCjEwMTAzMDE1IOW3tOmbt+eJuS3mt7HmtbfkuLvlrrAKMTAxMDMwMTYg5be06Zu354m5LeWPpeiKkgoxMDEwMzAxNyDlt7Tpm7fnibkt6YeR6J2J5a2QCjEwMTAzMDE4IOW3tOmbt+eJuS3lgYfpnaLoiJ7kvJoKMTAxMDMwMTkg5be06Zu354m5LeiNo+iAgAoxMDEwMzAxMDAxIOW3tOmbt+eJuS3llrXmmJ/ni4Lmg7MK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A9S2FyOThrCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoxMDEwMzAyMSBLYXI5OGsKMTAxMDMwMjIgS2FyOThrLeenr+acqOiQjOm+mQoxMDEwMzAyMyBLYXI5OGst6I2j6ICACjEwMTAzMDI0IEthcjk4ay3ljp/lrZDpo47mmrQKMTAxMDMwMjUgS2FyOThrLeWlh+W5u+WGkumZqQoxMDEwMzAyNiBLYXI5OGst5pq06aOO6aqk6ZuoCjEwMTAzMDI3IEthcjk4ay3ojaPoqonoi7Hpm4QKMTAxMDMwMjggS2FyOThrLembquWcsOi/t+W9qQrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD1BTVIK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTAzMDMxIEFNUgoxMDEwMzAzMiBBTVIt5pif6IiwLeabmeWFiQoxMDEwMzAzMyBBTVIt5pif6IiwLeS6keeOrwoxMDEwMzAzNCBBTVIt5pif6IiwLeeZveWuhwoxMDEwMzAzNSBBTVIt5pif6IiwLeaegeWFiQoxMDEwMzAzNiBBTVIt6JCM6b6Z54m55pS76ZifCjEwMTAzMDM3IEFNUi3pm6rlnLDov7flvakKMTAxMDMwMzggQU1SLea1ruS4luaeq+W6rQrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD1BV00K4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTAzMDQwIEFXTQoxMDEwMzA0MSBBV00t5oCl6YCf6Z+z56ymCjEwMTAzMDQyIEFXTS3mnLrnlLIKMTAxMDMwNDMgQVdNLeWknOm5sAoxMDEwMzA0NCBBV00t6I2j6ICACjEwMTAzMDQ1IEFXTS3nu53lkb3lpKnlkK8KMTAxMDMwNDYgQVdNLeWkqeenpOW6pwoxMDEwMzA0NyBBV00t5Luj56CBOk1JTkkKMTAxMDMwNDggQVdNLeeOhOWGpQrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD1TVkQK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTAzMDUwIFNWRAoxMDEwMzA1MSBTVkQt5bCP5oap5pe25YWJCjEwMTAzMDUyIFNWRC3pk4HooYDolLfolocKMTAxMDMwNTMgU1ZELeS7o+eggTpNbE5sCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPU0yMDAK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTAzMDYwIE0yMDAKMTAxMDMwNjEgTTIwMC3lpI/ml6XkvZzmiJgKMTAxMDMwNjIgTTIwMC3ml4XooYzogIUKMTAxMDMwNjMgTTIwMC3oi43nqbnkvb/ogIUK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A9TTI0OQrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDQwMDEgTTI0OQoxMDEwNDAwMiBNMjQ5Leiwg+afpeWxgAoxMDEwNDAwMyBNMjQ5LeeIhumchwoxMDEwNDAwNCBNMjQ5LeS/oeadoQoxMDEwNDAwNSBNMjQ5LeaApemAn+mfs+espgoxMDEwNDAwNiBNMjQ5LemHjuS6uueMjuaJiwoxMDEwNDAwNyBNMjQ5LeacuuaisOmZjeelngoxMDEwNDAwOCBNMjQ5LeWkp+WKm+elngoxMDEwNDAwOSBNMjQ5LeiNo+iAgAoxMDEwNDAwMDAxIE0yNDkt54yO5omLCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPURQMjgK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTA0MDEwIERQMjgKMTAxMDQwMTEgRFAyOC3kuozlk4gKMTAxMDQwMTIgRFAyOC3msqfpvpkKMTAxMDQwMTMgRFAyOC3plK/liIPlh7rpnpgKMTAxMDQwMTQgRFAyOC3ojaPogIAKMTAxMDQwMTUgRFAyOC3okJ3ljZzmnqoKMTAxMDQwMTYgRFAyOC3njI7miYsKMTAxMDQwMTcgRFAyOC3ok5DmlLYKMTAxMDQwMTggRFAyOC3ku6PnoIE6TUlOSQrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD1NRzM0CuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoxMDEwNDAyMCBNRzM0CjEwMTA0MDIxIE1HMzQt5aWl5LiB56We5p6qCjEwMTA0MDIyIE1HMzQt5raC6bim5LmQ5ZutCjEwMTA0MDIzIE1HMzQt5Y+l6IqSCjEwMTA0MDI0IE1HMzQt5aSP5pel5L2c5oiYCjEwMTA0MDI1IE1HMzQt5pq06LWw55Sc5b+DCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPVJQSwrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDQwMzAgUlBLCjEwMTA0MDMxIFJQSy3okIzpvpnnibnmlLvpmJ8KMTAxMDQwMzIgUlBLLeWwj+aGqeaXtuWFiQoxMDEwNDAzMyBSUEst5oCS5rW354uC5b6SCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPU02MArigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDQwNDAgTTYwCjEwMTA0MDQxIE02MC3ljbfluJjlpKflsIYKMTAxMDQwNDIgTTYwLeaXheihjOiAhQoxMDEwNDA0MyBNNjAt55S15bm75LmL6Z+zCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPU1QNQrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDUwMDEgTVA1CjEwMTA1MDAyIE1QNS3osIPmn6XlsYAKMTAxMDUwMDMgTVA1LeacuueUsgoxMDEwNTAwNCBNUDUt5aSa5b2p5bCP54aKCjEwMTA1MDA1IE1QNS3ms6Hms6HpsqQKMTAxMDUwMDYgTVA1LeeIhuijggoxMDEwNTAwNyBNUDUt55a+55S1CjEwMTA1MDA4IE1QNS3lpYflubvlhpLpmakKMTAxMDUwMDkgTVA1LeiNo+iAgAoxMDEwNTAxMDAxIE1QNS3lpKrnmb3ph5HmmJ8K4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A9VVpsCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoxMDEwNTAxMSBVWkkKMTAxMDUwMTIgVVpJLeeJm+i9p+ezlgoxMDEwNTAxMyBVWkkt6I2j6ICACjEwMTA1MDE0IFVaSS3lj4zmjIEKMTAxMDUwMTUgVVpJLeWPjOaMgS3lhrDnhLDlj4znlJ8KMTAxMDUwMTYgVVpJLeeWvueUtQoxMDEwNTAxNyBVWkkt6JCd5Y2c5p6qCjEwMTA1MDE4IFVaSS3lj4zmjIEt54mn6YeO5a+76IqzCjEwMTA1MDE5IFVaSS3mnqrnpZ4KMTAxMDUwMjAgVVpsLeWPjOaMgS3ml6XmnIjlkIzovokKMTAxMDUwMTEwMSBVWkkt5rWu5LiW5p6r5bqtCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPVZlY3RvcgrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDUwMjEgVmVjdG9yCjEwMTA1MDIyIFZlY3Rvci3ov7fpm74KMTAxMDUwMjMgVmVjdG9yLeiNo+iAgAoxMDEwNTAyNCBWZWN0b3It5Y6f5a2Q6aOO5pq0CjEwMTA1MDI1IFZlY3Rvci3mnLrnlLIKMTAxMDUwMjYgVmVjdG9yLeWkhOWls+W6pwoxMDEwNTAyNyBWZWN0b3It5bCP5oap5pe25YWJCjEwMTA1MDI4IFZlY3Rvci3lsI/nuqLluL0KMTAxMDUwMjkgVmVjdG9yLeaJv+W9sQoxMDEwNTAyMDAxIFZlY3Rvci3pnZLnk7fmta7moqYK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A96YeO54mbCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoxMDEwNTAzMCDph47niZst546E5YalCjEwMTA1MDMxIOmHjueJmwoxMDEwNTAzMiDph47niZst6LCD5p+l5bGACjEwMTA1MDMzIOmHjueJmy3noLTlnY/lhZQKMTAxMDUwMzQg6YeO54mbLeavkua2sgoxMDEwNTAzNSDph47niZst54uu5b+D6I2j6ICACjEwMTA1MDM2IOmHjueJmy3niZvovafns5YKMTAxMDUwMzcg6YeO54mbLeaequelngoxMDEwNTAzOCDph47niZst6YeR54mb5bqnCjEwMTA1MDM5IOmHjueJmy3ojaPogIAK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A9UDkwCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoxMDEwNTA0MSBQOTAKMTAxMDUwNDIgUDkwLeeyvuWHhuS4gOWHuwoxMDEwNTA0MyBQOTAt5Y6f5oGS5pifCjEwMTA1MDQ0IFA5MC3ojaPogIAKMTAxMDUwNDUgUDkwLeaequelngoxMDEwNTA0NiBQOTAt5py655SyCjEwMTA1MDQ3IFA5MC3lpYflubvlhpLpmakKMTAxMDUwNDggUDkwLeWog+Wog+acugoxMDEwNTA0OSBQOTAt56Wd6J6NCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPVVNUDQ1CuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoxMDEwNTA1MCBVTVA0NQoxMDEwNTA1MSBVTVA0NS3mtoLpuKbkuZDlm60KMTAxMDUwNTIgVU1QNDUt5o2j6JuL6ay8CjEwMTA1MDUzIFVNUDQ1LeiNo+iAgAoxMDEwNTA1NCBVTVA0NS3pvpnooYzlpKnkuIsKMTAxMDUwNTUgVU1QNDUt55m95aSp6bmFCjEwMTA1MDU2IFVNUDQ1LeS7o+eggTpNSU5JCjEwMTA1MDU3IFVNUDQ1LeaImOi9pgrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD1NUDcK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTA1MDYwIE1QNwoxMDEwNTA2MSBNUDct6LCD5p+l5bGACjEwMTA1MDYyIE1QNy3mr5LmtrIKMTAxMDUwNjMgTVA3LeeIhuW8uQoxMDEwNTA2NCBNUDct57u05Lqs5oiY6a2CCjEwMTA1MDY1IE1QNy3ojaPogIAKMTAxMDUwNjYgTVA3Lea3sea1t+S4u+WusAoxMDEwNTA2NyBNUDct5aWH5bm75YaS6ZmpCjEwMTA1MDY4IE1QNy3ku6PnoIE6TUlOSQoxMDEwNTA2OSBNUDct5a6I5oqk6ICFCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPeaxpOWnhumAigrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDUwNzAg5rGk5aeG6YCKCjEwMTA1MDcxIOaxpOWnhumAii3pm6rlnLDov7flvakKMTAxMDUwNzIg5rGk5aeG6YCKLeiTkOaUtgoxMDEwNTA3MyDmsaTlp4bpgIot6I2j6KqJ6Iux6ZuECjEwMTA1MDc0IOaxpOWnhumAii3lrpnmlq8K4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A9QUtzNzRVCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoxMDEwNTA4MSBBS3M3NFUt5pqX54Sw6aqR5aOrCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPeawlOmUpArigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDYwMDEg5rCU6ZSkCjEwMTA2MDAyIOawlOmUpC3osIPmn6XlsYAKMTAxMDYwMDMg5rCU6ZSkLeawtOicnOahgwoxMDEwNjAwNCDmsJTplKQt6L+35pav5ouJCjEwMTA2MDA1IOawlOmUpC3lvanombnonKXonLQKMTAxMDYwMDYg5rCU6ZSkLeeMjuaJiwoxMDEwNjAwNyDmsJTplKQt6amx6YCQ6IiwCjEwMTA2MDA5IOawlOmUpC3ojaPogIAKMTAxMDYwMTAg5rCU6ZSkLeS7o+eggTpNbE5sCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPVM2ODYK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTA2MDExIFM2ODYKMTAxMDYwMTIgUzY4Ni3osIPmn6XlsYAKMTAxMDYwMTMgUzY4Ni3nsonnoo7ogIUKMTAxMDYwMTQgUzY4Ni3niIboo4IKMTAxMDYwMTUgUzY4Ni3lsITmiYvluqcKMTAxMDYwMTYgUzY4Ni3mr5LliLoKMTAxMDYwMTkgUzY4Ni3ojaPogIAK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A95Y+M5oyBUzY4NgrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDYwNTAg5Y+M5oyBUzY4Ni3ni6zooYzkvqAKMTAxMDYwNTEg5Y+M5oyBUzY4NgrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD1TMTg5NwrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDYwMjAgUzE4OTct5py65qKw6ZmN56WeCjEwMTA2MDIxIFMxODk3CjEwMTA2MDIyIFMxODk3LeeMjuaJiwoxMDEwNjAyMyBTMTg5Ny3ku6PnoIE6TUlOSQrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD1EQlMK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTA2MDMxIERCUwoxMDEwNjAzMiBEQlMt5peX5byA5b6X6IOcCjEwMTA2MDMzIERCUy3ojaPogIAKMTAxMDYwMzQgREJTLeWGsOWOn+WwhOaJiwoxMDEwNjAzNSBEQlMt6Zuq5Zyw6L+35b2pCjEwMTA2MDM2IERCUy3mmpblhqzmgYvmm7IK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A9UzEySwrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDYwNDAgUzEySwoxMDEwNjA0MSBTMTJLLeWPsuWJjemcuOS4uwoxMDEwNjA0MiBTMTJLLeezluaenOWxiwrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD1VU1AK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMjAxMDAxIFVTUAoxMDIwMTAwMiBVU1At6LCD5p+l5bGACjEwMjAxMDAzIFVTUC3mqZnlrZAKMTAyMDEwMDQgVVNQLeWFlOe+jue+jgoxMDIwMTAwNSBVU1At57OW5p6c5bGLCjEwMjAxMDA5IFVTUC3ojaPogIAKMTAyMDEwMTAgVVNQLeahg+iKsQrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD3mspnmvKDkuYvpubAK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMjAxMDExIOaymea8oOS5i+m5sAoxMDIwMTAxMiDmspnmvKDkuYvpubAt6Laj5ZGz5pe25YWJCjEwMjAxMDEzIOaymea8oOS5i+m5sC3lh6Tlh7AKMTAyMDEwMTQg5rKZ5ryg5LmL6bmwLeiNo+iAgAoxMDIwMTAxNSDmspnmvKDkuYvpubAt5rex5rW35Li75a6wCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPeefreeuoeaVo+W8ueaeqgrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAyMDEwMjEg55+t566h6Zyw5by55p6qCjEwMjAxMDIyIOefreeuoemcsOW8ueaeqi3lsI/mtbfosZoKMTAyMDEwMjMg55+t566h6Zyw5by55p6qLeiNo+iAgAoxMDIwMTAyNCDnn63nrqHpnLDlvLnmnqot5Y6f5a2Q6aOO5pq0CuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPeW8ueW8kwrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAyMDEwMzAg5by55byTCjEwMjAxMDMxIOW8ueW8ky3np6/mnKgK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A9R2xvY2sxOQrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAyMDEwNDAgR2xvY2sxOQoxMDIwMTA0MSBHbG9jazE5LeWjs+S4reW5veeBtQoxMDIwMTA0MiBHbG9jazE5LeaAquWFvea0vuWvuQoxMDIwMTA0MyBHbG9jazE5LeiNo+iAgAoxMDIwMTA0NCBHbG9jazE5LeaNo+ibi+msvAoxMDIwMTA0NSBHbG9jazE5LeeCveeDreiKguaLjQoxMDIwMTA0NiBHbG9jazE5LeiQjOWKqOWHuuWHuwrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD3lt6bova4K4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMjAxMDUwIOW3pui9rgoxMDIwMTA1MSDlt6bova4t5aSq6Ziz56WeCjEwMjAxMDUyIOW3pui9ri3ljp/mgZLmmJ8KMTAyMDEwNTMg5bem6L2uLeiNo+iAgAoxMDIwMTA1NCDlt6bova4t6JCd5Y2c5p6qCjEwMjAxMDU1IOW3pui9ri3lpI/ml6XkvZzmiJgK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A95Y+M5oyB5p+v5bCU54m5CuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoxMDIwMTA2MCDlj4zmjIHmn6/lsJTnibkKMTAyMDEwNjEg5Y+M5oyB5p+v5bCU54m5LeWGsOWOn+WwhOaJiwoxMDIwMTA2MiDlj4zmjIHmn6/lsJTnibkt57ud5ZG95aSp5ZCvCjEwMjAxMDY0IOWPjOaMgeafr+WwlOeJuS3nu67moqblubvml4UK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A95Y+M5oyB6Zyw5by55p6qCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoxMDIwMTA3MCDlj4zmjIHpnLDlvLnmnqoKMTAyMDEwNzEg5Y+M5oyB6Zyw5by5LeiQjOm+meeJueaUu+mYnwoxMDIwMTA3MiDlj4zmjIHpnLDlvLkt57q46LSo6ZuV5Yi7CuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPeavm+eRnwrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAyMDEwODAg5q+b55GfCjEwMjAxMDgxIOavm+eRny3ojaPoqonoi7Hpm4QKMTAyMDEwODIg5q+b55GfLeWFlOWFlOiMtuivneS8mgrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD3lj4zmjIHmspnpubAK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMjAxMDkwIOWPjOaMgeaymem5sAoxMDIwMTA5MSDlj4zmjIHmspnpubAt5bCP55m96b6ZCjEwMjAxMDkyIOWPjOaMgeaymem5sC3mmpbkuJzmgYvmm7IK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A95Y+M5oyBVVNQCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoxMDIwMTEwMCDlj4zmjIFVU1AKMTAyMDExMDEg5Y+M5oyBVVNQLeiOsuiKseerpeWtkAoxMDIwMTEwMiDlj4zmjIFVU1At5Y+M6bG85bqnCjEwMjAxMTAzIOWPjOaMgVVTUC3llrXmmJ/ni4Lmg7MK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A95Y+M5oyB5bem6L2uCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoxMDIwMTIwMCDlj4zmjIHlt6bova4KMTAyMDEyMDEg5Y+M5oyB5bem6L2uLeaAkua1t+eLguW+kgoxMDIwMTIwMiDlj4zmjIHlt6bova4t5pGp576v5bqnCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPeWPjOaMgUdsb2NrMTkK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMjAxMzAwIOWPjOaMgUdsb2NrMTkKMTAyMDEzMDEg5Y+M5oyBR2xvY2sxOS3mnKrmnaXom4flvbEK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A9Q1o3NQrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAyMDE0MDEgQ1o3NS3nmb7lj5johLjosLEK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCgrmrablmajlkI3np7A95Yqg54m55p6XCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoxMDEwNzAwMSDliqDnibnmnpcKMTAxMDcwMDIg5Yqg54m55p6XLembt+mchuS5i+aAkgoxMDEwNzAwMyDliqDnibnmnpct6YeO5Lq654yO5omLCjEwMTA3MDA0IOWKoOeJueaely3ojaPogIAKMTAxMDcwMDUg5Yqg54m55p6XLeezluaenOWxiwoxMDEwNzAwNiDliqDnibnmnpct6Zuq5Zyw6L+35b2pCjEwMTA3MDA3IOWKoOeJueaely3ni67lrZDluqcKMTAxMDcwMDgg5Yqg54m55p6XLeavkuWIugrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD3lj4zmjIHliqDnibnmnpcK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTA3MDMwIOWPjOaMgeWKoOeJueaelwoxMDEwNzAzMSDlj4zmjIHliqDnibnmnpct5aSx5o6n5pe25bqPCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPUtBQ+mUr+W8j+acuuaeqgrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDcwMjEgS0FD6ZSv5byP5py65p6qLeWTiOi/quaWrwoxMDEwNzAyMiBLQUPplK/lvI/mnLrmnqot5rWu5LiW5p6r5bqtCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPeeIhueCuOW8kwrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDgwMDEg54iG54K45byTCjEwMTA4MDAyIOeIhueCuOW8ky3ml6Xmmq7mnIjlvbEKMTAxMDgwMDMg54iG54K45byTLem7kemHkeWJkemtggoxMDEwODAwNCDniIbngrjlvJMt6YeO5Lq654yO5omLCjEwMTA4MDA1IOeIhueCuOW8ky3mnLrmorDpmY3npZ4KMTAxMDgwMDYg54iG54K45byTLeiLsembhOmZjeS4tAoxMDEwODAwNyDniIbngrjlvJMt5q+S5Yi6CuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPeeBq+eEsOWWt+WwhOWZqArigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDgwMTAg54Gr54Sw5Za35bCE5ZmoCjEwMTA4MDExIOeBq+eEsOWWt+WwhOWZqC3pnLnpm7PngasKMTAxMDgwMTIg54Gr54Sw5Za35bCE5ZmoLemHjuS6uuWFi+aYnwoxMDEwODAxMyDngavnhLDllrflsITlmagt54yO5omLCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPeamtOW8ueWPkeWwhOWZqArigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDgwMjAg5qa05by55Y+R5bCE5ZmoCjEwMTA4MDIxIOamtOW8ueWPkeWwhOWZqC3lubvlvanngbXpqbkKMTAxMDgwMjIg5qa05by55Y+R5bCE5ZmoLeWWteaYn+eLguaDswrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD1SUEflj5HlsITlmagK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwMTA4MDQwIFJQR+WPkeWwhOWZqAoxMDEwODA0MSBSUEflj5HlsITlmagt5Y2D5py66bi/5b2xCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPemYsueIhuebvgrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAxMDgwMzEg6Ziy54iG55u+LemTgeihgOiUt+iWhwoxMDEwODAzMiDpmLLniIbnm74t6Z2S55O35rWu5qKmCuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApuKApgoK5q2m5Zmo5ZCN56ewPei/keaImOatpuWZqOWkp+WFqArigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKMTAzMDEwMDEg5ouz5aS0CjEwMzAxMDAyIOeLvOeJmeajkgoxMDMwMTAwMyDnn7Pnn5so5peg5pWI56m654q25oCBKQoxMDMwMTAwNCDnn63liZEo5peg5pWI56m654q25oCBKQoxMDMwMTAwNSDnqoHliLrplb/mnqoo5peg5pWI56m654q25oCBKQoxMDMwMTAwNiDog73ph4/liZEo5peg5pWI56m654q25oCBKQoxMDMwMTAwNyDlnKPor57mi5DmnZbns5YKMTAzMDEwMDgg5aSn6JGxCjEwMzAxMDA5IOiDoeiQneWNnAoxMDMwMTAxMCDplKTlrZAt56ev5pyoCjEwMzAxMDExIOatpuWjq+WIgC3lhrDmnqvkuYvliIMKMTAzMDEwMTIg6aqo55+bCjEwMzAxMDEzIOiIueahqAoxMDMwMTAxNCDmsJTnkIMt5o2j6JuL6ay8CjEwMzAxMDE1IOWFieWJkS3ljp/mgZLmmJ8KMTAzMDEwMTYg5pqX6buR54u854mZ5qOSCjEwMzAxMDE3IOiSuOaxveaImOaWpwoxMDMwMTAxOCDog73ph4/lj4zliZEKMTAzMDEwMTkg6Iux6ZuE5a6d5YmRCjEwMzAxMDIwIOacuueUsumHjemUpAoxMDMwMTAyMSDpuqblhYvpo44t54K954Ot6IqC5ouNCjEwMzAxMDIyIOaLs+WktCjmnInmlYjnqbrnirbmgIEpCjEwMzAxMDIzIOiQneWNnOWIgAoxMDMwMTAyNCDokJ3ljZzliIAt54Kr5b2pCjEwMzAxMDI1IOiQneWNnOWIgD4o6JCd5Y2c5YiA5qih5byPKQoxMDMwMTAyNiDokJ3ljZzliIAt54Kr5b2pPijokJ3ljZzliIDmqKHlvI8pCjEwMzAxMDI3IOS4ieWPieaIny3mt7HmtbfkuLvlrrAKMTAzMDEwMjgg5Yaw5r+A5YeMLeezluaenOWxiwoxMDMwMTAyOSDplbDliIAt57ud5ZG95aSp5ZCvCjEwMzAxMDMwIOaImOaWl+S6uuWBti3or7rlqJzlqJwKMTAzMDEwMzEg6L+Z5qC557OW5p6c5pyJ54K56YKq5oG2CjEwMzAxMDMyIOaLs+Wlly3okIzpvpnnibnmlLvpmJ8KMTAzMDEwMzMg5YWF5rCU6bG8LeWkj+aXpeS9nOaImAoxMDMwMTAzNCDph5Hnro3mo5IKMTAzMDEwMzUg5byv5YiALeWkqeidjuW6pwoxMDMwMTAzNiDkub7lnaTlnIgKMTAzMDEwMzcg6ZSaLeaAkua1t+eLguW+kgoxMDMwMTAzOCDmo5LnkIPmo40t5pqW5Yas5oGL5puyCjEwMzAxMDM5IOWJkS3mnKrmnaXmiJjplIsKMTAzMDEwNDAg5LiI5YWr6JuH55+bCjEwMzAxMDQxIOaMh+iZji3lubvlvanngbXpqbkKMTAzMDEwNDIg5omL5panLee6uOi0qOmbleWIuwoxMDMwMTA0MyDljJXpppYt54yO5omLCjEwMzAxMDQ0IOmTgemUuS3njqvnkbAKMTAzMDEwNDUg5oqY5omHLeeZvuWPmOiEuOiwsQoxMDMwMjAwMSDph47kurrni7zniZnmo5IKMTAzMDIwMDIg6Iux6ZuE5a6d5YmRCjEwMzAyMDAzIOmqqOefmwoxMDMwMjAwNCDoi7Hpm4Tplb/liZEKMTAzMDIwMDUg6JCo5ruh5rOV5p2WCjEwMzAyMDA2IOiDvemHj+WPjOWJkQoxMDMwMjAwNyDph47kurrlm77ohb7mn7EKMTAzMDIwMDgg5aS06aKG6aqo6ZWwCjEwMzAyMDA5IOeMqeeMqeaLswoxMDMwMjAxMCDlj5joibLpvpnljJXpppYKMTAzMDIwMTEg6JK45rG95oiY5panCjEwMzAyMDEyIOacuueUsumHjemUpAoxMDMwMjAxMyDlsI/onJjom5vljaLljaEKMTAzMDIwMTQg5rKJ552h55qE5pat5YmRCjEwMzAyMDE1IOiLj+mGkueahOmtlOWJkQoxMDMwMjAxNiDlpbPlt6vlrp3nj6AKMTAzMDIwMTcg5aSW5pif5ouz5aWXCjEwMzAyMDE4IOmxvOWPiQoxMDMwMjAxOSDnrKblkpLkuYvliZEKMTAzMDIwMjAg6amx6YKq56ym5ZKSCjEwMzAyMDIxIOayu+eWl+mVv+adlgoxMDMwMjAyMiDmoJHkurrmnKjmp4wKMTAzMDIwMjMg5b+N6ICF5aSq5YiACjEwMzAyMDI0IOaDkeW/g+eEsOeIqijmnInmlYjnqbrmqKHlnospCjEwMzAyMDI1IOWNoOaYn+azleadlgrigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKCuatpuWZqOWQjeensD3mipXmjrflhpfkvZnmnYLniakK4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCm4oCmCjEwNDAxMDAxIOegtOeJh+aJi+mbtwoxMDQwMTAwMiDnoLTniYfmiYvpm7ct5aWH5byC5p6cCjEwNDAxMDAzIOegtOeJh+aJi+mbty3nlJjok50KMTA0MDEwMDQg5Lib5p6X5omL6Zu3CjEwNDAxMDA1IOegtOeJh+aJi+mbty3np6/mnKgKMTA0MDEwMDYg56C054mH5omL6Zu3LeeyveWtkAoxMDQwMTAwNyDnoLTniYfmiYvpm7ct5o2j6JuL6ay8CjEwNDAxMDA4IOegtOeJh+aJi+mbty3ojaPogIAKMTA0MDEwMDkg56C054mH5omL6Zu3Lee7neWRveWkqeWQrwoxMDQwMTAxMCDnoLTniYfmiYvpm7ct6b6Z6KGM5aSp5LiLCjEwNDAxMDAwMDEg56C054mH5omL6Zu3LemjjueBq+i9rsK36Z2S6bi+CjEwNDAxMDAwMDIg56C054mH5omL6Zu3Lee7ruidtgoxMDQwMTAwMDAzIOegtOeJh+aJi+mbty3ntKvnvZflhbAKMTA0MDEwMTEg54eD54On5by5CjEwNDAxMDEyIOeHg+eDp+W8uS3lpYflvILmnpwKMTA0MDEwMTMg54eD54On5by5LeeUmOiTnQoxMDQwMTAxNCDnh4Png6flvLkt6Jyl6Jy05Lq66I2v5YmCCjEwNDAxMDE1IOeHg+eDp+W8uS3pvpnooYzlpKnkuIsKMTA0MDEwMTYg54eD54On5by5LeiNo+iAgAoxMDQwMTAxNyDnh4Png6flvLkt6JCM6b6Z54m55pS76ZifCjEwNDAxMDE4IOeHg+eDp+W8uS3po47ngavova7Ct+eBq+WHpAoxMDQwMTAxOSDnh4Png6flvLkt55m+5Y+Y6IS46LCxCjEwNDAxMDUwIOmTneeDreWJggoxMDQwMTA1MSDpk53ng63liYIt5bm75b2p54G16am5CjEwNDAyMDAxIOeDn+mbvuW8uQoxMDQwMjAwMiDng5/pm77lvLkt5aWH5byC5p6cCjEwNDAyMDAzIOeDn+mbvuW8uS3nlJjok50KMTA0MDIwMDQg54Of6Zu+5by5LeiNo+iAgAoxMDQwMjAwNSDng5/pm77lvLkt57OW5p6c5bGLCjEwNDAyMDA2IOeDn+mbvuW8uS3pvpnooYzlpKnkuIsKMTA0MDIwMDcg54Of6Zu+5by5LeeZvuWPmOiEuOiwsQoxMDQwMjAxMSDpl6rlhYnlvLkKMTA0MDIwMTIg6Zeq5YWJ5by5LeWlh+W8guaenAoxMDQwMjAxMyDpl6rlhYnlvLkt55SY6JOdCjEwNDAyMDE0IOmXquWFieW8uS3ojaPogIAKMTA0MDIwMTUg6Zeq5YWJ5by5LeeCveeDreiKguaLjQoxMDQwMjAxNiDpl6rlhYnlvLkt5rex5rW36aKG5Li7CjEwNDAyMDE3IOmXquWFieW8uS3pvpnooYzlpKnkuIsKMTA0MDIwMTgg6Zeq5YWJ5by5LeaAkua1t+eLguW+kgoxMDQwMjAxOSDpl6rlhYnlvLkt5qix6IqxCjEwNDAyMDUwIOmch+aSvOW8uQoxMDQwMjA1MSDpnIfmkrzlvLkt57q46LSo5oOK5ZacCjEwNDAxMDIxIOaNleWFveWkuQoxMDQwMTAyMiDnop/niYfmjZXlhb3lpLkKMTA0MDEwMzEg5Zyw6Zu3CjEwNDAxMDMyIOenkeW5u+WcsOmbtwoxMDQwMTAzMyDnrJHohLjlnLDpm7cKMTA0MDEwMzQg5py65Zmo5Lq65Zyw6Zu3CjEwNDAxMDM1IOaenOWGu+WcsOmbtwoxMDQwMTAzNiDllLHniYflnLDpm7cKMTA0MDEwNDAg57KY5oCn5omL6Zu3CjEwNDAxMDQxIOeymOaAp+aJi+mbty3lsI/nq6DpsbwKMTA0MDEwNDIg57KY5oCn5omL6Zu3LeaEpOaAkuWPlOWPlAoxMDQwMTA0MyDnspjmgKfmiYvpm7ct57Sn566N5ZKSCjEwNDAxMDQ0IOeymOaAp+aJi+mbty3mnKrmnaXom4flvbEKMTA0MDIwMjAg6K+x6aW15by5W+ayoeacieW7uuaooV0KMTA0MDIwMjEg6K+x6aW15by5LeWknOWFiemxvOmltVvmsqHmnInlu7rmqKFdCjEwNDAyMDIyIOivsemlteW8uS3ph5HpsbzpsbzppbVb5rKh5pyJ5bu65qihXQoxMDQwMjAzMCDlhrDlhrvmiYvpm7cKMTA0MDIwMzEg5Yaw5Ya75omL6Zu3LeWGu+mxvAoxMDQwMjAzMiDlhrDlhrvmiYvpm7ct5qix5qGD6Zuq57OVCjEwNTAxMDAxIOmSqeeIqlvmlLnkuobnlKjkuI3kuoZdCjEwNjAxMDAxIOaApeaVkeWMhVvkv67mlLnml6DmlYhdCjEwNjAxMDAyIOe7t+W4plvkv67mlLnml6DmlYhdCjEwNjAxMDAzIOWMu+eWl+eusVvkv67mlLnml6DmlYhdCjEwNjAxMDA0IOmmmeiViVvkv67mlLnml6DmlYhdCjEwNjAxMDA1IOeDpOm4oeiFv1vkv67mlLnml6DmlYhdCjEwNjAxMDA2IOeDpOWFqOm4oVvkv67mlLnml6DmlYhdCjEwNjAyMDAxIOeCuOiNr+ahtlvmlLnkuobnlKjkuI3kuoZdCjEwNjAyMDAyIOacm+i/nOmVnArigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKbigKYKXV0KCmxvY2FsIGZ1bmN0aW9uIHBhcnNlV2VhcG9uTGlzdChsaXN0KQpsb2NhbCBjYXRlZ29yaWVzID0ge30KbG9jYWwgb3JkZXJlZENhdGVnb3JpZXMgPSB7fSAtLSDnlKjkuo7kv53lrZjpobrluo8KbG9jYWwgY3VycmVudENhdGVnb3J5ID0gbmlsCmxvY2FsIGxpbmVzID0ge30KZm9yIGxpbmUgaW4gbGlzdDpnbWF0Y2goIlteXHJcbl0rIikgZG8KdGFibGUuaW5zZXJ0KGxpbmVzLCBsaW5lKQplbmQKCmZvciBfLCBsaW5lIGluIGlwYWlycyhsaW5lcykgZG8KaWYgbGluZTpmaW5kKCLmrablmajlkI3np7A9IikgdGhlbgpjdXJyZW50Q2F0ZWdvcnkgPSBsaW5lOm1hdGNoKCLmrablmajlkI3np7A9KC4qKSIpCmNhdGVnb3JpZXNbY3VycmVudENhdGVnb3J5XSA9IHt9CnRhYmxlLmluc2VydChvcmRlcmVkQ2F0ZWdvcmllcywgY3VycmVudENhdGVnb3J5KSAtLSDkv53lrZjpobrluo8KZWxzZWlmIGxpbmU6ZmluZCgiJWQrIikgdGhlbgpsb2NhbCBjb2RlLCBuYW1lID0gbGluZTptYXRjaCgiKCVkKyklcysoLispIikKdGFibGUuaW5zZXJ0KGNhdGVnb3JpZXNbY3VycmVudENhdGVnb3J5XSwge2NvZGUgPSBjb2RlLCBuYW1lID0gbmFtZX0pCmVuZAplbmQKcmV0dXJuIGNhdGVnb3JpZXMsIG9yZGVyZWRDYXRlZ29yaWVzCmVuZAoKbG9jYWwgZnVuY3Rpb24gc2VsZWN0V2VhcG9uKCkKbG9jYWwgY2F0ZWdvcmllcywgb3JkZXJlZENhdGVnb3JpZXMgPSBwYXJzZVdlYXBvbkxpc3Qod2VhcG9uTGlzdCkKbG9jYWwgY2F0ZWdvcnlDaG9pY2UgPSBnZy5jaG9pY2Uob3JkZXJlZENhdGVnb3JpZXMsICLpgInmi6nmrablmajnsbvliKsiKQppZiBub3QgY2F0ZWdvcnlDaG9pY2UgdGhlbiByZXR1cm4gZW5kCgpsb2NhbCBzZWxlY3RlZENhdGVnb3J5ID0gb3JkZXJlZENhdGVnb3JpZXNbY2F0ZWdvcnlDaG9pY2VdCmxvY2FsIHdlYXBvbnMgPSBjYXRlZ29yaWVzW3NlbGVjdGVkQ2F0ZWdvcnldCgpsb2NhbCB3ZWFwb25OYW1lcyA9IHt9CmZvciBfLCB3ZWFwb24gaW4gaXBhaXJzKHdlYXBvbnMpIGRvCnRhYmxlLmluc2VydCh3ZWFwb25OYW1lcywgd2VhcG9uLm5hbWUpCmVuZAoKbG9jYWwgd2VhcG9uQ2hvaWNlID0gZ2cuY2hvaWNlKHdlYXBvbk5hbWVzLCAi6YCJ5oup5YW35L2T5q2m5ZmoIikKaWYgbm90IHdlYXBvbkNob2ljZSB0aGVuIHJldHVybiBlbmQKCmxvY2FsIHNlbGVjdGVkV2VhcG9uID0gd2VhcG9uc1t3ZWFwb25DaG9pY2VdCnJldHVybiBzZWxlY3RlZFdlYXBvbi5jb2RlLCBzZWxlY3RlZFdlYXBvbi5uYW1lCmVuZAoKbG9jYWwgc2VsZWN0ZWRXZWFwb25Db2RlLCBzZWxlY3RlZFdlYXBvbk5hbWUgPSBzZWxlY3RXZWFwb24oKQppZiBzZWxlY3RlZFdlYXBvbkNvZGUgYW5kIHNlbGVjdGVkV2VhcG9uTmFtZSB0aGVuCnNvID0gZ2cuZ2V0UmFuZ2VzTGlzdCgnbGliaWwyY3BwLnNvJylbMV0uc3RhcnQKbG9jYWwgYWRkcmVzc2VzID0gewoKe2FkZHJlc3MgPSBzbyArIDB4MUEzQzkyQywgZmxhZ3MgPSA0LCB2YWx1ZSA9ICd+QSBTVE1EQU5FIFIxMCwge1IwLFIyLFI0LFI2LFI3LFIxMSxSMTIsU1AsTFIsUEN9JyB9LAp7YWRkcmVzcyA9IHNvICsgMHgxQTUyODQ0LCBmbGFncyA9IDQsIHZhbHVlID0gc2VsZWN0ZWRXZWFwb25Db2RlIH0sCnthZGRyZXNzID0gc28gKyAweDFFNTdGQzAsIGZsYWdzID0gNCwgdmFsdWUgPSAnfkEgU1RNREFORSBSMCwge1IwLFIyLFI0LVI4LFNQLExSLFBDfScgfSwKe2FkZHJlc3MgPSBzbyArIDB4MUU1OUJGQywgZmxhZ3MgPSA0LCB2YWx1ZSA9IHNlbGVjdGVkV2VhcG9uQ29kZSB9LAp7YWRkcmVzcyA9IHNvICsgMHgxRTU4MDQ4LCBmbGFncyA9IDQsIHZhbHVlID0gJ35BIEFERFBMIFIwLCBSMCwgIzEwNCcgfSwKfQpnZy5zZXRWYWx1ZXMoYWRkcmVzc2VzKQotLWdnLnRvYXN0KCJpZC1Dc1xu5q2m5Zmo5ZCN56ewOiAiIC4uIHNlbGVjdGVkV2VhcG9uTmFtZS4uIlxu5q2m5Zmo5Luj56CBOiAiIC4uIHNlbGVjdGVkV2VhcG9uQ29kZS4uIiIpCmVuZAplbmQKfSwgewoi5pegIiwKZnVuY3Rpb24oKQoKZW5kLApmdW5jdGlvbigpCgplbmQKfSwgewoi5pegIiwKZnVuY3Rpb24oKQoKZW5kLApmdW5jdGlvbigpCgplbmQKfSwKfSksCgoKfX0sCls2XT17LS3nrKzlha3liIbljLoKWyfliIbljLrlkI3lrZcnXT0i5pegIiwKWyflip/og73phY3nva4nXT17Cgp9LH0KfQrnrKzkuozpobUgPSB7Clsn5YiG6aG15ZCN5a2XJ109Iumfs+S5kCIsClsxXT17LS3nrKzkuIDliIbljLoKWyfliIbljLrlkI3lrZcnXT0i5pCc57Si6Z+z5LmQIiwKWyflip/og73phY3nva4nXT17CmNoYW5nYW4uYnV0dG9uKCLmmoLlgZwiLApmdW5jdGlvbigpCnRvTXVzaWMoIuW3suaaguWBnCIpCmVuZCksCnd5eWxvZywKfSx9LApbMl09ey0t56ys5LqM5YiG5Yy6Clsn5YiG5Yy65ZCN5a2XJ109IuaOqOiNkOmfs+S5kCIsClsn5Yqf6IO96YWN572uJ109ewoKfSx9Cn0K56ys5LiJ6aG1PXsKWyfliIbpobXlkI3lrZcnXT0i5pegIiwKWzFdPXsKWyfliIbljLrlkI3lrZcnXT0i5pegIiwKWyflip/og73phY3nva4nXT17Cgp9LH0KfQoKCgoK56ys5Zub6aG1ID0gewpbJ+WIhumhteWQjeWtlyddPSLorr7nva4iLApbMV09ey0t56ys5LiA5YiG5Yy6Clsn5YiG5Yy65ZCN5a2XJ109IlVJ6K6+572uIiwKWyflip/og73phY3nva4nXT17CmNoYW5nYW4uc3dpdGNoKCLpn7Pph4/plK7pmpDol49VSSIsCmZ1bmN0aW9uKCkK6Z+z6YeP6ZSuPXRydWUKZW5kLApmdW5jdGlvbigpCumfs+mHj+mUrj1mYWxzZQplbmQpLApjaGFuZ2FuLnN3aXRjaCgi5pGH5LiA5pGH6ZqQ6JePVUkiLApmdW5jdGlvbigpCuaRh+S4gOaRhz10cnVlCmVuZCwKZnVuY3Rpb24oKQrmkYfkuIDmkYc9ZmFsc2UKZW5kKSwKY2hhbmdhbi5idXR0b24oCiLot5Hpqaznga8iLApmdW5jdGlvbigpCmxvY2FsIHJnYl90aW1lID0gMAoKLS0g5a6a5LmJ5LiA5Liq5Ye95pWw5p2l55Sf5oiQ5Yqo5oCBIFJHQiDpopzoibIKZnVuY3Rpb24gZ2V0X2R5bmFtaWNfcmdiKCkKICAgIHJnYl90aW1lID0gcmdiX3RpbWUgKyAwLjAxNiAtLSDlgYforr7mr4/luKfml7bpl7Tpl7TpmpTkuLogMTZtcyAoNjAgRlBTKQogICAgbG9jYWwgciA9IChtYXRoLnNpbihyZ2JfdGltZSAqIDIuMCkgKyAxLjApIC8gMi4wCiAgICBsb2NhbCBnID0gKG1hdGguc2luKHJnYl90aW1lICogMi4wICsgMi4wICogbWF0aC5waSAvIDMuMCkgKyAxLjApIC8gMi4wCiAgICBsb2NhbCBiID0gKG1hdGguc2luKHJnYl90aW1lICogMi4wICsgNC4wICogbWF0aC5waSAvIDMuMCkgKyAxLjApIC8gMi4wCiAgICByZXR1cm4gciwgZywgYgplbmQKCi0tIOWwhiBSR0Ig5YiG6YeP6L2s5o2i5Li65Y2B5YWt6L+b5Yi26aKc6Imy5YC8CmZ1bmN0aW9uIHJnYl90b19oZXgociwgZywgYikKICAgIHJldHVybiBzdHJpbmcuZm9ybWF0KCIweGZmJTAyeCUwMnglMDJ4IiwgbWF0aC5mbG9vcihyICogMjU1KSwgbWF0aC5mbG9vcihnICogMjU1KSwgbWF0aC5mbG9vcihiICogMjU1KSkKZW5kCgotLSDkuLvlvqrnjq8Kd2hpbGUgdHJ1ZSBkbwogICAgLS0g6I635Y+W5Yqo5oCBIFJHQiDpopzoibIKICAgIGxvY2FsIHIsIGcsIGIgPSBnZXRfZHluYW1pY19yZ2IoKQoKICAgIC0tIOWwhiBSR0Ig5YiG6YeP6L2s5o2i5Li65Y2B5YWt6L+b5Yi26aKc6Imy5YC8CiAgICBsb2NhbCBoZXhfY29sb3IgPSByZ2JfdG9faGV4KHIsIGcsIGIpCgogICAgLS0g5bCG5Yqo5oCB6aKc6Imy6K6+572u5Yiw5a+56LGh5LiKCiAgICB0aW1lX01VU0lDOnNldFRleHRDb2xvcihoZXhfY29sb3IpCiAgICB0b3BfbXVzaWM6c2V0VGV4dENvbG9yKGhleF9jb2xvcikKCiAgICAtLSDnrYnlvoXkuIDmrrXml7bpl7QKICAgIGdnLnNsZWVwKDE2KSAtLSDlgYforr7mr4/luKfml7bpl7Tpl7TpmpTkuLogMTZtcyAoNjAgRlBTKQplbmQKZW5kKSwKY2hhbmdhbi5idXR0b24oIuWKoOWFpeaAu+e+pCIsCmZ1bmN0aW9uKCkKZ2cuUVFncm91cCgiIikKZW5kKSwKCmNoYW5nYW4uYnV0dG9uKAoi6YCA5Ye6IiwKZnVuY3Rpb24oKQp0dWljaHU9MQplbmQpLAp9LH0KfQoKY2hhbmdhbi5tZW51KHsK56ys5LiA6aG1LC0t6LCD55So5LiK6L6555qE5YiG6aG16YWN572uCuesrOS6jOmhtSwK56ys5LiJ6aG1LArnrKzlm5vpobUKfSk=") local base64 = load(base64) pcall(base64)