@curless/hotel-storefront 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +63 -0
  2. package/dist/__tests__/card-contract.test.d.ts +2 -0
  3. package/dist/__tests__/card-contract.test.d.ts.map +1 -0
  4. package/dist/__tests__/card-contract.test.js +64 -0
  5. package/dist/__tests__/card-contract.test.js.map +1 -0
  6. package/dist/__tests__/data.test.d.ts +2 -0
  7. package/dist/__tests__/data.test.d.ts.map +1 -0
  8. package/dist/__tests__/data.test.js +89 -0
  9. package/dist/__tests__/data.test.js.map +1 -0
  10. package/dist/__tests__/dates.test.d.ts +2 -0
  11. package/dist/__tests__/dates.test.d.ts.map +1 -0
  12. package/dist/__tests__/dates.test.js +71 -0
  13. package/dist/__tests__/dates.test.js.map +1 -0
  14. package/dist/__tests__/demo-hotels.test.d.ts +2 -0
  15. package/dist/__tests__/demo-hotels.test.d.ts.map +1 -0
  16. package/dist/__tests__/demo-hotels.test.js +240 -0
  17. package/dist/__tests__/demo-hotels.test.js.map +1 -0
  18. package/dist/__tests__/server.test.d.ts +2 -0
  19. package/dist/__tests__/server.test.d.ts.map +1 -0
  20. package/dist/__tests__/server.test.js +209 -0
  21. package/dist/__tests__/server.test.js.map +1 -0
  22. package/dist/__tests__/tool-descriptions.test.d.ts +2 -0
  23. package/dist/__tests__/tool-descriptions.test.d.ts.map +1 -0
  24. package/dist/__tests__/tool-descriptions.test.js +139 -0
  25. package/dist/__tests__/tool-descriptions.test.js.map +1 -0
  26. package/dist/__tests__/tools.test.d.ts +2 -0
  27. package/dist/__tests__/tools.test.d.ts.map +1 -0
  28. package/dist/__tests__/tools.test.js +226 -0
  29. package/dist/__tests__/tools.test.js.map +1 -0
  30. package/dist/backend.d.ts +43 -0
  31. package/dist/backend.d.ts.map +1 -0
  32. package/dist/backend.js +2 -0
  33. package/dist/backend.js.map +1 -0
  34. package/dist/card.generated.d.ts +4 -0
  35. package/dist/card.generated.d.ts.map +1 -0
  36. package/dist/card.generated.js +8 -0
  37. package/dist/card.generated.js.map +1 -0
  38. package/dist/config.d.ts +122 -0
  39. package/dist/config.d.ts.map +1 -0
  40. package/dist/config.js +42 -0
  41. package/dist/config.js.map +1 -0
  42. package/dist/data.d.ts +5 -0
  43. package/dist/data.d.ts.map +1 -0
  44. package/dist/data.js +183 -0
  45. package/dist/data.js.map +1 -0
  46. package/dist/dates.d.ts +32 -0
  47. package/dist/dates.d.ts.map +1 -0
  48. package/dist/dates.js +75 -0
  49. package/dist/dates.js.map +1 -0
  50. package/dist/demo-hotels.d.ts +96 -0
  51. package/dist/demo-hotels.d.ts.map +1 -0
  52. package/dist/demo-hotels.js +446 -0
  53. package/dist/demo-hotels.js.map +1 -0
  54. package/dist/fence.d.ts +24 -0
  55. package/dist/fence.d.ts.map +1 -0
  56. package/dist/fence.js +0 -0
  57. package/dist/fence.js.map +1 -0
  58. package/dist/index.d.ts +3 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +23 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/legal.d.ts +5 -0
  63. package/dist/legal.d.ts.map +1 -0
  64. package/dist/legal.js +111 -0
  65. package/dist/legal.js.map +1 -0
  66. package/dist/money.d.ts +13 -0
  67. package/dist/money.d.ts.map +1 -0
  68. package/dist/money.js +46 -0
  69. package/dist/money.js.map +1 -0
  70. package/dist/server.d.ts +85 -0
  71. package/dist/server.d.ts.map +1 -0
  72. package/dist/server.js +275 -0
  73. package/dist/server.js.map +1 -0
  74. package/dist/surface.d.ts +52 -0
  75. package/dist/surface.d.ts.map +1 -0
  76. package/dist/surface.js +99 -0
  77. package/dist/surface.js.map +1 -0
  78. package/dist/tools.d.ts +336 -0
  79. package/dist/tools.d.ts.map +1 -0
  80. package/dist/tools.js +862 -0
  81. package/dist/tools.js.map +1 -0
  82. package/dist/trip-ids.d.ts +16 -0
  83. package/dist/trip-ids.d.ts.map +1 -0
  84. package/dist/trip-ids.js +77 -0
  85. package/dist/trip-ids.js.map +1 -0
  86. package/dist/trip.d.ts +59 -0
  87. package/dist/trip.d.ts.map +1 -0
  88. package/dist/trip.js +149 -0
  89. package/dist/trip.js.map +1 -0
  90. package/dist/types.d.ts +193 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/types.js +13 -0
  93. package/dist/types.js.map +1 -0
  94. package/dist/vocab.d.ts +33 -0
  95. package/dist/vocab.d.ts.map +1 -0
  96. package/dist/vocab.js +15 -0
  97. package/dist/vocab.js.map +1 -0
  98. package/package.json +44 -0
@@ -0,0 +1,8 @@
1
+ // GENERATED by packages/sdks/hotel-storefront/widget (`npm run build`). Do not edit by hand.
2
+ // The hotel booking MCP App card - a single self-contained HTML (Vite +
3
+ // vite-plugin-singlefile, with the MCP Apps SDK bundled), base64-embedded so it
4
+ // is bundler-safe. Regenerate after changing the widget UI.
5
+ export const HOTEL_CARD_HTML = Buffer.from('PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04IiAvPgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIiAvPgogICAgPHRpdGxlPkhvdGVsczwvdGl0bGU+CiAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSIgY3Jvc3NvcmlnaW4+Y29uc3QgQWY9KGZ1bmN0aW9uKCl7Y29uc3QgdD10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIikucmVsTGlzdDtyZXR1cm4gdCYmdC5zdXBwb3J0cyYmdC5zdXBwb3J0cygibW9kdWxlcHJlbG9hZCIpPyJtb2R1bGVwcmVsb2FkIjoicHJlbG9hZCJ9KSgpLE5mPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVUkwoZSx0KS5ocmVmfSxjYz17fSxqZj1mdW5jdGlvbih0LG4sbyl7bGV0IHI9UHJvbWlzZS5yZXNvbHZlKCk7aWYobiYmbi5sZW5ndGg+MCl7bGV0IGk9ZnVuY3Rpb24obCl7cmV0dXJuIFByb21pc2UuYWxsKGwubWFwKGg9PlByb21pc2UucmVzb2x2ZShoKS50aGVuKGc9Pih7c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOmd9KSxnPT4oe3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjpnfSkpKSl9O2NvbnN0IGE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKSx1PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIm1ldGFbcHJvcGVydHk9Y3NwLW5vbmNlXSIpLGM9dT8ubm9uY2V8fHU/LmdldEF0dHJpYnV0ZSgibm9uY2UiKTtyPWkobi5tYXAobD0+e2lmKGw9TmYobCxvKSxsIGluIGNjKXJldHVybjtjY1tsXT0hMDtjb25zdCBoPWwuZW5kc1dpdGgoIi5jc3MiKSxnPWg/J1tyZWw9InN0eWxlc2hlZXQiXSc6IiI7aWYoISFvKWZvcihsZXQgaz1hLmxlbmd0aC0xO2s+PTA7ay0tKXtjb25zdCAkPWFba107aWYoJC5ocmVmPT09bCYmKCFofHwkLnJlbD09PSJzdHlsZXNoZWV0IikpcmV0dXJufWVsc2UgaWYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgbGlua1tocmVmPSIke2x9Il0ke2d9YCkpcmV0dXJuO2NvbnN0IGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpO2lmKGIucmVsPWg/InN0eWxlc2hlZXQiOkFmLGh8fChiLmFzPSJzY3JpcHQiKSxiLmNyb3NzT3JpZ2luPSIiLGIuaHJlZj1sLGMmJmIuc2V0QXR0cmlidXRlKCJub25jZSIsYyksZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChiKSxoKXJldHVybiBuZXcgUHJvbWlzZSgoaywkKT0+e2IuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsayksYi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PiQobmV3IEVycm9yKGBVbmFibGUgdG8gcHJlbG9hZCBDU1MgZm9yICR7bH1gKSkpfSl9KSl9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPW5ldyBFdmVudCgidml0ZTpwcmVsb2FkRXJyb3IiLHtjYW5jZWxhYmxlOiEwfSk7aWYoYS5wYXlsb2FkPWksd2luZG93LmRpc3BhdGNoRXZlbnQoYSksIWEuZGVmYXVsdFByZXZlbnRlZCl0aHJvdyBpfXJldHVybiByLnRoZW4oaT0+e2Zvcihjb25zdCBhIG9mIGl8fFtdKWEuc3RhdHVzPT09InJlamVjdGVkIiYmcyhhLnJlYXNvbik7cmV0dXJuIHQoKS5jYXRjaChzKX0pfTtmdW5jdGlvbiBNZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBEZihlKXtyZXR1cm4gZX1mdW5jdGlvbiBYbigpe3JldHVybiBlPT5lfWZ1bmN0aW9uIHFmKGUpe31mdW5jdGlvbiBMZihlKXt0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgdmFsdWUgaW4gZXhoYXVzdGl2ZSBjaGVjayIpfWZ1bmN0aW9uIFVmKGUpe31mdW5jdGlvbiB4cihlKXtjb25zdCB0PU9iamVjdC52YWx1ZXMoZSkuZmlsdGVyKG89PnR5cGVvZiBvPT0ibnVtYmVyIik7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGUpLmZpbHRlcigoW28scl0pPT50LmluZGV4T2YoK28pPT09LTEpLm1hcCgoW28scl0pPT5yKX1mdW5jdGlvbiBJcihlLHQ9InwiKXtyZXR1cm4gZS5tYXAobj0+SnIobikpLmpvaW4odCl9ZnVuY3Rpb24gRm4oZSx0KXtyZXR1cm4gdHlwZW9mIHQ9PSJiaWdpbnQiP3QudG9TdHJpbmcoKTp0fWNsYXNzIEhme2NvbnN0cnVjdG9yKHQpe3RoaXMuX2dldHRlcj10LHRoaXMuX3ZhbHVlPXZvaWQgMH1nZXQgdmFsdWUoKXtjb25zdCB0PXRoaXMuX2dldHRlcjtyZXR1cm4gdCE9PXZvaWQgMCYmKHRoaXMuX3ZhbHVlPXQoKSx0aGlzLl9nZXR0ZXI9dm9pZCAwKSx0aGlzLl92YWx1ZX19ZnVuY3Rpb24gSXQoZSl7cmV0dXJuIG5ldyBIZihlKX1mdW5jdGlvbiBCcihlKXtyZXR1cm4gZT09bnVsbH1mdW5jdGlvbiBQZShlKXtjb25zdCB0PWUuc3RhcnRzV2l0aCgiXiIpPzE6MCxuPWUuZW5kc1dpdGgoIiQiKT9lLmxlbmd0aC0xOmUubGVuZ3RoO3JldHVybiBlLnNsaWNlKHQsbil9ZnVuY3Rpb24gSmMoZSx0KXtjb25zdCBuPWUvdCxvPU1hdGgucm91bmQobikscj00Kk51bWJlci5FUFNJTE9OKk1hdGgubWF4KE1hdGguYWJzKG4pLDEpO3JldHVybiBNYXRoLmFicyhuLW8pPHI/MDpuLW99Y29uc3QgdWM9U3ltYm9sKCJldmFsdWF0aW5nIik7ZnVuY3Rpb24gS2MoZSx0LG4pe2xldCBvO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2lmKG8hPT11YylyZXR1cm4gbz09PXZvaWQgMCYmKG89dWMsbz1uKCkpLG99LHNldChyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyfSl9LGNvbmZpZ3VyYWJsZTohMH0pfWZ1bmN0aW9uIEZmKGUpe3JldHVybiBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSl9ZnVuY3Rpb24gVWUoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOm4sd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBlbyhlKXtjb25zdCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwic2hhcGUiKTtyZXR1cm4gdD8uZ2V0P3QuZ2V0LnJhdzp0Py52YWx1ZX1mdW5jdGlvbiB5ZShlKXtyZXR1cm4gZW8oZS5fem9kLmRlZik/P2UuX3pvZC5kZWYuc2hhcGV9ZnVuY3Rpb24gV2MoZSx0LG4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2dldCgpe2NvbnN0IG89bigpO3JldHVybiBVZSh0aGlzLHQsbyksb30sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX1mdW5jdGlvbiBHYyhlLHQsbil7dCBpbiBlP1VlKGUsdCxuKTplW3RdPW59ZnVuY3Rpb24gTmUoZSx0LG4sbyl7Y29uc3Qgcj15ZSh0KTtmb3IoY29uc3QgcyBvZiBuKXtjb25zdCBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocixzKTtpLmVudW1lcmFibGUmJihpLmdldD9XYyhlLHMsKCk9Pntjb25zdCBhPXQuX3pvZC5kZWYuc2hhcGVbc107cmV0dXJuIG8/byhhLHMpOmF9KTpHYyhlLHMsbz9vKGkudmFsdWUscyk6aS52YWx1ZSkpfX1mdW5jdGlvbiBCZihlLHQpe2Zvcihjb25zdCBuIG9mIFJlZmxlY3Qub3duS2V5cyh0KSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5lbnVtZXJhYmxlJiYoby5nZXQ/V2MoZSxuLCgpPT50W25dKTpHYyhlLG4sby52YWx1ZSkpfX1mdW5jdGlvbiBZKC4uLmUpe2NvbnN0IHQ9e307Zm9yKGNvbnN0IG4gb2YgZSl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhuKTtPYmplY3QuYXNzaWduKHQsbyl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHt9LHQpfWZ1bmN0aW9uIFZmKGUpe3JldHVybiBZKGUuX3pvZC5kZWYpfWZ1bmN0aW9uIEpmKGUsdCl7cmV0dXJuIHQ/dC5yZWR1Y2UoKG4sbyk9Pm4/LltvXSxlKTplfWZ1bmN0aW9uIEtmKGUpe2NvbnN0IHQ9T2JqZWN0LmtleXMoZSksbj10Lm1hcChvPT5lW29dKTtyZXR1cm4gUHJvbWlzZS5hbGwobikudGhlbihvPT57Y29uc3Qgcj17fTtmb3IobGV0IHM9MDtzPHQubGVuZ3RoO3MrKylyW3Rbc11dPW9bc107cmV0dXJuIHJ9KX1mdW5jdGlvbiBXZihlPTEwKXtjb25zdCB0PSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7bGV0IG49IiI7Zm9yKGxldCBvPTA7bzxlO28rKyluKz10W01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSp0Lmxlbmd0aCldO3JldHVybiBufWZ1bmN0aW9uIFFjKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKX1mdW5jdGlvbiBZYyhlKXtyZXR1cm4gZS50b0xvd2VyQ2FzZSgpLnRyaW0oKS5yZXBsYWNlKC9bXlx3XHMtXS9nLCIiKS5yZXBsYWNlKC9bXHNfLV0rL2csIi0iKS5yZXBsYWNlKC9eLSt8LSskL2csIiIpfWNvbnN0IFZyPSJjYXB0dXJlU3RhY2tUcmFjZSJpbiBFcnJvcj9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZTooLi4uZSk9Pnt9O2Z1bmN0aW9uIEplKGUpe3JldHVybiB0eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsJiYhQXJyYXkuaXNBcnJheShlKX1jb25zdCBYYz1JdCgoKT0+e2lmKGVlLmppdGxlc3N8fHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3I/LnVzZXJBZ2VudD8uaW5jbHVkZXMoIkNsb3VkZmxhcmUiKSlyZXR1cm4hMTt0cnl7Y29uc3QgZT1GdW5jdGlvbjtyZXR1cm4gbmV3IGUoIiIpLCEwfWNhdGNoe3JldHVybiExfX0pO2Z1bmN0aW9uIEllKGUpe2lmKEplKGUpPT09ITEpcmV0dXJuITE7Y29uc3QgdD1lLmNvbnN0cnVjdG9yO2lmKHQ9PT12b2lkIDB8fHR5cGVvZiB0IT0iZnVuY3Rpb24iKXJldHVybiEwO2NvbnN0IG49dC5wcm90b3R5cGU7cmV0dXJuIShKZShuKT09PSExfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobiwiaXNQcm90b3R5cGVPZiIpPT09ITEpfWZ1bmN0aW9uIHRvKGUpe3JldHVybiBJZShlKT97Li4uZX06QXJyYXkuaXNBcnJheShlKT9bLi4uZV06ZSBpbnN0YW5jZW9mIE1hcD9uZXcgTWFwKGUpOmUgaW5zdGFuY2VvZiBTZXQ/bmV3IFNldChlKTplfWZ1bmN0aW9uIEdmKGUpe2xldCB0PTA7Zm9yKGNvbnN0IG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmdCsrO3JldHVybiB0fWNvbnN0IFFmPWU9Pntjb25zdCB0PXR5cGVvZiBlO3N3aXRjaCh0KXtjYXNlInVuZGVmaW5lZCI6cmV0dXJuInVuZGVmaW5lZCI7Y2FzZSJzdHJpbmciOnJldHVybiJzdHJpbmciO2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2UiYm9vbGVhbiI6cmV0dXJuImJvb2xlYW4iO2Nhc2UiZnVuY3Rpb24iOnJldHVybiJmdW5jdGlvbiI7Y2FzZSJiaWdpbnQiOnJldHVybiJiaWdpbnQiO2Nhc2Uic3ltYm9sIjpyZXR1cm4ic3ltYm9sIjtjYXNlIm9iamVjdCI6cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5IjplPT09bnVsbD8ibnVsbCI6ZS50aGVuJiZ0eXBlb2YgZS50aGVuPT0iZnVuY3Rpb24iJiZlLmNhdGNoJiZ0eXBlb2YgZS5jYXRjaD09ImZ1bmN0aW9uIj8icHJvbWlzZSI6dHlwZW9mIE1hcDwidSImJmUgaW5zdGFuY2VvZiBNYXA/Im1hcCI6dHlwZW9mIFNldDwidSImJmUgaW5zdGFuY2VvZiBTZXQ/InNldCI6dHlwZW9mIERhdGU8InUiJiZlIGluc3RhbmNlb2YgRGF0ZT8iZGF0ZSI6dHlwZW9mIEZpbGU8InUiJiZlIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6Im9iamVjdCI7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGF0YSB0eXBlOiAke3R9YCl9fSxCbj1uZXcgU2V0KFsic3RyaW5nIiwibnVtYmVyIiwic3ltYm9sIl0pLGV1PW5ldyBTZXQoWyJzdHJpbmciLCJudW1iZXIiLCJiaWdpbnQiLCJib29sZWFuIiwic3ltYm9sIiwidW5kZWZpbmVkIl0pO2Z1bmN0aW9uIHdlKGUpe3JldHVybiBlLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXVxcXS9nLCJcXCQmIil9ZnVuY3Rpb24gVShlLHQsbil7Y29uc3Qgbz1uZXcgZS5fem9kLmNvbnN0cih0Pz9lLl96b2QuZGVmKTtyZXR1cm4oIXR8fG4/LnBhcmVudCkmJihvLl96b2QucGFyZW50PWUpLG99ZnVuY3Rpb24gdihlKXtjb25zdCB0PWU7aWYoIXQpcmV0dXJue307aWYodHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybntlcnJvcjooKT0+dH07aWYodD8ubWVzc2FnZSE9PXZvaWQgMCl7aWYodD8uZXJyb3IhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgc3BlY2lmeSBib3RoIGBtZXNzYWdlYCBhbmQgYGVycm9yYCBwYXJhbXMiKTt0LmVycm9yPXQubWVzc2FnZX1yZXR1cm4gZGVsZXRlIHQubWVzc2FnZSx0eXBlb2YgdC5lcnJvcj09InN0cmluZyI/ey4uLnQsZXJyb3I6KCk9PnQuZXJyb3J9OnR9ZnVuY3Rpb24gWWYoZSl7bGV0IHQ7cmV0dXJuIG5ldyBQcm94eSh7fSx7Z2V0KG4sbyxyKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmdldCh0LG8scil9LHNldChuLG8scixzKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LnNldCh0LG8scixzKX0saGFzKG4sbyl7cmV0dXJuIHQ/Pyh0PWUoKSksUmVmbGVjdC5oYXModCxvKX0sZGVsZXRlUHJvcGVydHkobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHQsbyl9LG93bktleXMobil7cmV0dXJuIHQ/Pyh0PWUoKSksUmVmbGVjdC5vd25LZXlzKHQpfSxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixvKXtyZXR1cm4gdD8/KHQ9ZSgpKSxSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LG8pfSxkZWZpbmVQcm9wZXJ0eShuLG8scil7cmV0dXJuIHQ/Pyh0PWUoKSksUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0LG8scil9fSl9ZnVuY3Rpb24gSnIoZSl7cmV0dXJuIHR5cGVvZiBlPT0iYmlnaW50Ij9lLnRvU3RyaW5nKCkrIm4iOnR5cGVvZiBlPT0ic3RyaW5nIj9gIiR7ZX0iYDpgJHtlfWB9ZnVuY3Rpb24gdHUoZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLmZpbHRlcih0PT5lW3RdLl96b2Qub3B0aW4hPT12b2lkIDAmJmVbdF0uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKX1jb25zdCBudT17c2FmZWludDpbTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJdLGludDMyOlstMjE0NzQ4MzY0OCwyMTQ3NDgzNjQ3XSx1aW50MzI6WzAsNDI5NDk2NzI5NV0sZmxvYXQzMjpbLTM0MDI4MjM0NjYzODUyODg2ZTIyLDM0MDI4MjM0NjYzODUyODg2ZTIyXSxmbG9hdDY0OlstTnVtYmVyLk1BWF9WQUxVRSxOdW1iZXIuTUFYX1ZBTFVFXX0sb3U9e2ludDY0OltCaWdJbnQoIi05MjIzMzcyMDM2ODU0Nzc1ODA4IiksQmlnSW50KCI5MjIzMzcyMDM2ODU0Nzc1ODA3IildLHVpbnQ2NDpbQmlnSW50KDApLEJpZ0ludCgiMTg0NDY3NDQwNzM3MDk1NTE2MTUiKV19O2Z1bmN0aW9uIHJ1KGUsdCl7Y29uc3Qgbj1lLl96b2QuZGVmLG89bi5jaGVja3M7aWYobyYmby5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoIi5waWNrKCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cyIpO2NvbnN0IHM9e307cmV0dXJuIE5lKHMsZSxubyhlLHQpKSxVKGUsWShuLHtzaGFwZTpzLGNoZWNrczpbXX0pKX1mdW5jdGlvbiBubyhlLHQpe2NvbnN0IG49eWUoZSksbz1bXTtmb3IoY29uc3QgciBvZiBSZWZsZWN0Lm93bktleXModCkpe2lmKCFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4scik/LmVudW1lcmFibGUpdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiAiJHtTdHJpbmcocil9ImApO3Rbcl0mJm8ucHVzaChyKX1yZXR1cm4gb31mdW5jdGlvbiBzdShlLHQpe2NvbnN0IG49ZS5fem9kLmRlZixvPW4uY2hlY2tzO2lmKG8mJm8ubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMiKTtjb25zdCBzPW5ldyBTZXQobm8oZSx0KSksaT17fTtyZXR1cm4gTmUoaSxlLFJlZmxlY3Qub3duS2V5cyh5ZShlKSkuZmlsdGVyKGE9PiFzLmhhcyhhKSkpLFUoZSxZKG4se3NoYXBlOmksY2hlY2tzOltdfSkpfWZ1bmN0aW9uIGl1KGUsdCl7aWYoIUllKHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBpbnB1dCB0byBleHRlbmQ6IGV4cGVjdGVkIGEgcGxhaW4gb2JqZWN0Iik7Y29uc3Qgbj1lLl96b2QuZGVmLmNoZWNrcztpZihuJiZuLmxlbmd0aD4wKXtjb25zdCByPXllKGUpO2Zvcihjb25zdCBzIG9mIFJlZmxlY3Qub3duS2V5cyh0KSlpZihPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIscykhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgb3ZlcndyaXRlIGtleXMgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cy4gVXNlIGAuc2FmZUV4dGVuZCgpYCBpbnN0ZWFkLiIpfXJldHVybiBVKGUsWShlLl96b2QuZGVmLHtzaGFwZTphdShlLHQpfSkpfWZ1bmN0aW9uIGF1KGUsdCl7Y29uc3Qgbj17fTtyZXR1cm4gTmUobixlLFJlZmxlY3Qub3duS2V5cyh5ZShlKSkpLEJmKG4sdCksbn1mdW5jdGlvbiBjdShlLHQpe2lmKCFJZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaW5wdXQgdG8gc2FmZUV4dGVuZDogZXhwZWN0ZWQgYSBwbGFpbiBvYmplY3QiKTtyZXR1cm4gVShlLFkoZS5fem9kLmRlZix7c2hhcGU6YXUoZSx0KX0pKX1mdW5jdGlvbiB1dShlLHQpe2lmKCF0Py5fem9kPy5kZWYpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGlucHV0IHRvIG1lcmdlOiBleHBlY3RlZCBhbiBvYmplY3Qgc2NoZW1hLiBUbyBtZXJnZSBhIHBsYWluIHNoYXBlLCB1c2UgYC5leHRlbmQoKWAuIik7aWYoZS5fem9kLmRlZi5jaGVja3M/Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuIik7Y29uc3Qgbj17fTtOZShuLGUsUmVmbGVjdC5vd25LZXlzKHllKGUpKSksTmUobix0LFJlZmxlY3Qub3duS2V5cyh5ZSh0KSkpO2NvbnN0IG89WShlLl96b2QuZGVmLHtzaGFwZTpuLGdldCBjYXRjaGFsbCgpe3JldHVybiB0Ll96b2QuZGVmLmNhdGNoYWxsfSxjaGVja3M6dC5fem9kLmRlZi5jaGVja3M/P1tdfSk7cmV0dXJuIFUoZSxvKX1mdW5jdGlvbiBFcihlLHQsbixvPSJwYXJ0aWFsIil7Y29uc3Qgcz10Ll96b2QuZGVmLmNoZWNrcztpZihzJiZzLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcihgLiR7b30oKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzYCk7Y29uc3QgYT1uP25ldyBTZXQobm8odCxuKSk6dm9pZCAwLHU9e307cmV0dXJuIE5lKHUsdCxSZWZsZWN0Lm93bktleXMoeWUodCkpLGUmJigoYyxsKT0+YSYmIWEuaGFzKGwpP2M6bmV3IGUoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6Y30pKSksVSh0LFkodC5fem9kLmRlZix7c2hhcGU6dSxjaGVja3M6W119KSl9ZnVuY3Rpb24gbHUoZSx0LG4pe2NvbnN0IG89bj9uZXcgU2V0KG5vKHQsbikpOnZvaWQgMCxyPXt9O3JldHVybiBOZShyLHQsUmVmbGVjdC5vd25LZXlzKHllKHQpKSwocyxpKT0+byYmIW8uaGFzKGkpP3M6bmV3IGUoe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6c30pKSxVKHQsWSh0Ll96b2QuZGVmLHtzaGFwZTpyfSkpfWZ1bmN0aW9uIG5lKGUsdD0wKXtpZihlLmFib3J0ZWQ9PT0hMClyZXR1cm4hMDtmb3IobGV0IG49dDtuPGUuaXNzdWVzLmxlbmd0aDtuKyspaWYoZS5pc3N1ZXNbbl0/LmNvbnRpbnVlIT09ITApcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZHUoZSx0PTApe2lmKGUuYWJvcnRlZD09PSEwKXJldHVybiEwO2ZvcihsZXQgbj10O248ZS5pc3N1ZXMubGVuZ3RoO24rKylpZihlLmlzc3Vlc1tuXT8uY29udGludWU9PT0hMSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB1ZShlLHQpe3JldHVybiB0Lm1hcChuPT57dmFyIG87cmV0dXJuKG89bikucGF0aD8/KG8ucGF0aD1bXSksbi5wYXRoLnVuc2hpZnQoZSksbn0pfWZ1bmN0aW9uIEJlKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyI/ZTplPy5tZXNzYWdlfWZ1bmN0aW9uIFJyKGUsdCxuKXt2YXIgbztmb3IobGV0IHI9dDtyPGUubGVuZ3RoO3IrKykobz1lW3JdKS5zY2hlbWE/PyhvLnNjaGVtYT1uKX1mdW5jdGlvbiBwZShlLHQsbil7dmFyIG87Y29uc3Qgcj1lLmluc3Q/Ll96b2Q/LnRyYWl0cztyPy5oYXMoIiRab2RUeXBlIikmJihyLmhhcygiJFpvZENoZWNrIik/KG89ZSkuc2NoZW1hPz8oby5zY2hlbWE9ZS5pbnN0KTplLnNjaGVtYT1lLmluc3QpO2NvbnN0IHM9ZS5zY2hlbWEhPT1lLmluc3Q/ZS5zY2hlbWE/Ll96b2QuZGVmPy5lcnJvcjp2b2lkIDAsaT1lLm1lc3NhZ2U/ZS5tZXNzYWdlOkJlKGUuaW5zdD8uX3pvZC5kZWY/LmVycm9yPy4oZSkpPz9CZShzPy4oZSkpPz9CZSh0Py5lcnJvcj8uKGUpKT8/QmUobi5jdXN0b21FcnJvcj8uKGUpKT8/QmUobi5sb2NhbGVFcnJvcj8uKGUpKT8/IkludmFsaWQgaW5wdXQiLGE9e307Zm9yKGNvbnN0IHUgb2YgT2JqZWN0LmtleXMoZSkpdT09PSJpbnN0Inx8dT09PSJzY2hlbWEifHx1PT09ImNvbnRpbnVlInx8dT09PSJpbnB1dCJ8fHU9PT0iX19wcm90b19fInx8KGFbdV09ZVt1XSk7cmV0dXJuIGEucGF0aD8/KGEucGF0aD1bXSksYS5tZXNzYWdlPWksdD8ucmVwb3J0SW5wdXQmJihhLmlucHV0PWUuaW5wdXQpLGF9ZnVuY3Rpb24gb28oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBTZXQ/InNldCI6ZSBpbnN0YW5jZW9mIE1hcD8ibWFwIjplIGluc3RhbmNlb2YgRmlsZT8iZmlsZSI6InVua25vd24ifWNvbnN0IFhmPS9bXHVEODAwLVx1REJGRl0vO2Z1bmN0aW9uIHJvKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoIVhmLnRlc3QoZSkpcmV0dXJuIHQ7bGV0IG49dDtmb3IobGV0IG89MDtvPHQtMTtvKyspKGUuY2hhckNvZGVBdChvKSY2NDUxMik9PT01NTI5NiYmKGUuY2hhckNvZGVBdChvKzEpJjY0NTEyKT09PTU2MzIwJiYobi0tLG8rKyk7cmV0dXJuIG59ZnVuY3Rpb24gc28oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ImFycmF5Ijp0eXBlb2YgZT09InN0cmluZyI/InN0cmluZyI6InVua25vd24ifWZ1bmN0aW9uIHB1KGUpe2NvbnN0IHQ9dHlwZW9mIGU7c3dpdGNoKHQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gTnVtYmVyLmlzTmFOKGUpPyJuYW4iOiJudW1iZXIiO2Nhc2Uib2JqZWN0Ijp7aWYoZT09PW51bGwpcmV0dXJuIm51bGwiO2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuImFycmF5Ijtjb25zdCBuPWU7aWYobiYmT2JqZWN0LmdldFByb3RvdHlwZU9mKG4pIT09T2JqZWN0LnByb3RvdHlwZSYmImNvbnN0cnVjdG9yImluIG4mJm4uY29uc3RydWN0b3IpcmV0dXJuIG4uY29uc3RydWN0b3IubmFtZX19cmV0dXJuIHR9ZnVuY3Rpb24gS2UoLi4uZSl7Y29uc3RbdCxuLG9dPWU7cmV0dXJuIHR5cGVvZiB0PT0ic3RyaW5nIj97bWVzc2FnZTp0LGNvZGU6ImN1c3RvbSIsaW5wdXQ6bixpbnN0Om99OnsuLi50fX1mdW5jdGlvbiBlaChlKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZSkuZmlsdGVyKChbdCxuXSk9Pk51bWJlci5pc05hTihOdW1iZXIucGFyc2VJbnQodCwxMCkpKS5tYXAodD0+dFsxXSl9ZnVuY3Rpb24gZnUoZSl7Y29uc3QgdD1hdG9iKGUpLG49bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKW5bb109dC5jaGFyQ29kZUF0KG8pO3JldHVybiBufWZ1bmN0aW9uIGh1KGUpe2xldCB0PSIiO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtuXSk7cmV0dXJuIGJ0b2EodCl9ZnVuY3Rpb24gdGgoZSl7Y29uc3QgdD1lLnJlcGxhY2UoLy0vZywiKyIpLnJlcGxhY2UoL18vZywiLyIpLG49Ij0iLnJlcGVhdCgoNC10Lmxlbmd0aCU0KSU0KTtyZXR1cm4gZnUodCtuKX1mdW5jdGlvbiBuaChlKXtyZXR1cm4gaHUoZSkucmVwbGFjZSgvXCsvZywiLSIpLnJlcGxhY2UoL1wvL2csIl8iKS5yZXBsYWNlKC89L2csIiIpfWZ1bmN0aW9uIG9oKGUpe2NvbnN0IHQ9ZS5yZXBsYWNlKC9eMHgvLCIiKTtpZih0Lmxlbmd0aCUyIT09MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyBsZW5ndGgiKTtjb25zdCBuPW5ldyBVaW50OEFycmF5KHQubGVuZ3RoLzIpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bys9MiluW28vMl09TnVtYmVyLnBhcnNlSW50KHQuc2xpY2UobyxvKzIpLDE2KTtyZXR1cm4gbn1mdW5jdGlvbiByaChlKXtyZXR1cm4gQXJyYXkuZnJvbShlKS5tYXAodD0+dC50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKS5qb2luKCIiKX1jbGFzcyBzaHtjb25zdHJ1Y3RvciguLi50KXt9fWZ1bmN0aW9uIG11KGUsdCl7Zm9yKGNvbnN0IG4gaW4gdCl7Y29uc3Qgbz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsbik7by5nZXQ/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbix7Li4ubyxlbnVtZXJhYmxlOiExfSk6aWgoZSxuLG8udmFsdWUpfX1mdW5jdGlvbiBrZShlLHQsbixvPSEwKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6byx2YWx1ZTpufSksbn1mdW5jdGlvbiBpbyhlLHQsbil7cmV0dXJuIGtlKGUsdCxuLCExKX1mdW5jdGlvbiBFdChlLHQpe2Zvcihjb25zdCBuIGluIGUpe2NvbnN0IG89ZVtuXTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQoKXtyZXR1cm4ga2UodGhpcyxuLG8odGhpcykpfSxzZXQocil7a2UodGhpcyxuLHIpfX0pfXJldHVybiB0fWZ1bmN0aW9uIGloKGUsdCxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0KCl7cmV0dXJuIHRoaXM9PW51bGw/bjprZSh0aGlzLHQsbi5iaW5kKHRoaXMpKX0sc2V0KG8pe2tlKHRoaXMsdCxvKX19KX1mdW5jdGlvbiBhaChlLHQpe2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiB0IGluIG4/dm9pZCAwOm59bGV0IGtyLFRlPSExO2NvbnN0IGNoPXtjb25maWd1cmFibGU6ITAsZ2V0KCl7VGU9ITB9fTtmdW5jdGlvbiBJKGUsdCxuKXtjb25zdCBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlLl96b2QpO2lmKHQgaW4gbyYma3IhPT1lLl96b2Qpe2tyPXZvaWQgMDtyZXR1cm59a3I9ZS5fem9kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LGNoKTtjb25zdCByPVRlO1RlPSExO3RyeXtjb25zdCBzPW4odGhpcyk7cmV0dXJuIFRlP2RlbGV0ZSB0aGlzW3RdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpzfSksVGU9VGV8fHIsc31jYXRjaChzKXt0aHJvdyBkZWxldGUgdGhpc1t0XSxUZT1UZXx8cixzfX0sc2V0KHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSl9fSl9ZnVuY3Rpb24gZ3UoZSx0LG4sbyl7Y29uc3Qgcj1haChlLHQpO3ImJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLHQse2NvbmZpZ3VyYWJsZTohMCxnZXQoKXtjb25zdCBzPXtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsZW51bWVyYWJsZTpvLHZhbHVlOnZvaWQgMH07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZT1uKHRoaXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQscykscy52YWx1ZX0sc2V0KHMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCxlbnVtZXJhYmxlOm8sdmFsdWU6c30pfX0pfWNvbnN0IF91PSJ+Y29uc3RhbnRDYXRjaCI7ZnVuY3Rpb24gS3IoZSl7Y29uc3QgdD0oKT0+ZTtyZXR1cm4gdFtfdV09ITAsdH1jb25zdCBXcj1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsQklHSU5UX0ZPUk1BVF9SQU5HRVM6b3UsQ09OU1RBTlRfQ0FUQ0g6X3UsQ2xhc3M6c2gsTlVNQkVSX0ZPUk1BVF9SQU5HRVM6bnUsYWJvcnRlZDpuZSxhbGxvd3NFdmFsOlhjLGFzc2VydDpVZixhc3NlcnRFcXVhbDpNZixhc3NlcnRJczpxZixhc3NlcnROZXZlcjpMZixhc3NlcnROb3RFcXVhbDpEZixhc3NpZ25Qcm9wOlVlLGF0dGFjaFNjaGVtYTpScixiYXNlNjRUb1VpbnQ4QXJyYXk6ZnUsYmFzZTY0dXJsVG9VaW50OEFycmF5OnRoLGNhY2hlZDpJdCxjYXB0dXJlU3RhY2tUcmFjZTpWcixjbGVhbkVudW06ZWgsY2xlYW5SZWdleDpQZSxjbG9uZTpVLGNsb25lRGVmOlZmLGNvZGVQb2ludExlbmd0aDpybyxjb25zdGFudENhdGNoOktyLGNyZWF0ZVRyYW5zcGFyZW50UHJveHk6WWYsZGVmaW5lTGF6eTpLYyxkZWZpbmVMYXp5SW50ZXJuYWw6SSxkZXJpdmVkOkV0LGVzYzpRYyxlc2NhcGVSZWdleDp3ZSxleHBsaWNpdGx5QWJvcnRlZDpkdSxleHRlbmQ6aXUsZmluYWxpemVJc3N1ZTpwZSxmbG9hdFNhZmVSZW1haW5kZXI6SmMsZ2V0RWxlbWVudEF0UGF0aDpKZixnZXRFbnVtVmFsdWVzOnhyLGdldExlbmd0aGFibGVPcmlnaW46c28sZ2V0UGFyc2VkVHlwZTpRZixnZXRTaXphYmxlT3JpZ2luOm9vLGhleFRvVWludDhBcnJheTpvaCxoaWRlOmlvLGluc3RhbGxMYXp5UHJvcDpndSxpc09iamVjdDpKZSxpc1BsYWluT2JqZWN0OkllLGlzc3VlOktlLGpvaW5WYWx1ZXM6SXIsanNvblN0cmluZ2lmeVJlcGxhY2VyOkZuLG1lbWJlcnM6bXUsbWVyZ2U6dXUsbWVyZ2VEZWZzOlksbm9ybWFsaXplUGFyYW1zOnYsbnVsbGlzaDpCcixudW1LZXlzOkdmLG9iamVjdENsb25lOkZmLG9taXQ6c3Usb3B0aW9uYWxLZXlzOnR1LG93bjprZSxwYXJzZWRUeXBlOnB1LHBhcnRpYWw6RXIscGljazpydSxwcmVmaXhJc3N1ZXM6dWUscHJpbWl0aXZlVHlwZXM6ZXUscHJvbWlzZUFsbE9iamVjdDpLZixwcm9wZXJ0eUtleVR5cGVzOkJuLHJhbmRvbVN0cmluZzpXZixyYXdTaGFwZTplbyxyZXF1aXJlZDpsdSxzYWZlRXh0ZW5kOmN1LHNoYWxsb3dDbG9uZTp0byxzbHVnaWZ5OlljLHN0cmluZ2lmeVByaW1pdGl2ZTpKcix0b1pvZDpYbix1aW50OEFycmF5VG9CYXNlNjQ6aHUsdWludDhBcnJheVRvQmFzZTY0dXJsOm5oLHVpbnQ4QXJyYXlUb0hleDpyaCx1bndyYXBNZXNzYWdlOkJlfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBsYztjb25zdCBHcj1PYmplY3QuZnJlZXplKHtzdGF0dXM6ImFib3J0ZWQifSksU3I9e3ZhbHVlOnZvaWQgMCxlbnVtZXJhYmxlOiExfTtsZXQgZGM9ImNhcHR1cmVTdGFja1RyYWNlImluIEVycm9yP0Vycm9yOm51bGw7ZnVuY3Rpb24gdWgoZSl7Y29uc3QgdD1kYztpZih0KXtjb25zdCBuPXQuc3RhY2tUcmFjZUxpbWl0O2lmKHR5cGVvZiBuPT0ibnVtYmVyIil7dHJ5e3Quc3RhY2tUcmFjZUxpbWl0PTB9Y2F0Y2h7cmV0dXJuIGRjPW51bGwsbmV3IGV9dHJ5e3JldHVybiBuZXcgZX1maW5hbGx5e3Quc3RhY2tUcmFjZUxpbWl0PW59fX1yZXR1cm4gbmV3IGV9ZnVuY3Rpb24gZChlLHQsbixvKXtjb25zdCByPXt9O2Z1bmN0aW9uIHMoZyl7dGhpcy5kZWY9Zyx0aGlzLmNvbnN0cj1oLHRoaXMudHJhaXRzPW5ldyBTZXR9cy5wcm90b3R5cGU9cjtjb25zdCBpPW4sYT1pJiZuZXcgV2Vha1NldDtmdW5jdGlvbiB1KGcsXyl7aWYoZy5fem9kKXtpZihnLl96b2QudHJhaXRzLmhhcyhlKSlyZXR1cm59ZWxzZXtTci52YWx1ZT1uZXcgcyhfKTt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGcsIl96b2QiLFNyKX1maW5hbGx5e1NyLnZhbHVlPXZvaWQgMH19aWYoZy5fem9kLnRyYWl0cy5hZGQoZSksdChnLF8pLGEpe2NvbnN0IGs9T2JqZWN0LmdldFByb3RvdHlwZU9mKGcpLCQ9Zy5fem9kLmNvbnN0ci5wcm90b3R5cGU7bGV0IE49aztmb3IoO04mJk4hPT0kOylOPU9iamVjdC5nZXRQcm90b3R5cGVPZihOKTtjb25zdCBSPU4/P2s7YS5oYXMoUil8fChhLmFkZChSKSxtdShSLGkpKX1jb25zdCBiPWgucHJvdG90eXBlO2Zvcihjb25zdCBrIGluIGIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsaykmJihrIGluIGd8fChnW2tdPWJba10uYmluZChnKSkpfWNvbnN0IGM9bz8uUGFyZW50Pz9PYmplY3Q7Y2xhc3MgbCBleHRlbmRzIGN7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLCJuYW1lIix7dmFsdWU6ZX0pO2Z1bmN0aW9uIGgoZyl7Y29uc3QgXz1vPy5QYXJlbnQ/dWgobCk6dGhpczt1KF8sZyk7Y29uc3QgYj1fLl96b2QuZGVmZXJyZWQ7aWYoYil7Zm9yKGNvbnN0ICQgb2YgYikkKCk7Xy5fem9kLmRlZmVycmVkPXZvaWQgMH1jb25zdCBrPWdsb2JhbFRoaXMuX196b2RfZ2xvYmFsQ29uZmlnPy5wb3N0UHJvY2Vzc29yO3JldHVybiBrJiZrKF8pLF99cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLCJpbml0Iix7dmFsdWU6dX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShoLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6Zz0+bz8uUGFyZW50JiZnIGluc3RhbmNlb2Ygby5QYXJlbnQ/ITA6Zz8uX3pvZD8udHJhaXRzPy5oYXMoZSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaCwibmFtZSIse3ZhbHVlOmV9KSxofWNvbnN0IFFyPVN5bWJvbCgiem9kX2JyYW5kIik7Y2xhc3MgeGUgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJFbmNvdW50ZXJlZCBQcm9taXNlIGR1cmluZyBzeW5jaHJvbm91cyBwYXJzZS4gVXNlIC5wYXJzZUFzeW5jKCkgaW5zdGVhZC4iKX19Y2xhc3MgYW8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcihgRW5jb3VudGVyZWQgdW5pZGlyZWN0aW9uYWwgdHJhbnNmb3JtIGR1cmluZyBlbmNvZGU6ICR7dH1gKSx0aGlzLm5hbWU9IlpvZEVuY29kZUVycm9yIn19KGxjPWdsb2JhbFRoaXMpLl9fem9kX2dsb2JhbENvbmZpZz8/KGxjLl9fem9kX2dsb2JhbENvbmZpZz17fSk7Y29uc3QgZWU9Z2xvYmFsVGhpcy5fX3pvZF9nbG9iYWxDb25maWc7ZnVuY3Rpb24gVihlKXtyZXR1cm4gZSYmT2JqZWN0LmFzc2lnbihlZSxlKSxlZX1mdW5jdGlvbiBsaCgpe2NvbnN0IGU9dGhpcy5fem9kO3JldHVybiBlLm1lc3NhZ2U/PyhlLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoZS5kZWYsRm4sMikpLGUubWVzc2FnZX1mdW5jdGlvbiBkaChlKXt0aGlzLl96b2QubWVzc2FnZT1lfWNvbnN0IHBoPXtnZXQ6bGgsc2V0OmRoLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSwkcj17dmFsdWU6dm9pZCAwLGVudW1lcmFibGU6ITF9LHBjPW5ldyBXZWFrU2V0KFtPYmplY3QucHJvdG90eXBlLEVycm9yLnByb3RvdHlwZV0pLHZ1PShlLHQpPT57ZS5uYW1lPSIkWm9kRXJyb3IiLCRyLnZhbHVlPXQsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImlzc3VlcyIsJHIpLCRyLnZhbHVlPXZvaWQgMCxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibWVzc2FnZSIscGgpO2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3BjLmhhcyhuKXx8KHBjLmFkZChuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSxnZXQoKXtjb25zdCBvPSgpPT50aGlzLm1lc3NhZ2U7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJ0b1N0cmluZyIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksb30sc2V0KG8pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJ0b1N0cmluZyIse3ZhbHVlOm8sY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9fSkpfSxidT1kKCIkWm9kRXJyb3IiLHZ1KSxhZT1kKCIkWm9kRXJyb3IiLHZ1LHZvaWQgMCx7UGFyZW50OkVycm9yfSk7ZnVuY3Rpb24gZmgoZSx0LG4pe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KXx8KHQ9PT0iX19wcm90b19fIj9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuKCksd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTplW3RdPW4oKSksZVt0XX1mdW5jdGlvbiBjbyhlLHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXt9LG89W107Zm9yKGNvbnN0IHIgb2YgZS5pc3N1ZXMpci5wYXRoLmxlbmd0aD4wP2ZoKG4sci5wYXRoWzBdLCgpPT5bXSkucHVzaCh0KHIpKTpvLnB1c2godChyKSk7cmV0dXJue2Zvcm1FcnJvcnM6byxmaWVsZEVycm9yczpufX1mdW5jdGlvbiB1byhlLHQ9bj0+bi5tZXNzYWdlKXtjb25zdCBuPXtfZXJyb3JzOltdfSxvPShyLHM9W10pPT57Zm9yKGNvbnN0IGkgb2Ygci5pc3N1ZXMpaWYoaS5jb2RlPT09ImludmFsaWRfdW5pb24iJiZpLmVycm9ycy5sZW5ndGgpaS5lcnJvcnMubWFwKGE9Pm8oe2lzc3VlczphfSxbLi4ucywuLi5pLnBhdGhdKSk7ZWxzZSBpZihpLmNvZGU9PT0iaW52YWxpZF9rZXkiKW8oe2lzc3VlczppLmlzc3Vlc30sWy4uLnMsLi4uaS5wYXRoXSk7ZWxzZSBpZihpLmNvZGU9PT0iaW52YWxpZF9lbGVtZW50IilvKHtpc3N1ZXM6aS5pc3N1ZXN9LFsuLi5zLC4uLmkucGF0aF0pO2Vsc2V7Y29uc3QgYT1bLi4ucywuLi5pLnBhdGhdO2lmKGEubGVuZ3RoPT09MCluLl9lcnJvcnMucHVzaCh0KGkpKTtlbHNle2xldCB1PW4sYz0wO2Zvcig7YzxhLmxlbmd0aDspe2NvbnN0IGw9YVtjXSxoPWM9PT1hLmxlbmd0aC0xO2lmKGw9PT0iX2Vycm9ycyIpe2gmJnUuX2Vycm9ycy5wdXNoKHQoaSkpLGMrKztjb250aW51ZX1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodSxsKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHUsbCx7dmFsdWU6e19lcnJvcnM6W119LGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7Y29uc3QgZz11W2xdO2gmJmcuX2Vycm9ycy5wdXNoKHQoaSkpLHU9ZyxjKyt9fX19O3JldHVybiBvKGUpLG59ZnVuY3Rpb24gWXIoZSx0PW49Pm4ubWVzc2FnZSl7Y29uc3Qgbj17ZXJyb3JzOltdfSxvPShyLHM9W10pPT57dmFyIGk7Zm9yKGNvbnN0IGEgb2Ygci5pc3N1ZXMpaWYoYS5jb2RlPT09ImludmFsaWRfdW5pb24iJiZhLmVycm9ycy5sZW5ndGgpYS5lcnJvcnMubWFwKHU9Pm8oe2lzc3Vlczp1fSxbLi4ucywuLi5hLnBhdGhdKSk7ZWxzZSBpZihhLmNvZGU9PT0iaW52YWxpZF9rZXkiKW8oe2lzc3VlczphLmlzc3Vlc30sWy4uLnMsLi4uYS5wYXRoXSk7ZWxzZSBpZihhLmNvZGU9PT0iaW52YWxpZF9lbGVtZW50IilvKHtpc3N1ZXM6YS5pc3N1ZXN9LFsuLi5zLC4uLmEucGF0aF0pO2Vsc2V7Y29uc3QgdT1bLi4ucywuLi5hLnBhdGhdO2lmKHUubGVuZ3RoPT09MCl7bi5lcnJvcnMucHVzaCh0KGEpKTtjb250aW51ZX1sZXQgYz1uLGw9MDtmb3IoO2w8dS5sZW5ndGg7KXtjb25zdCBoPXVbbF0sZz1sPT09dS5sZW5ndGgtMTt0eXBlb2YgaD09InN0cmluZyI/KGMucHJvcGVydGllcz8/KGMucHJvcGVydGllcz17fSksT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMucHJvcGVydGllcyxoKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGMucHJvcGVydGllcyxoLHt2YWx1ZTp7ZXJyb3JzOltdfSxlbnVtZXJhYmxlOiEwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLGM9Yy5wcm9wZXJ0aWVzW2hdKTooYy5pdGVtcz8/KGMuaXRlbXM9W10pLChpPWMuaXRlbXMpW2hdPz8oaVtoXT17ZXJyb3JzOltdfSksYz1jLml0ZW1zW2hdKSxnJiZjLmVycm9ycy5wdXNoKHQoYSkpLGwrK319fTtyZXR1cm4gbyhlKSxufWZ1bmN0aW9uIHl1KGUpe2NvbnN0IHQ9W10sbj1lLm1hcChvPT50eXBlb2Ygbz09Im9iamVjdCI/by5rZXk6byk7Zm9yKGNvbnN0IG8gb2Ygbil0eXBlb2Ygbz09Im51bWJlciI/dC5wdXNoKGBbJHtvfV1gKTp0eXBlb2Ygbz09InN5bWJvbCI/dC5wdXNoKGBbJHtKU09OLnN0cmluZ2lmeShTdHJpbmcobykpfV1gKTovW15cdyRdLy50ZXN0KG8pP3QucHVzaChgWyR7SlNPTi5zdHJpbmdpZnkobyl9XWApOih0Lmxlbmd0aCYmdC5wdXNoKCIuIiksdC5wdXNoKG8pKTtyZXR1cm4gdC5qb2luKCIiKX1mdW5jdGlvbiBYcihlKXtjb25zdCB0PVtdLG49Wy4uLmUuaXNzdWVzXS5zb3J0KChvLHIpPT4oby5wYXRoPz9bXSkubGVuZ3RoLShyLnBhdGg/P1tdKS5sZW5ndGgpO2Zvcihjb25zdCBvIG9mIG4pdC5wdXNoKGDinJYgJHtvLm1lc3NhZ2V9YCksby5wYXRoPy5sZW5ndGgmJnQucHVzaChgICDihpIgYXQgJHt5dShvLnBhdGgpfWApO3JldHVybiB0LmpvaW4oYApgKX1mdW5jdGlvbiBsbyhlLHQpe3JldHVybntjYWxsZWU6dD8uY2FsbGVlPz9lLEVycjp0Py5FcnJ9fWNvbnN0IFJ0PWU9Pntjb25zdCB0PShuLG8scixzKT0+e2NvbnN0IGk9cj97Li4ucixhc3luYzohMX06e2FzeW5jOiExfSxhPW4uX3pvZC5ydW4oe3ZhbHVlOm8saXNzdWVzOltdfSxpKTtpZihhIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgeGU7aWYoYS5pc3N1ZXMubGVuZ3RoKXtjb25zdCB1PW5ldyhzPy5FcnI/P2UpKGEuaXNzdWVzLm1hcChjPT5wZShjLGksVigpKSkpO3Rocm93IFZyKHUscz8uY2FsbGVlPz90KSx1fXJldHVybiBhLnZhbHVlfTtyZXR1cm4gdH0sWnI9UnQoYWUpLFp0PWU9Pntjb25zdCB0PWFzeW5jKG4sbyxyLHMpPT57Y29uc3QgaT1yP3suLi5yLGFzeW5jOiEwfTp7YXN5bmM6ITB9O2xldCBhPW4uX3pvZC5ydW4oe3ZhbHVlOm8saXNzdWVzOltdfSxpKTtpZihhIGluc3RhbmNlb2YgUHJvbWlzZSYmKGE9YXdhaXQgYSksYS5pc3N1ZXMubGVuZ3RoKXtjb25zdCB1PW5ldyhzPy5FcnI/P2UpKGEuaXNzdWVzLm1hcChjPT5wZShjLGksVigpKSkpO3Rocm93IFZyKHUscz8uY2FsbGVlPz90KSx1fXJldHVybiBhLnZhbHVlfTtyZXR1cm4gdH0sQ3I9WnQoYWUpLEN0PWU9Pih0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sYXN5bmM6ITF9Onthc3luYzohMX0scz10Ll96b2QucnVuKHt2YWx1ZTpuLGlzc3VlczpbXX0scik7aWYocyBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IHhlO3JldHVybiBzLmlzc3Vlcy5sZW5ndGg/a3UoZSxzLmlzc3VlcyxyKTp7c3VjY2VzczohMCxkYXRhOnMudmFsdWV9fSx3dT1DdChhZSk7ZnVuY3Rpb24ga3UoZSx0LG4pe2xldCBvO3JldHVybntzdWNjZXNzOiExLGdldCBlcnJvcigpe3JldHVybiBvfHwobz1uZXcgZSh0Lm1hcChyPT5wZShyLG4sVigpKSkpLHQ9dm9pZCAwLG49dm9pZCAwKSxvfSxzZXQgZXJyb3Iocil7bz1yLHQ9dm9pZCAwLG49dm9pZCAwfX19Y29uc3QgT3Q9ZT0+YXN5bmModCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGFzeW5jOiEwfTp7YXN5bmM6ITB9O2xldCBzPXQuX3pvZC5ydW4oe3ZhbHVlOm4saXNzdWVzOltdfSxyKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2UmJihzPWF3YWl0IHMpLHMuaXNzdWVzLmxlbmd0aD9rdShlLHMuaXNzdWVzLHIpOntzdWNjZXNzOiEwLGRhdGE6cy52YWx1ZX19LGhoPU90KGFlKSxtaD1TeW1ib2wuZm9yKCJ6b2QuY29tcGlsZS5pbnZhbGlkIiksZ2g9U3ltYm9sLmZvcigiem9kLmNvbXBpbGUuZmFsbGJhY2siKSxwbz0oKGUsdCxuKT0+e2NvbnN0IG89ZS5fem9kLmJhZy52YWxpZGF0b3I7aWYobyE9PXZvaWQgMCl7aWYobyh0KSE9PW1oKXJldHVybiEwO2lmKG8uZGVmaW5pdGU9PT0hMCYmbj09PXZvaWQgMClyZXR1cm4hMX1yZXR1cm4gX2goZSx0LG4pfSk7ZnVuY3Rpb24gX2goZSx0LG4pe2NvbnN0IG89bj97Li4ubixhc3luYzohMSxhYm9ydEVhcmx5OiEwfTp7YXN5bmM6ITEsYWJvcnRFYXJseTohMH0scj1lLl96b2QuYmFnLmZhbGxiYWNrUnVuO2xldCBzO2lmKHI/KG9bZ2hdPSEwLHM9cih7dmFsdWU6dCxpc3N1ZXM6W119LG8pKTpzPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxvKSxzIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgeGU7cmV0dXJuIHMuaXNzdWVzLmxlbmd0aD09PTB9Y29uc3QgZm89YXN5bmMoZSx0LG4pPT57Y29uc3Qgbz1uP3suLi5uLGFzeW5jOiEwLGFib3J0RWFybHk6ITB9Onthc3luYzohMCxhYm9ydEVhcmx5OiEwfTtsZXQgcj1lLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlJiYocj1hd2FpdCByKSxyLmlzc3Vlcy5sZW5ndGg9PT0wfSxlcz1lPT57Y29uc3QgdD1SdChlKSxuPShvLHIscyxpKT0+e2NvbnN0IGE9cz97Li4ucyxkaXJlY3Rpb246ImJhY2t3YXJkIn06e2RpcmVjdGlvbjoiYmFja3dhcmQifTtyZXR1cm4gdChvLHIsYSxsbyhuLGkpKX07cmV0dXJuIG59LHZoPWVzKGFlKSx0cz1lPT57Y29uc3QgdD1SdChlKSxuPShvLHIscyxpKT0+dChvLHIscyxsbyhuLGkpKTtyZXR1cm4gbn0sYmg9dHMoYWUpLG5zPWU9Pntjb25zdCB0PVp0KGUpLG49YXN5bmMobyxyLHMsaSk9Pntjb25zdCBhPXM/ey4uLnMsZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIGF3YWl0IHQobyxyLGEsbG8obixpKSl9O3JldHVybiBufSx5aD1ucyhhZSksb3M9ZT0+e2NvbnN0IHQ9WnQoZSksbj1hc3luYyhvLHIscyxpKT0+YXdhaXQgdChvLHIscyxsbyhuLGkpKTtyZXR1cm4gbn0sd2g9b3MoYWUpLHJzPWU9Pih0LG4sbyk9Pntjb25zdCByPW8/ey4uLm8sZGlyZWN0aW9uOiJiYWNrd2FyZCJ9OntkaXJlY3Rpb246ImJhY2t3YXJkIn07cmV0dXJuIEN0KGUpKHQsbixyKX0sa2g9cnMoYWUpLHNzPWU9Pih0LG4sbyk9PkN0KGUpKHQsbixvKSxTaD1zcyhhZSksaXM9ZT0+YXN5bmModCxuLG8pPT57Y29uc3Qgcj1vP3suLi5vLGRpcmVjdGlvbjoiYmFja3dhcmQifTp7ZGlyZWN0aW9uOiJiYWNrd2FyZCJ9O3JldHVybiBPdChlKSh0LG4scil9LCRoPWlzKGFlKSxhcz1lPT5hc3luYyh0LG4sbyk9Pk90KGUpKHQsbixvKSx6aD1hcyhhZSksU3U9L15bY0NdWzAtOWEtel17Nix9JC8sJHU9L15bMC05YS16XSskLyx6dT0vXlswLTddWzAtOUEtSEpLTU5QLVRWLVphLWhqa21ucC10di16XXsyNX0kLyxUdT0vXlswLTlhLXZBLVZdezIwfSQvLFB1PS9eW0EtWmEtejAtOV17Mjd9JC8seHU9L15bYS16QS1aMC05Xy1dezIxfSQvO2Z1bmN0aW9uIEl1KGUpe3JldHVybiBuZXcgUmVnRXhwKGBeW2EtekEtWjAtOV8tXXske2V9fSRgKX1jb25zdCBFdT0vXlAoPzooXGQrVyl8KD8hLipXKSg/PVxkfFRcZCkoXGQrWSk/KFxkK00pPyhcZCtEKT8oVCg/PVxkKShcZCtIKT8oXGQrTSk/KFxkKyhbLixdXGQrKT9TKT8pPykkLyxUaD0vXlstK10/UCg/ISQpKD86KD86Wy0rXT9cZCtZKXwoPzpbLStdP1xkK1suLF1cZCtZJCkpPyg/Oig/OlstK10/XGQrTSl8KD86Wy0rXT9cZCtbLixdXGQrTSQpKT8oPzooPzpbLStdP1xkK1cpfCg/OlstK10/XGQrWy4sXVxkK1ckKSk/KD86KD86Wy0rXT9cZCtEKXwoPzpbLStdP1xkK1suLF1cZCtEJCkpPyg/OlQoPz1bXGQrLV0pKD86KD86Wy0rXT9cZCtIKXwoPzpbLStdP1xkK1suLF1cZCtIJCkpPyg/Oig/OlstK10/XGQrTSl8KD86Wy0rXT9cZCtbLixdXGQrTSQpKT8oPzpbLStdP1xkKyg/OlsuLF1cZCspP1MpPyk/PyQvLFJ1PS9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezEyfSkkLyxXZT1lPT5lP25ldyBSZWdFeHAoYF4oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tJHtlfVswLTlhLWZBLUZdezN9LVs4OWFiQUJdWzAtOWEtZkEtRl17M30tWzAtOWEtZkEtRl17MTJ9KSRgKTovXihbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMS04XVswLTlhLWZBLUZdezN9LVs4OWFiQUJdWzAtOWEtZkEtRl17M30tWzAtOWEtZkEtRl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMHxmZmZmZmZmZi1mZmZmLWZmZmYtZmZmZi1mZmZmZmZmZmZmZmYpJC8sUGg9V2UoNCkseGg9V2UoNiksSWg9V2UoNyksWnU9L14oPzpbQS1aYS16MC05XycrXC1dK1wuKSpbQS1aYS16MC05XycrXC1dKltBLVphLXowLTlfKy1dQCg/OltBLVphLXowLTldW0EtWmEtejAtOVwtXSpcLikrW0EtWmEtel17Mix9JC8sRWg9L15bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC8sUmg9L14oKFtePD4oKVxbXF1cXC4sOzpcc0AiXSsoXC5bXjw+KClcW1xdXFwuLDs6XHNAIl0rKSopfCgiLisiKSlAKChcW1swLTldezEsM31cLlswLTldezEsM31cLlswLTldezEsM31cLlswLTldezEsM31dKXwoKFthLXpBLVpcLTAtOV0rXC4pK1thLXpBLVpdezIsfSkpJC8sQ3U9L15bXlxzQCJdezEsNjR9QFteXHNAXXsxLDI1NX0kL3UsWmg9Q3UsQ2g9L15bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykqJC8sT2g9Il4oPz1bXFxzXFxTXSpbXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY31cXHB7UmVnaW9uYWxfSW5kaWNhdG9yfVxcdTIwRTNdKVtcXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfVxccHtFbW9qaV9Db21wb25lbnR9XSskIjtmdW5jdGlvbiBPdSgpe3JldHVybiBuZXcgUmVnRXhwKE9oLCJ1Iil9Y29uc3QgQXU9L14oPzooPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKSQvLE51PS9eKChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318OikpJC8sanU9ZT0+e2NvbnN0IHQ9d2UoZT8/IjoiKTtyZXR1cm4gbmV3IFJlZ0V4cChgXig/OlswLTlBLUZdezJ9JHt0fSl7NX1bMC05QS1GXXsyfSR8Xig/OlswLTlhLWZdezJ9JHt0fSl7NX1bMC05YS1mXXsyfSRgKX0sTXU9L14oKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcLil7M30oMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVwvKFswLTldfFsxLTJdWzAtOV18M1swLTJdKSQvLER1PS9eKChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318OikpXC8oMTJbMC04XXwxWzAxXVswLTldfFsxLTldP1swLTldKSQvLEFoPS9eJHxeKD86WzAtOWEtekEtWisvXXs0fSkqKD86KD86WzAtOWEtekEtWisvXXsyfT09KXwoPzpbMC05YS16QS1aKy9dezN9PSkpPyQvLE5oPS9eKD86W0EtWmEtejAtOV8tXXs0fSkqKD86W0EtWmEtejAtOV8tXXsyLDN9KT8kLyxxdT0vXig/PS57MSwyNTN9XC4/JClbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86Wy0wLTlhLXpBLVpdezAsNjF9WzAtOWEtekEtWl0pPykqXC4/JC8sTHU9L14oPz0uezEsMjUzfSQpKFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pP1wuKStbYS16QS1aXXsyLDYzfSQvLGNzPS9eaHR0cHM/JC8sVXU9L15cK1sxLTldXGR7NiwxNH0kLyx1cz0vXlxkKD86WyAtXT9cZCl7MTEsMTh9JC8sSHU9L14oPzpBRUR8QUZOfEFMTHxBTUR8QU9BfEFSU3xBVUR8QVdHfEFaTnxCQU18QkJEfEJEVHxCSER8QklGfEJNRHxCTkR8Qk9CfEJPVnxCUkx8QlNEfEJUTnxCV1B8QllOfEJaRHxDQUR8Q0RGfENIRXxDSEZ8Q0hXfENMRnxDTFB8Q05ZfENPUHxDT1V8Q1JDfENVUHxDVkV8Q1pLfERKRnxES0t8RE9QfERaRHxFR1B8RVJOfEVUQnxFVVJ8RkpEfEZLUHxHQlB8R0VMfEdIU3xHSVB8R01EfEdORnxHVFF8R1lEfEhLRHxITkx8SFRHfEhVRnxJRFJ8SUxTfElOUnxJUUR8SVJSfElTS3xKTUR8Sk9EfEpQWXxLRVN8S0dTfEtIUnxLTUZ8S1BXfEtSV3xLV0R8S1lEfEtaVHxMQUt8TEJQfExLUnxMUkR8TFNMfExZRHxNQUR8TURMfE1HQXxNS0R8TU1LfE1OVHxNT1B8TVJVfE1VUnxNVlJ8TVdLfE1YTnxNWFZ8TVlSfE1aTnxOQUR8TkdOfE5JT3xOT0t8TlBSfE5aRHxPTVJ8UEFCfFBFTnxQR0t8UEhQfFBLUnxQTE58UFlHfFFBUnxST058UlNEfFJVQnxSV0Z8U0FSfFNCRHxTQ1J8U0RHfFNFS3xTR0R8U0hQfFNMRXxTT1N8U1JEfFNTUHxTVE58U1ZDfFNZUHxTWkx8VEhCfFRKU3xUTVR8VE5EfFRPUHxUUll8VFREfFRXRHxUWlN8VUFIfFVHWHxVU0R8VVNOfFVZSXxVWVV8VVlXfFVaU3xWRUR8VkVTfFZORHxWVVZ8V1NUfFhBRHxYQUZ8WEFHfFhBVXxYQkF8WEJCfFhCQ3xYQkR8WENEfFhDR3xYRFJ8WE9GfFhQRHxYUEZ8WFBUfFhTVXxYVFN8WFVBfFhYWHxZRVJ8WkFSfFpNV3xaV0cpJC8sbHM9L15bQS1aXXsyfSg/ITAwfDAxfDk5KVxkezJ9W0EtWjAtOV17MTEsMzB9JC8sRnU9Iig/Oig/OlxcZFxcZFsyNDY4XVswNDhdfFxcZFxcZFsxMzU3OV1bMjZdfFxcZFxcZDBbNDhdfFswMjQ2OF1bMDQ4XTAwfFsxMzU3OV1bMjZdMDApLTAyLTI5fFxcZHs0fS0oPzooPzowWzEzNTc4XXwxWzAyXSktKD86MFsxLTldfFsxMl1cXGR8M1swMV0pfCg/OjBbNDY5XXwxMSktKD86MFsxLTldfFsxMl1cXGR8MzApfCg/OjAyKS0oPzowWzEtOV18MVxcZHwyWzAtOF0pKSkiO2Z1bmN0aW9uIGpoKGUpe3JldHVybiBuZXcgUmVnRXhwKGBeJHtlfSRgKX1jb25zdCBCdT1qaChGdSk7ZnVuY3Rpb24gT3IoZSl7Y29uc3QgdD0iKD86WzAxXVxcZHwyWzAtM10pOlswLTVdXFxkIjtyZXR1cm4gdHlwZW9mIGUucHJlY2lzaW9uPT0ibnVtYmVyIj9lLnByZWNpc2lvbj09PS0xP2Ake3R9YDplLnByZWNpc2lvbj09PTA/YCR7dH06WzAtNV1cXGRgOmAke3R9OlswLTVdXFxkXFwuXFxkeyR7ZS5wcmVjaXNpb259fWA6ZS5zZWNvbmRzP2Ake3R9OlswLTVdXFxkKD86XFwuXFxkKyk/YDpgJHt0fSg/OjpbMC01XVxcZCg/OlxcLlxcZCspPyk/YH1mdW5jdGlvbiBWdShlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXiR7T3IoZSl9JGApfWZ1bmN0aW9uIEp1KGUpe2NvbnN0IHQ9WyJaIl07ZS5vZmZzZXQmJnQucHVzaCgiKFsrLV0oPzpbMDFdXFxkfDJbMC0zXSk6WzAtNV1cXGQpIik7Y29uc3Qgbj1gJHtPcih7cHJlY2lzaW9uOmUucHJlY2lzaW9uLHNlY29uZHM6ITB9KX0oPzoke3Quam9pbigifCIpfSlgLG89ZS5sb2NhbD9gJHtufXwke09yKHtwcmVjaXNpb246ZS5wcmVjaXNpb259KX1gOm47cmV0dXJuIG5ldyBSZWdFeHAoYF4ke0Z1fVQoPzoke299KSRgKX1jb25zdCBLdT0vXltcc1xTXXswLH0kLyxXdT1lPT57Y29uc3QgdD1lP2BbXFxzXFxTXXske2U/Lm1pbmltdW0/PzB9LCR7ZT8ubWF4aW11bT8/IiJ9fWA6IltcXHNcXFNdKiI7cmV0dXJuIG5ldyBSZWdFeHAoYF4ke3R9JGApfSxHdT0vXi0/XGQrbj8kLyxRdT0vXi0/XGQrJC8saG89L14tP1xkKyg/OlwuXGQrKT8kLyxZdT0vXig/OnRydWV8ZmFsc2UpJC9pLFh1PS9ebnVsbCQvaSxlbD0vXnVuZGVmaW5lZCQvaSx0bD0vXlteQS1aXSokLyxubD0vXlteYS16XSokLyxvbD0vXlswLTlhLWZBLUZdKiQvO2Z1bmN0aW9uIEF0KGUsdCl7cmV0dXJuIG5ldyBSZWdFeHAoYF5bQS1aYS16MC05Ky9deyR7ZX19JHt0fSRgKX1mdW5jdGlvbiBOdChlKXtyZXR1cm4gbmV3IFJlZ0V4cChgXltBLVphLXowLTlfLV17JHtlfX0kYCl9Y29uc3QgTWg9L15bMC05YS1mQS1GXXszMn0kLyxEaD1BdCgyMiwiPT0iKSxxaD1OdCgyMiksTGg9L15bMC05YS1mQS1GXXs0MH0kLyxVaD1BdCgyNywiPSIpLEhoPU50KDI3KSxGaD0vXlswLTlhLWZBLUZdezY0fSQvLEJoPUF0KDQzLCI9IiksVmg9TnQoNDMpLEpoPS9eWzAtOWEtZkEtRl17OTZ9JC8sS2g9QXQoNjQsIiIpLFdoPU50KDY0KSxHaD0vXlswLTlhLWZBLUZdezEyOH0kLyxRaD1BdCg4NiwiPT0iKSxZaD1OdCg4NiksbW89T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGFueVN0cmluZzpLdSxiYXNlNjQ6QWgsYmFzZTY0dXJsOk5oLGJpZ2ludDpHdSxib29sZWFuOll1LGJyb3dzZXJFbWFpbDpDaCxjaWRydjQ6TXUsY2lkcnY2OkR1LGNyZWRpdENhcmQ6dXMsY3VpZDpTdSxjdWlkMjokdSxjdXJyZW5jeUNvZGU6SHUsZGF0ZTpCdSxkYXRldGltZTpKdSxkb21haW46THUsZHVyYXRpb246RXUsZTE2NDpVdSxlbWFpbDpadSxlbW9qaTpPdSxleHRlbmRlZER1cmF0aW9uOlRoLGd1aWQ6UnUsaGV4Om9sLGhvc3RuYW1lOnF1LGh0bWw1RW1haWw6RWgsaHR0cFByb3RvY29sOmNzLGliYW46bHMsaWRuRW1haWw6WmgsaW50ZWdlcjpRdSxpcHY0OkF1LGlwdjY6TnUsa3N1aWQ6UHUsbG93ZXJjYXNlOnRsLG1hYzpqdSxtZDVfYmFzZTY0OkRoLG1kNV9iYXNlNjR1cmw6cWgsbWQ1X2hleDpNaCxuYW5vaWQ6eHUsbmFub2lkT2ZMZW5ndGg6SXUsbnVsbDpYdSxudW1iZXI6aG8scmZjNTMyMkVtYWlsOlJoLHNoYTFfYmFzZTY0OlVoLHNoYTFfYmFzZTY0dXJsOkhoLHNoYTFfaGV4OkxoLHNoYTI1Nl9iYXNlNjQ6Qmgsc2hhMjU2X2Jhc2U2NHVybDpWaCxzaGEyNTZfaGV4OkZoLHNoYTM4NF9iYXNlNjQ6S2gsc2hhMzg0X2Jhc2U2NHVybDpXaCxzaGEzODRfaGV4OkpoLHNoYTUxMl9iYXNlNjQ6UWgsc2hhNTEyX2Jhc2U2NHVybDpZaCxzaGE1MTJfaGV4OkdoLHN0cmluZzpXdSx0aW1lOlZ1LHVsaWQ6enUsdW5kZWZpbmVkOmVsLHVuaWNvZGVFbWFpbDpDdSx1cHBlcmNhc2U6bmwsdXVpZDpXZSx1dWlkNDpQaCx1dWlkNjp4aCx1dWlkNzpJaCx4aWQ6VHV9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksTD1kKCIkWm9kQ2hlY2siLChlLHQpPT57dmFyIG47ZS5fem9kPz8oZS5fem9kPXt9KSxlLl96b2QuZGVmPXQsKG49ZS5fem9kKS5vbmF0dGFjaD8/KG4ub25hdHRhY2g9W10pfSksZHM9ZT0+e2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4hQnIodCkmJnQuc2l6ZSE9PXZvaWQgMH0scHM9ZT0+e2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4hQnIodCkmJnQubGVuZ3RoIT09dm9pZCAwfSxWbj17bnVtYmVyOiJudW1iZXIiLGJpZ2ludDoiYmlnaW50IixvYmplY3Q6ImRhdGUifSxmcz1kKCIkWm9kQ2hlY2tMZXNzVGhhbiIsKGUsdCk9PntMLmluaXQoZSx0KTtjb25zdCBuPVZuW3R5cGVvZiB0LnZhbHVlXTtlLl96b2QuY2hlY2s9bz0+eyh0LmluY2x1c2l2ZT9vLnZhbHVlPD10LnZhbHVlOm8udmFsdWU8dC52YWx1ZSl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjpWblt0eXBlb2Ygby52YWx1ZV0/P24sY29kZToidG9vX2JpZyIsbWF4aW11bTp0eXBlb2YgdC52YWx1ZT09Im9iamVjdCI/dC52YWx1ZS5nZXRUaW1lKCk6dC52YWx1ZSxpbnB1dDpvLnZhbHVlLGluY2x1c2l2ZTp0LmluY2x1c2l2ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxocz1kKCIkWm9kQ2hlY2tHcmVhdGVyVGhhbiIsKGUsdCk9PntMLmluaXQoZSx0KTtjb25zdCBuPVZuW3R5cGVvZiB0LnZhbHVlXTtlLl96b2QuY2hlY2s9bz0+eyh0LmluY2x1c2l2ZT9vLnZhbHVlPj10LnZhbHVlOm8udmFsdWU+dC52YWx1ZSl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjpWblt0eXBlb2Ygby52YWx1ZV0/P24sY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnR5cGVvZiB0LnZhbHVlPT0ib2JqZWN0Ij90LnZhbHVlLmdldFRpbWUoKTp0LnZhbHVlLGlucHV0Om8udmFsdWUsaW5jbHVzaXZlOnQuaW5jbHVzaXZlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHJsPWQoIiRab2RDaGVja011bHRpcGxlT2YiLChlLHQpPT57TC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntpZih0eXBlb2Ygbi52YWx1ZSE9dHlwZW9mIHQudmFsdWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgbWl4IG51bWJlciBhbmQgYmlnaW50IGluIG11bHRpcGxlX29mIGNoZWNrLiIpOyh0eXBlb2Ygbi52YWx1ZT09ImJpZ2ludCI/dC52YWx1ZSE9PUJpZ0ludCgwKSYmbi52YWx1ZSV0LnZhbHVlPT09QmlnSW50KDApOkpjKG4udmFsdWUsdC52YWx1ZSk9PT0wKXx8bi5pc3N1ZXMucHVzaCh7b3JpZ2luOnR5cGVvZiBuLnZhbHVlLGNvZGU6Im5vdF9tdWx0aXBsZV9vZiIsZGl2aXNvcjp0LnZhbHVlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksc2w9ZCgiJFpvZENoZWNrTnVtYmVyRm9ybWF0IiwoZSx0KT0+e0wuaW5pdChlLHQpLHQuZm9ybWF0PXQuZm9ybWF0fHwiZmxvYXQ2NCI7Y29uc3Qgbj10LmZvcm1hdD8uaW5jbHVkZXMoImludCIpLG89bj8iaW50IjoibnVtYmVyIixbcixzXT1udVt0LmZvcm1hdF07ZS5fem9kLmNoZWNrPWk9Pntjb25zdCBhPWkudmFsdWU7aWYobil7aWYoIU51bWJlci5pc0ludGVnZXIoYSkpe2kuaXNzdWVzLnB1c2goe2V4cGVjdGVkOm8sZm9ybWF0OnQuZm9ybWF0LGNvZGU6ImludmFsaWRfdHlwZSIsY29udGludWU6ITEsaW5wdXQ6YSxpbnN0OmV9KTtyZXR1cm59aWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGEpKXthPjA/aS5pc3N1ZXMucHVzaCh7aW5wdXQ6YSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOk51bWJlci5NQVhfU0FGRV9JTlRFR0VSLG5vdGU6IkludGVnZXJzIG11c3QgYmUgd2l0aGluIHRoZSBzYWZlIGludGVnZXIgcmFuZ2UuIixpbnN0OmUsb3JpZ2luOm8saW5jbHVzaXZlOiEwLGNvbnRpbnVlOiF0LmFib3J0fSk6aS5pc3N1ZXMucHVzaCh7aW5wdXQ6YSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06TnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsbm90ZToiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS4iLGluc3Q6ZSxvcmlnaW46byxpbmNsdXNpdmU6ITAsY29udGludWU6IXQuYWJvcnR9KTtyZXR1cm59fWE8ciYmaS5pc3N1ZXMucHVzaCh7b3JpZ2luOiJudW1iZXIiLGlucHV0OmEsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnIsaW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pLGE+cyYmaS5pc3N1ZXMucHVzaCh7b3JpZ2luOiJudW1iZXIiLGlucHV0OmEsY29kZToidG9vX2JpZyIsbWF4aW11bTpzLGluY2x1c2l2ZTohMCxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxpbD1kKCIkWm9kQ2hlY2tCaWdJbnRGb3JtYXQiLChlLHQpPT57TC5pbml0KGUsdCk7Y29uc3RbbixvXT1vdVt0LmZvcm1hdF07ZS5fem9kLmNoZWNrPXI9Pntjb25zdCBzPXIudmFsdWU7czxuJiZyLmlzc3Vlcy5wdXNoKHtvcmlnaW46ImJpZ2ludCIsaW5wdXQ6cyxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06bixpbmNsdXNpdmU6ITAsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSkscz5vJiZyLmlzc3Vlcy5wdXNoKHtvcmlnaW46ImJpZ2ludCIsaW5wdXQ6cyxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOm8saW5jbHVzaXZlOiEwLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGFsPWQoIiRab2RDaGVja01heFNpemUiLChlLHQpPT57dmFyIG47TC5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1kcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWU7ci5zaXplPD10Lm1heGltdW18fG8uaXNzdWVzLnB1c2goe29yaWdpbjpvbyhyKSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubWF4aW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxjbD1kKCIkWm9kQ2hlY2tNaW5TaXplIiwoZSx0KT0+e3ZhciBuO0wuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49ZHMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlO3Iuc2l6ZT49dC5taW5pbXVtfHxvLmlzc3Vlcy5wdXNoKHtvcmlnaW46b28ociksY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluaW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx1bD1kKCIkWm9kQ2hlY2tTaXplRXF1YWxzIiwoZSx0KT0+e3ZhciBuO0wuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49ZHMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5zaXplO2lmKHM9PT10LnNpemUpcmV0dXJuO2NvbnN0IGk9cz50LnNpemU7by5pc3N1ZXMucHVzaCh7b3JpZ2luOm9vKHIpLC4uLmk/e2NvZGU6InRvb19iaWciLG1heGltdW06dC5zaXplfTp7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQuc2l6ZX0saW5jbHVzaXZlOiEwLGV4YWN0OiEwLGlucHV0Om8udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksbGw9ZCgiJFpvZENoZWNrTWF4TGVuZ3RoIiwoZSx0KT0+e3ZhciBuO0wuaW5pdChlLHQpLChuPWUuX3pvZC5kZWYpLndoZW4/PyhuLndoZW49cHMpLGUuX3pvZC5jaGVjaz1vPT57Y29uc3Qgcj1vLnZhbHVlLHM9ci5sZW5ndGg7aWYoKHR5cGVvZiByPT0ic3RyaW5nIiYmcz50Lm1heGltdW0/cm8ocik6cyk8PXQubWF4aW11bSlyZXR1cm47Y29uc3QgYT1zbyhyKTtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46YSxjb2RlOiJ0b29fYmlnIixtYXhpbXVtOnQubWF4aW11bSxpbmNsdXNpdmU6ITAsaW5wdXQ6cixpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxkbD1kKCIkWm9kQ2hlY2tNaW5MZW5ndGgiLChlLHQpPT57dmFyIG47TC5pbml0KGUsdCksKG49ZS5fem9kLmRlZikud2hlbj8/KG4ud2hlbj1wcyksZS5fem9kLmNoZWNrPW89Pntjb25zdCByPW8udmFsdWUscz1yLmxlbmd0aDtpZigodHlwZW9mIHI9PSJzdHJpbmciJiZzPj10Lm1pbmltdW0mJnM8dC5taW5pbXVtKjI/cm8ocik6cyk+PXQubWluaW11bSlyZXR1cm47Y29uc3QgYT1zbyhyKTtvLmlzc3Vlcy5wdXNoKHtvcmlnaW46YSxjb2RlOiJ0b29fc21hbGwiLG1pbmltdW06dC5taW5pbXVtLGluY2x1c2l2ZTohMCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLHBsPWQoIiRab2RDaGVja0xlbmd0aEVxdWFscyIsKGUsdCk9Pnt2YXIgbjtMLmluaXQoZSx0KSwobj1lLl96b2QuZGVmKS53aGVuPz8obi53aGVuPXBzKSxlLl96b2QuY2hlY2s9bz0+e2NvbnN0IHI9by52YWx1ZSxzPXIubGVuZ3RoLGk9dHlwZW9mIHI9PSJzdHJpbmciJiZzPj10Lmxlbmd0aCYmczw9dC5sZW5ndGgqMj9ybyhyKTpzO2lmKGk9PT10Lmxlbmd0aClyZXR1cm47Y29uc3QgYT1zbyhyKSx1PWk+dC5sZW5ndGg7by5pc3N1ZXMucHVzaCh7b3JpZ2luOmEsLi4udT97Y29kZToidG9vX2JpZyIsbWF4aW11bTp0Lmxlbmd0aH06e2NvZGU6InRvb19zbWFsbCIsbWluaW11bTp0Lmxlbmd0aH0saW5jbHVzaXZlOiEwLGV4YWN0OiEwLGlucHV0Om8udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksanQ9ZCgiJFpvZENoZWNrU3RyaW5nRm9ybWF0IiwoZSx0KT0+e3ZhciBuLG87TC5pbml0KGUsdCksdC5wYXR0ZXJuPyhuPWUuX3pvZCkuY2hlY2s/PyhuLmNoZWNrPXI9Pnt0LnBhdHRlcm4ubGFzdEluZGV4PTAsIXQucGF0dGVybi50ZXN0KHIudmFsdWUpJiZyLmlzc3Vlcy5wdXNoKHtvcmlnaW46InN0cmluZyIsY29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDp0LmZvcm1hdCxpbnB1dDpyLnZhbHVlLC4uLnQucGF0dGVybj97cGF0dGVybjp0LnBhdHRlcm4udG9TdHJpbmcoKX06e30saW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9KToobz1lLl96b2QpLmNoZWNrPz8oby5jaGVjaz0oKT0+e30pfSksZmw9ZCgiJFpvZENoZWNrUmVnZXgiLChlLHQpPT57anQuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dC5wYXR0ZXJuLmxhc3RJbmRleD0wLCF0LnBhdHRlcm4udGVzdChuLnZhbHVlKSYmbi5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InJlZ2V4IixpbnB1dDpuLnZhbHVlLHBhdHRlcm46dC5wYXR0ZXJuLnRvU3RyaW5nKCksaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksaGw9ZCgiJFpvZENoZWNrTG93ZXJDYXNlIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj10bCksanQuaW5pdChlLHQpfSksbWw9ZCgiJFpvZENoZWNrVXBwZXJDYXNlIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1ubCksanQuaW5pdChlLHQpfSksZ2w9ZCgiJFpvZENoZWNrSW5jbHVkZXMiLChlLHQpPT57TC5pbml0KGUsdCk7Y29uc3Qgbj13ZSh0LmluY2x1ZGVzKSxvPW5ldyBSZWdFeHAodHlwZW9mIHQucG9zaXRpb249PSJudW1iZXIiP2BeLnske3QucG9zaXRpb259LH0ke259YDpuKTt0LnBhdHRlcm49byxlLl96b2QuY2hlY2s9cj0+e3IudmFsdWUuaW5jbHVkZXModC5pbmNsdWRlcyx0LnBvc2l0aW9uKXx8ci5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImluY2x1ZGVzIixpbmNsdWRlczp0LmluY2x1ZGVzLGlucHV0OnIudmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksX2w9ZCgiJFpvZENoZWNrU3RhcnRzV2l0aCIsKGUsdCk9PntMLmluaXQoZSx0KTtjb25zdCBuPW5ldyBSZWdFeHAoYF4ke3dlKHQucHJlZml4KX0uKmApO3QucGF0dGVybj8/KHQucGF0dGVybj1uKSxlLl96b2QuY2hlY2s9bz0+e28udmFsdWUuc3RhcnRzV2l0aCh0LnByZWZpeCl8fG8uaXNzdWVzLnB1c2goe29yaWdpbjoic3RyaW5nIixjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJzdGFydHNfd2l0aCIscHJlZml4OnQucHJlZml4LGlucHV0Om8udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksdmw9ZCgiJFpvZENoZWNrRW5kc1dpdGgiLChlLHQpPT57TC5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgUmVnRXhwKGAuKiR7d2UodC5zdWZmaXgpfSRgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49biksZS5fem9kLmNoZWNrPW89PntvLnZhbHVlLmVuZHNXaXRoKHQuc3VmZml4KXx8by5pc3N1ZXMucHVzaCh7b3JpZ2luOiJzdHJpbmciLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImVuZHNfd2l0aCIsc3VmZml4OnQuc3VmZml4LGlucHV0Om8udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gSm4oZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi51ZShuLGUuaXNzdWVzKSl9Y29uc3QgYmw9ZCgiJFpvZENoZWNrUHJvcGVydHkiLChlLHQpPT57TC5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pntjb25zdCBvPXQuc2NoZW1hLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlW3QucHJvcGVydHldLGlzc3VlczpbXX0se30pO2lmKG8gaW5zdGFuY2VvZiBQcm9taXNlKXJldHVybiBvLnRoZW4ocj0+Sm4ocixuLHQucHJvcGVydHkpKTtKbihvLG4sdC5wcm9wZXJ0eSl9fSkseWw9ZCgiJFpvZENoZWNrUHJvcGVydGllcyIsKGUsdCk9PntMLmluaXQoZSx0KSxpbyhlLFN5bWJvbC5pdGVyYXRvcixmdW5jdGlvbiooKXt5aWVsZCBlfSk7bGV0IG47ZS5fem9kLmNoZWNrPW89PntpZihvLnZhbHVlPT1udWxsKXtvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoib2JqZWN0Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om8udmFsdWUsaW5zdDplfSk7cmV0dXJufW4/PyhuPVJlZmxlY3Qub3duS2V5cyh0LnNoYXBlKS5tYXAoaT0+W2ksdC5zaGFwZVtpXV0pKTtjb25zdCByPW8udmFsdWU7bGV0IHM7Zm9yKGNvbnN0W2ksYV1vZiBuKXtjb25zdCB1PWEuX3pvZC5ydW4oe3ZhbHVlOnJbaV0saXNzdWVzOltdfSx7fSk7dSBpbnN0YW5jZW9mIFByb21pc2U/KHM/PyhzPVtdKSxzLnB1c2godS50aGVuKGM9PkpuKGMsbyxpKSkpKTpKbih1LG8saSl9aWYocylyZXR1cm4gUHJvbWlzZS5hbGwocykudGhlbigoKT0+e30pfX0pLHdsPWQoIiRab2RDaGVja01pbWVUeXBlIiwoZSx0KT0+e0wuaW5pdChlLHQpO2NvbnN0IG49bmV3IFNldCh0Lm1pbWUpO2UuX3pvZC5jaGVjaz1vPT57bi5oYXMoby52YWx1ZS50eXBlKXx8by5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsdmFsdWVzOnQubWltZSxpbnB1dDpvLnZhbHVlLnR5cGUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksa2w9ZCgiJFpvZENoZWNrT3ZlcndyaXRlIiwoZSx0KT0+e0wuaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57bi52YWx1ZT10LnR4KG4udmFsdWUpfX0pO2NsYXNzIFNse2NvbnN0cnVjdG9yKHQ9W10sbj17fSl7dGhpcy5jb250ZW50PVtdLHRoaXMuaW5kZW50PTAsdGhpcy5hcmdzPXQsdGhpcy5jbG9zZWQ9bn1pbmRlbnRlZCh0KXt0aGlzLmluZGVudCs9MTt0cnl7dCh0aGlzKX1maW5hbGx5e3RoaXMuaW5kZW50LT0xfX13cml0ZSh0KXtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIil7dCh0aGlzLHtleGVjdXRpb246InN5bmMifSksdCh0aGlzLHtleGVjdXRpb246ImFzeW5jIn0pO3JldHVybn1jb25zdCBvPXQuc3BsaXQoYApgKS5maWx0ZXIoaT0+aSkscj1NYXRoLm1pbiguLi5vLm1hcChpPT5pLmxlbmd0aC1pLnRyaW1TdGFydCgpLmxlbmd0aCkpLHM9by5tYXAoaT0+aS5zbGljZShyKSkubWFwKGk9PiIgIi5yZXBlYXQodGhpcy5pbmRlbnQqMikraSk7Zm9yKGNvbnN0IGkgb2Ygcyl0aGlzLmNvbnRlbnQucHVzaChpKX1jb21waWxlKCl7Y29uc3QgdD1GdW5jdGlvbixuPXRoaXM/LmNvbnRlbnQ/P1siIl07cmV0dXJuIG5ldyB0KC4uLk9iamVjdC5rZXlzKHRoaXMuY2xvc2VkKSxgcmV0dXJuIGZ1bmN0aW9uICgke3RoaXMuYXJncy5qb2luKCIsICIpfSkgewoke24uam9pbihgCmApfQp9O2ApKC4uLk9iamVjdC52YWx1ZXModGhpcy5jbG9zZWQpKX19Y29uc3QgJGw9e21ham9yOjQsbWlub3I6NixwYXRjaDo1fSx6PWQoIiRab2RUeXBlIiwoZSx0KT0+e3ZhciBuO2U/PyhlPXt9KSxlLl96b2QuZGVmPXQsZS5fem9kLmJhZz1lLl96b2QuYmFnfHx7fSxlLl96b2QudmVyc2lvbj0kbDtjb25zdCBvPWUuX3pvZC5kZWYuY2hlY2tzLHI9ZS5fem9kLnRyYWl0cy5oYXMoIiRab2RDaGVjayIpP1tlLC4uLm8/P1tdXTpvPy5sZW5ndGg/Wy4uLm9dOltdO2Zvcihjb25zdCBzIG9mIHIpZm9yKGNvbnN0IGkgb2Ygcy5fem9kLm9uYXR0YWNoKWkoZSk7aWYoci5sZW5ndGg9PT0wKShuPWUuX3pvZCkuZGVmZXJyZWQ/PyhuLmRlZmVycmVkPVtdKSxlLl96b2QuZGVmZXJyZWQ/LnB1c2goKCk9PntlLl96b2QucnVuPWUuX3pvZC5wYXJzZX0pO2Vsc2V7Y29uc3Qgcz0oYSx1LGMpPT57aWYoYS5tZW1vKXJldHVybiBhO2xldCBsPW5lKGEpLGg7Zm9yKGNvbnN0IGcgb2YgdSl7aWYoZy5fem9kLmRlZi53aGVuKXtpZihkdShhKXx8IWcuX3pvZC5kZWYud2hlbihhKSljb250aW51ZX1lbHNlIGlmKGwpY29udGludWU7Y29uc3QgXz1hLmlzc3Vlcy5sZW5ndGgsYj1nLl96b2QuY2hlY2soYSk7aWYoYiBpbnN0YW5jZW9mIFByb21pc2UmJmM/LmFzeW5jPT09ITEpdGhyb3cgbmV3IHhlO2lmKGh8fGIgaW5zdGFuY2VvZiBQcm9taXNlKWg9KGg/P1Byb21pc2UucmVzb2x2ZSgpKS50aGVuKGFzeW5jKCk9Pnthd2FpdCBiLGEuaXNzdWVzLmxlbmd0aCE9PV8mJihScihhLmlzc3VlcyxfLGUpLGx8fChsPW5lKGEsXykpKX0pO2Vsc2V7aWYoYS5pc3N1ZXMubGVuZ3RoPT09Xyljb250aW51ZTtScihhLmlzc3VlcyxfLGUpLGx8fChsPW5lKGEsXykpfX1yZXR1cm4gaD9oLnRoZW4oKCk9PmEpOmF9LGk9KGEsdSxjKT0+e2lmKG5lKGEpKXJldHVybiBhLmFib3J0ZWQ9ITAsYTtjb25zdCBsPXModSxyLGMpO2lmKGwgaW5zdGFuY2VvZiBQcm9taXNlKXtpZihjLmFzeW5jPT09ITEpdGhyb3cgbmV3IHhlO3JldHVybiBsLnRoZW4oaD0+ZS5fem9kLnBhcnNlKGgsYykpfXJldHVybiBlLl96b2QucGFyc2UobCxjKX07ZS5fem9kLnJ1bj0oYSx1KT0+e2lmKHUuc2tpcENoZWNrcylyZXR1cm4gZS5fem9kLnBhcnNlKGEsdSk7aWYodS5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXtjb25zdCBsPWUuX3pvZC5wYXJzZSh7dmFsdWU6YS52YWx1ZSxpc3N1ZXM6W119LHsuLi51LHNraXBDaGVja3M6ITB9KTtyZXR1cm4gbCBpbnN0YW5jZW9mIFByb21pc2U/bC50aGVuKGg9PmkoaCxhLHUpKTppKGwsYSx1KX1jb25zdCBjPWUuX3pvZC5wYXJzZShhLHUpO2lmKGMgaW5zdGFuY2VvZiBQcm9taXNlKXtpZih1LmFzeW5jPT09ITEpdGhyb3cgbmV3IHhlO3JldHVybiBjLnRoZW4obD0+cyhsLHIsdSkpfXJldHVybiBzKGMscix1KX19fSx7Z2V0In5zdGFuZGFyZCIoKXtyZXR1cm4gaW8odGhpcywifnN0YW5kYXJkIixtcyh0aGlzKSl9LHNldCJ+c3RhbmRhcmQiKGUpe2tlKHRoaXMsIn5zdGFuZGFyZCIsZSl9fSksemw9KGUsdCk9PmUuaXNzdWVzLmxlbmd0aD97aXNzdWVzOmUuaXNzdWVzLm1hcChuPT5wZShuLHQsVigpKSl9Ont2YWx1ZTplLnZhbHVlfTthc3luYyBmdW5jdGlvbiBYaChlLHQpe2NvbnN0IG49e2FzeW5jOiEwfTtyZXR1cm4gemwoYXdhaXQgZS5fem9kLnJ1bih7dmFsdWU6dCxpc3N1ZXM6W119LG4pLG4pfWZ1bmN0aW9uIG1zKGUpe3JldHVybnt2YWxpZGF0ZTp0PT57Y29uc3Qgbj17YXN5bmM6ITF9O3RyeXtjb25zdCBvPWUuX3pvZC5ydW4oe3ZhbHVlOnQsaXNzdWVzOltdfSxuKTtpZighKG8gaW5zdGFuY2VvZiBQcm9taXNlKSlyZXR1cm4gemwobyxuKX1jYXRjaHt9cmV0dXJuIFhoKGUsdCl9LHZlbmRvcjoiem9kIix2ZXJzaW9uOjF9fWNvbnN0IE10PWQoIiRab2RTdHJpbmciLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49dC5wYXR0ZXJuPz9LdSxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1TdHJpbmcobi52YWx1ZSl9Y2F0Y2h7fXJldHVybiB0eXBlb2Ygbi52YWx1ZT09InN0cmluZyJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJzdHJpbmciLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6bi52YWx1ZSxpbnN0OmV9KSxufX0pLE09ZCgiJFpvZFN0cmluZ0Zvcm1hdCIsKGUsdCk9PntqdC5pbml0KGUsdCksTXQuaW5pdChlLHQpfSksVGw9ZCgiJFpvZEdVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVJ1KSxNLmluaXQoZSx0KX0pLFBsPWQoIiRab2RVVUlEIiwoZSx0KT0+e2lmKHQudmVyc2lvbil7Y29uc3Qgbz17djE6MSx2MjoyLHYzOjMsdjQ6NCx2NTo1LHY2OjYsdjc6Nyx2ODo4fVt0LnZlcnNpb25dO2lmKG89PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFVVSUQgdmVyc2lvbjogIiR7dC52ZXJzaW9ufSJgKTt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49V2UobykpfWVsc2UgdC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVdlKCkpO00uaW5pdChlLHQpfSkseGw9ZCgiJFpvZEVtYWlsIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1adSksTS5pbml0KGUsdCl9KSxncz0xLCR0PTI7ZnVuY3Rpb24gX3MoZSl7dHJ5e3JldHVybiB0eXBlb2YgVVJMPCJ1IiYmdHlwZW9mIFVSTC5jYW5QYXJzZT09ImZ1bmN0aW9uIj9VUkwuY2FuUGFyc2UoZSk6KG5ldyBVUkwoZSksITApfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBJbChlLHQpe3JldHVybiEoIm5vcm1hbGl6ZSJpbiB0KSYmISgiaG9zdG5hbWUiaW4gdCkmJiEoInByb3RvY29sImluIHQpP19zKGUpfHwkdDpFbChlLHQpfWZ1bmN0aW9uIEVsKGUsdCl7aWYoIXQubm9ybWFsaXplJiZ0LnByb3RvY29sPy5zb3VyY2U9PT1jcy5zb3VyY2UmJiEvXmh0dHBzPzpcL1wvL2kudGVzdChlKSlyZXR1cm4gZ3M7dHJ5e2lmKHR5cGVvZiBVUkw8InUiKXtjb25zdCBuPVVSTDtpZih0eXBlb2Ygbi5wYXJzZT09ImZ1bmN0aW9uIilyZXR1cm4gbi5wYXJzZShlKT8/JHR9cmV0dXJuIG5ldyBVUkwoZSl9Y2F0Y2h7cmV0dXJuICR0fX1jb25zdCBlbT0vW1x0XG5ccl0vZztmdW5jdGlvbiBBcihlKXtyZXR1cm4gZS5yZXBsYWNlKGVtLCIiKX1mdW5jdGlvbiBSbChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLmhvc3RuYW1lKX1mdW5jdGlvbiBabChlLHQpe3JldHVybiB0Lmxhc3RJbmRleD0wLHQudGVzdChlLnByb3RvY29sLmVuZHNXaXRoKCI6Iik/ZS5wcm90b2NvbC5zbGljZSgwLC0xKTplLnByb3RvY29sKX1jb25zdCBDbD1kKCIkWm9kVVJMIiwoZSx0KT0+e00uaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57dHJ5e2NvbnN0IG89bi52YWx1ZS50cmltKCkscj1JbChvLHQpO2lmKHI9PT1ncyl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIFVSTCBmb3JtYXQiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSk7cmV0dXJufWlmKHI9PT0kdCl7bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pO3JldHVybn1pZihyPT09ITApe24udmFsdWU9QXIobyk7cmV0dXJufXQuaG9zdG5hbWUmJiFSbChyLHQuaG9zdG5hbWUpJiZuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJ1cmwiLG5vdGU6IkludmFsaWQgaG9zdG5hbWUiLHBhdHRlcm46dC5ob3N0bmFtZS5zb3VyY2UsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KSx0LnByb3RvY29sJiYhWmwocix0LnByb3RvY29sKSYmbi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoidXJsIixub3RlOiJJbnZhbGlkIHByb3RvY29sIixwYXR0ZXJuOnQucHJvdG9jb2wuc291cmNlLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSksbi52YWx1ZT10Lm5vcm1hbGl6ZT9yLmhyZWY6QXIobyk7cmV0dXJufWNhdGNoe24uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6InVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19fSksT2w9ZCgiJFpvZEVtb2ppIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1PdSgpKSxNLmluaXQoZSx0KX0pLEFsPWQoIiRab2ROYW5vSUQiLChlLHQpPT57aWYodC5sZW5ndGghPT12b2lkIDAmJighTnVtYmVyLmlzSW50ZWdlcih0Lmxlbmd0aCl8fHQubGVuZ3RoPDEpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuYW5vaWQgbGVuZ3RoOiAke3QubGVuZ3RofWApO3QucGF0dGVybj8/KHQucGF0dGVybj10Lmxlbmd0aD09PXZvaWQgMD94dTpJdSh0Lmxlbmd0aCkpLE0uaW5pdChlLHQpfSksTmw9ZCgiJFpvZENVSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVN1KSxNLmluaXQoZSx0KX0pLGpsPWQoIiRab2RDVUlEMiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49JHUpLE0uaW5pdChlLHQpfSksTWw9ZCgiJFpvZFVMSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPXp1KSxNLmluaXQoZSx0KX0pLERsPWQoIiRab2RYSUQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVR1KSxNLmluaXQoZSx0KX0pLHFsPWQoIiRab2RLU1VJRCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49UHUpLE0uaW5pdChlLHQpfSksTGw9ZCgiJFpvZElTT0RhdGVUaW1lIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1KdSh0KSksTS5pbml0KGUsdCl9KSxVbD1kKCIkWm9kSVNPRGF0ZSIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49QnUpLE0uaW5pdChlLHQpfSksSGw9ZCgiJFpvZElTT1RpbWUiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPVZ1KHQpKSxNLmluaXQoZSx0KX0pLEZsPWQoIiRab2RJU09EdXJhdGlvbiIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49RXUpLE0uaW5pdChlLHQpfSksQmw9ZCgiJFpvZElQdjQiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUF1KSxNLmluaXQoZSx0KX0pLHRtPS9eWzAtOWEtZkEtRjouXSskLztmdW5jdGlvbiB2cyhlKXtyZXR1cm4gdG0udGVzdChlKT9fcyhgaHR0cDovL1ske2V9XWApOiExfWNvbnN0IFZsPWQoIiRab2RJUHY2IiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1OdSksTS5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt2cyhuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaXB2NiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSxKbD1kKCIkWm9kTUFDIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1qdSh0LmRlbGltaXRlcikpLE0uaW5pdChlLHQpfSksS2w9ZCgiJFpvZENJRFJ2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49TXUpLE0uaW5pdChlLHQpfSk7ZnVuY3Rpb24gV2woZSl7Y29uc3QgdD1lLnNwbGl0KCIvIik7aWYodC5sZW5ndGghPT0yKXJldHVybiExO2NvbnN0W24sb109dDtpZighbylyZXR1cm4hMTtjb25zdCByPU51bWJlcihvKTtyZXR1cm5gJHtyfWAhPT1vfHxyPDB8fHI+MTI4PyExOnZzKG4pfWNvbnN0IEdsPWQoIiRab2RDSURSdjYiLChlLHQpPT57dC5wYXR0ZXJuPz8odC5wYXR0ZXJuPUR1KSxNLmluaXQoZSx0KSxlLl96b2QuY2hlY2s9bj0+e1dsKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OiJjaWRydjYiLGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSk7ZnVuY3Rpb24gYnMoZSl7aWYoZT09PSIiKXJldHVybiEwO2lmKC9ccy8udGVzdChlKXx8ZS5sZW5ndGglNCE9PTApcmV0dXJuITE7dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX1jb25zdCBRbD0vXlswLTlhLXpBLVorL10qPXswLDJ9JC8sWWw9ZCgiJFpvZEJhc2U2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49UWwpLE0uaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57YnMobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx5cz0vXltBLVphLXowLTlfLV0qJC87ZnVuY3Rpb24gWGwoZSl7aWYoIXlzLnRlc3QoZSkpcmV0dXJuITE7Y29uc3QgdD1lLnJlcGxhY2UoL1stX10vZyxvPT5vPT09Ii0iPyIrIjoiLyIpLG49dC5wYWRFbmQoTWF0aC5jZWlsKHQubGVuZ3RoLzQpKjQsIj0iKTtyZXR1cm4gYnMobil9Y29uc3QgZWQ9ZCgiJFpvZEJhc2U2NFVSTCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49eXMpLE0uaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57WGwobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImJhc2U2NHVybCIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KSx0ZD1kKCIkWm9kRTE2NCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49VXUpLE0uaW5pdChlLHQpfSksbm09L1stIF0vZztmdW5jdGlvbiBvbShlKXtsZXQgdD1lLmxlbmd0aCxuPTEsbz0wO2Zvcig7dDspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KC0tdCktNDg7bl49MSxvKz1uP1swLDIsNCw2LDgsMSwzLDUsNyw5XVtyXTpyfXJldHVybiBvJTEwPT09MH1mdW5jdGlvbiBuZChlKXtyZXR1cm4gdXMudGVzdChlKT9vbShlLnJlcGxhY2Uobm0sIiIpKTohMX1jb25zdCBvZD1kKCIkWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9Pnt0LnBhdHRlcm4/Pyh0LnBhdHRlcm49dXMpLE0uaW5pdChlLHQpLGUuX3pvZC5jaGVjaz1uPT57bmQobi52YWx1ZSl8fG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6ImNyZWRpdF9jYXJkIixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pO2Z1bmN0aW9uIHJtKGUpe2xldCB0PTA7Y29uc3Qgbj1lLmxlbmd0aDtmb3IobGV0IG89NDtvPG47bysrKXtjb25zdCByPWUuY2hhckNvZGVBdChvKTt0PShyPj02NT90KjEwMCsoci01NSk6dCoxMCsoci00OCkpJTk3fWZvcihsZXQgbz0wO288NDtvKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG8pO3Q9KHI+PTY1P3QqMTAwKyhyLTU1KTp0KjEwKyhyLTQ4KSklOTd9cmV0dXJuIHQ9PT0xfWZ1bmN0aW9uIHJkKGUpe3JldHVybiBscy50ZXN0KGUpP3JtKGUpOiExfWNvbnN0IHNkPWQoIiRab2RJQkFOIiwoZSx0KT0+e3QucGF0dGVybj8/KHQucGF0dGVybj1scyksTS5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntyZChuLnZhbHVlKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiaWJhbiIsaW5wdXQ6bi52YWx1ZSxpbnN0OmUsY29udGludWU6IXQuYWJvcnR9KX19KTtmdW5jdGlvbiBpZChlLHQ9bnVsbCl7dHJ5e2NvbnN0IG49ZS5zcGxpdCgiLiIpO2lmKG4ubGVuZ3RoIT09MylyZXR1cm4hMTtjb25zdFtvXT1uO2lmKCFvKXJldHVybiExO2NvbnN0IHI9SlNPTi5wYXJzZShhdG9iKG8pKTtyZXR1cm4hKCJ0eXAiaW4gciYmcj8udHlwIT09IkpXVCJ8fCFyLmFsZ3x8dCYmKCEoImFsZyJpbiByKXx8ci5hbGchPT10KSl9Y2F0Y2h7cmV0dXJuITF9fWNvbnN0IGFkPWQoIiRab2RKV1QiLChlLHQpPT57TS5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49PntpZChuLnZhbHVlLHQuYWxnKXx8bi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF9mb3JtYXQiLGZvcm1hdDoiand0IixpbnB1dDpuLnZhbHVlLGluc3Q6ZSxjb250aW51ZTohdC5hYm9ydH0pfX0pLGNkPWQoIiRab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57TS5pbml0KGUsdCksZS5fem9kLmNoZWNrPW49Pnt0LmZuKG4udmFsdWUpfHxuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2Zvcm1hdCIsZm9ybWF0OnQuZm9ybWF0LGlucHV0Om4udmFsdWUsaW5zdDplLGNvbnRpbnVlOiF0LmFib3J0fSl9fSksd3M9ZCgiJFpvZE51bWJlciIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1obyxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT1OdW1iZXIobi52YWx1ZSl9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtpZih0eXBlb2Ygcj09Im51bWJlciImJiFOdW1iZXIuaXNOYU4ocikmJk51bWJlci5pc0Zpbml0ZShyKSlyZXR1cm4gbjtjb25zdCBzPXR5cGVvZiByPT0ibnVtYmVyIj9OdW1iZXIuaXNOYU4ocik/Ik5hTiI6TnVtYmVyLmlzRmluaXRlKHIpP3ZvaWQgMDpTdHJpbmcocik6dm9pZCAwO3JldHVybiBuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibnVtYmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplLC4uLnM/e3JlY2VpdmVkOnN9Ont9fSksbn19KSx1ZD1kKCIkWm9kTnVtYmVyRm9ybWF0IiwoZSx0KT0+e3NsLmluaXQoZSx0KSx3cy5pbml0KGUsdCl9KSxrcz1kKCIkWm9kQm9vbGVhbiIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGF0dGVybj1ZdSxlLl96b2QucGFyc2U9KG4sbyk9PntpZih0LmNvZXJjZSl0cnl7bi52YWx1ZT0hIW4udmFsdWV9Y2F0Y2h7fWNvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJib29sZWFuInx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImJvb2xlYW4iLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLFNzPWQoIiRab2RCaWdJbnQiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhdHRlcm49R3UsZS5fem9kLnBhcnNlPShuLG8pPT57aWYodC5jb2VyY2UpdHJ5e24udmFsdWU9QmlnSW50KG4udmFsdWUpfWNhdGNoe31yZXR1cm4gdHlwZW9mIG4udmFsdWU9PSJiaWdpbnQifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoiYmlnaW50Iixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbn19KSxsZD1kKCIkWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e2lsLmluaXQoZSx0KSxTcy5pbml0KGUsdCl9KSxkZD1kKCIkWm9kU3ltYm9sIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gdHlwZW9mIHI9PSJzeW1ib2wifHxuLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoic3ltYm9sIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxwZD1kKCIkWm9kVW5kZWZpbmVkIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPWVsLGUuX3pvZC52YWx1ZXM9bmV3IFNldChbdm9pZCAwXSksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiB0eXBlb2Ygcj4idSJ8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJ1bmRlZmluZWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLGZkPWQoIiRab2ROdWxsIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXR0ZXJuPVh1LGUuX3pvZC52YWx1ZXM9bmV3IFNldChbbnVsbF0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9bi52YWx1ZTtyZXR1cm4gcj09PW51bGx8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJudWxsIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsaW5zdDplfSksbn19KSxoZD1kKCIkWm9kQW55IiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT1uPT5ufSksbWQ9ZCgiJFpvZFVua25vd24iLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPW49Pm59KSxnZD1kKCIkWm9kTmV2ZXIiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT4obi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6Im5ldmVyIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0Om4udmFsdWUsaW5zdDplfSksbil9KSxfZD1kKCIkWm9kVm9pZCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWU7cmV0dXJuIHR5cGVvZiByPiJ1Inx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InZvaWQiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLHZkPWQoIiRab2REYXRlIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKHQuY29lcmNlKXRyeXtuLnZhbHVlPW5ldyBEYXRlKG4udmFsdWUpfWNhdGNoe31jb25zdCByPW4udmFsdWUscz1yIGluc3RhbmNlb2YgRGF0ZTtyZXR1cm4gcyYmIU51bWJlci5pc05hTihyLmdldFRpbWUoKSl8fG4uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJkYXRlIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnIsLi4ucz97cmVjZWl2ZWQ6IkludmFsaWQgRGF0ZSJ9Ont9LGluc3Q6ZX0pLG59fSk7ZnVuY3Rpb24gZmMoZSx0LG4pe2UuaXNzdWVzLmxlbmd0aCYmdC5pc3N1ZXMucHVzaCguLi51ZShuLGUuaXNzdWVzKSksdC52YWx1ZVtuXT1lLnZhbHVlfWNvbnN0IGJkPWQoIiRab2RBcnJheSIsKGUsdCk9Pnt6LmluaXQoZSx0KTtjb25zdCBuPWVlLm1lbW9pemVyO24/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KG8scik9Pntjb25zdCBzPW8udmFsdWU7aWYoIUFycmF5LmlzQXJyYXkocykpcmV0dXJuIG8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJhcnJheSIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87by52YWx1ZT1uP24uYWxsb2MoZSxvLEFycmF5KHMubGVuZ3RoKSxyKTpBcnJheShzLmxlbmd0aCk7Y29uc3QgaT1bXSxhPXI/LmFib3J0RWFybHk7Zm9yKGxldCB1PTA7dTxzLmxlbmd0aDt1Kyspe2NvbnN0IGM9c1t1XSxsPXQuZWxlbWVudC5fem9kLnJ1bih7dmFsdWU6Yyxpc3N1ZXM6W119LHIpO2lmKGwgaW5zdGFuY2VvZiBQcm9taXNlKWkucHVzaChsLnRoZW4oaD0+ZmMoaCxvLHUpKSk7ZWxzZSBpZihmYyhsLG8sdSksYSYmbC5pc3N1ZXMubGVuZ3RoIT09MCYmbmUobCkpYnJlYWt9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24gS24oZSx0LG4sbyxyLHMpe2NvbnN0IGk9biBpbiBvLGE9cz09PSJvcHRpb25hbCI7aWYoISghaSYmYSYmcj09PSJvcHRpb25hbCIpKXtpZihlLmlzc3Vlcy5sZW5ndGgpe2lmKHIhPT12b2lkIDAmJmEmJiFpKXJldHVybjt0Lmlzc3Vlcy5wdXNoKC4uLnVlKG4sZS5pc3N1ZXMpKX1pZighaSYmcj09PXZvaWQgMCl7ZS5pc3N1ZXMubGVuZ3RofHx0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6dm9pZCAwLHBhdGg6W25dfSk7cmV0dXJufWUudmFsdWU9PT12b2lkIDA/KGl8fHI9PT0iZGVmYXVsdGVkIiYmIWEpJiYodC52YWx1ZVtuXT12b2lkIDApOnQudmFsdWVbbl09ZS52YWx1ZX19Y29uc3Qgc209W107ZnVuY3Rpb24geWQoZSl7Y29uc3QgdD1PYmplY3Qua2V5cyhlLnNoYXBlKSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZS5zaGFwZSksbz1uLmxlbmd0aD9uOnNtLHI9by5sZW5ndGg/Wy4uLnQsLi4ub106dDtmb3IoY29uc3QgaSBvZiByKWlmKCFlLnNoYXBlPy5baV0/Ll96b2Q/LnRyYWl0cz8uaGFzKCIkWm9kVHlwZSIpKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IGF0IGtleSAiJHtTdHJpbmcoaSl9IjogZXhwZWN0ZWQgYSBab2Qgc2NoZW1hYCk7Y29uc3Qgcz10dShlLnNoYXBlKTtyZXR1cm57Li4uZSxhbGxLZXlzOnIsc3ltYm9sS2V5czpvLGtleVNldDpuZXcgU2V0KHQpLG51bUtleXM6dC5sZW5ndGgsb3B0aW9uYWxLZXlzOm5ldyBTZXQocyl9fWZ1bmN0aW9uIHdkKGUsdCxuLG8scixzLGkpe2NvbnN0IGE9W10sdT1yLmtleVNldCxjPXIuY2F0Y2hhbGwuX3pvZCxsPWMuZGVmLnR5cGUsaD1jLm9wdGluLGc9Yy5vcHRvdXQ7bGV0IF89MDtmb3IoY29uc3QgYiBpbiB0KXtpZihpJiZuLmlzc3Vlcy5sZW5ndGghPT1fKXtpZihuZShuLF8pKWJyZWFrO189bi5pc3N1ZXMubGVuZ3RofWlmKHUuaGFzKGIpKWNvbnRpbnVlO2lmKGI9PT0iX19wcm90b19fIil7bD09PSJuZXZlciImJmEucHVzaChiKTtjb250aW51ZX1pZihsPT09Im5ldmVyIil7YS5wdXNoKGIpO2NvbnRpbnVlfWNvbnN0IGs9Yy5ydW4oe3ZhbHVlOnRbYl0saXNzdWVzOltdfSxvKTtrIGluc3RhbmNlb2YgUHJvbWlzZT9lLnB1c2goay50aGVuKCQ9PktuKCQsbixiLHQsaCxnKSkpOktuKGssbixiLHQsaCxnKX1yZXR1cm4gYS5sZW5ndGgmJm4uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOmEsaW5wdXQ6dCxpbnN0OnMsY29udGludWU6ITB9KSxlLmxlbmd0aD9Qcm9taXNlLmFsbChlKS50aGVuKCgpPT5uKTpufWNvbnN0IGtkPWQoIiRab2RPYmplY3QiLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsInNoYXBlIiksbz1uPy5nZXQ/bi5nZXQucmF3OnQuc2hhcGU/P3t9O2lmKG8pe2NvbnN0IGM9KCk9Pntjb25zdCBsPXsuLi5vfTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsInNoYXBlIix7dmFsdWU6bH0pLGMucmF3PWwsbH07Yy5yYXc9byxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwic2hhcGUiLHtnZXQ6Y30pfWNvbnN0IHI9SXQoKCk9PnlkKHQpKTtJKGUsInByb3BWYWx1ZXMiLGM9Pntjb25zdCBsPWMuZGVmLnNoYXBlLGg9e307Zm9yKGNvbnN0IGcgaW4gbCl7Y29uc3QgXz1sW2ddLl96b2Q7aWYoXy52YWx1ZXMpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChoLGcpfHxVZShoLGcsbmV3IFNldCk7Zm9yKGNvbnN0IGIgb2YgXy52YWx1ZXMpaFtnXS5hZGQoYik7Xy5vcHRpbiE9PXZvaWQgMCYmaFtnXS5hZGQodm9pZCAwKX19cmV0dXJuIGh9KTtjb25zdCBzPUplLGk9dC5jYXRjaGFsbDtsZXQgYTtjb25zdCB1PWVlLm1lbW9pemVyO3U/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KGMsbCk9PnthPz8oYT1yLnZhbHVlKTtjb25zdCBoPWMudmFsdWU7aWYoIXMoaCkpcmV0dXJuIGMuaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6aCxpbnN0OmV9KSxjO2MudmFsdWU9dT91LmFsbG9jKGUsYyx7fSxsKTp7fTtjb25zdCBnPVtdLF89YS5zaGFwZSxiPWw/LmFib3J0RWFybHk7bGV0IGs9Yy5pc3N1ZXMubGVuZ3RoO2Zvcihjb25zdCAkIG9mIGEuYWxsS2V5cyl7aWYoYiYmYy5pc3N1ZXMubGVuZ3RoIT09ayl7aWYobmUoYyxrKSlicmVhaztrPWMuaXNzdWVzLmxlbmd0aH1pZigkPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgTj1fWyRdLFI9Ti5fem9kLm9wdGluLEg9Ti5fem9kLm9wdG91dCx0ZT1OLl96b2QucnVuKHt2YWx1ZTpoWyRdLGlzc3VlczpbXX0sbCk7dGUgaW5zdGFuY2VvZiBQcm9taXNlP2cucHVzaCh0ZS50aGVuKEY9PktuKEYsYywkLGgsUixIKSkpOktuKHRlLGMsJCxoLFIsSCl9cmV0dXJuIGk/d2QoZyxoLGMsbCxyLnZhbHVlLGUsYj09PSEwKTpnLmxlbmd0aD9Qcm9taXNlLmFsbChnKS50aGVuKCgpPT5jKTpjfX0pLFNkPWQoIiRab2RPYmplY3RKSVQiLChlLHQpPT57a2QuaW5pdChlLHQpO2NvbnN0IG49ZS5fem9kLnBhcnNlLG89SXQoKCk9PnlkKHQpKSxyPWVlLm1lbW9pemVyLHM9Xz0+e2NvbnN0IGI9by52YWx1ZSxrPWIuc3ltYm9sS2V5cywkPW5ldyBTbChbInBheWxvYWQiLCJjdHgiXSx7c2hhcGU6XyxpbnN0OmUsbWVtbzpyLHN5bXM6a30pLE49Rj0+YHNoYXBlWyR7Rn1dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7Rn1dLCBpc3N1ZXM6IFtdIH0sIGN0eClgLFI9KEYscSk9PmAKICAgICAgICAgIGxldCAke0Z9X2FiID0gZmFsc2U7CiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR7Rn0uaXNzdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNvbnN0IGlzcyA9ICR7Rn0uaXNzdWVzW2ldOwogICAgICAgICAgICBpc3MucGF0aCA9IGlzcy5wYXRoID8gWyR7cX0sIC4uLmlzcy5wYXRoXSA6IFske3F9XTsKICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaChpc3MpOwogICAgICAgICAgICBpZiAoaXNzLmNvbnRpbnVlICE9PSB0cnVlKSAke0Z9X2FiID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgke0Z9X2FiICYmIGN0eCAmJiBjdHguYWJvcnRFYXJseSkgewogICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0OwogICAgICAgICAgICByZXR1cm4gcGF5bG9hZDsKICAgICAgICAgIH1gOyQud3JpdGUoImNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTsiKTtjb25zdCBIPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHRlPTA7Zm9yKGNvbnN0IEYgb2YgYi5hbGxLZXlzKUhbRl09YGtleV8ke3RlKyt9YDskLndyaXRlKHI/ImNvbnN0IG5ld1Jlc3VsdCA9IG1lbW8uYWxsb2MoaW5zdCwgcGF5bG9hZCwge30sIGN0eCk7IjoiY29uc3QgbmV3UmVzdWx0ID0ge307Iik7Zm9yKGNvbnN0IEYgb2YgYi5hbGxLZXlzKXtpZihGPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgcT1IW0ZdLHZlPXR5cGVvZiBGPT0ic3ltYm9sIj9gc3ltc1ske2suaW5kZXhPZihGKX1dYDpRYyhGKSx5cj1gJHt2ZX0gaW4gaW5wdXRgLGljPV9bRl0sd3I9aWM/Ll96b2Q/Lm9wdGluLGFjPXdyIT09dm9pZCAwLENmPWljPy5fem9kPy5vcHRvdXQ9PT0ib3B0aW9uYWwiO2lmKCQud3JpdGUoYGNvbnN0ICR7cX0gPSAke04odmUpfTtgKSxhYyYmQ2Ype2NvbnN0IE9mPXdyPT09Im9wdGlvbmFsIj9gJHtxfV9wcmVzZW50YDpgJHtxfS52YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICR7cX1fcHJlc2VudGA7JC53cml0ZShgCiAgICAgICAgY29uc3QgJHtxfV9wcmVzZW50ID0gJHt5cn07CiAgICAgICAgaWYgKCEke3F9Lmlzc3Vlcy5sZW5ndGggfHwgJHtxfV9wcmVzZW50KSB7CiAgICAgICAgICBpZiAoJHtxfS5pc3N1ZXMubGVuZ3RoKSB7JHtSKHEsdmUpfQogICAgICAgICAgfQoKICAgICAgICAgIGlmICgke09mfSkgewogICAgICAgICAgICBuZXdSZXN1bHRbJHt2ZX1dID0gJHtxfS52YWx1ZTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICBgKX1lbHNlIGFjPygkLndyaXRlKGAKICAgICAgICBpZiAoJHtxfS5pc3N1ZXMubGVuZ3RoKSB7JHtSKHEsdmUpfQogICAgICAgIH0KICAgICAgYCksd3I9PT0iZGVmYXVsdGVkIj8kLndyaXRlKGBuZXdSZXN1bHRbJHt2ZX1dID0gJHtxfS52YWx1ZTtgKTokLndyaXRlKGAKICAgICAgICBpZiAoJHtxfS52YWx1ZSAhPT0gdW5kZWZpbmVkIHx8ICR7eXJ9KSB7CiAgICAgICAgICBuZXdSZXN1bHRbJHt2ZX1dID0gJHtxfS52YWx1ZTsKICAgICAgICB9CiAgICAgIGApKTokLndyaXRlKGAKICAgICAgICBjb25zdCAke3F9X3ByZXNlbnQgPSAke3lyfTsKICAgICAgICBpZiAoJHtxfS5pc3N1ZXMubGVuZ3RoKSB7JHtSKHEsdmUpfQogICAgICAgIH0KICAgICAgICBpZiAoISR7cX1fcHJlc2VudCAmJiAhJHtxfS5pc3N1ZXMubGVuZ3RoKSB7CiAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHsKICAgICAgICAgICAgY29kZTogImludmFsaWRfdHlwZSIsCiAgICAgICAgICAgIGV4cGVjdGVkOiAibm9ub3B0aW9uYWwiLAogICAgICAgICAgICBpbnB1dDogdW5kZWZpbmVkLAogICAgICAgICAgICBwYXRoOiBbJHt2ZX1dCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmIChjdHggJiYgY3R4LmFib3J0RWFybHkpIHsKICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG5ld1Jlc3VsdDsKICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJHtxfV9wcmVzZW50KSB7CiAgICAgICAgICBuZXdSZXN1bHRbJHt2ZX1dID0gJHtxfS52YWx1ZTsKICAgICAgICB9CgogICAgICBgKX1yZXR1cm4gJC53cml0ZSgicGF5bG9hZC52YWx1ZSA9IG5ld1Jlc3VsdDsiKSwkLndyaXRlKCJyZXR1cm4gcGF5bG9hZDsiKSwkLmNvbXBpbGUoKX07bGV0IGk7Y29uc3QgYT1KZSx1PSFlZS5qaXRsZXNzLGw9dSYmWGMudmFsdWUsaD10LmNhdGNoYWxsO2xldCBnO2UuX3pvZC5wYXJzZT0oXyxiKT0+e2c/PyhnPW8udmFsdWUpO2NvbnN0IGs9Xy52YWx1ZTtyZXR1cm4gYShrKT91JiZsJiZiPy5hc3luYz09PSExJiZiLmppdGxlc3MhPT0hMD8oaXx8KGk9cyh0LnNoYXBlKSksXz1pKF8sYiksaD93ZChbXSxrLF8sYixnLGUsYj8uYWJvcnRFYXJseT09PSEwKTpfKTpuKF8sYik6KF8uaXNzdWVzLnB1c2goe2V4cGVjdGVkOiJvYmplY3QiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6ayxpbnN0OmV9KSxfKX19KTtmdW5jdGlvbiBoYyhlLHQsbixvKXtmb3IoY29uc3QgcyBvZiBlKWlmKHMuaXNzdWVzLmxlbmd0aD09PTApcmV0dXJuIHQudmFsdWU9cy52YWx1ZSx0O2NvbnN0IHI9ZS5maWx0ZXIocz0+IW5lKHMpKTtyZXR1cm4gci5sZW5ndGg9PT0xPyh0LnZhbHVlPXJbMF0udmFsdWUsclswXSk6KHQuaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdW5pb24iLGlucHV0OnQudmFsdWUsaW5zdDpuLGVycm9yczplLm1hcChzPT5zLmlzc3Vlcy5tYXAoaT0+cGUoaSxvLFYoKSkpKX0pLHQpfWNvbnN0IGdvPWQoIiRab2RVbmlvbiIsKGUsdCk9Pnt6LmluaXQoZSx0KSxJKGUsIm9wdGluIixvPT5vLmRlZi5vcHRpb25zLnNvbWUocj0+ci5fem9kLm9wdGluPT09ImRlZmF1bHRlZCIpPyJkZWZhdWx0ZWQiOm8uZGVmLm9wdGlvbnMuc29tZShyPT5yLl96b2Qub3B0aW4hPT12b2lkIDApPyJvcHRpb25hbCI6dm9pZCAwKSxJKGUsIm9wdG91dCIsbz0+by5kZWYub3B0aW9ucy5zb21lKHI9PnIuX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKT8ib3B0aW9uYWwiOnZvaWQgMCksSShlLCJ2YWx1ZXMiLG89PntpZihvLmRlZi5vcHRpb25zLmV2ZXJ5KHI9PnIuX3pvZC52YWx1ZXMpKXJldHVybiBuZXcgU2V0KG8uZGVmLm9wdGlvbnMuZmxhdE1hcChyPT5BcnJheS5mcm9tKHIuX3pvZC52YWx1ZXMpKSl9KSxJKGUsInBhdHRlcm4iLG89PntpZihvLmRlZi5vcHRpb25zLmV2ZXJ5KHI9PnIuX3pvZC5wYXR0ZXJuKSl7Y29uc3Qgcj1vLmRlZi5vcHRpb25zLm1hcChzPT5zLl96b2QucGF0dGVybik7cmV0dXJuIG5ldyBSZWdFeHAoYF4oJHtyLm1hcChzPT5QZShzLnNvdXJjZSkpLmpvaW4oInwiKX0pJGApfX0pO2NvbnN0IG49dC5vcHRpb25zLmxlbmd0aD09PTE/dC5vcHRpb25zWzBdLl96b2QucnVuOm51bGw7ZS5fem9kLnBhcnNlPShvLHIpPT57aWYobilyZXR1cm4gbihvLHIpO2xldCBzPSExO2NvbnN0IGk9W107Zm9yKGNvbnN0IGEgb2YgdC5vcHRpb25zKXtjb25zdCB1PWEuX3pvZC5ydW4oe3ZhbHVlOm8udmFsdWUsaXNzdWVzOltdfSxyKTtpZih1IGluc3RhbmNlb2YgUHJvbWlzZSlpLnB1c2godSkscz0hMDtlbHNle2lmKHUuaXNzdWVzLmxlbmd0aD09PTApcmV0dXJuIHU7aS5wdXNoKHUpfX1yZXR1cm4gcz9Qcm9taXNlLmFsbChpKS50aGVuKGE9PmhjKGEsbyxlLHIpKTpoYyhpLG8sZSxyKX19KTtmdW5jdGlvbiBtYyhlLHQsbixvKXtjb25zdCByPVtdO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cysrKWVbc10uaXNzdWVzLmxlbmd0aD09PTAmJnIucHVzaChzKTtyZXR1cm4gci5sZW5ndGg9PT0xPyh0LnZhbHVlPWVbclswXV0udmFsdWUsdCk6KHIubGVuZ3RoPT09MD90Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6ZS5tYXAocz0+cy5pc3N1ZXMubWFwKGk9PnBlKGksbyxWKCkpKSl9KTp0Lmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixpbnB1dDp0LnZhbHVlLGluc3Q6bixlcnJvcnM6W10saW5jbHVzaXZlOiExLG1hdGNoZXM6cn0pLHQpfWNvbnN0ICRkPWQoIiRab2RYb3IiLChlLHQpPT57Z28uaW5pdChlLHQpLHQuaW5jbHVzaXZlPSExO2NvbnN0IG49dC5vcHRpb25zLmxlbmd0aD09PTE/dC5vcHRpb25zWzBdLl96b2QucnVuOm51bGw7ZS5fem9kLnBhcnNlPShvLHIpPT57aWYobilyZXR1cm4gbihvLHIpO2xldCBzPSExO2NvbnN0IGk9W107Zm9yKGNvbnN0IGEgb2YgdC5vcHRpb25zKXtjb25zdCB1PWEuX3pvZC5ydW4oe3ZhbHVlOm8udmFsdWUsaXNzdWVzOltdfSxyKTt1IGluc3RhbmNlb2YgUHJvbWlzZT8oaS5wdXNoKHUpLHM9ITApOmkucHVzaCh1KX1yZXR1cm4gcz9Qcm9taXNlLmFsbChpKS50aGVuKGE9Pm1jKGEsbyxlLHIpKTptYyhpLG8sZSxyKX19KTtmdW5jdGlvbiAkcyhlLHQpe2NvbnN0IG49ZS5fem9kO2xldCBvPW4uYmFnLm9wdGlvbnNNYXA7b3x8KG89emQobi5kZWYpLG4uYmFnLm9wdGlvbnNNYXA9byk7Y29uc3Qgcj1vLmdldCh0KTtpZihyPT09bnVsbCl0aHJvdyBuZXcgRXJyb3IoYEFtYmlndW91cyBkaXNjcmltaW5hdG9yIHZhbHVlICIke1N0cmluZyh0KX0iYCk7cmV0dXJuIHJ9ZnVuY3Rpb24gemQoZSl7Y29uc3QgdD1uZXcgTWFwO2Zvcihjb25zdCBuIG9mIGUub3B0aW9ucyl7Y29uc3Qgbz1uLl96b2QucHJvcFZhbHVlcz8uW2UuZGlzY3JpbWluYXRvcl07aWYoIW98fG8uc2l6ZT09PTApdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4ICIke2Uub3B0aW9ucy5pbmRleE9mKG4pfSJgKTtmb3IoY29uc3QgciBvZiBvKWlmKHQuaGFzKHIpKXtpZihyIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIGRpc2NyaW1pbmF0b3IgdmFsdWUgIiR7U3RyaW5nKHIpfSJgKTt0LnNldChyLG51bGwpfWVsc2UgdC5zZXQocixuKX1yZXR1cm4gdH1jb25zdCBUZD1kKCIkWm9kRGlzY3JpbWluYXRlZFVuaW9uIiwoZSx0KT0+e3QuaW5jbHVzaXZlPSExLGdvLmluaXQoZSx0KTtjb25zdCBuPWUuX3pvZC5wYXJzZTtJKGUsInByb3BWYWx1ZXMiLHI9Pntjb25zdCBzPXt9O2xldCBpPTA7Zm9yKGNvbnN0IGEgb2Ygci5kZWYub3B0aW9ucyl7Y29uc3QgdT1hLl96b2QucHJvcFZhbHVlcztpZighdXx8T2JqZWN0LmtleXModSkubGVuZ3RoPT09MCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7ci5kZWYub3B0aW9ucy5pbmRleE9mKGEpfSJgKTt1W3IuZGVmLmRpc2NyaW1pbmF0b3JdPy5oYXModm9pZCAwKSYmaSsrO2Zvcihjb25zdFtjLGxdb2YgT2JqZWN0LmVudHJpZXModSkpe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLGMpfHxVZShzLGMsbmV3IFNldCk7Zm9yKGNvbnN0IGggb2YgbClzW2NdLmFkZChoKX19cmV0dXJuIXIuZGVmLnVuaW9uRmFsbGJhY2smJmk+MSYmc1tyLmRlZi5kaXNjcmltaW5hdG9yXT8uZGVsZXRlKHZvaWQgMCksc30pLHQub3B0aW9ucy5mb3JFYWNoKChyLHMpPT57Y29uc3QgaT1lbyhyLl96b2QuZGVmKTtpZihpJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksdC5kaXNjcmltaW5hdG9yKSl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggIiR7c30iYCl9KTtjb25zdCBvPUl0KCgpPT56ZCh0KSk7ZS5fem9kLnBhcnNlPShyLHMpPT57Y29uc3QgaT1yLnZhbHVlO2lmKCFKZShpKSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF90eXBlIixleHBlY3RlZDoib2JqZWN0IixpbnB1dDppLGluc3Q6ZX0pLHI7Y29uc3QgYT1pPy5bdC5kaXNjcmltaW5hdG9yXSx1PW8udmFsdWUuZ2V0KGEpO3JldHVybiB1JiYoYSE9PXZvaWQgMHx8cy5kaXJlY3Rpb24hPT0iYmFja3dhcmQiKT91Ll96b2QucnVuKHIscyk6dC51bmlvbkZhbGxiYWNrfHxzLmRpcmVjdGlvbj09PSJiYWNrd2FyZCI/bihyLHMpOihyLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3VuaW9uIixlcnJvcnM6W10sbm90ZToiTm8gbWF0Y2hpbmcgZGlzY3JpbWluYXRvciIsZGlzY3JpbWluYXRvcjp0LmRpc2NyaW1pbmF0b3Isb3B0aW9uczpBcnJheS5mcm9tKG8udmFsdWUua2V5cygpKS5maWx0ZXIoYz0+by52YWx1ZS5nZXQoYykhPT1udWxsKSxpbnB1dDppLHBhdGg6W3QuZGlzY3JpbWluYXRvcl0saW5zdDplfSkscil9fSksUGQ9ZCgiJFpvZEludGVyc2VjdGlvbiIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pntjb25zdCByPW4udmFsdWUscz10LmxlZnQuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKSxpPXQucmlnaHQuX3pvZC5ydW4oe3ZhbHVlOnIsaXNzdWVzOltdfSxvKTtyZXR1cm4gcyBpbnN0YW5jZW9mIFByb21pc2V8fGkgaW5zdGFuY2VvZiBQcm9taXNlP1Byb21pc2UuYWxsKFtzLGldKS50aGVuKChbdSxjXSk9PmdjKG4sdSxjKSk6Z2MobixzLGkpfX0pO2Z1bmN0aW9uIFduKGUsdCl7aWYoZT09PXQpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYoZSBpbnN0YW5jZW9mIERhdGUmJnQgaW5zdGFuY2VvZiBEYXRlJiYrZT09K3QpcmV0dXJue3ZhbGlkOiEwLGRhdGE6ZX07aWYoSWUoZSkmJkllKHQpKXtjb25zdCBuPU9iamVjdC5rZXlzKHQpLG89T2JqZWN0LmtleXMoZSkuZmlsdGVyKHM9Pm4uaW5kZXhPZihzKSE9PS0xKSxyPXsuLi5lLC4uLnR9O09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyLCJfX3Byb3RvX18iKSYmZGVsZXRlIHIuX19wcm90b19fO2Zvcihjb25zdCBzIG9mIG8pe2lmKHM9PT0iX19wcm90b19fIiljb250aW51ZTtjb25zdCBpPVduKGVbc10sdFtzXSk7aWYoIWkudmFsaWQpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltzLC4uLmkubWVyZ2VFcnJvclBhdGhdfTtyW3NdPWkuZGF0YX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpyfX1pZihBcnJheS5pc0FycmF5KGUpJiZBcnJheS5pc0FycmF5KHQpKXtpZihlLmxlbmd0aCE9PXQubGVuZ3RoKXJldHVybnt2YWxpZDohMSxtZXJnZUVycm9yUGF0aDpbXX07Y29uc3Qgbj1bXTtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3Qgcj1lW29dLHM9dFtvXSxpPVduKHIscyk7aWYoIWkudmFsaWQpcmV0dXJue3ZhbGlkOiExLG1lcmdlRXJyb3JQYXRoOltvLC4uLmkubWVyZ2VFcnJvclBhdGhdfTtuLnB1c2goaS5kYXRhKX1yZXR1cm57dmFsaWQ6ITAsZGF0YTpufX1yZXR1cm57dmFsaWQ6ITEsbWVyZ2VFcnJvclBhdGg6W119fWZ1bmN0aW9uIGdjKGUsdCxuKXtjb25zdCBvPW5ldyBNYXA7bGV0IHI7Y29uc3Qgcz1uZXcgTWFwLGk9KGMsbCk9PntsZXQgaDtpZihjLmNvZGU9PT0idW5yZWNvZ25pemVkX2tleXMiJiYhYy5wYXRoPy5sZW5ndGgpcj8/KHI9YyksaD1jLmtleXM7ZWxzZSBpZihjLmNvZGU9PT0iaW52YWxpZF9rZXkiJiZjLm9yaWdpbj09PSJyZWNvcmQiJiZjLnBhdGg/Lmxlbmd0aD09PTEpe2NvbnN0IGc9U3RyaW5nKGMucGF0aFswXSk7cy5oYXMoZyl8fHMuc2V0KGcsYyksaD1bZ119ZWxzZSByZXR1cm4hMTtmb3IoY29uc3QgZyBvZiBoKW8uaGFzKGcpfHxvLnNldChnLHt9KSxvLmdldChnKVtsXT0hMDtyZXR1cm4hMH07Zm9yKGNvbnN0IGMgb2YgdC5pc3N1ZXMpaShjLCJsIil8fGUuaXNzdWVzLnB1c2goYyk7Zm9yKGNvbnN0IGMgb2Ygbi5pc3N1ZXMpaShjLCJyIil8fGUuaXNzdWVzLnB1c2goYyk7Y29uc3QgYT1bLi4ub10uZmlsdGVyKChbLGNdKT0+Yy5sJiZjLnIpLm1hcCgoW2NdKT0+Yyk7aWYoYS5sZW5ndGgpe2NvbnN0IGM9cj9hLmZpbHRlcihsPT5yLmtleXMuaW5jbHVkZXMobCkpOltdO2MubGVuZ3RoJiZlLmlzc3Vlcy5wdXNoKHsuLi5yLGtleXM6Y30pO2Zvcihjb25zdCBsIG9mIGEpIWMuaW5jbHVkZXMobCkmJnMuaGFzKGwpJiZlLmlzc3Vlcy5wdXNoKHMuZ2V0KGwpKX1jb25zdCB1PVduKHQudmFsdWUsbi52YWx1ZSk7aWYoIXUudmFsaWQpe2lmKG5lKGUpKXJldHVybiBlO3Rocm93IG5ldyBFcnJvcihgVW5tZXJnYWJsZSBpbnRlcnNlY3Rpb24uIEVycm9yIHBhdGg6ICR7SlNPTi5zdHJpbmdpZnkodS5tZXJnZUVycm9yUGF0aCl9YCl9cmV0dXJuIGUudmFsdWU9dS5kYXRhLGV9Y29uc3QgenM9ZCgiJFpvZFR1cGxlIiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49dC5pdGVtcyxvPWVlLm1lbW9pemVyO28/LmF0dGFjaChlKSxlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBpPXIudmFsdWU7aWYoIUFycmF5LmlzQXJyYXkoaSkpcmV0dXJuIHIuaXNzdWVzLnB1c2goe2lucHV0OmksaW5zdDplLGV4cGVjdGVkOiJ0dXBsZSIsY29kZToiaW52YWxpZF90eXBlIn0pLHI7ci52YWx1ZT1vP28uYWxsb2MoZSxyLFtdLHMpOltdO2NvbnN0IGE9W10sdT1fYyhuLCJvcHRpbiIpLGM9X2Mobiwib3B0b3V0Iik7aWYoIXQucmVzdCl7aWYoaS5sZW5ndGg8dSlyZXR1cm4gci5pc3N1ZXMucHVzaCh7Y29kZToidG9vX3NtYWxsIixtaW5pbXVtOnUsaW5jbHVzaXZlOiEwLGlucHV0OmksaW5zdDplLG9yaWdpbjoiYXJyYXkifSkscjtpLmxlbmd0aD5uLmxlbmd0aCYmci5pc3N1ZXMucHVzaCh7Y29kZToidG9vX2JpZyIsbWF4aW11bTpuLmxlbmd0aCxpbmNsdXNpdmU6ITAsaW5wdXQ6aSxpbnN0OmUsb3JpZ2luOiJhcnJheSJ9KX1jb25zdCBsPW5ldyBBcnJheShuLmxlbmd0aCksaD10LnJlc3Q/cz8uYWJvcnRFYXJseTp2b2lkIDA7bGV0IGc9ITE7Zm9yKGxldCBfPTA7XzxuLmxlbmd0aDtfKyspe2NvbnN0IGI9bltfXS5fem9kLnJ1bih7dmFsdWU6aVtfXSxpc3N1ZXM6W119LHMpO2IgaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaChiLnRoZW4oaz0+e2xbX109a30pKToobFtfXT1iLGgmJiFnJiZiLmlzc3Vlcy5sZW5ndGgmJihnPW5lKGIpKSl9aWYodC5yZXN0JiYhZyl7bGV0IF89bi5sZW5ndGgtMTtjb25zdCBiPWkuc2xpY2Uobi5sZW5ndGgpO2xldCBrPXIuaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgJCBvZiBiKXtpZihoJiZyLmlzc3Vlcy5sZW5ndGghPT1rKXtpZihuZShyLGspKWJyZWFrO2s9ci5pc3N1ZXMubGVuZ3RofV8rKztjb25zdCBOPXQucmVzdC5fem9kLnJ1bih7dmFsdWU6JCxpc3N1ZXM6W119LHMpO04gaW5zdGFuY2VvZiBQcm9taXNlP2EucHVzaChOLnRoZW4oUj0+dmMoUixyLF8pKSk6dmMoTixyLF8pfX1yZXR1cm4gYS5sZW5ndGg/UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+YmMobCxyLG4saSxjKSk6YmMobCxyLG4saSxjKX19KTtmdW5jdGlvbiBfYyhlLHQpe2ZvcihsZXQgbj1lLmxlbmd0aC0xO24+PTA7bi0tKWlmKCEodD09PSJvcHRpbiI/ZVtuXS5fem9kLm9wdGluIT09dm9pZCAwOmVbbl0uX3pvZC5vcHRvdXQ9PT0ib3B0aW9uYWwiKSlyZXR1cm4gbisxO3JldHVybiAwfWZ1bmN0aW9uIHZjKGUsdCxuKXtlLmlzc3Vlcy5sZW5ndGgmJnQuaXNzdWVzLnB1c2goLi4udWUobixlLmlzc3VlcykpLHQudmFsdWVbbl09ZS52YWx1ZX1mdW5jdGlvbiBiYyhlLHQsbixvLHIpe2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKXtjb25zdCBpPWVbc10sYT1zPG8ubGVuZ3RoO2lmKCFhJiZzPj1yJiZuW3NdLl96b2Qub3B0aW49PT0ib3B0aW9uYWwiKXt0LnZhbHVlLmxlbmd0aD1zO2JyZWFrfWlmKGkuaXNzdWVzLmxlbmd0aCl7aWYoIWEmJnM+PXIpe3QudmFsdWUubGVuZ3RoPXM7YnJlYWt9dC5pc3N1ZXMucHVzaCguLi51ZShzLGkuaXNzdWVzKSl9dC52YWx1ZVtzXT1pLnZhbHVlfWZvcihsZXQgcz10LnZhbHVlLmxlbmd0aC0xO3M+PW8ubGVuZ3RoJiYobltzXS5fem9kLm9wdG91dD09PSJvcHRpb25hbCImJnQudmFsdWVbc109PT12b2lkIDApO3MtLSl0LnZhbHVlLmxlbmd0aD1zO3JldHVybiB0fWNvbnN0IHhkPWQoIiRab2RSZWNvcmQiLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1lZS5tZW1vaXplcjtuPy5hdHRhY2goZSksZS5fem9kLnBhcnNlPShvLHIpPT57Y29uc3Qgcz1vLnZhbHVlO2lmKCFJZShzKSlyZXR1cm4gby5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6InJlY29yZCIsY29kZToiaW52YWxpZF90eXBlIixpbnB1dDpzLGluc3Q6ZX0pLG87Y29uc3QgaT1bXSxhPXQua2V5VHlwZS5fem9kLnZhbHVlcztpZihhJiYhdC5wYXJ0aWFsKXtvLnZhbHVlPW4/bi5hbGxvYyhlLG8se30scik6e307Y29uc3QgdT1uZXcgU2V0O2Zvcihjb25zdCBsIG9mIGEpaWYodHlwZW9mIGw9PSJzdHJpbmcifHx0eXBlb2YgbD09Im51bWJlciJ8fHR5cGVvZiBsPT0ic3ltYm9sIil7aWYodS5hZGQodHlwZW9mIGw9PSJudW1iZXIiP2wudG9TdHJpbmcoKTpsKSxsPT09Il9fcHJvdG9fXyIpY29udGludWU7Y29uc3QgaD10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmwsaXNzdWVzOltdfSxyKTtpZihoIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtpZihoLmlzc3Vlcy5sZW5ndGgpe28uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOmguaXNzdWVzLm1hcChiPT5wZShiLHIsVigpKSksaW5wdXQ6bCxwYXRoOltsXSxpbnN0OmV9KTtjb250aW51ZX1jb25zdCBnPWgudmFsdWU7aWYoZz09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IF89dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnNbbF0saXNzdWVzOltdfSxyKTtfIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goXy50aGVuKGI9PntiLmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4udWUobCxiLmlzc3VlcykpLG8udmFsdWVbZ109Yi52YWx1ZX0pKTooXy5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLnVlKGwsXy5pc3N1ZXMpKSxvLnZhbHVlW2ddPV8udmFsdWUpfWxldCBjO2Zvcihjb25zdCBsIGluIHMpaWYoIXUuaGFzKGwpKWlmKHQubW9kZT09PSJsb29zZSIpe2lmKGw9PT0iX19wcm90b19fIiljb250aW51ZTtvLnZhbHVlW2xdPXNbbF19ZWxzZSBjPWM/P1tdLGMucHVzaChsKTtjJiZjLmxlbmd0aD4wJiZvLmlzc3Vlcy5wdXNoKHtjb2RlOiJ1bnJlY29nbml6ZWRfa2V5cyIsaW5wdXQ6cyxpbnN0OmUsa2V5czpjLGNvbnRpbnVlOiEwfSl9ZWxzZXtvLnZhbHVlPW4/bi5hbGxvYyhlLG8se30scik6e307bGV0IHU7Zm9yKGNvbnN0IGMgb2YgUmVmbGVjdC5vd25LZXlzKHMpKXtpZihjPT09Il9fcHJvdG9fXyJ8fCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocyxjKSljb250aW51ZTtsZXQgbD10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmMsaXNzdWVzOltdfSxyKTtpZihsIGluc3RhbmNlb2YgUHJvbWlzZSl0aHJvdyBuZXcgRXJyb3IoIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHkiKTtpZih0eXBlb2YgYz09InN0cmluZyImJmhvLnRlc3QoYykmJmwuaXNzdWVzLmxlbmd0aCl7Y29uc3QgYj10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOk51bWJlcihjKSxpc3N1ZXM6W119LHIpO2lmKGIgaW5zdGFuY2VvZiBQcm9taXNlKXRocm93IG5ldyBFcnJvcigiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseSIpO2IuaXNzdWVzLmxlbmd0aD09PTAmJihsPWIpfWlmKGwuaXNzdWVzLmxlbmd0aCl7dC5tb2RlPT09Imxvb3NlIj9vLnZhbHVlW2NdPXNbY106YT8odT11Pz9bXSx1LnB1c2goYykpOm8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfa2V5IixvcmlnaW46InJlY29yZCIsaXNzdWVzOmwuaXNzdWVzLm1hcChiPT5wZShiLHIsVigpKSksaW5wdXQ6YyxwYXRoOltjXSxpbnN0OmV9KTtjb250aW51ZX1jb25zdCBnPWwudmFsdWU7aWYoZz09PSJfX3Byb3RvX18iKWNvbnRpbnVlO2NvbnN0IF89dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOnNbY10saXNzdWVzOltdfSxyKTtfIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2goXy50aGVuKGI9PntiLmlzc3Vlcy5sZW5ndGgmJm8uaXNzdWVzLnB1c2goLi4udWUoYyxiLmlzc3VlcykpLG8udmFsdWVbZ109Yi52YWx1ZX0pKTooXy5pc3N1ZXMubGVuZ3RoJiZvLmlzc3Vlcy5wdXNoKC4uLnVlKGMsXy5pc3N1ZXMpKSxvLnZhbHVlW2ddPV8udmFsdWUpfXUmJnUubGVuZ3RoPjAmJm8uaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixpbnB1dDpzLGluc3Q6ZSxrZXlzOnUsY29udGludWU6ITB9KX1yZXR1cm4gaS5sZW5ndGg/UHJvbWlzZS5hbGwoaSkudGhlbigoKT0+byk6b319KSxJZD1kKCIkWm9kTWFwIiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49ZWUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighKHMgaW5zdGFuY2VvZiBNYXApKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtleHBlY3RlZDoibWFwIixjb2RlOiJpbnZhbGlkX3R5cGUiLGlucHV0OnMsaW5zdDplfSksbztjb25zdCBpPVtdO28udmFsdWU9bj9uLmFsbG9jKGUsbyxuZXcgTWFwLHIpOm5ldyBNYXA7Y29uc3QgYT1yPy5hYm9ydEVhcmx5O2xldCB1PW8uaXNzdWVzLmxlbmd0aDtmb3IoY29uc3RbYyxsXW9mIHMpe2lmKGEmJm8uaXNzdWVzLmxlbmd0aCE9PXUpe2lmKG5lKG8sdSkpYnJlYWs7dT1vLmlzc3Vlcy5sZW5ndGh9Y29uc3QgaD10LmtleVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmMsaXNzdWVzOltdfSxyKSxnPXQudmFsdWVUeXBlLl96b2QucnVuKHt2YWx1ZTpsLGlzc3VlczpbXX0scik7aCBpbnN0YW5jZW9mIFByb21pc2V8fGcgaW5zdGFuY2VvZiBQcm9taXNlP2kucHVzaChQcm9taXNlLmFsbChbaCxnXSkudGhlbigoW18sYl0pPT57eWMoXyxiLG8sYyxzLGUscil9KSk6eWMoaCxnLG8sYyxzLGUscil9cmV0dXJuIGkubGVuZ3RoP1Byb21pc2UuYWxsKGkpLnRoZW4oKCk9Pm8pOm99fSk7ZnVuY3Rpb24geWMoZSx0LG4sbyxyLHMsaSl7ZS5pc3N1ZXMubGVuZ3RoJiYoQm4uaGFzKHR5cGVvZiBvKT9uLmlzc3Vlcy5wdXNoKC4uLnVlKG8sZS5pc3N1ZXMpKTpuLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJtYXAiLGlucHV0OnIsaW5zdDpzLGlzc3VlczplLmlzc3Vlcy5tYXAoYT0+cGUoYSxpLFYoKSkpfSkpLHQuaXNzdWVzLmxlbmd0aCYmKEJuLmhhcyh0eXBlb2Ygbyk/bi5pc3N1ZXMucHVzaCguLi51ZShvLHQuaXNzdWVzKSk6bi5pc3N1ZXMucHVzaCh7b3JpZ2luOiJtYXAiLGNvZGU6ImludmFsaWRfZWxlbWVudCIsaW5wdXQ6cixpbnN0OnMsa2V5Om8saXNzdWVzOnQuaXNzdWVzLm1hcChhPT5wZShhLGksVigpKSl9KSksbi52YWx1ZS5zZXQoZS52YWx1ZSx0LnZhbHVlKX1jb25zdCBFZD1kKCIkWm9kU2V0IiwoZSx0KT0+e3ouaW5pdChlLHQpO2NvbnN0IG49ZWUubWVtb2l6ZXI7bj8uYXR0YWNoKGUpLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtpZighKHMgaW5zdGFuY2VvZiBTZXQpKXJldHVybiBvLmlzc3Vlcy5wdXNoKHtpbnB1dDpzLGluc3Q6ZSxleHBlY3RlZDoic2V0Iixjb2RlOiJpbnZhbGlkX3R5cGUifSksbztjb25zdCBpPVtdO28udmFsdWU9bj9uLmFsbG9jKGUsbyxuZXcgU2V0LHIpOm5ldyBTZXQ7Y29uc3QgYT1yPy5hYm9ydEVhcmx5O2xldCB1PW8uaXNzdWVzLmxlbmd0aDtmb3IoY29uc3QgYyBvZiBzKXtpZihhJiZvLmlzc3Vlcy5sZW5ndGghPT11KXtpZihuZShvLHUpKWJyZWFrO3U9by5pc3N1ZXMubGVuZ3RofWNvbnN0IGw9dC52YWx1ZVR5cGUuX3pvZC5ydW4oe3ZhbHVlOmMsaXNzdWVzOltdfSxyKTtsIGluc3RhbmNlb2YgUHJvbWlzZT9pLnB1c2gobC50aGVuKGg9PndjKGgsbykpKTp3YyhsLG8pfXJldHVybiBpLmxlbmd0aD9Qcm9taXNlLmFsbChpKS50aGVuKCgpPT5vKTpvfX0pO2Z1bmN0aW9uIHdjKGUsdCl7ZS5pc3N1ZXMubGVuZ3RoJiZ0Lmlzc3Vlcy5wdXNoKC4uLmUuaXNzdWVzKSx0LnZhbHVlLmFkZChlLnZhbHVlKX1jb25zdCBSZD1kKCIkWm9kRW51bSIsKGUsdCk9Pnt6LmluaXQoZSx0KTtjb25zdCBuPXhyKHQuZW50cmllcyksbz1uZXcgU2V0KG4pO2UuX3pvZC52YWx1ZXM9byxJKGUsInBhdHRlcm4iLHI9Pntjb25zdCBzPXhyKHIuZGVmLmVudHJpZXMpLmZpbHRlcihpPT5Cbi5oYXModHlwZW9mIGkpKTtyZXR1cm4gbmV3IFJlZ0V4cChzLmxlbmd0aD9gXigke3MubWFwKGk9PndlKGkudG9TdHJpbmcoKSkpLmpvaW4oInwiKX0pJGA6Il5bXlxcc1xcU10kIil9KSxlLl96b2QucGFyc2U9KHIscyk9Pntjb25zdCBpPXIudmFsdWU7cmV0dXJuIG8uaGFzKGkpfHxyLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3ZhbHVlIix2YWx1ZXM6bixpbnB1dDppLGluc3Q6ZX0pLHJ9fSksWmQ9ZCgiJFpvZExpdGVyYWwiLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1uZXcgU2V0KHQudmFsdWVzKTtlLl96b2QudmFsdWVzPW4sSShlLCJwYXR0ZXJuIixvPT57Y29uc3Qgcj1vLmRlZi52YWx1ZXM7cmV0dXJuIG5ldyBSZWdFeHAoci5sZW5ndGg/YF4oJHtyLm1hcChzPT50eXBlb2Ygcz09InN0cmluZyI/d2Uocyk6cz93ZShzLnRvU3RyaW5nKCkpOlN0cmluZyhzKSkuam9pbigifCIpfSkkYDoiXlteXFxzXFxTXSQiKX0pLGUuX3pvZC5wYXJzZT0obyxyKT0+e2NvbnN0IHM9by52YWx1ZTtyZXR1cm4gbi5oYXMocyl8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdmFsdWUiLHZhbHVlczp0LnZhbHVlcyxpbnB1dDpzLGluc3Q6ZX0pLG99fSksQ2Q9ZCgiJFpvZEZpbGUiLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLnBhcnNlPShuLG8pPT57Y29uc3Qgcj1uLnZhbHVlO3JldHVybiByIGluc3RhbmNlb2YgRmlsZXx8bi5pc3N1ZXMucHVzaCh7ZXhwZWN0ZWQ6ImZpbGUiLGNvZGU6ImludmFsaWRfdHlwZSIsaW5wdXQ6cixpbnN0OmV9KSxufX0pLE9kPWQoIiRab2RUcmFuc2Zvcm0iLChlLHQpPT57ei5pbml0KGUsdCksZS5fem9kLm9wdGluPSJvcHRpb25hbCIsZWUubWVtb2l6ZXI/Lmd1YXJkKGUpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgYW8oZS5jb25zdHJ1Y3Rvci5uYW1lKTtjb25zdCByPXQudHJhbnNmb3JtKG4udmFsdWUsbik7aWYoby5hc3luYylyZXR1cm4ociBpbnN0YW5jZW9mIFByb21pc2U/cjpQcm9taXNlLnJlc29sdmUocikpLnRoZW4oaT0+KG4udmFsdWU9aSxuKSk7aWYociBpbnN0YW5jZW9mIFByb21pc2UpdGhyb3cgbmV3IHhlO3JldHVybiBuLnZhbHVlPXIsbn19KTtmdW5jdGlvbiBrYyhlLHQpe3JldHVybiBlLnZhbHVlPXQuaXNzdWVzLmxlbmd0aD92b2lkIDA6dC52YWx1ZSxlfWNvbnN0IFRzPWQoIiRab2RPcHRpb25hbCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxJKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiPyJkZWZhdWx0ZWQiOiJvcHRpb25hbCIpLGUuX3pvZC5vcHRvdXQ9Im9wdGlvbmFsIixJKGUsInZhbHVlcyIsbj0+e2NvbnN0IG89bi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzO3JldHVybiBvP25ldyBTZXQoWy4uLm8sdm9pZCAwXSk6dm9pZCAwfSksSShlLCJwYXR0ZXJuIixuPT57Y29uc3Qgbz1uLmRlZi5pbm5lclR5cGUuX3pvZC5wYXR0ZXJuO3JldHVybiBvP25ldyBSZWdFeHAoYF4oJHtQZShvLnNvdXJjZSl9KT8kYCk6dm9pZCAwfSksZS5fem9kLnBhcnNlPShuLG8pPT57aWYobi52YWx1ZT09PXZvaWQgMCl7aWYodC5pbm5lclR5cGUuX3pvZC5vcHRpbiE9PSJkZWZhdWx0ZWQiKXJldHVybiBuO2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4oe3ZhbHVlOm4udmFsdWUsaXNzdWVzOltdfSxvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PmtjKG4scykpOmtjKG4scil9cmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9fSksQWQ9ZCgiJFpvZEV4YWN0T3B0aW9uYWwiLChlLHQpPT57VHMuaW5pdChlLHQpLEkoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLEkoZSwicGF0dGVybiIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybiksZS5fem9kLnBhcnNlPShuLG8pPT50LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksTmQ9ZCgiJFpvZE51bGxhYmxlIiwoZSx0KT0+e3ouaW5pdChlLHQpLEkoZSwib3B0aW4iLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLm9wdGluKSxJKGUsIm9wdG91dCIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KSxJKGUsInBhdHRlcm4iLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm47cmV0dXJuIG8/bmV3IFJlZ0V4cChgXigke1BlKG8uc291cmNlKX18bnVsbCkkYCk6dm9pZCAwfSksSShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcz9uZXcgU2V0KFsuLi5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMsbnVsbF0pOnZvaWQgMCksZS5fem9kLnBhcnNlPShuLG8pPT5uLnZhbHVlPT09bnVsbD9uOnQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyl9KSxqZD1kKCIkWm9kRGVmYXVsdCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2Qub3B0aW49ImRlZmF1bHRlZCIsSShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXJldHVybiB0LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO2lmKG4udmFsdWU9PT12b2lkIDApcmV0dXJuIG4udmFsdWU9dC5kZWZhdWx0VmFsdWUsbjtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5TYyhzLHQpKTpTYyhyLHQpfX0pO2Z1bmN0aW9uIFNjKGUsdCl7cmV0dXJuIGUudmFsdWU9PT12b2lkIDAmJihlLnZhbHVlPXQuZGVmYXVsdFZhbHVlKSxlfWNvbnN0IE1kPWQoIiRab2RQcmVmYXVsdCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2Qub3B0aW49ImRlZmF1bHRlZCIsSShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT4oby5kaXJlY3Rpb249PT0iYmFja3dhcmQifHxuLnZhbHVlPT09dm9pZCAwJiYobi52YWx1ZT10LmRlZmF1bHRWYWx1ZSksdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKSl9KSxEZD1kKCIkWm9kTm9uT3B0aW9uYWwiLChlLHQpPT57ei5pbml0KGUsdCksSShlLCJ2YWx1ZXMiLG49Pntjb25zdCBvPW4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcztyZXR1cm4gbz9uZXcgU2V0KFsuLi5vXS5maWx0ZXIocj0+ciE9PXZvaWQgMCkpOnZvaWQgMH0pLGUuX3pvZC5wYXJzZT0obixvKT0+e2NvbnN0IHI9dC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PiRjKHMsZSkpOiRjKHIsZSl9fSk7ZnVuY3Rpb24gJGMoZSx0KXtyZXR1cm4hZS5pc3N1ZXMubGVuZ3RoJiZlLnZhbHVlPT09dm9pZCAwJiZlLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX3R5cGUiLGV4cGVjdGVkOiJub25vcHRpb25hbCIsaW5wdXQ6ZS52YWx1ZSxpbnN0OnR9KSxlfWNvbnN0IHFkPWQoIiRab2RTdWNjZXNzIiwoZSx0KT0+e3ouaW5pdChlLHQpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIil0aHJvdyBuZXcgYW8oIlpvZFN1Y2Nlc3MiKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT4obi52YWx1ZT1zLmlzc3Vlcy5sZW5ndGg9PT0wLG4pKToobi52YWx1ZT1yLmlzc3Vlcy5sZW5ndGg9PT0wLG4pfX0pO2Z1bmN0aW9uIHpjKGUsdCxuLG8pe3JldHVybiB0Lmlzc3Vlcy5sZW5ndGg/KGUudmFsdWU9bi5jYXRjaFZhbHVlKHsuLi50LHZhbHVlOmUudmFsdWUsZXJyb3I6e2lzc3Vlczp0Lmlzc3Vlcy5tYXAocj0+cGUocixvLFYoKSkpfSxpbnB1dDplLnZhbHVlfSksZSk6KGUudmFsdWU9dC52YWx1ZSx0Lm1lbW8mJihlLm1lbW89ITApLGUpfWNvbnN0IExkPWQoIiRab2RDYXRjaCIsKGUsdCk9Pnt6LmluaXQoZSx0KSxJKGUsIm9wdGluIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRpbj09PSJkZWZhdWx0ZWQiPyJkZWZhdWx0ZWQiOiJvcHRpb25hbCIpLEkoZSwib3B0b3V0IixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC5vcHRvdXQpLEkoZSwidmFsdWVzIixuPT5uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpLGUuX3pvZC5wYXJzZT0obixvKT0+e2lmKG8uZGlyZWN0aW9uPT09ImJhY2t3YXJkIilyZXR1cm4gdC5pbm5lclR5cGUuX3pvZC5ydW4obixvKTtjb25zdCByPXQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpuLnZhbHVlLGlzc3VlczpbXX0sbyk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT56YyhuLHMsdCxvKSk6emMobixyLHQsbyl9fSksVWQ9ZCgiJFpvZE5hTiIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PigodHlwZW9mIG4udmFsdWUhPSJudW1iZXIifHwhTnVtYmVyLmlzTmFOKG4udmFsdWUpKSYmbi5pc3N1ZXMucHVzaCh7aW5wdXQ6bi52YWx1ZSxpbnN0OmUsZXhwZWN0ZWQ6Im5hbiIsY29kZToiaW52YWxpZF90eXBlIn0pLG4pfSksUHM9ZCgiJFpvZFBpcGUiLChlLHQpPT57ei5pbml0KGUsdCksSShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmluLl96b2QudmFsdWVzKSxJKGUsIm9wdGluIixuPT5uLmRlZi5pbi5fem9kLm9wdGluKSxJKGUsIm9wdG91dCIsbj0+bi5kZWYub3V0Ll96b2Qub3B0b3V0KSxJKGUsInByb3BWYWx1ZXMiLG49Pm4uZGVmLmluLl96b2QucHJvcFZhbHVlcyksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXtjb25zdCBzPXQub3V0Ll96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihpPT5BbihpLHQuaW4sbykpOkFuKHMsdC5pbixvKX1jb25zdCByPXQuaW4uX3pvZC5ydW4obixvKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PkFuKHMsdC5vdXQsbykpOkFuKHIsdC5vdXQsbyl9fSk7ZnVuY3Rpb24gQW4oZSx0LG4pe3JldHVybiBlLmlzc3Vlcy5zb21lKG89Pm8uY29kZSE9PSJ1bnJlY29nbml6ZWRfa2V5cyIpPyhlLmFib3J0ZWQ9ITAsZSk6dC5fem9kLnJ1bih7dmFsdWU6ZS52YWx1ZSxpc3N1ZXM6ZS5pc3N1ZXN9LG4pfWNvbnN0IHhzPWQoIiRab2RDb2RlYyIsKGUsdCk9Pnt6LmluaXQoZSx0KSxJKGUsInZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC52YWx1ZXMpLEkoZSwib3B0aW4iLG49Pm4uZGVmLmluLl96b2Qub3B0aW4pLEkoZSwib3B0b3V0IixuPT5uLmRlZi5vdXQuX3pvZC5vcHRvdXQpLEkoZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW4uX3pvZC5wcm9wVmFsdWVzKSxlLl96b2QucGFyc2U9KG4sbyk9PntpZigoby5kaXJlY3Rpb258fCJmb3J3YXJkIik9PT0iZm9yd2FyZCIpe2NvbnN0IHM9dC5pbi5fem9kLnJ1bihuLG8pO3JldHVybiBzIGluc3RhbmNlb2YgUHJvbWlzZT9zLnRoZW4oaT0+Tm4oaSx0LG8pKTpObihzLHQsbyl9ZWxzZXtjb25zdCBzPXQub3V0Ll96b2QucnVuKG4sbyk7cmV0dXJuIHMgaW5zdGFuY2VvZiBQcm9taXNlP3MudGhlbihpPT5ObihpLHQsbykpOk5uKHMsdCxvKX19fSk7ZnVuY3Rpb24gTm4oZSx0LG4pe2lmKGUuaXNzdWVzLmxlbmd0aClyZXR1cm4gZS5hYm9ydGVkPSEwLGU7aWYoKG4uZGlyZWN0aW9ufHwiZm9yd2FyZCIpPT09ImZvcndhcmQiKXtjb25zdCByPXQudHJhbnNmb3JtKGUudmFsdWUsZSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5qbihlLHMsdC5vdXQsbikpOmpuKGUscix0Lm91dCxuKX1lbHNle2NvbnN0IHI9dC5yZXZlcnNlVHJhbnNmb3JtKGUudmFsdWUsZSk7cmV0dXJuIHIgaW5zdGFuY2VvZiBQcm9taXNlP3IudGhlbihzPT5qbihlLHMsdC5pbixuKSk6am4oZSxyLHQuaW4sbil9fWZ1bmN0aW9uIGpuKGUsdCxuLG8pe3JldHVybiBlLmlzc3Vlcy5sZW5ndGg/KGUuYWJvcnRlZD0hMCxlKTpuLl96b2QucnVuKHt2YWx1ZTp0LGlzc3VlczplLmlzc3Vlc30sbyl9Y29uc3QgSGQ9ZCgiJFpvZFByZXByb2Nlc3MiLChlLHQpPT57UHMuaW5pdChlLHQpfSksRmQ9ZCgiJFpvZFJlYWRvbmx5IiwoZSx0KT0+e3ouaW5pdChlLHQpLEkoZSwicHJvcFZhbHVlcyIsbj0+bi5kZWYuaW5uZXJUeXBlLl96b2QucHJvcFZhbHVlcyksSShlLCJ2YWx1ZXMiLG49Pm4uZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyksSShlLCJvcHRpbiIsbj0+bi5kZWYuaW5uZXJUeXBlPy5fem9kPy5vcHRpbiksSShlLCJvcHRvdXQiLG49Pm4uZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0b3V0KSxlLl96b2QucGFyc2U9KG4sbyk9PntpZihvLmRpcmVjdGlvbj09PSJiYWNrd2FyZCIpcmV0dXJuIHQuaW5uZXJUeXBlLl96b2QucnVuKG4sbyk7Y29uc3Qgcj10LmlubmVyVHlwZS5fem9kLnJ1bihuLG8pO3JldHVybiByIGluc3RhbmNlb2YgUHJvbWlzZT9yLnRoZW4oVGMpOlRjKHIpfX0pO2Z1bmN0aW9uIFRjKGUpe3JldHVybiBlLm1lbW98fChlLnZhbHVlPU9iamVjdC5mcmVlemUoZS52YWx1ZSkpLGV9ZnVuY3Rpb24gaW0oZSl7Y29uc3QgdD1lLl96b2QuZGVmO2xldCBuPXQucGF0dGVybixvPSEhdC5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSxyLHM7Zm9yKGNvbnN0IGEgb2YgdC5jaGVja3M/P1tdKXtjb25zdCB1PWEuX3pvZC5kZWY7dS5wYXR0ZXJuJiYobj11LnBhdHRlcm4pLG98fChvPSEhdS5mb3JtYXQ/LmluY2x1ZGVzKCJpbnQiKSk7Y29uc3QgYz11Lm1pbmltdW0/P3UubGVuZ3RoLGw9dS5tYXhpbXVtPz91Lmxlbmd0aDtjIT09dm9pZCAwJiYocj09PXZvaWQgMHx8Yz5yKSYmKHI9YyksbCE9PXZvaWQgMCYmKHM9PT12b2lkIDB8fGw8cykmJihzPWwpfWlmKG4pcmV0dXJuIG4uc291cmNlO2lmKHIhPT12b2lkIDAmJnMhPT12b2lkIDAmJnI+cylyZXR1cm4iKD8hKSI7aWYociE9PXZvaWQgMHx8cyE9PXZvaWQgMClyZXR1cm4gV3Uoe21pbmltdW06cixtYXhpbXVtOnN9KS5zb3VyY2U7Y29uc3QgaT1lLl96b2QucGF0dGVybjtyZXR1cm4obyYmaT09PWhvP1F1OmkpPy5zb3VyY2V9ZnVuY3Rpb24gTnIoZSl7Y29uc3QgdD1lLl96b2QuZGVmLG49ZS5fem9kLnBhdHRlcm4/LnNvdXJjZSxvPXQuaW5uZXJUeXBlPz9lLl96b2QuaW5uZXJUeXBlO2lmKG8pe2NvbnN0IHI9by5fem9kLnBhdHRlcm4/LnNvdXJjZSxzPU5yKG8pO3JldHVybiBuJiZyJiZzJiZzIT09cj9uLnJlcGxhY2UoUGUociksKCk9PlBlKHMpKTpufWlmKHQub3B0aW9ucyl7Y29uc3Qgcj10Lm9wdGlvbnMubWFwKE5yKTtpZihyLmV2ZXJ5KEJvb2xlYW4pKXJldHVybmBeKCR7ci5tYXAocz0+UGUocykpLmpvaW4oInwiKX0pJGB9cmV0dXJuIGltKGUpfWNvbnN0IEJkPWQoIiRab2RUZW1wbGF0ZUxpdGVyYWwiLChlLHQpPT57ei5pbml0KGUsdCk7Y29uc3Qgbj1bXTtmb3IoY29uc3QgbyBvZiB0LnBhcnRzKWlmKHR5cGVvZiBvPT0ib2JqZWN0IiYmbyE9PW51bGwpe2NvbnN0IHI9TnIobyk7aWYoIXIpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlIGxpdGVyYWwgcGFydCwgbm8gcGF0dGVybiBmb3VuZDogJHtbLi4uby5fem9kLnRyYWl0c10uc2hpZnQoKX1gKTtuLnB1c2goUGUocikpfWVsc2UgaWYobz09PW51bGx8fGV1Lmhhcyh0eXBlb2Ygbykpbi5wdXNoKHdlKGAke299YCkpO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlIGxpdGVyYWwgcGFydDogJHtvfWApO2UuX3pvZC5wYXR0ZXJuPW5ldyBSZWdFeHAoYF4ke24uam9pbigiIil9JGApLGUuX3pvZC5wYXJzZT0obyxyKT0+dHlwZW9mIG8udmFsdWUhPSJzdHJpbmciPyhvLmlzc3Vlcy5wdXNoKHtpbnB1dDpvLnZhbHVlLGluc3Q6ZSxleHBlY3RlZDoic3RyaW5nIixjb2RlOiJpbnZhbGlkX3R5cGUifSksbyk6KGUuX3pvZC5wYXR0ZXJuLmxhc3RJbmRleD0wLGUuX3pvZC5wYXR0ZXJuLnRlc3Qoby52YWx1ZSl8fG8uaXNzdWVzLnB1c2goe2lucHV0Om8udmFsdWUsaW5zdDplLGNvZGU6ImludmFsaWRfZm9ybWF0Iixmb3JtYXQ6dC5mb3JtYXQ/PyJ0ZW1wbGF0ZV9saXRlcmFsIixwYXR0ZXJuOmUuX3pvZC5wYXR0ZXJuLnNvdXJjZX0pLG8pfSksVmQ9ZCgiJFpvZEZ1bmN0aW9uIiwoZSx0KT0+KHouaW5pdChlLHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfZGVmIix7dmFsdWU6dH0pLGUuX3pvZC5kZWY9dCxlLmltcGxlbWVudD1uPT57aWYodHlwZW9mIG4hPSJmdW5jdGlvbiIpdGhyb3cgbmV3IEVycm9yKCJpbXBsZW1lbnQoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgZnVuY3Rpb24iKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKC4uLm8pe2NvbnN0IHI9ZS5fZGVmLmlucHV0P1pyKGUuX2RlZi5pbnB1dCxvKTpvLHM9UmVmbGVjdC5hcHBseShuLHRoaXMscik7cmV0dXJuIGUuX2RlZi5vdXRwdXQ/WnIoZS5fZGVmLm91dHB1dCxzKTpzfSwiX3pvZCIse3ZhbHVlOmUuX3pvZCxlbnVtZXJhYmxlOiExfSl9LGUuaW1wbGVtZW50QXN5bmM9bj0+e2lmKHR5cGVvZiBuIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcigiaW1wbGVtZW50QXN5bmMoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgZnVuY3Rpb24iKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGFzeW5jIGZ1bmN0aW9uKC4uLm8pe2NvbnN0IHI9ZS5fZGVmLmlucHV0P2F3YWl0IENyKGUuX2RlZi5pbnB1dCxvKTpvLHM9YXdhaXQgUmVmbGVjdC5hcHBseShuLHRoaXMscik7cmV0dXJuIGUuX2RlZi5vdXRwdXQ/YXdhaXQgQ3IoZS5fZGVmLm91dHB1dCxzKTpzfSwiX3pvZCIse3ZhbHVlOmUuX3pvZCxlbnVtZXJhYmxlOiExfSl9LGUuX3pvZC5wYXJzZT0obixvKT0+dHlwZW9mIG4udmFsdWUhPSJmdW5jdGlvbiI/KG4uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6ImZ1bmN0aW9uIixpbnB1dDpuLnZhbHVlLGluc3Q6ZX0pLG4pOihlLl9kZWYub3V0cHV0JiZlLl9kZWYub3V0cHV0Ll96b2QuZGVmLnR5cGU9PT0icHJvbWlzZSI/bi52YWx1ZT1lLmltcGxlbWVudEFzeW5jKG4udmFsdWUpOm4udmFsdWU9ZS5pbXBsZW1lbnQobi52YWx1ZSksbiksZS5pbnB1dD0oLi4ubik9Pntjb25zdCBvPWUuY29uc3RydWN0b3I7cmV0dXJuIEFycmF5LmlzQXJyYXkoblswXSk/bmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpuZXcgenMoe3R5cGU6InR1cGxlIixpdGVtczpuWzBdLHJlc3Q6blsxXX0pLG91dHB1dDplLl9kZWYub3V0cHV0fSk6bmV3IG8oe3R5cGU6ImZ1bmN0aW9uIixpbnB1dDpuWzBdLG91dHB1dDplLl9kZWYub3V0cHV0fSl9LGUub3V0cHV0PW49Pntjb25zdCBvPWUuY29uc3RydWN0b3I7cmV0dXJuIG5ldyBvKHt0eXBlOiJmdW5jdGlvbiIsaW5wdXQ6ZS5fZGVmLmlucHV0LG91dHB1dDpufSl9LGUpKSxKZD1kKCIkWm9kUHJvbWlzZSIsKGUsdCk9Pnt6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9PlByb21pc2UucmVzb2x2ZShuLnZhbHVlKS50aGVuKHI9PnQuaW5uZXJUeXBlLl96b2QucnVuKHt2YWx1ZTpyLGlzc3VlczpbXX0sbykpfSksSXM9ZCgiJFpvZExhenkiLChlLHQpPT57ei5pbml0KGUsdCksS2MoZS5fem9kLCJpbm5lclR5cGUiLCgpPT57Y29uc3Qgbj10O3JldHVybiBuLl9jYWNoZWRJbm5lcnx8KG4uX2NhY2hlZElubmVyPXQuZ2V0dGVyKCkpLG4uX2NhY2hlZElubmVyfSksSShlLCJwYXR0ZXJuIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ucGF0dGVybiksSShlLCJwcm9wVmFsdWVzIixuPT5uLmlubmVyVHlwZT8uX3pvZD8ucHJvcFZhbHVlcyksSShlLCJvcHRpbiIsbj0+bi5pbm5lclR5cGU/Ll96b2Q/Lm9wdGluPz92b2lkIDApLEkoZSwib3B0b3V0IixuPT5uLmlubmVyVHlwZT8uX3pvZD8ub3B0b3V0Pz92b2lkIDApLGUuX3pvZC5wYXJzZT0obixvKT0+ZS5fem9kLmlubmVyVHlwZS5fem9kLnJ1bihuLG8pfSksS2Q9ZCgiJFpvZEN1c3RvbSIsKGUsdCk9PntMLmluaXQoZSx0KSx6LmluaXQoZSx0KSxlLl96b2QucGFyc2U9KG4sbyk9Pm4sZS5fem9kLmNoZWNrPW49Pntjb25zdCBvPW4udmFsdWUscj10LmZuKG8pO2lmKHIgaW5zdGFuY2VvZiBQcm9taXNlKXJldHVybiByLnRoZW4ocz0+UGMocyxuLG8sZSkpO1BjKHIsbixvLGUpfX0pO2Z1bmN0aW9uIFBjKGUsdCxuLG8pe2lmKCFlKXtjb25zdCByPXtjb2RlOiJjdXN0b20iLGlucHV0Om4saW5zdDpvLHBhdGg6Wy4uLm8uX3pvZC5kZWYucGF0aD8/W11dLGNvbnRpbnVlOiFvLl96b2QuZGVmLmFib3J0fTtvLl96b2QuZGVmLnBhcmFtcyYmKHIucGFyYW1zPW8uX3pvZC5kZWYucGFyYW1zKSx0Lmlzc3Vlcy5wdXNoKEtlKHIpKX19Y2xhc3MgV2QgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJDYW5ub3QgcGFyc2UgYSByZWZlcmVuY2UgY3ljbGUgdGhhdCBjbG9zZXMgdGhyb3VnaCBhIHRyYW5zZm9ybSIpLHRoaXMubmFtZT0iWm9kQ3ljbGljRXJyb3IifX1jb25zdCBqcj0ifm1lbW8iLHhjPVtdO2Z1bmN0aW9uIEdkKGUpe3JldHVybiBlIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QifWZ1bmN0aW9uIHpyKGUpe3JldHVybiBlLm1hcCh0PT50LnBhdGg/ey4uLnQscGF0aDp0LnBhdGguc2xpY2UoKX06ey4uLnR9KX1jb25zdCBRZD1uZXcgV2Vha01hcCxWZT0wLEhuPTEsd3Q9MjtmdW5jdGlvbiBrdChlLHQsbil7Y29uc3Qgbz1RZC5nZXQoZSk7aWYobyE9PXZvaWQgMClyZXR1cm4gbz93dDpWZTtpZih0LmhhcyhlKSlyZXR1cm4gd3Q7dC5hZGQoZSk7bGV0IHI9VmU7Y29uc3Qgcz1sPT57aWYociE9PXd0JiZsPy5fem9kKXtjb25zdCBoPWt0KGwsdCxuKTtoPnImJihyPWgpfX0saT0obCxoKT0+e2xldCBnPVZlO2Zvcihjb25zdCBfIG9mIFJlZmxlY3Qub3duS2V5cyhsKSl7Y29uc3QgYj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGwsXyk7aWYoIWIuZW51bWVyYWJsZSljb250aW51ZTtjb25zdCBrPWIuZ2V0P0huOmIudmFsdWU/Ll96b2Q/a3QoYi52YWx1ZSx0LG4pOlZlO2s+ZyYmKGc9ayl9cmV0dXJuIGd9LGE9bD0+e2w+ciYmKHI9bCl9LHU9ZS5fem9kLmRlZjtzd2l0Y2godS50eXBlKXtjYXNlIm9iamVjdCI6e2NvbnN0IGw9ZW8odSk7YShsP2kobCk6SG4pLHModS5jYXRjaGFsbCk7YnJlYWt9Y2FzZSJhcnJheSI6cyh1LmVsZW1lbnQpO2JyZWFrO2Nhc2UidHVwbGUiOmZvcihjb25zdCBsIG9mIHUuaXRlbXMpcyhsKTtzKHUucmVzdCk7YnJlYWs7Y2FzZSJyZWNvcmQiOmNhc2UibWFwIjpzKHUua2V5VHlwZSkscyh1LnZhbHVlVHlwZSk7YnJlYWs7Y2FzZSJzZXQiOnModS52YWx1ZVR5cGUpO2JyZWFrO2Nhc2UidW5pb24iOmZvcihjb25zdCBsIG9mIHUub3B0aW9ucylzKGwpO2JyZWFrO2Nhc2UiaW50ZXJzZWN0aW9uIjpzKHUubGVmdCkscyh1LnJpZ2h0KTticmVhaztjYXNlIm9wdGlvbmFsIjpjYXNlIm51bGxhYmxlIjpjYXNlImRlZmF1bHQiOmNhc2UicHJlZmF1bHQiOmNhc2UiY2F0Y2giOmNhc2UicmVhZG9ubHkiOmNhc2Uibm9ub3B0aW9uYWwiOmNhc2UicHJvbWlzZSI6Y2FzZSJzdWNjZXNzIjpzKHUuaW5uZXJUeXBlKTticmVhaztjYXNlInBpcGUiOnModS5pbikscyh1Lm91dCk7YnJlYWs7Y2FzZSJmdW5jdGlvbiI6cyh1LmlucHV0KSxzKHUub3V0cHV0KTticmVhaztjYXNlImxhenkiOntjb25zdCBsPXUuX2NhY2hlZElubmVyPz8obj9lLl96b2QuaW5uZXJUeXBlOnZvaWQgMCk7YShsP2t0KGwsdCwhMSk6SG4pO2JyZWFrfWNhc2UidGVtcGxhdGVfbGl0ZXJhbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImludCI6Y2FzZSJib29sZWFuIjpjYXNlImJpZ2ludCI6Y2FzZSJzeW1ib2wiOmNhc2UidW5kZWZpbmVkIjpjYXNlIm51bGwiOmNhc2Uidm9pZCI6Y2FzZSJuZXZlciI6Y2FzZSJhbnkiOmNhc2UidW5rbm93biI6Y2FzZSJkYXRlIjpjYXNlIm5hbiI6Y2FzZSJlbnVtIjpjYXNlImxpdGVyYWwiOmNhc2UiZmlsZSI6Y2FzZSJ0cmFuc2Zvcm0iOmNhc2UiY3VzdG9tIjpicmVhaztkZWZhdWx0OmZvcihjb25zdCBsIGluIHUpe2NvbnN0IGg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih1LGwpO2lmKCFofHxoLmdldCljb250aW51ZTtjb25zdCBnPWgudmFsdWU7aWYoISghZ3x8dHlwZW9mIGchPSJvYmplY3QiKSl7aWYoZy5fem9kKXMoZyk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGcpKWZvcihjb25zdCBfIG9mIGcpcyhfKX19fXJldHVybiB0LmRlbGV0ZShlKSxhbShlLHIpfWZ1bmN0aW9uIGFtKGUsdCl7cmV0dXJuIHQhPT1IbiYmUWQuc2V0KGUsdD09PXd0KSx0fWZ1bmN0aW9uIGNtKGUpe3JldHVybiBrdChlLG5ldyBTZXQsITApIT09VmV9ZnVuY3Rpb24gdW0oZSx0KXtsZXQgbj1lLmJ1Y2tldHMuZ2V0KHQpO3JldHVybiBufHwobj1uZXcgV2Vha01hcCxlLmJ1Y2tldHMuc2V0KHQsbikpLG59bGV0IE1uO2NvbnN0IERuPVtdLGxtPXthbGxvYyhlLHQsbil7Y29uc3Qgbz1NbjtpZighbylyZXR1cm4gbjtNbj12b2lkIDA7Y29uc3Qgcj17dmFsdWU6bixpc3N1ZXM6bnVsbH07cmV0dXJuIG8uc2V0KHQudmFsdWUsciksRG4ucHVzaChyKSxufSxndWFyZChlKXt2YXIgdDsodD1lLl96b2QpLmRlZmVycmVkPz8odC5kZWZlcnJlZD1bXSksZS5fem9kLmRlZmVycmVkLnB1c2goKCk9Pntjb25zdCBuPWUuX3pvZC5wYXJzZSxvPShyLHMpPT57aWYocy5kaXJlY3Rpb24hPT0iYmFja3dhcmQiJiZZZChzLHIudmFsdWUpKXRocm93IG5ldyBXZDtyZXR1cm4gbihyLHMpfTtlLl96b2QucGFyc2U9byxlLl96b2QucnVuPT09biYmKGUuX3pvZC5ydW49byl9KX0sYXR0YWNoKGUpe3ZhciB0O2xldCBuLG89ITEscixzOyh0PWUuX3pvZCkuZGVmZXJyZWQ/Pyh0LmRlZmVycmVkPVtdKSxlLl96b2QuZGVmZXJyZWQucHVzaCgoKT0+e2NvbnN0IGk9ZS5fem9kLnBhcnNlLGE9KHUsYyk9PntpZihuPT09dm9pZCAwKXtjb25zdCBOPWt0KGUsbmV3IFNldCwhMSk7aWYoTj09PVZlKXJldHVybiBlLl96b2QucGFyc2U9aSxlLl96b2QucnVuPT09YSYmKGUuX3pvZC5ydW49aSksaSh1LGMpO049PT13dHx8bz9uPSEwOm89ITB9Y29uc3QgbD11LnZhbHVlO2lmKCFHZChsKSlyZXR1cm4gaSh1LGMpO2xldCBoPWNbanJdO2h8fChoPXtidWNrZXRzOm5ldyBXZWFrTWFwLGJhY2tFZGdlczp2b2lkIDB9LGNbanJdPWgpO2xldCBnO3I9PT1jP2c9czooZz11bShoLGUpLHI9YyxzPWcpO2NvbnN0IF89Zy5nZXQobCk7aWYoXylyZXR1cm4gdS52YWx1ZT1fLnZhbHVlLF8uaXNzdWVzP18uaXNzdWVzLmxlbmd0aCYmdS5pc3N1ZXMucHVzaCguLi56cihfLmlzc3VlcykpOih1Lm1lbW89ITAsaC5iYWNrRWRnZXM/PyhoLmJhY2tFZGdlcz1uZXcgV2Vha1NldCksaC5iYWNrRWRnZXMuYWRkKF8udmFsdWUpKSx1O01uPWc7Y29uc3QgYj1Ebi5sZW5ndGgsaz1pKHUsYyk7TW49dm9pZCAwO2NvbnN0ICQ9RG4ubGVuZ3RoPmI/RG4ucG9wKCk6dm9pZCAwO3JldHVybiBrIGluc3RhbmNlb2YgUHJvbWlzZT9rLnRoZW4oTj0+KCQmJigkLmlzc3Vlcz1OLmlzc3Vlcy5sZW5ndGg/enIoTi5pc3N1ZXMpOnhjKSxOKSk6KCQmJigkLmlzc3Vlcz1rLmlzc3Vlcy5sZW5ndGg/enIoay5pc3N1ZXMpOnhjKSxrKX07ZS5fem9kLnBhcnNlPWEsZS5fem9kLnJ1bj09PWkmJihlLl96b2QucnVuPWEpfSl9fTtmdW5jdGlvbiBfbygpe3JldHVybiBsbX1mdW5jdGlvbiBZZChlLHQpe2NvbnN0IG49ZVtqcl0/LmJhY2tFZGdlcztyZXR1cm4gbiE9PXZvaWQgMCYmR2QodCkmJm4uaGFzKHQpfWNvbnN0IGRtPSgpPT57Y29uc3QgZT17c3RyaW5nOnt1bml0OiJjaGFyYWN0ZXJzIix2ZXJiOiJ0byBoYXZlIn0sZmlsZTp7dW5pdDoiYnl0ZXMiLHZlcmI6InRvIGhhdmUifSxhcnJheTp7dW5pdDoiaXRlbXMiLHZlcmI6InRvIGhhdmUifSxzZXQ6e3VuaXQ6Iml0ZW1zIix2ZXJiOiJ0byBoYXZlIn0sbWFwOnt1bml0OiJlbnRyaWVzIix2ZXJiOiJ0byBoYXZlIn19O2Z1bmN0aW9uIHQocyl7cmV0dXJuIGVbc10/P251bGx9Y29uc3Qgbj17cmVnZXg6ImlucHV0IixlbWFpbDoiZW1haWwgYWRkcmVzcyIsdXJsOiJVUkwiLGVtb2ppOiJlbW9qaSIsdXVpZDoiVVVJRCIsdXVpZHY0OiJVVUlEdjQiLHV1aWR2NjoiVVVJRHY2IixuYW5vaWQ6Im5hbm9pZCIsZ3VpZDoiR1VJRCIsY3VpZDoiY3VpZCIsY3VpZDI6ImN1aWQyIix1bGlkOiJVTElEIix4aWQ6IlhJRCIsa3N1aWQ6IktTVUlEIixkYXRldGltZToiSVNPIGRhdGV0aW1lIixkYXRlOiJJU08gZGF0ZSIsdGltZToiSVNPIHRpbWUiLGR1cmF0aW9uOiJJU08gZHVyYXRpb24iLGlwdjQ6IklQdjQgYWRkcmVzcyIsaXB2NjoiSVB2NiBhZGRyZXNzIixtYWM6Ik1BQyBhZGRyZXNzIixjaWRydjQ6IklQdjQgcmFuZ2UiLGNpZHJ2NjoiSVB2NiByYW5nZSIsYmFzZTY0OiJiYXNlNjQtZW5jb2RlZCBzdHJpbmciLGJhc2U2NHVybDoiYmFzZTY0dXJsLWVuY29kZWQgc3RyaW5nIixqc29uX3N0cmluZzoiSlNPTiBzdHJpbmciLGUxNjQ6IkUuMTY0IG51bWJlciIsY3VycmVuY3lfY29kZToiY3VycmVuY3kgY29kZSIsY3JlZGl0X2NhcmQ6ImNyZWRpdCBjYXJkIG51bWJlciIsaWJhbjoiSUJBTiIsand0OiJKV1QiLHRlbXBsYXRlX2xpdGVyYWw6ImlucHV0In0sbz17bmFuOiJOYU4ifTtmdW5jdGlvbiByKHMsaSl7cmV0dXJuIHM9PT0ibnVtYmVyIiYmdHlwZW9mIGk9PSJudW1iZXIiJiYhTnVtYmVyLmlzRmluaXRlKGkpP1N0cmluZyhpKTpvW3NdPz9zfXJldHVybiBzPT57c3dpdGNoKHMuY29kZSl7Y2FzZSJpbnZhbGlkX3R5cGUiOntjb25zdCBpPXIocy5leHBlY3RlZCksYT1wdShzLmlucHV0KSx1PXIoYSxzLmlucHV0KTtyZXR1cm5gSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgJHtpfSwgcmVjZWl2ZWQgJHt1fWB9Y2FzZSJpbnZhbGlkX3ZhbHVlIjpyZXR1cm4gcy52YWx1ZXMubGVuZ3RoPT09MT9gSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgJHtKcihzLnZhbHVlc1swXSl9YDpgSW52YWxpZCBvcHRpb246IGV4cGVjdGVkIG9uZSBvZiAke0lyKHMudmFsdWVzLCJ8Iil9YDtjYXNlInRvb19iaWciOntjb25zdCBpPXMuZXhhY3Q/ImV4YWN0bHkgIjpzLmluY2x1c2l2ZT8iPD0iOiI8IixhPXQocy5vcmlnaW4pO3JldHVybiBhP2BUb28gYmlnOiBleHBlY3RlZCAke3Mub3JpZ2luPz8idmFsdWUifSB0byBoYXZlICR7aX0ke3MubWF4aW11bS50b1N0cmluZygpfSAke2EudW5pdD8/ImVsZW1lbnRzIn1gOmBUb28gYmlnOiBleHBlY3RlZCAke3Mub3JpZ2luPz8idmFsdWUifSB0byBiZSAke2l9JHtzLm1heGltdW0udG9TdHJpbmcoKX1gfWNhc2UidG9vX3NtYWxsIjp7Y29uc3QgaT1zLmV4YWN0PyJleGFjdGx5ICI6cy5pbmNsdXNpdmU/Ij49IjoiPiIsYT10KHMub3JpZ2luKTtyZXR1cm4gYT9gVG9vIHNtYWxsOiBleHBlY3RlZCAke3Mub3JpZ2lufSB0byBoYXZlICR7aX0ke3MubWluaW11bS50b1N0cmluZygpfSAke2EudW5pdH1gOmBUb28gc21hbGw6IGV4cGVjdGVkICR7cy5vcmlnaW59IHRvIGJlICR7aX0ke3MubWluaW11bS50b1N0cmluZygpfWB9Y2FzZSJpbnZhbGlkX2Zvcm1hdCI6e2NvbnN0IGk9cztyZXR1cm4gaS5mb3JtYXQ9PT0ic3RhcnRzX3dpdGgiP2BJbnZhbGlkIHN0cmluZzogbXVzdCBzdGFydCB3aXRoICIke2kucHJlZml4fSJgOmkuZm9ybWF0PT09ImVuZHNfd2l0aCI/YEludmFsaWQgc3RyaW5nOiBtdXN0IGVuZCB3aXRoICIke2kuc3VmZml4fSJgOmkuZm9ybWF0PT09ImluY2x1ZGVzIj9gSW52YWxpZCBzdHJpbmc6IG11c3QgaW5jbHVkZSAiJHtpLmluY2x1ZGVzfSJgOmkuZm9ybWF0PT09InJlZ2V4Ij9gSW52YWxpZCBzdHJpbmc6IG11c3QgbWF0Y2ggcGF0dGVybiAke2kucGF0dGVybn1gOmBJbnZhbGlkICR7bltpLmZvcm1hdF0/P3MuZm9ybWF0fWB9Y2FzZSJub3RfbXVsdGlwbGVfb2YiOnJldHVybmBJbnZhbGlkIG51bWJlcjogbXVzdCBiZSBhIG11bHRpcGxlIG9mICR7cy5kaXZpc29yfWA7Y2FzZSJ1bnJlY29nbml6ZWRfa2V5cyI6cmV0dXJuYFVucmVjb2duaXplZCBrZXkke3Mua2V5cy5sZW5ndGg+MT8icyI6IiJ9OiAke0lyKHMua2V5cywiLCAiKX1gO2Nhc2UiaW52YWxpZF9rZXkiOnJldHVybmBJbnZhbGlkIGtleSBpbiAke3Mub3JpZ2lufWA7Y2FzZSJpbnZhbGlkX3VuaW9uIjpyZXR1cm4gcy5vcHRpb25zJiZBcnJheS5pc0FycmF5KHMub3B0aW9ucykmJnMub3B0aW9ucy5sZW5ndGg+MD9gSW52YWxpZCBkaXNjcmltaW5hdG9yIHZhbHVlLiBFeHBlY3RlZCAke3Mub3B0aW9ucy5tYXAoYT0+YCcke2F9J2ApLmpvaW4oIiB8ICIpfWA6cy5pbmNsdXNpdmU9PT0hMT8iSW52YWxpZCBpbnB1dDogbW9yZSB0aGFuIG9uZSBvcHRpb24gbWF0Y2hlZCI6IkludmFsaWQgaW5wdXQiO2Nhc2UiaW52YWxpZF9lbGVtZW50IjpyZXR1cm5gSW52YWxpZCB2YWx1ZSBpbiAke3Mub3JpZ2lufWA7ZGVmYXVsdDpyZXR1cm4iSW52YWxpZCBpbnB1dCJ9fX07ZnVuY3Rpb24gWGQoKXtyZXR1cm57bG9jYWxlRXJyb3I6ZG0oKX19Y29uc3QgRXM9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGVuOlhkfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpO3ZhciBJYztjb25zdCBScz1TeW1ib2woIlpvZE91dHB1dCIpLFpzPVN5bWJvbCgiWm9kSW5wdXQiKTtjbGFzcyBlcHtjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgV2Vha01hcCx0aGlzLl9pZG1hcD1uZXcgTWFwfWFkZCh0LC4uLm4pe2NvbnN0IG89blswXTtyZXR1cm4gdGhpcy5fbWFwLnNldCh0LG8pLG8mJnR5cGVvZiBvPT0ib2JqZWN0IiYmImlkImluIG8mJnRoaXMuX2lkbWFwLnNldChvLmlkLHQpLHRoaXN9Y2xlYXIoKXtyZXR1cm4gdGhpcy5fbWFwPW5ldyBXZWFrTWFwLHRoaXMuX2lkbWFwPW5ldyBNYXAsdGhpc31yZW1vdmUodCl7Y29uc3Qgbj10aGlzLl9tYXAuZ2V0KHQpO3JldHVybiBuJiZ0eXBlb2Ygbj09Im9iamVjdCImJiJpZCJpbiBuJiZ0aGlzLl9pZG1hcC5kZWxldGUobi5pZCksdGhpcy5fbWFwLmRlbGV0ZSh0KSx0aGlzfWdldCh0KXtjb25zdCBuPXQuX3pvZC5wYXJlbnQ7aWYobil7Y29uc3Qgbz17Li4udGhpcy5nZXQobik/P3t9fTtkZWxldGUgby5pZDtjb25zdCByPXsuLi5vLC4uLnRoaXMuX21hcC5nZXQodCl9O3JldHVybiBPYmplY3Qua2V5cyhyKS5sZW5ndGg/cjp2b2lkIDB9cmV0dXJuIHRoaXMuX21hcC5nZXQodCl9aGFzKHQpe3JldHVybiB0aGlzLl9tYXAuaGFzKHQpfX1mdW5jdGlvbiB2bygpe3JldHVybiBuZXcgZXB9KEljPWdsb2JhbFRoaXMpLl9fem9kX2dsb2JhbFJlZ2lzdHJ5Pz8oSWMuX196b2RfZ2xvYmFsUmVnaXN0cnk9dm8oKSk7Y29uc3QgbGU9Z2xvYmFsVGhpcy5fX3pvZF9nbG9iYWxSZWdpc3RyeSxDcz0oKT0+e3Rocm93IG5ldyBFcnJvcigiem9kIGNvbXBpbGUoKSBpcyBub3QgYnVuZGxlZCBpbnRvIGNhcmRzIC0gc2VlIHBhY2thZ2VzL2ludGVybmFsL2NhcmQta2l0L3ZpdGUtc2xpbS5tanMiKX07Y2xhc3MgT3MgZXh0ZW5kcyBFcnJvcnt9Y2xhc3MgQXMgZXh0ZW5kcyBFcnJvcnt9Y2xhc3MgTnMgZXh0ZW5kcyBFcnJvcnt9Y29uc3QganM9Q3MsTXM9Q3MscG09Q3M7ZnVuY3Rpb24gYm8oZSl7cmV0dXJuIGUuY2hlY2tzJiYoZS5jaGVja3M9Wy4uLmUuY2hlY2tzXSksZX1mdW5jdGlvbiB0cChlLHQpe3JldHVybiBuZXcgZShibyh7dHlwZToic3RyaW5nIiwuLi52KHQpfSkpfWZ1bmN0aW9uIG5wKGUsdCl7cmV0dXJuIG5ldyBlKGJvKHt0eXBlOiJzdHJpbmciLGNvZXJjZTohMCwuLi52KHQpfSkpfWZ1bmN0aW9uIERzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZW1haWwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi52KHQpfSl9ZnVuY3Rpb24gcXMoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJndWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4udih0KX0pfWZ1bmN0aW9uIExzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnYodCl9KX1mdW5jdGlvbiBVcyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InV1aWQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSx2ZXJzaW9uOiJ2NCIsLi4udih0KX0pfWZ1bmN0aW9uIEhzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidXVpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLHZlcnNpb246InY2IiwuLi52KHQpfSl9ZnVuY3Rpb24gRnMoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ1dWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsdmVyc2lvbjoidjciLC4uLnYodCl9KX1mdW5jdGlvbiB5byhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InVybCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnYodCl9KX1mdW5jdGlvbiBCcyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImVtb2ppIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4udih0KX0pfWZ1bmN0aW9uIFZzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoibmFub2lkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4udih0KX0pfWZ1bmN0aW9uIEpzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3VpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnYodCl9KX1mdW5jdGlvbiBLcyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImN1aWQyIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4udih0KX0pfWZ1bmN0aW9uIFdzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoidWxpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnYodCl9KX1mdW5jdGlvbiBHcyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6InhpZCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnYodCl9KX1mdW5jdGlvbiBRcyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImtzdWlkIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4udih0KX0pfWZ1bmN0aW9uIFlzKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiaXB2NCIsY2hlY2s6InN0cmluZ19mb3JtYXQiLGFib3J0OiExLC4uLnYodCl9KX1mdW5jdGlvbiBYcyhlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImlwdjYiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi52KHQpfSl9ZnVuY3Rpb24gb3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJtYWMiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi52KHQpfSl9ZnVuY3Rpb24gZWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjaWRydjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi52KHQpfSl9ZnVuY3Rpb24gdGkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJjaWRydjYiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi52KHQpfSl9ZnVuY3Rpb24gbmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJiYXNlNjQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi52KHQpfSl9ZnVuY3Rpb24gb2koZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJiYXNlNjR1cmwiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi52KHQpfSl9ZnVuY3Rpb24gcmkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJlMTY0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4udih0KX0pfWZ1bmN0aW9uIHJwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiY3JlZGl0X2NhcmQiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IixhYm9ydDohMSwuLi52KHQpfSl9ZnVuY3Rpb24gc3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJpYmFuIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4udih0KX0pfWZ1bmN0aW9uIHNpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiand0IixjaGVjazoic3RyaW5nX2Zvcm1hdCIsYWJvcnQ6ITEsLi4udih0KX0pfWNvbnN0IGlpPXtBbnk6bnVsbCxNaW51dGU6LTEsU2Vjb25kOjAsTWlsbGlzZWNvbmQ6MyxNaWNyb3NlY29uZDo2fTtmdW5jdGlvbiBhaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImRhdGV0aW1lIixjaGVjazoic3RyaW5nX2Zvcm1hdCIsb2Zmc2V0OiExLGxvY2FsOiExLHByZWNpc2lvbjpudWxsLC4uLnYodCl9KX1mdW5jdGlvbiBjaShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToic3RyaW5nIixmb3JtYXQ6ImRhdGUiLGNoZWNrOiJzdHJpbmdfZm9ybWF0IiwuLi52KHQpfSl9ZnVuY3Rpb24gdWkoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN0cmluZyIsZm9ybWF0OiJ0aW1lIixjaGVjazoic3RyaW5nX2Zvcm1hdCIscHJlY2lzaW9uOm51bGwsLi4udih0KX0pfWZ1bmN0aW9uIGxpKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzdHJpbmciLGZvcm1hdDoiZHVyYXRpb24iLGNoZWNrOiJzdHJpbmdfZm9ybWF0IiwuLi52KHQpfSl9ZnVuY3Rpb24gaXAoZSx0KXtyZXR1cm4gbmV3IGUoYm8oe3R5cGU6Im51bWJlciIsY2hlY2tzOltdLC4uLnYodCl9KSl9ZnVuY3Rpb24gYXAoZSx0KXtyZXR1cm4gbmV3IGUoYm8oe3R5cGU6Im51bWJlciIsY29lcmNlOiEwLGNoZWNrczpbXSwuLi52KHQpfSkpfWZ1bmN0aW9uIGNwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InNhZmVpbnQiLC4uLnYodCl9KX1mdW5jdGlvbiB1cChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToibnVtYmVyIixjaGVjazoibnVtYmVyX2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJmbG9hdDMyIiwuLi52KHQpfSl9ZnVuY3Rpb24gbHAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoiZmxvYXQ2NCIsLi4udih0KX0pfWZ1bmN0aW9uIGRwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJudW1iZXIiLGNoZWNrOiJudW1iZXJfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6ImludDMyIiwuLi52KHQpfSl9ZnVuY3Rpb24gcHAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bWJlciIsY2hlY2s6Im51bWJlcl9mb3JtYXQiLGFib3J0OiExLGZvcm1hdDoidWludDMyIiwuLi52KHQpfSl9ZnVuY3Rpb24gZnAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJvb2xlYW4iLC4uLnYodCl9KX1mdW5jdGlvbiBocChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYm9vbGVhbiIsY29lcmNlOiEwLC4uLnYodCl9KX1mdW5jdGlvbiBtcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IiwuLi52KHQpfSl9ZnVuY3Rpb24gZ3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImJpZ2ludCIsY29lcmNlOiEwLC4uLnYodCl9KX1mdW5jdGlvbiBfcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiYmlnaW50IixjaGVjazoiYmlnaW50X2Zvcm1hdCIsYWJvcnQ6ITEsZm9ybWF0OiJpbnQ2NCIsLi4udih0KX0pfWZ1bmN0aW9uIHZwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJiaWdpbnQiLGNoZWNrOiJiaWdpbnRfZm9ybWF0IixhYm9ydDohMSxmb3JtYXQ6InVpbnQ2NCIsLi4udih0KX0pfWZ1bmN0aW9uIGJwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJzeW1ib2wiLC4uLnYodCl9KX1mdW5jdGlvbiB5cChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToidW5kZWZpbmVkIiwuLi52KHQpfSl9ZnVuY3Rpb24gd3AoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bGwiLC4uLnYodCl9KX1mdW5jdGlvbiBrcChlKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImFueSJ9KX1mdW5jdGlvbiBTcChlKXtyZXR1cm4gbmV3IGUoe3R5cGU6InVua25vd24ifSl9ZnVuY3Rpb24gJHAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5ldmVyIiwuLi52KHQpfSl9ZnVuY3Rpb24genAoZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InZvaWQiLC4uLnYodCl9KX1mdW5jdGlvbiBUcChlLHQpe3JldHVybiBuZXcgZSh7dHlwZToiZGF0ZSIsLi4udih0KX0pfWZ1bmN0aW9uIFBwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJkYXRlIixjb2VyY2U6ITAsLi4udih0KX0pfWZ1bmN0aW9uIHhwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJuYW4iLC4uLnYodCl9KX1mdW5jdGlvbiBTZShlLHQpe3JldHVybiBuZXcgZnMoe2NoZWNrOiJsZXNzX3RoYW4iLC4uLnYodCksdmFsdWU6ZSxpbmNsdXNpdmU6ITF9KX1mdW5jdGlvbiBzZShlLHQpe3JldHVybiBuZXcgZnMoe2NoZWNrOiJsZXNzX3RoYW4iLC4uLnYodCksdmFsdWU6ZSxpbmNsdXNpdmU6ITB9KX1mdW5jdGlvbiAkZShlLHQpe3JldHVybiBuZXcgaHMoe2NoZWNrOiJncmVhdGVyX3RoYW4iLC4uLnYodCksdmFsdWU6ZSxpbmNsdXNpdmU6ITF9KX1mdW5jdGlvbiBpZShlLHQpe3JldHVybiBuZXcgaHMoe2NoZWNrOiJncmVhdGVyX3RoYW4iLC4uLnYodCksdmFsdWU6ZSxpbmNsdXNpdmU6ITB9KX1mdW5jdGlvbiB3byhlKXtyZXR1cm4gJGUoMCxlKX1mdW5jdGlvbiBrbyhlKXtyZXR1cm4gU2UoMCxlKX1mdW5jdGlvbiBTbyhlKXtyZXR1cm4gc2UoMCxlKX1mdW5jdGlvbiAkbyhlKXtyZXR1cm4gaWUoMCxlKX1mdW5jdGlvbiBqZShlLHQpe3JldHVybiBuZXcgcmwoe2NoZWNrOiJtdWx0aXBsZV9vZiIsLi4udih0KSx2YWx1ZTplfSl9ZnVuY3Rpb24gSGUoZSx0KXtyZXR1cm4gbmV3IGFsKHtjaGVjazoibWF4X3NpemUiLC4uLnYodCksbWF4aW11bTplfSl9ZnVuY3Rpb24gemUoZSx0KXtyZXR1cm4gbmV3IGNsKHtjaGVjazoibWluX3NpemUiLC4uLnYodCksbWluaW11bTplfSl9ZnVuY3Rpb24gZXQoZSx0KXtyZXR1cm4gbmV3IHVsKHtjaGVjazoic2l6ZV9lcXVhbHMiLC4uLnYodCksc2l6ZTplfSl9ZnVuY3Rpb24gdHQoZSx0KXtyZXR1cm4gbmV3IGxsKHtjaGVjazoibWF4X2xlbmd0aCIsLi4udih0KSxtYXhpbXVtOmV9KX1mdW5jdGlvbiBFZShlLHQpe3JldHVybiBuZXcgZGwoe2NoZWNrOiJtaW5fbGVuZ3RoIiwuLi52KHQpLG1pbmltdW06ZX0pfWZ1bmN0aW9uIG50KGUsdCl7cmV0dXJuIG5ldyBwbCh7Y2hlY2s6Imxlbmd0aF9lcXVhbHMiLC4uLnYodCksbGVuZ3RoOmV9KX1mdW5jdGlvbiBEdChlLHQpe3JldHVybiBuZXcgZmwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InJlZ2V4IiwuLi52KHQpLHBhdHRlcm46ZX0pfWZ1bmN0aW9uIHF0KGUpe3JldHVybiBuZXcgaGwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6Imxvd2VyY2FzZSIsLi4udihlKX0pfWZ1bmN0aW9uIEx0KGUpe3JldHVybiBuZXcgbWwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6InVwcGVyY2FzZSIsLi4udihlKX0pfWZ1bmN0aW9uIFV0KGUsdCl7cmV0dXJuIG5ldyBnbCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoiaW5jbHVkZXMiLC4uLnYodCksaW5jbHVkZXM6ZX0pfWZ1bmN0aW9uIEh0KGUsdCl7cmV0dXJuIG5ldyBfbCh7Y2hlY2s6InN0cmluZ19mb3JtYXQiLGZvcm1hdDoic3RhcnRzX3dpdGgiLC4uLnYodCkscHJlZml4OmV9KX1mdW5jdGlvbiBGdChlLHQpe3JldHVybiBuZXcgdmwoe2NoZWNrOiJzdHJpbmdfZm9ybWF0Iixmb3JtYXQ6ImVuZHNfd2l0aCIsLi4udih0KSxzdWZmaXg6ZX0pfWZ1bmN0aW9uIHpvKGUsdCxuKXtyZXR1cm4gbmV3IGJsKHtjaGVjazoicHJvcGVydHkiLHByb3BlcnR5OmUsc2NoZW1hOnQsLi4udihuKX0pfWZ1bmN0aW9uIEJ0KGUsdCl7cmV0dXJuIG5ldyB5bCh7Y2hlY2s6InByb3BlcnRpZXMiLHNoYXBlOmUsLi4udih0KX0pfWZ1bmN0aW9uIFZ0KGUsdCl7cmV0dXJuIG5ldyB3bCh7Y2hlY2s6Im1pbWVfdHlwZSIsbWltZTplLC4uLnYodCl9KX1mdW5jdGlvbiBiZShlKXtyZXR1cm4gbmV3IGtsKHtjaGVjazoib3ZlcndyaXRlIix0eDplfSl9ZnVuY3Rpb24gSnQoZSl7cmV0dXJuIGJlKHQ9PnQubm9ybWFsaXplKGUpKX1mdW5jdGlvbiBLdCgpe3JldHVybiBiZShlPT5lLnRyaW0oKSl9ZnVuY3Rpb24gV3QoKXtyZXR1cm4gYmUoZT0+ZS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBHdCgpe3JldHVybiBiZShlPT5lLnRvVXBwZXJDYXNlKCkpfWZ1bmN0aW9uIFF0KCl7cmV0dXJuIGJlKGU9PlljKGUpKX1mdW5jdGlvbiBJcChlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJhcnJheSIsZWxlbWVudDp0LC4uLnYobil9KX1mdW5jdGlvbiBmbShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LC4uLnYobil9KX1mdW5jdGlvbiBobShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczp0LGluY2x1c2l2ZTohMSwuLi52KG4pfSl9ZnVuY3Rpb24gbW0oZSx0LG4sbyl7cmV0dXJuIG5ldyBlKHt0eXBlOiJ1bmlvbiIsb3B0aW9uczpuLGRpc2NyaW1pbmF0b3I6dCwuLi52KG8pfSl9ZnVuY3Rpb24gZ20oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiaW50ZXJzZWN0aW9uIixsZWZ0OnQscmlnaHQ6bn0pfWZ1bmN0aW9uIF9tKGUsdCxuLG8pe2NvbnN0IHI9biBpbnN0YW5jZW9mIHoscz1yP286bixpPXI/bjpudWxsO3JldHVybiBuZXcgZSh7dHlwZToidHVwbGUiLGl0ZW1zOnQscmVzdDppLC4uLnYocyl9KX1mdW5jdGlvbiB2bShlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTp0LHZhbHVlVHlwZTpuLC4uLnYobyl9KX1mdW5jdGlvbiBibShlLHQsbixvKXtyZXR1cm4gbmV3IGUoe3R5cGU6Im1hcCIsa2V5VHlwZTp0LHZhbHVlVHlwZTpuLC4uLnYobyl9KX1mdW5jdGlvbiB5bShlLHQsbil7cmV0dXJuIG5ldyBlKHt0eXBlOiJzZXQiLHZhbHVlVHlwZTp0LC4uLnYobil9KX1mdW5jdGlvbiB3bShlLHQsbil7Y29uc3Qgbz1BcnJheS5pc0FycmF5KHQpP09iamVjdC5mcm9tRW50cmllcyh0Lm1hcChyPT5bcixyXSkpOnQ7cmV0dXJuIG5ldyBlKHt0eXBlOiJlbnVtIixlbnRyaWVzOm8sLi4udihuKX0pfWZ1bmN0aW9uIGttKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImVudW0iLGVudHJpZXM6dCwuLi52KG4pfSl9ZnVuY3Rpb24gU20oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToibGl0ZXJhbCIsdmFsdWVzOkFycmF5LmlzQXJyYXkodCk/dDpbdF0sLi4udihuKX0pfWZ1bmN0aW9uIEVwKGUsdCl7cmV0dXJuIG5ldyBlKHt0eXBlOiJmaWxlIiwuLi52KHQpfSl9ZnVuY3Rpb24gJG0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InRyYW5zZm9ybSIsdHJhbnNmb3JtOnR9KX1mdW5jdGlvbiB6bShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gVG0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6Im51bGxhYmxlIixpbm5lclR5cGU6dH0pfWZ1bmN0aW9uIFBtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImRlZmF1bHQiLGlubmVyVHlwZTp0LGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIG49PSJmdW5jdGlvbiI/bigpOnRvKG4pfX0pfWZ1bmN0aW9uIHhtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6dCwuLi52KG4pfSl9ZnVuY3Rpb24gSW0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InN1Y2Nlc3MiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gRW0oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToiY2F0Y2giLGlubmVyVHlwZTp0LGNhdGNoVmFsdWU6dHlwZW9mIG49PSJmdW5jdGlvbiI/bjpLcihuKX0pfWZ1bmN0aW9uIFJtKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6InBpcGUiLGluOnQsb3V0Om59KX1mdW5jdGlvbiBabShlLHQpe3JldHVybiBuZXcgZSh7dHlwZToicmVhZG9ubHkiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gQ20oZSx0LG4pe3JldHVybiBuZXcgZSh7dHlwZToidGVtcGxhdGVfbGl0ZXJhbCIscGFydHM6dCwuLi52KG4pfSl9ZnVuY3Rpb24gT20oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6ImxhenkiLGdldHRlcjp0fSl9ZnVuY3Rpb24gQW0oZSx0KXtyZXR1cm4gbmV3IGUoe3R5cGU6InByb21pc2UiLGlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gUnAoZSx0LG4pe2NvbnN0IG89dihuKTtyZXR1cm4gby5hYm9ydD8/KG8uYWJvcnQ9ITApLG5ldyBlKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOnQsLi4ub30pfWZ1bmN0aW9uIFpwKGUsdCxuKXtyZXR1cm4gbmV3IGUoe3R5cGU6ImN1c3RvbSIsY2hlY2s6ImN1c3RvbSIsZm46dCwuLi52KG4pfSl9ZnVuY3Rpb24gQ3AoZSx0KXtjb25zdCBuPU9wKG89PihvLmFkZElzc3VlPXI9PntpZih0eXBlb2Ygcj09InN0cmluZyIpby5pc3N1ZXMucHVzaChLZShyLG8udmFsdWUsbi5fem9kLmRlZikpO2Vsc2V7Y29uc3Qgcz1yO3MuZmF0YWwmJihzLmNvbnRpbnVlPSExKSxzLmNvZGU/PyhzLmNvZGU9ImN1c3RvbSIpLCJpbnB1dCJpbiBzfHwocy5pbnB1dD1vLnZhbHVlKSxzLmluc3Q/PyhzLmluc3Q9bikscy5jb250aW51ZT8/KHMuY29udGludWU9IW4uX3pvZC5kZWYuYWJvcnQpLG8uaXNzdWVzLnB1c2goS2UocykpfX0sZShvLnZhbHVlLG8pKSx0KTtyZXR1cm4gbn1mdW5jdGlvbiBPcChlLHQpe2NvbnN0IG49bmV3IEwoe2NoZWNrOiJjdXN0b20iLC4uLnYodCl9KTtyZXR1cm4gbi5fem9kLmNoZWNrPWUsbn1mdW5jdGlvbiBBcChlKXtjb25zdCB0PW5ldyBMKHtjaGVjazoiZGVzY3JpYmUifSk7cmV0dXJuIHQuX3pvZC5vbmF0dGFjaD1bbj0+e2NvbnN0IG89bGUuZ2V0KG4pPz97fTtsZS5hZGQobix7Li4ubyxkZXNjcmlwdGlvbjplfSl9XSx0Ll96b2QuY2hlY2s9KCk9Pnt9LHR9ZnVuY3Rpb24gTnAoZSl7Y29uc3QgdD1uZXcgTCh7Y2hlY2s6Im1ldGEifSk7cmV0dXJuIHQuX3pvZC5vbmF0dGFjaD1bbj0+e2NvbnN0IG89bGUuZ2V0KG4pPz97fTtsZS5hZGQobix7Li4ubywuLi5lfSl9XSx0Ll96b2QuY2hlY2s9KCk9Pnt9LHR9ZnVuY3Rpb24ganAoZSx0KXtjb25zdCBuPXYodCk7bGV0IG89bi50cnV0aHk/P1sidHJ1ZSIsIjEiLCJ5ZXMiLCJvbiIsInkiLCJlbmFibGVkIl0scj1uLmZhbHN5Pz9bImZhbHNlIiwiMCIsIm5vIiwib2ZmIiwibiIsImRpc2FibGVkIl07bi5jYXNlIT09InNlbnNpdGl2ZSImJihvPW8ubWFwKF89PnR5cGVvZiBfPT0ic3RyaW5nIj9fLnRvTG93ZXJDYXNlKCk6Xykscj1yLm1hcChfPT50eXBlb2YgXz09InN0cmluZyI/Xy50b0xvd2VyQ2FzZSgpOl8pKTtjb25zdCBzPW5ldyBTZXQobyksaT1uZXcgU2V0KHIpLGE9ZS5Db2RlYz8/eHMsdT1lLkJvb2xlYW4/P2tzLGM9ZS5TdHJpbmc/P010LGw9bmV3IGMoe3R5cGU6InN0cmluZyIsZXJyb3I6bi5lcnJvcn0pLGg9bmV3IHUoe3R5cGU6ImJvb2xlYW4iLGVycm9yOm4uZXJyb3J9KSxnPW5ldyBhKHt0eXBlOiJwaXBlIixpbjpsLG91dDpoLHRyYW5zZm9ybTooKF8sYik9PntsZXQgaz1fO3JldHVybiBuLmNhc2UhPT0ic2Vuc2l0aXZlIiYmKGs9ay50b0xvd2VyQ2FzZSgpKSxzLmhhcyhrKT8hMDppLmhhcyhrKT8hMTooYi5pc3N1ZXMucHVzaCh7Y29kZToiaW52YWxpZF92YWx1ZSIsZXhwZWN0ZWQ6InN0cmluZ2Jvb2wiLHZhbHVlczpbLi4ucywuLi5pXSxpbnB1dDpiLnZhbHVlLGluc3Q6Zyxjb250aW51ZTohMX0pLHt9KX0pLHJldmVyc2VUcmFuc2Zvcm06KChfLGIpPT5fPT09ITA/b1swXXx8InRydWUiOnJbMF18fCJmYWxzZSIpLGVycm9yOm4uZXJyb3J9KTtyZXR1cm4gZy5fem9kLmJhZy50cnV0aHk9byxnLl96b2QuYmFnLmZhbHN5PXIsZy5fem9kLmJhZy5jYXNlPW4uY2FzZT8/Imluc2Vuc2l0aXZlIixnfWZ1bmN0aW9uIG90KGUsdCxuLG89e30pe2NvbnN0IHI9dihvKSxzPXtjaGVjazoic3RyaW5nX2Zvcm1hdCIsdHlwZToic3RyaW5nIixmb3JtYXQ6dCxmbjp0eXBlb2Ygbj09ImZ1bmN0aW9uIj9uOmE9Pm4udGVzdChhKSwuLi5yfTtyZXR1cm4gbiBpbnN0YW5jZW9mIFJlZ0V4cCYmKHMucGF0dGVybj1uKSxuZXcgZShzKX1jb25zdCBObT0oKT0+KHt9KSxqbT0oKT0+KHt9KSxNbT0oKT0+KHt9KSxEbT0oKT0+KHt9KSxxbT0oKT0+KHt9KSxNcD0oKT0+KCk9Pih7fSksTXI9KCk9PigpPT4oe30pLExtPSgpPT4oe30pLGRlPSgpPT4oe30pLFVtPSgpPT4oe30pLEhtPSgpPT4oe30pLEZtPSgpPT4oe30pLEJtPSgpPT4oe30pLFZtPSgpPT4oe30pLEptPSgpPT4oe30pLEttPSgpPT4oe30pLFdtPSgpPT4oe30pLEdtPSgpPT4oe30pLFFtPSgpPT4oe30pLFltPSgpPT4oe30pLFhtPSgpPT4oe30pLGVnPSgpPT4oe30pLHRnPSgpPT4oe30pLG5nPSgpPT4oe30pLG9nPSgpPT4oe30pLHJnPSgpPT4oe30pLHNnPSgpPT4oe30pLGlnPSgpPT4oe30pLGFnPSgpPT4oe30pLGNnPSgpPT4oe30pLHVnPSgpPT4oe30pLGxnPSgpPT4oe30pLGRnPSgpPT4oe30pLHBnPSgpPT4oe30pLERwPSgpPT4oe30pLGZnPSgpPT4oe30pLGhnPSgpPT4oe30pLG1nPSgpPT4oe30pLGdnPSgpPT4oe30pLF9nPSgpPT4oe30pLHZnPSgpPT4oe30pLGJnPSgpPT4oe30pLHlnPSgpPT4oe30pLHdnPSgpPT4oe30pLGtnPSgpPT4oe30pLFNnPSgpPT4oe30pLHFwPSgpPT4oe30pLCRnPSgpPT4oe30pLGRpPSgpPT4oe30pO2NsYXNzIHpne31jb25zdCBUZz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGx9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksTHA9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLCRab2RBbnk6aGQsJFpvZEFycmF5OmJkLCRab2RBc3luY0Vycm9yOnhlLCRab2RCYXNlNjQ6WWwsJFpvZEJhc2U2NFVSTDplZCwkWm9kQmlnSW50OlNzLCRab2RCaWdJbnRGb3JtYXQ6bGQsJFpvZEJvb2xlYW46a3MsJFpvZENJRFJ2NDpLbCwkWm9kQ0lEUnY2OkdsLCRab2RDVUlEOk5sLCRab2RDVUlEMjpqbCwkWm9kQ2F0Y2g6TGQsJFpvZENoZWNrOkwsJFpvZENoZWNrQmlnSW50Rm9ybWF0OmlsLCRab2RDaGVja0VuZHNXaXRoOnZsLCRab2RDaGVja0dyZWF0ZXJUaGFuOmhzLCRab2RDaGVja0luY2x1ZGVzOmdsLCRab2RDaGVja0xlbmd0aEVxdWFsczpwbCwkWm9kQ2hlY2tMZXNzVGhhbjpmcywkWm9kQ2hlY2tMb3dlckNhc2U6aGwsJFpvZENoZWNrTWF4TGVuZ3RoOmxsLCRab2RDaGVja01heFNpemU6YWwsJFpvZENoZWNrTWltZVR5cGU6d2wsJFpvZENoZWNrTWluTGVuZ3RoOmRsLCRab2RDaGVja01pblNpemU6Y2wsJFpvZENoZWNrTXVsdGlwbGVPZjpybCwkWm9kQ2hlY2tOdW1iZXJGb3JtYXQ6c2wsJFpvZENoZWNrT3ZlcndyaXRlOmtsLCRab2RDaGVja1Byb3BlcnRpZXM6eWwsJFpvZENoZWNrUHJvcGVydHk6YmwsJFpvZENoZWNrUmVnZXg6ZmwsJFpvZENoZWNrU2l6ZUVxdWFsczp1bCwkWm9kQ2hlY2tTdGFydHNXaXRoOl9sLCRab2RDaGVja1N0cmluZ0Zvcm1hdDpqdCwkWm9kQ2hlY2tVcHBlckNhc2U6bWwsJFpvZENvZGVjOnhzLCRab2RDcmVkaXRDYXJkOm9kLCRab2RDdXN0b206S2QsJFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpjZCwkWm9kQ3ljbGljRXJyb3I6V2QsJFpvZERhdGU6dmQsJFpvZERlZmF1bHQ6amQsJFpvZERpc2NyaW1pbmF0ZWRVbmlvbjpUZCwkWm9kRTE2NDp0ZCwkWm9kRW1haWw6eGwsJFpvZEVtb2ppOk9sLCRab2RFbmNvZGVFcnJvcjphbywkWm9kRW51bTpSZCwkWm9kRXJyb3I6YnUsJFpvZEV4YWN0T3B0aW9uYWw6QWQsJFpvZEZpbGU6Q2QsJFpvZEZ1bmN0aW9uOlZkLCRab2RHVUlEOlRsLCRab2RJQkFOOnNkLCRab2RJUHY0OkJsLCRab2RJUHY2OlZsLCRab2RJU09EYXRlOlVsLCRab2RJU09EYXRlVGltZTpMbCwkWm9kSVNPRHVyYXRpb246RmwsJFpvZElTT1RpbWU6SGwsJFpvZEludGVyc2VjdGlvbjpQZCwkWm9kSldUOmFkLCRab2RLU1VJRDpxbCwkWm9kTGF6eTpJcywkWm9kTGl0ZXJhbDpaZCwkWm9kTUFDOkpsLCRab2RNYXA6SWQsJFpvZE5hTjpVZCwkWm9kTmFub0lEOkFsLCRab2ROZXZlcjpnZCwkWm9kTm9uT3B0aW9uYWw6RGQsJFpvZE51bGw6ZmQsJFpvZE51bGxhYmxlOk5kLCRab2ROdW1iZXI6d3MsJFpvZE51bWJlckZvcm1hdDp1ZCwkWm9kT2JqZWN0OmtkLCRab2RPYmplY3RKSVQ6U2QsJFpvZE9wdGlvbmFsOlRzLCRab2RQaXBlOlBzLCRab2RQcmVmYXVsdDpNZCwkWm9kUHJlcHJvY2VzczpIZCwkWm9kUHJvbWlzZTpKZCwkWm9kUmVhZG9ubHk6RmQsJFpvZFJlYWxFcnJvcjphZSwkWm9kUmVjb3JkOnhkLCRab2RSZWdpc3RyeTplcCwkWm9kU2V0OkVkLCRab2RTdHJpbmc6TXQsJFpvZFN0cmluZ0Zvcm1hdDpNLCRab2RTdWNjZXNzOnFkLCRab2RTeW1ib2w6ZGQsJFpvZFRlbXBsYXRlTGl0ZXJhbDpCZCwkWm9kVHJhbnNmb3JtOk9kLCRab2RUdXBsZTp6cywkWm9kVHlwZTp6LCRab2RVTElEOk1sLCRab2RVUkw6Q2wsJFpvZFVVSUQ6UGwsJFpvZFVuZGVmaW5lZDpwZCwkWm9kVW5pb246Z28sJFpvZFVua25vd246bWQsJFpvZFZvaWQ6X2QsJFpvZFhJRDpEbCwkWm9kWG9yOiRkLCRicmFuZDpRciwkY29uc3RydWN0b3I6ZCwkaW5wdXQ6WnMsJG91dHB1dDpScyxEb2M6U2wsSU5WQUxJRDpPcyxKU09OU2NoZW1hOlRnLEpTT05TY2hlbWFHZW5lcmF0b3I6emcsTkVWRVI6R3IsVGltZVByZWNpc2lvbjppaSxVUkxfQkFEX0ZPUk1BVDpncyxVUkxfVU5QQVJTRUFCTEU6JHQsWm9kQ29tcGlsZUFzeW5jRXJyb3I6QXMsWm9kQ29tcGlsZVVuc3VwcG9ydGVkRXJyb3I6TnMsX2FueTprcCxfYXJyYXk6SXAsX2Jhc2U2NDpuaSxfYmFzZTY0dXJsOm9pLF9iaWdpbnQ6bXAsX2Jvb2xlYW46ZnAsX2NhdGNoOkVtLF9jaGVjazpPcCxfY2lkcnY0OmVpLF9jaWRydjY6dGksX2NvZXJjZWRCaWdpbnQ6Z3AsX2NvZXJjZWRCb29sZWFuOmhwLF9jb2VyY2VkRGF0ZTpQcCxfY29lcmNlZE51bWJlcjphcCxfY29lcmNlZFN0cmluZzpucCxfY3JlZGl0Q2FyZDpycCxfY3VpZDpKcyxfY3VpZDI6S3MsX2N1c3RvbTpScCxfZGF0ZTpUcCxfZGVjb2RlOnRzLF9kZWNvZGVBc3luYzpvcyxfZGVmYXVsdDpQbSxfZGlzY3JpbWluYXRlZFVuaW9uOm1tLF9lMTY0OnJpLF9lbWFpbDpEcyxfZW1vamk6QnMsX2VuY29kZTplcyxfZW5jb2RlQXN5bmM6bnMsX2VuZHNXaXRoOkZ0LF9lbnVtOndtLF9maWxlOkVwLF9mbG9hdDMyOnVwLF9mbG9hdDY0OmxwLF9ndDokZSxfZ3RlOmllLF9ndWlkOnFzLF9pYmFuOnNwLF9pbmNsdWRlczpVdCxfaW50OmNwLF9pbnQzMjpkcCxfaW50NjQ6X3AsX2ludGVyc2VjdGlvbjpnbSxfaXB2NDpZcyxfaXB2NjpYcyxfaXNvRGF0ZTpjaSxfaXNvRGF0ZVRpbWU6YWksX2lzb0R1cmF0aW9uOmxpLF9pc29UaW1lOnVpLF9qd3Q6c2ksX2tzdWlkOlFzLF9sYXp5Ok9tLF9sZW5ndGg6bnQsX2xpdGVyYWw6U20sX2xvd2VyY2FzZTpxdCxfbHQ6U2UsX2x0ZTpzZSxfbWFjOm9wLF9tYXA6Ym0sX21heDpzZSxfbWF4TGVuZ3RoOnR0LF9tYXhTaXplOkhlLF9taW1lOlZ0LF9taW46aWUsX21pbkxlbmd0aDpFZSxfbWluU2l6ZTp6ZSxfbXVsdGlwbGVPZjpqZSxfbmFuOnhwLF9uYW5vaWQ6VnMsX25hdGl2ZUVudW06a20sX25lZ2F0aXZlOmtvLF9uZXZlcjokcCxfbm9ubmVnYXRpdmU6JG8sX25vbm9wdGlvbmFsOnhtLF9ub25wb3NpdGl2ZTpTbyxfbm9ybWFsaXplOkp0LF9udWxsOndwLF9udWxsYWJsZTpUbSxfbnVtYmVyOmlwLF9vcHRpb25hbDp6bSxfb3ZlcndyaXRlOmJlLF9wYXJzZTpSdCxfcGFyc2VBc3luYzpadCxfcGlwZTpSbSxfcG9zaXRpdmU6d28sX3Byb21pc2U6QW0sX3Byb3BlcnRpZXM6QnQsX3Byb3BlcnR5OnpvLF9yZWFkb25seTpabSxfcmVjb3JkOnZtLF9yZWZpbmU6WnAsX3JlZ2V4OkR0LF9zYWZlRGVjb2RlOnNzLF9zYWZlRGVjb2RlQXN5bmM6YXMsX3NhZmVFbmNvZGU6cnMsX3NhZmVFbmNvZGVBc3luYzppcyxfc2FmZVBhcnNlOkN0LF9zYWZlUGFyc2VBc3luYzpPdCxfc2V0OnltLF9zaXplOmV0LF9zbHVnaWZ5OlF0LF9zdGFydHNXaXRoOkh0LF9zdHJpbmc6dHAsX3N0cmluZ0Zvcm1hdDpvdCxfc3RyaW5nYm9vbDpqcCxfc3VjY2VzczpJbSxfc3VwZXJSZWZpbmU6Q3AsX3N5bWJvbDpicCxfdGVtcGxhdGVMaXRlcmFsOkNtLF90b0xvd2VyQ2FzZTpXdCxfdG9VcHBlckNhc2U6R3QsX3RyYW5zZm9ybTokbSxfdHJpbTpLdCxfdHVwbGU6X20sX3VpbnQzMjpwcCxfdWludDY0OnZwLF91bGlkOldzLF91bmRlZmluZWQ6eXAsX3VuaW9uOmZtLF91bmtub3duOlNwLF91cHBlcmNhc2U6THQsX3VybDp5byxfdXVpZDpMcyxfdXVpZHY0OlVzLF91dWlkdjY6SHMsX3V1aWR2NzpGcyxfdm9pZDp6cCxfeGlkOkdzLF94b3I6aG0sYmFzZTY0Q2hhcnNldDpRbCxiYXNlNjR1cmxDaGFyc2V0OnlzLGNhblBhcnNlVVJMOl9zLGNsb25lOlUsY29tcGlsZTpqcyxjb21waWxlRm46cG0sY29uZmlnOlYsY3JlYXRlU3RhbmRhcmRKU09OU2NoZW1hTWV0aG9kOk1yLGNyZWF0ZVRvSlNPTlNjaGVtYU1ldGhvZDpNcCxkZWNvZGU6YmgsZGVjb2RlQXN5bmM6d2gsZGVzY3JpYmU6QXAsZW5jb2RlOnZoLGVuY29kZUFzeW5jOnloLGV4dHJhY3REZWZzOkRtLGZpbmFsaXplOnFtLGZsYXR0ZW5FcnJvcjpjbyxmb3JtYXRFcnJvcjp1byxnZXREaXNjcmltaW5hdGVkT3B0aW9uOiRzLGdsb2JhbENvbmZpZzplZSxnbG9iYWxSZWdpc3RyeTpsZSxoYW5kbGVVbnJlcHJlc2VudGFibGU6am0saW5pdGlhbGl6ZUNvbnRleHQ6Tm0saXNCYWNrRWRnZTpZZCxpc1JlY3Vyc2l2ZVNjaGVtYTpjbSxpc1ZhbGlkQmFzZTY0OmJzLGlzVmFsaWRCYXNlNjRVUkw6WGwsaXNWYWxpZENJRFJ2NjpXbCxpc1ZhbGlkQ3JlZGl0Q2FyZDpuZCxpc1ZhbGlkSUJBTjpyZCxpc1ZhbGlkSVB2Njp2cyxpc1ZhbGlkSldUOmlkLGxvY2FsZXM6RXMsbWVtb2l6ZXI6X28sbWVyZ2VWYWx1ZXM6V24sbWV0YTpOcCxwYXJzZTpacixwYXJzZUFzeW5jOkNyLHBhcnNlVVJMT2JqZWN0OkVsLHByZXR0aWZ5RXJyb3I6WHIscHJvY2VzczpMbSxwcm9jZXNzU2NoZW1hOk1tLHJlZ2V4ZXM6bW8scmVnaXN0cnk6dm8sc2FmZURlY29kZTpTaCxzYWZlRGVjb2RlQXN5bmM6emgsc2FmZUVuY29kZTpraCxzYWZlRW5jb2RlQXN5bmM6JGgsc2FmZVBhcnNlOnd1LHNhZmVQYXJzZUFzeW5jOmhoLHN0YW5kYXJkUHJvcHM6bXMsc3RyaXBUYWJBbmROZXdsaW5lOkFyLHRvRG90UGF0aDp5dSx0b0pTT05TY2hlbWE6ZGksdG9ab2Q6WG4sdHJlZWlmeUVycm9yOllyLHVybEhvc3RuYW1lT2s6UmwsdXJsUHJvdG9jb2xPazpabCx1dGlsOldyLHZhbGlkYXRlOnBvLHZhbGlkYXRlQXN5bmM6Zm8sdmFsaWRhdGVVUkw6SWwsdmVyc2lvbjokbCx3aXRoUGFyc2VyOk1zfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLEVjPVN5bWJvbCgiei52aXNpdC9yZXNvbHZpbmciKTtmdW5jdGlvbiBwaShlLHQpe2NvbnN0IG49dHlwZW9mIHQ9PSJmdW5jdGlvbiI/dDooaSxhKT0+e2NvbnN0IHU9dFtpLl96b2QuZGVmLnR5cGVdO3JldHVybiB1P3UoaSxhKTppfSxvPW5ldyBNYXA7ZnVuY3Rpb24gcihpKXtjb25zdCBhPW8uZ2V0KGkpO2lmKGE9PT1FYylyZXR1cm4gbmV3IElzKHt0eXBlOiJsYXp5IixnZXR0ZXI6KCk9Pm8uZ2V0KGkpfSk7aWYoYSE9PXZvaWQgMClyZXR1cm4gYTtvLnNldChpLEVjKTtjb25zdCB1PXMoaSksYz1uKHUsdSE9PWkpO3JldHVybiBvLnNldChpLGMpLGN9ZnVuY3Rpb24gcyhpKXtjb25zdCBhPWkuX3pvZC5kZWY7c3dpdGNoKGEudHlwZSl7Y2FzZSJvYmplY3QiOntjb25zdCBjPWEuc2hhcGUsbD1PYmplY3Qua2V5cyhjKTtsZXQgaD0hMTtjb25zdCBnPXt9O2Zvcihjb25zdCBiIG9mIGwpe2NvbnN0IGs9cihjW2JdKTtrIT09Y1tiXSYmKGg9ITApLGdbYl09a31sZXQgXz1hLmNhdGNoYWxsO3JldHVybiBhLmNhdGNoYWxsJiYoXz1yKGEuY2F0Y2hhbGwpLF8hPT1hLmNhdGNoYWxsJiYoaD0hMCkpLGg/VShpLHsuLi5hLHNoYXBlOmcsY2F0Y2hhbGw6X30pOml9Y2FzZSJhcnJheSI6e2NvbnN0IGM9cihhLmVsZW1lbnQpO3JldHVybiBjPT09YS5lbGVtZW50P2k6VShpLHsuLi5hLGVsZW1lbnQ6Y30pfWNhc2UidHVwbGUiOntjb25zdCBjPWEuaXRlbXM7bGV0IGw9ITE7Y29uc3QgaD1bXTtmb3IoY29uc3QgXyBvZiBjKXtjb25zdCBiPXIoXyk7YiE9PV8mJihsPSEwKSxoLnB1c2goYil9bGV0IGc9YS5yZXN0O3JldHVybiBhLnJlc3QmJihnPXIoYS5yZXN0KSxnIT09YS5yZXN0JiYobD0hMCkpLGw/VShpLHsuLi5hLGl0ZW1zOmgscmVzdDpnfSk6aX1jYXNlInJlY29yZCI6Y2FzZSJtYXAiOntjb25zdCBjPXIoYS5rZXlUeXBlKSxsPXIoYS52YWx1ZVR5cGUpO3JldHVybiBjPT09YS5rZXlUeXBlJiZsPT09YS52YWx1ZVR5cGU/aTpVKGksey4uLmEsa2V5VHlwZTpjLHZhbHVlVHlwZTpsfSl9Y2FzZSJzZXQiOntjb25zdCBjPXIoYS52YWx1ZVR5cGUpO3JldHVybiBjPT09YS52YWx1ZVR5cGU/aTpVKGksey4uLmEsdmFsdWVUeXBlOmN9KX1jYXNlInVuaW9uIjp7Y29uc3QgYz1hLm9wdGlvbnM7bGV0IGw9ITE7Y29uc3QgaD1bXTtmb3IoY29uc3QgZyBvZiBjKXtjb25zdCBfPXIoZyk7XyE9PWcmJihsPSEwKSxoLnB1c2goXyl9cmV0dXJuIGw/VShpLHsuLi5hLG9wdGlvbnM6aH0pOml9Y2FzZSJpbnRlcnNlY3Rpb24iOntjb25zdCBjPXIoYS5sZWZ0KSxsPXIoYS5yaWdodCk7cmV0dXJuIGM9PT1hLmxlZnQmJmw9PT1hLnJpZ2h0P2k6VShpLHsuLi5hLGxlZnQ6YyxyaWdodDpsfSl9Y2FzZSJvcHRpb25hbCI6Y2FzZSJudWxsYWJsZSI6Y2FzZSJkZWZhdWx0IjpjYXNlInByZWZhdWx0IjpjYXNlImNhdGNoIjpjYXNlInJlYWRvbmx5IjpjYXNlIm5vbm9wdGlvbmFsIjpjYXNlInByb21pc2UiOmNhc2Uic3VjY2VzcyI6e2NvbnN0IGM9cihhLmlubmVyVHlwZSk7cmV0dXJuIGM9PT1hLmlubmVyVHlwZT9pOlUoaSx7Li4uYSxpbm5lclR5cGU6Y30pfWNhc2UicGlwZSI6e2NvbnN0IGM9cihhLmluKSxsPXIoYS5vdXQpO3JldHVybiBjPT09YS5pbiYmbD09PWEub3V0P2k6VShpLHsuLi5hLGluOmMsb3V0Omx9KX1jYXNlImZ1bmN0aW9uIjp7Y29uc3QgYz1yKGEuaW5wdXQpLGw9cihhLm91dHB1dCk7cmV0dXJuIGM9PT1hLmlucHV0JiZsPT09YS5vdXRwdXQ/aTpVKGksey4uLmEsaW5wdXQ6YyxvdXRwdXQ6bH0pfWNhc2UibGF6eSI6e2NvbnN0IGM9YS5nZXR0ZXIse19jYWNoZWRJbm5lcjpsLC4uLmh9PWE7cmV0dXJuIFUoaSx7Li4uaCxnZXR0ZXI6KCk9PnIoYygpKX0pfWNhc2UidGVtcGxhdGVfbGl0ZXJhbCI6Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpjYXNlImludCI6Y2FzZSJib29sZWFuIjpjYXNlImJpZ2ludCI6Y2FzZSJzeW1ib2wiOmNhc2UidW5kZWZpbmVkIjpjYXNlIm51bGwiOmNhc2Uidm9pZCI6Y2FzZSJuZXZlciI6Y2FzZSJhbnkiOmNhc2UidW5rbm93biI6Y2FzZSJkYXRlIjpjYXNlIm5hbiI6Y2FzZSJlbnVtIjpjYXNlImxpdGVyYWwiOmNhc2UiZmlsZSI6Y2FzZSJ0cmFuc2Zvcm0iOmNhc2UiY3VzdG9tIjpyZXR1cm4gaTtkZWZhdWx0OnJldHVybiBpfX1yZXR1cm4gcihlKX1mdW5jdGlvbiBmaShlKXtyZXR1cm4hIWUuX3pvZH1mdW5jdGlvbiBVcChlLHQpe3JldHVybiBmaShlKT93dShlLHQpOmUuc2FmZVBhcnNlKHQpfWZ1bmN0aW9uIFBnKGUpe2lmKCFlKXJldHVybjtsZXQgdDtpZihmaShlKT90PWUuX3pvZD8uZGVmPy5zaGFwZTp0PWUuc2hhcGUsISF0KXtpZih0eXBlb2YgdD09ImZ1bmN0aW9uIil0cnl7cmV0dXJuIHQoKX1jYXRjaHtyZXR1cm59cmV0dXJuIHR9fWZ1bmN0aW9uIHhnKGUpe2lmKGZpKGUpKXtjb25zdCBzPWUuX3pvZD8uZGVmO2lmKHMpe2lmKHMudmFsdWUhPT12b2lkIDApcmV0dXJuIHMudmFsdWU7aWYoQXJyYXkuaXNBcnJheShzLnZhbHVlcykmJnMudmFsdWVzLmxlbmd0aD4wKXJldHVybiBzLnZhbHVlc1swXX19Y29uc3Qgbj1lLl9kZWY7aWYobil7aWYobi52YWx1ZSE9PXZvaWQgMClyZXR1cm4gbi52YWx1ZTtpZihBcnJheS5pc0FycmF5KG4udmFsdWVzKSYmbi52YWx1ZXMubGVuZ3RoPjApcmV0dXJuIG4udmFsdWVzWzBdfWNvbnN0IG89ZS52YWx1ZTtpZihvIT09dm9pZCAwKXJldHVybiBvfWNvbnN0IElnPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxlbmRzV2l0aDpGdCxndDokZSxndGU6aWUsaW5jbHVkZXM6VXQsbGVuZ3RoOm50LGxvd2VyY2FzZTpxdCxsdDpTZSxsdGU6c2UsbWF4TGVuZ3RoOnR0LG1heFNpemU6SGUsbWltZTpWdCxtaW5MZW5ndGg6RWUsbWluU2l6ZTp6ZSxtdWx0aXBsZU9mOmplLG5lZ2F0aXZlOmtvLG5vbm5lZ2F0aXZlOiRvLG5vbnBvc2l0aXZlOlNvLG5vcm1hbGl6ZTpKdCxvdmVyd3JpdGU6YmUscG9zaXRpdmU6d28scHJvcGVydGllczpCdCxwcm9wZXJ0eTp6byxyZWdleDpEdCxzaXplOmV0LHNsdWdpZnk6UXQsc3RhcnRzV2l0aDpIdCx0b0xvd2VyQ2FzZTpXdCx0b1VwcGVyQ2FzZTpHdCx0cmltOkt0LHVwcGVyY2FzZTpMdH0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxSYz1uZXcgV2Vha1NldChbT2JqZWN0LnByb3RvdHlwZSxFcnJvci5wcm90b3R5cGVdKTtmdW5jdGlvbiBxbihlLHQsbil7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7Y29uc3Qgbz1uKHRoaXMpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLG99LHNldChvKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHt2YWx1ZTpvLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfX0pfWNvbnN0IEhwPShlLHQpPT57YnUuaW5pdChlLHQpLGUubmFtZT0iWm9kRXJyb3IiO2NvbnN0IG49T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO1JjLmhhcyhuKXx8KFJjLmFkZChuKSxxbihuLCJmb3JtYXQiLG89PnI9PnVvKG8scikpLHFuKG4sImZsYXR0ZW4iLG89PnI9PmNvKG8scikpLHFuKG4sImFkZElzc3VlIixvPT5yPT57by5pc3N1ZXMucHVzaChyKSxvLm1lc3NhZ2U9SlNPTi5zdHJpbmdpZnkoby5pc3N1ZXMsRm4sMil9KSxxbihuLCJhZGRJc3N1ZXMiLG89PnI9PntvLmlzc3Vlcy5wdXNoKC4uLnIpLG8ubWVzc2FnZT1KU09OLnN0cmluZ2lmeShvLmlzc3VlcyxGbiwyKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJpc0VtcHR5Iix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsZ2V0KCl7cmV0dXJuIHRoaXMuaXNzdWVzLmxlbmd0aD09PTB9fSkpfSxGcD1kKCJab2RFcnJvciIsSHApLG9lPWQoIlpvZEVycm9yIixIcCx2b2lkIDAse1BhcmVudDpFcnJvcn0pLGhpPVJ0KG9lKSxtaT1adChvZSksZ2k9Q3Qob2UpLF9pPU90KG9lKSx2aT1lcyhvZSksYmk9dHMob2UpLHlpPW5zKG9lKSx3aT1vcyhvZSksa2k9cnMob2UpLFNpPXNzKG9lKSwkaT1pcyhvZSksemk9YXMob2UpO2Z1bmN0aW9uIEVnKCl7ZWUubG9jYWxlRXJyb3J8fFYoWGQoKSl9ZnVuY3Rpb24gRmUoKXtlZS5tZW1vaXplcnx8Vih7bWVtb2l6ZXI6X28oKX0pfWNvbnN0IFA9ZCgiWm9kVHlwZSIsKGUsdCk9PihFZygpLHouaW5pdChlLHQpLGUuZGVmPXQsZS50eXBlPXQudHlwZSxlKSx7Y2hlY2soLi4uZSl7Y29uc3QgdD10aGlzLmRlZjtyZXR1cm4gdGhpcy5jbG9uZShZKHQse2NoZWNrczpbLi4udC5jaGVja3M/P1tdLC4uLmUubWFwKG49PnR5cGVvZiBuPT0iZnVuY3Rpb24iP3tfem9kOntjaGVjazpuLGRlZjp7Y2hlY2s6ImN1c3RvbSJ9LG9uYXR0YWNoOltdfX06bildfSkse3BhcmVudDohMH0pfSx3aXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKC4uLmUpfSxjbG9uZShlLHQpe3JldHVybiBVKHRoaXMsZSx0KX0sYnJhbmQoKXtyZXR1cm4gdGhpc30scmVnaXN0ZXIoZSx0KXtyZXR1cm4gZS5hZGQodGhpcyx0KSx0aGlzfSxyZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhmcihlLHQpKX0sc3VwZXJSZWZpbmUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhocihlLHQpKX0sb3ZlcndyaXRlKGUpe3JldHVybiB0aGlzLmNoZWNrKGJlKGUpKX0sb3B0aW9uYWwoKXtyZXR1cm4gRCh0aGlzKX0sZXhhY3RPcHRpb25hbCgpe3JldHVybiBKbyh0aGlzKX0sbnVsbGFibGUoKXtyZXR1cm4gUWUodGhpcyl9LG51bGxpc2goKXtyZXR1cm4gRChRZSh0aGlzKSl9LG5vbm9wdGlvbmFsKGUpe3JldHVybiBYbyh0aGlzLGUpfSxhcnJheSgpe3JldHVybiBTKHRoaXMpfSxvcihlKXtyZXR1cm4geChbdGhpcyxlXSl9LGFuZChlKXtyZXR1cm4gbXQodGhpcyxlKX0sdHJhbnNmb3JtKGUpe3JldHVybiBUdCh0aGlzLGtuKGUpKX0sZGVmYXVsdChlKXtyZXR1cm4gR28odGhpcyxlKX0scHJlZmF1bHQoZSl7cmV0dXJuIFlvKHRoaXMsZSl9LGNhdGNoKGUpe3JldHVybiBucih0aGlzLGUpfSxwaXBlKGUpe3JldHVybiBUdCh0aGlzLGUpfSxyZWFkb25seSgpe3JldHVybiBpcih0aGlzKX0sZGVzY3JpYmUoZSl7Y29uc3QgdD10aGlzLmNsb25lKCk7cmV0dXJuIGxlLmFkZCh0LHtkZXNjcmlwdGlvbjplfSksdH0sbWV0YSguLi5lKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIGxlLmdldCh0aGlzKTtjb25zdCB0PXRoaXMuY2xvbmUoKTtyZXR1cm4gbGUuYWRkKHQsZVswXSksdH0saXNPcHRpb25hbCgpe3JldHVybiB0aGlzLnNhZmVQYXJzZSh2b2lkIDApLnN1Y2Nlc3N9LGlzTnVsbGFibGUoKXtyZXR1cm4gdGhpcy5zYWZlUGFyc2UobnVsbCkuc3VjY2Vzc30sYXBwbHkoZSwuLi50KXtyZXR1cm4gdC5sZW5ndGg9PT0wP2UodGhpcyk6ZSh0aGlzLC4uLnQpfSxnZXQifnN0YW5kYXJkIigpe3JldHVybiBpbyh0aGlzLCJ+c3RhbmRhcmQiLHsuLi5tcyh0aGlzKSxqc29uU2NoZW1hOntpbnB1dDpNcigpLG91dHB1dDpNcigpfX0pfSxzZXQifnN0YW5kYXJkIihlKXtrZSh0aGlzLCJ+c3RhbmRhcmQiLGUpfSxwYXJzZTpmdW5jdGlvbiBlKHQsbil7cmV0dXJuIGhpKHRoaXMsdCxuLHtjYWxsZWU6ZX0pfSxwYXJzZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgbWkodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVQYXJzZShlLHQpe3JldHVybiBnaSh0aGlzLGUsdCl9LGFzeW5jIHNhZmVQYXJzZUFzeW5jKGUsdCl7cmV0dXJuIF9pKHRoaXMsZSx0KX0sZ2V0IHNwYSgpe3JldHVybiB0aGlzPy5zYWZlUGFyc2VBc3luY30sc2V0IHNwYShlKXtrZSh0aGlzLCJzcGEiLGUpfSx2YWxpZGF0ZShlLHQpe3JldHVybiBwbyh0aGlzLGUsdCl9LHZhbGlkYXRlQXN5bmMoZSx0KXtyZXR1cm4gZm8odGhpcyxlLHQpfSxlbmNvZGU6ZnVuY3Rpb24gZSh0LG4pe3JldHVybiB2aSh0aGlzLHQsbix7Y2FsbGVlOmV9KX0sZGVjb2RlOmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYmkodGhpcyx0LG4se2NhbGxlZTplfSl9LGVuY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgeWkodGhpcyx0LG4se2NhbGxlZTplfSl9LGRlY29kZUFzeW5jOmFzeW5jIGZ1bmN0aW9uIGUodCxuKXtyZXR1cm4gYXdhaXQgd2kodGhpcyx0LG4se2NhbGxlZTplfSl9LHNhZmVFbmNvZGUoZSx0KXtyZXR1cm4ga2kodGhpcyxlLHQpfSxzYWZlRGVjb2RlKGUsdCl7cmV0dXJuIFNpKHRoaXMsZSx0KX0sYXN5bmMgc2FmZUVuY29kZUFzeW5jKGUsdCl7cmV0dXJuICRpKHRoaXMsZSx0KX0sYXN5bmMgc2FmZURlY29kZUFzeW5jKGUsdCl7cmV0dXJuIHppKHRoaXMsZSx0KX0sdG9KU09OU2NoZW1hKGUpe3JldHVybiBNcCgpKGUpfSxnZXQgZGVzY3JpcHRpb24oKXtyZXR1cm4gbGUuZ2V0KHRoaXMpPy5kZXNjcmlwdGlvbn0sZ2V0IF9kZWYoKXtyZXR1cm4gdGhpcy5fem9kLmRlZn19KSxZdD1kKCJfWm9kU3RyaW5nIiwoZSx0KT0+e010LmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+VW0oKX0sRXQoe2Zvcm1hdDplPT5kZSgpLmZvcm1hdD8/bnVsbCxtaW5MZW5ndGg6ZT0+ZGUoKS5taW5pbXVtPz9udWxsLG1heExlbmd0aDplPT5kZSgpLm1heGltdW0/P251bGx9LHtyZWdleCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhEdCguLi5lKSl9LGluY2x1ZGVzKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKFV0KC4uLmUpKX0sc3RhcnRzV2l0aCguLi5lKXtyZXR1cm4gdGhpcy5jaGVjayhIdCguLi5lKSl9LGVuZHNXaXRoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKEZ0KC4uLmUpKX0sbWluKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKEVlKC4uLmUpKX0sbWF4KC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKHR0KC4uLmUpKX0sbGVuZ3RoKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKG50KC4uLmUpKX0sbm9uZW1wdHkoLi4uZSl7cmV0dXJuIHRoaXMuY2hlY2soRWUoMSwuLi5lKSl9LGxvd2VyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayhxdChlKSl9LHVwcGVyY2FzZShlKXtyZXR1cm4gdGhpcy5jaGVjayhMdChlKSl9LHRyaW0oKXtyZXR1cm4gdGhpcy5jaGVjayhLdCgpKX0sbm9ybWFsaXplKC4uLmUpe3JldHVybiB0aGlzLmNoZWNrKEp0KC4uLmUpKX0sdG9Mb3dlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayhXdCgpKX0sdG9VcHBlckNhc2UoKXtyZXR1cm4gdGhpcy5jaGVjayhHdCgpKX0sc2x1Z2lmeSgpe3JldHVybiB0aGlzLmNoZWNrKFF0KCkpfX0pKSxydD1kKCJab2RTdHJpbmciLChlLHQpPT57TXQuaW5pdChlLHQpLFl0LmluaXQoZSx0KX0se2VtYWlsKGUpe3JldHVybiB0aGlzLmNoZWNrKERzKFh0LGUpKX0sdXJsKGUpe3JldHVybiB0aGlzLmNoZWNrKHlvKHV0LGUpKX0sand0KGUpe3JldHVybiB0aGlzLmNoZWNrKHNpKGduLGUpKX0sZW1vamkoZSl7cmV0dXJuIHRoaXMuY2hlY2soQnModG4sZSkpfSxndWlkKGUpe3JldHVybiB0aGlzLmNoZWNrKHFzKGVuLGUpKX0sdXVpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhMcyhfZSxlKSl9LHV1aWR2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhVcyhfZSxlKSl9LHV1aWR2NihlKXtyZXR1cm4gdGhpcy5jaGVjayhIcyhfZSxlKSl9LHV1aWR2NyhlKXtyZXR1cm4gdGhpcy5jaGVjayhGcyhfZSxlKSl9LG5hbm9pZChlKXtyZXR1cm4gdGhpcy5jaGVjayhWcyhubixlKSl9LGN1aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soSnMob24sZSkpfSxjdWlkMihlKXtyZXR1cm4gdGhpcy5jaGVjayhLcyhybixlKSl9LHVsaWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soV3Moc24sZSkpfSxiYXNlNjQoZSl7cmV0dXJuIHRoaXMuY2hlY2sobmkoZm4sZSkpfSxiYXNlNjR1cmwoZSl7cmV0dXJuIHRoaXMuY2hlY2sob2koaG4sZSkpfSx4aWQoZSl7cmV0dXJuIHRoaXMuY2hlY2soR3MoYW4sZSkpfSxrc3VpZChlKXtyZXR1cm4gdGhpcy5jaGVjayhRcyhjbixlKSl9LGlwdjQoZSl7cmV0dXJuIHRoaXMuY2hlY2soWXModW4sZSkpfSxpcHY2KGUpe3JldHVybiB0aGlzLmNoZWNrKFhzKGxuLGUpKX0sY2lkcnY0KGUpe3JldHVybiB0aGlzLmNoZWNrKGVpKGRuLGUpKX0sY2lkcnY2KGUpe3JldHVybiB0aGlzLmNoZWNrKHRpKHBuLGUpKX0sZTE2NChlKXtyZXR1cm4gdGhpcy5jaGVjayhyaShtbixlKSl9LGRhdGV0aW1lKGUpe3JldHVybiB0aGlzLmNoZWNrKGFpKHN0LGUpKX0sZGF0ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhjaShpdCxlKSl9LHRpbWUoZSl7cmV0dXJuIHRoaXMuY2hlY2sodWkoYXQsZSkpfSxkdXJhdGlvbihlKXtyZXR1cm4gdGhpcy5jaGVjayhsaShjdCxlKSl9fSk7ZnVuY3Rpb24gcChlKXtyZXR1cm4gdHAocnQsZSl9Y29uc3QgQT1kKCJab2RTdHJpbmdGb3JtYXQiLChlLHQpPT57TS5pbml0KGUsdCksWXQuaW5pdChlLHQpfSksc3Q9ZCgiWm9kSVNPRGF0ZVRpbWUiLChlLHQpPT57TGwuaW5pdChlLHQpLEEuaW5pdChlLHQpfSksaXQ9ZCgiWm9kSVNPRGF0ZSIsKGUsdCk9PntVbC5pbml0KGUsdCksQS5pbml0KGUsdCl9KSxhdD1kKCJab2RJU09UaW1lIiwoZSx0KT0+e0hsLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pLGN0PWQoIlpvZElTT0R1cmF0aW9uIiwoZSx0KT0+e0ZsLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pLFh0PWQoIlpvZEVtYWlsIiwoZSx0KT0+e3hsLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFRpKGUpe3JldHVybiBEcyhYdCxlKX1jb25zdCBlbj1kKCJab2RHVUlEIiwoZSx0KT0+e1RsLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFBpKGUpe3JldHVybiBxcyhlbixlKX1jb25zdCBfZT1kKCJab2RVVUlEIiwoZSx0KT0+e1BsLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHhpKGUpe3JldHVybiBMcyhfZSxlKX1mdW5jdGlvbiBJaShlKXtyZXR1cm4gVXMoX2UsZSl9ZnVuY3Rpb24gRWkoZSl7cmV0dXJuIEhzKF9lLGUpfWZ1bmN0aW9uIFJpKGUpe3JldHVybiBGcyhfZSxlKX1jb25zdCB1dD1kKCJab2RVUkwiLChlLHQpPT57Q2wuaW5pdChlLHQpLEEuaW5pdChlLHQpfSk7ZnVuY3Rpb24gWmkoZSl7cmV0dXJuIHlvKHV0LGUpfWZ1bmN0aW9uIENpKGUpe3JldHVybiB5byh1dCx7cHJvdG9jb2w6Y3MsaG9zdG5hbWU6THUsLi4udihlKX0pfWNvbnN0IHRuPWQoIlpvZEVtb2ppIiwoZSx0KT0+e09sLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIE9pKGUpe3JldHVybiBCcyh0bixlKX1jb25zdCBubj1kKCJab2ROYW5vSUQiLChlLHQpPT57QWwuaW5pdChlLHQpLEEuaW5pdChlLHQpfSk7ZnVuY3Rpb24gQWkoZSl7cmV0dXJuIFZzKG5uLGUpfWNvbnN0IG9uPWQoIlpvZENVSUQiLChlLHQpPT57TmwuaW5pdChlLHQpLEEuaW5pdChlLHQpfSk7ZnVuY3Rpb24gTmkoZSl7cmV0dXJuIEpzKG9uLGUpfWNvbnN0IHJuPWQoIlpvZENVSUQyIiwoZSx0KT0+e2psLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIGppKGUpe3JldHVybiBLcyhybixlKX1jb25zdCBzbj1kKCJab2RVTElEIiwoZSx0KT0+e01sLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIE1pKGUpe3JldHVybiBXcyhzbixlKX1jb25zdCBhbj1kKCJab2RYSUQiLChlLHQpPT57RGwuaW5pdChlLHQpLEEuaW5pdChlLHQpfSk7ZnVuY3Rpb24gRGkoZSl7cmV0dXJuIEdzKGFuLGUpfWNvbnN0IGNuPWQoIlpvZEtTVUlEIiwoZSx0KT0+e3FsLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIHFpKGUpe3JldHVybiBRcyhjbixlKX1jb25zdCB1bj1kKCJab2RJUHY0IiwoZSx0KT0+e0JsLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIExpKGUpe3JldHVybiBZcyh1bixlKX1jb25zdCBUbz1kKCJab2RNQUMiLChlLHQpPT57SmwuaW5pdChlLHQpLEEuaW5pdChlLHQpfSk7ZnVuY3Rpb24gVWkoZSl7cmV0dXJuIG9wKFRvLGUpfWNvbnN0IGxuPWQoIlpvZElQdjYiLChlLHQpPT57VmwuaW5pdChlLHQpLEEuaW5pdChlLHQpfSk7ZnVuY3Rpb24gSGkoZSl7cmV0dXJuIFhzKGxuLGUpfWNvbnN0IGRuPWQoIlpvZENJRFJ2NCIsKGUsdCk9PntLbC5pbml0KGUsdCksQS5pbml0KGUsdCl9KTtmdW5jdGlvbiBGaShlKXtyZXR1cm4gZWkoZG4sZSl9Y29uc3QgcG49ZCgiWm9kQ0lEUnY2IiwoZSx0KT0+e0dsLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIEJpKGUpe3JldHVybiB0aShwbixlKX1jb25zdCBmbj1kKCJab2RCYXNlNjQiLChlLHQpPT57WWwuaW5pdChlLHQpLEEuaW5pdChlLHQpfSk7ZnVuY3Rpb24gVmkoZSl7cmV0dXJuIG5pKGZuLGUpfWNvbnN0IGhuPWQoIlpvZEJhc2U2NFVSTCIsKGUsdCk9PntlZC5pbml0KGUsdCksQS5pbml0KGUsdCl9KTtmdW5jdGlvbiBKaShlKXtyZXR1cm4gb2koaG4sZSl9Y29uc3QgbW49ZCgiWm9kRTE2NCIsKGUsdCk9Pnt0ZC5pbml0KGUsdCksQS5pbml0KGUsdCl9KTtmdW5jdGlvbiBLaShlKXtyZXR1cm4gcmkobW4sZSl9Y29uc3QgUG89ZCgiWm9kQ3JlZGl0Q2FyZCIsKGUsdCk9PntvZC5pbml0KGUsdCksQS5pbml0KGUsdCl9KTtmdW5jdGlvbiBXaShlKXtyZXR1cm4gcnAoUG8sZSl9Y29uc3QgeG89ZCgiWm9kSUJBTiIsKGUsdCk9PntzZC5pbml0KGUsdCksQS5pbml0KGUsdCl9KTtmdW5jdGlvbiBHaShlKXtyZXR1cm4gc3AoeG8sZSl9Y29uc3QgZ249ZCgiWm9kSldUIiwoZSx0KT0+e2FkLmluaXQoZSx0KSxBLmluaXQoZSx0KX0pO2Z1bmN0aW9uIFFpKGUpe3JldHVybiBzaShnbixlKX1jb25zdCBaZT1kKCJab2RDdXN0b21TdHJpbmdGb3JtYXQiLChlLHQpPT57Y2QuaW5pdChlLHQpLEEuaW5pdChlLHQpfSk7ZnVuY3Rpb24gWWkoZSx0LG49e30pe3JldHVybiBvdChaZSxlLHQsbil9ZnVuY3Rpb24gWGkoZSl7cmV0dXJuIG90KFplLCJob3N0bmFtZSIscXUsZSl9ZnVuY3Rpb24gZWEoZSl7cmV0dXJuIG90KFplLCJoZXgiLG9sLGUpfWZ1bmN0aW9uIHRhKGUpe3JldHVybiBvdChaZSwiY3VycmVuY3lfY29kZSIsSHUsZSl9ZnVuY3Rpb24gbmEoZSx0KXtjb25zdCBuPXQ/LmVuYz8/ImhleCIsbz1gJHtlfV8ke259YCxyPW1vW29dO2lmKCFyKXRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGhhc2ggZm9ybWF0OiAke299YCk7cmV0dXJuIG90KFplLG8scix0KX1jb25zdCBsdD1kKCJab2ROdW1iZXIiLChlLHQpPT57d3MuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5IbSgpLGUuaXNGaW5pdGU9ITB9LEV0KHttaW5WYWx1ZTplPT57Y29uc3R7bWluaW11bTp0LGV4Y2x1c2l2ZU1pbmltdW06bn09ZGUoKTtyZXR1cm4gTWF0aC5tYXgodD8/TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLG4/P051bWJlci5ORUdBVElWRV9JTkZJTklUWSl9LG1heFZhbHVlOmU9Pntjb25zdHttYXhpbXVtOnQsZXhjbHVzaXZlTWF4aW11bTpufT1kZSgpO3JldHVybiBNYXRoLm1pbih0Pz9OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbj8/TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKX0saXNJbnQ6ZT0+e2NvbnN0e2lzSW50OnQsbXVsdGlwbGVPZjpufT1kZSgpO3JldHVybiEhdHx8ISFuPy5zb21lKE51bWJlci5pc1NhZmVJbnRlZ2VyKX0sZm9ybWF0OmU9PmRlKCkuZm9ybWF0Pz9udWxsfSx7Z3QoZSx0KXtyZXR1cm4gdGhpcy5jaGVjaygkZShlLHQpKX0sZ3RlKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soaWUoZSx0KSl9LG1pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKGllKGUsdCkpfSxsdChlLHQpe3JldHVybiB0aGlzLmNoZWNrKFNlKGUsdCkpfSxsdGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhzZShlLHQpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soc2UoZSx0KSl9LGludChlKXtyZXR1cm4gdGhpcy5jaGVjayh6dChlKSl9LHNhZmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soenQoZSkpfSxwb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjaygkZSgwLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soaWUoMCxlKSl9LG5lZ2F0aXZlKGUpe3JldHVybiB0aGlzLmNoZWNrKFNlKDAsZSkpfSxub25wb3NpdGl2ZShlKXtyZXR1cm4gdGhpcy5jaGVjayhzZSgwLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKGplKGUsdCkpfSxzdGVwKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soamUoZSx0KSl9LGZpbml0ZSgpe3JldHVybiB0aGlzfX0pKTtmdW5jdGlvbiBUKGUpe3JldHVybiBpcChsdCxlKX1jb25zdCBDZT1kKCJab2ROdW1iZXJGb3JtYXQiLChlLHQpPT57dWQuaW5pdChlLHQpLGx0LmluaXQoZSx0KX0pO2Z1bmN0aW9uIHp0KGUpe3JldHVybiBjcChDZSxlKX1mdW5jdGlvbiBvYShlKXtyZXR1cm4gdXAoQ2UsZSl9ZnVuY3Rpb24gcmEoZSl7cmV0dXJuIGxwKENlLGUpfWZ1bmN0aW9uIHNhKGUpe3JldHVybiBkcChDZSxlKX1mdW5jdGlvbiBpYShlKXtyZXR1cm4gcHAoQ2UsZSl9Y29uc3QgZHQ9ZCgiWm9kQm9vbGVhbiIsKGUsdCk9Pntrcy5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkZtKCl9KTtmdW5jdGlvbiBPKGUpe3JldHVybiBmcChkdCxlKX1jb25zdCBwdD1kKCJab2RCaWdJbnQiLChlLHQpPT57U3MuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5CbSgpfSxFdCh7bWluVmFsdWU6ZT0+ZGUoKS5taW5pbXVtPz9udWxsLG1heFZhbHVlOmU9PmRlKCkubWF4aW11bT8/bnVsbCxmb3JtYXQ6ZT0+ZGUoKS5mb3JtYXQ/P251bGx9LHtndGUoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhpZShlLHQpKX0sbWluKGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soaWUoZSx0KSl9LGd0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soJGUoZSx0KSl9LGx0KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2soU2UoZSx0KSl9LGx0ZShlLHQpe3JldHVybiB0aGlzLmNoZWNrKHNlKGUsdCkpfSxtYXgoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhzZShlLHQpKX0scG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soJGUoQmlnSW50KDApLGUpKX0sbmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soU2UoQmlnSW50KDApLGUpKX0sbm9ucG9zaXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soc2UoQmlnSW50KDApLGUpKX0sbm9ubmVnYXRpdmUoZSl7cmV0dXJuIHRoaXMuY2hlY2soaWUoQmlnSW50KDApLGUpKX0sbXVsdGlwbGVPZihlLHQpe3JldHVybiB0aGlzLmNoZWNrKGplKGUsdCkpfX0pKTtmdW5jdGlvbiBhYShlKXtyZXR1cm4gbXAocHQsZSl9Y29uc3QgX249ZCgiWm9kQmlnSW50Rm9ybWF0IiwoZSx0KT0+e2xkLmluaXQoZSx0KSxwdC5pbml0KGUsdCl9KTtmdW5jdGlvbiBjYShlKXtyZXR1cm4gX3AoX24sZSl9ZnVuY3Rpb24gdWEoZSl7cmV0dXJuIHZwKF9uLGUpfWNvbnN0IElvPWQoIlpvZFN5bWJvbCIsKGUsdCk9PntkZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PlZtKCl9KTtmdW5jdGlvbiBsYShlKXtyZXR1cm4gYnAoSW8sZSl9Y29uc3QgRW89ZCgiWm9kVW5kZWZpbmVkIiwoZSx0KT0+e3BkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+S20oKX0pO2Z1bmN0aW9uIEdlKGUpe3JldHVybiB5cChFbyxlKX1jb25zdCBSbz1kKCJab2ROdWxsIiwoZSx0KT0+e2ZkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Sm0oKX0pO2Z1bmN0aW9uIHZuKGUpe3JldHVybiB3cChSbyxlKX1jb25zdCBabz1kKCJab2RBbnkiLChlLHQpPT57aGQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5RbSgpfSk7ZnVuY3Rpb24gYm4oKXtyZXR1cm4ga3AoWm8pfWNvbnN0IENvPWQoIlpvZFVua25vd24iLChlLHQpPT57bWQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5ZbSgpfSk7ZnVuY3Rpb24gQygpe3JldHVybiBTcChDbyl9Y29uc3QgT289ZCgiWm9kTmV2ZXIiLChlLHQpPT57Z2QuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5HbSgpfSk7ZnVuY3Rpb24gTWUoZSl7cmV0dXJuICRwKE9vLGUpfWNvbnN0IEFvPWQoIlpvZFZvaWQiLChlLHQpPT57X2QuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5XbSgpfSk7ZnVuY3Rpb24gZGEoZSl7cmV0dXJuIHpwKEFvLGUpfWNvbnN0IHluPWQoIlpvZERhdGUiLChlLHQpPT57dmQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5YbSgpLGUubWluPShuLG8pPT5lLmNoZWNrKGllKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKHNlKG4sbykpfSxFdCh7bWluRGF0ZTplPT57Y29uc3R7bWluaW11bTp0fT1kZSgpO3JldHVybiB0P25ldyBEYXRlKHQpOm51bGx9LG1heERhdGU6ZT0+e2NvbnN0e21heGltdW06dH09ZGUoKTtyZXR1cm4gdD9uZXcgRGF0ZSh0KTpudWxsfX0se30pKTtmdW5jdGlvbiBwYShlKXtyZXR1cm4gVHAoeW4sZSl9Y29uc3QgTm89ZCgiWm9kQXJyYXkiLChlLHQpPT57RmUoKSxiZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmRnKCksZS5lbGVtZW50PXQuZWxlbWVudH0se21pbihlLHQpe3JldHVybiB0aGlzLmNoZWNrKEVlKGUsdCkpfSxub25lbXB0eShlKXtyZXR1cm4gdGhpcy5jaGVjayhFZSgxLGUpKX0sbWF4KGUsdCl7cmV0dXJuIHRoaXMuY2hlY2sodHQoZSx0KSl9LGxlbmd0aChlLHQpe3JldHVybiB0aGlzLmNoZWNrKG50KGUsdCkpfSx1bndyYXAoKXtyZXR1cm4gdGhpcy5lbGVtZW50fX0pO2Z1bmN0aW9uIFMoZSx0KXtyZXR1cm4gSXAoTm8sZSx0KX1mdW5jdGlvbiBmYShlKXtjb25zdCB0PWUuX3pvZC5kZWYuc2hhcGU7cmV0dXJuIFcoT2JqZWN0LmtleXModCkpfWNvbnN0IGZ0PWQoIlpvZE9iamVjdCIsKGUsdCk9PntGZSgpLFNkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+cGcoKSxndShlLCJzaGFwZSIsbj0+bi5fem9kLmRlZi5zaGFwZSwhMSl9LHtrZXlvZigpe3JldHVybiBXKE9iamVjdC5rZXlzKHRoaXMuX3pvZC5kZWYuc2hhcGUpKX0sY2F0Y2hhbGwoZSl7cmV0dXJuIHRoaXMuY2xvbmUoWSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDplfSkpfSxwYXNzdGhyb3VnaCgpe3JldHVybiB0aGlzLmNsb25lKFkodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6QygpfSkpfSxsb29zZSgpe3JldHVybiB0aGlzLmNsb25lKFkodGhpcy5fem9kLmRlZix7Y2F0Y2hhbGw6QygpfSkpfSxzdHJpY3QoKXtyZXR1cm4gdGhpcy5jbG9uZShZKHRoaXMuX3pvZC5kZWYse2NhdGNoYWxsOk1lKCl9KSl9LHN0cmlwKCl7cmV0dXJuIHRoaXMuY2xvbmUoWSh0aGlzLl96b2QuZGVmLHtjYXRjaGFsbDp2b2lkIDB9KSl9LGV4dGVuZChlKXtyZXR1cm4gaXUodGhpcyxlKX0sc2FmZUV4dGVuZChlKXtyZXR1cm4gY3UodGhpcyxlKX0sbWVyZ2UoZSl7cmV0dXJuIHV1KHRoaXMsZSl9LHBpY2soZSl7cmV0dXJuIHJ1KHRoaXMsZSl9LG9taXQoZSl7cmV0dXJuIHN1KHRoaXMsZSl9LHBhcnRpYWwoLi4uZSl7cmV0dXJuIEVyKGd0LHRoaXMsZVswXSl9LGV4YWN0UGFydGlhbCguLi5lKXtyZXR1cm4gRXIoU24sdGhpcyxlWzBdLCJleGFjdFBhcnRpYWwiKX0scmVxdWlyZWQoLi4uZSl7cmV0dXJuIGx1KCRuLHRoaXMsZVswXSl9fSk7ZnVuY3Rpb24gbShlLHQpe2NvbnN0IG49e3R5cGU6Im9iamVjdCIsc2hhcGU6ZT8/e30sLi4udih0KX07cmV0dXJuIG5ldyBmdChuKX1mdW5jdGlvbiBoYShlLHQpe3JldHVybiBuZXcgZnQoe3R5cGU6Im9iamVjdCIsc2hhcGU6ZSxjYXRjaGFsbDpNZSgpLC4uLnYodCl9KX1mdW5jdGlvbiBLKGUsdCl7cmV0dXJuIG5ldyBmdCh7dHlwZToib2JqZWN0IixzaGFwZTplLGNhdGNoYWxsOkMoKSwuLi52KHQpfSl9Y29uc3QgaHQ9ZCgiWm9kVW5pb24iLChlLHQpPT57Z28uaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5EcCgpLGUub3B0aW9ucz10Lm9wdGlvbnN9KTtmdW5jdGlvbiB4KGUsdCl7cmV0dXJuIG5ldyBodCh7dHlwZToidW5pb24iLG9wdGlvbnM6ZSwuLi52KHQpfSl9Y29uc3Qgam89ZCgiWm9kWG9yIiwoZSx0KT0+e2h0LmluaXQoZSx0KSwkZC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PkRwKCksZS5vcHRpb25zPXQub3B0aW9uc30pO2Z1bmN0aW9uIG1hKGUsdCl7cmV0dXJuIG5ldyBqbyh7dHlwZToidW5pb24iLG9wdGlvbnM6ZSxpbmNsdXNpdmU6ITEsLi4udih0KX0pfWNvbnN0IE1vPWQoIlpvZERpc2NyaW1pbmF0ZWRVbmlvbiIsKGUsdCk9PntodC5pbml0KGUsdCksVGQuaW5pdChlLHQpfSk7ZnVuY3Rpb24gd24oZSx0LG4pe3JldHVybiBuZXcgTW8oe3R5cGU6InVuaW9uIixvcHRpb25zOnQsZGlzY3JpbWluYXRvcjplLC4uLnYobil9KX1jb25zdCBEbz1kKCJab2RJbnRlcnNlY3Rpb24iLChlLHQpPT57UGQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5mZygpfSk7ZnVuY3Rpb24gbXQoZSx0KXtyZXR1cm4gbmV3IERvKHt0eXBlOiJpbnRlcnNlY3Rpb24iLGxlZnQ6ZSxyaWdodDp0fSl9Y29uc3QgcW89ZCgiWm9kVHVwbGUiLChlLHQpPT57RmUoKSx6cy5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmhnKCl9LHtyZXN0KGUpe3JldHVybiB0aGlzLmNsb25lKHsuLi50aGlzLl96b2QuZGVmLHJlc3Q6ZX0pfSxwYXJ0aWFsKCl7Y29uc3QgZT10aGlzLl96b2QuZGVmO2lmKGUuY2hlY2tzPy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCIucGFydGlhbCgpIGNhbm5vdCBiZSB1c2VkIG9uIHR1cGxlIHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50cyIpO3JldHVybiB0aGlzLmNsb25lKHsuLi5lLGl0ZW1zOmUuaXRlbXMubWFwKHQ9Pm5ldyBndCh7dHlwZToib3B0aW9uYWwiLGlubmVyVHlwZTp0fSkpfSl9fSk7ZnVuY3Rpb24gTG8oZSx0LG4pe2NvbnN0IG89dCBpbnN0YW5jZW9mIHoscj1vP246dCxzPW8/dDpudWxsO3JldHVybiBuZXcgcW8oe3R5cGU6InR1cGxlIixpdGVtczplLHJlc3Q6cywuLi52KHIpfSl9Y29uc3QgRGU9ZCgiWm9kUmVjb3JkIiwoZSx0KT0+e0ZlKCkseGQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5tZygpLGUua2V5VHlwZT10LmtleVR5cGUsZS52YWx1ZVR5cGU9dC52YWx1ZVR5cGV9KTtmdW5jdGlvbiBFKGUsdCxuKXtyZXR1cm4hdHx8IXQuX3pvZD9uZXcgRGUoe3R5cGU6InJlY29yZCIsa2V5VHlwZTpwKCksdmFsdWVUeXBlOmUsLi4udih0KX0pOm5ldyBEZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsLi4udihuKX0pfWZ1bmN0aW9uIGdhKGUsdCxuKXtyZXR1cm4gbmV3IERlKHt0eXBlOiJyZWNvcmQiLGtleVR5cGU6ZSx2YWx1ZVR5cGU6dCwuLi52KG4pLHBhcnRpYWw6ITB9KX1mdW5jdGlvbiBfYShlLHQsbil7cmV0dXJuIG5ldyBEZSh7dHlwZToicmVjb3JkIixrZXlUeXBlOmUsdmFsdWVUeXBlOnQsbW9kZToibG9vc2UiLC4uLnYobil9KX1jb25zdCBVbz1kKCJab2RNYXAiLChlLHQpPT57RmUoKSxJZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnVnKCksZS5rZXlUeXBlPXQua2V5VHlwZSxlLnZhbHVlVHlwZT10LnZhbHVlVHlwZSxlLm1pbj0oLi4ubik9PmUuY2hlY2soemUoLi4ubikpLGUubm9uZW1wdHk9bj0+ZS5jaGVjayh6ZSgxLG4pKSxlLm1heD0oLi4ubik9PmUuY2hlY2soSGUoLi4ubikpLGUuc2l6ZT0oLi4ubik9PmUuY2hlY2soZXQoLi4ubikpfSk7ZnVuY3Rpb24gdmEoZSx0LG4pe3JldHVybiBuZXcgVW8oe3R5cGU6Im1hcCIsa2V5VHlwZTplLHZhbHVlVHlwZTp0LC4uLnYobil9KX1jb25zdCBIbz1kKCJab2RTZXQiLChlLHQpPT57RmUoKSxFZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmxnKCksZS5taW49KC4uLm4pPT5lLmNoZWNrKHplKC4uLm4pKSxlLm5vbmVtcHR5PW49PmUuY2hlY2soemUoMSxuKSksZS5tYXg9KC4uLm4pPT5lLmNoZWNrKEhlKC4uLm4pKSxlLnNpemU9KC4uLm4pPT5lLmNoZWNrKGV0KC4uLm4pKX0pO2Z1bmN0aW9uIGJhKGUsdCl7cmV0dXJuIG5ldyBIbyh7dHlwZToic2V0Iix2YWx1ZVR5cGU6ZSwuLi52KHQpfSl9Y29uc3QgcWU9ZCgiWm9kRW51bSIsKGUsdCk9PntSZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShvLHIscyk9PmVnKCksZS5lbnVtPXQuZW50cmllcyxlLm9wdGlvbnM9Wy4uLmUuX3pvZC52YWx1ZXNdO2NvbnN0IG49bmV3IFNldChPYmplY3Qua2V5cyh0LmVudHJpZXMpKTtlLmV4dHJhY3Q9KG8scik9Pntjb25zdCBzPXt9O2Zvcihjb25zdCBpIG9mIG8paWYobi5oYXMoaSkpc1tpXT10LmVudHJpZXNbaV07ZWxzZSB0aHJvdyBuZXcgRXJyb3IoYEtleSAke2l9IG5vdCBmb3VuZCBpbiBlbnVtYCk7cmV0dXJuIG5ldyBxZSh7Li4udCxjaGVja3M6W10sLi4udihyKSxlbnRyaWVzOnN9KX0sZS5leGNsdWRlPShvLHIpPT57Y29uc3Qgcz17Li4udC5lbnRyaWVzfTtmb3IoY29uc3QgaSBvZiBvKWlmKG4uaGFzKGkpKWRlbGV0ZSBzW2ldO2Vsc2UgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHtpfSBub3QgZm91bmQgaW4gZW51bWApO3JldHVybiBuZXcgcWUoey4uLnQsY2hlY2tzOltdLC4uLnYociksZW50cmllczpzfSl9fSk7ZnVuY3Rpb24gVyhlLHQpe2NvbnN0IG49QXJyYXkuaXNBcnJheShlKT9PYmplY3QuZnJvbUVudHJpZXMoZS5tYXAobz0+W28sb10pKTplO3JldHVybiBuZXcgcWUoe3R5cGU6ImVudW0iLGVudHJpZXM6biwuLi52KHQpfSl9ZnVuY3Rpb24geWEoZSx0KXtyZXR1cm4gbmV3IHFlKHt0eXBlOiJlbnVtIixlbnRyaWVzOmUsLi4udih0KX0pfWNvbnN0IEZvPWQoIlpvZExpdGVyYWwiLChlLHQpPT57WmQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT50ZygpLGUudmFsdWVzPW5ldyBTZXQodC52YWx1ZXMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJ2YWx1ZSIse2dldCgpe2lmKHQudmFsdWVzLmxlbmd0aD4xKXRocm93IG5ldyBFcnJvcigiVGhpcyBzY2hlbWEgY29udGFpbnMgbXVsdGlwbGUgdmFsaWQgbGl0ZXJhbCB2YWx1ZXMuIFVzZSBgLnZhbHVlc2AgaW5zdGVhZC4iKTtyZXR1cm4gdC52YWx1ZXNbMF19fSl9KTtmdW5jdGlvbiBmKGUsdCl7cmV0dXJuIG5ldyBGbyh7dHlwZToibGl0ZXJhbCIsdmFsdWVzOkFycmF5LmlzQXJyYXkoZSk/ZTpbZV0sLi4udih0KX0pfWNvbnN0IEJvPWQoIlpvZEZpbGUiLChlLHQpPT57Q2QuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5yZygpLGUubWluPShuLG8pPT5lLmNoZWNrKHplKG4sbykpLGUubWF4PShuLG8pPT5lLmNoZWNrKEhlKG4sbykpLGUubWltZT0obixvKT0+ZS5jaGVjayhWdChBcnJheS5pc0FycmF5KG4pP246W25dLG8pKX0pO2Z1bmN0aW9uIHdhKGUpe3JldHVybiBFcChCbyxlKX1jb25zdCBWbz1kKCJab2RUcmFuc2Zvcm0iLChlLHQpPT57RmUoKSxPZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmNnKCksZS5fem9kLnBhcnNlPShuLG8pPT57aWYoby5kaXJlY3Rpb249PT0iYmFja3dhcmQiKXRocm93IG5ldyBhbyhlLmNvbnN0cnVjdG9yLm5hbWUpO24uYWRkSXNzdWU9cz0+e2lmKHR5cGVvZiBzPT0ic3RyaW5nIiluLmlzc3Vlcy5wdXNoKEtlKHMsbi52YWx1ZSx0KSk7ZWxzZXtjb25zdCBpPXM7aS5mYXRhbCYmKGkuY29udGludWU9ITEpLGkuY29kZT8/KGkuY29kZT0iY3VzdG9tIiksImlucHV0ImluIGl8fChpLmlucHV0PW4udmFsdWUpLGkuaW5zdD8/KGkuaW5zdD1lKSxuLmlzc3Vlcy5wdXNoKEtlKGkpKX19O2NvbnN0IHI9dC50cmFuc2Zvcm0obi52YWx1ZSxuKTtyZXR1cm4gciBpbnN0YW5jZW9mIFByb21pc2U/ci50aGVuKHM9PihuLnZhbHVlPXMsbikpOihuLnZhbHVlPXIsbil9fSk7ZnVuY3Rpb24ga24oZSl7cmV0dXJuIG5ldyBWbyh7dHlwZToidHJhbnNmb3JtIix0cmFuc2Zvcm06ZX0pfWNvbnN0IGd0PWQoIlpvZE9wdGlvbmFsIiwoZSx0KT0+e1RzLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+cXAoKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBEKGUpe3JldHVybiBuZXcgZ3Qoe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IFNuPWQoIlpvZEV4YWN0T3B0aW9uYWwiLChlLHQpPT57QWQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5xcCgpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIEpvKGUpe3JldHVybiBuZXcgU24oe3R5cGU6Im9wdGlvbmFsIixpbm5lclR5cGU6ZX0pfWNvbnN0IEtvPWQoIlpvZE51bGxhYmxlIiwoZSx0KT0+e05kLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+Z2coKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBRZShlKXtyZXR1cm4gbmV3IEtvKHt0eXBlOiJudWxsYWJsZSIsaW5uZXJUeXBlOmV9KX1mdW5jdGlvbiBrYShlKXtyZXR1cm4gRChRZShlKSl9Y29uc3QgV289ZCgiWm9kRGVmYXVsdCIsKGUsdCk9PntqZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnZnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlRGVmYXVsdD1lLnVud3JhcH0pO2Z1bmN0aW9uIEdvKGUsdCl7cmV0dXJuIG5ldyBXbyh7dHlwZToiZGVmYXVsdCIsaW5uZXJUeXBlOmUsZ2V0IGRlZmF1bHRWYWx1ZSgpe3JldHVybiB0eXBlb2YgdD09ImZ1bmN0aW9uIj90KCk6dG8odCl9fSl9Y29uc3QgUW89ZCgiWm9kUHJlZmF1bHQiLChlLHQpPT57TWQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5iZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIFlvKGUsdCl7cmV0dXJuIG5ldyBRbyh7dHlwZToicHJlZmF1bHQiLGlubmVyVHlwZTplLGdldCBkZWZhdWx0VmFsdWUoKXtyZXR1cm4gdHlwZW9mIHQ9PSJmdW5jdGlvbiI/dCgpOnRvKHQpfX0pfWNvbnN0ICRuPWQoIlpvZE5vbk9wdGlvbmFsIiwoZSx0KT0+e0RkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+X2coKSxlLnVud3JhcD0oKT0+ZS5fem9kLmRlZi5pbm5lclR5cGV9KTtmdW5jdGlvbiBYbyhlLHQpe3JldHVybiBuZXcgJG4oe3R5cGU6Im5vbm9wdGlvbmFsIixpbm5lclR5cGU6ZSwuLi52KHQpfSl9Y29uc3QgZXI9ZCgiWm9kU3VjY2VzcyIsKGUsdCk9PntxZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnNnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gU2EoZSl7cmV0dXJuIG5ldyBlcih7dHlwZToic3VjY2VzcyIsaW5uZXJUeXBlOmV9KX1jb25zdCB0cj1kKCJab2RDYXRjaCIsKGUsdCk9PntMZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PnlnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlLGUucmVtb3ZlQ2F0Y2g9ZS51bndyYXB9KTtmdW5jdGlvbiBucihlLHQpe3JldHVybiBuZXcgdHIoe3R5cGU6ImNhdGNoIixpbm5lclR5cGU6ZSxjYXRjaFZhbHVlOnR5cGVvZiB0PT0iZnVuY3Rpb24iP3Q6S3IodCl9KX1jb25zdCBvcj1kKCJab2ROYU4iLChlLHQpPT57VWQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5uZygpfSk7ZnVuY3Rpb24gJGEoZSl7cmV0dXJuIHhwKG9yLGUpfWNvbnN0IF90PWQoIlpvZFBpcGUiLChlLHQpPT57UHMuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT53ZygpLGUuaW49dC5pbixlLm91dD10Lm91dH0pO2Z1bmN0aW9uIFR0KGUsdCl7cmV0dXJuIG5ldyBfdCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dH0pfWNvbnN0IHZ0PWQoIlpvZENvZGVjIiwoZSx0KT0+e190LmluaXQoZSx0KSx4cy5pbml0KGUsdCl9KTtmdW5jdGlvbiB6YShlLHQsbil7cmV0dXJuIG5ldyB2dCh7dHlwZToicGlwZSIsaW46ZSxvdXQ6dCx0cmFuc2Zvcm06bi5kZWNvZGUscmV2ZXJzZVRyYW5zZm9ybTpuLmVuY29kZX0pfWZ1bmN0aW9uIFRhKGUpe2NvbnN0IHQ9ZS5fem9kLmRlZjtyZXR1cm4gbmV3IHZ0KHt0eXBlOiJwaXBlIixpbjp0Lm91dCxvdXQ6dC5pbix0cmFuc2Zvcm06dC5yZXZlcnNlVHJhbnNmb3JtLHJldmVyc2VUcmFuc2Zvcm06dC50cmFuc2Zvcm19KX1jb25zdCBycj1kKCJab2RQcmVwcm9jZXNzIiwoZSx0KT0+e190LmluaXQoZSx0KSxIZC5pbml0KGUsdCl9KSxzcj1kKCJab2RSZWFkb25seSIsKGUsdCk9PntGZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmtnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuaW5uZXJUeXBlfSk7ZnVuY3Rpb24gaXIoZSl7cmV0dXJuIG5ldyBzcih7dHlwZToicmVhZG9ubHkiLGlubmVyVHlwZTplfSl9Y29uc3QgYXI9ZCgiWm9kVGVtcGxhdGVMaXRlcmFsIiwoZSx0KT0+e0JkLmluaXQoZSx0KSxQLmluaXQoZSx0KSxlLl96b2QucHJvY2Vzc0pTT05TY2hlbWE9KG4sbyxyKT0+b2coKX0pO2Z1bmN0aW9uIFBhKGUsdCl7cmV0dXJuIG5ldyBhcih7dHlwZToidGVtcGxhdGVfbGl0ZXJhbCIscGFydHM6ZSwuLi52KHQpfSl9Y29uc3QgY3I9ZCgiWm9kTGF6eSIsKGUsdCk9PntJcy5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PiRnKCksZS51bndyYXA9KCk9PmUuX3pvZC5kZWYuZ2V0dGVyKCl9KTtmdW5jdGlvbiB1cihlKXtyZXR1cm4gbmV3IGNyKHt0eXBlOiJsYXp5IixnZXR0ZXI6ZX0pfWNvbnN0IGxyPWQoIlpvZFByb21pc2UiLChlLHQpPT57SmQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5TZygpLGUudW53cmFwPSgpPT5lLl96b2QuZGVmLmlubmVyVHlwZX0pO2Z1bmN0aW9uIHhhKGUpe3JldHVybiBuZXcgbHIoe3R5cGU6InByb21pc2UiLGlubmVyVHlwZTplfSl9Y29uc3QgZHI9ZCgiWm9kRnVuY3Rpb24iLChlLHQpPT57VmQuaW5pdChlLHQpLFAuaW5pdChlLHQpLGUuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYT0obixvLHIpPT5hZygpfSk7ZnVuY3Rpb24gWWUoZSl7cmV0dXJuIG5ldyBkcih7dHlwZToiZnVuY3Rpb24iLGlucHV0OkFycmF5LmlzQXJyYXkoZT8uaW5wdXQpP0xvKGU/LmlucHV0KTplPy5pbnB1dD8/UyhDKCkpLG91dHB1dDplPy5vdXRwdXQ/P0MoKX0pfWNvbnN0IGJ0PWQoIlpvZEN1c3RvbSIsKGUsdCk9PntLZC5pbml0KGUsdCksUC5pbml0KGUsdCksZS5fem9kLnByb2Nlc3NKU09OU2NoZW1hPShuLG8scik9PmlnKCl9KTtmdW5jdGlvbiBJYShlKXtjb25zdCB0PW5ldyBMKHtjaGVjazoiY3VzdG9tIn0pO3JldHVybiB0Ll96b2QuY2hlY2s9ZSx0fWZ1bmN0aW9uIHByKGUsdCl7cmV0dXJuIFJwKGJ0LGU/PygoKT0+ITApLHQpfWZ1bmN0aW9uIGZyKGUsdD17fSl7cmV0dXJuIFpwKGJ0LGUsdCl9ZnVuY3Rpb24gaHIoZSx0KXtyZXR1cm4gQ3AoZSx0KX1jb25zdCBFYT1BcCxSYT1OcCxtcj1kKCJab2RJbnN0YW5jZU9mIiwoZSx0KT0+e2J0LmluaXQoZSx0KX0se3Byb3BlcnRpZXMoZSx0KXtyZXR1cm4gdGhpcy5jaGVjayhCdChlLHQpKX19KTtmdW5jdGlvbiBaYShlLHQ9e30pe2NvbnN0IG49bmV3IG1yKHt0eXBlOiJjdXN0b20iLGNoZWNrOiJjdXN0b20iLGZuOm89Pm8gaW5zdGFuY2VvZiBlLGFib3J0OiEwLC4uLnYodCl9KTtyZXR1cm4gbi5fem9kLmJhZy5DbGFzcz1lLG4uX3pvZC5jaGVjaz1vPT57by52YWx1ZSBpbnN0YW5jZW9mIGV8fG8uaXNzdWVzLnB1c2goe2NvZGU6ImludmFsaWRfdHlwZSIsZXhwZWN0ZWQ6ZS5uYW1lLGlucHV0Om8udmFsdWUsaW5zdDpuLHBhdGg6Wy4uLm4uX3pvZC5kZWYucGF0aD8/W11dfSl9LG59Y29uc3QgQ2E9KC4uLmUpPT5qcCh7Q29kZWM6dnQsQm9vbGVhbjpkdCxTdHJpbmc6cnR9LC4uLmUpO2Z1bmN0aW9uIE9hKGUpe2NvbnN0IHQ9dXIoKCk9PngoW3AoZSksVCgpLE8oKSx2bigpLFModCksRShwKCksdCldKSk7cmV0dXJuIHR9ZnVuY3Rpb24gem4oZSx0KXtyZXR1cm4gbmV3IHJyKHt0eXBlOiJwaXBlIixpbjprbihlKSxvdXQ6dH0pfWNvbnN0IFJnPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxab2RBbnk6Wm8sWm9kQXJyYXk6Tm8sWm9kQmFzZTY0OmZuLFpvZEJhc2U2NFVSTDpobixab2RCaWdJbnQ6cHQsWm9kQmlnSW50Rm9ybWF0Ol9uLFpvZEJvb2xlYW46ZHQsWm9kQ0lEUnY0OmRuLFpvZENJRFJ2Njpwbixab2RDVUlEOm9uLFpvZENVSUQyOnJuLFpvZENhdGNoOnRyLFpvZENvZGVjOnZ0LFpvZENyZWRpdENhcmQ6UG8sWm9kQ3VzdG9tOmJ0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpaZSxab2REYXRlOnluLFpvZERlZmF1bHQ6V28sWm9kRGlzY3JpbWluYXRlZFVuaW9uOk1vLFpvZEUxNjQ6bW4sWm9kRW1haWw6WHQsWm9kRW1vamk6dG4sWm9kRW51bTpxZSxab2RFeGFjdE9wdGlvbmFsOlNuLFpvZEZpbGU6Qm8sWm9kRnVuY3Rpb246ZHIsWm9kR1VJRDplbixab2RJQkFOOnhvLFpvZElQdjQ6dW4sWm9kSVB2Njpsbixab2RJU09EYXRlOml0LFpvZElTT0RhdGVUaW1lOnN0LFpvZElTT0R1cmF0aW9uOmN0LFpvZElTT1RpbWU6YXQsWm9kSW5zdGFuY2VPZjptcixab2RJbnRlcnNlY3Rpb246RG8sWm9kSldUOmduLFpvZEtTVUlEOmNuLFpvZExhenk6Y3IsWm9kTGl0ZXJhbDpGbyxab2RNQUM6VG8sWm9kTWFwOlVvLFpvZE5hTjpvcixab2ROYW5vSUQ6bm4sWm9kTmV2ZXI6T28sWm9kTm9uT3B0aW9uYWw6JG4sWm9kTnVsbDpSbyxab2ROdWxsYWJsZTpLbyxab2ROdW1iZXI6bHQsWm9kTnVtYmVyRm9ybWF0OkNlLFpvZE9iamVjdDpmdCxab2RPcHRpb25hbDpndCxab2RQaXBlOl90LFpvZFByZWZhdWx0OlFvLFpvZFByZXByb2Nlc3M6cnIsWm9kUHJvbWlzZTpscixab2RSZWFkb25seTpzcixab2RSZWNvcmQ6RGUsWm9kU2V0OkhvLFpvZFN0cmluZzpydCxab2RTdHJpbmdGb3JtYXQ6QSxab2RTdWNjZXNzOmVyLFpvZFN5bWJvbDpJbyxab2RUZW1wbGF0ZUxpdGVyYWw6YXIsWm9kVHJhbnNmb3JtOlZvLFpvZFR1cGxlOnFvLFpvZFR5cGU6UCxab2RVTElEOnNuLFpvZFVSTDp1dCxab2RVVUlEOl9lLFpvZFVuZGVmaW5lZDpFbyxab2RVbmlvbjpodCxab2RVbmtub3duOkNvLFpvZFZvaWQ6QW8sWm9kWElEOmFuLFpvZFhvcjpqbyxfWm9kU3RyaW5nOll0LF9kZWZhdWx0OkdvLF9mdW5jdGlvbjpZZSxhbnk6Ym4sYXJyYXk6UyxiYXNlNjQ6VmksYmFzZTY0dXJsOkppLGJpZ2ludDphYSxib29sZWFuOk8sY2F0Y2g6bnIsY2hlY2s6SWEsY2lkcnY0OkZpLGNpZHJ2NjpCaSxjb2RlYzp6YSxjcmVkaXRDYXJkOldpLGN1aWQ6TmksY3VpZDI6amksY3VycmVuY3lDb2RlOnRhLGN1c3RvbTpwcixkYXRlOnBhLGRlc2NyaWJlOkVhLGRpc2NyaW1pbmF0ZWRVbmlvbjp3bixlMTY0OktpLGVtYWlsOlRpLGVtb2ppOk9pLGVudW06VyxleGFjdE9wdGlvbmFsOkpvLGZpbGU6d2EsZmxvYXQzMjpvYSxmbG9hdDY0OnJhLGZ1bmN0aW9uOlllLGd1aWQ6UGksaGFzaDpuYSxoZXg6ZWEsaG9zdG5hbWU6WGksaHR0cFVybDpDaSxpYmFuOkdpLGluc3RhbmNlb2Y6WmEsaW50Onp0LGludDMyOnNhLGludDY0OmNhLGludGVyc2VjdGlvbjptdCxpbnZlcnRDb2RlYzpUYSxpcHY0OkxpLGlwdjY6SGksanNvbjpPYSxqd3Q6UWksa2V5b2Y6ZmEsa3N1aWQ6cWksbGF6eTp1cixsaXRlcmFsOmYsbG9vc2VPYmplY3Q6Syxsb29zZVJlY29yZDpfYSxtYWM6VWksbWFwOnZhLG1ldGE6UmEsbmFuOiRhLG5hbm9pZDpBaSxuYXRpdmVFbnVtOnlhLG5ldmVyOk1lLG5vbm9wdGlvbmFsOlhvLG51bGw6dm4sbnVsbGFibGU6UWUsbnVsbGlzaDprYSxudW1iZXI6VCxvYmplY3Q6bSxvcHRpb25hbDpELHBhcnRpYWxSZWNvcmQ6Z2EscGlwZTpUdCxwcmVmYXVsdDpZbyxwcmVwcm9jZXNzOnpuLHByb21pc2U6eGEscmVhZG9ubHk6aXIscmVjb3JkOkUscmVmaW5lOmZyLHNldDpiYSxzdHJpY3RPYmplY3Q6aGEsc3RyaW5nOnAsc3RyaW5nRm9ybWF0OllpLHN0cmluZ2Jvb2w6Q2Esc3VjY2VzczpTYSxzdXBlclJlZmluZTpocixzeW1ib2w6bGEsdGVtcGxhdGVMaXRlcmFsOlBhLHRyYW5zZm9ybTprbix0dXBsZTpMbyx1aW50MzI6aWEsdWludDY0OnVhLHVsaWQ6TWksdW5kZWZpbmVkOkdlLHVuaW9uOngsdW5rbm93bjpDLHVybDpaaSx1dWlkOnhpLHV1aWR2NDpJaSx1dWlkdjY6RWksdXVpZHY3OlJpLHZvaWQ6ZGEseGlkOkRpLHhvcjptYX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxCcD17aW52YWxpZF90eXBlOiJpbnZhbGlkX3R5cGUiLHRvb19iaWc6InRvb19iaWciLHRvb19zbWFsbDoidG9vX3NtYWxsIixpbnZhbGlkX2Zvcm1hdDoiaW52YWxpZF9mb3JtYXQiLG5vdF9tdWx0aXBsZV9vZjoibm90X211bHRpcGxlX29mIix1bnJlY29nbml6ZWRfa2V5czoidW5yZWNvZ25pemVkX2tleXMiLGludmFsaWRfdW5pb246ImludmFsaWRfdW5pb24iLGludmFsaWRfa2V5OiJpbnZhbGlkX2tleSIsaW52YWxpZF9lbGVtZW50OiJpbnZhbGlkX2VsZW1lbnQiLGludmFsaWRfdmFsdWU6ImludmFsaWRfdmFsdWUiLGN1c3RvbToiY3VzdG9tIn07ZnVuY3Rpb24gVnAoZSl7Vih7Y3VzdG9tRXJyb3I6ZX0pfWZ1bmN0aW9uIEpwKCl7cmV0dXJuIFYoKS5jdXN0b21FcnJvcn12YXIgR247R258fChHbj17fSk7ZnVuY3Rpb24gS3AoZSl7cmV0dXJuIGFpKHN0LGUpfWZ1bmN0aW9uIFpnKGUpe3JldHVybiBjaShpdCxlKX1mdW5jdGlvbiBDZyhlKXtyZXR1cm4gdWkoYXQsZSl9ZnVuY3Rpb24gT2coZSl7cmV0dXJuIGxpKGN0LGUpfWNvbnN0IEFhPU9iamVjdC5mcmVlemUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHtfX3Byb3RvX186bnVsbCxab2RJU09EYXRlOml0LFpvZElTT0RhdGVUaW1lOnN0LFpvZElTT0R1cmF0aW9uOmN0LFpvZElTT1RpbWU6YXQsZGF0ZTpaZyxkYXRldGltZTpLcCxkdXJhdGlvbjpPZyx0aW1lOkNnfSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSkpLHc9ey4uLlJnLC4uLklnLGlzbzpBYX0sQWc9bmV3IFNldChbIiRzY2hlbWEiLCIkcmVmIiwiJGRlZnMiLCJkZWZpbml0aW9ucyIsIiRpZCIsImlkIiwiJGNvbW1lbnQiLCIkYW5jaG9yIiwiJHZvY2FidWxhcnkiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIiwidHlwZSIsImVudW0iLCJjb25zdCIsImFueU9mIiwib25lT2YiLCJhbGxPZiIsIm5vdCIsInByb3BlcnRpZXMiLCJyZXF1aXJlZCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwicGF0dGVyblByb3BlcnRpZXMiLCJwcm9wZXJ0eU5hbWVzIiwibWluUHJvcGVydGllcyIsIm1heFByb3BlcnRpZXMiLCJpdGVtcyIsInByZWZpeEl0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwibWluSXRlbXMiLCJtYXhJdGVtcyIsInVuaXF1ZUl0ZW1zIiwiY29udGFpbnMiLCJtaW5Db250YWlucyIsIm1heENvbnRhaW5zIiwibWluTGVuZ3RoIiwibWF4TGVuZ3RoIiwicGF0dGVybiIsImZvcm1hdCIsIm1pbmltdW0iLCJtYXhpbXVtIiwiZXhjbHVzaXZlTWluaW11bSIsImV4Y2x1c2l2ZU1heGltdW0iLCJtdWx0aXBsZU9mIiwiZGVzY3JpcHRpb24iLCJkZWZhdWx0IiwiY29udGVudEVuY29kaW5nIiwiY29udGVudE1lZGlhVHlwZSIsImNvbnRlbnRTY2hlbWEiLCJ1bmV2YWx1YXRlZEl0ZW1zIiwidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIiwiaWYiLCJ0aGVuIiwiZWxzZSIsImRlcGVuZGVudFNjaGVtYXMiLCJkZXBlbmRlbnRSZXF1aXJlZCIsIm51bGxhYmxlIiwicmVhZE9ubHkiXSk7ZnVuY3Rpb24gTmcoZSx0KXtjb25zdCBuPWUuJHNjaGVtYTtyZXR1cm4gbj09PSJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYSI/ImRyYWZ0LTIwMjAtMTIiOm49PT0iaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIj8iZHJhZnQtNyI6bj09PSJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA0L3NjaGVtYSMiPyJkcmFmdC00Ijp0Pz8iZHJhZnQtMjAyMC0xMiJ9ZnVuY3Rpb24gWmMoZSx0KXtyZXR1cm4gZS5tYXAoKG4sbyk9Pm88dD9uOm4ub3B0aW9uYWwoKSl9ZnVuY3Rpb24gamcoZSl7cmV0dXJuIGUucmVwbGFjZSgvfjEvZywiLyIpLnJlcGxhY2UoL34wL2csIn4iKX1mdW5jdGlvbiBNZyhlLHQpe2lmKCFlLnN0YXJ0c1dpdGgoIiMiKSl0aHJvdyBuZXcgRXJyb3IoIkV4dGVybmFsICRyZWYgaXMgbm90IHN1cHBvcnRlZCwgb25seSBsb2NhbCByZWZzICgjLy4uLikgYXJlIGFsbG93ZWQiKTtjb25zdCBuPWUuc2xpY2UoMSkuc3BsaXQoIi8iKS5maWx0ZXIoQm9vbGVhbik7aWYobi5sZW5ndGg9PT0wKXJldHVybiB0LnJvb3RTY2hlbWE7Y29uc3Qgbz10LnZlcnNpb249PT0iZHJhZnQtMjAyMC0xMiI/IiRkZWZzIjoiZGVmaW5pdGlvbnMiO2lmKG5bMF09PT1vKXtjb25zdCByPW5bMV09PT12b2lkIDA/dm9pZCAwOmpnKG5bMV0pO2lmKCFyfHwhdC5kZWZzW3JdKXRocm93IG5ldyBFcnJvcihgUmVmZXJlbmNlIG5vdCBmb3VuZDogJHtlfWApO3JldHVybiB0LmRlZnNbcl19dGhyb3cgbmV3IEVycm9yKGBSZWZlcmVuY2Ugbm90IGZvdW5kOiAke2V9YCl9ZnVuY3Rpb24gRGcoZSx0KXtyZXR1cm4gdy50cmFuc2Zvcm0obz0+bykuY2hlY2sobz0+e2NvbnN0IHI9by52YWx1ZTtpZih0eXBlb2YgciE9Im9iamVjdCJ8fHI9PT1udWxsfHxBcnJheS5pc0FycmF5KHIpKXJldHVybjtjb25zdCBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHIpO2lmKHQubWluUHJvcGVydGllcyE9PXZvaWQgMCYmcy5sZW5ndGg8dC5taW5Qcm9wZXJ0aWVzJiZvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im9iamVjdCIsY29kZToidG9vX3NtYWxsIixtaW5pbXVtOnQubWluUHJvcGVydGllcyxpbmNsdXNpdmU6ITAsbWVzc2FnZTpgVG9vIHNtYWxsOiBleHBlY3RlZCBvYmplY3QgdG8gaGF2ZSA+PSR7dC5taW5Qcm9wZXJ0aWVzfSBwcm9wZXJ0aWVzYCxpbnB1dDpyLGluc3Q6ZSxjb250aW51ZTohMH0pLHQubWF4UHJvcGVydGllcyE9PXZvaWQgMCYmcy5sZW5ndGg+dC5tYXhQcm9wZXJ0aWVzJiZvLmlzc3Vlcy5wdXNoKHtvcmlnaW46Im9iamVjdCIsY29kZToidG9vX2JpZyIsbWF4aW11bTp0Lm1heFByb3BlcnRpZXMsaW5jbHVzaXZlOiEwLG1lc3NhZ2U6YFRvbyBiaWc6IGV4cGVjdGVkIG9iamVjdCB0byBoYXZlIDw9JHt0Lm1heFByb3BlcnRpZXN9IHByb3BlcnRpZXNgLGlucHV0OnIsaW5zdDplLGNvbnRpbnVlOiEwfSksdC5rZXlTY2hlbWEpZm9yKGNvbnN0IGkgb2Ygcyl7Y29uc3QgYT10LmtleVNjaGVtYS5zYWZlUGFyc2UoaSk7YS5zdWNjZXNzfHxvLmlzc3Vlcy5wdXNoKHtjb2RlOiJpbnZhbGlkX2tleSIsb3JpZ2luOiJyZWNvcmQiLGlzc3VlczphLmVycm9yLmlzc3VlcyxpbnB1dDppLHBhdGg6W2ldLGNvbnRpbnVlOiEwfSl9fSkucGlwZShlKX1mdW5jdGlvbiBEcihlLHQpe2lmKGU9PT1udWxsKXJldHVybiJ6Ijtjb25zdCBuPXR5cGVvZiBlO2lmKG4hPT0ib2JqZWN0Iil7aWYobj09PSJudW1iZXIiJiZOdW1iZXIuaXNOYU4oZSkpcmV0dXJuIG51bGw7Y29uc3Qgbz1TdHJpbmcoZSk7cmV0dXJuYCR7blswXX0ke28ubGVuZ3RofToke299YH1pZih0LmhhcyhlKSlyZXR1cm4gbnVsbDt0LmFkZChlKTt0cnl7aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3Qgcz1bXTtmb3IoY29uc3QgaSBvZiBlKXtjb25zdCBhPURyKGksdCk7aWYoYT09PW51bGwpcmV0dXJuIG51bGw7cy5wdXNoKGEpfXJldHVybmBhJHtzLmxlbmd0aH06WyR7cy5qb2luKCIsIil9XWB9Y29uc3Qgbz1PYmplY3Qua2V5cyhlKS5zb3J0KCkscj1bXTtmb3IoY29uc3QgcyBvZiBvKXtjb25zdCBpPURyKGVbc10sdCk7aWYoaT09PW51bGwpcmV0dXJuIG51bGw7ci5wdXNoKGAke3MubGVuZ3RofToke3N9PSR7aX1gKX1yZXR1cm5gbyR7ci5sZW5ndGh9Onske3Iuam9pbigiLCIpfX1gfWZpbmFsbHl7dC5kZWxldGUoZSl9fWNvbnN0IHFnPW5ldyBTZXQoWyJpdGVtcyIsInByZWZpeEl0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjb250YWlucyIsInByb3BlcnR5TmFtZXMiLCJub3QiLCJpZiIsInRoZW4iLCJlbHNlIiwiYWxsT2YiLCJhbnlPZiIsIm9uZU9mIiwidW5ldmFsdWF0ZWRJdGVtcyIsInVuZXZhbHVhdGVkUHJvcGVydGllcyIsImNvbnRlbnRTY2hlbWEiXSksTGc9bmV3IFNldChbInByb3BlcnRpZXMiLCJwYXR0ZXJuUHJvcGVydGllcyIsImRlcGVuZGVudFNjaGVtYXMiLCJkZXBlbmRlbmNpZXMiLCIkZGVmcyIsImRlZmluaXRpb25zIl0pO2Z1bmN0aW9uIFN0KGUpe3JldHVybiB0eXBlb2YgZSE9Im9iamVjdCJ8fGU9PT1udWxsPyExOkFycmF5LmlzQXJyYXkoZSk/ZS5zb21lKFN0KTp0eXBlb2YgZS4kcmVmPT0ic3RyaW5nIj8hMDpPYmplY3QuZW50cmllcyhlKS5zb21lKChbdCxuXSk9PnFnLmhhcyh0KT9TdChuKTohTGcuaGFzKHQpfHx0eXBlb2YgbiE9Im9iamVjdCJ8fG49PT1udWxsPyExOk9iamVjdC52YWx1ZXMobikuc29tZShTdCkpfWZ1bmN0aW9uIENjKGUpe3JldHVybiBlPT09MT8iZWxlbWVudCI6ImVsZW1lbnRzIn1mdW5jdGlvbiBVZyhlLHQpe3JldHVybiB3LnRyYW5zZm9ybShvPT5vKS5jaGVjayhvPT57Y29uc3Qgcj1vLnZhbHVlO2lmKEFycmF5LmlzQXJyYXkocikpe2lmKHQudW5pcXVlSXRlbXM9PT0hMCl7Y29uc3Qgcz1uZXcgTWFwO2ZvcihsZXQgaT0wO2k8ci5sZW5ndGg7aSsrKXtjb25zdCBhPURyKHJbaV0sbmV3IFNldCk7aWYoYT09PW51bGwpY29udGludWU7Y29uc3QgdT1zLmdldChhKTtpZih1PT09dm9pZCAwKXtzLnNldChhLGkpO2NvbnRpbnVlfW8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgaXRlbXMgbXVzdCBiZSB1bmlxdWU6IGVsZW1lbnQgYXQgaW5kZXggJHtpfSBkdXBsaWNhdGVzIHRoZSBvbmUgYXQgaW5kZXggJHt1fWAsaW5wdXQ6cixwYXRoOltpXSxjb250aW51ZTohMH0pfX1pZih0LmNvbnRhaW5zU2NoZW1hKXtjb25zdCBzPXQubWluQ29udGFpbnM/PzEsaT10Lm1heENvbnRhaW5zIT09dm9pZCAwP3QubWF4Q29udGFpbnMrMTpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7bGV0IGE9MDtmb3IoY29uc3QgdSBvZiByKWlmKHQuY29udGFpbnNTY2hlbWEuc2FmZVBhcnNlKHUpLnN1Y2Nlc3MmJisrYT49aSlicmVhazthPHMmJm8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgbXVzdCBjb250YWluIGF0IGxlYXN0ICR7c30gbWF0Y2hpbmcgJHtDYyhzKX07IGZvdW5kICR7YX1gLGlucHV0OnIsY29udGludWU6ITB9KSx0Lm1heENvbnRhaW5zIT09dm9pZCAwJiZhPnQubWF4Q29udGFpbnMmJm8uaXNzdWVzLnB1c2goe2NvZGU6ImN1c3RvbSIsbWVzc2FnZTpgQXJyYXkgbXVzdCBjb250YWluIGF0IG1vc3QgJHt0Lm1heENvbnRhaW5zfSBtYXRjaGluZyAke0NjKHQubWF4Q29udGFpbnMpfWAsaW5wdXQ6cixjb250aW51ZTohMH0pfX19KS5waXBlKGUpfWZ1bmN0aW9uIE9jKGUsdCl7aWYoZSE9PSExKXJldHVybiBlPT09dm9pZCAwfHxlPT09ITA/dy5hbnkoKTpYKGUsdCl9Y29uc3QgSGc9L14oPzpbMDFdXGR8MlswLTNdKTpbMC01XVxkOlswLTVdXGQoPzpcLlxkKyk/KD86WnxbKy1dKD86WzAxXVxkfDJbMC0zXSk6WzAtNV1cZCkkLztmdW5jdGlvbiBXcChlLHQpe2lmKGUubm90IT09dm9pZCAwKXtpZih0eXBlb2YgZS5ub3Q9PSJvYmplY3QiJiZPYmplY3Qua2V5cyhlLm5vdCkubGVuZ3RoPT09MClyZXR1cm4gdy5uZXZlcigpO3Rocm93IG5ldyBFcnJvcigibm90IGlzIG5vdCBzdXBwb3J0ZWQgaW4gWm9kIChleGNlcHQgeyBub3Q6IHt9IH0gZm9yIG5ldmVyKSIpfWlmKGUudW5ldmFsdWF0ZWRJdGVtcyE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoInVuZXZhbHVhdGVkSXRlbXMgaXMgbm90IHN1cHBvcnRlZCIpO2lmKGUudW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIT09dm9pZCAwKXRocm93IG5ldyBFcnJvcigidW5ldmFsdWF0ZWRQcm9wZXJ0aWVzIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZihlLmlmIT09dm9pZCAwfHxlLnRoZW4hPT12b2lkIDB8fGUuZWxzZSE9PXZvaWQgMCl0aHJvdyBuZXcgRXJyb3IoIkNvbmRpdGlvbmFsIHNjaGVtYXMgKGlmL3RoZW4vZWxzZSkgYXJlIG5vdCBzdXBwb3J0ZWQiKTtpZihlLmRlcGVuZGVudFNjaGVtYXMhPT12b2lkIDB8fGUuZGVwZW5kZW50UmVxdWlyZWQhPT12b2lkIDApdGhyb3cgbmV3IEVycm9yKCJkZXBlbmRlbnRTY2hlbWFzIGFuZCBkZXBlbmRlbnRSZXF1aXJlZCBhcmUgbm90IHN1cHBvcnRlZCIpO2lmKGUuJHJlZil7Y29uc3Qgcj1lLiRyZWY7aWYodC5yZWZzLmhhcyhyKSlyZXR1cm4gdC5yZWZzLmdldChyKTtpZih0LnByb2Nlc3NpbmcuaGFzKHIpKXJldHVybiB3LmxhenkoKCk9PntpZighdC5yZWZzLmhhcyhyKSl0aHJvdyBuZXcgRXJyb3IoYENpcmN1bGFyIHJlZmVyZW5jZSBub3QgcmVzb2x2ZWQ6ICR7cn1gKTtyZXR1cm4gdC5yZWZzLmdldChyKX0pO3QucHJvY2Vzc2luZy5hZGQocik7Y29uc3Qgcz1NZyhyLHQpLGk9WChzLHQpO3JldHVybiB0LnJlZnMuc2V0KHIsaSksdC5wcm9jZXNzaW5nLmRlbGV0ZShyKSxpfWlmKGUuZW51bSE9PXZvaWQgMCl7Y29uc3Qgcj1lLmVudW07aWYodC52ZXJzaW9uPT09Im9wZW5hcGktMy4wIiYmZS5udWxsYWJsZT09PSEwJiZyLmxlbmd0aD09PTEmJnJbMF09PT1udWxsKXJldHVybiB3Lm51bGwoKTtpZihyLmxlbmd0aD09PTApcmV0dXJuIHcubmV2ZXIoKTtpZihyLmxlbmd0aD09PTEpcmV0dXJuIHcubGl0ZXJhbChyWzBdKTtpZihyLmV2ZXJ5KGk9PnR5cGVvZiBpPT0ic3RyaW5nIikpcmV0dXJuIHcuZW51bShyKTtjb25zdCBzPXIubWFwKGk9PncubGl0ZXJhbChpKSk7cmV0dXJuIHMubGVuZ3RoPDI/c1swXTp3LnVuaW9uKFtzWzBdLHNbMV0sLi4ucy5zbGljZSgyKV0pfWlmKGUuY29uc3QhPT12b2lkIDApcmV0dXJuIHcubGl0ZXJhbChlLmNvbnN0KTtjb25zdCBuPWUudHlwZTtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdCByPW4ubWFwKHM9Pntjb25zdCBpPXsuLi5lLHR5cGU6c307cmV0dXJuIFdwKGksdCl9KTtyZXR1cm4gci5sZW5ndGg9PT0wP3cubmV2ZXIoKTpyLmxlbmd0aD09PTE/clswXTp3LnVuaW9uKHIpfWlmKCFuKXJldHVybiB3LmFueSgpO2xldCBvO3N3aXRjaChuKXtjYXNlInN0cmluZyI6e2xldCByPXcuc3RyaW5nKCk7aWYoZS5mb3JtYXQpe2NvbnN0IHM9ZS5mb3JtYXQ7cz09PSJlbWFpbCI/cj1yLmNoZWNrKHcuZW1haWwoKSk6cz09PSJ1cmkifHxzPT09InVyaS1yZWZlcmVuY2UiP3I9ci5jaGVjayh3LnVybCgpKTpzPT09InV1aWQifHxzPT09Imd1aWQiP3I9ci5jaGVjayh3LnV1aWQoKSk6cz09PSJkYXRlLXRpbWUiP3I9ci5jaGVjayh3Lmlzby5kYXRldGltZSh7b2Zmc2V0OiEwfSkpOnM9PT0iZGF0ZSI/cj1yLmNoZWNrKHcuaXNvLmRhdGUoKSk6cz09PSJ0aW1lIj9yPXIuY2hlY2sody5yZWdleChIZykpOnM9PT0iZHVyYXRpb24iP3I9ci5jaGVjayh3Lmlzby5kdXJhdGlvbigpKTpzPT09Imhvc3RuYW1lIj9yPXIuY2hlY2sody5ob3N0bmFtZSgpKTpzPT09ImlwdjQiP3I9ci5jaGVjayh3LmlwdjQoKSk6cz09PSJpcHY2Ij9yPXIuY2hlY2sody5pcHY2KCkpOnM9PT0ibWFjIj9yPXIuY2hlY2sody5tYWMoKSk6cz09PSJjaWRyIj9yPXIuY2hlY2sody5jaWRydjQoKSk6cz09PSJjaWRyLXY2Ij9yPXIuY2hlY2sody5jaWRydjYoKSk6cz09PSJiYXNlNjQiP3I9ci5jaGVjayh3LmJhc2U2NCgpKTpzPT09ImJhc2U2NHVybCI/cj1yLmNoZWNrKHcuYmFzZTY0dXJsKCkpOnM9PT0iZTE2NCI/cj1yLmNoZWNrKHcuZTE2NCgpKTpzPT09ImNyZWRpdF9jYXJkIj9yPXIuY2hlY2sody5jcmVkaXRDYXJkKCkpOnM9PT0iaWJhbiI/cj1yLmNoZWNrKHcuaWJhbigpKTpzPT09Imp3dCI/cj1yLmNoZWNrKHcuand0KCkpOnM9PT0iZW1vamkiP3I9ci5jaGVjayh3LmVtb2ppKCkpOnM9PT0ibmFub2lkIj9yPXIuY2hlY2sody5uYW5vaWQoKSk6cz09PSJjdWlkIj9yPXIuY2hlY2sody5jdWlkKCkpOnM9PT0iY3VpZDIiP3I9ci5jaGVjayh3LmN1aWQyKCkpOnM9PT0idWxpZCI/cj1yLmNoZWNrKHcudWxpZCgpKTpzPT09InhpZCI/cj1yLmNoZWNrKHcueGlkKCkpOnM9PT0ia3N1aWQiJiYocj1yLmNoZWNrKHcua3N1aWQoKSkpfXR5cGVvZiBlLm1pbkxlbmd0aD09Im51bWJlciImJihyPXIubWluKGUubWluTGVuZ3RoKSksdHlwZW9mIGUubWF4TGVuZ3RoPT0ibnVtYmVyIiYmKHI9ci5tYXgoZS5tYXhMZW5ndGgpKSxlLnBhdHRlcm4mJihyPXIucmVnZXgobmV3IFJlZ0V4cChlLnBhdHRlcm4pKSksbz1yO2JyZWFrfWNhc2UibnVtYmVyIjpjYXNlImludGVnZXIiOntsZXQgcj1uPT09ImludGVnZXIiP3cubnVtYmVyKCkuaW50KCk6dy5udW1iZXIoKTt0eXBlb2YgZS5taW5pbXVtPT0ibnVtYmVyIiYmZS5leGNsdXNpdmVNaW5pbXVtIT09ITAmJihyPXIubWluKGUubWluaW11bSkpLHR5cGVvZiBlLm1heGltdW09PSJudW1iZXIiJiZlLmV4Y2x1c2l2ZU1heGltdW0hPT0hMCYmKHI9ci5tYXgoZS5tYXhpbXVtKSksdHlwZW9mIGUuZXhjbHVzaXZlTWluaW11bT09Im51bWJlciI/cj1yLmd0KGUuZXhjbHVzaXZlTWluaW11bSk6ZS5leGNsdXNpdmVNaW5pbXVtPT09ITAmJnR5cGVvZiBlLm1pbmltdW09PSJudW1iZXIiJiYocj1yLmd0KGUubWluaW11bSkpLHR5cGVvZiBlLmV4Y2x1c2l2ZU1heGltdW09PSJudW1iZXIiP3I9ci5sdChlLmV4Y2x1c2l2ZU1heGltdW0pOmUuZXhjbHVzaXZlTWF4aW11bT09PSEwJiZ0eXBlb2YgZS5tYXhpbXVtPT0ibnVtYmVyIiYmKHI9ci5sdChlLm1heGltdW0pKSx0eXBlb2YgZS5tdWx0aXBsZU9mPT0ibnVtYmVyIiYmKHI9ci5tdWx0aXBsZU9mKGUubXVsdGlwbGVPZikpLG89cjticmVha31jYXNlImJvb2xlYW4iOntvPXcuYm9vbGVhbigpO2JyZWFrfWNhc2UibnVsbCI6e289dy5udWxsKCk7YnJlYWt9Y2FzZSJvYmplY3QiOntjb25zdCByPXt9LHM9ZS5wcm9wZXJ0aWVzfHx7fSxpPW5ldyBTZXQoZS5yZXF1aXJlZHx8W10pLGE9dHlwZW9mIGUuYWRkaXRpb25hbFByb3BlcnRpZXM9PSJvYmplY3QiP1goZS5hZGRpdGlvbmFsUHJvcGVydGllcyx0KTp2b2lkIDA7Zm9yKGNvbnN0W2gsZ11vZiBPYmplY3QuZW50cmllcyhzKSl7Y29uc3QgXz1YKGcsdCk7VWUocixoLGkuaGFzKGgpP186Xy5vcHRpb25hbCgpKX1pZihlLnBhdHRlcm5Qcm9wZXJ0aWVzKXtjb25zdCBoPWUucGF0dGVyblByb3BlcnRpZXMsZz1PYmplY3Qua2V5cyhoKSxfPVtdO2Zvcihjb25zdCBrIG9mIGcpe2NvbnN0ICQ9WChoW2tdLHQpLE49dy5zdHJpbmcoKS5yZWdleChuZXcgUmVnRXhwKGspKTtfLnB1c2gody5sb29zZVJlY29yZChOLCQpKX1jb25zdCBiPVtdO2lmKE9iamVjdC5rZXlzKHIpLmxlbmd0aD4wJiZiLnB1c2gody5vYmplY3QocikucGFzc3Rocm91Z2goKSksYi5wdXNoKC4uLl8pLGIubGVuZ3RoPT09MClvPXcub2JqZWN0KHt9KS5wYXNzdGhyb3VnaCgpO2Vsc2UgaWYoYi5sZW5ndGg9PT0xKW89YlswXTtlbHNle2xldCBrPXcuaW50ZXJzZWN0aW9uKGJbMF0sYlsxXSk7Zm9yKGxldCAkPTI7JDxiLmxlbmd0aDskKyspaz13LmludGVyc2VjdGlvbihrLGJbJF0pO289a31pZihlLmFkZGl0aW9uYWxQcm9wZXJ0aWVzPT09ITEpe2NvbnN0IGs9T2JqZWN0LmtleXMociksJD1nLm1hcChSPT5uZXcgUmVnRXhwKFIpKSxOPW87bz1vLmNoZWNrKFI9PntpZighSWUoUi52YWx1ZSkpcmV0dXJuO2NvbnN0IEg9W107Zm9yKGNvbnN0IHRlIG9mIE9iamVjdC5rZXlzKFIudmFsdWUpKWsuaW5jbHVkZXModGUpfHwkLnNvbWUoRj0+Ri50ZXN0KHRlKSl8fEgucHVzaCh0ZSk7SC5sZW5ndGgmJlIuaXNzdWVzLnB1c2goe2NvZGU6InVucmVjb2duaXplZF9rZXlzIixrZXlzOkgsaW5wdXQ6Ui52YWx1ZSxpbnN0Ok59KX0pfX1lbHNle2NvbnN0IGg9dy5vYmplY3Qocik7ZS5hZGRpdGlvbmFsUHJvcGVydGllcz09PSExP289aC5zdHJpY3QoKTphP289aC5jYXRjaGFsbChhKTpvPWgucGFzc3Rocm91Z2goKX1jb25zdCB1PWUucHJvcGVydHlOYW1lcyE9PXZvaWQgMCYmZS5wcm9wZXJ0eU5hbWVzIT09ITAsYz10eXBlb2YgZS5taW5Qcm9wZXJ0aWVzPT0ibnVtYmVyIj9lLm1pblByb3BlcnRpZXM6dm9pZCAwLGw9dHlwZW9mIGUubWF4UHJvcGVydGllcz09Im51bWJlciI/ZS5tYXhQcm9wZXJ0aWVzOnZvaWQgMDtpZih1fHxjIT09dm9pZCAwfHxsIT09dm9pZCAwKXtsZXQgaDtpZih1KXtjb25zdCBnPXR5cGVvZiBlLnByb3BlcnR5TmFtZXM9PSJvYmplY3QiJiZlLnByb3BlcnR5TmFtZXMudHlwZT09PXZvaWQgMD97dHlwZToic3RyaW5nIiwuLi5lLnByb3BlcnR5TmFtZXN9OmUucHJvcGVydHlOYW1lcztoPVgoZyx0KX1vPURnKG8se2tleVNjaGVtYTpoLG1pblByb3BlcnRpZXM6YyxtYXhQcm9wZXJ0aWVzOmx9KX1icmVha31jYXNlImFycmF5Ijp7Y29uc3Qgcj1lLnByZWZpeEl0ZW1zLHM9ZS5pdGVtcztpZihyJiZBcnJheS5pc0FycmF5KHIpKXtjb25zdCBpPXR5cGVvZiBlLm1pbkl0ZW1zPT0ibnVtYmVyIj9lLm1pbkl0ZW1zOjAsYT1yLm1hcChoPT5YKGgsdCkpLHU9WmMoYSxpKSxjPUFycmF5LmlzQXJyYXkocyk/dm9pZCAwOk9jKHMsdCksbD13LnR1cGxlKHUpO289Yz9sLnJlc3QoYyk6bCx0eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciImJihvPW8uY2hlY2sody5taW5MZW5ndGgoZS5taW5JdGVtcykpKSx0eXBlb2YgZS5tYXhJdGVtcz09Im51bWJlciImJihvPW8uY2hlY2sody5tYXhMZW5ndGgoZS5tYXhJdGVtcykpKX1lbHNlIGlmKEFycmF5LmlzQXJyYXkocykpe2NvbnN0IGk9dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiP2UubWluSXRlbXM6MCxhPXMubWFwKGg9PlgoaCx0KSksdT1aYyhhLGkpLGM9T2MoZS5hZGRpdGlvbmFsSXRlbXMsdCksbD13LnR1cGxlKHUpO289Yz9sLnJlc3QoYyk6bCx0eXBlb2YgZS5taW5JdGVtcz09Im51bWJlciImJihvPW8uY2hlY2sody5taW5MZW5ndGgoZS5taW5JdGVtcykpKSx0eXBlb2YgZS5tYXhJdGVtcz09Im51bWJlciImJihvPW8uY2hlY2sody5tYXhMZW5ndGgoZS5tYXhJdGVtcykpKX1lbHNlIGlmKHMhPT12b2lkIDApe2NvbnN0IGk9WChzLHQpO2xldCBhPXcuYXJyYXkoaSk7dHlwZW9mIGUubWluSXRlbXM9PSJudW1iZXIiJiYoYT1hLm1pbihlLm1pbkl0ZW1zKSksdHlwZW9mIGUubWF4SXRlbXM9PSJudW1iZXIiJiYoYT1hLm1heChlLm1heEl0ZW1zKSksbz1hfWVsc2Ugbz13LmFycmF5KHcuYW55KCkpOyhlLnVuaXF1ZUl0ZW1zPT09ITB8fGUuY29udGFpbnMhPT12b2lkIDApJiYobz1VZyhvLHt1bmlxdWVJdGVtczplLnVuaXF1ZUl0ZW1zPT09ITAsY29udGFpbnNTY2hlbWE6ZS5jb250YWlucyE9PXZvaWQgMD9YKGUuY29udGFpbnMsdCk6dm9pZCAwLG1pbkNvbnRhaW5zOnR5cGVvZiBlLm1pbkNvbnRhaW5zPT0ibnVtYmVyIj9lLm1pbkNvbnRhaW5zOnZvaWQgMCxtYXhDb250YWluczp0eXBlb2YgZS5tYXhDb250YWlucz09Im51bWJlciI/ZS5tYXhDb250YWluczp2b2lkIDB9KSk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHR5cGU6ICR7bn1gKX1yZXR1cm4gb31mdW5jdGlvbiBYKGUsdCl7aWYodHlwZW9mIGU9PSJib29sZWFuIilyZXR1cm4gZT93LmFueSgpOncubmV2ZXIoKTtsZXQgbj1XcChlLHQpO2NvbnN0IG89ZS50eXBlfHxlLmVudW0hPT12b2lkIDB8fGUuY29uc3QhPT12b2lkIDA7aWYoZS5hbnlPZiYmQXJyYXkuaXNBcnJheShlLmFueU9mKSl7Y29uc3QgYT1lLmFueU9mLm1hcChjPT5YKGMsdCkpLHU9dy51bmlvbihhKTtuPW8/dy5pbnRlcnNlY3Rpb24obix1KTp1fWlmKGUub25lT2YmJkFycmF5LmlzQXJyYXkoZS5vbmVPZikpe2NvbnN0IGE9ZS5vbmVPZi5tYXAoYz0+WChjLHQpKSx1PXcueG9yKGEpO249bz93LmludGVyc2VjdGlvbihuLHUpOnV9aWYoZS5hbGxPZiYmQXJyYXkuaXNBcnJheShlLmFsbE9mKSlpZihlLmFsbE9mLmxlbmd0aD09PTApbj1vP246dy5hbnkoKTtlbHNle2xldCBhPW8/bjpYKGUuYWxsT2ZbMF0sdCk7Y29uc3QgdT1vPzA6MTtmb3IobGV0IGM9dTtjPGUuYWxsT2YubGVuZ3RoO2MrKylhPXcuaW50ZXJzZWN0aW9uKGEsWChlLmFsbE9mW2NdLHQpKTtuPWF9ZS5udWxsYWJsZT09PSEwJiZ0LnZlcnNpb249PT0ib3BlbmFwaS0zLjAiJiYobj13Lm51bGxhYmxlKG4pKSxlLnJlYWRPbmx5PT09ITAmJihuPXcucmVhZG9ubHkobikpLGUuZGVmYXVsdCE9PXZvaWQgMCYmKG49bi5kZWZhdWx0KGUuZGVmYXVsdCkpO2NvbnN0IHI9e30scz1bIiRpZCIsImlkIiwiJGNvbW1lbnQiLCIkYW5jaG9yIiwiJHZvY2FidWxhcnkiLCIkZHluYW1pY1JlZiIsIiRkeW5hbWljQW5jaG9yIl07Zm9yKGNvbnN0IGEgb2YgcylhIGluIGUmJihyW2FdPWVbYV0pO2NvbnN0IGk9WyJjb250ZW50RW5jb2RpbmciLCJjb250ZW50TWVkaWFUeXBlIiwiY29udGVudFNjaGVtYSJdO2Zvcihjb25zdCBhIG9mIGkpYSBpbiBlJiYoclthXT1lW2FdKTtpZihlLnR5cGU9PT0ib2JqZWN0IiYmZS4kcmVmPT09dm9pZCAwKXtlLnByb3BlcnR5TmFtZXMhPT12b2lkIDAmJiFTdChlLnByb3BlcnR5TmFtZXMpJiYoci5wcm9wZXJ0eU5hbWVzPWUucHJvcGVydHlOYW1lcyk7Zm9yKGNvbnN0IGEgb2ZbIm1pblByb3BlcnRpZXMiLCJtYXhQcm9wZXJ0aWVzIl0pZVthXSE9PXZvaWQgMCYmKHJbYV09ZVthXSl9aWYoZS50eXBlPT09ImFycmF5IiYmZS4kcmVmPT09dm9pZCAwKXtlLmNvbnRhaW5zIT09dm9pZCAwJiYhU3QoZS5jb250YWlucykmJihyLmNvbnRhaW5zPWUuY29udGFpbnMpO2Zvcihjb25zdCBhIG9mWyJ1bmlxdWVJdGVtcyIsIm1pbkNvbnRhaW5zIiwibWF4Q29udGFpbnMiXSllW2FdIT09dm9pZCAwJiYoclthXT1lW2FdKX1mb3IoY29uc3QgYSBvZiBPYmplY3Qua2V5cyhlKSlBZy5oYXMoYSl8fFVlKHIsYSxlW2FdKTtyZXR1cm4gT2JqZWN0LmtleXMocikubGVuZ3RoPjAmJnQucmVnaXN0cnkuYWRkKG4sciksZS5kZXNjcmlwdGlvbiYmKG49bi5kZXNjcmliZShlLmRlc2NyaXB0aW9uKSksbn1mdW5jdGlvbiBHcChlLHQpe2lmKHR5cGVvZiBlPT0iYm9vbGVhbiIpcmV0dXJuIGU/dy5hbnkoKTp3Lm5ldmVyKCk7bGV0IG47dHJ5e249SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlKSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJmcm9tSlNPTlNjaGVtYSBpbnB1dCBpcyBub3QgdmFsaWQgSlNPTiAocG9zc2libHkgY3ljbGljKTsgdXNlICRkZWZzLyRyZWYgZm9yIHJlY3Vyc2l2ZSBzY2hlbWFzIil9Y29uc3Qgbz1OZyhuLHQ/LmRlZmF1bHRUYXJnZXQpLHI9bi4kZGVmc3x8bi5kZWZpbml0aW9uc3x8e30scz17dmVyc2lvbjpvLGRlZnM6cixyZWZzOm5ldyBNYXAscHJvY2Vzc2luZzpuZXcgU2V0LHJvb3RTY2hlbWE6bixyZWdpc3RyeTp0Py5yZWdpc3RyeT8/bGV9O3JldHVybiBYKG4scyl9ZnVuY3Rpb24gUXAoZSl7cmV0dXJuIHBpKGUse29iamVjdDp0PT50LnBhcnRpYWwoKSx1bmlvbjp0PT57Y29uc3Qgbj10Ll96b2QuZGVmO3JldHVybiBuLmRpc2NyaW1pbmF0b3I9PT12b2lkIDA/dDp4KG4ub3B0aW9ucyl9fSl9ZnVuY3Rpb24gRmcoZSx0KXtpZighdD8ubGVuZ3RoKXJldHVybiBlO2NvbnN0IG49ZS5fem9kLmRlZjtyZXR1cm4gVShlLFkobix7Y2hlY2tzOlsuLi5uLmNoZWNrcz8/W10sLi4udF19KSx7cGFyZW50OiEwfSl9ZnVuY3Rpb24gWXAoZSl7cmV0dXJuIEZnKGUub3V0LGUuY2hlY2tzKX1mdW5jdGlvbiBCZyhlKXtyZXR1cm4gZS5pbi5fem9kLnRyYWl0cy5oYXMoIiRab2RUcmFuc2Zvcm0iKT9ZcChlKTplLmlufWZ1bmN0aW9uIFhwKGUpe3JldHVybiBwaShlLHtwaXBlOnQ9PkJnKHQuX3pvZC5kZWYpLGRlZmF1bHQ6KHQsbik9Pm4/RCh0Ll96b2QuZGVmLmlubmVyVHlwZSk6dCxjYXRjaDoodCxuKT0+bj90Ll96b2QuZGVmLmlubmVyVHlwZTp0fSl9ZnVuY3Rpb24gZWYoZSl7cmV0dXJuIHBpKGUse3BpcGU6dD0+WXAodC5fem9kLmRlZikscHJlZmF1bHQ6KHQsbik9Pm4/dC5fem9kLmRlZi5pbm5lclR5cGU6dH0pfWZ1bmN0aW9uIFZnKGUpe3JldHVybiBucChydCxlKX1mdW5jdGlvbiBKZyhlKXtyZXR1cm4gYXAobHQsZSl9ZnVuY3Rpb24gS2coZSl7cmV0dXJuIGhwKGR0LGUpfWZ1bmN0aW9uIFdnKGUpe3JldHVybiBncChwdCxlKX1mdW5jdGlvbiBHZyhlKXtyZXR1cm4gUHAoeW4sZSl9Y29uc3QgdGY9T2JqZWN0LmZyZWV6ZShPYmplY3QuZGVmaW5lUHJvcGVydHkoe19fcHJvdG9fXzpudWxsLGJpZ2ludDpXZyxib29sZWFuOktnLGRhdGU6R2csbnVtYmVyOkpnLHN0cmluZzpWZ30sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxBYz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOlFyLCRpbnB1dDpacywkb3V0cHV0OlJzLElOVkFMSUQ6T3MsTkVWRVI6R3IsVGltZVByZWNpc2lvbjppaSxab2RBbnk6Wm8sWm9kQXJyYXk6Tm8sWm9kQmFzZTY0OmZuLFpvZEJhc2U2NFVSTDpobixab2RCaWdJbnQ6cHQsWm9kQmlnSW50Rm9ybWF0Ol9uLFpvZEJvb2xlYW46ZHQsWm9kQ0lEUnY0OmRuLFpvZENJRFJ2Njpwbixab2RDVUlEOm9uLFpvZENVSUQyOnJuLFpvZENhdGNoOnRyLFpvZENvZGVjOnZ0LFpvZENvbXBpbGVBc3luY0Vycm9yOkFzLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOk5zLFpvZENyZWRpdENhcmQ6UG8sWm9kQ3VzdG9tOmJ0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpaZSxab2REYXRlOnluLFpvZERlZmF1bHQ6V28sWm9kRGlzY3JpbWluYXRlZFVuaW9uOk1vLFpvZEUxNjQ6bW4sWm9kRW1haWw6WHQsWm9kRW1vamk6dG4sWm9kRW51bTpxZSxab2RFcnJvcjpGcCxab2RFeGFjdE9wdGlvbmFsOlNuLFpvZEZpbGU6Qm8sZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiBHbn0sWm9kRnVuY3Rpb246ZHIsWm9kR1VJRDplbixab2RJQkFOOnhvLFpvZElQdjQ6dW4sWm9kSVB2Njpsbixab2RJU09EYXRlOml0LFpvZElTT0RhdGVUaW1lOnN0LFpvZElTT0R1cmF0aW9uOmN0LFpvZElTT1RpbWU6YXQsWm9kSW5zdGFuY2VPZjptcixab2RJbnRlcnNlY3Rpb246RG8sWm9kSXNzdWVDb2RlOkJwLFpvZEpXVDpnbixab2RLU1VJRDpjbixab2RMYXp5OmNyLFpvZExpdGVyYWw6Rm8sWm9kTUFDOlRvLFpvZE1hcDpVbyxab2ROYU46b3IsWm9kTmFub0lEOm5uLFpvZE5ldmVyOk9vLFpvZE5vbk9wdGlvbmFsOiRuLFpvZE51bGw6Um8sWm9kTnVsbGFibGU6S28sWm9kTnVtYmVyOmx0LFpvZE51bWJlckZvcm1hdDpDZSxab2RPYmplY3Q6ZnQsWm9kT3B0aW9uYWw6Z3QsWm9kUGlwZTpfdCxab2RQcmVmYXVsdDpRbyxab2RQcmVwcm9jZXNzOnJyLFpvZFByb21pc2U6bHIsWm9kUmVhZG9ubHk6c3IsWm9kUmVhbEVycm9yOm9lLFpvZFJlY29yZDpEZSxab2RTZXQ6SG8sWm9kU3RyaW5nOnJ0LFpvZFN0cmluZ0Zvcm1hdDpBLFpvZFN1Y2Nlc3M6ZXIsWm9kU3ltYm9sOklvLFpvZFRlbXBsYXRlTGl0ZXJhbDphcixab2RUcmFuc2Zvcm06Vm8sWm9kVHVwbGU6cW8sWm9kVHlwZTpQLFpvZFVMSUQ6c24sWm9kVVJMOnV0LFpvZFVVSUQ6X2UsWm9kVW5kZWZpbmVkOkVvLFpvZFVuaW9uOmh0LFpvZFVua25vd246Q28sWm9kVm9pZDpBbyxab2RYSUQ6YW4sWm9kWG9yOmpvLF9ab2RTdHJpbmc6WXQsX2RlZmF1bHQ6R28sX2Z1bmN0aW9uOlllLGFueTpibixhcnJheTpTLGJhc2U2NDpWaSxiYXNlNjR1cmw6SmksYmlnaW50OmFhLGJvb2xlYW46TyxjYXRjaDpucixjaGVjazpJYSxjaWRydjQ6RmksY2lkcnY2OkJpLGNsb25lOlUsY29kZWM6emEsY29lcmNlOnRmLGNvbXBpbGU6anMsY29uZmlnOlYsY29yZTpMcCxjcmVkaXRDYXJkOldpLGN1aWQ6TmksY3VpZDI6amksY3VycmVuY3lDb2RlOnRhLGN1c3RvbTpwcixkYXRlOnBhLGRlY29kZTpiaSxkZWNvZGVBc3luYzp3aSxkZWVwUGFydGlhbDpRcCxkZXNjcmliZTpFYSxkaXNjcmltaW5hdGVkVW5pb246d24sZTE2NDpLaSxlbWFpbDpUaSxlbW9qaTpPaSxlbmNvZGU6dmksZW5jb2RlQXN5bmM6eWksZW5kc1dpdGg6RnQsZW51bTpXLGV4YWN0T3B0aW9uYWw6Sm8sZmlsZTp3YSxmbGF0dGVuRXJyb3I6Y28sZmxvYXQzMjpvYSxmbG9hdDY0OnJhLGZvcm1hdEVycm9yOnVvLGZyb21KU09OU2NoZW1hOkdwLGZ1bmN0aW9uOlllLGdldERpc2NyaW1pbmF0ZWRPcHRpb246JHMsZ2V0RXJyb3JNYXA6SnAsZ2xvYmFsUmVnaXN0cnk6bGUsZ3Q6JGUsZ3RlOmllLGd1aWQ6UGksaGFzaDpuYSxoZXg6ZWEsaG9zdG5hbWU6WGksaHR0cFVybDpDaSxpYmFuOkdpLGluY2x1ZGVzOlV0LGlucHV0OlhwLGluc3RhbmNlb2Y6WmEsaW50Onp0LGludDMyOnNhLGludDY0OmNhLGludGVyc2VjdGlvbjptdCxpbnZlcnRDb2RlYzpUYSxpcHY0OkxpLGlwdjY6SGksaXNvOkFhLGpzb246T2Esand0OlFpLGtleW9mOmZhLGtzdWlkOnFpLGxhenk6dXIsbGVuZ3RoOm50LGxpdGVyYWw6Zixsb2NhbGVzOkVzLGxvb3NlT2JqZWN0OkssbG9vc2VSZWNvcmQ6X2EsbG93ZXJjYXNlOnF0LGx0OlNlLGx0ZTpzZSxtYWM6VWksbWFwOnZhLG1heExlbmd0aDp0dCxtYXhTaXplOkhlLG1lbW9pemVyOl9vLG1ldGE6UmEsbWltZTpWdCxtaW5MZW5ndGg6RWUsbWluU2l6ZTp6ZSxtdWx0aXBsZU9mOmplLG5hbjokYSxuYW5vaWQ6QWksbmF0aXZlRW51bTp5YSxuZWdhdGl2ZTprbyxuZXZlcjpNZSxub25uZWdhdGl2ZTokbyxub25vcHRpb25hbDpYbyxub25wb3NpdGl2ZTpTbyxub3JtYWxpemU6SnQsbnVsbDp2bixudWxsYWJsZTpRZSxudWxsaXNoOmthLG51bWJlcjpULG9iamVjdDptLG9wdGlvbmFsOkQsb3V0cHV0OmVmLG92ZXJ3cml0ZTpiZSxwYXJzZTpoaSxwYXJzZUFzeW5jOm1pLHBhcnRpYWxSZWNvcmQ6Z2EscGlwZTpUdCxwb3NpdGl2ZTp3byxwcmVmYXVsdDpZbyxwcmVwcm9jZXNzOnpuLHByZXR0aWZ5RXJyb3I6WHIscHJvbWlzZTp4YSxwcm9wZXJ0aWVzOkJ0LHByb3BlcnR5OnpvLHJlYWRvbmx5OmlyLHJlY29yZDpFLHJlZmluZTpmcixyZWdleDpEdCxyZWdleGVzOm1vLHJlZ2lzdHJ5OnZvLHNhZmVEZWNvZGU6U2ksc2FmZURlY29kZUFzeW5jOnppLHNhZmVFbmNvZGU6a2ksc2FmZUVuY29kZUFzeW5jOiRpLHNhZmVQYXJzZTpnaSxzYWZlUGFyc2VBc3luYzpfaSxzZXQ6YmEsc2V0RXJyb3JNYXA6VnAsc2l6ZTpldCxzbHVnaWZ5OlF0LHN0YXJ0c1dpdGg6SHQsc3RyaWN0T2JqZWN0OmhhLHN0cmluZzpwLHN0cmluZ0Zvcm1hdDpZaSxzdHJpbmdib29sOkNhLHN1Y2Nlc3M6U2Esc3VwZXJSZWZpbmU6aHIsc3ltYm9sOmxhLHRlbXBsYXRlTGl0ZXJhbDpQYSx0b0pTT05TY2hlbWE6ZGksdG9Mb3dlckNhc2U6V3QsdG9VcHBlckNhc2U6R3QsdG9ab2Q6WG4sdHJhbnNmb3JtOmtuLHRyZWVpZnlFcnJvcjpZcix0cmltOkt0LHR1cGxlOkxvLHVpbnQzMjppYSx1aW50NjQ6dWEsdWxpZDpNaSx1bmRlZmluZWQ6R2UsdW5pb246eCx1bmtub3duOkMsdXBwZXJjYXNlOkx0LHVybDpaaSx1dGlsOldyLHV1aWQ6eGksdXVpZHY0OklpLHV1aWR2NjpFaSx1dWlkdjc6UmksdmFsaWRhdGU6cG8sdmFsaWRhdGVBc3luYzpmbyx2b2lkOmRhLHdpdGhQYXJzZXI6TXMseGlkOkRpLHhvcjptYX0sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pKSxRZz1PYmplY3QuZnJlZXplKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7X19wcm90b19fOm51bGwsJGJyYW5kOlFyLCRpbnB1dDpacywkb3V0cHV0OlJzLElOVkFMSUQ6T3MsTkVWRVI6R3IsVGltZVByZWNpc2lvbjppaSxab2RBbnk6Wm8sWm9kQXJyYXk6Tm8sWm9kQmFzZTY0OmZuLFpvZEJhc2U2NFVSTDpobixab2RCaWdJbnQ6cHQsWm9kQmlnSW50Rm9ybWF0Ol9uLFpvZEJvb2xlYW46ZHQsWm9kQ0lEUnY0OmRuLFpvZENJRFJ2Njpwbixab2RDVUlEOm9uLFpvZENVSUQyOnJuLFpvZENhdGNoOnRyLFpvZENvZGVjOnZ0LFpvZENvbXBpbGVBc3luY0Vycm9yOkFzLFpvZENvbXBpbGVVbnN1cHBvcnRlZEVycm9yOk5zLFpvZENyZWRpdENhcmQ6UG8sWm9kQ3VzdG9tOmJ0LFpvZEN1c3RvbVN0cmluZ0Zvcm1hdDpaZSxab2REYXRlOnluLFpvZERlZmF1bHQ6V28sWm9kRGlzY3JpbWluYXRlZFVuaW9uOk1vLFpvZEUxNjQ6bW4sWm9kRW1haWw6WHQsWm9kRW1vamk6dG4sWm9kRW51bTpxZSxab2RFcnJvcjpGcCxab2RFeGFjdE9wdGlvbmFsOlNuLFpvZEZpbGU6Qm8sZ2V0IFpvZEZpcnN0UGFydHlUeXBlS2luZCgpe3JldHVybiBHbn0sWm9kRnVuY3Rpb246ZHIsWm9kR1VJRDplbixab2RJQkFOOnhvLFpvZElQdjQ6dW4sWm9kSVB2Njpsbixab2RJU09EYXRlOml0LFpvZElTT0RhdGVUaW1lOnN0LFpvZElTT0R1cmF0aW9uOmN0LFpvZElTT1RpbWU6YXQsWm9kSW5zdGFuY2VPZjptcixab2RJbnRlcnNlY3Rpb246RG8sWm9kSXNzdWVDb2RlOkJwLFpvZEpXVDpnbixab2RLU1VJRDpjbixab2RMYXp5OmNyLFpvZExpdGVyYWw6Rm8sWm9kTUFDOlRvLFpvZE1hcDpVbyxab2ROYU46b3IsWm9kTmFub0lEOm5uLFpvZE5ldmVyOk9vLFpvZE5vbk9wdGlvbmFsOiRuLFpvZE51bGw6Um8sWm9kTnVsbGFibGU6S28sWm9kTnVtYmVyOmx0LFpvZE51bWJlckZvcm1hdDpDZSxab2RPYmplY3Q6ZnQsWm9kT3B0aW9uYWw6Z3QsWm9kUGlwZTpfdCxab2RQcmVmYXVsdDpRbyxab2RQcmVwcm9jZXNzOnJyLFpvZFByb21pc2U6bHIsWm9kUmVhZG9ubHk6c3IsWm9kUmVhbEVycm9yOm9lLFpvZFJlY29yZDpEZSxab2RTZXQ6SG8sWm9kU3RyaW5nOnJ0LFpvZFN0cmluZ0Zvcm1hdDpBLFpvZFN1Y2Nlc3M6ZXIsWm9kU3ltYm9sOklvLFpvZFRlbXBsYXRlTGl0ZXJhbDphcixab2RUcmFuc2Zvcm06Vm8sWm9kVHVwbGU6cW8sWm9kVHlwZTpQLFpvZFVMSUQ6c24sWm9kVVJMOnV0LFpvZFVVSUQ6X2UsWm9kVW5kZWZpbmVkOkVvLFpvZFVuaW9uOmh0LFpvZFVua25vd246Q28sWm9kVm9pZDpBbyxab2RYSUQ6YW4sWm9kWG9yOmpvLF9ab2RTdHJpbmc6WXQsX2RlZmF1bHQ6R28sX2Z1bmN0aW9uOlllLGFueTpibixhcnJheTpTLGJhc2U2NDpWaSxiYXNlNjR1cmw6SmksYmlnaW50OmFhLGJvb2xlYW46TyxjYXRjaDpucixjaGVjazpJYSxjaWRydjQ6RmksY2lkcnY2OkJpLGNsb25lOlUsY29kZWM6emEsY29lcmNlOnRmLGNvbXBpbGU6anMsY29uZmlnOlYsY29yZTpMcCxjcmVkaXRDYXJkOldpLGN1aWQ6TmksY3VpZDI6amksY3VycmVuY3lDb2RlOnRhLGN1c3RvbTpwcixkYXRlOnBhLGRlY29kZTpiaSxkZWNvZGVBc3luYzp3aSxkZWVwUGFydGlhbDpRcCxkZWZhdWx0OkFjLGRlc2NyaWJlOkVhLGRpc2NyaW1pbmF0ZWRVbmlvbjp3bixlMTY0OktpLGVtYWlsOlRpLGVtb2ppOk9pLGVuY29kZTp2aSxlbmNvZGVBc3luYzp5aSxlbmRzV2l0aDpGdCxlbnVtOlcsZXhhY3RPcHRpb25hbDpKbyxmaWxlOndhLGZsYXR0ZW5FcnJvcjpjbyxmbG9hdDMyOm9hLGZsb2F0NjQ6cmEsZm9ybWF0RXJyb3I6dW8sZnJvbUpTT05TY2hlbWE6R3AsZnVuY3Rpb246WWUsZ2V0RGlzY3JpbWluYXRlZE9wdGlvbjokcyxnZXRFcnJvck1hcDpKcCxnbG9iYWxSZWdpc3RyeTpsZSxndDokZSxndGU6aWUsZ3VpZDpQaSxoYXNoOm5hLGhleDplYSxob3N0bmFtZTpYaSxodHRwVXJsOkNpLGliYW46R2ksaW5jbHVkZXM6VXQsaW5wdXQ6WHAsaW5zdGFuY2VvZjpaYSxpbnQ6enQsaW50MzI6c2EsaW50NjQ6Y2EsaW50ZXJzZWN0aW9uOm10LGludmVydENvZGVjOlRhLGlwdjQ6TGksaXB2NjpIaSxpc286QWEsanNvbjpPYSxqd3Q6UWksa2V5b2Y6ZmEsa3N1aWQ6cWksbGF6eTp1cixsZW5ndGg6bnQsbGl0ZXJhbDpmLGxvY2FsZXM6RXMsbG9vc2VPYmplY3Q6Syxsb29zZVJlY29yZDpfYSxsb3dlcmNhc2U6cXQsbHQ6U2UsbHRlOnNlLG1hYzpVaSxtYXA6dmEsbWF4TGVuZ3RoOnR0LG1heFNpemU6SGUsbWVtb2l6ZXI6X28sbWV0YTpSYSxtaW1lOlZ0LG1pbkxlbmd0aDpFZSxtaW5TaXplOnplLG11bHRpcGxlT2Y6amUsbmFuOiRhLG5hbm9pZDpBaSxuYXRpdmVFbnVtOnlhLG5lZ2F0aXZlOmtvLG5ldmVyOk1lLG5vbm5lZ2F0aXZlOiRvLG5vbm9wdGlvbmFsOlhvLG5vbnBvc2l0aXZlOlNvLG5vcm1hbGl6ZTpKdCxudWxsOnZuLG51bGxhYmxlOlFlLG51bGxpc2g6a2EsbnVtYmVyOlQsb2JqZWN0Om0sb3B0aW9uYWw6RCxvdXRwdXQ6ZWYsb3ZlcndyaXRlOmJlLHBhcnNlOmhpLHBhcnNlQXN5bmM6bWkscGFydGlhbFJlY29yZDpnYSxwaXBlOlR0LHBvc2l0aXZlOndvLHByZWZhdWx0OllvLHByZXByb2Nlc3M6em4scHJldHRpZnlFcnJvcjpYcixwcm9taXNlOnhhLHByb3BlcnRpZXM6QnQscHJvcGVydHk6em8scmVhZG9ubHk6aXIscmVjb3JkOkUscmVmaW5lOmZyLHJlZ2V4OkR0LHJlZ2V4ZXM6bW8scmVnaXN0cnk6dm8sc2FmZURlY29kZTpTaSxzYWZlRGVjb2RlQXN5bmM6emksc2FmZUVuY29kZTpraSxzYWZlRW5jb2RlQXN5bmM6JGksc2FmZVBhcnNlOmdpLHNhZmVQYXJzZUFzeW5jOl9pLHNldDpiYSxzZXRFcnJvck1hcDpWcCxzaXplOmV0LHNsdWdpZnk6UXQsc3RhcnRzV2l0aDpIdCxzdHJpY3RPYmplY3Q6aGEsc3RyaW5nOnAsc3RyaW5nRm9ybWF0OllpLHN0cmluZ2Jvb2w6Q2Esc3VjY2VzczpTYSxzdXBlclJlZmluZTpocixzeW1ib2w6bGEsdGVtcGxhdGVMaXRlcmFsOlBhLHRvSlNPTlNjaGVtYTpkaSx0b0xvd2VyQ2FzZTpXdCx0b1VwcGVyQ2FzZTpHdCx0b1pvZDpYbix0cmFuc2Zvcm06a24sdHJlZWlmeUVycm9yOllyLHRyaW06S3QsdHVwbGU6TG8sdWludDMyOmlhLHVpbnQ2NDp1YSx1bGlkOk1pLHVuZGVmaW5lZDpHZSx1bmlvbjp4LHVua25vd246Qyx1cHBlcmNhc2U6THQsdXJsOlppLHV0aWw6V3IsdXVpZDp4aSx1dWlkdjQ6SWksdXVpZHY2OkVpLHV1aWR2NzpSaSx2YWxpZGF0ZTpwbyx2YWxpZGF0ZUFzeW5jOmZvLHZvaWQ6ZGEsd2l0aFBhcnNlcjpNcyx4aWQ6RGkseG9yOm1hLHo6QWN9LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSksQWU9ImlvLm1vZGVsY29udGV4dHByb3RvY29sL3JlbGF0ZWQtdGFzayIsZ3I9IjIuMCIsQj1wcihlPT5lIT09bnVsbCYmKHR5cGVvZiBlPT0ib2JqZWN0Inx8dHlwZW9mIGU9PSJmdW5jdGlvbiIpKSxuZj14KFtwKCksVCgpLmludCgpXSksb2Y9cCgpO0soe3R0bDpUKCkub3B0aW9uYWwoKSxwb2xsSW50ZXJ2YWw6VCgpLm9wdGlvbmFsKCl9KTtjb25zdCBZZz1tKHt0dGw6VCgpLm9wdGlvbmFsKCl9KSxYZz1tKHt0YXNrSWQ6cCgpfSksTmE9Syh7cHJvZ3Jlc3NUb2tlbjpuZi5vcHRpb25hbCgpLFtBZV06WGcub3B0aW9uYWwoKX0pLGNlPW0oe19tZXRhOk5hLm9wdGlvbmFsKCl9KSxUbj1jZS5leHRlbmQoe3Rhc2s6WWcub3B0aW9uYWwoKX0pLGVfPWU9PlRuLnNhZmVQYXJzZShlKS5zdWNjZXNzLEc9bSh7bWV0aG9kOnAoKSxwYXJhbXM6Y2UubG9vc2UoKS5vcHRpb25hbCgpfSksZmU9bSh7X21ldGE6TmEub3B0aW9uYWwoKX0pLGhlPW0oe21ldGhvZDpwKCkscGFyYW1zOmZlLmxvb3NlKCkub3B0aW9uYWwoKX0pLFE9Syh7X21ldGE6TmEub3B0aW9uYWwoKX0pLFBuPXgoW3AoKSxUKCkuaW50KCldKSxyZj1tKHtqc29ucnBjOmYoZ3IpLGlkOlBuLC4uLkcuc2hhcGV9KS5zdHJpY3QoKSxOYz1lPT5yZi5zYWZlUGFyc2UoZSkuc3VjY2VzcyxzZj1tKHtqc29ucnBjOmYoZ3IpLC4uLmhlLnNoYXBlfSkuc3RyaWN0KCksdF89ZT0+c2Yuc2FmZVBhcnNlKGUpLnN1Y2Nlc3MsamE9bSh7anNvbnJwYzpmKGdyKSxpZDpQbixyZXN1bHQ6UX0pLnN0cmljdCgpLExuPWU9PmphLnNhZmVQYXJzZShlKS5zdWNjZXNzO3ZhciBqOyhmdW5jdGlvbihlKXtlW2UuQ29ubmVjdGlvbkNsb3NlZD0tMzJlM109IkNvbm5lY3Rpb25DbG9zZWQiLGVbZS5SZXF1ZXN0VGltZW91dD0tMzIwMDFdPSJSZXF1ZXN0VGltZW91dCIsZVtlLlBhcnNlRXJyb3I9LTMyNzAwXT0iUGFyc2VFcnJvciIsZVtlLkludmFsaWRSZXF1ZXN0PS0zMjYwMF09IkludmFsaWRSZXF1ZXN0IixlW2UuTWV0aG9kTm90Rm91bmQ9LTMyNjAxXT0iTWV0aG9kTm90Rm91bmQiLGVbZS5JbnZhbGlkUGFyYW1zPS0zMjYwMl09IkludmFsaWRQYXJhbXMiLGVbZS5JbnRlcm5hbEVycm9yPS0zMjYwM109IkludGVybmFsRXJyb3IiLGVbZS5VcmxFbGljaXRhdGlvblJlcXVpcmVkPS0zMjA0Ml09IlVybEVsaWNpdGF0aW9uUmVxdWlyZWQifSkoanx8KGo9e30pKTtjb25zdCBNYT1tKHtqc29ucnBjOmYoZ3IpLGlkOlBuLm9wdGlvbmFsKCksZXJyb3I6bSh7Y29kZTpUKCkuaW50KCksbWVzc2FnZTpwKCksZGF0YTpDKCkub3B0aW9uYWwoKX0pfSkuc3RyaWN0KCksbl89ZT0+TWEuc2FmZVBhcnNlKGUpLnN1Y2Nlc3Msb189eChbcmYsc2YsamEsTWFdKTt4KFtqYSxNYV0pO2NvbnN0IERhPVEuc3RyaWN0KCkscl89ZmUuZXh0ZW5kKHtyZXF1ZXN0SWQ6UG4ub3B0aW9uYWwoKSxyZWFzb246cCgpLm9wdGlvbmFsKCl9KSxxYT1oZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL2NhbmNlbGxlZCIpLHBhcmFtczpyX30pLHNfPW0oe3NyYzpwKCksbWltZVR5cGU6cCgpLm9wdGlvbmFsKCksc2l6ZXM6UyhwKCkpLm9wdGlvbmFsKCksdGhlbWU6VyhbImxpZ2h0IiwiZGFyayJdKS5vcHRpb25hbCgpfSkseG49bSh7aWNvbnM6UyhzXykub3B0aW9uYWwoKX0pLFhlPW0oe25hbWU6cCgpLHRpdGxlOnAoKS5vcHRpb25hbCgpfSksX3I9WGUuZXh0ZW5kKHsuLi5YZS5zaGFwZSwuLi54bi5zaGFwZSx2ZXJzaW9uOnAoKSx3ZWJzaXRlVXJsOnAoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOnAoKS5vcHRpb25hbCgpfSksaV89bXQobSh7YXBwbHlEZWZhdWx0czpPKCkub3B0aW9uYWwoKX0pLEUocCgpLEMoKSkpLGFfPXpuKGU9PmUmJnR5cGVvZiBlPT0ib2JqZWN0IiYmIUFycmF5LmlzQXJyYXkoZSkmJk9iamVjdC5rZXlzKGUpLmxlbmd0aD09PTA/e2Zvcm06e319OmUsbXQobSh7Zm9ybTppXy5vcHRpb25hbCgpLHVybDpCLm9wdGlvbmFsKCl9KSxFKHAoKSxDKCkpLm9wdGlvbmFsKCkpKSxjXz1LKHtsaXN0OkIub3B0aW9uYWwoKSxjYW5jZWw6Qi5vcHRpb25hbCgpLHJlcXVlc3RzOksoe3NhbXBsaW5nOksoe2NyZWF0ZU1lc3NhZ2U6Qi5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSxlbGljaXRhdGlvbjpLKHtjcmVhdGU6Qi5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSx1Xz1LKHtsaXN0OkIub3B0aW9uYWwoKSxjYW5jZWw6Qi5vcHRpb25hbCgpLHJlcXVlc3RzOksoe3Rvb2xzOksoe2NhbGw6Qi5vcHRpb25hbCgpfSkub3B0aW9uYWwoKX0pLm9wdGlvbmFsKCl9KSxsXz1tKHtleHBlcmltZW50YWw6RShwKCksQikub3B0aW9uYWwoKSxzYW1wbGluZzptKHtjb250ZXh0OkIub3B0aW9uYWwoKSx0b29sczpCLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLGVsaWNpdGF0aW9uOmFfLm9wdGlvbmFsKCkscm9vdHM6bSh7bGlzdENoYW5nZWQ6TygpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRhc2tzOmNfLm9wdGlvbmFsKCksZXh0ZW5zaW9uczpFKHAoKSxCKS5vcHRpb25hbCgpfSksZF89Y2UuZXh0ZW5kKHtwcm90b2NvbFZlcnNpb246cCgpLGNhcGFiaWxpdGllczpsXyxjbGllbnRJbmZvOl9yfSkscF89Ry5leHRlbmQoe21ldGhvZDpmKCJpbml0aWFsaXplIikscGFyYW1zOmRffSksZl89bSh7ZXhwZXJpbWVudGFsOkUocCgpLEIpLm9wdGlvbmFsKCksbG9nZ2luZzpCLm9wdGlvbmFsKCksY29tcGxldGlvbnM6Qi5vcHRpb25hbCgpLHByb21wdHM6bSh7bGlzdENoYW5nZWQ6TygpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHJlc291cmNlczptKHtzdWJzY3JpYmU6TygpLm9wdGlvbmFsKCksbGlzdENoYW5nZWQ6TygpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpLHRvb2xzOm0oe2xpc3RDaGFuZ2VkOk8oKS5vcHRpb25hbCgpfSkub3B0aW9uYWwoKSx0YXNrczp1Xy5vcHRpb25hbCgpLGV4dGVuc2lvbnM6RShwKCksQikub3B0aW9uYWwoKX0pLGhfPVEuZXh0ZW5kKHtwcm90b2NvbFZlcnNpb246cCgpLGNhcGFiaWxpdGllczpmXyxzZXJ2ZXJJbmZvOl9yLGluc3RydWN0aW9uczpwKCkub3B0aW9uYWwoKX0pLG1fPWhlLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQiKSxwYXJhbXM6ZmUub3B0aW9uYWwoKX0pLHZyPUcuZXh0ZW5kKHttZXRob2Q6ZigicGluZyIpLHBhcmFtczpjZS5vcHRpb25hbCgpfSksZ189bSh7cHJvZ3Jlc3M6VCgpLHRvdGFsOkQoVCgpKSxtZXNzYWdlOkQocCgpKX0pLF9fPW0oey4uLmZlLnNoYXBlLC4uLmdfLnNoYXBlLHByb2dyZXNzVG9rZW46bmZ9KSxMYT1oZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Byb2dyZXNzIikscGFyYW1zOl9ffSksdl89Y2UuZXh0ZW5kKHtjdXJzb3I6b2Yub3B0aW9uYWwoKX0pLEluPUcuZXh0ZW5kKHtwYXJhbXM6dl8ub3B0aW9uYWwoKX0pLEVuPVEuZXh0ZW5kKHtuZXh0Q3Vyc29yOm9mLm9wdGlvbmFsKCl9KSxiXz1XKFsid29ya2luZyIsImlucHV0X3JlcXVpcmVkIiwiY29tcGxldGVkIiwiZmFpbGVkIiwiY2FuY2VsbGVkIl0pLFJuPW0oe3Rhc2tJZDpwKCksc3RhdHVzOmJfLHR0bDp4KFtUKCksdm4oKV0pLGNyZWF0ZWRBdDpwKCksbGFzdFVwZGF0ZWRBdDpwKCkscG9sbEludGVydmFsOkQoVCgpKSxzdGF0dXNNZXNzYWdlOkQocCgpKX0pLFVhPVEuZXh0ZW5kKHt0YXNrOlJufSkseV89ZmUubWVyZ2UoUm4pLFFuPWhlLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIikscGFyYW1zOnlffSksSGE9Ry5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9nZXQiKSxwYXJhbXM6Y2UuZXh0ZW5kKHt0YXNrSWQ6cCgpfSl9KSxGYT1RLm1lcmdlKFJuKSxCYT1HLmV4dGVuZCh7bWV0aG9kOmYoInRhc2tzL3Jlc3VsdCIpLHBhcmFtczpjZS5leHRlbmQoe3Rhc2tJZDpwKCl9KX0pO1EubG9vc2UoKTtjb25zdCBWYT1Jbi5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9saXN0Iil9KSxKYT1Fbi5leHRlbmQoe3Rhc2tzOlMoUm4pfSksS2E9Ry5leHRlbmQoe21ldGhvZDpmKCJ0YXNrcy9jYW5jZWwiKSxwYXJhbXM6Y2UuZXh0ZW5kKHt0YXNrSWQ6cCgpfSl9KSx3Xz1RLm1lcmdlKFJuKSxhZj1tKHt1cmk6cCgpLG1pbWVUeXBlOkQocCgpKSxfbWV0YTpFKHAoKSxDKCkpLm9wdGlvbmFsKCl9KSxjZj1hZi5leHRlbmQoe3RleHQ6cCgpfSksV2E9cCgpLnJlZmluZShlPT57dHJ5e3JldHVybiBhdG9iKGUpLCEwfWNhdGNoe3JldHVybiExfX0se21lc3NhZ2U6IkludmFsaWQgQmFzZTY0IHN0cmluZyJ9KSx1Zj1hZi5leHRlbmQoe2Jsb2I6V2F9KSxabj1XKFsidXNlciIsImFzc2lzdGFudCJdKSx5dD1tKHthdWRpZW5jZTpTKFpuKS5vcHRpb25hbCgpLHByaW9yaXR5OlQoKS5taW4oMCkubWF4KDEpLm9wdGlvbmFsKCksbGFzdE1vZGlmaWVkOktwKHtvZmZzZXQ6ITB9KS5vcHRpb25hbCgpfSksbGY9bSh7Li4uWGUuc2hhcGUsLi4ueG4uc2hhcGUsdXJpOnAoKSxkZXNjcmlwdGlvbjpEKHAoKSksbWltZVR5cGU6RChwKCkpLHNpemU6RChUKCkpLGFubm90YXRpb25zOnl0Lm9wdGlvbmFsKCksX21ldGE6RChLKHt9KSl9KSxrXz1tKHsuLi5YZS5zaGFwZSwuLi54bi5zaGFwZSx1cmlUZW1wbGF0ZTpwKCksZGVzY3JpcHRpb246RChwKCkpLG1pbWVUeXBlOkQocCgpKSxhbm5vdGF0aW9uczp5dC5vcHRpb25hbCgpLF9tZXRhOkQoSyh7fSkpfSksU189SW4uZXh0ZW5kKHttZXRob2Q6ZigicmVzb3VyY2VzL2xpc3QiKX0pLGRmPUVuLmV4dGVuZCh7cmVzb3VyY2VzOlMobGYpfSksJF89SW4uZXh0ZW5kKHttZXRob2Q6ZigicmVzb3VyY2VzL3RlbXBsYXRlcy9saXN0Iil9KSx6Xz1Fbi5leHRlbmQoe3Jlc291cmNlVGVtcGxhdGVzOlMoa18pfSksR2E9Y2UuZXh0ZW5kKHt1cmk6cCgpfSksVF89R2EsUF89Ry5leHRlbmQoe21ldGhvZDpmKCJyZXNvdXJjZXMvcmVhZCIpLHBhcmFtczpUX30pLHBmPVEuZXh0ZW5kKHtjb250ZW50czpTKHgoW2NmLHVmXSkpfSkseF89aGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9yZXNvdXJjZXMvbGlzdF9jaGFuZ2VkIikscGFyYW1zOmZlLm9wdGlvbmFsKCl9KSxJXz1HYSxFXz1HLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy9zdWJzY3JpYmUiKSxwYXJhbXM6SV99KSxSXz1HYSxaXz1HLmV4dGVuZCh7bWV0aG9kOmYoInJlc291cmNlcy91bnN1YnNjcmliZSIpLHBhcmFtczpSX30pLENfPWZlLmV4dGVuZCh7dXJpOnAoKX0pLE9fPWhlLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvcmVzb3VyY2VzL3VwZGF0ZWQiKSxwYXJhbXM6Q199KSxBXz1tKHtuYW1lOnAoKSxkZXNjcmlwdGlvbjpEKHAoKSkscmVxdWlyZWQ6RChPKCkpfSksTl89bSh7Li4uWGUuc2hhcGUsLi4ueG4uc2hhcGUsZGVzY3JpcHRpb246RChwKCkpLGFyZ3VtZW50czpEKFMoQV8pKSxfbWV0YTpEKEsoe30pKX0pLGpfPUluLmV4dGVuZCh7bWV0aG9kOmYoInByb21wdHMvbGlzdCIpfSksTV89RW4uZXh0ZW5kKHtwcm9tcHRzOlMoTl8pfSksRF89Y2UuZXh0ZW5kKHtuYW1lOnAoKSxhcmd1bWVudHM6RShwKCkscCgpKS5vcHRpb25hbCgpfSkscV89Ry5leHRlbmQoe21ldGhvZDpmKCJwcm9tcHRzL2dldCIpLHBhcmFtczpEX30pLFFhPW0oe3R5cGU6ZigidGV4dCIpLHRleHQ6cCgpLGFubm90YXRpb25zOnl0Lm9wdGlvbmFsKCksX21ldGE6RShwKCksQygpKS5vcHRpb25hbCgpfSksWWE9bSh7dHlwZTpmKCJpbWFnZSIpLGRhdGE6V2EsbWltZVR5cGU6cCgpLGFubm90YXRpb25zOnl0Lm9wdGlvbmFsKCksX21ldGE6RShwKCksQygpKS5vcHRpb25hbCgpfSksWGE9bSh7dHlwZTpmKCJhdWRpbyIpLGRhdGE6V2EsbWltZVR5cGU6cCgpLGFubm90YXRpb25zOnl0Lm9wdGlvbmFsKCksX21ldGE6RShwKCksQygpKS5vcHRpb25hbCgpfSksTF89bSh7dHlwZTpmKCJ0b29sX3VzZSIpLG5hbWU6cCgpLGlkOnAoKSxpbnB1dDpFKHAoKSxDKCkpLF9tZXRhOkUocCgpLEMoKSkub3B0aW9uYWwoKX0pLGZmPW0oe3R5cGU6ZigicmVzb3VyY2UiKSxyZXNvdXJjZTp4KFtjZix1Zl0pLGFubm90YXRpb25zOnl0Lm9wdGlvbmFsKCksX21ldGE6RShwKCksQygpKS5vcHRpb25hbCgpfSksaGY9bGYuZXh0ZW5kKHt0eXBlOmYoInJlc291cmNlX2xpbmsiKX0pLENuPXgoW1FhLFlhLFhhLGhmLGZmXSksVV89bSh7cm9sZTpabixjb250ZW50OkNufSksSF89US5leHRlbmQoe2Rlc2NyaXB0aW9uOnAoKS5vcHRpb25hbCgpLG1lc3NhZ2VzOlMoVV8pfSksRl89aGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy9wcm9tcHRzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczpmZS5vcHRpb25hbCgpfSksQl89bSh7dGl0bGU6cCgpLm9wdGlvbmFsKCkscmVhZE9ubHlIaW50Ok8oKS5vcHRpb25hbCgpLGRlc3RydWN0aXZlSGludDpPKCkub3B0aW9uYWwoKSxpZGVtcG90ZW50SGludDpPKCkub3B0aW9uYWwoKSxvcGVuV29ybGRIaW50Ok8oKS5vcHRpb25hbCgpfSksVl89bSh7dGFza1N1cHBvcnQ6VyhbInJlcXVpcmVkIiwib3B0aW9uYWwiLCJmb3JiaWRkZW4iXSkub3B0aW9uYWwoKX0pLGVjPW0oey4uLlhlLnNoYXBlLC4uLnhuLnNoYXBlLGRlc2NyaXB0aW9uOnAoKS5vcHRpb25hbCgpLGlucHV0U2NoZW1hOm0oe3R5cGU6Zigib2JqZWN0IikscHJvcGVydGllczpFKHAoKSxCKS5vcHRpb25hbCgpLHJlcXVpcmVkOlMocCgpKS5vcHRpb25hbCgpfSkuY2F0Y2hhbGwoQygpKSxvdXRwdXRTY2hlbWE6bSh7dHlwZTpmKCJvYmplY3QiKSxwcm9wZXJ0aWVzOkUocCgpLEIpLm9wdGlvbmFsKCkscmVxdWlyZWQ6UyhwKCkpLm9wdGlvbmFsKCl9KS5jYXRjaGFsbChDKCkpLm9wdGlvbmFsKCksYW5ub3RhdGlvbnM6Ql8ub3B0aW9uYWwoKSxleGVjdXRpb246Vl8ub3B0aW9uYWwoKSxfbWV0YTpFKHAoKSxDKCkpLm9wdGlvbmFsKCl9KSxtZj1Jbi5leHRlbmQoe21ldGhvZDpmKCJ0b29scy9saXN0Iil9KSxKXz1Fbi5leHRlbmQoe3Rvb2xzOlMoZWMpfSksYnI9US5leHRlbmQoe2NvbnRlbnQ6UyhDbikuZGVmYXVsdChbXSksc3RydWN0dXJlZENvbnRlbnQ6RShwKCksQygpKS5vcHRpb25hbCgpLGlzRXJyb3I6TygpLm9wdGlvbmFsKCl9KTtici5vcihRLmV4dGVuZCh7dG9vbFJlc3VsdDpDKCl9KSk7Y29uc3QgS189VG4uZXh0ZW5kKHtuYW1lOnAoKSxhcmd1bWVudHM6RShwKCksQygpKS5vcHRpb25hbCgpfSksZ2Y9Ry5leHRlbmQoe21ldGhvZDpmKCJ0b29scy9jYWxsIikscGFyYW1zOktffSksV189aGUuZXh0ZW5kKHttZXRob2Q6Zigibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiKSxwYXJhbXM6ZmUub3B0aW9uYWwoKX0pO20oe2F1dG9SZWZyZXNoOk8oKS5kZWZhdWx0KCEwKSxkZWJvdW5jZU1zOlQoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLmRlZmF1bHQoMzAwKX0pO2NvbnN0IF9mPVcoWyJkZWJ1ZyIsImluZm8iLCJub3RpY2UiLCJ3YXJuaW5nIiwiZXJyb3IiLCJjcml0aWNhbCIsImFsZXJ0IiwiZW1lcmdlbmN5Il0pLEdfPWNlLmV4dGVuZCh7bGV2ZWw6X2Z9KSxRXz1HLmV4dGVuZCh7bWV0aG9kOmYoImxvZ2dpbmcvc2V0TGV2ZWwiKSxwYXJhbXM6R199KSxZXz1mZS5leHRlbmQoe2xldmVsOl9mLGxvZ2dlcjpwKCkub3B0aW9uYWwoKSxkYXRhOkMoKX0pLFhfPWhlLmV4dGVuZCh7bWV0aG9kOmYoIm5vdGlmaWNhdGlvbnMvbWVzc2FnZSIpLHBhcmFtczpZX30pLGV2PW0oe25hbWU6cCgpLm9wdGlvbmFsKCl9KSx0dj1tKHtoaW50czpTKGV2KS5vcHRpb25hbCgpLGNvc3RQcmlvcml0eTpUKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpLHNwZWVkUHJpb3JpdHk6VCgpLm1pbigwKS5tYXgoMSkub3B0aW9uYWwoKSxpbnRlbGxpZ2VuY2VQcmlvcml0eTpUKCkubWluKDApLm1heCgxKS5vcHRpb25hbCgpfSksbnY9bSh7bW9kZTpXKFsiYXV0byIsInJlcXVpcmVkIiwibm9uZSJdKS5vcHRpb25hbCgpfSksb3Y9bSh7dHlwZTpmKCJ0b29sX3Jlc3VsdCIpLHRvb2xVc2VJZDpwKCkuZGVzY3JpYmUoIlRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdG9vbCBjYWxsLiIpLGNvbnRlbnQ6UyhDbikuZGVmYXVsdChbXSksc3RydWN0dXJlZENvbnRlbnQ6bSh7fSkubG9vc2UoKS5vcHRpb25hbCgpLGlzRXJyb3I6TygpLm9wdGlvbmFsKCksX21ldGE6RShwKCksQygpKS5vcHRpb25hbCgpfSkscnY9d24oInR5cGUiLFtRYSxZYSxYYV0pLFluPXduKCJ0eXBlIixbUWEsWWEsWGEsTF8sb3ZdKSxzdj1tKHtyb2xlOlpuLGNvbnRlbnQ6eChbWW4sUyhZbildKSxfbWV0YTpFKHAoKSxDKCkpLm9wdGlvbmFsKCl9KSxpdj1Ubi5leHRlbmQoe21lc3NhZ2VzOlMoc3YpLG1vZGVsUHJlZmVyZW5jZXM6dHYub3B0aW9uYWwoKSxzeXN0ZW1Qcm9tcHQ6cCgpLm9wdGlvbmFsKCksaW5jbHVkZUNvbnRleHQ6VyhbIm5vbmUiLCJ0aGlzU2VydmVyIiwiYWxsU2VydmVycyJdKS5vcHRpb25hbCgpLHRlbXBlcmF0dXJlOlQoKS5vcHRpb25hbCgpLG1heFRva2VuczpUKCkuaW50KCksc3RvcFNlcXVlbmNlczpTKHAoKSkub3B0aW9uYWwoKSxtZXRhZGF0YTpCLm9wdGlvbmFsKCksdG9vbHM6UyhlYykub3B0aW9uYWwoKSx0b29sQ2hvaWNlOm52Lm9wdGlvbmFsKCl9KSxhdj1HLmV4dGVuZCh7bWV0aG9kOmYoInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiKSxwYXJhbXM6aXZ9KSx2Zj1RLmV4dGVuZCh7bW9kZWw6cCgpLHN0b3BSZWFzb246RChXKFsiZW5kVHVybiIsInN0b3BTZXF1ZW5jZSIsIm1heFRva2VucyJdKS5vcihwKCkpKSxyb2xlOlpuLGNvbnRlbnQ6cnZ9KSxiZj1RLmV4dGVuZCh7bW9kZWw6cCgpLHN0b3BSZWFzb246RChXKFsiZW5kVHVybiIsInN0b3BTZXF1ZW5jZSIsIm1heFRva2VucyIsInRvb2xVc2UiXSkub3IocCgpKSkscm9sZTpabixjb250ZW50OngoW1luLFMoWW4pXSl9KSxjdj1tKHt0eXBlOmYoImJvb2xlYW4iKSx0aXRsZTpwKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpwKCkub3B0aW9uYWwoKSxkZWZhdWx0Ok8oKS5vcHRpb25hbCgpfSksdXY9bSh7dHlwZTpmKCJzdHJpbmciKSx0aXRsZTpwKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpwKCkub3B0aW9uYWwoKSxtaW5MZW5ndGg6VCgpLm9wdGlvbmFsKCksbWF4TGVuZ3RoOlQoKS5vcHRpb25hbCgpLGZvcm1hdDpXKFsiZW1haWwiLCJ1cmkiLCJkYXRlIiwiZGF0ZS10aW1lIl0pLm9wdGlvbmFsKCksZGVmYXVsdDpwKCkub3B0aW9uYWwoKX0pLGx2PW0oe3R5cGU6VyhbIm51bWJlciIsImludGVnZXIiXSksdGl0bGU6cCgpLm9wdGlvbmFsKCksZGVzY3JpcHRpb246cCgpLm9wdGlvbmFsKCksbWluaW11bTpUKCkub3B0aW9uYWwoKSxtYXhpbXVtOlQoKS5vcHRpb25hbCgpLGRlZmF1bHQ6VCgpLm9wdGlvbmFsKCl9KSxkdj1tKHt0eXBlOmYoInN0cmluZyIpLHRpdGxlOnAoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOnAoKS5vcHRpb25hbCgpLGVudW06UyhwKCkpLGRlZmF1bHQ6cCgpLm9wdGlvbmFsKCl9KSxwdj1tKHt0eXBlOmYoInN0cmluZyIpLHRpdGxlOnAoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOnAoKS5vcHRpb25hbCgpLG9uZU9mOlMobSh7Y29uc3Q6cCgpLHRpdGxlOnAoKX0pKSxkZWZhdWx0OnAoKS5vcHRpb25hbCgpfSksZnY9bSh7dHlwZTpmKCJzdHJpbmciKSx0aXRsZTpwKCkub3B0aW9uYWwoKSxkZXNjcmlwdGlvbjpwKCkub3B0aW9uYWwoKSxlbnVtOlMocCgpKSxlbnVtTmFtZXM6UyhwKCkpLm9wdGlvbmFsKCksZGVmYXVsdDpwKCkub3B0aW9uYWwoKX0pLGh2PXgoW2R2LHB2XSksbXY9bSh7dHlwZTpmKCJhcnJheSIpLHRpdGxlOnAoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOnAoKS5vcHRpb25hbCgpLG1pbkl0ZW1zOlQoKS5vcHRpb25hbCgpLG1heEl0ZW1zOlQoKS5vcHRpb25hbCgpLGl0ZW1zOm0oe3R5cGU6Zigic3RyaW5nIiksZW51bTpTKHAoKSl9KSxkZWZhdWx0OlMocCgpKS5vcHRpb25hbCgpfSksZ3Y9bSh7dHlwZTpmKCJhcnJheSIpLHRpdGxlOnAoKS5vcHRpb25hbCgpLGRlc2NyaXB0aW9uOnAoKS5vcHRpb25hbCgpLG1pbkl0ZW1zOlQoKS5vcHRpb25hbCgpLG1heEl0ZW1zOlQoKS5vcHRpb25hbCgpLGl0ZW1zOm0oe2FueU9mOlMobSh7Y29uc3Q6cCgpLHRpdGxlOnAoKX0pKX0pLGRlZmF1bHQ6UyhwKCkpLm9wdGlvbmFsKCl9KSxfdj14KFttdixndl0pLHZ2PXgoW2Z2LGh2LF92XSksYnY9eChbdnYsY3YsdXYsbHZdKSx5dj1Ubi5leHRlbmQoe21vZGU6ZigiZm9ybSIpLm9wdGlvbmFsKCksbWVzc2FnZTpwKCkscmVxdWVzdGVkU2NoZW1hOm0oe3R5cGU6Zigib2JqZWN0IikscHJvcGVydGllczpFKHAoKSxidikscmVxdWlyZWQ6UyhwKCkpLm9wdGlvbmFsKCl9KX0pLHd2PVRuLmV4dGVuZCh7bW9kZTpmKCJ1cmwiKSxtZXNzYWdlOnAoKSxlbGljaXRhdGlvbklkOnAoKSx1cmw6cCgpLnVybCgpfSksa3Y9eChbeXYsd3ZdKSxTdj1HLmV4dGVuZCh7bWV0aG9kOmYoImVsaWNpdGF0aW9uL2NyZWF0ZSIpLHBhcmFtczprdn0pLCR2PWZlLmV4dGVuZCh7ZWxpY2l0YXRpb25JZDpwKCl9KSx6dj1oZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL2VsaWNpdGF0aW9uL2NvbXBsZXRlIikscGFyYW1zOiR2fSksVHY9US5leHRlbmQoe2FjdGlvbjpXKFsiYWNjZXB0IiwiZGVjbGluZSIsImNhbmNlbCJdKSxjb250ZW50OnpuKGU9PmU9PT1udWxsP3ZvaWQgMDplLEUocCgpLHgoW3AoKSxUKCksTygpLFMocCgpKV0pKS5vcHRpb25hbCgpKX0pLFB2PW0oe3R5cGU6ZigicmVmL3Jlc291cmNlIiksdXJpOnAoKX0pLHh2PW0oe3R5cGU6ZigicmVmL3Byb21wdCIpLG5hbWU6cCgpfSksSXY9Y2UuZXh0ZW5kKHtyZWY6eChbeHYsUHZdKSxhcmd1bWVudDptKHtuYW1lOnAoKSx2YWx1ZTpwKCl9KSxjb250ZXh0Om0oe2FyZ3VtZW50czpFKHAoKSxwKCkpLm9wdGlvbmFsKCl9KS5vcHRpb25hbCgpfSksRXY9Ry5leHRlbmQoe21ldGhvZDpmKCJjb21wbGV0aW9uL2NvbXBsZXRlIikscGFyYW1zOkl2fSksUnY9US5leHRlbmQoe2NvbXBsZXRpb246Syh7dmFsdWVzOlMocCgpKS5tYXgoMTAwKSx0b3RhbDpEKFQoKS5pbnQoKSksaGFzTW9yZTpEKE8oKSl9KX0pLFp2PW0oe3VyaTpwKCkuc3RhcnRzV2l0aCgiZmlsZTovLyIpLG5hbWU6cCgpLm9wdGlvbmFsKCksX21ldGE6RShwKCksQygpKS5vcHRpb25hbCgpfSksQ3Y9Ry5leHRlbmQoe21ldGhvZDpmKCJyb290cy9saXN0IikscGFyYW1zOmNlLm9wdGlvbmFsKCl9KSxPdj1RLmV4dGVuZCh7cm9vdHM6Uyhadil9KSxBdj1oZS5leHRlbmQoe21ldGhvZDpmKCJub3RpZmljYXRpb25zL3Jvb3RzL2xpc3RfY2hhbmdlZCIpLHBhcmFtczpmZS5vcHRpb25hbCgpfSk7eChbdnIscF8sRXYsUV8scV8sal8sU18sJF8sUF8sRV8sWl8sZ2YsbWYsSGEsQmEsVmEsS2FdKTt4KFtxYSxMYSxtXyxBdixRbl0pO3goW0RhLHZmLGJmLFR2LE92LEZhLEphLFVhXSk7eChbdnIsYXYsU3YsQ3YsSGEsQmEsVmEsS2FdKTt4KFtxYSxMYSxYXyxPXyx4XyxXXyxGXyxRbix6dl0pO3goW0RhLGhfLFJ2LEhfLE1fLGRmLHpfLHBmLGJyLEpfLEZhLEphLFVhXSk7Y2xhc3MgWiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQsbixvKXtzdXBlcihgTUNQIGVycm9yICR7dH06ICR7bn1gKSx0aGlzLmNvZGU9dCx0aGlzLmRhdGE9byx0aGlzLm5hbWU9Ik1jcEVycm9yIn1zdGF0aWMgZnJvbUVycm9yKHQsbixvKXtpZih0PT09ai5VcmxFbGljaXRhdGlvblJlcXVpcmVkJiZvKXtjb25zdCByPW87aWYoci5lbGljaXRhdGlvbnMpcmV0dXJuIG5ldyBOdihyLmVsaWNpdGF0aW9ucyxuKX1yZXR1cm4gbmV3IFoodCxuLG8pfX1jbGFzcyBOdiBleHRlbmRzIFp7Y29uc3RydWN0b3IodCxuPWBVUkwgZWxpY2l0YXRpb24ke3QubGVuZ3RoPjE/InMiOiIifSByZXF1aXJlZGApe3N1cGVyKGouVXJsRWxpY2l0YXRpb25SZXF1aXJlZCxuLHtlbGljaXRhdGlvbnM6dH0pfWdldCBlbGljaXRhdGlvbnMoKXtyZXR1cm4gdGhpcy5kYXRhPy5lbGljaXRhdGlvbnM/P1tdfX1mdW5jdGlvbiBPZShlKXtyZXR1cm4gZT09PSJjb21wbGV0ZWQifHxlPT09ImZhaWxlZCJ8fGU9PT0iY2FuY2VsbGVkIn1uZXcgU2V0KCJBQkNERUZHSElKS0xNTk9QUVJTVFVWWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnh5ejAxMjM0NTY3ODkiKTtmdW5jdGlvbiBqYyhlKXtjb25zdCBuPVBnKGUpPy5tZXRob2Q7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJTY2hlbWEgaXMgbWlzc2luZyBhIG1ldGhvZCBsaXRlcmFsIik7Y29uc3Qgbz14ZyhuKTtpZih0eXBlb2YgbyE9InN0cmluZyIpdGhyb3cgbmV3IEVycm9yKCJTY2hlbWEgbWV0aG9kIGxpdGVyYWwgbXVzdCBiZSBhIHN0cmluZyIpO3JldHVybiBvfWZ1bmN0aW9uIE1jKGUsdCl7Y29uc3Qgbj1VcChlLHQpO2lmKCFuLnN1Y2Nlc3MpdGhyb3cgbi5lcnJvcjtyZXR1cm4gbi5kYXRhfWNvbnN0IGp2PTZlNDtjbGFzcyBNdntjb25zdHJ1Y3Rvcih0KXt0aGlzLl9vcHRpb25zPXQsdGhpcy5fcmVxdWVzdE1lc3NhZ2VJZD0wLHRoaXMuX3JlcXVlc3RIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycz1uZXcgTWFwLHRoaXMuX25vdGlmaWNhdGlvbkhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcmVzcG9uc2VIYW5kbGVycz1uZXcgTWFwLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnM9bmV3IE1hcCx0aGlzLl90aW1lb3V0SW5mbz1uZXcgTWFwLHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zPW5ldyBTZXQsdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zPW5ldyBNYXAsdGhpcy5fcmVxdWVzdFJlc29sdmVycz1uZXcgTWFwLHRoaXMuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcihxYSxuPT57dGhpcy5fb25jYW5jZWwobil9KSx0aGlzLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIoTGEsbj0+e3RoaXMuX29ucHJvZ3Jlc3Mobil9KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKHZyLG49Pih7fSkpLHRoaXMuX3Rhc2tTdG9yZT10Py50YXNrU3RvcmUsdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT10Py50YXNrTWVzc2FnZVF1ZXVlLHRoaXMuX3Rhc2tTdG9yZSYmKHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoSGEsYXN5bmMobixvKT0+e2NvbnN0IHI9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2sobi5wYXJhbXMudGFza0lkLG8uc2Vzc2lvbklkKTtpZighcil0aHJvdyBuZXcgWihqLkludmFsaWRQYXJhbXMsIkZhaWxlZCB0byByZXRyaWV2ZSB0YXNrOiBUYXNrIG5vdCBmb3VuZCIpO3JldHVybnsuLi5yfX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoQmEsYXN5bmMobixvKT0+e2NvbnN0IHI9YXN5bmMoKT0+e2NvbnN0IHM9bi5wYXJhbXMudGFza0lkO2lmKHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpe2xldCBhO2Zvcig7YT1hd2FpdCB0aGlzLl90YXNrTWVzc2FnZVF1ZXVlLmRlcXVldWUocyxvLnNlc3Npb25JZCk7KXtpZihhLnR5cGU9PT0icmVzcG9uc2UifHxhLnR5cGU9PT0iZXJyb3IiKXtjb25zdCB1PWEubWVzc2FnZSxjPXUuaWQsbD10aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmdldChjKTtpZihsKWlmKHRoaXMuX3JlcXVlc3RSZXNvbHZlcnMuZGVsZXRlKGMpLGEudHlwZT09PSJyZXNwb25zZSIpbCh1KTtlbHNle2NvbnN0IGg9dSxnPW5ldyBaKGguZXJyb3IuY29kZSxoLmVycm9yLm1lc3NhZ2UsaC5lcnJvci5kYXRhKTtsKGcpfWVsc2V7Y29uc3QgaD1hLnR5cGU9PT0icmVzcG9uc2UiPyJSZXNwb25zZSI6IkVycm9yIjt0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgJHtofSBoYW5kbGVyIG1pc3NpbmcgZm9yIHJlcXVlc3QgJHtjfWApKX1jb250aW51ZX1hd2FpdCB0aGlzLl90cmFuc3BvcnQ/LnNlbmQoYS5tZXNzYWdlLHtyZWxhdGVkUmVxdWVzdElkOm8ucmVxdWVzdElkfSl9fWNvbnN0IGk9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2socyxvLnNlc3Npb25JZCk7aWYoIWkpdGhyb3cgbmV3IFooai5JbnZhbGlkUGFyYW1zLGBUYXNrIG5vdCBmb3VuZDogJHtzfWApO2lmKCFPZShpLnN0YXR1cykpcmV0dXJuIGF3YWl0IHRoaXMuX3dhaXRGb3JUYXNrVXBkYXRlKHMsby5zaWduYWwpLGF3YWl0IHIoKTtpZihPZShpLnN0YXR1cykpe2NvbnN0IGE9YXdhaXQgdGhpcy5fdGFza1N0b3JlLmdldFRhc2tSZXN1bHQocyxvLnNlc3Npb25JZCk7cmV0dXJuIHRoaXMuX2NsZWFyVGFza1F1ZXVlKHMpLHsuLi5hLF9tZXRhOnsuLi5hLl9tZXRhLFtBZV06e3Rhc2tJZDpzfX19fXJldHVybiBhd2FpdCByKCl9O3JldHVybiBhd2FpdCByKCl9KSx0aGlzLnNldFJlcXVlc3RIYW5kbGVyKFZhLGFzeW5jKG4sbyk9Pnt0cnl7Y29uc3R7dGFza3M6cixuZXh0Q3Vyc29yOnN9PWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5saXN0VGFza3Mobi5wYXJhbXM/LmN1cnNvcixvLnNlc3Npb25JZCk7cmV0dXJue3Rhc2tzOnIsbmV4dEN1cnNvcjpzLF9tZXRhOnt9fX1jYXRjaChyKXt0aHJvdyBuZXcgWihqLkludmFsaWRQYXJhbXMsYEZhaWxlZCB0byBsaXN0IHRhc2tzOiAke3IgaW5zdGFuY2VvZiBFcnJvcj9yLm1lc3NhZ2U6U3RyaW5nKHIpfWApfX0pLHRoaXMuc2V0UmVxdWVzdEhhbmRsZXIoS2EsYXN5bmMobixvKT0+e3RyeXtjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXIpdGhyb3cgbmV3IFooai5JbnZhbGlkUGFyYW1zLGBUYXNrIG5vdCBmb3VuZDogJHtuLnBhcmFtcy50YXNrSWR9YCk7aWYoT2Uoci5zdGF0dXMpKXRocm93IG5ldyBaKGouSW52YWxpZFBhcmFtcyxgQ2Fubm90IGNhbmNlbCB0YXNrIGluIHRlcm1pbmFsIHN0YXR1czogJHtyLnN0YXR1c31gKTthd2FpdCB0aGlzLl90YXNrU3RvcmUudXBkYXRlVGFza1N0YXR1cyhuLnBhcmFtcy50YXNrSWQsImNhbmNlbGxlZCIsIkNsaWVudCBjYW5jZWxsZWQgdGFzayBleGVjdXRpb24uIixvLnNlc3Npb25JZCksdGhpcy5fY2xlYXJUYXNrUXVldWUobi5wYXJhbXMudGFza0lkKTtjb25zdCBzPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZS5nZXRUYXNrKG4ucGFyYW1zLnRhc2tJZCxvLnNlc3Npb25JZCk7aWYoIXMpdGhyb3cgbmV3IFooai5JbnZhbGlkUGFyYW1zLGBUYXNrIG5vdCBmb3VuZCBhZnRlciBjYW5jZWxsYXRpb246ICR7bi5wYXJhbXMudGFza0lkfWApO3JldHVybntfbWV0YTp7fSwuLi5zfX1jYXRjaChyKXt0aHJvdyByIGluc3RhbmNlb2YgWj9yOm5ldyBaKGouSW52YWxpZFJlcXVlc3QsYEZhaWxlZCB0byBjYW5jZWwgdGFzazogJHtyIGluc3RhbmNlb2YgRXJyb3I/ci5tZXNzYWdlOlN0cmluZyhyKX1gKX19KSl9YXN5bmMgX29uY2FuY2VsKHQpe2lmKCF0LnBhcmFtcy5yZXF1ZXN0SWQpcmV0dXJuO3RoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy5nZXQodC5wYXJhbXMucmVxdWVzdElkKT8uYWJvcnQodC5wYXJhbXMucmVhc29uKX1fc2V0dXBUaW1lb3V0KHQsbixvLHIscz0hMSl7dGhpcy5fdGltZW91dEluZm8uc2V0KHQse3RpbWVvdXRJZDpzZXRUaW1lb3V0KHIsbiksc3RhcnRUaW1lOkRhdGUubm93KCksdGltZW91dDpuLG1heFRvdGFsVGltZW91dDpvLHJlc2V0VGltZW91dE9uUHJvZ3Jlc3M6cyxvblRpbWVvdXQ6cn0pfV9yZXNldFRpbWVvdXQodCl7Y29uc3Qgbj10aGlzLl90aW1lb3V0SW5mby5nZXQodCk7aWYoIW4pcmV0dXJuITE7Y29uc3Qgbz1EYXRlLm5vdygpLW4uc3RhcnRUaW1lO2lmKG4ubWF4VG90YWxUaW1lb3V0JiZvPj1uLm1heFRvdGFsVGltZW91dCl0aHJvdyB0aGlzLl90aW1lb3V0SW5mby5kZWxldGUodCksWi5mcm9tRXJyb3Ioai5SZXF1ZXN0VGltZW91dCwiTWF4aW11bSB0b3RhbCB0aW1lb3V0IGV4Y2VlZGVkIix7bWF4VG90YWxUaW1lb3V0Om4ubWF4VG90YWxUaW1lb3V0LHRvdGFsRWxhcHNlZDpvfSk7cmV0dXJuIGNsZWFyVGltZW91dChuLnRpbWVvdXRJZCksbi50aW1lb3V0SWQ9c2V0VGltZW91dChuLm9uVGltZW91dCxuLnRpbWVvdXQpLCEwfV9jbGVhbnVwVGltZW91dCh0KXtjb25zdCBuPXRoaXMuX3RpbWVvdXRJbmZvLmdldCh0KTtuJiYoY2xlYXJUaW1lb3V0KG4udGltZW91dElkKSx0aGlzLl90aW1lb3V0SW5mby5kZWxldGUodCkpfWFzeW5jIGNvbm5lY3QodCl7aWYodGhpcy5fdHJhbnNwb3J0KXRocm93IG5ldyBFcnJvcigiQWxyZWFkeSBjb25uZWN0ZWQgdG8gYSB0cmFuc3BvcnQuIENhbGwgY2xvc2UoKSBiZWZvcmUgY29ubmVjdGluZyB0byBhIG5ldyB0cmFuc3BvcnQsIG9yIHVzZSBhIHNlcGFyYXRlIFByb3RvY29sIGluc3RhbmNlIHBlciBjb25uZWN0aW9uLiIpO3RoaXMuX3RyYW5zcG9ydD10O2NvbnN0IG49dGhpcy50cmFuc3BvcnQ/Lm9uY2xvc2U7dGhpcy5fdHJhbnNwb3J0Lm9uY2xvc2U9KCk9PntuPy4oKSx0aGlzLl9vbmNsb3NlKCl9O2NvbnN0IG89dGhpcy50cmFuc3BvcnQ/Lm9uZXJyb3I7dGhpcy5fdHJhbnNwb3J0Lm9uZXJyb3I9cz0+e28/LihzKSx0aGlzLl9vbmVycm9yKHMpfTtjb25zdCByPXRoaXMuX3RyYW5zcG9ydD8ub25tZXNzYWdlO3RoaXMuX3RyYW5zcG9ydC5vbm1lc3NhZ2U9KHMsaSk9PntyPy4ocyxpKSxMbihzKXx8bl8ocyk/dGhpcy5fb25yZXNwb25zZShzKTpOYyhzKT90aGlzLl9vbnJlcXVlc3QocyxpKTp0XyhzKT90aGlzLl9vbm5vdGlmaWNhdGlvbihzKTp0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgVW5rbm93biBtZXNzYWdlIHR5cGU6ICR7SlNPTi5zdHJpbmdpZnkocyl9YCkpfSxhd2FpdCB0aGlzLl90cmFuc3BvcnQuc3RhcnQoKX1fb25jbG9zZSgpe2NvbnN0IHQ9dGhpcy5fcmVzcG9uc2VIYW5kbGVyczt0aGlzLl9yZXNwb25zZUhhbmRsZXJzPW5ldyBNYXAsdGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5jbGVhcigpLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5jbGVhcigpLHRoaXMuX3BlbmRpbmdEZWJvdW5jZWROb3RpZmljYXRpb25zLmNsZWFyKCk7Zm9yKGNvbnN0IG8gb2YgdGhpcy5fdGltZW91dEluZm8udmFsdWVzKCkpY2xlYXJUaW1lb3V0KG8udGltZW91dElkKTt0aGlzLl90aW1lb3V0SW5mby5jbGVhcigpO2Zvcihjb25zdCBvIG9mIHRoaXMuX3JlcXVlc3RIYW5kbGVyQWJvcnRDb250cm9sbGVycy52YWx1ZXMoKSlvLmFib3J0KCk7dGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmNsZWFyKCk7Y29uc3Qgbj1aLmZyb21FcnJvcihqLkNvbm5lY3Rpb25DbG9zZWQsIkNvbm5lY3Rpb24gY2xvc2VkIik7dGhpcy5fdHJhbnNwb3J0PXZvaWQgMCx0aGlzLm9uY2xvc2U/LigpO2Zvcihjb25zdCBvIG9mIHQudmFsdWVzKCkpbyhuKX1fb25lcnJvcih0KXt0aGlzLm9uZXJyb3I/Lih0KX1fb25ub3RpZmljYXRpb24odCl7Y29uc3Qgbj10aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5nZXQodC5tZXRob2QpPz90aGlzLmZhbGxiYWNrTm90aWZpY2F0aW9uSGFuZGxlcjtuIT09dm9pZCAwJiZQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5uKHQpKS5jYXRjaChvPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgVW5jYXVnaHQgZXJyb3IgaW4gbm90aWZpY2F0aW9uIGhhbmRsZXI6ICR7b31gKSkpfV9vbnJlcXVlc3QodCxuKXtjb25zdCBvPXRoaXMuX3JlcXVlc3RIYW5kbGVycy5nZXQodC5tZXRob2QpPz90aGlzLmZhbGxiYWNrUmVxdWVzdEhhbmRsZXIscj10aGlzLl90cmFuc3BvcnQscz10LnBhcmFtcz8uX21ldGE/LltBZV0/LnRhc2tJZDtpZihvPT09dm9pZCAwKXtjb25zdCBsPXtqc29ucnBjOiIyLjAiLGlkOnQuaWQsZXJyb3I6e2NvZGU6ai5NZXRob2ROb3RGb3VuZCxtZXNzYWdlOiJNZXRob2Qgbm90IGZvdW5kIn19O3MmJnRoaXMuX3Rhc2tNZXNzYWdlUXVldWU/dGhpcy5fZW5xdWV1ZVRhc2tNZXNzYWdlKHMse3R5cGU6ImVycm9yIixtZXNzYWdlOmwsdGltZXN0YW1wOkRhdGUubm93KCl9LHI/LnNlc3Npb25JZCkuY2F0Y2goaD0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBlbnF1ZXVlIGVycm9yIHJlc3BvbnNlOiAke2h9YCkpKTpyPy5zZW5kKGwpLmNhdGNoKGg9PnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBGYWlsZWQgdG8gc2VuZCBhbiBlcnJvciByZXNwb25zZTogJHtofWApKSk7cmV0dXJufWNvbnN0IGk9bmV3IEFib3J0Q29udHJvbGxlcjt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuc2V0KHQuaWQsaSk7Y29uc3QgYT1lXyh0LnBhcmFtcyk/dC5wYXJhbXMudGFzazp2b2lkIDAsdT10aGlzLl90YXNrU3RvcmU/dGhpcy5yZXF1ZXN0VGFza1N0b3JlKHQscj8uc2Vzc2lvbklkKTp2b2lkIDAsYz17c2lnbmFsOmkuc2lnbmFsLHNlc3Npb25JZDpyPy5zZXNzaW9uSWQsX21ldGE6dC5wYXJhbXM/Ll9tZXRhLHNlbmROb3RpZmljYXRpb246YXN5bmMgbD0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IGg9e3JlbGF0ZWRSZXF1ZXN0SWQ6dC5pZH07cyYmKGgucmVsYXRlZFRhc2s9e3Rhc2tJZDpzfSksYXdhaXQgdGhpcy5ub3RpZmljYXRpb24obCxoKX0sc2VuZFJlcXVlc3Q6YXN5bmMobCxoLGcpPT57aWYoaS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgWihqLkNvbm5lY3Rpb25DbG9zZWQsIlJlcXVlc3Qgd2FzIGNhbmNlbGxlZCIpO2NvbnN0IF89ey4uLmcscmVsYXRlZFJlcXVlc3RJZDp0LmlkfTtzJiYhXy5yZWxhdGVkVGFzayYmKF8ucmVsYXRlZFRhc2s9e3Rhc2tJZDpzfSk7Y29uc3QgYj1fLnJlbGF0ZWRUYXNrPy50YXNrSWQ/P3M7cmV0dXJuIGImJnUmJmF3YWl0IHUudXBkYXRlVGFza1N0YXR1cyhiLCJpbnB1dF9yZXF1aXJlZCIpLGF3YWl0IHRoaXMucmVxdWVzdChsLGgsXyl9LGF1dGhJbmZvOm4/LmF1dGhJbmZvLHJlcXVlc3RJZDp0LmlkLHJlcXVlc3RJbmZvOm4/LnJlcXVlc3RJbmZvLHRhc2tJZDpzLHRhc2tTdG9yZTp1LHRhc2tSZXF1ZXN0ZWRUdGw6YT8udHRsLGNsb3NlU1NFU3RyZWFtOm4/LmNsb3NlU1NFU3RyZWFtLGNsb3NlU3RhbmRhbG9uZVNTRVN0cmVhbTpuPy5jbG9zZVN0YW5kYWxvbmVTU0VTdHJlYW19O1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PnthJiZ0aGlzLmFzc2VydFRhc2tIYW5kbGVyQ2FwYWJpbGl0eSh0Lm1ldGhvZCl9KS50aGVuKCgpPT5vKHQsYykpLnRoZW4oYXN5bmMgbD0+e2lmKGkuc2lnbmFsLmFib3J0ZWQpcmV0dXJuO2NvbnN0IGg9e3Jlc3VsdDpsLGpzb25ycGM6IjIuMCIsaWQ6dC5pZH07cyYmdGhpcy5fdGFza01lc3NhZ2VRdWV1ZT9hd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uocyx7dHlwZToicmVzcG9uc2UiLG1lc3NhZ2U6aCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0scj8uc2Vzc2lvbklkKTphd2FpdCByPy5zZW5kKGgpfSxhc3luYyBsPT57aWYoaS5zaWduYWwuYWJvcnRlZClyZXR1cm47Y29uc3QgaD17anNvbnJwYzoiMi4wIixpZDp0LmlkLGVycm9yOntjb2RlOk51bWJlci5pc1NhZmVJbnRlZ2VyKGwuY29kZSk/bC5jb2RlOmouSW50ZXJuYWxFcnJvcixtZXNzYWdlOmwubWVzc2FnZT8/IkludGVybmFsIGVycm9yIiwuLi5sLmRhdGEhPT12b2lkIDAmJntkYXRhOmwuZGF0YX19fTtzJiZ0aGlzLl90YXNrTWVzc2FnZVF1ZXVlP2F3YWl0IHRoaXMuX2VucXVldWVUYXNrTWVzc2FnZShzLHt0eXBlOiJlcnJvciIsbWVzc2FnZTpoLHRpbWVzdGFtcDpEYXRlLm5vdygpfSxyPy5zZXNzaW9uSWQpOmF3YWl0IHI/LnNlbmQoaCl9KS5jYXRjaChsPT50aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgRmFpbGVkIHRvIHNlbmQgcmVzcG9uc2U6ICR7bH1gKSkpLmZpbmFsbHkoKCk9Pnt0aGlzLl9yZXF1ZXN0SGFuZGxlckFib3J0Q29udHJvbGxlcnMuZ2V0KHQuaWQpPT09aSYmdGhpcy5fcmVxdWVzdEhhbmRsZXJBYm9ydENvbnRyb2xsZXJzLmRlbGV0ZSh0LmlkKX0pfV9vbnByb2dyZXNzKHQpe2NvbnN0e3Byb2dyZXNzVG9rZW46biwuLi5vfT10LnBhcmFtcyxyPU51bWJlcihuKSxzPXRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZ2V0KHIpO2lmKCFzKXt0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVjZWl2ZWQgYSBwcm9ncmVzcyBub3RpZmljYXRpb24gZm9yIGFuIHVua25vd24gdG9rZW46ICR7SlNPTi5zdHJpbmdpZnkodCl9YCkpO3JldHVybn1jb25zdCBpPXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZ2V0KHIpLGE9dGhpcy5fdGltZW91dEluZm8uZ2V0KHIpO2lmKGEmJmkmJmEucmVzZXRUaW1lb3V0T25Qcm9ncmVzcyl0cnl7dGhpcy5fcmVzZXRUaW1lb3V0KHIpfWNhdGNoKHUpe3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKHIpLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKHIpLHRoaXMuX2NsZWFudXBUaW1lb3V0KHIpLGkodSk7cmV0dXJufXMobyl9X29ucmVzcG9uc2UodCl7Y29uc3Qgbj1OdW1iZXIodC5pZCksbz10aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmdldChuKTtpZihvKXtpZih0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShuKSxMbih0KSlvKHQpO2Vsc2V7Y29uc3QgaT1uZXcgWih0LmVycm9yLmNvZGUsdC5lcnJvci5tZXNzYWdlLHQuZXJyb3IuZGF0YSk7byhpKX1yZXR1cm59Y29uc3Qgcj10aGlzLl9yZXNwb25zZUhhbmRsZXJzLmdldChuKTtpZihyPT09dm9pZCAwKXt0aGlzLl9vbmVycm9yKG5ldyBFcnJvcihgUmVjZWl2ZWQgYSByZXNwb25zZSBmb3IgYW4gdW5rbm93biBtZXNzYWdlIElEOiAke0pTT04uc3RyaW5naWZ5KHQpfWApKTtyZXR1cm59dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5kZWxldGUobiksdGhpcy5fY2xlYW51cFRpbWVvdXQobik7bGV0IHM9ITE7aWYoTG4odCkmJnQucmVzdWx0JiZ0eXBlb2YgdC5yZXN1bHQ9PSJvYmplY3QiKXtjb25zdCBpPXQucmVzdWx0O2lmKGkudGFzayYmdHlwZW9mIGkudGFzaz09Im9iamVjdCIpe2NvbnN0IGE9aS50YXNrO3R5cGVvZiBhLnRhc2tJZD09InN0cmluZyImJihzPSEwLHRoaXMuX3Rhc2tQcm9ncmVzc1Rva2Vucy5zZXQoYS50YXNrSWQsbikpfX1pZihzfHx0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLmRlbGV0ZShuKSxMbih0KSlyKHQpO2Vsc2V7Y29uc3QgaT1aLmZyb21FcnJvcih0LmVycm9yLmNvZGUsdC5lcnJvci5tZXNzYWdlLHQuZXJyb3IuZGF0YSk7cihpKX19Z2V0IHRyYW5zcG9ydCgpe3JldHVybiB0aGlzLl90cmFuc3BvcnR9YXN5bmMgY2xvc2UoKXthd2FpdCB0aGlzLl90cmFuc3BvcnQ/LmNsb3NlKCl9YXN5bmMqcmVxdWVzdFN0cmVhbSh0LG4sbyl7Y29uc3R7dGFzazpyfT1vPz97fTtpZighcil7dHJ5e3lpZWxke3R5cGU6InJlc3VsdCIscmVzdWx0OmF3YWl0IHRoaXMucmVxdWVzdCh0LG4sbyl9fWNhdGNoKGkpe3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjppIGluc3RhbmNlb2YgWj9pOm5ldyBaKGouSW50ZXJuYWxFcnJvcixTdHJpbmcoaSkpfX1yZXR1cm59bGV0IHM7dHJ5e2NvbnN0IGk9YXdhaXQgdGhpcy5yZXF1ZXN0KHQsVWEsbyk7aWYoaS50YXNrKXM9aS50YXNrLnRhc2tJZCx5aWVsZHt0eXBlOiJ0YXNrQ3JlYXRlZCIsdGFzazppLnRhc2t9O2Vsc2UgdGhyb3cgbmV3IFooai5JbnRlcm5hbEVycm9yLCJUYXNrIGNyZWF0aW9uIGRpZCBub3QgcmV0dXJuIGEgdGFzayIpO2Zvcig7Oyl7Y29uc3QgYT1hd2FpdCB0aGlzLmdldFRhc2soe3Rhc2tJZDpzfSxvKTtpZih5aWVsZHt0eXBlOiJ0YXNrU3RhdHVzIix0YXNrOmF9LE9lKGEuc3RhdHVzKSl7YS5zdGF0dXM9PT0iY29tcGxldGVkIj95aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLmdldFRhc2tSZXN1bHQoe3Rhc2tJZDpzfSxuLG8pfTphLnN0YXR1cz09PSJmYWlsZWQiP3lpZWxke3R5cGU6ImVycm9yIixlcnJvcjpuZXcgWihqLkludGVybmFsRXJyb3IsYFRhc2sgJHtzfSBmYWlsZWRgKX06YS5zdGF0dXM9PT0iY2FuY2VsbGVkIiYmKHlpZWxke3R5cGU6ImVycm9yIixlcnJvcjpuZXcgWihqLkludGVybmFsRXJyb3IsYFRhc2sgJHtzfSB3YXMgY2FuY2VsbGVkYCl9KTtyZXR1cm59aWYoYS5zdGF0dXM9PT0iaW5wdXRfcmVxdWlyZWQiKXt5aWVsZHt0eXBlOiJyZXN1bHQiLHJlc3VsdDphd2FpdCB0aGlzLmdldFRhc2tSZXN1bHQoe3Rhc2tJZDpzfSxuLG8pfTtyZXR1cm59Y29uc3QgdT1hLnBvbGxJbnRlcnZhbD8/dGhpcy5fb3B0aW9ucz8uZGVmYXVsdFRhc2tQb2xsSW50ZXJ2YWw/PzFlMzthd2FpdCBuZXcgUHJvbWlzZShjPT5zZXRUaW1lb3V0KGMsdSkpLG8/LnNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKX19Y2F0Y2goaSl7eWllbGR7dHlwZToiZXJyb3IiLGVycm9yOmkgaW5zdGFuY2VvZiBaP2k6bmV3IFooai5JbnRlcm5hbEVycm9yLFN0cmluZyhpKSl9fX1yZXF1ZXN0KHQsbixvKXtjb25zdHtyZWxhdGVkUmVxdWVzdElkOnIscmVzdW1wdGlvblRva2VuOnMsb25yZXN1bXB0aW9udG9rZW46aSx0YXNrOmEscmVsYXRlZFRhc2s6dX09bz8/e307cmV0dXJuIG5ldyBQcm9taXNlKChjLGwpPT57Y29uc3QgaD1SPT57bChSKX07aWYoIXRoaXMuX3RyYW5zcG9ydCl7aChuZXcgRXJyb3IoIk5vdCBjb25uZWN0ZWQiKSk7cmV0dXJufWlmKHRoaXMuX29wdGlvbnM/LmVuZm9yY2VTdHJpY3RDYXBhYmlsaXRpZXM9PT0hMCl0cnl7dGhpcy5hc3NlcnRDYXBhYmlsaXR5Rm9yTWV0aG9kKHQubWV0aG9kKSxhJiZ0aGlzLmFzc2VydFRhc2tDYXBhYmlsaXR5KHQubWV0aG9kKX1jYXRjaChSKXtoKFIpO3JldHVybn1vPy5zaWduYWw/LnRocm93SWZBYm9ydGVkKCk7Y29uc3QgZz10aGlzLl9yZXF1ZXN0TWVzc2FnZUlkKyssXz17Li4udCxqc29ucnBjOiIyLjAiLGlkOmd9O28/Lm9ucHJvZ3Jlc3MmJih0aGlzLl9wcm9ncmVzc0hhbmRsZXJzLnNldChnLG8ub25wcm9ncmVzcyksXy5wYXJhbXM9ey4uLnQucGFyYW1zLF9tZXRhOnsuLi50LnBhcmFtcz8uX21ldGF8fHt9LHByb2dyZXNzVG9rZW46Z319KSxhJiYoXy5wYXJhbXM9ey4uLl8ucGFyYW1zLHRhc2s6YX0pLHUmJihfLnBhcmFtcz17Li4uXy5wYXJhbXMsX21ldGE6ey4uLl8ucGFyYW1zPy5fbWV0YXx8e30sW0FlXTp1fX0pO2NvbnN0IGI9Uj0+e3RoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZGVsZXRlKGcpLHRoaXMuX3Byb2dyZXNzSGFuZGxlcnMuZGVsZXRlKGcpLHRoaXMuX2NsZWFudXBUaW1lb3V0KGcpLHRoaXMuX3RyYW5zcG9ydD8uc2VuZCh7anNvbnJwYzoiMi4wIixtZXRob2Q6Im5vdGlmaWNhdGlvbnMvY2FuY2VsbGVkIixwYXJhbXM6e3JlcXVlc3RJZDpnLHJlYXNvbjpTdHJpbmcoUil9fSx7cmVsYXRlZFJlcXVlc3RJZDpyLHJlc3VtcHRpb25Ub2tlbjpzLG9ucmVzdW1wdGlvbnRva2VuOml9KS5jYXRjaCh0ZT0+dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYEZhaWxlZCB0byBzZW5kIGNhbmNlbGxhdGlvbjogJHt0ZX1gKSkpO2NvbnN0IEg9UiBpbnN0YW5jZW9mIFo/UjpuZXcgWihqLlJlcXVlc3RUaW1lb3V0LFN0cmluZyhSKSk7bChIKX07dGhpcy5fcmVzcG9uc2VIYW5kbGVycy5zZXQoZyxSPT57aWYoIW8/LnNpZ25hbD8uYWJvcnRlZCl7aWYoUiBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBsKFIpO3RyeXtjb25zdCBIPVVwKG4sUi5yZXN1bHQpO0guc3VjY2Vzcz9jKEguZGF0YSk6bChILmVycm9yKX1jYXRjaChIKXtsKEgpfX19KSxvPy5zaWduYWw/LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+e2Iobz8uc2lnbmFsPy5yZWFzb24pfSk7Y29uc3Qgaz1vPy50aW1lb3V0Pz9qdiwkPSgpPT5iKFouZnJvbUVycm9yKGouUmVxdWVzdFRpbWVvdXQsIlJlcXVlc3QgdGltZWQgb3V0Iix7dGltZW91dDprfSkpO3RoaXMuX3NldHVwVGltZW91dChnLGssbz8ubWF4VG90YWxUaW1lb3V0LCQsbz8ucmVzZXRUaW1lb3V0T25Qcm9ncmVzcz8/ITEpO2NvbnN0IE49dT8udGFza0lkO2lmKE4pe2NvbnN0IFI9SD0+e2NvbnN0IHRlPXRoaXMuX3Jlc3BvbnNlSGFuZGxlcnMuZ2V0KGcpO3RlP3RlKEgpOnRoaXMuX29uZXJyb3IobmV3IEVycm9yKGBSZXNwb25zZSBoYW5kbGVyIG1pc3NpbmcgZm9yIHNpZGUtY2hhbm5lbGVkIHJlcXVlc3QgJHtnfWApKX07dGhpcy5fcmVxdWVzdFJlc29sdmVycy5zZXQoZyxSKSx0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2UoTix7dHlwZToicmVxdWVzdCIsbWVzc2FnZTpfLHRpbWVzdGFtcDpEYXRlLm5vdygpfSkuY2F0Y2goSD0+e3RoaXMuX2NsZWFudXBUaW1lb3V0KGcpLGwoSCl9KX1lbHNlIHRoaXMuX3RyYW5zcG9ydC5zZW5kKF8se3JlbGF0ZWRSZXF1ZXN0SWQ6cixyZXN1bXB0aW9uVG9rZW46cyxvbnJlc3VtcHRpb250b2tlbjppfSkuY2F0Y2goUj0+e3RoaXMuX2NsZWFudXBUaW1lb3V0KGcpLGwoUil9KX0pfWFzeW5jIGdldFRhc2sodCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2dldCIscGFyYW1zOnR9LEZhLG4pfWFzeW5jIGdldFRhc2tSZXN1bHQodCxuLG8pe3JldHVybiB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidGFza3MvcmVzdWx0IixwYXJhbXM6dH0sbixvKX1hc3luYyBsaXN0VGFza3ModCxuKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHttZXRob2Q6InRhc2tzL2xpc3QiLHBhcmFtczp0fSxKYSxuKX1hc3luYyBjYW5jZWxUYXNrKHQsbil7cmV0dXJuIHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ0YXNrcy9jYW5jZWwiLHBhcmFtczp0fSx3XyxuKX1hc3luYyBub3RpZmljYXRpb24odCxuKXtpZighdGhpcy5fdHJhbnNwb3J0KXRocm93IG5ldyBFcnJvcigiTm90IGNvbm5lY3RlZCIpO3RoaXMuYXNzZXJ0Tm90aWZpY2F0aW9uQ2FwYWJpbGl0eSh0Lm1ldGhvZCk7Y29uc3Qgbz1uPy5yZWxhdGVkVGFzaz8udGFza0lkO2lmKG8pe2NvbnN0IGE9ey4uLnQsanNvbnJwYzoiMi4wIixwYXJhbXM6ey4uLnQucGFyYW1zLF9tZXRhOnsuLi50LnBhcmFtcz8uX21ldGF8fHt9LFtBZV06bi5yZWxhdGVkVGFza319fTthd2FpdCB0aGlzLl9lbnF1ZXVlVGFza01lc3NhZ2Uobyx7dHlwZToibm90aWZpY2F0aW9uIixtZXNzYWdlOmEsdGltZXN0YW1wOkRhdGUubm93KCl9KTtyZXR1cm59aWYoKHRoaXMuX29wdGlvbnM/LmRlYm91bmNlZE5vdGlmaWNhdGlvbk1ldGhvZHM/P1tdKS5pbmNsdWRlcyh0Lm1ldGhvZCkmJiF0LnBhcmFtcyYmIW4/LnJlbGF0ZWRSZXF1ZXN0SWQmJiFuPy5yZWxhdGVkVGFzayl7aWYodGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuaGFzKHQubWV0aG9kKSlyZXR1cm47dGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuYWRkKHQubWV0aG9kKSxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57aWYodGhpcy5fcGVuZGluZ0RlYm91bmNlZE5vdGlmaWNhdGlvbnMuZGVsZXRlKHQubWV0aG9kKSwhdGhpcy5fdHJhbnNwb3J0KXJldHVybjtsZXQgYT17Li4udCxqc29ucnBjOiIyLjAifTtuPy5yZWxhdGVkVGFzayYmKGE9ey4uLmEscGFyYW1zOnsuLi5hLnBhcmFtcyxfbWV0YTp7Li4uYS5wYXJhbXM/Ll9tZXRhfHx7fSxbQWVdOm4ucmVsYXRlZFRhc2t9fX0pLHRoaXMuX3RyYW5zcG9ydD8uc2VuZChhLG4pLmNhdGNoKHU9PnRoaXMuX29uZXJyb3IodSkpfSk7cmV0dXJufWxldCBpPXsuLi50LGpzb25ycGM6IjIuMCJ9O24/LnJlbGF0ZWRUYXNrJiYoaT17Li4uaSxwYXJhbXM6ey4uLmkucGFyYW1zLF9tZXRhOnsuLi5pLnBhcmFtcz8uX21ldGF8fHt9LFtBZV06bi5yZWxhdGVkVGFza319fSksYXdhaXQgdGhpcy5fdHJhbnNwb3J0LnNlbmQoaSxuKX1zZXRSZXF1ZXN0SGFuZGxlcih0LG4pe2NvbnN0IG89amModCk7dGhpcy5hc3NlcnRSZXF1ZXN0SGFuZGxlckNhcGFiaWxpdHkobyksdGhpcy5fcmVxdWVzdEhhbmRsZXJzLnNldChvLChyLHMpPT57Y29uc3QgaT1NYyh0LHIpO3JldHVybiBQcm9taXNlLnJlc29sdmUobihpLHMpKX0pfXJlbW92ZVJlcXVlc3RIYW5kbGVyKHQpe3RoaXMuX3JlcXVlc3RIYW5kbGVycy5kZWxldGUodCl9YXNzZXJ0Q2FuU2V0UmVxdWVzdEhhbmRsZXIodCl7aWYodGhpcy5fcmVxdWVzdEhhbmRsZXJzLmhhcyh0KSl0aHJvdyBuZXcgRXJyb3IoYEEgcmVxdWVzdCBoYW5kbGVyIGZvciAke3R9IGFscmVhZHkgZXhpc3RzLCB3aGljaCB3b3VsZCBiZSBvdmVycmlkZGVuYCl9c2V0Tm90aWZpY2F0aW9uSGFuZGxlcih0LG4pe2NvbnN0IG89amModCk7dGhpcy5fbm90aWZpY2F0aW9uSGFuZGxlcnMuc2V0KG8scj0+e2NvbnN0IHM9TWModCxyKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG4ocykpfSl9cmVtb3ZlTm90aWZpY2F0aW9uSGFuZGxlcih0KXt0aGlzLl9ub3RpZmljYXRpb25IYW5kbGVycy5kZWxldGUodCl9X2NsZWFudXBUYXNrUHJvZ3Jlc3NIYW5kbGVyKHQpe2NvbnN0IG49dGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmdldCh0KTtuIT09dm9pZCAwJiYodGhpcy5fcHJvZ3Jlc3NIYW5kbGVycy5kZWxldGUobiksdGhpcy5fdGFza1Byb2dyZXNzVG9rZW5zLmRlbGV0ZSh0KSl9YXN5bmMgX2VucXVldWVUYXNrTWVzc2FnZSh0LG4sbyl7aWYoIXRoaXMuX3Rhc2tTdG9yZXx8IXRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZW5xdWV1ZSB0YXNrIG1lc3NhZ2U6IHRhc2tTdG9yZSBhbmQgdGFza01lc3NhZ2VRdWV1ZSBhcmUgbm90IGNvbmZpZ3VyZWQiKTtjb25zdCByPXRoaXMuX29wdGlvbnM/Lm1heFRhc2tRdWV1ZVNpemU7YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5lbnF1ZXVlKHQsbixvLHIpfWFzeW5jIF9jbGVhclRhc2tRdWV1ZSh0LG4pe2lmKHRoaXMuX3Rhc2tNZXNzYWdlUXVldWUpe2NvbnN0IG89YXdhaXQgdGhpcy5fdGFza01lc3NhZ2VRdWV1ZS5kZXF1ZXVlQWxsKHQsbik7Zm9yKGNvbnN0IHIgb2YgbylpZihyLnR5cGU9PT0icmVxdWVzdCImJk5jKHIubWVzc2FnZSkpe2NvbnN0IHM9ci5tZXNzYWdlLmlkLGk9dGhpcy5fcmVxdWVzdFJlc29sdmVycy5nZXQocyk7aT8oaShuZXcgWihqLkludGVybmFsRXJyb3IsIlRhc2sgY2FuY2VsbGVkIG9yIGNvbXBsZXRlZCIpKSx0aGlzLl9yZXF1ZXN0UmVzb2x2ZXJzLmRlbGV0ZShzKSk6dGhpcy5fb25lcnJvcihuZXcgRXJyb3IoYFJlc29sdmVyIG1pc3NpbmcgZm9yIHJlcXVlc3QgJHtzfSBkdXJpbmcgdGFzayAke3R9IGNsZWFudXBgKSl9fX1hc3luYyBfd2FpdEZvclRhc2tVcGRhdGUodCxuKXtsZXQgbz10aGlzLl9vcHRpb25zPy5kZWZhdWx0VGFza1BvbGxJbnRlcnZhbD8/MWUzO3RyeXtjb25zdCByPWF3YWl0IHRoaXMuX3Rhc2tTdG9yZT8uZ2V0VGFzayh0KTtyPy5wb2xsSW50ZXJ2YWwmJihvPXIucG9sbEludGVydmFsKX1jYXRjaHt9cmV0dXJuIG5ldyBQcm9taXNlKChyLHMpPT57aWYobi5hYm9ydGVkKXtzKG5ldyBaKGouSW52YWxpZFJlcXVlc3QsIlJlcXVlc3QgY2FuY2VsbGVkIikpO3JldHVybn1jb25zdCBpPXNldFRpbWVvdXQocixvKTtuLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IiwoKT0+e2NsZWFyVGltZW91dChpKSxzKG5ldyBaKGouSW52YWxpZFJlcXVlc3QsIlJlcXVlc3QgY2FuY2VsbGVkIikpfSx7b25jZTohMH0pfSl9cmVxdWVzdFRhc2tTdG9yZSh0LG4pe2NvbnN0IG89dGhpcy5fdGFza1N0b3JlO2lmKCFvKXRocm93IG5ldyBFcnJvcigiTm8gdGFzayBzdG9yZSBjb25maWd1cmVkIik7cmV0dXJue2NyZWF0ZVRhc2s6YXN5bmMgcj0+e2lmKCF0KXRocm93IG5ldyBFcnJvcigiTm8gcmVxdWVzdCBwcm92aWRlZCIpO3JldHVybiBhd2FpdCBvLmNyZWF0ZVRhc2socix0LmlkLHttZXRob2Q6dC5tZXRob2QscGFyYW1zOnQucGFyYW1zfSxuKX0sZ2V0VGFzazphc3luYyByPT57Y29uc3Qgcz1hd2FpdCBvLmdldFRhc2socixuKTtpZighcyl0aHJvdyBuZXcgWihqLkludmFsaWRQYXJhbXMsIkZhaWxlZCB0byByZXRyaWV2ZSB0YXNrOiBUYXNrIG5vdCBmb3VuZCIpO3JldHVybiBzfSxzdG9yZVRhc2tSZXN1bHQ6YXN5bmMocixzLGkpPT57YXdhaXQgby5zdG9yZVRhc2tSZXN1bHQocixzLGksbik7Y29uc3QgYT1hd2FpdCBvLmdldFRhc2socixuKTtpZihhKXtjb25zdCB1PVFuLnBhcnNlKHttZXRob2Q6Im5vdGlmaWNhdGlvbnMvdGFza3Mvc3RhdHVzIixwYXJhbXM6YX0pO2F3YWl0IHRoaXMubm90aWZpY2F0aW9uKHUpLE9lKGEuc3RhdHVzKSYmdGhpcy5fY2xlYW51cFRhc2tQcm9ncmVzc0hhbmRsZXIocil9fSxnZXRUYXNrUmVzdWx0OnI9Pm8uZ2V0VGFza1Jlc3VsdChyLG4pLHVwZGF0ZVRhc2tTdGF0dXM6YXN5bmMocixzLGkpPT57Y29uc3QgYT1hd2FpdCBvLmdldFRhc2socixuKTtpZighYSl0aHJvdyBuZXcgWihqLkludmFsaWRQYXJhbXMsYFRhc2sgIiR7cn0iIG5vdCBmb3VuZCAtIGl0IG1heSBoYXZlIGJlZW4gY2xlYW5lZCB1cGApO2lmKE9lKGEuc3RhdHVzKSl0aHJvdyBuZXcgWihqLkludmFsaWRQYXJhbXMsYENhbm5vdCB1cGRhdGUgdGFzayAiJHtyfSIgZnJvbSB0ZXJtaW5hbCBzdGF0dXMgIiR7YS5zdGF0dXN9IiB0byAiJHtzfSIuIFRlcm1pbmFsIHN0YXRlcyAoY29tcGxldGVkLCBmYWlsZWQsIGNhbmNlbGxlZCkgY2Fubm90IHRyYW5zaXRpb24gdG8gb3RoZXIgc3RhdGVzLmApO2F3YWl0IG8udXBkYXRlVGFza1N0YXR1cyhyLHMsaSxuKTtjb25zdCB1PWF3YWl0IG8uZ2V0VGFzayhyLG4pO2lmKHUpe2NvbnN0IGM9UW4ucGFyc2Uoe21ldGhvZDoibm90aWZpY2F0aW9ucy90YXNrcy9zdGF0dXMiLHBhcmFtczp1fSk7YXdhaXQgdGhpcy5ub3RpZmljYXRpb24oYyksT2UodS5zdGF0dXMpJiZ0aGlzLl9jbGVhbnVwVGFza1Byb2dyZXNzSGFuZGxlcihyKX19LGxpc3RUYXNrczpyPT5vLmxpc3RUYXNrcyhyLG4pfX19ZnVuY3Rpb24gRGMoZSl7cmV0dXJuIGUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCImJiFBcnJheS5pc0FycmF5KGUpfWZ1bmN0aW9uIER2KGUsdCl7Y29uc3Qgbj17Li4uZX07Zm9yKGNvbnN0IG8gaW4gdCl7Y29uc3Qgcj1vLHM9dFtyXTtpZihzPT09dm9pZCAwKWNvbnRpbnVlO2NvbnN0IGk9bltyXTtEYyhpKSYmRGMocyk/bltyXT17Li4uaSwuLi5zfTpuW3JdPXN9cmV0dXJuIG59KGU9PnR5cGVvZiByZXF1aXJlPCJ1Ij9yZXF1aXJlOnR5cGVvZiBQcm94eTwidSI/bmV3IFByb3h5KGUse2dldDoodCxuKT0+KHR5cGVvZiByZXF1aXJlPCJ1Ij9yZXF1aXJlOnQpW25dfSk6ZSkoZnVuY3Rpb24oZSl7aWYodHlwZW9mIHJlcXVpcmU8InUiKXJldHVybiByZXF1aXJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aHJvdyBFcnJvcignRHluYW1pYyByZXF1aXJlIG9mICInK2UrJyIgaXMgbm90IHN1cHBvcnRlZCcpfSk7Y2xhc3MgcXYgZXh0ZW5kcyBNdntfcmVnaXN0ZXJlZE1ldGhvZHM9bmV3IFNldDtfZXZlbnRTbG90cz1uZXcgTWFwO29uRXZlbnREaXNwYXRjaCh0LG4pe31fZW5zdXJlRXZlbnRTbG90KHQpe2xldCBuPXRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpO2lmKCFuKXtsZXQgbz10aGlzLmV2ZW50U2NoZW1hc1t0XTtpZighbyl0aHJvdyBFcnJvcihgVW5rbm93biBldmVudDogJHtTdHJpbmcodCl9YCk7bj17bGlzdGVuZXJzOltdfSx0aGlzLl9ldmVudFNsb3RzLnNldCh0LG4pO2xldCByPW8uc2hhcGUubWV0aG9kLnZhbHVlO3RoaXMuX3JlZ2lzdGVyZWRNZXRob2RzLmFkZChyKTtsZXQgcz1uO3N1cGVyLnNldE5vdGlmaWNhdGlvbkhhbmRsZXIobyxpPT57bGV0IGE9aS5wYXJhbXM7dGhpcy5vbkV2ZW50RGlzcGF0Y2godCxhKSxzLm9uSGFuZGxlcj8uKGEpO2ZvcihsZXQgdSBvZlsuLi5zLmxpc3RlbmVyc10pdShhKX0pfXJldHVybiBufXNldEV2ZW50SGFuZGxlcih0LG4pe2xldCBvPXRoaXMuX2Vuc3VyZUV2ZW50U2xvdCh0KTtvLm9uSGFuZGxlciYmbiYmY29uc29sZS53YXJuKGBbTUNQIEFwcHNdIG9uJHtTdHJpbmcodCl9IGhhbmRsZXIgcmVwbGFjZWQuIFVzZSBhZGRFdmVudExpc3RlbmVyKCIke1N0cmluZyh0KX0iLCDigKYpIHRvIGFkZCBtdWx0aXBsZSBsaXN0ZW5lcnMgd2l0aG91dCByZXBsYWNpbmcuYCksby5vbkhhbmRsZXI9bn1nZXRFdmVudEhhbmRsZXIodCl7cmV0dXJuIHRoaXMuX2V2ZW50U2xvdHMuZ2V0KHQpPy5vbkhhbmRsZXJ9YWRkRXZlbnRMaXN0ZW5lcih0LG4pe3RoaXMuX2Vuc3VyZUV2ZW50U2xvdCh0KS5saXN0ZW5lcnMucHVzaChuKX1yZW1vdmVFdmVudExpc3RlbmVyKHQsbil7bGV0IG89dGhpcy5fZXZlbnRTbG90cy5nZXQodCk7aWYoIW8pcmV0dXJuO2xldCByPW8ubGlzdGVuZXJzLmluZGV4T2Yobik7ciE9PS0xJiZvLmxpc3RlbmVycy5zcGxpY2UociwxKX1zZXRSZXF1ZXN0SGFuZGxlcj0odCxuKT0+e3RoaXMuX2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCwic2V0UmVxdWVzdEhhbmRsZXIiKSxzdXBlci5zZXRSZXF1ZXN0SGFuZGxlcih0LG4pfTtzZXROb3RpZmljYXRpb25IYW5kbGVyPSh0LG4pPT57dGhpcy5fYXNzZXJ0TWV0aG9kTm90UmVnaXN0ZXJlZCh0LCJzZXROb3RpZmljYXRpb25IYW5kbGVyIiksc3VwZXIuc2V0Tm90aWZpY2F0aW9uSGFuZGxlcih0LG4pfTt3YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKHQsbixvKXtuJiZvJiZjb25zb2xlLndhcm4oYFtNQ1AgQXBwc10gJHt0fSBoYW5kbGVyIHJlcGxhY2VkLiBQcmV2aW91cyBoYW5kbGVyIHdpbGwgbm8gbG9uZ2VyIGJlIGNhbGxlZC5gKX1yZXBsYWNlUmVxdWVzdEhhbmRsZXI9KHQsbik9PntsZXQgbz10LnNoYXBlLm1ldGhvZC52YWx1ZTt0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5hZGQobyksc3VwZXIuc2V0UmVxdWVzdEhhbmRsZXIodCxuKX07X2Fzc2VydE1ldGhvZE5vdFJlZ2lzdGVyZWQodCxuKXtsZXQgbz10LnNoYXBlLm1ldGhvZC52YWx1ZTtpZih0aGlzLl9yZWdpc3RlcmVkTWV0aG9kcy5oYXMobykpdGhyb3cgRXJyb3IoYEhhbmRsZXIgZm9yICIke299IiBhbHJlYWR5IHJlZ2lzdGVyZWQgKHZpYSAke259KS4gVXNlIGFkZEV2ZW50TGlzdGVuZXIoKSB0byBhdHRhY2ggbXVsdGlwbGUgbGlzdGVuZXJzLCBvciB0aGUgb24qIHNldHRlciBmb3IgcmVwbGFjZSBzZW1hbnRpY3MuYCk7dGhpcy5fcmVnaXN0ZXJlZE1ldGhvZHMuYWRkKG8pfX12YXIgTHY9IjIwMjYtMDEtMjYiLFV2PSJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQtcGFydGlhbCI7Y2xhc3MgSHZ7ZXZlbnRUYXJnZXQ7ZXZlbnRTb3VyY2U7bWVzc2FnZUxpc3RlbmVyO2NvbnN0cnVjdG9yKHQ9d2luZG93LnBhcmVudCxuKXt0aGlzLmV2ZW50VGFyZ2V0PXQsdGhpcy5ldmVudFNvdXJjZT1uLHRoaXMubWVzc2FnZUxpc3RlbmVyPW89PntpZihuJiZvLnNvdXJjZSE9PXRoaXMuZXZlbnRTb3VyY2Upe2NvbnNvbGUuZGVidWcoIklnbm9yaW5nIG1lc3NhZ2UgZnJvbSB1bmtub3duIHNvdXJjZSIsbyk7cmV0dXJufWxldCByPW9fLnNhZmVQYXJzZShvLmRhdGEpO3Iuc3VjY2Vzcz8oY29uc29sZS5kZWJ1ZygiUGFyc2VkIG1lc3NhZ2UiLHIuZGF0YSksdGhpcy5vbm1lc3NhZ2U/LihyLmRhdGEpKTpvLmRhdGE/Lmpzb25ycGMhPT0iMi4wIj9jb25zb2xlLmRlYnVnKCJJZ25vcmluZyBub24tSlNPTi1SUEMgbWVzc2FnZSIsci5lcnJvci5tZXNzYWdlLG8pOihjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gcGFyc2UgbWVzc2FnZSIsci5lcnJvci5tZXNzYWdlLG8pLHRoaXMub25lcnJvcj8uKEVycm9yKCJJbnZhbGlkIEpTT04tUlBDIG1lc3NhZ2UgcmVjZWl2ZWQ6ICIrci5lcnJvci5tZXNzYWdlKSkpfX1hc3luYyBzdGFydCgpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLm1lc3NhZ2VMaXN0ZW5lcil9YXN5bmMgc2VuZCh0LG4pe3QubWV0aG9kIT09VXYmJmNvbnNvbGUuZGVidWcoIlNlbmRpbmcgbWVzc2FnZSIsdCksdGhpcy5ldmVudFRhcmdldC5wb3N0TWVzc2FnZSh0LCIqIil9YXN5bmMgY2xvc2UoKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5tZXNzYWdlTGlzdGVuZXIpLHRoaXMub25jbG9zZT8uKCl9b25jbG9zZTtvbmVycm9yO29ubWVzc2FnZTtzZXNzaW9uSWQ7c2V0UHJvdG9jb2xWZXJzaW9ufXZhciBGdj14KFtmKCJsaWdodCIpLGYoImRhcmsiKV0pLmRlc2NyaWJlKCJDb2xvciB0aGVtZSBwcmVmZXJlbmNlIGZvciB0aGUgaG9zdCBlbnZpcm9ubWVudC4iKSxQdD14KFtmKCJpbmxpbmUiKSxmKCJmdWxsc2NyZWVuIiksZigicGlwIildKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlIGZvciBVSSBwcmVzZW50YXRpb24uIiksQnY9eChbZigiLS1jb2xvci1iYWNrZ3JvdW5kLXByaW1hcnkiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtc2Vjb25kYXJ5IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLXRlcnRpYXJ5IiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWludmVyc2UiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtZ2hvc3QiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtaW5mbyIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC1kYW5nZXIiKSxmKCItLWNvbG9yLWJhY2tncm91bmQtc3VjY2VzcyIpLGYoIi0tY29sb3ItYmFja2dyb3VuZC13YXJuaW5nIiksZigiLS1jb2xvci1iYWNrZ3JvdW5kLWRpc2FibGVkIiksZigiLS1jb2xvci10ZXh0LXByaW1hcnkiKSxmKCItLWNvbG9yLXRleHQtc2Vjb25kYXJ5IiksZigiLS1jb2xvci10ZXh0LXRlcnRpYXJ5IiksZigiLS1jb2xvci10ZXh0LWludmVyc2UiKSxmKCItLWNvbG9yLXRleHQtZ2hvc3QiKSxmKCItLWNvbG9yLXRleHQtaW5mbyIpLGYoIi0tY29sb3ItdGV4dC1kYW5nZXIiKSxmKCItLWNvbG9yLXRleHQtc3VjY2VzcyIpLGYoIi0tY29sb3ItdGV4dC13YXJuaW5nIiksZigiLS1jb2xvci10ZXh0LWRpc2FibGVkIiksZigiLS1jb2xvci1ib3JkZXItcHJpbWFyeSIpLGYoIi0tY29sb3ItYm9yZGVyLXNlY29uZGFyeSIpLGYoIi0tY29sb3ItYm9yZGVyLXRlcnRpYXJ5IiksZigiLS1jb2xvci1ib3JkZXItaW52ZXJzZSIpLGYoIi0tY29sb3ItYm9yZGVyLWdob3N0IiksZigiLS1jb2xvci1ib3JkZXItaW5mbyIpLGYoIi0tY29sb3ItYm9yZGVyLWRhbmdlciIpLGYoIi0tY29sb3ItYm9yZGVyLXN1Y2Nlc3MiKSxmKCItLWNvbG9yLWJvcmRlci13YXJuaW5nIiksZigiLS1jb2xvci1ib3JkZXItZGlzYWJsZWQiKSxmKCItLWNvbG9yLXJpbmctcHJpbWFyeSIpLGYoIi0tY29sb3ItcmluZy1zZWNvbmRhcnkiKSxmKCItLWNvbG9yLXJpbmctaW52ZXJzZSIpLGYoIi0tY29sb3ItcmluZy1pbmZvIiksZigiLS1jb2xvci1yaW5nLWRhbmdlciIpLGYoIi0tY29sb3ItcmluZy1zdWNjZXNzIiksZigiLS1jb2xvci1yaW5nLXdhcm5pbmciKSxmKCItLWZvbnQtc2FucyIpLGYoIi0tZm9udC1tb25vIiksZigiLS1mb250LXdlaWdodC1ub3JtYWwiKSxmKCItLWZvbnQtd2VpZ2h0LW1lZGl1bSIpLGYoIi0tZm9udC13ZWlnaHQtc2VtaWJvbGQiKSxmKCItLWZvbnQtd2VpZ2h0LWJvbGQiKSxmKCItLWZvbnQtdGV4dC14cy1zaXplIiksZigiLS1mb250LXRleHQtc20tc2l6ZSIpLGYoIi0tZm9udC10ZXh0LW1kLXNpemUiKSxmKCItLWZvbnQtdGV4dC1sZy1zaXplIiksZigiLS1mb250LWhlYWRpbmcteHMtc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLXNtLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy1tZC1zaXplIiksZigiLS1mb250LWhlYWRpbmctbGctc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLXhsLXNpemUiKSxmKCItLWZvbnQtaGVhZGluZy0yeGwtc2l6ZSIpLGYoIi0tZm9udC1oZWFkaW5nLTN4bC1zaXplIiksZigiLS1mb250LXRleHQteHMtbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtdGV4dC1zbS1saW5lLWhlaWdodCIpLGYoIi0tZm9udC10ZXh0LW1kLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LXRleHQtbGctbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy14cy1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLXNtLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctbWQtbGluZS1oZWlnaHQiKSxmKCItLWZvbnQtaGVhZGluZy1sZy1saW5lLWhlaWdodCIpLGYoIi0tZm9udC1oZWFkaW5nLXhsLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctMnhsLWxpbmUtaGVpZ2h0IiksZigiLS1mb250LWhlYWRpbmctM3hsLWxpbmUtaGVpZ2h0IiksZigiLS1ib3JkZXItcmFkaXVzLXhzIiksZigiLS1ib3JkZXItcmFkaXVzLXNtIiksZigiLS1ib3JkZXItcmFkaXVzLW1kIiksZigiLS1ib3JkZXItcmFkaXVzLWxnIiksZigiLS1ib3JkZXItcmFkaXVzLXhsIiksZigiLS1ib3JkZXItcmFkaXVzLWZ1bGwiKSxmKCItLWJvcmRlci13aWR0aC1yZWd1bGFyIiksZigiLS1zaGFkb3ctaGFpcmxpbmUiKSxmKCItLXNoYWRvdy1zbSIpLGYoIi0tc2hhZG93LW1kIiksZigiLS1zaGFkb3ctbGciKV0pLmRlc2NyaWJlKCJDU1MgdmFyaWFibGUga2V5cyBhdmFpbGFibGUgdG8gTUNQIGFwcHMgZm9yIHRoZW1pbmcuIiksVnY9RShCdi5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKSx4KFtwKCksR2UoKV0pLmRlc2NyaWJlKGBTdHlsZSB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgTUNQIGFwcHMuCgpJbmRpdmlkdWFsIHN0eWxlIGtleXMgYXJlIG9wdGlvbmFsIC0gaG9zdHMgbWF5IHByb3ZpZGUgYW55IHN1YnNldCBvZiB0aGVzZSB2YWx1ZXMuClZhbHVlcyBhcmUgc3RyaW5ncyBjb250YWluaW5nIENTUyB2YWx1ZXMgKGNvbG9ycywgc2l6ZXMsIGZvbnQgc3RhY2tzLCBldGMuKS4KCk5vdGU6IFRoaXMgdHlwZSB1c2VzIFxgUmVjb3JkPEssIHN0cmluZyB8IHVuZGVmaW5lZD5cYCByYXRoZXIgdGhhbiBcYFBhcnRpYWw8UmVjb3JkPEssIHN0cmluZz4+XGAKZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBab2Qgc2NoZW1hIGdlbmVyYXRpb24uIEJvdGggYXJlIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IGZvciB2YWxpZGF0aW9uLmApKS5kZXNjcmliZShgU3R5bGUgdmFyaWFibGVzIGZvciB0aGVtaW5nIE1DUCBhcHBzLgoKSW5kaXZpZHVhbCBzdHlsZSBrZXlzIGFyZSBvcHRpb25hbCAtIGhvc3RzIG1heSBwcm92aWRlIGFueSBzdWJzZXQgb2YgdGhlc2UgdmFsdWVzLgpWYWx1ZXMgYXJlIHN0cmluZ3MgY29udGFpbmluZyBDU1MgdmFsdWVzIChjb2xvcnMsIHNpemVzLCBmb250IHN0YWNrcywgZXRjLikuCgpOb3RlOiBUaGlzIHR5cGUgdXNlcyBcYFJlY29yZDxLLCBzdHJpbmcgfCB1bmRlZmluZWQ+XGAgcmF0aGVyIHRoYW4gXGBQYXJ0aWFsPFJlY29yZDxLLCBzdHJpbmc+PlxgCmZvciBjb21wYXRpYmlsaXR5IHdpdGggWm9kIHNjaGVtYSBnZW5lcmF0aW9uLiBCb3RoIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCBmb3IgdmFsaWRhdGlvbi5gKTttKHttZXRob2Q6ZigidWkvb3Blbi1saW5rIikscGFyYW1zOm0oe3VybDpwKCkuZGVzY3JpYmUoIlVSTCB0byBvcGVuIGluIHRoZSBob3N0J3MgYnJvd3NlciIpfSl9KTt2YXIgSnY9bSh7aXNFcnJvcjpPKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgaG9zdCBmYWlsZWQgdG8gb3BlbiB0aGUgVVJMIChlLmcuLCBkdWUgdG8gc2VjdXJpdHkgcG9saWN5KS4iKX0pLnBhc3N0aHJvdWdoKCksS3Y9bSh7aXNFcnJvcjpPKCkub3B0aW9uYWwoKS5kZXNjcmliZSgiVHJ1ZSBpZiB0aGUgZG93bmxvYWQgZmFpbGVkIChlLmcuLCB1c2VyIGNhbmNlbGxlZCBvciBob3N0IGRlbmllZCkuIil9KS5wYXNzdGhyb3VnaCgpLFd2PW0oe2lzRXJyb3I6TygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlRydWUgaWYgdGhlIGhvc3QgcmVqZWN0ZWQgb3IgZmFpbGVkIHRvIGRlbGl2ZXIgdGhlIG1lc3NhZ2UuIil9KS5wYXNzdGhyb3VnaCgpO20oe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3NhbmRib3gtcHJveHktcmVhZHkiKSxwYXJhbXM6bSh7fSl9KTt2YXIgdGM9bSh7Y29ubmVjdERvbWFpbnM6UyhwKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoYE9yaWdpbnMgZm9yIG5ldHdvcmsgcmVxdWVzdHMgKGZldGNoL1hIUi9XZWJTb2NrZXQpLgoKLSBNYXBzIHRvIENTUCBcYGNvbm5lY3Qtc3JjXGAgZGlyZWN0aXZlCi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmV0d29yayBjb25uZWN0aW9ucyAoc2VjdXJlIGRlZmF1bHQpYCkscmVzb3VyY2VEb21haW5zOlMocCgpKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJPcmlnaW5zIGZvciBzdGF0aWMgcmVzb3VyY2VzIChpbWFnZXMsIHNjcmlwdHMsIHN0eWxlc2hlZXRzLCBmb250cywgbWVkaWEpLlxuXG4tIE1hcHMgdG8gQ1NQIGBpbWctc3JjYCwgYHNjcmlwdC1zcmNgLCBgc3R5bGUtc3JjYCwgYGZvbnQtc3JjYCwgYG1lZGlhLXNyY2AgZGlyZWN0aXZlc1xuLSBXaWxkY2FyZCBzdWJkb21haW5zIHN1cHBvcnRlZDogYGh0dHBzOi8vKi5leGFtcGxlLmNvbWBcbi0gRW1wdHkgb3Igb21pdHRlZCDihpIgbm8gbmV0d29yayByZXNvdXJjZXMgKHNlY3VyZSBkZWZhdWx0KSIpLGZyYW1lRG9tYWluczpTKHAoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiT3JpZ2lucyBmb3IgbmVzdGVkIGlmcmFtZXMuXG5cbi0gTWFwcyB0byBDU1AgYGZyYW1lLXNyY2AgZGlyZWN0aXZlXG4tIEVtcHR5IG9yIG9taXR0ZWQg4oaSIG5vIG5lc3RlZCBpZnJhbWVzIGFsbG93ZWQgKGBmcmFtZS1zcmMgJ25vbmUnYCkiKSxiYXNlVXJpRG9tYWluczpTKHAoKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiQWxsb3dlZCBiYXNlIFVSSXMgZm9yIHRoZSBkb2N1bWVudC5cblxuLSBNYXBzIHRvIENTUCBgYmFzZS11cmlgIGRpcmVjdGl2ZVxuLSBFbXB0eSBvciBvbWl0dGVkIOKGkiBvbmx5IHNhbWUgb3JpZ2luIGFsbG93ZWQgKGBiYXNlLXVyaSAnc2VsZidgKSIpfSksbmM9bSh7Y2FtZXJhOm0oe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlJlcXVlc3QgY2FtZXJhIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgY2FtZXJhYCBmZWF0dXJlLiIpLG1pY3JvcGhvbmU6bSh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBtaWNyb3Bob25lIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgbWljcm9waG9uZWAgZmVhdHVyZS4iKSxnZW9sb2NhdGlvbjptKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJSZXF1ZXN0IGdlb2xvY2F0aW9uIGFjY2Vzcy5cblxuTWFwcyB0byBQZXJtaXNzaW9uIFBvbGljeSBgZ2VvbG9jYXRpb25gIGZlYXR1cmUuIiksY2xpcGJvYXJkV3JpdGU6bSh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUmVxdWVzdCBjbGlwYm9hcmQgd3JpdGUgYWNjZXNzLlxuXG5NYXBzIHRvIFBlcm1pc3Npb24gUG9saWN5IGBjbGlwYm9hcmQtd3JpdGVgIGZlYXR1cmUuIil9KTttKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiKSxwYXJhbXM6bSh7d2lkdGg6VCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk5ldyB3aWR0aCBpbiBwaXhlbHMuIiksaGVpZ2h0OlQoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJOZXcgaGVpZ2h0IGluIHBpeGVscy4iKX0pfSk7dmFyIEd2PW0oe21ldGhvZDpmKCJ1aS9ub3RpZmljYXRpb25zL3Rvb2wtaW5wdXQiKSxwYXJhbXM6bSh7YXJndW1lbnRzOkUocCgpLEMoKS5kZXNjcmliZSgiQ29tcGxldGUgdG9vbCBjYWxsIGFyZ3VtZW50cyBhcyBrZXktdmFsdWUgcGFpcnMuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNvbXBsZXRlIHRvb2wgY2FsbCBhcmd1bWVudHMgYXMga2V5LXZhbHVlIHBhaXJzLiIpfSl9KSxRdj1tKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy90b29sLWlucHV0LXBhcnRpYWwiKSxwYXJhbXM6bSh7YXJndW1lbnRzOkUocCgpLEMoKS5kZXNjcmliZSgiUGFydGlhbCB0b29sIGNhbGwgYXJndW1lbnRzIChpbmNvbXBsZXRlLCBtYXkgY2hhbmdlKS4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiUGFydGlhbCB0b29sIGNhbGwgYXJndW1lbnRzIChpbmNvbXBsZXRlLCBtYXkgY2hhbmdlKS4iKX0pfSksWXY9bSh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1jYW5jZWxsZWQiKSxwYXJhbXM6bSh7cmVhc29uOnAoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCdPcHRpb25hbCByZWFzb24gZm9yIHRoZSBjYW5jZWxsYXRpb24gKGUuZy4sICJ1c2VyIGFjdGlvbiIsICJ0aW1lb3V0IikuJyl9KX0pLFh2PW0oe2ZvbnRzOnAoKS5vcHRpb25hbCgpfSksZWI9bSh7dmFyaWFibGVzOlZ2Lm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUyB2YXJpYWJsZXMgZm9yIHRoZW1pbmcgdGhlIGFwcC4iKSxjc3M6WHYub3B0aW9uYWwoKS5kZXNjcmliZSgiQ1NTIGJsb2NrcyB0aGF0IGFwcHMgY2FuIGluamVjdC4iKX0pLHRiPW0oe21ldGhvZDpmKCJ1aS9yZXNvdXJjZS10ZWFyZG93biIpLHBhcmFtczptKHt9KX0pO0UocCgpLEMoKSk7dmFyIHFjPW0oe3RleHQ6bSh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyB0ZXh0IGNvbnRlbnQgYmxvY2tzLiIpLGltYWdlOm0oe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgaW1hZ2UgY29udGVudCBibG9ja3MuIiksYXVkaW86bSh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBhdWRpbyBjb250ZW50IGJsb2Nrcy4iKSxyZXNvdXJjZTptKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlIGNvbnRlbnQgYmxvY2tzLiIpLHJlc291cmNlTGluazptKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlc291cmNlIGxpbmsgY29udGVudCBibG9ja3MuIiksc3RydWN0dXJlZENvbnRlbnQ6bSh7fSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBzdHJ1Y3R1cmVkIGNvbnRlbnQuIil9KTttKHttZXRob2Q6ZigidWkvbm90aWZpY2F0aW9ucy9yZXF1ZXN0LXRlYXJkb3duIikscGFyYW1zOm0oe30pLm9wdGlvbmFsKCl9KTt2YXIgbmI9bSh7ZXhwZXJpbWVudGFsOkUocCgpLEUocCgpLGJuKCkpLmRlc2NyaWJlKCJFeHBlcmltZW50YWwgZmVhdHVyZXMga2V5ZWQgYnkgaWRlbnRpZmllci4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIiksb3BlbkxpbmtzOm0oe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgb3BlbmluZyBleHRlcm5hbCBVUkxzLiIpLGRvd25sb2FkRmlsZTptKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIGZpbGUgZG93bmxvYWRzIHZpYSB1aS9kb3dubG9hZC1maWxlLiIpLHNlcnZlclRvb2xzOm0oe2xpc3RDaGFuZ2VkOk8oKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHRvb2xzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBjYW4gcHJveHkgdG9vbCBjYWxscyB0byB0aGUgTUNQIHNlcnZlci4iKSxzZXJ2ZXJSZXNvdXJjZXM6bSh7bGlzdENoYW5nZWQ6TygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgcmVzb3VyY2VzL2xpc3RfY2hhbmdlZCBub3RpZmljYXRpb25zLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBjYW4gcHJveHkgcmVzb3VyY2UgcmVhZHMgdG8gdGhlIE1DUCBzZXJ2ZXIuIiksbG9nZ2luZzptKHt9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IGFjY2VwdHMgbG9nIG1lc3NhZ2VzLiIpLHNhbmRib3g6bSh7cGVybWlzc2lvbnM6bmMub3B0aW9uYWwoKS5kZXNjcmliZSgiUGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGUgaG9zdCAoY2FtZXJhLCBtaWNyb3Bob25lLCBnZW9sb2NhdGlvbikuIiksY3NwOnRjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUCBkb21haW5zIGFwcHJvdmVkIGJ5IHRoZSBob3N0LiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBjb25maWd1cmF0aW9uIGFwcGxpZWQgYnkgdGhlIGhvc3QuIiksdXBkYXRlTW9kZWxDb250ZXh0OnFjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYWNjZXB0cyBjb250ZXh0IHVwZGF0ZXMgKHVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0KSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgbW9kZWwncyBjb250ZXh0IGZvciBmdXR1cmUgdHVybnMuIiksbWVzc2FnZTpxYy5vcHRpb25hbCgpLmRlc2NyaWJlKCJIb3N0IHN1cHBvcnRzIHJlY2VpdmluZyBjb250ZW50IG1lc3NhZ2VzICh1aS9tZXNzYWdlKSBmcm9tIHRoZSB2aWV3LiIpLHNhbXBsaW5nOm0oe3Rvb2xzOm0oe30pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3Qgc3VwcG9ydHMgdG9vbCB1c2UgdmlhIGB0b29sc2AgYW5kIGB0b29sQ2hvaWNlYCBwYXJhbWV0ZXJzLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiSG9zdCBzdXBwb3J0cyBMTE0gc2FtcGxpbmcgKHNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UpIGZyb20gdGhlIHZpZXcuXG5NaXJyb3JzIHRoZSBNQ1AgYENsaWVudENhcGFiaWxpdGllcy5zYW1wbGluZ2Agc2hhcGUgc28gaG9zdHMgY2FuIHBhc3MgaXQgdGhyb3VnaC4iKX0pLG9iPW0oe2V4cGVyaW1lbnRhbDpFKHAoKSxFKHAoKSxibigpKS5kZXNjcmliZSgiRXhwZXJpbWVudGFsIGZlYXR1cmVzIGtleWVkIGJ5IGlkZW50aWZpZXIuIikpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkV4cGVyaW1lbnRhbCBmZWF0dXJlcyBrZXllZCBieSBpZGVudGlmaWVyLiIpLHRvb2xzOm0oe2xpc3RDaGFuZ2VkOk8oKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBcHAgc3VwcG9ydHMgdG9vbHMvbGlzdF9jaGFuZ2VkIG5vdGlmaWNhdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJBcHAgZXhwb3NlcyBNQ1Atc3R5bGUgdG9vbHMgdGhhdCB0aGUgaG9zdCBjYW4gY2FsbC4iKSxhdmFpbGFibGVEaXNwbGF5TW9kZXM6UyhQdCkub3B0aW9uYWwoKS5kZXNjcmliZSgiRGlzcGxheSBtb2RlcyB0aGUgYXBwIHN1cHBvcnRzLiIpfSk7bSh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvaW5pdGlhbGl6ZWQiKSxwYXJhbXM6bSh7fSkub3B0aW9uYWwoKX0pO20oe2NzcDp0Yy5vcHRpb25hbCgpLmRlc2NyaWJlKCJDb250ZW50IFNlY3VyaXR5IFBvbGljeSBjb25maWd1cmF0aW9uIGZvciBVSSByZXNvdXJjZXMuIikscGVybWlzc2lvbnM6bmMub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBwZXJtaXNzaW9ucyByZXF1ZXN0ZWQgYnkgdGhlIFVJIHJlc291cmNlLiIpLGRvbWFpbjpwKCkub3B0aW9uYWwoKS5kZXNjcmliZShgRGVkaWNhdGVkIG9yaWdpbiBmb3IgdmlldyBzYW5kYm94LgoKVXNlZnVsIHdoZW4gdmlld3MgbmVlZCBzdGFibGUsIGRlZGljYXRlZCBvcmlnaW5zIGZvciBPQXV0aCBjYWxsYmFja3MsIENPUlMgcG9saWNpZXMsIG9yIEFQSSBrZXkgYWxsb3dsaXN0cy4KCioqSG9zdC1kZXBlbmRlbnQ6KiogVGhlIGZvcm1hdCBhbmQgdmFsaWRhdGlvbiBydWxlcyBmb3IgdGhpcyBmaWVsZCBhcmUgZGV0ZXJtaW5lZCBieSBlYWNoIGhvc3QuIFNlcnZlcnMgTVVTVCBjb25zdWx0IGhvc3Qtc3BlY2lmaWMgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGV4cGVjdGVkIGRvbWFpbiBmb3JtYXQuIENvbW1vbiBwYXR0ZXJucyBpbmNsdWRlOgotIEhhc2gtYmFzZWQgc3ViZG9tYWlucyAoZS5nLiwgXGB7aGFzaH0uY2xhdWRlbWNwY29udGVudC5jb21cYCkKLSBVUkwtZGVyaXZlZCBzdWJkb21haW5zIChlLmcuLCBcYHd3dy1leGFtcGxlLWNvbS5vYWl1c2VyY29udGVudC5jb21cYCkKCklmIG9taXR0ZWQsIGhvc3QgdXNlcyBkZWZhdWx0IHNhbmRib3ggb3JpZ2luICh0eXBpY2FsbHkgcGVyLWNvbnZlcnNhdGlvbikuYCkscHJlZmVyc0JvcmRlcjpPKCkub3B0aW9uYWwoKS5kZXNjcmliZShgVmlzdWFsIGJvdW5kYXJ5IHByZWZlcmVuY2UgLSB0cnVlIGlmIHZpZXcgcHJlZmVycyBhIHZpc2libGUgYm9yZGVyLgoKQm9vbGVhbiByZXF1ZXN0aW5nIHdoZXRoZXIgYSB2aXNpYmxlIGJvcmRlciBhbmQgYmFja2dyb3VuZCBpcyBwcm92aWRlZCBieSB0aGUgaG9zdC4gU3BlY2lmeWluZyBhbiBleHBsaWNpdCB2YWx1ZSBmb3IgdGhpcyBpcyByZWNvbW1lbmRlZCBiZWNhdXNlIGhvc3RzJyBkZWZhdWx0cyBtYXkgdmFyeS4KCi0gXGB0cnVlXGA6IHJlcXVlc3QgdmlzaWJsZSBib3JkZXIgKyBiYWNrZ3JvdW5kCi0gXGBmYWxzZVxgOiByZXF1ZXN0IG5vIHZpc2libGUgYm9yZGVyICsgYmFja2dyb3VuZAotIG9taXR0ZWQ6IGhvc3QgZGVjaWRlcyBib3JkZXJgKX0pO20oe21ldGhvZDpmKCJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIpLHBhcmFtczptKHttb2RlOlB0LmRlc2NyaWJlKCJUaGUgZGlzcGxheSBtb2RlIGJlaW5nIHJlcXVlc3RlZC4iKX0pfSk7dmFyIHJiPW0oe21vZGU6UHQuZGVzY3JpYmUoIlRoZSBkaXNwbGF5IG1vZGUgdGhhdCB3YXMgYWN0dWFsbHkgc2V0LiBNYXkgZGlmZmVyIGZyb20gcmVxdWVzdGVkIGlmIG5vdCBzdXBwb3J0ZWQuIil9KS5wYXNzdGhyb3VnaCgpLHNiPXgoW2YoIm1vZGVsIiksZigiYXBwIildKS5kZXNjcmliZSgiVG9vbCB2aXNpYmlsaXR5IHNjb3BlIC0gd2hvIGNhbiBhY2Nlc3MgdGhlIHRvb2wuIik7bSh7cmVzb3VyY2VVcmk6cCgpLm9wdGlvbmFsKCksdmlzaWJpbGl0eTpTKHNiKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBXaG8gY2FuIGFjY2VzcyB0aGlzIHRvb2wuIERlZmF1bHQ6IFsibW9kZWwiLCAiYXBwIl0KLSAibW9kZWwiOiBUb29sIHZpc2libGUgdG8gYW5kIGNhbGxhYmxlIGJ5IHRoZSBhZ2VudAotICJhcHAiOiBUb29sIGNhbGxhYmxlIGJ5IHRoZSBhcHAgZnJvbSB0aGlzIHNlcnZlciBvbmx5YCksY3NwOk1lKCkub3B0aW9uYWwoKSxwZXJtaXNzaW9uczpNZSgpLm9wdGlvbmFsKCl9KTttKHttaW1lVHlwZXM6UyhwKCkpLm9wdGlvbmFsKCkuZGVzY3JpYmUoJ0FycmF5IG9mIHN1cHBvcnRlZCBNSU1FIHR5cGVzIGZvciBVSSByZXNvdXJjZXMuXG5NdXN0IGluY2x1ZGUgYCJ0ZXh0L2h0bWw7cHJvZmlsZT1tY3AtYXBwImAgZm9yIE1DUCBBcHBzIHN1cHBvcnQuJyl9KTttKHttZXRob2Q6ZigidWkvZG93bmxvYWQtZmlsZSIpLHBhcmFtczptKHtjb250ZW50czpTKHgoW2ZmLGhmXSkpLmRlc2NyaWJlKCJSZXNvdXJjZSBjb250ZW50cyB0byBkb3dubG9hZCDigJQgZW1iZWRkZWQgKGlubGluZSBkYXRhKSBvciBsaW5rZWQgKGhvc3QgZmV0Y2hlcykuIFVzZXMgc3RhbmRhcmQgTUNQIHJlc291cmNlIHR5cGVzLiIpfSl9KTttKHttZXRob2Q6ZigidWkvbWVzc2FnZSIpLHBhcmFtczptKHtyb2xlOmYoInVzZXIiKS5kZXNjcmliZSgnTWVzc2FnZSByb2xlLCBjdXJyZW50bHkgb25seSAidXNlciIgaXMgc3VwcG9ydGVkLicpLGNvbnRlbnQ6UyhDbikuZGVzY3JpYmUoIk1lc3NhZ2UgY29udGVudCBibG9ja3MgKHRleHQsIGltYWdlLCBldGMuKS4iKX0pfSk7bSh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvc2FuZGJveC1yZXNvdXJjZS1yZWFkeSIpLHBhcmFtczptKHtodG1sOnAoKS5kZXNjcmliZSgiSFRNTCBjb250ZW50IHRvIGxvYWQgaW50byB0aGUgaW5uZXIgaWZyYW1lLiIpLHNhbmRib3g6cCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk9wdGlvbmFsIG92ZXJyaWRlIGZvciB0aGUgaW5uZXIgaWZyYW1lJ3Mgc2FuZGJveCBhdHRyaWJ1dGUuIiksY3NwOnRjLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkNTUCBjb25maWd1cmF0aW9uIGZyb20gcmVzb3VyY2UgbWV0YWRhdGEuIikscGVybWlzc2lvbnM6bmMub3B0aW9uYWwoKS5kZXNjcmliZSgiU2FuZGJveCBwZXJtaXNzaW9ucyBmcm9tIHJlc291cmNlIG1ldGFkYXRhLiIpfSl9KTt2YXIgaWI9bSh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvdG9vbC1yZXN1bHQiKSxwYXJhbXM6YnIuZGVzY3JpYmUoIlN0YW5kYXJkIE1DUCB0b29sIGV4ZWN1dGlvbiByZXN1bHQuIil9KSx5Zj1tKHt0b29sSW5mbzptKHtpZDpQbi5vcHRpb25hbCgpLmRlc2NyaWJlKCJKU09OLVJQQyBpZCBvZiB0aGUgdG9vbHMvY2FsbCByZXF1ZXN0LiIpLHRvb2w6ZWMuZGVzY3JpYmUoIlRvb2wgZGVmaW5pdGlvbiBpbmNsdWRpbmcgbmFtZSwgaW5wdXRTY2hlbWEsIGV0Yy4iKX0pLm9wdGlvbmFsKCkuZGVzY3JpYmUoIk1ldGFkYXRhIG9mIHRoZSB0b29sIGNhbGwgdGhhdCBpbnN0YW50aWF0ZWQgdGhpcyBBcHAuIiksdGhlbWU6RnYub3B0aW9uYWwoKS5kZXNjcmliZSgiQ3VycmVudCBjb2xvciB0aGVtZSBwcmVmZXJlbmNlLiIpLHN0eWxlczplYi5vcHRpb25hbCgpLmRlc2NyaWJlKCJTdHlsZSBjb25maWd1cmF0aW9uIGZvciB0aGVtaW5nIHRoZSBhcHAuIiksZGlzcGxheU1vZGU6UHQub3B0aW9uYWwoKS5kZXNjcmliZSgiSG93IHRoZSBVSSBpcyBjdXJyZW50bHkgZGlzcGxheWVkLiIpLGF2YWlsYWJsZURpc3BsYXlNb2RlczpTKFB0KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEaXNwbGF5IG1vZGVzIHRoZSBob3N0IHN1cHBvcnRzLiIpLGNvbnRhaW5lckRpbWVuc2lvbnM6eChbbSh7aGVpZ2h0OlQoKS5kZXNjcmliZSgiRml4ZWQgY29udGFpbmVyIGhlaWdodCBpbiBwaXhlbHMuIil9KSxtKHttYXhIZWlnaHQ6eChbVCgpLEdlKCldKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNYXhpbXVtIGNvbnRhaW5lciBoZWlnaHQgaW4gcGl4ZWxzLiIpfSldKS5hbmQoeChbbSh7d2lkdGg6VCgpLmRlc2NyaWJlKCJGaXhlZCBjb250YWluZXIgd2lkdGggaW4gcGl4ZWxzLiIpfSksbSh7bWF4V2lkdGg6eChbVCgpLEdlKCldKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJNYXhpbXVtIGNvbnRhaW5lciB3aWR0aCBpbiBwaXhlbHMuIil9KV0pKS5vcHRpb25hbCgpLmRlc2NyaWJlKGBDb250YWluZXIgZGltZW5zaW9ucy4gUmVwcmVzZW50cyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgaWZyYW1lIG9yIG90aGVyCmNvbnRhaW5lciBob2xkaW5nIHRoZSBhcHAuIFNwZWNpZnkgZWl0aGVyIHdpZHRoIG9yIG1heFdpZHRoLCBhbmQgZWl0aGVyIGhlaWdodCBvciBtYXhIZWlnaHQuYCksbG9jYWxlOnAoKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJVc2VyJ3MgbGFuZ3VhZ2UgYW5kIHJlZ2lvbiBwcmVmZXJlbmNlIGluIEJDUCA0NyBmb3JtYXQuIiksdGltZVpvbmU6cCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIlVzZXIncyB0aW1lem9uZSBpbiBJQU5BIGZvcm1hdC4iKSx1c2VyQWdlbnQ6cCgpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIkhvc3QgYXBwbGljYXRpb24gaWRlbnRpZmllci4iKSxwbGF0Zm9ybTp4KFtmKCJ3ZWIiKSxmKCJkZXNrdG9wIiksZigibW9iaWxlIildKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJQbGF0Zm9ybSB0eXBlIGZvciByZXNwb25zaXZlIGRlc2lnbiBkZWNpc2lvbnMuIiksZGV2aWNlQ2FwYWJpbGl0aWVzOm0oe3RvdWNoOk8oKS5vcHRpb25hbCgpLmRlc2NyaWJlKCJXaGV0aGVyIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdG91Y2ggaW5wdXQuIiksaG92ZXI6TygpLm9wdGlvbmFsKCkuZGVzY3JpYmUoIldoZXRoZXIgdGhlIGRldmljZSBzdXBwb3J0cyBob3ZlciBpbnRlcmFjdGlvbnMuIil9KS5vcHRpb25hbCgpLmRlc2NyaWJlKCJEZXZpY2UgaW5wdXQgY2FwYWJpbGl0aWVzLiIpLHNhZmVBcmVhSW5zZXRzOm0oe3RvcDpUKCkuZGVzY3JpYmUoIlRvcCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpLHJpZ2h0OlQoKS5kZXNjcmliZSgiUmlnaHQgc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxib3R0b206VCgpLmRlc2NyaWJlKCJCb3R0b20gc2FmZSBhcmVhIGluc2V0IGluIHBpeGVscy4iKSxsZWZ0OlQoKS5kZXNjcmliZSgiTGVmdCBzYWZlIGFyZWEgaW5zZXQgaW4gcGl4ZWxzLiIpfSkub3B0aW9uYWwoKS5kZXNjcmliZSgiTW9iaWxlIHNhZmUgYXJlYSBib3VuZGFyaWVzIGluIHBpeGVscy4iKX0pLnBhc3N0aHJvdWdoKCksYWI9bSh7bWV0aG9kOmYoInVpL25vdGlmaWNhdGlvbnMvaG9zdC1jb250ZXh0LWNoYW5nZWQiKSxwYXJhbXM6eWYuZGVzY3JpYmUoIlBhcnRpYWwgY29udGV4dCB1cGRhdGUgY29udGFpbmluZyBvbmx5IGNoYW5nZWQgZmllbGRzLiIpfSk7bSh7bWV0aG9kOmYoInVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IikscGFyYW1zOm0oe2NvbnRlbnQ6UyhDbikub3B0aW9uYWwoKS5kZXNjcmliZSgiQ29udGV4dCBjb250ZW50IGJsb2NrcyAodGV4dCwgaW1hZ2UsIGV0Yy4pLiIpLHN0cnVjdHVyZWRDb250ZW50OkUocCgpLEMoKS5kZXNjcmliZSgiU3RydWN0dXJlZCBjb250ZW50IGZvciBtYWNoaW5lLXJlYWRhYmxlIGNvbnRleHQgZGF0YS4iKSkub3B0aW9uYWwoKS5kZXNjcmliZSgiU3RydWN0dXJlZCBjb250ZW50IGZvciBtYWNoaW5lLXJlYWRhYmxlIGNvbnRleHQgZGF0YS4iKX0pfSk7bSh7bWV0aG9kOmYoInVpL2luaXRpYWxpemUiKSxwYXJhbXM6bSh7YXBwSW5mbzpfci5kZXNjcmliZSgiQXBwIGlkZW50aWZpY2F0aW9uIChuYW1lIGFuZCB2ZXJzaW9uKS4iKSxhcHBDYXBhYmlsaXRpZXM6b2IuZGVzY3JpYmUoIkZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMgdGhpcyBhcHAgcHJvdmlkZXMuIikscHJvdG9jb2xWZXJzaW9uOnAoKS5kZXNjcmliZSgiUHJvdG9jb2wgdmVyc2lvbiB0aGlzIGFwcCBzdXBwb3J0cy4iKX0pfSk7dmFyIGNiPW0oe3Byb3RvY29sVmVyc2lvbjpwKCkuZGVzY3JpYmUoJ05lZ290aWF0ZWQgcHJvdG9jb2wgdmVyc2lvbiBzdHJpbmcgKGUuZy4sICIyMDI1LTExLTIxIikuJyksaG9zdEluZm86X3IuZGVzY3JpYmUoIkhvc3QgYXBwbGljYXRpb24gaWRlbnRpZmljYXRpb24gYW5kIHZlcnNpb24uIiksaG9zdENhcGFiaWxpdGllczpuYi5kZXNjcmliZSgiRmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllcyBwcm92aWRlZCBieSB0aGUgaG9zdC4iKSxob3N0Q29udGV4dDp5Zi5kZXNjcmliZSgiUmljaCBjb250ZXh0IGFib3V0IHRoZSBob3N0IGVudmlyb25tZW50LiIpfSkucGFzc3Rocm91Z2goKSx1Yj17dGFyZ2V0OiJkcmFmdC0yMDIwLTEyIn07YXN5bmMgZnVuY3Rpb24gTGMoZSx0KXtsZXQgbj1lWyJ+c3RhbmRhcmQiXTtpZihuLmpzb25TY2hlbWEpcmV0dXJuIG4uanNvblNjaGVtYVt0XSh1Yik7aWYobi52ZW5kb3I9PT0iem9kIil7bGV0e3o6b309YXdhaXQgamYoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PlFnKSx2b2lkIDAsaW1wb3J0Lm1ldGEudXJsKTtyZXR1cm4gby50b0pTT05TY2hlbWEoZSx7aW86dH0pfXRocm93IEVycm9yKGBTY2hlbWEgKHZlbmRvcjogJHtuLnZlbmRvcn0pIGRvZXMgbm90IGltcGxlbWVudCBTdGFuZGFyZCBKU09OIFNjaGVtYSAofnN0YW5kYXJkLmpzb25TY2hlbWEpLiBVc2UgYSBsaWJyYXJ5IHRoYXQgZG9lcyAoem9kIHY0LCBBcmtUeXBlLCBWYWxpYm90KSBvciB3cmFwIHlvdXIgc2NoZW1hIGFjY29yZGluZ2x5LmApfWFzeW5jIGZ1bmN0aW9uIFVjKGUsdCxuPSIiKXtsZXQgbz1hd2FpdCBlWyJ+c3RhbmRhcmQiXS52YWxpZGF0ZSh0KTtpZihvLmlzc3Vlcyl7bGV0IHI9by5pc3N1ZXMubWFwKHM9PntsZXQgaT1zLnBhdGg/Lm1hcChhPT50eXBlb2YgYT09Im9iamVjdCI/YS5rZXk6YSkuam9pbigiLiIpO3JldHVybiBpP2Ake2l9OiAke3MubWVzc2FnZX1gOnMubWVzc2FnZX0pLmpvaW4oIjsgIik7dGhyb3cgRXJyb3IobityKX1yZXR1cm4gby52YWx1ZX1mdW5jdGlvbiBsYihlKXtsZXQgdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7dC5zZXRBdHRyaWJ1dGUoImRhdGEtdGhlbWUiLGUpLHQuc3R5bGUuY29sb3JTY2hlbWU9ZX1mdW5jdGlvbiBkYihlLHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KXtmb3IobGV0W24sb11vZiBPYmplY3QuZW50cmllcyhlKSlvIT09dm9pZCAwJiZ0LnN0eWxlLnNldFByb3BlcnR5KG4sbyl9ZnVuY3Rpb24gcGIoZSl7aWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIl9fbWNwLWhvc3QtZm9udHMiKSlyZXR1cm47bGV0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTt0LmlkPSJfX21jcC1ob3N0LWZvbnRzIix0LnRleHRDb250ZW50PWUsZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0KX1jbGFzcyBvYyBleHRlbmRzIHF2e19hcHBJbmZvO19jYXBhYmlsaXRpZXM7b3B0aW9ucztfaG9zdENhcGFiaWxpdGllcztfaG9zdEluZm87X2hvc3RDb250ZXh0O19yZWdpc3RlcmVkVG9vbHM9e307X2luaXRpYWxpemVkU2VudD0hMTtfYXNzZXJ0SW5pdGlhbGl6ZWQodCl7aWYodGhpcy5faW5pdGlhbGl6ZWRTZW50KXJldHVybjtsZXQgbj1gW2V4dC1hcHBzXSBBcHAuJHt0fSgpIGNhbGxlZCBiZWZvcmUgY29ubmVjdCgpIGNvbXBsZXRlZCB0aGUgdWkvaW5pdGlhbGl6ZSBoYW5kc2hha2UuIEF3YWl0IGFwcC5jb25uZWN0KCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QsIG9yIG1vdmUgZGF0YSBsb2FkaW5nIHRvIGFuIG9udG9vbHJlc3VsdCBoYW5kbGVyLmA7aWYodGhpcy5vcHRpb25zPy5zdHJpY3QpdGhyb3cgRXJyb3Iobik7Y29uc29sZS53YXJuKGAke259LiBUaGlzIHdpbGwgdGhyb3cgaW4gYSBmdXR1cmUgcmVsZWFzZS5gKX1ldmVudFNjaGVtYXM9e3Rvb2xpbnB1dDpHdix0b29saW5wdXRwYXJ0aWFsOlF2LHRvb2xyZXN1bHQ6aWIsdG9vbGNhbmNlbGxlZDpZdixob3N0Y29udGV4dGNoYW5nZWQ6YWJ9O3N0YXRpYyBPTkVfU0hPVF9FVkVOVFM9bmV3IFNldChbInRvb2xpbnB1dCIsInRvb2xpbnB1dHBhcnRpYWwiLCJ0b29scmVzdWx0IiwidG9vbGNhbmNlbGxlZCJdKTtfZXZlckhhZExpc3RlbmVyPW5ldyBTZXQ7X2Fzc2VydEhhbmRsZXJUaW1pbmcodCl7aWYoIW9jLk9ORV9TSE9UX0VWRU5UUy5oYXModCl8fHRoaXMuX2V2ZXJIYWRMaXN0ZW5lci5oYXModCl8fCh0aGlzLl9ldmVySGFkTGlzdGVuZXIuYWRkKHQpLCF0aGlzLl9pbml0aWFsaXplZFNlbnQpKXJldHVybjtsZXQgbj1gW2V4dC1hcHBzXSAiJHtTdHJpbmcodCl9IiBoYW5kbGVyIHJlZ2lzdGVyZWQgYWZ0ZXIgY29ubmVjdCgpIGNvbXBsZXRlZCB0aGUgdWkvaW5pdGlhbGl6ZSBoYW5kc2hha2UuIFRoZSBob3N0IG1heSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIG5vdGlmaWNhdGlvbi4gUmVnaXN0ZXIgaGFuZGxlcnMgYmVmb3JlIGNhbGxpbmcgYXBwLmNvbm5lY3QoKS5gO2lmKHRoaXMub3B0aW9ucz8uc3RyaWN0KXRocm93IEVycm9yKG4pO2NvbnNvbGUud2FybihuKX1zZXRFdmVudEhhbmRsZXIodCxuKXtuJiZ0aGlzLl9hc3NlcnRIYW5kbGVyVGltaW5nKHQpLHN1cGVyLnNldEV2ZW50SGFuZGxlcih0LG4pfWFkZEV2ZW50TGlzdGVuZXIodCxuKXt0aGlzLl9hc3NlcnRIYW5kbGVyVGltaW5nKHQpLHN1cGVyLmFkZEV2ZW50TGlzdGVuZXIodCxuKX1vbkV2ZW50RGlzcGF0Y2godCxuKXt0PT09Imhvc3Rjb250ZXh0Y2hhbmdlZCImJih0aGlzLl9ob3N0Q29udGV4dD17Li4udGhpcy5faG9zdENvbnRleHQsLi4ubn0pfWNvbnN0cnVjdG9yKHQsbj17fSxvPXthdXRvUmVzaXplOiEwfSl7c3VwZXIobyksdGhpcy5fYXBwSW5mbz10LHRoaXMuX2NhcGFiaWxpdGllcz1uLHRoaXMub3B0aW9ucz1vLG8uYWxsb3dVbnNhZmVFdmFsfHxWKHtqaXRsZXNzOiEwfSksdGhpcy5zZXRSZXF1ZXN0SGFuZGxlcih2cixyPT4oY29uc29sZS5sb2coIlJlY2VpdmVkIHBpbmc6IixyLnBhcmFtcykse30pKSx0aGlzLnNldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIix2b2lkIDApfXJlZ2lzdGVyQ2FwYWJpbGl0aWVzKHQpe2lmKHRoaXMudHJhbnNwb3J0KXRocm93IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgY2FwYWJpbGl0aWVzIGFmdGVyIHRyYW5zcG9ydCBpcyBlc3RhYmxpc2hlZCIpO3RoaXMuX2NhcGFiaWxpdGllcz1Edih0aGlzLl9jYXBhYmlsaXRpZXMsdCl9cmVnaXN0ZXJUb29sKHQsbixvKXtpZih0aGlzLl9yZWdpc3RlcmVkVG9vbHNbdF0pdGhyb3cgRXJyb3IoYFRvb2wgJHt0fSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWRgKTtsZXQgcj10aGlzLHM9KCk9PntyLl9pbml0aWFsaXplZFNlbnQmJnIuX2NhcGFiaWxpdGllcy50b29scz8ubGlzdENoYW5nZWQmJnIuc2VuZFRvb2xMaXN0Q2hhbmdlZCgpfSxpPW4uaW5wdXRTY2hlbWEhPT12b2lkIDAsYT17dGl0bGU6bi50aXRsZSxkZXNjcmlwdGlvbjpuLmRlc2NyaXB0aW9uLGlucHV0U2NoZW1hOm4uaW5wdXRTY2hlbWEsb3V0cHV0U2NoZW1hOm4ub3V0cHV0U2NoZW1hLGFubm90YXRpb25zOm4uYW5ub3RhdGlvbnMsX21ldGE6bi5fbWV0YSxlbmFibGVkOiEwLGVuYWJsZSgpe3RoaXMuZW5hYmxlZD0hMCxzKCl9LGRpc2FibGUoKXt0aGlzLmVuYWJsZWQ9ITEscygpfSx1cGRhdGUodSl7T2JqZWN0LmFzc2lnbih0aGlzLHUpLHMoKX0scmVtb3ZlKCl7ci5fcmVnaXN0ZXJlZFRvb2xzW3RdPT09YSYmKGRlbGV0ZSByLl9yZWdpc3RlcmVkVG9vbHNbdF0scygpKX0saGFuZGxlcjphc3luYyh1LGMpPT57aWYoIWEuZW5hYmxlZCl0aHJvdyBFcnJvcihgVG9vbCAke3R9IGlzIGRpc2FibGVkYCk7bGV0IGw7aWYoaSl7bGV0IGg9YS5pbnB1dFNjaGVtYSxnPWg/YXdhaXQgVWMoaCx1Pz97fSxgSW52YWxpZCBpbnB1dCBmb3IgdG9vbCAke3R9OiBgKTp1Pz97fTtsPWF3YWl0IG8oZyxjKX1lbHNlIGw9YXdhaXQgbyhjKTtyZXR1cm4gYS5vdXRwdXRTY2hlbWEmJiFsLmlzRXJyb3ImJihsLnN0cnVjdHVyZWRDb250ZW50PWF3YWl0IFVjKGEub3V0cHV0U2NoZW1hLGwuc3RydWN0dXJlZENvbnRlbnQsYEludmFsaWQgb3V0cHV0IGZvciB0b29sICR7dH06IGApKSxsfX07cmV0dXJuIHRoaXMuX3JlZ2lzdGVyZWRUb29sc1t0XT1hLCF0aGlzLl9jYXBhYmlsaXRpZXMudG9vbHMmJiF0aGlzLnRyYW5zcG9ydCYmdGhpcy5yZWdpc3RlckNhcGFiaWxpdGllcyh7dG9vbHM6e2xpc3RDaGFuZ2VkOiEwfX0pLHRoaXMuZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKSxzKCksYX1fdG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQ9ITE7ZW5zdXJlVG9vbEhhbmRsZXJzSW5pdGlhbGl6ZWQoKXt0aGlzLl90b29sSGFuZGxlcnNJbml0aWFsaXplZHx8KHRoaXMuX3Rvb2xIYW5kbGVyc0luaXRpYWxpemVkPSEwLHRoaXMub25jYWxsdG9vbD1hc3luYyh0LG4pPT57bGV0IG89dGhpcy5fcmVnaXN0ZXJlZFRvb2xzW3QubmFtZV07aWYoIW8pdGhyb3cgRXJyb3IoYFRvb2wgJHt0Lm5hbWV9IG5vdCBmb3VuZGApO3JldHVybiBvLmhhbmRsZXIodC5hcmd1bWVudHMsbil9LHRoaXMub25saXN0dG9vbHM9YXN5bmModCxuKT0+KHt0b29sczphd2FpdCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyh0aGlzLl9yZWdpc3RlcmVkVG9vbHMpLmZpbHRlcigoW28scl0pPT5yLmVuYWJsZWQpLm1hcChhc3luYyhbbyxyXSk9PntsZXQgcz17bmFtZTpvLHRpdGxlOnIudGl0bGUsZGVzY3JpcHRpb246ci5kZXNjcmlwdGlvbixpbnB1dFNjaGVtYTpyLmlucHV0U2NoZW1hP2F3YWl0IExjKHIuaW5wdXRTY2hlbWEsImlucHV0Iik6e3R5cGU6Im9iamVjdCIscHJvcGVydGllczp7fX19O3JldHVybiByLm91dHB1dFNjaGVtYSYmKHMub3V0cHV0U2NoZW1hPWF3YWl0IExjKHIub3V0cHV0U2NoZW1hLCJvdXRwdXQiKSksci5hbm5vdGF0aW9ucyYmKHMuYW5ub3RhdGlvbnM9ci5hbm5vdGF0aW9ucyksci5fbWV0YSYmKHMuX21ldGE9ci5fbWV0YSksc30pKX0pKX1hc3luYyBzZW5kVG9vbExpc3RDaGFuZ2VkKHQ9e30pe3RoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kVG9vbExpc3RDaGFuZ2VkIiksYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy90b29scy9saXN0X2NoYW5nZWQiLHBhcmFtczp0fSl9Z2V0SG9zdENhcGFiaWxpdGllcygpe3JldHVybiB0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzfWdldEhvc3RWZXJzaW9uKCl7cmV0dXJuIHRoaXMuX2hvc3RJbmZvfWdldEhvc3RDb250ZXh0KCl7cmV0dXJuIHRoaXMuX2hvc3RDb250ZXh0fWdldCBvbnRvb2xpbnB1dCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGlucHV0Iil9c2V0IG9udG9vbGlucHV0KHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXQiLHQpfWdldCBvbnRvb2xpbnB1dHBhcnRpYWwoKXtyZXR1cm4gdGhpcy5nZXRFdmVudEhhbmRsZXIoInRvb2xpbnB1dHBhcnRpYWwiKX1zZXQgb250b29saW5wdXRwYXJ0aWFsKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJ0b29saW5wdXRwYXJ0aWFsIix0KX1nZXQgb250b29scmVzdWx0KCl7cmV0dXJuIHRoaXMuZ2V0RXZlbnRIYW5kbGVyKCJ0b29scmVzdWx0Iil9c2V0IG9udG9vbHJlc3VsdCh0KXt0aGlzLnNldEV2ZW50SGFuZGxlcigidG9vbHJlc3VsdCIsdCl9Z2V0IG9udG9vbGNhbmNlbGxlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigidG9vbGNhbmNlbGxlZCIpfXNldCBvbnRvb2xjYW5jZWxsZWQodCl7dGhpcy5zZXRFdmVudEhhbmRsZXIoInRvb2xjYW5jZWxsZWQiLHQpfWdldCBvbmhvc3Rjb250ZXh0Y2hhbmdlZCgpe3JldHVybiB0aGlzLmdldEV2ZW50SGFuZGxlcigiaG9zdGNvbnRleHRjaGFuZ2VkIil9c2V0IG9uaG9zdGNvbnRleHRjaGFuZ2VkKHQpe3RoaXMuc2V0RXZlbnRIYW5kbGVyKCJob3N0Y29udGV4dGNoYW5nZWQiLHQpfV9vbnRlYXJkb3duO2dldCBvbnRlYXJkb3duKCl7cmV0dXJuIHRoaXMuX29udGVhcmRvd259c2V0IG9udGVhcmRvd24odCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbnRlYXJkb3duIix0aGlzLl9vbnRlYXJkb3duLHQpLHRoaXMuX29udGVhcmRvd249dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcih0YiwobixvKT0+e2lmKCF0aGlzLl9vbnRlYXJkb3duKXRocm93IEVycm9yKCJObyBvbnRlYXJkb3duIGhhbmRsZXIgc2V0Iik7cmV0dXJuIHRoaXMuX29udGVhcmRvd24obi5wYXJhbXMsbyl9KX1fb25jYWxsdG9vbDtnZXQgb25jYWxsdG9vbCgpe3JldHVybiB0aGlzLl9vbmNhbGx0b29sfXNldCBvbmNhbGx0b29sKHQpe3RoaXMud2FybklmUmVxdWVzdEhhbmRsZXJSZXBsYWNlZCgib25jYWxsdG9vbCIsdGhpcy5fb25jYWxsdG9vbCx0KSx0aGlzLl9vbmNhbGx0b29sPXQsdGhpcy5yZXBsYWNlUmVxdWVzdEhhbmRsZXIoZ2YsKG4sbyk9PntpZighdGhpcy5fb25jYWxsdG9vbCl0aHJvdyBFcnJvcigiTm8gb25jYWxsdG9vbCBoYW5kbGVyIHNldCIpO3JldHVybiB0aGlzLl9vbmNhbGx0b29sKG4ucGFyYW1zLG8pfSl9X29ubGlzdHRvb2xzO2dldCBvbmxpc3R0b29scygpe3JldHVybiB0aGlzLl9vbmxpc3R0b29sc31zZXQgb25saXN0dG9vbHModCl7dGhpcy53YXJuSWZSZXF1ZXN0SGFuZGxlclJlcGxhY2VkKCJvbmxpc3R0b29scyIsdGhpcy5fb25saXN0dG9vbHMsdCksdGhpcy5fb25saXN0dG9vbHM9dCx0aGlzLnJlcGxhY2VSZXF1ZXN0SGFuZGxlcihtZiwobixvKT0+e2lmKCF0aGlzLl9vbmxpc3R0b29scyl0aHJvdyBFcnJvcigiTm8gb25saXN0dG9vbHMgaGFuZGxlciBzZXQiKTtyZXR1cm4gdGhpcy5fb25saXN0dG9vbHMobi5wYXJhbXMsbyl9KX1hc3NlcnRDYXBhYmlsaXR5Rm9yTWV0aG9kKHQpe3N3aXRjaCh0KXtjYXNlInNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiOmlmKCF0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPy5zYW1wbGluZyl0aHJvdyBFcnJvcihgSG9zdCBkb2VzIG5vdCBzdXBwb3J0IHNhbXBsaW5nIChyZXF1aXJlZCBmb3IgJHt0fSlgKTticmVha319YXNzZXJ0UmVxdWVzdEhhbmRsZXJDYXBhYmlsaXR5KHQpe3N3aXRjaCh0KXtjYXNlInRvb2xzL2NhbGwiOmNhc2UidG9vbHMvbGlzdCI6aWYoIXRoaXMuX2NhcGFiaWxpdGllcy50b29scyl0aHJvdyBFcnJvcihgQ2xpZW50IGRvZXMgbm90IHN1cHBvcnQgdG9vbCBjYXBhYmlsaXR5IChyZXF1aXJlZCBmb3IgJHt0fSlgKTtyZXR1cm47Y2FzZSJwaW5nIjpjYXNlInVpL3Jlc291cmNlLXRlYXJkb3duIjpyZXR1cm47ZGVmYXVsdDp0aHJvdyBFcnJvcihgTm8gaGFuZGxlciBmb3IgbWV0aG9kICR7dH0gcmVnaXN0ZXJlZGApfX1hc3NlcnROb3RpZmljYXRpb25DYXBhYmlsaXR5KHQpe31hc3NlcnRUYXNrQ2FwYWJpbGl0eSh0KXt0aHJvdyBFcnJvcigiVGFza3MgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3NlcnRUYXNrSGFuZGxlckNhcGFiaWxpdHkodCl7dGhyb3cgRXJyb3IoIlRhc2sgaGFuZGxlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gTUNQIEFwcHMiKX1hc3luYyBjYWxsU2VydmVyVG9vbCh0LG4pe2lmKHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJjYWxsU2VydmVyVG9vbCIpLHR5cGVvZiB0PT0ic3RyaW5nIil0aHJvdyBFcnJvcihgY2FsbFNlcnZlclRvb2woKSBleHBlY3RzIGFuIG9iamVjdCBhcyBpdHMgZmlyc3QgYXJndW1lbnQsIGJ1dCByZWNlaXZlZCBhIHN0cmluZyAoIiR7dH0iKS4gRGlkIHlvdSBtZWFuOiBjYWxsU2VydmVyVG9vbCh7IG5hbWU6ICIke3R9IiwgYXJndW1lbnRzOiB7IC4uLiB9IH0pP2ApO3JldHVybiBhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoidG9vbHMvY2FsbCIscGFyYW1zOnR9LGJyLHtvbnByb2dyZXNzOigpPT57fSxyZXNldFRpbWVvdXRPblByb2dyZXNzOiEwLC4uLm59KX1hc3luYyByZWFkU2VydmVyUmVzb3VyY2UodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlYWRTZXJ2ZXJSZXNvdXJjZSIpLGF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJyZXNvdXJjZXMvcmVhZCIscGFyYW1zOnR9LHBmLG4pfWFzeW5jIGxpc3RTZXJ2ZXJSZXNvdXJjZXModCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoImxpc3RTZXJ2ZXJSZXNvdXJjZXMiKSxhd2FpdCB0aGlzLnJlcXVlc3Qoe21ldGhvZDoicmVzb3VyY2VzL2xpc3QiLHBhcmFtczp0fSxkZixuKX1hc3luYyBjcmVhdGVTYW1wbGluZ01lc3NhZ2UodCxuKXt0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiY3JlYXRlU2FtcGxpbmdNZXNzYWdlIik7bGV0IG89dC50b29scz9iZjp2ZjtyZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0KHttZXRob2Q6InNhbXBsaW5nL2NyZWF0ZU1lc3NhZ2UiLHBhcmFtczp0fSxvLG4pfXNlbmRNZXNzYWdlKHQsbil7cmV0dXJuIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKCJzZW5kTWVzc2FnZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9tZXNzYWdlIixwYXJhbXM6dH0sV3Ysbil9c2VuZExvZyh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoibm90aWZpY2F0aW9ucy9tZXNzYWdlIixwYXJhbXM6dH0pfXVwZGF0ZU1vZGVsQ29udGV4dCh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgidXBkYXRlTW9kZWxDb250ZXh0IiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL3VwZGF0ZS1tb2RlbC1jb250ZXh0IixwYXJhbXM6dH0sRGEsbil9b3BlbkxpbmsodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoIm9wZW5MaW5rIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL29wZW4tbGluayIscGFyYW1zOnR9LEp2LG4pfXNlbmRPcGVuTGluaz10aGlzLm9wZW5MaW5rO2Rvd25sb2FkRmlsZSh0LG4pe3JldHVybiB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgiZG93bmxvYWRGaWxlIiksdGhpcy5yZXF1ZXN0KHttZXRob2Q6InVpL2Rvd25sb2FkLWZpbGUiLHBhcmFtczp0fSxLdixuKX1yZXF1ZXN0VGVhcmRvd24odD17fSl7cmV0dXJuIHRoaXMubm90aWZpY2F0aW9uKHttZXRob2Q6InVpL25vdGlmaWNhdGlvbnMvcmVxdWVzdC10ZWFyZG93biIscGFyYW1zOnR9KX1yZXF1ZXN0RGlzcGxheU1vZGUodCxuKXtyZXR1cm4gdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoInJlcXVlc3REaXNwbGF5TW9kZSIpLHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9yZXF1ZXN0LWRpc3BsYXktbW9kZSIscGFyYW1zOnR9LHJiLG4pfXNlbmRTaXplQ2hhbmdlZCh0KXtyZXR1cm4gdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9zaXplLWNoYW5nZWQiLHBhcmFtczp0fSl9c2V0dXBTaXplQ2hhbmdlZE5vdGlmaWNhdGlvbnMoKXtsZXQgdD0hMSxuPTAsbz0wLHI9KCk9Pnt0fHwodD0hMCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0PSExO2xldCBpPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhPWkuc3R5bGUuaGVpZ2h0O2kuc3R5bGUuaGVpZ2h0PSJtYXgtY29udGVudCI7bGV0IHU9TWF0aC5jZWlsKGkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtpLnN0eWxlLmhlaWdodD1hO2xldCBjPU1hdGguY2VpbCh3aW5kb3cuaW5uZXJXaWR0aCk7KGMhPT1ufHx1IT09bykmJihuPWMsbz11LHRoaXMuc2VuZFNpemVDaGFuZ2VkKHt3aWR0aDpjLGhlaWdodDp1fSkpfSkpfTtyKCk7bGV0IHM9bmV3IFJlc2l6ZU9ic2VydmVyKHIpO3JldHVybiBzLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxzLm9ic2VydmUoZG9jdW1lbnQuYm9keSksKCk9PnMuZGlzY29ubmVjdCgpfWFzeW5jIGNvbm5lY3QodD1uZXcgSHYod2luZG93LnBhcmVudCx3aW5kb3cucGFyZW50KSxuKXtpZih0aGlzLnRyYW5zcG9ydCl0aHJvdyBFcnJvcigiQXBwIGlzIGFscmVhZHkgY29ubmVjdGVkLiBDYWxsIGNsb3NlKCkgYmVmb3JlIGNvbm5lY3RpbmcgYWdhaW4uIik7dGhpcy5faW5pdGlhbGl6ZWRTZW50PSExLGF3YWl0IHN1cGVyLmNvbm5lY3QodCk7dHJ5e2xldCBvPWF3YWl0IHRoaXMucmVxdWVzdCh7bWV0aG9kOiJ1aS9pbml0aWFsaXplIixwYXJhbXM6e2FwcENhcGFiaWxpdGllczp0aGlzLl9jYXBhYmlsaXRpZXMsYXBwSW5mbzp0aGlzLl9hcHBJbmZvLHByb3RvY29sVmVyc2lvbjpMdn19LGNiLG4pO2lmKG89PT12b2lkIDApdGhyb3cgRXJyb3IoYFNlcnZlciBzZW50IGludmFsaWQgaW5pdGlhbGl6ZSByZXN1bHQ6ICR7b31gKTt0aGlzLl9ob3N0Q2FwYWJpbGl0aWVzPW8uaG9zdENhcGFiaWxpdGllcyx0aGlzLl9ob3N0SW5mbz1vLmhvc3RJbmZvLHRoaXMuX2hvc3RDb250ZXh0PW8uaG9zdENvbnRleHQsYXdhaXQgdGhpcy5ub3RpZmljYXRpb24oe21ldGhvZDoidWkvbm90aWZpY2F0aW9ucy9pbml0aWFsaXplZCJ9KSx0aGlzLl9pbml0aWFsaXplZFNlbnQ9ITAsdGhpcy5vcHRpb25zPy5hdXRvUmVzaXplJiZ0aGlzLnNldHVwU2l6ZUNoYW5nZWROb3RpZmljYXRpb25zKCl9Y2F0Y2gobyl7dGhyb3cgdGhpcy5jbG9zZSgpLG99fX1sZXQgSGM9IiI7Y29uc3Qgd2Y9KGUsdCxuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk9PntpZighZSlyZXR1cm47KGUudGhlbWU9PT0ibGlnaHQifHxlLnRoZW1lPT09ImRhcmsiKSYmdC5hcHBseURvY3VtZW50VGhlbWUoZS50aGVtZSk7Y29uc3Qgbz1lLnN0eWxlcz8udmFyaWFibGVzO28mJnR5cGVvZiBvPT0ib2JqZWN0IiYmdC5hcHBseUhvc3RTdHlsZVZhcmlhYmxlcyhvKTtjb25zdCByPWUuc3R5bGVzPy5jc3M/LmZvbnRzO3R5cGVvZiByPT0ic3RyaW5nIiYmciYmciE9PUhjJiYodC5hcHBseUhvc3RGb250cyhyKSxIYz1yKTtjb25zdCBzPWUuc2FmZUFyZWFJbnNldHM7aWYocylmb3IoY29uc3QgaSBvZlsidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0Il0pe2NvbnN0IGE9TnVtYmVyKHNbaV0/PzApO24uc3R5bGUuc2V0UHJvcGVydHkoYC0taW5zZXQtJHtpfWAsYCR7TnVtYmVyLmlzRmluaXRlKGEpJiZhPjA/YTowfXB4YCl9fSxMZT1uZXcgb2Moe25hbWU6ImhvdGVsLXN0b3JlZnJvbnQiLHZlcnNpb246IjEuMC4wIn0se29wZW5MaW5rczp7fX0pLGtmPXthcHBseURvY3VtZW50VGhlbWU6bGIsYXBwbHlIb3N0U3R5bGVWYXJpYWJsZXM6ZGIsYXBwbHlIb3N0Rm9udHM6cGJ9LGdlPWU9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLHk9ZT0+U3RyaW5nKGU/PyIiKS5yZXBsYWNlKC9bJjw+IiddL2csdD0+dD09PSImIj8iJmFtcDsiOnQ9PT0iPCI/IiZsdDsiOnQ9PT0iPiI/IiZndDsiOnQ9PT0nIic/IiZxdW90OyI6IiYjMzk7Iik7bGV0IHFyPSIiLFRyPSIiLFNmPXt9LCRmPSExLHpmPSIiLEo9e2NoZWNrSW46IiIsY2hlY2tPdXQ6IiIsZ3Vlc3RzOjJ9LHh0PVtdLExyPSIiLFVyPSIiLHJjPTA7Y29uc3QgVGY9ZT0+e2NvbnN0IHQ9ZT8uWyJjdXJsZXNzL3RyaXAiXTt0JiYodHlwZW9mIHQudHJpcElkPT0ic3RyaW5nIiYmdC50cmlwSWQmJihVcj10LnRyaXBJZCkscmM9TnVtYmVyKHQuY291bnQ/PzApKX0sZmI9ZT0+VXI/ey4uLmUsdHJpcDpVcn06ZSxoYj1lPT5TZltlXT8/IiIsbWU9KGUsdD17fSk9Pntjb25zdCBuPWhiKGUpO3JldHVybiBuP0xlLmNhbGxTZXJ2ZXJUb29sKHtuYW1lOm4sYXJndW1lbnRzOmZiKHQpfSkudGhlbihvPT57VGYobz8uX21ldGEpO2NvbnN0IHI9bz8uc3RydWN0dXJlZENvbnRlbnQ7cmV0dXJuIHImJlJmKHIpLG1iKG8pLG99KTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYG5vIHRvb2wgZm9yICR7ZX1gKSl9LG1iPWU9Pntjb25zdCB0PShlPy5jb250ZW50Pz9bXSkuZmluZChuPT5uPy50eXBlPT09InRleHQiKT8udGV4dDshdHx8IUxlLmdldEhvc3RDYXBhYmlsaXRpZXMoKT8udXBkYXRlTW9kZWxDb250ZXh0fHxMZS51cGRhdGVNb2RlbENvbnRleHQoe2NvbnRlbnQ6W3t0eXBlOiJ0ZXh0Iix0ZXh0OlN0cmluZyh0KX1dfSkuY2F0Y2goKCk9Pnt9KX0sUGY9ZT0+e2xldCB0PTA7Zm9yKGxldCBuPTA7bjxlLmxlbmd0aDtuKz0xKXQ9KHQqMzErZS5jaGFyQ29kZUF0KG4pKSUzNjA7cmV0dXJuYC0tc2hvdC1hOmhzbCgke3R9IDQyJSAzNCUpOy0tc2hvdC1iOmhzbCgkeyh0KzM4KSUzNjB9IDQ2JSAyMiUpYH0seGY9ZT0+ZS5yZXBsYWNlKC9bXlxwe0x9XHB7Tn0gXS9ndSwiICIpLnNwbGl0KC9ccysvKS5maWx0ZXIoQm9vbGVhbikuc2xpY2UoMCwyKS5tYXAodD0+dFswXT8udG9VcHBlckNhc2UoKT8/IiIpLmpvaW4oIiIpLGdiPSc8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiBmaWxsPSJjdXJyZW50Q29sb3IiIGFyaWEtaGlkZGVuPSJ0cnVlIj48cGF0aCBkPSJNMTIgMy41bDIuNiA1LjMgNS45LjktNC4zIDQuMSAxIDUuOEwxMiAxNi45IDYuOCAxOS42bDEtNS44TDMuNSA5LjdsNS45LS45eiIvPjwvc3ZnPicsX2I9ZT0+ZSYmdHlwZW9mIGUudmFsdWU9PSJudW1iZXIiP2A8c3BhbiBjbGFzcz0icmF0ZSI+JHtnYn0ke3koZS52YWx1ZSl9PHNwYW4gY2xhc3M9InQtZnJvbSI+PHNtYWxsPiDCtyAke3koZS5jb3VudCl9PC9zbWFsbD48L3NwYW4+PC9zcGFuPmA6IiIsUmU9KCk9PiRmP2A8ZGl2IGNsYXNzPSJkZW1vIj48Yj5EZW1vPC9iPjxzcGFuPiR7eSh6Znx8IkRlbW9uc3RyYXRpb24gZGF0YTogdGhlc2UgcmF0ZXMgYW5kIHJvb20gY291bnRzIHdlcmUgbWFkZSB1cCBmb3IgdGhpcyBkZW1vLiIpfTwvc3Bhbj48L2Rpdj5gOiIiLEhyPWU9Pntjb25zdCB0PW5ldyBEYXRlKGAke2V9VDEyOjAwOjAwWmApO3JldHVybiBOdW1iZXIuaXNOYU4odC5nZXRUaW1lKCkpP2U6dC50b0xvY2FsZURhdGVTdHJpbmcoImVuLUdCIix7d2Vla2RheToic2hvcnQiLGRheToibnVtZXJpYyIsbW9udGg6InNob3J0Iix0aW1lWm9uZToiVVRDIn0pfSxGYz0oZSx0KT0+TWF0aC5yb3VuZCgoRGF0ZS5wYXJzZShgJHt0fVQxMjowMDowMFpgKS1EYXRlLnBhcnNlKGAke2V9VDEyOjAwOjAwWmApKS84NjRlNSksT249ZT0+ZT8uY2hlY2tJbiYmZT8uY2hlY2tPdXQ/YCR7SHIoZS5jaGVja0luKX0g4oCTICR7SHIoZS5jaGVja091dCl9IMK3ICR7RmMoZS5jaGVja0luLGUuY2hlY2tPdXQpfSAke0ZjKGUuY2hlY2tJbixlLmNoZWNrT3V0KT09PTE/Im5pZ2h0IjoibmlnaHRzIn1gOiIiLHZiPShlLHQsbik9Pntjb25zdCBvPXh0LmZpbmQocj0+ci5raW5kPT09InJvb20iJiZyLmhvdGVsSWQ9PT1lJiZyLnJvb21SZWY9PT10JiZyLnN0YXk/LmNoZWNrSW49PT1uPy5jaGVja0luJiZyLnN0YXk/LmNoZWNrT3V0PT09bj8uY2hlY2tPdXQpO3JldHVybiBOdW1iZXIobz8ucXVhbnRpdHk/PzApfSxiYj0oZSx0KT0+e2NvbnN0IG49eHQuZmluZChvPT5vLmtpbmQ9PT0iZXh0cmEiJiZvLmhvdGVsSWQ9PT1lJiZvLmV4dHJhUmVmPT09dCk7cmV0dXJuIE51bWJlcihuPy5xdWFudGl0eT8/MCl9LHNjPShlLHQsbik9PnQ+MD9gPHNwYW4gY2xhc3M9InN0ZXAiPgogICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgJHtlfSBkYXRhLW49IiR7dC0xfSIgYXJpYS1sYWJlbD0iT25lIGZld2VyICR7eShuKX0iPuKIkjwvYnV0dG9uPgogICAgICAgICA8c3BhbiBjbGFzcz0ibiI+JHt0fTwvc3Bhbj4KICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iICR7ZX0gZGF0YS1uPSIke3QrMX0iIGFyaWEtbGFiZWw9Ik9uZSBtb3JlICR7eShuKX0iPis8L2J1dHRvbj4KICAgICAgIDwvc3Bhbj5gOmA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImFkZCIgJHtlfSBkYXRhLW49IjEiIGFyaWEtbGFiZWw9IkFkZCAke3kobil9Ij4KICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxOCIgaGVpZ2h0PSIxOCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMi40IgogICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgYXJpYS1oaWRkZW49InRydWUiPjxwYXRoIGQ9Ik0xMiA1djE0TTUgMTJoMTQiLz48L3N2Zz4KICAgICAgIDwvYnV0dG9uPmAsSWY9ZT0+YAogIDxkaXYgY2xhc3M9InN0YXkiPgogICAgPGxhYmVsPkNoZWNrLWluPGlucHV0IHR5cGU9ImRhdGUiIGlkPSJjaSIgdmFsdWU9IiR7eShKLmNoZWNrSW4pfSIgbWluPSIke3koRnIoKSl9Ij48L2xhYmVsPgogICAgPGxhYmVsPkNoZWNrLW91dDxpbnB1dCB0eXBlPSJkYXRlIiBpZD0iY28iIHZhbHVlPSIke3koSi5jaGVja091dCl9IiBtaW49IiR7eShKLmNoZWNrSW58fEZyKCkpfSI+PC9sYWJlbD4KICAgIDxsYWJlbCBjbGFzcz0iZ3Vlc3RzIj5HdWVzdHM8c2VsZWN0IGlkPSJndSI+JHtbMSwyLDMsNCw1LDZdLm1hcCh0PT5gPG9wdGlvbiB2YWx1ZT0iJHt0fSIke3Q9PT1KLmd1ZXN0cz8iIHNlbGVjdGVkIjoiIn0+JHt0fTwvb3B0aW9uPmApLmpvaW4oIiIpfTwvc2VsZWN0PjwvbGFiZWw+CiAgICA8YnV0dG9uIGNsYXNzPSJnbyIgdHlwZT0iYnV0dG9uIiBkYXRhLXJvb21zPSIke3koZSl9Ij5TZWUgcm9vbXM8L2J1dHRvbj4KICA8L2Rpdj5gLEZyPSgpPT5uZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwxMCkseWI9ZT0+e2NvbnN0IHQ9ZS5ob3RlbHM/P1tdLG49Wy4uLm5ldyBTZXQodC5tYXAocj0+U3RyaW5nKHIuY2l0eSkpKV0sbz1yPT5gCiAgICA8ZGl2IGNsYXNzPSJjaXR5Z3JvdXAiPgogICAgICAke24ubGVuZ3RoPjE/YDxkaXYgY2xhc3M9ImNpdHluYW1lIj4ke3kocil9PC9kaXY+YDoiIn0KICAgICAgPGRpdiBjbGFzcz0idGlsZXMiPgogICAgICAgICR7dC5maWx0ZXIocz0+cy5jaXR5PT09cikubWFwKHM9PmAKICAgICAgICAgIDxidXR0b24gY2xhc3M9InRpbGUiIHR5cGU9ImJ1dHRvbiIgZGF0YS1ob3RlbD0iJHt5KHMuaWQpfSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LXNob3QiIHN0eWxlPSIke1BmKFN0cmluZyhzLmlkKSl9Ij4KICAgICAgICAgICAgICAke3MuaW1hZ2VVcmw/YDxpbWcgc3JjPSIke3kocy5pbWFnZVVybCl9IiBhbHQ9IiI+YDoiIn0KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1tYXJrIj4ke3koeGYoU3RyaW5nKHMubmFtZSkpKX08L3NwYW4+CiAgICAgICAgICAgICAgJHtzLmJyYW5kP2A8c3BhbiBjbGFzcz0idC1icmFuZCI+JHt5KHMuYnJhbmQpfTwvc3Bhbj5gOiIifQogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LWJvZHkiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LW5hbWUiPiR7eShzLm5hbWUpfTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC13aGVyZSI+JHt5KG4ubGVuZ3RoPjE/cy5hcmVhPz9zLmNpdHk6W3MuYXJlYSxzLmNpdHldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIikpfTwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idC1mb290Ij4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0LWZyb20iPiR7cy5mcm9tTmlnaHRseT9gJHt5KHMuZnJvbU5pZ2h0bHkpfTxzbWFsbD4gLyBuaWdodDwvc21hbGw+YDoiIn08L3NwYW4+CiAgICAgICAgICAgICAgICAke19iKHMucmF0aW5nKX0KICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgIDwvYnV0dG9uPmApLmpvaW4oIiIpfQogICAgICA8L2Rpdj4KICAgIDwvZGl2PmA7cmV0dXJuW1JlKCksYDxkaXY+JHtuLm1hcChvKS5qb2luKCIiKX08L2Rpdj5gXS5qb2luKCIiKX0sRWY9ZT0+YAogIDxkaXYgY2xhc3M9Imhlcm8iIHN0eWxlPSIke1BmKFN0cmluZyhlLmlkKSl9Ij4KICAgICR7ZS5pbWFnZVVybD9gPGltZyBzcmM9IiR7eShlLmltYWdlVXJsKX0iIGFsdD0iIj5gOiIifQogICAgPHNwYW4gY2xhc3M9InQtbWFyayI+JHt5KHhmKFN0cmluZyhlLm5hbWUpKSl9PC9zcGFuPgogICAgJHtlLmJyYW5kP2A8c3BhbiBjbGFzcz0idC1icmFuZCI+JHt5KGUuYnJhbmQpfTwvc3Bhbj5gOiIifQogIDwvZGl2PgogIDxkaXY+CiAgICA8ZGl2IGNsYXNzPSJoLW5hbWUiPiR7eShlLm5hbWUpfTwvZGl2PgogICAgPGRpdiBjbGFzcz0iaC13aGVyZSI+JHt5KFtlLmFyZWEsZS5jaXR5XS5maWx0ZXIoQm9vbGVhbikuam9pbigiIMK3ICIpKX0ke2UucmF0aW5nP2AgwrcgJHt5KGUucmF0aW5nLnZhbHVlKX3imIUgKCR7eShlLnJhdGluZy5jb3VudCl9KWA6IiJ9PC9kaXY+CiAgPC9kaXY+CiAgJHtlLnN1bW1hcnk/YDxkaXYgY2xhc3M9Imgtc3VtIj4ke3koZS5zdW1tYXJ5KX08L2Rpdj5gOiIifQogICR7KGUuYW1lbml0aWVzPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJjaGlwcyI+JHtlLmFtZW5pdGllcy5zbGljZSgwLDgpLm1hcCh0PT5gPHNwYW4gY2xhc3M9ImNoaXAiPiR7eSh0KX08L3NwYW4+YCkuam9pbigiIil9PC9kaXY+YDoiIn1gLHdiPShlLHQsbik9Pntjb25zdCBvPXZiKFN0cmluZyhlLmlkKSxTdHJpbmcodC5pZCksbikscj1bdC5iZWRzLHQudmlldyxgU2xlZXBzICR7dC5zbGVlcHN9YCx0LnNpemVTcW0/YCR7dC5zaXplU3FtfW3CsmA6IiJdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIik7cmV0dXJuYAogICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibmFtZSI+JHt5KHQubmFtZSl9PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWV0YSI+JHt5KHIpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImJhZGdlcyI+CiAgICAgICAgICAke3QuYnJlYWtmYXN0Pyc8c3BhbiBjbGFzcz0iYmFkZ2UgZ29vZCI+QnJlYWtmYXN0PC9zcGFuPic6IiJ9CiAgICAgICAgICAke3QucmVmdW5kYWJsZT9gPHNwYW4gY2xhc3M9ImJhZGdlIGdvb2QiPkZyZWUgY2FuY2VsbGF0aW9uJHt0LmZyZWVDYW5jZWxsYXRpb25VbnRpbD9gIHVudGlsICR7eShTdHJpbmcodC5mcmVlQ2FuY2VsbGF0aW9uVW50aWwpLnNsaWNlKDAsMTApKX1gOiIifTwvc3Bhbj5gOic8c3BhbiBjbGFzcz0iYmFkZ2Ugd2FybiI+Tm9uLXJlZnVuZGFibGU8L3NwYW4+J30KICAgICAgICAgICR7TnVtYmVyKHQucm9vbXNMZWZ0KTw9Mz9gPHNwYW4gY2xhc3M9ImJhZGdlIj4ke3kodC5yb29tc0xlZnQpfSBsZWZ0PC9zcGFuPmA6IiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHt5KHQuc3RheVRvdGFsKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPiR7eSh0Lm5pZ2h0bHkpfSAvIG5pZ2h0IMK3IGluY2wuIHRheDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke3NjKGBkYXRhLWFkZC1yb29tPSIke3kodC5pZCl9IiBkYXRhLWhvdGVsPSIke3koZS5pZCl9ImAsbyxTdHJpbmcodC5uYW1lKSl9PC9kaXY+CiAgICA8L2Rpdj5gfSxCYz1lPT57Y29uc3QgdD1lLmhvdGVsPz97fSxuPWUucm9vbXM/P1tdLG89ZS5zdGF5Pz9KO3JldHVybltSZSgpLEVmKHQpLElmKFN0cmluZyh0LmlkKSksZS5uZWVkc0RhdGVzPyc8ZGl2IGNsYXNzPSJlbXB0eSI+U2V0IHRoZSBuaWdodHMgYWJvdmUgYW5kIHRoZSByb29tcyBmb3IgdGhvc2UgZGF0ZXMgYXBwZWFyIGhlcmUsIHdpdGggd2hhdCB0aGUgd2hvbGUgc3RheSBjb3N0cy48L2Rpdj4nOmUubm9Sb29tcz9gPGRpdiBjbGFzcz0iZXJyIj4ke3koZS5ub1Jvb21zKX08L2Rpdj5gOmA8ZGl2IGNsYXNzPSJyb3dzIj4ke24ubWFwKHI9PndiKHQscixvKSkuam9pbigiIil9PC9kaXY+YCwoZS5leHRyYXM/P1tdKS5sZW5ndGg/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtZXh0cmFzPSIke3kodC5pZCl9Ij5BZGQtb25zIGFuZCBleHBlcmllbmNlczwvYnV0dG9uPmA6IiIsKGUucG9saWNpZXM/P1tdKS5sZW5ndGg/YDxkaXYgY2xhc3M9ImNoaXBzIj4ke2UucG9saWNpZXMubWFwKHI9PmA8YnV0dG9uIGNsYXNzPSJjaGlwIiB0eXBlPSJidXR0b24iIGRhdGEtcG9saWN5PSIke3koci50b3BpYyl9IiBkYXRhLWhvdGVsPSIke3kodC5pZCl9Ij4ke3koci50aXRsZSl9PC9idXR0b24+YCkuam9pbigiIil9PC9kaXY+YDoiIl0uam9pbigiIil9LGtiPWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS5leHRyYXM/P1tdO3JldHVybltSZSgpLGA8ZGl2PjxkaXYgY2xhc3M9ImgtbmFtZSI+JHt5KHQubmFtZSl9PC9kaXY+PGRpdiBjbGFzcz0iaC13aGVyZSI+V2hhdCBpdCBvZmZlcnMgYmVzaWRlIHRoZSByb29tPC9kaXY+PC9kaXY+YCxgPGRpdiBjbGFzcz0icm93cyI+JHtuLm1hcChvPT5gCiAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgPGRpdiBjbGFzcz0iYm9keSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke3koby5uYW1lKX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7eShvLmRlc2NyaXB0aW9uKX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXRvdGFsIj4ke3koby5wcmljZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwLXVuaXQiPnBlciAke3koby5wZXIpfTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+JHtzYyhgZGF0YS1hZGQtZXh0cmE9IiR7eShvLmlkKX0iIGRhdGEtaG90ZWw9IiR7eSh0LmlkKX0iYCxiYihTdHJpbmcodC5pZCksU3RyaW5nKG8uaWQpKSxTdHJpbmcoby5uYW1lKSl9PC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmAsYDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7eSh0LmlkKX0iPkJhY2sgdG8gJHt5KHQubmFtZSl9PC9idXR0b24+YF0uam9pbigiIil9LFNiPWU9Pntjb25zdCB0PWUua2luZD09PSJyb29tIj9gZGF0YS1hZGQtcm9vbT0iJHt5KGUucm9vbVJlZil9IiBkYXRhLWhvdGVsPSIke3koZS5ob3RlbElkKX0iIGRhdGEtY2k9IiR7eShlLnN0YXk/LmNoZWNrSW4pfSIgZGF0YS1jbz0iJHt5KGUuc3RheT8uY2hlY2tPdXQpfSIgZGF0YS1ndT0iJHt5KGUuc3RheT8uZ3Vlc3RzKX0iYDpgZGF0YS1hZGQtZXh0cmE9IiR7eShlLmV4dHJhUmVmPz9lLnRpdGxlKX0iIGRhdGEtaG90ZWw9IiR7eShlLmhvdGVsSWQpfSJgO3JldHVybmAKICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7eShlLnRpdGxlKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke3koZS5raW5kPT09InJvb20iP2Ake2UuaG90ZWxOYW1lfSDCtyAke09uKGUuc3RheSl9JHtlLnJlZnVuZGFibGU9PT0hMT8iIMK3IG5vbi1yZWZ1bmRhYmxlIjoiIn1gOmAke2UuaG90ZWxOYW1lfSR7ZS5kZXRhaWw/YCDCtyAke2UuZGV0YWlsfWA6IiJ9YCl9PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+CiAgICAgICAgPGRpdiBjbGFzcz0icC10b3RhbCI+JHt5KGUudG90YWwpfTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InAtdW5pdCI+JHt5KGUudW5pdCl9JHtlLmtpbmQ9PT0icm9vbSI/IiAvIG5pZ2h0IjoiIGVhY2gifTwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke3NjKHQsTnVtYmVyKGUucXVhbnRpdHk/PzEpLFN0cmluZyhlLnRpdGxlKSl9PC9kaXY+CiAgICA8L2Rpdj5gfSwkYj1lPT57Y29uc3QgdD1lLmxpbmVzPz9bXTtpZih0Lmxlbmd0aD09PTApcmV0dXJuW1JlKCksJzxkaXYgY2xhc3M9ImVtcHR5Ij5UaGUgdHJpcCBpcyBlbXB0eS4gUGljayBhIGhvdGVsLCBzZXQgdGhlIG5pZ2h0cywgYW5kIGFkZCBhIHJvb20uPC9kaXY+J10uam9pbigiIik7Y29uc3Qgbj1bLi4ubmV3IFNldCh0Lm1hcChvPT5TdHJpbmcoby5kYXk/PyIiKSkpXS5zb3J0KCk7cmV0dXJuW1JlKCksbi5tYXAobz0+YAogICAgICAke28/YDxkaXYgY2xhc3M9ImRheSI+JHt5KEhyKG8pKX08L2Rpdj5gOiIifQogICAgICA8ZGl2IGNsYXNzPSJyb3dzIj4ke3QuZmlsdGVyKHI9PlN0cmluZyhyLmRheT8/IiIpPT09bykubWFwKFNiKS5qb2luKCIiKX08L2Rpdj5gKS5qb2luKCIiKSwoZS5kcm9wcGVkPz9bXSkubGVuZ3RoP2A8ZGl2IGNsYXNzPSJlcnIiPiR7ZS5kcm9wcGVkLm1hcChvPT5gJHt5KG8udGl0bGUpfTogJHt5KG8ud2h5KX1gKS5qb2luKCI8YnI+Iil9PC9kaXY+YDoiIixgPGRpdiBjbGFzcz0ic3VtcyI+CiAgICAgICA8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlJvb21zIGFuZCBhZGQtb25zPC9zcGFuPjxzcGFuPiR7eShlLnN1YnRvdGFsKX08L3NwYW4+PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJzdW0iPjxzcGFuPlRheGVzIGFuZCBmZWVzPC9zcGFuPjxzcGFuPiR7eShlLnRheGVzQW5kRmVlcyl9PC9zcGFuPjwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0ic3VtIHRvdGFsIj48c3Bhbj5Ub3RhbDwvc3Bhbj48c3Bhbj4ke3koZS50b3RhbCl9PC9zcGFuPjwvZGl2PgogICAgIDwvZGl2PmAsJzxkaXYgY2xhc3M9ImZvb3QiPjxidXR0b24gY2xhc3M9ImdvIiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJhc2stYm9vayI+UmVxdWVzdCBib29raW5nPC9idXR0b24+PC9kaXY+JyxgPGRpdiBjbGFzcz0ibm90ZSI+Tm90aGluZyBpcyBjaGFyZ2VkIGhlcmUuIFJlcXVlc3RpbmcgYSBib29raW5nIGFza3MgJHt5KHFyKX0gdG8gaG9sZCB0aGUgcm9vbXMgYW5kIGdpdmVzIHlvdSBhIGNvbmZpcm1hdGlvbiBjb2RlLjwvZGl2PmAsemIoKV0uam9pbigiIil9LHpiPSgpPT5gCiAgPGRpdiBjbGFzcz0iZm9ybSIgaWQ9Imd1ZXN0IiBoaWRkZW4+CiAgICA8ZGl2IGNsYXNzPSJ0d28iPgogICAgICA8bGFiZWw+R3Vlc3QgbmFtZTxpbnB1dCBpZD0iZ25hbWUiIHR5cGU9InRleHQiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iQXMgaXQgc2hvdWxkIGFwcGVhciBvbiB0aGUgYm9va2luZyI+PC9sYWJlbD4KICAgICAgPGxhYmVsPkVtYWlsPGlucHV0IGlkPSJnbWFpbCIgdHlwZT0iZW1haWwiIGF1dG9jb21wbGV0ZT0ib2ZmIiBwbGFjZWhvbGRlcj0iRm9yIHRoZSBjb25maXJtYXRpb24iPjwvbGFiZWw+CiAgICA8L2Rpdj4KICAgIDxsYWJlbD5Bbnl0aGluZyB0aGUgaG90ZWwgc2hvdWxkIGtub3c8aW5wdXQgaWQ9Imdub3RlIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IkEgbGF0ZSBhcnJpdmFsLCBhIGhpZ2ggZmxvb3Ig4oCUIG9wdGlvbmFsIj48L2xhYmVsPgogICAgPGJ1dHRvbiBjbGFzcz0iZ28iIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2siPkhvbGQgdGhlc2Ugcm9vbXM8L2J1dHRvbj4KICAgIDxkaXYgY2xhc3M9Im5vdGUiPk5vIGNhcmQgaXMgdGFrZW4gYW5kIG5vdGhpbmcgaXMgY2hhcmdlZC4gWW91IHByZXNlbnQgYSBjYXJkIGF0IGNoZWNrLWluLjwvZGl2PgogIDwvZGl2PmAsVGI9ZT0+e2NvbnN0IHQ9ZS5ib29raW5nPz97fTtyZXR1cm5bUmUoKSxgPGRpdiBjbGFzcz0iY29uZiI+CiAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj5Db25maXJtYXRpb24gY29kZTwvZGl2PgogICAgICAgPGRpdiBjbGFzcz0iY29kZSI+JHt5KHQuY29uZmlybWF0aW9uQ29kZSl9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJ3aGVyZSI+JHt5KHQuaG90ZWxOYW1lKX08L2Rpdj4KICAgICAgIDxkaXYgY2xhc3M9IndoZW4iPiR7eShPbih0LnN0YXkpKX0gwrcgJHt5KHQuZ3Vlc3Q/Lm5hbWU/PyIiKX08L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJ1bnBhaWQiPgogICAgICAgPGI+Tm90aGluZyBoYXMgYmVlbiBjaGFyZ2VkLjwvYj4KICAgICAgIDxzcGFuPlRoZSByb29tcyBhcmUgaGVsZCB1bnRpbCAke3koU3RyaW5nKHQuaG9sZFVudGlsPz8iIikuc2xpY2UoMCwxNikucmVwbGFjZSgiVCIsIiAiKSl9IFVUQy4gQSBjYXJkIGlzIHByZXNlbnRlZCBhdCBjaGVjay1pbiwgbm90IGhlcmUuPC9zcGFuPgogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9Im1vbmV5LW91dCI+PHNwYW4+VG90YWwgZm9yIHRoZSBzdGF5PC9zcGFuPjxzcGFuPiR7eShlLnRvdGFsKX08L3NwYW4+PC9kaXY+YCxgPGRpdiBjbGFzcz0icm93cyI+JHsodC5xdW90ZT8ubGluZXM/P1tdKS5tYXAoUGIpLmpvaW4oIiIpfTwvZGl2PmAsYDxkaXYgY2xhc3M9ImZvb3QiPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1hY3Q9ImJvb2tpbmdzIj5NeSBib29raW5nczwvYnV0dG9uPgogICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gcXVpZXQiIHR5cGU9ImJ1dHRvbiIgZGF0YS1jYW5jZWw9IiR7eSh0LmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsIHRoaXMgYm9va2luZzwvYnV0dG9uPgogICAgIDwvZGl2PmBdLmpvaW4oIiIpfSxQYj1lPT5gCiAgPGRpdiBjbGFzcz0icm93Ij4KICAgIDxkaXYgY2xhc3M9ImJvZHkiPgogICAgICA8ZGl2IGNsYXNzPSJuYW1lIj4ke3koZS50aXRsZSl9PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9Im1ldGEiPiR7eShlLmtpbmQ9PT0icm9vbSI/T24oZS5zdGF5KTplLmRldGFpbD8/IiIpfTwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHt5KGUudG90YWwpfTwvZGl2PjwvZGl2PgogIDwvZGl2PmAseGI9e3JlcXVlc3RlZDoid2FybiIsY29uZmlybWVkOiJnb29kIixjYW5jZWxsZWQ6ImJhZCIsZXhwaXJlZDoiYmFkIn0sSWI9ZT0+e2NvbnN0IHQ9ZS5ib29raW5ncz8/W107cmV0dXJuIHQubGVuZ3RoPT09MD8nPGRpdiBjbGFzcz0iZW1wdHkiPk5vIGJvb2tpbmdzIGluIHRoaXMgY29udmVyc2F0aW9uIHlldC48L2Rpdj4nOltSZSgpLGA8ZGl2IGNsYXNzPSJyb3dzIj4ke3QubWFwKG49PmAKICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5hbWUiPiR7eShuLmhvdGVsTmFtZSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtZXRhIj4ke3kobi5jb25maXJtYXRpb25Db2RlKX0gwrcgJHt5KE9uKG4uc3RheSkpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iYmFkZ2VzIj48c3BhbiBjbGFzcz0iYmFkZ2UgJHt4YltTdHJpbmcobi5zdGF0dXMpXT8/IiJ9Ij4ke3kobi5zdGF0dXMpfTwvc3Bhbj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcmljZSI+PGRpdiBjbGFzcz0icC10b3RhbCI+JHt5KG4ucXVvdGU/LnRvdGFsPz8iIil9PC9kaXY+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj4ke24uc3RhdHVzPT09InJlcXVlc3RlZCJ8fG4uc3RhdHVzPT09ImNvbmZpcm1lZCI/YDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtY2FuY2VsPSIke3kobi5jb25maXJtYXRpb25Db2RlKX0iPkNhbmNlbDwvYnV0dG9uPmA6IiJ9PC9kaXY+CiAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmBdLmpvaW4oIiIpfSxWYz1lPT57Y29uc3QgdD1lLnZpZXc9PT0iY2FuY2VsbGVkIixuPWUuYm9va2luZz8/e307cmV0dXJuW2A8ZGl2IGNsYXNzPSJjb25mIj4KICAgICAgIDxkaXYgY2xhc3M9Im5vdGUiPiR7dD8iQ2FuY2VsbGVkIjoiQ2FuY2VsbGluZyJ9PC9kaXY+CiAgICAgICA8ZGl2IGNsYXNzPSJjb2RlIj4ke3kobi5jb25maXJtYXRpb25Db2RlKX08L2Rpdj4KICAgICA8L2Rpdj5gLGA8ZGl2IGNsYXNzPSJzdW1zIj4KICAgICAgIDxkaXYgY2xhc3M9InN1bSB0b3RhbCI+PHNwYW4+JHt0PyJUaGUgaG90ZWwgY2hhcmdlcyI6IkNhbmNlbGxpbmcgd291bGQgY29zdCJ9PC9zcGFuPjxzcGFuPiR7eShlLmZlZSl9PC9zcGFuPjwvZGl2PgogICAgIDwvZGl2PmAsYDxkaXYgY2xhc3M9Im5vdGUiPiR7eShlLnJ1bGUpfTwvZGl2PmAsdD8iIjplLmNhbmNlbGxhYmxlP2A8ZGl2IGNsYXNzPSJmb290Ij4KICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtYWN0PSJib29raW5ncyI+S2VlcCBpdDwvYnV0dG9uPgogICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZ28gZGFuZ2VyIiB0eXBlPSJidXR0b24iIGRhdGEtY29uZmlybS1jYW5jZWw9IiR7eShuLmNvbmZpcm1hdGlvbkNvZGUpfSI+Q2FuY2VsIHRoZSBib29raW5nPC9idXR0b24+CiAgICAgICAgICAgPC9kaXY+YDonPGRpdiBjbGFzcz0ibm90ZSI+VGhlcmUgaXMgbm90aGluZyBsZWZ0IHRvIGNhbmNlbCBvbiB0aGlzIGJvb2tpbmcuPC9kaXY+J10uam9pbigiIil9LFByPWU9Pntjb25zdCB0PWUuaG90ZWw/P3t9LG49ZS52aWV3PT09InBvbGljeSI/YDxoND4ke3koZS50aXRsZSl9PC9oND4ke3koZS50ZXh0KX1gOihlLnRvcGljcz8/W10pLm1hcChvPT5gPGg0PiR7eShvLnRpdGxlKX08L2g0PiR7eShvLnRleHQpfWApLmpvaW4oIiIpO3JldHVybltgPGRpdj48ZGl2IGNsYXNzPSJoLW5hbWUiPiR7eSh0Lm5hbWUpfTwvZGl2PjxkaXYgY2xhc3M9Imgtd2hlcmUiPldoYXQgdGhlIGhvdGVsIHB1Ymxpc2hlczwvZGl2PjwvZGl2PmAsZS52aWV3PT09InBvbGljeS1taXNzaW5nIj9gPGRpdiBjbGFzcz0iZW1wdHkiPiR7eSh0Lm5hbWUpfSBkb2VzIG5vdCBwdWJsaXNoIGFueXRoaW5nIGFib3V0IHRoYXQgaGVyZS48L2Rpdj5gOmA8ZGl2IGNsYXNzPSJwcm9zZSI+JHtufTwvZGl2PmAsYDxidXR0b24gY2xhc3M9ImdvIHF1aWV0IiB0eXBlPSJidXR0b24iIGRhdGEtaG90ZWw9IiR7eSh0LmlkKX0iPkJhY2sgdG8gJHt5KHQubmFtZSl9PC9idXR0b24+YF0uam9pbigiIil9LFJmPWU9PntpZighZXx8dHlwZW9mIGUhPSJvYmplY3QiKXJldHVybjtlLnRvb2xOYW1lcyYmKFNmPWUudG9vbE5hbWVzKSxlLmJyYW5kJiYocXI9U3RyaW5nKGUuYnJhbmQpKSxlLmxvZ29VcmwmJihUcj1TdHJpbmcoZS5sb2dvVXJsKSksdHlwZW9mIGUuZGVtbz09ImJvb2xlYW4iJiYoJGY9ZS5kZW1vKSxlLmRlbW9Ob3RlJiYoemY9U3RyaW5nKGUuZGVtb05vdGUpKSxlLnN0YXk/LmNoZWNrSW4mJihKPXtjaGVja0luOmUuc3RheS5jaGVja0luLGNoZWNrT3V0OmUuc3RheS5jaGVja091dCxndWVzdHM6ZS5zdGF5Lmd1ZXN0cz8/Mn0pLChlLnZpZXc9PT0idHJpcCJ8fGUudmlldz09PSJuZWVkcy1kYXRlcyIpJiYoeHQ9ZS5saW5lcz8/W10pLChlLnZpZXc9PT0iYm9va2luZyJ8fGUudmlldz09PSJlbXB0eS10cmlwIikmJih4dD1bXSxyYz0wKSxMcj1TdHJpbmcoZS52aWV3Pz8iIik7Y29uc3QgdD1nZSgiYnJhbmQiKTtUcj8odC5zcmM9VHIsdC5oaWRkZW49ITEsZ2UoInRpdGxlIikuaGlkZGVuPSEwKToodC5oaWRkZW49ITAsZ2UoInRpdGxlIikuaGlkZGVuPSExLGdlKCJ0aXRsZSIpLnRleHRDb250ZW50PXFyfHwiSG90ZWxzIiksZ2UoInN1YiIpLnRleHRDb250ZW50PVJiKGUpLFpiKCk7Y29uc3Qgbz17aG90ZWxzOnliLCJuby1ob3RlbHMiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPk5vdGhpbmcgbWF0Y2hlZC4gVHJ5IGEgY2l0eS48L2Rpdj4nLGhvdGVsOkJjLCJuby1yb29tcyI6QmMsImhvdGVsLW5vdC1mb3VuZCI6KCk9Pic8ZGl2IGNsYXNzPSJlbXB0eSI+VGhhdCBob3RlbCBpcyBub3QgaW4gdGhpcyBjb25uZWN0b3IuPC9kaXY+JyxleHRyYXM6a2IsdHJpcDokYiwibmVlZHMtZGF0ZXMiOkViLGJvb2tpbmc6VGIsImVtcHR5LXRyaXAiOigpPT4nPGRpdiBjbGFzcz0iZW1wdHkiPlRoZXJlIGlzIG5vdGhpbmcgaW4gdGhlIHRyaXAgeWV0LjwvZGl2PicsYm9va2luZ3M6SWIsImNhbmNlbGxhdGlvbi1wcmV2aWV3IjpWYyxjYW5jZWxsZWQ6VmMsImJvb2tpbmctbm90LWZvdW5kIjooKT0+JzxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBib29raW5nIGhlcmUgbWF0Y2hlcyB0aGF0IGNvZGUuPC9kaXY+Jyxwb2xpY3k6UHIscG9saWNpZXM6UHIsInBvbGljeS1taXNzaW5nIjpQcn1bTHJdO2dlKCJjb250ZW50IikuaW5uZXJIVE1MPW8/byhlKTpgPGRpdiBjbGFzcz0iZXJyIj4ke3koZS5lcnJvcj8/IlNvbWV0aGluZyBjYW1lIGJhY2sgdGhhdCB0aGlzIGNhcmQgZG9lcyBub3Qga25vdyBob3cgdG8gZHJhdy4iKX0ke2UuZGV0YWlsP2A8YnI+JHt5KGUuZGV0YWlsKX1gOiIifTwvZGl2PmB9LEViPWU9PltSZSgpLGUuaG90ZWw/RWYoZS5ob3RlbCk6IiIsYDxkaXYgY2xhc3M9ImVyciI+JHt5KGUud2h5Pz8iV2hpY2ggbmlnaHRzPyBBIHJvb20gbmVlZHMgYSBjaGVjay1pbiBhbmQgYSBjaGVjay1vdXQgZGF0ZS4iKX08L2Rpdj5gLElmKFN0cmluZyhlLmhvdGVsPy5pZD8/IiIpKV0uam9pbigiIiksUmI9ZT0+ZS52aWV3PT09ImhvdGVscyI/YCR7ZS50b3RhbD8/MH0gJHtOdW1iZXIoZS50b3RhbCk9PT0xPyJob3RlbCI6ImhvdGVscyJ9YDplLnZpZXc9PT0iaG90ZWwifHxlLnZpZXc9PT0ibm8tcm9vbXMiP09uKGUuc3RheSk6ZS52aWV3PT09InRyaXAiP2UudG90YWw/U3RyaW5nKGUudG90YWwpOiIiOmUudmlldz09PSJib29raW5ncyI/YCR7ZS5jb3VudD8/MH0gYm9va2luZyR7TnVtYmVyKGUuY291bnQpPT09MT8iIjoicyJ9YDoiIixaYj0oKT0+e2NvbnN0IGU9Z2UoImhlYWR0cmlwIiksdD1yY3x8eHQubGVuZ3RoO2UuaGlkZGVuPXQ9PT0wfHxMcj09PSJ0cmlwIixnZSgiaGVhZHRyaXBuIikudGV4dENvbnRlbnQ9U3RyaW5nKHQpfSxDYj0oKT0+e2NvbnN0IGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNpIiksdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY28iKSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJndSIpO0o9e2NoZWNrSW46ZT8udmFsdWU/P0ouY2hlY2tJbixjaGVja091dDp0Py52YWx1ZT8/Si5jaGVja091dCxndWVzdHM6TnVtYmVyKG4/LnZhbHVlPz9KLmd1ZXN0cyl8fDJ9fSxVbj0oZT17fSk9PkouY2hlY2tJbiYmSi5jaGVja091dD97Y2hlY2tJbjpKLmNoZWNrSW4sY2hlY2tPdXQ6Si5jaGVja091dCxndWVzdHM6Si5ndWVzdHMsLi4uZX06ZSxyZT1lPT57Z2UoImNvbnRlbnQiKS5pbnNlcnRBZGphY2VudEhUTUwoImFmdGVyYmVnaW4iLGA8ZGl2IGNsYXNzPSJlcnIiPiR7eShlKX08L2Rpdj5gKX07ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGU9Pntjb25zdCB0PWUudGFyZ2V0Py5jbG9zZXN0KCJbZGF0YS1ob3RlbF0sW2RhdGEtYWN0XSxbZGF0YS1wb2xpY3ldLFtkYXRhLWNhbmNlbF0sW2RhdGEtY29uZmlybS1jYW5jZWxdLFtkYXRhLWV4dHJhc10sW2RhdGEtcm9vbXNdIik7aWYoIXQpcmV0dXJuO2NvbnN0IG49dC5nZXRBdHRyaWJ1dGUoImRhdGEtcm9vbXMiKTtpZihuIT09bnVsbCl7aWYoQ2IoKSwhSi5jaGVja0lufHwhSi5jaGVja091dCl7cmUoIlNldCBib3RoIGRhdGVzIGZpcnN0IC0gYSByb29tIGhhcyBubyBwcmljZSB1bnRpbCB0aGUgbmlnaHRzIGFyZSBrbm93bi4iKTtyZXR1cm59bWUoImdldEhvdGVsIix7aG90ZWw6biwuLi5VbigpfSkuY2F0Y2goKCk9PnJlKCJDb3VsZCBub3QgbG9hZCB0aG9zZSBuaWdodHMuIikpO3JldHVybn1jb25zdCBvPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWFkZC1yb29tIik7aWYobyE9PW51bGwpe2NvbnN0IGg9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKT8/IiIsZz1OdW1iZXIodC5nZXRBdHRyaWJ1dGUoImRhdGEtbiIpPz8xKSxfPXQuaGFzQXR0cmlidXRlKCJkYXRhLWNpIik/e2NoZWNrSW46dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2kiKT8/IiIsY2hlY2tPdXQ6dC5nZXRBdHRyaWJ1dGUoImRhdGEtY28iKT8/IiIsZ3Vlc3RzOk51bWJlcih0LmdldEF0dHJpYnV0ZSgiZGF0YS1ndSIpPz8yKX06VW4oKTttZSgiYWRkVG9UcmlwIix7aG90ZWw6aCxyb29tOm8scm9vbXM6ZywuLi5ffSkuY2F0Y2goKCk9PnJlKCJDb3VsZCBub3QgY2hhbmdlIHRoZSB0cmlwLiIpKTtyZXR1cm59Y29uc3Qgcj10LmdldEF0dHJpYnV0ZSgiZGF0YS1hZGQtZXh0cmEiKTtpZihyIT09bnVsbCl7bWUoImFkZFRvVHJpcCIse2hvdGVsOnQuZ2V0QXR0cmlidXRlKCJkYXRhLWhvdGVsIik/PyIiLGV4dHJhOnIscXVhbnRpdHk6TnVtYmVyKHQuZ2V0QXR0cmlidXRlKCJkYXRhLW4iKT8/MSl9KS5jYXRjaCgoKT0+cmUoIkNvdWxkIG5vdCBjaGFuZ2UgdGhlIHRyaXAuIikpO3JldHVybn1jb25zdCBzPXQuZ2V0QXR0cmlidXRlKCJkYXRhLWV4dHJhcyIpO2lmKHMhPT1udWxsKXttZSgibGlzdEV4dHJhcyIse2hvdGVsOnMsLi4uVW4oKX0pLmNhdGNoKCgpPT5yZSgiQ291bGQgbm90IGxvYWQgdGhlIGFkZC1vbnMuIikpO3JldHVybn1jb25zdCBpPXQuZ2V0QXR0cmlidXRlKCJkYXRhLXBvbGljeSIpO2lmKGkhPT1udWxsKXttZSgicG9saWNpZXMiLHtob3RlbDp0LmdldEF0dHJpYnV0ZSgiZGF0YS1ob3RlbCIpPz8iIix0b3BpYzppfSkuY2F0Y2goKCk9PnJlKCJDb3VsZCBub3QgbG9hZCB0aGF0IHBvbGljeS4iKSk7cmV0dXJufWNvbnN0IGE9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY2FuY2VsIik7aWYoYSE9PW51bGwpe21lKCJwcmV2aWV3Q2FuY2VsbGF0aW9uIix7Ym9va2luZzphfSkuY2F0Y2goKCk9PnJlKCJDb3VsZCBub3Qgd29yayBvdXQgdGhlIGZlZS4iKSk7cmV0dXJufWNvbnN0IHU9dC5nZXRBdHRyaWJ1dGUoImRhdGEtY29uZmlybS1jYW5jZWwiKTtpZih1IT09bnVsbCl7bWUoImNhbmNlbEJvb2tpbmciLHtib29raW5nOnUsY29uZmlybWVkOiEwfSkuY2F0Y2goKCk9PnJlKCJDb3VsZCBub3QgY2FuY2VsIHRoYXQgYm9va2luZy4iKSk7cmV0dXJufWNvbnN0IGM9dC5nZXRBdHRyaWJ1dGUoImRhdGEtYWN0Iik7aWYoYz09PSJhc2stYm9vayIpe2NvbnN0IGg9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImd1ZXN0Iik7aCYmKGguaGlkZGVuPSExKSxkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8uZm9jdXMoKTtyZXR1cm59aWYoYz09PSJib29rIil7Y29uc3QgaD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ25hbWUiKT8udmFsdWUudHJpbSgpPz8iIixnPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJnbWFpbCIpPy52YWx1ZS50cmltKCk/PyIiLF89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImdub3RlIik/LnZhbHVlLnRyaW0oKT8/IiI7aWYoIWh8fCFnKXtyZSgiVGhlIGJvb2tpbmcgbmVlZHMgYSBuYW1lIGFuZCBhbiBlbWFpbCB0byBzZW5kIHRoZSBjb25maXJtYXRpb24gdG8uIik7cmV0dXJufW1lKCJyZXF1ZXN0Qm9va2luZyIse25hbWU6aCxlbWFpbDpnLC4uLl8/e25vdGVzOl99Ont9fSkuY2F0Y2goKCk9PnJlKCJDb3VsZCBub3QgYXNrIGZvciB0aG9zZSByb29tcy4iKSk7cmV0dXJufWlmKGM9PT0iYm9va2luZ3MiKXttZSgibGlzdEJvb2tpbmdzIix7fSkuY2F0Y2goKCk9PnJlKCJDb3VsZCBub3QgbG9hZCB5b3VyIGJvb2tpbmdzLiIpKTtyZXR1cm59aWYoYz09PSJ0cmlwIil7bWUoInZpZXdUcmlwIix7fSkuY2F0Y2goKCk9PnJlKCJDb3VsZCBub3QgbG9hZCB0aGUgdHJpcC4iKSk7cmV0dXJufWNvbnN0IGw9dC5nZXRBdHRyaWJ1dGUoImRhdGEtaG90ZWwiKTtsJiZtZSgiZ2V0SG90ZWwiLHtob3RlbDpsLC4uLlVuKCl9KS5jYXRjaCgoKT0+cmUoIkNvdWxkIG5vdCBsb2FkIHRoYXQgaG90ZWwuIikpfSk7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIixlPT57Y29uc3QgdD1lLnRhcmdldDtpZih0Py5pZCE9PSJjaSIpcmV0dXJuO2NvbnN0IG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvIik7biYmKG4ubWluPXQudmFsdWV8fEZyKCksbi52YWx1ZSYmbi52YWx1ZTw9dC52YWx1ZSYmKG4udmFsdWU9IiIpKX0pO2NvbnN0IFpmPShlLHQpPT57dHJ5e1RmKHQpLFJmKGUpfWNhdGNoKG4pe2NvbnNvbGUuZXJyb3IoIltjYXJkXSByZW5kZXIgZmFpbGVkIixuKSxnZSgiY29udGVudCIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPlRoaXMgY2FyZCBjb3VsZCBub3QgYmUgZHJhd24uIEFzayBhZ2FpbiBpbiB0aGUgY2hhdC48L2Rpdj4nfX07TGUub250b29scmVzdWx0PWU9PlpmKGU/LnN0cnVjdHVyZWRDb250ZW50LGU/Ll9tZXRhKTtMZS5vbmhvc3Rjb250ZXh0Y2hhbmdlZD1lPT53ZihlLGtmKTtMZS5jb25uZWN0KCkudGhlbigoKT0+e2NvbnN0IGU9TGUuZ2V0SG9zdENvbnRleHQoKTt3ZihlLGtmKTtjb25zdCB0PWU/LnRvb2xJbmZvPy5yZXN1bHQ/LnN0cnVjdHVyZWRDb250ZW50O3QmJlpmKHQsZT8udG9vbEluZm8/LnJlc3VsdD8uX21ldGEpfSkuY2F0Y2goKCk9PntnZSgiY29udGVudCIpLmlubmVySFRNTD0nPGRpdiBjbGFzcz0iZW1wdHkiPkNvdWxkIG5vdCBjb25uZWN0IHRvIHRoZSBob3N0LjwvZGl2Pid9KTs8L3NjcmlwdD4KICAgIDxzdHlsZSByZWw9InN0eWxlc2hlZXQiIGNyb3Nzb3JpZ2luPjpyb290ey0ta2l0LWJnOiAjZmZmZmZmOy0ta2l0LWJnLXNvZnQ6ICNmNmY3Zjk7LS1raXQtZmc6ICMxYTFmMmI7LS1raXQtZmctc29mdDogIzYyNmI3YTstLWtpdC1mZy1mYWludDogIzhhOTNhMTstLWtpdC1saW5lOiAjZTNlN2VkOy0ta2l0LWFjY2VudDogIzFhMWYyYjstLWtpdC1hY2NlbnQtZmc6ICNmZmZmZmY7LS1raXQtbGluazogIzI1NjNlYjstLWtpdC1nb29kOiAjMWE3ZjVhOy0ta2l0LWdvb2QtYmc6ICNkZGYzZTQ7LS1raXQtYmFkOiAjYjMyNjFlOy0ta2l0LWJhZC1iZzogI2ZiZTZlNDstLWtpdC13YXJuOiAjOGE1YTAwOy0ta2l0LXdhcm4tYmc6ICNmZGYwZDU7LS1raXQtcmluZzogIzI1NjNlYn1bZGF0YS10aGVtZT1kYXJrXXstLWtpdC1iZzogIzFkMWYyMzstLWtpdC1iZy1zb2Z0OiAjMjYyOTJlOy0ta2l0LWZnOiAjZWNlZWYxOy0ta2l0LWZnLXNvZnQ6ICNhNGFiYjY7LS1raXQtZmctZmFpbnQ6ICM3Yzg0OTE7LS1raXQtbGluZTogIzM2M2E0MTstLWtpdC1hY2NlbnQ6ICNlY2VlZjE7LS1raXQtYWNjZW50LWZnOiAjMWQxZjIzOy0ta2l0LWxpbms6ICM3YWE3ZmY7LS1raXQtZ29vZDogIzZmZDNhMjstLWtpdC1nb29kLWJnOiAjMWYzYTJkOy0ta2l0LWJhZDogI2ZmOGE4MDstLWtpdC1iYWQtYmc6ICMzZDIzMjI7LS1raXQtd2FybjogI2YyYzQ2YjstLWtpdC13YXJuLWJnOiAjM2EzMDIwOy0ta2l0LXJpbmc6ICM3YWE3ZmZ9OnJvb3R7LS1iZzogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1wcmltYXJ5LCB2YXIoLS1raXQtYmcpKTstLWJnLXNvZnQ6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtc2Vjb25kYXJ5LCB2YXIoLS1raXQtYmctc29mdCkpOy0tZmc6IHZhcigtLWNvbG9yLXRleHQtcHJpbWFyeSwgdmFyKC0ta2l0LWZnKSk7LS1mZy1zb2Z0OiB2YXIoLS1jb2xvci10ZXh0LXNlY29uZGFyeSwgdmFyKC0ta2l0LWZnLXNvZnQpKTstLWZnLWZhaW50OiB2YXIoLS1jb2xvci10ZXh0LXRlcnRpYXJ5LCB2YXIoLS1raXQtZmctZmFpbnQpKTstLWxpbmU6IHZhcigtLWNvbG9yLWJvcmRlci1wcmltYXJ5LCB2YXIoLS1raXQtbGluZSkpOy0tYWNjZW50OiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLWludmVyc2UsIHZhcigtLWtpdC1hY2NlbnQpKTstLWFjY2VudC1mZzogdmFyKC0tY29sb3ItdGV4dC1pbnZlcnNlLCB2YXIoLS1raXQtYWNjZW50LWZnKSk7LS1saW5rOiB2YXIoLS1jb2xvci10ZXh0LWluZm8sIHZhcigtLWtpdC1saW5rKSk7LS1nb29kOiB2YXIoLS1jb2xvci10ZXh0LXN1Y2Nlc3MsIHZhcigtLWtpdC1nb29kKSk7LS1nb29kLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXN1Y2Nlc3MsIHZhcigtLWtpdC1nb29kLWJnKSk7LS1iYWQ6IHZhcigtLWNvbG9yLXRleHQtZGFuZ2VyLCB2YXIoLS1raXQtYmFkKSk7LS1iYWQtYmc6IHZhcigtLWNvbG9yLWJhY2tncm91bmQtZGFuZ2VyLCB2YXIoLS1raXQtYmFkLWJnKSk7LS13YXJuOiB2YXIoLS1jb2xvci10ZXh0LXdhcm5pbmcsIHZhcigtLWtpdC13YXJuKSk7LS13YXJuLWJnOiB2YXIoLS1jb2xvci1iYWNrZ3JvdW5kLXdhcm5pbmcsIHZhcigtLWtpdC13YXJuLWJnKSk7LS1yaW5nOiB2YXIoLS1jb2xvci1yaW5nLXByaW1hcnksIHZhcigtLWtpdC1yaW5nKSk7LS1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtbGcsIDE0cHgpOy0tcmFkaXVzLXNtOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtLCA5cHgpOy0tZm9udDogdmFyKC0tZm9udC1zYW5zLCBzeXN0ZW0tdWksIC1hcHBsZS1zeXN0ZW0sICJTZWdvZSBVSSIsIFJvYm90bywgc2Fucy1zZXJpZik7LS1tb25vOiB2YXIoLS1mb250LW1vbm8sIHVpLW1vbm9zcGFjZSwgIlNGIE1vbm8iLCBNZW5sbywgbW9ub3NwYWNlKTstLXNoYWRvdzogdmFyKC0tc2hhZG93LXNtLCAwIDFweCAycHggcmdiYSgxMCwgMjAsIDQwLCAuMDQpLCAwIDJweCA1cHggcmdiYSgxMCwgMjAsIDQwLCAuMDQpKX0qe2JveC1zaXppbmc6Ym9yZGVyLWJveH1ib2R5e21hcmdpbjowO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50Oy13ZWJraXQtZm9udC1zbW9vdGhpbmc6YW50aWFsaWFzZWR9LmNhcmR7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym94LXNoYWRvdzp2YXIoLS1zaGFkb3cpO21heC13aWR0aDo1NjBweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1sZWZ0OnZhcigtLWluc2V0LWxlZnQsIDBweCk7cGFkZGluZy1yaWdodDp2YXIoLS1pbnNldC1yaWdodCwgMHB4KX0uaGVhZHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7cGFkZGluZzoxNHB4IDE4cHggMH0uaGVhZCAudGl0bGV7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi0uMDFlbX0uaGVhZCAudGl0bGVbaGlkZGVuXXtkaXNwbGF5Om5vbmV9I2NvbnRlbnR7cGFkZGluZzoxMHB4IDE4cHggMThweH0ucmVmcmVzaHttYXJnaW4tbGVmdDo4cHg7YWxpZ24tc2VsZjpjZW50ZXI7ZmxleDpub25lO2Rpc3BsYXk6Z3JpZDtwbGFjZS1pdGVtczpjZW50ZXI7d2lkdGg6MjhweDtoZWlnaHQ6MjhweDtwYWRkaW5nOjA7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnLXNvZnQpO2N1cnNvcjpwb2ludGVyO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4xMnMsY29sb3IgLjEyc30ucmVmcmVzaDpob3Zlcjpub3QoOmRpc2FibGVkKXtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWZnLXNvZnQpfS5yZWZyZXNoOmRpc2FibGVke2N1cnNvcjpkZWZhdWx0O29wYWNpdHk6LjZ9LnJlZnJlc2hbaGlkZGVuXXtkaXNwbGF5Om5vbmV9LnJlZnJlc2ggc3Zne3dpZHRoOjEzcHg7aGVpZ2h0OjEzcHg7ZGlzcGxheTpibG9ja30ucmVmcmVzaC5idXN5IHN2Z3thbmltYXRpb246a2l0LXNwaW4gLjdzIGxpbmVhciBpbmZpbml0ZX1Aa2V5ZnJhbWVzIGtpdC1zcGlue3Rve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19LmVtcHR5e3BhZGRpbmc6MThweCAwO3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxM3B4fS5oaW50e21hcmdpbi10b3A6OHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO3RleHQtYWxpZ246Y2VudGVyfS5ub3Rle2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tZmctc29mdCk7cGFkZGluZzowIDAgMTBweH0ubW9ub3tmb250LWZhbWlseTp2YXIoLS1tb25vKTtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLWZhaW50KX0uYmFkZ2V7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtwYWRkaW5nOjNweCA5cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtmb250LXNpemU6MTEuNXB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXB9LmJhZGdlLm9re2NvbG9yOnZhcigtLWdvb2QpO2JhY2tncm91bmQ6dmFyKC0tZ29vZC1iZyl9LmJhZGdlLndhcm4sLmJhZGdlLnRvZG97Y29sb3I6dmFyKC0td2Fybik7YmFja2dyb3VuZDp2YXIoLS13YXJuLWJnKX0uYmFkZ2UuZXJye2NvbG9yOnZhcigtLWJhZCk7YmFja2dyb3VuZDp2YXIoLS1iYWQtYmcpfS5idXl7bWFyZ2luLXRvcDoxNHB4O3dpZHRoOjEwMCU7bWluLWhlaWdodDo0NHB4O3BhZGRpbmc6MTFweCAxNHB4O2JvcmRlcjoxcHggc29saWQgdmFyKC0tYWNjZW50KTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6NjUwO2N1cnNvcjpwb2ludGVyfS5idXk6ZGlzYWJsZWR7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItY29sb3I6dmFyKC0tbGluZSk7Y29sb3I6dmFyKC0tZmctZmFpbnQpO2N1cnNvcjpkZWZhdWx0fS5idXkuYWx0LC5naG9zdHtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOnZhcigtLWZnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpfS5naG9zdHtmbGV4OjE7bWluLWhlaWdodDo0MHB4O3BhZGRpbmc6OXB4IDEwcHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1yYWRpdXMtc20pO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2N1cnNvcjpwb2ludGVyfS5saW5re2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjZweCAwIDA7Y29sb3I6dmFyKC0tbGluayk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udCk7Zm9udC1zaXplOjEyLjVweDtjdXJzb3I6cG9pbnRlcjt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5xdHl7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MnB4fS5xdHkgYnV0dG9ue3dpZHRoOjM2cHg7aGVpZ2h0OjM2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOnZhcigtLXJhZGl1cy1zbSk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQpO2ZvbnQtc2l6ZToxN3B4O2xpbmUtaGVpZ2h0OjE7Y3Vyc29yOnBvaW50ZXJ9LnF0eSBzcGFue21pbi13aWR0aDoyNnB4O3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxMy41cHg7Zm9udC13ZWlnaHQ6NjUwfWJ1dHRvbjpmb2N1cy12aXNpYmxlLGE6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjJweCBzb2xpZCB2YXIoLS1yaW5nKTtvdXRsaW5lLW9mZnNldDoycHh9QG1lZGlhKG1heC13aWR0aDo0MzBweCl7LmNhcmR7Ym9yZGVyLXJhZGl1czpjYWxjKHZhcigtLXJhZGl1cykgLSAycHgpfS5oZWFke3BhZGRpbmc6MTJweCAxNHB4IDB9I2NvbnRlbnR7cGFkZGluZzo4cHggMTRweCAxNHB4fS5idXl7bWluLWhlaWdodDo0OHB4O2ZvbnQtc2l6ZToxNXB4fS5naG9zdHttaW4taGVpZ2h0OjQ0cHg7Zm9udC1zaXplOjEzLjVweH0ucXR5IGJ1dHRvbnt3aWR0aDo0MnB4O2hlaWdodDo0MnB4O2ZvbnQtc2l6ZToxOXB4fS5yZWZyZXNoe3dpZHRoOjM0cHg7aGVpZ2h0OjM0cHh9LmhpbnQsLm5vdGUsLmVtcHR5e2ZvbnQtc2l6ZToxM3B4fX1AbWVkaWEocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjpyZWR1Y2Upey5yZWZyZXNoLmJ1c3kgc3Zne2FuaW1hdGlvbjpub25lfSp7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudH19I2NvbnRlbnR7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTJweH0uaGVhZHttaW4taGVpZ2h0OjI4cHh9LmhlYWQgLmJyYW5ke21heC1oZWlnaHQ6MzRweDttYXgtd2lkdGg6MTUwcHg7b2JqZWN0LWZpdDpjb250YWlufS5oZWFkIC50aXRsZXtmb250LXdlaWdodDo2NTA7Zm9udC1zaXplOjE1cHg7bGV0dGVyLXNwYWNpbmc6LS4wMWVtfS5oZWFkIC5zdWJ7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEyLjVweDttYXJnaW4taW5saW5lLXN0YXJ0OmF1dG87dGV4dC1hbGlnbjplbmR9LmhlYWR0cmlwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtjb2xvcjp2YXIoLS1mZyk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjVweCAxMXB4IDVweCA5cHg7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NjAwO2N1cnNvcjpwb2ludGVyfS5oZWFkdHJpcDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWJnLXNvZnQpfS5oZWFkIC5zdWIrLmhlYWR0cmlwe21hcmdpbi1pbmxpbmUtc3RhcnQ6MH0uZGVtb3tkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybik7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6OHB4IDEwcHg7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MS40NX0uZGVtbyBie2ZvbnQtd2VpZ2h0OjcwMH0uY2l0eWdyb3VwKy5jaXR5Z3JvdXB7bWFyZ2luLXRvcDoxNHB4fS5jaXR5bmFtZXtmb250LXNpemU6MTJweDtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjA2ZW07dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOnZhcigtLWZnLWZhaW50KTttYXJnaW4tYm90dG9tOjhweH0udGlsZXN7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxOTZweCwxZnIpKTtnYXA6MTBweH0udGlsZXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czoxNHB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kOnZhcigtLWJnKTt0ZXh0LWFsaWduOnN0YXJ0O2N1cnNvcjpwb2ludGVyO2ZvbnQ6aW5oZXJpdDtjb2xvcjppbmhlcml0O3BhZGRpbmc6MH0udGlsZTpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tZmctZmFpbnQpfS50LXNob3R7cG9zaXRpb246cmVsYXRpdmU7YXNwZWN0LXJhdGlvOjE2IC8gMTA7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS50LXNob3QgaW1ne3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvYmplY3QtZml0OmNvdmVyfS50LW1hcmt7Zm9udC1zaXplOjMwcHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNGVtO29wYWNpdHk6LjkyO3RleHQtc2hhZG93OjAgMXB4IDEycHggcmdiKDAgMCAwIC8gMjIlKX0udC1icmFuZHtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldC1ibG9jay1zdGFydDo4cHg7aW5zZXQtaW5saW5lLXN0YXJ0OjhweDtiYWNrZ3JvdW5kOiMwMDAwMDA2MTtjb2xvcjojZmZmO2JvcmRlci1yYWRpdXM6OTk5cHg7cGFkZGluZzozcHggOHB4O2ZvbnQtc2l6ZToxMC41cHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wMmVtfS50LWJvZHl7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NHB4O3BhZGRpbmc6MTBweCAxMXB4IDExcHh9LnQtbmFtZXtmb250LXdlaWdodDo2NDA7Zm9udC1zaXplOjEzLjVweDtsaW5lLWhlaWdodDoxLjM7ZGlzcGxheTotd2Via2l0LWJveDstd2Via2l0LWxpbmUtY2xhbXA6MjtsaW5lLWNsYW1wOjI7LXdlYmtpdC1ib3gtb3JpZW50OnZlcnRpY2FsO292ZXJmbG93OmhpZGRlbjttaW4taGVpZ2h0OjIuNmVtfS50LXdoZXJle2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS50LWZvb3R7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmJhc2VsaW5lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDo4cHg7bWFyZ2luLXRvcDoycHh9LnQtZnJvbXtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2NTB9LnQtZnJvbSBzbWFsbHtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjExcHh9LnJhdGV7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjNweDtmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0ucmF0ZSBzdmd7Y29sb3I6I2U4YTMzZH0uaGVyb3twb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItcmFkaXVzOjE0cHg7b3ZlcmZsb3c6aGlkZGVuO2FzcGVjdC1yYXRpbzoyMSAvIDg7ZGlzcGxheTpncmlkO3BsYWNlLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNDBkZWcsdmFyKC0tc2hvdC1hKSx2YXIoLS1zaG90LWIpKTtjb2xvcjojZmZmfS5oZXJvIC50LW1hcmt7Zm9udC1zaXplOjQwcHh9LmgtbmFtZXtmb250LXNpemU6MTdweDtmb250LXdlaWdodDo2ODA7bGV0dGVyLXNwYWNpbmc6LS4wMTVlbTtsaW5lLWhlaWdodDoxLjI1fS5oLXdoZXJle2NvbG9yOnZhcigtLWZnLXNvZnQpO2ZvbnQtc2l6ZToxMi41cHh9Lmgtc3Vte2ZvbnQtc2l6ZToxM3B4O2xpbmUtaGVpZ2h0OjEuNTU7Y29sb3I6dmFyKC0tZmctc29mdCl9LmNoaXBze2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDtnYXA6NnB4fS5jaGlwe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweCA5cHg7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KTtiYWNrZ3JvdW5kOnZhcigtLWJnKX0uc3RheXtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnIgYXV0byBhdXRvO2dhcDo4cHg7YWxpZ24taXRlbXM6ZW5kO2JhY2tncm91bmQ6dmFyKC0tYmctc29mdCk7Ym9yZGVyLXJhZGl1czoxMnB4O3BhZGRpbmc6MTBweH0uc3RheSBsYWJlbHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1mYWludCl9LnN0YXkgaW5wdXQsLnN0YXkgc2VsZWN0e2ZvbnQ6aW5oZXJpdDtmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1mZyk7YmFja2dyb3VuZDp2YXIoLS1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjlweDtwYWRkaW5nOjdweCA4cHg7bWluLXdpZHRoOjB9LnN0YXkgLmdve2JvcmRlcjowO2JvcmRlci1yYWRpdXM6OXB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQ6aW5oZXJpdDtmb250LXdlaWdodDo2NTA7Zm9udC1zaXplOjEzcHg7cGFkZGluZzo4cHggMTRweDtjdXJzb3I6cG9pbnRlcn0uc3RheSAuZ29bZGlzYWJsZWRde29wYWNpdHk6LjU7Y3Vyc29yOmRlZmF1bHR9LnJvd3N7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6OHB4fS5yb3d7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIgYXV0byBhdXRvO2dyaWQtdGVtcGxhdGUtYXJlYXM6ImJvZHkgcHJpY2UgYWN0aW9uIjthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMHB4IDExcHh9LnJvdyAuYm9keXtncmlkLWFyZWE6Ym9keTttaW4td2lkdGg6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDozcHh9LnJvdyAubmFtZXtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjYyMDtsaW5lLWhlaWdodDoxLjN9LnJvdyAubWV0YXtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2xpbmUtaGVpZ2h0OjEuNDtkaXNwbGF5Oi13ZWJraXQtYm94Oy13ZWJraXQtbGluZS1jbGFtcDozO2xpbmUtY2xhbXA6Mzstd2Via2l0LWJveC1vcmllbnQ6dmVydGljYWw7b3ZlcmZsb3c6aGlkZGVufS5yb3cgLnByaWNle2dyaWQtYXJlYTpwcmljZTt0ZXh0LWFsaWduOmVuZDtmb250LXZhcmlhbnQtbnVtZXJpYzp0YWJ1bGFyLW51bXN9LnJvdyAucC10b3RhbHtmb250LXNpemU6MTMuNXB4O2ZvbnQtd2VpZ2h0OjY2MH0ucm93IC5wLXVuaXR7Zm9udC1zaXplOjExcHg7Y29sb3I6dmFyKC0tZmctc29mdCl9LnJvdyAuYWN0aW9ue2dyaWQtYXJlYTphY3Rpb259LmJhZGdlc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7Z2FwOjVweDttYXJnaW4tdG9wOjJweH0uYmFkZ2V7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjJweCA4cHg7Zm9udC1zaXplOjEwLjVweDtmb250LXdlaWdodDo2MjA7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0uYmFkZ2UuZ29vZHtiYWNrZ3JvdW5kOnZhcigtLWdvb2QtYmcpO2NvbG9yOnZhcigtLWdvb2QpfS5iYWRnZS53YXJue2JhY2tncm91bmQ6dmFyKC0td2Fybi1iZyk7Y29sb3I6dmFyKC0td2Fybil9LmJhZGdlLmJhZHtiYWNrZ3JvdW5kOnZhcigtLWJhZC1iZyk7Y29sb3I6dmFyKC0tYmFkKX0uYWRke2Rpc3BsYXk6aW5saW5lLWdyaWQ7cGxhY2UtaXRlbXM6Y2VudGVyO3dpZHRoOjM4cHg7aGVpZ2h0OjM4cHg7Ym9yZGVyLXJhZGl1czo5OTlweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JhY2tncm91bmQ6dmFyKC0tYmcpO2NvbG9yOnZhcigtLWZnKTtjdXJzb3I6cG9pbnRlcjtmb250OmluaGVyaXR9LmFkZDpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWFjY2VudCk7Y29sb3I6dmFyKC0tYWNjZW50LWZnKTtib3JkZXItY29sb3I6dmFyKC0tYWNjZW50KX0uYWRkW2Rpc2FibGVkXXtvcGFjaXR5Oi40O2N1cnNvcjpkZWZhdWx0fS5zdGVwe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoycHg7YmFja2dyb3VuZDp2YXIoLS1hY2NlbnQpO2NvbG9yOnZhcigtLWFjY2VudC1mZyk7Ym9yZGVyLXJhZGl1czo5OTlweDtwYWRkaW5nOjNweH0uc3RlcCBidXR0b257d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXQ7Zm9udC1zaXplOjE2cHg7bGluZS1oZWlnaHQ6MTtjdXJzb3I6cG9pbnRlcn0uc3RlcCBidXR0b246aG92ZXJ7YmFja2dyb3VuZDojZmZmZmZmMmV9LnN0ZXAgLm57bWluLXdpZHRoOjE4cHg7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NjgwO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uZGF5e2ZvbnQtc2l6ZToxMS41cHg7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4wNWVtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1mYWludCk7bWFyZ2luOjEycHggMCA2cHh9LnN1bXN7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6NXB4O2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLWxpbmUpO21hcmdpbi10b3A6MTJweDtwYWRkaW5nLXRvcDoxMHB4O2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uc3Vte2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpfS5zdW0udG90YWx7Zm9udC1zaXplOjE1cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWZnKX0uZm9vdHtkaXNwbGF5OmZsZXg7Z2FwOjhweDthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLXRvcDoxMnB4fS5nb3tmbGV4OjE7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czoxMXB4O2JhY2tncm91bmQ6dmFyKC0tYWNjZW50KTtjb2xvcjp2YXIoLS1hY2NlbnQtZmcpO2ZvbnQ6aW5oZXJpdDtmb250LXdlaWdodDo2ODA7Zm9udC1zaXplOjE0cHg7cGFkZGluZzoxMnB4IDE2cHg7Y3Vyc29yOnBvaW50ZXJ9LmdvW2Rpc2FibGVkXXtvcGFjaXR5Oi41NTtjdXJzb3I6ZGVmYXVsdH0uZ28ucXVpZXR7YmFja2dyb3VuZDp2YXIoLS1iZyk7Y29sb3I6dmFyKC0tZmcpO2JvcmRlcjoxcHggc29saWQgdmFyKC0tbGluZSk7ZmxleDowIDAgYXV0bztmb250LXdlaWdodDo2MjB9LmdvLmRhbmdlcntiYWNrZ3JvdW5kOnZhcigtLWJhZCk7Y29sb3I6I2ZmZn0ubm90ZXtmb250LXNpemU6MTEuNXB4O2NvbG9yOnZhcigtLWZnLXNvZnQpO2xpbmUtaGVpZ2h0OjEuNX0uZm9ybVtoaWRkZW5de2Rpc3BsYXk6bm9uZX0uZm9ybXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHg7YmFja2dyb3VuZDp2YXIoLS1iZy1zb2Z0KTtib3JkZXItcmFkaXVzOjEycHg7cGFkZGluZzoxMXB4O21hcmdpbi10b3A6MTBweH0uZm9ybSBsYWJlbHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo0cHg7Zm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6NjUwO2xldHRlci1zcGFjaW5nOi4wM2VtO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtjb2xvcjp2YXIoLS1mZy1mYWludCl9LmZvcm0gaW5wdXR7Zm9udDppbmhlcml0O2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWZnKTtiYWNrZ3JvdW5kOnZhcigtLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWxpbmUpO2JvcmRlci1yYWRpdXM6OXB4O3BhZGRpbmc6OHB4IDlweH0uZm9ybSAudHdve2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIDFmcjtnYXA6OHB4fS5jb25me2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjRweDthbGlnbi1pdGVtczpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1saW5lKTtib3JkZXItcmFkaXVzOjE0cHg7cGFkZGluZzoxNnB4IDEycHh9LmNvbmYgLmNvZGV7Zm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NzIwO2xldHRlci1zcGFjaW5nOi4wNmVtO2ZvbnQtdmFyaWFudC1udW1lcmljOnRhYnVsYXItbnVtc30uY29uZiAud2hlcmV7Zm9udC1zaXplOjEzLjVweDtmb250LXdlaWdodDo2MjB9LmNvbmYgLndoZW57Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1mZy1zb2Z0KX0udW5wYWlke2Rpc3BsYXk6ZmxleDtnYXA6OHB4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7YmFja2dyb3VuZDp2YXIoLS1nb29kLWJnKTtjb2xvcjp2YXIoLS1nb29kKTtib3JkZXItcmFkaXVzOjExcHg7cGFkZGluZzoxMHB4IDExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9LnVucGFpZCBie2ZvbnQtd2VpZ2h0OjcyMH0ubW9uZXktb3V0e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtmb250LXNpemU6MTRweDtmb250LXdlaWdodDo2NjA7Zm9udC12YXJpYW50LW51bWVyaWM6dGFidWxhci1udW1zfS5wcm9zZXtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxLjY7Y29sb3I6dmFyKC0tZmctc29mdCk7d2hpdGUtc3BhY2U6cHJlLXdyYXB9LnByb3NlIGg0e21hcmdpbjoxNHB4IDAgNHB4O2ZvbnQtc2l6ZToxMi41cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWZnKX0uZW1wdHl7Y29sb3I6dmFyKC0tZmctc29mdCk7Zm9udC1zaXplOjEzcHg7cGFkZGluZzoxOHB4IDRweDt0ZXh0LWFsaWduOmNlbnRlcn0uZXJye2JhY2tncm91bmQ6dmFyKC0tYmFkLWJnKTtjb2xvcjp2YXIoLS1iYWQpO2JvcmRlci1yYWRpdXM6MTFweDtwYWRkaW5nOjExcHg7Zm9udC1zaXplOjEyLjVweDtsaW5lLWhlaWdodDoxLjV9QG1lZGlhKG1heC13aWR0aDo0NjBweCl7LnRpbGVze2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoYXV0by1maWxsLG1pbm1heCgxNTBweCwxZnIpKTtnYXA6OHB4fS50LW1hcmt7Zm9udC1zaXplOjI0cHh9LnN0YXl7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnJ9LnN0YXkgLmd1ZXN0c3tncmlkLWNvbHVtbjoxfS5zdGF5IC5nb3tncmlkLWNvbHVtbjoyO3dpZHRoOjEwMCV9LnJvd3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Z3JpZC10ZW1wbGF0ZS1hcmVhczoiYm9keSBhY3Rpb24iICJwcmljZSBhY3Rpb24iO3Jvdy1nYXA6NnB4fS5yb3cgLnByaWNle3RleHQtYWxpZ246c3RhcnR9LmZvcm0gLnR3b3tncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyfX08L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxkaXYgY2xhc3M9ImNhcmQiPgogICAgICA8ZGl2IGNsYXNzPSJoZWFkIj4KICAgICAgICA8IS0tIFRoZSBncm91cCdzIHdvcmRtYXJrIGFycml2ZXMgV0lUSCBUSEUgREFUQSBhcyBgbG9nb1VybGAuIE5vdGhpbmcgaXMKICAgICAgICAgICAgIGJha2VkIGluIGhlcmU6IGEgbG9nbyBjb21waWxlZCBpbnRvIHRoZSBjYXJkIGlzIHRoZSBmaXJzdCBicmFuZCdzLAogICAgICAgICAgICAgYW5kIGV2ZXJ5IGhvdGVsIGdyb3VwIGFmdGVyIHRoZW0gd291bGQgd2VhciBpdC4gLS0+CiAgICAgICAgPGltZyBjbGFzcz0iYnJhbmQiIGlkPSJicmFuZCIgYWx0PSIiIGhpZGRlbj4KICAgICAgICA8c3BhbiBjbGFzcz0idGl0bGUiIGlkPSJ0aXRsZSI+PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJzdWIiIGlkPSJzdWIiPjwvc3Bhbj4KICAgICAgICA8IS0tIFRoZSB0cmlwLCBmcm9tIHRoZSB0b3AuIFRoZSBzaG9wcGluZyBjYXJkIGxlYXJuZWQgb24gMjAyNi0wOS0xNyB0aGF0CiAgICAgICAgICAgICBhIGZvb3Rlci1vbmx5IGNhcnQgbWVhbnMgc2Nyb2xsaW5nIHBhc3QgdHdlbnR5IHRpbGVzIHRvIHJlYWNoIGl0LgogICAgICAgICAgICAgU2hvd24gb25jZSB0aGUgdHJpcCBoYXMgc29tZXRoaW5nIGluIGl0LCBoaWRkZW4gb24gdGhlIHRyaXAgdmlldy4gLS0+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iaGVhZHRyaXAiIGlkPSJoZWFkdHJpcCIgdHlwZT0iYnV0dG9uIiBkYXRhLWFjdD0idHJpcCIgaGlkZGVuIGFyaWEtbGFiZWw9IlZpZXcgdGhlIHRyaXAiPgogICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxNSIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiCiAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik00IDguNWgxNnYxMWExLjUgMS41IDAgMCAxLTEuNSAxLjVoLTEzQTEuNSAxLjUgMCAwIDEgNCAxOS41eiIgLz4KICAgICAgICAgICAgPHBhdGggZD0iTTkgOC41VjZhMiAyIDAgMCAxIDItMmgyYTIgMiAwIDAgMSAyIDJ2Mi41IiAvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgICA8c3BhbiBpZD0iaGVhZHRyaXBuIj4wPC9zcGFuPgogICAgICAgIDwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iY29udGVudCI+PGRpdiBjbGFzcz0iZW1wdHkiPkxvYWRpbmfigKY8L2Rpdj48L2Rpdj4KICAgIDwvZGl2PgogIDwvYm9keT4KPC9odG1sPgo=', 'base64').toString('utf8');
6
+ /** sha256 of widget/src + widget/index.html at build time - the drift guard reads this. */
7
+ export const HOTEL_CARD_SOURCE_SHA = 'aad3e7d8f96533d4f70936ab9fbcb6bd9598ff4e574465095d4bdf2a256b2663';
8
+ //# sourceMappingURL=card.generated.js.map