{"id":2233,"date":"2026-11-13T15:31:42","date_gmt":"2026-11-13T15:31:42","guid":{"rendered":"https:\/\/www.budgethekwerk.nl\/blog\/?page_id=2233"},"modified":"2026-11-13T15:31:42","modified_gmt":"2026-11-13T15:31:42","slug":"bezorgrace","status":"publish","type":"page","link":"https:\/\/www.budgethekwerk.nl\/blog\/bezorgrace\/","title":{"rendered":"Bezorgrace: het Budget Hekwerk spel"},"content":{"rendered":"<p>Stap in de bus van Budget Hekwerk en breng het hekwerk heel bij de klant. Hoe ver kom jij?<\/p>\n<div id=\"bhw-wrap\"><\/div>\n<p><script>eval(decodeURIComponent(escape(atob('ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Jody13cmFwJykuaW5uZXJIVE1MPSI8c3R5bGU+XG4jYmh3LWdhbWV7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJTttYXgtd2lkdGg6OTYwcHg7bWFyZ2luOjAgYXV0bzthc3BlY3QtcmF0aW86MTYvOTtmb250LWZhbWlseTpcIkFyaWFsIEJsYWNrXCIsXCJTZWdvZSBVSSBCbGFja1wiLEFyaWFsLHNhbnMtc2VyaWY7dXNlci1zZWxlY3Q6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dG91Y2gtYWN0aW9uOm1hbmlwdWxhdGlvbjtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6MCA2cHggMjRweCByZ2JhKDAsMCwwLC4yNSk7YmFja2dyb3VuZDojOGZkM2ZmO291dGxpbmU6bm9uZX1cbiNiaHctZ2FtZSBjYW52YXN7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2N1cnNvcjpwb2ludGVyfVxuI2Jody1nYW1lIC5iaHctb3Z7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDpyZ2JhKDEwLDMwLDUwLC40Mil9XG4jYmh3LWdhbWUgLmJody1jYXJke2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6NHB4IHNvbGlkICMxZDFkMWI7Ym9yZGVyLXJhZGl1czoxNnB4O3BhZGRpbmc6Y2xhbXAoMTJweCwyLjR2dywyNHB4KSBjbGFtcCgxNHB4LDN2dywzMHB4KTttYXgtd2lkdGg6ODAlO3RleHQtYWxpZ246Y2VudGVyO2JveC1zaGFkb3c6NnB4IDZweCAwICMxZDFkMWJ9XG4jYmh3LWdhbWUgLmJody1jYXJkIGgye21hcmdpbjowIDAgOHB4O2ZvbnQtc2l6ZTpjbGFtcCgxOHB4LDMuNnZ3LDM0cHgpO2NvbG9yOiMxZDFkMWI7bGluZS1oZWlnaHQ6MS4xNTtmb250LXdlaWdodDo5MDB9XG4jYmh3LWdhbWUgLmJody1jYXJkIGgyIHNwYW57YmFja2dyb3VuZDojZmZlODFhO3BhZGRpbmc6MCA2cHg7Ym9yZGVyLXJhZGl1czo0cHh9XG4jYmh3LWdhbWUgLmJody1jYXJkIHB7bWFyZ2luOjZweCAwO2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZTpjbGFtcCgxMXB4LDEuOHZ3LDE2cHgpO2NvbG9yOiMyYjJiMmI7bGluZS1oZWlnaHQ6MS4zNX1cbiNiaHctZ2FtZSAuYmh3LWNhcmQgcC5iaHctc21hbGx7Zm9udC1zaXplOmNsYW1wKDEwcHgsMS41dncsMTNweCk7Y29sb3I6IzY2Nn1cbiNiaHctZ2FtZSAuYmh3LWNhcmQgYntjb2xvcjojMWQxZDFifVxuI2Jody1nYW1lIC5iaHctYnRue21hcmdpbi10b3A6MTBweDtmb250OmluaGVyaXQ7Zm9udC1zaXplOmNsYW1wKDE0cHgsMi4ydncsMjBweCk7YmFja2dyb3VuZDojZjM5MjAwO2NvbG9yOiNmZmY7Ym9yZGVyOjNweCBzb2xpZCAjMWQxZDFiO2JvcmRlci1yYWRpdXM6MTBweDtwYWRkaW5nOjhweCAyMnB4O2N1cnNvcjpwb2ludGVyO2JveC1zaGFkb3c6M3B4IDNweCAwICMxZDFkMWI7Zm9udC13ZWlnaHQ6OTAwfVxuI2Jody1nYW1lIC5iaHctYnRuOmhvdmVye2JhY2tncm91bmQ6I2ZmOWYxMH1cbiNiaHctZ2FtZSAuYmh3LWJ0bjphY3RpdmV7dHJhbnNmb3JtOnRyYW5zbGF0ZSgycHgsMnB4KTtib3gtc2hhZG93OjFweCAxcHggMCAjMWQxZDFifVxuI2Jody1nYW1lIC5iaHctbXV0ZXtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMHB4O2JvdHRvbToxMHB4O3dpZHRoOjM4cHg7aGVpZ2h0OjM4cHg7Ym9yZGVyLXJhZGl1czo1MCU7Ym9yZGVyOjNweCBzb2xpZCAjMWQxZDFiO2JhY2tncm91bmQ6I2ZmZTgxYTtmb250LXNpemU6MThweDtsaW5lLWhlaWdodDoxO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6MDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9XG4jYmh3LWdhbWUgLmJody1zdGFydHtwYWRkaW5nLXRvcDpjbGFtcCg4cHgsMS42dncsMTZweCl9XG4jYmh3LWdhbWUgLmJody1sb2dve2Rpc3BsYXk6YmxvY2s7d2lkdGg6Y2xhbXAoMTEwcHgsMjR2dywyMjBweCk7bWFyZ2luOjAgYXV0byBjbGFtcCgwcHgsLjV2dyw2cHgpfVxuI2Jody1nYW1lIC5iaHcta2V5c3ttYXJnaW46OHB4IDAgMnB4O2ZvbnQtZmFtaWx5OkFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmO2ZvbnQtc2l6ZTpjbGFtcCgxMXB4LDEuNnZ3LDE0cHgpO2NvbG9yOiM1NTV9XG4jYmh3LWdhbWUgLmJody1rZXlzIGtiZHtkaXNwbGF5OmlubGluZS1ibG9jaztmb250OmluaGVyaXQ7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMxZDFkMWI7YmFja2dyb3VuZDojZjNmM2YzO2JvcmRlcjoycHggc29saWQgIzFkMWQxYjtib3JkZXItYm90dG9tLXdpZHRoOjNweDtib3JkZXItcmFkaXVzOjZweDtwYWRkaW5nOjFweCA3cHg7bWFyZ2luOjAgMnB4fVxuI2Jody1nYW1lIC5iaHctaGlkZGVue2Rpc3BsYXk6bm9uZX1cbkBtZWRpYSAobWF4LXdpZHRoOjYwMHB4KXsjYmh3LWdhbWUgLmJody1sb2dvLCNiaHctZ2FtZSAuYmh3LWtleXN7ZGlzcGxheTpub25lfSNiaHctZ2FtZSAuYmh3LWNhcmR7cGFkZGluZzoxMHB4IDE0cHg7Ym9yZGVyLXdpZHRoOjNweDtib3gtc2hhZG93OjRweCA0cHggMCAjMWQxZDFifSNiaHctZ2FtZSAuYmh3LWNhcmQgcHttYXJnaW46M3B4IDB9I2Jody1nYW1lIC5iaHctYnRue21hcmdpbi10b3A6NnB4O3BhZGRpbmc6NXB4IDE2cHh9I2Jody1nYW1lIC5iaHctbXV0ZXt3aWR0aDoyOHB4O2hlaWdodDoyOHB4O2ZvbnQtc2l6ZToxM3B4O3JpZ2h0OjZweDtib3R0b206NnB4O2JvcmRlci13aWR0aDoycHh9fVxuPC9zdHlsZT48ZGl2IGlkPVwiYmh3LWdhbWVcIiB0YWJpbmRleD1cIjBcIj5cbiAgPGNhbnZhcyB3aWR0aD1cIjk2MFwiIGhlaWdodD1cIjU0MFwiIGFyaWEtbGFiZWw9XCJCdWRnZXQgSGVrd2VyayBCZXpvcmdyYWNlIHNwZWxcIj48L2NhbnZhcz5cblxuICA8ZGl2IGNsYXNzPVwiYmh3LW92XCIgZGF0YS1vdj1cIm1lbnVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYmh3LWNhcmQgYmh3LXN0YXJ0XCI+XG4gICAgICA8aW1nIGNsYXNzPVwiYmh3LWxvZ29cIiBkYXRhLXZhbmltZyBhbHQ9XCJcIj5cbiAgICAgIDxoMj5CdWRnZXQgSGVrd2VyayA8c3Bhbj5CZXpvcmdyYWNlPC9zcGFuPjwvaDI+XG4gICAgICA8cD5CcmVuZyBoZXQgaGVrd2VyayBoZWVsIGJpaiBkZSBrbGFudCE8L3A+XG4gICAgICA8ZGl2IGNsYXNzPVwiYmh3LWtleXNcIj48a2JkPnNwYXRpZTwva2JkPjxrYmQ+JnVhcnI7PC9rYmQ+PGtiZD50aWs8L2tiZD4gPSBzcHJpbmdlbjwvZGl2PlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJody1idG5cIiBkYXRhLWFjdD1cInN0YXJ0XCI+U3RhcnQgZGUgcml0PC9idXR0b24+XG4gICAgICA8cCBjbGFzcz1cImJody1zbWFsbFwiIGRhdGEtaGk+PC9wPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYmh3LW92IGJody1oaWRkZW5cIiBkYXRhLW92PVwiZG9uZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJiaHctY2FyZFwiPlxuICAgICAgPGgyPjxzcGFuPkdlbGV2ZXJkITwvc3Bhbj48L2gyPlxuICAgICAgPHAgZGF0YS1kb25lLXR4dD48L3A+XG4gICAgICA8cCBkYXRhLWRvbmUtc2NvcmU+PC9wPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJody1idG5cIiBkYXRhLWFjdD1cIm5leHRcIj5Wb2xnZW5kZSBrbGFudDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiYmh3LW92IGJody1oaWRkZW5cIiBkYXRhLW92PVwib3ZlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJiaHctY2FyZFwiPlxuICAgICAgPGgyPk9lcHMhIDxzcGFuPkxhZGluZyBrYXBvdDwvc3Bhbj48L2gyPlxuICAgICAgPHAgZGF0YS1vdmVyLXR4dD48L3A+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYmh3LWJ0blwiIGRhdGEtYWN0PVwicmV0cnlcIiBkYXRhLXJldHJ5LWJ0bj5SaXQgb3BuaWV1dzwvYnV0dG9uPlxuICAgICAgPHAgY2xhc3M9XCJiaHctc21hbGxcIiBzdHlsZT1cIm1hcmdpbi10b3A6MTBweFwiPjxhIGhyZWY9XCIjXCIgZGF0YS1hY3Q9XCJzdGFydFwiIHN0eWxlPVwiY29sb3I6IzFkMWQxYlwiPm9mIGJlZ2luIG9wbmlldXcgYmlqIHJpdCAxPC9hPjwvcD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImJody1vdiBiaHctaGlkZGVuXCIgZGF0YS1vdj1cInBhdXNlXCI+XG4gICAgPGRpdiBjbGFzcz1cImJody1jYXJkXCI+XG4gICAgICA8aDI+RXZlbiA8c3Bhbj5wYXV6ZTwvc3Bhbj48L2gyPlxuICAgICAgPHA+RGUgYnVzIHN0YWF0IHN0aWwuIEtsYWFyIG9tIHZlcmRlciB0ZSByaWpkZW4\/PC9wPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJody1idG5cIiBkYXRhLWFjdD1cInJlc3VtZVwiPlZlcmRlciByaWpkZW48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGJ1dHRvbiBjbGFzcz1cImJody1tdXRlXCIgZGF0YS1hY3Q9XCJtdXRlXCIgdGl0bGU9XCJHZWx1aWQgYWFuL3VpdFwiIGFyaWEtbGFiZWw9XCJHZWx1aWQgYWFuL3VpdFwiPlx1ZDgzZFx1ZGQwYTwvYnV0dG9uPlxuPC9kaXY+IjsKCihmdW5jdGlvbigpewoidXNlIHN0cmljdCI7CnZhciByb290PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiaHctZ2FtZScpOwp2YXIgY3Y9cm9vdC5xdWVyeVNlbGVjdG9yKCdjYW52YXMnKSxjdHg9Y3YuZ2V0Q29udGV4dCgnMmQnKTsKdmFyIFc9OTYwLEg9NTQwLEdZPTQ3OCxWQU5fWD02NTA7CnZhciBWVz0yMjAsVkg9TWF0aC5yb3VuZChWVyoyMjQvMzgwKTsKdmFyIGRwcj0xOwpmdW5jdGlvbiByZXNpemUoKXtkcHI9TWF0aC5taW4oMix3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSk7Y3Yud2lkdGg9VypkcHI7Y3YuaGVpZ2h0PUgqZHByO30KcmVzaXplKCk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScscmVzaXplKTsKCnZhciB2YW5JbWc9bmV3IEltYWdlKCk7dmFuSW1nLm9ubG9hZD1mdW5jdGlvbigpe3ZhciBtPXJvb3QucXVlcnlTZWxlY3RvcignW2RhdGEtdmFuaW1nXScpO2lmKG0pbS5zcmM9dmFuSW1nLnNyYzt9O3ZhbkltZy5zcmM9J2h0dHBzOi8vd3d3LmJ1ZGdldGhla3dlcmsubmwvYmxvZy93cC1jb250ZW50L3VwbG9hZHMvMjAyNi8xMS9iZXpvcmdyYWNlLWJ1cy53ZWJwJzsKCnZhciBLTEFOVEVOPVtbIkZhbS4gSmFuc2VuIiwiV29sdmVnYSJdLFsiRGhyLiBCYWtrZXIiLCJIZWVyZW52ZWVuIl0sWyJNZXZyLiBWaXNzZXIiLCJFbW1lbG9vcmQiXSxbIkZhbS4gZGUgSm9uZyIsIlN0ZWVud2lqayJdLFsiQ2FtcGluZyBEZSBQb2xkZXIiLCJMZW1tZXIiXSxbIkZhbS4gTXVsZGVyIiwiU25lZWsiXSxbIkRoci4gU21pdCIsIk1lcHBlbCJdLFsiTWV2ci4gQm9zIiwiRHJhY2h0ZW4iXV07CnZhciBNQVhQPTM7Cgp2YXIgc3RhdGU9J21lbnUnLHBhdXNlZD1mYWxzZSxlbmdhZ2VkPWZhbHNlOwp2YXIgbGV2ZWw9MCxzY29yZT0wLGNvaW5zPTAscGFuZWxzPU1BWFAsY3VyPXtuYWFtOicnLHBsYWF0czonJ307CnZhciBzY3JvbGw9MCxzcGVlZD0wLGJhc2VTcGVlZD0wLGRpc3Q9MCxsZXZlbExlbj0xOwp2YXIgdmFuPXt5OjAsdnk6MCxncm91bmQ6dHJ1ZSxpbnY6MCxob2xkOmZhbHNlLGJ1ZjowfTsKdmFyIG9icz1bXSxpdGVtcz1bXSxwYXJ0cz1bXSxob3VzZT1udWxsLHNwYXduSW49MCxzdGF0ZVQ9MCxzaGFrZT0wLHQ9MCxwdWZmVD0wLHNob3duPWZhbHNlOwp2YXIgbHZsU2NvcmU9MCxsdmxDb2lucz0wOwp2YXIgaGk9MDt0cnl7aGk9K2xvY2FsU3RvcmFnZS5nZXRJdGVtKCdiaHdfaGknKXx8MDt9Y2F0Y2goZSl7fQoKLyogLS0tLS0tLS0tLSBnZWx1aWQgLS0tLS0tLS0tLSAqLwp2YXIgYWM9bnVsbCxtdXRlZD1mYWxzZTsKdmFyIG11c2ljPW5ldyBBdWRpbygnaHR0cHM6Ly93d3cuYnVkZ2V0aGVrd2Vyay5ubC9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDI2LzExL2Jlem9yZ3JhY2UtbXV6aWVrLm1wMycpO211c2ljLmxvb3A9dHJ1ZTttdXNpYy5wcmVsb2FkPSdub25lJzttdXNpYy52b2x1bWU9LjQ7CmZ1bmN0aW9uIG11c2ljUGxheSh2b2wpe211c2ljLnZvbHVtZT12b2x8fC40O2lmKG11dGVkKXJldHVybjt0cnl7dmFyIHByPW11c2ljLnBsYXkoKTtpZihwciYmcHIuY2F0Y2gpcHIuY2F0Y2goZnVuY3Rpb24oKXt9KTt9Y2F0Y2goZSl7fX0KZnVuY3Rpb24gbXVzaWNQYXVzZSgpe3RyeXttdXNpYy5wYXVzZSgpO31jYXRjaChlKXt9fQpmdW5jdGlvbiB0b25lKGYxLGYyLGR1cix0eXBlLHZvbCxkZWxheSl7CiAgaWYobXV0ZWQpcmV0dXJuOwogIHRyeXsKICAgIGlmKCFhYylhYz1uZXcgKHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpKCk7CiAgICBpZihhYy5zdGF0ZT09PSdzdXNwZW5kZWQnKWFjLnJlc3VtZSgpOwogICAgdmFyIG89YWMuY3JlYXRlT3NjaWxsYXRvcigpLGc9YWMuY3JlYXRlR2FpbigpLHM9YWMuY3VycmVudFRpbWUrKGRlbGF5fHwwKTsKICAgIG8udHlwZT10eXBlfHwnc3F1YXJlJztvLmZyZXF1ZW5jeS5zZXRWYWx1ZUF0VGltZShmMSxzKTtvLmZyZXF1ZW5jeS5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKGYyLHMrZHVyKTsKICAgIGcuZ2Fpbi5zZXRWYWx1ZUF0VGltZSh2b2x8fC4wNixzKTtnLmdhaW4uZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSguMDAwMSxzK2R1cik7CiAgICBvLmNvbm5lY3QoZyk7Zy5jb25uZWN0KGFjLmRlc3RpbmF0aW9uKTtvLnN0YXJ0KHMpO28uc3RvcChzK2R1cisuMDMpOwogIH1jYXRjaChlKXt9Cn0KdmFyIFNORD17CiAganVtcDpmdW5jdGlvbigpe3RvbmUoMjgwLDY0MCwuMTcsJ3NxdWFyZScsLjA0NSk7fSwKICBjb2luOmZ1bmN0aW9uKCl7dG9uZSg5ODgsOTg4LC4wNiwnc3F1YXJlJywuMDQpO3RvbmUoMTMxOSwxMzE5LC4xNCwnc3F1YXJlJywuMDQsLjA2KTt9LAogIGhpdDpmdW5jdGlvbigpe3RvbmUoMTgwLDQ1LC40LCdzYXd0b290aCcsLjExKTt9LAogIGNyYXRlOmZ1bmN0aW9uKCl7dG9uZSg1MjMsNTIzLC4wOCwndHJpYW5nbGUnLC4wOCk7dG9uZSg3ODQsNzg0LC4wOCwndHJpYW5nbGUnLC4wOCwuMDgpO3RvbmUoMTA0NywxMDQ3LC4xNiwndHJpYW5nbGUnLC4wOCwuMTYpO30sCiAgbW9vOmZ1bmN0aW9uKCl7dG9uZSgxNTAsMTA1LC41NSwnc2F3dG9vdGgnLC4wMzUpO30sCiAgaG9ybjpmdW5jdGlvbigpe3RvbmUoMzkyLDM5MiwuMjIsJ3Nhd3Rvb3RoJywuMDUpO3RvbmUoNDk0LDQ5NCwuMjIsJ3Nhd3Rvb3RoJywuMDQpO3RvbmUoMzkyLDM5MiwuMjUsJ3Nhd3Rvb3RoJywuMDUsLjMpO3RvbmUoNDk0LDQ5NCwuMjUsJ3Nhd3Rvb3RoJywuMDQsLjMpO30sCiAgZG9uZTpmdW5jdGlvbigpe1s1MjMsNjU5LDc4NCwxMDQ3LDc4NCwxMDQ3XS5mb3JFYWNoKGZ1bmN0aW9uKGYsaSl7dG9uZShmLGYsLjE0LCdzcXVhcmUnLC4wNSxpKi4xMSk7fSk7fSwKICBvdmVyOmZ1bmN0aW9uKCl7WzM5MiwzMzAsMjYyLDE5Nl0uZm9yRWFjaChmdW5jdGlvbihmLGkpe3RvbmUoZixmKi45NywuMjIsJ3RyaWFuZ2xlJywuMDgsaSouMTgpO30pO30KfTsKCi8qIC0tLS0tLS0tLS0gb3ZlcmxheXMgLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiBvdihuYW1lKXsKICByb290LnF1ZXJ5U2VsZWN0b3JBbGwoJy5iaHctb3YnKS5mb3JFYWNoKGZ1bmN0aW9uKGVsKXtlbC5jbGFzc0xpc3QudG9nZ2xlKCdiaHctaGlkZGVuJyxlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtb3YnKSE9PW5hbWUpO30pOwp9CmZ1bmN0aW9uIHEoc2VsKXtyZXR1cm4gcm9vdC5xdWVyeVNlbGVjdG9yKHNlbCk7fQpmdW5jdGlvbiB1cGRIaSgpe3EoJ1tkYXRhLWhpXScpLnRleHRDb250ZW50PWhpPjA\/KCdKb3V3IHJlY29yZDogJytoaSsnIHB1bnRlbicpOicnO30KdXBkSGkoKTsKCnJvb3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKGUpewogIHZhciBiPWUudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWFjdF0nKTtpZighYilyZXR1cm47CiAgdmFyIGE9Yi5nZXRBdHRyaWJ1dGUoJ2RhdGEtYWN0Jyk7CiAgaWYoYT09PSdzdGFydCcpe2UucHJldmVudERlZmF1bHQoKTtuZXdHYW1lKCk7fQogIGVsc2UgaWYoYT09PSdyZXRyeScpe3Njb3JlPWx2bFNjb3JlO2NvaW5zPWx2bENvaW5zO3BhbmVscz1NQVhQO3N0YXJ0TGV2ZWwoKTtTTkQuaG9ybigpO30KICBlbHNlIGlmKGE9PT0nbmV4dCcpe2xldmVsKys7cGFuZWxzPU1BWFA7c3RhcnRMZXZlbCgpO30KICBlbHNlIGlmKGE9PT0ncmVzdW1lJyl7cGF1c2VkPWZhbHNlO292KG51bGwpO211c2ljUGxheSgpO30KICBlbHNlIGlmKGE9PT0nbXV0ZScpe211dGVkPSFtdXRlZDtiLnRleHRDb250ZW50PW11dGVkPyfwn5SHJzon8J+Uiic7aWYobXV0ZWQpbXVzaWNQYXVzZSgpO2Vsc2UgaWYoc3RhdGUhPT0nbWVudScmJiFwYXVzZWQpbXVzaWNQbGF5KHN0YXRlPT09J2NyYXNoJz8uMTU6LjQpO30KICByb290LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOnRydWV9KTsKfSk7CgovKiAtLS0tLS0tLS0tIHNwZWx2ZXJsb29wIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gbmV3R2FtZSgpe2xldmVsPTA7c2NvcmU9MDtjb2lucz0wO3BhbmVscz1NQVhQO3N0YXJ0TGV2ZWwoKTtTTkQuaG9ybigpO30KZnVuY3Rpb24gc3RhcnRMZXZlbCgpewogIHZhciBrPUtMQU5URU5bbGV2ZWwlS0xBTlRFTi5sZW5ndGhdOwogIGN1cj17bmFhbTprWzBdLHBsYWF0czprWzFdfTsKICBsdmxTY29yZT1zY29yZTtsdmxDb2lucz1jb2luczsKICBsZXZlbExlbj00ODArbGV2ZWwqMTQwOwogIGJhc2VTcGVlZD0zNDArTWF0aC5taW4obGV2ZWwsOCkqMzg7c3BlZWQ9YmFzZVNwZWVkO2Rpc3Q9MDsKICBvYnM9W107aXRlbXM9W107aG91c2U9bnVsbDtzcGF3bkluPTEuMztzdGF0ZVQ9MDtzaG93bj1mYWxzZTsKICB2YW4ueT0wO3Zhbi52eT0wO3Zhbi5ncm91bmQ9dHJ1ZTt2YW4uaW52PTA7dmFuLmJ1Zj0wOwogIHN0YXRlPSdwbGF5JztwYXVzZWQ9ZmFsc2U7b3YobnVsbCk7bXVzaWNQbGF5KC40KTtlbmdhZ2VkPXRydWU7cm9vdC5mb2N1cyh7cHJldmVudFNjcm9sbDp0cnVlfSk7Cn0KZnVuY3Rpb24gcm5kKGEsYil7cmV0dXJuIGErTWF0aC5yYW5kb20oKSooYi1hKTt9CgpmdW5jdGlvbiBzcGF3bigpewogIHZhciB0eXBlcz1bJ2tlZ2VsJywna3VpbCcsJ2hvb2liYWFsJywna2VnZWwnXTsKICBpZihsZXZlbD49MSl0eXBlcy5wdXNoKCdrb2UnLCdrb2UnKTsKICBpZihsZXZlbD49Mil0eXBlcy5wdXNoKCdtZWV1dycsJ21lZXV3Jyk7CiAgaWYobGV2ZWw+PTMpdHlwZXMucHVzaCgnYWZ6ZXR0aW5nJyk7CiAgdmFyIHRwPXR5cGVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSp0eXBlcy5sZW5ndGgpXTsKICB2YXIgbz17dHlwZTp0cCx2eDowLGE6MCxhbHQ6MH07CiAgaWYodHA9PT0na2VnZWwnKXtvLnc9MzQ7by5oPTQ2O30KICBlbHNlIGlmKHRwPT09J2t1aWwnKXtvLnc9ODA7by5oPTg7fQogIGVsc2UgaWYodHA9PT0naG9vaWJhYWwnKXtvLnc9NTY7by5oPTU2O28udng9NzA7fQogIGVsc2UgaWYodHA9PT0na29lJyl7by53PTk2O28uaD02NjtvLnZ4PTIwO1NORC5tb28oKTt9CiAgZWxzZSBpZih0cD09PSdtZWV1dycpe28udz00ODtvLmg9MjY7by52eD0xNTA7by5hbHQ9cm5kKDE3OCwxOTYpO30KICBlbHNlIGlmKHRwPT09J2FmemV0dGluZycpe28udz04NjtvLmg9NTY7fQogIG8ueD0tby53LTIwOwogIG9icy5wdXNoKG8pOwogIC8vIG11bnRlbgogIHZhciByPU1hdGgucmFuZG9tKCk7CiAgaWYodHA9PT0nbWVldXcnKXsgZm9yKHZhciBpPTA7aTw0O2krKylpdGVtcy5wdXNoKHt0eXBlOidtdW50Jyx4Om8ueC0yMC1pKjQ2LHk6R1ktMzR9KTsgfQogIGVsc2UgaWYocjwuNDUpeyAvLyBib29nIG92ZXIgaGV0IG9ic3Rha2VsCiAgICB2YXIgY3g9by54K28udy8yOwogICAgZm9yKHZhciBqPS0yO2o8PTI7aisrKWl0ZW1zLnB1c2goe3R5cGU6J211bnQnLHg6Y3graio0OCx5OkdZLW8uaC00MC0oMi1NYXRoLmFicyhqKSkqMjh9KTsKICB9IGVsc2UgaWYocjwuNzUpewogICAgdmFyIG9mZj1vLngtcm5kKDIwMCwyNjApOwogICAgZm9yKHZhciBrMj0wO2syPDM7azIrKylpdGVtcy5wdXNoKHt0eXBlOidtdW50Jyx4Om9mZi1rMio0NCx5OkdZLTM0fSk7CiAgfQogIGlmKHBhbmVsczxNQVhQJiZNYXRoLnJhbmRvbSgpPC4xMiYmdHAhPT0nbWVldXcnKWl0ZW1zLnB1c2goe3R5cGU6J3Bha2tldCcseDpvLngtcm5kKDIzMCwzMDApLHk6R1ktMTUwfSk7Cn0KCmZ1bmN0aW9uIGp1bXBQcmVzcygpewogIGlmKHN0YXRlIT09J3BsYXknJiZzdGF0ZSE9PSdhcnJpdmUnKXJldHVybjsKICB2YW4uaG9sZD10cnVlO3Zhbi5idWY9LjEzOwp9CmZ1bmN0aW9uIGp1bXBSZWxlYXNlKCl7dmFuLmhvbGQ9ZmFsc2U7aWYodmFuLnZ5PjU2MCl2YW4udnk9NTYwO30KCmZ1bmN0aW9uIGhpdCgpewogIGlmKHZhbi5pbnY+MClyZXR1cm47CiAgcGFuZWxzLS07dmFuLmludj0xLjY7c2hha2U9LjQ7U05ELmhpdCgpOwogIHBhcnRzLnB1c2goe2s6J3BhbmVsJyx4OlZBTl9YK1ZXKi43LHk6R1ktdmFuLnktVkgtNix2eDpybmQoMTIwLDIyMCksdnk6LXJuZCgzODAsNDgwKSxyOjAsdnI6cm5kKDUsOSksbGlmZToxLjYsbWF4OjEuNn0pOwogIGZvcih2YXIgaT0wO2k8MTA7aSsrKXBhcnRzLnB1c2goe2s6J3NwYXJrJyx4OlZBTl9YKzMwLHk6R1ktdmFuLnktVkgvMix2eDpybmQoLTIwMCw2MCksdnk6cm5kKC0yNjAsNjApLGxpZmU6LjUsbWF4Oi41LGM6JyNmZmQ0MDAnfSk7CiAgaWYocGFuZWxzPD0wKXtzdGF0ZT0nY3Jhc2gnO3N0YXRlVD0wO30KfQoKZnVuY3Rpb24gb3ZlcigpewogIHZhciBzPU1hdGguZmxvb3Ioc2NvcmUpOwogIHZhciByZWM9ZmFsc2U7CiAgaWYocz5oaSl7aGk9cztyZWM9dHJ1ZTt0cnl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2Jod19oaScsaGkpO31jYXRjaChlKXt9fQogIHEoJ1tkYXRhLW92ZXItdHh0XScpLmlubmVySFRNTD0nSGV0IGhla3dlcmsgaXMgb25kZXJ3ZWcgZ2VzbmV1dmVsZC48YnI+QWZnZWxldmVyZDogPGI+JytsZXZlbCsnPC9iPiAnKyhsZXZlbD09PTE\/J2tsYW50Jzona2xhbnRlbicpKycgwrcgTXVudGVuOiA8Yj4nK2NvaW5zKyc8L2I+PGJyPlNjb3JlOiA8Yj4nK3MrJzwvYj4nKyhyZWM\/JyDigJQgbmlldXcgcmVjb3JkISc6JyDCtyBSZWNvcmQ6ICcraGkpOwogIHEoJ1tkYXRhLXJldHJ5LWJ0bl0nKS50ZXh0Q29udGVudD0nUml0ICcrKGxldmVsKzEpKycgb3BuaWV1dyc7CiAgdXBkSGkoKTtvdignb3ZlcicpO1NORC5vdmVyKCk7bXVzaWMudm9sdW1lPS4xNTsKfQoKZnVuY3Rpb24gZGVsaXZlcmVkKCl7CiAgdmFyIGJvbnVzPTEwMCtwYW5lbHMqMTAwK2xldmVsKjI1OwogIHNjb3JlKz1ib251czsKICBxKCdbZGF0YS1kb25lLXR4dF0nKS5pbm5lckhUTUw9JzxiPicrY3VyLm5hYW0rJzwvYj4gaW4gJytjdXIucGxhYXRzKycgaXMgYmxpaiBtZXQgaGV0IG5pZXV3ZSBoZWt3ZXJrLic7CiAgcSgnW2RhdGEtZG9uZS1zY29yZV0nKS5pbm5lckhUTUw9J0hlbGUgcGFuZWxlbjogPGI+JytwYW5lbHMrJy8nK01BWFArJzwvYj4gwrcgUml0Ym9udXM6IDxiPisnK2JvbnVzKyc8L2I+PGJyPk11bnRlbjogPGI+Jytjb2lucysnPC9iPiDCtyBTY29yZTogPGI+JytNYXRoLmZsb29yKHNjb3JlKSsnPC9iPic7CiAgb3YoJ2RvbmUnKTsKfQoKLyogLS0tLS0tLS0tLSB1cGRhdGUgLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiByZWN0SGl0KGF4LGF5LGF3LGFoLGJ4LGJ5LGJ3LGJoKXtyZXR1cm4gYXg8YngrYncmJmF4K2F3PmJ4JiZheTxieStiaCYmYXkrYWg+Ynk7fQoKZnVuY3Rpb24gdXBkYXRlKGR0KXsKICB0Kz1kdDtzdGF0ZVQrPWR0OwogIGlmKHN0YXRlPT09J21lbnUnKXtzcGVlZD05MDt9CiAgZWxzZSBpZihzdGF0ZT09PSdwbGF5Jyl7CiAgICBzcGVlZD1NYXRoLm1pbihiYXNlU3BlZWQrZGlzdCouMTYsYmFzZVNwZWVkKzE0MCk7CiAgICBkaXN0Kz1zcGVlZCpkdC8zMDtzY29yZSs9c3BlZWQqZHQvMzA7CiAgICBpZihkaXN0Pj1sZXZlbExlbil7ZGlzdD1sZXZlbExlbjtzdGF0ZT0nYXJyaXZlJztob3VzZT17eDotNDIwLHc6MzQwfTt9CiAgICBzcGF3bkluLT1kdDsKICAgIGlmKHNwYXduSW48PTAmJmRpc3Q8bGV2ZWxMZW4tMjUpewogICAgICBzcGF3bigpOwogICAgICB2YXIgZ2FwPU1hdGgubWF4KDM3MCwoNDcwK01hdGgucmFuZG9tKCkqNDgwKSooMS1NYXRoLm1pbihsZXZlbCw2KSouMDYpKTsKICAgICAgc3Bhd25Jbj1nYXAvc3BlZWQ7CiAgICB9CiAgfSBlbHNlIGlmKHN0YXRlPT09J2Fycml2ZScpewogICAgdmFyIHJlbT0oVkFOX1gtMjApLShob3VzZS54K2hvdXNlLncpOwogICAgc3BlZWQ9TWF0aC5taW4oc3BlZWQsTWF0aC5zcXJ0KE1hdGgubWF4KDAsMio2NTAqcmVtKSkpOwogICAgaWYocmVtPD0xfHxzcGVlZDw0KXtzcGVlZD0wO3N0YXRlPSdkZWxpdmVyJztzdGF0ZVQ9MDtTTkQuZG9uZSgpO30KICB9IGVsc2UgaWYoc3RhdGU9PT0nZGVsaXZlcicpewogICAgc3BlZWQ9MDsKICAgIGlmKHN0YXRlVD4yLjMmJiFzaG93bil7c2hvd249dHJ1ZTtkZWxpdmVyZWQoKTt9CiAgICBpZihNYXRoLnJhbmRvbSgpPC41JiZzdGF0ZVQ8MilwYXJ0cy5wdXNoKHtrOidjb25mJyx4OmhvdXNlLngrcm5kKDQwLDMwMCkseTpybmQoMTUwLDI1MCksdng6cm5kKC00MCw0MCksdnk6cm5kKC04MCwyMCkscjpybmQoMCw2KSx2cjpybmQoLTgsOCksbGlmZToyLG1heDoyLGM6WycjZmZlODFhJywnI2YzOTIwMCcsJyNlNjMzMmEnLCcjMmI5YmUwJywnIzQ3YjA0YiddW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo1KV19KTsKICB9IGVsc2UgaWYoc3RhdGU9PT0nY3Jhc2gnKXsKICAgIHNwZWVkPU1hdGgubWF4KDAsc3BlZWQtNjUwKmR0KTsKICAgIGlmKHN0YXRlVD4xLjMmJiFzaG93bil7c2hvd249dHJ1ZTtvdmVyKCk7fQogIH0KICBzY3JvbGwrPXNwZWVkKmR0OwogIGlmKGhvdXNlKWhvdXNlLngrPXNwZWVkKmR0OwoKICAvLyBidXMKICBpZih2YW4uYnVmPjApe3Zhbi5idWYtPWR0O2lmKHZhbi5ncm91bmQmJihzdGF0ZT09PSdwbGF5J3x8c3RhdGU9PT0nYXJyaXZlJykpe3Zhbi52eT05MDA7dmFuLmdyb3VuZD1mYWxzZTt2YW4uYnVmPTA7U05ELmp1bXAoKTtpZighdmFuLmhvbGQpdmFuLnZ5PTYyMDt9fQogIGlmKCF2YW4uZ3JvdW5kKXsKICAgIHZhbi52eS09MjIwMCpkdDt2YW4ueSs9dmFuLnZ5KmR0OwogICAgaWYodmFuLnk8PTApe3Zhbi55PTA7dmFuLnZ5PTA7dmFuLmdyb3VuZD10cnVlOwogICAgICBmb3IodmFyIHA9MDtwPDY7cCsrKXBhcnRzLnB1c2goe2s6J3B1ZmYnLHg6VkFOX1grcm5kKDMwLFZXLTMwKSx5OkdZLTQsdng6cm5kKC02MCw2MCkrc3BlZWQqLjUsdnk6cm5kKC00MCwtMTApLGxpZmU6LjQ1LG1heDouNDUsczpybmQoNiwxMCl9KTt9CiAgfQogIGlmKHZhbi5pbnY+MCl2YW4uaW52LT1kdDsKICBpZihzaGFrZT4wKXNoYWtlLT1kdDsKCiAgLy8gdWl0bGFhdAogIHB1ZmZULT1kdDsKICBpZihwdWZmVDw9MCYmc3RhdGUhPT0nY3Jhc2gnKXtwdWZmVD1zdGF0ZT09PSdtZW51Jz8uMTg6LjA3OwogICAgcGFydHMucHVzaCh7azoncHVmZicseDpWQU5fWCtWVy0xNCx5OkdZLXZhbi55LTIwLHZ4OnNwZWVkKi41NStybmQoMjAsNTApLHZ5OnJuZCgtMzAsLTEwKSxsaWZlOi42LG1heDouNixzOnJuZCg0LDcpfSk7fQoKICAvLyBvYnN0YWtlbHMKICB2YXIgYng9VkFOX1grMzAsYnc9VlctNTYsYnk9R1ktdmFuLnktVkgrMjAsYmg9VkgtMjY7CiAgZm9yKHZhciBpPW9icy5sZW5ndGgtMTtpPj0wO2ktLSl7CiAgICB2YXIgbz1vYnNbaV07CiAgICBvLngrPShzcGVlZCsoc3RhdGU9PT0nY3Jhc2gnPzA6by52eCkpKmR0OwogICAgaWYoby50eXBlPT09J2hvb2liYWFsJylvLmErPShzcGVlZCtvLnZ4KSpkdC8oby5oLzIpOwogICAgaWYoby54PlcrNjApe29icy5zcGxpY2UoaSwxKTtjb250aW51ZTt9CiAgICBpZihzdGF0ZSE9PSdwbGF5JyYmc3RhdGUhPT0nYXJyaXZlJyljb250aW51ZTsKICAgIHZhciBoaXRJdD1mYWxzZTsKICAgIGlmKG8udHlwZT09PSdrdWlsJyl7IGlmKHZhbi5ncm91bmQmJnZhbi55PDImJm8ueCsxODxieCtidy0yMCYmby54K28udy0xOD5ieCsyMCloaXRJdD10cnVlOyB9CiAgICBlbHNlIGlmKG8udHlwZT09PSdtZWV1dycpeyBpZihyZWN0SGl0KGJ4LGJ5LGJ3LGJoLG8ueCs2LEdZLW8uYWx0LTEwLG8udy0xMiwyMCkpaGl0SXQ9dHJ1ZTsgfQogICAgZWxzZXt2YXIgaW5zPShvLnR5cGU9PT0na29lJ3x8by50eXBlPT09J2FmemV0dGluZycpPzEwOjU7aWYocmVjdEhpdChieCxieSxidyxiaCxvLngraW5zLEdZLW8uaCs2LG8udy1pbnMqMixvLmgtNikpaGl0SXQ9dHJ1ZTt9CiAgICBpZihoaXRJdCloaXQoKTsKICB9CiAgLy8gaXRlbXMKICBmb3IodmFyIGo9aXRlbXMubGVuZ3RoLTE7aj49MDtqLS0pewogICAgdmFyIGl0PWl0ZW1zW2pdO2l0LngrPXNwZWVkKmR0OwogICAgaWYoaXQueD5XKzQwKXtpdGVtcy5zcGxpY2UoaiwxKTtjb250aW51ZTt9CiAgICBpZihzdGF0ZSE9PSdwbGF5JyYmc3RhdGUhPT0nYXJyaXZlJyljb250aW51ZTsKICAgIHZhciBzej1pdC50eXBlPT09J211bnQnPzEzOjIyOwogICAgaWYocmVjdEhpdChieC02LGJ5LTYsYncrMTIsYmgrMTIsaXQueC1zeixpdC55LXN6LHN6KjIsc3oqMikpewogICAgICBpdGVtcy5zcGxpY2UoaiwxKTsKICAgICAgaWYoaXQudHlwZT09PSdtdW50Jyl7Y29pbnMrKztzY29yZSs9MTA7U05ELmNvaW4oKTsKICAgICAgICBmb3IodmFyIGM9MDtjPDY7YysrKXBhcnRzLnB1c2goe2s6J3NwYXJrJyx4Oml0LngseTppdC55LHZ4OnJuZCgtMTIwLDEyMCksdnk6cm5kKC0xNjAsNDApLGxpZmU6LjQsbWF4Oi40LGM6JyNmZmQ0MDAnfSk7fQogICAgICBlbHNle3BhbmVscz1NYXRoLm1pbihNQVhQLHBhbmVscysxKTtzY29yZSs9NTA7U05ELmNyYXRlKCk7CiAgICAgICAgcGFydHMucHVzaCh7azondHh0Jyx4Oml0LngseTppdC55LHZ4OjAsdnk6LTYwLGxpZmU6MSxtYXg6MSx0eHQ6JysxIHBhbmVlbCd9KTt9CiAgICB9CiAgfQogIC8vIGRlZWx0amVzCiAgZm9yKHZhciBrPXBhcnRzLmxlbmd0aC0xO2s+PTA7ay0tKXsKICAgIHZhciBwcD1wYXJ0c1trXTtwcC5saWZlLT1kdDtpZihwcC5saWZlPD0wKXtwYXJ0cy5zcGxpY2UoaywxKTtjb250aW51ZTt9CiAgICBwcC54Kz1wcC52eCpkdDtwcC55Kz1wcC52eSpkdDsKICAgIGlmKHBwLms9PT0ncGFuZWwnfHxwcC5rPT09J3NwYXJrJylwcC52eSs9OTAwKmR0OwogICAgaWYocHAuaz09PSdjb25mJylwcC52eSs9MTIwKmR0OwogICAgaWYocHAuciE9PXVuZGVmaW5lZCYmcHAudnIpcHAucis9cHAudnIqZHQ7CiAgfQp9CgovKiAtLS0tLS0tLS0tIHRla2VuZW4gLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiB0aWxlKGZhY3RvcixzaXplKXtyZXR1cm4oKHNjcm9sbCpmYWN0b3IpJXNpemUrc2l6ZSklc2l6ZTt9CnZhciBjbG91ZHM9W1s4MCw3MCwxXSxbMzMwLDEyMCwuN10sWzU2MCw2MCwxLjJdLFs4MjAsMTEwLC44NV0sWzEwODAsODAsMV1dOwoKZnVuY3Rpb24gZHJhd0JHKCl7CiAgdmFyIGc9Y3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsMCwwLDM4MCk7Zy5hZGRDb2xvclN0b3AoMCwnIzVmYmNmMicpO2cuYWRkQ29sb3JTdG9wKDEsJyNkN2YwZmYnKTsKICBjdHguZmlsbFN0eWxlPWc7Y3R4LmZpbGxSZWN0KDAsMCxXLDQwMCk7CiAgLy8gem9uCiAgY3R4LmZpbGxTdHlsZT0nI2ZmZjNhNic7Y3R4LmJlZ2luUGF0aCgpO2N0eC5hcmMoMTIwLDk1LDQ2LDAsNyk7Y3R4LmZpbGwoKTsKICBjdHguZmlsbFN0eWxlPScjZmZlNTVjJztjdHguYmVnaW5QYXRoKCk7Y3R4LmFyYygxMjAsOTUsMzYsMCw3KTtjdHguZmlsbCgpOwogIC8vIHdvbGtlbgogIGN0eC5maWxsU3R5bGU9J3JnYmEoMjU1LDI1NSwyNTUsLjk1KSc7CiAgdmFyIGNvPXRpbGUoLjA2LDEyNjApOwogIGNsb3Vkcy5mb3JFYWNoKGZ1bmN0aW9uKGMpewogICAgdmFyIHg9KChjWzBdK2NvKSUxMjYwKS0xNTAseT1jWzFdLHM9Y1syXTsKICAgIGN0eC5iZWdpblBhdGgoKTtjdHguZWxsaXBzZSh4LHksNDYqcywyMCpzLDAsMCw3KTtjdHguZWxsaXBzZSh4KzM0KnMseS0xMipzLDM0KnMsMjQqcywwLDAsNyk7Y3R4LmVsbGlwc2UoeCs3MCpzLHksNDAqcywxOCpzLDAsMCw3KTtjdHguZmlsbCgpOwogIH0pOwogIC8vIHZlcnJlIGRpamsgLyBwb2xkZXIKICBjdHguZmlsbFN0eWxlPScjOGNjNjZhJztjdHguYmVnaW5QYXRoKCk7Y3R4Lm1vdmVUbygwLDQwMCk7CiAgZm9yKHZhciB4PTA7eDw9Vzt4Kz0xNiljdHgubGluZVRvKHgsMzE4K01hdGguc2luKCh4LXNjcm9sbCouMTgpLzE0MCkqMTApOwogIGN0eC5saW5lVG8oVyw0MDApO2N0eC5maWxsKCk7CiAgLy8gbW9sZW5zCiAgdmFyIG1vPXRpbGUoLjIyLDU2MCk7CiAgZm9yKHZhciBteD1tby01NjA7bXg8VysxMDA7bXgrPTU2MClkcmF3TWlsbChteCsxMjAsMzI2KTsKICAvLyBib21lbnJpagogIHZhciB0bz10aWxlKC40MiwxNTApOwogIGZvcih2YXIgdHg9dG8tMTUwO3R4PFcrMTUwO3R4Kz0xNTApewogICAgY3R4LmZpbGxTdHlsZT0nIzZiNGEyYic7Y3R4LmZpbGxSZWN0KHR4KzQ0LDMzMCw4LDMwKTsKICAgIGN0eC5maWxsU3R5bGU9JyMzZjhmM2EnO2N0eC5iZWdpblBhdGgoKTtjdHguYXJjKHR4KzQ4LDMyMiwyNCwwLDcpO2N0eC5hcmModHgrMzQsMzM0LDE2LDAsNyk7Y3R4LmFyYyh0eCs2MiwzMzQsMTYsMCw3KTtjdHguZmlsbCgpOwogIH0KICAvLyB3ZWlsYW5kCiAgY3R4LmZpbGxTdHlsZT0nIzc0Yjg0ZSc7Y3R4LmZpbGxSZWN0KDAsMzUyLFcsNjQpOwogIGN0eC5maWxsU3R5bGU9JyM1YWE4M2YnOwogIHZhciBnbz10aWxlKC43LDkwKTsKICBmb3IodmFyIGd4PWdvLTkwO2d4PFcrOTA7Z3grPTkwKXtjdHguZmlsbFJlY3QoZ3gsMzYwLDQwLDMpO2N0eC5maWxsUmVjdChneCs1MCwzODQsMzAsMyk7fQogIC8vIHNsb290CiAgY3R4LmZpbGxTdHlsZT0nIzRhYTNkOCc7Y3R4LmZpbGxSZWN0KDAsMzY4LFcsNSk7CiAgLy8gaHVpcyB2YW4gZGUga2xhbnQKICBpZihob3VzZSlkcmF3SG91c2UoKTsKICAvLyBoZWt3ZXJrIGxhbmdzIGRlIHdlZwogIGRyYXdSb2FkRmVuY2UoKTsKICAvLyBiZXJtCiAgY3R4LmZpbGxTdHlsZT0nIzVmOWU0MCc7Y3R4LmZpbGxSZWN0KDAsNDE0LFcsMTApOwogIC8vIHdlZwogIGN0eC5maWxsU3R5bGU9JyM0YTRkNTInO2N0eC5maWxsUmVjdCgwLDQyMixXLEgtNDIyKTsKICBjdHguZmlsbFN0eWxlPScjNTU1ODVlJztjdHguZmlsbFJlY3QoMCw0MjIsVyw0KTsKICBjdHguZmlsbFN0eWxlPScjZjJmMmYyJztjdHguZmlsbFJlY3QoMCw0MzAsVyw0KTsKICB2YXIgbG89dGlsZSgxLDEyMCk7CiAgZm9yKHZhciBseD1sby0xMjA7bHg8VysxMjA7bHgrPTEyMCljdHguZmlsbFJlY3QobHgsNTE2LDY0LDYpOwogIC8vIGFzZmFsdHZsZWtqZXMKICBjdHguZmlsbFN0eWxlPSdyZ2JhKDAsMCwwLC4xMiknOwogIHZhciBhbz10aWxlKDEsMjMwKTsKICBmb3IodmFyIGF4PWFvLTIzMDtheDxXKzIzMDtheCs9MjMwKXtjdHguZmlsbFJlY3QoYXgrMjAsNDUyLDI2LDMpO2N0eC5maWxsUmVjdChheCsxNDAsNDk0LDQwLDMpO2N0eC5maWxsUmVjdChheCs5MCw1MzAsMTgsMyk7fQp9CgpmdW5jdGlvbiBkcmF3TWlsbCh4LHkpewogIGN0eC5maWxsU3R5bGU9JyM1YTRiNDQnOwogIGN0eC5iZWdpblBhdGgoKTtjdHgubW92ZVRvKHgtMTQseSk7Y3R4LmxpbmVUbyh4LTgseS02Mik7Y3R4LmxpbmVUbyh4KzgseS02Mik7Y3R4LmxpbmVUbyh4KzE0LHkpO2N0eC5maWxsKCk7CiAgY3R4LmZpbGxTdHlsZT0nIzNiMzIyZSc7Y3R4LmJlZ2luUGF0aCgpO2N0eC5tb3ZlVG8oeC0xMSx5LTYwKTtjdHgubGluZVRvKHgseS03NCk7Y3R4LmxpbmVUbyh4KzExLHktNjApO2N0eC5maWxsKCk7CiAgY3R4LnNhdmUoKTtjdHgudHJhbnNsYXRlKHgseS02NCk7Y3R4LnJvdGF0ZSh0KjEuMSk7CiAgY3R4LnN0cm9rZVN0eWxlPScjZWZlNmQ4JztjdHgubGluZVdpZHRoPTM7CiAgZm9yKHZhciBpPTA7aTw0O2krKyl7Y3R4LnJvdGF0ZShNYXRoLlBJLzIpO2N0eC5iZWdpblBhdGgoKTtjdHgubW92ZVRvKDAsMCk7Y3R4LmxpbmVUbygwLC00NCk7Y3R4LnN0cm9rZSgpOwogICAgY3R4LmZpbGxTdHlsZT0ncmdiYSgyMzksMjMwLDIxNiwuNzUpJztjdHguZmlsbFJlY3QoMSwtNDQsOCwzMik7fQogIGN0eC5yZXN0b3JlKCk7CiAgY3R4LmZpbGxTdHlsZT0nIzIyMic7Y3R4LmJlZ2luUGF0aCgpO2N0eC5hcmMoeCx5LTY0LDMsMCw3KTtjdHguZmlsbCgpOwp9CgpmdW5jdGlvbiBmZW5jZVNlZyh4LHksdyxoLGNvbCxwb3N0Q29sKXsKICBjdHguZmlsbFN0eWxlPXBvc3RDb2w7Y3R4LmZpbGxSZWN0KHgseS00LDUsaCs4KTsKICBjdHguc3Ryb2tlU3R5bGU9Y29sO2N0eC5saW5lV2lkdGg9MjsKICBjdHguYmVnaW5QYXRoKCk7CiAgY3R4Lm1vdmVUbyh4KzUseSsyKTtjdHgubGluZVRvKHgrdyx5KzIpO2N0eC5tb3ZlVG8oeCs1LHkraC0yKTtjdHgubGluZVRvKHgrdyx5K2gtMik7CiAgZm9yKHZhciBieD14KzEyO2J4PHgrdztieCs9OSl7Y3R4Lm1vdmVUbyhieCx5KTtjdHgubGluZVRvKGJ4LHkraCk7fQogIGN0eC5zdHJva2UoKTsKfQpmdW5jdGlvbiBkcmF3Um9hZEZlbmNlKCl7CiAgdmFyIGZvPXRpbGUoLjkyLDk2KTsKICBmb3IodmFyIGZ4PWZvLTk2O2Z4PFcrOTY7ZngrPTk2KXsKICAgIGlmKGhvdXNlJiZmeCs5Nj5ob3VzZS54KzEwJiZmeDxob3VzZS54K2hvdXNlLnctMTApY29udGludWU7CiAgICBmZW5jZVNlZyhmeCwzODQsOTYsMzAsJyMyZjMzMzYnLCcjMjIyNjJhJyk7CiAgfQp9CgpmdW5jdGlvbiBkcmF3SG91c2UoKXsKICB2YXIgeD1ob3VzZS54LGJhc2U9NDE0OwogIC8vIHR1aW4KICBjdHguZmlsbFN0eWxlPScjODJjOTVhJztjdHguZmlsbFJlY3QoeCwzNzYsaG91c2Uudyw0MCk7CiAgLy8gaHVpcwogIGN0eC5maWxsU3R5bGU9JyNiODU1M2EnO2N0eC5maWxsUmVjdCh4KzYwLDI1MCwyMDAsMTQwKTsKICBjdHguc3Ryb2tlU3R5bGU9J3JnYmEoMCwwLDAsLjEyKSc7Y3R4LmxpbmVXaWR0aD0xO2N0eC5iZWdpblBhdGgoKTsKICBmb3IodmFyIGJ5PTI1ODtieTwzOTA7YnkrPTEwKXtjdHgubW92ZVRvKHgrNjAsYnkpO2N0eC5saW5lVG8oeCsyNjAsYnkpO31jdHguc3Ryb2tlKCk7CiAgY3R4LmZpbGxTdHlsZT0nIzJlMzIzNic7Y3R4LmJlZ2luUGF0aCgpO2N0eC5tb3ZlVG8oeCs0NCwyNTQpO2N0eC5saW5lVG8oeCsxNjAsMTcwKTtjdHgubGluZVRvKHgrMjc2LDI1NCk7Y3R4LmZpbGwoKTsKICBjdHguZmlsbFN0eWxlPScjZmZmJztjdHguZmlsbFJlY3QoeCs4MCwyNzgsNTIsNDIpO2N0eC5maWxsUmVjdCh4KzE4OCwyNzgsNTIsNDIpO2N0eC5maWxsUmVjdCh4KzEzNiwyMDAsNDgsMzQpOwogIGN0eC5maWxsU3R5bGU9JyM5YmQzZjAnO2N0eC5maWxsUmVjdCh4Kzg0LDI4MiwyMCwzNCk7Y3R4LmZpbGxSZWN0KHgrMTA4LDI4MiwyMCwzNCk7Y3R4LmZpbGxSZWN0KHgrMTkyLDI4MiwyMCwzNCk7Y3R4LmZpbGxSZWN0KHgrMjE2LDI4MiwyMCwzNCk7Y3R4LmZpbGxSZWN0KHgrMTQwLDIwNCw0MCwyNik7CiAgY3R4LmZpbGxTdHlsZT0nIzFmNWEzYSc7Y3R4LmZpbGxSZWN0KHgrMTQyLDMyMiwzNiw2OCk7CiAgY3R4LmZpbGxTdHlsZT0nI2ZmZDQwMCc7Y3R4LmJlZ2luUGF0aCgpO2N0eC5hcmMoeCsxNzIsMzU4LDMsMCw3KTtjdHguZmlsbCgpOwogIC8vIHBhZAogIGN0eC5maWxsU3R5bGU9JyNjOWMyYjUnO2N0eC5iZWdpblBhdGgoKTtjdHgubW92ZVRvKHgrMTQyLDM5MCk7Y3R4LmxpbmVUbyh4KzE3OCwzOTApO2N0eC5saW5lVG8oeCsxOTAsNDE2KTtjdHgubGluZVRvKHgrMTMwLDQxNik7Y3R4LmZpbGwoKTsKICAvLyBzdHJ1aWtqZXMKICBjdHguZmlsbFN0eWxlPScjM2Y4ZjNhJztbW3grNzAsMzg4XSxbeCsxMDAsMzkwXSxbeCsyMjIsMzg4XSxbeCsyNTAsMzkwXV0uZm9yRWFjaChmdW5jdGlvbihiKXtjdHguYmVnaW5QYXRoKCk7Y3R4LmFyYyhiWzBdLGJbMV0sMTMsMCw3KTtjdHguZmlsbCgpO30pOwogIC8vIGtsYW50IHp3YWFpdAogIHZhciBreD14KzMwMCxreT1iYXNlLTQsd2F2ZT1NYXRoLnNpbih0KjkpKi42OwogIGN0eC5zdHJva2VTdHlsZT0nIzFkMWQxYic7Y3R4LmxpbmVXaWR0aD00O2N0eC5saW5lQ2FwPSdyb3VuZCc7CiAgY3R4LmJlZ2luUGF0aCgpO2N0eC5tb3ZlVG8oa3gsa3kpO2N0eC5saW5lVG8oa3grNixreS0yMik7Y3R4LmxpbmVUbyhreCsxMixreSk7Y3R4LnN0cm9rZSgpOwogIGN0eC5maWxsU3R5bGU9JyMyYjliZTAnO2N0eC5maWxsUmVjdChreC0yLGt5LTUwLDE2LDMwKTsKICBjdHguYmVnaW5QYXRoKCk7Y3R4Lm1vdmVUbyhreCsxMixreS00Nik7Y3R4LmxpbmVUbyhreCsyNCtNYXRoLnNpbih3YXZlKSo2LGt5LTY2KTtjdHguc3Ryb2tlKCk7CiAgY3R4LmJlZ2luUGF0aCgpO2N0eC5tb3ZlVG8oa3gsa3ktNDYpO2N0eC5saW5lVG8oa3gtOCxreS0zMCk7Y3R4LnN0cm9rZSgpOwogIGN0eC5maWxsU3R5bGU9JyNmMmM5YTAnO2N0eC5iZWdpblBhdGgoKTtjdHguYXJjKGt4KzYsa3ktNTgsOSwwLDcpO2N0eC5maWxsKCk7CiAgY3R4LmxpbmVDYXA9J2J1dHQnOwogIC8vIG5hYW1ib3JkamUKICBjdHguZmlsbFN0eWxlPScjNmI0YTJiJztjdHguZmlsbFJlY3QoeCs4LDM1MCw1LDYwKTsKICBjdHguZmlsbFN0eWxlPScjZmZmJztjdHguc3Ryb2tlU3R5bGU9JyMxZDFkMWInO2N0eC5saW5lV2lkdGg9MjsKICBjdHguZm9udD0nYm9sZCAxMnB4IEFyaWFsJzt2YXIgdHc9Y3R4Lm1lYXN1cmVUZXh0KGN1ci5uYWFtKS53aWR0aCsxNDsKICBjdHguZmlsbFJlY3QoeC00LDMzMCx0dywyMik7Y3R4LnN0cm9rZVJlY3QoeC00LDMzMCx0dywyMik7CiAgY3R4LmZpbGxTdHlsZT0nIzFkMWQxYic7Y3R4LnRleHRBbGlnbj0nbGVmdCc7Y3R4LmZpbGxUZXh0KGN1ci5uYWFtLHgrMywzNDYpOwogIC8vIG5pZXV3IGhla3dlcmsgcGxhYXRzZW4KICBpZihzdGF0ZT09PSdkZWxpdmVyJ3x8c3RhdGU9PT0nbWVudScpewogICAgdmFyIG49TWF0aC5taW4oNCxNYXRoLmZsb29yKHN0YXRlVC8uNCkpOwogICAgZm9yKHZhciBpPTA7aTxuO2krKyl7CiAgICAgIHZhciBzeD14K2kqODU7CiAgICAgIGlmKGk9PT0xKWNvbnRpbnVlOyAvLyBvcGVuaW5nIGJpaiBoZXQgcGFkPyBuZWU6IHBvb3J0amUKICAgICAgZmVuY2VTZWcoc3gsMzg0LDg1LDMwLCcjMWYyMzI2JywnIzExMScpOwogICAgfQogICAgaWYobj4xKXsgLy8gcG9vcnRqZQogICAgICBjdHguc3Ryb2tlU3R5bGU9JyMxZjIzMjYnO2N0eC5saW5lV2lkdGg9MjtjdHguZmlsbFN0eWxlPScjMTExJztjdHguZmlsbFJlY3QoeCs4NSwzODAsNSwzOCk7Y3R4LmZpbGxSZWN0KHgrMTY1LDM4MCw1LDM4KTsKICAgICAgY3R4LmJlZ2luUGF0aCgpO2N0eC5tb3ZlVG8oeCs5MCwzODYpO2N0eC5saW5lVG8oeCsxMjAsMzg2KTtjdHgubW92ZVRvKHgrOTAsNDEwKTtjdHgubGluZVRvKHgrMTIwLDQxMCk7CiAgICAgIGZvcih2YXIgZ3g9eCs5NjtneDx4KzEyMjtneCs9OCl7Y3R4Lm1vdmVUbyhneCwzODYpO2N0eC5saW5lVG8oZ3gsNDEwKTt9Y3R4LnN0cm9rZSgpOwogICAgfQogICAgaWYoc3RhdGU9PT0nZGVsaXZlcicmJnN0YXRlVDwyLjImJm4+MCl7CiAgICAgIGN0eC5maWxsU3R5bGU9J3JnYmEoMjU1LDIzMiwyNiwnKyguNi0uMjUqTWF0aC5zaW4odCoxMCkpKycpJzsKICAgICAgY3R4LmZvbnQ9J2JvbGQgMThweCAiQXJpYWwgQmxhY2siLEFyaWFsJztjdHgudGV4dEFsaWduPSdjZW50ZXInOwogICAgICBvdXRsaW5lKCdIZWt3ZXJrIGdlcGxhYXRzdCEnLHgrMTcwLDIzMiwyMCwnI2ZmZTgxYScpOwogICAgfQogIH0KfQoKZnVuY3Rpb24gZHJhd09icyhvKXsKICB2YXIgeD1vLngsdz1vLncsaD1vLmg7CiAgaWYoby50eXBlPT09J2tlZ2VsJyl7CiAgICBjdHguZmlsbFN0eWxlPScjMzMzJztjdHguZmlsbFJlY3QoeC0zLEdZLTcsdys2LDcpOwogICAgY3R4LmZpbGxTdHlsZT0nI2ZmNmEwMCc7Y3R4LmJlZ2luUGF0aCgpO2N0eC5tb3ZlVG8oeCt3LzIsR1ktaCk7Y3R4LmxpbmVUbyh4KzQsR1ktNyk7Y3R4LmxpbmVUbyh4K3ctNCxHWS03KTtjdHguZmlsbCgpOwogICAgY3R4LmZpbGxTdHlsZT0nI2ZmZic7CiAgICBiYW5kKHgsdyxoLC4zNSwuNSk7YmFuZCh4LHcsaCwuNjUsLjc4KTsKICB9IGVsc2UgaWYoby50eXBlPT09J2t1aWwnKXsKICAgIGN0eC5maWxsU3R5bGU9JyMyYTJiMmUnO2N0eC5iZWdpblBhdGgoKTtjdHguZWxsaXBzZSh4K3cvMixHWS0xLHcvMiwxMCwwLDAsNyk7Y3R4LmZpbGwoKTsKICAgIGN0eC5maWxsU3R5bGU9JyMxYTFhMWMnO2N0eC5iZWdpblBhdGgoKTtjdHguZWxsaXBzZSh4K3cvMixHWSsxLHcvMi04LDYsMCwwLDcpO2N0eC5maWxsKCk7CiAgICBjdHguc3Ryb2tlU3R5bGU9JyMyYTJiMmUnO2N0eC5saW5lV2lkdGg9MjtjdHguYmVnaW5QYXRoKCk7Y3R4Lm1vdmVUbyh4LEdZKTtjdHgubGluZVRvKHgtMTIsR1krNik7Y3R4Lm1vdmVUbyh4K3csR1ktMik7Y3R4LmxpbmVUbyh4K3crMTQsR1ktNyk7Y3R4LnN0cm9rZSgpOwogICAgY3R4LmZpbGxTdHlsZT0nIzZiNmU3NCc7Y3R4LmZpbGxSZWN0KHgrdy8yLTIwLEdZLTUsNSwzKTtjdHguZmlsbFJlY3QoeCt3LzIrMTIsR1ktNiw0LDMpOwogIH0gZWxzZSBpZihvLnR5cGU9PT0naG9vaWJhYWwnKXsKICAgIHZhciByPWgvMixjeD14K3IsY3k9R1ktcjsKICAgIGN0eC5maWxsU3R5bGU9JyNlN2MxNGEnO2N0eC5iZWdpblBhdGgoKTtjdHguYXJjKGN4LGN5LHIsMCw3KTtjdHguZmlsbCgpOwogICAgY3R4LnN0cm9rZVN0eWxlPScjYjk4ZjIyJztjdHgubGluZVdpZHRoPTIuNTsKICAgIGZvcih2YXIgaT0wO2k8MztpKyspe2N0eC5iZWdpblBhdGgoKTtjdHguYXJjKGN4LGN5LHItNi1pKjcsby5hK2ksby5hK2krNC4yKTtjdHguc3Ryb2tlKCk7fQogICAgY3R4LnN0cm9rZVN0eWxlPScjZDhhOTJjJztjdHguYmVnaW5QYXRoKCk7Y3R4LmFyYyhjeCxjeSxyLTEsMCw3KTtjdHguc3Ryb2tlKCk7CiAgfSBlbHNlIGlmKG8udHlwZT09PSdrb2UnKXsKICAgIHZhciBzdz1NYXRoLnNpbih0KjkpKjU7CiAgICBjdHguZmlsbFN0eWxlPScjZmZmJztjdHguc3Ryb2tlU3R5bGU9JyMxZDFkMWInO2N0eC5saW5lV2lkdGg9MjsKICAgIC8vIHBvdGVuCiAgICBjdHguZmlsbFN0eWxlPScjZjRmNGY0JzsKICAgIFtbeCsxNCxzd10sW3grMjgsLXN3XSxbeCs2Mixzd10sW3grNzQsLXN3XV0uZm9yRWFjaChmdW5jdGlvbihsKXtjdHguc2F2ZSgpO2N0eC50cmFuc2xhdGUobFswXSs0LEdZLTI0KTtjdHgucm90YXRlKGxbMV0qLjA0KTtjdHguZmlsbFJlY3QoLTQsMCw4LDI0KTtjdHguc3Ryb2tlUmVjdCgtNCwwLDgsMjQpO2N0eC5maWxsU3R5bGU9JyMxZDFkMWInO2N0eC5maWxsUmVjdCgtNCwxOSw4LDUpO2N0eC5yZXN0b3JlKCk7Y3R4LmZpbGxTdHlsZT0nI2Y0ZjRmNCc7fSk7CiAgICAvLyBsaWpmCiAgICBjdHguZmlsbFN0eWxlPScjZmFmYWZhJztycih4KzQsR1ktaCsxMCx3LTE2LGgtMzIsMTIpO2N0eC5maWxsKCk7Y3R4LnN0cm9rZSgpOwogICAgY3R4LmZpbGxTdHlsZT0nIzFkMWQxYic7CiAgICBjdHguYmVnaW5QYXRoKCk7Y3R4LmVsbGlwc2UoeCsyNixHWS1oKzI0LDEyLDgsLjMsMCw3KTtjdHguZWxsaXBzZSh4KzU4LEdZLWgrMzAsMTAsOSwwLDAsNyk7Y3R4LmVsbGlwc2UoeCs0MCxHWS1oKzM4LDcsNSwwLDAsNyk7Y3R4LmZpbGwoKTsKICAgIC8vIHVpZXIKICAgIGN0eC5maWxsU3R5bGU9JyNmNWE5YjgnO2N0eC5iZWdpblBhdGgoKTtjdHguZWxsaXBzZSh4KzU0LEdZLTI0LDgsNSwwLDAsNyk7Y3R4LmZpbGwoKTsKICAgIC8vIHN0YWFydAogICAgY3R4LnN0cm9rZVN0eWxlPScjMWQxZDFiJztjdHguYmVnaW5QYXRoKCk7Y3R4Lm1vdmVUbyh4KzUsR1ktaCsxNik7Y3R4LnF1YWRyYXRpY0N1cnZlVG8oeC02LEdZLWgrMjgrc3cseC0yLEdZLTMwKTtjdHguc3Ryb2tlKCk7CiAgICAvLyBrb3AgKG5hYXIgZGUgYnVzIHRvZSkKICAgIGN0eC5maWxsU3R5bGU9JyNmYWZhZmEnO3JyKHgrdy0yMixHWS1oKzIsMjYsMjYsOCk7Y3R4LmZpbGwoKTtjdHguc3Ryb2tlKCk7CiAgICBjdHguZmlsbFN0eWxlPScjZjVhOWI4Jztycih4K3ctMTAsR1ktaCsxNiwxNiwxMiw1KTtjdHguZmlsbCgpOwogICAgY3R4LmZpbGxTdHlsZT0nIzFkMWQxYic7Y3R4LmJlZ2luUGF0aCgpO2N0eC5hcmMoeCt3LTEyLEdZLWgrMTEsMi41LDAsNyk7Y3R4LmZpbGwoKTsKICAgIGN0eC5maWxsU3R5bGU9JyNlOGRjYzAnO2N0eC5iZWdpblBhdGgoKTtjdHgubW92ZVRvKHgrdy0xOCxHWS1oKzMpO2N0eC5saW5lVG8oeCt3LTIyLEdZLWgtNik7Y3R4LmxpbmVUbyh4K3ctMTMsR1ktaCszKTtjdHguZmlsbCgpOwogICAgLy8gYmVsCiAgICBjdHguZmlsbFN0eWxlPScjZTBiMDAwJztjdHguYmVnaW5QYXRoKCk7Y3R4LmFyYyh4K3ctMTQsR1ktaCszMiw0LDAsNyk7Y3R4LmZpbGwoKTsKICB9IGVsc2UgaWYoby50eXBlPT09J21lZXV3Jyl7CiAgICB2YXIgY3kyPUdZLW8uYWx0LGN4Mj14K3cvMixmPU1hdGguc2luKHQqMTQpKjEwOwogICAgY3R4LmZpbGxTdHlsZT0ncmdiYSgwLDAsMCwuMTIpJztjdHguYmVnaW5QYXRoKCk7Y3R4LmVsbGlwc2UoY3gyLEdZLTIsMTgsNCwwLDAsNyk7Y3R4LmZpbGwoKTsKICAgIGN0eC5zdHJva2VTdHlsZT0nIzlhYTNhYic7Y3R4LmxpbmVXaWR0aD01O2N0eC5saW5lQ2FwPSdyb3VuZCc7CiAgICBjdHguYmVnaW5QYXRoKCk7Y3R4Lm1vdmVUbyhjeDItNCxjeTIpO2N0eC5xdWFkcmF0aWNDdXJ2ZVRvKGN4Mi0xNCxjeTItNi1mLGN4Mi0yNixjeTItZik7Y3R4Lm1vdmVUbyhjeDIrMixjeTIpO2N0eC5xdWFkcmF0aWNDdXJ2ZVRvKGN4MisxMCxjeTItOC1mLGN4MisyMCxjeTItMi1mKTtjdHguc3Ryb2tlKCk7CiAgICBjdHgubGluZUNhcD0nYnV0dCc7CiAgICBjdHguZmlsbFN0eWxlPScjZmZmJztjdHguYmVnaW5QYXRoKCk7Y3R4LmVsbGlwc2UoY3gyLGN5MiwxNSw3LDAsMCw3KTtjdHguZmlsbCgpOwogICAgY3R4LmJlZ2luUGF0aCgpO2N0eC5hcmMoY3gyKzEzLGN5Mi0zLDYsMCw3KTtjdHguZmlsbCgpOwogICAgY3R4LmZpbGxTdHlsZT0nI2ZmYjAwMCc7Y3R4LmJlZ2luUGF0aCgpO2N0eC5tb3ZlVG8oY3gyKzE4LGN5Mi00KTtjdHgubGluZVRvKGN4MisyNyxjeTItMik7Y3R4LmxpbmVUbyhjeDIrMTgsY3kyKTtjdHguZmlsbCgpOwogICAgY3R4LmZpbGxTdHlsZT0nIzFkMWQxYic7Y3R4LmJlZ2luUGF0aCgpO2N0eC5hcmMoY3gyKzE1LGN5Mi01LDEuNSwwLDcpO2N0eC5maWxsKCk7CiAgfSBlbHNlIGlmKG8udHlwZT09PSdhZnpldHRpbmcnKXsKICAgIGN0eC5maWxsU3R5bGU9JyM0NDQnO2N0eC5maWxsUmVjdCh4KzgsR1ktaCsxNiw2LGgtMTYpO2N0eC5maWxsUmVjdCh4K3ctMTQsR1ktaCsxNiw2LGgtMTYpOwogICAgY3R4LmZpbGxSZWN0KHgrMixHWS00LDE4LDQpO2N0eC5maWxsUmVjdCh4K3ctMjAsR1ktNCwxOCw0KTsKICAgIGN0eC5zYXZlKCk7Y3R4LmJlZ2luUGF0aCgpO2N0eC5yZWN0KHgsR1ktaCsxNCx3LDIwKTtjdHguY2xpcCgpOwogICAgY3R4LmZpbGxTdHlsZT0nI2ZmZic7Y3R4LmZpbGxSZWN0KHgsR1ktaCsxNCx3LDIwKTtjdHguZmlsbFN0eWxlPScjZTYzMzJhJzsKICAgIGZvcih2YXIgcz0tMjA7czx3KzIwO3MrPTIwKXtjdHguYmVnaW5QYXRoKCk7Y3R4Lm1vdmVUbyh4K3MsR1ktaCszNCk7Y3R4LmxpbmVUbyh4K3MrMTAsR1ktaCszNCk7Y3R4LmxpbmVUbyh4K3MrMjAsR1ktaCsxNCk7Y3R4LmxpbmVUbyh4K3MrMTAsR1ktaCsxNCk7Y3R4LmZpbGwoKTt9CiAgICBjdHgucmVzdG9yZSgpO2N0eC5zdHJva2VTdHlsZT0nIzFkMWQxYic7Y3R4LmxpbmVXaWR0aD0yO2N0eC5zdHJva2VSZWN0KHgsR1ktaCsxNCx3LDIwKTsKICAgIHZhciBvbj1NYXRoLmZsb29yKHQqNCklMj09PTA7CiAgICBjdHguZmlsbFN0eWxlPScjMzMzJztjdHguZmlsbFJlY3QoeCt3LzItMyxHWS1oKzYsNiw5KTsKICAgIGN0eC5maWxsU3R5bGU9b24\/JyNmZmQ0MDAnOicjOGE3YTEwJztjdHguYmVnaW5QYXRoKCk7Y3R4LmFyYyh4K3cvMixHWS1oKzQsNywwLDcpO2N0eC5maWxsKCk7CiAgICBpZihvbil7Y3R4LmZpbGxTdHlsZT0ncmdiYSgyNTUsMjEyLDAsLjI1KSc7Y3R4LmJlZ2luUGF0aCgpO2N0eC5hcmMoeCt3LzIsR1ktaCs0LDE2LDAsNyk7Y3R4LmZpbGwoKTt9CiAgfQp9CmZ1bmN0aW9uIGJhbmQoeCx3LGgsYSxiKXsKICB2YXIgeTE9R1ktNy0oaC03KSooMS1hKSx5Mj1HWS03LShoLTcpKigxLWIpOwogIGZ1bmN0aW9uIGhhbGYoeSl7cmV0dXJuICh3LzItNCkqKCh5LShHWS1oKSkvKGgtNykpO30KICBjdHguYmVnaW5QYXRoKCk7Y3R4Lm1vdmVUbyh4K3cvMi1oYWxmKHkxKSx5MSk7Y3R4LmxpbmVUbyh4K3cvMitoYWxmKHkxKSx5MSk7Y3R4LmxpbmVUbyh4K3cvMitoYWxmKHkyKSx5Mik7Y3R4LmxpbmVUbyh4K3cvMi1oYWxmKHkyKSx5Mik7Y3R4LmZpbGwoKTsKfQpmdW5jdGlvbiBycih4LHksdyxoLHIpe2N0eC5iZWdpblBhdGgoKTtjdHgubW92ZVRvKHgrcix5KTtjdHguYXJjVG8oeCt3LHkseCt3LHkraCxyKTtjdHguYXJjVG8oeCt3LHkraCx4LHkraCxyKTtjdHguYXJjVG8oeCx5K2gseCx5LHIpO2N0eC5hcmNUbyh4LHkseCt3LHkscik7Y3R4LmNsb3NlUGF0aCgpO30KCmZ1bmN0aW9uIGRyYXdJdGVtKGl0KXsKICB2YXIgYm9iPU1hdGguc2luKHQqNStpdC54Ki4wMykqMzsKICBpZihpdC50eXBlPT09J211bnQnKXsKICAgIHZhciBzeD1NYXRoLmFicyhNYXRoLmNvcyh0KjQraXQueCouMDIpKSouNzUrLjI1OwogICAgY3R4LnNhdmUoKTtjdHgudHJhbnNsYXRlKGl0LngsaXQueStib2IpO2N0eC5zY2FsZShzeCwxKTsKICAgIGN0eC5maWxsU3R5bGU9JyNlMGE4MDAnO2N0eC5iZWdpblBhdGgoKTtjdHguYXJjKDAsMCwxMywwLDcpO2N0eC5maWxsKCk7CiAgICBjdHguZmlsbFN0eWxlPScjZmZkNDAwJztjdHguYmVnaW5QYXRoKCk7Y3R4LmFyYygwLDAsMTAsMCw3KTtjdHguZmlsbCgpOwogICAgY3R4LmZpbGxTdHlsZT0nI2I3N2YwMCc7Y3R4LmZvbnQ9J2JvbGQgMTRweCBBcmlhbCc7Y3R4LnRleHRBbGlnbj0nY2VudGVyJztjdHgudGV4dEJhc2VsaW5lPSdtaWRkbGUnO2N0eC5maWxsVGV4dCgn4oKsJywwLDEpOwogICAgY3R4LnJlc3RvcmUoKTtjdHgudGV4dEJhc2VsaW5lPSdhbHBoYWJldGljJzsKICB9IGVsc2UgewogICAgY3R4LnNhdmUoKTtjdHgudHJhbnNsYXRlKGl0LngsaXQueStib2IpOwogICAgY3R4LmZpbGxTdHlsZT0ncmdiYSgyNTUsMjMyLDI2LC4zNSknO2N0eC5iZWdpblBhdGgoKTtjdHguYXJjKDAsMCwzMCwwLDcpO2N0eC5maWxsKCk7CiAgICBmZW5jZVNlZygtMjIsLTE0LDQ0LDI2LCcjMmYzMzM2JywnIzIyMjYyYScpOwogICAgY3R4LmZpbGxTdHlsZT0nI2YzOTIwMCc7Y3R4LmZpbGxSZWN0KC00LC0xNyw4LDMyKTsKICAgIGN0eC5yZXN0b3JlKCk7CiAgICBvdXRsaW5lKCcrMScsaXQueCsyMixpdC55K2JvYi0xNiwxNCwnI2ZmZicpOwogIH0KfQoKZnVuY3Rpb24gZHJhd1ZhbigpewogIHZhciBhaXI9dmFuLnk7CiAgLy8gc2NoYWR1dwogIHZhciBzcz1NYXRoLm1heCguMzUsMS1haXIvMjYwKTsKICBjdHguZmlsbFN0eWxlPSdyZ2JhKDAsMCwwLCcrKC4yOCpzcykrJyknO2N0eC5iZWdpblBhdGgoKTtjdHguZWxsaXBzZShWQU5fWCtWVy8yLEdZKzIsVlcqLjQ1KnNzLDkqc3MsMCwwLDcpO2N0eC5maWxsKCk7CiAgdmFyIGJvYj12YW4uZ3JvdW5kJiZzcGVlZD4wP01hdGguc2luKHQqMzApKjEuMTowOwogIGN0eC5zYXZlKCk7CiAgY3R4LnRyYW5zbGF0ZShWQU5fWCtWVy8yLEdZLWFpci1WSC8yKzQrYm9iKTsKICBpZighdmFuLmdyb3VuZCljdHgucm90YXRlKE1hdGgubWF4KC0uMSxNYXRoLm1pbiguMTIsdmFuLnZ5LzUwMDApKSk7CiAgaWYodmFuLmludj4wJiZNYXRoLmZsb29yKHQqMTQpJTIpY3R4Lmdsb2JhbEFscGhhPS40NTsKICAvLyBsYWRpbmcgb3AgaGV0IGltcGVyaWFhbAogIGZvcih2YXIgaT0wO2k8cGFuZWxzO2krKyl7CiAgICB2YXIgcHk9LVZILzIrNy1pKjY7CiAgICBjdHguZmlsbFN0eWxlPWklMj8nIzNhM2Y0NCc6JyMyYTJlMzInO2N0eC5maWxsUmVjdChWVyouMDIscHktNSxWVyouNCw1KTsKICAgIGN0eC5maWxsU3R5bGU9JyM1YjYxNjcnO2Zvcih2YXIgYj1WVyouMDQ7YjxWVyouNDI7Yis9NyljdHguZmlsbFJlY3QoYixweS01LDEuNSw1KTsKICB9CiAgaWYocGFuZWxzPjApe2N0eC5maWxsU3R5bGU9JyNmMzkyMDAnO2N0eC5maWxsUmVjdChWVyouMSwtVkgvMis4LXBhbmVscyo2LDQscGFuZWxzKjYpO2N0eC5maWxsUmVjdChWVyouMzMsLVZILzIrOC1wYW5lbHMqNiw0LHBhbmVscyo2KTt9CiAgaWYodmFuSW1nLmNvbXBsZXRlJiZ2YW5JbWcubmF0dXJhbFdpZHRoKWN0eC5kcmF3SW1hZ2UodmFuSW1nLC1WVy8yLC1WSC8yLFZXLFZIKTsKICBlbHNle2N0eC5maWxsU3R5bGU9JyNmZmYnO2N0eC5maWxsUmVjdCgtVlcvMiwtVkgvMixWVyxWSCk7fQogIGN0eC5yZXN0b3JlKCk7CiAgLy8gZmFydGxpam5lbgogIGlmKHNwZWVkPjMwMCYmc3RhdGUhPT0nZGVsaXZlcicpewogICAgY3R4LnN0cm9rZVN0eWxlPSdyZ2JhKDI1NSwyNTUsMjU1LC41NSknO2N0eC5saW5lV2lkdGg9MjsKICAgIGZvcih2YXIgcz0wO3M8MztzKyspe3ZhciBseT1HWS1haXItMzAtcyoyOCxseD1WQU5fWCtWVys4KygodCo2MDArcyo3MCklNjApO2N0eC5iZWdpblBhdGgoKTtjdHgubW92ZVRvKGx4LGx5KTtjdHgubGluZVRvKGx4KzI2K3MqNixseSk7Y3R4LnN0cm9rZSgpO30KICB9Cn0KCmZ1bmN0aW9uIGRyYXdQYXJ0cygpewogIHBhcnRzLmZvckVhY2goZnVuY3Rpb24ocCl7CiAgICB2YXIgYT1NYXRoLm1heCgwLHAubGlmZS9wLm1heCk7CiAgICBpZihwLms9PT0ncHVmZicpe2N0eC5maWxsU3R5bGU9J3JnYmEoMjAwLDIwMCwyMDUsJysoYSouNikrJyknO2N0eC5iZWdpblBhdGgoKTtjdHguYXJjKHAueCxwLnkscC5zKigxLjgtYSksMCw3KTtjdHguZmlsbCgpO30KICAgIGVsc2UgaWYocC5rPT09J3NwYXJrJyl7Y3R4LmZpbGxTdHlsZT1wLmM7Y3R4Lmdsb2JhbEFscGhhPWE7Y3R4LmZpbGxSZWN0KHAueC0yLHAueS0yLDQsNCk7Y3R4Lmdsb2JhbEFscGhhPTE7fQogICAgZWxzZSBpZihwLms9PT0nY29uZicpe2N0eC5zYXZlKCk7Y3R4LnRyYW5zbGF0ZShwLngscC55KTtjdHgucm90YXRlKHAucik7Y3R4Lmdsb2JhbEFscGhhPU1hdGgubWluKDEsYSoyKTtjdHguZmlsbFN0eWxlPXAuYztjdHguZmlsbFJlY3QoLTQsLTIsOCw0KTtjdHgucmVzdG9yZSgpO30KICAgIGVsc2UgaWYocC5rPT09J3BhbmVsJyl7Y3R4LnNhdmUoKTtjdHgudHJhbnNsYXRlKHAueCxwLnkpO2N0eC5yb3RhdGUocC5yKTtjdHguZ2xvYmFsQWxwaGE9TWF0aC5taW4oMSxhKjIpO2ZlbmNlU2VnKC0yNCwtMTAsNDgsMjAsJyMyZjMzMzYnLCcjMjIyNjJhJyk7Y3R4LnJlc3RvcmUoKTt9CiAgICBlbHNlIGlmKHAuaz09PSd0eHQnKXtjdHguZ2xvYmFsQWxwaGE9YTtvdXRsaW5lKHAudHh0LHAueCxwLnksMTYsJyNmZmU4MWEnKTtjdHguZ2xvYmFsQWxwaGE9MTt9CiAgfSk7Cn0KCmZ1bmN0aW9uIG91dGxpbmUoc3RyLHgseSxzaXplLGZpbGwpewogIGN0eC5mb250PSc5MDAgJytzaXplKydweCAiQXJpYWwgQmxhY2siLCJTZWdvZSBVSSBCbGFjayIsQXJpYWwsc2Fucy1zZXJpZic7Y3R4LnRleHRBbGlnbj1jdHgudGV4dEFsaWdufHwnY2VudGVyJzsKICBjdHgubGluZUpvaW49J3JvdW5kJztjdHgubGluZVdpZHRoPU1hdGgubWF4KDMsc2l6ZS80KTtjdHguc3Ryb2tlU3R5bGU9JyMxZDFkMWInO2N0eC5zdHJva2VUZXh0KHN0cix4LHkpOwogIGN0eC5maWxsU3R5bGU9ZmlsbDtjdHguZmlsbFRleHQoc3RyLHgseSk7Cn0KCmZ1bmN0aW9uIGRyYXdIVUQoKXsKICBpZihzdGF0ZT09PSdtZW51JylyZXR1cm47CiAgLy8gbGFkaW5nCiAgY3R4LnRleHRBbGlnbj0nbGVmdCc7b3V0bGluZSgnTEFESU5HJywxOCwzMCwxNCwnI2ZmZicpOwogIGZvcih2YXIgaT0wO2k8TUFYUDtpKyspewogICAgdmFyIHg9MTgraSo0Nix5PTQwOwogICAgY3R4LmZpbGxTdHlsZT0ncmdiYSgyNTUsMjU1LDI1NSwuODUpJztycih4LHksNDAsMzAsNik7Y3R4LmZpbGwoKTtjdHguc3Ryb2tlU3R5bGU9JyMxZDFkMWInO2N0eC5saW5lV2lkdGg9MjtjdHguc3Ryb2tlKCk7CiAgICBpZihpPHBhbmVscylmZW5jZVNlZyh4KzUseSs3LDMyLDE2LCcjMmYzMzM2JywnIzIyMjYyYScpOwogICAgZWxzZXtjdHguc3Ryb2tlU3R5bGU9JyNlNjMzMmEnO2N0eC5saW5lV2lkdGg9MztjdHguYmVnaW5QYXRoKCk7Y3R4Lm1vdmVUbyh4KzEwLHkrOCk7Y3R4LmxpbmVUbyh4KzMwLHkrMjIpO2N0eC5tb3ZlVG8oeCszMCx5KzgpO2N0eC5saW5lVG8oeCsxMCx5KzIyKTtjdHguc3Ryb2tlKCk7fQogIH0KICAvLyB2b29ydGdhbmcgKGJ1cyByaWpkdCBuYWFyIGxpbmtzLCBuYWFyIGhldCBodWlzKQogIHZhciBweD0zMDAscHc9MzYwLHB5PTU4OwogIGN0eC50ZXh0QWxpZ249J2NlbnRlcic7CiAgb3V0bGluZSgnUml0ICcrKGxldmVsKzEpKyc6ICcrY3VyLm5hYW0rJywgJytjdXIucGxhYXRzLHB4K3B3LzIsMjgsMTUsJyNmZmYnKTsKICBjdHguZmlsbFN0eWxlPSdyZ2JhKDI5LDI5LDI3LC43NSknO3JyKHB4LHB5LTYscHcsMTIsNik7Y3R4LmZpbGwoKTsKICB2YXIgZj1NYXRoLm1pbigxLGRpc3QvbGV2ZWxMZW4pOwogIGN0eC5maWxsU3R5bGU9JyNmZmU4MWEnO3JyKHB4K3B3LXB3KmYscHktNixwdypmLDEyLDYpO2N0eC5maWxsKCk7CiAgLy8gaHVpc2plCiAgY3R4LmZpbGxTdHlsZT0nI2I4NTUzYSc7Y3R4LmZpbGxSZWN0KHB4LTE0LHB5LTgsMjAsMTYpO2N0eC5maWxsU3R5bGU9JyMyZTMyMzYnO2N0eC5iZWdpblBhdGgoKTtjdHgubW92ZVRvKHB4LTE4LHB5LTcpO2N0eC5saW5lVG8ocHgtNCxweS0yMCk7Y3R4LmxpbmVUbyhweCsxMCxweS03KTtjdHguZmlsbCgpOwogIC8vIGJ1c2plCiAgdmFyIHZ4PXB4K3B3LXB3KmY7CiAgaWYodmFuSW1nLmNvbXBsZXRlJiZ2YW5JbWcubmF0dXJhbFdpZHRoKWN0eC5kcmF3SW1hZ2UodmFuSW1nLHZ4LTE3LHB5LTIyLDM4LDIyKTsKICB2YXIgbGVmdD1NYXRoLm1heCgwLE1hdGguY2VpbChsZXZlbExlbi1kaXN0KSk7CiAgb3V0bGluZShsZWZ0PjA\/KCdub2cgJytsZWZ0KycgbScpOidhYW5nZWtvbWVuIScscHgrcHcvMixweSsyOCwxMywnI2ZmZicpOwogIC8vIG11bnRlbiArIHNjb3JlCiAgY3R4LnRleHRBbGlnbj0ncmlnaHQnOwogIGN0eC5maWxsU3R5bGU9JyNlMGE4MDAnO2N0eC5iZWdpblBhdGgoKTtjdHguYXJjKFctMTA4LDMwLDEzLDAsNyk7Y3R4LmZpbGwoKTtjdHguZmlsbFN0eWxlPScjZmZkNDAwJztjdHguYmVnaW5QYXRoKCk7Y3R4LmFyYyhXLTEwOCwzMCwxMCwwLDcpO2N0eC5maWxsKCk7CiAgY3R4LmZpbGxTdHlsZT0nI2I3N2YwMCc7Y3R4LmZvbnQ9J2JvbGQgMTRweCBBcmlhbCc7Y3R4LnRleHRBbGlnbj0nY2VudGVyJztjdHguZmlsbFRleHQoJ+KCrCcsVy0xMDgsMzUpOwogIGN0eC50ZXh0QWxpZ249J2xlZnQnO291dGxpbmUoJycrY29pbnMsVy04OCwzOCwyNCwnI2ZmZTgxYScpOwogIGN0eC50ZXh0QWxpZ249J3JpZ2h0JztvdXRsaW5lKCdTQ09SRSAnK01hdGguZmxvb3Ioc2NvcmUpLFctMTgsNjgsMTUsJyNmZmYnKTsKICBjdHgudGV4dEFsaWduPSdjZW50ZXInOwp9CgpmdW5jdGlvbiBkcmF3TWVudVRpdGxlKCl7fQoKZnVuY3Rpb24gcmVuZGVyKCl7CiAgY3R4LnNldFRyYW5zZm9ybShkcHIsMCwwLGRwciwwLDApOwogIGlmKHNoYWtlPjApe2N0eC50cmFuc2xhdGUocm5kKC01LDUpKnNoYWtlKjIscm5kKC00LDQpKnNoYWtlKjIpO30KICBkcmF3QkcoKTsKICBpdGVtcy5mb3JFYWNoKGRyYXdJdGVtKTsKICBvYnMuZm9yRWFjaChmdW5jdGlvbihvKXtpZihvLnR5cGU9PT0na3VpbCcpZHJhd09icyhvKTt9KTsKICBkcmF3VmFuKCk7CiAgb2JzLmZvckVhY2goZnVuY3Rpb24obyl7aWYoby50eXBlIT09J2t1aWwnKWRyYXdPYnMobyk7fSk7CiAgZHJhd1BhcnRzKCk7CiAgY3R4LnRleHRBbGlnbj0nY2VudGVyJzsKICBkcmF3SFVEKCk7Cn0KCi8qIC0tLS0tLS0tLS0gaW52b2VyIC0tLS0tLS0tLS0gKi8KZnVuY3Rpb24gaXNKdW1wS2V5KGUpe3JldHVybiBlLmNvZGU9PT0nU3BhY2UnfHxlLmNvZGU9PT0nQXJyb3dVcCd8fGUuY29kZT09PSdLZXlXJzt9CmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLGZ1bmN0aW9uKGUpewogIGlmKCFlbmdhZ2VkKXJldHVybjsKICBpZihpc0p1bXBLZXkoZSkpewogICAgaWYoc3RhdGU9PT0ncGxheSd8fHN0YXRlPT09J2Fycml2ZScpe2UucHJldmVudERlZmF1bHQoKTtpZighZS5yZXBlYXQmJiFwYXVzZWQpanVtcFByZXNzKCk7fQogIH0gZWxzZSBpZihlLmNvZGU9PT0nS2V5UCd8fGUuY29kZT09PSdFc2NhcGUnKXsKICAgIGlmKChzdGF0ZT09PSdwbGF5J3x8c3RhdGU9PT0nYXJyaXZlJykpe3BhdXNlZD0hcGF1c2VkO292KHBhdXNlZD8ncGF1c2UnOm51bGwpO2lmKHBhdXNlZCltdXNpY1BhdXNlKCk7ZWxzZSBtdXNpY1BsYXkoKTt9CiAgfQp9KTsKZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLGZ1bmN0aW9uKGUpe2lmKGlzSnVtcEtleShlKSlqdW1wUmVsZWFzZSgpO30pOwpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsZnVuY3Rpb24oZSl7ZW5nYWdlZD1yb290LmNvbnRhaW5zKGUudGFyZ2V0KTt9LHRydWUpOwpjdi5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2lmKCFwYXVzZWQpanVtcFByZXNzKCk7fSk7CmN2LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsanVtcFJlbGVhc2UpOwpjdi5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyY2FuY2VsJyxqdW1wUmVsZWFzZSk7CmN2LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJsZWF2ZScsanVtcFJlbGVhc2UpOwoKZnVuY3Rpb24gYXV0b1BhdXNlKCl7aWYoZG9jdW1lbnQuaGlkZGVuKW11c2ljUGF1c2UoKTtpZigoc3RhdGU9PT0ncGxheSd8fHN0YXRlPT09J2Fycml2ZScpJiYhcGF1c2VkKXtwYXVzZWQ9dHJ1ZTtvdigncGF1c2UnKTttdXNpY1BhdXNlKCk7fX0KZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsZnVuY3Rpb24oKXtpZihkb2N1bWVudC5oaWRkZW4pYXV0b1BhdXNlKCk7fSk7CmlmKCdJbnRlcnNlY3Rpb25PYnNlcnZlcicgaW4gd2luZG93KXsKICBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZW4pe2VuLmZvckVhY2goZnVuY3Rpb24oeCl7aWYoIXguaXNJbnRlcnNlY3RpbmcpYXV0b1BhdXNlKCk7fSk7fSx7dGhyZXNob2xkOi4zfSkub2JzZXJ2ZShyb290KTsKfQoKLyogLS0tLS0tLS0tLSBsdXMgLS0tLS0tLS0tLSAqLwovLyBkZW1vLWh1aXMgb3AgaGV0IHN0YXJ0c2NoZXJtCmhvdXNlPW51bGw7CnZhciBsYXN0PXBlcmZvcm1hbmNlLm5vdygpOwpmdW5jdGlvbiBsb29wKG5vdyl7CiAgdmFyIGR0PU1hdGgubWluKC4wMzMsKG5vdy1sYXN0KS8xMDAwKTtsYXN0PW5vdzsKICBpZighcGF1c2VkKXVwZGF0ZShkdCk7CiAgcmVuZGVyKCk7CiAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGxvb3ApOwp9CnJlcXVlc3RBbmltYXRpb25GcmFtZShsb29wKTsKfSkoKTsK'))))<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Stap in de bus van Budget Hekwerk en breng het hekwerk heel bij de klant. Hoe ver kom jij?<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2233","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Bezorgrace: het Budget Hekwerk spel - Blog Budget Hekwerk<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.budgethekwerk.nl\/blog\/bezorgrace\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bezorgrace: het Budget Hekwerk spel - Blog Budget Hekwerk\" \/>\n<meta property=\"og:description\" content=\"Stap in de bus van Budget Hekwerk en breng het hekwerk heel bij de klant. Hoe ver kom jij?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.budgethekwerk.nl\/blog\/bezorgrace\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Budget Hekwerk\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.budgethekwerk.nl\\\/blog\\\/bezorgrace\\\/\",\"url\":\"https:\\\/\\\/www.budgethekwerk.nl\\\/blog\\\/bezorgrace\\\/\",\"name\":\"Bezorgrace: het Budget Hekwerk spel - Blog Budget Hekwerk\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.budgethekwerk.nl\\\/blog\\\/#website\"},\"datePublished\":\"2026-11-13T15:31:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.budgethekwerk.nl\\\/blog\\\/bezorgrace\\\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.budgethekwerk.nl\\\/blog\\\/bezorgrace\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.budgethekwerk.nl\\\/blog\\\/bezorgrace\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.budgethekwerk.nl\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Bezorgrace: het Budget Hekwerk spel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.budgethekwerk.nl\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.budgethekwerk.nl\\\/blog\\\/\",\"name\":\"Blog Budget Hekwerk\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.budgethekwerk.nl\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.budgethekwerk.nl\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.budgethekwerk.nl\\\/blog\\\/#organization\",\"name\":\"Blog Budget Hekwerk\",\"url\":\"https:\\\/\\\/www.budgethekwerk.nl\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/www.budgethekwerk.nl\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.budgethekwerk.nl\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/cropped-budget-hekwerk-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.budgethekwerk.nl\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/cropped-budget-hekwerk-logo.png\",\"width\":417,\"height\":250,\"caption\":\"Blog Budget Hekwerk\"},\"image\":{\"@id\":\"https:\\\/\\\/www.budgethekwerk.nl\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Bezorgrace: het Budget Hekwerk spel - Blog Budget Hekwerk","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.budgethekwerk.nl\/blog\/bezorgrace\/","og_locale":"nl_NL","og_type":"article","og_title":"Bezorgrace: het Budget Hekwerk spel - Blog Budget Hekwerk","og_description":"Stap in de bus van Budget Hekwerk en breng het hekwerk heel bij de klant. Hoe ver kom jij?","og_url":"https:\/\/www.budgethekwerk.nl\/blog\/bezorgrace\/","og_site_name":"Blog Budget Hekwerk","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.budgethekwerk.nl\/blog\/bezorgrace\/","url":"https:\/\/www.budgethekwerk.nl\/blog\/bezorgrace\/","name":"Bezorgrace: het Budget Hekwerk spel - Blog Budget Hekwerk","isPartOf":{"@id":"https:\/\/www.budgethekwerk.nl\/blog\/#website"},"datePublished":"2026-11-13T15:31:42+00:00","breadcrumb":{"@id":"https:\/\/www.budgethekwerk.nl\/blog\/bezorgrace\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.budgethekwerk.nl\/blog\/bezorgrace\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.budgethekwerk.nl\/blog\/bezorgrace\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.budgethekwerk.nl\/blog\/"},{"@type":"ListItem","position":2,"name":"Bezorgrace: het Budget Hekwerk spel"}]},{"@type":"WebSite","@id":"https:\/\/www.budgethekwerk.nl\/blog\/#website","url":"https:\/\/www.budgethekwerk.nl\/blog\/","name":"Blog Budget Hekwerk","description":"","publisher":{"@id":"https:\/\/www.budgethekwerk.nl\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.budgethekwerk.nl\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/www.budgethekwerk.nl\/blog\/#organization","name":"Blog Budget Hekwerk","url":"https:\/\/www.budgethekwerk.nl\/blog\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/www.budgethekwerk.nl\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.budgethekwerk.nl\/blog\/wp-content\/uploads\/2025\/11\/cropped-budget-hekwerk-logo.png","contentUrl":"https:\/\/www.budgethekwerk.nl\/blog\/wp-content\/uploads\/2025\/11\/cropped-budget-hekwerk-logo.png","width":417,"height":250,"caption":"Blog Budget Hekwerk"},"image":{"@id":"https:\/\/www.budgethekwerk.nl\/blog\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.budgethekwerk.nl\/blog\/wp-json\/wp\/v2\/pages\/2233","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.budgethekwerk.nl\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.budgethekwerk.nl\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.budgethekwerk.nl\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.budgethekwerk.nl\/blog\/wp-json\/wp\/v2\/comments?post=2233"}],"version-history":[{"count":1,"href":"https:\/\/www.budgethekwerk.nl\/blog\/wp-json\/wp\/v2\/pages\/2233\/revisions"}],"predecessor-version":[{"id":2271,"href":"https:\/\/www.budgethekwerk.nl\/blog\/wp-json\/wp\/v2\/pages\/2233\/revisions\/2271"}],"wp:attachment":[{"href":"https:\/\/www.budgethekwerk.nl\/blog\/wp-json\/wp\/v2\/media?parent=2233"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}