Request a Demolition Quote
Tell us about your Toronto or GTA project in under a minute. We’ll review it and send you a firm, no-obligation quote within one business day.
1
What are we tearing out?
2
How big is it?
sq ft
3
Site details
4
Anything else?
5
Where should we send your quote?
We’ll review your project and send your quote within one business day. A site visit is free.
CihmdW5jdGlvbigpewogIC8qIFF1b3RlIHJlcXVlc3QgZm9ybTogY29sbGVjdHMgdGhlIGpvYiBkZXRhaWxzIGFuZCBjb250YWN0IGluZm8gYW5kIHNlbmRzIHRoZW0gdG8gdGhlCiAgICAgQmFyZSBCb25lcyBFc3RpbWF0b3IgYXBwLiBObyBwcmljZXMgYXJlIHNob3duIG9yIHN0b3JlZCBvbiB0aGUgd2Vic2l0ZS4gKi8KICB2YXIgQ09ORklHID0gewogICAgLy8gIldlYnNpdGUgaW50YWtlIiB3ZWIgYXBwIFVSTCAoZW5kcyBpbiAvZXhlYykuIExlYXZlIGFzIGlzIHRvIGZhbGwgYmFjayB0byBlbWFpbC4KICAgIGVuZHBvaW50OiAiaHR0cHM6Ly9zY3JpcHQuZ29vZ2xlLmNvbS9tYWNyb3Mvcy9BS2Z5Y2J6Z0NrdHd5elF2dndRV2lvaGQ5d29QWHBzSGM5YkVmT01uaE9YRk1NcEhYQTBhdUFBa1JkRE1yNTFJOUVmeW9qanYxdy9leGVjIiwKICAgIGVtYWlsOiAiaW5mb0BiYXJlYm9uZXNkZW1vbGl0aW9uLmNvbSIsCiAgICBjYzogImFscGhhQGJhcmVib25lc2RlbW9saXRpb24uY29tIiwKICAgIHByb2plY3RzOiB7CiAgICAgIGtpdGNoZW46ICAgIHsgbGFiZWw6IktpdGNoZW4iLCAgICAgICAgICAgIGRlc2M6IkNhYmluZXRzLCBjb3VudGVycywgYmFja3NwbGFzaCwgZmxvb3JpbmciLCAgdW5pdDoic3EgZnQiLCBtaW46NDAsICBtYXg6NjAwLCAgIHN0ZXA6MTAsICBkZWY6MTUwIH0sCiAgICAgIGJhdGhyb29tOiAgIHsgbGFiZWw6IkJhdGhyb29tIiwgICAgICAgICAgIGRlc2M6IlR1Yi9zaG93ZXIsIHRpbGUsIHZhbml0eSwgdG9pbGV0IiwgICAgICAgICAgIHVuaXQ6InNxIGZ0IiwgbWluOjIwLCAgbWF4OjI1MCwgICBzdGVwOjUsICAgZGVmOjUwIH0sCiAgICAgIGJhc2VtZW50OiAgIHsgbGFiZWw6IkJhc2VtZW50IiwgICAgICAgICAgIGRlc2M6IkRyeXdhbGwsIGZyYW1pbmcsIGZsb29yaW5nLCBjZWlsaW5ncyIsICAgICAgIHVuaXQ6InNxIGZ0IiwgbWluOjIwMCwgbWF4OjMwMDAsICBzdGVwOjUwLCAgZGVmOjgwMCB9LAogICAgICBpbnRlcmlvcjogICB7IGxhYmVsOiJGdWxsIGludGVyaW9yIGd1dCIsICBkZXNjOiJTdHJpcCBhIGhvbWUgb3IgZmxvb3IgdG8gdGhlIHN0dWRzIiwgICAgICAgICAgdW5pdDoic3EgZnQiLCBtaW46NDAwLCBtYXg6NjAwMCwgIHN0ZXA6MTAwLCBkZWY6MTUwMCB9LAogICAgICBmbG9vcmluZzogICB7IGxhYmVsOiJGbG9vcmluZyByZW1vdmFsIiwgICBkZXNjOiJIYXJkd29vZCwgdGlsZSwgY2FycGV0LCBsYW1pbmF0ZSIsICAgICAgICAgICAgdW5pdDoic3EgZnQiLCBtaW46NTAsICBtYXg6NDAwMCwgIHN0ZXA6NTAsICBkZWY6NTAwIH0sCiAgICAgIG91dGRvb3I6ICAgIHsgbGFiZWw6IkRlY2ssIHNoZWQgb3IgZmVuY2UiLGRlc2M6IkV4dGVyaW9yIHN0cnVjdHVyZXMgJiBoYXJkc2NhcGUiLCAgICAgICAgICAgIHVuaXQ6InNxIGZ0IiwgbWluOjMwLCAgbWF4OjE1MDAsICBzdGVwOjEwLCAgZGVmOjIwMCB9LAogICAgICBob3VzZTogICAgICB7IGxhYmVsOiJGdWxsIGhvdXNlIGRlbW8iLCAgICBkZXNjOiJDb21wbGV0ZSBzdHJ1Y3R1cmFsIHRlYXJkb3duIiwgICAgICAgICAgICAgICB1bml0OiJzcSBmdCIsIG1pbjo2MDAsIG1heDo2MDAwLCAgc3RlcDoxMDAsIGRlZjoxNTAwIH0sCiAgICAgIGNvbW1lcmNpYWw6IHsgbGFiZWw6IkNvbW1lcmNpYWwgaW50ZXJpb3IiLGRlc2M6IlJldGFpbCwgb2ZmaWNlICYgcmVzdGF1cmFudCB1bml0cyIsICAgICAgICAgICB1bml0OiJzcSBmdCIsIG1pbjozMDAsIG1heDoyMDAwMCwgc3RlcDoxMDAsIGRlZjoyMDAwIH0sCiAgICAgIHdhc3RlOiAgICAgIHsgbGFiZWw6Ildhc3RlIHJlbW92YWwiLCAgICAgIGRlc2M6Ikp1bmsgJiBkZWJyaXMgaGF1bC1hd2F5LCBjbGVhbi11cCIsICAgICAgICAgIHVuaXQ6ImJpbnMiLCAgbWluOjEsICAgbWF4OjEwLCAgICBzdGVwOjEsICAgZGVmOjEsIHNpemVMYWJlbDoiTnVtYmVyIG9mIDE0LXlhcmQgYmluIGxvYWRzIiwgaGludDoiT25lIDE0LXlhcmQgbG9hZCDiiYggYSBzaW5nbGUtY2FyIGdhcmFnZSBvZiBjbHV0dGVyLCBvciBhIGd1dHRlZCBiYXRocm9vbS4iIH0KICAgIH0sCiAgICBhY2Nlc3M6IFsKICAgICAgeyBpZDoiZ3JvdW5kIiwgbGFiZWw6IkVhc3ksIGdyb3VuZCBsZXZlbCAvIGRyaXZld2F5IiB9LAogICAgICB7IGlkOiJzdGFpcnMiLCBsYWJlbDoiU3RhaXJzLCBubyBlbGV2YXRvciIgfSwKICAgICAgeyBpZDoiY29uZG8iLCAgbGFiZWw6IkNvbmRvIC8gZWxldmF0b3IgYm9va2luZyIgfSwKICAgICAgeyBpZDoidGlnaHQiLCAgbGFiZWw6IlRpZ2h0IG9yIGxpbWl0ZWQgYWNjZXNzIiB9CiAgICBdLAogICAgdGltZWxpbmU6IFsKICAgICAgeyBpZDoiZmxleCIsIGxhYmVsOiJGbGV4aWJsZSAoMisgd2Vla3MpIiB9LAogICAgICB7IGlkOiJzdGQiLCAgbGFiZWw6IlN0YW5kYXJkICgx4oCTMiB3ZWVrcykiIH0sCiAgICAgIHsgaWQ6InJ1c2giLCBsYWJlbDoiUnVzaCAod2l0aGluIGEgd2VlaykiIH0KICAgIF0sCiAgICBleHRyYXM6IFsKICAgICAgeyBpZDoiZGlzcG9zYWwiLCBsYWJlbDoiQmluICYgZGlzcG9zYWwgaW5jbHVkZWQiLCBub3RlOiJXZSBzdXBwbHkgdGhlIGJpbiBhbmQgaGF1bCBldmVyeXRoaW5nIGF3YXkiLCBkZWY6dHJ1ZSwgaGlkZUZvcjpbIndhc3RlIl0gfSwKICAgICAgeyBpZDoicGxhc3RlciIsICBsYWJlbDoiUGxhc3RlciAmIGxhdGggd2FsbHMiLCAgICAgbm90ZToiQ29tbW9uIGluIG9sZGVyIFRvcm9udG8gaG9tZXMiLCBoaWRlRm9yOlsid2FzdGUiLCJmbG9vcmluZyIsIm91dGRvb3IiXSB9LAogICAgICB7IGlkOiJjb25jcmV0ZSIsIGxhYmVsOiJDb25jcmV0ZSBvciBtb3J0YXItc2V0IHRpbGUiLCBub3RlOiJTbGFicywgbXVkLXNldCB0aWxlLCBicmljayBvciBibG9jayIsIGhpZGVGb3I6WyJ3YXN0ZSJdIH0sCiAgICAgIHsgaWQ6Im9sZCIsICAgICAgbGFiZWw6IkJ1aWxkaW5nIGJ1aWx0IGJlZm9yZSAxOTkwIiwgbm90ZToiT250YXJpbyByZXF1aXJlcyBhIGRlc2lnbmF0ZWQgc3Vic3RhbmNlIHN1cnZleSAoYXNiZXN0b3MsIGxlYWQpIGJlZm9yZSBkZW1vIiwgaGlkZUZvcjpbIndhc3RlIl0gfSwKICAgICAgeyBpZDoicHJvdGVjdCIsICBsYWJlbDoiRmxvb3IgJiBkdXN0IHByb3RlY3Rpb24iLCAgbm90ZToiUG9seSB3YWxscywgZmxvb3IgcnVubmVycywgbmVnYXRpdmUgYWlyIiwgaGlkZUZvcjpbIndhc3RlIiwib3V0ZG9vciIsImhvdXNlIl0gfQogICAgXQogIH07CgogIHZhciAkID0gZnVuY3Rpb24oaWQpeyByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOyB9OwogIHZhciBlc2MgPSBmdW5jdGlvbih0KXsgcmV0dXJuIFN0cmluZyh0KS5yZXBsYWNlKC9bPD4mIl0vZywgZnVuY3Rpb24oYyl7IHJldHVybiB7IjwiOiImbHQ7IiwiPiI6IiZndDsiLCImIjoiJmFtcDsiLCJcIiI6IiZxdW90OyJ9W2NdOyB9KTsgfTsKICB2YXIgc3RhdGUgPSB7IHR5cGU6ImtpdGNoZW4iLCBzaXplOkNPTkZJRy5wcm9qZWN0cy5raXRjaGVuLmRlZiwgYWNjZXNzOiJncm91bmQiLCB0aW1lbGluZToic3RkIiwgZXh0cmFzOnt9IH07CiAgQ09ORklHLmV4dHJhcy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyBzdGF0ZS5leHRyYXNbZS5pZF0gPSAhIWUuZGVmOyB9KTsKCiAgdmFyIHR5cGVzRWwgPSAkKCJ0eXBlcyIpOwogIE9iamVjdC5rZXlzKENPTkZJRy5wcm9qZWN0cykuZm9yRWFjaChmdW5jdGlvbihrKXsKICAgIHZhciBwID0gQ09ORklHLnByb2plY3RzW2tdOwogICAgdmFyIGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOyBsLmNsYXNzTmFtZSA9ICJ0eXBlIjsKICAgIGwuaW5uZXJIVE1MID0gJzxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iYmJkLXR5cGUiIHZhbHVlPSInK2srJyInKyhrPT09c3RhdGUudHlwZT8iIGNoZWNrZWQiOiIiKSsnPjxzcGFuPjxzdHJvbmc+JytwLmxhYmVsKyc8L3N0cm9uZz48c21hbGw+JytwLmRlc2MrJzwvc21hbGw+PC9zcGFuPic7CiAgICB0eXBlc0VsLmFwcGVuZENoaWxkKGwpOwogIH0pOwogIHR5cGVzRWwuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgZnVuY3Rpb24oZSl7CiAgICBzdGF0ZS50eXBlID0gZS50YXJnZXQudmFsdWU7CiAgICBzdGF0ZS5zaXplID0gQ09ORklHLnByb2plY3RzW3N0YXRlLnR5cGVdLmRlZjsKICAgIHN5bmNTaXplKCk7IHJlbmRlckV4dHJhcygpOyB1cGRhdGUoKTsKICB9KTsKCiAgZnVuY3Rpb24gZmlsbFNlbGVjdChlbCwgbGlzdCwgdmFsKXsKICAgIGxpc3QuZm9yRWFjaChmdW5jdGlvbihvKXsgdmFyIG9wPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpOyBvcC52YWx1ZT1vLmlkOyBvcC50ZXh0Q29udGVudD1vLmxhYmVsOyBpZihvLmlkPT09dmFsKSBvcC5zZWxlY3RlZD10cnVlOyBlbC5hcHBlbmRDaGlsZChvcCk7IH0pOwogIH0KICBmaWxsU2VsZWN0KCQoImFjY2VzcyIpLCBDT05GSUcuYWNjZXNzLCBzdGF0ZS5hY2Nlc3MpOwogIGZpbGxTZWxlY3QoJCgidGltZWxpbmUiKSwgQ09ORklHLnRpbWVsaW5lLCBzdGF0ZS50aW1lbGluZSk7CiAgJCgiYWNjZXNzIikuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgZnVuY3Rpb24oZSl7IHN0YXRlLmFjY2Vzcz1lLnRhcmdldC52YWx1ZTsgdXBkYXRlKCk7IH0pOwogICQoInRpbWVsaW5lIikuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgZnVuY3Rpb24oZSl7IHN0YXRlLnRpbWVsaW5lPWUudGFyZ2V0LnZhbHVlOyB1cGRhdGUoKTsgfSk7CgogIGZ1bmN0aW9uIHN5bmNTaXplKCl7CiAgICB2YXIgcCA9IENPTkZJRy5wcm9qZWN0c1tzdGF0ZS50eXBlXSwgcj0kKCJzaXplUmFuZ2UiKSwgbj0kKCJzaXplTnVtIik7CiAgICByLm1pbj1wLm1pbjsgci5tYXg9cC5tYXg7IHIuc3RlcD1wLnN0ZXA7IHIudmFsdWU9c3RhdGUuc2l6ZTsKICAgIG4ubWluPXAubWluOyBuLm1heD1wLm1heDsgbi5zdGVwPXAuc3RlcDsgbi52YWx1ZT1zdGF0ZS5zaXplOwogICAgJCgic2l6ZVVuaXQiKS50ZXh0Q29udGVudCA9IHAudW5pdDsKICAgICQoInNpemVMYWJlbCIpLnRleHRDb250ZW50ID0gcC5zaXplTGFiZWwgfHwgIkFwcHJveGltYXRlIGFyZWEiOwogICAgJCgic2l6ZUhpbnQiKS50ZXh0Q29udGVudCA9IHAuaGludCB8fCAiTm90IHN1cmU/IExlbmd0aCDDlyB3aWR0aCBvZiBlYWNoIHJvb20sIGFkZGVkIHRvZ2V0aGVyLCBpcyBjbG9zZSBlbm91Z2guIjsKICB9CiAgJCgic2l6ZVJhbmdlIikuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCBmdW5jdGlvbihlKXsgc3RhdGUuc2l6ZT0rZS50YXJnZXQudmFsdWU7ICQoInNpemVOdW0iKS52YWx1ZT1zdGF0ZS5zaXplOyB1cGRhdGUoKTsgfSk7CiAgJCgic2l6ZU51bSIpLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgZnVuY3Rpb24oZSl7CiAgICB2YXIgcD1DT05GSUcucHJvamVjdHNbc3RhdGUudHlwZV0sIHY9K2UudGFyZ2V0LnZhbHVlOwogICAgaWYoIWlzRmluaXRlKHYpIHx8IHY8PTApIHJldHVybjsKICAgIHN0YXRlLnNpemUgPSBNYXRoLm1pbihNYXRoLm1heCh2LCAxKSwgcC5tYXgqMyk7CiAgICAkKCJzaXplUmFuZ2UiKS52YWx1ZSA9IE1hdGgubWluKE1hdGgubWF4KHN0YXRlLnNpemUscC5taW4pLHAubWF4KTsKICAgIHVwZGF0ZSgpOwogIH0pOwoKICBmdW5jdGlvbiByZW5kZXJFeHRyYXMoKXsKICAgIHZhciBib3g9JCgiZXh0cmFzIik7IGJveC5pbm5lckhUTUw9IiI7CiAgICBDT05GSUcuZXh0cmFzLmZvckVhY2goZnVuY3Rpb24oZSl7CiAgICAgIGlmKGUuaGlkZUZvciAmJiBlLmhpZGVGb3IuaW5kZXhPZihzdGF0ZS50eXBlKT4tMSkgcmV0dXJuOwogICAgICB2YXIgbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOyBsLmNsYXNzTmFtZT0ib3B0IjsKICAgICAgbC5pbm5lckhUTUw9JzxpbnB1dCB0eXBlPSJjaGVja2JveCIgZGF0YS1pZD0iJytlLmlkKyciJysoc3RhdGUuZXh0cmFzW2UuaWRdPyIgY2hlY2tlZCI6IiIpKyc+PGRpdj48Yj4nK2UubGFiZWwrJzwvYj48ZW0+JytlLm5vdGUrJzwvZW0+PC9kaXY+JzsKICAgICAgYm94LmFwcGVuZENoaWxkKGwpOwogICAgfSk7CiAgfQogICQoImV4dHJhcyIpLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGZ1bmN0aW9uKGUpeyB2YXIgaWQ9ZS50YXJnZXQuZ2V0QXR0cmlidXRlKCJkYXRhLWlkIik7IGlmKGlkKXsgc3RhdGUuZXh0cmFzW2lkXT1lLnRhcmdldC5jaGVja2VkOyB1cGRhdGUoKTsgfSB9KTsKCiAgZnVuY3Rpb24gZmluZChsaXN0LGlkKXsgZm9yKHZhciBpPTA7aTxsaXN0Lmxlbmd0aDtpKyspIGlmKGxpc3RbaV0uaWQ9PT1pZCkgcmV0dXJuIGxpc3RbaV07IH0KICBmdW5jdGlvbiBhY3RpdmUoZSl7IHJldHVybiBzdGF0ZS5leHRyYXNbZS5pZF0gJiYgIShlLmhpZGVGb3IgJiYgZS5oaWRlRm9yLmluZGV4T2Yoc3RhdGUudHlwZSk+LTEpOyB9CgogIHZhciBsYXN0ID0gbnVsbDsKICBmdW5jdGlvbiB1cGRhdGUoKXsKICAgIHZhciBwID0gQ09ORklHLnByb2plY3RzW3N0YXRlLnR5cGVdLCBzID0gc3RhdGUuc2l6ZSwgbm90ZXMgPSBbXTsKICAgIHZhciBhY2MgPSBmaW5kKENPTkZJRy5hY2Nlc3MsIHN0YXRlLmFjY2VzcyksIHRsID0gZmluZChDT05GSUcudGltZWxpbmUsIHN0YXRlLnRpbWVsaW5lKTsKICAgIHZhciBleHRyYXMgPSBDT05GSUcuZXh0cmFzLmZpbHRlcihhY3RpdmUpLm1hcChmdW5jdGlvbihlKXsgcmV0dXJuIGUubGFiZWw7IH0pOwogICAgaWYoc3RhdGUudHlwZSE9PSJ3YXN0ZSIgJiYgIXN0YXRlLmV4dHJhcy5kaXNwb3NhbCkgbm90ZXMucHVzaCgiWW91J2xsIGFycmFuZ2UgZGVicmlzIGRpc3Bvc2FsIHlvdXJzZWxmLiIpOwogICAgaWYoYWN0aXZlKGZpbmQoQ09ORklHLmV4dHJhcywib2xkIikpKSBub3Rlcy5wdXNoKCJBbnkgYXNiZXN0b3MgZm91bmQgaXMgaGFuZGxlZCBieSBhIGxpY2Vuc2VkIGNvbnRyYWN0b3IgYW5kIHF1b3RlZCBzZXBhcmF0ZWx5LiIpOwogICAgJCgiclByb2oiKS50ZXh0Q29udGVudCA9IHAubGFiZWwgKyAiIMK3ICIgKyBzLnRvTG9jYWxlU3RyaW5nKCJlbi1DQSIpICsgIiAiICsgcC51bml0OwogICAgJCgickJyZWFrIikuaW5uZXJIVE1MID0gW1siQWNjZXNzIiwgYWNjLmxhYmVsXSwgWyJUaW1lbGluZSIsIHRsLmxhYmVsXV0uY29uY2F0KGV4dHJhcy5tYXAoZnVuY3Rpb24oeCl7IHJldHVybiBbIkluY2x1ZGVkIiwgeF07IH0pKQogICAgICAubWFwKGZ1bmN0aW9uKGwpeyByZXR1cm4gIjxsaT48c3Bhbj4iK2VzYyhsWzBdKSsiPC9zcGFuPjxzcGFuPiIrZXNjKGxbMV0pKyI8L3NwYW4+PC9saT4iOyB9KS5qb2luKCIiKTsKICAgICQoInJOb3RlcyIpLmlubmVySFRNTCA9IG5vdGVzLm1hcChmdW5jdGlvbihuKXsgcmV0dXJuICI8bGk+Iitlc2MobikrIjwvbGk+IjsgfSkuam9pbigiIik7CiAgICAkKCJyTm90ZXMiKS5zdHlsZS5kaXNwbGF5ID0gbm90ZXMubGVuZ3RoID8gIiIgOiAibm9uZSI7CiAgICBsYXN0ID0geyBwcm9qZWN0OnAubGFiZWwsIHNpemU6cysiICIrcC51bml0LCBhY2Nlc3M6YWNjLmxhYmVsLCB0aW1lbGluZTp0bC5sYWJlbCwgZXh0cmFzOmV4dHJhcywKICAgICAgICAgICAgIHJlZjoiYmJkMTt0eXBlPSIrc3RhdGUudHlwZSsiO3NpemU9IitzKyI7YWNjZXNzPSIrc3RhdGUuYWNjZXNzKyI7dGltZWxpbmU9IitzdGF0ZS50aW1lbGluZSsiO2V4dHJhcz0iK0NPTkZJRy5leHRyYXMuZmlsdGVyKGFjdGl2ZSkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkO30pLmpvaW4oIiwiKSB9OwogIH0KCiAgdmFyIExJVkUgPSAvXmh0dHBzOlwvXC9zY3JpcHRcLmdvb2dsZVwuY29tXC8uK1wvZXhlYyQvLnRlc3QoQ09ORklHLmVuZHBvaW50IHx8ICIiKTsKICBmdW5jdGlvbiBzaG93VGhhbmtzKGh0bWwpeyAkKCJ0aGFua3MiKS5pbm5lckhUTUwgPSBodG1sOyAkKCJ0aGFua3MiKS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsgfQoKICBmdW5jdGlvbiBzZW5kQnlFbWFpbChuYW1lLCBwaG9uZSl7CiAgICB2YXIgYm9keSA9IFsKICAgICAgIkhpIEJhcmUgQm9uZXMgRGVtb2xpdGlvbiwiLCAiIiwKICAgICAgIkkgdXNlZCB0aGUgb25saW5lIHF1b3RlIHJlcXVlc3QgZm9ybSBhbmQgd291bGQgbGlrZSBhIHF1b3RlLiIsICIiLAogICAgICAiUHJvamVjdDogIiArIGxhc3QucHJvamVjdCwgIlNpemU6ICIgKyBsYXN0LnNpemUsICJBY2Nlc3M6ICIgKyBsYXN0LmFjY2VzcywgIlRpbWVsaW5lOiAiICsgbGFzdC50aW1lbGluZSwKICAgICAgIkV4dHJhczogIiArIChsYXN0LmV4dHJhcy5sZW5ndGggPyBsYXN0LmV4dHJhcy5qb2luKCIsICIpIDogIk5vbmUiKSwgIiIsCiAgICAgICJOYW1lOiAiICsgbmFtZSwgIlBob25lOiAiICsgcGhvbmUsICJFbWFpbDogIiArICQoImxlbWFpbCIpLnZhbHVlLnRyaW0oKSwgIlBvc3RhbCBjb2RlOiAiICsgJCgibHBvc3RhbCIpLnZhbHVlLnRyaW0oKSwgIiIsCiAgICAgICJOb3RlczogIiArICgkKCJsbm90ZXMiKS52YWx1ZS50cmltKCkgfHwgIi0iKSwgIiIsCiAgICAgICJSZWY6ICIgKyBsYXN0LnJlZgogICAgXS5qb2luKCJcbiIpOwogICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAibWFpbHRvOiIgKyBDT05GSUcuZW1haWwgKyAiP2NjPSIgKyBlbmNvZGVVUklDb21wb25lbnQoQ09ORklHLmNjKSArCiAgICAgICImc3ViamVjdD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KCJRdW90ZSByZXF1ZXN0OiAiICsgbGFzdC5wcm9qZWN0KSArICImYm9keT0iICsgZW5jb2RlVVJJQ29tcG9uZW50KGJvZHkpOwogICAgc2hvd1RoYW5rcygiPGI+QWxtb3N0IGRvbmUuPC9iPiBZb3VyIGVtYWlsIGFwcCBzaG91bGQgb3BlbiB3aXRoIHlvdXIgcmVxdWVzdCBmaWxsZWQgaW4uIEp1c3QgaGl0IHNlbmQuIElmIGl0IGRpZG4ndCBvcGVuLCBjYWxsIHVzIGF0IDxhIGhyZWY9XCJ0ZWw6NjQ3NzAyNzQzNlwiPjY0Ny03MDItNzQzNjwvYT4uIik7CiAgfQoKICAkKCJsZWFkRm9ybSIpLmFkZEV2ZW50TGlzdGVuZXIoInN1Ym1pdCIsIGZ1bmN0aW9uKGUpewogICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgdmFyIG5hbWU9JCgibG5hbWUiKS52YWx1ZS50cmltKCksIHBob25lPSQoImxwaG9uZSIpLnZhbHVlLnRyaW0oKSwgb2s9dHJ1ZTsKICAgICQoImUtbmFtZSIpLnN0eWxlLmRpc3BsYXkgPSBuYW1lID8gIm5vbmUiIDogImJsb2NrIjsgaWYoIW5hbWUpIG9rPWZhbHNlOwogICAgJCgiZS1waG9uZSIpLnN0eWxlLmRpc3BsYXkgPSBwaG9uZSA/ICJub25lIiA6ICJibG9jayI7IGlmKCFwaG9uZSkgb2s9ZmFsc2U7CiAgICBpZighb2spIHJldHVybjsKICAgIGlmKCFMSVZFKXsgc2VuZEJ5RW1haWwobmFtZSwgcGhvbmUpOyByZXR1cm47IH0KICAgIHZhciBidG4gPSAkKCJsZWFkQnRuIik7IGJ0bi5kaXNhYmxlZCA9IHRydWU7IGJ0bi50ZXh0Q29udGVudCA9ICJTZW5kaW5n4oCmIjsKICAgIHZhciBwYXlsb2FkID0gewogICAgICB0eXBlOiBzdGF0ZS50eXBlLCBzaXplOiBzdGF0ZS5zaXplLCBhY2Nlc3M6IHN0YXRlLmFjY2VzcywgdGltZWxpbmU6IHN0YXRlLnRpbWVsaW5lLAogICAgICBleHRyYXM6IENPTkZJRy5leHRyYXMuZmlsdGVyKGFjdGl2ZSkubWFwKGZ1bmN0aW9uKHgpeyByZXR1cm4geC5pZDsgfSksCiAgICAgIG5hbWU6IG5hbWUsIHBob25lOiBwaG9uZSwgZW1haWw6ICQoImxlbWFpbCIpLnZhbHVlLnRyaW0oKSwgcG9zdGFsOiAkKCJscG9zdGFsIikudmFsdWUudHJpbSgpLAogICAgICBub3RlczogJCgibG5vdGVzIikudmFsdWUudHJpbSgpLCBocDogJCgibGhwIikudmFsdWUKICAgIH07CiAgICAvLyBQbGFpbi10ZXh0IGJvZHkgKyBuby1jb3JzIGF2b2lkcyBhIENPUlMgcHJlZmxpZ2h0OyBBcHBzIFNjcmlwdCBzdGlsbCByZWNlaXZlcyB0aGUgSlNPTi4KICAgIGZldGNoKENPTkZJRy5lbmRwb2ludCwgeyBtZXRob2Q6ICJQT1NUIiwgbW9kZTogIm5vLWNvcnMiLCBib2R5OiBKU09OLnN0cmluZ2lmeShwYXlsb2FkKSB9KQogICAgICAudGhlbihmdW5jdGlvbigpewogICAgICAgICQoImxlYWRGb3JtIikuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgICBzaG93VGhhbmtzKCI8Yj5UaGFua3MsICIgKyBlc2MobmFtZS5zcGxpdCgiICIpWzBdKSArICIhIFlvdXIgcmVxdWVzdCBpcyBpbi48L2I+IFdlJ2xsIHJldmlldyBpdCBhbmQgZW1haWwgeW91ciBxdW90ZSB3aXRoaW4gb25lIGJ1c2luZXNzIGRheS4gTmVlZCB1cyBzb29uZXI/IENhbGwgPGEgaHJlZj1cInRlbDo2NDc3MDI3NDM2XCI+NjQ3LTcwMi03NDM2PC9hPi4iKTsKICAgICAgfSkKICAgICAgLmNhdGNoKGZ1bmN0aW9uKCl7IHNlbmRCeUVtYWlsKG5hbWUsIHBob25lKTsgfSkKICAgICAgLnRoZW4oZnVuY3Rpb24oKXsgYnRuLmRpc2FibGVkID0gZmFsc2U7IGJ0bi50ZXh0Q29udGVudCA9ICJTZW5kIG15IHJlcXVlc3QiOyB9KTsKICB9KTsKCiAgc3luY1NpemUoKTsgcmVuZGVyRXh0cmFzKCk7IHVwZGF0ZSgpOwp9KSgpOwo=
