Ly8gPHNjcmlwdD4NCgkJCXZhciBnYWxlcmllUGFkZGluZyA9IDEwOw0KCQkJdmFyIGdhbGVyaWVMYWJlbEhlaWdodCA9IDMwOw0KCQkJdmFyIG1heEhlaWdodDsNCgkJCXZhciBnYWxlcmllc1RtcFNjcm9sbCA9IHt9Ow0KCQkJdmFyIGdhbGVyaWVzQ3VycmVudCA9ICdtYWluJzsNCgkJCXZhciBnYWxlcmllVHBsID0gew0KCQkJCS8vIHNob3cgdGhlIGdhbGVyaWVzIHNlbGVjdG9yDQoJCQkJc2hvd01haW46IGZ1bmN0aW9uKGVsZW1lbnQpIHsNCgkJCQkJJChlbGVtZW50KS5wYXJlbnRzKCcuZ2FsZXJpZXMtY29udGFpbmVyJykuZmluZCgnLmdhbGVyaWUnKS5mYWRlZFNsaWRlVXAoNDAwKTsNCgkJCQkJJChlbGVtZW50KS5wYXJlbnRzKCcuZ2FsZXJpZXMtY29udGFpbmVyJykuZmluZCgnLmdhbGVyaWVzJykuZmFkZWRTbGlkZURvd24oNDAwKTsNCgkJCQkJJChlbGVtZW50KS5wYXJlbnRzKCcuZ2FsZXJpZXMtY29udGFpbmVyJykuZmluZCgnLmdhbGVyaWVzLXNob3cnKS5mYWRlZFNsaWRlVXAoNDAwKTsNCgkJCQkJLy8kKCdib2R5Jykuc2Nyb2xsVG8oZ2FsZXJpZXNUbXBTY3JvbGwsIDUwMCk7DQoJCQkJCS8vZ2FsZXJpZXNDdXJyZW50ID0gJ21haW4nOw0KCQkJCQlnYWxlcmllVHBsLnN0b3JlU2Nyb2xsKCdtYWluJyk7DQoJCQkJfSwNCg0KCQkJCS8vIHNob3cgdGhlIGdhbGVyaWVzIHNlbGVjdG9yDQoJCQkJc2hvd0dhbGVyaWU6IGZ1bmN0aW9uKGVsZW1lbnQsIGlkKSB7DQoJCQkJCSQoZWxlbWVudCkucGFyZW50cygnLmdhbGVyaWVzLWNvbnRhaW5lcicpLmZpbmQoJy5nYWxlcmllcycpLmZhZGVkU2xpZGVVcCg0MDApOw0KCQkJCQkkKGVsZW1lbnQpLnBhcmVudHMoJy5nYWxlcmllcy1jb250YWluZXInKS5maW5kKCcuZ2FsZXJpZXMtc2hvdycpLmZhZGVkU2xpZGVEb3duKDQwMCk7DQoNCg0KCQkJCQkkKGVsZW1lbnQpLnBhcmVudHMoJy5nYWxlcmllcy1jb250YWluZXInKS5maW5kKCcuZ2FsZXJpZScpLm5vdCgnI2dhbGVyaWVfJytpZCkuZmFkZWRTbGlkZVVwKDQwMCk7DQoJCQkJCSQoZWxlbWVudCkucGFyZW50cygnLmdhbGVyaWVzLWNvbnRhaW5lcicpLmZpbmQoJyNnYWxlcmllXycraWQpLmZhZGVkU2xpZGVEb3duKDQwMCwgZnVuY3Rpb24oKSB7Z2FsZXJpZVRwbC5zdG9yZVNjcm9sbChpZCk7fSk7DQoJCQkJfSwNCg0KCQkJCXN0b3JlU2Nyb2xsOiBmdW5jdGlvbih0YXJnZXQpIHsNCgkJCQkJZ2FsZXJpZXNUbXBTY3JvbGxbZ2FsZXJpZXNDdXJyZW50XSA9ICQoICdib2R5JyApLnNjcm9sbFRvcCgpOw0KCQkJCQkvL2NvbnNvbGUubG9nKCdzdG9yZSAnK2dhbGVyaWVzQ3VycmVudCk7DQoJCQkJCWlmICh0eXBlb2YgZ2FsZXJpZXNUbXBTY3JvbGxbdGFyZ2V0XSA9PT0gInVuZGVmaW5lZCIgfHwgdHJ1ZSkgew0KCQkJCQkJJCgnYm9keScpLnNjcm9sbFRvKCQoJyNnYWxlcmllXycrdGFyZ2V0KSwgNTAwKTsNCgkJCQkJCS8vY29uc29sZS5sb2coJ2xvYWQgJysnI2dhbGVyaWVfJyt0YXJnZXQpOw0KCQkJCQl9DQoJCQkJCWVsc2UJew0KCQkJCQkJJCgnYm9keScpLnNjcm9sbFRvKGdhbGVyaWVzVG1wU2Nyb2xsW3RhcmdldF0sIDUwMCk7DQoJCQkJCQkvL2NvbnNvbGUubG9nKCdsb2FkICcrdGFyZ2V0KTsNCgkJCQkJfQ0KCQkJCQlnYWxlcmllc0N1cnJlbnQgPSB0YXJnZXQ7DQoJCQkJfSwNCg0KCQkJCXVwZGF0ZUhlaWdodDogZnVuY3Rpb24oKSB7DQoJCQkJCSQoJy5nYWxlcmllcywgLmdhbGVyaWUtZ3JvdXAnKS5lYWNoKGZ1bmN0aW9uICgpIHsNCgkJCQkJCWlmICgkKHRoaXMpLmRhdGEoJ3RpbGUtd2lkdGgnKSkgew0KCQkJCQkJCXZhciBnYWxlcmllc1dpZHRoID0gJCh0aGlzKS53aWR0aCgpOw0KCQkJCQkJCWlmICghZ2FsZXJpZXNXaWR0aCkgew0KCQkJCQkJCQlnYWxlcmllc1dpZHRoID0gJCh0aGlzKS5wYXJlbnRzKCcuZ2FsZXJpZXMtY29udGFpbmVyJykud2lkdGgoKTsNCgkJCQkJCQl9DQoJCQkJCQkJaWYgKGdhbGVyaWVzV2lkdGggPiAxMDApIHsNCgkJCQkJCQkJdmFyIG51bWJlckNvbCA9IE1hdGguY2VpbChnYWxlcmllc1dpZHRoIC8gJCh0aGlzKS5kYXRhKCd0aWxlLXdpZHRoJykpOw0KCQkJCQkJCQltYXhIZWlnaHQgPSAoZ2FsZXJpZXNXaWR0aCAvIG51bWJlckNvbCkgLyAkKHRoaXMpLmRhdGEoJ3RpbGUtd2lkdGgnKSAqICQodGhpcykuZGF0YSgndGlsZS1oZWlnaHQnKTsNCg0KCQkJCQkJCQkkKHRoaXMpLmZpbmQoJy5nYWxlcmllcy1ibG9jaycpLmNzcygnd2lkdGgnLCAoMTAwIC8gbnVtYmVyQ29sKSArICclJykuY3NzKCdwYWRkaW5nJywgZ2FsZXJpZVBhZGRpbmcgKyAncHgnKTsNCgkJCQkJCQkJJCh0aGlzKS5kYXRhKCdjb2wnLCBudW1iZXJDb2wpOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfSk7DQoNCgkJCQkJJCgnLmdhbGVyaWUtZ3JvdXA6dmlzaWJsZScpLmNzcygnd2lkdGgnLCAnY2FsYygxMDAlICsgJysoZ2FsZXJpZVBhZGRpbmcqMikrJ3B4KScpLmNzcygnbWFyZ2luTGVmdCcsICctJytnYWxlcmllUGFkZGluZysncHgnKTsNCg0KCQkJCQkkKCcuZ2FsZXJpZXMtaW1nJykuaGVpZ2h0KHBhcnNlSW50KG1heEhlaWdodCkpOw0KDQoJCQkJCSQoJy5nYWxlcmllLWdyb3VwJykuZWFjaChmdW5jdGlvbiAoKSB7DQoJCQkJCQlpZiAoJCh0aGlzKS5kYXRhKCdwcmVzZW50YXRpb24nKSkgew0KCQkJCQkJCSQodGhpcykuZmluZCgnLmdhbGVyaWVzLWxlZ2VuZCcpLmNzcygnb3ZlcmZsb3cnLCAnaGlkZGVuJykuY3NzKCd3aGl0ZS1zcGFjZScsICdub3dyYXAnKS5jc3MoJ3RleHQtb3ZlcmZsb3cnLCAnZWxsaXBzaXMnKTsNCg0KCQkJCQkJCWlmICgkKHRoaXMpLmRhdGEoJ2NvbCcpID4gNCApIHsNCgkJCQkJCQkJJCh0aGlzKS5oZWlnaHQocGFyc2VJbnQobWF4SGVpZ2h0K2dhbGVyaWVMYWJlbEhlaWdodCsoZ2FsZXJpZVBhZGRpbmcqMikpKS5jc3MoJ292ZXJmbG93JywgJ2hpZGRlbicpOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlIGlmICgkKHRoaXMpLmRhdGEoJ2NvbCcpID09IDQgfHwgJCh0aGlzKS5kYXRhKCdjb2wnKSA9PSAzICkgew0KCQkJCQkJCQkkKHRoaXMpLmhlaWdodChwYXJzZUludCgobWF4SGVpZ2h0K2dhbGVyaWVMYWJlbEhlaWdodCsoZ2FsZXJpZVBhZGRpbmcqMikpKjIpKS5jc3MoJ292ZXJmbG93JywgJ2hpZGRlbicpOw0KCQkJCQkJCX0NCgkJCQkJCQllbHNlIHsNCgkJCQkJCQkJJCh0aGlzKS5oZWlnaHQoJ2F1dG8nKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0pOw0KDQoJCQkJfSwNCg0KCQkJCXVwZGF0ZVZpc2libGU6IGZ1bmN0aW9uKGdhbGVyaWUpIHsNCgkJCQkJaWYgKCFnYWxlcmllKSBnYWxlcmllID0gJCgnLmdhbGVyaWVzLWNvbnRhaW5lcicpOw0KCQkJCQllbHNlIGdhbGVyaWUgPSAkKGdhbGVyaWUpOw0KDQoJCQkJCWdhbGVyaWUuZmluZCgnLmdhbGVyaWVzLWltZzp2aXNpYmxlJykuZWFjaChmdW5jdGlvbiAoKSB7DQoJCQkJCQlpZiAoJCh0aGlzKS5kYXRhKCdzcmMnKSkgew0KCQkJCQkJCSQodGhpcykuYWRkQ2xhc3MoJ3RyYW5zcGFyZW50Jyk7DQoJCQkJCQkJJCh0aGlzKS5hdHRyKCdzcmMnLCAkKHRoaXMpLmRhdGEoJ3NyYycpKTsNCgkJCQkJCQkvLyQodGhpcykuY3NzKCdiYWNrZ3JvdW5kSW1hZ2UnLCAndXJsKCcrJCh0aGlzKS5kYXRhKCdzcmMnKSsnKScpOw0KCQkJCQkJCXZhciBjdXJyZW50SW1nID0gJCh0aGlzKQ0KCQkJCQkJCSQoJzxpbWcvPicpLmF0dHIoJ3NyYycsICQodGhpcykuZGF0YSgnc3JjJykpLm9uKCdsb2FkJywgZnVuY3Rpb24oKSB7DQoJCQkJCQkJCSQodGhpcykucmVtb3ZlKCk7IC8vIHByZXZlbnQgbWVtb3J5IGxlYWtzIGFzIEBiZW53ZWV0IHN1Z2dlc3RlZA0KCQkJCQkJCQljdXJyZW50SW1nLmNzcygnYmFja2dyb3VuZEltYWdlJywgJ3VybCgnKyQodGhpcykuYXR0cignc3JjJykrJyknKTsNCgkJCQkJCQkJY3VycmVudEltZy5yZW1vdmVDbGFzcygndHJhbnNwYXJlbnQnKTsNCgkJCQkJCQl9KTsNCgkJCQkJCQkkKHRoaXMpLmRhdGEoJ3NyYycsIG51bGwpOw0KCQkJCQkJfQ0KCQkJCQl9KTsNCgkJCQl9LA0KDQoJCQkJZGF0YVJlcXVlc3Q6IGZ1bmN0aW9uKCkgew0KCQkJCQkkKCcuZ2FsZXJpZXNbZGF0YS1leHRlcm5hbF0nKS5lYWNoKGZ1bmN0aW9uKCkgew0KCQkJCQkJdmFyIGN1cnJlbnRHYWxlcmllID0gdGhpczsNCgkJCQkJCXZhciByZXF1ZXN0ID0gJC5hamF4KHsNCgkJCQkJCQl1cmw6ICQodGhpcykuZGF0YSgnZXh0ZXJuYWwnKSwNCgkJCQkJCQl0eXBlOiAiR0VUIiwNCgkJCQkJCQlkYXRhVHlwZTogImpzb24iLA0KCQkJCQkJCXN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHsNCgkJCQkJCQkJZ2FsZXJpZVRwbC5kYXRhSW1wb3J0KGN1cnJlbnRHYWxlcmllLCBkYXRhLmRhdGEsIHRydWUpOw0KCQkJCQkJCX0NCgkJCQkJCX0pOw0KCQkJCQl9KTsNCgkJCQl9LA0KDQoJCQkJZGF0YUltcG9ydDogZnVuY3Rpb24oZ2FsZXJpZSwgZGF0YSwgcmVmcmVzaCkgew0KCQkJCQl2YXIgZGVmYXVsdFdpZHRoID0gJChnYWxlcmllKS5maW5kKCcuZ2FsZXJpZS1ncm91cCcpLmRhdGEoJ3RpbGUtd2lkdGgnKQ0KCQkJCQl2YXIgZGVmYXVsdEhlaWdodCA9ICQoZ2FsZXJpZSkuZmluZCgnLmdhbGVyaWUtZ3JvdXAnKS5kYXRhKCd0aWxlLWhlaWdodCcpDQoJCQkJCXZhciBnYWxpZCA9ICQoZ2FsZXJpZSkuZGF0YSgnaWQnKTsNCgkJCQkJdmFyIGh0bWwgPSAnJzsNCg0KCQkJCQkvLyBjaGFuZ2UgaW1hZ2UgY292ZXINCgkJCQkJaWYgKGRhdGEudXJsX3RoKSB7DQoJCQkJCQl2YXIgZ2FsTGluayA9ICQoJy5nYWxlcmllcy1saW5rW2RhdGEtaWQ9JyArIGdhbGlkICsgJ10nKTsNCgkJCQkJCWdhbExpbmsuZmluZCgnLmdhbGVyaWVzLWltZycpLmF0dHIoJ2RhdGEtc3JjJywgZGF0YS51cmxfdGgpLmF0dHIoJ3NyYycsIGRhdGEudXJsX3RoKS5kYXRhKCdzcmMnLCBkYXRhLnVybF90aCk7DQoJCQkJCQlnYWxlcmllVHBsLnVwZGF0ZVZpc2libGUoZ2FsTGluayk7DQoJCQkJCX0NCg0KCQkJCQkvLyBhZGQgZ2FsZXJpZXMNCgkJCQkJaWYgKGRhdGEuY2hpbGRzKSB7DQoJCQkJCQlmb3IgKHZhciBpID0gMCwgbGVuID0gZGF0YS5jaGlsZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsNCgkJCQkJCQlpdGVtID0gZGF0YS5jaGlsZHNbaV07DQoJCQkJCQkJaWYgKGl0ZW0uYWN0aWYgJiYgIWl0ZW0ucGFzc3dvcmRfY29kZSkgew0KCQkJCQkJCQl2YXIgbGFiZWwgPSBpdGVtLm5hbWU7DQoJCQkJCQkJCXZhciB0aHVtYiA9IGl0ZW0udXJsX3RoOw0KCQkJCQkJCQl2YXIgaW1nID0gaXRlbS51cmw7DQoJCQkJCQkJCXZhciBpZCA9ICQoZ2FsZXJpZSkuZGF0YSgnaWQnKSArICdfJyArIGl0ZW0uaWQ7DQoNCgkJCQkJCQkJLy8gY3JlYXRlIGdhbGVyaWUNCgkJCQkJCQkJdmFyIGdhbCA9ICQoJzxkaXYgY2xhc3M9ImdhbGVyaWVzIiBpZD0iZ2FsZXJpZV8nICsgaWQgKyAnIiBkYXRhLWlkPSInICsgaWQgKyAnIiBzdHlsZT0iZGlzcGxheTpub25lOyI+PGRpdiBjbGFzcz0iZ2FsZXJpZS1oZWFkZXIiPjxoMj4nICsgbGFiZWwgKyAnPC9oMj48L2Rpdj48ZGl2IGNsYXNzPSJnYWxlcmllLWdyb3VwIiBhbGlnbj0ibGVmdCIgY2xhc3M9ImdhbGVyaWUtZ3JvdXAiIGRhdGEtdGlsZS13aWR0aD0iJyArIGRlZmF1bHRXaWR0aCArICciIGRhdGEtdGlsZS1oZWlnaHQ9IicgKyBkZWZhdWx0SGVpZ2h0ICsgJyIgZGF0YS1wcmVzZW50YXRpb249IiI+PC9kaXY+PC9kaXY+Jyk7DQoJCQkJCQkJCSQoJy5nYWxlcmllcy1jb250YWluZXInKS5hcHBlbmQoZ2FsKTsNCg0KCQkJCQkJCQkvLyBnbyBiYWNrIGJ0bg0KCQkJCQkJCQl2YXIgYmFjayA9ICc8YSBkYXRhLWlkPSInICsgZ2FsaWQgKyAnIiBjYXB0aW9uPSJSZXRvdXIiIGRhdGEtY2FwdGlvbj0iUmV0b3VyIiBjbGFzcz0iZ2FsZXJpZXMtbGluayBwYXJlbnQiIGRhdGEtaWQ9IicgKyBnYWxpZCArICciID48ZGl2IHN0eWxlPSIgZGlzcGxheTppbmxpbmUtYmxvY2s7IHpvb206MTsgdmVydGljYWwtYWxpZ246dG9wOyB0ZXh0LWFsaWduOmNlbnRlcjsgd2lkdGg6JyArIGRlZmF1bHRXaWR0aCArICdweDsgb3ZlcmZsb3c6aGlkZGVuOyAiIGNsYXNzPSJnYWxlcmllcy1ibG9jayIgY2xhc3M9ImltZ2RpdiIgPiA8ZGl2IGNsYXNzPSJnYWxlcmllcy1ibG9jay1pbnNpZGUiPiA8c3BhbiBib3JkZXI9IjAiIGRhdGEtc3JjPSJ0aGVtZXMvZW5zZWlnbmVzZmpvcmQvaW1nL3BhcmVudC5wbmciIGFsdD0iUmV0b3VyIiBjbGFzcz0iZ2FsZXJpZXMtaW1nIGltZ190aCIgc3R5bGU9IndpZHRoOicgKyBkZWZhdWx0V2lkdGggKyAncHg7IGhlaWdodDonICsgZGVmYXVsdEhlaWdodCArICdweDsgIj4gPC9zcGFuPiA8ZGl2IGNsYXNzPSJnYWxlcmllcy1sZWdlbmQgbGVnZW5kZSIgc3R5bGU9Im1pbi1oZWlnaHQ6MjVweDsgdGV4dC1hbGlnbjpjZW50ZXI7Ij48c3Bhbj4gUmV0b3VyIDwvc3Bhbj48L2Rpdj48L2Rpdj48L2Rpdj48L2E+JzsNCgkJCQkJCQkJZ2FsLmZpbmQoJy5nYWxlcmllLWdyb3VwJykuYXBwZW5kKGJhY2spOw0KDQoJCQkJCQkJCS8vIGdvIHRvIGdhbGVyaWUgYnRuDQoJCQkJCQkJCWh0bWwgKz0gJzxhIGRhdGEtaWQ9IicgKyBpZCArICciIGNhcHRpb249IicgKyBsYWJlbCArICciIGRhdGEtY2FwdGlvbj0iJyArIGxhYmVsICsgJyIgY2xhc3M9ImdhbGVyaWVzLWxpbmsgR2FsZXJpZUFsYnVtIiBkYXRhLWlkPSInICsgaWQgKyAnIiA+PGRpdiBzdHlsZT0iIGRpc3BsYXk6aW5saW5lLWJsb2NrOyB6b29tOjE7IHZlcnRpY2FsLWFsaWduOnRvcDsgdGV4dC1hbGlnbjpjZW50ZXI7IHdpZHRoOicgKyBkZWZhdWx0V2lkdGggKyAncHg7IG92ZXJmbG93OmhpZGRlbjsgIiBjbGFzcz0iZ2FsZXJpZXMtYmxvY2siIGNsYXNzPSJpbWdkaXYiID4gPGRpdiBjbGFzcz0iZ2FsZXJpZXMtYmxvY2staW5zaWRlIj4gPHNwYW4gYm9yZGVyPSIwIiBkYXRhLXNyYz0iJyArIHRodW1iICsgJyIgYWx0PSInICsgbGFiZWwgKyAnIiBjbGFzcz0iZ2FsZXJpZXMtaW1nIGltZ190aCIgc3R5bGU9IndpZHRoOicgKyBkZWZhdWx0V2lkdGggKyAncHg7IGhlaWdodDonICsgZGVmYXVsdEhlaWdodCArICdweDsgIj4gPC9zcGFuPiA8ZGl2IGNsYXNzPSJnYWxlcmllcy1sZWdlbmQgbGVnZW5kZSIgc3R5bGU9Im1pbi1oZWlnaHQ6MjVweDsgdGV4dC1hbGlnbjpjZW50ZXI7Ij48c3Bhbj4nICsgbGFiZWwgKyAnPC9zcGFuPjwvZGl2PjwvZGl2PjwvZGl2PjwvYT4nOw0KDQoJCQkJCQkJCWdhbGVyaWVUcGwuZGF0YUltcG9ydChnYWwsIGl0ZW0pOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KDQoJCQkJCS8vIGFkZCBpbWFnZXMNCgkJCQkJaWYgKGRhdGEuaW1hZ2VzKSB7DQoJCQkJCQlmb3IgKHZhciBpID0gMCwgbGVuID0gZGF0YS5pbWFnZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsNCgkJCQkJCQlpdGVtID0gZGF0YS5pbWFnZXNbaV07DQoJCQkJCQkJaWYgKGl0ZW0uYWN0aWYgJiYgIWl0ZW0ucGFzc3dvcmRfY29kZSkgew0KCQkJCQkJCQl2YXIgbGFiZWwgPSBpdGVtLm5hbWU7DQoJCQkJCQkJCXZhciB0aHVtYiA9IGl0ZW0udXJsX3RoOw0KCQkJCQkJCQl2YXIgaW1nID0gaXRlbS51cmw7DQoJCQkJCQkJCXZhciBpZCA9ICQoZ2FsZXJpZSkuZGF0YSgnaWQnKSArICdfJyArIGl0ZW0uaWQ7DQoJCQkJCQkJCWh0bWwgKz0gJzxhIGhyZWY9IicgKyBpbWcgKyAnIiBjbGFzcz0iaW1nYm94IiByZWw9ImdhbGxlcnlfJyArIGdhbGlkICsgJyIgZGF0YS1mYW5jeWJveD0iZ2FsbGVyeV8nICsgZ2FsaWQgKyAnIiBjYXB0aW9uPSInICsgbGFiZWwgKyAnIiBkYXRhLWNhcHRpb249IicgKyBsYWJlbCArICciIGNsYXNzPSJnYWxlcmllcy1saW5rIEdhbGVyaWVJbWFnZSIgZGF0YS1pZD0iJyArIGlkICsgJyI+PGRpdiBzdHlsZT0iZGlzcGxheTppbmxpbmUtYmxvY2s7em9vbToxO3ZlcnRpY2FsLWFsaWduOnRvcDt0ZXh0LWFsaWduOmNlbnRlcjsgd2lkdGg6JyArIGRlZmF1bHRXaWR0aCArICdweDsgb3ZlcmZsb3c6aGlkZGVuOyAiY2xhc3M9ImdhbGVyaWVzLWJsb2NrImNsYXNzPSJpbWdkaXYiPjxkaXYgY2xhc3M9ImdhbGVyaWVzLWJsb2NrLWluc2lkZSI+PHNwYW4gYm9yZGVyPSIwIiBkYXRhLXNyYz0iJyArIHRodW1iICsgJyIgYWx0PSInICsgbGFiZWwgKyAnIiBjbGFzcz0iZ2FsZXJpZXMtaW1nIGltZ190aCIgc3R5bGU9IndpZHRoOicgKyBkZWZhdWx0V2lkdGggKyAncHg7IGhlaWdodDonICsgZGVmYXVsdEhlaWdodCArICdweDsgIj48L3NwYW4+PGRpdiBjbGFzcz0iZ2FsZXJpZXMtbGVnZW5kIGxlZ2VuZGUiIHN0eWxlPSJtaW4taGVpZ2h0OjI1cHg7IHRleHQtYWxpZ246Y2VudGVyOyI+PHNwYW4+JyArIGxhYmVsICsgJzwvc3Bhbj48L2Rpdj48L2Rpdj48L2Rpdj48L2E+JzsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCg0KCQkJCQkkKGdhbGVyaWUpLmZpbmQoJy5nYWxlcmllLWdyb3VwJykuYXBwZW5kKGh0bWwpOw0KDQoJCQkJCWdhbGVyaWVUcGwuYmluZCgkKGdhbGVyaWUpKTsNCg0KCQkJCQlpZiAocmVmcmVzaCkgew0KCQkJCQkJZ2FsZXJpZVRwbC51cGRhdGVWaXNpYmxlKCk7DQoJCQkJCQlnYWxlcmllVHBsLnVwZGF0ZUhlaWdodCgpOw0KCQkJCQl9DQoJCQkJfSwNCg0KCQkJCWJpbmQ6IGZ1bmN0aW9uKGdhbGVyaWUpIHsNCgkJCQkJaWYgKCFnYWxlcmllKSBnYWxlcmllID0gJCgnLmdhbGVyaWVzLWNvbnRhaW5lcicpOw0KCQkJCQllbHNlIGdhbGVyaWUgPSAkKGdhbGVyaWUpOw0KDQoNCgkJCQkJZ2FsZXJpZS5maW5kKCcuZ2FsZXJpZXMtaW1nJykuYWRkQ2xhc3MoJ3RyYW5zcGFyZW50Jyk7DQoNCgkJCQkJZ2FsZXJpZS5maW5kKCcuZ2FsZXJpZXMtaW1nJykubm90KCI6dmlzaWJsZSIpLmVhY2goZnVuY3Rpb24gKCkgew0KCQkJCQkJaWYgKCEkKHRoaXMpLmRhdGEoInNyYyIpKSB7DQoJCQkJCQkJJCh0aGlzKS5kYXRhKCJzcmMiLCB0aGlzLnNyYyk7DQoJCQkJCQkJdGhpcy5zcmMgPSAianMvYmxhbmsuZ2lmIjsNCgkJCQkJCX0NCgkJCQkJfSk7DQoNCgkJCQkJdmFyIGdhbGVyaWVzTGluayA9IGdhbGVyaWUuZmluZCgnLmdhbGVyaWVzLWxpbms6bm90KC5iaW5kZWQpJyk7DQoJCQkJCWdhbGVyaWVzTGluay5hZGRDbGFzcygnYmluZGVkJyk7DQoJCQkJCWdhbGVyaWVzTGluay5jbGljayhmdW5jdGlvbigpIHsNCgkJCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsgZ2FsZXJpZVRwbC51cGRhdGVWaXNpYmxlKCk7IH0sIDEwMCk7DQoJCQkJCX0pOw0KDQoNCgkJCQkJLy8gQ29udGVudSBkZSBnYWxlcmllDQoJCQkJCWdhbGVyaWVzTGluay5maWx0ZXIoJzpub3QoLnNlY3VyZSknKS5jbGljayhmdW5jdGlvbigpIHsNCgkJCQkJCWdhbGVyaWVUcGwuc2hvd0dhbGVyaWUodGhpcywgJCh0aGlzKS5kYXRhKCdpZCcpKTsNCgkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJfSk7DQoNCgkJCQkJLy8gQWNj77+9cyBzZWN1cmUNCgkJCQkJZ2FsZXJpZXNMaW5rLmZpbHRlcignLnNlY3VyZScpLmNsaWNrKGZ1bmN0aW9uKCkgew0KCQkJCQkJd2luZG93LnNlY3VyZUFjY2Vzc0l0ZW0oJCh0aGlzKS5kYXRhKCdpZCcpKTsNCgkJCQkJCXJldHVybiBmYWxzZTsNCgkJCQkJfSk7DQoJCQkJfQ0KDQoJCQl9Ow0KDQoJCQl3aW5kb3cuZ2FsZXJpZVRwbCA9IGdhbGVyaWVUcGw7DQoNCgkJCXdpbmRvdy5yZXBvcnRJdGVtID0gZnVuY3Rpb24oc3JjKSB7DQoJCQkJdmFyIGl0ZW0gPSAkKCdbaHJlZj0iJytzcmMrJyJdJykuZmlyc3QoKTsNCgkJCQl2YXIgaWQgPSBpdGVtLmRhdGEoJ2lkJyk7DQoNCgkJCQkkLndpbmRvdyh7DQoJCQkJCWlkOiAncmVwb3J0SXRlbScraWQsDQoJCQkJCXRpdGxlOiAnUmVwb3J0ZXIgdW4gcHJvYmxlbWUgYXZlYyB1bmUgaW1hZ2UnLA0KCQkJCQl1cmw6ICdhZG1pbi9nYWxlcmllcy9pbWFnZS9yZXBvcnQvJytpZCsnP291dHB1dD10ZXh0JywNCgkJCQkJaWNvbjogJ2ltZy1za2luL3NldHMvc3ZnL21lZGl1bS5zdmcjc3RhdHVzLXdhcm5pbmcnLA0KCQkJCQltZXRob2Q6ICdhamF4JywNCgkJCQkJbWF4V2lkdGg6IC0xLAkJIC8vIHRoZSBtaW5pbXVtIHdpZHRoLCBpZiAtMSBtZWFucyBubyBjaGVja2luZw0KCQkJCQltYXhIZWlnaHQ6IC0xLAkJIC8vIHRoZSBtaW5pbXVtIGhlaWdodCwgaWYgLTEgbWVhbnMgbm8gY2hlY2tpbmcNCgkJCQkJc2hvd0Zvb3RlcjogZmFsc2UsDQoJCQkJCW1heGltaXphYmxlOiBmYWxzZSwNCgkJCQkJY2xvc2FibGU6IHRydWUsDQoJCQkJCW1pbmltaXphYmxlOiBmYWxzZSwNCgkJCQkJc2hvd01vZGFsOiB0cnVlLA0KCQkJCQl3aWR0aDogOTAwLA0KCQkJCQloZWlnaHQ6IDU3NSwNCgkJCQkJY2hlY2tCb3VuZGFyeTogdHJ1ZSwNCgkJCQkJd2l0aGluQnJvd3NlcldpbmRvdzogZmFsc2UsDQoJCQkJCW9uSWZyYW1lRW5kOiBmdW5jdGlvbigpIHt9LA0KCQkJCQlvbkNsb3NlOiBmdW5jdGlvbigpIHsNCgkJCQkJCWJyb3dzZXJBY3Rpb25SdW4oJ3JlZnJlc2gnKTsNCgkJCQkJfQ0KCQkJCX0pOw0KCQkJfTsNCiAgICAgICAgICAgIHdpbmRvdy5zZWN1cmVBY2Nlc3NJdGVtID0gZnVuY3Rpb24oaWQpIHsNCiAgICAgICAgICAgICAgICAkLndpbmRvdyh7DQogICAgICAgICAgICAgICAgICAgIGlkOiAnc2VjdXJlQWNjZXNzSXRlbScraWQsDQogICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnQWNjJmVncmF2ZTtzIHMmZWFjdXRlO2N1cmlzJmVhY3V0ZTsnLA0KICAgICAgICAgICAgICAgICAgICB1cmw6ICdhZG1pbi9nYWxlcmllcy9pbWFnZS91bmxvY2svJytpZCwNCiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2ltZy1za2luL3NldHMvc3ZnL21lZGl1bS5zdmcjc2VjdXJlLWtleScsDQogICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ2FqYXgnLA0KICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogLTEsCQkgLy8gdGhlIG1pbmltdW0gd2lkdGgsIGlmIC0xIG1lYW5zIG5vIGNoZWNraW5nDQogICAgICAgICAgICAgICAgICAgIG1heEhlaWdodDogLTEsCQkgLy8gdGhlIG1pbmltdW0gaGVpZ2h0LCBpZiAtMSBtZWFucyBubyBjaGVja2luZw0KICAgICAgICAgICAgICAgICAgICBzaG93Rm9vdGVyOiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgbWF4aW1pemFibGU6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICBjbG9zYWJsZTogdHJ1ZSwNCgkJCQkJbWluaW1pemFibGU6IGZhbHNlLA0KICAgICAgICAgICAgICAgICAgICBzaG93TW9kYWw6IHRydWUsDQogICAgICAgICAgICAgICAgICAgIHdpZHRoOiA1NjAsDQogICAgICAgICAgICAgICAgICAgIGhlaWdodDogNTUwLA0KICAgICAgICAgICAgICAgICAgICBjaGVja0JvdW5kYXJ5OiB0cnVlLA0KICAgICAgICAgICAgICAgICAgICB3aXRoaW5Ccm93c2VyV2luZG93OiBmYWxzZSwNCiAgICAgICAgICAgICAgICAgICAgb25JZnJhbWVFbmQ6IGZ1bmN0aW9uKCkge30sDQogICAgICAgICAgICAgICAgICAgIG9uQ2xvc2U6IGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgYnJvd3NlckFjdGlvblJ1bigncmVmcmVzaCcpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICB9Ow0KDQoJCQkkKCB3aW5kb3cgKS5yZXNpemUoZnVuY3Rpb24oKSB7DQoJCQkJZ2FsZXJpZVRwbC51cGRhdGVIZWlnaHQoKTsNCgkJCX0pOw0KDQoJCQkkKGZ1bmN0aW9uICgpIHsNCgkJCQlnYWxlcmllVHBsLmJpbmQoKTsNCgkJCQlnYWxlcmllVHBsLnVwZGF0ZVZpc2libGUoKTsNCgkJCQlnYWxlcmllVHBsLnVwZGF0ZUhlaWdodCgpOw0KCQkJfSk7DQoNCgkJCSQod2luZG93KS5sb2FkKGZ1bmN0aW9uKCkgew0KCQkJCWdhbGVyaWVUcGwudXBkYXRlSGVpZ2h0KCk7DQoJCQkJc2V0VGltZW91dChmdW5jdGlvbigpeyBnYWxlcmllVHBsLnVwZGF0ZUhlaWdodCgpOyB9LCA1MDApOw0KCQkJCXNldFRpbWVvdXQoZnVuY3Rpb24oKXsgZ2FsZXJpZVRwbC51cGRhdGVIZWlnaHQoKTsgfSwgMTAwMCk7DQoNCgkJCQlnYWxlcmllVHBsLmRhdGFSZXF1ZXN0KCk7DQoJCQl9KTsNCg0KDQoJCQkvLzwvc2NyaXB0Pg==
Accueil
À propos
Services
Réalisations
Boutique
Accueil
À propos
Services
Réalisations
Boutique
Pièces de coffrages
Résidentiel
Commercial
Institutionnel
Enseignes
Découpe
Lettrage
Gravure laser
Pièces de coffrages
Retour
Pièces de coffrages
Retour
Pièces de coffrages
rib-pour-coffrage
coffrage-interieur-courbe
rib-coffrage-3
template-ancrage-beton
ribs-glissieres-pont
Résidentiel
Retour
Acrylique noir
Acylique Noir
Numéro civique
Numéro civique
Numéro civique
Commercial
Retour
lachance-acrylique-blanc
lettrage-acrylique-sport-expert-chicoutimi
Restaurant-zélé Shawinigan
Fit Gastronomie Saguenay
Paddlefest Bar O'Soleil
kiosque Chirovie
Chirovie Centre Chiropratique
Institutionnel
Retour
École trilingue Saguenay
École trilingue Saguenay
École trilingue Saguenay
École trilingue Saguenay
École trilingue Saguenay
École trilingue Saguenay
École trilingue Saguenay
École trilingue Saguenay
École trilingue Saguenay
École trilingue Saguenay
École trilingue Saguenay
Enseignes
Retour
L'appartement Bar ambiance Saguenay
L'appartement Bar ambiance Saguenay
École trilingue Saguenay
Pierre-Luc Ouellet Alma
Guylaine& Robert
Francine & Réjean
Annick & Mario Alberta
Diane & Dany
Denise & Jean-Claude
Jean-Claude & Claudette
Découpe
Retour
decoupe-module-escalade
decoupe-module-escalade2
Panache
Moule
Découpe en série
Tête de cerf
Découpe
Découpe
Découpe en série
Découpe marche
Lettrage
Retour
Acrylique
Pochoir
Alupanel blanc
Merisier russe
Lettre PVC
Lettre PVC
lettre-mdf
Lettre MDF
Lettrage 3D pin
Lettre MDF
Divers
Gravure laser
Retour
lnscape-tags2
lnscape-tags
casquettes-teg-gravure-cuir
gravure-laser-cuir
salomon-gravure-laser
gravure-laser-lamicoid-homies
Chargement...