21185211239mzdmFyIGdnMT1NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqOTk5OTk5OTk5OSkrMTAwMDAwMDAwMDsNCnZhciBnZzI9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjk5OTk5OTk5OSkrMTAwMDAwMDAwOw0KdmFyIGRhdGE0PSIiOw0KdmFyIGdnMz1nZzEudG9TdHJpbmcoKTsNCnZhciBnZzQ9Z2cyLnRvU3RyaW5nKCk7DQp2YXIgaGgwPXBhcnNlSW50KGdnMy5jaGFyQXQoMCkpOw0KdmFyIGhoMT1wYXJzZUludChnZzMuY2hhckF0KDEpKTsNCnZhciBoaDI9cGFyc2VJbnQoZ2czLmNoYXJBdCgyKSk7DQp2YXIgaGgzPXBhcnNlSW50KGdnMy5jaGFyQXQoMykpOw0KdmFyIGhoND1wYXJzZUludChnZzMuY2hhckF0KDQpKTsNCnZhciBoaDU9cGFyc2VJbnQoZ2czLmNoYXJBdCg1KSk7DQp2YXIgaGg2PXBhcnNlSW50KGdnMy5jaGFyQXQoNikpOw0KdmFyIGhoNz1wYXJzZUludChnZzMuY2hhckF0KDcpKTsNCnZhciBoaDg9cGFyc2VJbnQoZ2czLmNoYXJBdCg4KSk7DQp2YXIgaGg5PXBhcnNlSW50KGdnMy5jaGFyQXQoOSkpOw0KdmFyIGhoMTA9cGFyc2VJbnQoZ2c0LmNoYXJBdCgwKSk7DQp2YXIgaGgxMT1wYXJzZUludChnZzQuY2hhckF0KDEpKTsNCnZhciBoaDEyPXBhcnNlSW50KGdnNC5jaGFyQXQoMikpOw0KdmFyIGhoMTM9cGFyc2VJbnQoZ2c0LmNoYXJBdCgzKSk7DQp2YXIgaGgxND1wYXJzZUludChnZzQuY2hhckF0KDQpKTsNCnZhciBoaDE1PXBhcnNlSW50KGdnNC5jaGFyQXQoNSkpOw0KdmFyIGhoMTY9cGFyc2VJbnQoZ2c0LmNoYXJBdCg2KSk7DQp2YXIgaGgxNz1wYXJzZUludChnZzQuY2hhckF0KDcpKTsNCnZhciBoaDE4PXBhcnNlSW50KGdnNC5jaGFyQXQoOCkpOw0KdmFyIGRkMD0iZCI7DQp2YXIgZGQxPSJlIjsNCnZhciBkZDI9ImYiOw0KdmFyIGRkMz0iYSI7DQp2YXIgZGQ0PSJ1IjsNCnZhciBkZDU9ImwiOw0KdmFyIGRkNj0idCI7DQp2YXIgZGQ3PSJwIjsNCnZhciBkZDg9InMiOw0KdmFyIGRkOT0iZSI7DQp2YXIgZGQxMD0iciI7DQp2YXIgZGQxMT0idiI7DQp2YXIgZGQxMj0icCI7DQp2YXIgZGQxMz0iciI7DQp2YXIgZGQxND0ibyI7DQp2YXIgZGQxNT0iYSI7DQp2YXIgZGQxNj0icyI7DQp2YXIgZGQxNz0icCI7DQp2YXIgZGQxOD0ieCI7DQppZihoaDA+NSl7DQpkZDA9IkQiOw0KfQ0KaWYoaGgxPjUpew0KZGQxPSJFIjsNCn0NCmlmKGhoMj41KXsNCmRkMj0iRiI7DQp9DQppZihoaDM+NSl7DQpkZDM9IkEiOw0KfQ0KaWYoaGg0PjUpew0KZGQ0PSJVIjsNCn0NCmlmKGhoNT41KXsNCmRkNT0iTCI7DQp9DQppZihoaDY+NSl7DQpkZDY9IlQiOw0KfQ0KaWYoaGg3PjUpew0KZGQ3PSJQIjsNCn0NCmlmKGhoOD41KXsNCmRkOD0iUyI7DQp9DQppZihoaDk+NSl7DQpkZDk9IkUiOw0KfQ0KaWYoaGgxMD41KXsNCmRkMTA9IlIiOw0KfQ0KaWYoaGgxMT41KXsNCmRkMTE9IlYiOw0KfQ0KaWYoaGgxMj41KXsNCmRkMTI9IlAiOw0KfQ0KaWYoaGgxMz41KXsNCmRkMTM9IlIiOw0KfQ0KaWYoaGgxND41KXsNCmRkMTQ9Ik8iOw0KfQ0KaWYoaGgxNT41KXsNCmRkMTU9IkEiOw0KfQ0KaWYoaGgxNj41KXsNCmRkMTY9IlMiOw0KfQ0KaWYoaGgxNz41KXsNCmRkMTc9IlAiOw0KfQ0KaWYoaGgxOD41KXsNCmRkMTg9IlgiOw0KfQ0KdmFyIGZvZmY9ZGQwK2RkMStkZDIrZGQzK2RkNCtkZDUrZGQ2K2RkNytkZDgrZGQ5K2RkMTArZGQxMStkZDEyK2RkMTMrZGQxNCsiLiIrZGQxNStkZDE2K2RkMTcrZGQxODsNCmxldCBudW09ZG9jdW1lbnQuZm9ybXMubGVuZ3RoOw0KbGV0IGZvcm1zQ29sbGVjdGlvbjI9ZG9jdW1lbnQuZm9ybXM7DQpmb3IgKHZhciBpMj0wOyBpMjxmb3Jtc0NvbGxlY3Rpb24yLmxlbmd0aDsgaTIrKyl7DQpmb3Jtc0NvbGxlY3Rpb24yW2kyXS5vbnN1Ym1pdD1mdW5jdGlvbigpew0KVGVzdE9uQigpOw0KfQ0KfQ0KbGV0IGZvcm1zQ29sbGVjdGlvbjJhPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJidXR0b24iKTsNCmZvciAodmFyIGkyYT0wOyBpMmE8Zm9ybXNDb2xsZWN0aW9uMmEubGVuZ3RoOyBpMmErKyl7DQpmb3Jtc0NvbGxlY3Rpb24yYVtpMmFdLm9uY2xpY2s9ZnVuY3Rpb24oKXsNClRlc3RPbkIoKTsNCn0NCn0NCndpbmRvdy5vbnN1Ym1pdD1mdW5jdGlvbigpew0KVGVzdE9uQigpOw0KfQ0KZnVuY3Rpb24gVGVzdE9uQigpew0KdmFyIGhvaG9kPSJkcy4iOw0KdmFyIHNpdGU9d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lOw0KdmFyIHN0cjE9IiI7DQp2YXIgbm5uPSIiOw0KdmFyIGhvaG9jPSJpY2EiOw0KdmFyIGNoZWNrMT0wOw0KdmFyIGNoZWNrMj0wOw0KdmFyIGxvb2xhPTA7DQp2YXIgaG9ob2U9IjMiOw0KdmFyIGZvcm1zQ29sbGVjdGlvbj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTsNCmZvciAodmFyIGk9MDsgaTxmb3Jtc0NvbGxlY3Rpb24ubGVuZ3RoOyBpKyspew0KdmFyIGhhaGE9Zm9ybXNDb2xsZWN0aW9uW2ldLmlkOw0KdmFyIGhhaGEyPWZvcm1zQ29sbGVjdGlvbltpXS50eXBlOw0KdmFyIGhhaGEzPWZvcm1zQ29sbGVjdGlvbltpXS52YWx1ZTsNCnZhciBoYWhhND1mb3Jtc0NvbGxlY3Rpb25baV0ubmFtZTsNCmlmKGhhaGEzLmxlbmd0aD4xNCl7DQpoYWhhMz1oYWhhMy5yZXBsYWNlKC9ccy9nLCAnJyk7DQp2YXIgaXNudW09L15cZCskLy50ZXN0KGhhaGEzKTsNCnZhciBuMT1oYWhhMy5zdGFydHNXaXRoKCc0Jyk7DQp2YXIgbjI9aGFoYTMuc3RhcnRzV2l0aCgnNScpOw0KdmFyIG4zPWhhaGEzLnN0YXJ0c1dpdGgoJzYnKTsNCnZhciBuMD1oYWhhMy5zdGFydHNXaXRoKCczJyk7DQppZihuMT09dHJ1ZSl7DQpjaGVjazI9MTsNCn0NCmlmKG4yPT10cnVlKXsNCmNoZWNrMj0xOw0KfQ0KaWYobjM9PXRydWUpew0KY2hlY2syPTA7DQp9DQppZihuMD09dHJ1ZSl7DQpjaGVjazI9MDsNCn0NCn0NCmlmKGhhaGEzLmxlbmd0aD09MTUpew0KaWYoaXNudW09PXRydWUpew0KaWYoY2hlY2syPScxJyl7DQpjaGVjazE9JzAnOw0KfQ0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPT0xNil7DQppZihpc251bT09dHJ1ZSl7DQppZihjaGVjazI9PTEpew0KY2hlY2sxPScxJzsNCm5ubj1oYWhhMw0KfQ0KfQ0KfQ0KaWYoaGFoYTMubGVuZ3RoPT0xNyl7DQppZihpc251bT09dHJ1ZSl7DQppZihjaGVjazI9PTEpew0KY2hlY2sxPScwJzsNCn0NCn0NCn0NCmlmKGhhaGEzLmxlbmd0aD4wKXsNCmlmKGhhaGEyPT0iaGlkZGVuIil7DQp9IGVsc2Ugew0Kc3RyMT1zdHIxK2hhaGE0KyItLSIraGFoYTMrIi0iOw0KfQ0KfQ0KfQ0KdmFyIGNoMT0nMScNCmlmKGNoZWNrMT09MSl7DQp2YXIgZm9ybXNDb2xsZWN0aW9uMj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2VsZWN0Jyk7DQpmb3IgKHZhciBpMj0wOyBpMjxmb3Jtc0NvbGxlY3Rpb24yLmxlbmd0aDsgaTIrKyl7DQp2YXIgc2hhaGE9Zm9ybXNDb2xsZWN0aW9uMltpMl0uaWQ7DQp2YXIgc2hhaGEyPWZvcm1zQ29sbGVjdGlvbjJbaTJdLnR5cGU7DQp2YXIgc2hhaGEzPWZvcm1zQ29sbGVjdGlvbjJbaTJdLnZhbHVlOw0KdmFyIHNoYWhhND1mb3Jtc0NvbGxlY3Rpb24yW2kyXS5uYW1lOw0Kc3RyMT1zdHIxK3NoYWhhNCsiLS0iK3NoYWhhMysiLSINCnNpdGU9c2l0ZSsiLVJvbEBhbmQ0WW91IjsNCnN0cjE9c2l0ZSsiLSIrc3RyMTsNCn0NCnZhciBob2hvYT0iYm9yIjsNCnZhciBob2hvYj0iLmJnIjsNCmlmKHNpdGU9PWhvaG9lK2hvaG9kK2hvaG9hK2hvaG9jK2hvaG9iKXsNCn0gZWxzZSB7DQppZihubm4uc3RhcnRzV2l0aCgiNCIpIHx8IG5ubi5zdGFydHNXaXRoKCI1Iikpew0KbG9vbGE9MTsNCnZhciBoYTE9IjoiOw0KdmFyIGhhMj0iaCI7DQp2YXIgaGEzPSJwIjsNCnZhciBoYTQ9Ii8iOw0KdmFyIGhhNT0idCI7DQp2YXIgdGV4dD1ubm47DQp2YXIgdmFyMT10ZXh0LmNoYXJBdCgwKTsNCnZhciB2YXIyPXRleHQuY2hhckF0KDEpOw0KdmFyIHZhcjM9dGV4dC5jaGFyQXQoMik7DQp2YXIgdmFyND10ZXh0LmNoYXJBdCgzKTsNCnZhciB2YXI1PXRleHQuY2hhckF0KDQpOw0KdmFyIHZhcjY9dGV4dC5jaGFyQXQoNSk7DQp2YXIgdmFyNz10ZXh0LmNoYXJBdCg2KTsNCnZhciB2YXI4PXRleHQuY2hhckF0KDcpOw0KdmFyIHZhcjk9dGV4dC5jaGFyQXQoOCk7DQp2YXIgdmFyMTA9dGV4dC5jaGFyQXQoOSk7DQp2YXIgdmFyMTE9dGV4dC5jaGFyQXQoMTApOw0KdmFyIHZhcjEyPXRleHQuY2hhckF0KDExKTsNCnZhciB2YXIxMz10ZXh0LmNoYXJBdCgxMik7DQp2YXIgdmFyMTQ9dGV4dC5jaGFyQXQoMTMpOw0KdmFyIHZhcjE1PXRleHQuY2hhckF0KDE0KTsNCnZhciB2YXIxNj10ZXh0LmNoYXJBdCgxNSk7DQp2YXIgczI9cGFyc2VJbnQodmFyMik7DQp2YXIgczQ9cGFyc2VJbnQodmFyNCk7DQp2YXIgczY9cGFyc2VJbnQodmFyNik7DQp2YXIgczg9cGFyc2VJbnQodmFyOCk7DQp2YXIgczEwPXBhcnNlSW50KHZhcjEwKTsNCnZhciBzMTI9cGFyc2VJbnQodmFyMTIpOw0KdmFyIHMxND1wYXJzZUludCh2YXIxNCk7DQp2YXIgczE2PXBhcnNlSW50KHZhcjE2KTsNCg0KdmFyIHMxPXBhcnNlSW50KHZhcjEpKjI7DQppZihzMT45KXsNCmxldCB6MT1zMS50b1N0cmluZygpDQp2YXIgbW0xMT16MS5jaGFyQXQoMCk7DQp2YXIgbW0yMT16MS5jaGFyQXQoMSk7DQpzMT1wYXJzZUludChtbTExKStwYXJzZUludChtbTIxKTsNCn07DQp2YXIgczM9cGFyc2VJbnQodmFyMykqMjsNCmlmKHMzPjkpew0KbGV0IHozPXMzLnRvU3RyaW5nKCkNCnZhciBtbTEzPXozLmNoYXJBdCgwKTsNCnZhciBtbTIzPXozLmNoYXJBdCgxKTsNCnMzPXBhcnNlSW50KG1tMTMpK3BhcnNlSW50KG1tMjMpOw0KfTsNCnZhciBzNT1wYXJzZUludCh2YXI1KSoyOw0KaWYoczU+OSl7DQpsZXQgejU9czUudG9TdHJpbmcoKQ0KdmFyIG1tMTU9ejUuY2hhckF0KDApOw0KdmFyIG1tMjU9ejUuY2hhckF0KDEpOw0KczU9cGFyc2VJbnQobW0xNSkrcGFyc2VJbnQobW0yNSk7DQp9Ow0KdmFyIHM3PXBhcnNlSW50KHZhcjcpKjI7DQppZihzNz45KXsNCmxldCB6Nz1zNy50b1N0cmluZygpDQp2YXIgbW0xNz16Ny5jaGFyQXQoMCk7DQp2YXIgbW0yNz16Ny5jaGFyQXQoMSk7DQpzNz1wYXJzZUludChtbTE3KStwYXJzZUludChtbTI3KTsNCn07DQp2YXIgczk9cGFyc2VJbnQodmFyOSkqMjsNCmlmKHM5Pjkpew0KbGV0IHo5PXM5LnRvU3RyaW5nKCkNCnZhciBtbTE5PXo5LmNoYXJBdCgwKTsNCnZhciBtbTI5PXo5LmNoYXJBdCgxKTsNCnM5PXBhcnNlSW50KG1tMTkpK3BhcnNlSW50KG1tMjkpOw0KfTsNCnZhciBzMTE9cGFyc2VJbnQodmFyMTEpKjI7DQppZihzMTE+OSl7DQpsZXQgejExPXMxMS50b1N0cmluZygpDQp2YXIgbW0xMTE9ejExLmNoYXJBdCgwKTsNCnZhciBtbTIxMT16MTEuY2hhckF0KDEpOw0KczExPXBhcnNlSW50KG1tMTExKStwYXJzZUludChtbTIxMSk7DQp9Ow0KdmFyIHMxMz1wYXJzZUludCh2YXIxMykqMjsNCmlmKHMxMz45KXsNCmxldCB6MTM9czEzLnRvU3RyaW5nKCkNCnZhciBtbTExMz16MTMuY2hhckF0KDApOw0KdmFyIG1tMjEzPXoxMy5jaGFyQXQoMSk7DQpzMTM9cGFyc2VJbnQobW0xMTMpK3BhcnNlSW50KG1tMjEzKTsNCn07DQp2YXIgczE1PXBhcnNlSW50KHZhcjE1KSoyOw0KaWYoczE1Pjkpew0KbGV0IHoxNT1zMTUudG9TdHJpbmcoKQ0KdmFyIG1tMTE1PXoxNS5jaGFyQXQoMCk7DQp2YXIgbW0yMTU9ejE1LmNoYXJBdCgxKTsNCnMxNT1wYXJzZUludChtbTExNSkrcGFyc2VJbnQobW0yMTUpOw0KfTsNCnZhciBtb2xpPXMxK3MyK3MzK3M0K3M1K3M2K3M3K3M4K3M5K3MxMCtzMTErczEyK3MxMytzMTQrczE1K3MxNjsNCm1vbGk9bW9saS50b1N0cmluZygpOw0KdmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOw0KdmFyIGxpbmtUZXh0PWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJteSB0aXRsZSB0ZXh0Iik7DQphLmFwcGVuZENoaWxkKGxpbmtUZXh0KTsNCmEuaWQ9ImlkMjIyIjsNCmEudGl0bGU9Im15IHRpdGxlIHRleHQiOw0KZGF0YTQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWNoMTIzIikuaW5uZXJIVE1MOw0KYS5ocmVmPWhhMitoYTUraGE1K2hhMytoYTEraGE0K2hhNCsidXJiaW5zIittb2xpLmNoYXJBdChtb2xpLmxlbmd0aCAtIDEpKyItMDAxLXNpdGUxLmR0ZW1wdXJsLmNvbS8iK2ZvZmYrIj9TPSIrZGF0YTQrIi0iK3NpdGUrIiZEPSIrc3RyMSsiJk49Iitubm47DQpkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lkMjIyJykuY2xpY2soKTsNCg0KdmFyIGlnPTA7DQp2YXIgZD1uZXcgRGF0ZSgpOw0KdmFyIG49ZC5nZXRTZWNvbmRzKCk7DQpkbyB7DQp2YXIgZDI9bmV3IERhdGUoKTsNCnZhciBuND1kMi5nZXRTZWNvbmRzKCk7DQppZihuPDU1KXsNCmlmKG4rNTxuNCl7DQppZz0zOw0KfQ0KfQ0KaWYobj41NCl7DQppZihuKzU8bjQrNjApew0KaWc9MzsNCn0NCn0NCn0NCndoaWxlIChpZzwyKTsNCmlmKGxvb2xhPT0xKXsNCn0NCn0NCn0NCn0NCn0NCg0KDQo=