@fairfox/polly 0.89.1 → 0.91.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.
- package/dist/gallery/gallery.js +1 -1
- package/dist/src/index.js +25 -13
- package/dist/src/index.js.map +3 -3
- package/dist/src/shared/lib/resource.js +25 -13
- package/dist/src/shared/lib/resource.js.map +3 -3
- package/dist/src/shared/lib/state.js +25 -13
- package/dist/src/shared/lib/state.js.map +3 -3
- package/dist/src/shared/state/app-state.js +25 -13
- package/dist/src/shared/state/app-state.js.map +3 -3
- package/dist/tools/verify/src/cli.js +623 -92
- package/dist/tools/verify/src/cli.js.map +12 -10
- package/dist/tools/verify/src/config.d.ts +63 -0
- package/dist/tools/verify/src/config.js.map +2 -2
- package/dist/tools/visualize/src/cli.js +85 -13
- package/dist/tools/visualize/src/cli.js.map +5 -4
- package/package.json +5 -4
package/dist/gallery/gallery.js
CHANGED
|
@@ -5498,4 +5498,4 @@ var root = document.getElementById("app") ?? document.body;
|
|
|
5498
5498
|
R(/* @__PURE__ */ u4(GalleryApp, {}, undefined, false, undefined, this), root);
|
|
5499
5499
|
|
|
5500
5500
|
//# debugId=0D2534F3978D9E0964756E2164756E21
|
|
5501
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9kaXN0L3ByZWFjdC5tb2R1bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9ob29rcy9kaXN0L2hvb2tzLm1vZHVsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AcHJlYWN0K3NpZ25hbHMtY29yZUAxLjE0LjIvbm9kZV9tb2R1bGVzL0BwcmVhY3Qvc2lnbmFscy1jb3JlL2Rpc3Qvc2lnbmFscy1jb3JlLm1vZHVsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AcHJlYWN0K3NpZ25hbHNAMi45LjArOGFkZTYwMmVkNmMzNjM2MC9ub2RlX21vZHVsZXMvQHByZWFjdC9zaWduYWxzL2Rpc3Qvc2lnbmFscy5tb2R1bGUuanMiLCAic3JjL2FjdGlvbnMvZXJyb3IudHMiLCAic3JjL2FjdGlvbnMvb3ZlcmxheS50cyIsICJzcmMvYWN0aW9ucy9ldmVudC1kZWxlZ2F0aW9uLnRzIiwgInNyYy9hY3Rpb25zL2Zvcm0udHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9qc3gtcnVudGltZS9kaXN0L2pzeFJ1bnRpbWUubW9kdWxlLmpzIiwgInNyYy9hY3Rpb25zL3N0b3JlLnRzeCIsICJzcmMvcG9sbHktdWkvQWN0aW9uRm9ybS50c3giLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL2Rpc3BhdGNoLWFjdGlvbi50cyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvcGFzc3Rocm91Z2gudHMiLCAic3JjL3BvbGx5LXVpL0FjdGlvbklucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvTGF5b3V0LnRzeCIsICJzcmMvcG9sbHktdWkvRHJvcGRvd24udHN4IiwgInNyYy9wb2xseS11aS9pbnRlcm5hbC9zZWxlY3QtdHJpZ2dlci50c3giLCAic3JjL3BvbGx5LXVpL0FjdGlvblNlbGVjdC50c3giLCAic3JjL3BvbGx5LXVpL0JhZGdlLnRzeCIsICJzcmMvcG9sbHktdWkvQnV0dG9uLnRzeCIsICJzcmMvcG9sbHktdWkvU3VyZmFjZS50c3giLCAic3JjL3BvbGx5LXVpL0NhcmQudHN4IiwgInNyYy9wb2xseS11aS9DaGVja2JveC50c3giLCAic3JjL3BvbGx5LXVpL0NsdXN0ZXIudHN4IiwgInNyYy9wb2xseS11aS9Db2RlLnRzeCIsICJzcmMvcG9sbHktdWkvQ29sbGFwc2libGUudHN4IiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3ByZWFjdEAxMC4yOS4xL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L2Rpc3QvY29tcGF0Lm1vZHVsZS5qcyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvZm9jdXMtdHJhcC50cyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvc2Nyb2xsLWxvY2sudHMiLCAic3JjL3BvbGx5LXVpL092ZXJsYXlSb290LnRzeCIsICJzcmMvcG9sbHktdWkvTW9kYWwudHN4IiwgInNyYy9wb2xseS11aS9Db25maXJtRGlhbG9nLnRzeCIsICJzcmMvcG9sbHktdWkvRmlsZUlucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvSHRtbC50c3giLCAic3JjL3BvbGx5LXVpL0xpbmsudHN4IiwgInNyYy9wb2xseS11aS9PdXRwdXQudHN4IiwgInNyYy9wb2xseS11aS9TZWxlY3QudHN4IiwgInNyYy9wb2xseS11aS9Ta2VsZXRvbi50c3giLCAic3JjL3BvbGx5LXVpL1RhYnMudHN4IiwgInNyYy9wb2xseS11aS9UZXh0LnRzeCIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvaW5wdXQtYmFzZS50cyIsICJzcmMvcG9sbHktdWkvVGV4dElucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvVG9hc3QudHN4IiwgInNyYy9wb2xseS11aS9Ub2dnbGUudHN4IiwgInNyYy9zaGFyZWQvbGliL3N0YXRlLnRzIiwgInRvb2xzL2dhbGxlcnkvc3JjL3N0b3Jlcy50cyIsICJ0b29scy9nYWxsZXJ5L3NyYy9hY3Rpb25zLnRzIiwgInRvb2xzL2dhbGxlcnkvc3JjL3NwZWNpbWVucy50c3giLCAidG9vbHMvZ2FsbGVyeS9zcmMvZ2FsbGVyeS1hcHAudHN4IiwgInRvb2xzL2dhbGxlcnkvc3JjL2NsaWVudC50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAidmFyIG4sbCx1LHQsaSxyLG8sZSxmLGMscyxhLGgscCx2LHksZD17fSx3PVtdLF89L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxnPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gbShuLGwpe2Zvcih2YXIgdSBpbiBsKW5bdV09bFt1XTtyZXR1cm4gbn1mdW5jdGlvbiBiKG4pe24mJm4ucGFyZW50Tm9kZSYmbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pfWZ1bmN0aW9uIGsobCx1LHQpe3ZhciBpLHIsbyxlPXt9O2ZvcihvIGluIHUpXCJrZXlcIj09bz9pPXVbb106XCJyZWZcIj09bz9yPXVbb106ZVtvXT11W29dO2lmKGFyZ3VtZW50cy5sZW5ndGg+MiYmKGUuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP24uY2FsbChhcmd1bWVudHMsMik6dCksXCJmdW5jdGlvblwiPT10eXBlb2YgbCYmbnVsbCE9bC5kZWZhdWx0UHJvcHMpZm9yKG8gaW4gbC5kZWZhdWx0UHJvcHMpdm9pZCAwPT09ZVtvXSYmKGVbb109bC5kZWZhdWx0UHJvcHNbb10pO3JldHVybiB4KGwsZSxpLHIsbnVsbCl9ZnVuY3Rpb24geChuLHQsaSxyLG8pe3ZhciBlPXt0eXBlOm4scHJvcHM6dCxrZXk6aSxyZWY6cixfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6bnVsbD09bz8rK3U6byxfX2k6LTEsX191OjB9O3JldHVybiBudWxsPT1vJiZudWxsIT1sLnZub2RlJiZsLnZub2RlKGUpLGV9ZnVuY3Rpb24gTSgpe3JldHVybntjdXJyZW50Om51bGx9fWZ1bmN0aW9uIFMobil7cmV0dXJuIG4uY2hpbGRyZW59ZnVuY3Rpb24gQyhuLGwpe3RoaXMucHJvcHM9bix0aGlzLmNvbnRleHQ9bH1mdW5jdGlvbiAkKG4sbCl7aWYobnVsbD09bClyZXR1cm4gbi5fXz8kKG4uX18sbi5fX2krMSk6bnVsbDtmb3IodmFyIHU7bDxuLl9fay5sZW5ndGg7bCsrKWlmKG51bGwhPSh1PW4uX19rW2xdKSYmbnVsbCE9dS5fX2UpcmV0dXJuIHUuX19lO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4udHlwZT8kKG4pOm51bGx9ZnVuY3Rpb24gSShuKXtpZihuLl9fUCYmbi5fX2Qpe3ZhciB1PW4uX192LHQ9dS5fX2UsaT1bXSxyPVtdLG89bSh7fSx1KTtvLl9fdj11Ll9fdisxLGwudm5vZGUmJmwudm5vZGUobykscShuLl9fUCxvLHUsbi5fX24sbi5fX1AubmFtZXNwYWNlVVJJLDMyJnUuX191P1t0XTpudWxsLGksbnVsbD09dD8kKHUpOnQsISEoMzImdS5fX3UpLHIpLG8uX192PXUuX192LG8uX18uX19rW28uX19pXT1vLEQoaSxvLHIpLHUuX19lPXUuX189bnVsbCxvLl9fZSE9dCYmUChvKX19ZnVuY3Rpb24gUChuKXtpZihudWxsIT0obj1uLl9fKSYmbnVsbCE9bi5fX2MpcmV0dXJuIG4uX19lPW4uX19jLmJhc2U9bnVsbCxuLl9fay5zb21lKGZ1bmN0aW9uKGwpe2lmKG51bGwhPWwmJm51bGwhPWwuX19lKXJldHVybiBuLl9fZT1uLl9fYy5iYXNlPWwuX19lfSksUChuKX1mdW5jdGlvbiBBKG4peyghbi5fX2QmJihuLl9fZD0hMCkmJmkucHVzaChuKSYmIUguX19yKyt8fHIhPWwuZGVib3VuY2VSZW5kZXJpbmcpJiYoKHI9bC5kZWJvdW5jZVJlbmRlcmluZyl8fG8pKEgpfWZ1bmN0aW9uIEgoKXt0cnl7Zm9yKHZhciBuLGw9MTtpLmxlbmd0aDspaS5sZW5ndGg+bCYmaS5zb3J0KGUpLG49aS5zaGlmdCgpLGw9aS5sZW5ndGgsSShuKX1maW5hbGx5e2kubGVuZ3RoPUguX19yPTB9fWZ1bmN0aW9uIEwobixsLHUsdCxpLHIsbyxlLGYsYyxzKXt2YXIgYSxoLHAsdix5LF8sZyxtPXQmJnQuX19rfHx3LGI9bC5sZW5ndGg7Zm9yKGY9VCh1LGwsbSxmLGIpLGE9MDthPGI7YSsrKW51bGwhPShwPXUuX19rW2FdKSYmKGg9LTEhPXAuX19pJiZtW3AuX19pXXx8ZCxwLl9faT1hLF89cShuLHAsaCxpLHIsbyxlLGYsYyxzKSx2PXAuX19lLHAucmVmJiZoLnJlZiE9cC5yZWYmJihoLnJlZiYmSihoLnJlZixudWxsLHApLHMucHVzaChwLnJlZixwLl9fY3x8dixwKSksbnVsbD09eSYmbnVsbCE9diYmKHk9diksKGc9ISEoNCZwLl9fdSkpfHxoLl9faz09PXAuX19rPyhmPWoocCxmLG4sZyksZyYmaC5fX2UmJihoLl9fZT1udWxsKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgcC50eXBlJiZ2b2lkIDAhPT1fP2Y9Xzp2JiYoZj12Lm5leHRTaWJsaW5nKSxwLl9fdSY9LTcpO3JldHVybiB1Ll9fZT15LGZ9ZnVuY3Rpb24gVChuLGwsdSx0LGkpe3ZhciByLG8sZSxmLGMscz11Lmxlbmd0aCxhPXMsaD0wO2ZvcihuLl9faz1uZXcgQXJyYXkoaSkscj0wO3I8aTtyKyspbnVsbCE9KG89bFtyXSkmJlwiYm9vbGVhblwiIT10eXBlb2YgbyYmXCJmdW5jdGlvblwiIT10eXBlb2Ygbz8oXCJzdHJpbmdcIj09dHlwZW9mIG98fFwibnVtYmVyXCI9PXR5cGVvZiBvfHxcImJpZ2ludFwiPT10eXBlb2Ygb3x8by5jb25zdHJ1Y3Rvcj09U3RyaW5nP289bi5fX2tbcl09eChudWxsLG8sbnVsbCxudWxsLG51bGwpOmcobyk/bz1uLl9fa1tyXT14KFMse2NoaWxkcmVuOm99LG51bGwsbnVsbCxudWxsKTp2b2lkIDA9PT1vLmNvbnN0cnVjdG9yJiZvLl9fYj4wP289bi5fX2tbcl09eChvLnR5cGUsby5wcm9wcyxvLmtleSxvLnJlZj9vLnJlZjpudWxsLG8uX192KTpuLl9fa1tyXT1vLGY9citoLG8uX189bixvLl9fYj1uLl9fYisxLGU9bnVsbCwtMSE9KGM9by5fX2k9TyhvLHUsZixhKSkmJihhLS0sKGU9dVtjXSkmJihlLl9fdXw9MikpLG51bGw9PWV8fG51bGw9PWUuX192PygtMT09YyYmKGk+cz9oLS06aTxzJiZoKyspLFwiZnVuY3Rpb25cIiE9dHlwZW9mIG8udHlwZSYmKG8uX191fD00KSk6YyE9ZiYmKGM9PWYtMT9oLS06Yz09ZisxP2grKzooYz5mP2gtLTpoKyssby5fX3V8PTQpKSk6bi5fX2tbcl09bnVsbDtpZihhKWZvcihyPTA7cjxzO3IrKyludWxsIT0oZT11W3JdKSYmMD09KDImZS5fX3UpJiYoZS5fX2U9PXQmJih0PSQoZSkpLEsoZSxlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gaihuLGwsdSx0KXt2YXIgaSxyO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4udHlwZSl7Zm9yKGk9bi5fX2sscj0wO2kmJnI8aS5sZW5ndGg7cisrKWlbcl0mJihpW3JdLl9fPW4sbD1qKGlbcl0sbCx1LHQpKTtyZXR1cm4gbH1uLl9fZSE9bCYmKHQmJihsJiZuLnR5cGUmJiFsLnBhcmVudE5vZGUmJihsPSQobikpLHUuaW5zZXJ0QmVmb3JlKG4uX19lLGx8fG51bGwpKSxsPW4uX19lKTtkb3tsPWwmJmwubmV4dFNpYmxpbmd9d2hpbGUobnVsbCE9bCYmOD09bC5ub2RlVHlwZSk7cmV0dXJuIGx9ZnVuY3Rpb24gRihuLGwpe3JldHVybiBsPWx8fFtdLG51bGw9PW58fFwiYm9vbGVhblwiPT10eXBlb2Ygbnx8KGcobik/bi5zb21lKGZ1bmN0aW9uKG4pe0YobixsKX0pOmwucHVzaChuKSksbH1mdW5jdGlvbiBPKG4sbCx1LHQpe3ZhciBpLHIsbyxlPW4ua2V5LGY9bi50eXBlLGM9bFt1XSxzPW51bGwhPWMmJjA9PSgyJmMuX191KTtpZihudWxsPT09YyYmbnVsbD09ZXx8cyYmZT09Yy5rZXkmJmY9PWMudHlwZSlyZXR1cm4gdTtpZih0PihzPzE6MCkpZm9yKGk9dS0xLHI9dSsxO2k+PTB8fHI8bC5sZW5ndGg7KWlmKG51bGwhPShjPWxbbz1pPj0wP2ktLTpyKytdKSYmMD09KDImYy5fX3UpJiZlPT1jLmtleSYmZj09Yy50eXBlKXJldHVybiBvO3JldHVybi0xfWZ1bmN0aW9uIHoobixsLHUpe1wiLVwiPT1sWzBdP24uc2V0UHJvcGVydHkobCxudWxsPT11P1wiXCI6dSk6bltsXT1udWxsPT11P1wiXCI6XCJudW1iZXJcIiE9dHlwZW9mIHV8fF8udGVzdChsKT91OnUrXCJweFwifWZ1bmN0aW9uIE4obixsLHUsdCxpKXt2YXIgcixvO246aWYoXCJzdHlsZVwiPT1sKWlmKFwic3RyaW5nXCI9PXR5cGVvZiB1KW4uc3R5bGUuY3NzVGV4dD11O2Vsc2V7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJihuLnN0eWxlLmNzc1RleHQ9dD1cIlwiKSx0KWZvcihsIGluIHQpdSYmbCBpbiB1fHx6KG4uc3R5bGUsbCxcIlwiKTtpZih1KWZvcihsIGluIHUpdCYmdVtsXT09dFtsXXx8eihuLnN0eWxlLGwsdVtsXSl9ZWxzZSBpZihcIm9cIj09bFswXSYmXCJuXCI9PWxbMV0pcj1sIT0obD1sLnJlcGxhY2UoYSxcIiQxXCIpKSxvPWwudG9Mb3dlckNhc2UoKSxsPW8gaW4gbnx8XCJvbkZvY3VzT3V0XCI9PWx8fFwib25Gb2N1c0luXCI9PWw/by5zbGljZSgyKTpsLnNsaWNlKDIpLG4ubHx8KG4ubD17fSksbi5sW2wrcl09dSx1P3Q/dVtzXT10W3NdOih1W3NdPWgsbi5hZGRFdmVudExpc3RlbmVyKGwscj92OnAscikpOm4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLHI/djpwLHIpO2Vsc2V7aWYoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPT1pKWw9bC5yZXBsYWNlKC94bGluayhIfDpoKS8sXCJoXCIpLnJlcGxhY2UoL3NOYW1lJC8sXCJzXCIpO2Vsc2UgaWYoXCJ3aWR0aFwiIT1sJiZcImhlaWdodFwiIT1sJiZcImhyZWZcIiE9bCYmXCJsaXN0XCIhPWwmJlwiZm9ybVwiIT1sJiZcInRhYkluZGV4XCIhPWwmJlwiZG93bmxvYWRcIiE9bCYmXCJyb3dTcGFuXCIhPWwmJlwiY29sU3BhblwiIT1sJiZcInJvbGVcIiE9bCYmXCJwb3BvdmVyXCIhPWwmJmwgaW4gbil0cnl7bltsXT1udWxsPT11P1wiXCI6dTticmVhayBufWNhdGNoKG4pe31cImZ1bmN0aW9uXCI9PXR5cGVvZiB1fHwobnVsbD09dXx8ITE9PT11JiZcIi1cIiE9bFs0XT9uLnJlbW92ZUF0dHJpYnV0ZShsKTpuLnNldEF0dHJpYnV0ZShsLFwicG9wb3ZlclwiPT1sJiYxPT11P1wiXCI6dSkpfX1mdW5jdGlvbiBWKG4pe3JldHVybiBmdW5jdGlvbih1KXtpZih0aGlzLmwpe3ZhciB0PXRoaXMubFt1LnR5cGUrbl07aWYobnVsbD09dVtjXSl1W2NdPWgrKztlbHNlIGlmKHVbY108dFtzXSlyZXR1cm47cmV0dXJuIHQobC5ldmVudD9sLmV2ZW50KHUpOnUpfX19ZnVuY3Rpb24gcShuLHUsdCxpLHIsbyxlLGYsYyxzKXt2YXIgYSxoLHAsdix5LGQsXyxrLHgsTSwkLEksUCxBLEgsVD11LnR5cGU7aWYodm9pZCAwIT09dS5jb25zdHJ1Y3RvcilyZXR1cm4gbnVsbDsxMjgmdC5fX3UmJihjPSEhKDMyJnQuX191KSxvPVtmPXUuX19lPXQuX19lXSksKGE9bC5fX2IpJiZhKHUpO246aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgVCl0cnl7aWYoaz11LnByb3BzLHg9VC5wcm90b3R5cGUmJlQucHJvdG90eXBlLnJlbmRlcixNPShhPVQuY29udGV4dFR5cGUpJiZpW2EuX19jXSwkPWE/TT9NLnByb3BzLnZhbHVlOmEuX186aSx0Ll9fYz9fPShoPXUuX19jPXQuX19jKS5fXz1oLl9fRTooeD91Ll9fYz1oPW5ldyBUKGssJCk6KHUuX19jPWg9bmV3IEMoaywkKSxoLmNvbnN0cnVjdG9yPVQsaC5yZW5kZXI9USksTSYmTS5zdWIoaCksaC5zdGF0ZXx8KGguc3RhdGU9e30pLGguX19uPWkscD1oLl9fZD0hMCxoLl9faD1bXSxoLl9zYj1bXSkseCYmbnVsbD09aC5fX3MmJihoLl9fcz1oLnN0YXRlKSx4JiZudWxsIT1ULmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmKGguX19zPT1oLnN0YXRlJiYoaC5fX3M9bSh7fSxoLl9fcykpLG0oaC5fX3MsVC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoayxoLl9fcykpKSx2PWgucHJvcHMseT1oLnN0YXRlLGguX192PXUscCl4JiZudWxsPT1ULmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmbnVsbCE9aC5jb21wb25lbnRXaWxsTW91bnQmJmguY29tcG9uZW50V2lsbE1vdW50KCkseCYmbnVsbCE9aC5jb21wb25lbnREaWRNb3VudCYmaC5fX2gucHVzaChoLmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKHgmJm51bGw9PVQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJiZrIT09diYmbnVsbCE9aC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZoLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoaywkKSx1Ll9fdj09dC5fX3Z8fCFoLl9fZSYmbnVsbCE9aC5zaG91bGRDb21wb25lbnRVcGRhdGUmJiExPT09aC5zaG91bGRDb21wb25lbnRVcGRhdGUoayxoLl9fcywkKSl7dS5fX3YhPXQuX192JiYoaC5wcm9wcz1rLGguc3RhdGU9aC5fX3MsaC5fX2Q9ITEpLHUuX19lPXQuX19lLHUuX19rPXQuX19rLHUuX19rLnNvbWUoZnVuY3Rpb24obil7biYmKG4uX189dSl9KSx3LnB1c2guYXBwbHkoaC5fX2gsaC5fc2IpLGguX3NiPVtdLGguX19oLmxlbmd0aCYmZS5wdXNoKGgpO2JyZWFrIG59bnVsbCE9aC5jb21wb25lbnRXaWxsVXBkYXRlJiZoLmNvbXBvbmVudFdpbGxVcGRhdGUoayxoLl9fcywkKSx4JiZudWxsIT1oLmNvbXBvbmVudERpZFVwZGF0ZSYmaC5fX2gucHVzaChmdW5jdGlvbigpe2guY29tcG9uZW50RGlkVXBkYXRlKHYseSxkKX0pfWlmKGguY29udGV4dD0kLGgucHJvcHM9ayxoLl9fUD1uLGguX19lPSExLEk9bC5fX3IsUD0wLHgpaC5zdGF0ZT1oLl9fcyxoLl9fZD0hMSxJJiZJKHUpLGE9aC5yZW5kZXIoaC5wcm9wcyxoLnN0YXRlLGguY29udGV4dCksdy5wdXNoLmFwcGx5KGguX19oLGguX3NiKSxoLl9zYj1bXTtlbHNlIGRve2guX19kPSExLEkmJkkodSksYT1oLnJlbmRlcihoLnByb3BzLGguc3RhdGUsaC5jb250ZXh0KSxoLnN0YXRlPWguX19zfXdoaWxlKGguX19kJiYrK1A8MjUpO2guc3RhdGU9aC5fX3MsbnVsbCE9aC5nZXRDaGlsZENvbnRleHQmJihpPW0obSh7fSxpKSxoLmdldENoaWxkQ29udGV4dCgpKSkseCYmIXAmJm51bGwhPWguZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUmJihkPWguZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUodix5KSksQT1udWxsIT1hJiZhLnR5cGU9PT1TJiZudWxsPT1hLmtleT9FKGEucHJvcHMuY2hpbGRyZW4pOmEsZj1MKG4sZyhBKT9BOltBXSx1LHQsaSxyLG8sZSxmLGMscyksaC5iYXNlPXUuX19lLHUuX191Jj0tMTYxLGguX19oLmxlbmd0aCYmZS5wdXNoKGgpLF8mJihoLl9fRT1oLl9fPW51bGwpfWNhdGNoKG4pe2lmKHUuX192PW51bGwsY3x8bnVsbCE9bylpZihuLnRoZW4pe2Zvcih1Ll9fdXw9Yz8xNjA6MTI4O2YmJjg9PWYubm9kZVR5cGUmJmYubmV4dFNpYmxpbmc7KWY9Zi5uZXh0U2libGluZztvW28uaW5kZXhPZihmKV09bnVsbCx1Ll9fZT1mfWVsc2V7Zm9yKEg9by5sZW5ndGg7SC0tOyliKG9bSF0pO0IodSl9ZWxzZSB1Ll9fZT10Ll9fZSx1Ll9faz10Ll9fayxuLnRoZW58fEIodSk7bC5fX2Uobix1LHQpfWVsc2UgbnVsbD09byYmdS5fX3Y9PXQuX192Pyh1Ll9faz10Ll9fayx1Ll9fZT10Ll9fZSk6Zj11Ll9fZT1HKHQuX19lLHUsdCxpLHIsbyxlLGMscyk7cmV0dXJuKGE9bC5kaWZmZWQpJiZhKHUpLDEyOCZ1Ll9fdT92b2lkIDA6Zn1mdW5jdGlvbiBCKG4pe24mJihuLl9fYyYmKG4uX19jLl9fZT0hMCksbi5fX2smJm4uX19rLnNvbWUoQikpfWZ1bmN0aW9uIEQobix1LHQpe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKUoodFtpXSx0WysraV0sdFsrK2ldKTtsLl9fYyYmbC5fX2ModSxuKSxuLnNvbWUoZnVuY3Rpb24odSl7dHJ5e249dS5fX2gsdS5fX2g9W10sbi5zb21lKGZ1bmN0aW9uKG4pe24uY2FsbCh1KX0pfWNhdGNoKG4pe2wuX19lKG4sdS5fX3YpfX0pfWZ1bmN0aW9uIEUobil7cmV0dXJuXCJvYmplY3RcIiE9dHlwZW9mIG58fG51bGw9PW58fG4uX19iPjA/bjpnKG4pP24ubWFwKEUpOm0oe30sbil9ZnVuY3Rpb24gRyh1LHQsaSxyLG8sZSxmLGMscyl7dmFyIGEsaCxwLHYseSx3LF8sbT1pLnByb3BzfHxkLGs9dC5wcm9wcyx4PXQudHlwZTtpZihcInN2Z1wiPT14P289XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiOlwibWF0aFwiPT14P289XCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCI6b3x8KG89XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIpLG51bGwhPWUpZm9yKGE9MDthPGUubGVuZ3RoO2ErKylpZigoeT1lW2FdKSYmXCJzZXRBdHRyaWJ1dGVcImluIHk9PSEheCYmKHg/eS5sb2NhbE5hbWU9PXg6Mz09eS5ub2RlVHlwZSkpe3U9eSxlW2FdPW51bGw7YnJlYWt9aWYobnVsbD09dSl7aWYobnVsbD09eClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoayk7dT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobyx4LGsuaXMmJmspLGMmJihsLl9fbSYmbC5fX20odCxlKSxjPSExKSxlPW51bGx9aWYobnVsbD09eCltPT09a3x8YyYmdS5kYXRhPT1rfHwodS5kYXRhPWspO2Vsc2V7aWYoZT1lJiZuLmNhbGwodS5jaGlsZE5vZGVzKSwhYyYmbnVsbCE9ZSlmb3IobT17fSxhPTA7YTx1LmF0dHJpYnV0ZXMubGVuZ3RoO2ErKyltWyh5PXUuYXR0cmlidXRlc1thXSkubmFtZV09eS52YWx1ZTtmb3IoYSBpbiBtKXk9bVthXSxcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI9PWE/cD15OlwiY2hpbGRyZW5cIj09YXx8YSBpbiBrfHxcInZhbHVlXCI9PWEmJlwiZGVmYXVsdFZhbHVlXCJpbiBrfHxcImNoZWNrZWRcIj09YSYmXCJkZWZhdWx0Q2hlY2tlZFwiaW4ga3x8Tih1LGEsbnVsbCx5LG8pO2ZvcihhIGluIGspeT1rW2FdLFwiY2hpbGRyZW5cIj09YT92PXk6XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT1hP2g9eTpcInZhbHVlXCI9PWE/dz15OlwiY2hlY2tlZFwiPT1hP189eTpjJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB5fHxtW2FdPT09eXx8Tih1LGEseSxtW2FdLG8pO2lmKGgpY3x8cCYmKGguX19odG1sPT1wLl9faHRtbHx8aC5fX2h0bWw9PXUuaW5uZXJIVE1MKXx8KHUuaW5uZXJIVE1MPWguX19odG1sKSx0Ll9faz1bXTtlbHNlIGlmKHAmJih1LmlubmVySFRNTD1cIlwiKSxMKFwidGVtcGxhdGVcIj09dC50eXBlP3UuY29udGVudDp1LGcodik/djpbdl0sdCxpLHIsXCJmb3JlaWduT2JqZWN0XCI9PXg/XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI6byxlLGYsZT9lWzBdOmkuX19rJiYkKGksMCksYyxzKSxudWxsIT1lKWZvcihhPWUubGVuZ3RoO2EtLTspYihlW2FdKTtjfHwoYT1cInZhbHVlXCIsXCJwcm9ncmVzc1wiPT14JiZudWxsPT13P3UucmVtb3ZlQXR0cmlidXRlKFwidmFsdWVcIik6bnVsbCE9dyYmKHchPT11W2FdfHxcInByb2dyZXNzXCI9PXgmJiF3fHxcIm9wdGlvblwiPT14JiZ3IT1tW2FdKSYmTih1LGEsdyxtW2FdLG8pLGE9XCJjaGVja2VkXCIsbnVsbCE9XyYmXyE9dVthXSYmTih1LGEsXyxtW2FdLG8pKX1yZXR1cm4gdX1mdW5jdGlvbiBKKG4sdSx0KXt0cnl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbil7dmFyIGk9XCJmdW5jdGlvblwiPT10eXBlb2Ygbi5fX3U7aSYmbi5fX3UoKSxpJiZudWxsPT11fHwobi5fX3U9bih1KSl9ZWxzZSBuLmN1cnJlbnQ9dX1jYXRjaChuKXtsLl9fZShuLHQpfX1mdW5jdGlvbiBLKG4sdSx0KXt2YXIgaSxyO2lmKGwudW5tb3VudCYmbC51bm1vdW50KG4pLChpPW4ucmVmKSYmKGkuY3VycmVudCYmaS5jdXJyZW50IT1uLl9fZXx8SihpLG51bGwsdSkpLG51bGwhPShpPW4uX19jKSl7aWYoaS5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7aS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKG4pe2wuX19lKG4sdSl9aS5iYXNlPWkuX19QPW51bGx9aWYoaT1uLl9faylmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl0mJksoaVtyXSx1LHR8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIG4udHlwZSk7dHx8YihuLl9fZSksbi5fX2M9bi5fXz1uLl9fZT12b2lkIDB9ZnVuY3Rpb24gUShuLGwsdSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3Iobix1KX1mdW5jdGlvbiBSKHUsdCxpKXt2YXIgcixvLGUsZjt0PT1kb2N1bWVudCYmKHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxsLl9fJiZsLl9fKHUsdCksbz0ocj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpKT9udWxsOmkmJmkuX19rfHx0Ll9fayxlPVtdLGY9W10scSh0LHU9KCFyJiZpfHx0KS5fX2s9ayhTLG51bGwsW3VdKSxvfHxkLGQsdC5uYW1lc3BhY2VVUkksIXImJmk/W2ldOm8/bnVsbDp0LmZpcnN0Q2hpbGQ/bi5jYWxsKHQuY2hpbGROb2Rlcyk6bnVsbCxlLCFyJiZpP2k6bz9vLl9fZTp0LmZpcnN0Q2hpbGQscixmKSxEKGUsdSxmKX1mdW5jdGlvbiBVKG4sbCl7UihuLGwsVSl9ZnVuY3Rpb24gVyhsLHUsdCl7dmFyIGkscixvLGUsZj1tKHt9LGwucHJvcHMpO2ZvcihvIGluIGwudHlwZSYmbC50eXBlLmRlZmF1bHRQcm9wcyYmKGU9bC50eXBlLmRlZmF1bHRQcm9wcyksdSlcImtleVwiPT1vP2k9dVtvXTpcInJlZlwiPT1vP3I9dVtvXTpmW29dPXZvaWQgMD09PXVbb10mJm51bGwhPWU/ZVtvXTp1W29dO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjImJihmLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9uLmNhbGwoYXJndW1lbnRzLDIpOnQpLHgobC50eXBlLGYsaXx8bC5rZXkscnx8bC5yZWYsbnVsbCl9ZnVuY3Rpb24gWChuKXtmdW5jdGlvbiBsKG4pe3ZhciB1LHQ7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0fHwodT1uZXcgU2V0LCh0PXt9KVtsLl9fY109dGhpcyx0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiB0fSx0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dT1udWxsfSx0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLnByb3BzLnZhbHVlIT1uLnZhbHVlJiZ1LmZvckVhY2goZnVuY3Rpb24obil7bi5fX2U9ITAsQShuKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihuKXt1LmFkZChuKTt2YXIgbD1uLmNvbXBvbmVudFdpbGxVbm1vdW50O24uY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt1JiZ1LmRlbGV0ZShuKSxsJiZsLmNhbGwobil9fSksbi5jaGlsZHJlbn1yZXR1cm4gbC5fX2M9XCJfX2NDXCIreSsrLGwuX189bixsLlByb3ZpZGVyPWwuX19sPShsLkNvbnN1bWVyPWZ1bmN0aW9uKG4sbCl7cmV0dXJuIG4uY2hpbGRyZW4obCl9KS5jb250ZXh0VHlwZT1sLGx9bj13LnNsaWNlLGw9e19fZTpmdW5jdGlvbihuLGwsdSx0KXtmb3IodmFyIGkscixvO2w9bC5fXzspaWYoKGk9bC5fX2MpJiYhaS5fXyl0cnl7aWYoKHI9aS5jb25zdHJ1Y3RvcikmJm51bGwhPXIuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yJiYoaS5zZXRTdGF0ZShyLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihuKSksbz1pLl9fZCksbnVsbCE9aS5jb21wb25lbnREaWRDYXRjaCYmKGkuY29tcG9uZW50RGlkQ2F0Y2gobix0fHx7fSksbz1pLl9fZCksbylyZXR1cm4gaS5fX0U9aX1jYXRjaChsKXtuPWx9dGhyb3cgbn19LHU9MCx0PWZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZ2b2lkIDA9PT1uLmNvbnN0cnVjdG9yfSxDLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihuLGwpe3ZhciB1O3U9bnVsbCE9dGhpcy5fX3MmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPW0oe30sdGhpcy5zdGF0ZSksXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKG49bihtKHt9LHUpLHRoaXMucHJvcHMpKSxuJiZtKHUsbiksbnVsbCE9biYmdGhpcy5fX3YmJihsJiZ0aGlzLl9zYi5wdXNoKGwpLEEodGhpcykpfSxDLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLG4mJnRoaXMuX19oLnB1c2gobiksQSh0aGlzKSl9LEMucHJvdG90eXBlLnJlbmRlcj1TLGk9W10sbz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm9taXNlP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCxlPWZ1bmN0aW9uKG4sbCl7cmV0dXJuIG4uX192Ll9fYi1sLl9fdi5fX2J9LEguX19yPTAsZj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDgpLGM9XCJfX2RcIitmLHM9XCJfX2FcIitmLGE9LyhQb2ludGVyQ2FwdHVyZSkkfENhcHR1cmUkL2ksaD0wLHA9VighMSksdj1WKCEwKSx5PTA7ZXhwb3J0e0MgYXMgQ29tcG9uZW50LFMgYXMgRnJhZ21lbnQsVyBhcyBjbG9uZUVsZW1lbnQsWCBhcyBjcmVhdGVDb250ZXh0LGsgYXMgY3JlYXRlRWxlbWVudCxNIGFzIGNyZWF0ZVJlZixrIGFzIGgsVSBhcyBoeWRyYXRlLHQgYXMgaXNWYWxpZEVsZW1lbnQsbCBhcyBvcHRpb25zLFIgYXMgcmVuZGVyLEYgYXMgdG9DaGlsZEFycmF5fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZWFjdC5tb2R1bGUuanMubWFwXG4iLAogICAgImltcG9ydHtvcHRpb25zIGFzIG59ZnJvbVwicHJlYWN0XCI7dmFyIHQscix1LGksbz0wLGY9W10sYz1uLGU9Yy5fX2IsYT1jLl9fcix2PWMuZGlmZmVkLGw9Yy5fX2MsbT1jLnVubW91bnQscz1jLl9fO2Z1bmN0aW9uIHAobix0KXtjLl9faCYmYy5fX2gocixuLG98fHQpLG89MDt2YXIgdT1yLl9fSHx8KHIuX19IPXtfXzpbXSxfX2g6W119KTtyZXR1cm4gbj49dS5fXy5sZW5ndGgmJnUuX18ucHVzaCh7fSksdS5fX1tuXX1mdW5jdGlvbiBkKG4pe3JldHVybiBvPTEsaChELG4pfWZ1bmN0aW9uIGgobix1LGkpe3ZhciBvPXAodCsrLDIpO2lmKG8udD1uLCFvLl9fYyYmKG8uX189W2k/aSh1KTpEKHZvaWQgMCx1KSxmdW5jdGlvbihuKXt2YXIgdD1vLl9fTj9vLl9fTlswXTpvLl9fWzBdLHI9by50KHQsbik7dCE9PXImJihvLl9fTj1bcixvLl9fWzFdXSxvLl9fYy5zZXRTdGF0ZSh7fSkpfV0sby5fX2M9ciwhci5fX2YpKXt2YXIgZj1mdW5jdGlvbihuLHQscil7aWYoIW8uX19jLl9fSClyZXR1cm4hMDt2YXIgdT1vLl9fYy5fX0guX18uZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLl9fY30pO2lmKHUuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIW4uX19OfSkpcmV0dXJuIWN8fGMuY2FsbCh0aGlzLG4sdCxyKTt2YXIgaT1vLl9fYy5wcm9wcyE9PW47cmV0dXJuIHUuc29tZShmdW5jdGlvbihuKXtpZihuLl9fTil7dmFyIHQ9bi5fX1swXTtuLl9fPW4uX19OLG4uX19OPXZvaWQgMCx0IT09bi5fX1swXSYmKGk9ITApfX0pLGMmJmMuY2FsbCh0aGlzLG4sdCxyKXx8aX07ci5fX2Y9ITA7dmFyIGM9ci5zaG91bGRDb21wb25lbnRVcGRhdGUsZT1yLmNvbXBvbmVudFdpbGxVcGRhdGU7ci5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKG4sdCxyKXtpZih0aGlzLl9fZSl7dmFyIHU9YztjPXZvaWQgMCxmKG4sdCxyKSxjPXV9ZSYmZS5jYWxsKHRoaXMsbix0LHIpfSxyLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mfXJldHVybiBvLl9fTnx8by5fX31mdW5jdGlvbiB5KG4sdSl7dmFyIGk9cCh0KyssMyk7IWMuX19zJiZDKGkuX19ILHUpJiYoaS5fXz1uLGkudT11LHIuX19ILl9faC5wdXNoKGkpKX1mdW5jdGlvbiBfKG4sdSl7dmFyIGk9cCh0KyssNCk7IWMuX19zJiZDKGkuX19ILHUpJiYoaS5fXz1uLGkudT11LHIuX19oLnB1c2goaSkpfWZ1bmN0aW9uIEEobil7cmV0dXJuIG89NSxUKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bn19LFtdKX1mdW5jdGlvbiBGKG4sdCxyKXtvPTYsXyhmdW5jdGlvbigpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe3ZhciByPW4odCgpKTtyZXR1cm4gZnVuY3Rpb24oKXtuKG51bGwpLHImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHImJnIoKX19aWYobilyZXR1cm4gbi5jdXJyZW50PXQoKSxmdW5jdGlvbigpe3JldHVybiBuLmN1cnJlbnQ9bnVsbH19LG51bGw9PXI/cjpyLmNvbmNhdChuKSl9ZnVuY3Rpb24gVChuLHIpe3ZhciB1PXAodCsrLDcpO3JldHVybiBDKHUuX19ILHIpJiYodS5fXz1uKCksdS5fX0g9cix1Ll9faD1uKSx1Ll9ffWZ1bmN0aW9uIHEobix0KXtyZXR1cm4gbz04LFQoZnVuY3Rpb24oKXtyZXR1cm4gbn0sdCl9ZnVuY3Rpb24geChuKXt2YXIgdT1yLmNvbnRleHRbbi5fX2NdLGk9cCh0KyssOSk7cmV0dXJuIGkuYz1uLHU/KG51bGw9PWkuX18mJihpLl9fPSEwLHUuc3ViKHIpKSx1LnByb3BzLnZhbHVlKTpuLl9ffWZ1bmN0aW9uIFAobix0KXtjLnVzZURlYnVnVmFsdWUmJmMudXNlRGVidWdWYWx1ZSh0P3Qobik6bil9ZnVuY3Rpb24gYihuKXt2YXIgdT1wKHQrKywxMCksaT1kKCk7cmV0dXJuIHUuX189bixyLmNvbXBvbmVudERpZENhdGNofHwoci5jb21wb25lbnREaWRDYXRjaD1mdW5jdGlvbihuLHQpe3UuX18mJnUuX18obix0KSxpWzFdKG4pfSksW2lbMF0sZnVuY3Rpb24oKXtpWzFdKHZvaWQgMCl9XX1mdW5jdGlvbiBnKCl7dmFyIG49cCh0KyssMTEpO2lmKCFuLl9fKXtmb3IodmFyIHU9ci5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXzt2YXIgaT11Ll9fbXx8KHUuX19tPVswLDBdKTtuLl9fPVwiUFwiK2lbMF0rXCItXCIraVsxXSsrfXJldHVybiBuLl9ffWZ1bmN0aW9uIGooKXtmb3IodmFyIG47bj1mLnNoaWZ0KCk7KXt2YXIgdD1uLl9fSDtpZihuLl9fUCYmdCl0cnl7dC5fX2guc29tZSh6KSx0Ll9faC5zb21lKEIpLHQuX19oPVtdfWNhdGNoKHIpe3QuX19oPVtdLGMuX19lKHIsbi5fX3YpfX19Yy5fX2I9ZnVuY3Rpb24obil7cj1udWxsLGUmJmUobil9LGMuX189ZnVuY3Rpb24obix0KXtuJiZ0Ll9fayYmdC5fX2suX19tJiYobi5fX209dC5fX2suX19tKSxzJiZzKG4sdCl9LGMuX19yPWZ1bmN0aW9uKG4pe2EmJmEobiksdD0wO3ZhciBpPShyPW4uX19jKS5fX0g7aSYmKHU9PT1yPyhpLl9faD1bXSxyLl9faD1bXSxpLl9fLnNvbWUoZnVuY3Rpb24obil7bi5fX04mJihuLl9fPW4uX19OKSxuLnU9bi5fX049dm9pZCAwfSkpOihpLl9faC5zb21lKHopLGkuX19oLnNvbWUoQiksaS5fX2g9W10sdD0wKSksdT1yfSxjLmRpZmZlZD1mdW5jdGlvbihuKXt2JiZ2KG4pO3ZhciB0PW4uX19jO3QmJnQuX19IJiYodC5fX0guX19oLmxlbmd0aCYmKDEhPT1mLnB1c2godCkmJmk9PT1jLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChpPWMucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8dykoaikpLHQuX19ILl9fLnNvbWUoZnVuY3Rpb24obil7bi51JiYobi5fX0g9bi51KSxuLnU9dm9pZCAwfSkpLHU9cj1udWxsfSxjLl9fYz1mdW5jdGlvbihuLHQpe3Quc29tZShmdW5jdGlvbihuKXt0cnl7bi5fX2guc29tZSh6KSxuLl9faD1uLl9faC5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIW4uX198fEIobil9KX1jYXRjaChyKXt0LnNvbWUoZnVuY3Rpb24obil7bi5fX2gmJihuLl9faD1bXSl9KSx0PVtdLGMuX19lKHIsbi5fX3YpfX0pLGwmJmwobix0KX0sYy51bm1vdW50PWZ1bmN0aW9uKG4pe20mJm0obik7dmFyIHQscj1uLl9fYztyJiZyLl9fSCYmKHIuX19ILl9fLnNvbWUoZnVuY3Rpb24obil7dHJ5e3oobil9Y2F0Y2gobil7dD1ufX0pLHIuX19IPXZvaWQgMCx0JiZjLl9fZSh0LHIuX192KSl9O3ZhciBrPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTtmdW5jdGlvbiB3KG4pe3ZhciB0LHI9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodSksayYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodCksc2V0VGltZW91dChuKX0sdT1zZXRUaW1lb3V0KHIsMzUpO2smJih0PXJlcXVlc3RBbmltYXRpb25GcmFtZShyKSl9ZnVuY3Rpb24geihuKXt2YXIgdD1yLHU9bi5fX2M7XCJmdW5jdGlvblwiPT10eXBlb2YgdSYmKG4uX19jPXZvaWQgMCx1KCkpLHI9dH1mdW5jdGlvbiBCKG4pe3ZhciB0PXI7bi5fX2M9bi5fXygpLHI9dH1mdW5jdGlvbiBDKG4sdCl7cmV0dXJuIW58fG4ubGVuZ3RoIT09dC5sZW5ndGh8fHQuc29tZShmdW5jdGlvbih0LHIpe3JldHVybiB0IT09bltyXX0pfWZ1bmN0aW9uIEQobix0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Qobik6dH1leHBvcnR7cSBhcyB1c2VDYWxsYmFjayx4IGFzIHVzZUNvbnRleHQsUCBhcyB1c2VEZWJ1Z1ZhbHVlLHkgYXMgdXNlRWZmZWN0LGIgYXMgdXNlRXJyb3JCb3VuZGFyeSxnIGFzIHVzZUlkLEYgYXMgdXNlSW1wZXJhdGl2ZUhhbmRsZSxfIGFzIHVzZUxheW91dEVmZmVjdCxUIGFzIHVzZU1lbW8saCBhcyB1c2VSZWR1Y2VyLEEgYXMgdXNlUmVmLGQgYXMgdXNlU3RhdGV9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3MubW9kdWxlLmpzLm1hcFxuIiwKICAgICJ2YXIgaT1TeW1ib2wuZm9yKFwicHJlYWN0LXNpZ25hbHNcIik7ZnVuY3Rpb24gdCgpe2lmKCEocz4xKSl7dmFyIGksdD0hMTshZnVuY3Rpb24oKXt2YXIgaT1jO2M9dm9pZCAwO3doaWxlKHZvaWQgMCE9PWkpe2lmKGkuUy52PT09aS52KWkuUy5pPWkuaTtpPWkub319KCk7d2hpbGUodm9pZCAwIT09aCl7dmFyIG49aDtoPXZvaWQgMDt2Kys7d2hpbGUodm9pZCAwIT09bil7dmFyIHI9bi51O24udT12b2lkIDA7bi5mJj0tMztpZighKDgmbi5mKSYmdyhuKSl0cnl7bi5jKCl9Y2F0Y2gobil7aWYoIXQpe2k9bjt0PSEwfX1uPXJ9fXY9MDtzLS07aWYodCl0aHJvdyBpfWVsc2Ugcy0tfWZ1bmN0aW9uIG4oaSl7aWYocz4wKXJldHVybiBpKCk7ZT0rK3U7cysrO3RyeXtyZXR1cm4gaSgpfWZpbmFsbHl7dCgpfX12YXIgcj12b2lkIDA7ZnVuY3Rpb24gbyhpKXt2YXIgdD1yO3I9dm9pZCAwO3RyeXtyZXR1cm4gaSgpfWZpbmFsbHl7cj10fX12YXIgZixoPXZvaWQgMCxzPTAsdj0wLHU9MCxlPTAsYz12b2lkIDAsZD0wO2Z1bmN0aW9uIGEoaSl7aWYodm9pZCAwIT09cil7dmFyIHQ9aS5uO2lmKHZvaWQgMD09PXR8fHQudCE9PXIpe3Q9e2k6MCxTOmkscDpyLnMsbjp2b2lkIDAsdDpyLGU6dm9pZCAwLHg6dm9pZCAwLHI6dH07aWYodm9pZCAwIT09ci5zKXIucy5uPXQ7ci5zPXQ7aS5uPXQ7aWYoMzImci5mKWkuUyh0KTtyZXR1cm4gdH1lbHNlIGlmKC0xPT09dC5pKXt0Lmk9MDtpZih2b2lkIDAhPT10Lm4pe3Qubi5wPXQucDtpZih2b2lkIDAhPT10LnApdC5wLm49dC5uO3QucD1yLnM7dC5uPXZvaWQgMDtyLnMubj10O3Iucz10fXJldHVybiB0fX19ZnVuY3Rpb24gbChpLHQpe3RoaXMudj1pO3RoaXMuaT0wO3RoaXMubj12b2lkIDA7dGhpcy50PXZvaWQgMDt0aGlzLmw9MDt0aGlzLlc9bnVsbD09dD92b2lkIDA6dC53YXRjaGVkO3RoaXMuWj1udWxsPT10P3ZvaWQgMDp0LnVud2F0Y2hlZDt0aGlzLm5hbWU9bnVsbD09dD92b2lkIDA6dC5uYW1lfWwucHJvdG90eXBlLmJyYW5kPWk7bC5wcm90b3R5cGUuaD1mdW5jdGlvbigpe3JldHVybiEwfTtsLnByb3RvdHlwZS5TPWZ1bmN0aW9uKGkpe3ZhciB0PXRoaXMsbj10aGlzLnQ7aWYobiE9PWkmJnZvaWQgMD09PWkuZSl7aS54PW47dGhpcy50PWk7aWYodm9pZCAwIT09biluLmU9aTtlbHNlIG8oZnVuY3Rpb24oKXt2YXIgaTtudWxsPT0oaT10LlcpfHxpLmNhbGwodCl9KX19O2wucHJvdG90eXBlLlU9ZnVuY3Rpb24oaSl7dmFyIHQ9dGhpcztpZih2b2lkIDAhPT10aGlzLnQpe3ZhciBuPWkuZSxyPWkueDtpZih2b2lkIDAhPT1uKXtuLng9cjtpLmU9dm9pZCAwfWlmKHZvaWQgMCE9PXIpe3IuZT1uO2kueD12b2lkIDB9aWYoaT09PXRoaXMudCl7dGhpcy50PXI7aWYodm9pZCAwPT09cilvKGZ1bmN0aW9uKCl7dmFyIGk7bnVsbD09KGk9dC5aKXx8aS5jYWxsKHQpfSl9fX07bC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGkpe3ZhciB0PXRoaXM7cmV0dXJuIGooZnVuY3Rpb24oKXt2YXIgbj10LnZhbHVlLG89cjtyPXZvaWQgMDt0cnl7aShuKX1maW5hbGx5e3I9b319LHtuYW1lOlwic3ViXCJ9KX07bC5wcm90b3R5cGUudmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfTtsLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlK1wiXCJ9O2wucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfTtsLnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcztyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiBpLnZhbHVlfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLnByb3RvdHlwZSxcInZhbHVlXCIse2dldDpmdW5jdGlvbigpe3ZhciBpPWEodGhpcyk7aWYodm9pZCAwIT09aSlpLmk9dGhpcy5pO3JldHVybiB0aGlzLnZ9LHNldDpmdW5jdGlvbihpKXtpZihpIT09dGhpcy52KXtpZih2PjEwMCl0aHJvdyBuZXcgRXJyb3IoXCJDeWNsZSBkZXRlY3RlZFwiKTshZnVuY3Rpb24oaSl7aWYoMCE9PXMmJjA9PT12KWlmKGkubCE9PWUpe2kubD1lO2M9e1M6aSx2OmkudixpOmkuaSxvOmN9fX0odGhpcyk7dGhpcy52PWk7dGhpcy5pKys7ZCsrO3MrKzt0cnl7Zm9yKHZhciBuPXRoaXMudDt2b2lkIDAhPT1uO249bi54KW4udC5OKCl9ZmluYWxseXt0KCl9fX19KTtmdW5jdGlvbiB5KGksdCl7cmV0dXJuIG5ldyBsKGksdCl9ZnVuY3Rpb24gdyhpKXtmb3IodmFyIHQ9aS5zO3ZvaWQgMCE9PXQ7dD10Lm4paWYodC5TLmkhPT10Lml8fCF0LlMuaCgpfHx0LlMuaSE9PXQuaSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBfKGkpe2Zvcih2YXIgdD1pLnM7dm9pZCAwIT09dDt0PXQubil7dmFyIG49dC5TLm47aWYodm9pZCAwIT09bil0LnI9bjt0LlMubj10O3QuaT0tMTtpZih2b2lkIDA9PT10Lm4pe2kucz10O2JyZWFrfX19ZnVuY3Rpb24gYihpKXt2YXIgdD1pLnMsbj12b2lkIDA7d2hpbGUodm9pZCAwIT09dCl7dmFyIHI9dC5wO2lmKC0xPT09dC5pKXt0LlMuVSh0KTtpZih2b2lkIDAhPT1yKXIubj10Lm47aWYodm9pZCAwIT09dC5uKXQubi5wPXJ9ZWxzZSBuPXQ7dC5TLm49dC5yO2lmKHZvaWQgMCE9PXQucil0LnI9dm9pZCAwO3Q9cn1pLnM9bn1mdW5jdGlvbiBwKGksdCl7bC5jYWxsKHRoaXMsdm9pZCAwKTt0aGlzLng9aTt0aGlzLnM9dm9pZCAwO3RoaXMuZz1kLTE7dGhpcy5mPTQ7dGhpcy5XPW51bGw9PXQ/dm9pZCAwOnQud2F0Y2hlZDt0aGlzLlo9bnVsbD09dD92b2lkIDA6dC51bndhdGNoZWQ7dGhpcy5uYW1lPW51bGw9PXQ/dm9pZCAwOnQubmFtZX1wLnByb3RvdHlwZT1uZXcgbDtwLnByb3RvdHlwZS5oPWZ1bmN0aW9uKCl7dGhpcy5mJj0tMztpZigxJnRoaXMuZilyZXR1cm4hMTtpZigzMj09KDM2JnRoaXMuZikpcmV0dXJuITA7dGhpcy5mJj0tNTtpZih0aGlzLmc9PT1kKXJldHVybiEwO3RoaXMuZz1kO3RoaXMuZnw9MTtpZih0aGlzLmk+MCYmIXcodGhpcykpe3RoaXMuZiY9LTI7cmV0dXJuITB9dmFyIGk9cjt0cnl7Xyh0aGlzKTtyPXRoaXM7dmFyIHQ9dGhpcy54KCk7aWYoMTYmdGhpcy5mfHx0aGlzLnYhPT10fHwwPT09dGhpcy5pKXt0aGlzLnY9dDt0aGlzLmYmPS0xNzt0aGlzLmkrK319Y2F0Y2goaSl7dGhpcy52PWk7dGhpcy5mfD0xNjt0aGlzLmkrK31yPWk7Yih0aGlzKTt0aGlzLmYmPS0yO3JldHVybiEwfTtwLnByb3RvdHlwZS5TPWZ1bmN0aW9uKGkpe2lmKHZvaWQgMD09PXRoaXMudCl7dGhpcy5mfD0zNjtmb3IodmFyIHQ9dGhpcy5zO3ZvaWQgMCE9PXQ7dD10Lm4pdC5TLlModCl9bC5wcm90b3R5cGUuUy5jYWxsKHRoaXMsaSl9O3AucHJvdG90eXBlLlU9ZnVuY3Rpb24oaSl7aWYodm9pZCAwIT09dGhpcy50KXtsLnByb3RvdHlwZS5VLmNhbGwodGhpcyxpKTtpZih2b2lkIDA9PT10aGlzLnQpe3RoaXMuZiY9LTMzO2Zvcih2YXIgdD10aGlzLnM7dm9pZCAwIT09dDt0PXQubil0LlMuVSh0KX19fTtwLnByb3RvdHlwZS5OPWZ1bmN0aW9uKCl7aWYoISgyJnRoaXMuZikpe3RoaXMuZnw9Njtmb3IodmFyIGk9dGhpcy50O3ZvaWQgMCE9PWk7aT1pLngpaS50Lk4oKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSxcInZhbHVlXCIse2dldDpmdW5jdGlvbigpe2lmKDEmdGhpcy5mKXRocm93IG5ldyBFcnJvcihcIkN5Y2xlIGRldGVjdGVkXCIpO3ZhciBpPWEodGhpcyk7dGhpcy5oKCk7aWYodm9pZCAwIT09aSlpLmk9dGhpcy5pO2lmKDE2JnRoaXMuZil0aHJvdyB0aGlzLnY7cmV0dXJuIHRoaXMudn19KTtmdW5jdGlvbiBnKGksdCl7cmV0dXJuIG5ldyBwKGksdCl9ZnVuY3Rpb24gUyhpKXt2YXIgbj1pLm07aS5tPXZvaWQgMDtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXtzKys7dmFyIG89cjtyPXZvaWQgMDt0cnl7bigpfWNhdGNoKHQpe2kuZiY9LTI7aS5mfD04O20oaSk7dGhyb3cgdH1maW5hbGx5e3I9bzt0KCl9fX1mdW5jdGlvbiBtKGkpe2Zvcih2YXIgdD1pLnM7dm9pZCAwIT09dDt0PXQubil0LlMuVSh0KTtpLng9dm9pZCAwO2kucz12b2lkIDA7UyhpKX1mdW5jdGlvbiB4KGkpe2lmKHIhPT10aGlzKXRocm93IG5ldyBFcnJvcihcIk91dC1vZi1vcmRlciBlZmZlY3RcIik7Yih0aGlzKTtyPWk7dGhpcy5mJj0tMjtpZig4JnRoaXMuZiltKHRoaXMpO3QoKX1mdW5jdGlvbiBFKGksdCl7dGhpcy54PWk7dGhpcy5tPXZvaWQgMDt0aGlzLnM9dm9pZCAwO3RoaXMudT12b2lkIDA7dGhpcy5mPTMyO3RoaXMubmFtZT1udWxsPT10P3ZvaWQgMDp0Lm5hbWU7aWYoZilmLnB1c2godGhpcyl9RS5wcm90b3R5cGUuYz1mdW5jdGlvbigpe3ZhciBpPXRoaXMuUygpO3RyeXtpZig4JnRoaXMuZilyZXR1cm47aWYodm9pZCAwPT09dGhpcy54KXJldHVybjt2YXIgdD10aGlzLngoKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXRoaXMubT10fWZpbmFsbHl7aSgpfX07RS5wcm90b3R5cGUuUz1mdW5jdGlvbigpe2lmKDEmdGhpcy5mKXRocm93IG5ldyBFcnJvcihcIkN5Y2xlIGRldGVjdGVkXCIpO3RoaXMuZnw9MTt0aGlzLmYmPS05O1ModGhpcyk7Xyh0aGlzKTtzKys7dmFyIGk9cjtyPXRoaXM7cmV0dXJuIHguYmluZCh0aGlzLGkpfTtFLnByb3RvdHlwZS5OPWZ1bmN0aW9uKCl7aWYoISgyJnRoaXMuZikpe3RoaXMuZnw9Mjt0aGlzLnU9aDtoPXRoaXN9fTtFLnByb3RvdHlwZS5kPWZ1bmN0aW9uKCl7dGhpcy5mfD04O2lmKCEoMSZ0aGlzLmYpKW0odGhpcyl9O0UucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmQoKX07ZnVuY3Rpb24gaihpLHQpe3ZhciBuPW5ldyBFKGksdCk7dHJ5e24uYygpfWNhdGNoKGkpe24uZCgpO3Rocm93IGl9dmFyIHI9bi5kLmJpbmQobik7cltTeW1ib2wuZGlzcG9zZV09cjtyZXR1cm4gcn1mdW5jdGlvbiBDKGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cyxyPXRoaXM7cmV0dXJuIG4oZnVuY3Rpb24oKXtyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHIsW10uc2xpY2UuY2FsbCh0KSl9KX0pfX1mdW5jdGlvbiBPKCl7dmFyIGk9ZjtmPVtdO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWY7aWYoZiYmaSlpPWkuY29uY2F0KGYpO2Y9aTtyZXR1cm4gdH19dmFyIGs9ZnVuY3Rpb24oaSl7Zm9yKHZhciB0IGluIGkpe3ZhciBuPWlbdF07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbilpW3RdPUMobik7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgbiYmbnVsbCE9PW4mJiEoXCJicmFuZFwiaW4gbikpayhuKX19O2Z1bmN0aW9uIFQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQsbixyPU8oKTt0cnl7bj1pLmFwcGx5KHZvaWQgMCxbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfWNhdGNoKGkpe2Y9dm9pZCAwO3Rocm93IGl9ZmluYWxseXt0PXIoKX1rKG4pO25bU3ltYm9sLmRpc3Bvc2VdPUMoZnVuY3Rpb24oKXtpZih0KWZvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXRbaV0uZGlzcG9zZSgpO3Q9dm9pZCAwfSk7cmV0dXJuIG59fWV4cG9ydHtwIGFzIENvbXB1dGVkLEUgYXMgRWZmZWN0LGwgYXMgU2lnbmFsLEMgYXMgYWN0aW9uLG4gYXMgYmF0Y2gsZyBhcyBjb21wdXRlZCxUIGFzIGNyZWF0ZU1vZGVsLGogYXMgZWZmZWN0LHkgYXMgc2lnbmFsLG8gYXMgdW50cmFja2VkfTsvLyMgc291cmNlTWFwcGluZ1VSTD1zaWduYWxzLWNvcmUubW9kdWxlLmpzLm1hcFxuIiwKICAgICJpbXBvcnR7Q29tcG9uZW50IGFzIGksb3B0aW9ucyBhcyBuLGlzVmFsaWRFbGVtZW50IGFzIHIsRnJhZ21lbnQgYXMgdH1mcm9tXCJwcmVhY3RcIjtpbXBvcnR7dXNlTWVtbyBhcyBvLHVzZVJlZiBhcyBlLHVzZUVmZmVjdCBhcyBmfWZyb21cInByZWFjdC9ob29rc1wiO2ltcG9ydHtlZmZlY3QgYXMgdSxTaWduYWwgYXMgYSxjb21wdXRlZCBhcyBjLHNpZ25hbCBhcyB2LGJhdGNoIGFzIHN9ZnJvbVwiQHByZWFjdC9zaWduYWxzLWNvcmVcIjtleHBvcnR7U2lnbmFsLGFjdGlvbixiYXRjaCxjb21wdXRlZCxjcmVhdGVNb2RlbCxlZmZlY3Qsc2lnbmFsLHVudHJhY2tlZH1mcm9tXCJAcHJlYWN0L3NpZ25hbHMtY29yZVwiO3ZhciBsLGQsaCxwPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJiEhd2luZG93Ll9fUFJFQUNUX1NJR05BTFNfREVWVE9PTFNfXyxtPVtdLF89W107dShmdW5jdGlvbigpe2w9dGhpcy5OfSkoKTtmdW5jdGlvbiBnKGkscil7bltpXT1yLmJpbmQobnVsbCxuW2ldfHxmdW5jdGlvbigpe30pfWZ1bmN0aW9uIGIoaSl7aWYoaCl7dmFyIG49aDtoPXZvaWQgMDtuKCl9aD1pJiZpLlMoKX1mdW5jdGlvbiB5KGkpe3ZhciBuPXRoaXMsdD1pLmRhdGEsZT11c2VTaWduYWwodCk7ZS52YWx1ZT10O3ZhciBmPW8oZnVuY3Rpb24oKXt2YXIgaT1uLHQ9bi5fX3Y7d2hpbGUodD10Ll9fKWlmKHQuX19jKXt0Ll9fYy5fXyRmfD00O2JyZWFrfXZhciBvPWMoZnVuY3Rpb24oKXt2YXIgaT1lLnZhbHVlLnZhbHVlO3JldHVybiAwPT09aT8wOiEwPT09aT9cIlwiOml8fFwiXCJ9KSxmPWMoZnVuY3Rpb24oKXtyZXR1cm4hQXJyYXkuaXNBcnJheShvLnZhbHVlKSYmIXIoby52YWx1ZSl9KSxhPXUoZnVuY3Rpb24oKXt0aGlzLk49RjtpZihmLnZhbHVlKXt2YXIgbj1vLnZhbHVlO2lmKGkuX192JiZpLl9fdi5fX2UmJjM9PT1pLl9fdi5fX2Uubm9kZVR5cGUpaS5fX3YuX19lLmRhdGE9bn19KSx2PW4uX18kdS5kO24uX18kdS5kPWZ1bmN0aW9uKCl7YSgpO3YuY2FsbCh0aGlzKX07cmV0dXJuW2Ysb119LFtdKSxhPWZbMF0sdj1mWzFdO3JldHVybiBhLnZhbHVlP3YucGVlaygpOnYudmFsdWV9eS5kaXNwbGF5TmFtZT1cIlJlYWN0aXZlVGV4dE5vZGVcIjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp2b2lkIDB9LHR5cGU6e2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp5fSxwcm9wczp7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBpPXRoaXM7cmV0dXJue2RhdGE6e2dldCB2YWx1ZSgpe3JldHVybiBpLnZhbHVlfX19fX0sX19iOntjb25maWd1cmFibGU6ITAsdmFsdWU6MX19KTtnKFwiX19iXCIsZnVuY3Rpb24oaSxuKXtpZihcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlKXt2YXIgcix0PW4ucHJvcHM7Zm9yKHZhciBvIGluIHQpaWYoXCJjaGlsZHJlblwiIT09byl7dmFyIGU9dFtvXTtpZihlIGluc3RhbmNlb2YgYSl7aWYoIXIpbi5fX25wPXI9e307cltvXT1lO3Rbb109ZS5wZWVrKCl9fX1pKG4pfSk7ZyhcIl9fclwiLGZ1bmN0aW9uKGksbil7aShuKTtpZihuLnR5cGUhPT10KXtiKCk7dmFyIHIsbz1uLl9fYztpZihvKXtvLl9fJGYmPS0yO2lmKHZvaWQgMD09PShyPW8uX18kdSkpby5fXyR1PXI9ZnVuY3Rpb24oaSxuKXt2YXIgcjt1KGZ1bmN0aW9uKCl7cj10aGlzfSx7bmFtZTpufSk7ci5jPWk7cmV0dXJuIHJ9KGZ1bmN0aW9uKCl7dmFyIGk7aWYocCludWxsPT0oaT1yLnkpfHxpLmNhbGwocik7by5fXyRmfD0xO28uc2V0U3RhdGUoe30pfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnR5cGU/bi50eXBlLmRpc3BsYXlOYW1lfHxuLnR5cGUubmFtZTpcIlwiKX1kPW87YihyKX19KTtnKFwiX19lXCIsZnVuY3Rpb24oaSxuLHIsdCl7YigpO2Q9dm9pZCAwO2kobixyLHQpfSk7ZyhcImRpZmZlZFwiLGZ1bmN0aW9uKGksbil7YigpO2Q9dm9pZCAwO3ZhciByO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGUmJihyPW4uX19lKSl7dmFyIHQ9bi5fX25wLG89bi5wcm9wcztpZih0KXt2YXIgZT1yLlU7aWYoZSlmb3IodmFyIGYgaW4gZSl7dmFyIHU9ZVtmXTtpZih2b2lkIDAhPT11JiYhKGYgaW4gdCkpe3UuZCgpO2VbZl09dm9pZCAwfX1lbHNle2U9e307ci5VPWV9Zm9yKHZhciBhIGluIHQpe3ZhciBjPWVbYV0sdj10W2FdO2lmKHZvaWQgMD09PWMpe2M9dyhyLGEsdik7ZVthXT1jfWVsc2UgYy5vKHYsbyl9Zm9yKHZhciBzIGluIHQpb1tzXT10W3NdfX1pKG4pfSk7ZnVuY3Rpb24gdyhpLG4scix0KXt2YXIgbz1uIGluIGkmJnZvaWQgMD09PWkub3duZXJTVkdFbGVtZW50LGU9dihyKSxmPXIucGVlaygpO3JldHVybntvOmZ1bmN0aW9uKGksbil7ZS52YWx1ZT1pO2Y9aS5wZWVrKCl9LGQ6dShmdW5jdGlvbigpe3RoaXMuTj1GO3ZhciByPWUudmFsdWUudmFsdWU7aWYoZiE9PXIpe2Y9dm9pZCAwO2lmKG8paVtuXT1yO2Vsc2UgaWYobnVsbCE9ciYmKCExIT09cnx8XCItXCI9PT1uWzRdKSlpLnNldEF0dHJpYnV0ZShuLHIpO2Vsc2UgaS5yZW1vdmVBdHRyaWJ1dGUobil9ZWxzZSBmPXZvaWQgMH0pfX1nKFwidW5tb3VudFwiLGZ1bmN0aW9uKGksbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSl7dmFyIHI9bi5fX2U7aWYocil7dmFyIHQ9ci5VO2lmKHQpe3IuVT12b2lkIDA7Zm9yKHZhciBvIGluIHQpe3ZhciBlPXRbb107aWYoZSllLmQoKX19fW4uX19ucD12b2lkIDB9ZWxzZXt2YXIgZj1uLl9fYztpZihmKXt2YXIgdT1mLl9fJHU7aWYodSl7Zi5fXyR1PXZvaWQgMDt1LmQoKX19fWkobil9KTtnKFwiX19oXCIsZnVuY3Rpb24oaSxuLHIsdCl7aWYodDwzfHw5PT09dCluLl9fJGZ8PTI7aShuLHIsdCl9KTtpLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oaSxuKXtpZih0aGlzLl9fUilyZXR1cm4hMDt2YXIgcj10aGlzLl9fJHUsdD1yJiZ2b2lkIDAhPT1yLnM7Zm9yKHZhciBvIGluIG4pcmV0dXJuITA7aWYodGhpcy5fX2Z8fFwiYm9vbGVhblwiPT10eXBlb2YgdGhpcy51JiYhMD09PXRoaXMudSl7dmFyIGU9MiZ0aGlzLl9fJGY7aWYoISh0fHxlfHw0JnRoaXMuX18kZikpcmV0dXJuITA7aWYoMSZ0aGlzLl9fJGYpcmV0dXJuITB9ZWxzZXtpZighKHR8fDQmdGhpcy5fXyRmKSlyZXR1cm4hMDtpZigzJnRoaXMuX18kZilyZXR1cm4hMH1mb3IodmFyIGYgaW4gaSlpZihcIl9fc291cmNlXCIhPT1mJiZpW2ZdIT09dGhpcy5wcm9wc1tmXSlyZXR1cm4hMDtmb3IodmFyIHUgaW4gdGhpcy5wcm9wcylpZighKHUgaW4gaSkpcmV0dXJuITA7cmV0dXJuITF9O2Z1bmN0aW9uIHVzZVNpZ25hbChpLG4pe3JldHVybiBvKGZ1bmN0aW9uKCl7cmV0dXJuIHYoaSxuKX0sW10pfWZ1bmN0aW9uIHVzZUNvbXB1dGVkKGksbil7dmFyIHI9ZShpKTtyLmN1cnJlbnQ9aTtkLl9fJGZ8PTQ7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gYyhmdW5jdGlvbigpe3JldHVybiByLmN1cnJlbnQoKX0sbil9LFtdKX12YXIgaz1cInVuZGVmaW5lZFwiPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP3NldFRpbWVvdXQ6ZnVuY3Rpb24oaSl7dmFyIG49ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQocik7Y2FuY2VsQW5pbWF0aW9uRnJhbWUodCk7aSgpfSxyPXNldFRpbWVvdXQobiwzNSksdD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9LHE9ZnVuY3Rpb24oaSl7cXVldWVNaWNyb3Rhc2soZnVuY3Rpb24oKXtxdWV1ZU1pY3JvdGFzayhpKX0pfTtmdW5jdGlvbiBBKCl7cyhmdW5jdGlvbigpe3ZhciBpO3doaWxlKGk9bS5zaGlmdCgpKWwuY2FsbChpKX0pfWZ1bmN0aW9uIFQoKXtpZigxPT09bS5wdXNoKHRoaXMpKShuLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8aykoQSl9ZnVuY3Rpb24geCgpe3MoZnVuY3Rpb24oKXt2YXIgaTt3aGlsZShpPV8uc2hpZnQoKSlsLmNhbGwoaSl9KX1mdW5jdGlvbiBGKCl7aWYoMT09PV8ucHVzaCh0aGlzKSkobi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHEpKHgpfWZ1bmN0aW9uIHVzZVNpZ25hbEVmZmVjdChpLG4pe3ZhciByPWUoaSk7ci5jdXJyZW50PWk7ZihmdW5jdGlvbigpe3JldHVybiB1KGZ1bmN0aW9uKCl7dGhpcy5OPVQ7cmV0dXJuIHIuY3VycmVudCgpfSxuKX0sW10pfWZ1bmN0aW9uIE0oaSl7dmFyIG49byhmdW5jdGlvbigpe3JldHVybiBpKCl9LFtdKTtmKGZ1bmN0aW9uKCl7cmV0dXJuIG5bU3ltYm9sLmRpc3Bvc2VdfSxbbl0pO3JldHVybiBufWV4cG9ydHt1c2VDb21wdXRlZCxNIGFzIHVzZU1vZGVsLHVzZVNpZ25hbCx1c2VTaWduYWxFZmZlY3R9Oy8vIyBzb3VyY2VNYXBwaW5nVVJMPXNpZ25hbHMubW9kdWxlLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIEdsb2JhbCBlcnJvciBzdXJmYWNlIGZvciBhY3Rpb24gaGFuZGxlcnMuXG4gKlxuICogQWN0aW9ucyB0aGF0IGZhaWwgc2V0IHRoZSBlcnJvclN0YXRlIHNpZ25hbCB2aWEgYHN1Ym1pdEVycm9yYDsgYSBgPFRvYXN0PmBcbiAqIGNvbXBvbmVudCBjb25zdW1lcyB0aGF0IHNpZ25hbCBhbmQgcmVuZGVycyBhIGRpc21pc3NhYmxlIG1lc3NhZ2UuIEhhbmRsZXJzXG4gKiB0aGF0IGNhdGNoIGV4cGVjdGVkIGZhaWx1cmVzICh2YWxpZGF0aW9uLCBxdW90YSkgbWF5IGNhbGwgYHNldEVycm9yYCBkaXJlY3RseS5cbiAqL1xuXG5pbXBvcnQgeyBzaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5cbmV4cG9ydCB0eXBlIEVycm9yU2V2ZXJpdHkgPSBcImVycm9yXCIgfCBcIndhcm5pbmdcIiB8IFwiaW5mb1wiO1xuXG5leHBvcnQgdHlwZSBFcnJvckVudHJ5ID0ge1xuICBpZDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNldmVyaXR5OiBFcnJvclNldmVyaXR5O1xuICBhY3Rpb24/OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogbnVtYmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGVycm9yU3RhdGUgPSBzaWduYWw8RXJyb3JFbnRyeVtdPihbXSk7XG5cbmxldCBuZXh0SWQgPSAwO1xuZnVuY3Rpb24gYWxsb2NJZCgpOiBzdHJpbmcge1xuICBuZXh0SWQgKz0gMTtcbiAgcmV0dXJuIGBwb2xseS1lcnItJHtuZXh0SWR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEVycm9yKFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIG9wdHM6IHsgc2V2ZXJpdHk/OiBFcnJvclNldmVyaXR5OyBhY3Rpb24/OiBzdHJpbmcgfSA9IHt9XG4pOiBzdHJpbmcge1xuICBjb25zdCBlbnRyeTogRXJyb3JFbnRyeSA9IHtcbiAgICBpZDogYWxsb2NJZCgpLFxuICAgIG1lc3NhZ2UsXG4gICAgc2V2ZXJpdHk6IG9wdHMuc2V2ZXJpdHkgPz8gXCJlcnJvclwiLFxuICAgIGFjdGlvbjogb3B0cy5hY3Rpb24sXG4gICAgY3JlYXRlZEF0OiBEYXRlLm5vdygpLFxuICB9O1xuICBlcnJvclN0YXRlLnZhbHVlID0gWy4uLmVycm9yU3RhdGUudmFsdWUsIGVudHJ5XTtcbiAgcmV0dXJuIGVudHJ5LmlkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJFcnJvcihpZD86IHN0cmluZyk6IHZvaWQge1xuICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVycm9yU3RhdGUudmFsdWUgPSBbXTtcbiAgICByZXR1cm47XG4gIH1cbiAgZXJyb3JTdGF0ZS52YWx1ZSA9IGVycm9yU3RhdGUudmFsdWUuZmlsdGVyKChlKSA9PiBlLmlkICE9PSBpZCk7XG59XG5cbi8qKlxuICogQ29udmVuaWVuY2Ugd3JhcHBlciBmb3IgYW4gYWN0aW9uJ3MgY2F0Y2ggYmxvY2suXG4gKiBMb2dzIHRoZSBhY3Rpb24gbmFtZSArIGVycm9yIGFuZCBzdXJmYWNlcyBhIHVzZXItdmlzaWJsZSBtZXNzYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VibWl0RXJyb3IoYWN0aW9uOiBzdHJpbmcsIGVycjogdW5rbm93bik6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gIHJldHVybiBzZXRFcnJvcihtZXNzYWdlLCB7IGFjdGlvbiwgc2V2ZXJpdHk6IFwiZXJyb3JcIiB9KTtcbn1cbiIsCiAgICAiLyoqXG4gKiBPdmVybGF5IHJlZ2lzdHJ5LlxuICpcbiAqIFRyYWNrcyB0aGUgc3RhY2sgb2Ygb3BlbiBvdmVybGF5cyAobW9kYWxzLCBwb3BvdmVycywgY29uZmlybSBkaWFsb2dzKSBzb1xuICogRXNjYXBlIGNhbiBjbG9zZSB0aGUgdG9wbW9zdCBhbmQgYGRhdGEtb3ZlcmxheS1pZGAtYmFzZWQgRE9NIHNjYW5zIGhhdmVcbiAqIGEgbWlycm9yIGluIG1lbW9yeS4gRWFjaCBlbnRyeSBzdG9yZXMgYW4gaWQgcGx1cyBhbiBvcHRpb25hbCBjbG9zZVxuICogY2FsbGJhY2s7IGBjbG9zZVRvcE92ZXJsYXlgIGludm9rZXMgdGhlIGNhbGxiYWNrIGFuZCBwb3BzIHRoZSBlbnRyeS5cbiAqL1xuXG5pbXBvcnQgeyBzaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5cbmV4cG9ydCB0eXBlIE92ZXJsYXlFbnRyeSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBzdGFjayA9IHNpZ25hbDxPdmVybGF5RW50cnlbXT4oW10pO1xuXG4vKiogQ3VycmVudCBvdmVybGF5IHN0YWNrIGFzIGEgcmVhZC1vbmx5IHNuYXBzaG90LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG92ZXJsYXlTdGFjaygpOiByZWFkb25seSBPdmVybGF5RW50cnlbXSB7XG4gIHJldHVybiBzdGFjay52YWx1ZTtcbn1cblxuLyoqIElzIGFueSBvdmVybGF5IGN1cnJlbnRseSBvcGVuPyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc09wZW5PdmVybGF5KCk6IGJvb2xlYW4ge1xuICByZXR1cm4gc3RhY2sudmFsdWUubGVuZ3RoID4gMDtcbn1cblxuLyoqIFRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciB1bmRlZmluZWQgaWYgZW1wdHkuICovXG5leHBvcnQgZnVuY3Rpb24gdG9wT3ZlcmxheSgpOiBPdmVybGF5RW50cnkgfCB1bmRlZmluZWQge1xuICBjb25zdCBzID0gc3RhY2sudmFsdWU7XG4gIHJldHVybiBzW3MubGVuZ3RoIC0gMV07XG59XG5cbi8qKiBQdXNoIGFuIG92ZXJsYXkgb250byB0aGUgc3RhY2suIFJldHVybnMgdGhlIHBvcHBlZCBlbnRyeSB3aGVuIGNsb3NlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdXNoT3ZlcmxheShlbnRyeTogT3ZlcmxheUVudHJ5KTogdm9pZCB7XG4gIHN0YWNrLnZhbHVlID0gWy4uLnN0YWNrLnZhbHVlLCBlbnRyeV07XG59XG5cbi8qKiBQb3AgYSBzcGVjaWZpYyBvdmVybGF5IGJ5IGlkIChvciB0aGUgdG9wIGlmIG5vIGlkIGdpdmVuKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3BPdmVybGF5KGlkPzogc3RyaW5nKTogT3ZlcmxheUVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHN0YWNrLnZhbHVlO1xuICBpZiAocy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgdG9wID0gc1tzLmxlbmd0aCAtIDFdO1xuICAgIHN0YWNrLnZhbHVlID0gcy5zbGljZSgwLCAtMSk7XG4gICAgcmV0dXJuIHRvcDtcbiAgfVxuICBjb25zdCBpZHggPSBzLmZpbmRJbmRleCgoZSkgPT4gZS5pZCA9PT0gaWQpO1xuICBpZiAoaWR4ID09PSAtMSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgZW50cnkgPSBzW2lkeF07XG4gIHN0YWNrLnZhbHVlID0gWy4uLnMuc2xpY2UoMCwgaWR4KSwgLi4ucy5zbGljZShpZHggKyAxKV07XG4gIHJldHVybiBlbnRyeTtcbn1cblxuLyoqIENsb3NlIHRoZSB0b3Agb3ZlcmxheSBieSBjYWxsaW5nIGl0cyBvbkNsb3NlIGFuZCBwb3BwaW5nIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlVG9wT3ZlcmxheSgpOiBPdmVybGF5RW50cnkgfCB1bmRlZmluZWQge1xuICBjb25zdCB0b3AgPSB0b3BPdmVybGF5KCk7XG4gIGlmICghdG9wKSByZXR1cm4gdW5kZWZpbmVkO1xuICB0b3Aub25DbG9zZT8uKCk7XG4gIHJldHVybiBwb3BPdmVybGF5KHRvcC5pZCk7XG59XG5cbi8qKiBSZXNldCB0aGUgc3RhY2suIEludGVuZGVkIGZvciB0ZXN0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldE92ZXJsYXlTdGFjaygpOiB2b2lkIHtcbiAgc3RhY2sudmFsdWUgPSBbXTtcbn1cbiIsCiAgICAiLyoqXG4gKiBFdmVudCBkZWxlZ2F0aW9uIGNvcmUuXG4gKlxuICogT25lIGRvY3VtZW50IGxpc3RlbmVyIGRpc3BhdGNoZXMgYGRhdGEtYWN0aW9uYCBldmVudHMgdG8gdHlwZWQgaGFuZGxlcnMuXG4gKiBXYWxrcyB1cCB0aGUgRE9NIHdpdGggYGNsb3Nlc3QoJ1tkYXRhLWFjdGlvbl0nKWAsIHBhcnNlcyBgZGF0YS1hY3Rpb24tKmBcbiAqIGF0dHJpYnV0ZXMgaW50byBhIGNhbWVsQ2FzZSBvYmplY3QsIGFuZCBoYW5kcyB0aGUgZGlzcGF0Y2ggdG8gdGhlIGNhbGxlci5cbiAqXG4gKiBGb3JtcyBhcmUgc2tpcHBlZCBvbiBjbGljayDigJQgYSBgPGZvcm0gZGF0YS1hY3Rpb249XCIuLi5cIj5gIHJlc3BvbmRzIHRvXG4gKiBzdWJtaXQgb25seSwgc28gY2xpY2tzIG9uIGZvcm0gY2hpbGRyZW4gZG9uJ3QgYnViYmxlIGludG8gaXRzIGFjdGlvbi5cbiAqIEVzY2FwZSBjbG9zZXMgdGhlIHRvcG1vc3Qgb3ZlcmxheSBieSBjYWxsaW5nIHRoZSBvdmVybGF5IHJlZ2lzdHJ5LlxuICogRW50ZXIvU3BhY2Ugb24gbm9uLWludGVyYWN0aXZlIGVsZW1lbnRzIHdpdGggYGRhdGEtYWN0aW9uYCBmaXJlIHRoZVxuICogYWN0aW9uIChTcGFjZSBpcyBwcmV2ZW50ZWQgdG8gc3RvcCBwYWdlIHNjcm9sbCkuIENsaWNrIG91dHNpZGUgYW55XG4gKiBgW2RhdGEtb3ZlcmxheS1pZF1gIGVsZW1lbnQgYWxzbyBwb3BzIHRoZSB0b3Agb3ZlcmxheS5cbiAqL1xuXG5pbXBvcnQgeyBjbG9zZVRvcE92ZXJsYXkgYXMgY2xvc2VUb3BSZWdpc3RyeU92ZXJsYXkgfSBmcm9tIFwiLi9vdmVybGF5LnRzXCI7XG5cbi8qKiBFbGVtZW50cyB0aGF0IG5hdGl2ZWx5IGZpcmUgY2xpY2sgb24gRW50ZXIvU3BhY2UuICovXG5leHBvcnQgY29uc3QgSU5URVJBQ1RJVkVfVEFHUyA9IG5ldyBTZXQoW1wiQlVUVE9OXCIsIFwiQVwiLCBcIklOUFVUXCIsIFwiU0VMRUNUXCIsIFwiVEVYVEFSRUFcIl0pO1xuXG4vKiogRXZlbnQgdHlwZXMgdGhhdCBtYXkgdHJpZ2dlciBhIGRhdGEtYWN0aW9uIGRpc3BhdGNoLiAqL1xuZXhwb3J0IGNvbnN0IEFDVElPTl9FVkVOVF9UWVBFUyA9IG5ldyBTZXQoW1wiY2xpY2tcIiwgXCJzdWJtaXRcIiwgXCJjaGFuZ2VcIiwgXCJpbnB1dFwiXSk7XG5cbi8qKiBQYXJzZWQgYWN0aW9uIGRpc3BhdGNoIOKAlCB3aGF0IHRoZSBydW50aW1lIHJlc29sdmVzIGJlZm9yZSBpbnZva2luZyBhIGhhbmRsZXIuICovXG5leHBvcnQgdHlwZSBBY3Rpb25EaXNwYXRjaCA9IHtcbiAgYWN0aW9uOiBzdHJpbmc7XG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICBldmVudDogRXZlbnQ7XG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuXG4vKipcbiAqIFBhcnNlIGBkYXRhLWFjdGlvbi0qYCBhdHRyaWJ1dGVzIGludG8gY2FtZWxDYXNlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBgZGF0YS1hY3Rpb24tdGV4dC1zZXQtaWQ9XCI0MlwiYCBiZWNvbWVzIGB7IHRleHRTZXRJZDogXCI0MlwiIH1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBY3Rpb25EYXRhKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBhdHRyIG9mIEFycmF5LmZyb20oZWxlbWVudC5hdHRyaWJ1dGVzKSkge1xuICAgIGlmIChhdHRyLm5hbWUuc3RhcnRzV2l0aChcImRhdGEtYWN0aW9uLVwiKSkge1xuICAgICAgY29uc3Qga2V5ID0gYXR0ci5uYW1lXG4gICAgICAgIC5yZXBsYWNlKFwiZGF0YS1hY3Rpb24tXCIsIFwiXCIpXG4gICAgICAgIC5yZXBsYWNlKC8tKFthLXpdKS9nLCAoX206IHN0cmluZywgbGV0dGVyOiBzdHJpbmcpID0+IGxldHRlci50b1VwcGVyQ2FzZSgpKTtcbiAgICAgIGRhdGFba2V5XSA9IGF0dHIudmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIENsb3NlIHRoZSB0b3Btb3N0IG92ZXJsYXkgYnkgZGlzcGF0Y2hpbmcgYG92ZXJsYXk6Y2xvc2VgIG9uIGl0cyBlbGVtZW50LlxuICogT3ZlcmxheXMgbWFyayB0aGVtc2VsdmVzIHdpdGggYGRhdGEtb3ZlcmxheS1pZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVRvcE92ZXJsYXkoKTogdm9pZCB7XG4gIGNvbnN0IG92ZXJsYXlzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICBcIltkYXRhLW92ZXJsYXktaWRdOnBvcG92ZXItb3BlbiwgZGlhbG9nW2RhdGEtb3ZlcmxheS1pZF1bb3Blbl1cIlxuICApO1xuICBpZiAob3ZlcmxheXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIGNvbnN0IHRvcE92ZXJsYXkgPSBvdmVybGF5c1tvdmVybGF5cy5sZW5ndGggLSAxXTtcbiAgaWYgKCF0b3BPdmVybGF5KSByZXR1cm47XG4gIHRvcE92ZXJsYXkuZGlzcGF0Y2hFdmVudChcbiAgICBuZXcgQ3VzdG9tRXZlbnQoXCJvdmVybGF5OmNsb3NlXCIsIHtcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBkZXRhaWw6IHsgaWQ6IHRvcE92ZXJsYXkuZ2V0QXR0cmlidXRlKFwiZGF0YS1vdmVybGF5LWlkXCIpIH0sXG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgRE9NIGV2ZW50IHRvIGFuIEFjdGlvbkRpc3BhdGNoLCBvciBudWxsIGlmIG5vIGRhdGEtYWN0aW9uIG1hdGNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQWN0aW9uKGV2ZW50OiBFdmVudCk6IEFjdGlvbkRpc3BhdGNoIHwgbnVsbCB7XG4gIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiBudWxsO1xuICBjb25zdCBhY3Rpb25FbGVtZW50ID0gdGFyZ2V0LmNsb3Nlc3QoXCJbZGF0YS1hY3Rpb25dXCIpO1xuICBpZiAoIShhY3Rpb25FbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm4gbnVsbDtcbiAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBhY3Rpb25FbGVtZW50LnRhZ05hbWUgPT09IFwiRk9STVwiKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYWN0aW9uID0gYWN0aW9uRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWFjdGlvblwiKTtcbiAgaWYgKCFhY3Rpb24pIHJldHVybiBudWxsO1xuICByZXR1cm4ge1xuICAgIGFjdGlvbixcbiAgICBlbGVtZW50OiBhY3Rpb25FbGVtZW50LFxuICAgIGV2ZW50LFxuICAgIGRhdGE6IHBhcnNlQWN0aW9uRGF0YShhY3Rpb25FbGVtZW50KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBJbnN0YWxsIGRvY3VtZW50LWxldmVsIGxpc3RlbmVycyBmb3IgdGhlIGRlbGVnYXRpb24gc3lzdGVtLlxuICogUmV0dXJucyBhIGNsZWFudXAgZnVuY3Rpb24gdGhhdCByZW1vdmVzIGV2ZXJ5IGxpc3RlbmVyIGl0IGluc3RhbGxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxFdmVudERlbGVnYXRpb24oXG4gIG9uRGlzcGF0Y2g6IChkaXNwYXRjaDogQWN0aW9uRGlzcGF0Y2gpID0+IHZvaWQsXG4gIG9wdGlvbnM6IHsgb25Fc2NhcGU/OiAoKSA9PiB2b2lkOyBvbk91dHNpZGVPdmVybGF5Q2xpY2s/OiAoKSA9PiB2b2lkIH0gPSB7fVxuKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IGhhbmRsZUFjdGlvbkV2ZW50ID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgIGNvbnN0IGRpc3BhdGNoID0gcmVzb2x2ZUFjdGlvbihldmVudCk7XG4gICAgaWYgKGRpc3BhdGNoKSBvbkRpc3BhdGNoKGRpc3BhdGNoKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuICAgICAgaWYgKG9wdGlvbnMub25Fc2NhcGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkVzY2FwZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xvc2VUb3BSZWdpc3RyeU92ZXJsYXkoKTtcbiAgICAgICAgY2xvc2VUb3BPdmVybGF5KCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiB8fCBldmVudC5rZXkgPT09IFwiIFwiKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xuICAgICAgaWYgKElOVEVSQUNUSVZFX1RBR1MuaGFzKHRhcmdldC50YWdOYW1lKSkgcmV0dXJuO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSByZXNvbHZlQWN0aW9uKGV2ZW50KTtcbiAgICAgIGlmIChkaXNwYXRjaCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBvbkRpc3BhdGNoKGRpc3BhdGNoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTW91c2VEb3duID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKCEoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcbiAgICBjb25zdCBjbGlja2VkT3ZlcmxheSA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KFwiW2RhdGEtb3ZlcmxheS1pZF1cIik7XG4gICAgaWYgKGNsaWNrZWRPdmVybGF5KSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnRhcmdldC5jbG9zZXN0KFwiYnV0dG9uW3BvcG92ZXJ0YXJnZXRdXCIpKSByZXR1cm47XG4gICAgaWYgKG9wdGlvbnMub25PdXRzaWRlT3ZlcmxheUNsaWNrKSB7XG4gICAgICBvcHRpb25zLm9uT3V0c2lkZU92ZXJsYXlDbGljaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbG9zZVRvcFJlZ2lzdHJ5T3ZlcmxheSgpO1xuICAgICAgY2xvc2VUb3BPdmVybGF5KCk7XG4gICAgfVxuICB9O1xuXG4gIGZvciAoY29uc3QgZXZlbnRUeXBlIG9mIEFDVElPTl9FVkVOVF9UWVBFUykge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVBY3Rpb25FdmVudCk7XG4gIH1cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgaGFuZGxlTW91c2VEb3duKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgZXZlbnRUeXBlIG9mIEFDVElPTl9FVkVOVF9UWVBFUykge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZUFjdGlvbkV2ZW50KTtcbiAgICB9XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBoYW5kbGVNb3VzZURvd24pO1xuICB9O1xufVxuIiwKICAgICIvKipcbiAqIEZvcm0gcHJpbWl0aXZlLlxuICpcbiAqIGBjcmVhdGVGb3JtYCByZXR1cm5zIGEgdHlwZWQgZm9ybSBzdG9yZTogcGVyLWZpZWxkIHNpZ25hbHMsIGFuIGFnZ3JlZ2F0ZWRcbiAqIHZhbHVlcyBzaWduYWwsIG9wZW4vY2xvc2Uvc3VibWl0IG1ldGhvZHMsIGFuZCB0aHJlZSBhdXRvLXJlZ2lzdGVyZWQgYWN0aW9uXG4gKiBoYW5kbGVycyAoYHtuYW1lfTpvcGVuYCwgYHtuYW1lfTpjbG9zZWAsIGB7bmFtZX06c3VibWl0YCkgdGhhdCBjYWxsZXJzIHNwcmVhZFxuICogaW50byB0aGVpciBnbG9iYWwgYWN0aW9uIHJlZ2lzdHJ5LlxuICpcbiAqIExpZmVjeWNsZTpcbiAqICAgb3BlbiAg4oaSIHJlc2V0cyBmaWVsZHMgdG8gaW5pdGlhbFZhbHVlcywgYXBwbGllcyBvbk9wZW4gb3ZlcnJpZGVzLFxuICogICAgICAgICAgIHNldHMgaXNPcGVuID0gdHJ1ZSwgcmVjb3JkcyBkYXRhLWFjdGlvbi0qIGRhdGEgaW4gb3BlblBhcmFtc1xuICogICB0eXBpbmcg4oaSIHVuY29udHJvbGxlZCBpbnB1dHMga2VlcCB0aGVpciBvd24gc3RhdGU7IGNvbnRyb2xsZWQgaW5wdXRzXG4gKiAgICAgICAgICAgd3JpdGUgZmllbGRzLlgudmFsdWUgZGlyZWN0bHlcbiAqICAgc3VibWl0IOKGkiByZWFkcyBGb3JtRGF0YSBmcm9tIHRoZSBmb3JtIGVsZW1lbnQsIG1lcmdlcyBpbnRvIGZpZWxkcyxcbiAqICAgICAgICAgICBydW5zIG9wdGlvbmFsIHZhbGlkYXRlLCBjYWxscyB1c2VyIG9uU3VibWl0IHdpdGggZmluYWwgdmFsdWVzLFxuICogICAgICAgICAgIGNsb3NlcyBvbiBzdWNjZXNzLCBzZXRzIGVycm9yU3RhdGUgb24gZmFpbHVyZVxuICogICBjbG9zZSAg4oaSIHJlc2V0cyBhbmQgc2V0cyBpc09wZW4gPSBmYWxzZVxuICogICBndWFyZCAg4oaSIGF1dG9ub21vdXMgZWZmZWN0OyBpZiBndWFyZCgpIHJldHVybnMgZmFsc2Ugd2hpbGUgb3BlbiwgY2xvc2UoKVxuICovXG5cbmltcG9ydCB7IGNvbXB1dGVkLCBlZmZlY3QsIHR5cGUgUmVhZG9ubHlTaWduYWwsIHR5cGUgU2lnbmFsLCBzaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgeyBzdWJtaXRFcnJvciB9IGZyb20gXCIuL2Vycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblJlZ2lzdHJ5IH0gZnJvbSBcIi4vcmVnaXN0cnkudHNcIjtcblxuZnVuY3Rpb24gaXNGb3JtRWxlbWVudCh0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCk6IHRhcmdldCBpcyBIVE1MRm9ybUVsZW1lbnQge1xuICBpZiAoIXRhcmdldCkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIEhUTUxGb3JtRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQ7XG4gIH1cbiAgY29uc3QgdCA9IHRhcmdldCBhcyB1bmtub3duIGFzIHsgdGFnTmFtZT86IHVua25vd24gfTtcbiAgcmV0dXJuIHR5cGVvZiB0LnRhZ05hbWUgPT09IFwic3RyaW5nXCIgJiYgdC50YWdOYW1lID09PSBcIkZPUk1cIjtcbn1cblxuZXhwb3J0IHR5cGUgRm9ybU9wZW5Db250ZXh0PFRTdG9yZXM+ID0ge1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBzdG9yZXM6IFRTdG9yZXM7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtU3VibWl0Q29udGV4dDxUVmFsdWVzLCBUU3RvcmVzPiA9IHtcbiAgdmFsdWVzOiBUVmFsdWVzO1xuICBzdG9yZXM6IFRTdG9yZXM7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtQ29uZmlnPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPiA9IHtcbiAgLyoqIFVzZWQgYXMgYWN0aW9uIG5hbWVzcGFjZTogYHtuYW1lfTpvcGVuYCwgYHtuYW1lfTpjbG9zZWAsIGB7bmFtZX06c3VibWl0YC4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICBpbml0aWFsVmFsdWVzOiBUVmFsdWVzO1xuICBvblN1Ym1pdDogKGN0eDogRm9ybVN1Ym1pdENvbnRleHQ8VFZhbHVlcywgVFN0b3Jlcz4pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAvKiogSW52b2tlZCBvbiBvcGVuOyByZXR1cm4gcGFydGlhbCBvdmVycmlkZXMgdG8gcHJlLXBvcHVsYXRlIGZpZWxkcy4gKi9cbiAgb25PcGVuPzogKGN0eDogRm9ybU9wZW5Db250ZXh0PFRTdG9yZXM+KSA9PiBQYXJ0aWFsPFRWYWx1ZXM+IHwgdW5kZWZpbmVkO1xuICAvKiogUmV0dXJucyBmYWxzZSB3aGlsZSBvcGVuIOKGkiBmb3JtIGF1dG8tY2xvc2VzIChlbnRpdHktZGVsZXRpb24gZ3VhcmQpLiAqL1xuICBndWFyZD86IChjdHg6IHsgc3RvcmVzOiBUU3RvcmVzIH0pID0+IGJvb2xlYW47XG4gIC8qKiBTeW5jaHJvbm91cyB2YWxpZGF0aW9uLiBSZXR1cm5pbmcga2V5cyBibG9ja3Mgc3VibWl0LiAqL1xuICB2YWxpZGF0ZT86ICh2YWx1ZXM6IFRWYWx1ZXMpID0+IFBhcnRpYWw8UmVjb3JkPGtleW9mIFRWYWx1ZXMsIHN0cmluZz4+IHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1TdG9yZTxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4gPSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgaXNPcGVuOiBSZWFkb25seVNpZ25hbDxib29sZWFuPjtcbiAgcmVhZG9ubHkgdmFsdWVzOiBSZWFkb25seVNpZ25hbDxUVmFsdWVzPjtcbiAgcmVhZG9ubHkgZmllbGRzOiB7IFtLIGluIGtleW9mIFRWYWx1ZXNdOiBTaWduYWw8VFZhbHVlc1tLXT4gfTtcbiAgcmVhZG9ubHkgZXJyb3JzOiBSZWFkb25seVNpZ25hbDxQYXJ0aWFsPFJlY29yZDxrZXlvZiBUVmFsdWVzLCBzdHJpbmc+Pj47XG4gIHJlYWRvbmx5IGlzU3VibWl0dGluZzogUmVhZG9ubHlTaWduYWw8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IG9wZW5QYXJhbXM6IFJlYWRvbmx5U2lnbmFsPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuICBvcGVuKG92ZXJyaWRlPzogUGFydGlhbDxUVmFsdWVzPiwgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQ7XG4gIGNsb3NlKCk6IHZvaWQ7XG4gIHN1Ym1pdChldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIExhdGUtYmluZHMgc3RvcmVzOyByZXF1aXJlZCBiZWZvcmUgZ3VhcmQvb25PcGVuL29uU3VibWl0IGNhbiBhY2Nlc3Mgc3RvcmVzLiAqL1xuICBiaW5kU3RvcmVzKGdldFN0b3JlczogKCkgPT4gVFN0b3Jlcyk6IHZvaWQ7XG4gIC8qKiBBY3Rpb24gaGFuZGxlciBlbnRyaWVzLiBTcHJlYWQgaW50byB0aGUgdXNlcidzIEFjdGlvblJlZ2lzdHJ5LiAqL1xuICBhY3Rpb25zOiBBY3Rpb25SZWdpc3RyeTxUU3RvcmVzPjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPihcbiAgY29uZmlnOiBGb3JtQ29uZmlnPFRWYWx1ZXMsIFRTdG9yZXM+XG4pOiBGb3JtU3RvcmU8VFZhbHVlcywgVFN0b3Jlcz4ge1xuICBjb25zdCBmaWVsZEtleXMgPSBPYmplY3Qua2V5cyhjb25maWcuaW5pdGlhbFZhbHVlcykgYXMgdW5rbm93biBhcyAoa2V5b2YgVFZhbHVlcylbXTtcblxuICBjb25zdCBmaWVsZHMgPSB7fSBhcyB1bmtub3duIGFzIHsgW0sgaW4ga2V5b2YgVFZhbHVlc106IFNpZ25hbDxUVmFsdWVzW0tdPiB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZEtleXMpIHtcbiAgICBmaWVsZHNba2V5XSA9IHNpZ25hbChjb25maWcuaW5pdGlhbFZhbHVlc1trZXldKTtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlcyA9IGNvbXB1dGVkPFRWYWx1ZXM+KCgpID0+IHtcbiAgICBjb25zdCB2ID0ge30gYXMgdW5rbm93biBhcyBUVmFsdWVzO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkS2V5cykge1xuICAgICAgdltrZXldID0gZmllbGRzW2tleV0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9KTtcblxuICBjb25zdCBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xuICBjb25zdCBpc1N1Ym1pdHRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBjb25zdCBlcnJvcnMgPSBzaWduYWw8UGFydGlhbDxSZWNvcmQ8a2V5b2YgVFZhbHVlcywgc3RyaW5nPj4+KHt9KTtcbiAgY29uc3Qgb3BlblBhcmFtcyA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pih7fSk7XG5cbiAgbGV0IGdldFN0b3Jlc1JlZjogKCgpID0+IFRTdG9yZXMpIHwgbnVsbCA9IG51bGw7XG4gIGxldCBkaXNwb3NlR3VhcmRFZmZlY3Q6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGdldFN0b3Jlc09yVGhyb3coKTogVFN0b3JlcyB7XG4gICAgaWYgKCFnZXRTdG9yZXNSZWYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZvcm0gXCIke2NvbmZpZy5uYW1lfVwiIHVzZWQgYmVmb3JlIGJpbmRTdG9yZXMoKS4gQ2FsbCBmb3JtLmJpbmRTdG9yZXMoKCkgPT4geW91clN0b3JlcykgYXQgYXBwIGluaXQuYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGdldFN0b3Jlc1JlZigpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUb0luaXRpYWwoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgZmllbGRLZXlzKSB7XG4gICAgICBmaWVsZHNba2V5XS52YWx1ZSA9IGNvbmZpZy5pbml0aWFsVmFsdWVzW2tleV07XG4gICAgfVxuICAgIGVycm9ycy52YWx1ZSA9IHt9O1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IG9wZW4gYXBwbGllcyB0d28gbGF5ZXJzIG9mIG92ZXJyaWRlcyBwbHVzIG9wdGlvbmFsIG9uT3BlbiDigJQgYnJhbmNoeSBieSBkZXNpZ24uXG4gIGZ1bmN0aW9uIG9wZW4ob3ZlcnJpZGU/OiBQYXJ0aWFsPFRWYWx1ZXM+LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSk6IHZvaWQge1xuICAgIHJlc2V0VG9Jbml0aWFsKCk7XG4gICAgb3BlblBhcmFtcy52YWx1ZSA9IHBhcmFtcztcbiAgICBpZiAoY29uZmlnLm9uT3BlbiAmJiBnZXRTdG9yZXNSZWYpIHtcbiAgICAgIGNvbnN0IG9uT3Blbk92ZXJyaWRlID0gY29uZmlnLm9uT3Blbih7IGRhdGE6IHBhcmFtcywgc3RvcmVzOiBnZXRTdG9yZXNPclRocm93KCkgfSkgPz8ge307XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvbk9wZW5PdmVycmlkZSkpIHtcbiAgICAgICAgaWYgKGsgaW4gZmllbGRzKSB7XG4gICAgICAgICAgZmllbGRzW2sgYXMga2V5b2YgVFZhbHVlc10udmFsdWUgPSB2IGFzIFRWYWx1ZXNba2V5b2YgVFZhbHVlc107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvdmVycmlkZSkpIHtcbiAgICAgICAgaWYgKGsgaW4gZmllbGRzKSB7XG4gICAgICAgICAgZmllbGRzW2sgYXMga2V5b2YgVFZhbHVlc10udmFsdWUgPSB2IGFzIFRWYWx1ZXNba2V5b2YgVFZhbHVlc107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaXNPcGVuLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlKCk6IHZvaWQge1xuICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIHJlc2V0VG9Jbml0aWFsKCk7XG4gICAgb3BlblBhcmFtcy52YWx1ZSA9IHt9O1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IHN1Ym1pdCBmdW5uZWxzIEZvcm1EYXRhLCB2YWxpZGF0ZSwgb25TdWJtaXQsIGVycm9yU3RhdGUsIGFuZCBjbG9zZSDigJQgb25lLXBhdGgtcGVyLXN0YWdlIGJ5IGRlc2lnbi5cbiAgYXN5bmMgZnVuY3Rpb24gc3VibWl0KGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoZXZlbnQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGV2ZW50ICYmIGlzRm9ybUVsZW1lbnQoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgY29uc3QgZmQgPSBuZXcgRm9ybURhdGEoZXZlbnQudGFyZ2V0KTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkS2V5cykge1xuICAgICAgICBjb25zdCByYXcgPSBmZC5nZXQoa2V5IGFzIHVua25vd24gYXMgc3RyaW5nKTtcbiAgICAgICAgaWYgKHJhdyAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpZWxkc1trZXldLnZhbHVlID0gU3RyaW5nKHJhdykgYXMgdW5rbm93biBhcyBUVmFsdWVzW3R5cGVvZiBrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnQgPSB2YWx1ZXMudmFsdWU7XG4gICAgY29uc3QgdmFsaWRhdGlvbkVycm9ycyA9IGNvbmZpZy52YWxpZGF0ZT8uKGN1cnJlbnQpO1xuICAgIGlmICh2YWxpZGF0aW9uRXJyb3JzICYmIE9iamVjdC5rZXlzKHZhbGlkYXRpb25FcnJvcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGVycm9ycy52YWx1ZSA9IHZhbGlkYXRpb25FcnJvcnM7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVycm9ycy52YWx1ZSA9IHt9O1xuICAgIGlzU3VibWl0dGluZy52YWx1ZSA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvbmZpZy5vblN1Ym1pdCh7XG4gICAgICAgIHZhbHVlczogY3VycmVudCxcbiAgICAgICAgc3RvcmVzOiBnZXRTdG9yZXNPclRocm93KCksXG4gICAgICB9KTtcbiAgICAgIGNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzdWJtaXRFcnJvcihgJHtjb25maWcubmFtZX06c3VibWl0YCwgZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNTdWJtaXR0aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYmluZFN0b3JlcyhnZXRTdG9yZXM6ICgpID0+IFRTdG9yZXMpOiB2b2lkIHtcbiAgICBnZXRTdG9yZXNSZWYgPSBnZXRTdG9yZXM7XG4gICAgZGlzcG9zZUd1YXJkRWZmZWN0Py4oKTtcbiAgICBjb25zdCBndWFyZEZuID0gY29uZmlnLmd1YXJkO1xuICAgIGlmIChndWFyZEZuKSB7XG4gICAgICBkaXNwb3NlR3VhcmRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWlzT3Blbi52YWx1ZSkgcmV0dXJuO1xuICAgICAgICBpZiAoIWd1YXJkRm4oeyBzdG9yZXM6IGdldFN0b3JlcygpIH0pKSBjbG9zZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYWN0aW9uczogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz4gPSB7XG4gICAgW2Ake2NvbmZpZy5uYW1lfTpvcGVuYF06ICh7IGRhdGEgfSkgPT4ge1xuICAgICAgb3Blbih1bmRlZmluZWQsIGRhdGEpO1xuICAgIH0sXG4gICAgW2Ake2NvbmZpZy5uYW1lfTpjbG9zZWBdOiAoKSA9PiB7XG4gICAgICBjbG9zZSgpO1xuICAgIH0sXG4gICAgW2Ake2NvbmZpZy5uYW1lfTpzdWJtaXRgXTogYXN5bmMgKHsgZXZlbnQgfSkgPT4ge1xuICAgICAgYXdhaXQgc3VibWl0KGV2ZW50KTtcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgaXNPcGVuLFxuICAgIHZhbHVlcyxcbiAgICBmaWVsZHMsXG4gICAgZXJyb3JzLFxuICAgIGlzU3VibWl0dGluZyxcbiAgICBvcGVuUGFyYW1zLFxuICAgIG9wZW4sXG4gICAgY2xvc2UsXG4gICAgc3VibWl0LFxuICAgIGJpbmRTdG9yZXMsXG4gICAgYWN0aW9ucyxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb21wb3NlIG1hbnkgZm9ybXMgaW50byBhIHNpbmdsZSBzZXQ6IG1lcmdlZCBhY3Rpb25zLCBjbG9zZUFsbCwgb3BlbkZvcm0gc2lnbmFsLlxuICovXG5leHBvcnQgdHlwZSBGb3JtU2V0PFRTdG9yZXM+ID0ge1xuICBhY3Rpb25zOiBBY3Rpb25SZWdpc3RyeTxUU3RvcmVzPjtcbiAgb3BlbkZvcm06IFJlYWRvbmx5U2lnbmFsPHN0cmluZyB8IG51bGw+O1xuICBjbG9zZUFsbCgpOiB2b2lkO1xuICBiaW5kU3RvcmVzKGdldFN0b3JlczogKCkgPT4gVFN0b3Jlcyk6IHZvaWQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9ybVNldDxUU3RvcmVzPihcbiAgZm9ybXM6IHJlYWRvbmx5IEZvcm1TdG9yZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPltdXG4pOiBGb3JtU2V0PFRTdG9yZXM+IHtcbiAgY29uc3QgbWVyZ2VkOiBBY3Rpb25SZWdpc3RyeTxUU3RvcmVzPiA9IHt9O1xuICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIHtcbiAgICBPYmplY3QuYXNzaWduKG1lcmdlZCwgZm9ybS5hY3Rpb25zKTtcbiAgfVxuXG4gIGNvbnN0IG9wZW5Gb3JtID0gY29tcHV0ZWQ8c3RyaW5nIHwgbnVsbD4oKCkgPT4ge1xuICAgIGZvciAoY29uc3QgZm9ybSBvZiBmb3Jtcykge1xuICAgICAgaWYgKGZvcm0uaXNPcGVuLnZhbHVlKSByZXR1cm4gZm9ybS5uYW1lO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhY3Rpb25zOiBtZXJnZWQsXG4gICAgb3BlbkZvcm0sXG4gICAgY2xvc2VBbGwoKSB7XG4gICAgICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIGZvcm0uY2xvc2UoKTtcbiAgICB9LFxuICAgIGJpbmRTdG9yZXMoZ2V0U3RvcmVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIGZvcm0uYmluZFN0b3JlcyhnZXRTdG9yZXMpO1xuICAgIH0sXG4gIH07XG59XG4iLAogICAgImltcG9ydHtvcHRpb25zIGFzIHIsRnJhZ21lbnQgYXMgZX1mcm9tXCJwcmVhY3RcIjtleHBvcnR7RnJhZ21lbnR9ZnJvbVwicHJlYWN0XCI7dmFyIHQ9L1tcIiY8XS87ZnVuY3Rpb24gbihyKXtpZigwPT09ci5sZW5ndGh8fCExPT09dC50ZXN0KHIpKXJldHVybiByO2Zvcih2YXIgZT0wLG49MCxvPVwiXCIsZj1cIlwiO248ci5sZW5ndGg7bisrKXtzd2l0Y2goci5jaGFyQ29kZUF0KG4pKXtjYXNlIDM0OmY9XCImcXVvdDtcIjticmVhaztjYXNlIDM4OmY9XCImYW1wO1wiO2JyZWFrO2Nhc2UgNjA6Zj1cIiZsdDtcIjticmVhaztkZWZhdWx0OmNvbnRpbnVlfW4hPT1lJiYobys9ci5zbGljZShlLG4pKSxvKz1mLGU9bisxfXJldHVybiBuIT09ZSYmKG8rPXIuc2xpY2UoZSxuKSksb312YXIgbz0vYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofGdyaWR8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZHxpdGVyYS9pLGY9MCxpPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gdShlLHQsbixvLGksdSl7dHx8KHQ9e30pO3ZhciBhLGMscD10O2lmKFwicmVmXCJpbiBwKWZvcihjIGluIHA9e30sdClcInJlZlwiPT1jP2E9dFtjXTpwW2NdPXRbY107dmFyIGw9e3R5cGU6ZSxwcm9wczpwLGtleTpuLHJlZjphLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjotLWYsX19pOi0xLF9fdTowLF9fc291cmNlOmksX19zZWxmOnV9O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihhPWUuZGVmYXVsdFByb3BzKSlmb3IoYyBpbiBhKXZvaWQgMD09PXBbY10mJihwW2NdPWFbY10pO3JldHVybiByLnZub2RlJiZyLnZub2RlKGwpLGx9ZnVuY3Rpb24gYShyKXt2YXIgdD11KGUse3RwbDpyLGV4cHJzOltdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpfSk7cmV0dXJuIHQua2V5PXQuX192LHR9dmFyIGM9e30scD0vW0EtWl0vZztmdW5jdGlvbiBsKGUsdCl7aWYoci5hdHRyKXt2YXIgZj1yLmF0dHIoZSx0KTtpZihcInN0cmluZ1wiPT10eXBlb2YgZilyZXR1cm4gZn1pZih0PWZ1bmN0aW9uKHIpe3JldHVybiBudWxsIT09ciYmXCJvYmplY3RcIj09dHlwZW9mIHImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHIudmFsdWVPZj9yLnZhbHVlT2YoKTpyfSh0KSxcInJlZlwiPT09ZXx8XCJrZXlcIj09PWUpcmV0dXJuXCJcIjtpZihcInN0eWxlXCI9PT1lJiZcIm9iamVjdFwiPT10eXBlb2YgdCl7dmFyIGk9XCJcIjtmb3IodmFyIHUgaW4gdCl7dmFyIGE9dFt1XTtpZihudWxsIT1hJiZcIlwiIT09YSl7dmFyIGw9XCItXCI9PXVbMF0/dTpjW3VdfHwoY1t1XT11LnJlcGxhY2UocCxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpKSxzPVwiO1wiO1wibnVtYmVyXCIhPXR5cGVvZiBhfHxsLnN0YXJ0c1dpdGgoXCItLVwiKXx8by50ZXN0KGwpfHwocz1cInB4O1wiKSxpPWkrbCtcIjpcIithK3N9fXJldHVybiBlKyc9XCInK24oaSkrJ1wiJ31yZXR1cm4gbnVsbD09dHx8ITE9PT10fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0fHxcIm9iamVjdFwiPT10eXBlb2YgdD9cIlwiOiEwPT09dD9lOmUrJz1cIicrbihcIlwiK3QpKydcIid9ZnVuY3Rpb24gcyhyKXtpZihudWxsPT1yfHxcImJvb2xlYW5cIj09dHlwZW9mIHJ8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpcmV0dXJuIG51bGw7aWYoXCJvYmplY3RcIj09dHlwZW9mIHIpe2lmKHZvaWQgMD09PXIuY29uc3RydWN0b3IpcmV0dXJuIHI7aWYoaShyKSl7Zm9yKHZhciBlPTA7ZTxyLmxlbmd0aDtlKyspcltlXT1zKHJbZV0pO3JldHVybiByfX1yZXR1cm4gbihcIlwiK3IpfWV4cG9ydHt1IGFzIGpzeCxsIGFzIGpzeEF0dHIsdSBhcyBqc3hERVYscyBhcyBqc3hFc2NhcGUsYSBhcyBqc3hUZW1wbGF0ZSx1IGFzIGpzeHN9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9anN4UnVudGltZS5tb2R1bGUuanMubWFwXG4iLAogICAgIi8qKlxuICogU3RvcmUgYmFzZSArIFByZWFjdCBjb250ZXh0LlxuICpcbiAqIGBjcmVhdGVTdG9yZWAgaXMgYSB0aGluIGNvbnZlbnRpb24tZW5mb3JjZXI6IGEgdHlwZWQgYmFnIG9mIHNpZ25hbHNcbiAqIHBsdXMgbWV0aG9kcy4gQXBwcyB1c2UgaXQgdG8gZGVmaW5lIGRvbWFpbiBzdG9yZXMgd2hvc2Ugb25seSBwdWJsaWNcbiAqIG11dGF0aW9uIHN1cmZhY2UgaXMgbmFtZWQgbWV0aG9kcyAoYWN0aW9ucyBjYWxsIHRoZW07IGNvbXBvbmVudHMgcmVhZFxuICogc2lnbmFscyBhbmQgZGlzcGF0Y2ggYWN0aW9ucykuIE5vIGNsZXZlcm5lc3Mg4oCUIGEgbmFtZWQgcGF0dGVybiBtb3JlXG4gKiB0aGFuIGEgbGlicmFyeS5cbiAqXG4gKiBgU3RvcmVQcm92aWRlcmAgKyBgdXNlU3RvcmVzYCB3aXJlIHRoZSBzdG9yZXMgYmFnIGludG8gUHJlYWN0IGNvbnRleHRcbiAqIHNvIGNvbXBvbmVudHMgYW5kIHRoZSBkZWxlZ2F0aW9uIHJ1bnRpbWUgY2FuIHJlYWNoIGl0IHZpYSBhIHNpbmdsZSBob29rLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4gfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcblxuLyoqXG4gKiBJZGVudGl0eSBoZWxwZXI7IGV4aXN0cyBzbyBkb21haW4gc3RvcmVzIGhhdmUgYSBjYW5vbmljYWwgY3JlYXRpb25cbiAqIGNhbGwgZXZlbiB0aG91Z2ggdGhlIGJhZyBpdHNlbGYgaXMgYSBwbGFpbiBvYmplY3QuIENlbnRyYWxpc2luZyBoZXJlXG4gKiBsZXRzIHVzIGhhbmcgYWRkaXRpb25hbCBiZWhhdmlvdXIgb2ZmIHRoZSBjYWxsIHNpdGUgbGF0ZXIgKGRlYnVnXG4gKiBpbnN0cnVtZW50YXRpb24sIGRldnRvb2xzKSB3aXRob3V0IGEgbWlncmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RvcmU8VCBleHRlbmRzIG9iamVjdD4oaW5pdDogVCk6IFQge1xuICByZXR1cm4gaW5pdDtcbn1cblxuY29uc3QgU3RvcmVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDx1bmtub3duPihudWxsKTtcblxuZXhwb3J0IHR5cGUgU3RvcmVQcm92aWRlclByb3BzPFRTdG9yZXM+ID0ge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIHN0b3JlczogVFN0b3Jlcztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBTdG9yZVByb3ZpZGVyPFRTdG9yZXM+KHsgY2hpbGRyZW4sIHN0b3JlcyB9OiBTdG9yZVByb3ZpZGVyUHJvcHM8VFN0b3Jlcz4pIHtcbiAgcmV0dXJuIDxTdG9yZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3N0b3Jlc30+e2NoaWxkcmVufTwvU3RvcmVDb250ZXh0LlByb3ZpZGVyPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVN0b3JlczxUU3RvcmVzPigpOiBUU3RvcmVzIHtcbiAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChTdG9yZUNvbnRleHQpIGFzIHVua25vd24gYXMgVFN0b3JlcyB8IG51bGw7XG4gIGlmIChjdHggPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VTdG9yZXMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFN0b3JlUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGN0eDtcbn1cbiIsCiAgICAiLyoqXG4gKiBBY3Rpb25Gb3JtIOKAlCB3cmFwcyBhIG5hdGl2ZSA8Zm9ybT4gd2l0aCB0aGUgYWN0aW9uIHBhdHRlcm4uXG4gKlxuICogUmVuZGVycyA8Zm9ybSBkYXRhLWFjdGlvbj1cIntmb3JtLm5hbWV9OnN1Ym1pdFwiPiBzbyB0aGUgaW5zdGFsbGVkXG4gKiBldmVudCBkZWxlZ2F0aW9uIGNhdGNoZXMgdGhlIHN1Ym1pdCBldmVudCBhbmQgZGlzcGF0Y2hlcyB0byB0aGVcbiAqIGZvcm0ncyBhdXRvLXJlZ2lzdGVyZWQgOnN1Ym1pdCBoYW5kbGVyLiBgYXJpYS1idXN5YCBtaXJyb3JzIHRoZVxuICogYGlzU3VibWl0dGluZ2Agc2lnbmFsIHNvIGNvbnN1bWVyIHN0eWxpbmcgY2FuIHJlc3BvbmQgd2l0aG91dCBleHRyYVxuICogd2lyaW5nLiBUaGUgZm9ybSBlbGVtZW50IGFsc28gZXhwb3NlcyBgZGF0YS1wb2xseS1hY3Rpb24tZm9ybWAgZm9yXG4gKiBzdGFibGUgc2VsZWN0b3IgaG9va3MuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtU3RvcmUgfSBmcm9tIFwiLi4vYWN0aW9ucy9mb3JtLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9BY3Rpb25Gb3JtLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uRm9ybVByb3BzPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPiA9IHtcbiAgZm9ybTogRm9ybVN0b3JlPFRWYWx1ZXMsIFRTdG9yZXM+O1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxsZWRieVwiPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIEFjdGlvbkZvcm08VFZhbHVlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIFRTdG9yZXM+KFxuICBwcm9wczogQWN0aW9uRm9ybVByb3BzPFRWYWx1ZXMsIFRTdG9yZXM+XG4pOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgZm9ybSwgY2hpbGRyZW4sIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuICBjb25zdCBjb21iaW5lZCA9IGNsYXNzTmFtZSA/IGAke2NsYXNzZXNbXCJmb3JtXCJdfSAke2NsYXNzTmFtZX1gIDogY2xhc3Nlc1tcImZvcm1cIl07XG4gIHJldHVybiAoXG4gICAgPGZvcm1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtjb21iaW5lZH1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktYWN0aW9uLWZvcm09e2Zvcm0ubmFtZX1cbiAgICAgIGRhdGEtYWN0aW9uPXtgJHtmb3JtLm5hbWV9OnN1Ym1pdGB9XG4gICAgICBhcmlhLWJ1c3k9e2Zvcm0uaXNTdWJtaXR0aW5nLnZhbHVlfVxuICAgICAgYXJpYS1sYWJlbD17cHJvcHNbXCJhcmlhLWxhYmVsXCJdfVxuICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtwcm9wc1tcImFyaWEtbGFiZWxsZWRieVwiXX1cbiAgICAgIG5vVmFsaWRhdGVcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9mb3JtPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEZpcmUgYSBuYW1lZCBhY3Rpb24gdGhyb3VnaCB0aGUgZ2xvYmFsIGV2ZW50LWRlbGVnYXRpb24gcmVnaXN0cnkuXG4gKlxuICogVGhlIEFjdGlvbiogcHJpbWl0aXZlcyAoPEFjdGlvbklucHV0PiwgPEFjdGlvblNlbGVjdD4pIGNvbW1pdCBieVxuICogY2xpY2tpbmcgYSBkZXRhY2hlZCBgPGJ1dHRvbiBkYXRhLWFjdGlvbj1cIuKAplwiPmAgY2FycnlpbmcgZGF0YS1hY3Rpb24tKlxuICogYXR0cmlidXRlczsgdGhlIGRlbGVnYXRlZCBjbGljayBsaXN0ZW5lciByb3V0ZXMgaXQgaW50byB0aGVcbiAqIGNvbnN1bWVyJ3MgYWN0aW9uIHJlZ2lzdHJ5IHdpdGggbm8gZXh0cmEgd2lyaW5nLiBDZW50cmFsaXNlZCBoZXJlIHNvXG4gKiBldmVyeSBBY3Rpb24qIHByaW1pdGl2ZSBkaXNwYXRjaGVzIGlkZW50aWNhbGx5LlxuICpcbiAqIEtleXMgaW4gYGRhdGFgIGFyZSBjYW1lbENhc2UgYW5kIGNvbnZlcnRlZCB0byBkYXNoLWNhc2UgYXR0cmlidXRlXG4gKiBuYW1lcyDigJQgYGFjdGlvbkRhdGE9e3sgdGFza0lkIH19YCBiZWNvbWVzIGBkYXRhLWFjdGlvbi10YXNrLWlkYC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hBY3Rpb24oYWN0aW9uOiBzdHJpbmcsIGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkIHtcbiAgY29uc3QgaGlkZGVuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgaGlkZGVuLnNldEF0dHJpYnV0ZShcImRhdGEtYWN0aW9uXCIsIGFjdGlvbik7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgY29uc3QgZGFzaEtleSA9IGtleS5yZXBsYWNlKC9bQS1aXS9nLCAobSkgPT4gYC0ke20udG9Mb3dlckNhc2UoKX1gKTtcbiAgICBoaWRkZW4uc2V0QXR0cmlidXRlKGBkYXRhLWFjdGlvbi0ke2Rhc2hLZXl9YCwgdmFsdWUpO1xuICB9XG4gIGhpZGRlbi5zdHlsZS5wb3NpdGlvbiA9IFwiZml4ZWRcIjtcbiAgaGlkZGVuLnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcbiAgaGlkZGVuLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjtcbiAgaGlkZGVuLnRhYkluZGV4ID0gLTE7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaGlkZGVuKTtcbiAgdHJ5IHtcbiAgICBoaWRkZW4uY2xpY2soKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBoaWRkZW4ucmVtb3ZlKCk7XG4gIH1cbn1cbiIsCiAgICAiLyoqXG4gKiBwb2xseSMxMjU6IGRhdGEtKiAvIGFyaWEtKiBhdHRyaWJ1dGUgcGFzc3Rocm91Z2ggZm9yIFVJIHByaW1pdGl2ZXMuXG4gKlxuICogUHJpbWl0aXZlcyBhY2NlcHQgYSBmaXhlZCBwcm9wIHNldC4gV2l0aG91dCBwYXNzdGhyb3VnaCwgYSBjb25zdW1lclxuICogdGhhdCBuZWVkcyBhIGBkYXRhLSpgIHRlc3QgaG9vayBvciBhbiBgYXJpYS0qYCBhdHRyaWJ1dGUgb24gdGhlXG4gKiBwcmltaXRpdmUncyBvd24gZWxlbWVudCBoYXMgdG8gd3JhcCBpdCBpbiBhbiBleHRyYSBET00gbm9kZSDigJQgYSBzbWVsbC5cbiAqXG4gKiB7QGxpbmsgUGFzc3Rocm91Z2hBdHRyc30gd2lkZW5zIGEgcHJpbWl0aXZlJ3MgcHJvcHMgdG8gYWNjZXB0IGFueVxuICogYGRhdGEtKmAgLyBgYXJpYS0qYCBrZXk7IHtAbGluayBjb2xsZWN0UGFzc3Rocm91Z2h9IGdhdGhlcnMgdGhlbSBmb3JcbiAqIHNwcmVhZGluZyBvbnRvIHRoZSByZW5kZXJlZCByb290IGVsZW1lbnQuIFNwcmVhZCB0aGUgcmVzdWx0ICpiZWZvcmUqXG4gKiB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXMgc28gYSBjb25zdW1lciBrZXkgY2FuIG5ldmVyIG92ZXJyaWRlXG4gKiBvbmUgdGhlIHByaW1pdGl2ZSBzZXRzIGl0c2VsZiAoYGRhdGEtcG9sbHktKmAsIGV0Yy4pLlxuICovXG5cbi8qKiBJbmRleCBzaWduYXR1cmVzIGxldHRpbmcgYSBwcmltaXRpdmUncyBwcm9wcyBhY2NlcHQgYXJiaXRyYXJ5XG4gKiAgYGRhdGEtKmAgYW5kIGBhcmlhLSpgIGF0dHJpYnV0ZXMsIHBsdXMgdGhlIHN0YW5kYXJkIGB0aXRsZWBcbiAqICBhdHRyaWJ1dGUg4oCUIGEgbmF0aXZlIHRvb2x0aXAgaXMgYSBET00gaG9vaywgbm90IHN0eWxpbmcsIHNvIGl0XG4gKiAgcmlkZXMgdGhlIHNhbWUgcGFzc3Rocm91Z2ggcGF0aCAocG9sbHkjMTM1KS4gKi9cbmV4cG9ydCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgPSB7XG4gIFtkYXRhQXR0cjogYGRhdGEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIFthcmlhQXR0cjogYGFyaWEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKiBOYXRpdmUgdG9vbHRpcCB0ZXh0LCBmb3J3YXJkZWQgdG8gdGhlIHJlbmRlcmVkIHJvb3QgZWxlbWVudC4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG59O1xuXG4vKiogS2V5cywgYmV5b25kIHRoZSBgZGF0YS0qYCAvIGBhcmlhLSpgIHByZWZpeGVzLCB0aGF0IHBhc3MgdGhyb3VnaC4gKi9cbmZ1bmN0aW9uIGlzUGFzc3Rocm91Z2hLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGtleS5zdGFydHNXaXRoKFwiZGF0YS1cIikgfHwga2V5LnN0YXJ0c1dpdGgoXCJhcmlhLVwiKSB8fCBrZXkgPT09IFwidGl0bGVcIjtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGBkYXRhLSpgIC8gYGFyaWEtKmAgLyBgdGl0bGVgIGF0dHJpYnV0ZXMgZnJvbSBhIHByb3BzIG9iamVjdFxuICogc28gdGhleSBjYW4gYmUgc3ByZWFkIG9udG8gYSBwcmltaXRpdmUncyByb290IGVsZW1lbnQuIGB1bmRlZmluZWRgXG4gKiB2YWx1ZXMgYW5kIG5vbi1hdHRyaWJ1dGUgdmFsdWUgdHlwZXMgKGZ1bmN0aW9ucywgb2JqZWN0cykgYXJlIGRyb3BwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0UGFzc3Rocm91Z2goXG4gIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4ge1xuICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+ID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb3BzKSkge1xuICAgIGlmICghaXNQYXNzdGhyb3VnaEtleShrZXkpKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IHByb3BzW2tleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgb3V0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsCiAgICAiLyoqXG4gKiBBY3Rpb25JbnB1dCDigJQgZHVhbC1tb2RlIHZpZXcvZWRpdCBpbnB1dCB3aXRoIGFjdGlvbiBkaXNwYXRjaCBvbiBjb21taXQuXG4gKlxuICogVmlldyBtb2RlIHJlbmRlcnMgdGhlIGN1cnJlbnQgdmFsdWUgYXMgdGV4dCAob3B0aW9uYWxseSB0aHJvdWdoIGFcbiAqIGNhbGxlci1zdXBwbGllZCBgcmVuZGVyVmlld2AgZm9yIG1hcmtkb3duLCByaWNoIGZvcm1hdHRpbmcsIGV0Yy4pLlxuICogQ2xpY2ssIEVudGVyLCBvciBTcGFjZSBlbnRlcnMgZWRpdCBtb2RlLiBFZGl0IG1vZGUgaXMgYSBuYXRpdmUgaW5wdXRcbiAqIG9yIHRleHRhcmVhOyBjb21taXQgZmlyZXMgdGhlIGNvbmZpZ3VyZWQgYWN0aW9uIHdpdGggYGRhdGEtYWN0aW9uLXZhbHVlYFxuICogYW5kIGBkYXRhLWFjdGlvbi1maWVsZGAgc2V0IGZyb20gRm9ybURhdGEtc2hhcGUgc2VtYW50aWNzLCBzbyB0aGVcbiAqIGV4aXN0aW5nIGV2ZW50IGRlbGVnYXRpb24gaGFuZGxlcyBpdCB3aXRoIG5vIGV4dHJhIHdpcmluZy5cbiAqXG4gKiBgc2F2ZU9uYCBwaWNrcyB0aGUgY29tbWl0IHRyaWdnZXI6XG4gKiAgIFwiYmx1clwiICAgICAgIGNvbW1pdCB3aGVuIHRoZSBmaWVsZCBsb3NlcyBmb2N1c1xuICogICBcImVudGVyXCIgICAgICBjb21taXQgb24gRW50ZXIgKHNpbmdsZS1saW5lKSBvciBDbWQvQ3RybCtFbnRlciAobXVsdGktbGluZSlcbiAqICAgXCJjbWQtZW50ZXJcIiAgY29tbWl0IG9ubHkgb24gQ21kL0N0cmwrRW50ZXJcbiAqICAgXCJleHBsaWNpdFwiICAgbmV2ZXIgYXV0by1jb21taXQg4oCUIGNhbGxlciB3aXJlcyBhIHNhdmUgYnV0dG9uIHdpdGggZGF0YS1hY3Rpb25cbiAqICAgXCJpbnB1dFwiICAgICAgY29tbWl0IG9uIGV2ZXJ5IGtleXN0cm9rZSDigJQgZm9yIGZpbHRlci1hcy15b3UtdHlwZSBmaWVsZHM7XG4gKiAgICAgICAgICAgICAgICB0aGUgZmllbGQgc3RheXMgaW4gZWRpdCBtb2RlIHJhdGhlciB0aGFuIHRvZ2dsaW5nIHRvIHZpZXdcbiAqXG4gKiBgaW5wdXRUeXBlYCBzZXRzIHRoZSBuYXRpdmUgaW5wdXQgdHlwZSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQg4oCUXG4gKiBcInRleHRcIiAoZGVmYXVsdCksIFwiZGF0ZVwiLCBcInRpbWVcIiwgXCJudW1iZXJcIiwgYW5kIGZyaWVuZHMg4oCUIHNvIGEgZGF0ZVxuICogb3IgbnVtZXJpYyBmaWVsZCBjb21taXRzIHRocm91Z2ggdGhlIGFjdGlvbiBzeXN0ZW0gbGlrZSBhbnkgb3RoZXIuXG4gKlxuICogTGF5b3V0LXNoaWZ0LWZyZWU6IHZpZXcgYW5kIGVkaXQgbW9kZXMgc2hhcmUgcGFkZGluZywgYm9yZGVyIHdpZHRoLFxuICogZm9udCwgYW5kIGxpbmUtaGVpZ2h0IHNvIHRoZSB0b2dnbGUgY2F1c2VzIG5vIHJlZmxvdy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9BY3Rpb25JbnB1dC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBkaXNwYXRjaEFjdGlvbiB9IGZyb20gXCIuL2ludGVybmFsL2Rpc3BhdGNoLWFjdGlvbi50c1wiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuXG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFNhdmVPbiA9IFwiYmx1clwiIHwgXCJlbnRlclwiIHwgXCJjbWQtZW50ZXJcIiB8IFwiZXhwbGljaXRcIiB8IFwiaW5wdXRcIjtcbmV4cG9ydCB0eXBlIEFjdGlvbklucHV0VmFyaWFudCA9IFwic2luZ2xlXCIgfCBcIm11bHRpXCI7XG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFR5cGUgPVxuICB8IFwidGV4dFwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcImRhdGV0aW1lLWxvY2FsXCJcbiAgfCBcInRpbWVcIlxuICB8IFwibW9udGhcIlxuICB8IFwid2Vla1wiXG4gIHwgXCJudW1iZXJcIlxuICB8IFwiZW1haWxcIlxuICB8IFwidXJsXCJcbiAgfCBcInRlbFwiO1xuXG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgLyoqIEN1cnJlbnQgdmFsdWUgdG8gcmVuZGVyIGluIHZpZXcgbW9kZSBhbmQgc2VlZCB0aGUgZWRpdCBidWZmZXIuICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBBY3Rpb24gbmFtZSB0byBkaXNwYXRjaCBvbiBjb21taXQuIFJlY2VpdmVzIGRhdGEtYWN0aW9uLXZhbHVlPTxuZXcgdmFsdWU+LiAqL1xuICBhY3Rpb246IHN0cmluZztcbiAgLyoqIENvbW1pdCB0cmlnZ2VyLiBEZWZhdWx0OiBcImJsdXJcIi4gKi9cbiAgc2F2ZU9uPzogQWN0aW9uSW5wdXRTYXZlT247XG4gIHZhcmlhbnQ/OiBBY3Rpb25JbnB1dFZhcmlhbnQ7XG4gIC8qKiBOYXRpdmUgaW5wdXQgdHlwZSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQuIERlZmF1bHQ6IFwidGV4dFwiLiAqL1xuICBpbnB1dFR5cGU/OiBBY3Rpb25JbnB1dFR5cGU7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBFeHRyYSBkYXRhLWFjdGlvbi0qIGF0dHJpYnV0ZXMgdG8gaW5jbHVkZSBhdCBjb21taXQgKGUuZy4gZW50aXR5IGlkKS4gKi9cbiAgYWN0aW9uRGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBDdXN0b20gdmlldyByZW5kZXJlciDigJQgcmVjZWl2ZXMgdmFsdWUsIHJldHVybnMgVk5vZGUuICovXG4gIHJlbmRlclZpZXc/OiAodmFsdWU6IHN0cmluZykgPT4gSlNYLkVsZW1lbnQgfCBzdHJpbmc7XG4gIC8qKiBMYWJlbCBhbm5vdW5jZWQgYnkgc2NyZWVuIHJlYWRlcnMgZm9yIHRoZSBlZGl0IGFmZm9yZGFuY2UuICovXG4gIGFyaWFMYWJlbD86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IHR3byByZW5kZXIgYnJhbmNoZXMgdGltZXMgdHdvIHZhcmlhbnRzIHRpbWVzIGZpdmUgc2F2ZU9uIHRyaWdnZXJzOyBicmFuY2hpbmcgaXMgaW5oZXJlbnQgdG8gdGhlIHByaW1pdGl2ZS5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25JbnB1dChwcm9wczogQWN0aW9uSW5wdXRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgdmFyaWFudCA9IHByb3BzLnZhcmlhbnQgPz8gXCJzaW5nbGVcIjtcbiAgY29uc3Qgc2F2ZU9uID0gcHJvcHMuc2F2ZU9uID8/IFwiYmx1clwiO1xuICAvLyBcImlucHV0XCIgbW9kZSBpcyBhIHBlcm1hbmVudGx5LWVkaXRhYmxlIGZpbHRlciBmaWVsZCDigJQgaXQgbmV2ZXIgaGFzIGFcbiAgLy8gdmlldyBtb2RlIHRvIHRvZ2dsZSBiYWNrIHRvLCBzbyBpdCBzdGFydHMgaW4gZWRpdC5cbiAgY29uc3QgbGl2ZSA9IHNhdmVPbiA9PT0gXCJpbnB1dFwiO1xuICBjb25zdCBbbW9kZSwgc2V0TW9kZV0gPSB1c2VTdGF0ZTxcInZpZXdcIiB8IFwiZWRpdFwiPihsaXZlID8gXCJlZGl0XCIgOiBcInZpZXdcIik7XG4gIGNvbnN0IFtkcmFmdCwgc2V0RHJhZnRdID0gdXNlU3RhdGUocHJvcHMudmFsdWUpO1xuICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1vZGUgPT09IFwidmlld1wiKSBzZXREcmFmdChwcm9wcy52YWx1ZSk7XG4gIH0sIFtwcm9wcy52YWx1ZSwgbW9kZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gRG9uJ3Qgc3RlYWwgZm9jdXMgb24gbW91bnQgZm9yIGEgbGl2ZSBmaWx0ZXIgZmllbGQ7IG9ubHkgcHVsbCBmb2N1c1xuICAgIC8vIHdoZW4gdGhlIHVzZXIgaGFzIGV4cGxpY2l0bHkgdG9nZ2xlZCBhIHZpZXcgZmllbGQgaW50byBlZGl0IG1vZGUuXG4gICAgaWYgKG1vZGUgPT09IFwiZWRpdFwiICYmICFsaXZlICYmIGlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuc2VsZWN0Py4oKTtcbiAgICB9XG4gIH0sIFttb2RlLCBsaXZlXSk7XG5cbiAgY29uc3QgZW50ZXJFZGl0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChwcm9wcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIHNldERyYWZ0KHByb3BzLnZhbHVlKTtcbiAgICBzZXRNb2RlKFwiZWRpdFwiKTtcbiAgfSwgW3Byb3BzLmRpc2FibGVkLCBwcm9wcy52YWx1ZV0pO1xuXG4gIGNvbnN0IGNvbW1pdCA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChuZXh0ICE9PSBwcm9wcy52YWx1ZSkge1xuICAgICAgICBkaXNwYXRjaEFjdGlvbihwcm9wcy5hY3Rpb24sIHsgLi4uKHByb3BzLmFjdGlvbkRhdGEgPz8ge30pLCB2YWx1ZTogbmV4dCB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEEgbGl2ZSBmaWx0ZXIgZmllbGQgc3RheXMgZWRpdGFibGU7IGV2ZXJ5IG90aGVyIHRyaWdnZXIgcmV0dXJuc1xuICAgICAgLy8gdG8gdmlldyBtb2RlIG9uY2UgdGhlIHZhbHVlIGlzIGNvbW1pdHRlZC5cbiAgICAgIGlmICghbGl2ZSkgc2V0TW9kZShcInZpZXdcIik7XG4gICAgfSxcbiAgICBbcHJvcHMuYWN0aW9uLCBwcm9wcy5hY3Rpb25EYXRhLCBwcm9wcy52YWx1ZSwgbGl2ZV1cbiAgKTtcblxuICBjb25zdCBjYW5jZWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0RHJhZnQocHJvcHMudmFsdWUpO1xuICAgIGlmICghbGl2ZSkgc2V0TW9kZShcInZpZXdcIik7XG4gIH0sIFtwcm9wcy52YWx1ZSwgbGl2ZV0pO1xuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBrZXlib2FyZCBoYW5kbGVyIGVuY29kZXMgdGhlIHNhdmVPbiDDlyB2YXJpYW50IG1hdHJpeC5cbiAgY29uc3Qgb25LZXlEb3duID0gKGV2ZW50OiBKU1guVGFyZ2V0ZWRLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjYW5jZWwoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBjb25zdCBjbWQgPSBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXk7XG4gICAgICBpZiAoc2F2ZU9uID09PSBcImVudGVyXCIgJiYgdmFyaWFudCA9PT0gXCJzaW5nbGVcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb21taXQoZHJhZnQpO1xuICAgICAgfSBlbHNlIGlmICgoc2F2ZU9uID09PSBcImVudGVyXCIgJiYgdmFyaWFudCA9PT0gXCJtdWx0aVwiICYmIGNtZCkgfHwgc2F2ZU9uID09PSBcImNtZC1lbnRlclwiKSB7XG4gICAgICAgIGlmIChjbWQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGNvbW1pdChkcmFmdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lID8gYCR7Y2xhc3Nlc1tcInJvb3RcIl19ICR7cHJvcHMuY2xhc3NOYW1lfWAgOiBjbGFzc2VzW1wicm9vdFwiXTtcblxuICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qIGZvcndhcmRlZCBvbnRvIHdoaWNoZXZlciBlbGVtZW50IGlzIHRoZSByb290XG4gIC8vIGZvciB0aGUgY3VycmVudCBtb2RlOyB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXMgd2luIG9uIGNvbGxpc2lvbi5cbiAgY29uc3QgcGFzc3Rocm91Z2ggPSBjb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpO1xuXG4gIGlmIChtb2RlID09PSBcInZpZXdcIikge1xuICAgIGNvbnN0IHJlbmRlcmVkID0gcHJvcHMucmVuZGVyVmlldyA/IHByb3BzLnJlbmRlclZpZXcocHJvcHMudmFsdWUpIDogcHJvcHMudmFsdWU7XG4gICAgY29uc3QgaXNFbXB0eSA9IHByb3BzLnZhbHVlLmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4gKFxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS91c2VTZW1hbnRpY0VsZW1lbnRzOiA8YnV0dG9uPiB3b3VsZCBzd2FsbG93IHRleHQgc2VsZWN0aW9uIGFuZCBhZGQgZGVmYXVsdCBzdHlsaW5nOyBkaXYgd2l0aCByb2xlPWJ1dHRvbiBpcyB0aGUgaW5saW5lLWVkaXQgaWRpb20uXG4gICAgICA8ZGl2XG4gICAgICAgIHsuLi5wYXNzdGhyb3VnaH1cbiAgICAgICAgY2xhc3M9e2Ake2NsYXNzTmFtZX0gJHtjbGFzc2VzW1widmlld1wiXX1gfVxuICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgIGRhdGEtcG9sbHktYWN0aW9uLWlucHV0XG4gICAgICAgIGRhdGEtcG9sbHktaW50ZXJhY3RpdmVcbiAgICAgICAgZGF0YS1zdGF0ZT17aXNFbXB0eSA/IFwiZW1wdHlcIiA6IFwiZmlsbGVkXCJ9XG4gICAgICAgIGRhdGEtdmFyaWFudD17dmFyaWFudH1cbiAgICAgICAgdGFiSW5kZXg9e3Byb3BzLmRpc2FibGVkID8gLTEgOiAwfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgYXJpYS1sYWJlbD17cHJvcHMuYXJpYUxhYmVsID8/IFwiRWRpdFwifVxuICAgICAgICBhcmlhLWRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZCA/IFwidHJ1ZVwiIDogdW5kZWZpbmVkfVxuICAgICAgICBvbkNsaWNrPXtlbnRlckVkaXR9XG4gICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIiB8fCBlLmtleSA9PT0gXCIgXCIpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGVudGVyRWRpdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2lzRW1wdHkgJiYgcHJvcHMucGxhY2Vob2xkZXIgPyAoXG4gICAgICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJwbGFjZWhvbGRlclwiXX0+e3Byb3BzLnBsYWNlaG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICByZW5kZXJlZFxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNvbW1vbiA9IHtcbiAgICAuLi5wYXNzdGhyb3VnaCxcbiAgICBjbGFzczogYCR7Y2xhc3Nlc1tcImVkaXRcIl19ICR7Y2xhc3Nlc1tcInJvb3RcIl19YCxcbiAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9sbHktYWN0aW9uLWlucHV0XCI6IHRydWUsXG4gICAgXCJkYXRhLXN0YXRlXCI6IFwiZWRpdGluZ1wiLFxuICAgIFwiZGF0YS12YXJpYW50XCI6IHZhcmlhbnQsXG4gICAgcGxhY2Vob2xkZXI6IHByb3BzLnBsYWNlaG9sZGVyLFxuICAgIHZhbHVlOiBkcmFmdCxcbiAgICBvbklucHV0OiAoZTogSlNYLlRhcmdldGVkRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgICAgc2V0RHJhZnQobmV4dCk7XG4gICAgICBpZiAobGl2ZSkgY29tbWl0KG5leHQpO1xuICAgIH0sXG4gICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICBpZiAoc2F2ZU9uID09PSBcImJsdXJcIikgY29tbWl0KGRyYWZ0KTtcbiAgICAgIGVsc2UgaWYgKCFsaXZlKSBjYW5jZWwoKTtcbiAgICB9LFxuICAgIG9uS2V5RG93bixcbiAgICBcImFyaWEtbGFiZWxcIjogcHJvcHMuYXJpYUxhYmVsID8/IFwiRWRpdFwiLFxuICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCxcbiAgfTtcblxuICBpZiAodmFyaWFudCA9PT0gXCJtdWx0aVwiKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICByZWY9eyhlbCkgPT4ge1xuICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQgPSBlbDtcbiAgICAgICAgfX1cbiAgICAgICAgey4uLihjb21tb24gYXMgdW5rbm93biBhcyBKU1guSFRNTEF0dHJpYnV0ZXM8SFRNTFRleHRBcmVhRWxlbWVudD4pfVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICByZWY9eyhlbCkgPT4ge1xuICAgICAgICBpbnB1dFJlZi5jdXJyZW50ID0gZWw7XG4gICAgICB9fVxuICAgICAgdHlwZT17cHJvcHMuaW5wdXRUeXBlID8/IFwidGV4dFwifVxuICAgICAgey4uLihjb21tb24gYXMgdW5rbm93biBhcyBKU1guSFRNTEF0dHJpYnV0ZXM8SFRNTElucHV0RWxlbWVudD4pfVxuICAgIC8+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogTGF5b3V0IOKAlCB0aGUgb25lIHByaW1pdGl2ZSB0aGF0IG93bnMgbGF5b3V0aW5nIGNvbmNlcm5zLlxuICpcbiAqIEV2ZXJ5IG90aGVyIGNvbXBvbmVudCBpbiBAZmFpcmZveC9wb2xseS91aSAoYW5kIGV2ZXJ5IGNvbnN1bWVyIGFwcFxuICogdGhhdCBydW5zIGBwb2xseSBxdWFsaXR5IGNzcy1sYXlvdXRgKSByb3V0ZXMgZmxleC9ncmlkIGRlY2lzaW9uc1xuICogdGhyb3VnaCB0aGlzIGNvbXBvbmVudC4gUHJvcHMgbWFwIHRvIENTUyBjdXN0b20gcHJvcGVydGllcyBzbyB0aGVcbiAqIHN0eWxlc2hlZXQgY2FuIHJlYWQgdGhlbSB1bmlmb3JtbHkgYW5kIHNvIGNvbnN1bWVycyBjYW4gb3ZlcnJpZGVcbiAqIGFueSBvZiB0aGVtIGluIG1lZGlhIHF1ZXJpZXMgd2l0aG91dCB0b3VjaGluZyBzcGVjaWZpY2l0eS5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIENvbXBvbmVudENoaWxkcmVuLCBjcmVhdGVFbGVtZW50LCB0eXBlIEpTWCwgdHlwZSBSZWYgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9MYXlvdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBMYXlvdXRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoZGl2LCBzZWN0aW9uLCBoZWFkZXIsIG5hdiwg4oCmKS4gRGVmYXVsdHMgdG8gJ2RpdicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuXG4gIC8qKiBDU1MgZ3JpZCBzdHJ1Y3R1cmUuICovXG4gIHJvd3M/OiBzdHJpbmc7XG4gIGNvbHVtbnM/OiBzdHJpbmc7XG4gIGF1dG9GbG93Pzogc3RyaW5nO1xuICBhdXRvUm93cz86IHN0cmluZztcbiAgYXV0b0NvbHVtbnM/OiBzdHJpbmc7XG5cbiAgLyoqIGRpc3BsYXk6IGNvbnRlbnRzIOKAlCBsZXRzIGNoaWxkcmVuIHBhcnRpY2lwYXRlIGluIGFuIGFuY2VzdG9yIGdyaWQuICovXG4gIGNvbnRlbnRzPzogYm9vbGVhbjtcbiAgLyoqIEluaGVyaXQgcGFyZW50IGdyaWQgdHJhY2tzIHZpYSBDU1Mgc3ViZ3JpZC4gKi9cbiAgc3ViZ3JpZD86IGJvb2xlYW47XG5cbiAgLyoqIFNwYWNpbmcuICovXG4gIGdhcD86IHN0cmluZztcbiAgcGFkZGluZz86IHN0cmluZztcblxuICAvKiogU2l6aW5nLiAqL1xuICBoZWlnaHQ/OiBzdHJpbmc7XG4gIG1pbkhlaWdodD86IHN0cmluZztcbiAgLyoqXG4gICAqIENhcCB0aGUgaW5saW5lIHNpemUgYW5kIGNlbnRyZSB3aXRoaW4gdGhlIHBhcmVudC4gVHlwaWNhbCB2YWx1ZXMgdXNlIHRoZVxuICAgKiBgLS1wb2xseS1tZWFzdXJlLSpgIHRva2VucyAoZS5nLiBcInZhcigtLXBvbGx5LW1lYXN1cmUtcGFnZSlcIiBmb3IgYW4gYXBwXG4gICAqIHNoZWxsLCBcInZhcigtLXBvbGx5LW1lYXN1cmUtcHJvc2UpXCIgZm9yIGJvZHkgY29weSkuIEFueSBDU1MgbGVuZ3RoIHdvcmtzLlxuICAgKi9cbiAgbWF4SW5saW5lU2l6ZT86IHN0cmluZztcblxuICAvKiogQ29udGFpbmVyIGFsaWdubWVudC4gKi9cbiAganVzdGlmeUl0ZW1zPzogc3RyaW5nO1xuICBhbGlnbkl0ZW1zPzogc3RyaW5nO1xuICBqdXN0aWZ5Q29udGVudD86IHN0cmluZztcbiAgYWxpZ25Db250ZW50Pzogc3RyaW5nO1xuXG4gIC8qKiBTZWxmIGFsaWdubWVudCAod2hlbiB0aGlzIExheW91dCBpcyBhbiBpdGVtIGluIGEgcGFyZW50IGdyaWQpLiAqL1xuICBqdXN0aWZ5U2VsZj86IHN0cmluZztcbiAgYWxpZ25TZWxmPzogc3RyaW5nO1xuXG4gIC8qKiBDb2xsYXBzZSB0byBhIHNpbmdsZSBjb2x1bW4gYXQg4omkNjQwcHguICovXG4gIHN0YWNrT25Nb2JpbGU/OiBib29sZWFuO1xuXG4gIC8qKiBSZW5kZXIgYXMgZGlzcGxheTogaW5saW5lLWdyaWQgc28gdGhlIExheW91dCBmbG93cyBpbmxpbmUgd2l0aCBzdXJyb3VuZGluZyB0ZXh0L2NvbnRyb2xzLiAqL1xuICBpbmxpbmU/OiBib29sZWFuO1xuXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgb25DbGljaz86IEpTWC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gIG9uS2V5RG93bj86IEpTWC5LZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gIG9uS2V5VXA/OiBKU1guS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICAvKiogUG9pbnRlci1lbnRlci9sZWF2ZSBvbiB0aGUgY29udGFpbmVyIGl0c2VsZiDigJQgYSBob3Zlci1zY29wZWQgYmVoYXZpb3VyXG4gICAqIHN1Y2ggYXMgcGF1c2luZyBhIHRpbWVyIHdoaWxlIHRoZSBwb2ludGVyIGlzIG92ZXIgYSBzdGFjay4gV2l0aG91dCB0aGVzZVxuICAgKiBhIGNvbXBvbmVudCB0aGF0IG5lZWRzIG9uZSBoYXMgdG8gcmVuZGVyIGl0cyBvd24gZWxlbWVudCBhbmQgd3JpdGUgaXRzXG4gICAqIG93biBncmlkLCB3aGljaCBpcyB0aGUgbG9vcGhvbGUgPExheW91dD4gZXhpc3RzIHRvIGNsb3NlLiAqL1xuICBvbk1vdXNlRW50ZXI/OiBKU1guTW91c2VFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICBvbk1vdXNlTGVhdmU/OiBKU1guTW91c2VFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICAvKiogUmVmIHRvIHRoZSByZW5kZXJlZCBlbGVtZW50LiBTYW1lIHJlYXNvbiBhcyB0aGUgaGFuZGxlcnMgYWJvdmU6IGEgZm9jdXNcbiAgICogdHJhcCBvciBhIG1lYXN1cmVtZW50IG5lZWRzIHRoZSBub2RlLCBhbmQgcmVmdXNpbmcgaXQgZm9yY2VzIHJhdyBDU1MuXG4gICAqXG4gICAqIE5hbWVkIGBlbGVtZW50UmVmYCwgbm90IGByZWZgOiBQcmVhY3QgbGlmdHMgYSBgcmVmYCBwcm9wIG9mZiBhIGZ1bmN0aW9uXG4gICAqIGNvbXBvbmVudCBpbnRvIHRoZSB2bm9kZSBhbmQgbmV2ZXIgcGFzc2VzIGl0IHRocm91Z2ggcHJvcHMsIHNvIGEgcGxhaW5cbiAgICogYHJlZmAgaGVyZSB3b3VsZCBiZSBzaWxlbnRseSBkcm9wcGVkLiBDYXVnaHQgYnkgTW9kYWwncyBvdmVybGF5IHRlc3Qg4oCUXG4gICAqIHRoZSBzdGFjayBzdG9wcGVkIHBvcHBpbmcgYmVjYXVzZSB0aGUgY2FsbGJhY2sgbmV2ZXIgcmFuLiAqL1xuICBlbGVtZW50UmVmPzogUmVmPEhUTUxFbGVtZW50PjtcblxuICByb2xlPzogSlNYLkFyaWFSb2xlO1xuICB0YWJJbmRleD86IG51bWJlcjtcbiAgaWQ/OiBzdHJpbmc7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxsZWRieVwiPzogc3RyaW5nO1xuICBcImFyaWEtZGVzY3JpYmVkYnlcIj86IHN0cmluZztcbn07XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBzaXh0ZWVuIG9wdGlvbmFsIHByb3AtdG8tY3VzdG9tLXByb3BlcnR5IG1hcHBpbmdzOyBmbGF0IGFuZCBsaW5lYXIuXG5leHBvcnQgZnVuY3Rpb24gTGF5b3V0KHByb3BzOiBMYXlvdXRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGFzID0gXCJkaXZcIixcbiAgICByb3dzLFxuICAgIGNvbHVtbnMsXG4gICAgY29udGVudHMsXG4gICAgc3ViZ3JpZCxcbiAgICBnYXAsXG4gICAgcGFkZGluZyxcbiAgICBoZWlnaHQsXG4gICAgbWluSGVpZ2h0LFxuICAgIG1heElubGluZVNpemUsXG4gICAganVzdGlmeUl0ZW1zLFxuICAgIGFsaWduSXRlbXMsXG4gICAganVzdGlmeUNvbnRlbnQsXG4gICAgYWxpZ25Db250ZW50LFxuICAgIGp1c3RpZnlTZWxmLFxuICAgIGFsaWduU2VsZixcbiAgICBhdXRvRmxvdyxcbiAgICBhdXRvUm93cyxcbiAgICBhdXRvQ29sdW1ucyxcbiAgICBzdGFja09uTW9iaWxlLFxuICAgIGlubGluZSxcbiAgICBjbGFzc05hbWUsXG4gICAgb25DbGljayxcbiAgICBvbktleURvd24sXG4gICAgb25LZXlVcCxcbiAgICBvbk1vdXNlRW50ZXIsXG4gICAgb25Nb3VzZUxlYXZlLFxuICAgIGVsZW1lbnRSZWYsXG4gICAgcm9sZSxcbiAgICB0YWJJbmRleCxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgaWYgKGNvbnRlbnRzKSB7XG4gICAgc3R5bGVbXCJkaXNwbGF5XCJdID0gXCJjb250ZW50c1wiO1xuICB9IGVsc2UgaWYgKHN1YmdyaWQpIHtcbiAgICBzdHlsZVtcIi0tbC1jb2xcIl0gPSBcIjEgLyAtMVwiO1xuICAgIHN0eWxlW1wiLS1sLWNvbHNcIl0gPSBcInN1YmdyaWRcIjtcbiAgICBpZiAocGFkZGluZykgc3R5bGVbXCItLWwtcFwiXSA9IHBhZGRpbmc7XG4gICAgaWYgKGFsaWduSXRlbXMpIHN0eWxlW1wiLS1sLWFpXCJdID0gYWxpZ25JdGVtcztcbiAgICBpZiAoZ2FwKSBzdHlsZVtcIi0tbC1nYXBcIl0gPSBnYXA7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHBhZGRpbmcpIHN0eWxlW1wiLS1sLXBcIl0gPSBwYWRkaW5nO1xuICAgIGlmIChoZWlnaHQpIHN0eWxlW1wiLS1sLWhcIl0gPSBoZWlnaHQ7XG4gICAgaWYgKG1pbkhlaWdodCkgc3R5bGVbXCItLWwtbWhcIl0gPSBtaW5IZWlnaHQ7XG4gICAgaWYgKG1heElubGluZVNpemUpIHN0eWxlW1wiLS1sLW1pc1wiXSA9IG1heElubGluZVNpemU7XG4gICAgaWYgKHJvd3MpIHN0eWxlW1wiLS1sLXJvd3NcIl0gPSByb3dzO1xuICAgIGlmIChjb2x1bW5zKSBzdHlsZVtcIi0tbC1jb2xzXCJdID0gY29sdW1ucztcbiAgICBpZiAoZ2FwKSBzdHlsZVtcIi0tbC1nYXBcIl0gPSBnYXA7XG4gICAgaWYgKGp1c3RpZnlJdGVtcykgc3R5bGVbXCItLWwtamlcIl0gPSBqdXN0aWZ5SXRlbXM7XG4gICAgaWYgKGFsaWduSXRlbXMpIHN0eWxlW1wiLS1sLWFpXCJdID0gYWxpZ25JdGVtcztcbiAgICBpZiAoanVzdGlmeUNvbnRlbnQpIHN0eWxlW1wiLS1sLWpjXCJdID0ganVzdGlmeUNvbnRlbnQ7XG4gICAgaWYgKGFsaWduQ29udGVudCkgc3R5bGVbXCItLWwtYWNcIl0gPSBhbGlnbkNvbnRlbnQ7XG4gICAgaWYgKGF1dG9GbG93KSBzdHlsZVtcIi0tbC1mbG93XCJdID0gYXV0b0Zsb3c7XG4gICAgaWYgKGF1dG9Sb3dzKSBzdHlsZVtcIi0tbC1hcm93c1wiXSA9IGF1dG9Sb3dzO1xuICAgIGlmIChhdXRvQ29sdW1ucykgc3R5bGVbXCItLWwtYWNvbHNcIl0gPSBhdXRvQ29sdW1ucztcbiAgfVxuICBpZiAoanVzdGlmeVNlbGYpIHN0eWxlW1wiLS1sLWpzXCJdID0ganVzdGlmeVNlbGY7XG4gIGlmIChhbGlnblNlbGYpIHN0eWxlW1wiLS1sLWFzXCJdID0gYWxpZ25TZWxmO1xuXG4gIGNvbnN0IGJhc2VQYXJ0cyA9IFtjbGFzc2VzW1wibGF5b3V0XCJdXTtcbiAgaWYgKGlubGluZSkgYmFzZVBhcnRzLnB1c2goY2xhc3Nlc1tcImlubGluZVwiXSk7XG4gIGlmIChzdGFja09uTW9iaWxlKSBiYXNlUGFydHMucHVzaChjbGFzc2VzW1wic3RhY2tPbk1vYmlsZVwiXSk7XG4gIGNvbnN0IGJhc2VDbGFzcyA9IGJhc2VQYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG4gIGNvbnN0IGNvbWJpbmVkID0gY29udGVudHMgPyBjbGFzc05hbWUgOiBjbGFzc05hbWUgPyBgJHtiYXNlQ2xhc3N9ICR7Y2xhc3NOYW1lfWAgOiBiYXNlQ2xhc3M7XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKi90aXRsZSBmaXJzdDsgdGhlIHByaW1pdGl2ZSdzIG93blxuICAgICAgLy8gYXR0cmlidXRlcyBiZWxvdyB3aW4gb24gYW55IGNvbGxpc2lvbi5cbiAgICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgICBpZCxcbiAgICAgIGNsYXNzTmFtZTogY29tYmluZWQsXG4gICAgICBzdHlsZSxcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvbktleURvd24sXG4gICAgICBvbktleVVwLFxuICAgICAgb25Nb3VzZUVudGVyLFxuICAgICAgb25Nb3VzZUxlYXZlLFxuICAgICAgcmVmOiBlbGVtZW50UmVmLFxuICAgICAgcm9sZSxcbiAgICAgIHRhYkluZGV4LFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzW1wiYXJpYS1sYWJlbFwiXSxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHByb3BzW1wiYXJpYS1sYWJlbGxlZGJ5XCJdLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHByb3BzW1wiYXJpYS1kZXNjcmliZWRieVwiXSxcbiAgICAgIFwiZGF0YS1wb2xseS1sYXlvdXRcIjogdHJ1ZSxcbiAgICB9LFxuICAgIGNoaWxkcmVuXG4gICk7XG59XG4iLAogICAgIi8qKlxuICogRHJvcGRvd24g4oCUIHRyaWdnZXIgYnV0dG9uICsgcG9wb3ZlciBtZW51IHVzaW5nIHRoZSBuYXRpdmUgUG9wb3ZlciBBUEkuXG4gKlxuICogQSBzaG93biBwb3BvdmVyIGlzIHByb21vdGVkIHRvIHRoZSBicm93c2VyJ3MgdG9wIGxheWVyLCB3aGVyZSBDU1NcbiAqIHBvc2l0aW9uaW5nIHJlc29sdmVzIGFnYWluc3QgdGhlIHZpZXdwb3J0IHJhdGhlciB0aGFuIHRoZSBgLmRyb3Bkb3duYFxuICogd3JhcHBlciDigJQgc28gdGhlIG1lbnUgY2Fubm90IGJlIHBsYWNlZCB3aXRoIGBwb3NpdGlvbjogYWJzb2x1dGVgXG4gKiBhbG9uZS4gSW5zdGVhZCBpdCBpcyBwaW5uZWQgd2l0aCBgcG9zaXRpb246IGZpeGVkYCBhbmQgY29vcmRpbmF0ZXNcbiAqIG1lYXN1cmVkIGZyb20gdGhlIHRyaWdnZXI7IHNlZSBgcG9zaXRpb25NZW51YCBiZWxvdyAoaXNzdWUgIzEyOCkuXG4gKlxuICogVGhlIG1lbnUgZWxlbWVudCBnZXRzIGBwb3BvdmVyPVwiYXV0b1wiYCBhbmQgYSB1bmlxdWUgYGRhdGEtb3ZlcmxheS1pZGAuXG4gKiBgY2xvc2VUb3BPdmVybGF5KClgIGZyb20gQGZhaXJmb3gvcG9sbHkvYWN0aW9ucyBmaW5kcyB0aGUgdG9wbW9zdFxuICogYFtkYXRhLW92ZXJsYXktaWRdYCBlbGVtZW50IGFuZCBkaXNwYXRjaGVzIGBvdmVybGF5OmNsb3NlYCDigJQgdGhlXG4gKiBEcm9wZG93biBsaXN0ZW5zIGZvciB0aGF0IGV2ZW50IGFuZCBtaXJyb3JzIGl0IG9udG8gdGhlIGBpc09wZW5gXG4gKiBzaWduYWwuIEluIHNpbmdsZS1zZWxlY3QgbW9kZSwgY2xpY2tpbmcgdGhlIG1lbnUgY2xvc2VzIGl0OyBpblxuICogbXVsdGktc2VsZWN0IG1vZGUsIHRoZSBtZW51IHN0YXlzIG9wZW4gc28gdGhlIGNvbnN1bWVyIGNhbiBwaWNrXG4gKiBzZXZlcmFsIGl0ZW1zLlxuICovXG5cbmltcG9ydCB7IHR5cGUgU2lnbmFsLCB1c2VTaWduYWxFZmZlY3QgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0Ryb3Bkb3duLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgRHJvcGRvd25Qcm9wcyA9IHtcbiAgaXNPcGVuOiBTaWduYWw8Ym9vbGVhbj47XG4gIHRyaWdnZXI6IENvbXBvbmVudENoaWxkcmVuO1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcInJpZ2h0XCI7XG4gIG11bHRpU2VsZWN0PzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byB0aGUgdHJpZ2dlciA8YnV0dG9uPiBpbiBwbGFjZSBvZiBEcm9wZG93bidzIG93blxuICAgKiBkZWZhdWx0LiBMZXRzIGEgY29tcG9zaW5nIGNvbXBvbmVudCAoU2VsZWN0LCBBY3Rpb25TZWxlY3QpIHN0eWxlXG4gICAqIHRoZSBzaW5nbGUgaW50ZXJhY3RpdmUgZWxlbWVudCBkaXJlY3RseSwgd2l0aCBubyBzdHlsZWQgbm9kZVxuICAgKiBuZXN0ZWQgaW5zaWRlIHRoZSBidXR0b24uIFRoZSB0cmlnZ2VyIGFsc28gY2FycmllcyBhXG4gICAqIGBkYXRhLW9wZW49XCJ0cnVlfGZhbHNlXCJgIGF0dHJpYnV0ZSBtaXJyb3JpbmcgYGlzT3BlbmAsIHNvIHRoZVxuICAgKiBjbGFzcyBjYW4gc3R5bGUgb3Blbi1zdGF0ZSBhZmZvcmRhbmNlcyAoZS5nLiBhIHJvdGF0aW5nIGNhcmV0KS5cbiAgICovXG4gIHRyaWdnZXJDbGFzc05hbWU/OiBzdHJpbmc7XG4gIC8qKiBEaXNhYmxlcyB0aGUgdHJpZ2dlciA8YnV0dG9uPi4gKi9cbiAgdHJpZ2dlckRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE5hdGl2ZSBob3ZlciB0b29sdGlwIG9uIHRoZSB0cmlnZ2VyIDxidXR0b24+LiBTZWxlY3QvQWN0aW9uU2VsZWN0XG4gICAqIHBhc3MgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHNvIGEgdHJ1bmNhdGVkIHRyaWdnZXIgc3RpbGwgcmV2ZWFscyBpdHNcbiAgICogZnVsbCB2YWx1ZSBvbiBob3Zlci5cbiAgICovXG4gIHRyaWdnZXJUaXRsZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5sZXQgZHJvcGRvd25Db3VudGVyID0gMDtcblxuLyoqIEdhcCBpbiBweCB0aGUgbWVudSBsZWF2ZXMgYmV0d2VlbiBpdHNlbGYgYW5kIHRoZSB0cmlnZ2VyLiAqL1xuY29uc3QgTUVOVV9HQVAgPSA0O1xuLyoqIE1pbmltdW0gZ2FwIGluIHB4IHRoZSBtZW51IGtlZXBzIGZyb20gZXZlcnkgdmlld3BvcnQgZWRnZS4gKi9cbmNvbnN0IFZJRVdQT1JUX1BBRERJTkcgPSA4O1xuXG5leHBvcnQgZnVuY3Rpb24gRHJvcGRvd24ocHJvcHM6IERyb3Bkb3duUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBpc09wZW4sXG4gICAgdHJpZ2dlcixcbiAgICBjaGlsZHJlbixcbiAgICBhbGlnbiA9IFwibGVmdFwiLFxuICAgIG11bHRpU2VsZWN0ID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICAgIHRyaWdnZXJDbGFzc05hbWUsXG4gICAgdHJpZ2dlckRpc2FibGVkID0gZmFsc2UsXG4gICAgdHJpZ2dlclRpdGxlLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgbWVudVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHRyaWdnZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBpZFJlZiA9IHVzZVJlZihgcG9sbHktZHJvcGRvd24tJHsrK2Ryb3Bkb3duQ291bnRlcn1gKTtcbiAgY29uc3QgcG9wb3ZlcklkID0gaWRSZWYuY3VycmVudDtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHRyaWdnZXJSZWYuY3VycmVudD8uc2V0QXR0cmlidXRlKFwicG9wb3ZlcnRhcmdldFwiLCBwb3BvdmVySWQpO1xuICB9LCBbcG9wb3ZlcklkXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZW51ID0gbWVudVJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSkgcmV0dXJuO1xuICAgIGNvbnN0IG9uT3ZlcmxheUNsb3NlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEN1c3RvbUV2ZW50ICYmIGUuZGV0YWlsPy5pZCA9PT0gcG9wb3ZlcklkKSB7XG4gICAgICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgbWVudS5hZGRFdmVudExpc3RlbmVyKFwib3ZlcmxheTpjbG9zZVwiLCBvbk92ZXJsYXlDbG9zZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIG1lbnUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm92ZXJsYXk6Y2xvc2VcIiwgb25PdmVybGF5Q2xvc2UpO1xuICAgIH07XG4gIH0sIFtwb3BvdmVySWQsIGlzT3Blbl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWVudSA9IG1lbnVSZWYuY3VycmVudDtcbiAgICBjb25zdCB0cmlnZ2VyID0gdHJpZ2dlclJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSB8fCAhdHJpZ2dlcikgcmV0dXJuO1xuXG4gICAgLy8gUGluIHRoZSB0b3AtbGF5ZXIgbWVudSB0byBpdHMgdHJpZ2dlciB3aXRoIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICAgIC8vIFJ1biBmcm9tIGBiZWZvcmV0b2dnbGVgIHRoaXMgaGFwcGVucyBzeW5jaHJvbm91c2x5IGJlZm9yZSB0aGVcbiAgICAvLyBwb3BvdmVyIHBhaW50cywgc28gdGhlIG1lbnUgaXMgY29ycmVjdCBvbiBpdHMgZmlyc3QgZnJhbWUg4oCUIG5vXG4gICAgLy8gZmxhc2guIFJ1biBmcm9tIHNjcm9sbC9yZXNpemUgaXQga2VlcHMgdGhlIG1lbnUgcGlubmVkLlxuICAgIGNvbnN0IHBvc2l0aW9uTWVudSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHQgPSB0cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAvLyBBIG5vdC15ZXQtc2hvd24gcG9wb3ZlciBpcyBgZGlzcGxheTogbm9uZWAgYW5kIGhhcyBubyBib3ggdG9cbiAgICAgIC8vIG1lYXN1cmUuIEZvcmNlIGxheW91dCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSAoc3luY2hyb25vdXMpXG4gICAgICAvLyByZWFkLCB0aGVuIHJlc3RvcmUg4oCUIG5vdGhpbmcgcGFpbnRzIGluIGJldHdlZW4uIENsZWFyaW5nIHRoZVxuICAgICAgLy8gaW5saW5lIG1heC1oZWlnaHQgZmlyc3QgbWVhc3VyZXMgdGhlIG1lbnUncyBuYXR1cmFsIHNpemUuXG4gICAgICBjb25zdCBwcmV2RGlzcGxheSA9IG1lbnUuc3R5bGUuZGlzcGxheTtcbiAgICAgIG1lbnUuc3R5bGUubWF4SGVpZ2h0ID0gXCJcIjtcbiAgICAgIG1lbnUuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIGNvbnN0IG1lbnVXaWR0aCA9IG1lbnUub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBtZW51SGVpZ2h0ID0gbWVudS5vZmZzZXRIZWlnaHQ7XG4gICAgICBtZW51LnN0eWxlLmRpc3BsYXkgPSBwcmV2RGlzcGxheTtcblxuICAgICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgLy8gSG9yaXpvbnRhbDogYWxpZ24gbGVmdCBlZGdlcyAocmlnaHQgZWRnZXMgd2hlbiBhbGlnbj1cInJpZ2h0XCIpLFxuICAgICAgLy8gdGhlbiBjbGFtcCBzbyB0aGUgbWVudSBuZXZlciBvdmVyZmxvd3MgYSB2aWV3cG9ydCBlZGdlLiBVbmRlclxuICAgICAgLy8gUlRMIHRoZSBcImxlZnRcIiBkZWZhdWx0IHJlYWRzIGFzIHRoZSBpbmxpbmUtc3RhcnQgZWRnZSwgd2hpY2hcbiAgICAgIC8vIGlzIHRoZSB0cmlnZ2VyJ3MgKnJpZ2h0KiBlZGdlIOKAlCBmbGlwIHRoZSBhbmNob3Igc28gdGhlIG1lbnVcbiAgICAgIC8vIGdyb3dzIHRvd2FyZCB0aGUgaW5saW5lLWVuZCBsaWtlIGl0cyBuYXRpdmUgY291bnRlcnBhcnQuXG4gICAgICBjb25zdCBpc1J0bCA9XG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUodHJpZ2dlcikuZGlyZWN0aW9uID09PSBcInJ0bFwiIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIgPT09IFwicnRsXCI7XG4gICAgICBjb25zdCBwaHlzaWNhbFJpZ2h0ID0gKGlzUnRsICYmIGFsaWduID09PSBcImxlZnRcIikgfHwgYWxpZ24gPT09IFwicmlnaHRcIjtcbiAgICAgIGxldCBsZWZ0ID0gcGh5c2ljYWxSaWdodCA/IHQucmlnaHQgLSBtZW51V2lkdGggOiB0LmxlZnQ7XG4gICAgICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgoVklFV1BPUlRfUEFERElORywgdmlld3BvcnRXaWR0aCAtIG1lbnVXaWR0aCAtIFZJRVdQT1JUX1BBRERJTkcpO1xuICAgICAgbGVmdCA9IE1hdGgubWluKE1hdGgubWF4KGxlZnQsIFZJRVdQT1JUX1BBRERJTkcpLCBtYXhMZWZ0KTtcblxuICAgICAgLy8gVmVydGljYWw6IGJlbG93IHRoZSB0cmlnZ2VyIGJ5IGRlZmF1bHQ7IGZsaXAgYWJvdmUgd2hlbiB0aGF0XG4gICAgICAvLyBsZWF2ZXMgbW9yZSByb29tLiBDYXAgdGhlIGhlaWdodCB0byB0aGUgc3BhY2UgYXZhaWxhYmxlIHNvIHRoZVxuICAgICAgLy8gbWVudSBhbHdheXMgc3RheXMgb24tc2NyZWVuLlxuICAgICAgY29uc3Qgc3BhY2VCZWxvdyA9IHZpZXdwb3J0SGVpZ2h0IC0gdC5ib3R0b20gLSBNRU5VX0dBUCAtIFZJRVdQT1JUX1BBRERJTkc7XG4gICAgICBjb25zdCBzcGFjZUFib3ZlID0gdC50b3AgLSBNRU5VX0dBUCAtIFZJRVdQT1JUX1BBRERJTkc7XG4gICAgICBsZXQgdG9wOiBudW1iZXI7XG4gICAgICBpZiAobWVudUhlaWdodCA8PSBzcGFjZUJlbG93IHx8IHNwYWNlQmVsb3cgPj0gc3BhY2VBYm92ZSkge1xuICAgICAgICB0b3AgPSB0LmJvdHRvbSArIE1FTlVfR0FQO1xuICAgICAgICBpZiAobWVudUhlaWdodCA+IHNwYWNlQmVsb3cpIHtcbiAgICAgICAgICBtZW51LnN0eWxlLm1heEhlaWdodCA9IGAke01hdGgubWF4KHNwYWNlQmVsb3csIDApfXB4YDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlID0gTWF0aC5tYXgoc3BhY2VBYm92ZSwgMCk7XG4gICAgICAgIG1lbnUuc3R5bGUubWF4SGVpZ2h0ID0gYCR7YXZhaWxhYmxlfXB4YDtcbiAgICAgICAgdG9wID0gdC50b3AgLSBNRU5VX0dBUCAtIE1hdGgubWluKG1lbnVIZWlnaHQsIGF2YWlsYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIG1lbnUuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XG4gICAgICBtZW51LnN0eWxlLm1hcmdpbiA9IFwiMFwiO1xuICAgICAgbWVudS5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XG4gICAgICBtZW51LnN0eWxlLnRvcCA9IGAke3RvcH1weGA7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uQmVmb3JlVG9nZ2xlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoXCJuZXdTdGF0ZVwiIGluIGUgJiYgZS5uZXdTdGF0ZSA9PT0gXCJvcGVuXCIpIHtcbiAgICAgICAgcG9zaXRpb25NZW51KCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvblJlcG9zaXRpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAobWVudS5tYXRjaGVzKFwiOnBvcG92ZXItb3BlblwiKSkgcG9zaXRpb25NZW51KCk7XG4gICAgfTtcblxuICAgIG1lbnUuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXRvZ2dsZVwiLCBvbkJlZm9yZVRvZ2dsZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25SZXBvc2l0aW9uLCB0cnVlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBvblJlcG9zaXRpb24pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBtZW51LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV0b2dnbGVcIiwgb25CZWZvcmVUb2dnbGUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25SZXBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIG9uUmVwb3NpdGlvbik7XG4gICAgfTtcbiAgfSwgW2FsaWduXSk7XG5cbiAgdXNlU2lnbmFsRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZW51ID0gbWVudVJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSkgcmV0dXJuO1xuICAgIGlmIChpc09wZW4udmFsdWUgJiYgIW1lbnUubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHtcbiAgICAgIG1lbnUuc2hvd1BvcG92ZXIoKTtcbiAgICB9IGVsc2UgaWYgKCFpc09wZW4udmFsdWUgJiYgbWVudS5tYXRjaGVzKFwiOnBvcG92ZXItb3BlblwiKSkge1xuICAgICAgbWVudS5oaWRlUG9wb3ZlcigpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKFwibmV3U3RhdGVcIiBpbiBlKSB7XG4gICAgICBpc09wZW4udmFsdWUgPSAoZSBhcyB1bmtub3duIGFzIHsgbmV3U3RhdGU6IHN0cmluZyB9KS5uZXdTdGF0ZSA9PT0gXCJvcGVuXCI7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1lbnVDbGljayA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoIW11bHRpU2VsZWN0KSB7XG4gICAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKGUua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImRyb3Bkb3duXCJdID8/IFwiXCJdO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGlkPXtpZH0gY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LWRyb3Bkb3duPlxuICAgICAgPGJ1dHRvblxuICAgICAgICByZWY9e3RyaWdnZXJSZWZ9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz17dHJpZ2dlckNsYXNzTmFtZSA/PyBjbGFzc2VzW1widHJpZ2dlclwiXSA/PyBcIlwifVxuICAgICAgICBkaXNhYmxlZD17dHJpZ2dlckRpc2FibGVkfVxuICAgICAgICB0aXRsZT17dHJpZ2dlclRpdGxlfVxuICAgICAgICBkYXRhLW9wZW49e2lzT3Blbi52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgPlxuICAgICAgICB7dHJpZ2dlcn1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e21lbnVSZWZ9XG4gICAgICAgIGlkPXtwb3BvdmVySWR9XG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgYXJpYS1tdWx0aXNlbGVjdGFibGU9e211bHRpU2VsZWN0ID8gXCJ0cnVlXCIgOiB1bmRlZmluZWR9XG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wibWVudVwiXSA/PyBcIlwifVxuICAgICAgICBkYXRhLWFsaWduPXthbGlnbn1cbiAgICAgICAgcG9wb3Zlcj1cImF1dG9cIlxuICAgICAgICBkYXRhLW92ZXJsYXktaWQ9e3BvcG92ZXJJZH1cbiAgICAgICAgb25Ub2dnbGU9e2hhbmRsZVRvZ2dsZX1cbiAgICAgICAgb25DbGljaz17aGFuZGxlTWVudUNsaWNrfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICA+XG4gICAgICAgIDxMYXlvdXQgcm93cz1cImF1dG9cIiBnYXA9XCIwXCI+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L0xheW91dD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFNlbGVjdFRyaWdnZXIg4oCUIHRoZSBsYWJlbC9jYXJldCByb3cgaW5zaWRlIGEgc2VsZWN0IHRyaWdnZXIgYm94LlxuICpcbiAqIGAudHJpZ2dlcmAgaW4gU2VsZWN0Lm1vZHVsZS5jc3Mgc3R5bGVzIHRoZSAqYm94KjogYm9yZGVyLCBwYWRkaW5nLFxuICogYG1pbi1ibG9jay1zaXplYCwgYW5kIGBhbGlnbi1jb250ZW50OiBjZW50ZXJgIHRvIGNlbnRyZSBvbmUgY2hpbGQgaW5cbiAqIGl0LiBJdCBkZWxpYmVyYXRlbHkgZGVjbGFyZXMgbm8gZmxleCBvciBncmlkIG9mIGl0cyBvd24g4oCUIHBvbGx5LXVpXG4gKiByb3V0ZXMgZXZlcnkgbGF5b3V0IGRlY2lzaW9uIHRocm91Z2ggPExheW91dD4g4oCUIHNvIHRoZSBjb21wb25lbnRcbiAqIHRoYXQgYXBwbGllcyBgLnRyaWdnZXJgIG11c3Qgc3VwcGx5IHRoZSByb3cuXG4gKlxuICogcG9sbHkjMTgwOiB0aGF0IHJ1bGUgd2FzIGNoYW5nZWQgZm9yIG9uZSBvZiBpdHMgdHdvIGNvbnN1bWVycy5cbiAqIDxTZWxlY3Q+IGdhaW5lZCBhIDxMYXlvdXQ+OyA8QWN0aW9uU2VsZWN0Piwgd2hpY2ggYXBwbGllcyB0aGUgc2FtZVxuICogY2xhc3MgdGhyb3VnaCBEcm9wZG93bidzIGB0cmlnZ2VyQ2xhc3NOYW1lYCwga2VwdCByZW5kZXJpbmcgdHdvIGJhcmVcbiAqIGlubGluZSBzcGFucywgc28gaXRzIGNhcmV0IHdyYXBwZWQgb250byBhIHNlY29uZCBsaW5lLiBOb3RoaW5nIHRpZWRcbiAqIHRoZSBzdHlsZXNoZWV0J3MgY29udHJhY3QgdG8gdGhlIGNvbXBvbmVudHMgdGhhdCBoYWQgdG8gc2F0aXNmeSBpdC5cbiAqIFRoaXMgbW9kdWxlIGlzIHRoYXQgdGllOiBvbmUgcm93LCBvbmUgZGVmaW5pdGlvbiwgYm90aCBjb25zdW1lcnMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4uL1NlbGVjdC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdFRyaWdnZXJQcm9wcyA9IHtcbiAgLyoqIFRleHQgaW4gdGhlIHRyaWdnZXIg4oCUIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgb3IgdGhlIHBsYWNlaG9sZGVyLiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKipcbiAgICogUmVuZGVyIHRoZSBkcm9wZG93biBjYXJldCBiZXNpZGUgdGhlIGxhYmVsLiBPZmYgZm9yIGEgZGlzYWJsZWRcbiAgICogPEFjdGlvblNlbGVjdD4sIHdoaWNoIGlzIHN0YXRpYyB0ZXh0IHdpdGggbm8gbWVudSB0byBvcGVuLlxuICAgKi9cbiAgY2FyZXQ/OiBib29sZWFuO1xuICAvKipcbiAgICogRWxlbWVudCB0aGUgcm93IHJlbmRlcnMgYXMuIGBzcGFuYCB3aGVyZSB0aGUgdHJpZ2dlciBib3ggaXMgaXRzZWxmXG4gICAqIHBocmFzaW5nIGNvbnRlbnQg4oCUIGEgZGlzYWJsZWQgPEFjdGlvblNlbGVjdD4gcmVuZGVycyBpdHMgYm94IGFzIGFcbiAgICogPHNwYW4+LCB3aGljaCBtYXkgbm90IGNvbnRhaW4gYSA8ZGl2Pi5cbiAgICovXG4gIGFzPzogXCJkaXZcIiB8IFwic3BhblwiO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdFRyaWdnZXIocHJvcHM6IFNlbGVjdFRyaWdnZXJQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBsYWJlbCwgY2FyZXQgPSB0cnVlLCBhcyA9IFwiZGl2XCIgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxMYXlvdXRcbiAgICAgIGFzPXthc31cbiAgICAgIGlubGluZVxuICAgICAgLy8gV2l0aG91dCBhIGNhcmV0IHRoZSBzZWNvbmQgdHJhY2sgd291bGQgc3RpbGwgY29udHJpYnV0ZSBpdHMgZ2FwLFxuICAgICAgLy8gcGFkZGluZyB0aGUgdHJpZ2dlciBieSA4cHggaXQgZG9lcyBub3QgbmVlZC5cbiAgICAgIGNvbHVtbnM9e2NhcmV0ID8gXCIxZnIgYXV0b1wiIDogXCIxZnJcIn1cbiAgICAgIHsuLi4oY2FyZXQgPyB7IGdhcDogXCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIiB9IDoge30pfVxuICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICBtYXhJbmxpbmVTaXplPVwiMTAwJVwiXG4gICAgPlxuICAgICAgey8qIFRoZSAxZnIgdHJhY2sgYmxvY2tpZmllcyB0aGlzIHNwYW4sIHdoaWNoIGlzIHdoYXQgbGV0c1xuICAgICAgICAgIGB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpc2AgYXBwbHkgdG8gYSBsb25nIGxhYmVsLiAqL31cbiAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1widHJpZ2dlckxhYmVsXCJdfSBkYXRhLXBvbGx5LXNlbGVjdC1sYWJlbD5cbiAgICAgICAge2xhYmVsfVxuICAgICAgPC9zcGFuPlxuICAgICAge2NhcmV0ICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wiY2FyZXRcIl19IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+fVxuICAgIDwvTGF5b3V0PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEFjdGlvblNlbGVjdCDigJQgc2luZ2xlLXNlbGVjdCBkcm9wZG93biB0aGF0IGNvbW1pdHMgdmlhIHRoZSBhY3Rpb24gc3lzdGVtLlxuICpcbiAqIFRoZSBhY3Rpb24tZGlzcGF0Y2hpbmcgc2libGluZyBvZiA8U2VsZWN0Pi4gV2hlcmUgPFNlbGVjdD4gYmluZHMgYVxuICogYFNpZ25hbDxTZXQ8VD4+YCBhbmQgaXMgYnVpbHQgZm9yIGluLW1lbW9yeSBmaWx0ZXIgVUlzLCBBY3Rpb25TZWxlY3RcbiAqIHRha2VzIHRoZSBjdXJyZW50IGB2YWx1ZWAgYXMgYSBwbGFpbiBzdHJpbmcgYW5kIGZpcmVzIGBhY3Rpb25gIHdpdGhcbiAqIGBkYXRhLWFjdGlvbi12YWx1ZWAgc2V0IHRvIHRoZSBjaG9zZW4gb3B0aW9uIOKAlCBzbyBlZGl0aW5nIGFcbiAqIHNlcnZlci1iYWNrZWQgZmllbGQgY29tbWl0cyB0aHJvdWdoIHRoZSBzYW1lIGV2ZW50IGRlbGVnYXRpb24gYXNcbiAqIDxBY3Rpb25JbnB1dD4gYW5kIDxBY3Rpb25Gb3JtPiwgd2l0aCBubyBzeW50aGV0aWMgc2lnbmFsIG9yIGJyaWRnaW5nXG4gKiBgZWZmZWN0YCByZXF1aXJlZC5cbiAqXG4gKiBDb21wb3NlcyA8RHJvcGRvd24+IGZvciB0aGUgbWVudS4gVGhlIHRyaWdnZXIgc3R5bGluZyBpcyBhcHBsaWVkXG4gKiBkaXJlY3RseSB0byBEcm9wZG93bidzIG93biA8YnV0dG9uPiB2aWEgYHRyaWdnZXJDbGFzc05hbWVgLCBzbyB0aGVcbiAqIHZpc2libGUgYm94IGFuZCB0aGUgaW50ZXJhY3RpdmUgZWxlbWVudCBhcmUgb25lIGFuZCB0aGUgc2FtZSBub2RlIOKAlFxuICogbm8gc3R5bGVkIDxzcGFuPiBuZXN0ZWQgaW5zaWRlIGFuIHVuc3R5bGVkIDxidXR0b24+LiBBIGRpc2FibGVkXG4gKiBBY3Rpb25TZWxlY3QgcmVuZGVycyBhcyBzdGF0aWMgdGV4dCB3aXRob3V0IGEgY2FyZXQuXG4gKlxuICogQm90aCBicmFuY2hlcyByZW5kZXIgdGhlaXIgbGFiZWwvY2FyZXQgcm93IHRocm91Z2ggPFNlbGVjdFRyaWdnZXI+LFxuICogdGhlIHNhbWUgcm93IDxTZWxlY3Q+IHVzZXMg4oCUIGAudHJpZ2dlcmAgc3R5bGVzIHRoZSBib3ggYW5kIHN1cHBsaWVzXG4gKiBubyBsYXlvdXQsIHNvIHRoZSBjb21wb25lbnQgb3dlcyBpdCBvbmUgKHBvbGx5IzE4MCkuXG4gKi9cblxuaW1wb3J0IHsgdXNlU2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBEcm9wZG93biB9IGZyb20gXCIuL0Ryb3Bkb3duLnRzeFwiO1xuaW1wb3J0IHsgZGlzcGF0Y2hBY3Rpb24gfSBmcm9tIFwiLi9pbnRlcm5hbC9kaXNwYXRjaC1hY3Rpb24udHNcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcbmltcG9ydCB7IFNlbGVjdFRyaWdnZXIgfSBmcm9tIFwiLi9pbnRlcm5hbC9zZWxlY3QtdHJpZ2dlci50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1NlbGVjdC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdE9wdGlvbiB9IGZyb20gXCIuL1NlbGVjdC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uU2VsZWN0UHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICAvKiogQ3VycmVudCB2YWx1ZSDigJQgbWF0Y2hlZCBhZ2FpbnN0IGBvcHRpb25zYCB0byByZW5kZXIgdGhlIHRyaWdnZXIgbGFiZWwuICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBTZWxlY3RhYmxlIG9wdGlvbnMuICovXG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbjxzdHJpbmc+W107XG4gIC8qKiBBY3Rpb24gbmFtZSB0byBkaXNwYXRjaCBvbiBzZWxlY3Rpb24uIFJlY2VpdmVzIGRhdGEtYWN0aW9uLXZhbHVlPTxvcHRpb24gdmFsdWU+LiAqL1xuICBhY3Rpb246IHN0cmluZztcbiAgLyoqIEV4dHJhIGRhdGEtYWN0aW9uLSogYXR0cmlidXRlcyB0byBpbmNsdWRlIG9uIGNvbW1pdCAoZS5nLiBlbnRpdHkgaWQpLiAqL1xuICBhY3Rpb25EYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFZpc2libGUgZmllbGQgbGFiZWwgcmVuZGVyZWQgYWJvdmUgdGhlIHRyaWdnZXIuICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogVHJpZ2dlciB0ZXh0IHNob3duIHdoZW4gYHZhbHVlYCBtYXRjaGVzIG5vIG9wdGlvbi4gRGVmYXVsdDogXCJTZWxlY3TigKZcIi4gKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEFwcGx5IGEgY29tZm9ydGFibGUgbWluaW11bSB3aWR0aCB0byB0aGUgdHJpZ2dlci4gRGVmYXVsdDogc2l6ZXMgdG8gY29udGVudC4gKi9cbiAgd2lkZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBsYWJlbEZvcihvcHRpb25zOiBTZWxlY3RPcHRpb248c3RyaW5nPltdLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGlmIChvcHQudmFsdWUgPT09IHZhbHVlKSByZXR1cm4gb3B0LmxhYmVsO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25TZWxlY3QocHJvcHM6IEFjdGlvblNlbGVjdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgdmFsdWUsXG4gICAgb3B0aW9ucyxcbiAgICBhY3Rpb24sXG4gICAgYWN0aW9uRGF0YSxcbiAgICBsYWJlbCxcbiAgICBwbGFjZWhvbGRlciA9IFwiU2VsZWN04oCmXCIsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICB3aWRlID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaXNPcGVuID0gdXNlU2lnbmFsKGZhbHNlKTtcblxuICBjb25zdCBjdXJyZW50ID0gbGFiZWxGb3Iob3B0aW9ucywgdmFsdWUpO1xuICBjb25zdCBpc0VtcHR5ID0gY3VycmVudCA9PT0gdW5kZWZpbmVkO1xuICBjb25zdCBkaXNwbGF5VGV4dCA9IGN1cnJlbnQgPz8gcGxhY2Vob2xkZXI7XG5cbiAgY29uc3QgY29tbWl0ID0gKG5leHQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIGlmIChuZXh0ID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgIGRpc3BhdGNoQWN0aW9uKGFjdGlvbiwgeyAuLi4oYWN0aW9uRGF0YSA/PyB7fSksIHZhbHVlOiBuZXh0IH0pO1xuICB9O1xuXG4gIGNvbnN0IHRyaWdnZXJQYXJ0cyA9IFtjbGFzc2VzW1widHJpZ2dlclwiXSA/PyBcIlwiXTtcbiAgaWYgKGlzRW1wdHkpIHRyaWdnZXJQYXJ0cy5wdXNoKGNsYXNzZXNbXCJwbGFjZWhvbGRlclwiXSA/PyBcIlwiKTtcbiAgaWYgKHdpZGUpIHRyaWdnZXJQYXJ0cy5wdXNoKGNsYXNzZXNbXCJ0cmlnZ2VyV2lkZVwiXSA/PyBcIlwiKTtcbiAgY29uc3QgdHJpZ2dlckNsYXNzID0gdHJpZ2dlclBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wic2VsZWN0XCJdID8/IFwiXCJdO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKX1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWFjdGlvbi1zZWxlY3RcbiAgICAgIGRhdGEtc3RhdGU9e2lzRW1wdHkgPyBcImVtcHR5XCIgOiBcImZpbGxlZFwifVxuICAgID5cbiAgICAgIHtsYWJlbCAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibGFiZWxcIl19PntsYWJlbH08L3NwYW4+fVxuICAgICAge2Rpc2FibGVkID8gKFxuICAgICAgICA8c3BhbiBjbGFzcz17dHJpZ2dlckNsYXNzfSBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiIHRpdGxlPXtkaXNwbGF5VGV4dH0+XG4gICAgICAgICAgPFNlbGVjdFRyaWdnZXIgYXM9XCJzcGFuXCIgY2FyZXQ9e2ZhbHNlfSBsYWJlbD17ZGlzcGxheVRleHR9IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICkgOiAoXG4gICAgICAgIDxEcm9wZG93blxuICAgICAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgICAgIHRyaWdnZXJDbGFzc05hbWU9e3RyaWdnZXJDbGFzc31cbiAgICAgICAgICB0cmlnZ2VyVGl0bGU9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgIHRyaWdnZXI9ezxTZWxlY3RUcmlnZ2VyIGxhYmVsPXtkaXNwbGF5VGV4dH0gLz59XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IG9wdC52YWx1ZSA9PT0gdmFsdWU7XG4gICAgICAgICAgICBjb25zdCBvcHRDbGFzcyA9IGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgPyBgJHtjbGFzc2VzW1wib3B0aW9uXCJdfSAke2NsYXNzZXNbXCJvcHRpb25TZWxlY3RlZFwiXX1gXG4gICAgICAgICAgICAgIDogY2xhc3Nlc1tcIm9wdGlvblwiXTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e29wdC52YWx1ZX1cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz17b3B0Q2xhc3N9XG4gICAgICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD17aXNTZWxlY3RlZCA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNvbW1pdChvcHQudmFsdWUpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e29wdC5sYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9Ecm9wZG93bj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogQmFkZ2Ug4oCUIHNtYWxsIGlubGluZSBzdGF0dXMgY2hpcC5cbiAqXG4gKiBSZW5kZXJzIGFzIGEgcGFzc2l2ZSA8c3Bhbj4gd2l0aCB0aW50ZWQgYmFja2dyb3VuZCBhbmQgb24tdGludCB0ZXh0XG4gKiBmcm9tIHRoZSBgLS1wb2xseS1zdGF0dXMtKmAgdG9rZW4gZmFtaWx5LiBUaGUgZGVmYXVsdCB2YXJpYW50IHVzZXNcbiAqIHN1cmZhY2Utc3Vua2VuICsgbXV0ZWQgdGV4dCBmb3IgYSBuZXV0cmFsIHBpbGwuIENvbnN1bWVycyBzdHlsZVxuICogcGxhY2VtZW50IHZpYSBjbGFzc05hbWU7IHRoZSBwcmltaXRpdmUgb3ducyBzaXplLCBzaGFwZSwgYW5kIGNvbG91ci5cbiAqXG4gKiBBIGJhZGdlIGlzIG9mdGVuIGFuIGFiYnJldmlhdGVkIG9yIGljb25pYyBzdGF0dXMgKFwiM1wiLCBcIuKXj1wiKTsgcGFzc1xuICogYHRpdGxlYCB0byBhdHRhY2ggYW4gZXhwbGFuYXRvcnkgaG92ZXIgdG9vbHRpcCAoXCIzIHBlZXJzIGNvbm5lY3RlZFwiKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9CYWRnZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEJhZGdlVmFyaWFudCA9IFwiZGVmYXVsdFwiIHwgXCJpbmZvXCIgfCBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiIHwgXCJkYW5nZXJcIjtcblxuZXhwb3J0IHR5cGUgQmFkZ2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICB2YXJpYW50PzogQmFkZ2VWYXJpYW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICAvKiogTmF0aXZlIGhvdmVyIHRvb2x0aXAg4oCUIGV4cGxhaW5zIGFuIGFiYnJldmlhdGVkIG9yIGljb25pYyBiYWRnZS4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiB2YXJpYW50Q2xhc3ModmFyaWFudDogQmFkZ2VWYXJpYW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhcmlhbnQgPT09IFwiaW5mb1wiKSByZXR1cm4gY2xhc3Nlc1tcImluZm9cIl07XG4gIGlmICh2YXJpYW50ID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIGNsYXNzZXNbXCJzdWNjZXNzXCJdO1xuICBpZiAodmFyaWFudCA9PT0gXCJ3YXJuaW5nXCIpIHJldHVybiBjbGFzc2VzW1wid2FybmluZ1wiXTtcbiAgaWYgKHZhcmlhbnQgPT09IFwiZGFuZ2VyXCIpIHJldHVybiBjbGFzc2VzW1wiZGFuZ2VyXCJdO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQmFkZ2UocHJvcHM6IEJhZGdlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIHZhcmlhbnQgPSBcImRlZmF1bHRcIiwgY2xhc3NOYW1lLCBpZCwgdGl0bGUgfSA9IHByb3BzO1xuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiYmFkZ2VcIl1dO1xuICBjb25zdCB2ID0gdmFyaWFudENsYXNzKHZhcmlhbnQpO1xuICBpZiAodikgcGFydHMucHVzaCh2KTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxzcGFuIGlkPXtpZH0gdGl0bGU9e3RpdGxlfSBjbGFzcz17cGFydHMuam9pbihcIiBcIil9IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1iYWRnZT17dmFyaWFudH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9zcGFuPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEJ1dHRvbiDigJQgaW50ZXJhY3RpdmUgY29udHJvbCB3aXRoIHRpZXIsIHNlbWFudGljIGNvbG91ciwgYW5kIHNpemUuXG4gKlxuICogUmVuZGVycyBhcyBhIDxidXR0b24+IGJ5IGRlZmF1bHQ7IHN3aXRjaGVzIHRvIGFuIDxhPiB3aGVuIGdpdmVuIGFuXG4gKiBgaHJlZmAuIFRpZXIgc2V0cyB2aXN1YWwgaW1wb3J0YW5jZSAocHJpbWFyeS9zZWNvbmRhcnkvdGVydGlhcnkpLFxuICogY29sb3Igb3ZlcmxheXMgc2VtYW50aWMgbWVhbmluZyAoaW5mby9zdWNjZXNzL3dhcm5pbmcvZGFuZ2VyKSxcbiAqIHNpemUgcGlja3MgdGhlIGhlaWdodCArIHBhZGRpbmcgKyBmb250IHNjYWxlIChzbWFsbC9ub3JtYWwvbGFyZ2UpLlxuICogVGhlIGJ1dHRvbiBpcyBhIGZsZXggY29udGFpbmVyLCBzbyBhbiBpY29uIGFuZCBhIGxhYmVsIGFyZSBpdHMgb3duXG4gKiBjaGlsZHJlbiB3aXRoIGEgYGdhcGAgYmV0d2VlbiB0aGVtLlxuICpcbiAqIEhlaWdodCBjb21lcyBmcm9tIC0tcG9sbHktY29udHJvbC1oZWlnaHQtKiwgbmV2ZXIgZnJvbSBwYWRkaW5nLCBzbyBhXG4gKiBCdXR0b24gaXMgZXhhY3RseSBhcyB0YWxsIGFzIGEgVGV4dElucHV0IG9yIGEgU2VsZWN0IGluIHRoZSBzYW1lIHJvdy5cbiAqXG4gKiBBIHRleHQgYGxhYmVsYCBpcyB0aGUgYWNjZXNzaWJsZSBuYW1lLiBBbiBpY29uLW9ubHkgYnV0dG9uIChpY29uLCBub1xuICogbGFiZWwpIGhhcyBub25lLCBzbyB0aGUgdHlwZSBSRVFVSVJFUyBgYXJpYS1sYWJlbGAgdGhlcmUg4oCUIGFuIHVubmFtZWRcbiAqIGljb24gYnV0dG9uIHdvbid0IGNvbXBpbGUuIE5vIGJ1aWxkLXRpbWUgbGludCBuZWVkZWQ7IHRoZSBjYWxsIHNpdGVcbiAqIGl0c2VsZiBpcyB0aGUgZ2F0ZS5cbiAqXG4gKiBBY3Rpb24gd2lyaW5nIGlzIGRlY2xhcmVkIHZpYSBkYXRhLSogYXR0cmlidXRlcyBjb25zdW1lZCBieSB0aGVcbiAqIGdsb2JhbCBldmVudCBkZWxlZ2F0b3IgaW4gQGZhaXJmb3gvcG9sbHkvYWN0aW9ucyDigJQgQnV0dG9uIGRvZXMgbm90XG4gKiBhY2NlcHQgYW4gb25DbGljayBwcm9wLlxuICpcbiAqIEV2ZXJ5IGJ1dHRvbiBzdXJmYWNlcyBhIG5hdGl2ZSBob3ZlciB0b29sdGlwOiBhbiBleHBsaWNpdCBgdGl0bGVgXG4gKiB3aW5zLCBlbHNlIHRoZSB2aXNpYmxlIHRleHQgbGFiZWwsIGVsc2UgdGhlIGBhcmlhLWxhYmVsYCAoc28gYW5cbiAqIGljb24tb25seSBidXR0b24gc3RpbGwgZ2V0cyBvbmUpLiBQYXNzIGB0aXRsZT1cIlwiYCB0byBzdXBwcmVzcyBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1gsIFZOb2RlIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQnV0dG9uVGllciA9IFwicHJpbWFyeVwiIHwgXCJzZWNvbmRhcnlcIiB8IFwidGVydGlhcnlcIjtcbmV4cG9ydCB0eXBlIEJ1dHRvbkNvbG9yID0gXCJkZWZhdWx0XCIgfCBcImluZm9cIiB8IFwic3VjY2Vzc1wiIHwgXCJ3YXJuaW5nXCIgfCBcImRhbmdlclwiO1xuZXhwb3J0IHR5cGUgQnV0dG9uU2l6ZSA9IFwic21hbGxcIiB8IFwibm9ybWFsXCIgfCBcImxhcmdlXCI7XG5cbnR5cGUgQmFzZUJ1dHRvblByb3BzID0ge1xuICBpZD86IHN0cmluZztcbiAgdGllcj86IEJ1dHRvblRpZXI7XG4gIGNvbG9yPzogQnV0dG9uQ29sb3I7XG4gIHNpemU/OiBCdXR0b25TaXplO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGZ1bGxXaWR0aD86IGJvb2xlYW47XG4gIGNpcmNsZT86IGJvb2xlYW47XG4gIC8qKiBDYXAgdGhlIGJ1dHRvbiB3aWR0aCBhdCBgLS1wb2xseS1jb250cm9sLW1heC13aWR0aGAgYW5kIGVsbGlwc2lzLVxuICAgKiB0cnVuY2F0ZSB0aGUgbGFiZWwuIFVzZSBmb3IgdXNlci1zdXBwbGllZCBvciBvdGhlcndpc2UgdW5ib3VuZGVkXG4gICAqIGxhYmVscyBzbyBhIGxvbmcgc3RyaW5nIGRvZXNuJ3QgYmxvdyBvdXQgdGhlIHJvdy4gKi9cbiAgYm91bmRlZD86IGJvb2xlYW47XG4gIC8qKiBQdWxsIHRoZSBib3ggb3V0IGJ5IGl0cyBvd24gaW5saW5lIHBhZGRpbmcgc28gdGhlIExBQkVMIHNpdHMgb24gdGhlXG4gICAqIHRleHQgZWRnZSByYXRoZXIgdGhhbiB0aGUgYm94IGVkZ2UuIEZvciBhIGB0ZXJ0aWFyeWAgYnV0dG9uIGluIGEgdGV4dFxuICAgKiBjb2x1bW4sIHdoZXJlIHRoZSBpbnZpc2libGUgcGFkZGluZyBvdGhlcndpc2UgcmVhZHMgYXMgYW4gaW5kZW50XG4gICAqIGFnYWluc3QgdGhlIGNvcHkgYmVzaWRlIGl0LiBBIGJvcmRlcmVkIGJ1dHRvbiBzaG91bGQga2VlcCBpdHMgZGVmYXVsdFxuICAgKiBib3ggYWxpZ25tZW50IOKAlCB0aGUgYm9yZGVyIGlzIHdoYXQgbWFrZXMgdGhhdCBlZGdlIGxlZ2libGUuIFRoZSBoaXRcbiAgICogdGFyZ2V0IGlzIHVuY2hhbmdlZDsgb25seSB0aGUgYm94J3MgcG9zaXRpb24gaW4gdGhlIGxheW91dCBtb3Zlcy4gKi9cbiAgZmx1c2g/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBcImRhdGEtYWN0aW9uXCI/OiBzdHJpbmc7XG4gIC8qKiBBZGRpdGlvbmFsIGFjdGlvbi1wYXlsb2FkIGF0dHJpYnV0ZXMgdGhlIGV2ZW50IGRlbGVnYXRvciBwYXJzZXNcbiAgICogaW50byBgY3R4LmRhdGFgLiBgZGF0YS1hY3Rpb24tdGlkPVwidC0xN1wiYCBiZWNvbWVzIGB7IHRpZDogXCJ0LTE3XCIgfWAsXG4gICAqIGBkYXRhLWFjdGlvbi1pdGVtLWlkPVwi4oCmXCJgIGJlY29tZXMgYHsgaXRlbUlkOiBcIuKAplwiIH1gLCBhbmQgc28gb24uXG4gICAqIFR5cGVkIGFzIGFuIGluZGV4IHNpZ25hdHVyZSBzbyBldmVyeSBgZGF0YS1hY3Rpb24tKmAga2V5IHRoZVxuICAgKiBjb25zdW1lciBjYXJlcyBhYm91dCB0eXBlLWNoZWNrcyB3aXRob3V0IGEgQnV0dG9uLXNpZGUgZW51bWVyYXRpb24uICovXG4gIFthY3Rpb25EYXRhQXR0cjogYGRhdGEtYWN0aW9uLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIENvbnRlbnQvYWNjZXNzaWJpbGl0eSBkaW1lbnNpb24uIEEgdmlzaWJsZSB0ZXh0IGBsYWJlbGAgaXMgdGhlXG4gKiBhY2Nlc3NpYmxlIG5hbWUsIHNvIGl0IG1ha2VzIGBhcmlhLWxhYmVsYCBvcHRpb25hbC4gQW4gaWNvbi1vbmx5XG4gKiBidXR0b24gaGFzIG5vIHRleHQgdG8gbmFtZSBpdCwgc28gYGFyaWEtbGFiZWxgIGlzIFJFUVVJUkVEIOKAlCB5b3VcbiAqIGNhbm5vdCBjb25zdHJ1Y3QgYW4gdW5uYW1lZCBpY29uIGJ1dHRvbi4gKEJ1dHRvbidzIGhvdmVyIHRpdGxlIHRoZW5cbiAqIGZhbGxzIGJhY2sgdG8gdGhhdCBhcmlhLWxhYmVsLCBzbyB0aGUgc2FtZSBwcm9wIGdpdmVzIGJvdGggdGhlXG4gKiBhY2Nlc3NpYmxlIG5hbWUgYW5kIHRoZSB0b29sdGlwLilcbiAqL1xudHlwZSBMYWJlbGxlZENvbnRlbnQgPSB7XG4gIGxhYmVsOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgaWNvbj86IFZOb2RlO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbn07XG50eXBlIEljb25Pbmx5Q29udGVudCA9IHtcbiAgaWNvbjogVk5vZGU7XG4gIGxhYmVsPzogbmV2ZXI7XG4gIFwiYXJpYS1sYWJlbFwiOiBzdHJpbmc7XG59O1xudHlwZSBCdXR0b25Db250ZW50ID0gTGFiZWxsZWRDb250ZW50IHwgSWNvbk9ubHlDb250ZW50O1xuXG50eXBlIEJ1dHRvbkVsZW1lbnQgPSB7XG4gIGhyZWY/OiBuZXZlcjtcbiAgdGFyZ2V0PzogbmV2ZXI7XG4gIHJlbD86IG5ldmVyO1xuICBkb3dubG9hZD86IG5ldmVyO1xuICB0eXBlPzogXCJidXR0b25cIiB8IFwic3VibWl0XCIgfCBcInJlc2V0XCI7XG59O1xuXG50eXBlIExpbmtFbGVtZW50ID0ge1xuICBocmVmOiBzdHJpbmc7XG4gIHRhcmdldD86IHN0cmluZztcbiAgcmVsPzogc3RyaW5nO1xuICAvKiogRm9yd2FyZGVkIHRvIHRoZSByZW5kZXJlZCA8YT4gc28gYSBCdXR0b24tYXMtbGluayBjYW4gb2ZmZXIgYSBmaWxlXG4gICAqIGRvd25sb2FkLiBBbiBlbXB0eSBzdHJpbmcgdXNlcyB0aGUgcmVzb3VyY2UncyBvd24gZmlsZW5hbWUuICovXG4gIGRvd25sb2FkPzogc3RyaW5nO1xuICB0eXBlPzogbmV2ZXI7XG59O1xuXG5leHBvcnQgdHlwZSBCdXR0b25Qcm9wcyA9IEJhc2VCdXR0b25Qcm9wcyAmIEJ1dHRvbkNvbnRlbnQgJiAoQnV0dG9uRWxlbWVudCB8IExpbmtFbGVtZW50KTtcblxuZnVuY3Rpb24gdGllckNsYXNzKHRpZXI6IEJ1dHRvblRpZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodGllciA9PT0gXCJwcmltYXJ5XCIpIHJldHVybiBjbGFzc2VzW1widGllclByaW1hcnlcIl07XG4gIGlmICh0aWVyID09PSBcInRlcnRpYXJ5XCIpIHJldHVybiBjbGFzc2VzW1widGllclRlcnRpYXJ5XCJdO1xuICByZXR1cm4gY2xhc3Nlc1tcInRpZXJTZWNvbmRhcnlcIl07XG59XG5cbmZ1bmN0aW9uIGNvbG9yQ2xhc3MoY29sb3I6IEJ1dHRvbkNvbG9yKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGNvbG9yID09PSBcImluZm9cIikgcmV0dXJuIGNsYXNzZXNbXCJjb2xvckluZm9cIl07XG4gIGlmIChjb2xvciA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBjbGFzc2VzW1wiY29sb3JTdWNjZXNzXCJdO1xuICBpZiAoY29sb3IgPT09IFwid2FybmluZ1wiKSByZXR1cm4gY2xhc3Nlc1tcImNvbG9yV2FybmluZ1wiXTtcbiAgaWYgKGNvbG9yID09PSBcImRhbmdlclwiKSByZXR1cm4gY2xhc3Nlc1tcImNvbG9yRGFuZ2VyXCJdO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBzaXplQ2xhc3Moc2l6ZTogQnV0dG9uU2l6ZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChzaXplID09PSBcInNtYWxsXCIpIHJldHVybiBjbGFzc2VzW1wiYnRuU21hbGxcIl07XG4gIGlmIChzaXplID09PSBcImxhcmdlXCIpIHJldHVybiBjbGFzc2VzW1wiYnRuTGFyZ2VcIl07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBmbGF0IHByb3AtdG8tY2xhc3MgY29tcG9zaXRpb24gcGx1cyBvbmUgYW5jaG9yL2J1dHRvbiBicmFuY2g7IHNwbGl0dGluZyB3b3VsZCBqdXN0IGhpZGUgdGhlIG1hcHBpbmcuXG5leHBvcnQgZnVuY3Rpb24gQnV0dG9uKHByb3BzOiBCdXR0b25Qcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHRpZXIgPSBcInNlY29uZGFyeVwiLFxuICAgIGNvbG9yID0gXCJkZWZhdWx0XCIsXG4gICAgc2l6ZSA9IFwibm9ybWFsXCIsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICBjaXJjbGUgPSBmYWxzZSxcbiAgICBib3VuZGVkID0gZmFsc2UsXG4gICAgZmx1c2ggPSBmYWxzZSxcbiAgICBjbGFzc05hbWUsXG4gICAgdGl0bGUsXG4gICAgaWNvbixcbiAgICBsYWJlbCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJidG5cIl0gPz8gXCJcIl07XG4gIGNvbnN0IHRjID0gdGllckNsYXNzKHRpZXIpO1xuICBpZiAodGMpIHBhcnRzLnB1c2godGMpO1xuICBjb25zdCBjYyA9IGNvbG9yQ2xhc3MoY29sb3IpO1xuICBpZiAoY2MpIHBhcnRzLnB1c2goY2MpO1xuICBjb25zdCBzYyA9IHNpemVDbGFzcyhzaXplKTtcbiAgaWYgKHNjKSBwYXJ0cy5wdXNoKHNjKTtcbiAgaWYgKGNpcmNsZSkgcGFydHMucHVzaChjbGFzc2VzW1wiYnRuQ2lyY2xlXCJdID8/IFwiXCIpO1xuICBpZiAoZnVsbFdpZHRoKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJidG5GdWxsV2lkdGhcIl0gPz8gXCJcIik7XG4gIGlmIChib3VuZGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJidG5Cb3VuZGVkXCJdID8/IFwiXCIpO1xuICBpZiAoZmx1c2gpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImJ0bkZsdXNoXCJdID8/IFwiXCIpO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG4gIGNvbnN0IGJ1dHRvbkNsYXNzID0gcGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuXG4gIC8vIEFuIGljb24gYmVzaWRlIGEgbGFiZWwgaXMgYW4gYXJyYW5nZW1lbnQsIHNvIGl0IGdvZXMgdGhyb3VnaCA8TGF5b3V0Pi5cbiAgLy8gQSBsYWJlbCBvbiBpdHMgb3duIGlzIG5vdDogaXQgaXMgb25lIGlubGluZSBjaGlsZCB0aGF0IHRoZSBidXR0b24nc1xuICAvLyBhbGlnbi1jb250ZW50IGFuZCB0ZXh0LWFsaWduIGNlbnRyZSwgd2l0aCBubyBjb250YWluZXIgYXQgYWxsLlxuICBjb25zdCBjb250ZW50ID1cbiAgICBpY29uID09PSB1bmRlZmluZWQgPyAoXG4gICAgICBsYWJlbFxuICAgICkgOiAoXG4gICAgICA8TGF5b3V0IGlubGluZSBjb2x1bW5zPVwiYXV0byBhdXRvXCIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCIgYWxpZ25JdGVtcz1cImNlbnRlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImljb25cIl19PntpY29ufTwvc3Bhbj5cbiAgICAgICAge2xhYmVsICE9PSB1bmRlZmluZWQgJiYgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJsYWJlbFwiXX0+e2xhYmVsfTwvc3Bhbj59XG4gICAgICA8L0xheW91dD5cbiAgICApO1xuXG4gIGNvbnN0IGRhdGFBY3Rpb24gPSBwcm9wc1tcImRhdGEtYWN0aW9uXCJdO1xuICBjb25zdCBhcmlhTGFiZWwgPSBwcm9wc1tcImFyaWEtbGFiZWxcIl07XG4gIC8vIEV2ZXJ5IGJ1dHRvbiBzdXJmYWNlcyBhIGhvdmVyIHRvb2x0aXA6IGFuIGV4cGxpY2l0IHRpdGxlIHdpbnMsIGVsc2UgdGhlXG4gIC8vIHZpc2libGUgdGV4dCBsYWJlbCwgZWxzZSB0aGUgYWNjZXNzaWJsZSBuYW1lIOKAlCBzbyBhbiBpY29uLW9ubHkgYnV0dG9uXG4gIC8vICh3aGljaCBjYXJyaWVzIGFuIGFyaWEtbGFiZWwpIHN0aWxsIGdldHMgb25lLiBQYXNzIHRpdGxlPVwiXCIgdG8gb3B0IG91dC5cbiAgY29uc3QgcmVzb2x2ZWRUaXRsZSA9XG4gICAgdGl0bGUgPz9cbiAgICAodHlwZW9mIGxhYmVsID09PSBcInN0cmluZ1wiICYmIGxhYmVsLmxlbmd0aCA+IDBcbiAgICAgID8gbGFiZWxcbiAgICAgIDogdHlwZW9mIGFyaWFMYWJlbCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IGFyaWFMYWJlbFxuICAgICAgICA6IHVuZGVmaW5lZCk7XG4gIC8vIENvbGxlY3QgZXZlcnkgYGRhdGEtYWN0aW9uLSpgIGV4dHJhIHRoZSBjb25zdW1lciBwYXNzZWQgc28gdGhlXG4gIC8vIGV2ZW50IGRlbGVnYXRvciBjYW4gcmVhZCB0aGVtIG9mZiB0aGUgcmVuZGVyZWQgZWxlbWVudC4gV2l0aG91dFxuICAvLyB0aGlzLCBhbnl0aGluZyBiZXlvbmQgYGRhdGEtYWN0aW9uYCBpcyBzaWxlbnRseSBkcm9wcGVkIGFuZFxuICAvLyBoYW5kbGVycyBmaXJlIHdpdGggYW4gZW1wdHkgYGN0eC5kYXRhYC5cbiAgY29uc3QgYWN0aW9uRGF0YUF0dHJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb3BzKSkge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aChcImRhdGEtYWN0aW9uLVwiKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSAocHJvcHMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgYWN0aW9uRGF0YUF0dHJzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoXCJocmVmXCIgaW4gcHJvcHMgJiYgcHJvcHMuaHJlZikge1xuICAgIHJldHVybiAoXG4gICAgICA8YVxuICAgICAgICBpZD17aWR9XG4gICAgICAgIGNsYXNzPXtidXR0b25DbGFzc31cbiAgICAgICAgdGl0bGU9e3Jlc29sdmVkVGl0bGV9XG4gICAgICAgIGhyZWY9e2Rpc2FibGVkID8gdW5kZWZpbmVkIDogcHJvcHMuaHJlZn1cbiAgICAgICAgdGFyZ2V0PXtcInRhcmdldFwiIGluIHByb3BzID8gcHJvcHMudGFyZ2V0IDogdW5kZWZpbmVkfVxuICAgICAgICByZWw9e1wicmVsXCIgaW4gcHJvcHMgPyBwcm9wcy5yZWwgOiB1bmRlZmluZWR9XG4gICAgICAgIGRvd25sb2FkPXtcImRvd25sb2FkXCIgaW4gcHJvcHMgPyBwcm9wcy5kb3dubG9hZCA6IHVuZGVmaW5lZH1cbiAgICAgICAgYXJpYS1kaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LWJ1dHRvbj17dGllcn1cbiAgICAgICAgZGF0YS1hY3Rpb249e2RhdGFBY3Rpb259XG4gICAgICAgIHsuLi5hY3Rpb25EYXRhQXR0cnN9XG4gICAgICA+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9hPlxuICAgICk7XG4gIH1cblxuICBjb25zdCByZXNvbHZlZFR5cGU6IFwiYnV0dG9uXCIgfCBcInN1Ym1pdFwiIHwgXCJyZXNldFwiID1cbiAgICBcInR5cGVcIiBpbiBwcm9wcyAmJiBwcm9wcy50eXBlID8gcHJvcHMudHlwZSA6IFwiYnV0dG9uXCI7XG5cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17YnV0dG9uQ2xhc3N9XG4gICAgICB0aXRsZT17cmVzb2x2ZWRUaXRsZX1cbiAgICAgIHR5cGU9e3Jlc29sdmVkVHlwZX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktYnV0dG9uPXt0aWVyfVxuICAgICAgZGF0YS1hY3Rpb249e2RhdGFBY3Rpb259XG4gICAgICB7Li4uYWN0aW9uRGF0YUF0dHJzfVxuICAgID5cbiAgICAgIHtjb250ZW50fVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFN1cmZhY2Ug4oCUIHRoZSBvbmUgcHJpbWl0aXZlIHRoYXQgb3ducyB2aXN1YWwtc3VyZmFjZSBjb25jZXJucy5cbiAqXG4gKiBXaGVyZSBMYXlvdXQgZ292ZXJucyBzcGF0aWFsIGNvbmNlcm5zIChncmlkLCBmbGV4LCBnYXAsIGFsaWdubWVudCksXG4gKiBTdXJmYWNlIGdvdmVybnMgdGhlIGNocm9tZSB0aGF0IHNpdHMgb24gdG9wIG9mIGxheW91dDogcGFkZGluZyxcbiAqIGJhY2tncm91bmQsIGJvcmRlciwgcmFkaXVzLCBzaGFkb3csIGFuZCB0aGUgbmFycm93IHBvc2l0aW9uaW5nIGlkaW9tc1xuICogKHN0aWNreSBzdHJpcHMsIGZpeGVkIGZsb2F0aW5nIHBhbmVzKSB0aGF0IGNvbnN1bWVycyByZWFjaCBmb3IgaW5saW5lXG4gKiBzdHlsZXMgdG8gZXhwcmVzcy4gRXZlcnkgcHJvcCBtYXBzIHRvIGEgYC0tcG9sbHktKmAgdG9rZW4gdGhyb3VnaCBhXG4gKiBsb2NhbCBgLS1zLSpgIGN1c3RvbSBwcm9wZXJ0eSwgc28gY29uc3VtZXJzIGNhbiByZXRoZW1lIGFuIGluZGl2aWR1YWxcbiAqIFN1cmZhY2UgYnkgb3ZlcnJpZGluZyB0aGUgcG9sbHkgdG9rZW4gaW4gYHN0eWxlYCB3aXRob3V0IHRvdWNoaW5nIHRoZVxuICogcHJpbWl0aXZlJ3MgQ1NTLlxuICovXG5cbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vU3VyZmFjZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFN1cmZhY2VWYXJpYW50ID1cbiAgfCBcInBsYWluXCJcbiAgfCBcInJhaXNlZFwiXG4gIHwgXCJzdW5rZW5cIlxuICB8IFwiYnViYmxlXCJcbiAgfCBcImNoaXBcIlxuICB8IFwiY2FsbG91dFwiXG4gIHwgXCJmbG9hdGluZ1wiXG4gIHwgXCJzdGlja3ktYmFyXCI7XG5cbnR5cGUgQmFja2dyb3VuZCA9IFwicmFpc2VkXCIgfCBcInN1bmtlblwiIHwgXCJ0cmFuc3BhcmVudFwiIHwgKHN0cmluZyAmIHt9KTtcbnR5cGUgUmFkaXVzID0gXCJub25lXCIgfCBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgfCBcImZ1bGxcIjtcbnR5cGUgQm9yZGVyID0gXCJub25lXCIgfCBcImRlZmF1bHRcIiB8IFwic3Ryb25nXCI7XG50eXBlIEJvcmRlcldpZHRoID0gXCJub25lXCIgfCBcImRlZmF1bHRcIiB8IFwibWVkaXVtXCIgfCBcInRoaWNrXCI7XG50eXBlIEJvcmRlclNpZGVzID1cbiAgfCBcImFsbFwiXG4gIHwgXCJibG9jay1zdGFydFwiXG4gIHwgXCJibG9jay1lbmRcIlxuICB8IFwiaW5saW5lLXN0YXJ0XCJcbiAgfCBcImlubGluZS1lbmRcIlxuICB8IFwiYmxvY2tcIlxuICB8IFwiaW5saW5lXCI7XG50eXBlIFNoYWRvdyA9IFwibm9uZVwiIHwgXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiO1xudHlwZSBQb3NpdGlvbiA9IFwic3RhdGljXCIgfCBcInJlbGF0aXZlXCIgfCBcImFic29sdXRlXCIgfCBcInN0aWNreVwiIHwgXCJmaXhlZFwiO1xudHlwZSBCb3JkZXJTdHlsZSA9IFwic29saWRcIiB8IFwiZGFzaGVkXCI7XG50eXBlIE92ZXJmbG93ID0gXCJ2aXNpYmxlXCIgfCBcImhpZGRlblwiIHwgXCJhdXRvXCIgfCBcInNjcm9sbFwiO1xudHlwZSBTY2hlbWUgPSBcImRhcmtcIiB8IFwibGlnaHRcIjtcblxuLyoqXG4gKiBBcmJpdHJhcnkgYGRhdGEtKmAsIGBhcmlhLSpgLCBhbmQgYHRpdGxlYCBhdHRyaWJ1dGVzIGZvcndhcmRlZCB0byB0aGVcbiAqIHJlbmRlcmVkIGVsZW1lbnQgc28gY29uc3VtZXJzIChNb2RhbCwgVG9hc3QsIENhcmQsIGV0Yy4pIGNhbiBjb21wb3NlXG4gKiBTdXJmYWNlIHdpdGhvdXQgbG9zaW5nIERPTSBob29rcywgQVJJQSBzZW1hbnRpY3MsIG9yIGEgbmF0aXZlIHRvb2x0aXAuXG4gKi9cbmV4cG9ydCB0eXBlIFN1cmZhY2VEYXRhQXR0cnMgPSB7XG4gIFtkYXRhQXR0cjogYGRhdGEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIFthcmlhQXR0cjogYGFyaWEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHRpdGxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU3VyZmFjZVByb3BzID0gU3VyZmFjZURhdGFBdHRycyAmIHtcbiAgY2hpbGRyZW4/OiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoZGl2LCBzZWN0aW9uLCBhcnRpY2xlLCBhc2lkZSwgaGVhZGVyLCDigKYpLiBEZWZhdWx0cyB0byAnZGl2Jy4gKi9cbiAgYXM/OiBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM7XG5cbiAgLyoqIE5hbWVkIHByZXNldCB0aGF0IHJlc29sdmVzIHRvIGEgZGVmYXVsdCBidW5kbGUgb2YgdGhlIHByb3BzIGJlbG93LiBFeHBsaWNpdCBwcm9wcyBvdmVycmlkZS4gKi9cbiAgdmFyaWFudD86IFN1cmZhY2VWYXJpYW50O1xuXG4gIC8qKiBBbnkgQ1NTIGxlbmd0aCwgdHlwaWNhbGx5IGB2YXIoLS1wb2xseS1zcGFjZS0qKWAuICovXG4gIHBhZGRpbmc/OiBzdHJpbmc7XG5cbiAgLyoqIE5hbWVkIHZhbHVlcyBtYXAgdG8gYHZhcigtLXBvbGx5LXN1cmZhY2UtKilgOyByYXcgc3RyaW5ncyBwYXNzIHRocm91Z2ggZm9yIG9uZS1vZmYgY29sb3Vycy4gKi9cbiAgYmFja2dyb3VuZD86IEJhY2tncm91bmQ7XG5cbiAgcmFkaXVzPzogUmFkaXVzO1xuICBib3JkZXI/OiBCb3JkZXI7XG4gIGJvcmRlcldpZHRoPzogQm9yZGVyV2lkdGg7XG4gIGJvcmRlclNpZGVzPzogQm9yZGVyU2lkZXM7XG4gIC8qKiBCb3JkZXIgbGluZSBzdHlsZS4gRGVmYXVsdDogYCdzb2xpZCdgLiAqL1xuICBib3JkZXJTdHlsZT86IEJvcmRlclN0eWxlO1xuICAvKiogQW55IENTUyBjb2xvdXIsIG92ZXJyaWRpbmcgdGhlIHRva2VuIHRoZSBgYm9yZGVyYCBwcm9wIHdvdWxkIHBpY2suXG4gICAqIEZvciBvbmUtb2ZmIHJpbmdzIChhIGN1dG91dCByaW5nLCBhIGZvY3VzIGhhbG8pIHRoYXQgbm8gc2VtYW50aWNcbiAgICogYm9yZGVyIHRva2VuIGV4cHJlc3Nlcy4gSW1wbGllcyBhIGJvcmRlciB3aWR0aCB3aGVuIG5vbmUgaXMgc2V0LiAqL1xuICBib3JkZXJDb2xvcj86IHN0cmluZztcbiAgc2hhZG93PzogU2hhZG93O1xuXG4gIC8qKlxuICAgKiBSZXRpbnQgdGhlIHRva2VuIHN1YnRyZWUgc28gZGVzY2VuZGFudCBgVGV4dGAvYEJ1dHRvbmAgcmVhZCB0aGVcbiAgICogcmlnaHQgY29udHJhc3Qgb24gYSBkYXJrIChvciBmb3JjZWQtbGlnaHQpIFN1cmZhY2Ug4oCUIGVycm9yXG4gICAqIGJhbm5lcnMsIGNhbWVyYSBvdmVybGF5cywgY2hhdCBidWJibGVzLiBTZXRzIGBkYXRhLXBvbGx5LXRoZW1lYCxcbiAgICogc28gZXZlcnkgYC0tcG9sbHktKmAgY29sb3VyIHRva2VuIGZsaXBzIGZvciB0aGUgc3VidHJlZTsgbm8gaW5saW5lXG4gICAqIGAtLXBvbGx5LXRleHRgIG92ZXJyaWRlIG5lZWRlZCAocG9sbHkjMTM1KS5cbiAgICovXG4gIHNjaGVtZT86IFNjaGVtZTtcblxuICAvKiogYCdub25lJ2AgbWFrZXMgYSBkZWNvcmF0aXZlIFN1cmZhY2UgKGEgc2Nhbi1mcmFtZSBvdmVybGF5KSBpZ25vcmVcbiAgICogdGhlIHBvaW50ZXIgc28gY2xpY2tzIGZhbGwgdGhyb3VnaCB0byB3aGF0IGlzIGJlaGluZCBpdC4gKi9cbiAgcG9pbnRlckV2ZW50cz86IFwibm9uZVwiIHwgXCJhdXRvXCI7XG5cbiAgLyoqIGRpc3BsYXk6IGlubGluZS1ibG9jayDigJQgU3VyZmFjZSBmbG93cyBpbmxpbmUgd2l0aCBzdXJyb3VuZGluZyB0ZXh0LiAqL1xuICBpbmxpbmU/OiBib29sZWFuO1xuICB3aWR0aD86IHN0cmluZztcbiAgaGVpZ2h0Pzogc3RyaW5nO1xuICBtaW5IZWlnaHQ/OiBzdHJpbmc7XG4gIC8qKiBNYXhpbXVtIGJsb2NrIHNpemUg4oCUIGEgU3VyZmFjZSB0aGF0IHNocmlua3MgdG8gY29udGVudCBidXQgaXMgY2FwcGVkLiAqL1xuICBtYXhIZWlnaHQ/OiBzdHJpbmc7XG4gIG1heElubGluZVNpemU/OiBzdHJpbmc7XG5cbiAgLyoqIE92ZXJmbG93IGJlaGF2aW91ci4gYCdhdXRvJ2AgbWFrZXMgYSBoZWlnaHQtY2FwcGVkIFN1cmZhY2Ugc2Nyb2xsLiAqL1xuICBvdmVyZmxvdz86IE92ZXJmbG93O1xuXG4gIHBvc2l0aW9uPzogUG9zaXRpb247XG4gIC8qKiBBbnkgQ1NTIGluc2V0IHZhbHVlIChgJzAnYCwgYCdhdXRvIGF1dG8gMXJlbSAxcmVtJ2AsIGAnMXJlbSdgLCDigKYpLiAqL1xuICBpbnNldD86IHN0cmluZztcbiAgLyoqIENTUyB0cmFuc2Zvcm0g4oCUIGUuZy4gYCd0cmFuc2xhdGVYKC01MCUpJ2AgdG8gY2VudHJlIGEgZml4ZWQgYmFubmVyXG4gICAqIHBhaXJlZCB3aXRoIGBpbnNldDogJ+KApiBhdXRvIOKApiA1MCUnYC4gVGhlIHNhbmN0aW9uZWQgdHJhbnNmb3JtIGVzY2FwZS4gKi9cbiAgdHJhbnNmb3JtPzogc3RyaW5nO1xuICB6SW5kZXg/OiBudW1iZXI7XG5cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogUGVyLWluc3RhbmNlIG92ZXJyaWRlcy4gVGhlIHN1cHBvcnRlZCByZXRpbnQgcGF0aCBpcyB0byBzZXQgcG9sbHkgdG9rZW5zXG4gICAqIGhlcmUsIGUuZy4gYHN0eWxlPXt7IFwiLS1wb2xseS1zdXJmYWNlLXJhaXNlZFwiOiBcIiNmZWYzYzdcIiB9fWAuIFN1cmZhY2VcbiAgICogbWVyZ2VzIHRoaXMgaW50byBpdHMgb3duIGNvbXB1dGVkIHN0eWxlLlxuICAgKi9cbiAgc3R5bGU/OiBKU1guQ1NTUHJvcGVydGllcztcblxuICBpZD86IHN0cmluZztcbiAgcm9sZT86IEpTWC5BcmlhUm9sZTtcbiAgdGFiSW5kZXg/OiBudW1iZXI7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxsZWRieVwiPzogc3RyaW5nO1xuICBcImFyaWEtZGVzY3JpYmVkYnlcIj86IHN0cmluZztcbiAgb25DbGljaz86IEpTWC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gIG9uS2V5RG93bj86IEpTWC5LZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG59O1xuXG50eXBlIFZhcmlhbnREZWZhdWx0cyA9IFBhcnRpYWw8XG4gIFBpY2s8XG4gICAgU3VyZmFjZVByb3BzLFxuICAgIHwgXCJwYWRkaW5nXCJcbiAgICB8IFwiYmFja2dyb3VuZFwiXG4gICAgfCBcInJhZGl1c1wiXG4gICAgfCBcImJvcmRlclwiXG4gICAgfCBcImJvcmRlcldpZHRoXCJcbiAgICB8IFwiYm9yZGVyU2lkZXNcIlxuICAgIHwgXCJzaGFkb3dcIlxuICAgIHwgXCJpbmxpbmVcIlxuICAgIHwgXCJ3aWR0aFwiXG4gICAgfCBcImhlaWdodFwiXG4gICAgfCBcIm1pbkhlaWdodFwiXG4gICAgfCBcIm1heElubGluZVNpemVcIlxuICAgIHwgXCJwb3NpdGlvblwiXG4gICAgfCBcImluc2V0XCJcbiAgICB8IFwiekluZGV4XCJcbiAgPlxuPjtcblxuY29uc3QgdmFyaWFudERlZmF1bHRzOiBSZWNvcmQ8U3VyZmFjZVZhcmlhbnQsIFZhcmlhbnREZWZhdWx0cz4gPSB7XG4gIHBsYWluOiB7fSxcbiAgcmFpc2VkOiB7XG4gICAgYmFja2dyb3VuZDogXCJyYWlzZWRcIixcbiAgICByYWRpdXM6IFwibWRcIixcbiAgICBzaGFkb3c6IFwibWRcIixcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICB9LFxuICBzdW5rZW46IHtcbiAgICBiYWNrZ3JvdW5kOiBcInN1bmtlblwiLFxuICAgIHJhZGl1czogXCJtZFwiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gIH0sXG4gIGJ1YmJsZToge1xuICAgIGJhY2tncm91bmQ6IFwidmFyKC0tcG9sbHktc3VyZmFjZS1idWJibGUpXCIsXG4gICAgcmFkaXVzOiBcIm1kXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgICBwYWRkaW5nOiBcInZhcigtLXBvbGx5LXNwYWNlLXNtKSB2YXIoLS1wb2xseS1zcGFjZS1tZClcIixcbiAgfSxcbiAgY2hpcDoge1xuICAgIGlubGluZTogdHJ1ZSxcbiAgICByYWRpdXM6IFwiZnVsbFwiLFxuICAgIHBhZGRpbmc6IFwidmFyKC0tcG9sbHktc3BhY2UteHMpIHZhcigtLXBvbGx5LXNwYWNlLXNtKVwiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gIH0sXG4gIGNhbGxvdXQ6IHtcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICAgIHJhZGl1czogXCJzbVwiLFxuICAgIHBhZGRpbmc6IFwidmFyKC0tcG9sbHktc3BhY2Utc20pIHZhcigtLXBvbGx5LXNwYWNlLW1kKVwiLFxuICB9LFxuICBmbG9hdGluZzoge1xuICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgcmFkaXVzOiBcImxnXCIsXG4gICAgc2hhZG93OiBcImxnXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgICBiYWNrZ3JvdW5kOiBcInJhaXNlZFwiLFxuICAgIHpJbmRleDogOTk5OSxcbiAgfSxcbiAgXCJzdGlja3ktYmFyXCI6IHtcbiAgICBwb3NpdGlvbjogXCJzdGlja3lcIixcbiAgICBpbnNldDogXCIwIDAgYXV0byAwXCIsXG4gICAgYm9yZGVyU2lkZXM6IFwiYmxvY2stZW5kXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGJnVmFsdWUoYjogQmFja2dyb3VuZCk6IHN0cmluZyB7XG4gIGlmIChiID09PSBcInJhaXNlZFwiKSByZXR1cm4gXCJ2YXIoLS1wb2xseS1zdXJmYWNlLXJhaXNlZClcIjtcbiAgaWYgKGIgPT09IFwic3Vua2VuXCIpIHJldHVybiBcInZhcigtLXBvbGx5LXN1cmZhY2Utc3Vua2VuKVwiO1xuICBpZiAoYiA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gXCJ0cmFuc3BhcmVudFwiO1xuICByZXR1cm4gYjtcbn1cblxuZnVuY3Rpb24gcmFkaXVzVmFsdWUocjogUmFkaXVzKTogc3RyaW5nIHtcbiAgaWYgKHIgPT09IFwibm9uZVwiKSByZXR1cm4gXCIwXCI7XG4gIHJldHVybiBgdmFyKC0tcG9sbHktcmFkaXVzLSR7cn0pYDtcbn1cblxuZnVuY3Rpb24gYm9yZGVyQ29sb3JWYWx1ZShiOiBCb3JkZXIpOiBzdHJpbmcge1xuICBpZiAoYiA9PT0gXCJub25lXCIpIHJldHVybiBcInRyYW5zcGFyZW50XCI7XG4gIGlmIChiID09PSBcInN0cm9uZ1wiKSByZXR1cm4gXCJ2YXIoLS1wb2xseS1ib3JkZXItc3Ryb25nKVwiO1xuICByZXR1cm4gXCJ2YXIoLS1wb2xseS1ib3JkZXIpXCI7XG59XG5cbmZ1bmN0aW9uIGJvcmRlcldpZHRoVmFsdWUodzogQm9yZGVyV2lkdGgpOiBzdHJpbmcge1xuICBpZiAodyA9PT0gXCJub25lXCIpIHJldHVybiBcIjBcIjtcbiAgcmV0dXJuIGB2YXIoLS1wb2xseS1ib3JkZXItd2lkdGgtJHt3fSlgO1xufVxuXG5mdW5jdGlvbiBzaGFkb3dWYWx1ZShzOiBTaGFkb3cpOiBzdHJpbmcge1xuICBpZiAocyA9PT0gXCJub25lXCIpIHJldHVybiBcIm5vbmVcIjtcbiAgcmV0dXJuIGB2YXIoLS1wb2xseS1zaGFkb3ctJHtzfSlgO1xufVxuXG5mdW5jdGlvbiBib3JkZXJTaWRlc0NsYXNzKHNpZGVzOiBCb3JkZXJTaWRlcyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChzaWRlcyA9PT0gXCJhbGxcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHNpZGVzID09PSBcImJsb2NrLXN0YXJ0XCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtYmxvY2stc3RhcnRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJibG9jay1lbmRcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1ibG9jay1lbmRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJpbmxpbmUtc3RhcnRcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1pbmxpbmUtc3RhcnRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJpbmxpbmUtZW5kXCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtaW5saW5lLWVuZFwiXTtcbiAgaWYgKHNpZGVzID09PSBcImJsb2NrXCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtYmxvY2tcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJpbmxpbmVcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1pbmxpbmVcIl07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBwcm9wLXRvLWN1c3RvbS1wcm9wZXJ0eSBtYXBwaW5nOyBmbGF0IGFuZCBsaW5lYXIsIG1pcnJvcnMgTGF5b3V0LnRzeC5cbmV4cG9ydCBmdW5jdGlvbiBTdXJmYWNlKHByb3BzOiBTdXJmYWNlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgdmFyaWFudCA9IFwicGxhaW5cIiB9ID0gcHJvcHM7XG4gIGNvbnN0IHYgPSB2YXJpYW50RGVmYXVsdHNbdmFyaWFudF07XG5cbiAgY29uc3QgYXMgPSBwcm9wcy5hcyA/PyBcImRpdlwiO1xuICBjb25zdCBwYWRkaW5nID0gcHJvcHMucGFkZGluZyA/PyB2LnBhZGRpbmc7XG4gIGNvbnN0IGJhY2tncm91bmQgPSBwcm9wcy5iYWNrZ3JvdW5kID8/IHYuYmFja2dyb3VuZDtcbiAgY29uc3QgcmFkaXVzID0gcHJvcHMucmFkaXVzID8/IHYucmFkaXVzO1xuICBjb25zdCBib3JkZXIgPSBwcm9wcy5ib3JkZXIgPz8gdi5ib3JkZXI7XG4gIGNvbnN0IGJvcmRlclNpZGVzID0gcHJvcHMuYm9yZGVyU2lkZXMgPz8gdi5ib3JkZXJTaWRlcyA/PyBcImFsbFwiO1xuICBjb25zdCBzaGFkb3cgPSBwcm9wcy5zaGFkb3cgPz8gdi5zaGFkb3c7XG4gIGNvbnN0IGlubGluZSA9IHByb3BzLmlubGluZSA/PyB2LmlubGluZTtcbiAgY29uc3Qgd2lkdGggPSBwcm9wcy53aWR0aCA/PyB2LndpZHRoO1xuICBjb25zdCBoZWlnaHQgPSBwcm9wcy5oZWlnaHQgPz8gdi5oZWlnaHQ7XG4gIGNvbnN0IG1pbkhlaWdodCA9IHByb3BzLm1pbkhlaWdodCA/PyB2Lm1pbkhlaWdodDtcbiAgY29uc3QgbWF4SW5saW5lU2l6ZSA9IHByb3BzLm1heElubGluZVNpemUgPz8gdi5tYXhJbmxpbmVTaXplO1xuICBjb25zdCBwb3NpdGlvbiA9IHByb3BzLnBvc2l0aW9uID8/IHYucG9zaXRpb247XG4gIGNvbnN0IGluc2V0ID0gcHJvcHMuaW5zZXQgPz8gdi5pbnNldDtcbiAgY29uc3QgekluZGV4ID0gcHJvcHMuekluZGV4ID8/IHYuekluZGV4O1xuICAvLyBwb2xseSMxMjYvIzEzNTogbm8gdmFyaWFudCBzZXRzIHRoZXNlLCBzbyB0aGV5IHJlc29sdmUgc3RyYWlnaHQgZnJvbSBwcm9wcy5cbiAgY29uc3QgeyBtYXhIZWlnaHQsIG92ZXJmbG93LCBib3JkZXJTdHlsZSwgdHJhbnNmb3JtLCBib3JkZXJDb2xvciwgc2NoZW1lLCBwb2ludGVyRXZlbnRzIH0gPSBwcm9wcztcblxuICAvLyBBIGJvcmRlcmVkIHN1cmZhY2UgbmVlZHMgYSB3aWR0aC4gSWYgdGhlIGNvbnN1bWVyIGFza2VkIGZvciBhIGJvcmRlciDigJRcbiAgLy8gYnkgbmFtZSBvciBieSByYXcgY29sb3VyIOKAlCBidXQgZGlkbid0IHBpY2sgYSB3aWR0aCwgaW5mZXIgJ2RlZmF1bHQnXG4gIC8vIHNvIHRoZSBib3JkZXIgcmVuZGVycy5cbiAgY29uc3Qgd2FudHNCb3JkZXIgPSAoYm9yZGVyICE9PSB1bmRlZmluZWQgJiYgYm9yZGVyICE9PSBcIm5vbmVcIikgfHwgYm9yZGVyQ29sb3IgIT09IHVuZGVmaW5lZDtcbiAgY29uc3QgYm9yZGVyV2lkdGggPSBwcm9wcy5ib3JkZXJXaWR0aCA/PyB2LmJvcmRlcldpZHRoID8/ICh3YW50c0JvcmRlciA/IFwiZGVmYXVsdFwiIDogdW5kZWZpbmVkKTtcblxuICBjb25zdCBzdHlsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBpZiAocGFkZGluZykgc3R5bGVbXCItLXMtcFwiXSA9IHBhZGRpbmc7XG4gIGlmIChiYWNrZ3JvdW5kKSBzdHlsZVtcIi0tcy1iZ1wiXSA9IGJnVmFsdWUoYmFja2dyb3VuZCk7XG4gIGlmIChyYWRpdXMpIHN0eWxlW1wiLS1zLXJhZGl1c1wiXSA9IHJhZGl1c1ZhbHVlKHJhZGl1cyk7XG4gIGlmIChib3JkZXIpIHN0eWxlW1wiLS1zLWJvcmRlci1jb2xvclwiXSA9IGJvcmRlckNvbG9yVmFsdWUoYm9yZGVyKTtcbiAgLy8gQSByYXcgYm9yZGVyQ29sb3Igd2lucyBvdmVyIHdoYXRldmVyIHRva2VuIGBib3JkZXJgIHJlc29sdmVkIHRvLlxuICBpZiAoYm9yZGVyQ29sb3IpIHN0eWxlW1wiLS1zLWJvcmRlci1jb2xvclwiXSA9IGJvcmRlckNvbG9yO1xuICBpZiAoYm9yZGVyV2lkdGgpIHN0eWxlW1wiLS1zLWJvcmRlci13aWR0aFwiXSA9IGJvcmRlcldpZHRoVmFsdWUoYm9yZGVyV2lkdGgpO1xuICBpZiAoc2hhZG93KSBzdHlsZVtcIi0tcy1zaGFkb3dcIl0gPSBzaGFkb3dWYWx1ZShzaGFkb3cpO1xuICBpZiAoYm9yZGVyU3R5bGUpIHN0eWxlW1wiLS1zLWJvcmRlci1zdHlsZVwiXSA9IGJvcmRlclN0eWxlO1xuICBpZiAocG9pbnRlckV2ZW50cykgc3R5bGVbXCItLXMtcGVcIl0gPSBwb2ludGVyRXZlbnRzO1xuICBpZiAod2lkdGgpIHN0eWxlW1wiLS1zLXdcIl0gPSB3aWR0aDtcbiAgaWYgKGhlaWdodCkgc3R5bGVbXCItLXMtaFwiXSA9IGhlaWdodDtcbiAgaWYgKG1pbkhlaWdodCkgc3R5bGVbXCItLXMtbWhcIl0gPSBtaW5IZWlnaHQ7XG4gIGlmIChtYXhIZWlnaHQpIHN0eWxlW1wiLS1zLW1heGhcIl0gPSBtYXhIZWlnaHQ7XG4gIGlmIChtYXhJbmxpbmVTaXplKSBzdHlsZVtcIi0tcy1taXNcIl0gPSBtYXhJbmxpbmVTaXplO1xuICBpZiAob3ZlcmZsb3cpIHN0eWxlW1wiLS1zLW92ZXJmbG93XCJdID0gb3ZlcmZsb3c7XG4gIGlmIChwb3NpdGlvbikgc3R5bGVbXCItLXMtcG9zaXRpb25cIl0gPSBwb3NpdGlvbjtcbiAgaWYgKGluc2V0KSBzdHlsZVtcIi0tcy1pbnNldFwiXSA9IGluc2V0O1xuICBpZiAodHJhbnNmb3JtKSBzdHlsZVtcIi0tcy10cmFuc2Zvcm1cIl0gPSB0cmFuc2Zvcm07XG4gIGlmICh6SW5kZXggIT09IHVuZGVmaW5lZCkgc3R5bGVbXCItLXMtelwiXSA9IFN0cmluZyh6SW5kZXgpO1xuXG4gIGlmIChwcm9wcy5zdHlsZSkge1xuICAgIE9iamVjdC5hc3NpZ24oc3R5bGUsIHByb3BzLnN0eWxlIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPik7XG4gIH1cblxuICBjb25zdCBwYXJ0czogKHN0cmluZyB8IHVuZGVmaW5lZClbXSA9IFtjbGFzc2VzW1wic3VyZmFjZVwiXV07XG4gIGlmIChpbmxpbmUpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImlubGluZVwiXSk7XG4gIHBhcnRzLnB1c2goYm9yZGVyU2lkZXNDbGFzcyhib3JkZXJTaWRlcykpO1xuICBpZiAocHJvcHMuY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKHByb3BzLmNsYXNzTmFtZSk7XG4gIGNvbnN0IGNsYXNzTmFtZSA9IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICBjb25zdCBwYXNzdGhyb3VnaDogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocHJvcHMpKSB7XG4gICAgY29uc3QgaXNEYXRhID0ga2V5LnN0YXJ0c1dpdGgoXCJkYXRhLVwiKTtcbiAgICBjb25zdCBpc0FyaWEgPSBrZXkuc3RhcnRzV2l0aChcImFyaWEtXCIpO1xuICAgIGlmICghaXNEYXRhICYmICFpc0FyaWEgJiYga2V5ICE9PSBcInRpdGxlXCIpIGNvbnRpbnVlO1xuICAgIGlmIChrZXkgPT09IFwiZGF0YS1wb2xseS1zdXJmYWNlXCIpIGNvbnRpbnVlO1xuICAgIGlmIChrZXkgPT09IFwiYXJpYS1sYWJlbFwiIHx8IGtleSA9PT0gXCJhcmlhLWxhYmVsbGVkYnlcIiB8fCBrZXkgPT09IFwiYXJpYS1kZXNjcmliZWRieVwiKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IChwcm9wcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICBwYXNzdGhyb3VnaFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgaWQ6IHByb3BzLmlkLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgc3R5bGUsXG4gICAgICBvbkNsaWNrOiBwcm9wcy5vbkNsaWNrLFxuICAgICAgb25LZXlEb3duOiBwcm9wcy5vbktleURvd24sXG4gICAgICByb2xlOiBwcm9wcy5yb2xlLFxuICAgICAgdGFiSW5kZXg6IHByb3BzLnRhYkluZGV4LFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzW1wiYXJpYS1sYWJlbFwiXSxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHByb3BzW1wiYXJpYS1sYWJlbGxlZGJ5XCJdLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHByb3BzW1wiYXJpYS1kZXNjcmliZWRieVwiXSxcbiAgICAgIFwiZGF0YS1wb2xseS1zdXJmYWNlXCI6IHZhcmlhbnQsXG4gICAgICBcImRhdGEtcG9sbHktdGhlbWVcIjogc2NoZW1lLFxuICAgICAgLi4ucGFzc3Rocm91Z2gsXG4gICAgfSxcbiAgICBwcm9wcy5jaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIENhcmQg4oCUIGNvbXBvdW5kIHByaW1pdGl2ZSB0aGF0IGNvbXBvc2VzIFN1cmZhY2UgZm9yIGVhY2ggbmFtZWQgc2xvdC5cbiAqXG4gKiBDYXJkIGlzIHRoZSBmaXJzdCBjb21wb3VuZCB0aGF0IGlzIHB1cmVseSBhIHJlLXNraW4gb2YgU3VyZmFjZSDigJQgbm9cbiAqIGJlaGF2aW91cmFsIGxheWVyLiBIZWFkZXIsIEJvZHksIGFuZCBGb290ZXIgYXJlIGVhY2ggU3VyZmFjZXMgd2l0aFxuICogc2Vuc2libGUgZGVmYXVsdHM7IFJvb3QgaXMgYSByYWlzZWQgU3VyZmFjZSB0aGF0IHdyYXBzIHRoZW0uIEV2ZXJ5XG4gKiBzbG90IGFjY2VwdHMgdGhlIGZ1bGwgU3VyZmFjZVByb3BzLCBzbyBjb25zdW1lcnMgcmV0aW50LCBvdmVycmlkZSwgb3JcbiAqIHJlYWNoIGZvciByYXcgcGFkZGluZyB3aXRob3V0IHJlYWNoaW5nIHBhc3QgdGhlIHByaW1pdGl2ZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IFN1cmZhY2UsIHR5cGUgU3VyZmFjZVByb3BzIH0gZnJvbSBcIi4vU3VyZmFjZS50c3hcIjtcblxuZXhwb3J0IHR5cGUgQ2FyZFByb3BzID0gU3VyZmFjZVByb3BzO1xuZXhwb3J0IHR5cGUgQ2FyZFNsb3RQcm9wcyA9IFN1cmZhY2VQcm9wcztcblxuZnVuY3Rpb24gUm9vdChwcm9wczogQ2FyZFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHZhcmlhbnQgPSBcInJhaXNlZFwiLCByYWRpdXMgPSBcIm1kXCIsIC4uLnJlc3QgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlIHZhcmlhbnQ9e3ZhcmlhbnR9IHJhZGl1cz17cmFkaXVzfSBkYXRhLXBvbGx5LWNhcmQgey4uLnJlc3R9PlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSGVhZGVyKHByb3BzOiBDYXJkU2xvdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgcGFkZGluZyA9IFwidmFyKC0tcG9sbHktc3BhY2UtbWQpIHZhcigtLXBvbGx5LXNwYWNlLWxnKVwiLFxuICAgIGJvcmRlciA9IFwiZGVmYXVsdFwiLFxuICAgIGJvcmRlclNpZGVzID0gXCJibG9jay1lbmRcIixcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgcGFkZGluZz17cGFkZGluZ31cbiAgICAgIGJvcmRlcj17Ym9yZGVyfVxuICAgICAgYm9yZGVyU2lkZXM9e2JvcmRlclNpZGVzfVxuICAgICAgZGF0YS1wb2xseS1jYXJkLWhlYWRlclxuICAgICAgey4uLnJlc3R9XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQm9keShwcm9wczogQ2FyZFNsb3RQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBwYWRkaW5nID0gXCJ2YXIoLS1wb2xseS1zcGFjZS1sZylcIiwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2UgcGFkZGluZz17cGFkZGluZ30gZGF0YS1wb2xseS1jYXJkLWJvZHkgey4uLnJlc3R9PlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRm9vdGVyKHByb3BzOiBDYXJkU2xvdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgcGFkZGluZyA9IFwidmFyKC0tcG9sbHktc3BhY2UtbWQpIHZhcigtLXBvbGx5LXNwYWNlLWxnKVwiLFxuICAgIGJvcmRlciA9IFwiZGVmYXVsdFwiLFxuICAgIGJvcmRlclNpZGVzID0gXCJibG9jay1zdGFydFwiLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICBwYWRkaW5nPXtwYWRkaW5nfVxuICAgICAgYm9yZGVyPXtib3JkZXJ9XG4gICAgICBib3JkZXJTaWRlcz17Ym9yZGVyU2lkZXN9XG4gICAgICBkYXRhLXBvbGx5LWNhcmQtZm9vdGVyXG4gICAgICB7Li4ucmVzdH1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5leHBvcnQgY29uc3QgQ2FyZCA9IHsgUm9vdCwgSGVhZGVyLCBCb2R5LCBGb290ZXIgfTtcbiIsCiAgICAiLyoqXG4gKiBDaGVja2JveCDigJQgbmF0aXZlIGNoZWNrYm94IHdyYXBwZWQgaW4gYSBsYWJlbC5cbiAqXG4gKiBQYXNzIGEgcGxhaW4gYm9vbGVhbiBmb3IgY29udHJvbGxlZCB1c2UgKGNhbGxlciBsaXN0ZW5zIGVsc2V3aGVyZSksXG4gKiBvciBhIFNpZ25hbDxib29sZWFuPiB0byBoYXZlIHRoZSBwcmltaXRpdmUgYmluZCBpdHMgb3duIGNoYW5nZVxuICogbGlzdGVuZXIgYW5kIG11dGF0ZSB0aGUgc2lnbmFsIGRpcmVjdGx5LiBUaGUgbGFiZWwgd3JhcHMgdGhlIGlucHV0XG4gKiBzbyBjbGlja3MgYW55d2hlcmUgaW4gdGhlIHRhcmdldCBhcmVhIHRvZ2dsZSBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ2hlY2tib3gubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuXG5leHBvcnQgdHlwZSBDaGVja2JveFByb3BzID0ge1xuICBjaGVja2VkPzogYm9vbGVhbiB8IFNpZ25hbDxib29sZWFuPjtcbiAgZGVmYXVsdENoZWNrZWQ/OiBib29sZWFuO1xuICBuYW1lPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGxhYmVsPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gaXNTaWduYWwodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTaWduYWw8Ym9vbGVhbj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmIFwidmFsdWVcIiBpbiB2YWx1ZSAmJiBcInBlZWtcIiBpbiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENoZWNrYm94KHByb3BzOiBDaGVja2JveFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoZWNrZWQsIGRlZmF1bHRDaGVja2VkLCBuYW1lLCBkaXNhYmxlZCA9IGZhbHNlLCBsYWJlbCwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGU6IEpTWC5UYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KTogdm9pZCA9PiB7XG4gICAgaWYgKGlzU2lnbmFsKGNoZWNrZWQpKSB7XG4gICAgICBjaGVja2VkLnZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQ7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNoZWNrZWRWYWx1ZSA9IGlzU2lnbmFsKGNoZWNrZWQpID8gY2hlY2tlZC52YWx1ZSA6IGNoZWNrZWQ7XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImNoZWNrYm94XCJdXTtcbiAgaWYgKGRpc2FibGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJkaXNhYmxlZFwiXSA/PyBcIlwiKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPExheW91dFxuICAgICAgYXM9XCJsYWJlbFwiXG4gICAgICBpbmxpbmVcbiAgICAgIGNvbHVtbnM9XCJhdXRvIGF1dG9cIlxuICAgICAgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCJcbiAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgY2xhc3NOYW1lPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWNoZWNrYm94XG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJpbnB1dFwiXX1cbiAgICAgICAgY2hlY2tlZD17Y2hlY2tlZFZhbHVlfVxuICAgICAgICBkZWZhdWx0Q2hlY2tlZD17ZGVmYXVsdENoZWNrZWR9XG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIC8+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICA8L0xheW91dD5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBDbHVzdGVyIOKAlCB3cmFwcGluZyByb3cgb2YgdmFyaWFibGUtd2lkdGggaXRlbXMuXG4gKlxuICogVGhlIGZsZXgtd3JhcCBjb3VudGVycGFydCB0byA8TGF5b3V0Pi4gV2hlcmUgTGF5b3V0IG93bnMgQ1NTIGdyaWRcbiAqIHRyYWNrcywgQ2x1c3RlciBvd25zIGEgcm93IG9mIGl0ZW1zIHRoYXQgZGlmZmVyIGluIHdpZHRoIGFuZCBtdXN0XG4gKiByZWZsb3cgYXMgc3BhY2UgcnVucyBvdXQg4oCUIGZpbHRlciBjaGlwcywgdGFnIGFuZCBiYWRnZSBsaXN0cywgZ3JvdXBzXG4gKiBvZiBzbWFsbCBidXR0b25zLiBJdGVtcyBrZWVwIGV2ZW4gc3BhY2luZyBvbiBib3RoIGF4ZXMgdmlhIGBnYXBgOyB0aGVcbiAqIHJvdyB3cmFwcyBhdXRvbWF0aWNhbGx5IGF0IG5hcnJvdyB3aWR0aHMuIExpa2UgTGF5b3V0LCBwcm9wcyBtYXAgdG9cbiAqIENTUyBjdXN0b20gcHJvcGVydGllcyBzbyBjb25zdW1lcnMgY2FuIG92ZXJyaWRlIGFueSBvZiB0aGVtIGluIGFcbiAqIG1lZGlhIHF1ZXJ5IHdpdGhvdXQgdG91Y2hpbmcgc3BlY2lmaWNpdHkuXG4gKlxuICogVGhpcyBpcyB0aGUgc2Vjb25kIChhbmQgZmluYWwpIGxheW91dCBwcmltaXRpdmU6IGEgY29uc3VtZXIgbmV2ZXJcbiAqIHdyaXRlcyBgZGlzcGxheTogZmxleGAgb3IgYGRpc3BsYXk6IGdyaWRgIHRoZW1zZWx2ZXMg4oCUIGdyaWQgZ29lc1xuICogdGhyb3VnaCA8TGF5b3V0PiwgYSB3cmFwcGluZyBjbHVzdGVyIGdvZXMgdGhyb3VnaCA8Q2x1c3Rlcj4uXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb21wb25lbnRDaGlsZHJlbiwgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9DbHVzdGVyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcblxuZXhwb3J0IHR5cGUgQ2x1c3RlclByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuXG4gIC8qKiBQb2x5bW9ycGhpYyBlbGVtZW50IChkaXYsIG5hdiwgdWwsIOKApikuIERlZmF1bHRzIHRvICdkaXYnLiAqL1xuICBhcz86IGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcblxuICAvKiogU3BhY2UgYmV0d2VlbiBpdGVtcywgYm90aCBheGVzLiBUeXBpY2FsbHkgYSBgLS1wb2xseS1zcGFjZS0qYCB0b2tlbi4gKi9cbiAgZ2FwPzogc3RyaW5nO1xuICBwYWRkaW5nPzogc3RyaW5nO1xuXG4gIC8qKiBNYWluLWF4aXMgZGlzdHJpYnV0aW9uIOKAlCBtYXBzIHRvIGp1c3RpZnktY29udGVudC4gRGVmYXVsdDogc3RhcnQuICovXG4gIGp1c3RpZnk/OiBzdHJpbmc7XG4gIC8qKiBDcm9zcy1heGlzIGFsaWdubWVudCB3aXRoaW4gYSB3cmFwcGVkIHJvdyDigJQgbWFwcyB0byBhbGlnbi1pdGVtcy4gRGVmYXVsdDogY2VudGVyLiAqL1xuICBhbGlnbj86IHN0cmluZztcblxuICAvKiogUmVuZGVyIGFzIGlubGluZS1mbGV4IHNvIHRoZSBjbHVzdGVyIGZsb3dzIGlubGluZSB3aXRoIHN1cnJvdW5kaW5nIHRleHQuICovXG4gIGlubGluZT86IGJvb2xlYW47XG5cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgcm9sZT86IEpTWC5BcmlhUm9sZTtcbiAgXCJhcmlhLWxhYmVsXCI/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gQ2x1c3Rlcihwcm9wczogQ2x1c3RlclByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCBhcyA9IFwiZGl2XCIsIGdhcCwgcGFkZGluZywganVzdGlmeSwgYWxpZ24sIGlubGluZSwgY2xhc3NOYW1lLCBpZCwgcm9sZSB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc3R5bGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgaWYgKGdhcCkgc3R5bGVbXCItLWMtZ2FwXCJdID0gZ2FwO1xuICBpZiAocGFkZGluZykgc3R5bGVbXCItLWMtcFwiXSA9IHBhZGRpbmc7XG4gIGlmIChqdXN0aWZ5KSBzdHlsZVtcIi0tYy1qY1wiXSA9IGp1c3RpZnk7XG4gIGlmIChhbGlnbikgc3R5bGVbXCItLWMtYWlcIl0gPSBhbGlnbjtcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiY2x1c3RlclwiXV07XG4gIGlmIChpbmxpbmUpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImlubGluZVwiXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICBhcyxcbiAgICB7XG4gICAgICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qIGZpcnN0OyB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXMgd2luLlxuICAgICAgLi4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKSxcbiAgICAgIGlkLFxuICAgICAgY2xhc3M6IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSxcbiAgICAgIHN0eWxlLFxuICAgICAgcm9sZSxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBwcm9wc1tcImFyaWEtbGFiZWxcIl0sXG4gICAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICAgIFwiZGF0YS1wb2xseS1jbHVzdGVyXCI6IHRydWUsXG4gICAgfSxcbiAgICBjaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIENvZGUg4oCUIGlubGluZSBtb25vc3BhY2UgY29kZSBzcGFuLlxuICpcbiAqIFJlbmRlcnMgYSBgPGNvZGU+YCB3aXRoIHRoZSBgLS1wb2xseS1mb250LW1vbm9gIHN0YWNrLCBhIGZhaW50IHN1bmtlblxuICogdGludCwgYW5kIHNudWcgcGFkZGluZyBzbyBhIGNvbnN1bWVyIG5ldmVyIGhhbmQtcm9sbHMgYSBgLm1vbm9gIGNsYXNzXG4gKiBmb3IgaW5saW5lIGNvZGUsIGlkZW50aWZpZXJzLCBvciBrZXlib2FyZCBoaW50cy4gRm9yIG11bHRpLWxpbmUgY29kZVxuICogYmxvY2tzLCBwYXNzIGBibG9ja2AsIHdoaWNoIHN3aXRjaGVzIHRvIGEgcHJlLXdyYXBwZWQgPHByZT48Y29kZT4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ29kZS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5cbmV4cG9ydCB0eXBlIENvZGVQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgLyoqIFJlbmRlciBhcyBhIGJsb2NrICg8cHJlPjxjb2RlPikgaW5zdGVhZCBvZiBhbiBpbmxpbmUgc3Bhbi4gKi9cbiAgYmxvY2s/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIENvZGUocHJvcHM6IENvZGVQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgYmxvY2ssIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSogc3ByZWFkIGZpcnN0OyB0aGUgZXhwbGljaXQgYXR0cmlidXRlcyBhZnRlclxuICAvLyB3aW4gb24gYW55IGNvbGxpc2lvbi5cbiAgY29uc3QgcGFzc3Rocm91Z2ggPSBjb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpO1xuXG4gIGlmIChibG9jaykge1xuICAgIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJibG9ja1wiXV07XG4gICAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICAgIHJldHVybiAoXG4gICAgICA8cHJlXG4gICAgICAgIHsuLi5wYXNzdGhyb3VnaH1cbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgIGRhdGEtcG9sbHktY29kZT1cImJsb2NrXCJcbiAgICAgID5cbiAgICAgICAgPGNvZGU+e2NoaWxkcmVufTwvY29kZT5cbiAgICAgIDwvcHJlPlxuICAgICk7XG4gIH1cblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiY29kZVwiXV07XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8Y29kZVxuICAgICAgey4uLnBhc3N0aHJvdWdofVxuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktY29kZT1cImlubGluZVwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvY29kZT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBDb2xsYXBzaWJsZSDigJQgbmF0aXZlIDxkZXRhaWxzPi88c3VtbWFyeT4gd3JhcHBlci5cbiAqXG4gKiBVc2VzIHRoZSBicm93c2VyJ3MgYnVpbHQtaW4gZGlzY2xvc3VyZSBzZW1hbnRpY3Mgc28ga2V5Ym9hcmQgYW5kXG4gKiBzY3JlZW4tcmVhZGVyIGJlaGF2aW91ciBjb21lIGZyZWUuIFRoZSBhcnJvdyBpcyBhIHJlYWwgZWxlbWVudCwgbm90IGFcbiAqIDo6YmVmb3JlOiB0aGUgc3VtbWFyeSBpcyBhIHR3by10cmFjayA8TGF5b3V0PiwgYW5kIG5vIGxheW91dCBjb250YWluZXIgY2FuXG4gKiBhcnJhbmdlIGEgcHNldWRvLWVsZW1lbnQuIEl0IHJvdGF0ZXMgb24gb3Blbi5cbiAqIENvbG9ycywgc3BhY2luZywgYW5kIG1vdGlvbiBjb21lIGZyb20gdG9rZW5zOyBgcHJlZmVycy1yZWR1Y2VkLW1vdGlvbmBcbiAqIHplcm9lcyB0aGUgcm90YXRpb24gdmlhIHRoZSBtb3Rpb24gdG9rZW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ29sbGFwc2libGUubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuXG5leHBvcnQgdHlwZSBDb2xsYXBzaWJsZVByb3BzID0ge1xuICAvKiogRGlzY2xvc3VyZSBoZWFkZXIuIEEgc3RyaW5nIGZvciB0aGUgY29tbW9uIGNhc2UsIG9yIGFueSBub2RlIOKAlFxuICAgKiBlLmcuIGEgbXV0ZWQsIHNtYWxsIDxUZXh0PiDigJQgd2hlbiB0aGUgaGVhZGVyIG5lZWRzIHN0eWxpbmcuICovXG4gIHN1bW1hcnk6IENvbXBvbmVudENoaWxkcmVuO1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGRlZmF1bHRPcGVuPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbi8qKiBJbnB1dCB0eXBlcyB3aG9zZSBTcGFjZS9FbnRlciBpcyBhbiBhY3RpdmF0aW9uLCBub3QgdGV4dCBlbnRyeSDigJQgdGhlc2VcbiAqIGtlZXAgdGhlaXIgb3duIGtleWJvYXJkIGJlaGF2aW91ciBhbmQgbXVzdCBub3QgYmUgZ3VhcmRlZC4gKi9cbmNvbnN0IE5PTl9URVhUX0lOUFVUX1RZUEVTID0gbmV3IFNldChbXG4gIFwiY2hlY2tib3hcIixcbiAgXCJyYWRpb1wiLFxuICBcImJ1dHRvblwiLFxuICBcInN1Ym1pdFwiLFxuICBcInJlc2V0XCIsXG4gIFwiZmlsZVwiLFxuICBcImltYWdlXCIsXG4gIFwicmFuZ2VcIixcbiAgXCJjb2xvclwiLFxuXSk7XG5cbi8qKiBJcyB0aGUgZXZlbnQgdGFyZ2V0IGEgZmllbGQgd2hlcmUgU3BhY2UvRW50ZXIgaW5zZXJ0cy9lZGl0cyB0ZXh0PyAqL1xuZnVuY3Rpb24gaXNUZXh0RW50cnlUYXJnZXQodGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSkgcmV0dXJuIHRydWU7XG4gIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgcmV0dXJuICFOT05fVEVYVF9JTlBVVF9UWVBFUy5oYXModGFyZ2V0LnR5cGUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaHJvbWl1bSB0b2dnbGVzIGEgPGRldGFpbHM+IG9uIHRoZSBTcGFjZS9FbnRlciAqa2V5dXAqIG9mIGl0cyA8c3VtbWFyeT4sXG4gKiBldmVuIHdoZW4gZm9jdXMgc2l0cyBpbiBhIG5lc3RlZCB0ZXh0IGZpZWxkIOKAlCBzbyBldmVyeSBzcGFjZSB0eXBlZCBpbiBhblxuICogZWRpdGFibGUgaGVhZGVyIHdvdWxkIGNvbGxhcHNlIHRoZSBkaXNjbG9zdXJlLiBzdG9wUHJvcGFnYXRpb24gY2FuJ3Qgc3RvcFxuICogaXQgKHRoZSB0b2dnbGUgaXMgdGhlIHN1bW1hcnkncyBvd24gYWN0aXZhdGlvbiBiZWhhdmlvdXIsIG5vdCBhIGJ1YmJsaW5nXG4gKiBsaXN0ZW5lcikgYW5kIHByZXZlbnREZWZhdWx0IG9uICprZXlkb3duKiB3b3VsZCBzd2FsbG93IHRoZSBjaGFyYWN0ZXIuIFRoZVxuICogY2hhcmFjdGVyIGlzIGFscmVhZHkgaW5zZXJ0ZWQgYnkgdGhlIHRpbWUga2V5dXAgZmlyZXMsIHNvIGNhbmNlbGxpbmcgdGhlXG4gKiBrZXl1cCBkZWZhdWx0IGZvciB0ZXh0LWVudHJ5IGZpZWxkcyBraWxscyB0aGUgdG9nZ2xlIHdoaWxlIGxlYXZpbmcgdHlwaW5nXG4gKiB1bnRvdWNoZWQuIEJ1dHRvbnMvY2hlY2tib3gvcmFkaW8gZmFsbCB0aHJvdWdoIGFuZCBrZWVwIHRoZWlyIG93blxuICogYWN0aXZhdGlvbjsgdGhlIHN1bW1hcnkgaXRzZWxmIChubyBuZXN0ZWQgZmllbGQpIGtlZXBzIG5vcm1hbCBrZXlib2FyZFxuICogZGlzY2xvc3VyZS5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeUtleVVwKGV2ZW50OiBKU1guVGFyZ2V0ZWRLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50Pik6IHZvaWQge1xuICBpZiAoZXZlbnQua2V5ICE9PSBcIiBcIiAmJiBldmVudC5rZXkgIT09IFwiRW50ZXJcIikgcmV0dXJuO1xuICBpZiAoIWlzVGV4dEVudHJ5VGFyZ2V0KGV2ZW50LnRhcmdldCkpIHJldHVybjtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbGxhcHNpYmxlKHByb3BzOiBDb2xsYXBzaWJsZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHN1bW1hcnksIGNoaWxkcmVuLCBkZWZhdWx0T3BlbiA9IGZhbHNlLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImNvbGxhcHNpYmxlXCJdXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxkZXRhaWxzXG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuam9pbihcIiBcIil9XG4gICAgICBvcGVuPXtkZWZhdWx0T3Blbn1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktY29sbGFwc2libGVcbiAgICA+XG4gICAgICA8TGF5b3V0XG4gICAgICAgIGFzPVwic3VtbWFyeVwiXG4gICAgICAgIGNvbHVtbnM9XCJhdXRvIDFmclwiXG4gICAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXNbXCJzdW1tYXJ5XCJdfVxuICAgICAgICBvbktleVVwPXtoYW5kbGVTdW1tYXJ5S2V5VXB9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibWFya2VyXCJdfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcInN1bW1hcnlDb250ZW50XCJdfT57c3VtbWFyeX08L3NwYW4+XG4gICAgICA8L0xheW91dD5cbiAgICAgIDxkaXYgY2xhc3M9e2NsYXNzZXNbXCJjb250ZW50XCJdfT57Y2hpbGRyZW59PC9kaXY+XG4gICAgPC9kZXRhaWxzPlxuICApO1xufVxuIiwKICAgICJpbXBvcnR7Q29tcG9uZW50IGFzIG4sY3JlYXRlRWxlbWVudCBhcyB0LG9wdGlvbnMgYXMgZSx0b0NoaWxkQXJyYXkgYXMgcixGcmFnbWVudCBhcyB1LHJlbmRlciBhcyBvLGh5ZHJhdGUgYXMgaSxjcmVhdGVDb250ZXh0IGFzIGwsY3JlYXRlUmVmIGFzIGMsY2xvbmVFbGVtZW50IGFzIGZ9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0NvbXBvbmVudCxGcmFnbWVudCxGcmFnbWVudCBhcyBTdHJpY3RNb2RlLGNyZWF0ZUNvbnRleHQsY3JlYXRlRWxlbWVudCxjcmVhdGVSZWZ9ZnJvbVwicHJlYWN0XCI7aW1wb3J0e3VzZVN0YXRlIGFzIGEsdXNlTGF5b3V0RWZmZWN0IGFzIHMsdXNlRWZmZWN0IGFzIGgsdXNlQ2FsbGJhY2sgYXMgdix1c2VDb250ZXh0IGFzIGQsdXNlRGVidWdWYWx1ZSBhcyBtLHVzZUlkIGFzIHAsdXNlSW1wZXJhdGl2ZUhhbmRsZSBhcyB5LHVzZU1lbW8gYXMgXyx1c2VSZWR1Y2VyIGFzIGIsdXNlUmVmIGFzIFN9ZnJvbVwicHJlYWN0L2hvb2tzXCI7ZXhwb3J0KmZyb21cInByZWFjdC9ob29rc1wiO2Z1bmN0aW9uIGcobix0KXtmb3IodmFyIGUgaW4gdCluW2VdPXRbZV07cmV0dXJuIG59ZnVuY3Rpb24gRShuLHQpe2Zvcih2YXIgZSBpbiBuKWlmKFwiX19zb3VyY2VcIiE9PWUmJiEoZSBpbiB0KSlyZXR1cm4hMDtmb3IodmFyIHIgaW4gdClpZihcIl9fc291cmNlXCIhPT1yJiZuW3JdIT09dFtyXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBDKG4sdCl7dmFyIGU9dCgpLHI9YSh7dDp7X186ZSx1OnR9fSksdT1yWzBdLnQsbz1yWzFdO3JldHVybiBzKGZ1bmN0aW9uKCl7dS5fXz1lLHUudT10LFIodSkmJm8oe3Q6dX0pfSxbbixlLHRdKSxoKGZ1bmN0aW9uKCl7cmV0dXJuIFIodSkmJm8oe3Q6dX0pLG4oZnVuY3Rpb24oKXtSKHUpJiZvKHt0OnV9KX0pfSxbbl0pLGV9ZnVuY3Rpb24gUihuKXt0cnl7cmV0dXJuISgodD1uLl9fKT09PShlPW4udSgpKSYmKDAhPT10fHwxL3Q9PTEvZSl8fHQhPXQmJmUhPWUpfWNhdGNoKG4pe3JldHVybiEwfXZhciB0LGV9ZnVuY3Rpb24geChuKXtuKCl9ZnVuY3Rpb24gdyhuKXtyZXR1cm4gbn1mdW5jdGlvbiBrKCl7cmV0dXJuWyExLHhdfXZhciBJPXM7ZnVuY3Rpb24gTShuLHQpe3RoaXMucHJvcHM9bix0aGlzLmNvbnRleHQ9dH1mdW5jdGlvbiBOKG4sZSl7ZnVuY3Rpb24gcihuKXt2YXIgdD10aGlzLnByb3BzLnJlZjtyZXR1cm4gdCE9bi5yZWYmJnQmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3QobnVsbCk6dC5jdXJyZW50PW51bGwpLGU/IWUodGhpcy5wcm9wcyxuKXx8dCE9bi5yZWY6RSh0aGlzLnByb3BzLG4pfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPXIsdChuLGUpfXJldHVybiB1LmRpc3BsYXlOYW1lPVwiTWVtbyhcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix1Ll9fZj11LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLHUudHlwZT1uLHV9KE0ucHJvdG90eXBlPW5ldyBuKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxNLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gRSh0aGlzLnByb3BzLG4pfHxFKHRoaXMuc3RhdGUsdCl9O3ZhciBUPWUuX19iO2UuX19iPWZ1bmN0aW9uKG4pe24udHlwZSYmbi50eXBlLl9fZiYmbi5yZWYmJihuLnByb3BzLnJlZj1uLnJlZixuLnJlZj1udWxsKSxUJiZUKG4pfTt2YXIgQT1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIil8fDM5MTE7ZnVuY3Rpb24gRChuKXtmdW5jdGlvbiB0KHQpe3ZhciBlPWcoe30sdCk7cmV0dXJuIGRlbGV0ZSBlLnJlZixuKGUsdC5yZWZ8fG51bGwpfXJldHVybiB0LiQkdHlwZW9mPUEsdC5yZW5kZXI9bix0LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXQuX19mPSEwLHQuZGlzcGxheU5hbWU9XCJGb3J3YXJkUmVmKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHR9dmFyIEY9ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bj9udWxsOnIocihuKS5tYXAodCkpfSxMPXttYXA6Rixmb3JFYWNoOkYsY291bnQ6ZnVuY3Rpb24obil7cmV0dXJuIG4/cihuKS5sZW5ndGg6MH0sb25seTpmdW5jdGlvbihuKXt2YXIgdD1yKG4pO2lmKDEhPT10Lmxlbmd0aCl0aHJvd1wiQ2hpbGRyZW4ub25seVwiO3JldHVybiB0WzBdfSx0b0FycmF5OnJ9LE89ZS5fX2U7ZS5fX2U9ZnVuY3Rpb24obix0LGUscil7aWYobi50aGVuKWZvcih2YXIgdSxvPXQ7bz1vLl9fOylpZigodT1vLl9fYykmJnUuX19jKXJldHVybiBudWxsPT10Ll9fZSYmKHQuX19lPWUuX19lLHQuX19rPWUuX19rKSx1Ll9fYyhuLHQpO08obix0LGUscil9O3ZhciBVPWUudW5tb3VudDtmdW5jdGlvbiBWKG4sdCxlKXtyZXR1cm4gbiYmKG4uX19jJiZuLl9fYy5fX0gmJihuLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLl9fYyYmbi5fX2MoKX0pLG4uX19jLl9fSD1udWxsKSxudWxsIT0obj1nKHt9LG4pKS5fX2MmJihuLl9fYy5fX1A9PT1lJiYobi5fX2MuX19QPXQpLG4uX19jLl9fZT0hMCxuLl9fYz1udWxsKSxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBWKG4sdCxlKX0pKSxufWZ1bmN0aW9uIFcobix0LGUpe3JldHVybiBuJiZlJiYobi5fX3Y9bnVsbCxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBXKG4sdCxlKX0pLG4uX19jJiZuLl9fYy5fX1A9PT10JiYobi5fX2UmJmUuYXBwZW5kQ2hpbGQobi5fX2UpLG4uX19jLl9fZT0hMCxuLl9fYy5fX1A9ZSkpLG59ZnVuY3Rpb24gUCgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBqKG4pe3ZhciB0PW4uX18mJm4uX18uX19jO3JldHVybiB0JiZ0Ll9fYSYmdC5fX2Eobil9ZnVuY3Rpb24geihuKXt2YXIgZSxyLHUsbz1udWxsO2Z1bmN0aW9uIGkoaSl7aWYoZXx8KGU9bigpKS50aGVuKGZ1bmN0aW9uKG4pe24mJihvPW4uZGVmYXVsdHx8biksdT0hMH0sZnVuY3Rpb24obil7cj1uLHU9ITB9KSxyKXRocm93IHI7aWYoIXUpdGhyb3cgZTtyZXR1cm4gbz90KG8saSk6bnVsbH1yZXR1cm4gaS5kaXNwbGF5TmFtZT1cIkxhenlcIixpLl9fZj0hMCxpfWZ1bmN0aW9uIEIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1lLnVubW91bnQ9ZnVuY3Rpb24obil7dmFyIHQ9bi5fX2M7dCYmKHQuX196PSEwKSx0JiZ0Ll9fUiYmdC5fX1IoKSx0JiYzMiZuLl9fdSYmKG4udHlwZT1udWxsKSxVJiZVKG4pfSwoUC5wcm90b3R5cGU9bmV3IG4pLl9fYz1mdW5jdGlvbihuLHQpe3ZhciBlPXQuX19jLHI9dGhpcztudWxsPT1yLm8mJihyLm89W10pLHIuby5wdXNoKGUpO3ZhciB1PWooci5fX3YpLG89ITEsaT1mdW5jdGlvbigpe298fHIuX196fHwobz0hMCxlLl9fUj1udWxsLHU/dShjKTpjKCkpfTtlLl9fUj1pO3ZhciBsPWUuX19QO2UuX19QPW51bGw7dmFyIGM9ZnVuY3Rpb24oKXtpZighLS1yLl9fdSl7aWYoci5zdGF0ZS5fX2Epe3ZhciBuPXIuc3RhdGUuX19hO3IuX192Ll9fa1swXT1XKG4sbi5fX2MuX19QLG4uX19jLl9fTyl9dmFyIHQ7Zm9yKHIuc2V0U3RhdGUoe19fYTpyLl9fYj1udWxsfSk7dD1yLm8ucG9wKCk7KXQuX19QPWwsdC5mb3JjZVVwZGF0ZSgpfX07ci5fX3UrK3x8MzImdC5fX3V8fHIuc2V0U3RhdGUoe19fYTpyLl9fYj1yLl9fdi5fX2tbMF19KSxuLnRoZW4oaSxpKX0sUC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LFAucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihuLGUpe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksbz10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1WKHRoaXMuX19iLHIsby5fX089by5fX1ApfXRoaXMuX19iPW51bGx9dmFyIGk9ZS5fX2EmJnQodSxudWxsLG4uZmFsbGJhY2spO3JldHVybiBpJiYoaS5fX3UmPS0zMyksW3QodSxudWxsLGUuX19hP251bGw6bi5jaGlsZHJlbiksaV19O3ZhciBIPWZ1bmN0aW9uKG4sdCxlKXtpZigrK2VbMV09PT1lWzBdJiZuLmwuZGVsZXRlKHQpLG4ucHJvcHMucmV2ZWFsT3JkZXImJihcInRcIiE9PW4ucHJvcHMucmV2ZWFsT3JkZXJbMF18fCFuLmwuc2l6ZSkpZm9yKGU9bi5pO2U7KXtmb3IoO2UubGVuZ3RoPjM7KWUucG9wKCkoKTtpZihlWzFdPGVbMF0pYnJlYWs7bi5pPWU9ZVsyXX19O2Z1bmN0aW9uIFoobil7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uY29udGV4dH0sbi5jaGlsZHJlbn1mdW5jdGlvbiBZKG4pe3ZhciBlPXRoaXMscj1uLmg7aWYoZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe28obnVsbCxlLnYpLGUudj1udWxsLGUuaD1udWxsfSxlLmgmJmUuaCE9PXImJmUuY29tcG9uZW50V2lsbFVubW91bnQoKSwhZS52KXtmb3IodmFyIHU9ZS5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXztlLmg9cixlLnY9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpyLGNoaWxkTm9kZXM6W10sX19rOntfX206dS5fX219LGNvbnRhaW5zOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5hbWVzcGFjZVVSSTpyLm5hbWVzcGFjZVVSSSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24obix0KXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmguaW5zZXJ0QmVmb3JlKG4sdCl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKG4pe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2Yobik+Pj4xLDEpLGUuaC5yZW1vdmVDaGlsZChuKX19fW8odChaLHtjb250ZXh0OmUuY29udGV4dH0sbi5fX3YpLGUudil9ZnVuY3Rpb24gJChuLGUpe3ZhciByPXQoWSx7X192Om4saDplfSk7cmV0dXJuIHIuY29udGFpbmVySW5mbz1lLHJ9KEIucHJvdG90eXBlPW5ldyBuKS5fX2E9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcyxlPWoodC5fX3YpLHI9dC5sLmdldChuKTtyZXR1cm4gclswXSsrLGZ1bmN0aW9uKHUpe3ZhciBvPWZ1bmN0aW9uKCl7dC5wcm9wcy5yZXZlYWxPcmRlcj8oci5wdXNoKHUpLEgodCxuLHIpKTp1KCl9O2U/ZShvKTpvKCl9fSxCLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obil7dGhpcy5pPW51bGwsdGhpcy5sPW5ldyBNYXA7dmFyIHQ9cihuLmNoaWxkcmVuKTtuLnJldmVhbE9yZGVyJiZcImJcIj09PW4ucmV2ZWFsT3JkZXJbMF0mJnQucmV2ZXJzZSgpO2Zvcih2YXIgZT10Lmxlbmd0aDtlLS07KXRoaXMubC5zZXQodFtlXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gbi5jaGlsZHJlbn0sQi5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPUIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIG49dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbih0LGUpe0gobixlLHQpfSl9O3ZhciBxPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpfHw2MDEwMyxHPS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxKPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sSz0vW0EtWjAtOV0vZyxRPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCxYPWZ1bmN0aW9uKG4pe3JldHVybihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sKCk/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3Qobil9O2Z1bmN0aW9uIG5uKG4sdCxlKXtyZXR1cm4gbnVsbD09dC5fX2smJih0LnRleHRDb250ZW50PVwiXCIpLG8obix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfWZ1bmN0aW9uIHRuKG4sdCxlKXtyZXR1cm4gaShuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKSxuP24uX19jOm51bGx9bi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbXCJjb21wb25lbnRXaWxsTW91bnRcIixcImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNcIixcImNvbXBvbmVudFdpbGxVcGRhdGVcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsdCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW1wiVU5TQUZFX1wiK3RdfSxzZXQ6ZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm59KX19KX0pO3ZhciBlbj1lLmV2ZW50O2UuZXZlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGVuJiYobj1lbihuKSksbi5wZXJzaXN0PWZ1bmN0aW9uKCl7fSxuLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSxuLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LG4ubmF0aXZlRXZlbnQ9bn07dmFyIHJuLHVuPXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxvbj1lLnZub2RlO2Uudm5vZGU9ZnVuY3Rpb24obil7XCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSYmZnVuY3Rpb24obil7dmFyIHQ9bi5wcm9wcyxlPW4udHlwZSx1PXt9LG89LTE9PWUuaW5kZXhPZihcIi1cIik7Zm9yKHZhciBpIGluIHQpe3ZhciBsPXRbaV07aWYoIShcInZhbHVlXCI9PT1pJiZcImRlZmF1bHRWYWx1ZVwiaW4gdCYmbnVsbD09bHx8USYmXCJjaGlsZHJlblwiPT09aSYmXCJub3NjcmlwdFwiPT09ZXx8XCJjbGFzc1wiPT09aXx8XCJjbGFzc05hbWVcIj09PWkpKXt2YXIgYz1pLnRvTG93ZXJDYXNlKCk7XCJkZWZhdWx0VmFsdWVcIj09PWkmJlwidmFsdWVcImluIHQmJm51bGw9PXQudmFsdWU/aT1cInZhbHVlXCI6XCJkb3dubG9hZFwiPT09aSYmITA9PT1sP2w9XCJcIjpcInRyYW5zbGF0ZVwiPT09YyYmXCJub1wiPT09bD9sPSExOlwib1wiPT09Y1swXSYmXCJuXCI9PT1jWzFdP1wib25kb3VibGVjbGlja1wiPT09Yz9pPVwib25kYmxjbGlja1wiOlwib25jaGFuZ2VcIiE9PWN8fFwiaW5wdXRcIiE9PWUmJlwidGV4dGFyZWFcIiE9PWV8fFgodC50eXBlKT9cIm9uZm9jdXNcIj09PWM/aT1cIm9uZm9jdXNpblwiOlwib25ibHVyXCI9PT1jP2k9XCJvbmZvY3Vzb3V0XCI6Si50ZXN0KGkpJiYoaT1jKTpjPWk9XCJvbmlucHV0XCI6byYmRy50ZXN0KGkpP2k9aS5yZXBsYWNlKEssXCItJCZcIikudG9Mb3dlckNhc2UoKTpudWxsPT09bCYmKGw9dm9pZCAwKSxcIm9uaW5wdXRcIj09PWMmJnVbaT1jXSYmKGk9XCJvbmlucHV0Q2FwdHVyZVwiKSx1W2ldPWx9fVwic2VsZWN0XCI9PWUmJih1Lm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHUudmFsdWUpJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD0tMSE9dS52YWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpfSkpLG51bGwhPXUuZGVmYXVsdFZhbHVlJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD11Lm11bHRpcGxlPy0xIT11LmRlZmF1bHRWYWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpOnUuZGVmYXVsdFZhbHVlPT1uLnByb3BzLnZhbHVlfSkpKSx0LmNsYXNzJiYhdC5jbGFzc05hbWU/KHUuY2xhc3M9dC5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxcImNsYXNzTmFtZVwiLHVuKSk6dC5jbGFzc05hbWUmJih1LmNsYXNzPXUuY2xhc3NOYW1lPXQuY2xhc3NOYW1lKSxuLnByb3BzPXV9KG4pLG4uJCR0eXBlb2Y9cSxvbiYmb24obil9O3ZhciBsbj1lLl9fcjtlLl9fcj1mdW5jdGlvbihuKXtsbiYmbG4obikscm49bi5fX2N9O3ZhciBjbj1lLmRpZmZlZDtlLmRpZmZlZD1mdW5jdGlvbihuKXtjbiYmY24obik7dmFyIHQ9bi5wcm9wcyxlPW4uX19lO251bGwhPWUmJlwidGV4dGFyZWFcIj09PW4udHlwZSYmXCJ2YWx1ZVwiaW4gdCYmdC52YWx1ZSE9PWUudmFsdWUmJihlLnZhbHVlPW51bGw9PXQudmFsdWU/XCJcIjp0LnZhbHVlKSxybj1udWxsfTt2YXIgZm49e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKG4pe3JldHVybiBybi5fX25bbi5fX2NdLnByb3BzLnZhbHVlfSx1c2VDYWxsYmFjazp2LHVzZUNvbnRleHQ6ZCx1c2VEZWJ1Z1ZhbHVlOm0sdXNlRGVmZXJyZWRWYWx1ZTp3LHVzZUVmZmVjdDpoLHVzZUlkOnAsdXNlSW1wZXJhdGl2ZUhhbmRsZTp5LHVzZUluc2VydGlvbkVmZmVjdDpJLHVzZUxheW91dEVmZmVjdDpzLHVzZU1lbW86Xyx1c2VSZWR1Y2VyOmIsdXNlUmVmOlMsdXNlU3RhdGU6YSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpDLHVzZVRyYW5zaXRpb246a319fSxhbj1cIjE4LjMuMVwiO2Z1bmN0aW9uIHNuKG4pe3JldHVybiB0LmJpbmQobnVsbCxuKX1mdW5jdGlvbiBobihuKXtyZXR1cm4hIW4mJm4uJCR0eXBlb2Y9PT1xfWZ1bmN0aW9uIHZuKG4pe3JldHVybiBobihuKSYmbi50eXBlPT09dX1mdW5jdGlvbiBkbihuKXtyZXR1cm4hIW4mJlwic3RyaW5nXCI9PXR5cGVvZiBuLmRpc3BsYXlOYW1lJiYwPT1uLmRpc3BsYXlOYW1lLmluZGV4T2YoXCJNZW1vKFwiKX1mdW5jdGlvbiBtbihuKXtyZXR1cm4gaG4obik/Zi5hcHBseShudWxsLGFyZ3VtZW50cyk6bn1mdW5jdGlvbiBwbihuKXtyZXR1cm4hIW4uX19rJiYobyhudWxsLG4pLCEwKX1mdW5jdGlvbiB5bihuKXtyZXR1cm4gbiYmKG4uYmFzZXx8MT09PW4ubm9kZVR5cGUmJm4pfHxudWxsfXZhciBfbj1mdW5jdGlvbihuLHQpe3JldHVybiBuKHQpfSxibj1mdW5jdGlvbihuLHQpe3ZhciByPWUuZGVib3VuY2VSZW5kZXJpbmc7ZS5kZWJvdW5jZVJlbmRlcmluZz1mdW5jdGlvbihuKXtyZXR1cm4gbigpfTt2YXIgdT1uKHQpO3JldHVybiBlLmRlYm91bmNlUmVuZGVyaW5nPXIsdX0sU249aG4sZ249e3VzZVN0YXRlOmEsdXNlSWQ6cCx1c2VSZWR1Y2VyOmIsdXNlRWZmZWN0OmgsdXNlTGF5b3V0RWZmZWN0OnMsdXNlSW5zZXJ0aW9uRWZmZWN0OkksdXNlVHJhbnNpdGlvbjprLHVzZURlZmVycmVkVmFsdWU6dyx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpDLHN0YXJ0VHJhbnNpdGlvbjp4LHVzZVJlZjpTLHVzZUltcGVyYXRpdmVIYW5kbGU6eSx1c2VNZW1vOl8sdXNlQ2FsbGJhY2s6dix1c2VDb250ZXh0OmQsdXNlRGVidWdWYWx1ZTptLHZlcnNpb246XCIxOC4zLjFcIixDaGlsZHJlbjpMLHJlbmRlcjpubixoeWRyYXRlOnRuLHVubW91bnRDb21wb25lbnRBdE5vZGU6cG4sY3JlYXRlUG9ydGFsOiQsY3JlYXRlRWxlbWVudDp0LGNyZWF0ZUNvbnRleHQ6bCxjcmVhdGVGYWN0b3J5OnNuLGNsb25lRWxlbWVudDptbixjcmVhdGVSZWY6YyxGcmFnbWVudDp1LGlzVmFsaWRFbGVtZW50OmhuLGlzRWxlbWVudDpTbixpc0ZyYWdtZW50OnZuLGlzTWVtbzpkbixmaW5kRE9NTm9kZTp5bixDb21wb25lbnQ6bixQdXJlQ29tcG9uZW50Ok0sbWVtbzpOLGZvcndhcmRSZWY6RCxmbHVzaFN5bmM6Ym4sdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6X24sU3RyaWN0TW9kZTp1LFN1c3BlbnNlOlAsU3VzcGVuc2VMaXN0OkIsbGF6eTp6LF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOmZufTtleHBvcnR7TCBhcyBDaGlsZHJlbixNIGFzIFB1cmVDb21wb25lbnQsUCBhcyBTdXNwZW5zZSxCIGFzIFN1c3BlbnNlTGlzdCxmbiBhcyBfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCxtbiBhcyBjbG9uZUVsZW1lbnQsc24gYXMgY3JlYXRlRmFjdG9yeSwkIGFzIGNyZWF0ZVBvcnRhbCxnbiBhcyBkZWZhdWx0LHluIGFzIGZpbmRET01Ob2RlLGJuIGFzIGZsdXNoU3luYyxEIGFzIGZvcndhcmRSZWYsdG4gYXMgaHlkcmF0ZSxTbiBhcyBpc0VsZW1lbnQsdm4gYXMgaXNGcmFnbWVudCxkbiBhcyBpc01lbW8saG4gYXMgaXNWYWxpZEVsZW1lbnQseiBhcyBsYXp5LE4gYXMgbWVtbyxubiBhcyByZW5kZXIseCBhcyBzdGFydFRyYW5zaXRpb24scG4gYXMgdW5tb3VudENvbXBvbmVudEF0Tm9kZSxfbiBhcyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyx3IGFzIHVzZURlZmVycmVkVmFsdWUsSSBhcyB1c2VJbnNlcnRpb25FZmZlY3QsQyBhcyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSxrIGFzIHVzZVRyYW5zaXRpb24sYW4gYXMgdmVyc2lvbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21wYXQubW9kdWxlLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIEZvY3VzIHRyYXAuXG4gKlxuICogS2VlcHMgVGFiIC8gU2hpZnQrVGFiIGluc2lkZSBhIHJvb3QgZWxlbWVudC4gUmV0dXJucyBhIGNsZWFudXAgdGhhdFxuICogcmVzdG9yZXMgZm9jdXMgdG8gdGhlIGVsZW1lbnQgdGhhdCB3YXMgYWN0aXZlIGJlZm9yZSB0aGUgdHJhcCBtb3VudGVkLlxuICogU2ltcGxlIGFuZCBzeW5jaHJvbm91cyDigJQgYXNzdW1lcyBhIHNpbmdsZSBhY3RpdmUgdHJhcCBwZXIgT3ZlcmxheVJvb3RcbiAqIGFuZCBsZXRzIHRoZSBvdmVybGF5IHJlZ2lzdHJ5IGluIGBAZmFpcmZveC9wb2xseS9hY3Rpb25zYCBlbmZvcmNlIHRoYXRcbiAqIGF0IHRoZSBzdGFjayBsZXZlbC5cbiAqL1xuXG5jb25zdCBGT0NVU0FCTEVfU0VMRUNUT1IgPSBbXG4gIFwiYVtocmVmXVwiLFxuICBcImFyZWFbaHJlZl1cIixcbiAgXCJidXR0b246bm90KFtkaXNhYmxlZF0pXCIsXG4gIFwiaW5wdXQ6bm90KFtkaXNhYmxlZF0pOm5vdChbdHlwZT1oaWRkZW5dKVwiLFxuICBcInNlbGVjdDpub3QoW2Rpc2FibGVkXSlcIixcbiAgXCJ0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSlcIixcbiAgXCJpZnJhbWVcIixcbiAgXCJvYmplY3RcIixcbiAgXCJlbWJlZFwiLFxuICAnW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJyxcbiAgXCJbY29udGVudGVkaXRhYmxlXVwiLFxuXS5qb2luKFwiLFwiKTtcblxuZnVuY3Rpb24gZ2V0Rm9jdXNhYmxlKHJvb3Q6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSB7XG4gIGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShyb290LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KEZPQ1VTQUJMRV9TRUxFQ1RPUikpO1xuICByZXR1cm4gbm9kZXMuZmlsdGVyKFxuICAgIChlbCkgPT4gIWVsLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpICYmIGVsLmdldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIpICE9PSBcInRydWVcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbEZvY3VzVHJhcChyb290OiBIVE1MRWxlbWVudCk6ICgpID0+IHZvaWQge1xuICBjb25zdCBwcmV2aW91c0FjdGl2ZSA9IChcbiAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IDogbnVsbFxuICApIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAvLyBNb3ZlIGZvY3VzIGludG8gdGhlIHJvb3QgaWYgaXQncyBub3QgYWxyZWFkeS5cbiAgY29uc3QgZm9jdXNhYmxlID0gZ2V0Rm9jdXNhYmxlKHJvb3QpO1xuICBjb25zdCBmaXJzdCA9IGZvY3VzYWJsZVswXSA/PyByb290O1xuICBpZiAoIXJvb3QuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICBmaXJzdC5mb2N1cygpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgIT09IFwiVGFiXCIpIHJldHVybjtcbiAgICBjb25zdCBpdGVtcyA9IGdldEZvY3VzYWJsZShyb290KTtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdEl0ZW0gPSBpdGVtc1swXTtcbiAgICBjb25zdCBsYXN0SXRlbSA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdO1xuICAgIGlmICghZmlyc3RJdGVtIHx8ICFsYXN0SXRlbSkgcmV0dXJuO1xuICAgIGNvbnN0IGFjdGl2ZSA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBpZiAoYWN0aXZlID09PSBmaXJzdEl0ZW0gfHwgIXJvb3QuY29udGFpbnMoYWN0aXZlKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBsYXN0SXRlbS5mb2N1cygpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWN0aXZlID09PSBsYXN0SXRlbSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGZpcnN0SXRlbS5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG4gICAgaWYgKHByZXZpb3VzQWN0aXZlICYmIGRvY3VtZW50LmNvbnRhaW5zKHByZXZpb3VzQWN0aXZlKSkge1xuICAgICAgcHJldmlvdXNBY3RpdmUuZm9jdXMoKTtcbiAgICB9XG4gIH07XG59XG4iLAogICAgIi8qKlxuICogU2Nyb2xsIGxvY2suXG4gKlxuICogUmVmZXJlbmNlLWNvdW50ZWQuIE11bHRpcGxlIG92ZXJsYXlzIGNhbiByZXF1ZXN0IGEgbG9jazsgdGhlIGJvZHlcbiAqIHN0YXlzIGxvY2tlZCB1bnRpbCBldmVyeSByZXF1ZXN0IHJlbGVhc2VzLiBBIHNjcm9sbGJhci1ndXR0ZXIgdG9rZW5cbiAqIGlzIHdyaXR0ZW4gYXQgYWNxdWlyZSB0aW1lIHNvIGNvbnRlbnQgYmVoaW5kIHRoZSBvdmVybGF5IGRvZXNuJ3RcbiAqIHJlZmxvdyB3aGVuIHRoZSBiYXIgZGlzYXBwZWFycy5cbiAqL1xuXG5sZXQgY291bnQgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gYWNxdWlyZVNjcm9sbExvY2soKTogKCkgPT4gdm9pZCB7XG4gIGlmIChjb3VudCA9PT0gMCkge1xuICAgIGNvbnN0IGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgY29uc3QgZ3V0dGVyID0gd2luZG93LmlubmVyV2lkdGggLSBodG1sLmNsaWVudFdpZHRoO1xuICAgIGh0bWwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvbGx5LXNjcm9sbGJhci1ndXR0ZXJcIiwgYCR7Z3V0dGVyfXB4YCk7XG4gICAgaHRtbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXBvbGx5LXNjcm9sbC1sb2NrZWRcIiwgXCJ0cnVlXCIpO1xuICB9XG4gIGNvdW50ICs9IDE7XG4gIGxldCByZWxlYXNlZCA9IGZhbHNlO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmIChyZWxlYXNlZCkgcmV0dXJuO1xuICAgIHJlbGVhc2VkID0gdHJ1ZTtcbiAgICBjb3VudCAtPSAxO1xuICAgIGlmIChjb3VudCA8PSAwKSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgICBjb25zdCBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgaHRtbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXBvbGx5LXNjcm9sbC1sb2NrZWRcIik7XG4gICAgICBodG1sLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwiLS1wb2xseS1zY3JvbGxiYXItZ3V0dGVyXCIpO1xuICAgIH1cbiAgfTtcbn1cbiIsCiAgICAiLyoqXG4gKiBPdmVybGF5Um9vdCDigJQgcG9ydGFsIHRhcmdldCBmb3Igc3RhY2tlZCBvdmVybGF5cy5cbiAqXG4gKiBBcHBzIHJlbmRlciA8T3ZlcmxheVJvb3QgLz4gb25jZSwgdHlwaWNhbGx5IGFzIHRoZSBsYXN0IGNoaWxkIG9mIHRoZVxuICogYXBwIHJvb3QuIE1vZGFsLCBDb25maXJtRGlhbG9nLCBhbmQgVG9hc3QgcG9ydGFsIGludG8gdGhpcyBlbGVtZW50O1xuICogdGhlIHNjcm9sbCBsb2NrIHRvZ2dsZXMgYmFzZWQgb24gdGhlIG92ZXJsYXkgcmVnaXN0cnkgY291bnQuXG4gKi9cblxuaW1wb3J0IHsgZWZmZWN0IH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBoYXNPcGVuT3ZlcmxheSB9IGZyb20gXCIuLi9hY3Rpb25zL292ZXJsYXkudHNcIjtcbmltcG9ydCB7IGFjcXVpcmVTY3JvbGxMb2NrIH0gZnJvbSBcIi4vaW50ZXJuYWwvc2Nyb2xsLWxvY2sudHNcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL092ZXJsYXlSb290Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIE92ZXJsYXlSb290KCkge1xuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IHJlbGVhc2U6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IGRpc3Bvc2UgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGhhc09wZW5PdmVybGF5KCkpIHtcbiAgICAgICAgaWYgKCFyZWxlYXNlKSByZWxlYXNlID0gYWNxdWlyZVNjcm9sbExvY2soKTtcbiAgICAgIH0gZWxzZSBpZiAocmVsZWFzZSkge1xuICAgICAgICByZWxlYXNlKCk7XG4gICAgICAgIHJlbGVhc2UgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkaXNwb3NlKCk7XG4gICAgICByZWxlYXNlPy4oKTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIDxkaXYgcmVmPXtyZWZ9IGNsYXNzPXtjbGFzc2VzW1wicm9vdFwiXX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LW92ZXJsYXktcm9vdCAvPjtcbn1cblxuLyoqIEdldCB0aGUgbW91bnQgbm9kZSBmb3IgcG9ydGFsZWQgb3ZlcmxheXMuIFJldHVybnMgbnVsbCBiZWZvcmUgbW91bnQuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3ZlcmxheVJvb3ROb2RlKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcIltkYXRhLXBvbGx5LW92ZXJsYXktcm9vdF1cIik7XG59XG4iLAogICAgIi8qKlxuICogTW9kYWwg4oCUIGNvbXBvdW5kIGRpYWxvZyB3aXRoIGZvY3VzIHRyYXAsIEVzY2FwZSBoYW5kbGluZywgcG9ydGFsLFxuICogYW5kIG92ZXJsYXktc3RhY2sgaW50ZWdyYXRpb24uXG4gKlxuICogUm9vdCB0YWtlcyBhIGB3aGVuYCBzaWduYWwgKG9yIGJvb2xlYW4pLiBXaGVuIHRydXRoeSB0aGUgY29udGVudCBtb3VudHNcbiAqIGludG8gdGhlIE92ZXJsYXlSb290IHBvcnRhbCwgZm9jdXMgbW92ZXMgaW5zaWRlLCBUYWIgaXMgdHJhcHBlZCwgRXNjYXBlXG4gKiBmaXJlcyBgZGF0YS1hY3Rpb249XCJtb2RhbDpjbG9zZVwiYCAob3IgdGhlIG92ZXJsYXkgcmVnaXN0cnkncyBvbkNsb3NlXG4gKiBjYWxsYmFjayksIGFuZCB0aGUgYm9keSBzY3JvbGwgbG9ja3MuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZWFkb25seVNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUNvbnRleHQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcbmltcG9ydCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlSWQsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBwb3BPdmVybGF5LCBwdXNoT3ZlcmxheSB9IGZyb20gXCIuLi9hY3Rpb25zL292ZXJsYXkudHNcIjtcbmltcG9ydCB7IGluc3RhbGxGb2N1c1RyYXAgfSBmcm9tIFwiLi9pbnRlcm5hbC9mb2N1cy10cmFwLnRzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Nb2RhbC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBnZXRPdmVybGF5Um9vdE5vZGUgfSBmcm9tIFwiLi9PdmVybGF5Um9vdC50c3hcIjtcbmltcG9ydCB7IFN1cmZhY2UgfSBmcm9tIFwiLi9TdXJmYWNlLnRzeFwiO1xuXG50eXBlIE1vZGFsQ29udGV4dCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGVJZDogc3RyaW5nO1xuICBkZXNjSWQ6IHN0cmluZztcbiAgY2xvc2U6ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBDdHggPSBjcmVhdGVDb250ZXh0PE1vZGFsQ29udGV4dCB8IG51bGw+KG51bGwpO1xuXG5mdW5jdGlvbiB1c2VNb2RhbCgpOiBNb2RhbENvbnRleHQge1xuICBjb25zdCBjdHggPSB1c2VDb250ZXh0KEN0eCk7XG4gIGlmICghY3R4KSB0aHJvdyBuZXcgRXJyb3IoXCJNb2RhbCBzdWItY29tcG9uZW50cyBtdXN0IHJlbmRlciBpbnNpZGUgPE1vZGFsLlJvb3Q+XCIpO1xuICByZXR1cm4gY3R4O1xufVxuXG50eXBlIFJvb3RQcm9wcyA9IHtcbiAgd2hlbjogUmVhZG9ubHlTaWduYWw8Ym9vbGVhbj4gfCBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICAvKiogQWNjZXNzaWJsZSBsYWJlbCBzb3VyY2U6IFwidGl0bGVcIiB1c2VzIHRoZSA8TW9kYWwuVGl0bGU+IGlkLCBvciBwYXNzIGFuIGV4cGxpY2l0IGxhYmVsLiAqL1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFJvb3QoeyB3aGVuLCBvbkNsb3NlLCBjaGlsZHJlbiwgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCB9OiBSb290UHJvcHMpIHtcbiAgY29uc3QgaWQgPSB1c2VJZCgpO1xuICBjb25zdCB0aXRsZUlkID0gYCR7aWR9LXRpdGxlYDtcbiAgY29uc3QgZGVzY0lkID0gYCR7aWR9LWRlc2NgO1xuICBjb25zdCBtb3VudFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbcG9ydGFsTm9kZSwgc2V0UG9ydGFsTm9kZV0gPSB1c2VTdGF0ZTxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGlzT3BlbiA9IHR5cGVvZiB3aGVuID09PSBcImJvb2xlYW5cIiA/IHdoZW4gOiB3aGVuLnZhbHVlO1xuXG4gIC8vIENvbnN1bWVycyBhbG1vc3QgYWx3YXlzIHBhc3MgYW4gaW5saW5lIGNsb3N1cmUgZm9yIGBvbkNsb3NlYCwgc28gdGhlIHByb3BcbiAgLy8gaGFzIGEgbmV3IGlkZW50aXR5IG9uIGV2ZXJ5IHJlbmRlci4gS2VlcGluZyBpdCBpbiB0aGUgb3ZlcmxheSBlZmZlY3Qnc1xuICAvLyBkZXBlbmRlbmN5IGFycmF5IG1hZGUgdGhhdCBlZmZlY3QgdGVhciBkb3duIGFuZCByZS1pbnN0YWxsIHBlciByZW5kZXI6XG4gIC8vIGVhY2ggcnVuIHdyb3RlIHRoZSBgc3RhY2tgIHNpZ25hbCB0d2ljZSBhbmQgbW92ZWQgZm9jdXMgdHdpY2UsIGFuZCB0aGVcbiAgLy8gc2lnbmFsIHdyaXRlIHJlLXJlbmRlcmVkIHRoZSBzdWJzY3JpYmVyIHRoYXQgcHJvZHVjZWQgdGhlIG5leHQgY2xvc3VyZS5cbiAgLy8gVGhlIHJlc3VsdCB3YXMgYW4gdW5ib3VuZGVkIHJlbmRlciBsb29wIHRoYXQgcGlubmVkIHRoZSBtYWluIHRocmVhZFxuICAvLyAocG9sbHkjMTc3KS4gVGhlIGVmZmVjdCBub3cgcmVhZHMgdGhlIGxhdGVzdCBjYWxsYmFjayB0aHJvdWdoIGEgcmVmLCBzb1xuICAvLyBpdHMgZGVwZW5kZW5jaWVzIGFyZSBvbmx5IHRoZSB2YWx1ZXMgdGhhdCBnZW51aW5lbHkgcmUtb3BlbiB0aGUgb3ZlcmxheS5cbiAgY29uc3Qgb25DbG9zZVJlZiA9IHVzZVJlZihvbkNsb3NlKTtcbiAgb25DbG9zZVJlZi5jdXJyZW50ID0gb25DbG9zZTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICBzZXRQb3J0YWxOb2RlKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRQb3J0YWxOb2RlKGdldE92ZXJsYXlSb290Tm9kZSgpKTtcbiAgfSwgW2lzT3Blbl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4gfHwgIXBvcnRhbE5vZGUpIHJldHVybjtcbiAgICBjb25zdCBlbnRyeSA9IHsgaWQsIG9uQ2xvc2U6ICgpID0+IG9uQ2xvc2VSZWYuY3VycmVudD8uKCkgfTtcbiAgICBwdXNoT3ZlcmxheShlbnRyeSk7XG4gICAgY29uc3QgZWwgPSBtb3VudFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGNsZWFudXAgPSBlbFxuICAgICAgPyBpbnN0YWxsRm9jdXNUcmFwKGVsKVxuICAgICAgOiAoKSA9PiB7XG4gICAgICAgICAgLyogbm8gcmVmIHlldCAqL1xuICAgICAgICB9O1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICBwb3BPdmVybGF5KGlkKTtcbiAgICB9O1xuICB9LCBbaXNPcGVuLCBwb3J0YWxOb2RlLCBpZF0pO1xuXG4gIGlmICghaXNPcGVuIHx8ICFwb3J0YWxOb2RlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICBvbkNsb3NlPy4oKTtcbiAgfTtcblxuICBjb25zdCBjdHg6IE1vZGFsQ29udGV4dCA9IHsgaWQsIHRpdGxlSWQsIGRlc2NJZCwgY2xvc2UgfTtcblxuICBjb25zdCBjb250ZW50ID0gKFxuICAgIDxDdHguUHJvdmlkZXIgdmFsdWU9e2N0eH0+XG4gICAgICA8TGF5b3V0XG4gICAgICAgIGVsZW1lbnRSZWY9e21vdW50UmVmfVxuICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAganVzdGlmeUl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgaGVpZ2h0PVwiMTAwJVwiXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc1tcImNvbnRhaW5lclwiXX1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LW1vZGFsLWNvbnRlbnRcbiAgICAgICAgZGF0YS1vdmVybGF5LWlkPXtpZH1cbiAgICAgICAgZGF0YS1zdGF0ZT1cIm9wZW5cIlxuICAgICAgICByb2xlPVwiZGlhbG9nXCJcbiAgICAgICAgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgICBhcmlhLWxhYmVsbGVkYnk9e2FyaWFMYWJlbCA/IHVuZGVmaW5lZCA6IHRpdGxlSWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17ZGVzY0lkfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0xheW91dD5cbiAgICA8L0N0eC5Qcm92aWRlcj5cbiAgKTtcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKGNvbnRlbnQsIHBvcnRhbE5vZGUpO1xufVxuXG5mdW5jdGlvbiBCYWNrZHJvcCgpIHtcbiAgY29uc3QgeyBjbG9zZSB9ID0gdXNlTW9kYWwoKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzPXtjbGFzc2VzW1wiYmFja2Ryb3BcIl19IGRhdGEtcG9sbHktbW9kYWwtYmFja2Ryb3Agb25DbGljaz17Y2xvc2V9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICk7XG59XG5cbnR5cGUgQ29udGVudFByb3BzID0ge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBKU1guQ1NTUHJvcGVydGllcztcbn07XG5cbmZ1bmN0aW9uIENvbnRlbnQoeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBzdHlsZSB9OiBDb250ZW50UHJvcHMpIHtcbiAgY29uc3QgY2xzID0gY2xhc3NOYW1lID8gYCR7Y2xhc3Nlc1tcInN1cmZhY2VcIl19ICR7Y2xhc3NOYW1lfWAgOiBjbGFzc2VzW1wic3VyZmFjZVwiXTtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgdmFyaWFudD1cInJhaXNlZFwiXG4gICAgICByYWRpdXM9XCJsZ1wiXG4gICAgICBzaGFkb3c9XCJsZ1wiXG4gICAgICBwb3NpdGlvbj1cInJlbGF0aXZlXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xzfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgZGF0YS1wb2xseS1tb2RhbC1zdXJmYWNlXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSGVhZGVyKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxoZWFkZXIgY2xhc3M9e2NsYXNzZXNbXCJoZWFkZXJcIl19IGRhdGEtcG9sbHktbW9kYWwtaGVhZGVyPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvaGVhZGVyPlxuICApO1xufVxuXG5mdW5jdGlvbiBUaXRsZSh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuIH0pIHtcbiAgY29uc3QgeyB0aXRsZUlkIH0gPSB1c2VNb2RhbCgpO1xuICByZXR1cm4gKFxuICAgIDxoMiBpZD17dGl0bGVJZH0gY2xhc3M9e2NsYXNzZXNbXCJ0aXRsZVwiXX0gZGF0YS1wb2xseS1tb2RhbC10aXRsZT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2gyPlxuICApO1xufVxuXG5mdW5jdGlvbiBCb2R5KHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICBjb25zdCB7IGRlc2NJZCB9ID0gdXNlTW9kYWwoKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGlkPXtkZXNjSWR9IGNsYXNzPXtjbGFzc2VzW1wiYm9keVwiXX0gZGF0YS1wb2xseS1tb2RhbC1ib2R5PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBGb290ZXIoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPGZvb3RlciBjbGFzcz17Y2xhc3Nlc1tcImZvb3RlclwiXX0gZGF0YS1wb2xseS1tb2RhbC1mb290ZXI+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9mb290ZXI+XG4gICk7XG59XG5cbnR5cGUgQ2xvc2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICAvKiogRmlyZSBhIHJlZ2lzdGVyZWQgZGF0YS1hY3Rpb24gaW5zdGVhZCBvZiBjYWxsaW5nIHRoZSBvbkNsb3NlIGNhbGxiYWNrLiAqL1xuICBhY3Rpb24/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBDbG9zZSh7IGNoaWxkcmVuLCBhY3Rpb24gfTogQ2xvc2VQcm9wcykge1xuICBjb25zdCB7IGNsb3NlIH0gPSB1c2VNb2RhbCgpO1xuICBpZiAoYWN0aW9uKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiY2xvc2VcIl19XG4gICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgZGF0YS1wb2xseS1pbnRlcmFjdGl2ZVxuICAgICAgICBkYXRhLXBvbGx5LW1vZGFsLWNsb3NlXG4gICAgICAgIGRhdGEtYWN0aW9uPXthY3Rpb259XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPXtjbGFzc2VzW1wiY2xvc2VcIl19XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICBkYXRhLXBvbGx5LW1vZGFsLWNsb3NlXG4gICAgICBvbkNsaWNrPXtjbG9zZX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBNb2RhbCA9IHtcbiAgUm9vdCxcbiAgQmFja2Ryb3AsXG4gIENvbnRlbnQsXG4gIEhlYWRlcixcbiAgVGl0bGUsXG4gIEJvZHksXG4gIEZvb3RlcixcbiAgQ2xvc2UsXG59O1xuIiwKICAgICIvKipcbiAqIENvbmZpcm1EaWFsb2cg4oCUIFByb21pc2UtcmV0dXJuaW5nIGNvbmZpcm1hdGlvbiBwcmltaXRpdmUuXG4gKlxuICogYGNvbmZpcm0oeyB0aXRsZSwgYm9keSwgZGFuZ2VyIH0pYCByZXR1cm5zIFByb21pc2U8Ym9vbGVhbj4uIE9wZW5zIHRoZVxuICogcmVuZGVyZWQgYDxDb25maXJtRGlhbG9nLkhvc3QgLz5gIG1vZGFsICh3aGljaCBtdXN0IGJlIG1vdW50ZWQgb25jZSBhdFxuICogdGhlIGFwcCByb290KS4gVXNlciBwaWNraW5nIGNvbmZpcm0gb3IgY2FuY2VsIHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogRXNjYXBlLCBiYWNrZHJvcCBjbGljaywgYW5kIGV4cGxpY2l0IGAuZGlzbWlzcygpYCByZXNvbHZlIGZhbHNlLlxuICovXG5cbmltcG9ydCB7IHNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ29uZmlybURpYWxvZy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gXCIuL01vZGFsLnRzeFwiO1xuXG50eXBlIENvbmZpcm1SZXF1ZXN0ID0ge1xuICBpZDogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nO1xuICBkYW5nZXI/OiBib29sZWFuO1xuICBjb25maXJtTGFiZWw/OiBzdHJpbmc7XG4gIGNhbmNlbExhYmVsPzogc3RyaW5nO1xuICByZXNvbHZlOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XG59O1xuXG5jb25zdCBwZW5kaW5nID0gc2lnbmFsPENvbmZpcm1SZXF1ZXN0IHwgbnVsbD4obnVsbCk7XG5jb25zdCBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xubGV0IG5leHRJZCA9IDA7XG5cbmV4cG9ydCB0eXBlIENvbmZpcm1PcHRpb25zID0ge1xuICB0aXRsZTogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nO1xuICBkYW5nZXI/OiBib29sZWFuO1xuICBjb25maXJtTGFiZWw/OiBzdHJpbmc7XG4gIGNhbmNlbExhYmVsPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpcm0ob3B0aW9uczogQ29uZmlybU9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XG4gICAgbmV4dElkICs9IDE7XG4gICAgcGVuZGluZy52YWx1ZSA9IHtcbiAgICAgIGlkOiBuZXh0SWQsXG4gICAgICB0aXRsZTogb3B0aW9ucy50aXRsZSxcbiAgICAgIGJvZHk6IG9wdGlvbnMuYm9keSxcbiAgICAgIGRhbmdlcjogb3B0aW9ucy5kYW5nZXIsXG4gICAgICBjb25maXJtTGFiZWw6IG9wdGlvbnMuY29uZmlybUxhYmVsLFxuICAgICAgY2FuY2VsTGFiZWw6IG9wdGlvbnMuY2FuY2VsTGFiZWwsXG4gICAgICByZXNvbHZlLFxuICAgIH07XG4gICAgaXNPcGVuLnZhbHVlID0gdHJ1ZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlKHJlc3VsdDogYm9vbGVhbik6IHZvaWQge1xuICBjb25zdCBjdXJyZW50ID0gcGVuZGluZy52YWx1ZTtcbiAgaWYgKCFjdXJyZW50KSByZXR1cm47XG4gIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICBwZW5kaW5nLnZhbHVlID0gbnVsbDtcbiAgY3VycmVudC5yZXNvbHZlKHJlc3VsdCk7XG59XG5cbi8qKiBSZW5kZXJzIHRoZSBhY3RpdmUgY29uZmlybSBkaWFsb2cuIE1vdW50IG9uY2UgbmVhciB0aGUgYXBwIHJvb3QuICovXG5mdW5jdGlvbiBIb3N0KCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IGN1cnJlbnQgPSBwZW5kaW5nLnZhbHVlO1xuICBpZiAoIWN1cnJlbnQpIHJldHVybiBudWxsO1xuICByZXR1cm4gKFxuICAgIDxNb2RhbC5Sb290IHdoZW49e2lzT3Blbn0gb25DbG9zZT17KCkgPT4gY2xvc2UoZmFsc2UpfT5cbiAgICAgIDxNb2RhbC5CYWNrZHJvcCAvPlxuICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgIDxNb2RhbC5IZWFkZXI+XG4gICAgICAgICAgPE1vZGFsLlRpdGxlPntjdXJyZW50LnRpdGxlfTwvTW9kYWwuVGl0bGU+XG4gICAgICAgIDwvTW9kYWwuSGVhZGVyPlxuICAgICAgICB7Y3VycmVudC5ib2R5ID8gPE1vZGFsLkJvZHk+e2N1cnJlbnQuYm9keX08L01vZGFsLkJvZHk+IDogbnVsbH1cbiAgICAgICAgPE1vZGFsLkZvb3Rlcj5cbiAgICAgICAgICA8TGF5b3V0XG4gICAgICAgICAgICBjb2x1bW5zPVwiYXV0byBhdXRvXCJcbiAgICAgICAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudD1cImVuZFwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXNbXCJhY3Rpb25zXCJdfVxuICAgICAgICAgICAgZGF0YS1wb2xseS1jb25maXJtLWFjdGlvbnNcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcImNhbmNlbFwiXX1cbiAgICAgICAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktY29uZmlybS1jYW5jZWxcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY2xvc2UoZmFsc2UpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7Y3VycmVudC5jYW5jZWxMYWJlbCA/PyBcIkNhbmNlbFwifVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz17Y3VycmVudC5kYW5nZXIgPyBjbGFzc2VzW1wiY29uZmlybURhbmdlclwiXSA6IGNsYXNzZXNbXCJjb25maXJtXCJdfVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktaW50ZXJhY3RpdmVcbiAgICAgICAgICAgICAgZGF0YS1wb2xseS1jb25maXJtLW9rXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNsb3NlKHRydWUpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7Y3VycmVudC5jb25maXJtTGFiZWwgPz8gXCJPS1wifVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvTW9kYWwuRm9vdGVyPlxuICAgICAgPC9Nb2RhbC5Db250ZW50PlxuICAgIDwvTW9kYWwuUm9vdD5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IENvbmZpcm1EaWFsb2cgPSB7IEhvc3QsIGNvbmZpcm0gfTtcbiIsCiAgICAiLyoqXG4gKiBGaWxlSW5wdXQg4oCUIGEgc3R5bGVkIHRyaWdnZXIgZm9yIHRoZSBuYXRpdmUgZmlsZSBwaWNrZXIuXG4gKlxuICogQSBmaWxlIGlzIGEgYmluYXJ5IG9iamVjdDogaXQgY2Fubm90IHJpZGUgYSBgZGF0YS1hY3Rpb25gIGF0dHJpYnV0ZVxuICogdGhlIHdheSBhIHN0cmluZyB2YWx1ZSBkb2VzLCBzbyBGaWxlSW5wdXQgaXMgdGhlIG9uZSBpbnB1dCBwcmltaXRpdmVcbiAqIHRoYXQgdGFrZXMgYSBjYWxsYmFjay4gYG9uRmlsZXNgIGZpcmVzIHdpdGggdGhlIGNob3NlbiBGaWxlTGlzdC4gVGhlXG4gKiBuYXRpdmUgPGlucHV0IHR5cGU9XCJmaWxlXCI+IHN0YXlzIGluIHRoZSBET00g4oCUIHZpc3VhbGx5IGhpZGRlbiBpbnNpZGVcbiAqIHRoZSA8bGFiZWw+IOKAlCBzbyB0aGUgd2hvbGUgY29udHJvbCBvcGVucyB0aGUgcGlja2VyIGFuZCByZW1haW5zXG4gKiBrZXlib2FyZC1hY2Nlc3NpYmxlIChwb2xseSMxMzUpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vRmlsZUlucHV0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgRmlsZUlucHV0UHJvcHMgPSB7XG4gIC8qKiBGaXJlZCB3aXRoIHRoZSBjaG9zZW4gZmlsZXMgd2hlbmV2ZXIgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLiAqL1xuICBvbkZpbGVzOiAoZmlsZXM6IEZpbGVMaXN0KSA9PiB2b2lkO1xuICAvKiogVmlzaWJsZSB0cmlnZ2VyIHRleHQuIERlZmF1bHQ6ICdDaG9vc2UgZmlsZScuICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogYGFjY2VwdGAgZmlsdGVyIGZvcndhcmRlZCB0byB0aGUgbmF0aXZlIGlucHV0IChlLmcuICdpbWFnZS8qJykuICovXG4gIGFjY2VwdD86IHN0cmluZztcbiAgLyoqIEFsbG93IHNlbGVjdGluZyBtb3JlIHRoYW4gb25lIGZpbGUuICovXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIEZpbGVJbnB1dChwcm9wczogRmlsZUlucHV0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgb25GaWxlcywgbGFiZWwgPSBcIkNob29zZSBmaWxlXCIsIGFjY2VwdCwgbXVsdGlwbGUsIGRpc2FibGVkLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZTogSlNYLlRhcmdldGVkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pOiB2b2lkID0+IHtcbiAgICBjb25zdCB7IGZpbGVzIH0gPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIG9uRmlsZXMoZmlsZXMpO1xuICB9O1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJmaWxlSW5wdXRcIl1dO1xuICBpZiAoZGlzYWJsZWQpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImRpc2FibGVkXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGxhYmVsIGlkPXtpZH0gY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LWZpbGUtaW5wdXQ+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcIm5hdGl2ZVwiXX1cbiAgICAgICAgYWNjZXB0PXthY2NlcHR9XG4gICAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgLz5cbiAgICAgIDxzcGFuPntsYWJlbH08L3NwYW4+XG4gICAgPC9sYWJlbD5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBIdG1sIOKAlCByZW5kZXIgdHJ1c3RlZCwgYWxyZWFkeS1zYW5pdGlzZWQgcmF3IG1hcmt1cC5cbiAqXG4gKiBUaGUgZGVsaWJlcmF0ZSBlc2NhcGUgaGF0Y2ggZm9yIHRoZSByYXJlIHRoaW5nIHBvbGx5LXVpIGNhbm5vdFxuICogZXhwcmVzczogYSBsb2NhbGx5IGdlbmVyYXRlZCwgYWxyZWFkeS1zYWZlIFNWRyAoYSBRUiBjb2RlKSwgYVxuICogcHJlLXJlbmRlcmVkIGRpYWdyYW0uIFRoZSBjYWxsZXIgb3ducyBzYWZldHkg4oCUIGBodG1sYCBnb2VzIHN0cmFpZ2h0XG4gKiBpbnRvIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAsIHNvIGl0IE1VU1QgYmUgdHJ1c3RlZCBvciBzYW5pdGlzZWRcbiAqIGZpcnN0LiBGb3IgdW50cnVzdGVkIG1hcmtkb3duIHVzZSBgcmVuZGVyTWFya2Rvd25gLCB3aGljaCBzYW5pdGlzZXM7XG4gKiBmb3IgYW55dGhpbmcgYSBwcmltaXRpdmUgYWxyZWFkeSBjb3ZlcnMsIHVzZSB0aGUgcHJpbWl0aXZlLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuXG5leHBvcnQgdHlwZSBIdG1sUHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICAvKiogVHJ1c3RlZCwgYWxyZWFkeS1zYW5pdGlzZWQgSFRNTC4gVGhlIGNhbGxlciBvd25zIGl0cyBzYWZldHkuICovXG4gIGh0bWw6IHN0cmluZztcbiAgLyoqIFBvbHltb3JwaGljIHdyYXBwZXIgZWxlbWVudCAoZGl2LCBzcGFuLCBmaWd1cmUsIOKApikuIERlZmF1bHRzIHRvICdkaXYnLiAqL1xuICBhcz86IGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBIdG1sKHByb3BzOiBIdG1sUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgaHRtbCwgYXMgPSBcImRpdlwiLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChhcywge1xuICAgIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSovdGl0bGUgZmlyc3Q7IHRoZSBwcmltaXRpdmUncyBvd25cbiAgICAvLyBhdHRyaWJ1dGVzIGJlbG93IHdpbiBvbiBhbnkgY29sbGlzaW9uLlxuICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgaWQsXG4gICAgY2xhc3M6IGNsYXNzTmFtZSxcbiAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9sbHktaHRtbFwiOiB0cnVlLFxuICAgIC8vIG5vc2VtZ3JlcDogdHlwZXNjcmlwdC5yZWFjdC5zZWN1cml0eS5hdWRpdC5yZWFjdC1kYW5nZXJvdXNseXNldGlubmVyaHRtbC5yZWFjdC1kYW5nZXJvdXNseXNldGlubmVyaHRtbCDigJQgdGhpcyBwcmltaXRpdmUgSVMgdGhlIGRvY3VtZW50ZWQgdHJ1c3RlZC1tYXJrdXAgZXNjYXBlIGhhdGNoOyB0aGUgY2FsbGVyIG93bnMgc2FuaXRpc2F0aW9uIChzZWUgbW9kdWxlIGRvY3MpLlxuICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7IF9faHRtbDogaHRtbCB9LFxuICB9KTtcbn1cbiIsCiAgICAiLyoqXG4gKiBMaW5rIOKAlCB0b2tlbi1zdHlsZWQgbmF2aWdhdGlvbmFsIGFuY2hvci5cbiAqXG4gKiBUaGUgcHJpbWl0aXZlIGZvciBwbGFpbiBoeXBlcmxpbmtzOiBodWIgYXBwLWdyaWQgY2FyZHMsIGEgZmlsZVxuICogZG93bmxvYWQsIGFuIGV4dGVybmFsIHJlZmVyZW5jZS4gPEJ1dHRvbiBocmVmPiBpcyBmb3IgbGluay1zaGFwZWRcbiAqIEJVVFRPTlMg4oCUIGEgY2FsbCB0byBhY3Rpb24gd2VhcmluZyBidXR0b24gY2hyb21lOyA8TGluaz4gaXMgZm9yXG4gKiBpbmxpbmUsIHRleHR1YWwgbGlua3MgdGhhdCByZWFkIGFzIGxpbmtzLiBgZXh0ZXJuYWxgIG9wZW5zIGEgbmV3IHRhYlxuICogd2l0aCBgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiYDsgYGRvd25sb2FkYCBvZmZlcnMgdGhlIHRhcmdldCBhcyBhXG4gKiBmaWxlIChhbiBlbXB0eSBzdHJpbmcga2VlcHMgdGhlIHJlc291cmNlJ3Mgb3duIGZpbGVuYW1lKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9MaW5rLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgTGlua1Byb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBocmVmOiBzdHJpbmc7XG4gIC8qKiBPcGVuIGluIGEgbmV3IHRhYiB3aXRoIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIi4gKi9cbiAgZXh0ZXJuYWw/OiBib29sZWFuO1xuICAvKiogT2ZmZXIgdGhlIGhyZWYgYXMgYSBkb3dubG9hZDsgYW4gZW1wdHkgc3RyaW5nIGtlZXBzIGl0cyBmaWxlbmFtZS4gKi9cbiAgZG93bmxvYWQ/OiBzdHJpbmc7XG4gIC8qKiBEcm9wIHRoZSB1bmRlcmxpbmUgdW50aWwgaG92ZXIg4oCUIGZvciBsaW5rIGdyaWRzIGFuZCBjYXJkIGxpbmtzLiAqL1xuICBzdWJ0bGU/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIExpbmsocHJvcHM6IExpbmtQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgaHJlZiwgZXh0ZXJuYWwsIGRvd25sb2FkLCBzdWJ0bGUsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJsaW5rXCJdXTtcbiAgaWYgKHN1YnRsZSkgcGFydHMucHVzaChjbGFzc2VzW1wic3VidGxlXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIHsuLi5jb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpfVxuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX1cbiAgICAgIGhyZWY9e2hyZWZ9XG4gICAgICB0YXJnZXQ9e2V4dGVybmFsID8gXCJfYmxhbmtcIiA6IHVuZGVmaW5lZH1cbiAgICAgIHJlbD17ZXh0ZXJuYWwgPyBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiA6IHVuZGVmaW5lZH1cbiAgICAgIGRvd25sb2FkPXtkb3dubG9hZH1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktbGlua1xuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2E+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogT3V0cHV0IOKAlCByZWFkLW9ubHksIG11bHRpLWxpbmUgZGlhZ25vc3RpYyB0ZXh0LlxuICpcbiAqIEZvciBwcm9ncmFtIG91dHB1dCBhIGNvbnN1bWVyIG11c3QgU0hPVyBidXQgbm90IGVkaXQ6IGEgbWVzaC1zdGF0ZVxuICogc25hcHNob3QsIGEgcGVyLXBlZXIgc3luYyB0YWJsZSwgYSByZWNvdmVyeSBibG9iLiA8VGV4dElucHV0PiBhbmRcbiAqIDxBY3Rpb25JbnB1dD4gYXJlIHNpbmdsZS1saW5lIGFuZCBlZGl0YWJsZTsgPENvZGU+IGlzIGZvciBjb2RlXG4gKiBzYW1wbGVzIGFuZCBuZXZlciB3cmFwcy4gPE91dHB1dD4gcmVuZGVycyBhIG1vbm9zcGFjZSA8cHJlPiB0aGF0XG4gKiB3cmFwcyBsb25nIGxpbmVzIGJ5IGRlZmF1bHQg4oCUIGEgZGlhZ25vc3RpYyBkdW1wIHNob3VsZCBzdGF5IG9uXG4gKiBzY3JlZW4g4oCUIHdpdGggYHNjcm9sbGAgdG8gc3dpdGNoIHRvIGEgaG9yaXpvbnRhbCBzY3JvbGxiYXIgaW5zdGVhZC5cbiAqXG4gKiBJdCBjYXJyaWVzIHRoZSBwb2xseSMxMjUgcGFzc3Rocm91Z2ggc3VyZmFjZSwgc28gYSBgZGF0YS1hY3Rpb25gXG4gKiBmb3IgYSB0YXAtdG8tc2VsZWN0LWFsbCBnZXN0dXJlIHJpZGVzIHN0cmFpZ2h0IG9udG8gdGhlIDxwcmU+XG4gKiAocG9sbHkjMTM1KS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9PdXRwdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBPdXRwdXRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgLyoqIFNjcm9sbCBsb25nIHVuYnJlYWthYmxlIGxpbmVzIGhvcml6b250YWxseSBpbnN0ZWFkIG9mIHdyYXBwaW5nLiAqL1xuICBzY3JvbGw/OiBib29sZWFuO1xuICAvKiogTWFrZSB0aGUgYmxvY2sgZm9jdXNhYmxlIOKAlCBwYWlyIHdpdGggYSBgZGF0YS1hY3Rpb25gIHRhcCBnZXN0dXJlLiAqL1xuICB0YWJJbmRleD86IG51bWJlcjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBPdXRwdXQocHJvcHM6IE91dHB1dFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCBzY3JvbGwsIHRhYkluZGV4LCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wib3V0cHV0XCJdXTtcbiAgaWYgKHNjcm9sbCkgcGFydHMucHVzaChjbGFzc2VzW1wic2Nyb2xsXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPHByZVxuICAgICAgey4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyl9XG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgdGFiSW5kZXg9e3RhYkluZGV4fVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1vdXRwdXRcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9wcmU+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogU2VsZWN0IOKAlCBkcm9wZG93biBvZiBvcHRpb25zIHdpdGggc2luZ2xlLSBvciBtdWx0aS1zZWxlY3Qgc2VtYW50aWNzLlxuICpcbiAqIENvbXBvc2VzIERyb3Bkb3duIGZvciB0aGUgbWVudSBhbmQgYSBuYXRpdmUgY2hlY2tib3ggaW4gZWFjaCBvcHRpb25cbiAqIHJvdyBmb3IgbXVsdGktc2VsZWN0LiBUaGUgYHNlbGVjdGVkYCBzdGF0ZSBpcyBhIFNpZ25hbDxTZXQ8VD4+O1xuICogc2luZ2xlLXNlbGVjdCByZXBsYWNlcyB0aGUgc2V0LCBtdWx0aS1zZWxlY3QgdG9nZ2xlcyBtZW1iZXJzaGlwLlxuICogTXVsdGktc2VsZWN0IG1vZGUgYWxzbyBzaG93cyBTZWxlY3QgQWxsIC8gQ2xlYXIgYWN0aW9uIGJ1dHRvbnMgYXRcbiAqIHRoZSB0b3Agb2YgdGhlIG1lbnUuIFNpbmdsZS1zZWxlY3QgbW9kZSBjYW4gb3B0IGludG8gYGNsZWFyYWJsZWAsXG4gKiB3aGljaCBwcmVwZW5kcyBhIHBsYWNlaG9sZGVyLWxhYmVsbGVkIG9wdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gKiBzZWxlY3Rpb24gdG8gZW1wdHkg4oCUIGZvciBcIkFueSDigKZcIiBmaWx0ZXIgc2VtYW50aWNzLlxuICovXG5cbmltcG9ydCB7IHR5cGUgU2lnbmFsLCB1c2VDb21wdXRlZCwgdXNlU2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBEcm9wZG93biB9IGZyb20gXCIuL0Ryb3Bkb3duLnRzeFwiO1xuaW1wb3J0IHsgU2VsZWN0VHJpZ2dlciB9IGZyb20gXCIuL2ludGVybmFsL3NlbGVjdC10cmlnZ2VyLnRzeFwiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vU2VsZWN0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgU2VsZWN0T3B0aW9uPFQgPSBzdHJpbmc+ID0geyB2YWx1ZTogVDsgbGFiZWw6IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBTZWxlY3RQcm9wczxUID0gc3RyaW5nPiA9IHtcbiAgb3B0aW9uczogU2VsZWN0T3B0aW9uPFQ+W107XG4gIHNlbGVjdGVkOiBTaWduYWw8U2V0PFQ+PjtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBtdWx0aVNlbGVjdD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTaW5nbGUtc2VsZWN0IG9ubHk6IHByZXBlbmQgYW4gb3B0aW9uIGxhYmVsbGVkIHdpdGggdGhlIHBsYWNlaG9sZGVyXG4gICAqIHRoYXQgcmV0dXJucyB0aGUgc2VsZWN0aW9uIHRvIGVtcHR5LiBXaXRob3V0IGl0LCBwaWNraW5nIGFuIG9wdGlvblxuICAgKiBpcyBhIHRyYXAg4oCUIG5vdGhpbmcgaW4gdGhlIGxpc3QgbGVhZHMgYmFjayB0byBcImFueVwiLiBVc2UgaXQgZm9yXG4gICAqIG9wdGlvbmFsIGZpbHRlcnMgKFwiQW55IHN0YWdlXCIpLCBub3QgcmVxdWlyZWQgZm9ybSBmaWVsZHNcbiAgICogKFwiU2VsZWN0IGEgdGVhbVwiKS4gSWdub3JlZCBpbiBtdWx0aS1zZWxlY3QsIHdoaWNoIGhhcyBDbGVhci5cbiAgICovXG4gIGNsZWFyYWJsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEFwcGx5IGEgY29tZm9ydGFibGUgbWluaW11bSB3aWR0aCB0byB0aGUgdHJpZ2dlci4gRGVmYXVsdDogc2l6ZXMgdG8gY29udGVudC4gKi9cbiAgd2lkZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBNVUxUSV9TRUxFQ1RfTEFCRUxfVEhSRVNIT0xEID0gMjtcblxuZnVuY3Rpb24gZm9ybWF0U2VsZWN0ZWQ8VD4oXG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbjxUPltdLFxuICBzZWxlY3RlZDogU2V0PFQ+LFxuICBtdWx0aVNlbGVjdDogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgaWYgKHNlbGVjdGVkLnNpemUgPT09IDApIHJldHVybiBcIlwiO1xuICBpZiAobXVsdGlTZWxlY3QgJiYgc2VsZWN0ZWQuc2l6ZSA+IE1VTFRJX1NFTEVDVF9MQUJFTF9USFJFU0hPTEQpIHtcbiAgICByZXR1cm4gYCR7c2VsZWN0ZWQuc2l6ZX0gc2VsZWN0ZWRgO1xuICB9XG4gIGNvbnN0IGxhYmVsczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGlmIChzZWxlY3RlZC5oYXMob3B0LnZhbHVlKSkgbGFiZWxzLnB1c2gob3B0LmxhYmVsKTtcbiAgfVxuICByZXR1cm4gbGFiZWxzLmpvaW4oXCIsIFwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdDxUID0gc3RyaW5nPihwcm9wczogU2VsZWN0UHJvcHM8VD4pOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBvcHRpb25zLFxuICAgIHNlbGVjdGVkLFxuICAgIGxhYmVsLFxuICAgIHBsYWNlaG9sZGVyID0gXCJTZWxlY3RcXHUyMDI2XCIsXG4gICAgbXVsdGlTZWxlY3QgPSBmYWxzZSxcbiAgICBjbGVhcmFibGUgPSBmYWxzZSxcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgIHdpZGUgPSBmYWxzZSxcbiAgICBjbGFzc05hbWUsXG4gICAgaWQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBpc09wZW4gPSB1c2VTaWduYWwoZmFsc2UpO1xuXG4gIGNvbnN0IGRpc3BsYXlUZXh0ID0gdXNlQ29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHRleHQgPSBmb3JtYXRTZWxlY3RlZChvcHRpb25zLCBzZWxlY3RlZC52YWx1ZSwgbXVsdGlTZWxlY3QpO1xuICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA+IDAgPyB0ZXh0IDogcGxhY2Vob2xkZXI7XG4gIH0pO1xuXG4gIGNvbnN0IGlzRW1wdHkgPSB1c2VDb21wdXRlZCgoKSA9PiBzZWxlY3RlZC52YWx1ZS5zaXplID09PSAwKTtcblxuICBjb25zdCBoYW5kbGVPcHRpb25DbGljayA9ICh2YWx1ZTogVCk6IHZvaWQgPT4ge1xuICAgIGlmIChtdWx0aVNlbGVjdCkge1xuICAgICAgY29uc3QgbmV4dCA9IG5ldyBTZXQoc2VsZWN0ZWQudmFsdWUpO1xuICAgICAgaWYgKG5leHQuaGFzKHZhbHVlKSkgbmV4dC5kZWxldGUodmFsdWUpO1xuICAgICAgZWxzZSBuZXh0LmFkZCh2YWx1ZSk7XG4gICAgICBzZWxlY3RlZC52YWx1ZSA9IG5leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGVkLnZhbHVlID0gbmV3IFNldChbdmFsdWVdKTtcbiAgICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RBbGwgPSAoKTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KG9wdGlvbnMubWFwKChvKSA9PiBvLnZhbHVlKSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2xlYXIgPSAoKTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KCk7XG4gIH07XG5cbiAgLy8gVGhlIGNsZWFyIG9wdGlvbiBiZWhhdmVzIGxpa2UgYSBub3JtYWwgc2VsZWN0aW9uOiBwaWNrIGl0LCBtZW51IGNsb3Nlcy5cbiAgY29uc3QgaGFuZGxlQ2xlYXJPcHRpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KCk7XG4gICAgaXNPcGVuLnZhbHVlID0gZmFsc2U7XG4gIH07XG5cbiAgY29uc3QgdHJpZ2dlclBhcnRzID0gW2NsYXNzZXNbXCJ0cmlnZ2VyXCJdID8/IFwiXCJdO1xuICBpZiAoaXNFbXB0eS52YWx1ZSkgdHJpZ2dlclBhcnRzLnB1c2goY2xhc3Nlc1tcInBsYWNlaG9sZGVyXCJdID8/IFwiXCIpO1xuICBpZiAod2lkZSkgdHJpZ2dlclBhcnRzLnB1c2goY2xhc3Nlc1tcInRyaWdnZXJXaWRlXCJdID8/IFwiXCIpO1xuICBjb25zdCB0cmlnZ2VyQ2xhc3MgPSB0cmlnZ2VyUGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuICBjb25zdCB0cmlnZ2VyQ29udGVudCA9IDxTZWxlY3RUcmlnZ2VyIGxhYmVsPXtkaXNwbGF5VGV4dC52YWx1ZX0gLz47XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInNlbGVjdFwiXSA/PyBcIlwiXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBpZD17aWR9IGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1zZWxlY3Q+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICAgIDxEcm9wZG93blxuICAgICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgICAgdHJpZ2dlcj17dHJpZ2dlckNvbnRlbnR9XG4gICAgICAgIHRyaWdnZXJDbGFzc05hbWU9e3RyaWdnZXJDbGFzc31cbiAgICAgICAgdHJpZ2dlckRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgdHJpZ2dlclRpdGxlPXtkaXNwbGF5VGV4dC52YWx1ZX1cbiAgICAgICAgbXVsdGlTZWxlY3Q9e211bHRpU2VsZWN0fVxuICAgICAgPlxuICAgICAgICB7bXVsdGlTZWxlY3QgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25zXCJdfT5cbiAgICAgICAgICAgIDxMYXlvdXQgY29sdW1ucz1cIjFmciAxZnJcIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25CdG5cIl19IG9uQ2xpY2s9e2hhbmRsZVNlbGVjdEFsbH0+XG4gICAgICAgICAgICAgICAgU2VsZWN0IEFsbFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25CdG5cIl19IG9uQ2xpY2s9e2hhbmRsZUNsZWFyfT5cbiAgICAgICAgICAgICAgICBDbGVhclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICB7IW11bHRpU2VsZWN0ICYmIGNsZWFyYWJsZSAmJiAoXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzRW1wdHkudmFsdWUgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgICAgICAgIGNsYXNzPXtcbiAgICAgICAgICAgICAgaXNFbXB0eS52YWx1ZVxuICAgICAgICAgICAgICAgID8gYCR7Y2xhc3Nlc1tcIm9wdGlvblwiXX0gJHtjbGFzc2VzW1wib3B0aW9uU2VsZWN0ZWRcIl19YFxuICAgICAgICAgICAgICAgIDogY2xhc3Nlc1tcIm9wdGlvblwiXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YS1wb2xseS1zZWxlY3QtY2xlYXJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsZWFyT3B0aW9ufVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPntwbGFjZWhvbGRlcn08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICl9XG4gICAgICAgIHtvcHRpb25zLm1hcCgob3B0KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHNlbGVjdGVkLnZhbHVlLmhhcyhvcHQudmFsdWUpO1xuICAgICAgICAgIGNvbnN0IG9wdENsYXNzID0gaXNTZWxlY3RlZFxuICAgICAgICAgICAgPyBgJHtjbGFzc2VzW1wib3B0aW9uXCJdfSAke2NsYXNzZXNbXCJvcHRpb25TZWxlY3RlZFwiXX1gXG4gICAgICAgICAgICA6IGNsYXNzZXNbXCJvcHRpb25cIl07XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAga2V5PXtTdHJpbmcob3B0LnZhbHVlKX1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICBhcmlhLXNlbGVjdGVkPXtpc1NlbGVjdGVkID8gXCJ0cnVlXCIgOiBcImZhbHNlXCJ9XG4gICAgICAgICAgICAgIGNsYXNzPXtvcHRDbGFzc31cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlT3B0aW9uQ2xpY2sob3B0LnZhbHVlKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge211bHRpU2VsZWN0ICYmIChcbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcIm9wdGlvbkNoZWNrXCJdfVxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17aXNTZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgICAgICAgICAgIHJlYWRPbmx5PXt0cnVlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxzcGFuPntvcHQubGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L0Ryb3Bkb3duPlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFNrZWxldG9uIOKAlCBzaGltbWVyaW5nIHBsYWNlaG9sZGVyIGZvciBsb2FkaW5nIHN0YXRlcy5cbiAqXG4gKiBUaHJlZSB2YXJpYW50czogdGV4dCAoZnVsbC13aWR0aCwgMWVtIHRhbGwpLCByZWN0IChmdWxsLXdpZHRoLCAxMDBweFxuICogdGFsbCksIGNpcmNsZSAoNDB4NDApLiBBIENTUyBncmFkaWVudCBhbmltYXRlcyBsZWZ0LXRvLXJpZ2h0IG92ZXJcbiAqIDEuNXMuIGBwcmVmZXJzLXJlZHVjZWQtbW90aW9uYCB6ZXJvZXMgdGhlIGFuaW1hdGlvbiB2aWEgdGhlIHRva2VuXG4gKiBzeXN0ZW0uIENvbnN1bWVycyBzaXplIHZpYSB3aWR0aC9oZWlnaHQgcHJvcHMgKHB4IG51bWJlcnMgb3IgQ1NTXG4gKiBzdHJpbmdzKTsgZGVmYXVsdCBzaXppbmcgY29tZXMgZnJvbSB0aGUgdmFyaWFudC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1NrZWxldG9uLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgU2tlbGV0b25WYXJpYW50ID0gXCJ0ZXh0XCIgfCBcInJlY3RcIiB8IFwiY2lyY2xlXCI7XG5cbmV4cG9ydCB0eXBlIFNrZWxldG9uUHJvcHMgPSB7XG4gIHZhcmlhbnQ/OiBTa2VsZXRvblZhcmlhbnQ7XG4gIHdpZHRoPzogc3RyaW5nIHwgbnVtYmVyO1xuICBoZWlnaHQ/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIHJlc29sdmVTaXplKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIGAke3ZhbHVlfXB4YDtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiB2YXJpYW50Q2xhc3ModmFyaWFudDogU2tlbGV0b25WYXJpYW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhcmlhbnQgPT09IFwiY2lyY2xlXCIpIHJldHVybiBjbGFzc2VzW1wiY2lyY2xlXCJdO1xuICBpZiAodmFyaWFudCA9PT0gXCJyZWN0XCIpIHJldHVybiBjbGFzc2VzW1wicmVjdFwiXTtcbiAgcmV0dXJuIGNsYXNzZXNbXCJ0ZXh0XCJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU2tlbGV0b24ocHJvcHM6IFNrZWxldG9uUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgdmFyaWFudCA9IFwidGV4dFwiLCB3aWR0aCwgaGVpZ2h0LCBjbGFzc05hbWUgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGNvbnN0IHcgPSByZXNvbHZlU2l6ZSh3aWR0aCk7XG4gIGNvbnN0IGggPSByZXNvbHZlU2l6ZShoZWlnaHQpO1xuICBpZiAodyAhPT0gdW5kZWZpbmVkKSBzdHlsZVtcIndpZHRoXCJdID0gdztcbiAgaWYgKGggIT09IHVuZGVmaW5lZCkgc3R5bGVbXCJoZWlnaHRcIl0gPSBoO1xuXG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBiYXNlID0gY2xhc3Nlc1tcInNrZWxldG9uXCJdO1xuICBpZiAoYmFzZSkgcGFydHMucHVzaChiYXNlKTtcbiAgY29uc3QgdkNsYXNzID0gdmFyaWFudENsYXNzKHZhcmlhbnQpO1xuICBpZiAodkNsYXNzKSBwYXJ0cy5wdXNoKHZDbGFzcyk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBjbGFzcz17cGFydHMuam9pbihcIiBcIil9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXNrZWxldG9uPXt2YXJpYW50fVxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAvPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFRhYnMg4oCUIGhvcml6b250YWwgbmF2IHdpdGggYWN0aXZlLXRhYiBhY2NlbnQuXG4gKlxuICogRWFjaCBidXR0b24gY2FycmllcyBgZGF0YS1hY3Rpb25gICh0aGUgY29uc3VtZXItcHJvdmlkZWQgYWN0aW9uIG5hbWUpXG4gKiBhbmQgYGRhdGEtYWN0aW9uLWlkPXt0YWIuaWR9YCBzbyB0aGUgZXZlbnQgZGVsZWdhdG9yIHJlc29sdmVzIHRoZVxuICogYWN0aXZhdGVkIHRhYi4gVGhlIGFjdGl2ZSB0YWIgZ2V0cyBgYXJpYS1jdXJyZW50PVwicGFnZVwiYCBhbmQgYVxuICogYm90dG9tLWJvcmRlciBhY2NlbnQuIFRoZSBuYXYgc2Nyb2xscyBob3Jpem9udGFsbHkgd2l0aCBhIGhpZGRlblxuICogc2Nyb2xsYmFyIGZvciBvdmVyZmxvdy4gSW50ZXJuYWwgYXJyYW5nZW1lbnQgdXNlcyA8TGF5b3V0PiwgcGFja2VkIHRvXG4gKiB0aGUgaW5saW5lIHN0YXJ0OiB0aGUgZ3JpZCBpcyAxMDAlIHdpZGUsIHNvIHdpdGhvdXQganVzdGlmeUNvbnRlbnQgdGhlXG4gKiBgYXV0b2AgdHJhY2tzIHN0cmV0Y2ggYW5kIGZvdXIgdGFicyBzcHJlYWQgYWNyb3NzIHRoZSB3aG9sZSBjb250YWluZXIuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9UYWJzLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgVGFiID0geyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyBkaXNhYmxlZD86IGJvb2xlYW4gfTtcblxuZXhwb3J0IHR5cGUgVGFic1Byb3BzID0ge1xuICB0YWJzOiBUYWJbXTtcbiAgYWN0aXZlVGFiOiBzdHJpbmc7XG4gIGFjdGlvbj86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsXCI/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gVGFicyhwcm9wczogVGFic1Byb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHRhYnMsIGFjdGl2ZVRhYiwgYWN0aW9uLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInRhYnNcIl0gPz8gXCJcIl07XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8bmF2XG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgYXJpYS1sYWJlbD17cHJvcHNbXCJhcmlhLWxhYmVsXCJdfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS10YWJzXG4gICAgPlxuICAgICAgPExheW91dFxuICAgICAgICBjb2x1bW5zPXtgcmVwZWF0KCR7dGFicy5sZW5ndGh9LCBhdXRvKWB9XG4gICAgICAgIGdhcD1cIjBcIlxuICAgICAgICBhbGlnbkl0ZW1zPVwiZW5kXCJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ9XCJzdGFydFwiXG4gICAgICA+XG4gICAgICAgIHt0YWJzLm1hcCgodGFiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVUYWIgPT09IHRhYi5pZDtcbiAgICAgICAgICBjb25zdCB0YWJDbGFzcyA9IGlzQWN0aXZlID8gYCR7Y2xhc3Nlc1tcInRhYlwiXX0gJHtjbGFzc2VzW1wiYWN0aXZlXCJdfWAgOiBjbGFzc2VzW1widGFiXCJdO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGtleT17dGFiLmlkfVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9e3RhYkNsYXNzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17dGFiLmRpc2FibGVkfVxuICAgICAgICAgICAgICBhcmlhLWN1cnJlbnQ9e2lzQWN0aXZlID8gXCJwYWdlXCIgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGRhdGEtYWN0aW9uPXthY3Rpb259XG4gICAgICAgICAgICAgIGRhdGEtYWN0aW9uLWlkPXt0YWIuaWR9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0YWIubGFiZWx9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvbmF2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFRleHQg4oCUIHR5cG9ncmFwaGljIHByaW1pdGl2ZSBmb3Igc2Vjb25kYXJ5LCBzaXplZCwgYW5kIHN0YXR1cyBjb3B5LlxuICpcbiAqIFJlbmRlcnMgc3VidGl0bGVzLCBjYXB0aW9ucywgZmllbGQgbGFiZWxzLCBlbXB0eS1zdGF0ZSBjb3B5LCBhbmRcbiAqIGVycm9yL3dhcm5pbmcgbWVzc2FnZXMgd2l0aG91dCB0aGUgY29uc3VtZXIgcmVhY2hpbmcgZm9yIGEgYHN0eWxlYFxuICogYXR0cmlidXRlIG9yIGEgaGFuZC1yb2xsZWQgY2xhc3MuIGB0b25lYCBtYXBzIHRvIHRoZSBzZW1hbnRpY1xuICogYC0tcG9sbHktdGV4dC0qYCBhbmQgYC0tcG9sbHktc3RhdHVzLSpgIHRva2VuIGZhbWlsaWVzOyBgc2l6ZWAsXG4gKiBgd2VpZ2h0YCwgYGl0YWxpY2AsIGFuZCBgbGVhZGluZ2AgY292ZXIgdGhlIHJlbWFpbmluZyB0eXBvZ3JhcGhpY1xuICogYXhlcy4gYGFzYCBrZWVwcyB0aGUgZWxlbWVudCBwb2x5bW9ycGhpYyBzbyB0aGUgc2FtZSBwcmltaXRpdmUgYmFja3MgYVxuICogPHNwYW4+LCA8cD4sIDxsYWJlbD4sIG9yIDxmaWdjYXB0aW9uPi4gQSBuby1wcm9wIDxUZXh0PiBpcyBhbiBvcmRpbmFyeVxuICogPHNwYW4+IGF0IGJvZHkgc2l6ZSBhbmQgZGVmYXVsdCBjb2xvdXIuXG4gKlxuICogcG9sbHkjMTI1OiBhcmJpdHJhcnkgYGRhdGEtKmAgLyBgYXJpYS0qYCBhdHRyaWJ1dGVzIGFyZSBmb3J3YXJkZWQgdG9cbiAqIHRoZSByZW5kZXJlZCBlbGVtZW50LCBzbyBhIFRleHQgdGhhdCBhbHNvIG5lZWRzIGEgdGVzdCBob29rIG9yIGFuXG4gKiBhMTF5IGF0dHJpYnV0ZSBzdGF5cyBhIHNpbmdsZSBlbGVtZW50LlxuICovXG5cbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVGV4dC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFRleHRUb25lID0gXCJkZWZhdWx0XCIgfCBcIm11dGVkXCIgfCBcImRhbmdlclwiIHwgXCJ3YXJuaW5nXCIgfCBcInN1Y2Nlc3NcIjtcbmV4cG9ydCB0eXBlIFRleHRTaXplID0gXCJ4c1wiIHwgXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiIHwgXCJ4bFwiO1xuZXhwb3J0IHR5cGUgVGV4dFdlaWdodCA9IFwibm9ybWFsXCIgfCBcIm1lZGl1bVwiIHwgXCJib2xkXCI7XG5leHBvcnQgdHlwZSBUZXh0TGVhZGluZyA9IFwidGlnaHRcIiB8IFwiYmFzZVwiIHwgXCJsb29zZVwiO1xuXG5leHBvcnQgdHlwZSBUZXh0UHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG5cbiAgLyoqIFBvbHltb3JwaGljIGVsZW1lbnQgKHNwYW4sIHAsIGxhYmVsLCBmaWdjYXB0aW9uLCDigKYpLiBEZWZhdWx0cyB0byAnc3BhbicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuXG4gIC8qKiBDb2xvdXIgcm9sZS4gJ211dGVkJyBkZS1lbXBoYXNpc2VzOyAnZGFuZ2VyJy8nd2FybmluZycvJ3N1Y2Nlc3MnXG4gICAqIHJlbmRlciBzdGF0dXMgY29weSBmcm9tIHRoZSBgLS1wb2xseS1zdGF0dXMtKmAgdG9rZW5zLiBEZWZhdWx0OiAnZGVmYXVsdCcuICovXG4gIHRvbmU/OiBUZXh0VG9uZTtcblxuICAvKiogVG9rZW4tYmFja2VkIGZvbnQgc2l6ZS4gRGVmYXVsdDogaW5oZXJpdCBmcm9tIGNvbnRleHQuICovXG4gIHNpemU/OiBUZXh0U2l6ZTtcblxuICAvKiogVG9rZW4tYmFja2VkIGZvbnQgd2VpZ2h0LiBEZWZhdWx0OiBpbmhlcml0IGZyb20gY29udGV4dC4gKi9cbiAgd2VpZ2h0PzogVGV4dFdlaWdodDtcblxuICAvKiogSXRhbGljIGVtcGhhc2lzIOKAlCBmb3IgaGludHMgYW5kIGFzaWRlcyDigJQgd2l0aG91dCBhbiBpbmxpbmUgc3R5bGUuICovXG4gIGl0YWxpYz86IGJvb2xlYW47XG5cbiAgLyoqIExpbmUtdGhyb3VnaCDigJQgZm9yIGNvbXBsZXRlZCB0b2RvIGl0ZW1zIGFuZCBzdXBlcnNlZGVkIGNvcHkuICovXG4gIHN0cmlrZXRocm91Z2g/OiBib29sZWFuO1xuXG4gIC8qKiBUb2tlbi1iYWNrZWQgbGluZSBoZWlnaHQuICdsb29zZScgc3VpdHMgbXVsdGktbGluZSBib2R5IGNvcHkuICovXG4gIGxlYWRpbmc/OiBUZXh0TGVhZGluZztcblxuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICAvKiogRm9yd2FyZGVkIHNvIDxUZXh0IGFzPVwibGFiZWxcIj4gY2FuIHBvaW50IGF0IGEgY29udHJvbC4gKi9cbiAgaHRtbEZvcj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBUZXh0KHByb3BzOiBUZXh0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBhcyA9IFwic3BhblwiLFxuICAgIHRvbmUgPSBcImRlZmF1bHRcIixcbiAgICBzaXplLFxuICAgIHdlaWdodCxcbiAgICBpdGFsaWMsXG4gICAgc3RyaWtldGhyb3VnaCxcbiAgICBsZWFkaW5nLFxuICAgIGNsYXNzTmFtZSxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJ0ZXh0XCJdXTtcbiAgaWYgKHRvbmUgIT09IFwiZGVmYXVsdFwiKSBwYXJ0cy5wdXNoKGNsYXNzZXNbdG9uZV0pO1xuICBpZiAoc2l6ZSkgcGFydHMucHVzaChjbGFzc2VzW3NpemVdKTtcbiAgaWYgKHdlaWdodCkgcGFydHMucHVzaChjbGFzc2VzW3dlaWdodF0pO1xuICBpZiAoaXRhbGljKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJpdGFsaWNcIl0pO1xuICBpZiAoc3RyaWtldGhyb3VnaCkgcGFydHMucHVzaChjbGFzc2VzW1wic3RyaWtldGhyb3VnaFwiXSk7XG4gIGlmIChsZWFkaW5nKSBwYXJ0cy5wdXNoKGNsYXNzZXNbbGVhZGluZ10pO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKiBmaXJzdDsgdGhlIHByaW1pdGl2ZSdzIG93biBhdHRyaWJ1dGVzXG4gICAgICAvLyBiZWxvdyB3aW4gb24gYW55IGNvbGxpc2lvbi5cbiAgICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgICBpZCxcbiAgICAgIGNsYXNzOiBwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIiksXG4gICAgICBmb3I6IHByb3BzLmh0bWxGb3IsXG4gICAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICAgIFwiZGF0YS1wb2xseS10ZXh0XCI6IHRvbmUsXG4gICAgfSxcbiAgICBjaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFNoYXJlZCBpbnB1dCBhMTF5IHdpcmluZy5cbiAqXG4gKiBSZXR1cm5zIGEgY29tbW9uIHNldCBvZiBhdHRyaWJ1dGVzIHRoYXQgVGV4dElucHV0LCBBY3Rpb25JbnB1dCwgYW5kXG4gKiBhbnkgY29uc3VtZXItYnVpbHQgaW5wdXQgY2FuIHNwbGF0IG9udG8gaXRzIG5hdGl2ZSBlbGVtZW50LiBLZWVwc1xuICogYXJpYS0qIGFuZCBkYXRhLXBvbGx5LSogbmFtZXMgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhbWlseS5cbiAqL1xuXG5leHBvcnQgdHlwZSBJbnB1dEExMXlQcm9wcyA9IHtcbiAgbmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgaW52YWxpZD86IGJvb2xlYW47XG4gIGRlc2NyaWJlZEJ5Pzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICByZWFkT25seT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRJbnB1dEExMXkocHJvcHM6IElucHV0QTExeVByb3BzKSB7XG4gIGNvbnN0IGF0dHJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9sbHktaW5wdXRcIjogdHJ1ZSxcbiAgICBcImFyaWEtaW52YWxpZFwiOiBwcm9wcy5pbnZhbGlkID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQsXG4gICAgXCJhcmlhLXJlcXVpcmVkXCI6IHByb3BzLnJlcXVpcmVkID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQsXG4gICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHByb3BzLmRlc2NyaWJlZEJ5LFxuICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgaWQ6IHByb3BzLmlkLFxuICAgIHBsYWNlaG9sZGVyOiBwcm9wcy5wbGFjZWhvbGRlcixcbiAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQsXG4gICAgcmVhZE9ubHk6IHByb3BzLnJlYWRPbmx5LFxuICB9O1xuICBpZiAocHJvcHMuaW52YWxpZCkgYXR0cnNbXCJkYXRhLXN0YXRlXCJdID0gXCJpbnZhbGlkXCI7XG4gIHJldHVybiBhdHRycztcbn1cbiIsCiAgICAiLyoqXG4gKiBUZXh0SW5wdXQg4oCUIHBhc3NpdmUsIHNpZ25hbC1mcmllbmRseSBuYXRpdmUgaW5wdXQgd3JhcHBlci5cbiAqXG4gKiBEZXNpZ25lZCB0byBsaXZlIGluc2lkZSA8QWN0aW9uRm9ybT4uIFBhc3MgYSBwbGFpbiBzdHJpbmcgZm9yXG4gKiB1bmNvbnRyb2xsZWQgbW9kZSAoRm9ybURhdGEtb24tc3VibWl0IHBpY2tzIHVwIHRoZSB2YWx1ZSkgb3IgYVxuICogU2lnbmFsPHN0cmluZz4gZm9yIGNvbnRyb2xsZWQgbW9kZS4gRWl0aGVyIHdheSwgYTExeSBhdHRyaWJ1dGVzIGFyZVxuICogd2lyZWQgYnkgdGhlIHNoYXJlZCBpbnB1dC1iYXNlLCB0aGUgc3RhYmxlIGBbZGF0YS1wb2xseS1pbnB1dF1gIGhvb2tcbiAqIGlzIGFwcGxpZWQgZm9yIHN0eWxpbmcsIGFuZCBgaW52YWxpZGAgZmxpcHMgYGFyaWEtaW52YWxpZGAgYW5kXG4gKiBgZGF0YS1zdGF0ZT1cImludmFsaWRcImAgZm9yIGNvbnN1bWVyIHNlbGVjdG9ycy5cbiAqXG4gKiBgaW5wdXRUeXBlYCBzZXRzIHRoZSBuYXRpdmUgc2luZ2xlLWxpbmUgaW5wdXQgdHlwZSDigJQgXCJ0ZXh0XCIgKGRlZmF1bHQpLFxuICogXCJlbWFpbFwiLCBcIm51bWJlclwiLCBcImRhdGVcIiwgYW5kIGZyaWVuZHMg4oCUIHNvIHRoZSBicm93c2VyIHN1cHBsaWVzIHRoZVxuICogcmlnaHQga2V5Ym9hcmQgYW5kIHZhbGlkYXRpb24uIGBtaW5gL2BtYXhgL2BzdGVwYCBhcHBseSB0byB0aGVcbiAqIHNpbmdsZS1saW5lIHZhcmlhbnQgKGUuZy4gbnVtZXJpYyBvciBkYXRlIGJvdW5kcykgYW5kIGtlZXAgZmlsdGVyXG4gKiBmaWVsZHMgZnJvbSBiZWluZyB1bnZhbGlkYXRlZCBmcmVlIHRleHQuXG4gKlxuICogYGVycm9yYCwgd2hlbiBzdXBwbGllZCwgcmVuZGVycyBhIG1lc3NhZ2UgYmVuZWF0aCB0aGUgZmllbGQsIHdyYXBzIHRoZVxuICogY29udHJvbCBpbiBhIGxhYmVsbGVkIGdyb3VwLCBhbmQgYXV0by13aXJlcyBgYXJpYS1kZXNjcmliZWRieWAgcGx1cyB0aGVcbiAqIGludmFsaWQgc3RhdGUg4oCUIG5vIG1hbnVhbCBpZCBqdWdnbGluZy4gV2l0aG91dCBgZXJyb3JgIHRoZSBwcmltaXRpdmVcbiAqIHN0YXlzIGEgYmFyZSBuYXRpdmUgZWxlbWVudCwgZXhhY3RseSBhcyBiZWZvcmUsIHNvIGNvbnN1bWVycyB0aGF0IG93blxuICogdGhlaXIgb3duIHN1cnJvdW5kaW5nIHN0cnVjdHVyZSBhcmUgdW5hZmZlY3RlZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgdXNlSWQgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBidWlsZElucHV0QTExeSB9IGZyb20gXCIuL2ludGVybmFsL2lucHV0LWJhc2UudHNcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1RleHRJbnB1dC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVmFyaWFudCA9IFwic2luZ2xlXCIgfCBcIm11bHRpXCI7XG5cbi8qKiBOYXRpdmUgc2luZ2xlLWxpbmUgaW5wdXQgdHlwZXMgcG9sbHkncyBmaWx0ZXIvZm9ybSBmaWVsZHMgdXNlLiAqL1xuZXhwb3J0IHR5cGUgVGV4dElucHV0VHlwZSA9XG4gIHwgXCJ0ZXh0XCJcbiAgfCBcImVtYWlsXCJcbiAgfCBcInVybFwiXG4gIHwgXCJ0ZWxcIlxuICB8IFwic2VhcmNoXCJcbiAgfCBcInBhc3N3b3JkXCJcbiAgfCBcIm51bWJlclwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcImRhdGV0aW1lLWxvY2FsXCJcbiAgfCBcInRpbWVcIlxuICB8IFwibW9udGhcIlxuICB8IFwid2Vla1wiO1xuXG5leHBvcnQgdHlwZSBUZXh0SW5wdXRQcm9wcyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICAvKiogU2lnbmFsPHN0cmluZz4gZm9yIGNvbnRyb2xsZWQsIHN0cmluZyBmb3IgdW5jb250cm9sbGVkIGRlZmF1bHQuICovXG4gIHZhbHVlPzogU2lnbmFsPHN0cmluZz4gfCBzdHJpbmc7XG4gIHZhcmlhbnQ/OiBWYXJpYW50O1xuICAvKiogTmF0aXZlIGlucHV0IHR5cGUgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50LiBEZWZhdWx0OiBcInRleHRcIi4gKi9cbiAgaW5wdXRUeXBlPzogVGV4dElucHV0VHlwZTtcbiAgLyoqIExvd2VyIGJvdW5kIGZvciB0aGUgc2luZ2xlLWxpbmUgdmFyaWFudCAobnVtYmVyL2RhdGUgdHlwZXMpLiAqL1xuICBtaW4/OiBudW1iZXIgfCBzdHJpbmc7XG4gIC8qKiBVcHBlciBib3VuZCBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQgKG51bWJlci9kYXRlIHR5cGVzKS4gKi9cbiAgbWF4PzogbnVtYmVyIHwgc3RyaW5nO1xuICAvKiogU3RlcCBncmFudWxhcml0eSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQgKG51bWJlci9kYXRlIHR5cGVzKS4gKi9cbiAgc3RlcD86IG51bWJlciB8IHN0cmluZztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBOYXRpdmUgaG92ZXIgdG9vbHRpcCDigJQgYSBoaW50IGJleW9uZCB0aGUgcGxhY2Vob2xkZXIvbGFiZWwuICovXG4gIHRpdGxlPzogc3RyaW5nO1xuICBpbnZhbGlkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFZhbGlkYXRpb24gbWVzc2FnZSByZW5kZXJlZCBiZW5lYXRoIHRoZSBmaWVsZC4gV2hlbiBwcmVzZW50IHRoZVxuICAgKiBwcmltaXRpdmUgd3JhcHMgdGhlIGNvbnRyb2wsIGxpbmtzIHRoZSBtZXNzYWdlIHZpYSBhcmlhLWRlc2NyaWJlZGJ5LFxuICAgKiBhbmQgbWFya3MgdGhlIGZpZWxkIGludmFsaWQuIE9taXQgaXQgdG8ga2VlcCBhIGJhcmUgbmF0aXZlIGVsZW1lbnQuXG4gICAqL1xuICBlcnJvcj86IHN0cmluZztcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgaWQ/OiBzdHJpbmc7XG4gIGRlc2NyaWJlZEJ5Pzogc3RyaW5nO1xuICByb3dzPzogbnVtYmVyO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBpc1NpZ25hbDxUPih2OiBTaWduYWw8VD4gfCBUIHwgdW5kZWZpbmVkKTogdiBpcyBTaWduYWw8VD4ge1xuICByZXR1cm4gdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPT0gbnVsbCAmJiBcInZhbHVlXCIgaW4gdiAmJiBcInBlZWtcIiBpbiAodiBhcyB1bmtub3duIGFzIG9iamVjdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUZXh0SW5wdXQocHJvcHM6IFRleHRJbnB1dFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB2YXJpYW50ID0gcHJvcHMudmFyaWFudCA/PyBcInNpbmdsZVwiO1xuICAvLyBBbHdheXMgY2FsbGVkIHNvIGhvb2sgb3JkZXIgaXMgc3RhYmxlOyBvbmx5IHVzZWQgd2hlbiBgZXJyb3JgIGlzIHNldC5cbiAgY29uc3QgZXJyb3JJZCA9IHVzZUlkKCk7XG4gIGNvbnN0IGhhc0Vycm9yID0gcHJvcHMuZXJyb3IgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5lcnJvciAhPT0gXCJcIjtcblxuICBjb25zdCBkZXNjcmliZWRCeSA9XG4gICAgW3Byb3BzLmRlc2NyaWJlZEJ5LCBoYXNFcnJvciA/IGVycm9ySWQgOiB1bmRlZmluZWRdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSB8fCB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYTExeSA9IGJ1aWxkSW5wdXRBMTF5KHtcbiAgICBuYW1lOiBwcm9wcy5uYW1lLFxuICAgIGlkOiBwcm9wcy5pZCxcbiAgICByZXF1aXJlZDogcHJvcHMucmVxdWlyZWQsXG4gICAgLy8gQW4gZXJyb3IgbWVzc2FnZSBpbXBsaWVzIHRoZSBmaWVsZCBpcyBpbnZhbGlkLlxuICAgIGludmFsaWQ6IHByb3BzLmludmFsaWQgfHwgaGFzRXJyb3IsXG4gICAgZGVzY3JpYmVkQnksXG4gICAgcGxhY2Vob2xkZXI6IHByb3BzLnBsYWNlaG9sZGVyLFxuICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCxcbiAgICByZWFkT25seTogcHJvcHMucmVhZE9ubHksXG4gIH0pO1xuXG4gIGNvbnN0IGNvbnRyb2xsZWQgPSBpc1NpZ25hbChwcm9wcy52YWx1ZSk7XG4gIGNvbnN0IHN0cmluZ1ZhbHVlID0gY29udHJvbGxlZCA/IChwcm9wcy52YWx1ZSBhcyB1bmtub3duIGFzIFNpZ25hbDxzdHJpbmc+KS52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gY29udHJvbGxlZFxuICAgID8gdW5kZWZpbmVkXG4gICAgOiAoKHByb3BzLnZhbHVlIGFzIHVua25vd24gYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSA/PyBcIlwiKTtcblxuICBjb25zdCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgPyBgJHtjbGFzc2VzW1wiaW5wdXRcIl19ICR7cHJvcHMuY2xhc3NOYW1lfWAgOiBjbGFzc2VzW1wiaW5wdXRcIl07XG5cbiAgY29uc3Qgb25JbnB1dCA9IChlOiBKU1guVGFyZ2V0ZWRFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD4pOiB2b2lkID0+IHtcbiAgICBpZiAoY29udHJvbGxlZCkge1xuICAgICAgKHByb3BzLnZhbHVlIGFzIHVua25vd24gYXMgU2lnbmFsPHN0cmluZz4pLnZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjb250cm9sID1cbiAgICB2YXJpYW50ID09PSBcIm11bHRpXCIgPyAoXG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgey4uLihhMTF5IGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KX1cbiAgICAgICAgY2xhc3M9e2NsYXNzTmFtZX1cbiAgICAgICAgdGl0bGU9e3Byb3BzLnRpdGxlfVxuICAgICAgICBkYXRhLXBvbGx5LWlucHV0LXZhcmlhbnQ9XCJtdWx0aVwiXG4gICAgICAgIHJvd3M9e3Byb3BzLnJvd3N9XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvbm9BdXRvZm9jdXM6IG9wdC1pbiBwcm9wIOKAlCBjYWxsZXIgcmVxdWVzdHMgYXV0b2ZvY3VzIGV4cGxpY2l0bHkgKGUuZy4gZm9ybSBvcGVucyB0byB0aGlzIGZpZWxkKS5cbiAgICAgICAgYXV0b0ZvY3VzPXtwcm9wcy5hdXRvRm9jdXN9XG4gICAgICAgIHZhbHVlPXtzdHJpbmdWYWx1ZX1cbiAgICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9XG4gICAgICAgIG9uSW5wdXQ9e29uSW5wdXR9XG4gICAgICAvPlxuICAgICkgOiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgey4uLihhMTF5IGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+KX1cbiAgICAgICAgdHlwZT17cHJvcHMuaW5wdXRUeXBlID8/IFwidGV4dFwifVxuICAgICAgICBjbGFzcz17Y2xhc3NOYW1lfVxuICAgICAgICB0aXRsZT17cHJvcHMudGl0bGV9XG4gICAgICAgIGRhdGEtcG9sbHktaW5wdXQtdmFyaWFudD1cInNpbmdsZVwiXG4gICAgICAgIG1pbj17cHJvcHMubWlufVxuICAgICAgICBtYXg9e3Byb3BzLm1heH1cbiAgICAgICAgc3RlcD17cHJvcHMuc3RlcH1cbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub0F1dG9mb2N1czogb3B0LWluIHByb3Ag4oCUIGNhbGxlciByZXF1ZXN0cyBhdXRvZm9jdXMgZXhwbGljaXRseSAoZS5nLiBmb3JtIG9wZW5zIHRvIHRoaXMgZmllbGQpLlxuICAgICAgICBhdXRvRm9jdXM9e3Byb3BzLmF1dG9Gb2N1c31cbiAgICAgICAgdmFsdWU9e3N0cmluZ1ZhbHVlfVxuICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cbiAgICAgICAgb25JbnB1dD17b25JbnB1dH1cbiAgICAgIC8+XG4gICAgKTtcblxuICBpZiAoIWhhc0Vycm9yKSByZXR1cm4gY29udHJvbDtcblxuICByZXR1cm4gKFxuICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCIgY2xhc3NOYW1lPXtjbGFzc2VzW1wiZmllbGRcIl19IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1maWVsZD5cbiAgICAgIHtjb250cm9sfVxuICAgICAgPHNwYW4gaWQ9e2Vycm9ySWR9IHJvbGU9XCJhbGVydFwiIGNsYXNzPXtjbGFzc2VzW1wiZXJyb3JcIl19PlxuICAgICAgICB7cHJvcHMuZXJyb3J9XG4gICAgICA8L3NwYW4+XG4gICAgPC9MYXlvdXQ+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogVG9hc3Qg4oCUIGNvbnN1bWVyLWZhY2luZyBzdXJmYWNlIGZvciB0aGUgZ2xvYmFsIGVycm9yU3RhdGUuXG4gKlxuICogUmVuZGVycyBldmVyeSBlbnRyeSBvZiB0aGUgYGVycm9yU3RhdGVgIHNpZ25hbCBpbnRvIGEgdmlld3BvcnQgbW91bnRlZFxuICogaW5zaWRlIE92ZXJsYXlSb290LiBgYXJpYS1saXZlYCBpcyBwb2xpdGUgZm9yIGluZm8vd2FybmluZyBhbmRcbiAqIGFzc2VydGl2ZSBmb3IgZXJyb3Igc2V2ZXJpdHkuIEVhY2ggaXRlbSBhdXRvLWRpc21pc3NlcyBhZnRlclxuICogYGF1dG9EaXNtaXNzTXNgIHVubGVzcyB0aGUgdXNlciBob3ZlcnMgdGhlIHZpZXdwb3J0LiBDbGlja2luZyBhXG4gKiB0b2FzdCBvciBpdHMgY2xvc2UgYnV0dG9uIHJlbW92ZXMgdGhhdCBzaW5nbGUgZW50cnkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IGNsZWFyRXJyb3IsIHR5cGUgRXJyb3JFbnRyeSwgZXJyb3JTdGF0ZSB9IGZyb20gXCIuLi9hY3Rpb25zL2Vycm9yLnRzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgeyBnZXRPdmVybGF5Um9vdE5vZGUgfSBmcm9tIFwiLi9PdmVybGF5Um9vdC50c3hcIjtcbmltcG9ydCB7IFN1cmZhY2UgfSBmcm9tIFwiLi9TdXJmYWNlLnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVG9hc3QubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBUb2FzdFZpZXdwb3J0UHJvcHMgPSB7XG4gIGF1dG9EaXNtaXNzTXM/OiBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFZpZXdwb3J0KHByb3BzOiBUb2FzdFZpZXdwb3J0UHJvcHMpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBhdXRvRGlzbWlzc01zID0gcHJvcHMuYXV0b0Rpc21pc3NNcyA/PyA1MDAwO1xuICBjb25zdCBbcG9ydGFsTm9kZSwgc2V0UG9ydGFsTm9kZV0gPSB1c2VTdGF0ZTxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbcGF1c2VkLCBzZXRQYXVzZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBlbnRyaWVzID0gZXJyb3JTdGF0ZS52YWx1ZTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFBvcnRhbE5vZGUoZ2V0T3ZlcmxheVJvb3ROb2RlKCkpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocGF1c2VkIHx8IGVudHJpZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgaGVhZCA9IGVudHJpZXNbMF07XG4gICAgaWYgKCFoZWFkKSByZXR1cm47XG4gICAgY29uc3QgdGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhckVycm9yKGhlYWQuaWQpO1xuICAgIH0sIGF1dG9EaXNtaXNzTXMpO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgfSwgW3BhdXNlZCwgZW50cmllcywgYXV0b0Rpc21pc3NNc10pO1xuXG4gIGlmICghcG9ydGFsTm9kZSkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgY29udGVudCA9IChcbiAgICA8TGF5b3V0XG4gICAgICBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIlxuICAgICAgY2xhc3NOYW1lPXtgJHtjbGFzc2VzW1widmlld3BvcnRcIl19ICR7cHJvcHMuY2xhc3NOYW1lID8/IFwiXCJ9YC50cmltKCl9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXRvYXN0LXZpZXdwb3J0XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldFBhdXNlZCh0cnVlKX1cbiAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0UGF1c2VkKGZhbHNlKX1cbiAgICA+XG4gICAgICB7ZW50cmllcy5tYXAoKGVudHJ5KSA9PiAoXG4gICAgICAgIDxUb2FzdEl0ZW0ga2V5PXtlbnRyeS5pZH0gZW50cnk9e2VudHJ5fSAvPlxuICAgICAgKSl9XG4gICAgPC9MYXlvdXQ+XG4gICk7XG4gIHJldHVybiBjcmVhdGVQb3J0YWwoY29udGVudCwgcG9ydGFsTm9kZSk7XG59XG5cbmZ1bmN0aW9uIFRvYXN0SXRlbSh7IGVudHJ5IH06IHsgZW50cnk6IEVycm9yRW50cnkgfSk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgbGl2ZW5lc3MgPSBlbnRyeS5zZXZlcml0eSA9PT0gXCJlcnJvclwiID8gXCJhc3NlcnRpdmVcIiA6IFwicG9saXRlXCI7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIHZhcmlhbnQ9XCJyYWlzZWRcIlxuICAgICAgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKSB2YXIoLS1wb2xseS1zcGFjZS1sZylcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzW1wiaXRlbVwiXX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktdG9hc3QtaXRlbVxuICAgICAgZGF0YS1zZXZlcml0eT17ZW50cnkuc2V2ZXJpdHl9XG4gICAgICByb2xlPXtlbnRyeS5zZXZlcml0eSA9PT0gXCJlcnJvclwiID8gXCJhbGVydFwiIDogXCJzdGF0dXNcIn1cbiAgICAgIGFyaWEtbGl2ZT17bGl2ZW5lc3N9XG4gICAgPlxuICAgICAgPExheW91dCBjb2x1bW5zPVwiMWZyIGF1dG9cIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIiBhbGlnbkl0ZW1zPVwiY2VudGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibWVzc2FnZVwiXX0+e2VudHJ5Lm1lc3NhZ2V9PC9zcGFuPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJjbG9zZVwiXX1cbiAgICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgICAgZGF0YS1wb2xseS1pbnRlcmFjdGl2ZVxuICAgICAgICAgIGRhdGEtcG9sbHktdG9hc3QtY2xvc2VcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjbGVhckVycm9yKGVudHJ5LmlkKX1cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiRGlzbWlzc1wiXG4gICAgICAgID5cbiAgICAgICAgICDDl1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IFRvYXN0ID0geyBWaWV3cG9ydCB9O1xuIiwKICAgICIvKipcbiAqIFRvZ2dsZSDigJQgc3dpdGNoLXJvbGUgY2hlY2tib3guXG4gKlxuICogQSB2aXN1YWxseS1oaWRkZW4gPGlucHV0IHJvbGU9XCJzd2l0Y2hcIj4gcGFpcmVkIHdpdGggYSBzdHlsZWQgdHJhY2tcbiAqIGFuZCB0aHVtYiBpbnNpZGUgYSA8bGFiZWw+LiBQYXNzaXZlOiB0aGUgY2FsbGVyIGRyaXZlcyBgY2hlY2tlZGAgYW5kXG4gKiBoYW5kbGVzIHN0YXRlIGNoYW5nZXMgdmlhIHRoZSBhY3Rpb24gcmVnaXN0cnkgKHdyYXAgdGhlIFRvZ2dsZSBpbiBhXG4gKiA8bGFiZWwgZGF0YS1hY3Rpb249XCIuLi5cIj4gb3IgYmluZCBhIHBhcmVudCBmb3JtJ3Mgc3VibWl0KS4gYTExeVxuICogYXR0cmlidXRlcyBjb21lIGZyb20gdGhlIG5hdGl2ZSBpbnB1dDsgdGhlIGxhYmVsIHdyYXBzIHNvIGNsaWNrc1xuICogYW55d2hlcmUgaW4gdGhlIGNvbnRyb2wgdG9nZ2xlIHRoZSBpbnB1dC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1RvZ2dsZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZVByb3BzID0ge1xuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBsYWJlbD86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBUb2dnbGUocHJvcHM6IFRvZ2dsZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoZWNrZWQgPSBmYWxzZSwgZGlzYWJsZWQgPSBmYWxzZSwgbGFiZWwsIG5hbWUsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1widG9nZ2xlXCJdXTtcbiAgaWYgKGRpc2FibGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJkaXNhYmxlZFwiXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8TGF5b3V0XG4gICAgICBhcz1cImxhYmVsXCJcbiAgICAgIGlubGluZVxuICAgICAgY29sdW1ucz1cImF1dG8gYXV0b1wiXG4gICAgICBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIlxuICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICBjbGFzc05hbWU9e3BhcnRzLmpvaW4oXCIgXCIpfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS10b2dnbGVcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICByb2xlPVwic3dpdGNoXCJcbiAgICAgICAgbmFtZT17bmFtZX1cbiAgICAgICAgYXJpYS1jaGVja2VkPXtjaGVja2VkfVxuICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcImlucHV0XCJdfVxuICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9e2NoZWNrZWQgPyBgJHtjbGFzc2VzW1widHJhY2tcIl19ICR7Y2xhc3Nlc1tcInRyYWNrQ2hlY2tlZFwiXX1gIDogY2xhc3Nlc1tcInRyYWNrXCJdfT5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz17Y2hlY2tlZCA/IGAke2NsYXNzZXNbXCJ0aHVtYlwiXX0gJHtjbGFzc2VzW1widGh1bWJDaGVja2VkXCJdfWAgOiBjbGFzc2VzW1widGh1bWJcIl19XG4gICAgICAgIC8+XG4gICAgICA8L3NwYW4+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICA8L0xheW91dD5cbiAgKTtcbn1cbiIsCiAgICAiLy8gU3RhdGUgcHJpbWl0aXZlcyB3aXRoIG9wdGlvbmFsIHN5bmMgYW5kIHBlcnNpc3RlbmNlXG5cbmltcG9ydCB7IGVmZmVjdCwgdHlwZSBTaWduYWwsIHNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZUJ1cyB9IGZyb20gXCIuL21lc3NhZ2UtYnVzXCI7XG5pbXBvcnQgeyBjcmVhdGVTdG9yYWdlQWRhcHRlciwgdHlwZSBTdG9yYWdlQWRhcHRlciB9IGZyb20gXCIuL3N0b3JhZ2UtYWRhcHRlclwiO1xuaW1wb3J0IHsgY3JlYXRlU3luY0FkYXB0ZXIsIHR5cGUgU3luY0FkYXB0ZXIgfSBmcm9tIFwiLi9zeW5jLWFkYXB0ZXJcIjtcblxuLyoqXG4gKiBTaWduYWwgZXh0ZW5kZWQgd2l0aCAubG9hZGVkIHByb21pc2UgZm9yIGh5ZHJhdGlvbiBjb250cm9sXG4gKi9cbnR5cGUgU2lnbmFsV2l0aExvYWRlZDxUPiA9IFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+IH07XG5cbi8qKlxuICogU2lnbmFsIGV4dGVuZGVkIHdpdGggLmxvYWRlZCBhbmQgLnZlcmlmeSBwcm9wZXJ0aWVzIGZvciB2ZXJpZmljYXRpb24gdHJhY2tpbmdcbiAqL1xudHlwZSBTaWduYWxXaXRoVmVyaWZ5PFQ+ID0gU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD47IHZlcmlmeTogVCB9O1xuXG50eXBlIFN0YXRlRW50cnk8VD4gPSB7XG4gIHNpZ25hbDogU2lnbmFsPFQ+O1xuICBjbG9jazogbnVtYmVyOyAvLyBMYW1wb3J0IGNsb2NrIGZvciBjYXVzYWwgb3JkZXJpbmdcbiAgbG9hZGVkOiBQcm9taXNlPHZvaWQ+O1xuICB1cGRhdGluZzogYm9vbGVhbjtcbn07XG5cbnR5cGUgU3RhdGVPcHRpb25zPFQgPSB1bmtub3duPiA9IHtcbiAgLy8gTGVnYWN5IE1lc3NhZ2VCdXMgc3VwcG9ydCAoZGVwcmVjYXRlZCwgd2lsbCBiZSByZW1vdmVkIGluIHYyLjApXG4gIGJ1cz86IE1lc3NhZ2VCdXM7XG5cbiAgLy8gTmV3IGFkYXB0ZXIgc3lzdGVtIChyZWNvbW1lbmRlZClcbiAgc3RvcmFnZT86IFN0b3JhZ2VBZGFwdGVyOyAvLyBDdXN0b20gc3RvcmFnZSBhZGFwdGVyXG4gIHN5bmM/OiBTeW5jQWRhcHRlcjsgLy8gQ3VzdG9tIHN5bmMgYWRhcHRlclxuXG4gIC8vIEJlaGF2aW9yIG9wdGlvbnNcbiAgZGVib3VuY2VNcz86IG51bWJlcjsgLy8gRGVib3VuY2Ugc3RvcmFnZSB3cml0ZXNcbiAgdmFsaWRhdG9yPzogKHZhbHVlOiB1bmtub3duKSA9PiB2YWx1ZSBpcyBUOyAvLyBSdW50aW1lIHR5cGUgdmFsaWRhdGlvblxuICB2ZXJpZnk/OiBib29sZWFuOyAvLyBFbmFibGUgdmVyaWZpY2F0aW9uIHRyYWNraW5nIChjcmVhdGVzIHBsYWluIG9iamVjdCBtaXJyb3IpXG59O1xuXG5jb25zdCBzdGF0ZVJlZ2lzdHJ5ID0gbmV3IE1hcDxzdHJpbmcsIFN0YXRlRW50cnk8dW5rbm93bj4+KCk7XG5cbi8qKlxuICogU2hhcmVkIHN0YXRlOiBzeW5jZWQgYWNyb3NzIGFsbCBjb250ZXh0cyBBTkQgcGVyc2lzdGVkIHRvIHN0b3JhZ2VcbiAqXG4gKiBVc2VzIExhbXBvcnQgY2xvY2sgZm9yIGNvbmZsaWN0IHJlc29sdXRpb24uIFN0YXRlIGlzIGF1dG9tYXRpY2FsbHk6XG4gKiAtIExvYWRlZCBmcm9tIGNocm9tZS5zdG9yYWdlIG9uIGluaXRpYWxpemF0aW9uXG4gKiAtIFN5bmNlZCB0byBvdGhlciBjb250ZXh0cyB2aWEgYnJvYWRjYXN0IG1lc3NhZ2VzXG4gKiAtIFBlcnNpc3RlZCB0byBjaHJvbWUuc3RvcmFnZSBvbiBldmVyeSBjaGFuZ2VcbiAqXG4gKiBBdmFpbGFibGUgaW46IGJhY2tncm91bmQsIHBvcHVwLCBvcHRpb25zLCBkZXZ0b29scywgY29udGVudCBzY3JpcHRzXG4gKiDimqDvuI8gTk9UIGF2YWlsYWJsZSBpbiBwYWdlIHNjcmlwdHMgKHVzZSBjb250ZW50IHNjcmlwdCBzdGF0ZSBpbnN0ZWFkKVxuICpcbiAqIEBwYXJhbSBrZXkgLSBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBzdGF0ZSAoZS5nLiwgXCJhcHAtc2V0dGluZ3NcIilcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBEZWZhdWx0IHZhbHVlIGlmIG5vdGhpbmcgaXMgaW4gc3RvcmFnZVxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIChidXMsIGRlYm91bmNlTXMpXG4gKiBAcmV0dXJucyBSZWFjdGl2ZSBzaWduYWwgdGhhdCBzdGF5cyBpbiBzeW5jIGFjcm9zcyBhbGwgY29udGV4dHNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gRGVmaW5lIG9uY2UsIHVzZSBldmVyeXdoZXJlXG4gKiBjb25zdCBzZXR0aW5ncyA9ICRzaGFyZWRTdGF0ZShcInNldHRpbmdzXCIsIHsgdGhlbWU6IFwiZGFya1wiIH0pXG4gKlxuICogLy8gQ2hhbmdlcyBhdXRvbWF0aWNhbGx5IHN5bmNcbiAqIHNldHRpbmdzLnZhbHVlID0geyB0aGVtZTogXCJsaWdodFwiIH1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gJHNoYXJlZFN0YXRlPFQ+KFxuICBrZXk6IHN0cmluZyxcbiAgaW5pdGlhbFZhbHVlOiBULFxuICBvcHRpb25zOiBTdGF0ZU9wdGlvbnM8VD4gPSB7fVxuKTogU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD47IHZlcmlmeT86IFQgfSB7XG4gIGNvbnN0IHNpZyA9IGNyZWF0ZVN0YXRlKGtleSwgaW5pdGlhbFZhbHVlLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbmFibGVTeW5jOiB0cnVlLFxuICAgIGVuYWJsZVBlcnNpc3Q6IHRydWUsXG4gIH0pO1xuXG4gIC8vIEV4cG9zZSBsb2FkZWQgcHJvbWlzZSBmb3IgYXdhaXRpbmcgaHlkcmF0aW9uXG4gIGNvbnN0IGVudHJ5ID0gc3RhdGVSZWdpc3RyeS5nZXQoa2V5KTtcbiAgaWYgKGVudHJ5KSB7XG4gICAgKHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbFdpdGhMb2FkZWQ8VD4pLmxvYWRlZCA9IGVudHJ5LmxvYWRlZDtcbiAgfVxuXG4gIHJldHVybiBzaWcgYXMgdW5rbm93biBhcyBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPiB9O1xufVxuXG4vKipcbiAqIFN5bmNlZCBzdGF0ZTogc3luY2VkIGFjcm9zcyBhbGwgY29udGV4dHMgYnV0IE5PVCBwZXJzaXN0ZWRcbiAqXG4gKiBTdGF0ZSBpcyBicm9hZGNhc3QgdG8gYWxsIGNvbnRleHRzIGluIHJlYWwtdGltZSBidXQgcmVzZXRzIG9uIGV4dGVuc2lvbiByZWxvYWQuXG4gKlxuICogQXZhaWxhYmxlIGluOiBiYWNrZ3JvdW5kLCBwb3B1cCwgb3B0aW9ucywgZGV2dG9vbHMsIGNvbnRlbnQgc2NyaXB0c1xuICog4pqg77iPIE5PVCBhdmFpbGFibGUgaW4gcGFnZSBzY3JpcHRzXG4gKlxuICogQHBhcmFtIGtleSAtIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIHN0YXRlXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIC0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBSZWFjdGl2ZSBzaWduYWwgc3luY2VkIGFjcm9zcyBjb250ZXh0cyAoYnV0IG5vdCBwZXJzaXN0ZWQpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFRlbXBvcmFyeSBzaGFyZWQgc3RhdGVcbiAqIGNvbnN0IGFjdGl2ZVRhYklkID0gJHN5bmNlZFN0YXRlKFwiYWN0aXZlLXRhYlwiLCBudWxsKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiAkc3luY2VkU3RhdGU8VD4oXG4gIGtleTogc3RyaW5nLFxuICBpbml0aWFsVmFsdWU6IFQsXG4gIG9wdGlvbnM6IFN0YXRlT3B0aW9uczxUPiA9IHt9XG4pOiBTaWduYWw8VD4ge1xuICByZXR1cm4gY3JlYXRlU3RhdGUoa2V5LCBpbml0aWFsVmFsdWUsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGVuYWJsZVN5bmM6IHRydWUsXG4gICAgZW5hYmxlUGVyc2lzdDogZmFsc2UsXG4gIH0pO1xufVxuXG4vKipcbiAqIFBlcnNpc3RlZCBzdGF0ZTogcGVyc2lzdGVkIHRvIHN0b3JhZ2UgYnV0IE5PVCBzeW5jZWQgYWNyb3NzIGNvbnRleHRzXG4gKlxuICogRWFjaCBjb250ZXh0IGhhcyBpdHMgb3duIGNvcHkgb2YgdGhlIHN0YXRlLCBwZXJzaXN0ZWQgaW5kZXBlbmRlbnRseS5cbiAqXG4gKiBBdmFpbGFibGUgaW46IGJhY2tncm91bmQsIHBvcHVwLCBvcHRpb25zLCBkZXZ0b29scywgY29udGVudCBzY3JpcHRzXG4gKiDimqDvuI8gTk9UIGF2YWlsYWJsZSBpbiBwYWdlIHNjcmlwdHNcbiAqXG4gKiBAcGFyYW0ga2V5IC0gVW5pcXVlIGlkZW50aWZpZXIgKHVzZSBwcmVmaXggbGlrZSBcInBvcHVwOnN0YXRlXCIgdG8gYXZvaWQgY29sbGlzaW9ucylcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIFJlYWN0aXZlIHNpZ25hbCBwZXJzaXN0ZWQgdG8gc3RvcmFnZSAoYnV0IG5vdCBzeW5jZWQpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEVhY2ggY29udGV4dCBoYXMgaXRzIG93biBwZXJzaXN0ZWQgc3RhdGVcbiAqIGNvbnN0IHBvcHVwU3RhdGUgPSAkcGVyc2lzdGVkU3RhdGUoXCJwb3B1cDpsYXN0LXBhbmVsXCIsIFwiaG9tZVwiKVxuICogY29uc3QgZGV2dG9vbHNTdGF0ZSA9ICRwZXJzaXN0ZWRTdGF0ZShcImRldnRvb2xzOmV4cGFuZGVkXCIsIHRydWUpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uICRwZXJzaXN0ZWRTdGF0ZTxUPihcbiAga2V5OiBzdHJpbmcsXG4gIGluaXRpYWxWYWx1ZTogVCxcbiAgb3B0aW9uczogU3RhdGVPcHRpb25zPFQ+ID0ge31cbik6IFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+IH0ge1xuICBjb25zdCBzaWcgPSBjcmVhdGVTdGF0ZShrZXksIGluaXRpYWxWYWx1ZSwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZW5hYmxlU3luYzogZmFsc2UsXG4gICAgZW5hYmxlUGVyc2lzdDogdHJ1ZSxcbiAgfSk7XG5cbiAgLy8gRXhwb3NlIGxvYWRlZCBwcm9taXNlIGZvciBhd2FpdGluZyBoeWRyYXRpb25cbiAgY29uc3QgZW50cnkgPSBzdGF0ZVJlZ2lzdHJ5LmdldChrZXkpO1xuICBpZiAoZW50cnkpIHtcbiAgICAoc2lnIGFzIHVua25vd24gYXMgU2lnbmFsV2l0aExvYWRlZDxUPikubG9hZGVkID0gZW50cnkubG9hZGVkO1xuICB9XG5cbiAgcmV0dXJuIHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+IH07XG59XG5cbi8qKlxuICogTG9jYWwgc3RhdGU6IG5vdCBzeW5jZWQsIG5vdCBwZXJzaXN0ZWQgKGxpa2UgcmVndWxhciBQcmVhY3Qgc2lnbmFsKVxuICpcbiAqIFNpbXBsZSByZWFjdGl2ZSBzdGF0ZSB0aGF0IGxpdmVzIG9ubHkgaW4gdGhlIGN1cnJlbnQgY29udGV4dC5cbiAqIFJlc2V0cyBvbiByZWxvYWQgb3IgY29udGV4dCByZXN0YXJ0LlxuICpcbiAqIEF2YWlsYWJsZSBpbjogYWxsIGNvbnRleHRzIChpbmNsdWRpbmcgcGFnZSBzY3JpcHRzKVxuICpcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBEZWZhdWx0IHZhbHVlXG4gKiBAcmV0dXJucyBSZWFjdGl2ZSBzaWduYWwgKGxvY2FsIG9ubHkpXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIExvY2FsIFVJIHN0YXRlXG4gKiBjb25zdCBpc0xvYWRpbmcgPSAkc3RhdGUoZmFsc2UpXG4gKiBjb25zdCBlcnJvciA9ICRzdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiAkc3RhdGU8VD4oaW5pdGlhbFZhbHVlOiBUKTogU2lnbmFsPFQ+IHtcbiAgcmV0dXJuIHNpZ25hbChpbml0aWFsVmFsdWUpO1xufVxuXG4vKiogU2VydmVyLXNpZGUgYXV0aG9yaXRhdGl2ZSBzdGF0ZSwga2V5ZWQgZm9yIHN0YWJsZSBpZGVudGl0eSBhY3Jvc3MgdGhlXG4gKiAgcHJvY2Vzcy4gVW5saWtlIHRoZSBicm93c2VyIHByaW1pdGl2ZXMgaXQgZG9lcyBOT1Qgc3luYyBhY3Jvc3MgY29udGV4dHMgb3JcbiAqICBwZXJzaXN0IHRvIGNocm9tZS5zdG9yYWdlIOKAlCB0aGUgc2VydmVyIGhvbGRzIHRoZSBjYW5vbmljYWwgcmVwbGljYSBhbmQgaXNcbiAqICB0aGUgYWx3YXlzLW9uIHBlZXI7IGNvbm5lY3RlZCBjbGllbnRzIHJlY2VpdmUgZGVyaXZlZCB1cGRhdGVzIHRocm91Z2ggdGhlXG4gKiAgRWx5c2lhIGBwb2xseSgpYCBwbHVnaW4ncyBlZmZlY3QvYnJvYWRjYXN0IGxheWVyIHJhdGhlciB0aGFuIHRocm91Z2ggdGhpc1xuICogIHNpZ25hbCBkaXJlY3RseS4gVXNlZCBpbnNpZGUgYHBvbGx5KHsgc3RhdGU6IHsgc2VydmVyOiB7IC4uLiB9IH0gfSlgIGFuZFxuICogIHJlYWQgb24gdGhlIHJlcXVlc3QgY29udGV4dCBhcyBgcG9sbHlTdGF0ZS5zZXJ2ZXIuPGtleT4udmFsdWVgLiAqL1xuY29uc3Qgc2VydmVyU3RhdGVSZWdpc3RyeSA9IG5ldyBNYXA8c3RyaW5nLCBTaWduYWw8dW5rbm93bj4+KCk7XG5cbi8qKlxuICogUmVhY3RpdmUgc2VydmVyLW9ubHkgc3RhdGUuIFRoZSBmaXJzdCBjYWxsIGZvciBhIGBrZXlgIGNyZWF0ZXMgdGhlIHNpZ25hbDtcbiAqIGxhdGVyIGNhbGxzIHdpdGggdGhlIHNhbWUgYGtleWAgcmV0dXJuIHRoYXQgc2FtZSBzaWduYWwsIHNvIGEgbW9kdWxlIHRoYXRcbiAqIGRlY2xhcmVzIGl0cyBzZXJ2ZXIgc3RhdGUgb25jZSBnZXRzIGEgc3RhYmxlIHJlZmVyZW5jZSBldmVyeXdoZXJlIGl0IGlzXG4gKiByZWFkLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBTdGFibGUgaWRlbnRpZmllciBmb3IgdGhpcyBzZXJ2ZXIgc3RhdGUgKGUuZy4gXCJkYlwiKVxuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIFZhbHVlIGhlbGQgdW50aWwgdGhlIHNlcnZlciBtdXRhdGVzIGl0XG4gKiBAcmV0dXJucyBBIHJlYWN0aXZlIHNpZ25hbCBob2xkaW5nIHRoZSBhdXRob3JpdGF0aXZlIHNlcnZlciB2YWx1ZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyAkc2VydmVyU3RhdGUgfSBmcm9tIFwiQGZhaXJmb3gvcG9sbHlcIjtcbiAqXG4gKiBjb25zdCBkYiA9IHsgdG9kb3M6IHNpZ25hbChbXSksIG5leHRJZDogMSB9O1xuICogcG9sbHkoeyBzdGF0ZTogeyBzZXJ2ZXI6IHsgZGI6ICRzZXJ2ZXJTdGF0ZShcImRiXCIsIGRiKSB9IH0gfSk7XG4gKiAvLyBpbiBhIGhhbmRsZXI6IGN0eC5wb2xseVN0YXRlLnNlcnZlci5kYi52YWx1ZS50b2Rvcy52YWx1ZSA9IFsuLi5dXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uICRzZXJ2ZXJTdGF0ZTxUPihrZXk6IHN0cmluZywgaW5pdGlhbFZhbHVlOiBUKTogU2lnbmFsPFQ+IHtcbiAgY29uc3QgZXhpc3RpbmcgPSBzZXJ2ZXJTdGF0ZVJlZ2lzdHJ5LmdldChrZXkpO1xuICAvLyBUaGUgcmVnaXN0cnkgZXJhc2VzIFQgKGl0IHN0b3JlcyBTaWduYWw8dW5rbm93bj4pOyB0aGUga2V5IGlzIHRoZVxuICAvLyBjYWxsZXIncyBjb250cmFjdCB0aGF0IHRoZSBzdG9yZWQgc2lnbmFsIGNhcnJpZXMgdGhlaXIgVC5cbiAgaWYgKGV4aXN0aW5nKSByZXR1cm4gZXhpc3RpbmcgYXMgdW5rbm93biBhcyBTaWduYWw8VD47XG4gIGNvbnN0IHNpZyA9IHNpZ25hbChpbml0aWFsVmFsdWUpO1xuICBzZXJ2ZXJTdGF0ZVJlZ2lzdHJ5LnNldChrZXksIHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbDx1bmtub3duPik7XG4gIHJldHVybiBzaWc7XG59XG5cbnR5cGUgSW50ZXJuYWxTdGF0ZU9wdGlvbnM8VCA9IHVua25vd24+ID0gU3RhdGVPcHRpb25zPFQ+ICYge1xuICBlbmFibGVTeW5jOiBib29sZWFuOyAvLyBXaGV0aGVyIHRvIGVuYWJsZSBzeW5jIChhdm9pZCBjb2xsaXNpb24gd2l0aCBzeW5jPzogU3luY0FkYXB0ZXIpXG4gIGVuYWJsZVBlcnNpc3Q6IGJvb2xlYW47IC8vIFdoZXRoZXIgdG8gZW5hYmxlIHBlcnNpc3RlbmNlXG59O1xuXG4vLyBEZWVwIGVxdWFsaXR5IGNoZWNrIHRvIHByZXZlbnQgcmVkdW5kYW50IHVwZGF0ZXNcbmV4cG9ydCBmdW5jdGlvbiBkZWVwRXF1YWwoYTogdW5rbm93biwgYjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgYSAhPT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgYiAhPT0gXCJvYmplY3RcIikgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gIGNvbnN0IGtleXNCID0gT2JqZWN0LmtleXMoYik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5c0EpIHtcbiAgICBpZiAoIWtleXNCLmluY2x1ZGVzKGtleSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoXG4gICAgICAhZGVlcEVxdWFsKFxuICAgICAgICAoYSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldLFxuICAgICAgICAoYiBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldXG4gICAgICApXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBzdG9yYWdlIGFuZCBzeW5jIGFkYXB0ZXJzIHdpdGggdGhyZWUtdGllciBwcmlvcml0eTpcbiAqIDEuIEV4cGxpY2l0IGFkYXB0ZXJzIGZyb20gb3B0aW9ucyAoaGlnaGVzdCBwcmlvcml0eSlcbiAqIDIuIE1lc3NhZ2VCdXMgYWRhcHRlcnMgKGxlZ2FjeSwgZGVwcmVjYXRlZClcbiAqIDMuIEF1dG8tZGV0ZWN0ZWQgYWRhcHRlcnMgKGRlZmF1bHQgYmVoYXZpb3IpXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVBZGFwdGVycyhvcHRpb25zOiBJbnRlcm5hbFN0YXRlT3B0aW9ucyk6IHtcbiAgc3RvcmFnZTogU3RvcmFnZUFkYXB0ZXIgfCBudWxsO1xuICBzeW5jOiBTeW5jQWRhcHRlciB8IG51bGw7XG59IHtcbiAgLy8gUHJpb3JpdHkgMTogRXhwbGljaXQgYWRhcHRlcnMgKHBhcnRpYWwgb3IgZnVsbClcbiAgaWYgKG9wdGlvbnMuc3RvcmFnZSB8fCBvcHRpb25zLnN5bmMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RvcmFnZTogb3B0aW9ucy5zdG9yYWdlIHx8IChvcHRpb25zLmVuYWJsZVBlcnNpc3QgPyBjcmVhdGVTdG9yYWdlQWRhcHRlcigpIDogbnVsbCksXG4gICAgICBzeW5jOiBvcHRpb25zLnN5bmMgfHwgKG9wdGlvbnMuZW5hYmxlU3luYyA/IGNyZWF0ZVN5bmNBZGFwdGVyKCkgOiBudWxsKSxcbiAgICB9O1xuICB9XG5cbiAgLy8gUHJpb3JpdHkgMjogTWVzc2FnZUJ1cyAobGVnYWN5IHN1cHBvcnQpXG4gIC8vIE1lc3NhZ2VCdXMgZG9lc24ndCBwcm92aWRlIHN5bmMgYWRhcHRlciwgb25seSBDaHJvbWUgc3RvcmFnZVxuICBpZiAob3B0aW9ucy5idXMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RvcmFnZTogb3B0aW9ucy5idXMuYWRhcHRlcnMuc3RvcmFnZSxcbiAgICAgIHN5bmM6IG9wdGlvbnMuZW5hYmxlU3luYyA/IGNyZWF0ZVN5bmNBZGFwdGVyKCkgOiBudWxsLFxuICAgIH07XG4gIH1cblxuICAvLyBQcmlvcml0eSAzOiBBdXRvLWRldGVjdCBiYXNlZCBvbiBlbmFibGVTeW5jIGFuZCBlbmFibGVQZXJzaXN0IGZsYWdzXG4gIHJldHVybiB7XG4gICAgc3RvcmFnZTogb3B0aW9ucy5lbmFibGVQZXJzaXN0ID8gY3JlYXRlU3RvcmFnZUFkYXB0ZXIoKSA6IG51bGwsXG4gICAgc3luYzogb3B0aW9ucy5lbmFibGVTeW5jID8gY3JlYXRlU3luY0FkYXB0ZXIoKSA6IG51bGwsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0YXRlPFQ+KGtleTogc3RyaW5nLCBpbml0aWFsVmFsdWU6IFQsIG9wdGlvbnM6IEludGVybmFsU3RhdGVPcHRpb25zPFQ+KTogU2lnbmFsPFQ+IHtcbiAgLy8gUmV0dXJuIGV4aXN0aW5nIHNpZ25hbCBpZiBhbHJlYWR5IHJlZ2lzdGVyZWRcbiAgaWYgKHN0YXRlUmVnaXN0cnkuaGFzKGtleSkpIHtcbiAgICByZXR1cm4gc3RhdGVSZWdpc3RyeS5nZXQoa2V5KT8uc2lnbmFsIGFzIHVua25vd24gYXMgU2lnbmFsPFQ+O1xuICB9XG5cbiAgY29uc3Qgc2lnID0gc2lnbmFsKGluaXRpYWxWYWx1ZSk7XG5cbiAgLy8gQ3JlYXRlIHZlcmlmaWNhdGlvbiBtaXJyb3IgaWYgcmVxdWVzdGVkXG4gIGlmIChvcHRpb25zLnZlcmlmeSkge1xuICAgIC8vIENyZWF0ZSBwbGFpbiBvYmplY3QgbWlycm9yIGZvciB2ZXJpZmljYXRpb25cbiAgICBjb25zdCBtaXJyb3IgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGluaXRpYWxWYWx1ZSkpIGFzIHVua25vd24gYXMgVDtcbiAgICAoc2lnIGFzIHVua25vd24gYXMgU2lnbmFsV2l0aFZlcmlmeTxUPikudmVyaWZ5ID0gbWlycm9yO1xuICB9XG5cbiAgY29uc3QgZW50cnk6IFN0YXRlRW50cnk8VD4gPSB7XG4gICAgc2lnbmFsOiBzaWcsXG4gICAgY2xvY2s6IDAsXG4gICAgbG9hZGVkOiBQcm9taXNlLnJlc29sdmUoKSxcbiAgICB1cGRhdGluZzogZmFsc2UsXG4gIH07XG5cbiAgLy8gUmVzb2x2ZSBhZGFwdGVycyAoZXhwbGljaXQsIE1lc3NhZ2VCdXMsIG9yIGF1dG8tZGV0ZWN0KVxuICBjb25zdCBhZGFwdGVycyA9IHJlc29sdmVBZGFwdGVycyhvcHRpb25zKTtcblxuICAvLyBMb2FkIGZyb20gc3RvcmFnZSBpZiBwZXJzaXN0IGlzIGVuYWJsZWRcbiAgaWYgKG9wdGlvbnMuZW5hYmxlUGVyc2lzdCAmJiBhZGFwdGVycy5zdG9yYWdlKSB7XG4gICAgZW50cnkubG9hZGVkID0gbG9hZEZyb21TdG9yYWdlKGtleSwgc2lnLCBlbnRyeSwgYWRhcHRlcnMuc3RvcmFnZSwgb3B0aW9ucy52YWxpZGF0b3IpO1xuICB9XG5cbiAgLy8gV2F0Y2ggZm9yIGNoYW5nZXMgYWZ0ZXIgaW5pdGlhbCBsb2FkXG4gIGVudHJ5LmxvYWRlZC50aGVuKCgpID0+IHtcbiAgICBsZXQgZGVib3VuY2VUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgcHJldmlvdXNWYWx1ZSA9IHNpZy52YWx1ZTtcbiAgICBsZXQgaXNGaXJzdFJ1biA9IHRydWU7XG5cbiAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9jb21wbGV4aXR5L25vRXhjZXNzaXZlQ29nbml0aXZlQ29tcGxleGl0eTogU3luYyBlZmZlY3QgcmVxdWlyZXMgY29vcmRpbmF0aW9uIG9mIG11bHRpcGxlIHN0YXRlIGNoYW5nZSBzY2VuYXJpb3NcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgLy8gUmVhZCB0aGUgc2lnbmFsIEZJUlNULCBiZWZvcmUgYW55IGVhcmx5IHJldHVybiBjYW4gaGFwcGVuLlxuICAgICAgLy9cbiAgICAgIC8vIFByZWFjdCByZS1jb2xsZWN0cyBhbiBlZmZlY3QncyBkZXBlbmRlbmNpZXMgb24gZXZlcnkgcnVuLCBzbyBhIHJ1biB0aGF0XG4gICAgICAvLyByZXR1cm5zIHdpdGhvdXQgdG91Y2hpbmcgYHNpZy52YWx1ZWAgdW5zdWJzY3JpYmVzIHRoZSBlZmZlY3QgZm9yIGdvb2QuXG4gICAgICAvLyBUaGUgcnVuIGFuIGluY29taW5nIHN5bmMgbWVzc2FnZSB0cmlnZ2VycyBpcyBleGFjdGx5IHN1Y2ggYSBydW4uXG4gICAgICBjb25zdCB2YWx1ZSA9IHNpZy52YWx1ZTtcblxuICAgICAgLy8gU2tpcCBmaXJzdCBydW4gKGVmZmVjdCBmaXJlcyBpbW1lZGlhdGVseSBvbiByZWdpc3RyYXRpb24pXG4gICAgICBpZiAoaXNGaXJzdFJ1bikge1xuICAgICAgICBpc0ZpcnN0UnVuID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQW4gaW5jb21pbmcgbWVzc2FnZSBpcyBiZWluZyBhcHBsaWVkLiBBZG9wdCBpdCBhcyB0aGUgYmFzZWxpbmUg4oCUIHRoaXNcbiAgICAgIC8vIGNvbnRleHQgbm93IGhvbGRzIGl0LCBzbyB0aGUgbmV4dCBsb2NhbCBjaGFuZ2UgaXMgYSBjaGFuZ2UgYWdhaW5zdCBpdCDigJRcbiAgICAgIC8vIGFuZCBkbyBub3QgYnJvYWRjYXN0LCB3aGljaCB3b3VsZCBlY2hvIGl0IGJhY2sgdG8gdGhlIHNlbmRlci5cbiAgICAgIGlmIChlbnRyeS51cGRhdGluZykge1xuICAgICAgICBwcmV2aW91c1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2tpcCBpZiB2YWx1ZSBoYXNuJ3QgY2hhbmdlZCAoZGVlcCBlcXVhbGl0eSBjaGVjaylcbiAgICAgIGlmIChkZWVwRXF1YWwodmFsdWUsIHByZXZpb3VzVmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAvLyBVcGRhdGUgdmVyaWZpY2F0aW9uIG1pcnJvciBpZiBlbmFibGVkXG4gICAgICBpZiAob3B0aW9ucy52ZXJpZnkpIHtcbiAgICAgICAgY29uc3QgdmVyaWZ5U2lnbmFsID0gc2lnIGFzIHVua25vd24gYXMgU2lnbmFsV2l0aFZlcmlmeTxUPjtcbiAgICAgICAgaWYgKHZlcmlmeVNpZ25hbC52ZXJpZnkpIHtcbiAgICAgICAgICAvLyBub3NlbWdyZXA6IGphdmFzY3JpcHQubGFuZy5zZWN1cml0eS5pbnNlY3VyZS1vYmplY3QtYXNzaWduLmluc2VjdXJlLW9iamVjdC1hc3NpZ24g4oCUIGludGVybmFsIG1pcnJvcjsgdmFsdWUgaXMgYSBkZWVwIEpTT04gY2xvbmUsIG5vdCBhcmJpdHJhcnkgZXh0ZXJuYWwgaW5wdXQuXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih2ZXJpZnlTaWduYWwudmVyaWZ5LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEluY3JlbWVudCBjbG9jayBtb25vdG9uaWNhbGx5XG4gICAgICBlbnRyeS5jbG9jaysrO1xuXG4gICAgICBjb25zdCBkb1VwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgLy8gUGVyc2lzdCB0byBzdG9yYWdlXG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZVBlcnNpc3QgJiYgYWRhcHRlcnMuc3RvcmFnZSkge1xuICAgICAgICAgIHBlcnNpc3RUb1N0b3JhZ2Uoa2V5LCB2YWx1ZSwgZW50cnkuY2xvY2ssIGFkYXB0ZXJzLnN0b3JhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQnJvYWRjYXN0IHRvIG90aGVyIGNvbnRleHRzXG4gICAgICAgIGlmIChvcHRpb25zLmVuYWJsZVN5bmMgJiYgYWRhcHRlcnMuc3luYykge1xuICAgICAgICAgIGJyb2FkY2FzdFVwZGF0ZShrZXksIHZhbHVlLCBlbnRyeS5jbG9jaywgYWRhcHRlcnMuc3luYyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIERlYm91bmNlIGlmIHNwZWNpZmllZFxuICAgICAgaWYgKG9wdGlvbnMuZGVib3VuY2VNcykge1xuICAgICAgICBpZiAoZGVib3VuY2VUaW1lcikgY2xlYXJUaW1lb3V0KGRlYm91bmNlVGltZXIpO1xuICAgICAgICBkZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dChkb1VwZGF0ZSwgb3B0aW9ucy5kZWJvdW5jZU1zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIExpc3RlbiBmb3IgdXBkYXRlcyBmcm9tIG90aGVyIGNvbnRleHRzIChvbmx5IGlmIHN5bmMgZW5hYmxlZClcbiAgaWYgKG9wdGlvbnMuZW5hYmxlU3luYyAmJiBhZGFwdGVycy5zeW5jKSB7XG4gICAgLy8gQ29ubmVjdCBpZiBuZWVkZWQgKHNvbWUgYWRhcHRlcnMgcmVxdWlyZSBleHBsaWNpdCBjb25uZWN0aW9uKVxuICAgIGlmIChhZGFwdGVycy5zeW5jLmNvbm5lY3QpIHtcbiAgICAgIGFkYXB0ZXJzLnN5bmMuY29ubmVjdCgpO1xuICAgIH1cblxuICAgIC8vIFJlZ2lzdGVyIHN5bmMgbWVzc2FnZSBsaXN0ZW5lclxuICAgIGFkYXB0ZXJzLnN5bmMub25NZXNzYWdlPFQ+KChtZXNzYWdlKSA9PiB7XG4gICAgICBpZiAobWVzc2FnZS5rZXkgIT09IGtleSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBvbGRDbG9jayA9IGVudHJ5LmNsb2NrO1xuXG4gICAgICAvLyBMYW1wb3J0IGNsb2NrIHJ1bGU6IEFsd2F5cyB1cGRhdGUgdG8gbWF4KGxvY2FsLCByZWNlaXZlZClcbiAgICAgIC8vIFRoaXMgbWFpbnRhaW5zIGNhdXNhbCBvcmRlcmluZyBldmVuIHdoZW4gcmVqZWN0aW5nIHVwZGF0ZXNcbiAgICAgIGVudHJ5LmNsb2NrID0gTWF0aC5tYXgoZW50cnkuY2xvY2ssIG1lc3NhZ2UuY2xvY2spO1xuXG4gICAgICAvLyBPbmx5IGFjY2VwdCB2YWx1ZSB1cGRhdGVzIGlmIHJlY2VpdmVkIGNsb2NrIGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiBvbGQgbG9jYWwgY2xvY2tcbiAgICAgIC8vIFRoaXMgZW5zdXJlcyB3ZSBvbmx5IGFwcGx5IGNhdXNhbGx5IG5ld2VyIHVwZGF0ZXNcbiAgICAgIGlmIChtZXNzYWdlLmNsb2NrID4gb2xkQ2xvY2spIHtcbiAgICAgICAgLy8gVmFsaWRhdGUgaW5jb21pbmcgdmFsdWUgaWYgdmFsaWRhdG9yIHByb3ZpZGVkXG4gICAgICAgIGlmIChvcHRpb25zLnZhbGlkYXRvciAmJiAhb3B0aW9ucy52YWxpZGF0b3IobWVzc2FnZS52YWx1ZSkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgW1BvbGx5XSBTdGF0ZSBcIiR7a2V5fVwiOiBSZWNlaXZlZCBpbnZhbGlkIHZhbHVlIGZyb20gc3luYyAoY2xvY2s6ICR7bWVzc2FnZS5jbG9ja30pYCxcbiAgICAgICAgICAgIG1lc3NhZ2UudmFsdWVcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNraXAgcmVkdW5kYW50IHVwZGF0ZXMgKGRlZXAgZXF1YWxpdHkgY2hlY2spXG4gICAgICAgIGlmIChkZWVwRXF1YWwoZW50cnkuc2lnbmFsLnZhbHVlLCBtZXNzYWdlLnZhbHVlKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGFwcGx5VXBkYXRlKGVudHJ5LCBtZXNzYWdlLnZhbHVlIGFzIHVua25vd24gYXMgVCwgbWVzc2FnZS5jbG9jayk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0ZVJlZ2lzdHJ5LnNldChrZXksIGVudHJ5IGFzIHVua25vd24gYXMgU3RhdGVFbnRyeTx1bmtub3duPik7XG4gIHJldHVybiBzaWc7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG4vKipcbiAqIEJhY2tmaWxsIGtleXMgYWRkZWQgdG8gdGhlIHN0YXRlIHNoYXBlIHNpbmNlIGEgdmFsdWUgd2FzIHBlcnNpc3RlZC5cbiAqXG4gKiBTdG9yZWQgcGxhaW4gb2JqZWN0cyBhcmUgc2hhbGxvdy1tZXJnZWQgb3ZlciB0aGUgY3VycmVudCBkZWZhdWx0cyBzbyB0aGF0IGFcbiAqIGZpZWxkIGFkZGVkIGluIGEgbGF0ZXIgcmVsZWFzZSByZWh5ZHJhdGVzIHRvIGl0cyBkZWZhdWx0IHJhdGhlciB0aGFuXG4gKiBgdW5kZWZpbmVkYC4gUHJpbWl0aXZlcyBhbmQgYXJyYXlzIGFyZSByZXBsYWNlZCB3aG9sZXNhbGUg4oCUIG1lcmdpbmcgdGhvc2VcbiAqIHdvdWxkIGNvcnJ1cHQgdGhlbS5cbiAqL1xuZnVuY3Rpb24gcmVjb25jaWxlV2l0aERlZmF1bHRzPFQ+KGRlZmF1bHRzOiBULCBzdG9yZWQ6IHVua25vd24pOiBUIHtcbiAgLy8gUGVyc2lzdGVkIHZhbHVlcyBhcmUgdHJ1c3RlZCB0byBiZSB0aGUgVCB0aGlzIGtleSB3YXMgcmVnaXN0ZXJlZCB3aXRoO1xuICAvLyBzY2hlbWEgZHJpZnQgaXMgaGFuZGxlZCBieSB0aGUgbWVyZ2UsIG5vdCBieSBydW50aW1lIHZhbGlkYXRpb24uXG4gIGlmIChpc1BsYWluT2JqZWN0KGRlZmF1bHRzKSAmJiBpc1BsYWluT2JqZWN0KHN0b3JlZCkpIHtcbiAgICByZXR1cm4geyAuLi5kZWZhdWx0cywgLi4uc3RvcmVkIH0gYXMgdW5rbm93biBhcyBUO1xuICB9XG4gIHJldHVybiBzdG9yZWQgYXMgdW5rbm93biBhcyBUO1xufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkRnJvbVN0b3JhZ2U8VD4oXG4gIGtleTogc3RyaW5nLFxuICBzaWc6IFNpZ25hbDxUPixcbiAgZW50cnk6IFN0YXRlRW50cnk8VD4sXG4gIHN0b3JhZ2U6IFN0b3JhZ2VBZGFwdGVyLFxuICB2YWxpZGF0b3I/OiAodmFsdWU6IHVua25vd24pID0+IHZhbHVlIGlzIFRcbik6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0b3JhZ2UuZ2V0KFtrZXksIGAke2tleX06Y2xvY2tgXSk7XG5cbiAgICBpZiAocmVzdWx0W2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gc2lnIHN0aWxsIGhvbGRzIHRoZSBpbml0aWFsIHZhbHVlIGhlcmUsIHNvIGl0IGlzIHRoZSBkZWZhdWx0IGJhc2VcbiAgICAgIC8vIGZvciBiYWNrZmlsbGluZyBrZXlzIHRoZSBwZXJzaXN0ZWQgYmxvYiBwcmVkYXRlcy5cbiAgICAgIGNvbnN0IHN0b3JlZFZhbHVlID0gcmVjb25jaWxlV2l0aERlZmF1bHRzKHNpZy5wZWVrKCksIHJlc3VsdFtrZXldKTtcblxuICAgICAgLy8gVmFsaWRhdGUgc3RvcmVkIHZhbHVlIGlmIHZhbGlkYXRvciBwcm92aWRlZFxuICAgICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgICBpZiAodmFsaWRhdG9yKHN0b3JlZFZhbHVlKSkge1xuICAgICAgICAgIHNpZy52YWx1ZSA9IHN0b3JlZFZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIGBbUG9sbHldIFN0YXRlIFwiJHtrZXl9XCI6IFN0b3JlZCB2YWx1ZSBmYWlsZWQgdmFsaWRhdGlvbiwgdXNpbmcgaW5pdGlhbCB2YWx1ZWAsXG4gICAgICAgICAgICBzdG9yZWRWYWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNpZy52YWx1ZSA9IHN0b3JlZFZhbHVlIGFzIHVua25vd24gYXMgVDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzdWx0W2Ake2tleX06Y2xvY2tgXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbnRyeS5jbG9jayA9IHJlc3VsdFtgJHtrZXl9OmNsb2NrYF0gYXMgdW5rbm93biBhcyBudW1iZXI7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybihgW1BvbGx5XSBGYWlsZWQgdG8gbG9hZCBzdGF0ZSBmcm9tIHN0b3JhZ2U6ICR7a2V5fWAsIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwZXJzaXN0VG9TdG9yYWdlPFQ+KGtleTogc3RyaW5nLCB2YWx1ZTogVCwgY2xvY2s6IG51bWJlciwgc3RvcmFnZTogU3RvcmFnZUFkYXB0ZXIpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBzdG9yYWdlLnNldCh7XG4gICAgICBba2V5XTogdmFsdWUsXG4gICAgICBbYCR7a2V5fTpjbG9ja2BdOiBjbG9jayxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oYFtQb2xseV0gRmFpbGVkIHRvIHBlcnNpc3Qgc3RhdGUgdG8gc3RvcmFnZTogJHtrZXl9YCwgZXJyb3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJyb2FkY2FzdFVwZGF0ZTxUPihrZXk6IHN0cmluZywgdmFsdWU6IFQsIGNsb2NrOiBudW1iZXIsIHN5bmM6IFN5bmNBZGFwdGVyKTogdm9pZCB7XG4gIHRyeSB7XG4gICAgc3luYy5icm9hZGNhc3Qoe1xuICAgICAga2V5LFxuICAgICAgdmFsdWUsXG4gICAgICBjbG9jayxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oYFtQb2xseV0gRmFpbGVkIHRvIGJyb2FkY2FzdCBzdGF0ZSB1cGRhdGU6ICR7a2V5fWAsIGVycm9yKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseVVwZGF0ZTxUPihlbnRyeTogU3RhdGVFbnRyeTxUPiwgdmFsdWU6IFQsIGNsb2NrOiBudW1iZXIpOiB2b2lkIHtcbiAgZW50cnkudXBkYXRpbmcgPSB0cnVlO1xuICBlbnRyeS5zaWduYWwudmFsdWUgPSB2YWx1ZTtcbiAgZW50cnkuY2xvY2sgPSBjbG9jaztcbiAgZW50cnkudXBkYXRpbmcgPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBHZXQgc3RhdGUgYnkga2V5ICh1c2VmdWwgZm9yIHJldHJpZXZpbmcgc3RhdGUgd2l0aG91dCByZS1jcmVhdGluZylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRlQnlLZXk8VD4oa2V5OiBzdHJpbmcpOiBTaWduYWw8VD4gfCB1bmRlZmluZWQge1xuICBjb25zdCBlbnRyeSA9IHN0YXRlUmVnaXN0cnkuZ2V0KGtleSk7XG4gIHJldHVybiBlbnRyeT8uc2lnbmFsIGFzIHVua25vd24gYXMgU2lnbmFsPFQ+IHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENsZWFyIHN0YXRlIHJlZ2lzdHJ5ICh1c2VmdWwgZm9yIHRlc3RpbmcpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhclN0YXRlUmVnaXN0cnkoKTogdm9pZCB7XG4gIHN0YXRlUmVnaXN0cnkuY2xlYXIoKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBTdGF0ZSBvd25lZCBieSB0aGUgY29tcG9uZW50IGdhbGxlcnkuXG4gKlxuICogVGhlIGdhbGxlcnkgaXMgYSBzdGFuZGFsb25lIGRldiBzdXJmYWNlIHdpdGggbm8gc2VydmVyIHN0YXRlLCBzbyB0aGVzZVxuICogc2lnbmFscyBzdGF5IG1vZHVsZS1sb2NhbCDigJQgdGhleSBuZXZlciBqb2luIGEgc3luY2VkIHN0b3JlIGJ1bmRsZS4gQWN0aW9uXG4gKiBoYW5kbGVycyAoYWN0aW9ucy50cykgcmVhY2ggdGhlbSBieSBpbXBvcnQsIHRoZSB3YXkgZWFsJ3Mgc2hvd2Nhc2UgZG9lcy5cbiAqIGByZXNldEdhbGxlcnlTdG9yZXMoKWAgZXhpc3RzIHNvIHRoZSBicm93c2VyL3Zpc3VhbCB0ZXN0IGNhbiBpc29sYXRlIHJ1bnMuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlRm9ybSwgc2V0RXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vc3JjL2FjdGlvbnNcIjtcbmltcG9ydCB7ICRzdGF0ZSB9IGZyb20gXCIuLi8uLi8uLi9zcmMvc2hhcmVkL2xpYi9zdGF0ZS50c1wiO1xuXG5leHBvcnQgdHlwZSBHYWxsZXJ5VGhlbWUgPSBcInN5c3RlbVwiIHwgXCJsaWdodFwiIHwgXCJkYXJrXCI7XG5cbi8qKiBUaGUgZ2FsbGVyeSdzIEFjdGlvbkZvcm0gYmluZHMgdG8gYW4gZW1wdHkgYnVuZGxlIOKAlCBubyBzdG9yZSBpcyB0b3VjaGVkLiAqL1xuZXhwb3J0IHR5cGUgR2FsbGVyeVN0b3JlcyA9IFJlY29yZDxzdHJpbmcsIG5ldmVyPjtcblxuLyoqIFRoZW1lIG92ZXJyaWRlLCBhcHBsaWVkIHRvIHRoZSBwYW5lbCBhcyBgZGF0YS1wb2xseS10aGVtZWAuIGBzeXN0ZW1gIG9taXRzXG4gKiAgdGhlIGF0dHJpYnV0ZSBhbmQgbGV0cyBgcHJlZmVycy1jb2xvci1zY2hlbWVgIGRlY2lkZS4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVRoZW1lID0gJHN0YXRlPEdhbGxlcnlUaGVtZT4oXCJzeXN0ZW1cIik7XG4vKiogRHJpdmVzIHRoZSBsaXZlIDxNb2RhbD4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlNb2RhbE9wZW4gPSAkc3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuLyoqIERyaXZlcyB0aGUgbGl2ZSA8RHJvcGRvd24+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5RHJvcGRvd25PcGVuID0gJHN0YXRlPGJvb2xlYW4+KGZhbHNlKTtcbi8qKiBTZWxlY3Rpb24gZm9yIHRoZSBzaW5nbGUtc2VsZWN0IDxTZWxlY3Q+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5U2VsZWN0U2luZ2xlID0gJHN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KFtcImNvbWV0XCJdKSk7XG4vKiogU2VsZWN0aW9uIGZvciB0aGUgbXVsdGktc2VsZWN0IDxTZWxlY3Q+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5U2VsZWN0TXVsdGkgPSAkc3RhdGU8U2V0PHN0cmluZz4+KG5ldyBTZXQoW1wiY29tZXRcIiwgXCJuZWJ1bGFcIl0pKTtcbi8qKiBTZWxlY3Rpb24gZm9yIHRoZSBjbGVhcmFibGUgc2luZ2xlLXNlbGVjdCA8U2VsZWN0PiBzcGVjaW1lbi4gU3RhcnRzIGVtcHR5XG4gKiAgc28gdGhlIFwiQW55IOKAplwiIGNsZWFyIG9wdGlvbiBpcyB0aGUgYWN0aXZlIHJvdy4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVNlbGVjdENsZWFyYWJsZSA9ICRzdGF0ZTxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKTtcbi8qKiBTZWxlY3Rpb24gZm9yIHRoZSBsb25nLWxhYmVsIDxTZWxlY3Q+IHNwZWNpbWVuIChwb2xseSMxODApLiBUaGUgbGFiZWwgaXNcbiAqICB3aWRlciB0aGFuIGAtLXBvbGx5LWNvbnRyb2wtbWF4LXdpZHRoYCwgc28gdGhlIHRyaWdnZXIgbXVzdCB0cnVuY2F0ZSBpdFxuICogIHJhdGhlciB0aGFuIHdyYXAgdGhlIGNhcmV0IG9udG8gYSBzZWNvbmQgbGluZS4gRXZlcnkgc2hvcnQtbGFiZWwgc3BlY2ltZW5cbiAqICBwYXNzZWQgdGhyb3VnaG91dCB0aGF0IHJlZ3Jlc3Npb24uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlTZWxlY3RMb25nID0gJHN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KFtcImxvbmdcIl0pKTtcbi8qKiBUaGUgbGl2ZSwgc2lnbmFsLWJvdW5kIDxDaGVja2JveD4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlDaGVja2VkID0gJHN0YXRlPGJvb2xlYW4+KHRydWUpO1xuLyoqIFRoZSBjb250cm9sbGVkIDxUZXh0SW5wdXQ+IHNwZWNpbWVuIHZhbHVlLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5VGV4dCA9ICRzdGF0ZTxzdHJpbmc+KFwiQ29udHJvbGxlZCB2YWx1ZVwiKTtcbi8qKiBMYXN0IHZhbHVlIGNvbW1pdHRlZCBieSB0aGUgPEFjdGlvbklucHV0PiAvIDxBY3Rpb25TZWxlY3Q+IHNwZWNpbWVucy4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeUNvbW1pdHRlZCA9ICRzdGF0ZTxzdHJpbmc+KFwi4oCUXCIpO1xuLyoqIEFjdGl2ZSB0YWIgaWQgZm9yIHRoZSA8VGFicz4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlUYWIgPSAkc3RhdGU8c3RyaW5nPihcIm92ZXJ2aWV3XCIpO1xuLyoqIE5hbWUgb2YgdGhlIGxhc3QgZmlsZSBwaWNrZWQgYnkgdGhlIDxGaWxlSW5wdXQ+IHNwZWNpbWVuLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5RmlsZU5hbWUgPSAkc3RhdGU8c3RyaW5nPihcIuKAlFwiKTtcblxuLyoqXG4gKiBUaGUgZm9ybSBiZWhpbmQgdGhlIDxBY3Rpb25Gb3JtPiBzcGVjaW1lbi4gYGNyZWF0ZUZvcm1gIHJlcXVpcmVzIGBiaW5kU3RvcmVzYFxuICogYmVmb3JlIGEgc3VibWl0IGNhbiBydW47IGNsaWVudC50c3ggYmluZHMgaXQgdG8gdGhlIGVtcHR5IGdhbGxlcnkgYnVuZGxlIGF0XG4gKiBib290LiBJdHMgYC5hY3Rpb25zYCBhcmUgc3ByZWFkIGludG8gdGhlIHJlZ2lzdHJ5IChzZWUgYWN0aW9ucy50cykuXG4gKi9cbmV4cG9ydCBjb25zdCBnYWxsZXJ5Rm9ybSA9IGNyZWF0ZUZvcm08eyBmdWxsTmFtZTogc3RyaW5nOyBlbWFpbDogc3RyaW5nIH0sIEdhbGxlcnlTdG9yZXM+KHtcbiAgbmFtZTogXCJnYWxsZXJ5LWZvcm1cIixcbiAgaW5pdGlhbFZhbHVlczogeyBmdWxsTmFtZTogXCJcIiwgZW1haWw6IFwiXCIgfSxcbiAgb25TdWJtaXQ6ICh7IHZhbHVlcyB9KSA9PiB7XG4gICAgc2V0RXJyb3IoXG4gICAgICBgQWN0aW9uRm9ybSBzdWJtaXR0ZWQg4oCUIG5hbWUgXCIke3ZhbHVlcy5mdWxsTmFtZSB8fCBcIihlbXB0eSlcIn1cIiwgYCArXG4gICAgICAgIGBlbWFpbCBcIiR7dmFsdWVzLmVtYWlsIHx8IFwiKGVtcHR5KVwifVwiLmAsXG4gICAgICB7IHNldmVyaXR5OiBcImluZm9cIiB9XG4gICAgKTtcbiAgfSxcbn0pO1xuXG4vKiogUmVzZXQgZXZlcnkgZ2FsbGVyeSBzaWduYWwgdG8gaXRzIGluaXRpYWwgdmFsdWUg4oCUIGZvciB0ZXN0IGlzb2xhdGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldEdhbGxlcnlTdG9yZXMoKTogdm9pZCB7XG4gICRnYWxsZXJ5VGhlbWUudmFsdWUgPSBcInN5c3RlbVwiO1xuICAkZ2FsbGVyeU1vZGFsT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAkZ2FsbGVyeURyb3Bkb3duT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAkZ2FsbGVyeVNlbGVjdFNpbmdsZS52YWx1ZSA9IG5ldyBTZXQoW1wiY29tZXRcIl0pO1xuICAkZ2FsbGVyeVNlbGVjdE11bHRpLnZhbHVlID0gbmV3IFNldChbXCJjb21ldFwiLCBcIm5lYnVsYVwiXSk7XG4gICRnYWxsZXJ5U2VsZWN0Q2xlYXJhYmxlLnZhbHVlID0gbmV3IFNldCgpO1xuICAkZ2FsbGVyeVNlbGVjdExvbmcudmFsdWUgPSBuZXcgU2V0KFtcImxvbmdcIl0pO1xuICAkZ2FsbGVyeUNoZWNrZWQudmFsdWUgPSB0cnVlO1xuICAkZ2FsbGVyeVRleHQudmFsdWUgPSBcIkNvbnRyb2xsZWQgdmFsdWVcIjtcbiAgJGdhbGxlcnlDb21taXR0ZWQudmFsdWUgPSBcIuKAlFwiO1xuICAkZ2FsbGVyeVRhYi52YWx1ZSA9IFwib3ZlcnZpZXdcIjtcbiAgJGdhbGxlcnlGaWxlTmFtZS52YWx1ZSA9IFwi4oCUXCI7XG4gIGdhbGxlcnlGb3JtLmNsb3NlKCk7XG59XG4iLAogICAgIi8qKlxuICogQWN0aW9ucyBmb3IgdGhlIGdhbGxlcnkncyBpbnRlcmFjdGl2ZSBzcGVjaW1lbnMuIEV2ZXJ5IGhhbmRsZXIgZHJpdmVzIGFcbiAqIG1vZHVsZS1sb2NhbCBzaWduYWwgKHN0b3Jlcy50cykgb3IgYSBwb2xseSBvdmVybGF5IHByaW1pdGl2ZSDigJQgbm9uZSB0b3VjaGVzIGFcbiAqIHN0b3JlIGJ1bmRsZSwgc28gdGhlIGdhbGxlcnkgc3RheXMgYSBzZWxmLWNvbnRhaW5lZCBkZXYgc3VyZmFjZS4gU3ByZWFkaW5nXG4gKiBgZ2FsbGVyeUZvcm0uYWN0aW9uc2AgYWRkcyB0aGUgYXV0by1yZWdpc3RlcmVkIGBnYWxsZXJ5LWZvcm06e29wZW4sY2xvc2UsXG4gKiBzdWJtaXR9YCBoYW5kbGVycy4gY2xpZW50LnRzeCB3aXJlcyB0aGlzIHJlZ2lzdHJ5IGludG8gdGhlIGRvY3VtZW50IHZpYVxuICogYGluc3RhbGxFdmVudERlbGVnYXRpb25gLCBleGFjdGx5IGFzIGEgcmVhbCBjb25zdW1lciBhcHAgd291bGQuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBY3Rpb25SZWdpc3RyeSwgRXJyb3JTZXZlcml0eSB9IGZyb20gXCIuLi8uLi8uLi9zcmMvYWN0aW9uc1wiO1xuaW1wb3J0IHsgc2V0RXJyb3IgfSBmcm9tIFwiLi4vLi4vLi4vc3JjL2FjdGlvbnNcIjtcbmltcG9ydCB7IGNvbmZpcm0gfSBmcm9tIFwiLi4vLi4vLi4vc3JjL3BvbGx5LXVpXCI7XG5pbXBvcnQge1xuICAkZ2FsbGVyeUNvbW1pdHRlZCxcbiAgJGdhbGxlcnlNb2RhbE9wZW4sXG4gICRnYWxsZXJ5VGFiLFxuICAkZ2FsbGVyeVRoZW1lLFxuICB0eXBlIEdhbGxlcnlTdG9yZXMsXG4gIHR5cGUgR2FsbGVyeVRoZW1lLFxuICBnYWxsZXJ5Rm9ybSxcbn0gZnJvbSBcIi4vc3RvcmVzLnRzXCI7XG5cbmNvbnN0IFRIRU1FUzogcmVhZG9ubHkgR2FsbGVyeVRoZW1lW10gPSBbXCJzeXN0ZW1cIiwgXCJsaWdodFwiLCBcImRhcmtcIl07XG5jb25zdCBTRVZFUklUSUVTOiByZWFkb25seSBFcnJvclNldmVyaXR5W10gPSBbXCJpbmZvXCIsIFwid2FybmluZ1wiLCBcImVycm9yXCJdO1xuXG5leHBvcnQgY29uc3QgR0FMTEVSWV9BQ1RJT05TOiBBY3Rpb25SZWdpc3RyeTxHYWxsZXJ5U3RvcmVzPiA9IHtcbiAgLi4uZ2FsbGVyeUZvcm0uYWN0aW9ucyxcblxuICBcImdhbGxlcnk6c2V0LXRoZW1lXCI6ICh7IGRhdGEgfSkgPT4ge1xuICAgIGNvbnN0IHRoZW1lID0gZGF0YVtcInRoZW1lXCJdO1xuICAgIGlmICh0aGVtZSA9PT0gXCJzeXN0ZW1cIiB8fCB0aGVtZSA9PT0gXCJsaWdodFwiIHx8IHRoZW1lID09PSBcImRhcmtcIikge1xuICAgICAgJGdhbGxlcnlUaGVtZS52YWx1ZSA9IHRoZW1lO1xuICAgIH1cbiAgfSxcblxuICBcImdhbGxlcnk6c2V0LXRhYlwiOiAoeyBkYXRhIH0pID0+IHtcbiAgICBjb25zdCBpZCA9IGRhdGFbXCJpZFwiXTtcbiAgICBpZiAodHlwZW9mIGlkID09PSBcInN0cmluZ1wiKSAkZ2FsbGVyeVRhYi52YWx1ZSA9IGlkO1xuICB9LFxuXG4gIFwiZ2FsbGVyeTptb2RhbC1vcGVuXCI6ICgpID0+IHtcbiAgICAkZ2FsbGVyeU1vZGFsT3Blbi52YWx1ZSA9IHRydWU7XG4gIH0sXG5cbiAgXCJnYWxsZXJ5OmNvbW1pdFwiOiAoeyBkYXRhIH0pID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGRhdGFbXCJ2YWx1ZVwiXTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSAkZ2FsbGVyeUNvbW1pdHRlZC52YWx1ZSA9IHZhbHVlO1xuICB9LFxuXG4gIFwiZ2FsbGVyeTp0b2FzdFwiOiAoeyBkYXRhIH0pID0+IHtcbiAgICBjb25zdCBzZXZlcml0eSA9IFNFVkVSSVRJRVMuZmluZCgocykgPT4gcyA9PT0gZGF0YVtcInNldmVyaXR5XCJdKSA/PyBcImluZm9cIjtcbiAgICBzZXRFcnJvcihgVGhpcyBpcyBhICR7c2V2ZXJpdHl9IHRvYXN0IOKAlCBjbGljayBpdCBvciB3YWl0IGZvciBpdCB0byBkaXNtaXNzLmAsIHtcbiAgICAgIHNldmVyaXR5LFxuICAgIH0pO1xuICB9LFxuXG4gIFwiZ2FsbGVyeTpjb25maXJtXCI6IGFzeW5jICh7IGRhdGEgfSkgPT4ge1xuICAgIGNvbnN0IGRhbmdlciA9IGRhdGFbXCJkYW5nZXJcIl0gPT09IFwidHJ1ZVwiO1xuICAgIGNvbnN0IG9rID0gYXdhaXQgY29uZmlybSh7XG4gICAgICB0aXRsZTogZGFuZ2VyID8gXCJEZWxldGUgdGhpcyBpdGVtP1wiIDogXCJTYXZlIHlvdXIgY2hhbmdlcz9cIixcbiAgICAgIGJvZHk6IGRhbmdlclxuICAgICAgICA/IFwiVGhpcyBjYW5ub3QgYmUgdW5kb25lLiBUaGUgaXRlbSB3aWxsIGJlIHBlcm1hbmVudGx5IHJlbW92ZWQuXCJcbiAgICAgICAgOiBcIllvdXIgY2hhbmdlcyB3aWxsIGJlIGFwcGxpZWQgaW1tZWRpYXRlbHkuXCIsXG4gICAgICBkYW5nZXIsXG4gICAgICBjb25maXJtTGFiZWw6IGRhbmdlciA/IFwiRGVsZXRlXCIgOiBcIlNhdmVcIixcbiAgICB9KTtcbiAgICBzZXRFcnJvcihgQ29uZmlybURpYWxvZyByZXNvbHZlZCAke1N0cmluZyhvayl9LmAsIHsgc2V2ZXJpdHk6IG9rID8gXCJpbmZvXCIgOiBcIndhcm5pbmdcIiB9KTtcbiAgfSxcbn07XG5cbi8qKiBUaGUgdGhlbWUgY3ljbGUsIGV4cG9zZWQgc28gdGhlIHBhbmVsIGNhbiByZW5kZXIgb25lIGJ1dHRvbiBwZXIgb3B0aW9uLiAqL1xuZXhwb3J0IHsgVEhFTUVTIH07XG4iLAogICAgIi8qKlxuICogVGhlIGdhbGxlcnkgY2F0YWxvZ3VlIOKAlCBvbmUgc2VjdGlvbiBwZXIgcG9sbHktdWkgcHJpbWl0aXZlLCBlYWNoIHJlbmRlcmluZ1xuICogdGhlIGNvbmZpZ3VyYXRpb25zIHdvcnRoIHNlZWluZy4gQWRhcHRlZCBmcm9tIGVhbCdzIHNob3djYXNlICh3aGljaCBjb25zdW1lc1xuICogdGhpcyB2ZXJ5IGxpYnJhcnkpLCByZXBvaW50ZWQgYXQgdGhlIGxvY2FsIHNvdXJjZSBzbyB0aGUgZ2FsbGVyeSByZW5kZXJzIHRoZVxuICogcHJpbWl0aXZlcyBleGFjdGx5IGFzIHRoZXkgc2hpcC5cbiAqXG4gKiBFdmVyeSBzZWN0aW9uIGNhcnJpZXMgYSBgY29tcG9uZW50YCBuYW1pbmcgdGhlIHBvbGx5LXVpIGV4cG9ydCBpdCBjb3ZlcnM7XG4gKiByZWdpc3RyeS1jb3ZlcmFnZS50cyBhc3NlcnRzIHRoYXQgZXZlcnkgY29tcG9uZW50IGluIHJlZ2lzdHJ5LmdlbmVyYXRlZC50c1xuICogaGFzIGEgc2VjdGlvbiBoZXJlLCBzbyBhIG5ldyBwcmltaXRpdmUgY2FuJ3QgbGFuZCB3aXRob3V0IGEgc3BlY2ltZW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHtcbiAgQWN0aW9uRm9ybSxcbiAgQWN0aW9uSW5wdXQsXG4gIEFjdGlvblNlbGVjdCxcbiAgQmFkZ2UsXG4gIEJ1dHRvbixcbiAgQ2FyZCxcbiAgQ2hlY2tib3gsXG4gIENsdXN0ZXIsXG4gIENvZGUsXG4gIENvbGxhcHNpYmxlLFxuICBEcm9wZG93bixcbiAgRmlsZUlucHV0LFxuICBIdG1sLFxuICBMYXlvdXQsXG4gIExpbmssXG4gIE1vZGFsLFxuICBPdXRwdXQsXG4gIFNlbGVjdCxcbiAgU2tlbGV0b24sXG4gIFN1cmZhY2UsXG4gIFRhYnMsXG4gIFRleHQsXG4gIFRleHRJbnB1dCxcbiAgVG9nZ2xlLFxufSBmcm9tIFwiLi4vLi4vLi4vc3JjL3BvbGx5LXVpXCI7XG5pbXBvcnQge1xuICAkZ2FsbGVyeUNoZWNrZWQsXG4gICRnYWxsZXJ5Q29tbWl0dGVkLFxuICAkZ2FsbGVyeURyb3Bkb3duT3BlbixcbiAgJGdhbGxlcnlGaWxlTmFtZSxcbiAgJGdhbGxlcnlNb2RhbE9wZW4sXG4gICRnYWxsZXJ5U2VsZWN0Q2xlYXJhYmxlLFxuICAkZ2FsbGVyeVNlbGVjdExvbmcsXG4gICRnYWxsZXJ5U2VsZWN0TXVsdGksXG4gICRnYWxsZXJ5U2VsZWN0U2luZ2xlLFxuICAkZ2FsbGVyeVRhYixcbiAgJGdhbGxlcnlUZXh0LFxuICBnYWxsZXJ5Rm9ybSxcbn0gZnJvbSBcIi4vc3RvcmVzLnRzXCI7XG5cbi8qKlxuICogT25lIGNhdGFsb2d1ZWQgZXhhbXBsZTogYSBzdGFnZSBob2xkaW5nIGxpdmUgY29tcG9uZW50KHMpIGFuZCBhIGNhcHRpb25cbiAqIG5hbWluZyB0aGUgY29uZmlndXJhdGlvbiBvbiBzaG93LiBgd2lkZWAgc3BhbnMgZXZlcnkgZ3JpZCBjb2x1bW4gZm9yXG4gKiBzcGVjaW1lbnMgdGhhdCBuZWVkIHRoZSByb29tIChsYXlvdXRzLCBmb3JtcywgY2FyZHMpLlxuICovXG5mdW5jdGlvbiBTcGVjaW1lbihwcm9wczogeyBjYXB0aW9uOiBzdHJpbmc7IHdpZGU/OiBib29sZWFuOyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICB2YXJpYW50PVwic3Vua2VuXCJcbiAgICAgIHJhZGl1cz1cIm1kXCJcbiAgICAgIGJvcmRlcj1cImRlZmF1bHRcIlxuICAgICAgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiXG4gICAgICBjbGFzc05hbWU9e3Byb3BzLndpZGUgPyBcImdhbGxlcnktc3BlY2ltZW4gZ2FsbGVyeS1zcGVjaW1lbi0td2lkZVwiIDogXCJnYWxsZXJ5LXNwZWNpbWVuXCJ9XG4gICAgPlxuICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdhbGxlcnktc3RhZ2VcIj57cHJvcHMuY2hpbGRyZW59PC9kaXY+XG4gICAgICAgIDxUZXh0IHNpemU9XCJ4c1wiIHRvbmU9XCJtdXRlZFwiIGNsYXNzTmFtZT1cImdhbGxlcnktY29kZVwiPlxuICAgICAgICAgIHtwcm9wcy5jYXB0aW9ufVxuICAgICAgICA8L1RleHQ+XG4gICAgICA8L0xheW91dD5cbiAgICA8L1N1cmZhY2U+XG4gICk7XG59XG5cbi8qKiBBIG5ldXRyYWwgZmlsbGVyIGJsb2NrIGZvciB0aGUgbGF5b3V0IHNwZWNpbWVucy4gKi9cbmZ1bmN0aW9uIEJveChwcm9wczogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlIHZhcmlhbnQ9XCJyYWlzZWRcIiByYWRpdXM9XCJzbVwiIGJvcmRlcj1cImRlZmF1bHRcIiBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICA8VGV4dCBzaXplPVwic21cIj57cHJvcHMuY2hpbGRyZW59PC9UZXh0PlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuY29uc3QgU1RBUjogSlNYLkVsZW1lbnQgPSAoXG4gIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiZ2FsbGVyeS1pY29uXCI+XG4gICAg4piFXG4gIDwvc3Bhbj5cbik7XG5cbi8qKlxuICogcG9sbHkjMTgwOiBhIGxhYmVsIHdpZGVyIHRoYW4gYC0tcG9sbHktY29udHJvbC1tYXgtd2lkdGhgLCBzaGFyZWQgYnkgdGhlXG4gKiA8U2VsZWN0PiBhbmQgPEFjdGlvblNlbGVjdD4gbG9uZy1sYWJlbCBzcGVjaW1lbnMgc28gdGhlIHR3byB0cmlnZ2VycyBtdXN0XG4gKiBtZWFzdXJlIHRoZSBzYW1lIGJveC4gRXZlcnkgY2F0YWxvZ3VlZCBTZWxlY3QgdXNlZCBhIHNob3J0IGxhYmVsLCB3aGljaCBpc1xuICogd2h5IGEgdHJpZ2dlciB0aGF0IGhhZCBsb3N0IGl0cyBsYXlvdXQgcm93IHN0aWxsIG1lYXN1cmVkIDQwcHggYW5kIHRoZVxuICogY2FyZXQgb25seSB3cmFwcGVkIGluIGEgY29uc3VtZXIgYXBwLlxuICovXG5jb25zdCBMT05HX1NFTEVDVF9MQUJFTCA9IFwiQSBkZWxpYmVyYXRlbHkgbG9uZyBvcHRpb24gbGFiZWwgdGhhdCBvdmVyZmxvd3MgdGhlIGNvbnRyb2wgbWF4IHdpZHRoXCI7XG5cbmNvbnN0IExPTkdfU0VMRUNUX09QVElPTlMgPSBbXG4gIHsgdmFsdWU6IFwibG9uZ1wiLCBsYWJlbDogTE9OR19TRUxFQ1RfTEFCRUwgfSxcbiAgeyB2YWx1ZTogXCJzaG9ydFwiLCBsYWJlbDogXCJTaG9ydFwiIH0sXG5dO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdhbGxlcnlTZWN0aW9uIHtcbiAgLyoqIEFuY2hvciBpZCBmb3IgdGhlIGluLXBhZ2UgbmF2LiAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogRGlzcGxheSBoZWFkaW5nLiAqL1xuICB0aXRsZTogc3RyaW5nO1xuICAvKiogVGhlIHBvbGx5LXVpIGV4cG9ydCB0aGlzIHNlY3Rpb24gY292ZXJzIChtYXRjaGVkIGFnYWluc3QgdGhlIHJlZ2lzdHJ5KS4gKi9cbiAgY29tcG9uZW50OiBzdHJpbmc7XG4gIC8qKiBPbmUtbGluZSBkZXNjcmlwdGlvbi4gKi9cbiAgc3VtbWFyeTogc3RyaW5nO1xuICByZW5kZXI6ICgpID0+IEpTWC5FbGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgR0FMTEVSWV9TRUNUSU9OUzogcmVhZG9ubHkgR2FsbGVyeVNlY3Rpb25bXSA9IFtcbiAge1xuICAgIGlkOiBcImJhZGdlXCIsXG4gICAgdGl0bGU6IFwiQmFkZ2VcIixcbiAgICBjb21wb25lbnQ6IFwiQmFkZ2VcIixcbiAgICBzdW1tYXJ5OiBcIlNtYWxsIGlubGluZSBzdGF0dXMgY2hpcC4gT25lIHZhcmlhbnQgcGVyIHNlbWFudGljIHRvbmUuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICB7KFtcImRlZmF1bHRcIiwgXCJpbmZvXCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIiwgXCJkYW5nZXJcIl0gYXMgY29uc3QpLm1hcCgodikgPT4gKFxuICAgICAgICAgIDxTcGVjaW1lbiBrZXk9e3Z9IGNhcHRpb249e2B2YXJpYW50PVwiJHt2fVwiYH0+XG4gICAgICAgICAgICA8QmFkZ2UgdmFyaWFudD17dn0+e3Z9PC9CYWRnZT5cbiAgICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICApKX1cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJidXR0b25cIixcbiAgICB0aXRsZTogXCJCdXR0b25cIixcbiAgICBjb21wb25lbnQ6IFwiQnV0dG9uXCIsXG4gICAgc3VtbWFyeTogXCJJbnRlcmFjdGl2ZSBjb250cm9sLiBUaWVyIHNldHMgaW1wb3J0YW5jZSwgY29sb3Igb3ZlcmxheXMgbWVhbmluZywgc2l6ZSBzZXRzIHNjYWxlLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ0aWVyOiBwcmltYXJ5IC8gc2Vjb25kYXJ5IC8gdGVydGlhcnlcIj5cbiAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJwcmltYXJ5XCIgbGFiZWw9XCJQcmltYXJ5XCIgLz5cbiAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJzZWNvbmRhcnlcIiBsYWJlbD1cIlNlY29uZGFyeVwiIC8+XG4gICAgICAgICAgPEJ1dHRvbiB0aWVyPVwidGVydGlhcnlcIiBsYWJlbD1cIlRlcnRpYXJ5XCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjb2xvcjogZGVmYXVsdCAvIGluZm8gLyBzdWNjZXNzIC8gd2FybmluZyAvIGRhbmdlclwiPlxuICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJkZWZhdWx0XCIgbGFiZWw9XCJEZWZhdWx0XCIgLz5cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwiaW5mb1wiIGxhYmVsPVwiSW5mb1wiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cInN1Y2Nlc3NcIiBsYWJlbD1cIlN1Y2Nlc3NcIiAvPlxuICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJ3YXJuaW5nXCIgbGFiZWw9XCJXYXJuaW5nXCIgLz5cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwiZGFuZ2VyXCIgbGFiZWw9XCJEYW5nZXJcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNpemU6IHNtYWxsIC8gbm9ybWFsIC8gbGFyZ2VcIj5cbiAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIGxhYmVsPVwiU21hbGxcIiAvPlxuICAgICAgICAgIDxCdXR0b24gc2l6ZT1cIm5vcm1hbFwiIGxhYmVsPVwiTm9ybWFsXCIgLz5cbiAgICAgICAgICA8QnV0dG9uIHNpemU9XCJsYXJnZVwiIGxhYmVsPVwiTGFyZ2VcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPEJ1dHRvbiBsYWJlbD1cIkRpc2FibGVkXCIgZGlzYWJsZWQgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJpY29uICsgbGFiZWxcIj5cbiAgICAgICAgICA8QnV0dG9uIGljb249e1NUQVJ9IGxhYmVsPVwiV2l0aCBpY29uXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjaXJjbGUgKGljb24tb25seSBuZWVkcyBhcmlhLWxhYmVsKVwiPlxuICAgICAgICAgIDxCdXR0b24gY2lyY2xlIGFyaWEtbGFiZWw9XCJTdGFyXCIgbGFiZWw9e1NUQVJ9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaHJlZiDigJQgcmVuZGVycyBhbiA8YT5cIj5cbiAgICAgICAgICA8QnV0dG9uIGhyZWY9XCIjYnV0dG9uXCIgdGllcj1cInNlY29uZGFyeVwiIGxhYmVsPVwiTGluayBidXR0b25cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImZ1bGxXaWR0aFwiIHdpZGU+XG4gICAgICAgICAgPEJ1dHRvbiBmdWxsV2lkdGggdGllcj1cInByaW1hcnlcIiBsYWJlbD1cIkZ1bGwtd2lkdGggYnV0dG9uXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgey8qIFRoZSB0d28gcm93cyBzaGFyZSBhIGxlZnQgZWRnZSwgc28gdGhlIG9mZnNldCBpcyB0aGUgd2hvbGUgcG9pbnQ6XG4gICAgICAgICAgICB0aGUgZGVmYXVsdCBidXR0b24gYWxpZ25zIGl0cyBCT1ggdG8gdGhhdCBlZGdlIGFuZCBpdHMgbGFiZWwgc2l0c1xuICAgICAgICAgICAgYW4gaW5saW5lLXBhZGRpbmcgZnVydGhlciBpbjsgdGhlIGZsdXNoIG9uZSBwdXRzIHRoZSBMQUJFTCB0aGVyZS4gKi99XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZmx1c2gg4oCUIGxhYmVsIG9uIHRoZSB0ZXh0IGVkZ2UsIGZvciBhIHRlcnRpYXJ5IGJ1dHRvbiBiZXNpZGUgY29weVwiIHdpZGU+XG4gICAgICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbVwiIHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgICBBIGxpbmUgb2YgYm9keSBjb3B5IGZvciB0aGUgbGVmdCBlZGdlLlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPENsdXN0ZXI+XG4gICAgICAgICAgICAgIDxCdXR0b24gdGllcj1cInRlcnRpYXJ5XCIgbGFiZWw9XCJEZWZhdWx0IOKAlCBib3ggYWxpZ25zXCIgLz5cbiAgICAgICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgICAgICAgIDxDbHVzdGVyPlxuICAgICAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJ0ZXJ0aWFyeVwiIGZsdXNoIGxhYmVsPVwiRmx1c2gg4oCUIGxhYmVsIGFsaWduc1wiIC8+XG4gICAgICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidGV4dFwiLFxuICAgIHRpdGxlOiBcIlRleHRcIixcbiAgICBjb21wb25lbnQ6IFwiVGV4dFwiLFxuICAgIHN1bW1hcnk6IFwiVHlwb2dyYXBoaWMgcHJpbWl0aXZlIOKAlCB0b25lLCBzaXplLCB3ZWlnaHQsIGl0YWxpYywgc3RyaWtldGhyb3VnaCwgYW5kIGxlYWRpbmcuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInRvbmU6IGRlZmF1bHQgLyBtdXRlZCAvIGRhbmdlciAvIHdhcm5pbmcgLyBzdWNjZXNzXCI+XG4gICAgICAgICAgPFRleHQgdG9uZT1cImRlZmF1bHRcIj5EZWZhdWx0PC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJtdXRlZFwiPk11dGVkPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJkYW5nZXJcIj5EYW5nZXI8L1RleHQ+XG4gICAgICAgICAgPFRleHQgdG9uZT1cIndhcm5pbmdcIj5XYXJuaW5nPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJzdWNjZXNzXCI+U3VjY2VzczwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzaXplOiB4cyAvIHNtIC8gbWQgLyBsZyAvIHhsXCI+XG4gICAgICAgICAgeyhbXCJ4c1wiLCBcInNtXCIsIFwibWRcIiwgXCJsZ1wiLCBcInhsXCJdIGFzIGNvbnN0KS5tYXAoKHMpID0+IChcbiAgICAgICAgICAgIDxUZXh0IGtleT17c30gc2l6ZT17c30+XG4gICAgICAgICAgICAgIHtzfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIndlaWdodDogbm9ybWFsIC8gbWVkaXVtIC8gYm9sZFwiPlxuICAgICAgICAgIDxUZXh0IHdlaWdodD1cIm5vcm1hbFwiPk5vcm1hbDwvVGV4dD5cbiAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJtZWRpdW1cIj5NZWRpdW08L1RleHQ+XG4gICAgICAgICAgPFRleHQgd2VpZ2h0PVwiYm9sZFwiPkJvbGQ8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaXRhbGljIC8gc3RyaWtldGhyb3VnaFwiPlxuICAgICAgICAgIDxUZXh0IGl0YWxpYz5JdGFsaWMgZW1waGFzaXM8L1RleHQ+XG4gICAgICAgICAgPFRleHQgc3RyaWtldGhyb3VnaD5TdHJ1Y2sgdGhyb3VnaDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J2xlYWRpbmc9XCJsb29zZVwiIOKAlCBtdWx0aS1saW5lIGJvZHkgY29weScgd2lkZT5cbiAgICAgICAgICA8VGV4dCBhcz1cInBcIiBsZWFkaW5nPVwibG9vc2VcIj5cbiAgICAgICAgICAgIEEgcGFyYWdyYXBoIHJlbmRlcmVkIHdpdGggbG9vc2UgbGVhZGluZy4gUG9sbHkncyBUZXh0IHByaW1pdGl2ZSBiYWNrcyBldmVyeSBzcGFuLFxuICAgICAgICAgICAgcGFyYWdyYXBoLCBsYWJlbCwgYW5kIGNhcHRpb24gc28gY29uc3VtZXJzIG5ldmVyIHJlYWNoIGZvciBhIHJhdyBzdHlsZSBhdHRyaWJ1dGUgdG8gc2V0XG4gICAgICAgICAgICB0b25lLCBzaXplLCB3ZWlnaHQsIG9yIGxpbmUgaGVpZ2h0LlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjb2RlXCIsXG4gICAgdGl0bGU6IFwiQ29kZVwiLFxuICAgIGNvbXBvbmVudDogXCJDb2RlXCIsXG4gICAgc3VtbWFyeTogXCJNb25vc3BhY2UgY29kZSDigJQgaW5saW5lIGJ5IGRlZmF1bHQsIG9yIGEgd3JhcHBlZCBibG9jay5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaW5saW5lXCI+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICBSdW4gPENvZGU+cG9sbHkgZ2FsbGVyeTwvQ29kZT4gdG8gb3BlbiB0aGlzIHBhZ2UuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImJsb2NrXCIgd2lkZT5cbiAgICAgICAgICA8Q29kZSBibG9jaz57J2NvbnN0IGdhbGxlcnkgPSB7XFxuICBzZXJ2ZWQ6IFwiYnkgcG9sbHlcIixcXG59Oyd9PC9Db2RlPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImxpbmtcIixcbiAgICB0aXRsZTogXCJMaW5rXCIsXG4gICAgY29tcG9uZW50OiBcIkxpbmtcIixcbiAgICBzdW1tYXJ5OiBcIkFuY2hvciBwcmltaXRpdmUg4oCUIHVuZGVybGluZSBieSBkZWZhdWx0LCB3aXRoIGV4dGVybmFsLCBzdWJ0bGUsIGFuZCBkb3dubG9hZCBtb2Rlcy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGVmYXVsdFwiPlxuICAgICAgICAgIDxMaW5rIGhyZWY9XCIjbGlua1wiPkluLXBhZ2UgbGluazwvTGluaz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJleHRlcm5hbCDigJQgbmV3IHRhYiwgcmVsPW5vb3BlbmVyXCI+XG4gICAgICAgICAgPExpbmsgaHJlZj1cImh0dHBzOi8vZXhhbXBsZS5jb21cIiBleHRlcm5hbD5cbiAgICAgICAgICAgIEV4dGVybmFsIGxpbmtcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic3VidGxlIOKAlCB1bmRlcmxpbmUgb24gaG92ZXIgb25seVwiPlxuICAgICAgICAgIDxMaW5rIGhyZWY9XCIjbGlua1wiIHN1YnRsZT5cbiAgICAgICAgICAgIFN1YnRsZSBsaW5rXG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRvd25sb2FkXCI+XG4gICAgICAgICAgPExpbmsgaHJlZj1cImRhdGE6dGV4dC9wbGFpbixnYWxsZXJ5XCIgZG93bmxvYWQ9XCJnYWxsZXJ5LnR4dFwiPlxuICAgICAgICAgICAgRG93bmxvYWQgbGlua1xuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJzdXJmYWNlXCIsXG4gICAgdGl0bGU6IFwiU3VyZmFjZVwiLFxuICAgIGNvbXBvbmVudDogXCJTdXJmYWNlXCIsXG4gICAgc3VtbWFyeTogXCJPd25zIHZpc3VhbCBjaHJvbWUg4oCUIGJhY2tncm91bmQsIGJvcmRlciwgcmFkaXVzLCBzaGFkb3csIHBvc2l0aW9uaW5nLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgeyhbXCJwbGFpblwiLCBcInJhaXNlZFwiLCBcInN1bmtlblwiLCBcImJ1YmJsZVwiLCBcImNoaXBcIiwgXCJjYWxsb3V0XCJdIGFzIGNvbnN0KS5tYXAoKHYpID0+IChcbiAgICAgICAgICA8U3BlY2ltZW4ga2V5PXt2fSBjYXB0aW9uPXtgdmFyaWFudD1cIiR7dn1cImB9PlxuICAgICAgICAgICAgPFN1cmZhY2UgdmFyaWFudD17dn0gcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiPlxuICAgICAgICAgICAgICA8VGV4dCBzaXplPVwic21cIj57dn08L1RleHQ+XG4gICAgICAgICAgICA8L1N1cmZhY2U+XG4gICAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgKSl9XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSd2YXJpYW50OiBcImZsb2F0aW5nXCIgLyBcInN0aWNreS1iYXJcIiBwaW4gdG8gdGhlIHZpZXdwb3J0IOKAlCBvbWl0dGVkIGhlcmUnPlxuICAgICAgICAgIDxUZXh0IHNpemU9XCJ4c1wiIHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgUG9zaXRpb25hbCB2YXJpYW50cyBhcmUgcHJldmlld2VkIGluIGNvbnRleHQsIG5vdCBpbiBhIGdyaWQgY2VsbC5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIHsvKiBFcXVhbCBzcXVhcmUgYm94ZXMuIFRoZSBsYWJlbCB1c2VkIHRvIHNpemUgZWFjaCBvbmUsIHNvIHRoZSBsYWRkZXJcbiAgICAgICAgICAgIHdhcyBjb21wYXJlZCBhY3Jvc3MgZml2ZSBkaWZmZXJlbnQgd2lkdGhzICg0Ni8zNS8zNi8yOC8zNSBweCkgYW5kXG4gICAgICAgICAgICBgZnVsbGAgcmVuZGVyZWQgYXMgYSBzdGFkaXVtIHRhbGxlciB0aGFuIGl0IHdhcyB3aWRlIHJhdGhlciB0aGFuIGFcbiAgICAgICAgICAgIGNpcmNsZS4gQSBzcXVhcmUgYm94IG1ha2VzIDk5OTlweCByZWFkIGFzIHRoZSBjaXJjbGUgaXQgaXMuICovfVxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInJhZGl1czogbm9uZSAvIHNtIC8gbWQgLyBsZyAvIGZ1bGxcIj5cbiAgICAgICAgICB7KFtcIm5vbmVcIiwgXCJzbVwiLCBcIm1kXCIsIFwibGdcIiwgXCJmdWxsXCJdIGFzIGNvbnN0KS5tYXAoKHIpID0+IChcbiAgICAgICAgICAgIDxTdXJmYWNlXG4gICAgICAgICAgICAgIGtleT17cn1cbiAgICAgICAgICAgICAgdmFyaWFudD1cInJhaXNlZFwiXG4gICAgICAgICAgICAgIGJvcmRlcj1cImRlZmF1bHRcIlxuICAgICAgICAgICAgICByYWRpdXM9e3J9XG4gICAgICAgICAgICAgIHdpZHRoPVwiNTZweFwiXG4gICAgICAgICAgICAgIGhlaWdodD1cIjU2cHhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TGF5b3V0IGhlaWdodD1cIjEwMCVcIiBhbGlnbkl0ZW1zPVwiY2VudGVyXCIganVzdGlmeUl0ZW1zPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInhzXCI+e3J9PC9UZXh0PlxuICAgICAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgICAgIDwvU3VyZmFjZT5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJib3JkZXI6IG5vbmUgLyBkZWZhdWx0IC8gc3Ryb25nXCI+XG4gICAgICAgICAgeyhbXCJub25lXCIsIFwiZGVmYXVsdFwiLCBcInN0cm9uZ1wiXSBhcyBjb25zdCkubWFwKChiKSA9PiAoXG4gICAgICAgICAgICA8U3VyZmFjZSBrZXk9e2J9IGJvcmRlcj17Yn0gcmFkaXVzPVwibWRcIiBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJ4c1wiPntifTwvVGV4dD5cbiAgICAgICAgICAgIDwvU3VyZmFjZT5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgey8qIE9uIHRoZSBzdW5rZW4gY2FyZCBldmVyeSBzcGVjaW1lbiBzaXRzIG9uLCBhIHNvZnQgc2hhZG93IGxhbmRzIGdyZXlcbiAgICAgICAgICAgIG9uIGdyZXkgYW5kIG5vbmUgb2YgdGhlIHRocmVlIHN0ZXBzIHJlYWQuIFRoZXkgYXJlIGNhc3Qgb24gYSBwbGFpblxuICAgICAgICAgICAgc3VyZmFjZSBoZXJlLCBhbmQgZWFjaCBib3ggaXMgc3F1YXJlIGFuZCBlcXVhbCBzbyB0aGUgb25seSB0aGluZ1xuICAgICAgICAgICAgdGhhdCBkaWZmZXJzIGJldHdlZW4gdGhlbSBpcyB0aGUgc2hhZG93LiAqL31cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzaGFkb3c6IHNtIC8gbWQgLyBsZ1wiPlxuICAgICAgICAgIDxTdXJmYWNlIGJhY2tncm91bmQ9XCJ2YXIoLS1wb2xseS1zdXJmYWNlKVwiIHJhZGl1cz1cIm1kXCIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLWxnKVwiPlxuICAgICAgICAgICAgPENsdXN0ZXIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteGwpXCI+XG4gICAgICAgICAgICAgIHsoW1wic21cIiwgXCJtZFwiLCBcImxnXCJdIGFzIGNvbnN0KS5tYXAoKHMpID0+IChcbiAgICAgICAgICAgICAgICA8U3VyZmFjZSBrZXk9e3N9IHZhcmlhbnQ9XCJyYWlzZWRcIiBzaGFkb3c9e3N9IHJhZGl1cz1cIm1kXCIgd2lkdGg9XCI1NnB4XCIgaGVpZ2h0PVwiNTZweFwiPlxuICAgICAgICAgICAgICAgICAgPExheW91dCBoZWlnaHQ9XCIxMDAlXCIgYWxpZ25JdGVtcz1cImNlbnRlclwiIGp1c3RpZnlJdGVtcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwieHNcIj57c308L1RleHQ+XG4gICAgICAgICAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgICAgICAgICA8L1N1cmZhY2U+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgICAgIDwvU3VyZmFjZT5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjYXJkXCIsXG4gICAgdGl0bGU6IFwiQ2FyZFwiLFxuICAgIGNvbXBvbmVudDogXCJDYXJkXCIsXG4gICAgc3VtbWFyeTogXCJDb21wb3VuZCBvZiBTdXJmYWNlcyDigJQgYSByYWlzZWQgUm9vdCB3cmFwcGluZyBIZWFkZXIsIEJvZHksIGFuZCBGb290ZXIgc2xvdHMuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIkNhcmQuUm9vdCA+IEhlYWRlciAvIEJvZHkgLyBGb290ZXJcIiB3aWRlPlxuICAgICAgICA8Q2FyZC5Sb290IHBhZGRpbmc9XCIwXCI+XG4gICAgICAgICAgPENhcmQuSGVhZGVyIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIj5cbiAgICAgICAgICAgIDxUZXh0IHdlaWdodD1cImJvbGRcIj5DYXJkIGhlYWRlcjwvVGV4dD5cbiAgICAgICAgICA8L0NhcmQuSGVhZGVyPlxuICAgICAgICAgIDxDYXJkLkJvZHkgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiPlxuICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgIFRoZSBib2R5IHNsb3QgY2FycmllcyB0aGUgbWFpbiBjb250ZW50LiBFYWNoIHNsb3QgYWNjZXB0cyB0aGUgZnVsbCBTdXJmYWNlUHJvcHMsIHNvIGl0XG4gICAgICAgICAgICAgIGNhbiBiZSByZXRpbnRlZCBvciByZXBhZGRlZCB3aXRob3V0IHJlYWNoaW5nIHBhc3QgdGhlIHByaW1pdGl2ZS5cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L0NhcmQuQm9keT5cbiAgICAgICAgICA8Q2FyZC5Gb290ZXIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiPlxuICAgICAgICAgICAgPEJ1dHRvbiBzaXplPVwic21hbGxcIiB0aWVyPVwicHJpbWFyeVwiIGxhYmVsPVwiRm9vdGVyIGFjdGlvblwiIC8+XG4gICAgICAgICAgPC9DYXJkLkZvb3Rlcj5cbiAgICAgICAgPC9DYXJkLlJvb3Q+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJza2VsZXRvblwiLFxuICAgIHRpdGxlOiBcIlNrZWxldG9uXCIsXG4gICAgY29tcG9uZW50OiBcIlNrZWxldG9uXCIsXG4gICAgc3VtbWFyeTogXCJTaGltbWVyaW5nIHBsYWNlaG9sZGVyIGZvciBsb2FkaW5nIHN0YXRlcy4gQW5pbWF0aW9uIGhvbm91cnMgcmVkdWNlZC1tb3Rpb24uXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICB7KFtcInRleHRcIiwgXCJyZWN0XCIsIFwiY2lyY2xlXCJdIGFzIGNvbnN0KS5tYXAoKHYpID0+IChcbiAgICAgICAgICA8U3BlY2ltZW4ga2V5PXt2fSBjYXB0aW9uPXtgdmFyaWFudD1cIiR7dn1cImB9PlxuICAgICAgICAgICAgPFNrZWxldG9uIHZhcmlhbnQ9e3Z9IC8+XG4gICAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgKSl9XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY3VzdG9tIHdpZHRoICsgaGVpZ2h0XCI+XG4gICAgICAgICAgPFNrZWxldG9uIHZhcmlhbnQ9XCJyZWN0XCIgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PXs2NH0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJvdXRwdXRcIixcbiAgICB0aXRsZTogXCJPdXRwdXRcIixcbiAgICBjb21wb25lbnQ6IFwiT3V0cHV0XCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiTW9ub3NwYWNlIG91dHB1dCByZWdpb24gZm9yIGNvbW1hbmQgcmVzdWx0cyBvciBsb2dzIOKAlCB3cmFwcywgb3Igc2Nyb2xscyBob3Jpem9udGFsbHkuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRlZmF1bHQg4oCUIHdyYXBzXCIgd2lkZT5cbiAgICAgICAgICA8T3V0cHV0PnBvbGx5IGdhbGxlcnkg4oaSIHNlcnZpbmcgYXQgaHR0cDovL2xvY2FsaG9zdDo0MzIxPC9PdXRwdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic2Nyb2xsIOKAlCBzaW5nbGUgbG9uZyBsaW5lIHNjcm9sbHMgaW5zdGVhZCBvZiB3cmFwcGluZ1wiIHdpZGU+XG4gICAgICAgICAgPE91dHB1dCBzY3JvbGw+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFwiJCBwb2xseSBnYWxsZXJ5IC0tYnVpbGQgLi9kaXN0L2dhbGxlcnkgICAjIG9uZSBsb25nIGxpbmUgdGhhdCBzY3JvbGxzIGhvcml6b250YWxseSByYXRoZXIgdGhhbiB3cmFwcGluZyBvbnRvIHRoZSBuZXh0IHJvd1wiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9PdXRwdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiaHRtbFwiLFxuICAgIHRpdGxlOiBcIkh0bWxcIixcbiAgICBjb21wb25lbnQ6IFwiSHRtbFwiLFxuICAgIHN1bW1hcnk6IFwiUmVuZGVycyBhIHRydXN0ZWQgSFRNTCBzdHJpbmcuIFRoZSBjYWxsZXIgb3ducyBzYW5pdGlzYXRpb24g4oCUIG5ldmVyIHBhc3MgdXNlciBpbnB1dC5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaHRtbD17dHJ1c3RlZCBzdHJpbmd9XCIgd2lkZT5cbiAgICAgICAgPEh0bWwgaHRtbD1cIjxzdHJvbmc+Qm9sZDwvc3Ryb25nPiwgPGVtPml0YWxpYzwvZW0+LCBhbmQgYSA8Y29kZT5jb2RlIHNwYW48L2NvZGU+IGZyb20gYSB0cnVzdGVkIG1hcmt1cCBzdHJpbmcuXCIgLz5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNvbGxhcHNpYmxlXCIsXG4gICAgdGl0bGU6IFwiQ29sbGFwc2libGVcIixcbiAgICBjb21wb25lbnQ6IFwiQ29sbGFwc2libGVcIixcbiAgICBzdW1tYXJ5OiBcIk5hdGl2ZSA8ZGV0YWlscz4vPHN1bW1hcnk+IGRpc2Nsb3N1cmUg4oCUIGtleWJvYXJkIGFuZCBzY3JlZW4tcmVhZGVyIGJlaGF2aW91ciBmcmVlLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjbG9zZWQgYnkgZGVmYXVsdFwiIHdpZGU+XG4gICAgICAgICAgPENvbGxhcHNpYmxlIHN1bW1hcnk9XCJTaG93IG1vcmUgZGV0YWlsXCI+XG4gICAgICAgICAgICA8VGV4dD5UaGlzIGNvbnRlbnQgaXMgcmV2ZWFsZWQgd2hlbiB0aGUgZGlzY2xvc3VyZSBpcyBvcGVuZWQuPC9UZXh0PlxuICAgICAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGVmYXVsdE9wZW5cIiB3aWRlPlxuICAgICAgICAgIDxDb2xsYXBzaWJsZSBzdW1tYXJ5PVwiT3BlbiBmcm9tIHRoZSBzdGFydFwiIGRlZmF1bHRPcGVuPlxuICAgICAgICAgICAgPFRleHQ+VGhpcyBjb2xsYXBzaWJsZSByZW5kZXJzIGV4cGFuZGVkIG9uIGZpcnN0IHBhaW50LjwvVGV4dD5cbiAgICAgICAgICA8L0NvbGxhcHNpYmxlPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImVkaXRhYmxlIGZpZWxkIGluIHRoZSBzdW1tYXJ5IOKAlCBTcGFjZS9FbnRlciBubyBsb25nZXIgY29sbGFwc2UgaXRcIiB3aWRlPlxuICAgICAgICAgIDxDb2xsYXBzaWJsZVxuICAgICAgICAgICAgc3VtbWFyeT17XG4gICAgICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImdhbGxlcnktY29sbGFwc2libGUtc3VtbWFyeVwiIHBsYWNlaG9sZGVyPVwiVHlwZSBhIHNwYWNlIGhlcmXigKZcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUZXh0PlRoZSBoZWFkZXIgZ3VhcmQgY2FuY2VscyB0aGUgZGlzY2xvc3VyZSB0b2dnbGUgZm9yIHRleHQtZW50cnkgZmllbGRzLjwvVGV4dD5cbiAgICAgICAgICA8L0NvbGxhcHNpYmxlPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImxheW91dFwiLFxuICAgIHRpdGxlOiBcIkxheW91dFwiLFxuICAgIGNvbXBvbmVudDogXCJMYXlvdXRcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJUaGUgZ3JpZCBwcmltaXRpdmUuIFByb3BzIG1hcCB0byBDU1MgY3VzdG9tIHByb3BlcnRpZXMg4oCUIG5vIGhhbmQtd3JpdHRlbiBmbGV4IG9yIGdyaWQuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0nY29sdW1ucz1cIjFmciAxZnIgMWZyXCInIHdpZGU+XG4gICAgICAgICAgPExheW91dCBjb2x1bW5zPVwiMWZyIDFmciAxZnJcIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgICAgIDxCb3g+MWZyPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PjFmcjwvQm94PlxuICAgICAgICAgICAgPEJveD4xZnI8L0JveD5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J2NvbHVtbnM9XCJhdXRvIDFmciBhdXRvXCInIHdpZGU+XG4gICAgICAgICAgPExheW91dCBjb2x1bW5zPVwiYXV0byAxZnIgYXV0b1wiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgIDxCb3g+YXV0bzwvQm94PlxuICAgICAgICAgICAgPEJveD4xZnI8L0JveD5cbiAgICAgICAgICAgIDxCb3g+YXV0bzwvQm94PlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInN0YWNrT25Nb2JpbGUg4oCUIGNvbGxhcHNlcyB0byBvbmUgY29sdW1uIOKJpDY0MHB4XCIgd2lkZT5cbiAgICAgICAgICA8TGF5b3V0IGNvbHVtbnM9XCIxZnIgMWZyXCIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCIgc3RhY2tPbk1vYmlsZT5cbiAgICAgICAgICAgIDxCb3g+U2lkZSBieSBzaWRlLCB0aGVuIHN0YWNrZWQ8L0JveD5cbiAgICAgICAgICAgIDxCb3g+U2lkZSBieSBzaWRlLCB0aGVuIHN0YWNrZWQ8L0JveD5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjbHVzdGVyXCIsXG4gICAgdGl0bGU6IFwiQ2x1c3RlclwiLFxuICAgIGNvbXBvbmVudDogXCJDbHVzdGVyXCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiV3JhcHBpbmcgcm93IG9mIHZhcmlhYmxlLXdpZHRoIGl0ZW1zIOKAlCBjaGlwcywgdGFncywgYnV0dG9uIGdyb3Vwcy4gUmVmbG93cyBhcyBzcGFjZSBydW5zIG91dC5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZ2FwIOKAlCBpdGVtcyB3cmFwIG9udG8gbmV3IHJvd3NcIiB3aWRlPlxuICAgICAgICA8Q2x1c3RlciBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICB7W1wiR3JvY2VyaWVzXCIsIFwiRXJyYW5kc1wiLCBcIkhvbWVcIiwgXCJHYXJkZW5cIiwgXCJGaW5hbmNlXCIsIFwiVHJhdmVsXCIsIFwiSGVhbHRoXCIsIFwiQWRtaW5cIl0ubWFwKFxuICAgICAgICAgICAgKHRhZykgPT4gKFxuICAgICAgICAgICAgICA8QmFkZ2Uga2V5PXt0YWd9IHZhcmlhbnQ9XCJpbmZvXCI+XG4gICAgICAgICAgICAgICAge3RhZ31cbiAgICAgICAgICAgICAgPC9CYWRnZT5cbiAgICAgICAgICAgIClcbiAgICAgICAgICApfVxuICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ0YWJzXCIsXG4gICAgdGl0bGU6IFwiVGFic1wiLFxuICAgIGNvbXBvbmVudDogXCJUYWJzXCIsXG4gICAgc3VtbWFyeTogXCJIb3Jpem9udGFsIG5hdiB3aXRoIGFuIGFjdGl2ZS10YWIgYWNjZW50LiBEaXNwYXRjaGVzIGFuIGFjdGlvbiBwZXIgdGFiLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJpbnRlcmFjdGl2ZSDigJQgb25lIHRhYiBkaXNhYmxlZFwiIHdpZGU+XG4gICAgICAgIDxUYWJzXG4gICAgICAgICAgdGFicz17W1xuICAgICAgICAgICAgeyBpZDogXCJvdmVydmlld1wiLCBsYWJlbDogXCJPdmVydmlld1wiIH0sXG4gICAgICAgICAgICB7IGlkOiBcImFjdGl2aXR5XCIsIGxhYmVsOiBcIkFjdGl2aXR5XCIgfSxcbiAgICAgICAgICAgIHsgaWQ6IFwic2V0dGluZ3NcIiwgbGFiZWw6IFwiU2V0dGluZ3NcIiB9LFxuICAgICAgICAgICAgeyBpZDogXCJhcmNoaXZlZFwiLCBsYWJlbDogXCJBcmNoaXZlZFwiLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgIF19XG4gICAgICAgICAgYWN0aXZlVGFiPXskZ2FsbGVyeVRhYi52YWx1ZX1cbiAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OnNldC10YWJcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJHYWxsZXJ5IHRhYnNcIlxuICAgICAgICAvPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiY2hlY2tib3hcIixcbiAgICB0aXRsZTogXCJDaGVja2JveFwiLFxuICAgIGNvbXBvbmVudDogXCJDaGVja2JveFwiLFxuICAgIHN1bW1hcnk6IFwiTmF0aXZlIGNoZWNrYm94IGluIGEgbGFiZWwuIEEgcGxhaW4gYm9vbGVhbiBpcyBjb250cm9sbGVkOyBhIFNpZ25hbCBiaW5kcyBpdHNlbGYuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInVuY2hlY2tlZFwiPlxuICAgICAgICAgIDxDaGVja2JveCBsYWJlbD1cIlVuY2hlY2tlZFwiIGNoZWNrZWQ9e2ZhbHNlfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNoZWNrZWRcIj5cbiAgICAgICAgICA8Q2hlY2tib3ggbGFiZWw9XCJDaGVja2VkXCIgY2hlY2tlZD17dHJ1ZX0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZFwiPlxuICAgICAgICAgIDxDaGVja2JveCBsYWJlbD1cIkRpc2FibGVkXCIgY2hlY2tlZD17dHJ1ZX0gZGlzYWJsZWQgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjaGVja2VkPXtzaWduYWx9IOKAlCBjbGljayB0byB0b2dnbGVcIj5cbiAgICAgICAgICA8Q2hlY2tib3ggbGFiZWw9XCJCb3VuZCB0byBhIHNpZ25hbFwiIGNoZWNrZWQ9eyRnYWxsZXJ5Q2hlY2tlZH0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ0b2dnbGVcIixcbiAgICB0aXRsZTogXCJUb2dnbGVcIixcbiAgICBjb21wb25lbnQ6IFwiVG9nZ2xlXCIsXG4gICAgc3VtbWFyeTogXCJTd2l0Y2gtcm9sZSBjaGVja2JveC4gUGFzc2l2ZSDigJQgdGhlIGNhbGxlciBkcml2ZXMgdGhlIGNoZWNrZWQgc3RhdGUuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm9mZlwiPlxuICAgICAgICAgIDxUb2dnbGUgbGFiZWw9XCJPZmZcIiBjaGVja2VkPXtmYWxzZX0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJvblwiPlxuICAgICAgICAgIDxUb2dnbGUgbGFiZWw9XCJPblwiIGNoZWNrZWQ9e3RydWV9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICA8VG9nZ2xlIGxhYmVsPVwiRGlzYWJsZWRcIiBjaGVja2VkPXt0cnVlfSBkaXNhYmxlZCAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInRleHQtaW5wdXRcIixcbiAgICB0aXRsZTogXCJUZXh0SW5wdXRcIixcbiAgICBjb21wb25lbnQ6IFwiVGV4dElucHV0XCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiU2lnbmFsLWZyaWVuZGx5IG5hdGl2ZSBpbnB1dC4gQSBwbGFpbiBzdHJpbmcgaXMgdW5jb250cm9sbGVkOyBhIFNpZ25hbCBpcyBjb250cm9sbGVkLiBcIiArXG4gICAgICBcImlucHV0VHlwZSBwaWNrcyB0aGUgbmF0aXZlIGtleWJvYXJkIGFuZCB2YWxpZGF0aW9uOyBlcnJvciByZW5kZXJzIGEgbGlua2VkIG1lc3NhZ2UuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0ndmFyaWFudD1cInNpbmdsZVwiIHdpdGggcGxhY2Vob2xkZXInPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tc2luZ2xlXCIgcGxhY2Vob2xkZXI9XCJUeXBlIGhlcmXigKZcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0ndmFyaWFudD1cIm11bHRpXCInPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tbXVsdGlcIiB2YXJpYW50PVwibXVsdGlcIiByb3dzPXszfSBwbGFjZWhvbGRlcj1cIk11bHRpcGxlIGxpbmVz4oCmXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J2lucHV0VHlwZT1cImVtYWlsXCInPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tZW1haWxcIiBpbnB1dFR5cGU9XCJlbWFpbFwiIHBsYWNlaG9sZGVyPVwiYWRhQGV4YW1wbGUuY29tXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J2lucHV0VHlwZT1cIm51bWJlclwiIHdpdGggbWluL21heC9zdGVwJz5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLW51bWJlclwiIGlucHV0VHlwZT1cIm51bWJlclwiIG1pbj17MH0gbWF4PXsxMH0gc3RlcD17MX0gdmFsdWU9XCI1XCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJlcnJvciDigJQgbGlua2VkIG1lc3NhZ2UsIG1hcmtzIGludmFsaWRcIj5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLWVycm9yXCIgdmFsdWU9XCJub3QtYW4tZW1haWxcIiBlcnJvcj1cIkVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcy5cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImludmFsaWRcIj5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLWludmFsaWRcIiB2YWx1ZT1cIm5vdC1hbi1lbWFpbFwiIGludmFsaWQgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZFwiPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tZGlzYWJsZWRcIiB2YWx1ZT1cIkRpc2FibGVkXCIgZGlzYWJsZWQgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJyZWFkT25seVwiPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tcmVhZG9ubHlcIiB2YWx1ZT1cIlJlYWQgb25seVwiIHJlYWRPbmx5IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwidmFsdWU9e3NpZ25hbH0g4oCUIGNvbnRyb2xsZWRcIj5cbiAgICAgICAgICA8VGV4dElucHV0IG5hbWU9XCJkZW1vLWNvbnRyb2xsZWRcIiB2YWx1ZT17JGdhbGxlcnlUZXh0fSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInNlbGVjdFwiLFxuICAgIHRpdGxlOiBcIlNlbGVjdFwiLFxuICAgIGNvbXBvbmVudDogXCJTZWxlY3RcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJEcm9wZG93biBvZiBvcHRpb25zIGJvdW5kIHRvIGEgU2lnbmFsPFNldD4uIFNpbmdsZSByZXBsYWNlcywgbXVsdGkgdG9nZ2xlcy4gXCIgK1xuICAgICAgJ2NsZWFyYWJsZSBwcmVwZW5kcyBhbiBcIkFueSDigKZcIiByb3cgc28gYW4gb3B0aW9uYWwgZmlsdGVyIGhhcyBhIHBhdGggYmFjayB0byB1bnNldC4nLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzaW5nbGUtc2VsZWN0XCI+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgbGFiZWw9XCJQaWNrIG9uZVwiXG4gICAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwiY29tZXRcIiwgbGFiZWw6IFwiQ29tZXRcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcIm5lYnVsYVwiLCBsYWJlbDogXCJOZWJ1bGFcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcInF1YXNhclwiLCBsYWJlbDogXCJRdWFzYXJcIiB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIHNlbGVjdGVkPXskZ2FsbGVyeVNlbGVjdFNpbmdsZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNsZWFyYWJsZSDigJQgc2luZ2xlLXNlbGVjdCB3aXRoIGFuIOKAnEFueSDigKbigJ0gcm93XCI+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgbGFiZWw9XCJGaWx0ZXIgYnlcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBbnkgb2JqZWN0XCJcbiAgICAgICAgICAgIGNsZWFyYWJsZVxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IHZhbHVlOiBcImNvbWV0XCIsIGxhYmVsOiBcIkNvbWV0XCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJuZWJ1bGFcIiwgbGFiZWw6IFwiTmVidWxhXCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJxdWFzYXJcIiwgbGFiZWw6IFwiUXVhc2FyXCIgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBzZWxlY3RlZD17JGdhbGxlcnlTZWxlY3RDbGVhcmFibGV9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJtdWx0aVNlbGVjdFwiPlxuICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgIGxhYmVsPVwiUGljayBzZXZlcmFsXCJcbiAgICAgICAgICAgIG11bHRpU2VsZWN0XG4gICAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwiY29tZXRcIiwgbGFiZWw6IFwiQ29tZXRcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcIm5lYnVsYVwiLCBsYWJlbDogXCJOZWJ1bGFcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcInF1YXNhclwiLCBsYWJlbDogXCJRdWFzYXJcIiB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIHNlbGVjdGVkPXskZ2FsbGVyeVNlbGVjdE11bHRpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibG9uZyBsYWJlbCDigJQgdHJ1bmNhdGVzLCBjYXJldCBzdGF5cyBvbiB0aGUgcm93IChwb2xseSMxODApXCI+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgaWQ9XCJnYWxsZXJ5LXNlbGVjdC1sb25nXCJcbiAgICAgICAgICAgIGxhYmVsPVwiTG9uZyBsYWJlbFwiXG4gICAgICAgICAgICBvcHRpb25zPXtMT05HX1NFTEVDVF9PUFRJT05TfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9eyRnYWxsZXJ5U2VsZWN0TG9uZ31cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImZpbGUtaW5wdXRcIixcbiAgICB0aXRsZTogXCJGaWxlSW5wdXRcIixcbiAgICBjb21wb25lbnQ6IFwiRmlsZUlucHV0XCIsXG4gICAgc3VtbWFyeTogXCJTdHlsZWQgd3JhcHBlciBvdmVyIGEgbmF0aXZlIGZpbGUgcGlja2VyLiBIYW5kcyB0aGUgY2hvc2VuIEZpbGVMaXN0IHRvIG9uRmlsZXMuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm9uRmlsZXMg4oCUIHBpY2sgYSBmaWxlXCI+XG4gICAgICAgICAgPEZpbGVJbnB1dFxuICAgICAgICAgICAgbGFiZWw9XCJDaG9vc2UgZmlsZVwiXG4gICAgICAgICAgICBvbkZpbGVzPXsoZmlsZXMpID0+IHtcbiAgICAgICAgICAgICAgJGdhbGxlcnlGaWxlTmFtZS52YWx1ZSA9IGZpbGVzWzBdPy5uYW1lID8/IFwi4oCUXCI7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiYWNjZXB0ICsgbXVsdGlwbGVcIj5cbiAgICAgICAgICA8RmlsZUlucHV0XG4gICAgICAgICAgICBsYWJlbD1cIkNob29zZSBpbWFnZXNcIlxuICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgb25GaWxlcz17KGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICRnYWxsZXJ5RmlsZU5hbWUudmFsdWUgPSBmaWxlc1swXT8ubmFtZSA/PyBcIuKAlFwiO1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPEZpbGVJbnB1dFxuICAgICAgICAgICAgbGFiZWw9XCJEaXNhYmxlZFwiXG4gICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgICAgb25GaWxlcz17KCkgPT4ge1xuICAgICAgICAgICAgICAvKiBkaXNhYmxlZCDigJQgbmV2ZXIgaW52b2tlZCAqL1xuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImxhc3QgcGlja2VkIGZpbGVcIiB3aWRlPlxuICAgICAgICAgIDxUZXh0IHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgTGFzdCBwaWNrZWQ6IDxDb2RlPnskZ2FsbGVyeUZpbGVOYW1lLnZhbHVlfTwvQ29kZT5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiZHJvcGRvd25cIixcbiAgICB0aXRsZTogXCJEcm9wZG93blwiLFxuICAgIGNvbXBvbmVudDogXCJEcm9wZG93blwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIkxvdy1sZXZlbCB0cmlnZ2VyICsgcG9wb3ZlciBwbHVtYmluZy4gVGhlIHByaW1pdGl2ZSBpdHNlbGYgaGFzIG5vIGNocm9tZSDigJQgXCIgK1xuICAgICAgXCJjb25zdW1lcnMgKFNlbGVjdCwgQWN0aW9uU2VsZWN0KSB3cmFwIGl0IHdpdGggdGhlIHN0eWxlZCB0cmlnZ2VyIGFuZCBjYXJldC5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwidHJpZ2dlciBkcmVzc2VkIHZpYSB0cmlnZ2VyQ2xhc3NOYW1lICsgZGF0YS1vcGVuXCI+XG4gICAgICAgIDxEcm9wZG93blxuICAgICAgICAgIGlzT3Blbj17JGdhbGxlcnlEcm9wZG93bk9wZW59XG4gICAgICAgICAgdHJpZ2dlckNsYXNzTmFtZT1cImdhbGxlcnktZHJvcGRvd24tdHJpZ2dlclwiXG4gICAgICAgICAgdHJpZ2dlcj17XG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICA8c3Bhbj5PcGVuIG1lbnU8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2FsbGVyeS1kcm9wZG93bi1jYXJldFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICA8Lz5cbiAgICAgICAgICB9XG4gICAgICAgID5cbiAgICAgICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICAgIDxUZXh0PkZpcnN0IGl0ZW08L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD5TZWNvbmQgaXRlbTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0PlRoaXJkIGl0ZW08L1RleHQ+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvRHJvcGRvd24+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJhY3Rpb24taW5wdXRcIixcbiAgICB0aXRsZTogXCJBY3Rpb25JbnB1dFwiLFxuICAgIGNvbXBvbmVudDogXCJBY3Rpb25JbnB1dFwiLFxuICAgIHN1bW1hcnk6IFwiRHVhbC1tb2RlIHZpZXcvZWRpdCBmaWVsZC4gQ2xpY2sgdG8gZWRpdDsgY29tbWl0IGRpc3BhdGNoZXMgYW4gYWN0aW9uLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J3NhdmVPbj1cImJsdXJcIic+XG4gICAgICAgICAgPEFjdGlvbklucHV0XG4gICAgICAgICAgICB2YWx1ZT1cIkNsaWNrIHRvIGVkaXQsIGNvbW1pdHMgb24gYmx1clwiXG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICBzYXZlT249XCJibHVyXCJcbiAgICAgICAgICAgIGFyaWFMYWJlbD1cIkJsdXItY29tbWl0IGRlbW9cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdzYXZlT249XCJlbnRlclwiJz5cbiAgICAgICAgICA8QWN0aW9uSW5wdXRcbiAgICAgICAgICAgIHZhbHVlPVwiRWRpdCBhbmQgcHJlc3MgRW50ZXJcIlxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgc2F2ZU9uPVwiZW50ZXJcIlxuICAgICAgICAgICAgYXJpYUxhYmVsPVwiRW50ZXItY29tbWl0IGRlbW9cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdpbnB1dFR5cGU9XCJkYXRlXCInPlxuICAgICAgICAgIDxBY3Rpb25JbnB1dFxuICAgICAgICAgICAgdmFsdWU9XCIyMDI2LTA1LTIyXCJcbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIGlucHV0VHlwZT1cImRhdGVcIlxuICAgICAgICAgICAgc2F2ZU9uPVwiYmx1clwiXG4gICAgICAgICAgICBhcmlhTGFiZWw9XCJEYXRlIGRlbW9cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSd2YXJpYW50PVwibXVsdGlcIic+XG4gICAgICAgICAgPEFjdGlvbklucHV0XG4gICAgICAgICAgICB2YWx1ZT1cIkEgbG9uZ2VyLCBtdWx0aS1saW5lIHZhbHVlXCJcbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIHZhcmlhbnQ9XCJtdWx0aVwiXG4gICAgICAgICAgICBzYXZlT249XCJibHVyXCJcbiAgICAgICAgICAgIGFyaWFMYWJlbD1cIk11bHRpLWxpbmUgZGVtb1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJsYXN0IGNvbW1pdHRlZCB2YWx1ZVwiIHdpZGU+XG4gICAgICAgICAgPFRleHQgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICBMYXN0IGNvbW1pdHRlZDogPENvZGU+eyRnYWxsZXJ5Q29tbWl0dGVkLnZhbHVlfTwvQ29kZT5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiYWN0aW9uLXNlbGVjdFwiLFxuICAgIHRpdGxlOiBcIkFjdGlvblNlbGVjdFwiLFxuICAgIGNvbXBvbmVudDogXCJBY3Rpb25TZWxlY3RcIixcbiAgICBzdW1tYXJ5OiBcIlNpbmdsZS1zZWxlY3QgdGhhdCBjb21taXRzIGEgcGxhaW4gc3RyaW5nIHZhbHVlIHRocm91Z2ggdGhlIGFjdGlvbiBzeXN0ZW0uXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNvbW1pdHMgdmlhIGFjdGlvblwiPlxuICAgICAgICAgIDxBY3Rpb25TZWxlY3RcbiAgICAgICAgICAgIGxhYmVsPVwiUHJpb3JpdHlcIlxuICAgICAgICAgICAgdmFsdWU9XCJtZWRpdW1cIlxuICAgICAgICAgICAgb3B0aW9ucz17W1xuICAgICAgICAgICAgICB7IHZhbHVlOiBcImxvd1wiLCBsYWJlbDogXCJMb3dcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcIm1lZGl1bVwiLCBsYWJlbDogXCJNZWRpdW1cIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcImhpZ2hcIiwgbGFiZWw6IFwiSGlnaFwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGlzYWJsZWQg4oCUIHJlbmRlcnMgYXMgc3RhdGljIHRleHRcIj5cbiAgICAgICAgICA8QWN0aW9uU2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIlByaW9yaXR5XCJcbiAgICAgICAgICAgIHZhbHVlPVwiaGlnaFwiXG4gICAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibG93XCIsIGxhYmVsOiBcIkxvd1wiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibWVkaXVtXCIsIGxhYmVsOiBcIk1lZGl1bVwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwiaGlnaFwiLCBsYWJlbDogXCJIaWdoXCIgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibG9uZyBsYWJlbCDigJQgdHJ1bmNhdGVzLCBjYXJldCBzdGF5cyBvbiB0aGUgcm93IChwb2xseSMxODApXCI+XG4gICAgICAgICAgPEFjdGlvblNlbGVjdFxuICAgICAgICAgICAgaWQ9XCJnYWxsZXJ5LWFjdGlvbi1zZWxlY3QtbG9uZ1wiXG4gICAgICAgICAgICBsYWJlbD1cIkxvbmcgbGFiZWxcIlxuICAgICAgICAgICAgdmFsdWU9XCJsb25nXCJcbiAgICAgICAgICAgIG9wdGlvbnM9e0xPTkdfU0VMRUNUX09QVElPTlN9XG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJsb25nIGxhYmVsLCBkaXNhYmxlZCDigJQgb25lIHJvdyBhdCB0aGUgY29udHJvbCBoZWlnaHRcIj5cbiAgICAgICAgICA8QWN0aW9uU2VsZWN0XG4gICAgICAgICAgICBpZD1cImdhbGxlcnktYWN0aW9uLXNlbGVjdC1sb25nLWRpc2FibGVkXCJcbiAgICAgICAgICAgIGxhYmVsPVwiTG9uZyBsYWJlbFwiXG4gICAgICAgICAgICB2YWx1ZT1cImxvbmdcIlxuICAgICAgICAgICAgb3B0aW9ucz17TE9OR19TRUxFQ1RfT1BUSU9OU31cbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJlbXB0eSDigJQgdGhlIHBsYWNlaG9sZGVyIGlzIHRoZSBzYW1lIGJveCBhcyBhIHZhbHVlXCI+XG4gICAgICAgICAgPEFjdGlvblNlbGVjdFxuICAgICAgICAgICAgaWQ9XCJnYWxsZXJ5LWFjdGlvbi1zZWxlY3QtbG9uZy1lbXB0eVwiXG4gICAgICAgICAgICBsYWJlbD1cIkxvbmcgcGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgdmFsdWU9XCJcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e0xPTkdfU0VMRUNUX0xBQkVMfVxuICAgICAgICAgICAgb3B0aW9ucz17TE9OR19TRUxFQ1RfT1BUSU9OU31cbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIndpZGUg4oCUIHNob3J0IGxhYmVsLCBzdGlsbCBvbmUgY2VudHJlZCByb3dcIj5cbiAgICAgICAgICA8QWN0aW9uU2VsZWN0XG4gICAgICAgICAgICBpZD1cImdhbGxlcnktYWN0aW9uLXNlbGVjdC13aWRlXCJcbiAgICAgICAgICAgIGxhYmVsPVwiV2lkZVwiXG4gICAgICAgICAgICB2YWx1ZT1cInNob3J0XCJcbiAgICAgICAgICAgIG9wdGlvbnM9e0xPTkdfU0VMRUNUX09QVElPTlN9XG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICB3aWRlXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJhY3Rpb24tZm9ybVwiLFxuICAgIHRpdGxlOiBcIkFjdGlvbkZvcm1cIixcbiAgICBjb21wb25lbnQ6IFwiQWN0aW9uRm9ybVwiLFxuICAgIHN1bW1hcnk6IFwiV3JhcHMgYSBuYXRpdmUgZm9ybSB3aXRoIHRoZSBhY3Rpb24gcGF0dGVybiDigJQgc3VibWl0IGRpc3BhdGNoZXMgdGhlIGZvcm0gaGFuZGxlci5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZm9ybSB3aXRoIFRleHRJbnB1dCBmaWVsZHMgKyBhIHN1Ym1pdCBCdXR0b25cIiB3aWRlPlxuICAgICAgICA8QWN0aW9uRm9ybSBmb3JtPXtnYWxsZXJ5Rm9ybX0gYXJpYS1sYWJlbD1cIkdhbGxlcnkgZGVtbyBmb3JtXCI+XG4gICAgICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgICAgIDxUZXh0IGFzPVwibGFiZWxcIiBzaXplPVwic21cIiB0b25lPVwibXV0ZWRcIiBodG1sRm9yPVwiZ2FsbGVyeS1mb3JtLW5hbWVcIj5cbiAgICAgICAgICAgICAgRnVsbCBuYW1lXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dElucHV0IGlkPVwiZ2FsbGVyeS1mb3JtLW5hbWVcIiBuYW1lPVwiZnVsbE5hbWVcIiBwbGFjZWhvbGRlcj1cIkFkYSBMb3ZlbGFjZVwiIC8+XG4gICAgICAgICAgICA8VGV4dCBhcz1cImxhYmVsXCIgc2l6ZT1cInNtXCIgdG9uZT1cIm11dGVkXCIgaHRtbEZvcj1cImdhbGxlcnktZm9ybS1lbWFpbFwiPlxuICAgICAgICAgICAgICBFbWFpbFxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPFRleHRJbnB1dCBpZD1cImdhbGxlcnktZm9ybS1lbWFpbFwiIG5hbWU9XCJlbWFpbFwiIHBsYWNlaG9sZGVyPVwiYWRhQGV4YW1wbGUuY29tXCIgLz5cbiAgICAgICAgICAgIDxCdXR0b24gdHlwZT1cInN1Ym1pdFwiIHRpZXI9XCJwcmltYXJ5XCIgY29sb3I9XCJpbmZvXCIgbGFiZWw9XCJTdWJtaXRcIiAvPlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L0FjdGlvbkZvcm0+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJtb2RhbFwiLFxuICAgIHRpdGxlOiBcIk1vZGFsXCIsXG4gICAgY29tcG9uZW50OiBcIk1vZGFsXCIsXG4gICAgc3VtbWFyeTogXCJDb21wb3VuZCBkaWFsb2cg4oCUIGZvY3VzIHRyYXAsIEVzY2FwZSBoYW5kbGluZywgcG9ydGFsLCBzY3JvbGwgbG9jay5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwib3BlbnMgYSBwb3J0YWxsZWQgZGlhbG9nXCI+XG4gICAgICAgIDxCdXR0b24gdGllcj1cInByaW1hcnlcIiBkYXRhLWFjdGlvbj1cImdhbGxlcnk6bW9kYWwtb3BlblwiIGxhYmVsPVwiT3BlbiBtb2RhbFwiIC8+XG4gICAgICAgIDxNb2RhbC5Sb290XG4gICAgICAgICAgd2hlbj17JGdhbGxlcnlNb2RhbE9wZW59XG4gICAgICAgICAgb25DbG9zZT17KCkgPT4ge1xuICAgICAgICAgICAgJGdhbGxlcnlNb2RhbE9wZW4udmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB9fVxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZW1vIG1vZGFsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxNb2RhbC5CYWNrZHJvcCAvPlxuICAgICAgICAgIDxNb2RhbC5Db250ZW50PlxuICAgICAgICAgICAgPE1vZGFsLkhlYWRlcj5cbiAgICAgICAgICAgICAgPE1vZGFsLlRpdGxlPk1vZGFsIHRpdGxlPC9Nb2RhbC5UaXRsZT5cbiAgICAgICAgICAgIDwvTW9kYWwuSGVhZGVyPlxuICAgICAgICAgICAgPE1vZGFsLkJvZHk+XG4gICAgICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAgICAgIEZvY3VzIGlzIHRyYXBwZWQgaW5zaWRlIHRoZSBkaWFsb2csIEVzY2FwZSBjbG9zZXMgaXQsIHRoZSBiYWNrZHJvcCBjbGljayBjbG9zZXMgaXQsXG4gICAgICAgICAgICAgICAgYW5kIHRoZSBib2R5IHNjcm9sbCBpcyBsb2NrZWQgd2hpbGUgaXQgaXMgb3Blbi5cbiAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgPC9Nb2RhbC5Cb2R5PlxuICAgICAgICAgICAgPE1vZGFsLkZvb3Rlcj5cbiAgICAgICAgICAgICAgPE1vZGFsLkNsb3NlPlxuICAgICAgICAgICAgICAgIDxCdXR0b24gdGllcj1cInByaW1hcnlcIiBsYWJlbD1cIkRvbmVcIiAvPlxuICAgICAgICAgICAgICA8L01vZGFsLkNsb3NlPlxuICAgICAgICAgICAgPC9Nb2RhbC5Gb290ZXI+XG4gICAgICAgICAgPC9Nb2RhbC5Db250ZW50PlxuICAgICAgICA8L01vZGFsLlJvb3Q+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjb25maXJtLWRpYWxvZ1wiLFxuICAgIHRpdGxlOiBcIkNvbmZpcm1EaWFsb2dcIixcbiAgICBjb21wb25lbnQ6IFwiQ29uZmlybURpYWxvZ1wiLFxuICAgIHN1bW1hcnk6IFwiUHJvbWlzZS1yZXR1cm5pbmcgY29uZmlybWF0aW9uLiBjb25maXJtKCkgcmVzb2x2ZXMgdHJ1ZSBvciBmYWxzZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY29uZmlybSgpIOKAlCBzdGFuZGFyZFwiPlxuICAgICAgICAgIDxCdXR0b24gdGllcj1cInNlY29uZGFyeVwiIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTpjb25maXJtXCIgbGFiZWw9XCJDb25maXJtIGFuIGFjdGlvblwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY29uZmlybSh7IGRhbmdlcjogdHJ1ZSB9KVwiPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHRpZXI9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgY29sb3I9XCJkYW5nZXJcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OmNvbmZpcm1cIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb24tZGFuZ2VyPVwidHJ1ZVwiXG4gICAgICAgICAgICBsYWJlbD1cIkNvbmZpcm0gYSBkZWxldGlvblwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ0b2FzdFwiLFxuICAgIHRpdGxlOiBcIlRvYXN0XCIsXG4gICAgY29tcG9uZW50OiBcIlRvYXN0XCIsXG4gICAgc3VtbWFyeTogXCJSZW5kZXJzIHRoZSBnbG9iYWwgZXJyb3JTdGF0ZSBzaWduYWwuIFNldmVyaXR5IHNldHMgdGhlIGFyaWEtbGl2ZSBwb2xpdGVuZXNzLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJwdXNoIGEgdG9hc3QgYXQgZWFjaCBzZXZlcml0eVwiIHdpZGU+XG4gICAgICAgIDxDbHVzdGVyIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHRpZXI9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgY29sb3I9XCJpbmZvXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTp0b2FzdFwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbi1zZXZlcml0eT1cImluZm9cIlxuICAgICAgICAgICAgbGFiZWw9XCJJbmZvIHRvYXN0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHRpZXI9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgY29sb3I9XCJ3YXJuaW5nXCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTp0b2FzdFwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbi1zZXZlcml0eT1cIndhcm5pbmdcIlxuICAgICAgICAgICAgbGFiZWw9XCJXYXJuaW5nIHRvYXN0XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHRpZXI9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgY29sb3I9XCJkYW5nZXJcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OnRvYXN0XCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uLXNldmVyaXR5PVwiZXJyb3JcIlxuICAgICAgICAgICAgbGFiZWw9XCJFcnJvciB0b2FzdFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwib3ZlcmxheS1yb290XCIsXG4gICAgdGl0bGU6IFwiT3ZlcmxheVJvb3RcIixcbiAgICBjb21wb25lbnQ6IFwiT3ZlcmxheVJvb3RcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJJbmZyYXN0cnVjdHVyZSwgbm90IGEgdmlzdWFsIGNvbnRyb2wuIE1vdW50IGl0IG9uY2UgbmVhciB0aGUgYXBwIHJvb3Q7IE1vZGFsLCBUb2FzdCwgYW5kIFwiICtcbiAgICAgIFwiQ29uZmlybURpYWxvZyBwb3J0YWwgaW50byBpdC4gVGhlIGdhbGxlcnkgc2hlbGwgYWxyZWFkeSBtb3VudHMgb25lIOKAlCB0aGlzIHNlY3Rpb24gZG9jdW1lbnRzIGl0LlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJtb3VudGVkIG9uY2UgYXQgdGhlIGFwcCByb290XCIgd2lkZT5cbiAgICAgICAgPFRleHQ+XG4gICAgICAgICAgPENvZGU+e1wiPE92ZXJsYXlSb290IC8+XCJ9PC9Db2RlPiByZW5kZXJzIHRoZSBwb3J0YWwgdGFyZ2V0IHRoZSBvdmVybGF5IHByaW1pdGl2ZXMgbmVlZC5cbiAgICAgICAgICBXaXRob3V0IGl0LCB0aGUgTW9kYWwgLyBUb2FzdCAvIENvbmZpcm1EaWFsb2cgc3BlY2ltZW5zIGFib3ZlIHdvdWxkIGhhdmUgbm93aGVyZSB0b1xuICAgICAgICAgIHJlbmRlci4gSXQgZHJhd3Mgbm90aGluZyBpdHNlbGY7IHRoZSBnYWxsZXJ5IHNoZWxsIG1vdW50cyB0aGUgc2luZ2xlIGxpdmUgaW5zdGFuY2UuXG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbl07XG4iLAogICAgIi8qKlxuICogVGhlIGdhbGxlcnkgYXBwIHJvb3Qg4oCUIGEgc2luZ2xlIHNjcm9sbGFibGUgcGFnZSBjYXRhbG9ndWluZyBldmVyeSBwb2xseS11aVxuICogcHJpbWl0aXZlIGluIGl0cyBjb25maWd1cmF0aW9ucy4gQW4gaW4tcGFnZSBuYXYganVtcHMgYmV0d2VlbiBzZWN0aW9uczsgYVxuICogdGhlbWUgdG9nZ2xlIGZvcmNlcyBsaWdodC9kYXJrIG9uIHRoZSBwYW5lbCBzdWJ0cmVlIHZpYSBgZGF0YS1wb2xseS10aGVtZWBcbiAqIHNvIGJvdGggcGFsZXR0ZXMgY2FuIGJlIGluc3BlY3RlZCB3aXRob3V0IGNoYW5naW5nIHRoZSBPUyBzZXR0aW5nLlxuICpcbiAqIFRoZSBvdmVybGF5IGhvc3RzIChPdmVybGF5Um9vdCAvIFRvYXN0LlZpZXdwb3J0IC8gQ29uZmlybURpYWxvZy5Ib3N0KSBhcmVcbiAqIG1vdW50ZWQgaGVyZSBvbmNlLCBzbyB0aGUgTW9kYWwsIFRvYXN0LCBhbmQgQ29uZmlybURpYWxvZyBzcGVjaW1lbnMgaGF2ZSBhXG4gKiBwb3J0YWwgdGFyZ2V0IOKAlCB0aGUgc2FtZSB3aXJpbmcgYSByZWFsIGNvbnN1bWVyIGFwcCBkb2VzIGF0IGl0cyByb290LlxuICovXG5cbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgQ2x1c3RlcixcbiAgQ29uZmlybURpYWxvZyxcbiAgTGF5b3V0LFxuICBPdmVybGF5Um9vdCxcbiAgU3VyZmFjZSxcbiAgVGV4dCxcbiAgVG9hc3QsXG59IGZyb20gXCIuLi8uLi8uLi9zcmMvcG9sbHktdWlcIjtcbmltcG9ydCB7IFRIRU1FUyB9IGZyb20gXCIuL2FjdGlvbnMudHNcIjtcbmltcG9ydCB7IEdBTExFUllfU0VDVElPTlMsIHR5cGUgR2FsbGVyeVNlY3Rpb24gfSBmcm9tIFwiLi9zcGVjaW1lbnMudHN4XCI7XG5pbXBvcnQgeyAkZ2FsbGVyeVRoZW1lIH0gZnJvbSBcIi4vc3RvcmVzLnRzXCI7XG5cbi8qKiBBIGNhcGl0YWxpc2VkIGxhYmVsIGZvciBhIHRoZW1lIG9wdGlvbi4gKi9cbmZ1bmN0aW9uIHRoZW1lTGFiZWwodGhlbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0aGVtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRoZW1lLnNsaWNlKDEpO1xufVxuXG4vKiogT25lIGNhdGFsb2d1ZWQgY29tcG9uZW50OiBhIGxhYmVsbGVkIGxhbmRtYXJrIHdpdGggYSBncmlkIG9mIHNwZWNpbWVucy4gKi9cbmZ1bmN0aW9uIFNlY3Rpb24ocHJvcHM6IHsgc2VjdGlvbjogR2FsbGVyeVNlY3Rpb24gfSkge1xuICBjb25zdCB7IHNlY3Rpb24gfSA9IHByb3BzO1xuICBjb25zdCBoZWFkaW5nSWQgPSBgJHtzZWN0aW9uLmlkfS1oZWFkaW5nYDtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgYXM9XCJzZWN0aW9uXCJcbiAgICAgIGlkPXtzZWN0aW9uLmlkfVxuICAgICAgdmFyaWFudD1cInBsYWluXCJcbiAgICAgIGNsYXNzTmFtZT1cImdhbGxlcnktc2VjdGlvblwiXG4gICAgICBhcmlhLWxhYmVsbGVkYnk9e2hlYWRpbmdJZH1cbiAgICA+XG4gICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICA8aDIgaWQ9e2hlYWRpbmdJZH0gY2xhc3M9XCJnYWxsZXJ5LXNlY3Rpb24tdGl0bGVcIj5cbiAgICAgICAgICB7c2VjdGlvbi50aXRsZX1cbiAgICAgICAgPC9oMj5cbiAgICAgICAgPFRleHQgYXM9XCJwXCIgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAge3NlY3Rpb24uc3VtbWFyeX1cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8TGF5b3V0XG4gICAgICAgICAgY29sdW1ucz1cInJlcGVhdChhdXRvLWZpbGwsIG1pbm1heChtaW4oMTAwJSwgMTRyZW0pLCAxZnIpKVwiXG4gICAgICAgICAgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtzZWN0aW9uLnJlbmRlcigpfVxuICAgICAgICA8L0xheW91dD5cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEdhbGxlcnlBcHAoKSB7XG4gIGNvbnN0IHRoZW1lID0gJGdhbGxlcnlUaGVtZS52YWx1ZTtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgdmFyaWFudD1cInJhaXNlZFwiXG4gICAgICBwYWRkaW5nPVwiY2xhbXAodmFyKC0tcG9sbHktc3BhY2Utc20pLCAzdncsIHZhcigtLXBvbGx5LXNwYWNlLXhsKSlcIlxuICAgICAgZGF0YS1nYWxsZXJ5LXBhbmVsPVwidHJ1ZVwiXG4gICAgICBkYXRhLXBvbGx5LXRoZW1lPXt0aGVtZSA9PT0gXCJzeXN0ZW1cIiA/IHVuZGVmaW5lZCA6IHRoZW1lfVxuICAgID5cbiAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UtbGcpXCI+XG4gICAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgICAgPGgxIGNsYXNzPVwiZ2FsbGVyeS10aXRsZVwiPlBvbGx5IFVJIGdhbGxlcnk8L2gxPlxuICAgICAgICAgIDxUZXh0IGFzPVwicFwiIHRvbmU9XCJtdXRlZFwiPlxuICAgICAgICAgICAgRXZlcnkgPFRleHQgd2VpZ2h0PVwibWVkaXVtXCI+QGZhaXJmb3gvcG9sbHkvdWk8L1RleHQ+IHByaW1pdGl2ZSwgaW4gaXRzIGNvbmZpZ3VyYXRpb25zIOKAlFxuICAgICAgICAgICAgYSByZWZlcmVuY2UgZm9yIGJ1aWxkaW5nIHBvbGx5IGFwcHMsIGFuZCBhIHNpbmdsZSBzdXJmYWNlIGZvciBhY2Nlc3NpYmlsaXR5IGFuZFxuICAgICAgICAgICAgdmlzdWFsLXJlZ3Jlc3Npb24gY2hlY2tzLlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9MYXlvdXQ+XG5cbiAgICAgICAgPFN1cmZhY2UgdmFyaWFudD1cImNhbGxvdXRcIiByYWRpdXM9XCJtZFwiIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIj5cbiAgICAgICAgICA8Q2x1c3RlciBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIiBhbGlnbj1cImNlbnRlclwiPlxuICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtXCIgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICAgIFRoZW1lXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICB7VEhFTUVTLm1hcCgodCkgPT4gKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAga2V5PXt0fVxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgdGllcj17dCA9PT0gdGhlbWUgPyBcInByaW1hcnlcIiA6IFwidGVydGlhcnlcIn1cbiAgICAgICAgICAgICAgICBkYXRhLWFjdGlvbj1cImdhbGxlcnk6c2V0LXRoZW1lXCJcbiAgICAgICAgICAgICAgICBkYXRhLWFjdGlvbi10aGVtZT17dH1cbiAgICAgICAgICAgICAgICBsYWJlbD17dGhlbWVMYWJlbCh0KX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgICAgPC9TdXJmYWNlPlxuXG4gICAgICAgIDxuYXYgYXJpYS1sYWJlbD1cIkNvbXBvbmVudHNcIj5cbiAgICAgICAgICA8Q2x1c3RlciBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICAgIHtHQUxMRVJZX1NFQ1RJT05TLm1hcCgoc2VjdGlvbikgPT4gKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAga2V5PXtzZWN0aW9uLmlkfVxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgdGllcj1cInRlcnRpYXJ5XCJcbiAgICAgICAgICAgICAgICBocmVmPXtgIyR7c2VjdGlvbi5pZH1gfVxuICAgICAgICAgICAgICAgIGxhYmVsPXtzZWN0aW9uLnRpdGxlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgICA8L25hdj5cblxuICAgICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhsKVwiPlxuICAgICAgICAgIHtHQUxMRVJZX1NFQ1RJT05TLm1hcCgoc2VjdGlvbikgPT4gKFxuICAgICAgICAgICAgPFNlY3Rpb24ga2V5PXtzZWN0aW9uLmlkfSBzZWN0aW9uPXtzZWN0aW9ufSAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L0xheW91dD5cbiAgICAgIDwvTGF5b3V0PlxuXG4gICAgICB7LyogTW91bnRlZCBvbmNlIHNvIHRoZSBvdmVybGF5IHNwZWNpbWVucyBoYXZlIGEgcG9ydGFsIHRhcmdldC4gKi99XG4gICAgICA8T3ZlcmxheVJvb3QgLz5cbiAgICAgIDxUb2FzdC5WaWV3cG9ydCAvPlxuICAgICAgPENvbmZpcm1EaWFsb2cuSG9zdCAvPlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBUaGUgZ2FsbGVyeSdzIGJyb3dzZXIgZW50cnkgcG9pbnQuIEJ1bmRsZWQgYnkgc2VydmVyLnRzIChvbmUgQnVuLmJ1aWxkIHBhc3MpXG4gKiDigJQgaXRzIHRyYW5zaXRpdmUgYC5tb2R1bGUuY3NzYCBpbXBvcnRzIHBsdXMgdGhlIGdsb2JhbCBzdHlsZXNoZWV0cyBiZWxvdyBjb21lXG4gKiBvdXQgYXMgYSBzaW5nbGUgQ1NTIGFydGlmYWN0IHRoZSBzZXJ2ZXIgc2VydmVzIGFsb25nc2lkZSB0aGlzIHNjcmlwdC5cbiAqXG4gKiBCb290IG1pcnJvcnMgYSByZWFsIGNvbnN1bWVyIGFwcDogYmluZCB0aGUgZGVtbyBmb3JtLCBpbnN0YWxsIHRoZSBkb2N1bWVudFxuICogZXZlbnQgZGVsZWdhdGlvbiB0aGF0IHJvdXRlcyBgZGF0YS1hY3Rpb25gIGNsaWNrcy9zdWJtaXRzIGludG8gdGhlIGdhbGxlcnknc1xuICogYWN0aW9uIHJlZ2lzdHJ5LCB0aGVuIHJlbmRlci4gVGhlIG92ZXJsYXkgaG9zdHMgbGl2ZSBpbnNpZGUgPEdhbGxlcnlBcHAgLz4uXG4gKi9cblxuaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgaW5zdGFsbEV2ZW50RGVsZWdhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9zcmMvYWN0aW9uc1wiO1xuaW1wb3J0IHsgR0FMTEVSWV9BQ1RJT05TIH0gZnJvbSBcIi4vYWN0aW9ucy50c1wiO1xuaW1wb3J0IHsgR2FsbGVyeUFwcCB9IGZyb20gXCIuL2dhbGxlcnktYXBwLnRzeFwiO1xuaW1wb3J0IHsgdHlwZSBHYWxsZXJ5U3RvcmVzLCBnYWxsZXJ5Rm9ybSB9IGZyb20gXCIuL3N0b3Jlcy50c1wiO1xuaW1wb3J0IFwiLi4vLi4vLi4vc3JjL3BvbGx5LXVpL3RoZW1lLmNzc1wiO1xuaW1wb3J0IFwiLi4vLi4vLi4vc3JjL3BvbGx5LXVpL3N0eWxlcy5jc3NcIjtcbmltcG9ydCBcIi4vZ2FsbGVyeS5jc3NcIjtcblxuY29uc3Qgc3RvcmVzOiBHYWxsZXJ5U3RvcmVzID0ge307XG5nYWxsZXJ5Rm9ybS5iaW5kU3RvcmVzKCgpID0+IHN0b3Jlcyk7XG5cbmluc3RhbGxFdmVudERlbGVnYXRpb24oYXN5bmMgKGRpc3BhdGNoKSA9PiB7XG4gIGNvbnN0IGhhbmRsZXIgPSBHQUxMRVJZX0FDVElPTlNbZGlzcGF0Y2guYWN0aW9uXTtcbiAgaWYgKGhhbmRsZXIpIHtcbiAgICBhd2FpdCBoYW5kbGVyKHtcbiAgICAgIHN0b3JlcyxcbiAgICAgIGV2ZW50OiBkaXNwYXRjaC5ldmVudCxcbiAgICAgIGVsZW1lbnQ6IGRpc3BhdGNoLmVsZW1lbnQsXG4gICAgICBkYXRhOiBkaXNwYXRjaC5kYXRhLFxuICAgIH0pO1xuICB9XG59KTtcblxuY29uc3Qgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXBw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LEVBQUUsTUFBTSxRQUFRLElBQUUsR0FBRSxJQUFFLEVBQUUsR0FBRSxFQUFFLENBQUMsSUFBRSxJQUFFLENBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsRUFBRSxPQUFLLEVBQUUsS0FBSSxFQUFFLE9BQUssTUFBSyxFQUFFLElBQUksVUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFFLE1BQUksRUFBRSxNQUFJLEVBQUUsS0FBRztBQUFBLFFBQU0sT0FBTSxHQUFFO0FBQUEsUUFBQyxJQUFHLEVBQUUsTUFBSSxNQUFLLEtBQVMsS0FBTjtBQUFBLFVBQVEsSUFBRyxFQUFFLE1BQUs7QUFBQSxZQUFDLEtBQUksRUFBRSxPQUFLLElBQUUsTUFBSSxJQUFJLEtBQU0sRUFBRSxZQUFMLEtBQWUsRUFBRTtBQUFBLGNBQWEsSUFBRSxFQUFFO0FBQUEsWUFBWSxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUcsTUFBSyxFQUFFLE1BQUk7QUFBQSxVQUFDLEVBQUs7QUFBQSxZQUFDLEtBQUksSUFBRSxFQUFFLE9BQU87QUFBQSxjQUFLLEVBQUUsRUFBRSxFQUFFO0FBQUEsWUFBRSxFQUFFLENBQUM7QUFBQTtBQUFBLFFBQU87QUFBQSxZQUFFLE1BQUksRUFBRSxLQUFJLEVBQUUsTUFBSSxFQUFFLEtBQUksRUFBRSxRQUFNLEVBQUUsQ0FBQztBQUFBLFFBQUUsRUFBRSxJQUFJLEdBQUUsR0FBRSxDQUFDO0FBQUE7QUFBQSxJQUFPO0FBQUEsTUFBTSxLQUFOLFFBQVMsRUFBRSxPQUFLLEVBQUUsT0FBSyxFQUFFLE1BQUksRUFBRSxLQUFJLEVBQUUsTUFBSSxFQUFFLE9BQUssSUFBRSxFQUFFLE1BQUksRUFBRSxFQUFFLEtBQUksR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDO0FBQUEsRUFBRSxRQUFPLElBQUUsRUFBRSxXQUFTLEVBQUUsQ0FBQyxHQUFFLE1BQUksRUFBRSxNQUFTLFlBQUU7QUFBQTtBQUFFLFNBQVMsQ0FBQyxDQUFD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LE9BQU8sS0FBRyxFQUFFLEdBQUcsVUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRSxFQUFFLEdBQUc7QUFBQTtBQUFHLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBRSxHQUFFLEdBQUUsSUFBRSxDQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsTUFBSSxDQUFDO0FBQUEsRUFBRSxJQUFHLEVBQUUsSUFBRSxHQUFFLENBQUMsRUFBRSxRQUFNLEVBQUUsS0FBRyxDQUFDLElBQUUsRUFBRSxDQUFDLElBQUUsR0FBTyxXQUFFLENBQUMsR0FBRSxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLEVBQUUsTUFBSSxFQUFFLElBQUksS0FBRyxFQUFFLEdBQUcsSUFBRyxJQUFFLEVBQUUsRUFBRSxHQUFFLENBQUM7QUFBQSxJQUFFLE1BQUksTUFBSSxFQUFFLE1BQUksQ0FBQyxHQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUUsRUFBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDO0FBQUEsR0FBRyxHQUFFLEVBQUUsTUFBSSxJQUFFLENBQUMsR0FBRSxNQUFLO0FBQUEsSUFBQyxJQUFJLElBQUUsUUFBUSxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsTUFBQyxJQUFHLENBQUMsRUFBRSxJQUFJO0FBQUEsUUFBSSxPQUFNO0FBQUEsTUFBRyxJQUFJLElBQUUsRUFBRSxJQUFJLElBQUksR0FBRyxPQUFPLFFBQVEsQ0FBQyxHQUFFO0FBQUEsUUFBQyxPQUFPLEVBQUU7QUFBQSxPQUFJO0FBQUEsTUFBRSxJQUFHLEVBQUUsTUFBTSxRQUFRLENBQUMsR0FBRTtBQUFBLFFBQUMsT0FBTSxDQUFDLEVBQUU7QUFBQSxPQUFJO0FBQUEsUUFBRSxPQUFNLENBQUMsS0FBRyxFQUFFLEtBQUssTUFBSyxHQUFFLEdBQUUsQ0FBQztBQUFBLE1BQUUsSUFBSSxJQUFFLEVBQUUsSUFBSSxVQUFRO0FBQUEsTUFBRSxPQUFPLEVBQUUsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLFFBQUMsSUFBRyxFQUFFLEtBQUk7QUFBQSxVQUFDLElBQUksSUFBRSxFQUFFLEdBQUc7QUFBQSxVQUFHLEVBQUUsS0FBRyxFQUFFLEtBQUksRUFBRSxNQUFTLFdBQUUsTUFBSSxFQUFFLEdBQUcsT0FBSyxJQUFFO0FBQUEsUUFBRztBQUFBLE9BQUUsR0FBRSxLQUFHLEVBQUUsS0FBSyxNQUFLLEdBQUUsR0FBRSxDQUFDLEtBQUc7QUFBQTtBQUFBLElBQUcsR0FBRSxNQUFJO0FBQUEsSUFBRyxJQUFJLElBQUUsR0FBRSx1QkFBc0IsSUFBRSxHQUFFO0FBQUEsSUFBb0IsR0FBRSxzQkFBb0IsUUFBUSxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsTUFBQyxJQUFHLEtBQUssS0FBSTtBQUFBLFFBQUMsSUFBSSxJQUFFO0FBQUEsUUFBRSxJQUFPLFdBQUUsRUFBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLElBQUU7QUFBQSxNQUFDO0FBQUEsTUFBQyxLQUFHLEVBQUUsS0FBSyxNQUFLLEdBQUUsR0FBRSxDQUFDO0FBQUEsT0FBRyxHQUFFLHdCQUFzQjtBQUFBLEVBQUM7QUFBQSxFQUFDLE9BQU8sRUFBRSxPQUFLLEVBQUU7QUFBQTtBQUFHLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsTUFBSSxDQUFDO0FBQUEsRUFBRSxDQUFDLEdBQUUsT0FBSyxHQUFFLEVBQUUsS0FBSSxDQUFDLE1BQUksRUFBRSxLQUFHLEdBQUUsRUFBRSxJQUFFLEdBQUUsR0FBRSxJQUFJLElBQUksS0FBSyxDQUFDO0FBQUE7QUFBbUYsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsT0FBTyxLQUFFLEdBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLE9BQU0sRUFBQyxTQUFRLEVBQUM7QUFBQSxLQUFHLENBQUMsQ0FBQztBQUFBO0FBQXVOLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsTUFBSSxDQUFDO0FBQUEsRUFBRSxPQUFPLEdBQUUsRUFBRSxLQUFJLENBQUMsTUFBSSxFQUFFLEtBQUcsRUFBRSxHQUFFLEVBQUUsTUFBSSxHQUFFLEVBQUUsTUFBSSxJQUFHLEVBQUU7QUFBQTtBQUFHLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsT0FBTyxLQUFFLEdBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLE9BQU87QUFBQSxLQUFHLENBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxHQUFFLFFBQVEsRUFBRSxNQUFLLElBQUUsR0FBRSxNQUFJLENBQUM7QUFBQSxFQUFFLE9BQU8sRUFBRSxJQUFFLEdBQUUsS0FBUyxFQUFFLE1BQVIsU0FBYSxFQUFFLEtBQUcsTUFBRyxFQUFFLElBQUksRUFBQyxJQUFHLEVBQUUsTUFBTSxTQUFPLEVBQUU7QUFBQTtBQUFrTyxTQUFTLEVBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsTUFBSSxFQUFFO0FBQUEsRUFBRSxJQUFHLENBQUMsRUFBRSxJQUFHO0FBQUEsSUFBQyxTQUFRLElBQUUsR0FBRSxJQUFXLE1BQVAsUUFBVSxDQUFDLEVBQUUsT0FBWSxFQUFFLE9BQVQ7QUFBQSxNQUFhLElBQUUsRUFBRTtBQUFBLElBQUcsSUFBSSxJQUFFLEVBQUUsUUFBTSxFQUFFLE1BQUksQ0FBQyxHQUFFLENBQUM7QUFBQSxJQUFHLEVBQUUsS0FBRyxNQUFJLEVBQUUsS0FBRyxNQUFJLEVBQUU7QUFBQSxFQUFJO0FBQUEsRUFBQyxPQUFPLEVBQUU7QUFBQTtBQUFHLFNBQVMsRUFBQyxHQUFFO0FBQUEsRUFBQyxTQUFRLEVBQUUsSUFBRSxHQUFFLE1BQU0sS0FBRztBQUFBLElBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxJQUFJLElBQUcsRUFBRSxPQUFLO0FBQUEsTUFBRSxJQUFHO0FBQUEsUUFBQyxFQUFFLElBQUksS0FBSyxFQUFDLEdBQUUsRUFBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEVBQUUsTUFBSSxDQUFDO0FBQUEsUUFBRSxPQUFNLEdBQUU7QUFBQSxRQUFDLEVBQUUsTUFBSSxDQUFDLEdBQUUsR0FBRSxJQUFJLEdBQUUsRUFBRSxHQUFHO0FBQUE7QUFBQSxFQUFFO0FBQUE7QUFBRSxHQUFFLE1BQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLEtBQUUsTUFBSyxNQUFHLEdBQUUsQ0FBQztBQUFBLEdBQUcsR0FBRSxLQUFHLFFBQVEsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLEtBQUcsRUFBRSxPQUFLLEVBQUUsSUFBSSxRQUFNLEVBQUUsTUFBSSxFQUFFLElBQUksTUFBSyxNQUFHLEdBQUUsR0FBRSxDQUFDO0FBQUEsR0FBRyxHQUFFLE1BQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLE1BQUcsR0FBRSxDQUFDLEdBQUUsS0FBRTtBQUFBLEVBQUUsSUFBSSxLQUFHLEtBQUUsRUFBRSxLQUFLO0FBQUEsRUFBSSxNQUFJLE9BQUksTUFBRyxFQUFFLE1BQUksQ0FBQyxHQUFFLEdBQUUsTUFBSSxDQUFDLEdBQUUsRUFBRSxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLEVBQUUsUUFBTSxFQUFFLEtBQUcsRUFBRSxNQUFLLEVBQUUsSUFBRSxFQUFFLE1BQVM7QUFBQSxHQUFFLE1BQUksRUFBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEVBQUUsSUFBSSxLQUFLLEVBQUMsR0FBRSxFQUFFLE1BQUksQ0FBQyxHQUFFLEtBQUUsS0FBSSxLQUFFO0FBQUEsR0FBRyxHQUFFLFNBQU8sUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLE1BQUcsR0FBRSxDQUFDO0FBQUEsRUFBRSxJQUFJLElBQUUsRUFBRTtBQUFBLEVBQUksS0FBRyxFQUFFLFFBQU0sRUFBRSxJQUFJLElBQUksV0FBYSxHQUFFLEtBQUssQ0FBQyxNQUFaLEtBQWUsT0FBSSxHQUFFLDJCQUF5QixLQUFFLEdBQUUsMEJBQXdCLElBQUcsRUFBQyxJQUFHLEVBQUUsSUFBSSxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLEVBQUUsTUFBSSxFQUFFLE1BQUksRUFBRSxJQUFHLEVBQUUsSUFBTztBQUFBLEdBQUUsSUFBRyxLQUFFLEtBQUU7QUFBQSxHQUFNLEdBQUUsTUFBSSxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUc7QUFBQSxNQUFDLEVBQUUsSUFBSSxLQUFLLEVBQUMsR0FBRSxFQUFFLE1BQUksRUFBRSxJQUFJLE9BQU8sUUFBUSxDQUFDLEdBQUU7QUFBQSxRQUFDLE9BQU0sQ0FBQyxFQUFFLE1BQUksR0FBRSxDQUFDO0FBQUEsT0FBRTtBQUFBLE1BQUUsT0FBTSxHQUFFO0FBQUEsTUFBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxRQUFDLEVBQUUsUUFBTSxFQUFFLE1BQUksQ0FBQztBQUFBLE9BQUcsR0FBRSxJQUFFLENBQUMsR0FBRSxHQUFFLElBQUksR0FBRSxFQUFFLEdBQUc7QUFBQTtBQUFBLEdBQUcsR0FBRSxNQUFHLEdBQUUsR0FBRSxDQUFDO0FBQUEsR0FBRyxHQUFFLFVBQVEsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLE1BQUcsR0FBRSxDQUFDO0FBQUEsRUFBRSxJQUFJLEdBQUUsSUFBRSxFQUFFO0FBQUEsRUFBSSxLQUFHLEVBQUUsUUFBTSxFQUFFLElBQUksR0FBRyxLQUFLLFFBQVEsQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFHO0FBQUEsTUFBQyxHQUFFLENBQUM7QUFBQSxNQUFFLE9BQU0sR0FBRTtBQUFBLE1BQUMsSUFBRTtBQUFBO0FBQUEsR0FBRyxHQUFFLEVBQUUsTUFBUyxXQUFFLEtBQUcsR0FBRSxJQUFJLEdBQUUsRUFBRSxHQUFHO0FBQUE7QUFBSSxJQUFJLEtBQWMsT0FBTyx5QkFBbkI7QUFBeUMsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxHQUFFLElBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxhQUFhLENBQUMsR0FBRSxNQUFHLHFCQUFxQixDQUFDLEdBQUUs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QUFJLElBQUU7QUFBQSxNQUFDLElBQUUsRUFBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQU8sV0FBRSxHQUFFLElBQUUsR0FBTyxXQUFFLEdBQU8sV0FBRSxHQUFFLEVBQUM7QUFBQSxNQUFFLElBQVksR0FBRSxNQUFOO0FBQUEsUUFBUSxHQUFFLEVBQUUsSUFBRTtBQUFBLE1BQUUsR0FBRSxJQUFFO0FBQUEsTUFBRSxFQUFFLElBQUU7QUFBQSxNQUFFLElBQUcsS0FBRyxHQUFFO0FBQUEsUUFBRSxFQUFFLEVBQUUsQ0FBQztBQUFBLE1BQUUsT0FBTztBQUFBLElBQUMsRUFBTSxTQUFRLEVBQUUsTUFBUCxJQUFTO0FBQUEsTUFBQyxFQUFFLElBQUU7QUFBQSxNQUFFLElBQVksRUFBRSxNQUFOLFdBQVE7QUFBQSxRQUFDLEVBQUUsRUFBRSxJQUFFLEVBQUU7QUFBQSxRQUFFLElBQVksRUFBRSxNQUFOO0FBQUEsVUFBUSxFQUFFLEVBQUUsSUFBRSxFQUFFO0FBQUEsUUFBRSxFQUFFLElBQUUsR0FBRTtBQUFBLFFBQUUsRUFBRSxJQUFPO0FBQUEsUUFBRSxHQUFFLEVBQUUsSUFBRTtBQUFBLFFBQUUsR0FBRSxJQUFFO0FBQUEsTUFBQztBQUFBLE1BQUMsT0FBTztBQUFBLElBQUM7QUFBQSxFQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxJQUFFO0FBQUEsRUFBRSxLQUFLLElBQU87QUFBQSxFQUFFLEtBQUssSUFBTztBQUFBLEVBQUUsS0FBSyxJQUFFO0FBQUEsRUFBRSxLQUFLLElBQVEsS0FBTixPQUFhLFlBQUUsRUFBRTtBQUFBLEVBQVEsS0FBSyxJQUFRLEtBQU4sT0FBYSxZQUFFLEVBQUU7QUFBQSxFQUFVLEtBQUssT0FBVyxLQUFOLE9BQWEsWUFBRSxFQUFFO0FBQUE7QUFBSyxHQUFFLFVBQVUsUUFBTTtBQUFFLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsT0FBTTtBQUFBO0FBQUksR0FBRSxVQUFVLElBQUUsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxNQUFLLElBQUUsS0FBSztBQUFBLEVBQUUsSUFBRyxNQUFJLEtBQVksRUFBRSxNQUFOLFdBQVE7QUFBQSxJQUFDLEVBQUUsSUFBRTtBQUFBLElBQUUsS0FBSyxJQUFFO0FBQUEsSUFBRSxJQUFZLE1BQUo7QUFBQSxNQUFNLEVBQUUsSUFBRTtBQUFBLElBQU87QUFBQSxTQUFFLFFBQVEsR0FBRTtBQUFBLFFBQUMsSUFBSTtBQUFBLFNBQVMsSUFBRSxFQUFFLE1BQVgsUUFBZSxFQUFFLEtBQUssQ0FBQztBQUFBLE9BQUU7QUFBQSxFQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFO0FBQUEsRUFBSyxJQUFZLEtBQUssTUFBVCxXQUFXO0FBQUEsSUFBQyxNQUFRLEdBQUosR0FBVSxHQUFKLE1BQUU7QUFBQSxJQUFJLElBQVksTUFBSixXQUFNO0FBQUEsTUFBQyxFQUFFLElBQUU7QUFBQSxNQUFFLEVBQUUsSUFBTztBQUFBLElBQUM7QUFBQSxJQUFDLElBQVksTUFBSixXQUFNO0FBQUEsTUFBQyxFQUFFLElBQUU7QUFBQSxNQUFFLEVBQUUsSUFBTztBQUFBLElBQUM7QUFBQSxJQUFDLElBQUcsTUFBSSxLQUFLLEdBQUU7QUFBQSxNQUFDLEtBQUssSUFBRTtBQUFBLE1BQUUsSUFBWSxNQUFKO0FBQUEsUUFBTSxHQUFFLFFBQVEsR0FBRTtBQUFBLFVBQUMsSUFBSTtBQUFBLFdBQVMsSUFBRSxFQUFFLE1BQVgsUUFBZSxFQUFFLEtBQUssQ0FBQztBQUFBLFNBQUU7QUFBQSxJQUFDO0FBQUEsRUFBQztBQUFBO0FBQUcsR0FBRSxVQUFVLFlBQVUsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRTtBQUFBLEVBQUssT0FBTyxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsSUFBSSxJQUFFLEVBQUUsT0FBTSxJQUFFO0FBQUEsSUFBRSxLQUFPO0FBQUEsSUFBRSxJQUFHO0FBQUEsTUFBQyxFQUFFLENBQUM7QUFBQSxjQUFFO0FBQUEsTUFBUSxLQUFFO0FBQUE7QUFBQSxLQUFJLEVBQUMsTUFBSyxNQUFLLENBQUM7QUFBQTtBQUFHLEdBQUUsVUFBVSxVQUFRLFFBQVEsR0FBRTtBQUFBLEVBQUMsT0FBTyxLQUFLO0FBQUE7QUFBTyxHQUFFLFVBQVUsV0FBUyxRQUFRLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBSyxRQUFNO0FBQUE7QUFBSSxHQUFFLFVBQVUsU0FBTyxRQUFRLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBSztBQUFBO0FBQU8sR0FBRSxVQUFVLE9BQUssUUFBUSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUU7QUFBQSxFQUFLLE9BQU8sR0FBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLE9BQU8sRUFBRTtBQUFBLEdBQU07QUFBQTtBQUFHLE9BQU8sZUFBZSxHQUFFLFdBQVUsU0FBUSxFQUFDLEtBQUksUUFBUSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxJQUFJO0FBQUEsRUFBRSxJQUFZLE1BQUo7QUFBQSxJQUFNLEVBQUUsSUFBRSxLQUFLO0FBQUEsRUFBRSxPQUFPLEtBQUs7QUFBQSxHQUFHLEtBQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUcsTUFBSSxLQUFLLEdBQUU7QUFBQSxJQUFDLElBQUcsS0FBRTtBQUFBLE1BQUksTUFBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBQUEsS0FBRyxRQUFRLENBQUMsR0FBRTtBQUFBLE1BQUMsSUFBTyxPQUFKLEtBQVcsT0FBSjtBQUFBLFFBQU0sSUFBRyxFQUFFLE1BQUksSUFBRTtBQUFBLFVBQUMsRUFBRSxJQUFFO0FBQUEsVUFBRSxLQUFFLEVBQUMsR0FBRSxHQUFFLEdBQUUsRUFBRSxHQUFFLEdBQUUsRUFBRSxHQUFFLEdBQUUsR0FBQztBQUFBLFFBQUM7QUFBQTtBQUFBLE9BQUcsSUFBSTtBQUFBLElBQUUsS0FBSyxJQUFFO0FBQUEsSUFBRSxLQUFLO0FBQUEsSUFBSTtBQUFBLElBQUk7QUFBQSxJQUFJLElBQUc7QUFBQSxNQUFDLFNBQVEsSUFBRSxLQUFLLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLFFBQUUsRUFBRSxFQUFFLEVBQUU7QUFBQSxjQUFFO0FBQUEsTUFBUSxHQUFFO0FBQUE7QUFBQSxFQUFFO0FBQUEsRUFBRSxDQUFDO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLElBQUksR0FBRSxHQUFFLENBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLFNBQVEsSUFBRSxFQUFFLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLElBQUUsSUFBRyxFQUFFLEVBQUUsTUFBSSxFQUFFLEtBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFHLEVBQUUsRUFBRSxNQUFJLEVBQUU7QUFBQSxNQUFFLE9BQU07QUFBQSxFQUFHLE9BQU07QUFBQTtBQUFHLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLFNBQVEsSUFBRSxFQUFFLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRSxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRSxFQUFFO0FBQUEsSUFBRSxJQUFZLE1BQUo7QUFBQSxNQUFNLEVBQUUsSUFBRTtBQUFBLElBQUUsRUFBRSxFQUFFLElBQUU7QUFBQSxJQUFFLEVBQUUsSUFBRTtBQUFBLElBQUcsSUFBWSxFQUFFLE1BQU4sV0FBUTtBQUFBLE1BQUMsRUFBRSxJQUFFO0FBQUEsTUFBRTtBQUFBLElBQUs7QUFBQSxFQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRSxHQUFFLElBQU87QUFBQSxFQUFFLE9BQWUsTUFBSixXQUFNO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLElBQUUsSUFBUSxFQUFFLE1BQVAsSUFBUztBQUFBLE1BQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUFBLE1BQUUsSUFBWSxNQUFKO0FBQUEsUUFBTSxFQUFFLElBQUUsRUFBRTtBQUFBLE1BQUUsSUFBWSxFQUFFLE1BQU47QUFBQSxRQUFRLEVBQUUsRUFBRSxJQUFFO0FBQUEsSUFBQyxFQUFNO0FBQUEsVUFBRTtBQUFBLElBQUUsRUFBRSxFQUFFLElBQUUsRUFBRTtBQUFBLElBQUUsSUFBWSxFQUFFLE1BQU47QUFBQSxNQUFRLEVBQUUsSUFBTztBQUFBLElBQUUsSUFBRTtBQUFBLEVBQUM7QUFBQSxFQUFDLEVBQUUsSUFBRTtBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxHQUFFLEtBQUssTUFBVSxTQUFDO0FBQUEsRUFBRSxLQUFLLElBQUU7QUFBQSxFQUFFLEtBQUssSUFBTztBQUFBLEVBQUUsS0FBSyxJQUFFLEtBQUU7QUFBQSxFQUFFLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxJQUFRLEtBQU4sT0FBYSxZQUFFLEVBQUU7QUFBQSxFQUFRLEtBQUssSUFBUSxLQUFOLE9BQWEsWUFBRSxFQUFFO0FBQUEsRUFBVSxLQUFLLE9BQVcsS0FBTixPQUFhLFlBQUUsRUFBRTtBQUFBO0FBQUssR0FBRSxZQUFVLElBQUk7QUFBRSxHQUFFLFVBQVUsSUFBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLEtBQUssS0FBRztBQUFBLEVBQUcsSUFBRyxJQUFFLEtBQUs7QUFBQSxJQUFFLE9BQU07QUFBQSxFQUFHLEtBQVEsS0FBRyxLQUFLLE1BQWI7QUFBQSxJQUFnQixPQUFNO0FBQUEsRUFBRyxLQUFLLEtBQUc7QUFBQSxFQUFHLElBQUcsS0FBSyxNQUFJO0FBQUEsSUFBRSxPQUFNO0FBQUEsRUFBRyxLQUFLLElBQUU7QUFBQSxFQUFFLEtBQUssS0FBRztBQUFBLEVBQUUsSUFBRyxLQUFLLElBQUUsS0FBRyxDQUFDLEdBQUUsSUFBSSxHQUFFO0FBQUEsSUFBQyxLQUFLLEtBQUc7QUFBQSxJQUFHLE9BQU07QUFBQSxFQUFFO0FBQUEsRUFBQyxJQUFJLElBQUU7QUFBQSxFQUFFLElBQUc7QUFBQSxJQUFDLEdBQUUsSUFBSTtBQUFBLElBQUUsS0FBRTtBQUFBLElBQUssSUFBSSxJQUFFLEtBQUssRUFBRTtBQUFBLElBQUUsSUFBRyxLQUFHLEtBQUssS0FBRyxLQUFLLE1BQUksS0FBTyxLQUFLLE1BQVQsR0FBVztBQUFBLE1BQUMsS0FBSyxJQUFFO0FBQUEsTUFBRSxLQUFLLEtBQUc7QUFBQSxNQUFJLEtBQUs7QUFBQSxJQUFHO0FBQUEsSUFBRSxPQUFNLEdBQUU7QUFBQSxJQUFDLEtBQUssSUFBRTtBQUFBLElBQUUsS0FBSyxLQUFHO0FBQUEsSUFBRyxLQUFLO0FBQUE7QUFBQSxFQUFJLEtBQUU7QUFBQSxFQUFFLEdBQUUsSUFBSTtBQUFBLEVBQUUsS0FBSyxLQUFHO0FBQUEsRUFBRyxPQUFNO0FBQUE7QUFBSSxHQUFFLFVBQVUsSUFBRSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBWSxLQUFLLE1BQVQsV0FBVztBQUFBLElBQUMsS0FBSyxLQUFHO0FBQUEsSUFBRyxTQUFRLElBQUUsS0FBSyxFQUFXLE1BQUosV0FBTSxJQUFFLEVBQUU7QUFBQSxNQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFBQSxFQUFDO0FBQUEsRUFBQyxHQUFFLFVBQVUsRUFBRSxLQUFLLE1BQUssQ0FBQztBQUFBO0FBQUcsR0FBRSxVQUFVLElBQUUsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQVksS0FBSyxNQUFULFdBQVc7QUFBQSxJQUFDLEdBQUUsVUFBVSxFQUFFLEtBQUssTUFBSyxDQUFDO0FBQUEsSUFBRSxJQUFZLEtBQUssTUFBVCxXQUFXO0FBQUEsTUFBQyxLQUFLLEtBQUc7QUFBQSxNQUFJLFNBQVEsSUFBRSxLQUFLLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLFFBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUFBLElBQUM7QUFBQSxFQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUcsRUFBRSxJQUFFLEtBQUssSUFBRztBQUFBLElBQUMsS0FBSyxLQUFHO0FBQUEsSUFBRSxTQUFRLElBQUUsS0FBSyxFQUFXLE1BQUosV0FBTSxJQUFFLEVBQUU7QUFBQSxNQUFFLEVBQUUsRUFBRSxFQUFFO0FBQUEsRUFBQztBQUFBO0FBQUcsT0FBTyxlQUFlLEdBQUUsV0FBVSxTQUFRLEVBQUMsS0FBSSxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUcsSUFBRSxLQUFLO0FBQUEsSUFBRSxNQUFNLElBQUksTUFBTSxnQkFBZ0I7QUFBQSxFQUFFLElBQUksSUFBRSxHQUFFLElBQUk7QUFBQSxFQUFFLEtBQUssRUFBRTtBQUFBLEVBQUUsSUFBWSxNQUFKO0FBQUEsSUFBTSxFQUFFLElBQUUsS0FBSztBQUFBLEVBQUUsSUFBRyxLQUFHLEtBQUs7QUFBQSxJQUFFLE1BQU0sS0FBSztBQUFBLEVBQUUsT0FBTyxLQUFLO0FBQUEsRUFBRSxDQUFDO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLElBQUksR0FBRSxHQUFFLENBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsRUFBRSxFQUFFLElBQU87QUFBQSxFQUFFLElBQWUsT0FBTyxLQUFuQixZQUFxQjtBQUFBLElBQUM7QUFBQSxJQUFJLElBQUksSUFBRTtBQUFBLElBQUUsS0FBTztBQUFBLElBQUUsSUFBRztBQUFBLE1BQUMsRUFBRTtBQUFBLE1BQUUsT0FBTSxHQUFFO0FBQUEsTUFBQyxFQUFFLEtBQUc7QUFBQSxNQUFHLEVBQUUsS0FBRztBQUFBLE1BQUUsR0FBRSxDQUFDO0FBQUEsTUFBRSxNQUFNO0FBQUEsY0FBRTtBQUFBLE1BQVEsS0FBRTtBQUFBLE1BQUUsR0FBRTtBQUFBO0FBQUEsRUFBRTtBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsU0FBUSxJQUFFLEVBQUUsRUFBVyxNQUFKLFdBQU0sSUFBRSxFQUFFO0FBQUEsSUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQUEsRUFBRSxFQUFFLElBQU87QUFBQSxFQUFFLEVBQUUsSUFBTztBQUFBLEVBQUUsR0FBRSxDQUFDO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFHLE9BQUk7QUFBQSxJQUFLLE1BQU0sSUFBSSxNQUFNLHFCQUFxQjtBQUFBLEVBQUUsR0FBRSxJQUFJO0FBQUEsRUFBRSxLQUFFO0FBQUEsRUFBRSxLQUFLLEtBQUc7QUFBQSxFQUFHLElBQUcsSUFBRSxLQUFLO0FBQUEsSUFBRSxHQUFFLElBQUk7QUFBQSxFQUFFLEdBQUU7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsS0FBSyxJQUFFO0FBQUEsRUFBRSxLQUFLLElBQU87QUFBQSxFQUFFLEtBQUssSUFBTztBQUFBLEVBQUUsS0FBSyxJQUFPO0FBQUEsRUFBRSxLQUFLLElBQUU7QUFBQSxFQUFHLEtBQUssT0FBVyxLQUFOLE9BQWEsWUFBRSxFQUFFO0FBQUEsRUFBSyxJQUFHO0FBQUEsSUFBRSxHQUFFLEtBQUssSUFBSTtBQUFBO0FBQUUsR0FBRSxVQUFVLElBQUUsUUFBUSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsS0FBSyxFQUFFO0FBQUEsRUFBRSxJQUFHO0FBQUEsSUFBQyxJQUFHLElBQUUsS0FBSztBQUFBLE1BQUU7QUFBQSxJQUFPLElBQVksS0FBSyxNQUFUO0FBQUEsTUFBVztBQUFBLElBQU8sSUFBSSxJQUFFLEtBQUssRUFBRTtBQUFBLElBQUUsSUFBZSxPQUFPLEtBQW5CO0FBQUEsTUFBcUIsS0FBSyxJQUFFO0FBQUEsWUFBRTtBQUFBLElBQVEsRUFBRTtBQUFBO0FBQUE7QUFBSSxHQUFFLFVBQVUsSUFBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUcsSUFBRSxLQUFLO0FBQUEsSUFBRSxNQUFNLElBQUksTUFBTSxnQkFBZ0I7QUFBQSxFQUFFLEtBQUssS0FBRztBQUFBLEVBQUUsS0FBSyxLQUFHO0FBQUEsRUFBRyxHQUFFLElBQUk7QUFBQSxFQUFFLEdBQUUsSUFBSTtBQUFBLEVBQUU7QUFBQSxFQUFJLElBQUksSUFBRTtBQUFBLEVBQUUsS0FBRTtBQUFBLEVBQUssT0FBTyxHQUFFLEtBQUssTUFBSyxDQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUcsRUFBRSxJQUFFLEtBQUssSUFBRztBQUFBLElBQUMsS0FBSyxLQUFHO0FBQUEsSUFBRSxLQUFLLElBQUU7QUFBQSxJQUFFLEtBQUU7QUFBQSxFQUFJO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLEtBQUssS0FBRztBQUFBLEVBQUUsSUFBRyxFQUFFLElBQUUsS0FBSztBQUFBLElBQUcsR0FBRSxJQUFJO0FBQUE7QUFBRyxHQUFFLFVBQVUsVUFBUSxRQUFRLEdBQUU7QUFBQSxFQUFDLEtBQUssRUFBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsSUFBSSxHQUFFLEdBQUUsQ0FBQztBQUFBLEVBQUUsSUFBRztBQUFBLElBQUMsRUFBRSxFQUFFO0FBQUEsSUFBRSxPQUFNLEdBQUU7QUFBQSxJQUFDLEVBQUUsRUFBRTtBQUFBLElBQUUsTUFBTTtBQUFBO0FBQUEsRUFBRSxJQUFJLElBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQztBQUFBLEVBQUUsRUFBRSxPQUFPLFdBQVM7QUFBQSxFQUFFLE9BQU87QUFBQTs7O0FDQXgxSSxJQUFJO0FBQUosSUFBTTtBQUFOLElBQVE7QUFBUixJQUFVLEtBQWUsT0FBTyxVQUFwQixlQUE0QixDQUFDLENBQUMsT0FBTztBQUFqRCxJQUE2RSxLQUFFLENBQUM7QUFBaEYsSUFBa0YsS0FBRSxDQUFDO0FBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxFQUFDLEtBQUUsS0FBSztBQUFBLENBQUUsRUFBRTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsRUFBRSxLQUFHLEVBQUUsS0FBSyxNQUFLLEVBQUUsTUFBSSxRQUFRLEdBQUUsRUFBRTtBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBRyxJQUFFO0FBQUEsSUFBQyxJQUFJLElBQUU7QUFBQSxJQUFFLEtBQU87QUFBQSxJQUFFLEVBQUU7QUFBQSxFQUFDO0FBQUEsRUFBQyxLQUFFLEtBQUcsRUFBRSxFQUFFO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsTUFBSyxLQUFFLEVBQUUsTUFBSyxJQUFFLFVBQVUsRUFBQztBQUFBLEVBQUUsRUFBRSxRQUFNO0FBQUEsRUFBRSxJQUFJLElBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxHQUFFLEtBQUUsRUFBRTtBQUFBLElBQUksT0FBTSxLQUFFLEdBQUU7QUFBQSxNQUFHLElBQUcsR0FBRSxLQUFJO0FBQUEsUUFBQyxHQUFFLElBQUksUUFBTTtBQUFBLFFBQUU7QUFBQSxNQUFLO0FBQUEsSUFBQyxJQUFJLElBQUUsR0FBRSxRQUFRLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxFQUFFLE1BQU07QUFBQSxNQUFNLE9BQVcsTUFBSixJQUFNLElBQU8sTUFBTCxPQUFPLEtBQUcsS0FBRztBQUFBLEtBQUcsR0FBRSxJQUFFLEdBQUUsUUFBUSxHQUFFO0FBQUEsTUFBQyxPQUFNLENBQUMsTUFBTSxRQUFRLEVBQUUsS0FBSyxLQUFHLENBQUMsRUFBRSxFQUFFLEtBQUs7QUFBQSxLQUFFLEdBQUUsSUFBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLE1BQUMsS0FBSyxJQUFFO0FBQUEsTUFBRSxJQUFHLEVBQUUsT0FBTTtBQUFBLFFBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxRQUFNLElBQUcsRUFBRSxPQUFLLEVBQUUsSUFBSSxPQUFTLEVBQUUsSUFBSSxJQUFJLGFBQWQ7QUFBQSxVQUF1QixFQUFFLElBQUksSUFBSSxPQUFLO0FBQUEsTUFBQztBQUFBLEtBQUUsR0FBRSxJQUFFLEVBQUUsS0FBSztBQUFBLElBQUUsRUFBRSxLQUFLLElBQUUsUUFBUSxHQUFFO0FBQUEsTUFBQyxFQUFFO0FBQUEsTUFBRSxFQUFFLEtBQUssSUFBSTtBQUFBO0FB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QUEsVUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLFVBQUcsSUFBWSxNQUFKLGFBQU8sRUFBRSxLQUFLLElBQUc7QUFBQSxZQUFDLEVBQUUsRUFBRTtBQUFBLFlBQUUsRUFBRSxLQUFRO0FBQUEsVUFBQztBQUFBLFFBQUM7QUFBQSxNQUFLO0FBQUEsUUFBQyxJQUFFLENBQUM7QUFBQSxRQUFFLEVBQUUsSUFBRTtBQUFBO0FBQUEsTUFBRSxTQUFRLEtBQUssR0FBRTtBQUFBLFFBQUMsSUFBSSxJQUFFLEVBQUUsSUFBRyxJQUFFLEVBQUU7QUFBQSxRQUFHLElBQVksTUFBSixXQUFNO0FBQUEsVUFBQyxJQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxVQUFFLEVBQUUsS0FBRztBQUFBLFFBQUMsRUFBTTtBQUFBLFlBQUUsRUFBRSxHQUFFLENBQUM7QUFBQSxNQUFDO0FBQUEsTUFBQyxTQUFRLEtBQUs7QUFBQSxRQUFFLEVBQUUsS0FBRyxFQUFFO0FBQUEsSUFBRTtBQUFBLEVBQUM7QUFBQSxFQUFDLEVBQUUsQ0FBQztBQUFBLENBQUU7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsS0FBSyxLQUFZLEVBQUUsb0JBQU4sV0FBc0IsSUFBRSxHQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsS0FBSztBQUFBLEVBQUUsT0FBTSxFQUFDLEdBQUUsUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLElBQUMsRUFBRSxRQUFNO0FBQUEsSUFBRSxJQUFFLEVBQUUsS0FBSztBQUFBLEtBQUcsR0FBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsS0FBSyxJQUFFO0FBQUEsSUFBRSxJQUFJLElBQUUsRUFBRSxNQUFNO0FBQUEsSUFBTSxJQUFHLE1BQUksR0FBRTtBQUFBLE1BQUMsSUFBTztBQUFBLE1BQUUsSUFBRztBQUFBLFFBQUUsRUFBRSxLQUFHO0FBQUEsTUFBTyxTQUFTLEtBQU4sU0FBZSxNQUFMLFNBQWMsRUFBRSxPQUFSO0FBQUEsUUFBWSxFQUFFLGFBQWEsR0FBRSxDQUFDO0FBQUEsTUFBTztBQUFBLFVBQUUsZ0JBQWdCLENBQUM7QUFBQSxJQUFDLEVBQU07QUFBQSxVQUFPO0FBQUEsR0FBRSxFQUFDO0FBQUE7QUFBRSxHQUFFLFdBQVUsUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBYSxPQUFPLEVBQUUsUUFBbkIsVUFBd0I7QUFBQSxJQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsSUFBSSxJQUFHLEdBQUU7QUFBQSxNQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsTUFBRSxJQUFHLEdBQUU7QUFBQSxRQUFDLEVBQUUsSUFBTztBQUFBLFFBQUUsU0FBUSxLQUFLLEdBQUU7QUFBQSxVQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsVUFBRyxJQUFHO0FBQUEsWUFBRSxFQUFFLEVBQUU7QUFBQSxRQUFDO0FBQUEsTUFBQztBQUFBLElBQUM7QUFBQSxJQUFDLEVBQUUsT0FBVTtBQUFBLEVBQUMsRUFBSztBQUFBLElBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxJQUFJLElBQUcsR0FBRTtBQUFBLE1BQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxNQUFLLElBQUcsR0FBRTtBQUFBLFFBQUMsRUFBRSxPQUFVO0FBQUEsUUFBRSxFQUFFLEVBQUU7QUFBQSxNQUFDO0FBQUEsSUFBQztBQUFBO0FBQUEsRUFBRSxFQUFFLENBQUM7QUFBQSxDQUFFO0FBQUUsR0FBRSxPQUFNLFFBQVEsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFHLElBQUUsS0FBTyxNQUFKO0FBQUEsSUFBTSxFQUFFLFFBQU07QUFBQSxFQUFFLEVBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxDQUFFO0FBQUUsRUFBRSxVQUFVLHdCQUFzQixRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFHLEtBQUs7QUFBQSxJQUFJLE9BQU07QUFBQSxFQUFHLElBQUksSUFBRSxLQUFLLE1BQUssSUFBRSxLQUFZLEVBQUUsTUFBTjtBQUFBLEVBQVEsU0FBUSxLQUFLO0FBQUEsSUFBRSxPQUFN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SUFBRSxFQUFFLElBQUUsRUFBRTtBQUFBLE1BQUksS0FBSSxJQUFFLEVBQUUsUUFBTSxFQUFFO0FBQUEsUUFBSSxPQUFhLEVBQUUsT0FBUixTQUFjLEVBQUUsTUFBSSxFQUFFLEtBQUksRUFBRSxNQUFJLEVBQUUsTUFBSyxFQUFFLElBQUksR0FBRSxDQUFDO0FBQUE7QUFBQSxFQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBO0FBQUcsSUFBSSxLQUFFLEVBQUU7QUFBUSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRTtBQUFBLEVBQUMsT0FBTyxNQUFJLEVBQUUsT0FBSyxFQUFFLElBQUksUUFBTSxFQUFFLElBQUksSUFBSSxHQUFHLFFBQVEsUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFhLE9BQU8sRUFBRSxPQUFyQixjQUEwQixFQUFFLElBQUk7QUFBQSxHQUFFLEdBQUUsRUFBRSxJQUFJLE1BQUksUUFBYSxJQUFFLEdBQUUsQ0FBQyxHQUFFLENBQUMsR0FBRyxPQUFsQixTQUF3QixFQUFFLElBQUksUUFBTSxNQUFJLEVBQUUsSUFBSSxNQUFJLElBQUcsRUFBRSxJQUFJLE1BQUksTUFBRyxFQUFFLE1BQUksT0FBTSxFQUFFLE1BQUksRUFBRSxPQUFLLEVBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFFO0FBQUEsSUFBQyxPQUFPLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxHQUFFLElBQUc7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUcsTUFBSSxFQUFFLE1BQUksTUFBSyxFQUFFLE1BQUksRUFBRSxPQUFLLEVBQUUsSUFBSSxJQUFJLFFBQVEsQ0FBQyxHQUFFO0FBQUEsSUFBQyxPQUFPLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxHQUFFLEdBQUUsRUFBRSxPQUFLLEVBQUUsSUFBSSxRQUFNLE1BQUksRUFBRSxPQUFLLEVBQUUsWUFBWSxFQUFFLEdBQUcsR0FBRSxFQUFFLElBQUksTUFBSSxNQUFHLEVBQUUsSUFBSSxNQUFJLEtBQUk7QUFBQTtBQUFFLFNBQVMsRUFBQyxHQUFFO0FBQUEsRUFBQyxLQUFLLE1BQUksR0FBRSxLQUFLLElBQUUsTUFBSyxLQUFLLE1BQUk7QUFBQTtBQUFLLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxFQUFFLE1BQUksRUFBRSxHQUFHO0FBQUEsRUFBSSxPQUFPLEtBQUcsRUFBRSxPQUFLLEVBQUUsSUFBSSxDQUFDO0FBQUE7QUFBbU4sU0FBUyxFQUFDLEdBQUU7QUFBQSxFQUFDLEtBQUssSUFBRSxNQUFLLEtBQUssSUFBRTtBQUFBO0FBQUssRUFBRSxVQUFRLFFBQVEsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLEVBQUksTUFBSSxFQUFFLE1BQUksT0FBSSxLQUFHLEVBQUUsT0FBSyxFQUFFLElBQUksR0FBRSxLQUFHLEtBQUcsRUFBRSxRQUFNLEVBQUUsT0FBSyxPQUFNLE1BQUcsR0FBRSxDQUFDO0FBQUEsSUFBSSxHQUFFLFlBQVUsSUFBSSxHQUFHLE1BQUksUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEVBQUUsS0FBSSxJQUFFO0FBQUEsRUFBVyxFQUFFLEtBQVIsU0FBWSxFQUFFLElBQUUsQ0FBQyxJQUFHLEVBQUUsRUFBRSxLQUFLLENBQUM7QUFBQSxFQUFFLElBQUksSUFBRSxHQUFFLEVBQUUsR0FBRyxHQUFFLElBQUUsT0FBRyxJQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsS0FBRyxFQUFFLFFBQU0sSUFBRSxNQUFHLEVBQUUsTUFBSSxNQUFLLElBQUUsRUFBRSxDQUFDLElBQUUsRUFBRTtBQUFBO0FBQUEsRUFBSSxFQUFFLE1BQUk7QUFBQSxFQUFFLElBQUksS0FBRSxFQUFFO0FBQUEsRUFBSSxFQUFFLE1BQUk7QUFBQSxFQUFLLElBQUksSUFBRSxRQUFRLEdBQUU7QUFBQSxJQUFDLElBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSTtBQUFBLE1BQUMsSUFBRyxFQUFFLE1BQU0sS0FBSTtBQUFBLFFBQUMsSUFBSSxJQUFFLEVBQUUsTUFBTTtBQUFBLFFBQUksRUFBRSxJQUFJLElBQUksS0FBRyxHQUFFLEdBQUUsRUFBRSxJQUFJLEtBQUksRUFBRSxJQUFJLEdBQUc7QUFBQSxNQUFDO0FBQUEsTUFBQyxJQUFJO0FBQUEsTUFBRSxLQUFJLEVBQUUsU0FBUyxFQUFDLEtBQUksRUFBRSxNQUFJLEtBQUksQ0FBQyxFQUFFLElBQUUsRUFBRSxFQUFFLElBQUk7QUFBQSxRQUFHLEVBQUUsTUFBSSxJQUFFLEVBQUUsWUFBWTtBQUFBLElBQUM7QUFBQTtBQUFBLEVBQUcsRUFBRSxTQUFPLEtBQUcsRUFBRSxPQUFLLEVBQUUsU0FBUyxFQUFDLEtBQUksRUFBRSxNQUFJLEVBQUUsSUFBSSxJQUFJLEdBQUUsQ0FBQyxHQUFFLEVBQUUsS0FBSyxHQUFFLENBQUM7QUFBQSxHQUFHLEdBQUUsVUFBVSx1QkFBcUIsUUFBUSxHQUFFO0FBQUEsRUFBQyxLQUFLLElBQUUsQ0FBQztBQUFBLEdBQUcsR0FBRSxVQUFVLFNBQU8sUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBRyxLQUFLLEtBQUk7QUFBQSxJQUFDLElBQUcsS0FBSyxJQUFJLEtBQUk7QUFBQSxNQUFDLElBQUksSUFBRSxTQUFTLGNBQWMsS0FBSyxHQUFFLElBQUUsS0FBSyxJQUFJLElBQUksR0FBRztBQUFBLE1BQUksS0FBSyxJQUFJLElBQUksS0FBRyxHQUFFLEtBQUssS0FBSSxHQUFFLEVBQUUsTUFBSSxFQUFFLEdBQUc7QUFBQSxJQUFDO0FBQUEsSUFBQyxLQUFLLE1BQUk7QUFBQSxFQUFJO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRSxPQUFLLEVBQUUsR0FBRSxNQUFLLEVBQUUsUUFBUTtBQUFBLEVBQUUsT0FBTyxNQUFJLEVBQUUsT0FBSyxNQUFLLENBQUMsRUFBRSxHQUFFLE1BQUssRUFBRSxNQUFJLE9BQUssRUFBRSxRQUFRLEdBQUUsQ0FBQztBQUFBO0FBQUcsSUFBSSxLQUFFLFFBQVEsQ0FBQyxHQUFFLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFB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
|
|
5501
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9kaXN0L3ByZWFjdC5tb2R1bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9ob29rcy9kaXN0L2hvb2tzLm1vZHVsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AcHJlYWN0K3NpZ25hbHMtY29yZUAxLjE0LjIvbm9kZV9tb2R1bGVzL0BwcmVhY3Qvc2lnbmFscy1jb3JlL2Rpc3Qvc2lnbmFscy1jb3JlLm1vZHVsZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLmJ1bi9AcHJlYWN0K3NpZ25hbHNAMi45LjArOGFkZTYwMmVkNmMzNjM2MC9ub2RlX21vZHVsZXMvQHByZWFjdC9zaWduYWxzL2Rpc3Qvc2lnbmFscy5tb2R1bGUuanMiLCAic3JjL2FjdGlvbnMvZXJyb3IudHMiLCAic3JjL2FjdGlvbnMvb3ZlcmxheS50cyIsICJzcmMvYWN0aW9ucy9ldmVudC1kZWxlZ2F0aW9uLnRzIiwgInNyYy9hY3Rpb25zL2Zvcm0udHMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5idW4vcHJlYWN0QDEwLjI5LjEvbm9kZV9tb2R1bGVzL3ByZWFjdC9qc3gtcnVudGltZS9kaXN0L2pzeFJ1bnRpbWUubW9kdWxlLmpzIiwgInNyYy9hY3Rpb25zL3N0b3JlLnRzeCIsICJzcmMvcG9sbHktdWkvQWN0aW9uRm9ybS50c3giLCAic3JjL3BvbGx5LXVpL2ludGVybmFsL2Rpc3BhdGNoLWFjdGlvbi50cyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvcGFzc3Rocm91Z2gudHMiLCAic3JjL3BvbGx5LXVpL0FjdGlvbklucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvTGF5b3V0LnRzeCIsICJzcmMvcG9sbHktdWkvRHJvcGRvd24udHN4IiwgInNyYy9wb2xseS11aS9pbnRlcm5hbC9zZWxlY3QtdHJpZ2dlci50c3giLCAic3JjL3BvbGx5LXVpL0FjdGlvblNlbGVjdC50c3giLCAic3JjL3BvbGx5LXVpL0JhZGdlLnRzeCIsICJzcmMvcG9sbHktdWkvQnV0dG9uLnRzeCIsICJzcmMvcG9sbHktdWkvU3VyZmFjZS50c3giLCAic3JjL3BvbGx5LXVpL0NhcmQudHN4IiwgInNyYy9wb2xseS11aS9DaGVja2JveC50c3giLCAic3JjL3BvbGx5LXVpL0NsdXN0ZXIudHN4IiwgInNyYy9wb2xseS11aS9Db2RlLnRzeCIsICJzcmMvcG9sbHktdWkvQ29sbGFwc2libGUudHN4IiwgIi4uLy4uL25vZGVfbW9kdWxlcy8uYnVuL3ByZWFjdEAxMC4yOS4xL25vZGVfbW9kdWxlcy9wcmVhY3QvY29tcGF0L2Rpc3QvY29tcGF0Lm1vZHVsZS5qcyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvZm9jdXMtdHJhcC50cyIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvc2Nyb2xsLWxvY2sudHMiLCAic3JjL3BvbGx5LXVpL092ZXJsYXlSb290LnRzeCIsICJzcmMvcG9sbHktdWkvTW9kYWwudHN4IiwgInNyYy9wb2xseS11aS9Db25maXJtRGlhbG9nLnRzeCIsICJzcmMvcG9sbHktdWkvRmlsZUlucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvSHRtbC50c3giLCAic3JjL3BvbGx5LXVpL0xpbmsudHN4IiwgInNyYy9wb2xseS11aS9PdXRwdXQudHN4IiwgInNyYy9wb2xseS11aS9TZWxlY3QudHN4IiwgInNyYy9wb2xseS11aS9Ta2VsZXRvbi50c3giLCAic3JjL3BvbGx5LXVpL1RhYnMudHN4IiwgInNyYy9wb2xseS11aS9UZXh0LnRzeCIsICJzcmMvcG9sbHktdWkvaW50ZXJuYWwvaW5wdXQtYmFzZS50cyIsICJzcmMvcG9sbHktdWkvVGV4dElucHV0LnRzeCIsICJzcmMvcG9sbHktdWkvVG9hc3QudHN4IiwgInNyYy9wb2xseS11aS9Ub2dnbGUudHN4IiwgInNyYy9zaGFyZWQvbGliL3N0YXRlLnRzIiwgInRvb2xzL2dhbGxlcnkvc3JjL3N0b3Jlcy50cyIsICJ0b29scy9nYWxsZXJ5L3NyYy9hY3Rpb25zLnRzIiwgInRvb2xzL2dhbGxlcnkvc3JjL3NwZWNpbWVucy50c3giLCAidG9vbHMvZ2FsbGVyeS9zcmMvZ2FsbGVyeS1hcHAudHN4IiwgInRvb2xzL2dhbGxlcnkvc3JjL2NsaWVudC50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbCiAgICAidmFyIG4sbCx1LHQsaSxyLG8sZSxmLGMscyxhLGgscCx2LHksZD17fSx3PVtdLF89L2FjaXR8ZXgoPzpzfGd8bnxwfCQpfHJwaHxncmlkfG93c3xtbmN8bnR3fGluZVtjaF18em9vfF5vcmR8aXRlcmEvaSxnPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gbShuLGwpe2Zvcih2YXIgdSBpbiBsKW5bdV09bFt1XTtyZXR1cm4gbn1mdW5jdGlvbiBiKG4pe24mJm4ucGFyZW50Tm9kZSYmbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pfWZ1bmN0aW9uIGsobCx1LHQpe3ZhciBpLHIsbyxlPXt9O2ZvcihvIGluIHUpXCJrZXlcIj09bz9pPXVbb106XCJyZWZcIj09bz9yPXVbb106ZVtvXT11W29dO2lmKGFyZ3VtZW50cy5sZW5ndGg+MiYmKGUuY2hpbGRyZW49YXJndW1lbnRzLmxlbmd0aD4zP24uY2FsbChhcmd1bWVudHMsMik6dCksXCJmdW5jdGlvblwiPT10eXBlb2YgbCYmbnVsbCE9bC5kZWZhdWx0UHJvcHMpZm9yKG8gaW4gbC5kZWZhdWx0UHJvcHMpdm9pZCAwPT09ZVtvXSYmKGVbb109bC5kZWZhdWx0UHJvcHNbb10pO3JldHVybiB4KGwsZSxpLHIsbnVsbCl9ZnVuY3Rpb24geChuLHQsaSxyLG8pe3ZhciBlPXt0eXBlOm4scHJvcHM6dCxrZXk6aSxyZWY6cixfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6bnVsbD09bz8rK3U6byxfX2k6LTEsX191OjB9O3JldHVybiBudWxsPT1vJiZudWxsIT1sLnZub2RlJiZsLnZub2RlKGUpLGV9ZnVuY3Rpb24gTSgpe3JldHVybntjdXJyZW50Om51bGx9fWZ1bmN0aW9uIFMobil7cmV0dXJuIG4uY2hpbGRyZW59ZnVuY3Rpb24gQyhuLGwpe3RoaXMucHJvcHM9bix0aGlzLmNvbnRleHQ9bH1mdW5jdGlvbiAkKG4sbCl7aWYobnVsbD09bClyZXR1cm4gbi5fXz8kKG4uX18sbi5fX2krMSk6bnVsbDtmb3IodmFyIHU7bDxuLl9fay5sZW5ndGg7bCsrKWlmKG51bGwhPSh1PW4uX19rW2xdKSYmbnVsbCE9dS5fX2UpcmV0dXJuIHUuX19lO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4udHlwZT8kKG4pOm51bGx9ZnVuY3Rpb24gSShuKXtpZihuLl9fUCYmbi5fX2Qpe3ZhciB1PW4uX192LHQ9dS5fX2UsaT1bXSxyPVtdLG89bSh7fSx1KTtvLl9fdj11Ll9fdisxLGwudm5vZGUmJmwudm5vZGUobykscShuLl9fUCxvLHUsbi5fX24sbi5fX1AubmFtZXNwYWNlVVJJLDMyJnUuX191P1t0XTpudWxsLGksbnVsbD09dD8kKHUpOnQsISEoMzImdS5fX3UpLHIpLG8uX192PXUuX192LG8uX18uX19rW28uX19pXT1vLEQoaSxvLHIpLHUuX19lPXUuX189bnVsbCxvLl9fZSE9dCYmUChvKX19ZnVuY3Rpb24gUChuKXtpZihudWxsIT0obj1uLl9fKSYmbnVsbCE9bi5fX2MpcmV0dXJuIG4uX19lPW4uX19jLmJhc2U9bnVsbCxuLl9fay5zb21lKGZ1bmN0aW9uKGwpe2lmKG51bGwhPWwmJm51bGwhPWwuX19lKXJldHVybiBuLl9fZT1uLl9fYy5iYXNlPWwuX19lfSksUChuKX1mdW5jdGlvbiBBKG4peyghbi5fX2QmJihuLl9fZD0hMCkmJmkucHVzaChuKSYmIUguX19yKyt8fHIhPWwuZGVib3VuY2VSZW5kZXJpbmcpJiYoKHI9bC5kZWJvdW5jZVJlbmRlcmluZyl8fG8pKEgpfWZ1bmN0aW9uIEgoKXt0cnl7Zm9yKHZhciBuLGw9MTtpLmxlbmd0aDspaS5sZW5ndGg+bCYmaS5zb3J0KGUpLG49aS5zaGlmdCgpLGw9aS5sZW5ndGgsSShuKX1maW5hbGx5e2kubGVuZ3RoPUguX19yPTB9fWZ1bmN0aW9uIEwobixsLHUsdCxpLHIsbyxlLGYsYyxzKXt2YXIgYSxoLHAsdix5LF8sZyxtPXQmJnQuX19rfHx3LGI9bC5sZW5ndGg7Zm9yKGY9VCh1LGwsbSxmLGIpLGE9MDthPGI7YSsrKW51bGwhPShwPXUuX19rW2FdKSYmKGg9LTEhPXAuX19pJiZtW3AuX19pXXx8ZCxwLl9faT1hLF89cShuLHAsaCxpLHIsbyxlLGYsYyxzKSx2PXAuX19lLHAucmVmJiZoLnJlZiE9cC5yZWYmJihoLnJlZiYmSihoLnJlZixudWxsLHApLHMucHVzaChwLnJlZixwLl9fY3x8dixwKSksbnVsbD09eSYmbnVsbCE9diYmKHk9diksKGc9ISEoNCZwLl9fdSkpfHxoLl9faz09PXAuX19rPyhmPWoocCxmLG4sZyksZyYmaC5fX2UmJihoLl9fZT1udWxsKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgcC50eXBlJiZ2b2lkIDAhPT1fP2Y9Xzp2JiYoZj12Lm5leHRTaWJsaW5nKSxwLl9fdSY9LTcpO3JldHVybiB1Ll9fZT15LGZ9ZnVuY3Rpb24gVChuLGwsdSx0LGkpe3ZhciByLG8sZSxmLGMscz11Lmxlbmd0aCxhPXMsaD0wO2ZvcihuLl9faz1uZXcgQXJyYXkoaSkscj0wO3I8aTtyKyspbnVsbCE9KG89bFtyXSkmJlwiYm9vbGVhblwiIT10eXBlb2YgbyYmXCJmdW5jdGlvblwiIT10eXBlb2Ygbz8oXCJzdHJpbmdcIj09dHlwZW9mIG98fFwibnVtYmVyXCI9PXR5cGVvZiBvfHxcImJpZ2ludFwiPT10eXBlb2Ygb3x8by5jb25zdHJ1Y3Rvcj09U3RyaW5nP289bi5fX2tbcl09eChudWxsLG8sbnVsbCxudWxsLG51bGwpOmcobyk/bz1uLl9fa1tyXT14KFMse2NoaWxkcmVuOm99LG51bGwsbnVsbCxudWxsKTp2b2lkIDA9PT1vLmNvbnN0cnVjdG9yJiZvLl9fYj4wP289bi5fX2tbcl09eChvLnR5cGUsby5wcm9wcyxvLmtleSxvLnJlZj9vLnJlZjpudWxsLG8uX192KTpuLl9fa1tyXT1vLGY9citoLG8uX189bixvLl9fYj1uLl9fYisxLGU9bnVsbCwtMSE9KGM9by5fX2k9TyhvLHUsZixhKSkmJihhLS0sKGU9dVtjXSkmJihlLl9fdXw9MikpLG51bGw9PWV8fG51bGw9PWUuX192PygtMT09YyYmKGk+cz9oLS06aTxzJiZoKyspLFwiZnVuY3Rpb25cIiE9dHlwZW9mIG8udHlwZSYmKG8uX191fD00KSk6YyE9ZiYmKGM9PWYtMT9oLS06Yz09ZisxP2grKzooYz5mP2gtLTpoKyssby5fX3V8PTQpKSk6bi5fX2tbcl09bnVsbDtpZihhKWZvcihyPTA7cjxzO3IrKyludWxsIT0oZT11W3JdKSYmMD09KDImZS5fX3UpJiYoZS5fX2U9PXQmJih0PSQoZSkpLEsoZSxlKSk7cmV0dXJuIHR9ZnVuY3Rpb24gaihuLGwsdSx0KXt2YXIgaSxyO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4udHlwZSl7Zm9yKGk9bi5fX2sscj0wO2kmJnI8aS5sZW5ndGg7cisrKWlbcl0mJihpW3JdLl9fPW4sbD1qKGlbcl0sbCx1LHQpKTtyZXR1cm4gbH1uLl9fZSE9bCYmKHQmJihsJiZuLnR5cGUmJiFsLnBhcmVudE5vZGUmJihsPSQobikpLHUuaW5zZXJ0QmVmb3JlKG4uX19lLGx8fG51bGwpKSxsPW4uX19lKTtkb3tsPWwmJmwubmV4dFNpYmxpbmd9d2hpbGUobnVsbCE9bCYmOD09bC5ub2RlVHlwZSk7cmV0dXJuIGx9ZnVuY3Rpb24gRihuLGwpe3JldHVybiBsPWx8fFtdLG51bGw9PW58fFwiYm9vbGVhblwiPT10eXBlb2Ygbnx8KGcobik/bi5zb21lKGZ1bmN0aW9uKG4pe0YobixsKX0pOmwucHVzaChuKSksbH1mdW5jdGlvbiBPKG4sbCx1LHQpe3ZhciBpLHIsbyxlPW4ua2V5LGY9bi50eXBlLGM9bFt1XSxzPW51bGwhPWMmJjA9PSgyJmMuX191KTtpZihudWxsPT09YyYmbnVsbD09ZXx8cyYmZT09Yy5rZXkmJmY9PWMudHlwZSlyZXR1cm4gdTtpZih0PihzPzE6MCkpZm9yKGk9dS0xLHI9dSsxO2k+PTB8fHI8bC5sZW5ndGg7KWlmKG51bGwhPShjPWxbbz1pPj0wP2ktLTpyKytdKSYmMD09KDImYy5fX3UpJiZlPT1jLmtleSYmZj09Yy50eXBlKXJldHVybiBvO3JldHVybi0xfWZ1bmN0aW9uIHoobixsLHUpe1wiLVwiPT1sWzBdP24uc2V0UHJvcGVydHkobCxudWxsPT11P1wiXCI6dSk6bltsXT1udWxsPT11P1wiXCI6XCJudW1iZXJcIiE9dHlwZW9mIHV8fF8udGVzdChsKT91OnUrXCJweFwifWZ1bmN0aW9uIE4obixsLHUsdCxpKXt2YXIgcixvO246aWYoXCJzdHlsZVwiPT1sKWlmKFwic3RyaW5nXCI9PXR5cGVvZiB1KW4uc3R5bGUuY3NzVGV4dD11O2Vsc2V7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJihuLnN0eWxlLmNzc1RleHQ9dD1cIlwiKSx0KWZvcihsIGluIHQpdSYmbCBpbiB1fHx6KG4uc3R5bGUsbCxcIlwiKTtpZih1KWZvcihsIGluIHUpdCYmdVtsXT09dFtsXXx8eihuLnN0eWxlLGwsdVtsXSl9ZWxzZSBpZihcIm9cIj09bFswXSYmXCJuXCI9PWxbMV0pcj1sIT0obD1sLnJlcGxhY2UoYSxcIiQxXCIpKSxvPWwudG9Mb3dlckNhc2UoKSxsPW8gaW4gbnx8XCJvbkZvY3VzT3V0XCI9PWx8fFwib25Gb2N1c0luXCI9PWw/by5zbGljZSgyKTpsLnNsaWNlKDIpLG4ubHx8KG4ubD17fSksbi5sW2wrcl09dSx1P3Q/dVtzXT10W3NdOih1W3NdPWgsbi5hZGRFdmVudExpc3RlbmVyKGwscj92OnAscikpOm4ucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLHI/djpwLHIpO2Vsc2V7aWYoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPT1pKWw9bC5yZXBsYWNlKC94bGluayhIfDpoKS8sXCJoXCIpLnJlcGxhY2UoL3NOYW1lJC8sXCJzXCIpO2Vsc2UgaWYoXCJ3aWR0aFwiIT1sJiZcImhlaWdodFwiIT1sJiZcImhyZWZcIiE9bCYmXCJsaXN0XCIhPWwmJlwiZm9ybVwiIT1sJiZcInRhYkluZGV4XCIhPWwmJlwiZG93bmxvYWRcIiE9bCYmXCJyb3dTcGFuXCIhPWwmJlwiY29sU3BhblwiIT1sJiZcInJvbGVcIiE9bCYmXCJwb3BvdmVyXCIhPWwmJmwgaW4gbil0cnl7bltsXT1udWxsPT11P1wiXCI6dTticmVhayBufWNhdGNoKG4pe31cImZ1bmN0aW9uXCI9PXR5cGVvZiB1fHwobnVsbD09dXx8ITE9PT11JiZcIi1cIiE9bFs0XT9uLnJlbW92ZUF0dHJpYnV0ZShsKTpuLnNldEF0dHJpYnV0ZShsLFwicG9wb3ZlclwiPT1sJiYxPT11P1wiXCI6dSkpfX1mdW5jdGlvbiBWKG4pe3JldHVybiBmdW5jdGlvbih1KXtpZih0aGlzLmwpe3ZhciB0PXRoaXMubFt1LnR5cGUrbl07aWYobnVsbD09dVtjXSl1W2NdPWgrKztlbHNlIGlmKHVbY108dFtzXSlyZXR1cm47cmV0dXJuIHQobC5ldmVudD9sLmV2ZW50KHUpOnUpfX19ZnVuY3Rpb24gcShuLHUsdCxpLHIsbyxlLGYsYyxzKXt2YXIgYSxoLHAsdix5LGQsXyxrLHgsTSwkLEksUCxBLEgsVD11LnR5cGU7aWYodm9pZCAwIT09dS5jb25zdHJ1Y3RvcilyZXR1cm4gbnVsbDsxMjgmdC5fX3UmJihjPSEhKDMyJnQuX191KSxvPVtmPXUuX19lPXQuX19lXSksKGE9bC5fX2IpJiZhKHUpO246aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgVCl0cnl7aWYoaz11LnByb3BzLHg9VC5wcm90b3R5cGUmJlQucHJvdG90eXBlLnJlbmRlcixNPShhPVQuY29udGV4dFR5cGUpJiZpW2EuX19jXSwkPWE/TT9NLnByb3BzLnZhbHVlOmEuX186aSx0Ll9fYz9fPShoPXUuX19jPXQuX19jKS5fXz1oLl9fRTooeD91Ll9fYz1oPW5ldyBUKGssJCk6KHUuX19jPWg9bmV3IEMoaywkKSxoLmNvbnN0cnVjdG9yPVQsaC5yZW5kZXI9USksTSYmTS5zdWIoaCksaC5zdGF0ZXx8KGguc3RhdGU9e30pLGguX19uPWkscD1oLl9fZD0hMCxoLl9faD1bXSxoLl9zYj1bXSkseCYmbnVsbD09aC5fX3MmJihoLl9fcz1oLnN0YXRlKSx4JiZudWxsIT1ULmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmKGguX19zPT1oLnN0YXRlJiYoaC5fX3M9bSh7fSxoLl9fcykpLG0oaC5fX3MsVC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoayxoLl9fcykpKSx2PWgucHJvcHMseT1oLnN0YXRlLGguX192PXUscCl4JiZudWxsPT1ULmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyYmbnVsbCE9aC5jb21wb25lbnRXaWxsTW91bnQmJmguY29tcG9uZW50V2lsbE1vdW50KCkseCYmbnVsbCE9aC5jb21wb25lbnREaWRNb3VudCYmaC5fX2gucHVzaChoLmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKHgmJm51bGw9PVQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzJiZrIT09diYmbnVsbCE9aC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZoLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoaywkKSx1Ll9fdj09dC5fX3Z8fCFoLl9fZSYmbnVsbCE9aC5zaG91bGRDb21wb25lbnRVcGRhdGUmJiExPT09aC5zaG91bGRDb21wb25lbnRVcGRhdGUoayxoLl9fcywkKSl7dS5fX3YhPXQuX192JiYoaC5wcm9wcz1rLGguc3RhdGU9aC5fX3MsaC5fX2Q9ITEpLHUuX19lPXQuX19lLHUuX19rPXQuX19rLHUuX19rLnNvbWUoZnVuY3Rpb24obil7biYmKG4uX189dSl9KSx3LnB1c2guYXBwbHkoaC5fX2gsaC5fc2IpLGguX3NiPVtdLGguX19oLmxlbmd0aCYmZS5wdXNoKGgpO2JyZWFrIG59bnVsbCE9aC5jb21wb25lbnRXaWxsVXBkYXRlJiZoLmNvbXBvbmVudFdpbGxVcGRhdGUoayxoLl9fcywkKSx4JiZudWxsIT1oLmNvbXBvbmVudERpZFVwZGF0ZSYmaC5fX2gucHVzaChmdW5jdGlvbigpe2guY29tcG9uZW50RGlkVXBkYXRlKHYseSxkKX0pfWlmKGguY29udGV4dD0kLGgucHJvcHM9ayxoLl9fUD1uLGguX19lPSExLEk9bC5fX3IsUD0wLHgpaC5zdGF0ZT1oLl9fcyxoLl9fZD0hMSxJJiZJKHUpLGE9aC5yZW5kZXIoaC5wcm9wcyxoLnN0YXRlLGguY29udGV4dCksdy5wdXNoLmFwcGx5KGguX19oLGguX3NiKSxoLl9zYj1bXTtlbHNlIGRve2guX19kPSExLEkmJkkodSksYT1oLnJlbmRlcihoLnByb3BzLGguc3RhdGUsaC5jb250ZXh0KSxoLnN0YXRlPWguX19zfXdoaWxlKGguX19kJiYrK1A8MjUpO2guc3RhdGU9aC5fX3MsbnVsbCE9aC5nZXRDaGlsZENvbnRleHQmJihpPW0obSh7fSxpKSxoLmdldENoaWxkQ29udGV4dCgpKSkseCYmIXAmJm51bGwhPWguZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUmJihkPWguZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUodix5KSksQT1udWxsIT1hJiZhLnR5cGU9PT1TJiZudWxsPT1hLmtleT9FKGEucHJvcHMuY2hpbGRyZW4pOmEsZj1MKG4sZyhBKT9BOltBXSx1LHQsaSxyLG8sZSxmLGMscyksaC5iYXNlPXUuX19lLHUuX191Jj0tMTYxLGguX19oLmxlbmd0aCYmZS5wdXNoKGgpLF8mJihoLl9fRT1oLl9fPW51bGwpfWNhdGNoKG4pe2lmKHUuX192PW51bGwsY3x8bnVsbCE9bylpZihuLnRoZW4pe2Zvcih1Ll9fdXw9Yz8xNjA6MTI4O2YmJjg9PWYubm9kZVR5cGUmJmYubmV4dFNpYmxpbmc7KWY9Zi5uZXh0U2libGluZztvW28uaW5kZXhPZihmKV09bnVsbCx1Ll9fZT1mfWVsc2V7Zm9yKEg9by5sZW5ndGg7SC0tOyliKG9bSF0pO0IodSl9ZWxzZSB1Ll9fZT10Ll9fZSx1Ll9faz10Ll9fayxuLnRoZW58fEIodSk7bC5fX2Uobix1LHQpfWVsc2UgbnVsbD09byYmdS5fX3Y9PXQuX192Pyh1Ll9faz10Ll9fayx1Ll9fZT10Ll9fZSk6Zj11Ll9fZT1HKHQuX19lLHUsdCxpLHIsbyxlLGMscyk7cmV0dXJuKGE9bC5kaWZmZWQpJiZhKHUpLDEyOCZ1Ll9fdT92b2lkIDA6Zn1mdW5jdGlvbiBCKG4pe24mJihuLl9fYyYmKG4uX19jLl9fZT0hMCksbi5fX2smJm4uX19rLnNvbWUoQikpfWZ1bmN0aW9uIEQobix1LHQpe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKUoodFtpXSx0WysraV0sdFsrK2ldKTtsLl9fYyYmbC5fX2ModSxuKSxuLnNvbWUoZnVuY3Rpb24odSl7dHJ5e249dS5fX2gsdS5fX2g9W10sbi5zb21lKGZ1bmN0aW9uKG4pe24uY2FsbCh1KX0pfWNhdGNoKG4pe2wuX19lKG4sdS5fX3YpfX0pfWZ1bmN0aW9uIEUobil7cmV0dXJuXCJvYmplY3RcIiE9dHlwZW9mIG58fG51bGw9PW58fG4uX19iPjA/bjpnKG4pP24ubWFwKEUpOm0oe30sbil9ZnVuY3Rpb24gRyh1LHQsaSxyLG8sZSxmLGMscyl7dmFyIGEsaCxwLHYseSx3LF8sbT1pLnByb3BzfHxkLGs9dC5wcm9wcyx4PXQudHlwZTtpZihcInN2Z1wiPT14P289XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiOlwibWF0aFwiPT14P289XCJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MXCI6b3x8KG89XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCIpLG51bGwhPWUpZm9yKGE9MDthPGUubGVuZ3RoO2ErKylpZigoeT1lW2FdKSYmXCJzZXRBdHRyaWJ1dGVcImluIHk9PSEheCYmKHg/eS5sb2NhbE5hbWU9PXg6Mz09eS5ub2RlVHlwZSkpe3U9eSxlW2FdPW51bGw7YnJlYWt9aWYobnVsbD09dSl7aWYobnVsbD09eClyZXR1cm4gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoayk7dT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobyx4LGsuaXMmJmspLGMmJihsLl9fbSYmbC5fX20odCxlKSxjPSExKSxlPW51bGx9aWYobnVsbD09eCltPT09a3x8YyYmdS5kYXRhPT1rfHwodS5kYXRhPWspO2Vsc2V7aWYoZT1lJiZuLmNhbGwodS5jaGlsZE5vZGVzKSwhYyYmbnVsbCE9ZSlmb3IobT17fSxhPTA7YTx1LmF0dHJpYnV0ZXMubGVuZ3RoO2ErKyltWyh5PXUuYXR0cmlidXRlc1thXSkubmFtZV09eS52YWx1ZTtmb3IoYSBpbiBtKXk9bVthXSxcImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MXCI9PWE/cD15OlwiY2hpbGRyZW5cIj09YXx8YSBpbiBrfHxcInZhbHVlXCI9PWEmJlwiZGVmYXVsdFZhbHVlXCJpbiBrfHxcImNoZWNrZWRcIj09YSYmXCJkZWZhdWx0Q2hlY2tlZFwiaW4ga3x8Tih1LGEsbnVsbCx5LG8pO2ZvcihhIGluIGspeT1rW2FdLFwiY2hpbGRyZW5cIj09YT92PXk6XCJkYW5nZXJvdXNseVNldElubmVySFRNTFwiPT1hP2g9eTpcInZhbHVlXCI9PWE/dz15OlwiY2hlY2tlZFwiPT1hP189eTpjJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB5fHxtW2FdPT09eXx8Tih1LGEseSxtW2FdLG8pO2lmKGgpY3x8cCYmKGguX19odG1sPT1wLl9faHRtbHx8aC5fX2h0bWw9PXUuaW5uZXJIVE1MKXx8KHUuaW5uZXJIVE1MPWguX19odG1sKSx0Ll9faz1bXTtlbHNlIGlmKHAmJih1LmlubmVySFRNTD1cIlwiKSxMKFwidGVtcGxhdGVcIj09dC50eXBlP3UuY29udGVudDp1LGcodik/djpbdl0sdCxpLHIsXCJmb3JlaWduT2JqZWN0XCI9PXg/XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI6byxlLGYsZT9lWzBdOmkuX19rJiYkKGksMCksYyxzKSxudWxsIT1lKWZvcihhPWUubGVuZ3RoO2EtLTspYihlW2FdKTtjfHwoYT1cInZhbHVlXCIsXCJwcm9ncmVzc1wiPT14JiZudWxsPT13P3UucmVtb3ZlQXR0cmlidXRlKFwidmFsdWVcIik6bnVsbCE9dyYmKHchPT11W2FdfHxcInByb2dyZXNzXCI9PXgmJiF3fHxcIm9wdGlvblwiPT14JiZ3IT1tW2FdKSYmTih1LGEsdyxtW2FdLG8pLGE9XCJjaGVja2VkXCIsbnVsbCE9XyYmXyE9dVthXSYmTih1LGEsXyxtW2FdLG8pKX1yZXR1cm4gdX1mdW5jdGlvbiBKKG4sdSx0KXt0cnl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Ygbil7dmFyIGk9XCJmdW5jdGlvblwiPT10eXBlb2Ygbi5fX3U7aSYmbi5fX3UoKSxpJiZudWxsPT11fHwobi5fX3U9bih1KSl9ZWxzZSBuLmN1cnJlbnQ9dX1jYXRjaChuKXtsLl9fZShuLHQpfX1mdW5jdGlvbiBLKG4sdSx0KXt2YXIgaSxyO2lmKGwudW5tb3VudCYmbC51bm1vdW50KG4pLChpPW4ucmVmKSYmKGkuY3VycmVudCYmaS5jdXJyZW50IT1uLl9fZXx8SihpLG51bGwsdSkpLG51bGwhPShpPW4uX19jKSl7aWYoaS5jb21wb25lbnRXaWxsVW5tb3VudCl0cnl7aS5jb21wb25lbnRXaWxsVW5tb3VudCgpfWNhdGNoKG4pe2wuX19lKG4sdSl9aS5iYXNlPWkuX19QPW51bGx9aWYoaT1uLl9faylmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWlbcl0mJksoaVtyXSx1LHR8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIG4udHlwZSk7dHx8YihuLl9fZSksbi5fX2M9bi5fXz1uLl9fZT12b2lkIDB9ZnVuY3Rpb24gUShuLGwsdSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3Iobix1KX1mdW5jdGlvbiBSKHUsdCxpKXt2YXIgcixvLGUsZjt0PT1kb2N1bWVudCYmKHQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxsLl9fJiZsLl9fKHUsdCksbz0ocj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBpKT9udWxsOmkmJmkuX19rfHx0Ll9fayxlPVtdLGY9W10scSh0LHU9KCFyJiZpfHx0KS5fX2s9ayhTLG51bGwsW3VdKSxvfHxkLGQsdC5uYW1lc3BhY2VVUkksIXImJmk/W2ldOm8/bnVsbDp0LmZpcnN0Q2hpbGQ/bi5jYWxsKHQuY2hpbGROb2Rlcyk6bnVsbCxlLCFyJiZpP2k6bz9vLl9fZTp0LmZpcnN0Q2hpbGQscixmKSxEKGUsdSxmKX1mdW5jdGlvbiBVKG4sbCl7UihuLGwsVSl9ZnVuY3Rpb24gVyhsLHUsdCl7dmFyIGkscixvLGUsZj1tKHt9LGwucHJvcHMpO2ZvcihvIGluIGwudHlwZSYmbC50eXBlLmRlZmF1bHRQcm9wcyYmKGU9bC50eXBlLmRlZmF1bHRQcm9wcyksdSlcImtleVwiPT1vP2k9dVtvXTpcInJlZlwiPT1vP3I9dVtvXTpmW29dPXZvaWQgMD09PXVbb10mJm51bGwhPWU/ZVtvXTp1W29dO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjImJihmLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9uLmNhbGwoYXJndW1lbnRzLDIpOnQpLHgobC50eXBlLGYsaXx8bC5rZXkscnx8bC5yZWYsbnVsbCl9ZnVuY3Rpb24gWChuKXtmdW5jdGlvbiBsKG4pe3ZhciB1LHQ7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0fHwodT1uZXcgU2V0LCh0PXt9KVtsLl9fY109dGhpcyx0aGlzLmdldENoaWxkQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiB0fSx0aGlzLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dT1udWxsfSx0aGlzLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLnByb3BzLnZhbHVlIT1uLnZhbHVlJiZ1LmZvckVhY2goZnVuY3Rpb24obil7bi5fX2U9ITAsQShuKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihuKXt1LmFkZChuKTt2YXIgbD1uLmNvbXBvbmVudFdpbGxVbm1vdW50O24uY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt1JiZ1LmRlbGV0ZShuKSxsJiZsLmNhbGwobil9fSksbi5jaGlsZHJlbn1yZXR1cm4gbC5fX2M9XCJfX2NDXCIreSsrLGwuX189bixsLlByb3ZpZGVyPWwuX19sPShsLkNvbnN1bWVyPWZ1bmN0aW9uKG4sbCl7cmV0dXJuIG4uY2hpbGRyZW4obCl9KS5jb250ZXh0VHlwZT1sLGx9bj13LnNsaWNlLGw9e19fZTpmdW5jdGlvbihuLGwsdSx0KXtmb3IodmFyIGkscixvO2w9bC5fXzspaWYoKGk9bC5fX2MpJiYhaS5fXyl0cnl7aWYoKHI9aS5jb25zdHJ1Y3RvcikmJm51bGwhPXIuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yJiYoaS5zZXRTdGF0ZShyLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihuKSksbz1pLl9fZCksbnVsbCE9aS5jb21wb25lbnREaWRDYXRjaCYmKGkuY29tcG9uZW50RGlkQ2F0Y2gobix0fHx7fSksbz1pLl9fZCksbylyZXR1cm4gaS5fX0U9aX1jYXRjaChsKXtuPWx9dGhyb3cgbn19LHU9MCx0PWZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZ2b2lkIDA9PT1uLmNvbnN0cnVjdG9yfSxDLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihuLGwpe3ZhciB1O3U9bnVsbCE9dGhpcy5fX3MmJnRoaXMuX19zIT10aGlzLnN0YXRlP3RoaXMuX19zOnRoaXMuX19zPW0oe30sdGhpcy5zdGF0ZSksXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKG49bihtKHt9LHUpLHRoaXMucHJvcHMpKSxuJiZtKHUsbiksbnVsbCE9biYmdGhpcy5fX3YmJihsJiZ0aGlzLl9zYi5wdXNoKGwpLEEodGhpcykpfSxDLnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihuKXt0aGlzLl9fdiYmKHRoaXMuX19lPSEwLG4mJnRoaXMuX19oLnB1c2gobiksQSh0aGlzKSl9LEMucHJvdG90eXBlLnJlbmRlcj1TLGk9W10sbz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBQcm9taXNlP1Byb21pc2UucHJvdG90eXBlLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSk6c2V0VGltZW91dCxlPWZ1bmN0aW9uKG4sbCl7cmV0dXJuIG4uX192Ll9fYi1sLl9fdi5fX2J9LEguX19yPTAsZj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDgpLGM9XCJfX2RcIitmLHM9XCJfX2FcIitmLGE9LyhQb2ludGVyQ2FwdHVyZSkkfENhcHR1cmUkL2ksaD0wLHA9VighMSksdj1WKCEwKSx5PTA7ZXhwb3J0e0MgYXMgQ29tcG9uZW50LFMgYXMgRnJhZ21lbnQsVyBhcyBjbG9uZUVsZW1lbnQsWCBhcyBjcmVhdGVDb250ZXh0LGsgYXMgY3JlYXRlRWxlbWVudCxNIGFzIGNyZWF0ZVJlZixrIGFzIGgsVSBhcyBoeWRyYXRlLHQgYXMgaXNWYWxpZEVsZW1lbnQsbCBhcyBvcHRpb25zLFIgYXMgcmVuZGVyLEYgYXMgdG9DaGlsZEFycmF5fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZWFjdC5tb2R1bGUuanMubWFwXG4iLAogICAgImltcG9ydHtvcHRpb25zIGFzIG59ZnJvbVwicHJlYWN0XCI7dmFyIHQscix1LGksbz0wLGY9W10sYz1uLGU9Yy5fX2IsYT1jLl9fcix2PWMuZGlmZmVkLGw9Yy5fX2MsbT1jLnVubW91bnQscz1jLl9fO2Z1bmN0aW9uIHAobix0KXtjLl9faCYmYy5fX2gocixuLG98fHQpLG89MDt2YXIgdT1yLl9fSHx8KHIuX19IPXtfXzpbXSxfX2g6W119KTtyZXR1cm4gbj49dS5fXy5sZW5ndGgmJnUuX18ucHVzaCh7fSksdS5fX1tuXX1mdW5jdGlvbiBkKG4pe3JldHVybiBvPTEsaChELG4pfWZ1bmN0aW9uIGgobix1LGkpe3ZhciBvPXAodCsrLDIpO2lmKG8udD1uLCFvLl9fYyYmKG8uX189W2k/aSh1KTpEKHZvaWQgMCx1KSxmdW5jdGlvbihuKXt2YXIgdD1vLl9fTj9vLl9fTlswXTpvLl9fWzBdLHI9by50KHQsbik7dCE9PXImJihvLl9fTj1bcixvLl9fWzFdXSxvLl9fYy5zZXRTdGF0ZSh7fSkpfV0sby5fX2M9ciwhci5fX2YpKXt2YXIgZj1mdW5jdGlvbihuLHQscil7aWYoIW8uX19jLl9fSClyZXR1cm4hMDt2YXIgdT1vLl9fYy5fX0guX18uZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLl9fY30pO2lmKHUuZXZlcnkoZnVuY3Rpb24obil7cmV0dXJuIW4uX19OfSkpcmV0dXJuIWN8fGMuY2FsbCh0aGlzLG4sdCxyKTt2YXIgaT1vLl9fYy5wcm9wcyE9PW47cmV0dXJuIHUuc29tZShmdW5jdGlvbihuKXtpZihuLl9fTil7dmFyIHQ9bi5fX1swXTtuLl9fPW4uX19OLG4uX19OPXZvaWQgMCx0IT09bi5fX1swXSYmKGk9ITApfX0pLGMmJmMuY2FsbCh0aGlzLG4sdCxyKXx8aX07ci5fX2Y9ITA7dmFyIGM9ci5zaG91bGRDb21wb25lbnRVcGRhdGUsZT1yLmNvbXBvbmVudFdpbGxVcGRhdGU7ci5jb21wb25lbnRXaWxsVXBkYXRlPWZ1bmN0aW9uKG4sdCxyKXtpZih0aGlzLl9fZSl7dmFyIHU9YztjPXZvaWQgMCxmKG4sdCxyKSxjPXV9ZSYmZS5jYWxsKHRoaXMsbix0LHIpfSxyLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mfXJldHVybiBvLl9fTnx8by5fX31mdW5jdGlvbiB5KG4sdSl7dmFyIGk9cCh0KyssMyk7IWMuX19zJiZDKGkuX19ILHUpJiYoaS5fXz1uLGkudT11LHIuX19ILl9faC5wdXNoKGkpKX1mdW5jdGlvbiBfKG4sdSl7dmFyIGk9cCh0KyssNCk7IWMuX19zJiZDKGkuX19ILHUpJiYoaS5fXz1uLGkudT11LHIuX19oLnB1c2goaSkpfWZ1bmN0aW9uIEEobil7cmV0dXJuIG89NSxUKGZ1bmN0aW9uKCl7cmV0dXJue2N1cnJlbnQ6bn19LFtdKX1mdW5jdGlvbiBGKG4sdCxyKXtvPTYsXyhmdW5jdGlvbigpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pe3ZhciByPW4odCgpKTtyZXR1cm4gZnVuY3Rpb24oKXtuKG51bGwpLHImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHImJnIoKX19aWYobilyZXR1cm4gbi5jdXJyZW50PXQoKSxmdW5jdGlvbigpe3JldHVybiBuLmN1cnJlbnQ9bnVsbH19LG51bGw9PXI/cjpyLmNvbmNhdChuKSl9ZnVuY3Rpb24gVChuLHIpe3ZhciB1PXAodCsrLDcpO3JldHVybiBDKHUuX19ILHIpJiYodS5fXz1uKCksdS5fX0g9cix1Ll9faD1uKSx1Ll9ffWZ1bmN0aW9uIHEobix0KXtyZXR1cm4gbz04LFQoZnVuY3Rpb24oKXtyZXR1cm4gbn0sdCl9ZnVuY3Rpb24geChuKXt2YXIgdT1yLmNvbnRleHRbbi5fX2NdLGk9cCh0KyssOSk7cmV0dXJuIGkuYz1uLHU/KG51bGw9PWkuX18mJihpLl9fPSEwLHUuc3ViKHIpKSx1LnByb3BzLnZhbHVlKTpuLl9ffWZ1bmN0aW9uIFAobix0KXtjLnVzZURlYnVnVmFsdWUmJmMudXNlRGVidWdWYWx1ZSh0P3Qobik6bil9ZnVuY3Rpb24gYihuKXt2YXIgdT1wKHQrKywxMCksaT1kKCk7cmV0dXJuIHUuX189bixyLmNvbXBvbmVudERpZENhdGNofHwoci5jb21wb25lbnREaWRDYXRjaD1mdW5jdGlvbihuLHQpe3UuX18mJnUuX18obix0KSxpWzFdKG4pfSksW2lbMF0sZnVuY3Rpb24oKXtpWzFdKHZvaWQgMCl9XX1mdW5jdGlvbiBnKCl7dmFyIG49cCh0KyssMTEpO2lmKCFuLl9fKXtmb3IodmFyIHU9ci5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXzt2YXIgaT11Ll9fbXx8KHUuX19tPVswLDBdKTtuLl9fPVwiUFwiK2lbMF0rXCItXCIraVsxXSsrfXJldHVybiBuLl9ffWZ1bmN0aW9uIGooKXtmb3IodmFyIG47bj1mLnNoaWZ0KCk7KXt2YXIgdD1uLl9fSDtpZihuLl9fUCYmdCl0cnl7dC5fX2guc29tZSh6KSx0Ll9faC5zb21lKEIpLHQuX19oPVtdfWNhdGNoKHIpe3QuX19oPVtdLGMuX19lKHIsbi5fX3YpfX19Yy5fX2I9ZnVuY3Rpb24obil7cj1udWxsLGUmJmUobil9LGMuX189ZnVuY3Rpb24obix0KXtuJiZ0Ll9fayYmdC5fX2suX19tJiYobi5fX209dC5fX2suX19tKSxzJiZzKG4sdCl9LGMuX19yPWZ1bmN0aW9uKG4pe2EmJmEobiksdD0wO3ZhciBpPShyPW4uX19jKS5fX0g7aSYmKHU9PT1yPyhpLl9faD1bXSxyLl9faD1bXSxpLl9fLnNvbWUoZnVuY3Rpb24obil7bi5fX04mJihuLl9fPW4uX19OKSxuLnU9bi5fX049dm9pZCAwfSkpOihpLl9faC5zb21lKHopLGkuX19oLnNvbWUoQiksaS5fX2g9W10sdD0wKSksdT1yfSxjLmRpZmZlZD1mdW5jdGlvbihuKXt2JiZ2KG4pO3ZhciB0PW4uX19jO3QmJnQuX19IJiYodC5fX0guX19oLmxlbmd0aCYmKDEhPT1mLnB1c2godCkmJmk9PT1jLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChpPWMucmVxdWVzdEFuaW1hdGlvbkZyYW1lKXx8dykoaikpLHQuX19ILl9fLnNvbWUoZnVuY3Rpb24obil7bi51JiYobi5fX0g9bi51KSxuLnU9dm9pZCAwfSkpLHU9cj1udWxsfSxjLl9fYz1mdW5jdGlvbihuLHQpe3Quc29tZShmdW5jdGlvbihuKXt0cnl7bi5fX2guc29tZSh6KSxuLl9faD1uLl9faC5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIW4uX198fEIobil9KX1jYXRjaChyKXt0LnNvbWUoZnVuY3Rpb24obil7bi5fX2gmJihuLl9faD1bXSl9KSx0PVtdLGMuX19lKHIsbi5fX3YpfX0pLGwmJmwobix0KX0sYy51bm1vdW50PWZ1bmN0aW9uKG4pe20mJm0obik7dmFyIHQscj1uLl9fYztyJiZyLl9fSCYmKHIuX19ILl9fLnNvbWUoZnVuY3Rpb24obil7dHJ5e3oobil9Y2F0Y2gobil7dD1ufX0pLHIuX19IPXZvaWQgMCx0JiZjLl9fZSh0LHIuX192KSl9O3ZhciBrPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZTtmdW5jdGlvbiB3KG4pe3ZhciB0LHI9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodSksayYmY2FuY2VsQW5pbWF0aW9uRnJhbWUodCksc2V0VGltZW91dChuKX0sdT1zZXRUaW1lb3V0KHIsMzUpO2smJih0PXJlcXVlc3RBbmltYXRpb25GcmFtZShyKSl9ZnVuY3Rpb24geihuKXt2YXIgdD1yLHU9bi5fX2M7XCJmdW5jdGlvblwiPT10eXBlb2YgdSYmKG4uX19jPXZvaWQgMCx1KCkpLHI9dH1mdW5jdGlvbiBCKG4pe3ZhciB0PXI7bi5fX2M9bi5fXygpLHI9dH1mdW5jdGlvbiBDKG4sdCl7cmV0dXJuIW58fG4ubGVuZ3RoIT09dC5sZW5ndGh8fHQuc29tZShmdW5jdGlvbih0LHIpe3JldHVybiB0IT09bltyXX0pfWZ1bmN0aW9uIEQobix0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Qobik6dH1leHBvcnR7cSBhcyB1c2VDYWxsYmFjayx4IGFzIHVzZUNvbnRleHQsUCBhcyB1c2VEZWJ1Z1ZhbHVlLHkgYXMgdXNlRWZmZWN0LGIgYXMgdXNlRXJyb3JCb3VuZGFyeSxnIGFzIHVzZUlkLEYgYXMgdXNlSW1wZXJhdGl2ZUhhbmRsZSxfIGFzIHVzZUxheW91dEVmZmVjdCxUIGFzIHVzZU1lbW8saCBhcyB1c2VSZWR1Y2VyLEEgYXMgdXNlUmVmLGQgYXMgdXNlU3RhdGV9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9va3MubW9kdWxlLmpzLm1hcFxuIiwKICAgICJ2YXIgaT1TeW1ib2wuZm9yKFwicHJlYWN0LXNpZ25hbHNcIik7ZnVuY3Rpb24gdCgpe2lmKCEocz4xKSl7dmFyIGksdD0hMTshZnVuY3Rpb24oKXt2YXIgaT1jO2M9dm9pZCAwO3doaWxlKHZvaWQgMCE9PWkpe2lmKGkuUy52PT09aS52KWkuUy5pPWkuaTtpPWkub319KCk7d2hpbGUodm9pZCAwIT09aCl7dmFyIG49aDtoPXZvaWQgMDt2Kys7d2hpbGUodm9pZCAwIT09bil7dmFyIHI9bi51O24udT12b2lkIDA7bi5mJj0tMztpZighKDgmbi5mKSYmdyhuKSl0cnl7bi5jKCl9Y2F0Y2gobil7aWYoIXQpe2k9bjt0PSEwfX1uPXJ9fXY9MDtzLS07aWYodCl0aHJvdyBpfWVsc2Ugcy0tfWZ1bmN0aW9uIG4oaSl7aWYocz4wKXJldHVybiBpKCk7ZT0rK3U7cysrO3RyeXtyZXR1cm4gaSgpfWZpbmFsbHl7dCgpfX12YXIgcj12b2lkIDA7ZnVuY3Rpb24gbyhpKXt2YXIgdD1yO3I9dm9pZCAwO3RyeXtyZXR1cm4gaSgpfWZpbmFsbHl7cj10fX12YXIgZixoPXZvaWQgMCxzPTAsdj0wLHU9MCxlPTAsYz12b2lkIDAsZD0wO2Z1bmN0aW9uIGEoaSl7aWYodm9pZCAwIT09cil7dmFyIHQ9aS5uO2lmKHZvaWQgMD09PXR8fHQudCE9PXIpe3Q9e2k6MCxTOmkscDpyLnMsbjp2b2lkIDAsdDpyLGU6dm9pZCAwLHg6dm9pZCAwLHI6dH07aWYodm9pZCAwIT09ci5zKXIucy5uPXQ7ci5zPXQ7aS5uPXQ7aWYoMzImci5mKWkuUyh0KTtyZXR1cm4gdH1lbHNlIGlmKC0xPT09dC5pKXt0Lmk9MDtpZih2b2lkIDAhPT10Lm4pe3Qubi5wPXQucDtpZih2b2lkIDAhPT10LnApdC5wLm49dC5uO3QucD1yLnM7dC5uPXZvaWQgMDtyLnMubj10O3Iucz10fXJldHVybiB0fX19ZnVuY3Rpb24gbChpLHQpe3RoaXMudj1pO3RoaXMuaT0wO3RoaXMubj12b2lkIDA7dGhpcy50PXZvaWQgMDt0aGlzLmw9MDt0aGlzLlc9bnVsbD09dD92b2lkIDA6dC53YXRjaGVkO3RoaXMuWj1udWxsPT10P3ZvaWQgMDp0LnVud2F0Y2hlZDt0aGlzLm5hbWU9bnVsbD09dD92b2lkIDA6dC5uYW1lfWwucHJvdG90eXBlLmJyYW5kPWk7bC5wcm90b3R5cGUuaD1mdW5jdGlvbigpe3JldHVybiEwfTtsLnByb3RvdHlwZS5TPWZ1bmN0aW9uKGkpe3ZhciB0PXRoaXMsbj10aGlzLnQ7aWYobiE9PWkmJnZvaWQgMD09PWkuZSl7aS54PW47dGhpcy50PWk7aWYodm9pZCAwIT09biluLmU9aTtlbHNlIG8oZnVuY3Rpb24oKXt2YXIgaTtudWxsPT0oaT10LlcpfHxpLmNhbGwodCl9KX19O2wucHJvdG90eXBlLlU9ZnVuY3Rpb24oaSl7dmFyIHQ9dGhpcztpZih2b2lkIDAhPT10aGlzLnQpe3ZhciBuPWkuZSxyPWkueDtpZih2b2lkIDAhPT1uKXtuLng9cjtpLmU9dm9pZCAwfWlmKHZvaWQgMCE9PXIpe3IuZT1uO2kueD12b2lkIDB9aWYoaT09PXRoaXMudCl7dGhpcy50PXI7aWYodm9pZCAwPT09cilvKGZ1bmN0aW9uKCl7dmFyIGk7bnVsbD09KGk9dC5aKXx8aS5jYWxsKHQpfSl9fX07bC5wcm90b3R5cGUuc3Vic2NyaWJlPWZ1bmN0aW9uKGkpe3ZhciB0PXRoaXM7cmV0dXJuIGooZnVuY3Rpb24oKXt2YXIgbj10LnZhbHVlLG89cjtyPXZvaWQgMDt0cnl7aShuKX1maW5hbGx5e3I9b319LHtuYW1lOlwic3ViXCJ9KX07bC5wcm90b3R5cGUudmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfTtsLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlK1wiXCJ9O2wucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlfTtsLnByb3RvdHlwZS5wZWVrPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcztyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiBpLnZhbHVlfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShsLnByb3RvdHlwZSxcInZhbHVlXCIse2dldDpmdW5jdGlvbigpe3ZhciBpPWEodGhpcyk7aWYodm9pZCAwIT09aSlpLmk9dGhpcy5pO3JldHVybiB0aGlzLnZ9LHNldDpmdW5jdGlvbihpKXtpZihpIT09dGhpcy52KXtpZih2PjEwMCl0aHJvdyBuZXcgRXJyb3IoXCJDeWNsZSBkZXRlY3RlZFwiKTshZnVuY3Rpb24oaSl7aWYoMCE9PXMmJjA9PT12KWlmKGkubCE9PWUpe2kubD1lO2M9e1M6aSx2OmkudixpOmkuaSxvOmN9fX0odGhpcyk7dGhpcy52PWk7dGhpcy5pKys7ZCsrO3MrKzt0cnl7Zm9yKHZhciBuPXRoaXMudDt2b2lkIDAhPT1uO249bi54KW4udC5OKCl9ZmluYWxseXt0KCl9fX19KTtmdW5jdGlvbiB5KGksdCl7cmV0dXJuIG5ldyBsKGksdCl9ZnVuY3Rpb24gdyhpKXtmb3IodmFyIHQ9aS5zO3ZvaWQgMCE9PXQ7dD10Lm4paWYodC5TLmkhPT10Lml8fCF0LlMuaCgpfHx0LlMuaSE9PXQuaSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBfKGkpe2Zvcih2YXIgdD1pLnM7dm9pZCAwIT09dDt0PXQubil7dmFyIG49dC5TLm47aWYodm9pZCAwIT09bil0LnI9bjt0LlMubj10O3QuaT0tMTtpZih2b2lkIDA9PT10Lm4pe2kucz10O2JyZWFrfX19ZnVuY3Rpb24gYihpKXt2YXIgdD1pLnMsbj12b2lkIDA7d2hpbGUodm9pZCAwIT09dCl7dmFyIHI9dC5wO2lmKC0xPT09dC5pKXt0LlMuVSh0KTtpZih2b2lkIDAhPT1yKXIubj10Lm47aWYodm9pZCAwIT09dC5uKXQubi5wPXJ9ZWxzZSBuPXQ7dC5TLm49dC5yO2lmKHZvaWQgMCE9PXQucil0LnI9dm9pZCAwO3Q9cn1pLnM9bn1mdW5jdGlvbiBwKGksdCl7bC5jYWxsKHRoaXMsdm9pZCAwKTt0aGlzLng9aTt0aGlzLnM9dm9pZCAwO3RoaXMuZz1kLTE7dGhpcy5mPTQ7dGhpcy5XPW51bGw9PXQ/dm9pZCAwOnQud2F0Y2hlZDt0aGlzLlo9bnVsbD09dD92b2lkIDA6dC51bndhdGNoZWQ7dGhpcy5uYW1lPW51bGw9PXQ/dm9pZCAwOnQubmFtZX1wLnByb3RvdHlwZT1uZXcgbDtwLnByb3RvdHlwZS5oPWZ1bmN0aW9uKCl7dGhpcy5mJj0tMztpZigxJnRoaXMuZilyZXR1cm4hMTtpZigzMj09KDM2JnRoaXMuZikpcmV0dXJuITA7dGhpcy5mJj0tNTtpZih0aGlzLmc9PT1kKXJldHVybiEwO3RoaXMuZz1kO3RoaXMuZnw9MTtpZih0aGlzLmk+MCYmIXcodGhpcykpe3RoaXMuZiY9LTI7cmV0dXJuITB9dmFyIGk9cjt0cnl7Xyh0aGlzKTtyPXRoaXM7dmFyIHQ9dGhpcy54KCk7aWYoMTYmdGhpcy5mfHx0aGlzLnYhPT10fHwwPT09dGhpcy5pKXt0aGlzLnY9dDt0aGlzLmYmPS0xNzt0aGlzLmkrK319Y2F0Y2goaSl7dGhpcy52PWk7dGhpcy5mfD0xNjt0aGlzLmkrK31yPWk7Yih0aGlzKTt0aGlzLmYmPS0yO3JldHVybiEwfTtwLnByb3RvdHlwZS5TPWZ1bmN0aW9uKGkpe2lmKHZvaWQgMD09PXRoaXMudCl7dGhpcy5mfD0zNjtmb3IodmFyIHQ9dGhpcy5zO3ZvaWQgMCE9PXQ7dD10Lm4pdC5TLlModCl9bC5wcm90b3R5cGUuUy5jYWxsKHRoaXMsaSl9O3AucHJvdG90eXBlLlU9ZnVuY3Rpb24oaSl7aWYodm9pZCAwIT09dGhpcy50KXtsLnByb3RvdHlwZS5VLmNhbGwodGhpcyxpKTtpZih2b2lkIDA9PT10aGlzLnQpe3RoaXMuZiY9LTMzO2Zvcih2YXIgdD10aGlzLnM7dm9pZCAwIT09dDt0PXQubil0LlMuVSh0KX19fTtwLnByb3RvdHlwZS5OPWZ1bmN0aW9uKCl7aWYoISgyJnRoaXMuZikpe3RoaXMuZnw9Njtmb3IodmFyIGk9dGhpcy50O3ZvaWQgMCE9PWk7aT1pLngpaS50Lk4oKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSxcInZhbHVlXCIse2dldDpmdW5jdGlvbigpe2lmKDEmdGhpcy5mKXRocm93IG5ldyBFcnJvcihcIkN5Y2xlIGRldGVjdGVkXCIpO3ZhciBpPWEodGhpcyk7dGhpcy5oKCk7aWYodm9pZCAwIT09aSlpLmk9dGhpcy5pO2lmKDE2JnRoaXMuZil0aHJvdyB0aGlzLnY7cmV0dXJuIHRoaXMudn19KTtmdW5jdGlvbiBnKGksdCl7cmV0dXJuIG5ldyBwKGksdCl9ZnVuY3Rpb24gUyhpKXt2YXIgbj1pLm07aS5tPXZvaWQgMDtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXtzKys7dmFyIG89cjtyPXZvaWQgMDt0cnl7bigpfWNhdGNoKHQpe2kuZiY9LTI7aS5mfD04O20oaSk7dGhyb3cgdH1maW5hbGx5e3I9bzt0KCl9fX1mdW5jdGlvbiBtKGkpe2Zvcih2YXIgdD1pLnM7dm9pZCAwIT09dDt0PXQubil0LlMuVSh0KTtpLng9dm9pZCAwO2kucz12b2lkIDA7UyhpKX1mdW5jdGlvbiB4KGkpe2lmKHIhPT10aGlzKXRocm93IG5ldyBFcnJvcihcIk91dC1vZi1vcmRlciBlZmZlY3RcIik7Yih0aGlzKTtyPWk7dGhpcy5mJj0tMjtpZig4JnRoaXMuZiltKHRoaXMpO3QoKX1mdW5jdGlvbiBFKGksdCl7dGhpcy54PWk7dGhpcy5tPXZvaWQgMDt0aGlzLnM9dm9pZCAwO3RoaXMudT12b2lkIDA7dGhpcy5mPTMyO3RoaXMubmFtZT1udWxsPT10P3ZvaWQgMDp0Lm5hbWU7aWYoZilmLnB1c2godGhpcyl9RS5wcm90b3R5cGUuYz1mdW5jdGlvbigpe3ZhciBpPXRoaXMuUygpO3RyeXtpZig4JnRoaXMuZilyZXR1cm47aWYodm9pZCAwPT09dGhpcy54KXJldHVybjt2YXIgdD10aGlzLngoKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0KXRoaXMubT10fWZpbmFsbHl7aSgpfX07RS5wcm90b3R5cGUuUz1mdW5jdGlvbigpe2lmKDEmdGhpcy5mKXRocm93IG5ldyBFcnJvcihcIkN5Y2xlIGRldGVjdGVkXCIpO3RoaXMuZnw9MTt0aGlzLmYmPS05O1ModGhpcyk7Xyh0aGlzKTtzKys7dmFyIGk9cjtyPXRoaXM7cmV0dXJuIHguYmluZCh0aGlzLGkpfTtFLnByb3RvdHlwZS5OPWZ1bmN0aW9uKCl7aWYoISgyJnRoaXMuZikpe3RoaXMuZnw9Mjt0aGlzLnU9aDtoPXRoaXN9fTtFLnByb3RvdHlwZS5kPWZ1bmN0aW9uKCl7dGhpcy5mfD04O2lmKCEoMSZ0aGlzLmYpKW0odGhpcyl9O0UucHJvdG90eXBlLmRpc3Bvc2U9ZnVuY3Rpb24oKXt0aGlzLmQoKX07ZnVuY3Rpb24gaihpLHQpe3ZhciBuPW5ldyBFKGksdCk7dHJ5e24uYygpfWNhdGNoKGkpe24uZCgpO3Rocm93IGl9dmFyIHI9bi5kLmJpbmQobik7cltTeW1ib2wuZGlzcG9zZV09cjtyZXR1cm4gcn1mdW5jdGlvbiBDKGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cyxyPXRoaXM7cmV0dXJuIG4oZnVuY3Rpb24oKXtyZXR1cm4gbyhmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHIsW10uc2xpY2UuY2FsbCh0KSl9KX0pfX1mdW5jdGlvbiBPKCl7dmFyIGk9ZjtmPVtdO3JldHVybiBmdW5jdGlvbigpe3ZhciB0PWY7aWYoZiYmaSlpPWkuY29uY2F0KGYpO2Y9aTtyZXR1cm4gdH19dmFyIGs9ZnVuY3Rpb24oaSl7Zm9yKHZhciB0IGluIGkpe3ZhciBuPWlbdF07aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbilpW3RdPUMobik7ZWxzZSBpZihcIm9iamVjdFwiPT10eXBlb2YgbiYmbnVsbCE9PW4mJiEoXCJicmFuZFwiaW4gbikpayhuKX19O2Z1bmN0aW9uIFQoaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQsbixyPU8oKTt0cnl7bj1pLmFwcGx5KHZvaWQgMCxbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfWNhdGNoKGkpe2Y9dm9pZCAwO3Rocm93IGl9ZmluYWxseXt0PXIoKX1rKG4pO25bU3ltYm9sLmRpc3Bvc2VdPUMoZnVuY3Rpb24oKXtpZih0KWZvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXRbaV0uZGlzcG9zZSgpO3Q9dm9pZCAwfSk7cmV0dXJuIG59fWV4cG9ydHtwIGFzIENvbXB1dGVkLEUgYXMgRWZmZWN0LGwgYXMgU2lnbmFsLEMgYXMgYWN0aW9uLG4gYXMgYmF0Y2gsZyBhcyBjb21wdXRlZCxUIGFzIGNyZWF0ZU1vZGVsLGogYXMgZWZmZWN0LHkgYXMgc2lnbmFsLG8gYXMgdW50cmFja2VkfTsvLyMgc291cmNlTWFwcGluZ1VSTD1zaWduYWxzLWNvcmUubW9kdWxlLmpzLm1hcFxuIiwKICAgICJpbXBvcnR7Q29tcG9uZW50IGFzIGksb3B0aW9ucyBhcyBuLGlzVmFsaWRFbGVtZW50IGFzIHIsRnJhZ21lbnQgYXMgdH1mcm9tXCJwcmVhY3RcIjtpbXBvcnR7dXNlTWVtbyBhcyBvLHVzZVJlZiBhcyBlLHVzZUVmZmVjdCBhcyBmfWZyb21cInByZWFjdC9ob29rc1wiO2ltcG9ydHtlZmZlY3QgYXMgdSxTaWduYWwgYXMgYSxjb21wdXRlZCBhcyBjLHNpZ25hbCBhcyB2LGJhdGNoIGFzIHN9ZnJvbVwiQHByZWFjdC9zaWduYWxzLWNvcmVcIjtleHBvcnR7U2lnbmFsLGFjdGlvbixiYXRjaCxjb21wdXRlZCxjcmVhdGVNb2RlbCxlZmZlY3Qsc2lnbmFsLHVudHJhY2tlZH1mcm9tXCJAcHJlYWN0L3NpZ25hbHMtY29yZVwiO3ZhciBsLGQsaCxwPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJiEhd2luZG93Ll9fUFJFQUNUX1NJR05BTFNfREVWVE9PTFNfXyxtPVtdLF89W107dShmdW5jdGlvbigpe2w9dGhpcy5OfSkoKTtmdW5jdGlvbiBnKGkscil7bltpXT1yLmJpbmQobnVsbCxuW2ldfHxmdW5jdGlvbigpe30pfWZ1bmN0aW9uIGIoaSl7aWYoaCl7dmFyIG49aDtoPXZvaWQgMDtuKCl9aD1pJiZpLlMoKX1mdW5jdGlvbiB5KGkpe3ZhciBuPXRoaXMsdD1pLmRhdGEsZT11c2VTaWduYWwodCk7ZS52YWx1ZT10O3ZhciBmPW8oZnVuY3Rpb24oKXt2YXIgaT1uLHQ9bi5fX3Y7d2hpbGUodD10Ll9fKWlmKHQuX19jKXt0Ll9fYy5fXyRmfD00O2JyZWFrfXZhciBvPWMoZnVuY3Rpb24oKXt2YXIgaT1lLnZhbHVlLnZhbHVlO3JldHVybiAwPT09aT8wOiEwPT09aT9cIlwiOml8fFwiXCJ9KSxmPWMoZnVuY3Rpb24oKXtyZXR1cm4hQXJyYXkuaXNBcnJheShvLnZhbHVlKSYmIXIoby52YWx1ZSl9KSxhPXUoZnVuY3Rpb24oKXt0aGlzLk49RjtpZihmLnZhbHVlKXt2YXIgbj1vLnZhbHVlO2lmKGkuX192JiZpLl9fdi5fX2UmJjM9PT1pLl9fdi5fX2Uubm9kZVR5cGUpaS5fX3YuX19lLmRhdGE9bn19KSx2PW4uX18kdS5kO24uX18kdS5kPWZ1bmN0aW9uKCl7YSgpO3YuY2FsbCh0aGlzKX07cmV0dXJuW2Ysb119LFtdKSxhPWZbMF0sdj1mWzFdO3JldHVybiBhLnZhbHVlP3YucGVlaygpOnYudmFsdWV9eS5kaXNwbGF5TmFtZT1cIlJlYWN0aXZlVGV4dE5vZGVcIjtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhhLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp2b2lkIDB9LHR5cGU6e2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp5fSxwcm9wczp7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBpPXRoaXM7cmV0dXJue2RhdGE6e2dldCB2YWx1ZSgpe3JldHVybiBpLnZhbHVlfX19fX0sX19iOntjb25maWd1cmFibGU6ITAsdmFsdWU6MX19KTtnKFwiX19iXCIsZnVuY3Rpb24oaSxuKXtpZihcInN0cmluZ1wiPT10eXBlb2Ygbi50eXBlKXt2YXIgcix0PW4ucHJvcHM7Zm9yKHZhciBvIGluIHQpaWYoXCJjaGlsZHJlblwiIT09byl7dmFyIGU9dFtvXTtpZihlIGluc3RhbmNlb2YgYSl7aWYoIXIpbi5fX25wPXI9e307cltvXT1lO3Rbb109ZS5wZWVrKCl9fX1pKG4pfSk7ZyhcIl9fclwiLGZ1bmN0aW9uKGksbil7aShuKTtpZihuLnR5cGUhPT10KXtiKCk7dmFyIHIsbz1uLl9fYztpZihvKXtvLl9fJGYmPS0yO2lmKHZvaWQgMD09PShyPW8uX18kdSkpby5fXyR1PXI9ZnVuY3Rpb24oaSxuKXt2YXIgcjt1KGZ1bmN0aW9uKCl7cj10aGlzfSx7bmFtZTpufSk7ci5jPWk7cmV0dXJuIHJ9KGZ1bmN0aW9uKCl7dmFyIGk7aWYocCludWxsPT0oaT1yLnkpfHxpLmNhbGwocik7by5fXyRmfD0xO28uc2V0U3RhdGUoe30pfSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLnR5cGU/bi50eXBlLmRpc3BsYXlOYW1lfHxuLnR5cGUubmFtZTpcIlwiKX1kPW87YihyKX19KTtnKFwiX19lXCIsZnVuY3Rpb24oaSxuLHIsdCl7YigpO2Q9dm9pZCAwO2kobixyLHQpfSk7ZyhcImRpZmZlZFwiLGZ1bmN0aW9uKGksbil7YigpO2Q9dm9pZCAwO3ZhciByO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuLnR5cGUmJihyPW4uX19lKSl7dmFyIHQ9bi5fX25wLG89bi5wcm9wcztpZih0KXt2YXIgZT1yLlU7aWYoZSlmb3IodmFyIGYgaW4gZSl7dmFyIHU9ZVtmXTtpZih2b2lkIDAhPT11JiYhKGYgaW4gdCkpe3UuZCgpO2VbZl09dm9pZCAwfX1lbHNle2U9e307ci5VPWV9Zm9yKHZhciBhIGluIHQpe3ZhciBjPWVbYV0sdj10W2FdO2lmKHZvaWQgMD09PWMpe2M9dyhyLGEsdik7ZVthXT1jfWVsc2UgYy5vKHYsbyl9Zm9yKHZhciBzIGluIHQpb1tzXT10W3NdfX1pKG4pfSk7ZnVuY3Rpb24gdyhpLG4scix0KXt2YXIgbz1uIGluIGkmJnZvaWQgMD09PWkub3duZXJTVkdFbGVtZW50LGU9dihyKSxmPXIucGVlaygpO3JldHVybntvOmZ1bmN0aW9uKGksbil7ZS52YWx1ZT1pO2Y9aS5wZWVrKCl9LGQ6dShmdW5jdGlvbigpe3RoaXMuTj1GO3ZhciByPWUudmFsdWUudmFsdWU7aWYoZiE9PXIpe2Y9dm9pZCAwO2lmKG8paVtuXT1yO2Vsc2UgaWYobnVsbCE9ciYmKCExIT09cnx8XCItXCI9PT1uWzRdKSlpLnNldEF0dHJpYnV0ZShuLHIpO2Vsc2UgaS5yZW1vdmVBdHRyaWJ1dGUobil9ZWxzZSBmPXZvaWQgMH0pfX1nKFwidW5tb3VudFwiLGZ1bmN0aW9uKGksbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSl7dmFyIHI9bi5fX2U7aWYocil7dmFyIHQ9ci5VO2lmKHQpe3IuVT12b2lkIDA7Zm9yKHZhciBvIGluIHQpe3ZhciBlPXRbb107aWYoZSllLmQoKX19fW4uX19ucD12b2lkIDB9ZWxzZXt2YXIgZj1uLl9fYztpZihmKXt2YXIgdT1mLl9fJHU7aWYodSl7Zi5fXyR1PXZvaWQgMDt1LmQoKX19fWkobil9KTtnKFwiX19oXCIsZnVuY3Rpb24oaSxuLHIsdCl7aWYodDwzfHw5PT09dCluLl9fJGZ8PTI7aShuLHIsdCl9KTtpLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24oaSxuKXtpZih0aGlzLl9fUilyZXR1cm4hMDt2YXIgcj10aGlzLl9fJHUsdD1yJiZ2b2lkIDAhPT1yLnM7Zm9yKHZhciBvIGluIG4pcmV0dXJuITA7aWYodGhpcy5fX2Z8fFwiYm9vbGVhblwiPT10eXBlb2YgdGhpcy51JiYhMD09PXRoaXMudSl7dmFyIGU9MiZ0aGlzLl9fJGY7aWYoISh0fHxlfHw0JnRoaXMuX18kZikpcmV0dXJuITA7aWYoMSZ0aGlzLl9fJGYpcmV0dXJuITB9ZWxzZXtpZighKHR8fDQmdGhpcy5fXyRmKSlyZXR1cm4hMDtpZigzJnRoaXMuX18kZilyZXR1cm4hMH1mb3IodmFyIGYgaW4gaSlpZihcIl9fc291cmNlXCIhPT1mJiZpW2ZdIT09dGhpcy5wcm9wc1tmXSlyZXR1cm4hMDtmb3IodmFyIHUgaW4gdGhpcy5wcm9wcylpZighKHUgaW4gaSkpcmV0dXJuITA7cmV0dXJuITF9O2Z1bmN0aW9uIHVzZVNpZ25hbChpLG4pe3JldHVybiBvKGZ1bmN0aW9uKCl7cmV0dXJuIHYoaSxuKX0sW10pfWZ1bmN0aW9uIHVzZUNvbXB1dGVkKGksbil7dmFyIHI9ZShpKTtyLmN1cnJlbnQ9aTtkLl9fJGZ8PTQ7cmV0dXJuIG8oZnVuY3Rpb24oKXtyZXR1cm4gYyhmdW5jdGlvbigpe3JldHVybiByLmN1cnJlbnQoKX0sbil9LFtdKX12YXIgaz1cInVuZGVmaW5lZFwiPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP3NldFRpbWVvdXQ6ZnVuY3Rpb24oaSl7dmFyIG49ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQocik7Y2FuY2VsQW5pbWF0aW9uRnJhbWUodCk7aSgpfSxyPXNldFRpbWVvdXQobiwzNSksdD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobil9LHE9ZnVuY3Rpb24oaSl7cXVldWVNaWNyb3Rhc2soZnVuY3Rpb24oKXtxdWV1ZU1pY3JvdGFzayhpKX0pfTtmdW5jdGlvbiBBKCl7cyhmdW5jdGlvbigpe3ZhciBpO3doaWxlKGk9bS5zaGlmdCgpKWwuY2FsbChpKX0pfWZ1bmN0aW9uIFQoKXtpZigxPT09bS5wdXNoKHRoaXMpKShuLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8aykoQSl9ZnVuY3Rpb24geCgpe3MoZnVuY3Rpb24oKXt2YXIgaTt3aGlsZShpPV8uc2hpZnQoKSlsLmNhbGwoaSl9KX1mdW5jdGlvbiBGKCl7aWYoMT09PV8ucHVzaCh0aGlzKSkobi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHEpKHgpfWZ1bmN0aW9uIHVzZVNpZ25hbEVmZmVjdChpLG4pe3ZhciByPWUoaSk7ci5jdXJyZW50PWk7ZihmdW5jdGlvbigpe3JldHVybiB1KGZ1bmN0aW9uKCl7dGhpcy5OPVQ7cmV0dXJuIHIuY3VycmVudCgpfSxuKX0sW10pfWZ1bmN0aW9uIE0oaSl7dmFyIG49byhmdW5jdGlvbigpe3JldHVybiBpKCl9LFtdKTtmKGZ1bmN0aW9uKCl7cmV0dXJuIG5bU3ltYm9sLmRpc3Bvc2VdfSxbbl0pO3JldHVybiBufWV4cG9ydHt1c2VDb21wdXRlZCxNIGFzIHVzZU1vZGVsLHVzZVNpZ25hbCx1c2VTaWduYWxFZmZlY3R9Oy8vIyBzb3VyY2VNYXBwaW5nVVJMPXNpZ25hbHMubW9kdWxlLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIEdsb2JhbCBlcnJvciBzdXJmYWNlIGZvciBhY3Rpb24gaGFuZGxlcnMuXG4gKlxuICogQWN0aW9ucyB0aGF0IGZhaWwgc2V0IHRoZSBlcnJvclN0YXRlIHNpZ25hbCB2aWEgYHN1Ym1pdEVycm9yYDsgYSBgPFRvYXN0PmBcbiAqIGNvbXBvbmVudCBjb25zdW1lcyB0aGF0IHNpZ25hbCBhbmQgcmVuZGVycyBhIGRpc21pc3NhYmxlIG1lc3NhZ2UuIEhhbmRsZXJzXG4gKiB0aGF0IGNhdGNoIGV4cGVjdGVkIGZhaWx1cmVzICh2YWxpZGF0aW9uLCBxdW90YSkgbWF5IGNhbGwgYHNldEVycm9yYCBkaXJlY3RseS5cbiAqL1xuXG5pbXBvcnQgeyBzaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5cbmV4cG9ydCB0eXBlIEVycm9yU2V2ZXJpdHkgPSBcImVycm9yXCIgfCBcIndhcm5pbmdcIiB8IFwiaW5mb1wiO1xuXG5leHBvcnQgdHlwZSBFcnJvckVudHJ5ID0ge1xuICBpZDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNldmVyaXR5OiBFcnJvclNldmVyaXR5O1xuICBhY3Rpb24/OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogbnVtYmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IGVycm9yU3RhdGUgPSBzaWduYWw8RXJyb3JFbnRyeVtdPihbXSk7XG5cbmxldCBuZXh0SWQgPSAwO1xuZnVuY3Rpb24gYWxsb2NJZCgpOiBzdHJpbmcge1xuICBuZXh0SWQgKz0gMTtcbiAgcmV0dXJuIGBwb2xseS1lcnItJHtuZXh0SWR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEVycm9yKFxuICBtZXNzYWdlOiBzdHJpbmcsXG4gIG9wdHM6IHsgc2V2ZXJpdHk/OiBFcnJvclNldmVyaXR5OyBhY3Rpb24/OiBzdHJpbmcgfSA9IHt9XG4pOiBzdHJpbmcge1xuICBjb25zdCBlbnRyeTogRXJyb3JFbnRyeSA9IHtcbiAgICBpZDogYWxsb2NJZCgpLFxuICAgIG1lc3NhZ2UsXG4gICAgc2V2ZXJpdHk6IG9wdHMuc2V2ZXJpdHkgPz8gXCJlcnJvclwiLFxuICAgIGFjdGlvbjogb3B0cy5hY3Rpb24sXG4gICAgY3JlYXRlZEF0OiBEYXRlLm5vdygpLFxuICB9O1xuICBlcnJvclN0YXRlLnZhbHVlID0gWy4uLmVycm9yU3RhdGUudmFsdWUsIGVudHJ5XTtcbiAgcmV0dXJuIGVudHJ5LmlkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJFcnJvcihpZD86IHN0cmluZyk6IHZvaWQge1xuICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVycm9yU3RhdGUudmFsdWUgPSBbXTtcbiAgICByZXR1cm47XG4gIH1cbiAgZXJyb3JTdGF0ZS52YWx1ZSA9IGVycm9yU3RhdGUudmFsdWUuZmlsdGVyKChlKSA9PiBlLmlkICE9PSBpZCk7XG59XG5cbi8qKlxuICogQ29udmVuaWVuY2Ugd3JhcHBlciBmb3IgYW4gYWN0aW9uJ3MgY2F0Y2ggYmxvY2suXG4gKiBMb2dzIHRoZSBhY3Rpb24gbmFtZSArIGVycm9yIGFuZCBzdXJmYWNlcyBhIHVzZXItdmlzaWJsZSBtZXNzYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VibWl0RXJyb3IoYWN0aW9uOiBzdHJpbmcsIGVycjogdW5rbm93bik6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gIHJldHVybiBzZXRFcnJvcihtZXNzYWdlLCB7IGFjdGlvbiwgc2V2ZXJpdHk6IFwiZXJyb3JcIiB9KTtcbn1cbiIsCiAgICAiLyoqXG4gKiBPdmVybGF5IHJlZ2lzdHJ5LlxuICpcbiAqIFRyYWNrcyB0aGUgc3RhY2sgb2Ygb3BlbiBvdmVybGF5cyAobW9kYWxzLCBwb3BvdmVycywgY29uZmlybSBkaWFsb2dzKSBzb1xuICogRXNjYXBlIGNhbiBjbG9zZSB0aGUgdG9wbW9zdCBhbmQgYGRhdGEtb3ZlcmxheS1pZGAtYmFzZWQgRE9NIHNjYW5zIGhhdmVcbiAqIGEgbWlycm9yIGluIG1lbW9yeS4gRWFjaCBlbnRyeSBzdG9yZXMgYW4gaWQgcGx1cyBhbiBvcHRpb25hbCBjbG9zZVxuICogY2FsbGJhY2s7IGBjbG9zZVRvcE92ZXJsYXlgIGludm9rZXMgdGhlIGNhbGxiYWNrIGFuZCBwb3BzIHRoZSBlbnRyeS5cbiAqL1xuXG5pbXBvcnQgeyBzaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5cbmV4cG9ydCB0eXBlIE92ZXJsYXlFbnRyeSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBzdGFjayA9IHNpZ25hbDxPdmVybGF5RW50cnlbXT4oW10pO1xuXG4vKiogQ3VycmVudCBvdmVybGF5IHN0YWNrIGFzIGEgcmVhZC1vbmx5IHNuYXBzaG90LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG92ZXJsYXlTdGFjaygpOiByZWFkb25seSBPdmVybGF5RW50cnlbXSB7XG4gIHJldHVybiBzdGFjay52YWx1ZTtcbn1cblxuLyoqIElzIGFueSBvdmVybGF5IGN1cnJlbnRseSBvcGVuPyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc09wZW5PdmVybGF5KCk6IGJvb2xlYW4ge1xuICByZXR1cm4gc3RhY2sudmFsdWUubGVuZ3RoID4gMDtcbn1cblxuLyoqIFRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciB1bmRlZmluZWQgaWYgZW1wdHkuICovXG5leHBvcnQgZnVuY3Rpb24gdG9wT3ZlcmxheSgpOiBPdmVybGF5RW50cnkgfCB1bmRlZmluZWQge1xuICBjb25zdCBzID0gc3RhY2sudmFsdWU7XG4gIHJldHVybiBzW3MubGVuZ3RoIC0gMV07XG59XG5cbi8qKiBQdXNoIGFuIG92ZXJsYXkgb250byB0aGUgc3RhY2suIFJldHVybnMgdGhlIHBvcHBlZCBlbnRyeSB3aGVuIGNsb3NlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwdXNoT3ZlcmxheShlbnRyeTogT3ZlcmxheUVudHJ5KTogdm9pZCB7XG4gIHN0YWNrLnZhbHVlID0gWy4uLnN0YWNrLnZhbHVlLCBlbnRyeV07XG59XG5cbi8qKiBQb3AgYSBzcGVjaWZpYyBvdmVybGF5IGJ5IGlkIChvciB0aGUgdG9wIGlmIG5vIGlkIGdpdmVuKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb3BPdmVybGF5KGlkPzogc3RyaW5nKTogT3ZlcmxheUVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHN0YWNrLnZhbHVlO1xuICBpZiAocy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgdG9wID0gc1tzLmxlbmd0aCAtIDFdO1xuICAgIHN0YWNrLnZhbHVlID0gcy5zbGljZSgwLCAtMSk7XG4gICAgcmV0dXJuIHRvcDtcbiAgfVxuICBjb25zdCBpZHggPSBzLmZpbmRJbmRleCgoZSkgPT4gZS5pZCA9PT0gaWQpO1xuICBpZiAoaWR4ID09PSAtMSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgZW50cnkgPSBzW2lkeF07XG4gIHN0YWNrLnZhbHVlID0gWy4uLnMuc2xpY2UoMCwgaWR4KSwgLi4ucy5zbGljZShpZHggKyAxKV07XG4gIHJldHVybiBlbnRyeTtcbn1cblxuLyoqIENsb3NlIHRoZSB0b3Agb3ZlcmxheSBieSBjYWxsaW5nIGl0cyBvbkNsb3NlIGFuZCBwb3BwaW5nIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlVG9wT3ZlcmxheSgpOiBPdmVybGF5RW50cnkgfCB1bmRlZmluZWQge1xuICBjb25zdCB0b3AgPSB0b3BPdmVybGF5KCk7XG4gIGlmICghdG9wKSByZXR1cm4gdW5kZWZpbmVkO1xuICB0b3Aub25DbG9zZT8uKCk7XG4gIHJldHVybiBwb3BPdmVybGF5KHRvcC5pZCk7XG59XG5cbi8qKiBSZXNldCB0aGUgc3RhY2suIEludGVuZGVkIGZvciB0ZXN0cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldE92ZXJsYXlTdGFjaygpOiB2b2lkIHtcbiAgc3RhY2sudmFsdWUgPSBbXTtcbn1cbiIsCiAgICAiLyoqXG4gKiBFdmVudCBkZWxlZ2F0aW9uIGNvcmUuXG4gKlxuICogT25lIGRvY3VtZW50IGxpc3RlbmVyIGRpc3BhdGNoZXMgYGRhdGEtYWN0aW9uYCBldmVudHMgdG8gdHlwZWQgaGFuZGxlcnMuXG4gKiBXYWxrcyB1cCB0aGUgRE9NIHdpdGggYGNsb3Nlc3QoJ1tkYXRhLWFjdGlvbl0nKWAsIHBhcnNlcyBgZGF0YS1hY3Rpb24tKmBcbiAqIGF0dHJpYnV0ZXMgaW50byBhIGNhbWVsQ2FzZSBvYmplY3QsIGFuZCBoYW5kcyB0aGUgZGlzcGF0Y2ggdG8gdGhlIGNhbGxlci5cbiAqXG4gKiBGb3JtcyBhcmUgc2tpcHBlZCBvbiBjbGljayDigJQgYSBgPGZvcm0gZGF0YS1hY3Rpb249XCIuLi5cIj5gIHJlc3BvbmRzIHRvXG4gKiBzdWJtaXQgb25seSwgc28gY2xpY2tzIG9uIGZvcm0gY2hpbGRyZW4gZG9uJ3QgYnViYmxlIGludG8gaXRzIGFjdGlvbi5cbiAqIEVzY2FwZSBjbG9zZXMgdGhlIHRvcG1vc3Qgb3ZlcmxheSBieSBjYWxsaW5nIHRoZSBvdmVybGF5IHJlZ2lzdHJ5LlxuICogRW50ZXIvU3BhY2Ugb24gbm9uLWludGVyYWN0aXZlIGVsZW1lbnRzIHdpdGggYGRhdGEtYWN0aW9uYCBmaXJlIHRoZVxuICogYWN0aW9uIChTcGFjZSBpcyBwcmV2ZW50ZWQgdG8gc3RvcCBwYWdlIHNjcm9sbCkuIENsaWNrIG91dHNpZGUgYW55XG4gKiBgW2RhdGEtb3ZlcmxheS1pZF1gIGVsZW1lbnQgYWxzbyBwb3BzIHRoZSB0b3Agb3ZlcmxheS5cbiAqL1xuXG5pbXBvcnQgeyBjbG9zZVRvcE92ZXJsYXkgYXMgY2xvc2VUb3BSZWdpc3RyeU92ZXJsYXkgfSBmcm9tIFwiLi9vdmVybGF5LnRzXCI7XG5cbi8qKiBFbGVtZW50cyB0aGF0IG5hdGl2ZWx5IGZpcmUgY2xpY2sgb24gRW50ZXIvU3BhY2UuICovXG5leHBvcnQgY29uc3QgSU5URVJBQ1RJVkVfVEFHUyA9IG5ldyBTZXQoW1wiQlVUVE9OXCIsIFwiQVwiLCBcIklOUFVUXCIsIFwiU0VMRUNUXCIsIFwiVEVYVEFSRUFcIl0pO1xuXG4vKiogRXZlbnQgdHlwZXMgdGhhdCBtYXkgdHJpZ2dlciBhIGRhdGEtYWN0aW9uIGRpc3BhdGNoLiAqL1xuZXhwb3J0IGNvbnN0IEFDVElPTl9FVkVOVF9UWVBFUyA9IG5ldyBTZXQoW1wiY2xpY2tcIiwgXCJzdWJtaXRcIiwgXCJjaGFuZ2VcIiwgXCJpbnB1dFwiXSk7XG5cbi8qKiBQYXJzZWQgYWN0aW9uIGRpc3BhdGNoIOKAlCB3aGF0IHRoZSBydW50aW1lIHJlc29sdmVzIGJlZm9yZSBpbnZva2luZyBhIGhhbmRsZXIuICovXG5leHBvcnQgdHlwZSBBY3Rpb25EaXNwYXRjaCA9IHtcbiAgYWN0aW9uOiBzdHJpbmc7XG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICBldmVudDogRXZlbnQ7XG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59O1xuXG4vKipcbiAqIFBhcnNlIGBkYXRhLWFjdGlvbi0qYCBhdHRyaWJ1dGVzIGludG8gY2FtZWxDYXNlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBgZGF0YS1hY3Rpb24tdGV4dC1zZXQtaWQ9XCI0MlwiYCBiZWNvbWVzIGB7IHRleHRTZXRJZDogXCI0MlwiIH1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBY3Rpb25EYXRhKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBhdHRyIG9mIEFycmF5LmZyb20oZWxlbWVudC5hdHRyaWJ1dGVzKSkge1xuICAgIGlmIChhdHRyLm5hbWUuc3RhcnRzV2l0aChcImRhdGEtYWN0aW9uLVwiKSkge1xuICAgICAgY29uc3Qga2V5ID0gYXR0ci5uYW1lXG4gICAgICAgIC5yZXBsYWNlKFwiZGF0YS1hY3Rpb24tXCIsIFwiXCIpXG4gICAgICAgIC5yZXBsYWNlKC8tKFthLXpdKS9nLCAoX206IHN0cmluZywgbGV0dGVyOiBzdHJpbmcpID0+IGxldHRlci50b1VwcGVyQ2FzZSgpKTtcbiAgICAgIGRhdGFba2V5XSA9IGF0dHIudmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIENsb3NlIHRoZSB0b3Btb3N0IG92ZXJsYXkgYnkgZGlzcGF0Y2hpbmcgYG92ZXJsYXk6Y2xvc2VgIG9uIGl0cyBlbGVtZW50LlxuICogT3ZlcmxheXMgbWFyayB0aGVtc2VsdmVzIHdpdGggYGRhdGEtb3ZlcmxheS1pZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZVRvcE92ZXJsYXkoKTogdm9pZCB7XG4gIGNvbnN0IG92ZXJsYXlzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICBcIltkYXRhLW92ZXJsYXktaWRdOnBvcG92ZXItb3BlbiwgZGlhbG9nW2RhdGEtb3ZlcmxheS1pZF1bb3Blbl1cIlxuICApO1xuICBpZiAob3ZlcmxheXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gIGNvbnN0IHRvcE92ZXJsYXkgPSBvdmVybGF5c1tvdmVybGF5cy5sZW5ndGggLSAxXTtcbiAgaWYgKCF0b3BPdmVybGF5KSByZXR1cm47XG4gIHRvcE92ZXJsYXkuZGlzcGF0Y2hFdmVudChcbiAgICBuZXcgQ3VzdG9tRXZlbnQoXCJvdmVybGF5OmNsb3NlXCIsIHtcbiAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICBkZXRhaWw6IHsgaWQ6IHRvcE92ZXJsYXkuZ2V0QXR0cmlidXRlKFwiZGF0YS1vdmVybGF5LWlkXCIpIH0sXG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgRE9NIGV2ZW50IHRvIGFuIEFjdGlvbkRpc3BhdGNoLCBvciBudWxsIGlmIG5vIGRhdGEtYWN0aW9uIG1hdGNoZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQWN0aW9uKGV2ZW50OiBFdmVudCk6IEFjdGlvbkRpc3BhdGNoIHwgbnVsbCB7XG4gIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybiBudWxsO1xuICBjb25zdCBhY3Rpb25FbGVtZW50ID0gdGFyZ2V0LmNsb3Nlc3QoXCJbZGF0YS1hY3Rpb25dXCIpO1xuICBpZiAoIShhY3Rpb25FbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm4gbnVsbDtcbiAgaWYgKGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBhY3Rpb25FbGVtZW50LnRhZ05hbWUgPT09IFwiRk9STVwiKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYWN0aW9uID0gYWN0aW9uRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWFjdGlvblwiKTtcbiAgaWYgKCFhY3Rpb24pIHJldHVybiBudWxsO1xuICByZXR1cm4ge1xuICAgIGFjdGlvbixcbiAgICBlbGVtZW50OiBhY3Rpb25FbGVtZW50LFxuICAgIGV2ZW50LFxuICAgIGRhdGE6IHBhcnNlQWN0aW9uRGF0YShhY3Rpb25FbGVtZW50KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBJbnN0YWxsIGRvY3VtZW50LWxldmVsIGxpc3RlbmVycyBmb3IgdGhlIGRlbGVnYXRpb24gc3lzdGVtLlxuICogUmV0dXJucyBhIGNsZWFudXAgZnVuY3Rpb24gdGhhdCByZW1vdmVzIGV2ZXJ5IGxpc3RlbmVyIGl0IGluc3RhbGxlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxFdmVudERlbGVnYXRpb24oXG4gIG9uRGlzcGF0Y2g6IChkaXNwYXRjaDogQWN0aW9uRGlzcGF0Y2gpID0+IHZvaWQsXG4gIG9wdGlvbnM6IHsgb25Fc2NhcGU/OiAoKSA9PiB2b2lkOyBvbk91dHNpZGVPdmVybGF5Q2xpY2s/OiAoKSA9PiB2b2lkIH0gPSB7fVxuKTogKCkgPT4gdm9pZCB7XG4gIGNvbnN0IGhhbmRsZUFjdGlvbkV2ZW50ID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgIGNvbnN0IGRpc3BhdGNoID0gcmVzb2x2ZUFjdGlvbihldmVudCk7XG4gICAgaWYgKGRpc3BhdGNoKSBvbkRpc3BhdGNoKGRpc3BhdGNoKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuICAgICAgaWYgKG9wdGlvbnMub25Fc2NhcGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkVzY2FwZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xvc2VUb3BSZWdpc3RyeU92ZXJsYXkoKTtcbiAgICAgICAgY2xvc2VUb3BPdmVybGF5KCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiB8fCBldmVudC5rZXkgPT09IFwiIFwiKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICBpZiAoISh0YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xuICAgICAgaWYgKElOVEVSQUNUSVZFX1RBR1MuaGFzKHRhcmdldC50YWdOYW1lKSkgcmV0dXJuO1xuICAgICAgY29uc3QgZGlzcGF0Y2ggPSByZXNvbHZlQWN0aW9uKGV2ZW50KTtcbiAgICAgIGlmIChkaXNwYXRjaCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBvbkRpc3BhdGNoKGRpc3BhdGNoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTW91c2VEb3duID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKCEoZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcbiAgICBjb25zdCBjbGlja2VkT3ZlcmxheSA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KFwiW2RhdGEtb3ZlcmxheS1pZF1cIik7XG4gICAgaWYgKGNsaWNrZWRPdmVybGF5KSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnRhcmdldC5jbG9zZXN0KFwiYnV0dG9uW3BvcG92ZXJ0YXJnZXRdXCIpKSByZXR1cm47XG4gICAgaWYgKG9wdGlvbnMub25PdXRzaWRlT3ZlcmxheUNsaWNrKSB7XG4gICAgICBvcHRpb25zLm9uT3V0c2lkZU92ZXJsYXlDbGljaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjbG9zZVRvcFJlZ2lzdHJ5T3ZlcmxheSgpO1xuICAgICAgY2xvc2VUb3BPdmVybGF5KCk7XG4gICAgfVxuICB9O1xuXG4gIGZvciAoY29uc3QgZXZlbnRUeXBlIG9mIEFDVElPTl9FVkVOVF9UWVBFUykge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVBY3Rpb25FdmVudCk7XG4gIH1cbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgaGFuZGxlTW91c2VEb3duKTtcblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgZXZlbnRUeXBlIG9mIEFDVElPTl9FVkVOVF9UWVBFUykge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZUFjdGlvbkV2ZW50KTtcbiAgICB9XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBoYW5kbGVNb3VzZURvd24pO1xuICB9O1xufVxuIiwKICAgICIvKipcbiAqIEZvcm0gcHJpbWl0aXZlLlxuICpcbiAqIGBjcmVhdGVGb3JtYCByZXR1cm5zIGEgdHlwZWQgZm9ybSBzdG9yZTogcGVyLWZpZWxkIHNpZ25hbHMsIGFuIGFnZ3JlZ2F0ZWRcbiAqIHZhbHVlcyBzaWduYWwsIG9wZW4vY2xvc2Uvc3VibWl0IG1ldGhvZHMsIGFuZCB0aHJlZSBhdXRvLXJlZ2lzdGVyZWQgYWN0aW9uXG4gKiBoYW5kbGVycyAoYHtuYW1lfTpvcGVuYCwgYHtuYW1lfTpjbG9zZWAsIGB7bmFtZX06c3VibWl0YCkgdGhhdCBjYWxsZXJzIHNwcmVhZFxuICogaW50byB0aGVpciBnbG9iYWwgYWN0aW9uIHJlZ2lzdHJ5LlxuICpcbiAqIExpZmVjeWNsZTpcbiAqICAgb3BlbiAg4oaSIHJlc2V0cyBmaWVsZHMgdG8gaW5pdGlhbFZhbHVlcywgYXBwbGllcyBvbk9wZW4gb3ZlcnJpZGVzLFxuICogICAgICAgICAgIHNldHMgaXNPcGVuID0gdHJ1ZSwgcmVjb3JkcyBkYXRhLWFjdGlvbi0qIGRhdGEgaW4gb3BlblBhcmFtc1xuICogICB0eXBpbmcg4oaSIHVuY29udHJvbGxlZCBpbnB1dHMga2VlcCB0aGVpciBvd24gc3RhdGU7IGNvbnRyb2xsZWQgaW5wdXRzXG4gKiAgICAgICAgICAgd3JpdGUgZmllbGRzLlgudmFsdWUgZGlyZWN0bHlcbiAqICAgc3VibWl0IOKGkiByZWFkcyBGb3JtRGF0YSBmcm9tIHRoZSBmb3JtIGVsZW1lbnQsIG1lcmdlcyBpbnRvIGZpZWxkcyxcbiAqICAgICAgICAgICBydW5zIG9wdGlvbmFsIHZhbGlkYXRlLCBjYWxscyB1c2VyIG9uU3VibWl0IHdpdGggZmluYWwgdmFsdWVzLFxuICogICAgICAgICAgIGNsb3NlcyBvbiBzdWNjZXNzLCBzZXRzIGVycm9yU3RhdGUgb24gZmFpbHVyZVxuICogICBjbG9zZSAg4oaSIHJlc2V0cyBhbmQgc2V0cyBpc09wZW4gPSBmYWxzZVxuICogICBndWFyZCAg4oaSIGF1dG9ub21vdXMgZWZmZWN0OyBpZiBndWFyZCgpIHJldHVybnMgZmFsc2Ugd2hpbGUgb3BlbiwgY2xvc2UoKVxuICovXG5cbmltcG9ydCB7IGNvbXB1dGVkLCBlZmZlY3QsIHR5cGUgUmVhZG9ubHlTaWduYWwsIHR5cGUgU2lnbmFsLCBzaWduYWwgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgeyBzdWJtaXRFcnJvciB9IGZyb20gXCIuL2Vycm9yLnRzXCI7XG5pbXBvcnQgdHlwZSB7IEFjdGlvblJlZ2lzdHJ5IH0gZnJvbSBcIi4vcmVnaXN0cnkudHNcIjtcblxuZnVuY3Rpb24gaXNGb3JtRWxlbWVudCh0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCk6IHRhcmdldCBpcyBIVE1MRm9ybUVsZW1lbnQge1xuICBpZiAoIXRhcmdldCkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIEhUTUxGb3JtRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQ7XG4gIH1cbiAgY29uc3QgdCA9IHRhcmdldCBhcyB1bmtub3duIGFzIHsgdGFnTmFtZT86IHVua25vd24gfTtcbiAgcmV0dXJuIHR5cGVvZiB0LnRhZ05hbWUgPT09IFwic3RyaW5nXCIgJiYgdC50YWdOYW1lID09PSBcIkZPUk1cIjtcbn1cblxuZXhwb3J0IHR5cGUgRm9ybU9wZW5Db250ZXh0PFRTdG9yZXM+ID0ge1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBzdG9yZXM6IFRTdG9yZXM7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtU3VibWl0Q29udGV4dDxUVmFsdWVzLCBUU3RvcmVzPiA9IHtcbiAgdmFsdWVzOiBUVmFsdWVzO1xuICBzdG9yZXM6IFRTdG9yZXM7XG59O1xuXG5leHBvcnQgdHlwZSBGb3JtQ29uZmlnPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPiA9IHtcbiAgLyoqIFVzZWQgYXMgYWN0aW9uIG5hbWVzcGFjZTogYHtuYW1lfTpvcGVuYCwgYHtuYW1lfTpjbG9zZWAsIGB7bmFtZX06c3VibWl0YC4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICBpbml0aWFsVmFsdWVzOiBUVmFsdWVzO1xuICBvblN1Ym1pdDogKGN0eDogRm9ybVN1Ym1pdENvbnRleHQ8VFZhbHVlcywgVFN0b3Jlcz4pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAvKiogSW52b2tlZCBvbiBvcGVuOyByZXR1cm4gcGFydGlhbCBvdmVycmlkZXMgdG8gcHJlLXBvcHVsYXRlIGZpZWxkcy4gKi9cbiAgb25PcGVuPzogKGN0eDogRm9ybU9wZW5Db250ZXh0PFRTdG9yZXM+KSA9PiBQYXJ0aWFsPFRWYWx1ZXM+IHwgdW5kZWZpbmVkO1xuICAvKiogUmV0dXJucyBmYWxzZSB3aGlsZSBvcGVuIOKGkiBmb3JtIGF1dG8tY2xvc2VzIChlbnRpdHktZGVsZXRpb24gZ3VhcmQpLiAqL1xuICBndWFyZD86IChjdHg6IHsgc3RvcmVzOiBUU3RvcmVzIH0pID0+IGJvb2xlYW47XG4gIC8qKiBTeW5jaHJvbm91cyB2YWxpZGF0aW9uLiBSZXR1cm5pbmcga2V5cyBibG9ja3Mgc3VibWl0LiAqL1xuICB2YWxpZGF0ZT86ICh2YWx1ZXM6IFRWYWx1ZXMpID0+IFBhcnRpYWw8UmVjb3JkPGtleW9mIFRWYWx1ZXMsIHN0cmluZz4+IHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIEZvcm1TdG9yZTxUVmFsdWVzIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgc3RyaW5nPiwgVFN0b3Jlcz4gPSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgaXNPcGVuOiBSZWFkb25seVNpZ25hbDxib29sZWFuPjtcbiAgcmVhZG9ubHkgdmFsdWVzOiBSZWFkb25seVNpZ25hbDxUVmFsdWVzPjtcbiAgcmVhZG9ubHkgZmllbGRzOiB7IFtLIGluIGtleW9mIFRWYWx1ZXNdOiBTaWduYWw8VFZhbHVlc1tLXT4gfTtcbiAgcmVhZG9ubHkgZXJyb3JzOiBSZWFkb25seVNpZ25hbDxQYXJ0aWFsPFJlY29yZDxrZXlvZiBUVmFsdWVzLCBzdHJpbmc+Pj47XG4gIHJlYWRvbmx5IGlzU3VibWl0dGluZzogUmVhZG9ubHlTaWduYWw8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IG9wZW5QYXJhbXM6IFJlYWRvbmx5U2lnbmFsPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+O1xuICBvcGVuKG92ZXJyaWRlPzogUGFydGlhbDxUVmFsdWVzPiwgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQ7XG4gIGNsb3NlKCk6IHZvaWQ7XG4gIHN1Ym1pdChldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIExhdGUtYmluZHMgc3RvcmVzOyByZXF1aXJlZCBiZWZvcmUgZ3VhcmQvb25PcGVuL29uU3VibWl0IGNhbiBhY2Nlc3Mgc3RvcmVzLiAqL1xuICBiaW5kU3RvcmVzKGdldFN0b3JlczogKCkgPT4gVFN0b3Jlcyk6IHZvaWQ7XG4gIC8qKiBBY3Rpb24gaGFuZGxlciBlbnRyaWVzLiBTcHJlYWQgaW50byB0aGUgdXNlcidzIEFjdGlvblJlZ2lzdHJ5LiAqL1xuICBhY3Rpb25zOiBBY3Rpb25SZWdpc3RyeTxUU3RvcmVzPjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPihcbiAgY29uZmlnOiBGb3JtQ29uZmlnPFRWYWx1ZXMsIFRTdG9yZXM+XG4pOiBGb3JtU3RvcmU8VFZhbHVlcywgVFN0b3Jlcz4ge1xuICBjb25zdCBmaWVsZEtleXMgPSBPYmplY3Qua2V5cyhjb25maWcuaW5pdGlhbFZhbHVlcykgYXMgdW5rbm93biBhcyAoa2V5b2YgVFZhbHVlcylbXTtcblxuICBjb25zdCBmaWVsZHMgPSB7fSBhcyB1bmtub3duIGFzIHsgW0sgaW4ga2V5b2YgVFZhbHVlc106IFNpZ25hbDxUVmFsdWVzW0tdPiB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZEtleXMpIHtcbiAgICBmaWVsZHNba2V5XSA9IHNpZ25hbChjb25maWcuaW5pdGlhbFZhbHVlc1trZXldKTtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlcyA9IGNvbXB1dGVkPFRWYWx1ZXM+KCgpID0+IHtcbiAgICBjb25zdCB2ID0ge30gYXMgdW5rbm93biBhcyBUVmFsdWVzO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkS2V5cykge1xuICAgICAgdltrZXldID0gZmllbGRzW2tleV0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB2O1xuICB9KTtcblxuICBjb25zdCBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xuICBjb25zdCBpc1N1Ym1pdHRpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBjb25zdCBlcnJvcnMgPSBzaWduYWw8UGFydGlhbDxSZWNvcmQ8a2V5b2YgVFZhbHVlcywgc3RyaW5nPj4+KHt9KTtcbiAgY29uc3Qgb3BlblBhcmFtcyA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pih7fSk7XG5cbiAgbGV0IGdldFN0b3Jlc1JlZjogKCgpID0+IFRTdG9yZXMpIHwgbnVsbCA9IG51bGw7XG4gIGxldCBkaXNwb3NlR3VhcmRFZmZlY3Q6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGdldFN0b3Jlc09yVGhyb3coKTogVFN0b3JlcyB7XG4gICAgaWYgKCFnZXRTdG9yZXNSZWYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZvcm0gXCIke2NvbmZpZy5uYW1lfVwiIHVzZWQgYmVmb3JlIGJpbmRTdG9yZXMoKS4gQ2FsbCBmb3JtLmJpbmRTdG9yZXMoKCkgPT4geW91clN0b3JlcykgYXQgYXBwIGluaXQuYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGdldFN0b3Jlc1JlZigpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUb0luaXRpYWwoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgZmllbGRLZXlzKSB7XG4gICAgICBmaWVsZHNba2V5XS52YWx1ZSA9IGNvbmZpZy5pbml0aWFsVmFsdWVzW2tleV07XG4gICAgfVxuICAgIGVycm9ycy52YWx1ZSA9IHt9O1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IG9wZW4gYXBwbGllcyB0d28gbGF5ZXJzIG9mIG92ZXJyaWRlcyBwbHVzIG9wdGlvbmFsIG9uT3BlbiDigJQgYnJhbmNoeSBieSBkZXNpZ24uXG4gIGZ1bmN0aW9uIG9wZW4ob3ZlcnJpZGU/OiBQYXJ0aWFsPFRWYWx1ZXM+LCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSk6IHZvaWQge1xuICAgIHJlc2V0VG9Jbml0aWFsKCk7XG4gICAgb3BlblBhcmFtcy52YWx1ZSA9IHBhcmFtcztcbiAgICBpZiAoY29uZmlnLm9uT3BlbiAmJiBnZXRTdG9yZXNSZWYpIHtcbiAgICAgIGNvbnN0IG9uT3Blbk92ZXJyaWRlID0gY29uZmlnLm9uT3Blbih7IGRhdGE6IHBhcmFtcywgc3RvcmVzOiBnZXRTdG9yZXNPclRocm93KCkgfSkgPz8ge307XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvbk9wZW5PdmVycmlkZSkpIHtcbiAgICAgICAgaWYgKGsgaW4gZmllbGRzKSB7XG4gICAgICAgICAgZmllbGRzW2sgYXMga2V5b2YgVFZhbHVlc10udmFsdWUgPSB2IGFzIFRWYWx1ZXNba2V5b2YgVFZhbHVlc107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG92ZXJyaWRlKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvdmVycmlkZSkpIHtcbiAgICAgICAgaWYgKGsgaW4gZmllbGRzKSB7XG4gICAgICAgICAgZmllbGRzW2sgYXMga2V5b2YgVFZhbHVlc10udmFsdWUgPSB2IGFzIFRWYWx1ZXNba2V5b2YgVFZhbHVlc107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaXNPcGVuLnZhbHVlID0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb3NlKCk6IHZvaWQge1xuICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIHJlc2V0VG9Jbml0aWFsKCk7XG4gICAgb3BlblBhcmFtcy52YWx1ZSA9IHt9O1xuICB9XG5cbiAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IHN1Ym1pdCBmdW5uZWxzIEZvcm1EYXRhLCB2YWxpZGF0ZSwgb25TdWJtaXQsIGVycm9yU3RhdGUsIGFuZCBjbG9zZSDigJQgb25lLXBhdGgtcGVyLXN0YWdlIGJ5IGRlc2lnbi5cbiAgYXN5bmMgZnVuY3Rpb24gc3VibWl0KGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoZXZlbnQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGV2ZW50ICYmIGlzRm9ybUVsZW1lbnQoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgY29uc3QgZmQgPSBuZXcgRm9ybURhdGEoZXZlbnQudGFyZ2V0KTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkS2V5cykge1xuICAgICAgICBjb25zdCByYXcgPSBmZC5nZXQoa2V5IGFzIHVua25vd24gYXMgc3RyaW5nKTtcbiAgICAgICAgaWYgKHJhdyAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpZWxkc1trZXldLnZhbHVlID0gU3RyaW5nKHJhdykgYXMgdW5rbm93biBhcyBUVmFsdWVzW3R5cGVvZiBrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnQgPSB2YWx1ZXMudmFsdWU7XG4gICAgY29uc3QgdmFsaWRhdGlvbkVycm9ycyA9IGNvbmZpZy52YWxpZGF0ZT8uKGN1cnJlbnQpO1xuICAgIGlmICh2YWxpZGF0aW9uRXJyb3JzICYmIE9iamVjdC5rZXlzKHZhbGlkYXRpb25FcnJvcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGVycm9ycy52YWx1ZSA9IHZhbGlkYXRpb25FcnJvcnM7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVycm9ycy52YWx1ZSA9IHt9O1xuICAgIGlzU3VibWl0dGluZy52YWx1ZSA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvbmZpZy5vblN1Ym1pdCh7XG4gICAgICAgIHZhbHVlczogY3VycmVudCxcbiAgICAgICAgc3RvcmVzOiBnZXRTdG9yZXNPclRocm93KCksXG4gICAgICB9KTtcbiAgICAgIGNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzdWJtaXRFcnJvcihgJHtjb25maWcubmFtZX06c3VibWl0YCwgZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNTdWJtaXR0aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYmluZFN0b3JlcyhnZXRTdG9yZXM6ICgpID0+IFRTdG9yZXMpOiB2b2lkIHtcbiAgICBnZXRTdG9yZXNSZWYgPSBnZXRTdG9yZXM7XG4gICAgZGlzcG9zZUd1YXJkRWZmZWN0Py4oKTtcbiAgICBjb25zdCBndWFyZEZuID0gY29uZmlnLmd1YXJkO1xuICAgIGlmIChndWFyZEZuKSB7XG4gICAgICBkaXNwb3NlR3VhcmRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWlzT3Blbi52YWx1ZSkgcmV0dXJuO1xuICAgICAgICBpZiAoIWd1YXJkRm4oeyBzdG9yZXM6IGdldFN0b3JlcygpIH0pKSBjbG9zZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYWN0aW9uczogQWN0aW9uUmVnaXN0cnk8VFN0b3Jlcz4gPSB7XG4gICAgW2Ake2NvbmZpZy5uYW1lfTpvcGVuYF06ICh7IGRhdGEgfSkgPT4ge1xuICAgICAgb3Blbih1bmRlZmluZWQsIGRhdGEpO1xuICAgIH0sXG4gICAgW2Ake2NvbmZpZy5uYW1lfTpjbG9zZWBdOiAoKSA9PiB7XG4gICAgICBjbG9zZSgpO1xuICAgIH0sXG4gICAgW2Ake2NvbmZpZy5uYW1lfTpzdWJtaXRgXTogYXN5bmMgKHsgZXZlbnQgfSkgPT4ge1xuICAgICAgYXdhaXQgc3VibWl0KGV2ZW50KTtcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgaXNPcGVuLFxuICAgIHZhbHVlcyxcbiAgICBmaWVsZHMsXG4gICAgZXJyb3JzLFxuICAgIGlzU3VibWl0dGluZyxcbiAgICBvcGVuUGFyYW1zLFxuICAgIG9wZW4sXG4gICAgY2xvc2UsXG4gICAgc3VibWl0LFxuICAgIGJpbmRTdG9yZXMsXG4gICAgYWN0aW9ucyxcbiAgfTtcbn1cblxuLyoqXG4gKiBDb21wb3NlIG1hbnkgZm9ybXMgaW50byBhIHNpbmdsZSBzZXQ6IG1lcmdlZCBhY3Rpb25zLCBjbG9zZUFsbCwgb3BlbkZvcm0gc2lnbmFsLlxuICovXG5leHBvcnQgdHlwZSBGb3JtU2V0PFRTdG9yZXM+ID0ge1xuICBhY3Rpb25zOiBBY3Rpb25SZWdpc3RyeTxUU3RvcmVzPjtcbiAgb3BlbkZvcm06IFJlYWRvbmx5U2lnbmFsPHN0cmluZyB8IG51bGw+O1xuICBjbG9zZUFsbCgpOiB2b2lkO1xuICBiaW5kU3RvcmVzKGdldFN0b3JlczogKCkgPT4gVFN0b3Jlcyk6IHZvaWQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRm9ybVNldDxUU3RvcmVzPihcbiAgZm9ybXM6IHJlYWRvbmx5IEZvcm1TdG9yZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPltdXG4pOiBGb3JtU2V0PFRTdG9yZXM+IHtcbiAgY29uc3QgbWVyZ2VkOiBBY3Rpb25SZWdpc3RyeTxUU3RvcmVzPiA9IHt9O1xuICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIHtcbiAgICBPYmplY3QuYXNzaWduKG1lcmdlZCwgZm9ybS5hY3Rpb25zKTtcbiAgfVxuXG4gIGNvbnN0IG9wZW5Gb3JtID0gY29tcHV0ZWQ8c3RyaW5nIHwgbnVsbD4oKCkgPT4ge1xuICAgIGZvciAoY29uc3QgZm9ybSBvZiBmb3Jtcykge1xuICAgICAgaWYgKGZvcm0uaXNPcGVuLnZhbHVlKSByZXR1cm4gZm9ybS5uYW1lO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhY3Rpb25zOiBtZXJnZWQsXG4gICAgb3BlbkZvcm0sXG4gICAgY2xvc2VBbGwoKSB7XG4gICAgICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIGZvcm0uY2xvc2UoKTtcbiAgICB9LFxuICAgIGJpbmRTdG9yZXMoZ2V0U3RvcmVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGZvcm0gb2YgZm9ybXMpIGZvcm0uYmluZFN0b3JlcyhnZXRTdG9yZXMpO1xuICAgIH0sXG4gIH07XG59XG4iLAogICAgImltcG9ydHtvcHRpb25zIGFzIHIsRnJhZ21lbnQgYXMgZX1mcm9tXCJwcmVhY3RcIjtleHBvcnR7RnJhZ21lbnR9ZnJvbVwicHJlYWN0XCI7dmFyIHQ9L1tcIiY8XS87ZnVuY3Rpb24gbihyKXtpZigwPT09ci5sZW5ndGh8fCExPT09dC50ZXN0KHIpKXJldHVybiByO2Zvcih2YXIgZT0wLG49MCxvPVwiXCIsZj1cIlwiO248ci5sZW5ndGg7bisrKXtzd2l0Y2goci5jaGFyQ29kZUF0KG4pKXtjYXNlIDM0OmY9XCImcXVvdDtcIjticmVhaztjYXNlIDM4OmY9XCImYW1wO1wiO2JyZWFrO2Nhc2UgNjA6Zj1cIiZsdDtcIjticmVhaztkZWZhdWx0OmNvbnRpbnVlfW4hPT1lJiYobys9ci5zbGljZShlLG4pKSxvKz1mLGU9bisxfXJldHVybiBuIT09ZSYmKG8rPXIuc2xpY2UoZSxuKSksb312YXIgbz0vYWNpdHxleCg/OnN8Z3xufHB8JCl8cnBofGdyaWR8b3dzfG1uY3xudHd8aW5lW2NoXXx6b298Xm9yZHxpdGVyYS9pLGY9MCxpPUFycmF5LmlzQXJyYXk7ZnVuY3Rpb24gdShlLHQsbixvLGksdSl7dHx8KHQ9e30pO3ZhciBhLGMscD10O2lmKFwicmVmXCJpbiBwKWZvcihjIGluIHA9e30sdClcInJlZlwiPT1jP2E9dFtjXTpwW2NdPXRbY107dmFyIGw9e3R5cGU6ZSxwcm9wczpwLGtleTpuLHJlZjphLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjotLWYsX19pOi0xLF9fdTowLF9fc291cmNlOmksX19zZWxmOnV9O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihhPWUuZGVmYXVsdFByb3BzKSlmb3IoYyBpbiBhKXZvaWQgMD09PXBbY10mJihwW2NdPWFbY10pO3JldHVybiByLnZub2RlJiZyLnZub2RlKGwpLGx9ZnVuY3Rpb24gYShyKXt2YXIgdD11KGUse3RwbDpyLGV4cHJzOltdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpfSk7cmV0dXJuIHQua2V5PXQuX192LHR9dmFyIGM9e30scD0vW0EtWl0vZztmdW5jdGlvbiBsKGUsdCl7aWYoci5hdHRyKXt2YXIgZj1yLmF0dHIoZSx0KTtpZihcInN0cmluZ1wiPT10eXBlb2YgZilyZXR1cm4gZn1pZih0PWZ1bmN0aW9uKHIpe3JldHVybiBudWxsIT09ciYmXCJvYmplY3RcIj09dHlwZW9mIHImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHIudmFsdWVPZj9yLnZhbHVlT2YoKTpyfSh0KSxcInJlZlwiPT09ZXx8XCJrZXlcIj09PWUpcmV0dXJuXCJcIjtpZihcInN0eWxlXCI9PT1lJiZcIm9iamVjdFwiPT10eXBlb2YgdCl7dmFyIGk9XCJcIjtmb3IodmFyIHUgaW4gdCl7dmFyIGE9dFt1XTtpZihudWxsIT1hJiZcIlwiIT09YSl7dmFyIGw9XCItXCI9PXVbMF0/dTpjW3VdfHwoY1t1XT11LnJlcGxhY2UocCxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpKSxzPVwiO1wiO1wibnVtYmVyXCIhPXR5cGVvZiBhfHxsLnN0YXJ0c1dpdGgoXCItLVwiKXx8by50ZXN0KGwpfHwocz1cInB4O1wiKSxpPWkrbCtcIjpcIithK3N9fXJldHVybiBlKyc9XCInK24oaSkrJ1wiJ31yZXR1cm4gbnVsbD09dHx8ITE9PT10fHxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0fHxcIm9iamVjdFwiPT10eXBlb2YgdD9cIlwiOiEwPT09dD9lOmUrJz1cIicrbihcIlwiK3QpKydcIid9ZnVuY3Rpb24gcyhyKXtpZihudWxsPT1yfHxcImJvb2xlYW5cIj09dHlwZW9mIHJ8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHIpcmV0dXJuIG51bGw7aWYoXCJvYmplY3RcIj09dHlwZW9mIHIpe2lmKHZvaWQgMD09PXIuY29uc3RydWN0b3IpcmV0dXJuIHI7aWYoaShyKSl7Zm9yKHZhciBlPTA7ZTxyLmxlbmd0aDtlKyspcltlXT1zKHJbZV0pO3JldHVybiByfX1yZXR1cm4gbihcIlwiK3IpfWV4cG9ydHt1IGFzIGpzeCxsIGFzIGpzeEF0dHIsdSBhcyBqc3hERVYscyBhcyBqc3hFc2NhcGUsYSBhcyBqc3hUZW1wbGF0ZSx1IGFzIGpzeHN9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9anN4UnVudGltZS5tb2R1bGUuanMubWFwXG4iLAogICAgIi8qKlxuICogU3RvcmUgYmFzZSArIFByZWFjdCBjb250ZXh0LlxuICpcbiAqIGBjcmVhdGVTdG9yZWAgaXMgYSB0aGluIGNvbnZlbnRpb24tZW5mb3JjZXI6IGEgdHlwZWQgYmFnIG9mIHNpZ25hbHNcbiAqIHBsdXMgbWV0aG9kcy4gQXBwcyB1c2UgaXQgdG8gZGVmaW5lIGRvbWFpbiBzdG9yZXMgd2hvc2Ugb25seSBwdWJsaWNcbiAqIG11dGF0aW9uIHN1cmZhY2UgaXMgbmFtZWQgbWV0aG9kcyAoYWN0aW9ucyBjYWxsIHRoZW07IGNvbXBvbmVudHMgcmVhZFxuICogc2lnbmFscyBhbmQgZGlzcGF0Y2ggYWN0aW9ucykuIE5vIGNsZXZlcm5lc3Mg4oCUIGEgbmFtZWQgcGF0dGVybiBtb3JlXG4gKiB0aGFuIGEgbGlicmFyeS5cbiAqXG4gKiBgU3RvcmVQcm92aWRlcmAgKyBgdXNlU3RvcmVzYCB3aXJlIHRoZSBzdG9yZXMgYmFnIGludG8gUHJlYWN0IGNvbnRleHRcbiAqIHNvIGNvbXBvbmVudHMgYW5kIHRoZSBkZWxlZ2F0aW9uIHJ1bnRpbWUgY2FuIHJlYWNoIGl0IHZpYSBhIHNpbmdsZSBob29rLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50Q2hpbGRyZW4gfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcblxuLyoqXG4gKiBJZGVudGl0eSBoZWxwZXI7IGV4aXN0cyBzbyBkb21haW4gc3RvcmVzIGhhdmUgYSBjYW5vbmljYWwgY3JlYXRpb25cbiAqIGNhbGwgZXZlbiB0aG91Z2ggdGhlIGJhZyBpdHNlbGYgaXMgYSBwbGFpbiBvYmplY3QuIENlbnRyYWxpc2luZyBoZXJlXG4gKiBsZXRzIHVzIGhhbmcgYWRkaXRpb25hbCBiZWhhdmlvdXIgb2ZmIHRoZSBjYWxsIHNpdGUgbGF0ZXIgKGRlYnVnXG4gKiBpbnN0cnVtZW50YXRpb24sIGRldnRvb2xzKSB3aXRob3V0IGEgbWlncmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3RvcmU8VCBleHRlbmRzIG9iamVjdD4oaW5pdDogVCk6IFQge1xuICByZXR1cm4gaW5pdDtcbn1cblxuY29uc3QgU3RvcmVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDx1bmtub3duPihudWxsKTtcblxuZXhwb3J0IHR5cGUgU3RvcmVQcm92aWRlclByb3BzPFRTdG9yZXM+ID0ge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIHN0b3JlczogVFN0b3Jlcztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBTdG9yZVByb3ZpZGVyPFRTdG9yZXM+KHsgY2hpbGRyZW4sIHN0b3JlcyB9OiBTdG9yZVByb3ZpZGVyUHJvcHM8VFN0b3Jlcz4pIHtcbiAgcmV0dXJuIDxTdG9yZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3N0b3Jlc30+e2NoaWxkcmVufTwvU3RvcmVDb250ZXh0LlByb3ZpZGVyPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVN0b3JlczxUU3RvcmVzPigpOiBUU3RvcmVzIHtcbiAgY29uc3QgY3R4ID0gdXNlQ29udGV4dChTdG9yZUNvbnRleHQpIGFzIHVua25vd24gYXMgVFN0b3JlcyB8IG51bGw7XG4gIGlmIChjdHggPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VTdG9yZXMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhIFN0b3JlUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGN0eDtcbn1cbiIsCiAgICAiLyoqXG4gKiBBY3Rpb25Gb3JtIOKAlCB3cmFwcyBhIG5hdGl2ZSA8Zm9ybT4gd2l0aCB0aGUgYWN0aW9uIHBhdHRlcm4uXG4gKlxuICogUmVuZGVycyA8Zm9ybSBkYXRhLWFjdGlvbj1cIntmb3JtLm5hbWV9OnN1Ym1pdFwiPiBzbyB0aGUgaW5zdGFsbGVkXG4gKiBldmVudCBkZWxlZ2F0aW9uIGNhdGNoZXMgdGhlIHN1Ym1pdCBldmVudCBhbmQgZGlzcGF0Y2hlcyB0byB0aGVcbiAqIGZvcm0ncyBhdXRvLXJlZ2lzdGVyZWQgOnN1Ym1pdCBoYW5kbGVyLiBgYXJpYS1idXN5YCBtaXJyb3JzIHRoZVxuICogYGlzU3VibWl0dGluZ2Agc2lnbmFsIHNvIGNvbnN1bWVyIHN0eWxpbmcgY2FuIHJlc3BvbmQgd2l0aG91dCBleHRyYVxuICogd2lyaW5nLiBUaGUgZm9ybSBlbGVtZW50IGFsc28gZXhwb3NlcyBgZGF0YS1wb2xseS1hY3Rpb24tZm9ybWAgZm9yXG4gKiBzdGFibGUgc2VsZWN0b3IgaG9va3MuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHR5cGUgeyBGb3JtU3RvcmUgfSBmcm9tIFwiLi4vYWN0aW9ucy9mb3JtLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9BY3Rpb25Gb3JtLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uRm9ybVByb3BzPFRWYWx1ZXMgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBUU3RvcmVzPiA9IHtcbiAgZm9ybTogRm9ybVN0b3JlPFRWYWx1ZXMsIFRTdG9yZXM+O1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxsZWRieVwiPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIEFjdGlvbkZvcm08VFZhbHVlcyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIFRTdG9yZXM+KFxuICBwcm9wczogQWN0aW9uRm9ybVByb3BzPFRWYWx1ZXMsIFRTdG9yZXM+XG4pOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgZm9ybSwgY2hpbGRyZW4sIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuICBjb25zdCBjb21iaW5lZCA9IGNsYXNzTmFtZSA/IGAke2NsYXNzZXNbXCJmb3JtXCJdfSAke2NsYXNzTmFtZX1gIDogY2xhc3Nlc1tcImZvcm1cIl07XG4gIHJldHVybiAoXG4gICAgPGZvcm1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtjb21iaW5lZH1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktYWN0aW9uLWZvcm09e2Zvcm0ubmFtZX1cbiAgICAgIGRhdGEtYWN0aW9uPXtgJHtmb3JtLm5hbWV9OnN1Ym1pdGB9XG4gICAgICBhcmlhLWJ1c3k9e2Zvcm0uaXNTdWJtaXR0aW5nLnZhbHVlfVxuICAgICAgYXJpYS1sYWJlbD17cHJvcHNbXCJhcmlhLWxhYmVsXCJdfVxuICAgICAgYXJpYS1sYWJlbGxlZGJ5PXtwcm9wc1tcImFyaWEtbGFiZWxsZWRieVwiXX1cbiAgICAgIG5vVmFsaWRhdGVcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9mb3JtPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEZpcmUgYSBuYW1lZCBhY3Rpb24gdGhyb3VnaCB0aGUgZ2xvYmFsIGV2ZW50LWRlbGVnYXRpb24gcmVnaXN0cnkuXG4gKlxuICogVGhlIEFjdGlvbiogcHJpbWl0aXZlcyAoPEFjdGlvbklucHV0PiwgPEFjdGlvblNlbGVjdD4pIGNvbW1pdCBieVxuICogY2xpY2tpbmcgYSBkZXRhY2hlZCBgPGJ1dHRvbiBkYXRhLWFjdGlvbj1cIuKAplwiPmAgY2FycnlpbmcgZGF0YS1hY3Rpb24tKlxuICogYXR0cmlidXRlczsgdGhlIGRlbGVnYXRlZCBjbGljayBsaXN0ZW5lciByb3V0ZXMgaXQgaW50byB0aGVcbiAqIGNvbnN1bWVyJ3MgYWN0aW9uIHJlZ2lzdHJ5IHdpdGggbm8gZXh0cmEgd2lyaW5nLiBDZW50cmFsaXNlZCBoZXJlIHNvXG4gKiBldmVyeSBBY3Rpb24qIHByaW1pdGl2ZSBkaXNwYXRjaGVzIGlkZW50aWNhbGx5LlxuICpcbiAqIEtleXMgaW4gYGRhdGFgIGFyZSBjYW1lbENhc2UgYW5kIGNvbnZlcnRlZCB0byBkYXNoLWNhc2UgYXR0cmlidXRlXG4gKiBuYW1lcyDigJQgYGFjdGlvbkRhdGE9e3sgdGFza0lkIH19YCBiZWNvbWVzIGBkYXRhLWFjdGlvbi10YXNrLWlkYC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hBY3Rpb24oYWN0aW9uOiBzdHJpbmcsIGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkIHtcbiAgY29uc3QgaGlkZGVuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcbiAgaGlkZGVuLnNldEF0dHJpYnV0ZShcImRhdGEtYWN0aW9uXCIsIGFjdGlvbik7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgY29uc3QgZGFzaEtleSA9IGtleS5yZXBsYWNlKC9bQS1aXS9nLCAobSkgPT4gYC0ke20udG9Mb3dlckNhc2UoKX1gKTtcbiAgICBoaWRkZW4uc2V0QXR0cmlidXRlKGBkYXRhLWFjdGlvbi0ke2Rhc2hLZXl9YCwgdmFsdWUpO1xuICB9XG4gIGhpZGRlbi5zdHlsZS5wb3NpdGlvbiA9IFwiZml4ZWRcIjtcbiAgaGlkZGVuLnN0eWxlLm9wYWNpdHkgPSBcIjBcIjtcbiAgaGlkZGVuLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjtcbiAgaGlkZGVuLnRhYkluZGV4ID0gLTE7XG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaGlkZGVuKTtcbiAgdHJ5IHtcbiAgICBoaWRkZW4uY2xpY2soKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBoaWRkZW4ucmVtb3ZlKCk7XG4gIH1cbn1cbiIsCiAgICAiLyoqXG4gKiBwb2xseSMxMjU6IGRhdGEtKiAvIGFyaWEtKiBhdHRyaWJ1dGUgcGFzc3Rocm91Z2ggZm9yIFVJIHByaW1pdGl2ZXMuXG4gKlxuICogUHJpbWl0aXZlcyBhY2NlcHQgYSBmaXhlZCBwcm9wIHNldC4gV2l0aG91dCBwYXNzdGhyb3VnaCwgYSBjb25zdW1lclxuICogdGhhdCBuZWVkcyBhIGBkYXRhLSpgIHRlc3QgaG9vayBvciBhbiBgYXJpYS0qYCBhdHRyaWJ1dGUgb24gdGhlXG4gKiBwcmltaXRpdmUncyBvd24gZWxlbWVudCBoYXMgdG8gd3JhcCBpdCBpbiBhbiBleHRyYSBET00gbm9kZSDigJQgYSBzbWVsbC5cbiAqXG4gKiB7QGxpbmsgUGFzc3Rocm91Z2hBdHRyc30gd2lkZW5zIGEgcHJpbWl0aXZlJ3MgcHJvcHMgdG8gYWNjZXB0IGFueVxuICogYGRhdGEtKmAgLyBgYXJpYS0qYCBrZXk7IHtAbGluayBjb2xsZWN0UGFzc3Rocm91Z2h9IGdhdGhlcnMgdGhlbSBmb3JcbiAqIHNwcmVhZGluZyBvbnRvIHRoZSByZW5kZXJlZCByb290IGVsZW1lbnQuIFNwcmVhZCB0aGUgcmVzdWx0ICpiZWZvcmUqXG4gKiB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXMgc28gYSBjb25zdW1lciBrZXkgY2FuIG5ldmVyIG92ZXJyaWRlXG4gKiBvbmUgdGhlIHByaW1pdGl2ZSBzZXRzIGl0c2VsZiAoYGRhdGEtcG9sbHktKmAsIGV0Yy4pLlxuICovXG5cbi8qKiBJbmRleCBzaWduYXR1cmVzIGxldHRpbmcgYSBwcmltaXRpdmUncyBwcm9wcyBhY2NlcHQgYXJiaXRyYXJ5XG4gKiAgYGRhdGEtKmAgYW5kIGBhcmlhLSpgIGF0dHJpYnV0ZXMsIHBsdXMgdGhlIHN0YW5kYXJkIGB0aXRsZWBcbiAqICBhdHRyaWJ1dGUg4oCUIGEgbmF0aXZlIHRvb2x0aXAgaXMgYSBET00gaG9vaywgbm90IHN0eWxpbmcsIHNvIGl0XG4gKiAgcmlkZXMgdGhlIHNhbWUgcGFzc3Rocm91Z2ggcGF0aCAocG9sbHkjMTM1KS4gKi9cbmV4cG9ydCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgPSB7XG4gIFtkYXRhQXR0cjogYGRhdGEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIFthcmlhQXR0cjogYGFyaWEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKiBOYXRpdmUgdG9vbHRpcCB0ZXh0LCBmb3J3YXJkZWQgdG8gdGhlIHJlbmRlcmVkIHJvb3QgZWxlbWVudC4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG59O1xuXG4vKiogS2V5cywgYmV5b25kIHRoZSBgZGF0YS0qYCAvIGBhcmlhLSpgIHByZWZpeGVzLCB0aGF0IHBhc3MgdGhyb3VnaC4gKi9cbmZ1bmN0aW9uIGlzUGFzc3Rocm91Z2hLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGtleS5zdGFydHNXaXRoKFwiZGF0YS1cIikgfHwga2V5LnN0YXJ0c1dpdGgoXCJhcmlhLVwiKSB8fCBrZXkgPT09IFwidGl0bGVcIjtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGBkYXRhLSpgIC8gYGFyaWEtKmAgLyBgdGl0bGVgIGF0dHJpYnV0ZXMgZnJvbSBhIHByb3BzIG9iamVjdFxuICogc28gdGhleSBjYW4gYmUgc3ByZWFkIG9udG8gYSBwcmltaXRpdmUncyByb290IGVsZW1lbnQuIGB1bmRlZmluZWRgXG4gKiB2YWx1ZXMgYW5kIG5vbi1hdHRyaWJ1dGUgdmFsdWUgdHlwZXMgKGZ1bmN0aW9ucywgb2JqZWN0cykgYXJlIGRyb3BwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0UGFzc3Rocm91Z2goXG4gIHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4ge1xuICBjb25zdCBvdXQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+ID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb3BzKSkge1xuICAgIGlmICghaXNQYXNzdGhyb3VnaEtleShrZXkpKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IHByb3BzW2tleV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgb3V0W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsCiAgICAiLyoqXG4gKiBBY3Rpb25JbnB1dCDigJQgZHVhbC1tb2RlIHZpZXcvZWRpdCBpbnB1dCB3aXRoIGFjdGlvbiBkaXNwYXRjaCBvbiBjb21taXQuXG4gKlxuICogVmlldyBtb2RlIHJlbmRlcnMgdGhlIGN1cnJlbnQgdmFsdWUgYXMgdGV4dCAob3B0aW9uYWxseSB0aHJvdWdoIGFcbiAqIGNhbGxlci1zdXBwbGllZCBgcmVuZGVyVmlld2AgZm9yIG1hcmtkb3duLCByaWNoIGZvcm1hdHRpbmcsIGV0Yy4pLlxuICogQ2xpY2ssIEVudGVyLCBvciBTcGFjZSBlbnRlcnMgZWRpdCBtb2RlLiBFZGl0IG1vZGUgaXMgYSBuYXRpdmUgaW5wdXRcbiAqIG9yIHRleHRhcmVhOyBjb21taXQgZmlyZXMgdGhlIGNvbmZpZ3VyZWQgYWN0aW9uIHdpdGggYGRhdGEtYWN0aW9uLXZhbHVlYFxuICogYW5kIGBkYXRhLWFjdGlvbi1maWVsZGAgc2V0IGZyb20gRm9ybURhdGEtc2hhcGUgc2VtYW50aWNzLCBzbyB0aGVcbiAqIGV4aXN0aW5nIGV2ZW50IGRlbGVnYXRpb24gaGFuZGxlcyBpdCB3aXRoIG5vIGV4dHJhIHdpcmluZy5cbiAqXG4gKiBgc2F2ZU9uYCBwaWNrcyB0aGUgY29tbWl0IHRyaWdnZXI6XG4gKiAgIFwiYmx1clwiICAgICAgIGNvbW1pdCB3aGVuIHRoZSBmaWVsZCBsb3NlcyBmb2N1c1xuICogICBcImVudGVyXCIgICAgICBjb21taXQgb24gRW50ZXIgKHNpbmdsZS1saW5lKSBvciBDbWQvQ3RybCtFbnRlciAobXVsdGktbGluZSlcbiAqICAgXCJjbWQtZW50ZXJcIiAgY29tbWl0IG9ubHkgb24gQ21kL0N0cmwrRW50ZXJcbiAqICAgXCJleHBsaWNpdFwiICAgbmV2ZXIgYXV0by1jb21taXQg4oCUIGNhbGxlciB3aXJlcyBhIHNhdmUgYnV0dG9uIHdpdGggZGF0YS1hY3Rpb25cbiAqICAgXCJpbnB1dFwiICAgICAgY29tbWl0IG9uIGV2ZXJ5IGtleXN0cm9rZSDigJQgZm9yIGZpbHRlci1hcy15b3UtdHlwZSBmaWVsZHM7XG4gKiAgICAgICAgICAgICAgICB0aGUgZmllbGQgc3RheXMgaW4gZWRpdCBtb2RlIHJhdGhlciB0aGFuIHRvZ2dsaW5nIHRvIHZpZXdcbiAqXG4gKiBgaW5wdXRUeXBlYCBzZXRzIHRoZSBuYXRpdmUgaW5wdXQgdHlwZSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQg4oCUXG4gKiBcInRleHRcIiAoZGVmYXVsdCksIFwiZGF0ZVwiLCBcInRpbWVcIiwgXCJudW1iZXJcIiwgYW5kIGZyaWVuZHMg4oCUIHNvIGEgZGF0ZVxuICogb3IgbnVtZXJpYyBmaWVsZCBjb21taXRzIHRocm91Z2ggdGhlIGFjdGlvbiBzeXN0ZW0gbGlrZSBhbnkgb3RoZXIuXG4gKlxuICogTGF5b3V0LXNoaWZ0LWZyZWU6IHZpZXcgYW5kIGVkaXQgbW9kZXMgc2hhcmUgcGFkZGluZywgYm9yZGVyIHdpZHRoLFxuICogZm9udCwgYW5kIGxpbmUtaGVpZ2h0IHNvIHRoZSB0b2dnbGUgY2F1c2VzIG5vIHJlZmxvdy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9BY3Rpb25JbnB1dC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBkaXNwYXRjaEFjdGlvbiB9IGZyb20gXCIuL2ludGVybmFsL2Rpc3BhdGNoLWFjdGlvbi50c1wiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuXG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFNhdmVPbiA9IFwiYmx1clwiIHwgXCJlbnRlclwiIHwgXCJjbWQtZW50ZXJcIiB8IFwiZXhwbGljaXRcIiB8IFwiaW5wdXRcIjtcbmV4cG9ydCB0eXBlIEFjdGlvbklucHV0VmFyaWFudCA9IFwic2luZ2xlXCIgfCBcIm11bHRpXCI7XG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFR5cGUgPVxuICB8IFwidGV4dFwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcImRhdGV0aW1lLWxvY2FsXCJcbiAgfCBcInRpbWVcIlxuICB8IFwibW9udGhcIlxuICB8IFwid2Vla1wiXG4gIHwgXCJudW1iZXJcIlxuICB8IFwiZW1haWxcIlxuICB8IFwidXJsXCJcbiAgfCBcInRlbFwiO1xuXG5leHBvcnQgdHlwZSBBY3Rpb25JbnB1dFByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgLyoqIEN1cnJlbnQgdmFsdWUgdG8gcmVuZGVyIGluIHZpZXcgbW9kZSBhbmQgc2VlZCB0aGUgZWRpdCBidWZmZXIuICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBBY3Rpb24gbmFtZSB0byBkaXNwYXRjaCBvbiBjb21taXQuIFJlY2VpdmVzIGRhdGEtYWN0aW9uLXZhbHVlPTxuZXcgdmFsdWU+LiAqL1xuICBhY3Rpb246IHN0cmluZztcbiAgLyoqIENvbW1pdCB0cmlnZ2VyLiBEZWZhdWx0OiBcImJsdXJcIi4gKi9cbiAgc2F2ZU9uPzogQWN0aW9uSW5wdXRTYXZlT247XG4gIHZhcmlhbnQ/OiBBY3Rpb25JbnB1dFZhcmlhbnQ7XG4gIC8qKiBOYXRpdmUgaW5wdXQgdHlwZSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQuIERlZmF1bHQ6IFwidGV4dFwiLiAqL1xuICBpbnB1dFR5cGU/OiBBY3Rpb25JbnB1dFR5cGU7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBFeHRyYSBkYXRhLWFjdGlvbi0qIGF0dHJpYnV0ZXMgdG8gaW5jbHVkZSBhdCBjb21taXQgKGUuZy4gZW50aXR5IGlkKS4gKi9cbiAgYWN0aW9uRGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBDdXN0b20gdmlldyByZW5kZXJlciDigJQgcmVjZWl2ZXMgdmFsdWUsIHJldHVybnMgVk5vZGUuICovXG4gIHJlbmRlclZpZXc/OiAodmFsdWU6IHN0cmluZykgPT4gSlNYLkVsZW1lbnQgfCBzdHJpbmc7XG4gIC8qKiBMYWJlbCBhbm5vdW5jZWQgYnkgc2NyZWVuIHJlYWRlcnMgZm9yIHRoZSBlZGl0IGFmZm9yZGFuY2UuICovXG4gIGFyaWFMYWJlbD86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IHR3byByZW5kZXIgYnJhbmNoZXMgdGltZXMgdHdvIHZhcmlhbnRzIHRpbWVzIGZpdmUgc2F2ZU9uIHRyaWdnZXJzOyBicmFuY2hpbmcgaXMgaW5oZXJlbnQgdG8gdGhlIHByaW1pdGl2ZS5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25JbnB1dChwcm9wczogQWN0aW9uSW5wdXRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgdmFyaWFudCA9IHByb3BzLnZhcmlhbnQgPz8gXCJzaW5nbGVcIjtcbiAgY29uc3Qgc2F2ZU9uID0gcHJvcHMuc2F2ZU9uID8/IFwiYmx1clwiO1xuICAvLyBcImlucHV0XCIgbW9kZSBpcyBhIHBlcm1hbmVudGx5LWVkaXRhYmxlIGZpbHRlciBmaWVsZCDigJQgaXQgbmV2ZXIgaGFzIGFcbiAgLy8gdmlldyBtb2RlIHRvIHRvZ2dsZSBiYWNrIHRvLCBzbyBpdCBzdGFydHMgaW4gZWRpdC5cbiAgY29uc3QgbGl2ZSA9IHNhdmVPbiA9PT0gXCJpbnB1dFwiO1xuICBjb25zdCBbbW9kZSwgc2V0TW9kZV0gPSB1c2VTdGF0ZTxcInZpZXdcIiB8IFwiZWRpdFwiPihsaXZlID8gXCJlZGl0XCIgOiBcInZpZXdcIik7XG4gIGNvbnN0IFtkcmFmdCwgc2V0RHJhZnRdID0gdXNlU3RhdGUocHJvcHMudmFsdWUpO1xuICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1vZGUgPT09IFwidmlld1wiKSBzZXREcmFmdChwcm9wcy52YWx1ZSk7XG4gIH0sIFtwcm9wcy52YWx1ZSwgbW9kZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gRG9uJ3Qgc3RlYWwgZm9jdXMgb24gbW91bnQgZm9yIGEgbGl2ZSBmaWx0ZXIgZmllbGQ7IG9ubHkgcHVsbCBmb2N1c1xuICAgIC8vIHdoZW4gdGhlIHVzZXIgaGFzIGV4cGxpY2l0bHkgdG9nZ2xlZCBhIHZpZXcgZmllbGQgaW50byBlZGl0IG1vZGUuXG4gICAgaWYgKG1vZGUgPT09IFwiZWRpdFwiICYmICFsaXZlICYmIGlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuc2VsZWN0Py4oKTtcbiAgICB9XG4gIH0sIFttb2RlLCBsaXZlXSk7XG5cbiAgY29uc3QgZW50ZXJFZGl0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChwcm9wcy5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIHNldERyYWZ0KHByb3BzLnZhbHVlKTtcbiAgICBzZXRNb2RlKFwiZWRpdFwiKTtcbiAgfSwgW3Byb3BzLmRpc2FibGVkLCBwcm9wcy52YWx1ZV0pO1xuXG4gIGNvbnN0IGNvbW1pdCA9IHVzZUNhbGxiYWNrKFxuICAgIChuZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChuZXh0ICE9PSBwcm9wcy52YWx1ZSkge1xuICAgICAgICBkaXNwYXRjaEFjdGlvbihwcm9wcy5hY3Rpb24sIHsgLi4uKHByb3BzLmFjdGlvbkRhdGEgPz8ge30pLCB2YWx1ZTogbmV4dCB9KTtcbiAgICAgIH1cbiAgICAgIC8vIEEgbGl2ZSBmaWx0ZXIgZmllbGQgc3RheXMgZWRpdGFibGU7IGV2ZXJ5IG90aGVyIHRyaWdnZXIgcmV0dXJuc1xuICAgICAgLy8gdG8gdmlldyBtb2RlIG9uY2UgdGhlIHZhbHVlIGlzIGNvbW1pdHRlZC5cbiAgICAgIGlmICghbGl2ZSkgc2V0TW9kZShcInZpZXdcIik7XG4gICAgfSxcbiAgICBbcHJvcHMuYWN0aW9uLCBwcm9wcy5hY3Rpb25EYXRhLCBwcm9wcy52YWx1ZSwgbGl2ZV1cbiAgKTtcblxuICBjb25zdCBjYW5jZWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0RHJhZnQocHJvcHMudmFsdWUpO1xuICAgIGlmICghbGl2ZSkgc2V0TW9kZShcInZpZXdcIik7XG4gIH0sIFtwcm9wcy52YWx1ZSwgbGl2ZV0pO1xuXG4gIC8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBrZXlib2FyZCBoYW5kbGVyIGVuY29kZXMgdGhlIHNhdmVPbiDDlyB2YXJpYW50IG1hdHJpeC5cbiAgY29uc3Qgb25LZXlEb3duID0gKGV2ZW50OiBKU1guVGFyZ2V0ZWRLZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjYW5jZWwoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBjb25zdCBjbWQgPSBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXk7XG4gICAgICBpZiAoc2F2ZU9uID09PSBcImVudGVyXCIgJiYgdmFyaWFudCA9PT0gXCJzaW5nbGVcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb21taXQoZHJhZnQpO1xuICAgICAgfSBlbHNlIGlmICgoc2F2ZU9uID09PSBcImVudGVyXCIgJiYgdmFyaWFudCA9PT0gXCJtdWx0aVwiICYmIGNtZCkgfHwgc2F2ZU9uID09PSBcImNtZC1lbnRlclwiKSB7XG4gICAgICAgIGlmIChjbWQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGNvbW1pdChkcmFmdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgY2xhc3NOYW1lID0gcHJvcHMuY2xhc3NOYW1lID8gYCR7Y2xhc3Nlc1tcInJvb3RcIl19ICR7cHJvcHMuY2xhc3NOYW1lfWAgOiBjbGFzc2VzW1wicm9vdFwiXTtcblxuICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qIGZvcndhcmRlZCBvbnRvIHdoaWNoZXZlciBlbGVtZW50IGlzIHRoZSByb290XG4gIC8vIGZvciB0aGUgY3VycmVudCBtb2RlOyB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXMgd2luIG9uIGNvbGxpc2lvbi5cbiAgY29uc3QgcGFzc3Rocm91Z2ggPSBjb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpO1xuXG4gIGlmIChtb2RlID09PSBcInZpZXdcIikge1xuICAgIGNvbnN0IHJlbmRlcmVkID0gcHJvcHMucmVuZGVyVmlldyA/IHByb3BzLnJlbmRlclZpZXcocHJvcHMudmFsdWUpIDogcHJvcHMudmFsdWU7XG4gICAgY29uc3QgaXNFbXB0eSA9IHByb3BzLnZhbHVlLmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4gKFxuICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS91c2VTZW1hbnRpY0VsZW1lbnRzOiA8YnV0dG9uPiB3b3VsZCBzd2FsbG93IHRleHQgc2VsZWN0aW9uIGFuZCBhZGQgZGVmYXVsdCBzdHlsaW5nOyBkaXYgd2l0aCByb2xlPWJ1dHRvbiBpcyB0aGUgaW5saW5lLWVkaXQgaWRpb20uXG4gICAgICA8ZGl2XG4gICAgICAgIHsuLi5wYXNzdGhyb3VnaH1cbiAgICAgICAgY2xhc3M9e2Ake2NsYXNzTmFtZX0gJHtjbGFzc2VzW1widmlld1wiXX1gfVxuICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgIGRhdGEtcG9sbHktYWN0aW9uLWlucHV0XG4gICAgICAgIGRhdGEtcG9sbHktaW50ZXJhY3RpdmVcbiAgICAgICAgZGF0YS1zdGF0ZT17aXNFbXB0eSA/IFwiZW1wdHlcIiA6IFwiZmlsbGVkXCJ9XG4gICAgICAgIGRhdGEtdmFyaWFudD17dmFyaWFudH1cbiAgICAgICAgdGFiSW5kZXg9e3Byb3BzLmRpc2FibGVkID8gLTEgOiAwfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgYXJpYS1sYWJlbD17cHJvcHMuYXJpYUxhYmVsID8/IFwiRWRpdFwifVxuICAgICAgICBhcmlhLWRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZCA/IFwidHJ1ZVwiIDogdW5kZWZpbmVkfVxuICAgICAgICBvbkNsaWNrPXtlbnRlckVkaXR9XG4gICAgICAgIG9uS2V5RG93bj17KGUpID0+IHtcbiAgICAgICAgICBpZiAoZS5rZXkgPT09IFwiRW50ZXJcIiB8fCBlLmtleSA9PT0gXCIgXCIpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGVudGVyRWRpdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge2lzRW1wdHkgJiYgcHJvcHMucGxhY2Vob2xkZXIgPyAoXG4gICAgICAgICAgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJwbGFjZWhvbGRlclwiXX0+e3Byb3BzLnBsYWNlaG9sZGVyfTwvc3Bhbj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICByZW5kZXJlZFxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGNvbW1vbiA9IHtcbiAgICAuLi5wYXNzdGhyb3VnaCxcbiAgICBjbGFzczogYCR7Y2xhc3Nlc1tcImVkaXRcIl19ICR7Y2xhc3Nlc1tcInJvb3RcIl19YCxcbiAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9sbHktYWN0aW9uLWlucHV0XCI6IHRydWUsXG4gICAgXCJkYXRhLXN0YXRlXCI6IFwiZWRpdGluZ1wiLFxuICAgIFwiZGF0YS12YXJpYW50XCI6IHZhcmlhbnQsXG4gICAgcGxhY2Vob2xkZXI6IHByb3BzLnBsYWNlaG9sZGVyLFxuICAgIHZhbHVlOiBkcmFmdCxcbiAgICBvbklucHV0OiAoZTogSlNYLlRhcmdldGVkRXZlbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgICAgc2V0RHJhZnQobmV4dCk7XG4gICAgICBpZiAobGl2ZSkgY29tbWl0KG5leHQpO1xuICAgIH0sXG4gICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICBpZiAoc2F2ZU9uID09PSBcImJsdXJcIikgY29tbWl0KGRyYWZ0KTtcbiAgICAgIGVsc2UgaWYgKCFsaXZlKSBjYW5jZWwoKTtcbiAgICB9LFxuICAgIG9uS2V5RG93bixcbiAgICBcImFyaWEtbGFiZWxcIjogcHJvcHMuYXJpYUxhYmVsID8/IFwiRWRpdFwiLFxuICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCxcbiAgfTtcblxuICBpZiAodmFyaWFudCA9PT0gXCJtdWx0aVwiKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDx0ZXh0YXJlYVxuICAgICAgICByZWY9eyhlbCkgPT4ge1xuICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQgPSBlbDtcbiAgICAgICAgfX1cbiAgICAgICAgey4uLihjb21tb24gYXMgdW5rbm93biBhcyBKU1guSFRNTEF0dHJpYnV0ZXM8SFRNTFRleHRBcmVhRWxlbWVudD4pfVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHJldHVybiAoXG4gICAgPGlucHV0XG4gICAgICByZWY9eyhlbCkgPT4ge1xuICAgICAgICBpbnB1dFJlZi5jdXJyZW50ID0gZWw7XG4gICAgICB9fVxuICAgICAgdHlwZT17cHJvcHMuaW5wdXRUeXBlID8/IFwidGV4dFwifVxuICAgICAgey4uLihjb21tb24gYXMgdW5rbm93biBhcyBKU1guSFRNTEF0dHJpYnV0ZXM8SFRNTElucHV0RWxlbWVudD4pfVxuICAgIC8+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogTGF5b3V0IOKAlCB0aGUgb25lIHByaW1pdGl2ZSB0aGF0IG93bnMgbGF5b3V0aW5nIGNvbmNlcm5zLlxuICpcbiAqIEV2ZXJ5IG90aGVyIGNvbXBvbmVudCBpbiBAZmFpcmZveC9wb2xseS91aSAoYW5kIGV2ZXJ5IGNvbnN1bWVyIGFwcFxuICogdGhhdCBydW5zIGBwb2xseSBxdWFsaXR5IGNzcy1sYXlvdXRgKSByb3V0ZXMgZmxleC9ncmlkIGRlY2lzaW9uc1xuICogdGhyb3VnaCB0aGlzIGNvbXBvbmVudC4gUHJvcHMgbWFwIHRvIENTUyBjdXN0b20gcHJvcGVydGllcyBzbyB0aGVcbiAqIHN0eWxlc2hlZXQgY2FuIHJlYWQgdGhlbSB1bmlmb3JtbHkgYW5kIHNvIGNvbnN1bWVycyBjYW4gb3ZlcnJpZGVcbiAqIGFueSBvZiB0aGVtIGluIG1lZGlhIHF1ZXJpZXMgd2l0aG91dCB0b3VjaGluZyBzcGVjaWZpY2l0eS5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIENvbXBvbmVudENoaWxkcmVuLCBjcmVhdGVFbGVtZW50LCB0eXBlIEpTWCwgdHlwZSBSZWYgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9MYXlvdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBMYXlvdXRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoZGl2LCBzZWN0aW9uLCBoZWFkZXIsIG5hdiwg4oCmKS4gRGVmYXVsdHMgdG8gJ2RpdicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuXG4gIC8qKiBDU1MgZ3JpZCBzdHJ1Y3R1cmUuICovXG4gIHJvd3M/OiBzdHJpbmc7XG4gIGNvbHVtbnM/OiBzdHJpbmc7XG4gIGF1dG9GbG93Pzogc3RyaW5nO1xuICBhdXRvUm93cz86IHN0cmluZztcbiAgYXV0b0NvbHVtbnM/OiBzdHJpbmc7XG5cbiAgLyoqIGRpc3BsYXk6IGNvbnRlbnRzIOKAlCBsZXRzIGNoaWxkcmVuIHBhcnRpY2lwYXRlIGluIGFuIGFuY2VzdG9yIGdyaWQuICovXG4gIGNvbnRlbnRzPzogYm9vbGVhbjtcbiAgLyoqIEluaGVyaXQgcGFyZW50IGdyaWQgdHJhY2tzIHZpYSBDU1Mgc3ViZ3JpZC4gKi9cbiAgc3ViZ3JpZD86IGJvb2xlYW47XG5cbiAgLyoqIFNwYWNpbmcuICovXG4gIGdhcD86IHN0cmluZztcbiAgcGFkZGluZz86IHN0cmluZztcblxuICAvKiogU2l6aW5nLiAqL1xuICBoZWlnaHQ/OiBzdHJpbmc7XG4gIG1pbkhlaWdodD86IHN0cmluZztcbiAgLyoqXG4gICAqIENhcCB0aGUgaW5saW5lIHNpemUgYW5kIGNlbnRyZSB3aXRoaW4gdGhlIHBhcmVudC4gVHlwaWNhbCB2YWx1ZXMgdXNlIHRoZVxuICAgKiBgLS1wb2xseS1tZWFzdXJlLSpgIHRva2VucyAoZS5nLiBcInZhcigtLXBvbGx5LW1lYXN1cmUtcGFnZSlcIiBmb3IgYW4gYXBwXG4gICAqIHNoZWxsLCBcInZhcigtLXBvbGx5LW1lYXN1cmUtcHJvc2UpXCIgZm9yIGJvZHkgY29weSkuIEFueSBDU1MgbGVuZ3RoIHdvcmtzLlxuICAgKi9cbiAgbWF4SW5saW5lU2l6ZT86IHN0cmluZztcblxuICAvKiogQ29udGFpbmVyIGFsaWdubWVudC4gKi9cbiAganVzdGlmeUl0ZW1zPzogc3RyaW5nO1xuICBhbGlnbkl0ZW1zPzogc3RyaW5nO1xuICBqdXN0aWZ5Q29udGVudD86IHN0cmluZztcbiAgYWxpZ25Db250ZW50Pzogc3RyaW5nO1xuXG4gIC8qKiBTZWxmIGFsaWdubWVudCAod2hlbiB0aGlzIExheW91dCBpcyBhbiBpdGVtIGluIGEgcGFyZW50IGdyaWQpLiAqL1xuICBqdXN0aWZ5U2VsZj86IHN0cmluZztcbiAgYWxpZ25TZWxmPzogc3RyaW5nO1xuXG4gIC8qKiBDb2xsYXBzZSB0byBhIHNpbmdsZSBjb2x1bW4gYXQg4omkNjQwcHguICovXG4gIHN0YWNrT25Nb2JpbGU/OiBib29sZWFuO1xuXG4gIC8qKiBSZW5kZXIgYXMgZGlzcGxheTogaW5saW5lLWdyaWQgc28gdGhlIExheW91dCBmbG93cyBpbmxpbmUgd2l0aCBzdXJyb3VuZGluZyB0ZXh0L2NvbnRyb2xzLiAqL1xuICBpbmxpbmU/OiBib29sZWFuO1xuXG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgb25DbGljaz86IEpTWC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gIG9uS2V5RG93bj86IEpTWC5LZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gIG9uS2V5VXA/OiBKU1guS2V5Ym9hcmRFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICAvKiogUG9pbnRlci1lbnRlci9sZWF2ZSBvbiB0aGUgY29udGFpbmVyIGl0c2VsZiDigJQgYSBob3Zlci1zY29wZWQgYmVoYXZpb3VyXG4gICAqIHN1Y2ggYXMgcGF1c2luZyBhIHRpbWVyIHdoaWxlIHRoZSBwb2ludGVyIGlzIG92ZXIgYSBzdGFjay4gV2l0aG91dCB0aGVzZVxuICAgKiBhIGNvbXBvbmVudCB0aGF0IG5lZWRzIG9uZSBoYXMgdG8gcmVuZGVyIGl0cyBvd24gZWxlbWVudCBhbmQgd3JpdGUgaXRzXG4gICAqIG93biBncmlkLCB3aGljaCBpcyB0aGUgbG9vcGhvbGUgPExheW91dD4gZXhpc3RzIHRvIGNsb3NlLiAqL1xuICBvbk1vdXNlRW50ZXI/OiBKU1guTW91c2VFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICBvbk1vdXNlTGVhdmU/OiBKU1guTW91c2VFdmVudEhhbmRsZXI8SFRNTEVsZW1lbnQ+O1xuICAvKiogUmVmIHRvIHRoZSByZW5kZXJlZCBlbGVtZW50LiBTYW1lIHJlYXNvbiBhcyB0aGUgaGFuZGxlcnMgYWJvdmU6IGEgZm9jdXNcbiAgICogdHJhcCBvciBhIG1lYXN1cmVtZW50IG5lZWRzIHRoZSBub2RlLCBhbmQgcmVmdXNpbmcgaXQgZm9yY2VzIHJhdyBDU1MuXG4gICAqXG4gICAqIE5hbWVkIGBlbGVtZW50UmVmYCwgbm90IGByZWZgOiBQcmVhY3QgbGlmdHMgYSBgcmVmYCBwcm9wIG9mZiBhIGZ1bmN0aW9uXG4gICAqIGNvbXBvbmVudCBpbnRvIHRoZSB2bm9kZSBhbmQgbmV2ZXIgcGFzc2VzIGl0IHRocm91Z2ggcHJvcHMsIHNvIGEgcGxhaW5cbiAgICogYHJlZmAgaGVyZSB3b3VsZCBiZSBzaWxlbnRseSBkcm9wcGVkLiBDYXVnaHQgYnkgTW9kYWwncyBvdmVybGF5IHRlc3Qg4oCUXG4gICAqIHRoZSBzdGFjayBzdG9wcGVkIHBvcHBpbmcgYmVjYXVzZSB0aGUgY2FsbGJhY2sgbmV2ZXIgcmFuLiAqL1xuICBlbGVtZW50UmVmPzogUmVmPEhUTUxFbGVtZW50PjtcblxuICByb2xlPzogSlNYLkFyaWFSb2xlO1xuICB0YWJJbmRleD86IG51bWJlcjtcbiAgaWQ/OiBzdHJpbmc7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxsZWRieVwiPzogc3RyaW5nO1xuICBcImFyaWEtZGVzY3JpYmVkYnlcIj86IHN0cmluZztcbn07XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBzaXh0ZWVuIG9wdGlvbmFsIHByb3AtdG8tY3VzdG9tLXByb3BlcnR5IG1hcHBpbmdzOyBmbGF0IGFuZCBsaW5lYXIuXG5leHBvcnQgZnVuY3Rpb24gTGF5b3V0KHByb3BzOiBMYXlvdXRQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGFzID0gXCJkaXZcIixcbiAgICByb3dzLFxuICAgIGNvbHVtbnMsXG4gICAgY29udGVudHMsXG4gICAgc3ViZ3JpZCxcbiAgICBnYXAsXG4gICAgcGFkZGluZyxcbiAgICBoZWlnaHQsXG4gICAgbWluSGVpZ2h0LFxuICAgIG1heElubGluZVNpemUsXG4gICAganVzdGlmeUl0ZW1zLFxuICAgIGFsaWduSXRlbXMsXG4gICAganVzdGlmeUNvbnRlbnQsXG4gICAgYWxpZ25Db250ZW50LFxuICAgIGp1c3RpZnlTZWxmLFxuICAgIGFsaWduU2VsZixcbiAgICBhdXRvRmxvdyxcbiAgICBhdXRvUm93cyxcbiAgICBhdXRvQ29sdW1ucyxcbiAgICBzdGFja09uTW9iaWxlLFxuICAgIGlubGluZSxcbiAgICBjbGFzc05hbWUsXG4gICAgb25DbGljayxcbiAgICBvbktleURvd24sXG4gICAgb25LZXlVcCxcbiAgICBvbk1vdXNlRW50ZXIsXG4gICAgb25Nb3VzZUxlYXZlLFxuICAgIGVsZW1lbnRSZWYsXG4gICAgcm9sZSxcbiAgICB0YWJJbmRleCxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgaWYgKGNvbnRlbnRzKSB7XG4gICAgc3R5bGVbXCJkaXNwbGF5XCJdID0gXCJjb250ZW50c1wiO1xuICB9IGVsc2UgaWYgKHN1YmdyaWQpIHtcbiAgICBzdHlsZVtcIi0tbC1jb2xcIl0gPSBcIjEgLyAtMVwiO1xuICAgIHN0eWxlW1wiLS1sLWNvbHNcIl0gPSBcInN1YmdyaWRcIjtcbiAgICBpZiAocGFkZGluZykgc3R5bGVbXCItLWwtcFwiXSA9IHBhZGRpbmc7XG4gICAgaWYgKGFsaWduSXRlbXMpIHN0eWxlW1wiLS1sLWFpXCJdID0gYWxpZ25JdGVtcztcbiAgICBpZiAoZ2FwKSBzdHlsZVtcIi0tbC1nYXBcIl0gPSBnYXA7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHBhZGRpbmcpIHN0eWxlW1wiLS1sLXBcIl0gPSBwYWRkaW5nO1xuICAgIGlmIChoZWlnaHQpIHN0eWxlW1wiLS1sLWhcIl0gPSBoZWlnaHQ7XG4gICAgaWYgKG1pbkhlaWdodCkgc3R5bGVbXCItLWwtbWhcIl0gPSBtaW5IZWlnaHQ7XG4gICAgaWYgKG1heElubGluZVNpemUpIHN0eWxlW1wiLS1sLW1pc1wiXSA9IG1heElubGluZVNpemU7XG4gICAgaWYgKHJvd3MpIHN0eWxlW1wiLS1sLXJvd3NcIl0gPSByb3dzO1xuICAgIGlmIChjb2x1bW5zKSBzdHlsZVtcIi0tbC1jb2xzXCJdID0gY29sdW1ucztcbiAgICBpZiAoZ2FwKSBzdHlsZVtcIi0tbC1nYXBcIl0gPSBnYXA7XG4gICAgaWYgKGp1c3RpZnlJdGVtcykgc3R5bGVbXCItLWwtamlcIl0gPSBqdXN0aWZ5SXRlbXM7XG4gICAgaWYgKGFsaWduSXRlbXMpIHN0eWxlW1wiLS1sLWFpXCJdID0gYWxpZ25JdGVtcztcbiAgICBpZiAoanVzdGlmeUNvbnRlbnQpIHN0eWxlW1wiLS1sLWpjXCJdID0ganVzdGlmeUNvbnRlbnQ7XG4gICAgaWYgKGFsaWduQ29udGVudCkgc3R5bGVbXCItLWwtYWNcIl0gPSBhbGlnbkNvbnRlbnQ7XG4gICAgaWYgKGF1dG9GbG93KSBzdHlsZVtcIi0tbC1mbG93XCJdID0gYXV0b0Zsb3c7XG4gICAgaWYgKGF1dG9Sb3dzKSBzdHlsZVtcIi0tbC1hcm93c1wiXSA9IGF1dG9Sb3dzO1xuICAgIGlmIChhdXRvQ29sdW1ucykgc3R5bGVbXCItLWwtYWNvbHNcIl0gPSBhdXRvQ29sdW1ucztcbiAgfVxuICBpZiAoanVzdGlmeVNlbGYpIHN0eWxlW1wiLS1sLWpzXCJdID0ganVzdGlmeVNlbGY7XG4gIGlmIChhbGlnblNlbGYpIHN0eWxlW1wiLS1sLWFzXCJdID0gYWxpZ25TZWxmO1xuXG4gIGNvbnN0IGJhc2VQYXJ0cyA9IFtjbGFzc2VzW1wibGF5b3V0XCJdXTtcbiAgaWYgKGlubGluZSkgYmFzZVBhcnRzLnB1c2goY2xhc3Nlc1tcImlubGluZVwiXSk7XG4gIGlmIChzdGFja09uTW9iaWxlKSBiYXNlUGFydHMucHVzaChjbGFzc2VzW1wic3RhY2tPbk1vYmlsZVwiXSk7XG4gIGNvbnN0IGJhc2VDbGFzcyA9IGJhc2VQYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XG4gIGNvbnN0IGNvbWJpbmVkID0gY29udGVudHMgPyBjbGFzc05hbWUgOiBjbGFzc05hbWUgPyBgJHtiYXNlQ2xhc3N9ICR7Y2xhc3NOYW1lfWAgOiBiYXNlQ2xhc3M7XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKi90aXRsZSBmaXJzdDsgdGhlIHByaW1pdGl2ZSdzIG93blxuICAgICAgLy8gYXR0cmlidXRlcyBiZWxvdyB3aW4gb24gYW55IGNvbGxpc2lvbi5cbiAgICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgICBpZCxcbiAgICAgIGNsYXNzTmFtZTogY29tYmluZWQsXG4gICAgICBzdHlsZSxcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvbktleURvd24sXG4gICAgICBvbktleVVwLFxuICAgICAgb25Nb3VzZUVudGVyLFxuICAgICAgb25Nb3VzZUxlYXZlLFxuICAgICAgcmVmOiBlbGVtZW50UmVmLFxuICAgICAgcm9sZSxcbiAgICAgIHRhYkluZGV4LFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzW1wiYXJpYS1sYWJlbFwiXSxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHByb3BzW1wiYXJpYS1sYWJlbGxlZGJ5XCJdLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHByb3BzW1wiYXJpYS1kZXNjcmliZWRieVwiXSxcbiAgICAgIFwiZGF0YS1wb2xseS1sYXlvdXRcIjogdHJ1ZSxcbiAgICB9LFxuICAgIGNoaWxkcmVuXG4gICk7XG59XG4iLAogICAgIi8qKlxuICogRHJvcGRvd24g4oCUIHRyaWdnZXIgYnV0dG9uICsgcG9wb3ZlciBtZW51IHVzaW5nIHRoZSBuYXRpdmUgUG9wb3ZlciBBUEkuXG4gKlxuICogQSBzaG93biBwb3BvdmVyIGlzIHByb21vdGVkIHRvIHRoZSBicm93c2VyJ3MgdG9wIGxheWVyLCB3aGVyZSBDU1NcbiAqIHBvc2l0aW9uaW5nIHJlc29sdmVzIGFnYWluc3QgdGhlIHZpZXdwb3J0IHJhdGhlciB0aGFuIHRoZSBgLmRyb3Bkb3duYFxuICogd3JhcHBlciDigJQgc28gdGhlIG1lbnUgY2Fubm90IGJlIHBsYWNlZCB3aXRoIGBwb3NpdGlvbjogYWJzb2x1dGVgXG4gKiBhbG9uZS4gSW5zdGVhZCBpdCBpcyBwaW5uZWQgd2l0aCBgcG9zaXRpb246IGZpeGVkYCBhbmQgY29vcmRpbmF0ZXNcbiAqIG1lYXN1cmVkIGZyb20gdGhlIHRyaWdnZXI7IHNlZSBgcG9zaXRpb25NZW51YCBiZWxvdyAoaXNzdWUgIzEyOCkuXG4gKlxuICogVGhlIG1lbnUgZWxlbWVudCBnZXRzIGBwb3BvdmVyPVwiYXV0b1wiYCBhbmQgYSB1bmlxdWUgYGRhdGEtb3ZlcmxheS1pZGAuXG4gKiBgY2xvc2VUb3BPdmVybGF5KClgIGZyb20gQGZhaXJmb3gvcG9sbHkvYWN0aW9ucyBmaW5kcyB0aGUgdG9wbW9zdFxuICogYFtkYXRhLW92ZXJsYXktaWRdYCBlbGVtZW50IGFuZCBkaXNwYXRjaGVzIGBvdmVybGF5OmNsb3NlYCDigJQgdGhlXG4gKiBEcm9wZG93biBsaXN0ZW5zIGZvciB0aGF0IGV2ZW50IGFuZCBtaXJyb3JzIGl0IG9udG8gdGhlIGBpc09wZW5gXG4gKiBzaWduYWwuIEluIHNpbmdsZS1zZWxlY3QgbW9kZSwgY2xpY2tpbmcgdGhlIG1lbnUgY2xvc2VzIGl0OyBpblxuICogbXVsdGktc2VsZWN0IG1vZGUsIHRoZSBtZW51IHN0YXlzIG9wZW4gc28gdGhlIGNvbnN1bWVyIGNhbiBwaWNrXG4gKiBzZXZlcmFsIGl0ZW1zLlxuICovXG5cbmltcG9ydCB7IHR5cGUgU2lnbmFsLCB1c2VTaWduYWxFZmZlY3QgfSBmcm9tIFwiQHByZWFjdC9zaWduYWxzXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL0Ryb3Bkb3duLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgRHJvcGRvd25Qcm9wcyA9IHtcbiAgaXNPcGVuOiBTaWduYWw8Ym9vbGVhbj47XG4gIHRyaWdnZXI6IENvbXBvbmVudENoaWxkcmVuO1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcInJpZ2h0XCI7XG4gIG11bHRpU2VsZWN0PzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogQ2xhc3MgYXBwbGllZCB0byB0aGUgdHJpZ2dlciA8YnV0dG9uPiBpbiBwbGFjZSBvZiBEcm9wZG93bidzIG93blxuICAgKiBkZWZhdWx0LiBMZXRzIGEgY29tcG9zaW5nIGNvbXBvbmVudCAoU2VsZWN0LCBBY3Rpb25TZWxlY3QpIHN0eWxlXG4gICAqIHRoZSBzaW5nbGUgaW50ZXJhY3RpdmUgZWxlbWVudCBkaXJlY3RseSwgd2l0aCBubyBzdHlsZWQgbm9kZVxuICAgKiBuZXN0ZWQgaW5zaWRlIHRoZSBidXR0b24uIFRoZSB0cmlnZ2VyIGFsc28gY2FycmllcyBhXG4gICAqIGBkYXRhLW9wZW49XCJ0cnVlfGZhbHNlXCJgIGF0dHJpYnV0ZSBtaXJyb3JpbmcgYGlzT3BlbmAsIHNvIHRoZVxuICAgKiBjbGFzcyBjYW4gc3R5bGUgb3Blbi1zdGF0ZSBhZmZvcmRhbmNlcyAoZS5nLiBhIHJvdGF0aW5nIGNhcmV0KS5cbiAgICovXG4gIHRyaWdnZXJDbGFzc05hbWU/OiBzdHJpbmc7XG4gIC8qKiBEaXNhYmxlcyB0aGUgdHJpZ2dlciA8YnV0dG9uPi4gKi9cbiAgdHJpZ2dlckRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE5hdGl2ZSBob3ZlciB0b29sdGlwIG9uIHRoZSB0cmlnZ2VyIDxidXR0b24+LiBTZWxlY3QvQWN0aW9uU2VsZWN0XG4gICAqIHBhc3MgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHNvIGEgdHJ1bmNhdGVkIHRyaWdnZXIgc3RpbGwgcmV2ZWFscyBpdHNcbiAgICogZnVsbCB2YWx1ZSBvbiBob3Zlci5cbiAgICovXG4gIHRyaWdnZXJUaXRsZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5sZXQgZHJvcGRvd25Db3VudGVyID0gMDtcblxuLyoqIEdhcCBpbiBweCB0aGUgbWVudSBsZWF2ZXMgYmV0d2VlbiBpdHNlbGYgYW5kIHRoZSB0cmlnZ2VyLiAqL1xuY29uc3QgTUVOVV9HQVAgPSA0O1xuLyoqIE1pbmltdW0gZ2FwIGluIHB4IHRoZSBtZW51IGtlZXBzIGZyb20gZXZlcnkgdmlld3BvcnQgZWRnZS4gKi9cbmNvbnN0IFZJRVdQT1JUX1BBRERJTkcgPSA4O1xuXG5leHBvcnQgZnVuY3Rpb24gRHJvcGRvd24ocHJvcHM6IERyb3Bkb3duUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBpc09wZW4sXG4gICAgdHJpZ2dlcixcbiAgICBjaGlsZHJlbixcbiAgICBhbGlnbiA9IFwibGVmdFwiLFxuICAgIG11bHRpU2VsZWN0ID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICAgIHRyaWdnZXJDbGFzc05hbWUsXG4gICAgdHJpZ2dlckRpc2FibGVkID0gZmFsc2UsXG4gICAgdHJpZ2dlclRpdGxlLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgbWVudVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IHRyaWdnZXJSZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBpZFJlZiA9IHVzZVJlZihgcG9sbHktZHJvcGRvd24tJHsrK2Ryb3Bkb3duQ291bnRlcn1gKTtcbiAgY29uc3QgcG9wb3ZlcklkID0gaWRSZWYuY3VycmVudDtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHRyaWdnZXJSZWYuY3VycmVudD8uc2V0QXR0cmlidXRlKFwicG9wb3ZlcnRhcmdldFwiLCBwb3BvdmVySWQpO1xuICB9LCBbcG9wb3ZlcklkXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZW51ID0gbWVudVJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSkgcmV0dXJuO1xuICAgIGNvbnN0IG9uT3ZlcmxheUNsb3NlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIEN1c3RvbUV2ZW50ICYmIGUuZGV0YWlsPy5pZCA9PT0gcG9wb3ZlcklkKSB7XG4gICAgICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH07XG4gICAgbWVudS5hZGRFdmVudExpc3RlbmVyKFwib3ZlcmxheTpjbG9zZVwiLCBvbk92ZXJsYXlDbG9zZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIG1lbnUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm92ZXJsYXk6Y2xvc2VcIiwgb25PdmVybGF5Q2xvc2UpO1xuICAgIH07XG4gIH0sIFtwb3BvdmVySWQsIGlzT3Blbl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWVudSA9IG1lbnVSZWYuY3VycmVudDtcbiAgICBjb25zdCB0cmlnZ2VyID0gdHJpZ2dlclJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSB8fCAhdHJpZ2dlcikgcmV0dXJuO1xuXG4gICAgLy8gUGluIHRoZSB0b3AtbGF5ZXIgbWVudSB0byBpdHMgdHJpZ2dlciB3aXRoIHZpZXdwb3J0IGNvb3JkaW5hdGVzLlxuICAgIC8vIFJ1biBmcm9tIGBiZWZvcmV0b2dnbGVgIHRoaXMgaGFwcGVucyBzeW5jaHJvbm91c2x5IGJlZm9yZSB0aGVcbiAgICAvLyBwb3BvdmVyIHBhaW50cywgc28gdGhlIG1lbnUgaXMgY29ycmVjdCBvbiBpdHMgZmlyc3QgZnJhbWUg4oCUIG5vXG4gICAgLy8gZmxhc2guIFJ1biBmcm9tIHNjcm9sbC9yZXNpemUgaXQga2VlcHMgdGhlIG1lbnUgcGlubmVkLlxuICAgIGNvbnN0IHBvc2l0aW9uTWVudSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IHQgPSB0cmlnZ2VyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAvLyBBIG5vdC15ZXQtc2hvd24gcG9wb3ZlciBpcyBgZGlzcGxheTogbm9uZWAgYW5kIGhhcyBubyBib3ggdG9cbiAgICAgIC8vIG1lYXN1cmUuIEZvcmNlIGxheW91dCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSAoc3luY2hyb25vdXMpXG4gICAgICAvLyByZWFkLCB0aGVuIHJlc3RvcmUg4oCUIG5vdGhpbmcgcGFpbnRzIGluIGJldHdlZW4uIENsZWFyaW5nIHRoZVxuICAgICAgLy8gaW5saW5lIG1heC1oZWlnaHQgZmlyc3QgbWVhc3VyZXMgdGhlIG1lbnUncyBuYXR1cmFsIHNpemUuXG4gICAgICBjb25zdCBwcmV2RGlzcGxheSA9IG1lbnUuc3R5bGUuZGlzcGxheTtcbiAgICAgIG1lbnUuc3R5bGUubWF4SGVpZ2h0ID0gXCJcIjtcbiAgICAgIG1lbnUuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIGNvbnN0IG1lbnVXaWR0aCA9IG1lbnUub2Zmc2V0V2lkdGg7XG4gICAgICBjb25zdCBtZW51SGVpZ2h0ID0gbWVudS5vZmZzZXRIZWlnaHQ7XG4gICAgICBtZW51LnN0eWxlLmRpc3BsYXkgPSBwcmV2RGlzcGxheTtcblxuICAgICAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgLy8gSG9yaXpvbnRhbDogYWxpZ24gbGVmdCBlZGdlcyAocmlnaHQgZWRnZXMgd2hlbiBhbGlnbj1cInJpZ2h0XCIpLFxuICAgICAgLy8gdGhlbiBjbGFtcCBzbyB0aGUgbWVudSBuZXZlciBvdmVyZmxvd3MgYSB2aWV3cG9ydCBlZGdlLiBVbmRlclxuICAgICAgLy8gUlRMIHRoZSBcImxlZnRcIiBkZWZhdWx0IHJlYWRzIGFzIHRoZSBpbmxpbmUtc3RhcnQgZWRnZSwgd2hpY2hcbiAgICAgIC8vIGlzIHRoZSB0cmlnZ2VyJ3MgKnJpZ2h0KiBlZGdlIOKAlCBmbGlwIHRoZSBhbmNob3Igc28gdGhlIG1lbnVcbiAgICAgIC8vIGdyb3dzIHRvd2FyZCB0aGUgaW5saW5lLWVuZCBsaWtlIGl0cyBuYXRpdmUgY291bnRlcnBhcnQuXG4gICAgICBjb25zdCBpc1J0bCA9XG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUodHJpZ2dlcikuZGlyZWN0aW9uID09PSBcInJ0bFwiIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIgPT09IFwicnRsXCI7XG4gICAgICBjb25zdCBwaHlzaWNhbFJpZ2h0ID0gKGlzUnRsICYmIGFsaWduID09PSBcImxlZnRcIikgfHwgYWxpZ24gPT09IFwicmlnaHRcIjtcbiAgICAgIGxldCBsZWZ0ID0gcGh5c2ljYWxSaWdodCA/IHQucmlnaHQgLSBtZW51V2lkdGggOiB0LmxlZnQ7XG4gICAgICBjb25zdCBtYXhMZWZ0ID0gTWF0aC5tYXgoVklFV1BPUlRfUEFERElORywgdmlld3BvcnRXaWR0aCAtIG1lbnVXaWR0aCAtIFZJRVdQT1JUX1BBRERJTkcpO1xuICAgICAgbGVmdCA9IE1hdGgubWluKE1hdGgubWF4KGxlZnQsIFZJRVdQT1JUX1BBRERJTkcpLCBtYXhMZWZ0KTtcblxuICAgICAgLy8gVmVydGljYWw6IGJlbG93IHRoZSB0cmlnZ2VyIGJ5IGRlZmF1bHQ7IGZsaXAgYWJvdmUgd2hlbiB0aGF0XG4gICAgICAvLyBsZWF2ZXMgbW9yZSByb29tLiBDYXAgdGhlIGhlaWdodCB0byB0aGUgc3BhY2UgYXZhaWxhYmxlIHNvIHRoZVxuICAgICAgLy8gbWVudSBhbHdheXMgc3RheXMgb24tc2NyZWVuLlxuICAgICAgY29uc3Qgc3BhY2VCZWxvdyA9IHZpZXdwb3J0SGVpZ2h0IC0gdC5ib3R0b20gLSBNRU5VX0dBUCAtIFZJRVdQT1JUX1BBRERJTkc7XG4gICAgICBjb25zdCBzcGFjZUFib3ZlID0gdC50b3AgLSBNRU5VX0dBUCAtIFZJRVdQT1JUX1BBRERJTkc7XG4gICAgICBsZXQgdG9wOiBudW1iZXI7XG4gICAgICBpZiAobWVudUhlaWdodCA8PSBzcGFjZUJlbG93IHx8IHNwYWNlQmVsb3cgPj0gc3BhY2VBYm92ZSkge1xuICAgICAgICB0b3AgPSB0LmJvdHRvbSArIE1FTlVfR0FQO1xuICAgICAgICBpZiAobWVudUhlaWdodCA+IHNwYWNlQmVsb3cpIHtcbiAgICAgICAgICBtZW51LnN0eWxlLm1heEhlaWdodCA9IGAke01hdGgubWF4KHNwYWNlQmVsb3csIDApfXB4YDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlID0gTWF0aC5tYXgoc3BhY2VBYm92ZSwgMCk7XG4gICAgICAgIG1lbnUuc3R5bGUubWF4SGVpZ2h0ID0gYCR7YXZhaWxhYmxlfXB4YDtcbiAgICAgICAgdG9wID0gdC50b3AgLSBNRU5VX0dBUCAtIE1hdGgubWluKG1lbnVIZWlnaHQsIGF2YWlsYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIG1lbnUuc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XG4gICAgICBtZW51LnN0eWxlLm1hcmdpbiA9IFwiMFwiO1xuICAgICAgbWVudS5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XG4gICAgICBtZW51LnN0eWxlLnRvcCA9IGAke3RvcH1weGA7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uQmVmb3JlVG9nZ2xlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBpZiAoXCJuZXdTdGF0ZVwiIGluIGUgJiYgZS5uZXdTdGF0ZSA9PT0gXCJvcGVuXCIpIHtcbiAgICAgICAgcG9zaXRpb25NZW51KCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvblJlcG9zaXRpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAobWVudS5tYXRjaGVzKFwiOnBvcG92ZXItb3BlblwiKSkgcG9zaXRpb25NZW51KCk7XG4gICAgfTtcblxuICAgIG1lbnUuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXRvZ2dsZVwiLCBvbkJlZm9yZVRvZ2dsZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25SZXBvc2l0aW9uLCB0cnVlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBvblJlcG9zaXRpb24pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBtZW51LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmV0b2dnbGVcIiwgb25CZWZvcmVUb2dnbGUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgb25SZXBvc2l0aW9uLCB0cnVlKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIG9uUmVwb3NpdGlvbik7XG4gICAgfTtcbiAgfSwgW2FsaWduXSk7XG5cbiAgdXNlU2lnbmFsRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZW51ID0gbWVudVJlZi5jdXJyZW50O1xuICAgIGlmICghbWVudSkgcmV0dXJuO1xuICAgIGlmIChpc09wZW4udmFsdWUgJiYgIW1lbnUubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHtcbiAgICAgIG1lbnUuc2hvd1BvcG92ZXIoKTtcbiAgICB9IGVsc2UgaWYgKCFpc09wZW4udmFsdWUgJiYgbWVudS5tYXRjaGVzKFwiOnBvcG92ZXItb3BlblwiKSkge1xuICAgICAgbWVudS5oaWRlUG9wb3ZlcigpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlID0gKGU6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKFwibmV3U3RhdGVcIiBpbiBlKSB7XG4gICAgICBpc09wZW4udmFsdWUgPSAoZSBhcyB1bmtub3duIGFzIHsgbmV3U3RhdGU6IHN0cmluZyB9KS5uZXdTdGF0ZSA9PT0gXCJvcGVuXCI7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1lbnVDbGljayA9ICgpOiB2b2lkID0+IHtcbiAgICBpZiAoIW11bHRpU2VsZWN0KSB7XG4gICAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKGUua2V5ID09PSBcIkVzY2FwZVwiKSB7XG4gICAgICBpc09wZW4udmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImRyb3Bkb3duXCJdID8/IFwiXCJdO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGlkPXtpZH0gY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LWRyb3Bkb3duPlxuICAgICAgPGJ1dHRvblxuICAgICAgICByZWY9e3RyaWdnZXJSZWZ9XG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz17dHJpZ2dlckNsYXNzTmFtZSA/PyBjbGFzc2VzW1widHJpZ2dlclwiXSA/PyBcIlwifVxuICAgICAgICBkaXNhYmxlZD17dHJpZ2dlckRpc2FibGVkfVxuICAgICAgICB0aXRsZT17dHJpZ2dlclRpdGxlfVxuICAgICAgICBkYXRhLW9wZW49e2lzT3Blbi52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgPlxuICAgICAgICB7dHJpZ2dlcn1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e21lbnVSZWZ9XG4gICAgICAgIGlkPXtwb3BvdmVySWR9XG4gICAgICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICAgICAgYXJpYS1tdWx0aXNlbGVjdGFibGU9e211bHRpU2VsZWN0ID8gXCJ0cnVlXCIgOiB1bmRlZmluZWR9XG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wibWVudVwiXSA/PyBcIlwifVxuICAgICAgICBkYXRhLWFsaWduPXthbGlnbn1cbiAgICAgICAgcG9wb3Zlcj1cImF1dG9cIlxuICAgICAgICBkYXRhLW92ZXJsYXktaWQ9e3BvcG92ZXJJZH1cbiAgICAgICAgb25Ub2dnbGU9e2hhbmRsZVRvZ2dsZX1cbiAgICAgICAgb25DbGljaz17aGFuZGxlTWVudUNsaWNrfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICA+XG4gICAgICAgIDxMYXlvdXQgcm93cz1cImF1dG9cIiBnYXA9XCIwXCI+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L0xheW91dD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFNlbGVjdFRyaWdnZXIg4oCUIHRoZSBsYWJlbC9jYXJldCByb3cgaW5zaWRlIGEgc2VsZWN0IHRyaWdnZXIgYm94LlxuICpcbiAqIGAudHJpZ2dlcmAgaW4gU2VsZWN0Lm1vZHVsZS5jc3Mgc3R5bGVzIHRoZSAqYm94KjogYm9yZGVyLCBwYWRkaW5nLFxuICogYG1pbi1ibG9jay1zaXplYCwgYW5kIGBhbGlnbi1jb250ZW50OiBjZW50ZXJgIHRvIGNlbnRyZSBvbmUgY2hpbGQgaW5cbiAqIGl0LiBJdCBkZWxpYmVyYXRlbHkgZGVjbGFyZXMgbm8gZmxleCBvciBncmlkIG9mIGl0cyBvd24g4oCUIHBvbGx5LXVpXG4gKiByb3V0ZXMgZXZlcnkgbGF5b3V0IGRlY2lzaW9uIHRocm91Z2ggPExheW91dD4g4oCUIHNvIHRoZSBjb21wb25lbnRcbiAqIHRoYXQgYXBwbGllcyBgLnRyaWdnZXJgIG11c3Qgc3VwcGx5IHRoZSByb3cuXG4gKlxuICogcG9sbHkjMTgwOiB0aGF0IHJ1bGUgd2FzIGNoYW5nZWQgZm9yIG9uZSBvZiBpdHMgdHdvIGNvbnN1bWVycy5cbiAqIDxTZWxlY3Q+IGdhaW5lZCBhIDxMYXlvdXQ+OyA8QWN0aW9uU2VsZWN0Piwgd2hpY2ggYXBwbGllcyB0aGUgc2FtZVxuICogY2xhc3MgdGhyb3VnaCBEcm9wZG93bidzIGB0cmlnZ2VyQ2xhc3NOYW1lYCwga2VwdCByZW5kZXJpbmcgdHdvIGJhcmVcbiAqIGlubGluZSBzcGFucywgc28gaXRzIGNhcmV0IHdyYXBwZWQgb250byBhIHNlY29uZCBsaW5lLiBOb3RoaW5nIHRpZWRcbiAqIHRoZSBzdHlsZXNoZWV0J3MgY29udHJhY3QgdG8gdGhlIGNvbXBvbmVudHMgdGhhdCBoYWQgdG8gc2F0aXNmeSBpdC5cbiAqIFRoaXMgbW9kdWxlIGlzIHRoYXQgdGllOiBvbmUgcm93LCBvbmUgZGVmaW5pdGlvbiwgYm90aCBjb25zdW1lcnMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4uL1NlbGVjdC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdFRyaWdnZXJQcm9wcyA9IHtcbiAgLyoqIFRleHQgaW4gdGhlIHRyaWdnZXIg4oCUIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgb3IgdGhlIHBsYWNlaG9sZGVyLiAqL1xuICBsYWJlbDogc3RyaW5nO1xuICAvKipcbiAgICogUmVuZGVyIHRoZSBkcm9wZG93biBjYXJldCBiZXNpZGUgdGhlIGxhYmVsLiBPZmYgZm9yIGEgZGlzYWJsZWRcbiAgICogPEFjdGlvblNlbGVjdD4sIHdoaWNoIGlzIHN0YXRpYyB0ZXh0IHdpdGggbm8gbWVudSB0byBvcGVuLlxuICAgKi9cbiAgY2FyZXQ/OiBib29sZWFuO1xuICAvKipcbiAgICogRWxlbWVudCB0aGUgcm93IHJlbmRlcnMgYXMuIGBzcGFuYCB3aGVyZSB0aGUgdHJpZ2dlciBib3ggaXMgaXRzZWxmXG4gICAqIHBocmFzaW5nIGNvbnRlbnQg4oCUIGEgZGlzYWJsZWQgPEFjdGlvblNlbGVjdD4gcmVuZGVycyBpdHMgYm94IGFzIGFcbiAgICogPHNwYW4+LCB3aGljaCBtYXkgbm90IGNvbnRhaW4gYSA8ZGl2Pi5cbiAgICovXG4gIGFzPzogXCJkaXZcIiB8IFwic3BhblwiO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdFRyaWdnZXIocHJvcHM6IFNlbGVjdFRyaWdnZXJQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBsYWJlbCwgY2FyZXQgPSB0cnVlLCBhcyA9IFwiZGl2XCIgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxMYXlvdXRcbiAgICAgIGFzPXthc31cbiAgICAgIGlubGluZVxuICAgICAgLy8gV2l0aG91dCBhIGNhcmV0IHRoZSBzZWNvbmQgdHJhY2sgd291bGQgc3RpbGwgY29udHJpYnV0ZSBpdHMgZ2FwLFxuICAgICAgLy8gcGFkZGluZyB0aGUgdHJpZ2dlciBieSA4cHggaXQgZG9lcyBub3QgbmVlZC5cbiAgICAgIGNvbHVtbnM9e2NhcmV0ID8gXCIxZnIgYXV0b1wiIDogXCIxZnJcIn1cbiAgICAgIHsuLi4oY2FyZXQgPyB7IGdhcDogXCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIiB9IDoge30pfVxuICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICBtYXhJbmxpbmVTaXplPVwiMTAwJVwiXG4gICAgPlxuICAgICAgey8qIFRoZSAxZnIgdHJhY2sgYmxvY2tpZmllcyB0aGlzIHNwYW4sIHdoaWNoIGlzIHdoYXQgbGV0c1xuICAgICAgICAgIGB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpc2AgYXBwbHkgdG8gYSBsb25nIGxhYmVsLiAqL31cbiAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1widHJpZ2dlckxhYmVsXCJdfSBkYXRhLXBvbGx5LXNlbGVjdC1sYWJlbD5cbiAgICAgICAge2xhYmVsfVxuICAgICAgPC9zcGFuPlxuICAgICAge2NhcmV0ICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wiY2FyZXRcIl19IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+fVxuICAgIDwvTGF5b3V0PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEFjdGlvblNlbGVjdCDigJQgc2luZ2xlLXNlbGVjdCBkcm9wZG93biB0aGF0IGNvbW1pdHMgdmlhIHRoZSBhY3Rpb24gc3lzdGVtLlxuICpcbiAqIFRoZSBhY3Rpb24tZGlzcGF0Y2hpbmcgc2libGluZyBvZiA8U2VsZWN0Pi4gV2hlcmUgPFNlbGVjdD4gYmluZHMgYVxuICogYFNpZ25hbDxTZXQ8VD4+YCBhbmQgaXMgYnVpbHQgZm9yIGluLW1lbW9yeSBmaWx0ZXIgVUlzLCBBY3Rpb25TZWxlY3RcbiAqIHRha2VzIHRoZSBjdXJyZW50IGB2YWx1ZWAgYXMgYSBwbGFpbiBzdHJpbmcgYW5kIGZpcmVzIGBhY3Rpb25gIHdpdGhcbiAqIGBkYXRhLWFjdGlvbi12YWx1ZWAgc2V0IHRvIHRoZSBjaG9zZW4gb3B0aW9uIOKAlCBzbyBlZGl0aW5nIGFcbiAqIHNlcnZlci1iYWNrZWQgZmllbGQgY29tbWl0cyB0aHJvdWdoIHRoZSBzYW1lIGV2ZW50IGRlbGVnYXRpb24gYXNcbiAqIDxBY3Rpb25JbnB1dD4gYW5kIDxBY3Rpb25Gb3JtPiwgd2l0aCBubyBzeW50aGV0aWMgc2lnbmFsIG9yIGJyaWRnaW5nXG4gKiBgZWZmZWN0YCByZXF1aXJlZC5cbiAqXG4gKiBDb21wb3NlcyA8RHJvcGRvd24+IGZvciB0aGUgbWVudS4gVGhlIHRyaWdnZXIgc3R5bGluZyBpcyBhcHBsaWVkXG4gKiBkaXJlY3RseSB0byBEcm9wZG93bidzIG93biA8YnV0dG9uPiB2aWEgYHRyaWdnZXJDbGFzc05hbWVgLCBzbyB0aGVcbiAqIHZpc2libGUgYm94IGFuZCB0aGUgaW50ZXJhY3RpdmUgZWxlbWVudCBhcmUgb25lIGFuZCB0aGUgc2FtZSBub2RlIOKAlFxuICogbm8gc3R5bGVkIDxzcGFuPiBuZXN0ZWQgaW5zaWRlIGFuIHVuc3R5bGVkIDxidXR0b24+LiBBIGRpc2FibGVkXG4gKiBBY3Rpb25TZWxlY3QgcmVuZGVycyBhcyBzdGF0aWMgdGV4dCB3aXRob3V0IGEgY2FyZXQuXG4gKlxuICogQm90aCBicmFuY2hlcyByZW5kZXIgdGhlaXIgbGFiZWwvY2FyZXQgcm93IHRocm91Z2ggPFNlbGVjdFRyaWdnZXI+LFxuICogdGhlIHNhbWUgcm93IDxTZWxlY3Q+IHVzZXMg4oCUIGAudHJpZ2dlcmAgc3R5bGVzIHRoZSBib3ggYW5kIHN1cHBsaWVzXG4gKiBubyBsYXlvdXQsIHNvIHRoZSBjb21wb25lbnQgb3dlcyBpdCBvbmUgKHBvbGx5IzE4MCkuXG4gKi9cblxuaW1wb3J0IHsgdXNlU2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBEcm9wZG93biB9IGZyb20gXCIuL0Ryb3Bkb3duLnRzeFwiO1xuaW1wb3J0IHsgZGlzcGF0Y2hBY3Rpb24gfSBmcm9tIFwiLi9pbnRlcm5hbC9kaXNwYXRjaC1hY3Rpb24udHNcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcbmltcG9ydCB7IFNlbGVjdFRyaWdnZXIgfSBmcm9tIFwiLi9pbnRlcm5hbC9zZWxlY3QtdHJpZ2dlci50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1NlbGVjdC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgdHlwZSB7IFNlbGVjdE9wdGlvbiB9IGZyb20gXCIuL1NlbGVjdC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQWN0aW9uU2VsZWN0UHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICAvKiogQ3VycmVudCB2YWx1ZSDigJQgbWF0Y2hlZCBhZ2FpbnN0IGBvcHRpb25zYCB0byByZW5kZXIgdGhlIHRyaWdnZXIgbGFiZWwuICovXG4gIHZhbHVlOiBzdHJpbmc7XG4gIC8qKiBTZWxlY3RhYmxlIG9wdGlvbnMuICovXG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbjxzdHJpbmc+W107XG4gIC8qKiBBY3Rpb24gbmFtZSB0byBkaXNwYXRjaCBvbiBzZWxlY3Rpb24uIFJlY2VpdmVzIGRhdGEtYWN0aW9uLXZhbHVlPTxvcHRpb24gdmFsdWU+LiAqL1xuICBhY3Rpb246IHN0cmluZztcbiAgLyoqIEV4dHJhIGRhdGEtYWN0aW9uLSogYXR0cmlidXRlcyB0byBpbmNsdWRlIG9uIGNvbW1pdCAoZS5nLiBlbnRpdHkgaWQpLiAqL1xuICBhY3Rpb25EYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFZpc2libGUgZmllbGQgbGFiZWwgcmVuZGVyZWQgYWJvdmUgdGhlIHRyaWdnZXIuICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogVHJpZ2dlciB0ZXh0IHNob3duIHdoZW4gYHZhbHVlYCBtYXRjaGVzIG5vIG9wdGlvbi4gRGVmYXVsdDogXCJTZWxlY3TigKZcIi4gKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEFwcGx5IGEgY29tZm9ydGFibGUgbWluaW11bSB3aWR0aCB0byB0aGUgdHJpZ2dlci4gRGVmYXVsdDogc2l6ZXMgdG8gY29udGVudC4gKi9cbiAgd2lkZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBsYWJlbEZvcihvcHRpb25zOiBTZWxlY3RPcHRpb248c3RyaW5nPltdLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGlmIChvcHQudmFsdWUgPT09IHZhbHVlKSByZXR1cm4gb3B0LmxhYmVsO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBY3Rpb25TZWxlY3QocHJvcHM6IEFjdGlvblNlbGVjdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgdmFsdWUsXG4gICAgb3B0aW9ucyxcbiAgICBhY3Rpb24sXG4gICAgYWN0aW9uRGF0YSxcbiAgICBsYWJlbCxcbiAgICBwbGFjZWhvbGRlciA9IFwiU2VsZWN04oCmXCIsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICB3aWRlID0gZmFsc2UsXG4gICAgY2xhc3NOYW1lLFxuICAgIGlkLFxuICB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaXNPcGVuID0gdXNlU2lnbmFsKGZhbHNlKTtcblxuICBjb25zdCBjdXJyZW50ID0gbGFiZWxGb3Iob3B0aW9ucywgdmFsdWUpO1xuICBjb25zdCBpc0VtcHR5ID0gY3VycmVudCA9PT0gdW5kZWZpbmVkO1xuICBjb25zdCBkaXNwbGF5VGV4dCA9IGN1cnJlbnQgPz8gcGxhY2Vob2xkZXI7XG5cbiAgY29uc3QgY29tbWl0ID0gKG5leHQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIGlmIChuZXh0ID09PSB2YWx1ZSkgcmV0dXJuO1xuICAgIGRpc3BhdGNoQWN0aW9uKGFjdGlvbiwgeyAuLi4oYWN0aW9uRGF0YSA/PyB7fSksIHZhbHVlOiBuZXh0IH0pO1xuICB9O1xuXG4gIGNvbnN0IHRyaWdnZXJQYXJ0cyA9IFtjbGFzc2VzW1widHJpZ2dlclwiXSA/PyBcIlwiXTtcbiAgaWYgKGlzRW1wdHkpIHRyaWdnZXJQYXJ0cy5wdXNoKGNsYXNzZXNbXCJwbGFjZWhvbGRlclwiXSA/PyBcIlwiKTtcbiAgaWYgKHdpZGUpIHRyaWdnZXJQYXJ0cy5wdXNoKGNsYXNzZXNbXCJ0cmlnZ2VyV2lkZVwiXSA/PyBcIlwiKTtcbiAgY29uc3QgdHJpZ2dlckNsYXNzID0gdHJpZ2dlclBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wic2VsZWN0XCJdID8/IFwiXCJdO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKX1cbiAgICAgIGlkPXtpZH1cbiAgICAgIGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWFjdGlvbi1zZWxlY3RcbiAgICAgIGRhdGEtc3RhdGU9e2lzRW1wdHkgPyBcImVtcHR5XCIgOiBcImZpbGxlZFwifVxuICAgID5cbiAgICAgIHtsYWJlbCAhPT0gdW5kZWZpbmVkICYmIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibGFiZWxcIl19PntsYWJlbH08L3NwYW4+fVxuICAgICAge2Rpc2FibGVkID8gKFxuICAgICAgICA8c3BhbiBjbGFzcz17dHJpZ2dlckNsYXNzfSBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiIHRpdGxlPXtkaXNwbGF5VGV4dH0+XG4gICAgICAgICAgPFNlbGVjdFRyaWdnZXIgYXM9XCJzcGFuXCIgY2FyZXQ9e2ZhbHNlfSBsYWJlbD17ZGlzcGxheVRleHR9IC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICkgOiAoXG4gICAgICAgIDxEcm9wZG93blxuICAgICAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgICAgIHRyaWdnZXJDbGFzc05hbWU9e3RyaWdnZXJDbGFzc31cbiAgICAgICAgICB0cmlnZ2VyVGl0bGU9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgIHRyaWdnZXI9ezxTZWxlY3RUcmlnZ2VyIGxhYmVsPXtkaXNwbGF5VGV4dH0gLz59XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9ucy5tYXAoKG9wdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IG9wdC52YWx1ZSA9PT0gdmFsdWU7XG4gICAgICAgICAgICBjb25zdCBvcHRDbGFzcyA9IGlzU2VsZWN0ZWRcbiAgICAgICAgICAgICAgPyBgJHtjbGFzc2VzW1wib3B0aW9uXCJdfSAke2NsYXNzZXNbXCJvcHRpb25TZWxlY3RlZFwiXX1gXG4gICAgICAgICAgICAgIDogY2xhc3Nlc1tcIm9wdGlvblwiXTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e29wdC52YWx1ZX1cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz17b3B0Q2xhc3N9XG4gICAgICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD17aXNTZWxlY3RlZCA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNvbW1pdChvcHQudmFsdWUpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e29wdC5sYWJlbH08L3NwYW4+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9Ecm9wZG93bj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogQmFkZ2Ug4oCUIHNtYWxsIGlubGluZSBzdGF0dXMgY2hpcC5cbiAqXG4gKiBSZW5kZXJzIGFzIGEgcGFzc2l2ZSA8c3Bhbj4gd2l0aCB0aW50ZWQgYmFja2dyb3VuZCBhbmQgb24tdGludCB0ZXh0XG4gKiBmcm9tIHRoZSBgLS1wb2xseS1zdGF0dXMtKmAgdG9rZW4gZmFtaWx5LiBUaGUgZGVmYXVsdCB2YXJpYW50IHVzZXNcbiAqIHN1cmZhY2Utc3Vua2VuICsgbXV0ZWQgdGV4dCBmb3IgYSBuZXV0cmFsIHBpbGwuIENvbnN1bWVycyBzdHlsZVxuICogcGxhY2VtZW50IHZpYSBjbGFzc05hbWU7IHRoZSBwcmltaXRpdmUgb3ducyBzaXplLCBzaGFwZSwgYW5kIGNvbG91ci5cbiAqXG4gKiBBIGJhZGdlIGlzIG9mdGVuIGFuIGFiYnJldmlhdGVkIG9yIGljb25pYyBzdGF0dXMgKFwiM1wiLCBcIuKXj1wiKTsgcGFzc1xuICogYHRpdGxlYCB0byBhdHRhY2ggYW4gZXhwbGFuYXRvcnkgaG92ZXIgdG9vbHRpcCAoXCIzIHBlZXJzIGNvbm5lY3RlZFwiKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9CYWRnZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEJhZGdlVmFyaWFudCA9IFwiZGVmYXVsdFwiIHwgXCJpbmZvXCIgfCBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiIHwgXCJkYW5nZXJcIjtcblxuZXhwb3J0IHR5cGUgQmFkZ2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICB2YXJpYW50PzogQmFkZ2VWYXJpYW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICAvKiogTmF0aXZlIGhvdmVyIHRvb2x0aXAg4oCUIGV4cGxhaW5zIGFuIGFiYnJldmlhdGVkIG9yIGljb25pYyBiYWRnZS4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiB2YXJpYW50Q2xhc3ModmFyaWFudDogQmFkZ2VWYXJpYW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhcmlhbnQgPT09IFwiaW5mb1wiKSByZXR1cm4gY2xhc3Nlc1tcImluZm9cIl07XG4gIGlmICh2YXJpYW50ID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIGNsYXNzZXNbXCJzdWNjZXNzXCJdO1xuICBpZiAodmFyaWFudCA9PT0gXCJ3YXJuaW5nXCIpIHJldHVybiBjbGFzc2VzW1wid2FybmluZ1wiXTtcbiAgaWYgKHZhcmlhbnQgPT09IFwiZGFuZ2VyXCIpIHJldHVybiBjbGFzc2VzW1wiZGFuZ2VyXCJdO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gQmFkZ2UocHJvcHM6IEJhZGdlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgY2hpbGRyZW4sIHZhcmlhbnQgPSBcImRlZmF1bHRcIiwgY2xhc3NOYW1lLCBpZCwgdGl0bGUgfSA9IHByb3BzO1xuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiYmFkZ2VcIl1dO1xuICBjb25zdCB2ID0gdmFyaWFudENsYXNzKHZhcmlhbnQpO1xuICBpZiAodikgcGFydHMucHVzaCh2KTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxzcGFuIGlkPXtpZH0gdGl0bGU9e3RpdGxlfSBjbGFzcz17cGFydHMuam9pbihcIiBcIil9IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1iYWRnZT17dmFyaWFudH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9zcGFuPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIEJ1dHRvbiDigJQgaW50ZXJhY3RpdmUgY29udHJvbCB3aXRoIHRpZXIsIHNlbWFudGljIGNvbG91ciwgYW5kIHNpemUuXG4gKlxuICogUmVuZGVycyBhcyBhIDxidXR0b24+IGJ5IGRlZmF1bHQ7IHN3aXRjaGVzIHRvIGFuIDxhPiB3aGVuIGdpdmVuIGFuXG4gKiBgaHJlZmAuIFRpZXIgc2V0cyB2aXN1YWwgaW1wb3J0YW5jZSAocHJpbWFyeS9zZWNvbmRhcnkvdGVydGlhcnkpLFxuICogY29sb3Igb3ZlcmxheXMgc2VtYW50aWMgbWVhbmluZyAoaW5mby9zdWNjZXNzL3dhcm5pbmcvZGFuZ2VyKSxcbiAqIHNpemUgcGlja3MgdGhlIGhlaWdodCArIHBhZGRpbmcgKyBmb250IHNjYWxlIChzbWFsbC9ub3JtYWwvbGFyZ2UpLlxuICogVGhlIGJ1dHRvbiBpcyBhIGZsZXggY29udGFpbmVyLCBzbyBhbiBpY29uIGFuZCBhIGxhYmVsIGFyZSBpdHMgb3duXG4gKiBjaGlsZHJlbiB3aXRoIGEgYGdhcGAgYmV0d2VlbiB0aGVtLlxuICpcbiAqIEhlaWdodCBjb21lcyBmcm9tIC0tcG9sbHktY29udHJvbC1oZWlnaHQtKiwgbmV2ZXIgZnJvbSBwYWRkaW5nLCBzbyBhXG4gKiBCdXR0b24gaXMgZXhhY3RseSBhcyB0YWxsIGFzIGEgVGV4dElucHV0IG9yIGEgU2VsZWN0IGluIHRoZSBzYW1lIHJvdy5cbiAqXG4gKiBBIHRleHQgYGxhYmVsYCBpcyB0aGUgYWNjZXNzaWJsZSBuYW1lLiBBbiBpY29uLW9ubHkgYnV0dG9uIChpY29uLCBub1xuICogbGFiZWwpIGhhcyBub25lLCBzbyB0aGUgdHlwZSBSRVFVSVJFUyBgYXJpYS1sYWJlbGAgdGhlcmUg4oCUIGFuIHVubmFtZWRcbiAqIGljb24gYnV0dG9uIHdvbid0IGNvbXBpbGUuIE5vIGJ1aWxkLXRpbWUgbGludCBuZWVkZWQ7IHRoZSBjYWxsIHNpdGVcbiAqIGl0c2VsZiBpcyB0aGUgZ2F0ZS5cbiAqXG4gKiBBY3Rpb24gd2lyaW5nIGlzIGRlY2xhcmVkIHZpYSBkYXRhLSogYXR0cmlidXRlcyBjb25zdW1lZCBieSB0aGVcbiAqIGdsb2JhbCBldmVudCBkZWxlZ2F0b3IgaW4gQGZhaXJmb3gvcG9sbHkvYWN0aW9ucyDigJQgQnV0dG9uIGRvZXMgbm90XG4gKiBhY2NlcHQgYW4gb25DbGljayBwcm9wLlxuICpcbiAqIEV2ZXJ5IGJ1dHRvbiBzdXJmYWNlcyBhIG5hdGl2ZSBob3ZlciB0b29sdGlwOiBhbiBleHBsaWNpdCBgdGl0bGVgXG4gKiB3aW5zLCBlbHNlIHRoZSB2aXNpYmxlIHRleHQgbGFiZWwsIGVsc2UgdGhlIGBhcmlhLWxhYmVsYCAoc28gYW5cbiAqIGljb24tb25seSBidXR0b24gc3RpbGwgZ2V0cyBvbmUpLiBQYXNzIGB0aXRsZT1cIlwiYCB0byBzdXBwcmVzcyBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1gsIFZOb2RlIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcblxuZXhwb3J0IHR5cGUgQnV0dG9uVGllciA9IFwicHJpbWFyeVwiIHwgXCJzZWNvbmRhcnlcIiB8IFwidGVydGlhcnlcIjtcbmV4cG9ydCB0eXBlIEJ1dHRvbkNvbG9yID0gXCJkZWZhdWx0XCIgfCBcImluZm9cIiB8IFwic3VjY2Vzc1wiIHwgXCJ3YXJuaW5nXCIgfCBcImRhbmdlclwiO1xuZXhwb3J0IHR5cGUgQnV0dG9uU2l6ZSA9IFwic21hbGxcIiB8IFwibm9ybWFsXCIgfCBcImxhcmdlXCI7XG5cbnR5cGUgQmFzZUJ1dHRvblByb3BzID0ge1xuICBpZD86IHN0cmluZztcbiAgdGllcj86IEJ1dHRvblRpZXI7XG4gIGNvbG9yPzogQnV0dG9uQ29sb3I7XG4gIHNpemU/OiBCdXR0b25TaXplO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGZ1bGxXaWR0aD86IGJvb2xlYW47XG4gIGNpcmNsZT86IGJvb2xlYW47XG4gIC8qKiBDYXAgdGhlIGJ1dHRvbiB3aWR0aCBhdCBgLS1wb2xseS1jb250cm9sLW1heC13aWR0aGAgYW5kIGVsbGlwc2lzLVxuICAgKiB0cnVuY2F0ZSB0aGUgbGFiZWwuIFVzZSBmb3IgdXNlci1zdXBwbGllZCBvciBvdGhlcndpc2UgdW5ib3VuZGVkXG4gICAqIGxhYmVscyBzbyBhIGxvbmcgc3RyaW5nIGRvZXNuJ3QgYmxvdyBvdXQgdGhlIHJvdy4gKi9cbiAgYm91bmRlZD86IGJvb2xlYW47XG4gIC8qKiBQdWxsIHRoZSBib3ggb3V0IGJ5IGl0cyBvd24gaW5saW5lIHBhZGRpbmcgc28gdGhlIExBQkVMIHNpdHMgb24gdGhlXG4gICAqIHRleHQgZWRnZSByYXRoZXIgdGhhbiB0aGUgYm94IGVkZ2UuIEZvciBhIGB0ZXJ0aWFyeWAgYnV0dG9uIGluIGEgdGV4dFxuICAgKiBjb2x1bW4sIHdoZXJlIHRoZSBpbnZpc2libGUgcGFkZGluZyBvdGhlcndpc2UgcmVhZHMgYXMgYW4gaW5kZW50XG4gICAqIGFnYWluc3QgdGhlIGNvcHkgYmVzaWRlIGl0LiBBIGJvcmRlcmVkIGJ1dHRvbiBzaG91bGQga2VlcCBpdHMgZGVmYXVsdFxuICAgKiBib3ggYWxpZ25tZW50IOKAlCB0aGUgYm9yZGVyIGlzIHdoYXQgbWFrZXMgdGhhdCBlZGdlIGxlZ2libGUuIFRoZSBoaXRcbiAgICogdGFyZ2V0IGlzIHVuY2hhbmdlZDsgb25seSB0aGUgYm94J3MgcG9zaXRpb24gaW4gdGhlIGxheW91dCBtb3Zlcy4gKi9cbiAgZmx1c2g/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBcImRhdGEtYWN0aW9uXCI/OiBzdHJpbmc7XG4gIC8qKiBBZGRpdGlvbmFsIGFjdGlvbi1wYXlsb2FkIGF0dHJpYnV0ZXMgdGhlIGV2ZW50IGRlbGVnYXRvciBwYXJzZXNcbiAgICogaW50byBgY3R4LmRhdGFgLiBgZGF0YS1hY3Rpb24tdGlkPVwidC0xN1wiYCBiZWNvbWVzIGB7IHRpZDogXCJ0LTE3XCIgfWAsXG4gICAqIGBkYXRhLWFjdGlvbi1pdGVtLWlkPVwi4oCmXCJgIGJlY29tZXMgYHsgaXRlbUlkOiBcIuKAplwiIH1gLCBhbmQgc28gb24uXG4gICAqIFR5cGVkIGFzIGFuIGluZGV4IHNpZ25hdHVyZSBzbyBldmVyeSBgZGF0YS1hY3Rpb24tKmAga2V5IHRoZVxuICAgKiBjb25zdW1lciBjYXJlcyBhYm91dCB0eXBlLWNoZWNrcyB3aXRob3V0IGEgQnV0dG9uLXNpZGUgZW51bWVyYXRpb24uICovXG4gIFthY3Rpb25EYXRhQXR0cjogYGRhdGEtYWN0aW9uLSR7c3RyaW5nfWBdOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIENvbnRlbnQvYWNjZXNzaWJpbGl0eSBkaW1lbnNpb24uIEEgdmlzaWJsZSB0ZXh0IGBsYWJlbGAgaXMgdGhlXG4gKiBhY2Nlc3NpYmxlIG5hbWUsIHNvIGl0IG1ha2VzIGBhcmlhLWxhYmVsYCBvcHRpb25hbC4gQW4gaWNvbi1vbmx5XG4gKiBidXR0b24gaGFzIG5vIHRleHQgdG8gbmFtZSBpdCwgc28gYGFyaWEtbGFiZWxgIGlzIFJFUVVJUkVEIOKAlCB5b3VcbiAqIGNhbm5vdCBjb25zdHJ1Y3QgYW4gdW5uYW1lZCBpY29uIGJ1dHRvbi4gKEJ1dHRvbidzIGhvdmVyIHRpdGxlIHRoZW5cbiAqIGZhbGxzIGJhY2sgdG8gdGhhdCBhcmlhLWxhYmVsLCBzbyB0aGUgc2FtZSBwcm9wIGdpdmVzIGJvdGggdGhlXG4gKiBhY2Nlc3NpYmxlIG5hbWUgYW5kIHRoZSB0b29sdGlwLilcbiAqL1xudHlwZSBMYWJlbGxlZENvbnRlbnQgPSB7XG4gIGxhYmVsOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgaWNvbj86IFZOb2RlO1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbn07XG50eXBlIEljb25Pbmx5Q29udGVudCA9IHtcbiAgaWNvbjogVk5vZGU7XG4gIGxhYmVsPzogbmV2ZXI7XG4gIFwiYXJpYS1sYWJlbFwiOiBzdHJpbmc7XG59O1xudHlwZSBCdXR0b25Db250ZW50ID0gTGFiZWxsZWRDb250ZW50IHwgSWNvbk9ubHlDb250ZW50O1xuXG50eXBlIEJ1dHRvbkVsZW1lbnQgPSB7XG4gIGhyZWY/OiBuZXZlcjtcbiAgdGFyZ2V0PzogbmV2ZXI7XG4gIHJlbD86IG5ldmVyO1xuICBkb3dubG9hZD86IG5ldmVyO1xuICB0eXBlPzogXCJidXR0b25cIiB8IFwic3VibWl0XCIgfCBcInJlc2V0XCI7XG59O1xuXG50eXBlIExpbmtFbGVtZW50ID0ge1xuICBocmVmOiBzdHJpbmc7XG4gIHRhcmdldD86IHN0cmluZztcbiAgcmVsPzogc3RyaW5nO1xuICAvKiogRm9yd2FyZGVkIHRvIHRoZSByZW5kZXJlZCA8YT4gc28gYSBCdXR0b24tYXMtbGluayBjYW4gb2ZmZXIgYSBmaWxlXG4gICAqIGRvd25sb2FkLiBBbiBlbXB0eSBzdHJpbmcgdXNlcyB0aGUgcmVzb3VyY2UncyBvd24gZmlsZW5hbWUuICovXG4gIGRvd25sb2FkPzogc3RyaW5nO1xuICB0eXBlPzogbmV2ZXI7XG59O1xuXG5leHBvcnQgdHlwZSBCdXR0b25Qcm9wcyA9IEJhc2VCdXR0b25Qcm9wcyAmIEJ1dHRvbkNvbnRlbnQgJiAoQnV0dG9uRWxlbWVudCB8IExpbmtFbGVtZW50KTtcblxuZnVuY3Rpb24gdGllckNsYXNzKHRpZXI6IEJ1dHRvblRpZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodGllciA9PT0gXCJwcmltYXJ5XCIpIHJldHVybiBjbGFzc2VzW1widGllclByaW1hcnlcIl07XG4gIGlmICh0aWVyID09PSBcInRlcnRpYXJ5XCIpIHJldHVybiBjbGFzc2VzW1widGllclRlcnRpYXJ5XCJdO1xuICByZXR1cm4gY2xhc3Nlc1tcInRpZXJTZWNvbmRhcnlcIl07XG59XG5cbmZ1bmN0aW9uIGNvbG9yQ2xhc3MoY29sb3I6IEJ1dHRvbkNvbG9yKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGNvbG9yID09PSBcImluZm9cIikgcmV0dXJuIGNsYXNzZXNbXCJjb2xvckluZm9cIl07XG4gIGlmIChjb2xvciA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBjbGFzc2VzW1wiY29sb3JTdWNjZXNzXCJdO1xuICBpZiAoY29sb3IgPT09IFwid2FybmluZ1wiKSByZXR1cm4gY2xhc3Nlc1tcImNvbG9yV2FybmluZ1wiXTtcbiAgaWYgKGNvbG9yID09PSBcImRhbmdlclwiKSByZXR1cm4gY2xhc3Nlc1tcImNvbG9yRGFuZ2VyXCJdO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBzaXplQ2xhc3Moc2l6ZTogQnV0dG9uU2l6ZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChzaXplID09PSBcInNtYWxsXCIpIHJldHVybiBjbGFzc2VzW1wiYnRuU21hbGxcIl07XG4gIGlmIChzaXplID09PSBcImxhcmdlXCIpIHJldHVybiBjbGFzc2VzW1wiYnRuTGFyZ2VcIl07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBmbGF0IHByb3AtdG8tY2xhc3MgY29tcG9zaXRpb24gcGx1cyBvbmUgYW5jaG9yL2J1dHRvbiBicmFuY2g7IHNwbGl0dGluZyB3b3VsZCBqdXN0IGhpZGUgdGhlIG1hcHBpbmcuXG5leHBvcnQgZnVuY3Rpb24gQnV0dG9uKHByb3BzOiBCdXR0b25Qcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHRpZXIgPSBcInNlY29uZGFyeVwiLFxuICAgIGNvbG9yID0gXCJkZWZhdWx0XCIsXG4gICAgc2l6ZSA9IFwibm9ybWFsXCIsXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICBjaXJjbGUgPSBmYWxzZSxcbiAgICBib3VuZGVkID0gZmFsc2UsXG4gICAgZmx1c2ggPSBmYWxzZSxcbiAgICBjbGFzc05hbWUsXG4gICAgdGl0bGUsXG4gICAgaWNvbixcbiAgICBsYWJlbCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJidG5cIl0gPz8gXCJcIl07XG4gIGNvbnN0IHRjID0gdGllckNsYXNzKHRpZXIpO1xuICBpZiAodGMpIHBhcnRzLnB1c2godGMpO1xuICBjb25zdCBjYyA9IGNvbG9yQ2xhc3MoY29sb3IpO1xuICBpZiAoY2MpIHBhcnRzLnB1c2goY2MpO1xuICBjb25zdCBzYyA9IHNpemVDbGFzcyhzaXplKTtcbiAgaWYgKHNjKSBwYXJ0cy5wdXNoKHNjKTtcbiAgaWYgKGNpcmNsZSkgcGFydHMucHVzaChjbGFzc2VzW1wiYnRuQ2lyY2xlXCJdID8/IFwiXCIpO1xuICBpZiAoZnVsbFdpZHRoKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJidG5GdWxsV2lkdGhcIl0gPz8gXCJcIik7XG4gIGlmIChib3VuZGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJidG5Cb3VuZGVkXCJdID8/IFwiXCIpO1xuICBpZiAoZmx1c2gpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImJ0bkZsdXNoXCJdID8/IFwiXCIpO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG4gIGNvbnN0IGJ1dHRvbkNsYXNzID0gcGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuXG4gIC8vIEFuIGljb24gYmVzaWRlIGEgbGFiZWwgaXMgYW4gYXJyYW5nZW1lbnQsIHNvIGl0IGdvZXMgdGhyb3VnaCA8TGF5b3V0Pi5cbiAgLy8gQSBsYWJlbCBvbiBpdHMgb3duIGlzIG5vdDogaXQgaXMgb25lIGlubGluZSBjaGlsZCB0aGF0IHRoZSBidXR0b24nc1xuICAvLyBhbGlnbi1jb250ZW50IGFuZCB0ZXh0LWFsaWduIGNlbnRyZSwgd2l0aCBubyBjb250YWluZXIgYXQgYWxsLlxuICBjb25zdCBjb250ZW50ID1cbiAgICBpY29uID09PSB1bmRlZmluZWQgPyAoXG4gICAgICBsYWJlbFxuICAgICkgOiAoXG4gICAgICA8TGF5b3V0IGlubGluZSBjb2x1bW5zPVwiYXV0byBhdXRvXCIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCIgYWxpZ25JdGVtcz1cImNlbnRlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImljb25cIl19PntpY29ufTwvc3Bhbj5cbiAgICAgICAge2xhYmVsICE9PSB1bmRlZmluZWQgJiYgPHNwYW4gY2xhc3M9e2NsYXNzZXNbXCJsYWJlbFwiXX0+e2xhYmVsfTwvc3Bhbj59XG4gICAgICA8L0xheW91dD5cbiAgICApO1xuXG4gIGNvbnN0IGRhdGFBY3Rpb24gPSBwcm9wc1tcImRhdGEtYWN0aW9uXCJdO1xuICBjb25zdCBhcmlhTGFiZWwgPSBwcm9wc1tcImFyaWEtbGFiZWxcIl07XG4gIC8vIEV2ZXJ5IGJ1dHRvbiBzdXJmYWNlcyBhIGhvdmVyIHRvb2x0aXA6IGFuIGV4cGxpY2l0IHRpdGxlIHdpbnMsIGVsc2UgdGhlXG4gIC8vIHZpc2libGUgdGV4dCBsYWJlbCwgZWxzZSB0aGUgYWNjZXNzaWJsZSBuYW1lIOKAlCBzbyBhbiBpY29uLW9ubHkgYnV0dG9uXG4gIC8vICh3aGljaCBjYXJyaWVzIGFuIGFyaWEtbGFiZWwpIHN0aWxsIGdldHMgb25lLiBQYXNzIHRpdGxlPVwiXCIgdG8gb3B0IG91dC5cbiAgY29uc3QgcmVzb2x2ZWRUaXRsZSA9XG4gICAgdGl0bGUgPz9cbiAgICAodHlwZW9mIGxhYmVsID09PSBcInN0cmluZ1wiICYmIGxhYmVsLmxlbmd0aCA+IDBcbiAgICAgID8gbGFiZWxcbiAgICAgIDogdHlwZW9mIGFyaWFMYWJlbCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IGFyaWFMYWJlbFxuICAgICAgICA6IHVuZGVmaW5lZCk7XG4gIC8vIENvbGxlY3QgZXZlcnkgYGRhdGEtYWN0aW9uLSpgIGV4dHJhIHRoZSBjb25zdW1lciBwYXNzZWQgc28gdGhlXG4gIC8vIGV2ZW50IGRlbGVnYXRvciBjYW4gcmVhZCB0aGVtIG9mZiB0aGUgcmVuZGVyZWQgZWxlbWVudC4gV2l0aG91dFxuICAvLyB0aGlzLCBhbnl0aGluZyBiZXlvbmQgYGRhdGEtYWN0aW9uYCBpcyBzaWxlbnRseSBkcm9wcGVkIGFuZFxuICAvLyBoYW5kbGVycyBmaXJlIHdpdGggYW4gZW1wdHkgYGN0eC5kYXRhYC5cbiAgY29uc3QgYWN0aW9uRGF0YUF0dHJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb3BzKSkge1xuICAgIGlmIChrZXkuc3RhcnRzV2l0aChcImRhdGEtYWN0aW9uLVwiKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSAocHJvcHMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgYWN0aW9uRGF0YUF0dHJzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoXCJocmVmXCIgaW4gcHJvcHMgJiYgcHJvcHMuaHJlZikge1xuICAgIHJldHVybiAoXG4gICAgICA8YVxuICAgICAgICBpZD17aWR9XG4gICAgICAgIGNsYXNzPXtidXR0b25DbGFzc31cbiAgICAgICAgdGl0bGU9e3Jlc29sdmVkVGl0bGV9XG4gICAgICAgIGhyZWY9e2Rpc2FibGVkID8gdW5kZWZpbmVkIDogcHJvcHMuaHJlZn1cbiAgICAgICAgdGFyZ2V0PXtcInRhcmdldFwiIGluIHByb3BzID8gcHJvcHMudGFyZ2V0IDogdW5kZWZpbmVkfVxuICAgICAgICByZWw9e1wicmVsXCIgaW4gcHJvcHMgPyBwcm9wcy5yZWwgOiB1bmRlZmluZWR9XG4gICAgICAgIGRvd25sb2FkPXtcImRvd25sb2FkXCIgaW4gcHJvcHMgPyBwcm9wcy5kb3dubG9hZCA6IHVuZGVmaW5lZH1cbiAgICAgICAgYXJpYS1kaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LWJ1dHRvbj17dGllcn1cbiAgICAgICAgZGF0YS1hY3Rpb249e2RhdGFBY3Rpb259XG4gICAgICAgIHsuLi5hY3Rpb25EYXRhQXR0cnN9XG4gICAgICA+XG4gICAgICAgIHtjb250ZW50fVxuICAgICAgPC9hPlxuICAgICk7XG4gIH1cblxuICBjb25zdCByZXNvbHZlZFR5cGU6IFwiYnV0dG9uXCIgfCBcInN1Ym1pdFwiIHwgXCJyZXNldFwiID1cbiAgICBcInR5cGVcIiBpbiBwcm9wcyAmJiBwcm9wcy50eXBlID8gcHJvcHMudHlwZSA6IFwiYnV0dG9uXCI7XG5cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17YnV0dG9uQ2xhc3N9XG4gICAgICB0aXRsZT17cmVzb2x2ZWRUaXRsZX1cbiAgICAgIHR5cGU9e3Jlc29sdmVkVHlwZX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktYnV0dG9uPXt0aWVyfVxuICAgICAgZGF0YS1hY3Rpb249e2RhdGFBY3Rpb259XG4gICAgICB7Li4uYWN0aW9uRGF0YUF0dHJzfVxuICAgID5cbiAgICAgIHtjb250ZW50fVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFN1cmZhY2Ug4oCUIHRoZSBvbmUgcHJpbWl0aXZlIHRoYXQgb3ducyB2aXN1YWwtc3VyZmFjZSBjb25jZXJucy5cbiAqXG4gKiBXaGVyZSBMYXlvdXQgZ292ZXJucyBzcGF0aWFsIGNvbmNlcm5zIChncmlkLCBmbGV4LCBnYXAsIGFsaWdubWVudCksXG4gKiBTdXJmYWNlIGdvdmVybnMgdGhlIGNocm9tZSB0aGF0IHNpdHMgb24gdG9wIG9mIGxheW91dDogcGFkZGluZyxcbiAqIGJhY2tncm91bmQsIGJvcmRlciwgcmFkaXVzLCBzaGFkb3csIGFuZCB0aGUgbmFycm93IHBvc2l0aW9uaW5nIGlkaW9tc1xuICogKHN0aWNreSBzdHJpcHMsIGZpeGVkIGZsb2F0aW5nIHBhbmVzKSB0aGF0IGNvbnN1bWVycyByZWFjaCBmb3IgaW5saW5lXG4gKiBzdHlsZXMgdG8gZXhwcmVzcy4gRXZlcnkgcHJvcCBtYXBzIHRvIGEgYC0tcG9sbHktKmAgdG9rZW4gdGhyb3VnaCBhXG4gKiBsb2NhbCBgLS1zLSpgIGN1c3RvbSBwcm9wZXJ0eSwgc28gY29uc3VtZXJzIGNhbiByZXRoZW1lIGFuIGluZGl2aWR1YWxcbiAqIFN1cmZhY2UgYnkgb3ZlcnJpZGluZyB0aGUgcG9sbHkgdG9rZW4gaW4gYHN0eWxlYCB3aXRob3V0IHRvdWNoaW5nIHRoZVxuICogcHJpbWl0aXZlJ3MgQ1NTLlxuICovXG5cbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vU3VyZmFjZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFN1cmZhY2VWYXJpYW50ID1cbiAgfCBcInBsYWluXCJcbiAgfCBcInJhaXNlZFwiXG4gIHwgXCJzdW5rZW5cIlxuICB8IFwiYnViYmxlXCJcbiAgfCBcImNoaXBcIlxuICB8IFwiY2FsbG91dFwiXG4gIHwgXCJmbG9hdGluZ1wiXG4gIHwgXCJzdGlja3ktYmFyXCI7XG5cbnR5cGUgQmFja2dyb3VuZCA9IFwicmFpc2VkXCIgfCBcInN1bmtlblwiIHwgXCJ0cmFuc3BhcmVudFwiIHwgKHN0cmluZyAmIHt9KTtcbnR5cGUgUmFkaXVzID0gXCJub25lXCIgfCBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgfCBcImZ1bGxcIjtcbnR5cGUgQm9yZGVyID0gXCJub25lXCIgfCBcImRlZmF1bHRcIiB8IFwic3Ryb25nXCI7XG50eXBlIEJvcmRlcldpZHRoID0gXCJub25lXCIgfCBcImRlZmF1bHRcIiB8IFwibWVkaXVtXCIgfCBcInRoaWNrXCI7XG50eXBlIEJvcmRlclNpZGVzID1cbiAgfCBcImFsbFwiXG4gIHwgXCJibG9jay1zdGFydFwiXG4gIHwgXCJibG9jay1lbmRcIlxuICB8IFwiaW5saW5lLXN0YXJ0XCJcbiAgfCBcImlubGluZS1lbmRcIlxuICB8IFwiYmxvY2tcIlxuICB8IFwiaW5saW5lXCI7XG50eXBlIFNoYWRvdyA9IFwibm9uZVwiIHwgXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiO1xudHlwZSBQb3NpdGlvbiA9IFwic3RhdGljXCIgfCBcInJlbGF0aXZlXCIgfCBcImFic29sdXRlXCIgfCBcInN0aWNreVwiIHwgXCJmaXhlZFwiO1xudHlwZSBCb3JkZXJTdHlsZSA9IFwic29saWRcIiB8IFwiZGFzaGVkXCI7XG50eXBlIE92ZXJmbG93ID0gXCJ2aXNpYmxlXCIgfCBcImhpZGRlblwiIHwgXCJhdXRvXCIgfCBcInNjcm9sbFwiO1xudHlwZSBTY2hlbWUgPSBcImRhcmtcIiB8IFwibGlnaHRcIjtcblxuLyoqXG4gKiBBcmJpdHJhcnkgYGRhdGEtKmAsIGBhcmlhLSpgLCBhbmQgYHRpdGxlYCBhdHRyaWJ1dGVzIGZvcndhcmRlZCB0byB0aGVcbiAqIHJlbmRlcmVkIGVsZW1lbnQgc28gY29uc3VtZXJzIChNb2RhbCwgVG9hc3QsIENhcmQsIGV0Yy4pIGNhbiBjb21wb3NlXG4gKiBTdXJmYWNlIHdpdGhvdXQgbG9zaW5nIERPTSBob29rcywgQVJJQSBzZW1hbnRpY3MsIG9yIGEgbmF0aXZlIHRvb2x0aXAuXG4gKi9cbmV4cG9ydCB0eXBlIFN1cmZhY2VEYXRhQXR0cnMgPSB7XG4gIFtkYXRhQXR0cjogYGRhdGEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIFthcmlhQXR0cjogYGFyaWEtJHtzdHJpbmd9YF06IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHRpdGxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU3VyZmFjZVByb3BzID0gU3VyZmFjZURhdGFBdHRycyAmIHtcbiAgY2hpbGRyZW4/OiBDb21wb25lbnRDaGlsZHJlbjtcblxuICAvKiogUG9seW1vcnBoaWMgZWxlbWVudCAoZGl2LCBzZWN0aW9uLCBhcnRpY2xlLCBhc2lkZSwgaGVhZGVyLCDigKYpLiBEZWZhdWx0cyB0byAnZGl2Jy4gKi9cbiAgYXM/OiBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM7XG5cbiAgLyoqIE5hbWVkIHByZXNldCB0aGF0IHJlc29sdmVzIHRvIGEgZGVmYXVsdCBidW5kbGUgb2YgdGhlIHByb3BzIGJlbG93LiBFeHBsaWNpdCBwcm9wcyBvdmVycmlkZS4gKi9cbiAgdmFyaWFudD86IFN1cmZhY2VWYXJpYW50O1xuXG4gIC8qKiBBbnkgQ1NTIGxlbmd0aCwgdHlwaWNhbGx5IGB2YXIoLS1wb2xseS1zcGFjZS0qKWAuICovXG4gIHBhZGRpbmc/OiBzdHJpbmc7XG5cbiAgLyoqIE5hbWVkIHZhbHVlcyBtYXAgdG8gYHZhcigtLXBvbGx5LXN1cmZhY2UtKilgOyByYXcgc3RyaW5ncyBwYXNzIHRocm91Z2ggZm9yIG9uZS1vZmYgY29sb3Vycy4gKi9cbiAgYmFja2dyb3VuZD86IEJhY2tncm91bmQ7XG5cbiAgcmFkaXVzPzogUmFkaXVzO1xuICBib3JkZXI/OiBCb3JkZXI7XG4gIGJvcmRlcldpZHRoPzogQm9yZGVyV2lkdGg7XG4gIGJvcmRlclNpZGVzPzogQm9yZGVyU2lkZXM7XG4gIC8qKiBCb3JkZXIgbGluZSBzdHlsZS4gRGVmYXVsdDogYCdzb2xpZCdgLiAqL1xuICBib3JkZXJTdHlsZT86IEJvcmRlclN0eWxlO1xuICAvKiogQW55IENTUyBjb2xvdXIsIG92ZXJyaWRpbmcgdGhlIHRva2VuIHRoZSBgYm9yZGVyYCBwcm9wIHdvdWxkIHBpY2suXG4gICAqIEZvciBvbmUtb2ZmIHJpbmdzIChhIGN1dG91dCByaW5nLCBhIGZvY3VzIGhhbG8pIHRoYXQgbm8gc2VtYW50aWNcbiAgICogYm9yZGVyIHRva2VuIGV4cHJlc3Nlcy4gSW1wbGllcyBhIGJvcmRlciB3aWR0aCB3aGVuIG5vbmUgaXMgc2V0LiAqL1xuICBib3JkZXJDb2xvcj86IHN0cmluZztcbiAgc2hhZG93PzogU2hhZG93O1xuXG4gIC8qKlxuICAgKiBSZXRpbnQgdGhlIHRva2VuIHN1YnRyZWUgc28gZGVzY2VuZGFudCBgVGV4dGAvYEJ1dHRvbmAgcmVhZCB0aGVcbiAgICogcmlnaHQgY29udHJhc3Qgb24gYSBkYXJrIChvciBmb3JjZWQtbGlnaHQpIFN1cmZhY2Ug4oCUIGVycm9yXG4gICAqIGJhbm5lcnMsIGNhbWVyYSBvdmVybGF5cywgY2hhdCBidWJibGVzLiBTZXRzIGBkYXRhLXBvbGx5LXRoZW1lYCxcbiAgICogc28gZXZlcnkgYC0tcG9sbHktKmAgY29sb3VyIHRva2VuIGZsaXBzIGZvciB0aGUgc3VidHJlZTsgbm8gaW5saW5lXG4gICAqIGAtLXBvbGx5LXRleHRgIG92ZXJyaWRlIG5lZWRlZCAocG9sbHkjMTM1KS5cbiAgICovXG4gIHNjaGVtZT86IFNjaGVtZTtcblxuICAvKiogYCdub25lJ2AgbWFrZXMgYSBkZWNvcmF0aXZlIFN1cmZhY2UgKGEgc2Nhbi1mcmFtZSBvdmVybGF5KSBpZ25vcmVcbiAgICogdGhlIHBvaW50ZXIgc28gY2xpY2tzIGZhbGwgdGhyb3VnaCB0byB3aGF0IGlzIGJlaGluZCBpdC4gKi9cbiAgcG9pbnRlckV2ZW50cz86IFwibm9uZVwiIHwgXCJhdXRvXCI7XG5cbiAgLyoqIGRpc3BsYXk6IGlubGluZS1ibG9jayDigJQgU3VyZmFjZSBmbG93cyBpbmxpbmUgd2l0aCBzdXJyb3VuZGluZyB0ZXh0LiAqL1xuICBpbmxpbmU/OiBib29sZWFuO1xuICB3aWR0aD86IHN0cmluZztcbiAgaGVpZ2h0Pzogc3RyaW5nO1xuICBtaW5IZWlnaHQ/OiBzdHJpbmc7XG4gIC8qKiBNYXhpbXVtIGJsb2NrIHNpemUg4oCUIGEgU3VyZmFjZSB0aGF0IHNocmlua3MgdG8gY29udGVudCBidXQgaXMgY2FwcGVkLiAqL1xuICBtYXhIZWlnaHQ/OiBzdHJpbmc7XG4gIG1heElubGluZVNpemU/OiBzdHJpbmc7XG5cbiAgLyoqIE92ZXJmbG93IGJlaGF2aW91ci4gYCdhdXRvJ2AgbWFrZXMgYSBoZWlnaHQtY2FwcGVkIFN1cmZhY2Ugc2Nyb2xsLiAqL1xuICBvdmVyZmxvdz86IE92ZXJmbG93O1xuXG4gIHBvc2l0aW9uPzogUG9zaXRpb247XG4gIC8qKiBBbnkgQ1NTIGluc2V0IHZhbHVlIChgJzAnYCwgYCdhdXRvIGF1dG8gMXJlbSAxcmVtJ2AsIGAnMXJlbSdgLCDigKYpLiAqL1xuICBpbnNldD86IHN0cmluZztcbiAgLyoqIENTUyB0cmFuc2Zvcm0g4oCUIGUuZy4gYCd0cmFuc2xhdGVYKC01MCUpJ2AgdG8gY2VudHJlIGEgZml4ZWQgYmFubmVyXG4gICAqIHBhaXJlZCB3aXRoIGBpbnNldDogJ+KApiBhdXRvIOKApiA1MCUnYC4gVGhlIHNhbmN0aW9uZWQgdHJhbnNmb3JtIGVzY2FwZS4gKi9cbiAgdHJhbnNmb3JtPzogc3RyaW5nO1xuICB6SW5kZXg/OiBudW1iZXI7XG5cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogUGVyLWluc3RhbmNlIG92ZXJyaWRlcy4gVGhlIHN1cHBvcnRlZCByZXRpbnQgcGF0aCBpcyB0byBzZXQgcG9sbHkgdG9rZW5zXG4gICAqIGhlcmUsIGUuZy4gYHN0eWxlPXt7IFwiLS1wb2xseS1zdXJmYWNlLXJhaXNlZFwiOiBcIiNmZWYzYzdcIiB9fWAuIFN1cmZhY2VcbiAgICogbWVyZ2VzIHRoaXMgaW50byBpdHMgb3duIGNvbXB1dGVkIHN0eWxlLlxuICAgKi9cbiAgc3R5bGU/OiBKU1guQ1NTUHJvcGVydGllcztcblxuICBpZD86IHN0cmluZztcbiAgcm9sZT86IEpTWC5BcmlhUm9sZTtcbiAgdGFiSW5kZXg/OiBudW1iZXI7XG4gIFwiYXJpYS1sYWJlbFwiPzogc3RyaW5nO1xuICBcImFyaWEtbGFiZWxsZWRieVwiPzogc3RyaW5nO1xuICBcImFyaWEtZGVzY3JpYmVkYnlcIj86IHN0cmluZztcbiAgb25DbGljaz86IEpTWC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gIG9uS2V5RG93bj86IEpTWC5LZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG59O1xuXG50eXBlIFZhcmlhbnREZWZhdWx0cyA9IFBhcnRpYWw8XG4gIFBpY2s8XG4gICAgU3VyZmFjZVByb3BzLFxuICAgIHwgXCJwYWRkaW5nXCJcbiAgICB8IFwiYmFja2dyb3VuZFwiXG4gICAgfCBcInJhZGl1c1wiXG4gICAgfCBcImJvcmRlclwiXG4gICAgfCBcImJvcmRlcldpZHRoXCJcbiAgICB8IFwiYm9yZGVyU2lkZXNcIlxuICAgIHwgXCJzaGFkb3dcIlxuICAgIHwgXCJpbmxpbmVcIlxuICAgIHwgXCJ3aWR0aFwiXG4gICAgfCBcImhlaWdodFwiXG4gICAgfCBcIm1pbkhlaWdodFwiXG4gICAgfCBcIm1heElubGluZVNpemVcIlxuICAgIHwgXCJwb3NpdGlvblwiXG4gICAgfCBcImluc2V0XCJcbiAgICB8IFwiekluZGV4XCJcbiAgPlxuPjtcblxuY29uc3QgdmFyaWFudERlZmF1bHRzOiBSZWNvcmQ8U3VyZmFjZVZhcmlhbnQsIFZhcmlhbnREZWZhdWx0cz4gPSB7XG4gIHBsYWluOiB7fSxcbiAgcmFpc2VkOiB7XG4gICAgYmFja2dyb3VuZDogXCJyYWlzZWRcIixcbiAgICByYWRpdXM6IFwibWRcIixcbiAgICBzaGFkb3c6IFwibWRcIixcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICB9LFxuICBzdW5rZW46IHtcbiAgICBiYWNrZ3JvdW5kOiBcInN1bmtlblwiLFxuICAgIHJhZGl1czogXCJtZFwiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gIH0sXG4gIGJ1YmJsZToge1xuICAgIGJhY2tncm91bmQ6IFwidmFyKC0tcG9sbHktc3VyZmFjZS1idWJibGUpXCIsXG4gICAgcmFkaXVzOiBcIm1kXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgICBwYWRkaW5nOiBcInZhcigtLXBvbGx5LXNwYWNlLXNtKSB2YXIoLS1wb2xseS1zcGFjZS1tZClcIixcbiAgfSxcbiAgY2hpcDoge1xuICAgIGlubGluZTogdHJ1ZSxcbiAgICByYWRpdXM6IFwiZnVsbFwiLFxuICAgIHBhZGRpbmc6IFwidmFyKC0tcG9sbHktc3BhY2UteHMpIHZhcigtLXBvbGx5LXNwYWNlLXNtKVwiLFxuICAgIGJvcmRlcjogXCJkZWZhdWx0XCIsXG4gIH0sXG4gIGNhbGxvdXQ6IHtcbiAgICBib3JkZXI6IFwiZGVmYXVsdFwiLFxuICAgIHJhZGl1czogXCJzbVwiLFxuICAgIHBhZGRpbmc6IFwidmFyKC0tcG9sbHktc3BhY2Utc20pIHZhcigtLXBvbGx5LXNwYWNlLW1kKVwiLFxuICB9LFxuICBmbG9hdGluZzoge1xuICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgcmFkaXVzOiBcImxnXCIsXG4gICAgc2hhZG93OiBcImxnXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgICBiYWNrZ3JvdW5kOiBcInJhaXNlZFwiLFxuICAgIHpJbmRleDogOTk5OSxcbiAgfSxcbiAgXCJzdGlja3ktYmFyXCI6IHtcbiAgICBwb3NpdGlvbjogXCJzdGlja3lcIixcbiAgICBpbnNldDogXCIwIDAgYXV0byAwXCIsXG4gICAgYm9yZGVyU2lkZXM6IFwiYmxvY2stZW5kXCIsXG4gICAgYm9yZGVyOiBcImRlZmF1bHRcIixcbiAgfSxcbn07XG5cbmZ1bmN0aW9uIGJnVmFsdWUoYjogQmFja2dyb3VuZCk6IHN0cmluZyB7XG4gIGlmIChiID09PSBcInJhaXNlZFwiKSByZXR1cm4gXCJ2YXIoLS1wb2xseS1zdXJmYWNlLXJhaXNlZClcIjtcbiAgaWYgKGIgPT09IFwic3Vua2VuXCIpIHJldHVybiBcInZhcigtLXBvbGx5LXN1cmZhY2Utc3Vua2VuKVwiO1xuICBpZiAoYiA9PT0gXCJ0cmFuc3BhcmVudFwiKSByZXR1cm4gXCJ0cmFuc3BhcmVudFwiO1xuICByZXR1cm4gYjtcbn1cblxuZnVuY3Rpb24gcmFkaXVzVmFsdWUocjogUmFkaXVzKTogc3RyaW5nIHtcbiAgaWYgKHIgPT09IFwibm9uZVwiKSByZXR1cm4gXCIwXCI7XG4gIHJldHVybiBgdmFyKC0tcG9sbHktcmFkaXVzLSR7cn0pYDtcbn1cblxuZnVuY3Rpb24gYm9yZGVyQ29sb3JWYWx1ZShiOiBCb3JkZXIpOiBzdHJpbmcge1xuICBpZiAoYiA9PT0gXCJub25lXCIpIHJldHVybiBcInRyYW5zcGFyZW50XCI7XG4gIGlmIChiID09PSBcInN0cm9uZ1wiKSByZXR1cm4gXCJ2YXIoLS1wb2xseS1ib3JkZXItc3Ryb25nKVwiO1xuICByZXR1cm4gXCJ2YXIoLS1wb2xseS1ib3JkZXIpXCI7XG59XG5cbmZ1bmN0aW9uIGJvcmRlcldpZHRoVmFsdWUodzogQm9yZGVyV2lkdGgpOiBzdHJpbmcge1xuICBpZiAodyA9PT0gXCJub25lXCIpIHJldHVybiBcIjBcIjtcbiAgcmV0dXJuIGB2YXIoLS1wb2xseS1ib3JkZXItd2lkdGgtJHt3fSlgO1xufVxuXG5mdW5jdGlvbiBzaGFkb3dWYWx1ZShzOiBTaGFkb3cpOiBzdHJpbmcge1xuICBpZiAocyA9PT0gXCJub25lXCIpIHJldHVybiBcIm5vbmVcIjtcbiAgcmV0dXJuIGB2YXIoLS1wb2xseS1zaGFkb3ctJHtzfSlgO1xufVxuXG5mdW5jdGlvbiBib3JkZXJTaWRlc0NsYXNzKHNpZGVzOiBCb3JkZXJTaWRlcyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChzaWRlcyA9PT0gXCJhbGxcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHNpZGVzID09PSBcImJsb2NrLXN0YXJ0XCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtYmxvY2stc3RhcnRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJibG9jay1lbmRcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1ibG9jay1lbmRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJpbmxpbmUtc3RhcnRcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1pbmxpbmUtc3RhcnRcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJpbmxpbmUtZW5kXCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtaW5saW5lLWVuZFwiXTtcbiAgaWYgKHNpZGVzID09PSBcImJsb2NrXCIpIHJldHVybiBjbGFzc2VzW1wic2lkZXMtYmxvY2tcIl07XG4gIGlmIChzaWRlcyA9PT0gXCJpbmxpbmVcIikgcmV0dXJuIGNsYXNzZXNbXCJzaWRlcy1pbmxpbmVcIl07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8vIGJpb21lLWlnbm9yZSBsaW50L2NvbXBsZXhpdHkvbm9FeGNlc3NpdmVDb2duaXRpdmVDb21wbGV4aXR5OiBwcm9wLXRvLWN1c3RvbS1wcm9wZXJ0eSBtYXBwaW5nOyBmbGF0IGFuZCBsaW5lYXIsIG1pcnJvcnMgTGF5b3V0LnRzeC5cbmV4cG9ydCBmdW5jdGlvbiBTdXJmYWNlKHByb3BzOiBTdXJmYWNlUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgdmFyaWFudCA9IFwicGxhaW5cIiB9ID0gcHJvcHM7XG4gIGNvbnN0IHYgPSB2YXJpYW50RGVmYXVsdHNbdmFyaWFudF07XG5cbiAgY29uc3QgYXMgPSBwcm9wcy5hcyA/PyBcImRpdlwiO1xuICBjb25zdCBwYWRkaW5nID0gcHJvcHMucGFkZGluZyA/PyB2LnBhZGRpbmc7XG4gIGNvbnN0IGJhY2tncm91bmQgPSBwcm9wcy5iYWNrZ3JvdW5kID8/IHYuYmFja2dyb3VuZDtcbiAgY29uc3QgcmFkaXVzID0gcHJvcHMucmFkaXVzID8/IHYucmFkaXVzO1xuICBjb25zdCBib3JkZXIgPSBwcm9wcy5ib3JkZXIgPz8gdi5ib3JkZXI7XG4gIGNvbnN0IGJvcmRlclNpZGVzID0gcHJvcHMuYm9yZGVyU2lkZXMgPz8gdi5ib3JkZXJTaWRlcyA/PyBcImFsbFwiO1xuICBjb25zdCBzaGFkb3cgPSBwcm9wcy5zaGFkb3cgPz8gdi5zaGFkb3c7XG4gIGNvbnN0IGlubGluZSA9IHByb3BzLmlubGluZSA/PyB2LmlubGluZTtcbiAgY29uc3Qgd2lkdGggPSBwcm9wcy53aWR0aCA/PyB2LndpZHRoO1xuICBjb25zdCBoZWlnaHQgPSBwcm9wcy5oZWlnaHQgPz8gdi5oZWlnaHQ7XG4gIGNvbnN0IG1pbkhlaWdodCA9IHByb3BzLm1pbkhlaWdodCA/PyB2Lm1pbkhlaWdodDtcbiAgY29uc3QgbWF4SW5saW5lU2l6ZSA9IHByb3BzLm1heElubGluZVNpemUgPz8gdi5tYXhJbmxpbmVTaXplO1xuICBjb25zdCBwb3NpdGlvbiA9IHByb3BzLnBvc2l0aW9uID8/IHYucG9zaXRpb247XG4gIGNvbnN0IGluc2V0ID0gcHJvcHMuaW5zZXQgPz8gdi5pbnNldDtcbiAgY29uc3QgekluZGV4ID0gcHJvcHMuekluZGV4ID8/IHYuekluZGV4O1xuICAvLyBwb2xseSMxMjYvIzEzNTogbm8gdmFyaWFudCBzZXRzIHRoZXNlLCBzbyB0aGV5IHJlc29sdmUgc3RyYWlnaHQgZnJvbSBwcm9wcy5cbiAgY29uc3QgeyBtYXhIZWlnaHQsIG92ZXJmbG93LCBib3JkZXJTdHlsZSwgdHJhbnNmb3JtLCBib3JkZXJDb2xvciwgc2NoZW1lLCBwb2ludGVyRXZlbnRzIH0gPSBwcm9wcztcblxuICAvLyBBIGJvcmRlcmVkIHN1cmZhY2UgbmVlZHMgYSB3aWR0aC4gSWYgdGhlIGNvbnN1bWVyIGFza2VkIGZvciBhIGJvcmRlciDigJRcbiAgLy8gYnkgbmFtZSBvciBieSByYXcgY29sb3VyIOKAlCBidXQgZGlkbid0IHBpY2sgYSB3aWR0aCwgaW5mZXIgJ2RlZmF1bHQnXG4gIC8vIHNvIHRoZSBib3JkZXIgcmVuZGVycy5cbiAgY29uc3Qgd2FudHNCb3JkZXIgPSAoYm9yZGVyICE9PSB1bmRlZmluZWQgJiYgYm9yZGVyICE9PSBcIm5vbmVcIikgfHwgYm9yZGVyQ29sb3IgIT09IHVuZGVmaW5lZDtcbiAgY29uc3QgYm9yZGVyV2lkdGggPSBwcm9wcy5ib3JkZXJXaWR0aCA/PyB2LmJvcmRlcldpZHRoID8/ICh3YW50c0JvcmRlciA/IFwiZGVmYXVsdFwiIDogdW5kZWZpbmVkKTtcblxuICBjb25zdCBzdHlsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBpZiAocGFkZGluZykgc3R5bGVbXCItLXMtcFwiXSA9IHBhZGRpbmc7XG4gIGlmIChiYWNrZ3JvdW5kKSBzdHlsZVtcIi0tcy1iZ1wiXSA9IGJnVmFsdWUoYmFja2dyb3VuZCk7XG4gIGlmIChyYWRpdXMpIHN0eWxlW1wiLS1zLXJhZGl1c1wiXSA9IHJhZGl1c1ZhbHVlKHJhZGl1cyk7XG4gIGlmIChib3JkZXIpIHN0eWxlW1wiLS1zLWJvcmRlci1jb2xvclwiXSA9IGJvcmRlckNvbG9yVmFsdWUoYm9yZGVyKTtcbiAgLy8gQSByYXcgYm9yZGVyQ29sb3Igd2lucyBvdmVyIHdoYXRldmVyIHRva2VuIGBib3JkZXJgIHJlc29sdmVkIHRvLlxuICBpZiAoYm9yZGVyQ29sb3IpIHN0eWxlW1wiLS1zLWJvcmRlci1jb2xvclwiXSA9IGJvcmRlckNvbG9yO1xuICBpZiAoYm9yZGVyV2lkdGgpIHN0eWxlW1wiLS1zLWJvcmRlci13aWR0aFwiXSA9IGJvcmRlcldpZHRoVmFsdWUoYm9yZGVyV2lkdGgpO1xuICBpZiAoc2hhZG93KSBzdHlsZVtcIi0tcy1zaGFkb3dcIl0gPSBzaGFkb3dWYWx1ZShzaGFkb3cpO1xuICBpZiAoYm9yZGVyU3R5bGUpIHN0eWxlW1wiLS1zLWJvcmRlci1zdHlsZVwiXSA9IGJvcmRlclN0eWxlO1xuICBpZiAocG9pbnRlckV2ZW50cykgc3R5bGVbXCItLXMtcGVcIl0gPSBwb2ludGVyRXZlbnRzO1xuICBpZiAod2lkdGgpIHN0eWxlW1wiLS1zLXdcIl0gPSB3aWR0aDtcbiAgaWYgKGhlaWdodCkgc3R5bGVbXCItLXMtaFwiXSA9IGhlaWdodDtcbiAgaWYgKG1pbkhlaWdodCkgc3R5bGVbXCItLXMtbWhcIl0gPSBtaW5IZWlnaHQ7XG4gIGlmIChtYXhIZWlnaHQpIHN0eWxlW1wiLS1zLW1heGhcIl0gPSBtYXhIZWlnaHQ7XG4gIGlmIChtYXhJbmxpbmVTaXplKSBzdHlsZVtcIi0tcy1taXNcIl0gPSBtYXhJbmxpbmVTaXplO1xuICBpZiAob3ZlcmZsb3cpIHN0eWxlW1wiLS1zLW92ZXJmbG93XCJdID0gb3ZlcmZsb3c7XG4gIGlmIChwb3NpdGlvbikgc3R5bGVbXCItLXMtcG9zaXRpb25cIl0gPSBwb3NpdGlvbjtcbiAgaWYgKGluc2V0KSBzdHlsZVtcIi0tcy1pbnNldFwiXSA9IGluc2V0O1xuICBpZiAodHJhbnNmb3JtKSBzdHlsZVtcIi0tcy10cmFuc2Zvcm1cIl0gPSB0cmFuc2Zvcm07XG4gIGlmICh6SW5kZXggIT09IHVuZGVmaW5lZCkgc3R5bGVbXCItLXMtelwiXSA9IFN0cmluZyh6SW5kZXgpO1xuXG4gIGlmIChwcm9wcy5zdHlsZSkge1xuICAgIE9iamVjdC5hc3NpZ24oc3R5bGUsIHByb3BzLnN0eWxlIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPik7XG4gIH1cblxuICBjb25zdCBwYXJ0czogKHN0cmluZyB8IHVuZGVmaW5lZClbXSA9IFtjbGFzc2VzW1wic3VyZmFjZVwiXV07XG4gIGlmIChpbmxpbmUpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImlubGluZVwiXSk7XG4gIHBhcnRzLnB1c2goYm9yZGVyU2lkZXNDbGFzcyhib3JkZXJTaWRlcykpO1xuICBpZiAocHJvcHMuY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKHByb3BzLmNsYXNzTmFtZSk7XG4gIGNvbnN0IGNsYXNzTmFtZSA9IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKTtcblxuICBjb25zdCBwYXNzdGhyb3VnaDogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gPSB7fTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocHJvcHMpKSB7XG4gICAgY29uc3QgaXNEYXRhID0ga2V5LnN0YXJ0c1dpdGgoXCJkYXRhLVwiKTtcbiAgICBjb25zdCBpc0FyaWEgPSBrZXkuc3RhcnRzV2l0aChcImFyaWEtXCIpO1xuICAgIGlmICghaXNEYXRhICYmICFpc0FyaWEgJiYga2V5ICE9PSBcInRpdGxlXCIpIGNvbnRpbnVlO1xuICAgIGlmIChrZXkgPT09IFwiZGF0YS1wb2xseS1zdXJmYWNlXCIpIGNvbnRpbnVlO1xuICAgIGlmIChrZXkgPT09IFwiYXJpYS1sYWJlbFwiIHx8IGtleSA9PT0gXCJhcmlhLWxhYmVsbGVkYnlcIiB8fCBrZXkgPT09IFwiYXJpYS1kZXNjcmliZWRieVwiKSBjb250aW51ZTtcbiAgICBjb25zdCB2YWx1ZSA9IChwcm9wcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICBwYXNzdGhyb3VnaFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgaWQ6IHByb3BzLmlkLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgc3R5bGUsXG4gICAgICBvbkNsaWNrOiBwcm9wcy5vbkNsaWNrLFxuICAgICAgb25LZXlEb3duOiBwcm9wcy5vbktleURvd24sXG4gICAgICByb2xlOiBwcm9wcy5yb2xlLFxuICAgICAgdGFiSW5kZXg6IHByb3BzLnRhYkluZGV4LFxuICAgICAgXCJhcmlhLWxhYmVsXCI6IHByb3BzW1wiYXJpYS1sYWJlbFwiXSxcbiAgICAgIFwiYXJpYS1sYWJlbGxlZGJ5XCI6IHByb3BzW1wiYXJpYS1sYWJlbGxlZGJ5XCJdLFxuICAgICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHByb3BzW1wiYXJpYS1kZXNjcmliZWRieVwiXSxcbiAgICAgIFwiZGF0YS1wb2xseS1zdXJmYWNlXCI6IHZhcmlhbnQsXG4gICAgICBcImRhdGEtcG9sbHktdGhlbWVcIjogc2NoZW1lLFxuICAgICAgLi4ucGFzc3Rocm91Z2gsXG4gICAgfSxcbiAgICBwcm9wcy5jaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIENhcmQg4oCUIGNvbXBvdW5kIHByaW1pdGl2ZSB0aGF0IGNvbXBvc2VzIFN1cmZhY2UgZm9yIGVhY2ggbmFtZWQgc2xvdC5cbiAqXG4gKiBDYXJkIGlzIHRoZSBmaXJzdCBjb21wb3VuZCB0aGF0IGlzIHB1cmVseSBhIHJlLXNraW4gb2YgU3VyZmFjZSDigJQgbm9cbiAqIGJlaGF2aW91cmFsIGxheWVyLiBIZWFkZXIsIEJvZHksIGFuZCBGb290ZXIgYXJlIGVhY2ggU3VyZmFjZXMgd2l0aFxuICogc2Vuc2libGUgZGVmYXVsdHM7IFJvb3QgaXMgYSByYWlzZWQgU3VyZmFjZSB0aGF0IHdyYXBzIHRoZW0uIEV2ZXJ5XG4gKiBzbG90IGFjY2VwdHMgdGhlIGZ1bGwgU3VyZmFjZVByb3BzLCBzbyBjb25zdW1lcnMgcmV0aW50LCBvdmVycmlkZSwgb3JcbiAqIHJlYWNoIGZvciByYXcgcGFkZGluZyB3aXRob3V0IHJlYWNoaW5nIHBhc3QgdGhlIHByaW1pdGl2ZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IFN1cmZhY2UsIHR5cGUgU3VyZmFjZVByb3BzIH0gZnJvbSBcIi4vU3VyZmFjZS50c3hcIjtcblxuZXhwb3J0IHR5cGUgQ2FyZFByb3BzID0gU3VyZmFjZVByb3BzO1xuZXhwb3J0IHR5cGUgQ2FyZFNsb3RQcm9wcyA9IFN1cmZhY2VQcm9wcztcblxuZnVuY3Rpb24gUm9vdChwcm9wczogQ2FyZFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHZhcmlhbnQgPSBcInJhaXNlZFwiLCByYWRpdXMgPSBcIm1kXCIsIC4uLnJlc3QgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlIHZhcmlhbnQ9e3ZhcmlhbnR9IHJhZGl1cz17cmFkaXVzfSBkYXRhLXBvbGx5LWNhcmQgey4uLnJlc3R9PlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSGVhZGVyKHByb3BzOiBDYXJkU2xvdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgcGFkZGluZyA9IFwidmFyKC0tcG9sbHktc3BhY2UtbWQpIHZhcigtLXBvbGx5LXNwYWNlLWxnKVwiLFxuICAgIGJvcmRlciA9IFwiZGVmYXVsdFwiLFxuICAgIGJvcmRlclNpZGVzID0gXCJibG9jay1lbmRcIixcbiAgICAuLi5yZXN0XG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgcGFkZGluZz17cGFkZGluZ31cbiAgICAgIGJvcmRlcj17Ym9yZGVyfVxuICAgICAgYm9yZGVyU2lkZXM9e2JvcmRlclNpZGVzfVxuICAgICAgZGF0YS1wb2xseS1jYXJkLWhlYWRlclxuICAgICAgey4uLnJlc3R9XG4gICAgPlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gQm9keShwcm9wczogQ2FyZFNsb3RQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBwYWRkaW5nID0gXCJ2YXIoLS1wb2xseS1zcGFjZS1sZylcIiwgLi4ucmVzdCB9ID0gcHJvcHM7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2UgcGFkZGluZz17cGFkZGluZ30gZGF0YS1wb2xseS1jYXJkLWJvZHkgey4uLnJlc3R9PlxuICAgICAge3Byb3BzLmNoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gRm9vdGVyKHByb3BzOiBDYXJkU2xvdFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7XG4gICAgcGFkZGluZyA9IFwidmFyKC0tcG9sbHktc3BhY2UtbWQpIHZhcigtLXBvbGx5LXNwYWNlLWxnKVwiLFxuICAgIGJvcmRlciA9IFwiZGVmYXVsdFwiLFxuICAgIGJvcmRlclNpZGVzID0gXCJibG9jay1zdGFydFwiLFxuICAgIC4uLnJlc3RcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICBwYWRkaW5nPXtwYWRkaW5nfVxuICAgICAgYm9yZGVyPXtib3JkZXJ9XG4gICAgICBib3JkZXJTaWRlcz17Ym9yZGVyU2lkZXN9XG4gICAgICBkYXRhLXBvbGx5LWNhcmQtZm9vdGVyXG4gICAgICB7Li4ucmVzdH1cbiAgICA+XG4gICAgICB7cHJvcHMuY2hpbGRyZW59XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5leHBvcnQgY29uc3QgQ2FyZCA9IHsgUm9vdCwgSGVhZGVyLCBCb2R5LCBGb290ZXIgfTtcbiIsCiAgICAiLyoqXG4gKiBDaGVja2JveCDigJQgbmF0aXZlIGNoZWNrYm94IHdyYXBwZWQgaW4gYSBsYWJlbC5cbiAqXG4gKiBQYXNzIGEgcGxhaW4gYm9vbGVhbiBmb3IgY29udHJvbGxlZCB1c2UgKGNhbGxlciBsaXN0ZW5zIGVsc2V3aGVyZSksXG4gKiBvciBhIFNpZ25hbDxib29sZWFuPiB0byBoYXZlIHRoZSBwcmltaXRpdmUgYmluZCBpdHMgb3duIGNoYW5nZVxuICogbGlzdGVuZXIgYW5kIG11dGF0ZSB0aGUgc2lnbmFsIGRpcmVjdGx5LiBUaGUgbGFiZWwgd3JhcHMgdGhlIGlucHV0XG4gKiBzbyBjbGlja3MgYW55d2hlcmUgaW4gdGhlIHRhcmdldCBhcmVhIHRvZ2dsZSBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ2hlY2tib3gubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuXG5leHBvcnQgdHlwZSBDaGVja2JveFByb3BzID0ge1xuICBjaGVja2VkPzogYm9vbGVhbiB8IFNpZ25hbDxib29sZWFuPjtcbiAgZGVmYXVsdENoZWNrZWQ/OiBib29sZWFuO1xuICBuYW1lPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGxhYmVsPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gaXNTaWduYWwodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBTaWduYWw8Ym9vbGVhbj4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmIHZhbHVlICE9PSBudWxsICYmIFwidmFsdWVcIiBpbiB2YWx1ZSAmJiBcInBlZWtcIiBpbiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENoZWNrYm94KHByb3BzOiBDaGVja2JveFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoZWNrZWQsIGRlZmF1bHRDaGVja2VkLCBuYW1lLCBkaXNhYmxlZCA9IGZhbHNlLCBsYWJlbCwgY2xhc3NOYW1lLCBpZCB9ID0gcHJvcHM7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKGU6IEpTWC5UYXJnZXRlZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KTogdm9pZCA9PiB7XG4gICAgaWYgKGlzU2lnbmFsKGNoZWNrZWQpKSB7XG4gICAgICBjaGVja2VkLnZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LmNoZWNrZWQ7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGNoZWNrZWRWYWx1ZSA9IGlzU2lnbmFsKGNoZWNrZWQpID8gY2hlY2tlZC52YWx1ZSA6IGNoZWNrZWQ7XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImNoZWNrYm94XCJdXTtcbiAgaWYgKGRpc2FibGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJkaXNhYmxlZFwiXSA/PyBcIlwiKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPExheW91dFxuICAgICAgYXM9XCJsYWJlbFwiXG4gICAgICBpbmxpbmVcbiAgICAgIGNvbHVtbnM9XCJhdXRvIGF1dG9cIlxuICAgICAgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCJcbiAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgY2xhc3NOYW1lPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWNoZWNrYm94XG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPXtpZH1cbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJpbnB1dFwiXX1cbiAgICAgICAgY2hlY2tlZD17Y2hlY2tlZFZhbHVlfVxuICAgICAgICBkZWZhdWx0Q2hlY2tlZD17ZGVmYXVsdENoZWNrZWR9XG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIC8+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICA8L0xheW91dD5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBDbHVzdGVyIOKAlCB3cmFwcGluZyByb3cgb2YgdmFyaWFibGUtd2lkdGggaXRlbXMuXG4gKlxuICogVGhlIGZsZXgtd3JhcCBjb3VudGVycGFydCB0byA8TGF5b3V0Pi4gV2hlcmUgTGF5b3V0IG93bnMgQ1NTIGdyaWRcbiAqIHRyYWNrcywgQ2x1c3RlciBvd25zIGEgcm93IG9mIGl0ZW1zIHRoYXQgZGlmZmVyIGluIHdpZHRoIGFuZCBtdXN0XG4gKiByZWZsb3cgYXMgc3BhY2UgcnVucyBvdXQg4oCUIGZpbHRlciBjaGlwcywgdGFnIGFuZCBiYWRnZSBsaXN0cywgZ3JvdXBzXG4gKiBvZiBzbWFsbCBidXR0b25zLiBJdGVtcyBrZWVwIGV2ZW4gc3BhY2luZyBvbiBib3RoIGF4ZXMgdmlhIGBnYXBgOyB0aGVcbiAqIHJvdyB3cmFwcyBhdXRvbWF0aWNhbGx5IGF0IG5hcnJvdyB3aWR0aHMuIExpa2UgTGF5b3V0LCBwcm9wcyBtYXAgdG9cbiAqIENTUyBjdXN0b20gcHJvcGVydGllcyBzbyBjb25zdW1lcnMgY2FuIG92ZXJyaWRlIGFueSBvZiB0aGVtIGluIGFcbiAqIG1lZGlhIHF1ZXJ5IHdpdGhvdXQgdG91Y2hpbmcgc3BlY2lmaWNpdHkuXG4gKlxuICogVGhpcyBpcyB0aGUgc2Vjb25kIChhbmQgZmluYWwpIGxheW91dCBwcmltaXRpdmU6IGEgY29uc3VtZXIgbmV2ZXJcbiAqIHdyaXRlcyBgZGlzcGxheTogZmxleGAgb3IgYGRpc3BsYXk6IGdyaWRgIHRoZW1zZWx2ZXMg4oCUIGdyaWQgZ29lc1xuICogdGhyb3VnaCA8TGF5b3V0PiwgYSB3cmFwcGluZyBjbHVzdGVyIGdvZXMgdGhyb3VnaCA8Q2x1c3Rlcj4uXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDb21wb25lbnRDaGlsZHJlbiwgY3JlYXRlRWxlbWVudCwgdHlwZSBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9DbHVzdGVyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGNvbGxlY3RQYXNzdGhyb3VnaCwgdHlwZSBQYXNzdGhyb3VnaEF0dHJzIH0gZnJvbSBcIi4vaW50ZXJuYWwvcGFzc3Rocm91Z2gudHNcIjtcblxuZXhwb3J0IHR5cGUgQ2x1c3RlclByb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuXG4gIC8qKiBQb2x5bW9ycGhpYyBlbGVtZW50IChkaXYsIG5hdiwgdWwsIOKApikuIERlZmF1bHRzIHRvICdkaXYnLiAqL1xuICBhcz86IGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcblxuICAvKiogU3BhY2UgYmV0d2VlbiBpdGVtcywgYm90aCBheGVzLiBUeXBpY2FsbHkgYSBgLS1wb2xseS1zcGFjZS0qYCB0b2tlbi4gKi9cbiAgZ2FwPzogc3RyaW5nO1xuICBwYWRkaW5nPzogc3RyaW5nO1xuXG4gIC8qKiBNYWluLWF4aXMgZGlzdHJpYnV0aW9uIOKAlCBtYXBzIHRvIGp1c3RpZnktY29udGVudC4gRGVmYXVsdDogc3RhcnQuICovXG4gIGp1c3RpZnk/OiBzdHJpbmc7XG4gIC8qKiBDcm9zcy1heGlzIGFsaWdubWVudCB3aXRoaW4gYSB3cmFwcGVkIHJvdyDigJQgbWFwcyB0byBhbGlnbi1pdGVtcy4gRGVmYXVsdDogY2VudGVyLiAqL1xuICBhbGlnbj86IHN0cmluZztcblxuICAvKiogUmVuZGVyIGFzIGlubGluZS1mbGV4IHNvIHRoZSBjbHVzdGVyIGZsb3dzIGlubGluZSB3aXRoIHN1cnJvdW5kaW5nIHRleHQuICovXG4gIGlubGluZT86IGJvb2xlYW47XG5cbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgcm9sZT86IEpTWC5BcmlhUm9sZTtcbiAgXCJhcmlhLWxhYmVsXCI/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gQ2x1c3Rlcihwcm9wczogQ2x1c3RlclByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCBhcyA9IFwiZGl2XCIsIGdhcCwgcGFkZGluZywganVzdGlmeSwgYWxpZ24sIGlubGluZSwgY2xhc3NOYW1lLCBpZCwgcm9sZSB9ID0gcHJvcHM7XG5cbiAgY29uc3Qgc3R5bGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgaWYgKGdhcCkgc3R5bGVbXCItLWMtZ2FwXCJdID0gZ2FwO1xuICBpZiAocGFkZGluZykgc3R5bGVbXCItLWMtcFwiXSA9IHBhZGRpbmc7XG4gIGlmIChqdXN0aWZ5KSBzdHlsZVtcIi0tYy1qY1wiXSA9IGp1c3RpZnk7XG4gIGlmIChhbGlnbikgc3R5bGVbXCItLWMtYWlcIl0gPSBhbGlnbjtcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiY2x1c3RlclwiXV07XG4gIGlmIChpbmxpbmUpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImlubGluZVwiXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICBhcyxcbiAgICB7XG4gICAgICAvLyBDb25zdW1lciBkYXRhLSovYXJpYS0qIGZpcnN0OyB0aGUgcHJpbWl0aXZlJ3Mgb3duIGF0dHJpYnV0ZXMgd2luLlxuICAgICAgLi4uY29sbGVjdFBhc3N0aHJvdWdoKHByb3BzKSxcbiAgICAgIGlkLFxuICAgICAgY2xhc3M6IHBhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSxcbiAgICAgIHN0eWxlLFxuICAgICAgcm9sZSxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBwcm9wc1tcImFyaWEtbGFiZWxcIl0sXG4gICAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICAgIFwiZGF0YS1wb2xseS1jbHVzdGVyXCI6IHRydWUsXG4gICAgfSxcbiAgICBjaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIENvZGUg4oCUIGlubGluZSBtb25vc3BhY2UgY29kZSBzcGFuLlxuICpcbiAqIFJlbmRlcnMgYSBgPGNvZGU+YCB3aXRoIHRoZSBgLS1wb2xseS1mb250LW1vbm9gIHN0YWNrLCBhIGZhaW50IHN1bmtlblxuICogdGludCwgYW5kIHNudWcgcGFkZGluZyBzbyBhIGNvbnN1bWVyIG5ldmVyIGhhbmQtcm9sbHMgYSBgLm1vbm9gIGNsYXNzXG4gKiBmb3IgaW5saW5lIGNvZGUsIGlkZW50aWZpZXJzLCBvciBrZXlib2FyZCBoaW50cy4gRm9yIG11bHRpLWxpbmUgY29kZVxuICogYmxvY2tzLCBwYXNzIGBibG9ja2AsIHdoaWNoIHN3aXRjaGVzIHRvIGEgcHJlLXdyYXBwZWQgPHByZT48Y29kZT4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ29kZS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5cbmV4cG9ydCB0eXBlIENvZGVQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgLyoqIFJlbmRlciBhcyBhIGJsb2NrICg8cHJlPjxjb2RlPikgaW5zdGVhZCBvZiBhbiBpbmxpbmUgc3Bhbi4gKi9cbiAgYmxvY2s/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIENvZGUocHJvcHM6IENvZGVQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgYmxvY2ssIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSogc3ByZWFkIGZpcnN0OyB0aGUgZXhwbGljaXQgYXR0cmlidXRlcyBhZnRlclxuICAvLyB3aW4gb24gYW55IGNvbGxpc2lvbi5cbiAgY29uc3QgcGFzc3Rocm91Z2ggPSBjb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpO1xuXG4gIGlmIChibG9jaykge1xuICAgIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJibG9ja1wiXV07XG4gICAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICAgIHJldHVybiAoXG4gICAgICA8cHJlXG4gICAgICAgIHsuLi5wYXNzdGhyb3VnaH1cbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgIGRhdGEtcG9sbHktY29kZT1cImJsb2NrXCJcbiAgICAgID5cbiAgICAgICAgPGNvZGU+e2NoaWxkcmVufTwvY29kZT5cbiAgICAgIDwvcHJlPlxuICAgICk7XG4gIH1cblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wiY29kZVwiXV07XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8Y29kZVxuICAgICAgey4uLnBhc3N0aHJvdWdofVxuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktY29kZT1cImlubGluZVwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvY29kZT5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBDb2xsYXBzaWJsZSDigJQgbmF0aXZlIDxkZXRhaWxzPi88c3VtbWFyeT4gd3JhcHBlci5cbiAqXG4gKiBVc2VzIHRoZSBicm93c2VyJ3MgYnVpbHQtaW4gZGlzY2xvc3VyZSBzZW1hbnRpY3Mgc28ga2V5Ym9hcmQgYW5kXG4gKiBzY3JlZW4tcmVhZGVyIGJlaGF2aW91ciBjb21lIGZyZWUuIFRoZSBhcnJvdyBpcyBhIHJlYWwgZWxlbWVudCwgbm90IGFcbiAqIDo6YmVmb3JlOiB0aGUgc3VtbWFyeSBpcyBhIHR3by10cmFjayA8TGF5b3V0PiwgYW5kIG5vIGxheW91dCBjb250YWluZXIgY2FuXG4gKiBhcnJhbmdlIGEgcHNldWRvLWVsZW1lbnQuIEl0IHJvdGF0ZXMgb24gb3Blbi5cbiAqIENvbG9ycywgc3BhY2luZywgYW5kIG1vdGlvbiBjb21lIGZyb20gdG9rZW5zOyBgcHJlZmVycy1yZWR1Y2VkLW1vdGlvbmBcbiAqIHplcm9lcyB0aGUgcm90YXRpb24gdmlhIHRoZSBtb3Rpb24gdG9rZW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21wb25lbnRDaGlsZHJlbiwgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ29sbGFwc2libGUubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuXG5leHBvcnQgdHlwZSBDb2xsYXBzaWJsZVByb3BzID0ge1xuICAvKiogRGlzY2xvc3VyZSBoZWFkZXIuIEEgc3RyaW5nIGZvciB0aGUgY29tbW9uIGNhc2UsIG9yIGFueSBub2RlIOKAlFxuICAgKiBlLmcuIGEgbXV0ZWQsIHNtYWxsIDxUZXh0PiDigJQgd2hlbiB0aGUgaGVhZGVyIG5lZWRzIHN0eWxpbmcuICovXG4gIHN1bW1hcnk6IENvbXBvbmVudENoaWxkcmVuO1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGRlZmF1bHRPcGVuPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbi8qKiBJbnB1dCB0eXBlcyB3aG9zZSBTcGFjZS9FbnRlciBpcyBhbiBhY3RpdmF0aW9uLCBub3QgdGV4dCBlbnRyeSDigJQgdGhlc2VcbiAqIGtlZXAgdGhlaXIgb3duIGtleWJvYXJkIGJlaGF2aW91ciBhbmQgbXVzdCBub3QgYmUgZ3VhcmRlZC4gKi9cbmNvbnN0IE5PTl9URVhUX0lOUFVUX1RZUEVTID0gbmV3IFNldChbXG4gIFwiY2hlY2tib3hcIixcbiAgXCJyYWRpb1wiLFxuICBcImJ1dHRvblwiLFxuICBcInN1Ym1pdFwiLFxuICBcInJlc2V0XCIsXG4gIFwiZmlsZVwiLFxuICBcImltYWdlXCIsXG4gIFwicmFuZ2VcIixcbiAgXCJjb2xvclwiLFxuXSk7XG5cbi8qKiBJcyB0aGUgZXZlbnQgdGFyZ2V0IGEgZmllbGQgd2hlcmUgU3BhY2UvRW50ZXIgaW5zZXJ0cy9lZGl0cyB0ZXh0PyAqL1xuZnVuY3Rpb24gaXNUZXh0RW50cnlUYXJnZXQodGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGwpOiBib29sZWFuIHtcbiAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSByZXR1cm4gdHJ1ZTtcbiAgaWYgKHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSkgcmV0dXJuIHRydWU7XG4gIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgcmV0dXJuICFOT05fVEVYVF9JTlBVVF9UWVBFUy5oYXModGFyZ2V0LnR5cGUpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaHJvbWl1bSB0b2dnbGVzIGEgPGRldGFpbHM+IG9uIHRoZSBTcGFjZS9FbnRlciAqa2V5dXAqIG9mIGl0cyA8c3VtbWFyeT4sXG4gKiBldmVuIHdoZW4gZm9jdXMgc2l0cyBpbiBhIG5lc3RlZCB0ZXh0IGZpZWxkIOKAlCBzbyBldmVyeSBzcGFjZSB0eXBlZCBpbiBhblxuICogZWRpdGFibGUgaGVhZGVyIHdvdWxkIGNvbGxhcHNlIHRoZSBkaXNjbG9zdXJlLiBzdG9wUHJvcGFnYXRpb24gY2FuJ3Qgc3RvcFxuICogaXQgKHRoZSB0b2dnbGUgaXMgdGhlIHN1bW1hcnkncyBvd24gYWN0aXZhdGlvbiBiZWhhdmlvdXIsIG5vdCBhIGJ1YmJsaW5nXG4gKiBsaXN0ZW5lcikgYW5kIHByZXZlbnREZWZhdWx0IG9uICprZXlkb3duKiB3b3VsZCBzd2FsbG93IHRoZSBjaGFyYWN0ZXIuIFRoZVxuICogY2hhcmFjdGVyIGlzIGFscmVhZHkgaW5zZXJ0ZWQgYnkgdGhlIHRpbWUga2V5dXAgZmlyZXMsIHNvIGNhbmNlbGxpbmcgdGhlXG4gKiBrZXl1cCBkZWZhdWx0IGZvciB0ZXh0LWVudHJ5IGZpZWxkcyBraWxscyB0aGUgdG9nZ2xlIHdoaWxlIGxlYXZpbmcgdHlwaW5nXG4gKiB1bnRvdWNoZWQuIEJ1dHRvbnMvY2hlY2tib3gvcmFkaW8gZmFsbCB0aHJvdWdoIGFuZCBrZWVwIHRoZWlyIG93blxuICogYWN0aXZhdGlvbjsgdGhlIHN1bW1hcnkgaXRzZWxmIChubyBuZXN0ZWQgZmllbGQpIGtlZXBzIG5vcm1hbCBrZXlib2FyZFxuICogZGlzY2xvc3VyZS5cbiAqL1xuZnVuY3Rpb24gaGFuZGxlU3VtbWFyeUtleVVwKGV2ZW50OiBKU1guVGFyZ2V0ZWRLZXlib2FyZEV2ZW50PEhUTUxFbGVtZW50Pik6IHZvaWQge1xuICBpZiAoZXZlbnQua2V5ICE9PSBcIiBcIiAmJiBldmVudC5rZXkgIT09IFwiRW50ZXJcIikgcmV0dXJuO1xuICBpZiAoIWlzVGV4dEVudHJ5VGFyZ2V0KGV2ZW50LnRhcmdldCkpIHJldHVybjtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENvbGxhcHNpYmxlKHByb3BzOiBDb2xsYXBzaWJsZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHN1bW1hcnksIGNoaWxkcmVuLCBkZWZhdWx0T3BlbiA9IGZhbHNlLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcImNvbGxhcHNpYmxlXCJdXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuICByZXR1cm4gKFxuICAgIDxkZXRhaWxzXG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuam9pbihcIiBcIil9XG4gICAgICBvcGVuPXtkZWZhdWx0T3Blbn1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktY29sbGFwc2libGVcbiAgICA+XG4gICAgICA8TGF5b3V0XG4gICAgICAgIGFzPVwic3VtbWFyeVwiXG4gICAgICAgIGNvbHVtbnM9XCJhdXRvIDFmclwiXG4gICAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICAgIGFsaWduSXRlbXM9XCJjZW50ZXJcIlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXNbXCJzdW1tYXJ5XCJdfVxuICAgICAgICBvbktleVVwPXtoYW5kbGVTdW1tYXJ5S2V5VXB9XG4gICAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibWFya2VyXCJdfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcInN1bW1hcnlDb250ZW50XCJdfT57c3VtbWFyeX08L3NwYW4+XG4gICAgICA8L0xheW91dD5cbiAgICAgIDxkaXYgY2xhc3M9e2NsYXNzZXNbXCJjb250ZW50XCJdfT57Y2hpbGRyZW59PC9kaXY+XG4gICAgPC9kZXRhaWxzPlxuICApO1xufVxuIiwKICAgICJpbXBvcnR7Q29tcG9uZW50IGFzIG4sY3JlYXRlRWxlbWVudCBhcyB0LG9wdGlvbnMgYXMgZSx0b0NoaWxkQXJyYXkgYXMgcixGcmFnbWVudCBhcyB1LHJlbmRlciBhcyBvLGh5ZHJhdGUgYXMgaSxjcmVhdGVDb250ZXh0IGFzIGwsY3JlYXRlUmVmIGFzIGMsY2xvbmVFbGVtZW50IGFzIGZ9ZnJvbVwicHJlYWN0XCI7ZXhwb3J0e0NvbXBvbmVudCxGcmFnbWVudCxGcmFnbWVudCBhcyBTdHJpY3RNb2RlLGNyZWF0ZUNvbnRleHQsY3JlYXRlRWxlbWVudCxjcmVhdGVSZWZ9ZnJvbVwicHJlYWN0XCI7aW1wb3J0e3VzZVN0YXRlIGFzIGEsdXNlTGF5b3V0RWZmZWN0IGFzIHMsdXNlRWZmZWN0IGFzIGgsdXNlQ2FsbGJhY2sgYXMgdix1c2VDb250ZXh0IGFzIGQsdXNlRGVidWdWYWx1ZSBhcyBtLHVzZUlkIGFzIHAsdXNlSW1wZXJhdGl2ZUhhbmRsZSBhcyB5LHVzZU1lbW8gYXMgXyx1c2VSZWR1Y2VyIGFzIGIsdXNlUmVmIGFzIFN9ZnJvbVwicHJlYWN0L2hvb2tzXCI7ZXhwb3J0KmZyb21cInByZWFjdC9ob29rc1wiO2Z1bmN0aW9uIGcobix0KXtmb3IodmFyIGUgaW4gdCluW2VdPXRbZV07cmV0dXJuIG59ZnVuY3Rpb24gRShuLHQpe2Zvcih2YXIgZSBpbiBuKWlmKFwiX19zb3VyY2VcIiE9PWUmJiEoZSBpbiB0KSlyZXR1cm4hMDtmb3IodmFyIHIgaW4gdClpZihcIl9fc291cmNlXCIhPT1yJiZuW3JdIT09dFtyXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBDKG4sdCl7dmFyIGU9dCgpLHI9YSh7dDp7X186ZSx1OnR9fSksdT1yWzBdLnQsbz1yWzFdO3JldHVybiBzKGZ1bmN0aW9uKCl7dS5fXz1lLHUudT10LFIodSkmJm8oe3Q6dX0pfSxbbixlLHRdKSxoKGZ1bmN0aW9uKCl7cmV0dXJuIFIodSkmJm8oe3Q6dX0pLG4oZnVuY3Rpb24oKXtSKHUpJiZvKHt0OnV9KX0pfSxbbl0pLGV9ZnVuY3Rpb24gUihuKXt0cnl7cmV0dXJuISgodD1uLl9fKT09PShlPW4udSgpKSYmKDAhPT10fHwxL3Q9PTEvZSl8fHQhPXQmJmUhPWUpfWNhdGNoKG4pe3JldHVybiEwfXZhciB0LGV9ZnVuY3Rpb24geChuKXtuKCl9ZnVuY3Rpb24gdyhuKXtyZXR1cm4gbn1mdW5jdGlvbiBrKCl7cmV0dXJuWyExLHhdfXZhciBJPXM7ZnVuY3Rpb24gTShuLHQpe3RoaXMucHJvcHM9bix0aGlzLmNvbnRleHQ9dH1mdW5jdGlvbiBOKG4sZSl7ZnVuY3Rpb24gcihuKXt2YXIgdD10aGlzLnByb3BzLnJlZjtyZXR1cm4gdCE9bi5yZWYmJnQmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3QobnVsbCk6dC5jdXJyZW50PW51bGwpLGU/IWUodGhpcy5wcm9wcyxuKXx8dCE9bi5yZWY6RSh0aGlzLnByb3BzLG4pfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPXIsdChuLGUpfXJldHVybiB1LmRpc3BsYXlOYW1lPVwiTWVtbyhcIisobi5kaXNwbGF5TmFtZXx8bi5uYW1lKStcIilcIix1Ll9fZj11LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PSEwLHUudHlwZT1uLHV9KE0ucHJvdG90eXBlPW5ldyBuKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxNLnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGU9ZnVuY3Rpb24obix0KXtyZXR1cm4gRSh0aGlzLnByb3BzLG4pfHxFKHRoaXMuc3RhdGUsdCl9O3ZhciBUPWUuX19iO2UuX19iPWZ1bmN0aW9uKG4pe24udHlwZSYmbi50eXBlLl9fZiYmbi5yZWYmJihuLnByb3BzLnJlZj1uLnJlZixuLnJlZj1udWxsKSxUJiZUKG4pfTt2YXIgQT1cInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIil8fDM5MTE7ZnVuY3Rpb24gRChuKXtmdW5jdGlvbiB0KHQpe3ZhciBlPWcoe30sdCk7cmV0dXJuIGRlbGV0ZSBlLnJlZixuKGUsdC5yZWZ8fG51bGwpfXJldHVybiB0LiQkdHlwZW9mPUEsdC5yZW5kZXI9bix0LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50PXQuX19mPSEwLHQuZGlzcGxheU5hbWU9XCJGb3J3YXJkUmVmKFwiKyhuLmRpc3BsYXlOYW1lfHxuLm5hbWUpK1wiKVwiLHR9dmFyIEY9ZnVuY3Rpb24obix0KXtyZXR1cm4gbnVsbD09bj9udWxsOnIocihuKS5tYXAodCkpfSxMPXttYXA6Rixmb3JFYWNoOkYsY291bnQ6ZnVuY3Rpb24obil7cmV0dXJuIG4/cihuKS5sZW5ndGg6MH0sb25seTpmdW5jdGlvbihuKXt2YXIgdD1yKG4pO2lmKDEhPT10Lmxlbmd0aCl0aHJvd1wiQ2hpbGRyZW4ub25seVwiO3JldHVybiB0WzBdfSx0b0FycmF5OnJ9LE89ZS5fX2U7ZS5fX2U9ZnVuY3Rpb24obix0LGUscil7aWYobi50aGVuKWZvcih2YXIgdSxvPXQ7bz1vLl9fOylpZigodT1vLl9fYykmJnUuX19jKXJldHVybiBudWxsPT10Ll9fZSYmKHQuX19lPWUuX19lLHQuX19rPWUuX19rKSx1Ll9fYyhuLHQpO08obix0LGUscil9O3ZhciBVPWUudW5tb3VudDtmdW5jdGlvbiBWKG4sdCxlKXtyZXR1cm4gbiYmKG4uX19jJiZuLl9fYy5fX0gmJihuLl9fYy5fX0guX18uZm9yRWFjaChmdW5jdGlvbihuKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLl9fYyYmbi5fX2MoKX0pLG4uX19jLl9fSD1udWxsKSxudWxsIT0obj1nKHt9LG4pKS5fX2MmJihuLl9fYy5fX1A9PT1lJiYobi5fX2MuX19QPXQpLG4uX19jLl9fZT0hMCxuLl9fYz1udWxsKSxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBWKG4sdCxlKX0pKSxufWZ1bmN0aW9uIFcobix0LGUpe3JldHVybiBuJiZlJiYobi5fX3Y9bnVsbCxuLl9faz1uLl9fayYmbi5fX2subWFwKGZ1bmN0aW9uKG4pe3JldHVybiBXKG4sdCxlKX0pLG4uX19jJiZuLl9fYy5fX1A9PT10JiYobi5fX2UmJmUuYXBwZW5kQ2hpbGQobi5fX2UpLG4uX19jLl9fZT0hMCxuLl9fYy5fX1A9ZSkpLG59ZnVuY3Rpb24gUCgpe3RoaXMuX191PTAsdGhpcy5vPW51bGwsdGhpcy5fX2I9bnVsbH1mdW5jdGlvbiBqKG4pe3ZhciB0PW4uX18mJm4uX18uX19jO3JldHVybiB0JiZ0Ll9fYSYmdC5fX2Eobil9ZnVuY3Rpb24geihuKXt2YXIgZSxyLHUsbz1udWxsO2Z1bmN0aW9uIGkoaSl7aWYoZXx8KGU9bigpKS50aGVuKGZ1bmN0aW9uKG4pe24mJihvPW4uZGVmYXVsdHx8biksdT0hMH0sZnVuY3Rpb24obil7cj1uLHU9ITB9KSxyKXRocm93IHI7aWYoIXUpdGhyb3cgZTtyZXR1cm4gbz90KG8saSk6bnVsbH1yZXR1cm4gaS5kaXNwbGF5TmFtZT1cIkxhenlcIixpLl9fZj0hMCxpfWZ1bmN0aW9uIEIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1lLnVubW91bnQ9ZnVuY3Rpb24obil7dmFyIHQ9bi5fX2M7dCYmKHQuX196PSEwKSx0JiZ0Ll9fUiYmdC5fX1IoKSx0JiYzMiZuLl9fdSYmKG4udHlwZT1udWxsKSxVJiZVKG4pfSwoUC5wcm90b3R5cGU9bmV3IG4pLl9fYz1mdW5jdGlvbihuLHQpe3ZhciBlPXQuX19jLHI9dGhpcztudWxsPT1yLm8mJihyLm89W10pLHIuby5wdXNoKGUpO3ZhciB1PWooci5fX3YpLG89ITEsaT1mdW5jdGlvbigpe298fHIuX196fHwobz0hMCxlLl9fUj1udWxsLHU/dShjKTpjKCkpfTtlLl9fUj1pO3ZhciBsPWUuX19QO2UuX19QPW51bGw7dmFyIGM9ZnVuY3Rpb24oKXtpZighLS1yLl9fdSl7aWYoci5zdGF0ZS5fX2Epe3ZhciBuPXIuc3RhdGUuX19hO3IuX192Ll9fa1swXT1XKG4sbi5fX2MuX19QLG4uX19jLl9fTyl9dmFyIHQ7Zm9yKHIuc2V0U3RhdGUoe19fYTpyLl9fYj1udWxsfSk7dD1yLm8ucG9wKCk7KXQuX19QPWwsdC5mb3JjZVVwZGF0ZSgpfX07ci5fX3UrK3x8MzImdC5fX3V8fHIuc2V0U3RhdGUoe19fYTpyLl9fYj1yLl9fdi5fX2tbMF19KSxuLnRoZW4oaSxpKX0sUC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LFAucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihuLGUpe2lmKHRoaXMuX19iKXtpZih0aGlzLl9fdi5fX2spe3ZhciByPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksbz10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1WKHRoaXMuX19iLHIsby5fX089by5fX1ApfXRoaXMuX19iPW51bGx9dmFyIGk9ZS5fX2EmJnQodSxudWxsLG4uZmFsbGJhY2spO3JldHVybiBpJiYoaS5fX3UmPS0zMyksW3QodSxudWxsLGUuX19hP251bGw6bi5jaGlsZHJlbiksaV19O3ZhciBIPWZ1bmN0aW9uKG4sdCxlKXtpZigrK2VbMV09PT1lWzBdJiZuLmwuZGVsZXRlKHQpLG4ucHJvcHMucmV2ZWFsT3JkZXImJihcInRcIiE9PW4ucHJvcHMucmV2ZWFsT3JkZXJbMF18fCFuLmwuc2l6ZSkpZm9yKGU9bi5pO2U7KXtmb3IoO2UubGVuZ3RoPjM7KWUucG9wKCkoKTtpZihlWzFdPGVbMF0pYnJlYWs7bi5pPWU9ZVsyXX19O2Z1bmN0aW9uIFoobil7cmV0dXJuIHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uY29udGV4dH0sbi5jaGlsZHJlbn1mdW5jdGlvbiBZKG4pe3ZhciBlPXRoaXMscj1uLmg7aWYoZS5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe28obnVsbCxlLnYpLGUudj1udWxsLGUuaD1udWxsfSxlLmgmJmUuaCE9PXImJmUuY29tcG9uZW50V2lsbFVubW91bnQoKSwhZS52KXtmb3IodmFyIHU9ZS5fX3Y7bnVsbCE9PXUmJiF1Ll9fbSYmbnVsbCE9PXUuX187KXU9dS5fXztlLmg9cixlLnY9e25vZGVUeXBlOjEscGFyZW50Tm9kZTpyLGNoaWxkTm9kZXM6W10sX19rOntfX206dS5fX219LGNvbnRhaW5zOmZ1bmN0aW9uKCl7cmV0dXJuITB9LG5hbWVzcGFjZVVSSTpyLm5hbWVzcGFjZVVSSSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24obix0KXt0aGlzLmNoaWxkTm9kZXMucHVzaChuKSxlLmguaW5zZXJ0QmVmb3JlKG4sdCl9LHJlbW92ZUNoaWxkOmZ1bmN0aW9uKG4pe3RoaXMuY2hpbGROb2Rlcy5zcGxpY2UodGhpcy5jaGlsZE5vZGVzLmluZGV4T2Yobik+Pj4xLDEpLGUuaC5yZW1vdmVDaGlsZChuKX19fW8odChaLHtjb250ZXh0OmUuY29udGV4dH0sbi5fX3YpLGUudil9ZnVuY3Rpb24gJChuLGUpe3ZhciByPXQoWSx7X192Om4saDplfSk7cmV0dXJuIHIuY29udGFpbmVySW5mbz1lLHJ9KEIucHJvdG90eXBlPW5ldyBuKS5fX2E9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcyxlPWoodC5fX3YpLHI9dC5sLmdldChuKTtyZXR1cm4gclswXSsrLGZ1bmN0aW9uKHUpe3ZhciBvPWZ1bmN0aW9uKCl7dC5wcm9wcy5yZXZlYWxPcmRlcj8oci5wdXNoKHUpLEgodCxuLHIpKTp1KCl9O2U/ZShvKTpvKCl9fSxCLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24obil7dGhpcy5pPW51bGwsdGhpcy5sPW5ldyBNYXA7dmFyIHQ9cihuLmNoaWxkcmVuKTtuLnJldmVhbE9yZGVyJiZcImJcIj09PW4ucmV2ZWFsT3JkZXJbMF0mJnQucmV2ZXJzZSgpO2Zvcih2YXIgZT10Lmxlbmd0aDtlLS07KXRoaXMubC5zZXQodFtlXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gbi5jaGlsZHJlbn0sQi5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPUIucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dmFyIG49dGhpczt0aGlzLmwuZm9yRWFjaChmdW5jdGlvbih0LGUpe0gobixlLHQpfSl9O3ZhciBxPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3ImJlN5bWJvbC5mb3IoXCJyZWFjdC5lbGVtZW50XCIpfHw2MDEwMyxHPS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxKPS9eb24oQW5pfFRyYXxUb3V8QmVmb3JlSW5wfENvbXBvKS8sSz0vW0EtWjAtOV0vZyxRPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBkb2N1bWVudCxYPWZ1bmN0aW9uKG4pe3JldHVybihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sKCk/L2ZpbHxjaGV8cmFkLzovZmlsfGNoZXxyYS8pLnRlc3Qobil9O2Z1bmN0aW9uIG5uKG4sdCxlKXtyZXR1cm4gbnVsbD09dC5fX2smJih0LnRleHRDb250ZW50PVwiXCIpLG8obix0KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlKCksbj9uLl9fYzpudWxsfWZ1bmN0aW9uIHRuKG4sdCxlKXtyZXR1cm4gaShuLHQpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKSxuP24uX19jOm51bGx9bi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbXCJjb21wb25lbnRXaWxsTW91bnRcIixcImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNcIixcImNvbXBvbmVudFdpbGxVcGRhdGVcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsdCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW1wiVU5TQUZFX1wiK3RdfSxzZXQ6ZnVuY3Rpb24obil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm59KX19KX0pO3ZhciBlbj1lLmV2ZW50O2UuZXZlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGVuJiYobj1lbihuKSksbi5wZXJzaXN0PWZ1bmN0aW9uKCl7fSxuLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSxuLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LG4ubmF0aXZlRXZlbnQ9bn07dmFyIHJuLHVuPXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxvbj1lLnZub2RlO2Uudm5vZGU9ZnVuY3Rpb24obil7XCJzdHJpbmdcIj09dHlwZW9mIG4udHlwZSYmZnVuY3Rpb24obil7dmFyIHQ9bi5wcm9wcyxlPW4udHlwZSx1PXt9LG89LTE9PWUuaW5kZXhPZihcIi1cIik7Zm9yKHZhciBpIGluIHQpe3ZhciBsPXRbaV07aWYoIShcInZhbHVlXCI9PT1pJiZcImRlZmF1bHRWYWx1ZVwiaW4gdCYmbnVsbD09bHx8USYmXCJjaGlsZHJlblwiPT09aSYmXCJub3NjcmlwdFwiPT09ZXx8XCJjbGFzc1wiPT09aXx8XCJjbGFzc05hbWVcIj09PWkpKXt2YXIgYz1pLnRvTG93ZXJDYXNlKCk7XCJkZWZhdWx0VmFsdWVcIj09PWkmJlwidmFsdWVcImluIHQmJm51bGw9PXQudmFsdWU/aT1cInZhbHVlXCI6XCJkb3dubG9hZFwiPT09aSYmITA9PT1sP2w9XCJcIjpcInRyYW5zbGF0ZVwiPT09YyYmXCJub1wiPT09bD9sPSExOlwib1wiPT09Y1swXSYmXCJuXCI9PT1jWzFdP1wib25kb3VibGVjbGlja1wiPT09Yz9pPVwib25kYmxjbGlja1wiOlwib25jaGFuZ2VcIiE9PWN8fFwiaW5wdXRcIiE9PWUmJlwidGV4dGFyZWFcIiE9PWV8fFgodC50eXBlKT9cIm9uZm9jdXNcIj09PWM/aT1cIm9uZm9jdXNpblwiOlwib25ibHVyXCI9PT1jP2k9XCJvbmZvY3Vzb3V0XCI6Si50ZXN0KGkpJiYoaT1jKTpjPWk9XCJvbmlucHV0XCI6byYmRy50ZXN0KGkpP2k9aS5yZXBsYWNlKEssXCItJCZcIikudG9Mb3dlckNhc2UoKTpudWxsPT09bCYmKGw9dm9pZCAwKSxcIm9uaW5wdXRcIj09PWMmJnVbaT1jXSYmKGk9XCJvbmlucHV0Q2FwdHVyZVwiKSx1W2ldPWx9fVwic2VsZWN0XCI9PWUmJih1Lm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHUudmFsdWUpJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD0tMSE9dS52YWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpfSkpLG51bGwhPXUuZGVmYXVsdFZhbHVlJiYodS52YWx1ZT1yKHQuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24obil7bi5wcm9wcy5zZWxlY3RlZD11Lm11bHRpcGxlPy0xIT11LmRlZmF1bHRWYWx1ZS5pbmRleE9mKG4ucHJvcHMudmFsdWUpOnUuZGVmYXVsdFZhbHVlPT1uLnByb3BzLnZhbHVlfSkpKSx0LmNsYXNzJiYhdC5jbGFzc05hbWU/KHUuY2xhc3M9dC5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkodSxcImNsYXNzTmFtZVwiLHVuKSk6dC5jbGFzc05hbWUmJih1LmNsYXNzPXUuY2xhc3NOYW1lPXQuY2xhc3NOYW1lKSxuLnByb3BzPXV9KG4pLG4uJCR0eXBlb2Y9cSxvbiYmb24obil9O3ZhciBsbj1lLl9fcjtlLl9fcj1mdW5jdGlvbihuKXtsbiYmbG4obikscm49bi5fX2N9O3ZhciBjbj1lLmRpZmZlZDtlLmRpZmZlZD1mdW5jdGlvbihuKXtjbiYmY24obik7dmFyIHQ9bi5wcm9wcyxlPW4uX19lO251bGwhPWUmJlwidGV4dGFyZWFcIj09PW4udHlwZSYmXCJ2YWx1ZVwiaW4gdCYmdC52YWx1ZSE9PWUudmFsdWUmJihlLnZhbHVlPW51bGw9PXQudmFsdWU/XCJcIjp0LnZhbHVlKSxybj1udWxsfTt2YXIgZm49e1JlYWN0Q3VycmVudERpc3BhdGNoZXI6e2N1cnJlbnQ6e3JlYWRDb250ZXh0OmZ1bmN0aW9uKG4pe3JldHVybiBybi5fX25bbi5fX2NdLnByb3BzLnZhbHVlfSx1c2VDYWxsYmFjazp2LHVzZUNvbnRleHQ6ZCx1c2VEZWJ1Z1ZhbHVlOm0sdXNlRGVmZXJyZWRWYWx1ZTp3LHVzZUVmZmVjdDpoLHVzZUlkOnAsdXNlSW1wZXJhdGl2ZUhhbmRsZTp5LHVzZUluc2VydGlvbkVmZmVjdDpJLHVzZUxheW91dEVmZmVjdDpzLHVzZU1lbW86Xyx1c2VSZWR1Y2VyOmIsdXNlUmVmOlMsdXNlU3RhdGU6YSx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpDLHVzZVRyYW5zaXRpb246a319fSxhbj1cIjE4LjMuMVwiO2Z1bmN0aW9uIHNuKG4pe3JldHVybiB0LmJpbmQobnVsbCxuKX1mdW5jdGlvbiBobihuKXtyZXR1cm4hIW4mJm4uJCR0eXBlb2Y9PT1xfWZ1bmN0aW9uIHZuKG4pe3JldHVybiBobihuKSYmbi50eXBlPT09dX1mdW5jdGlvbiBkbihuKXtyZXR1cm4hIW4mJlwic3RyaW5nXCI9PXR5cGVvZiBuLmRpc3BsYXlOYW1lJiYwPT1uLmRpc3BsYXlOYW1lLmluZGV4T2YoXCJNZW1vKFwiKX1mdW5jdGlvbiBtbihuKXtyZXR1cm4gaG4obik/Zi5hcHBseShudWxsLGFyZ3VtZW50cyk6bn1mdW5jdGlvbiBwbihuKXtyZXR1cm4hIW4uX19rJiYobyhudWxsLG4pLCEwKX1mdW5jdGlvbiB5bihuKXtyZXR1cm4gbiYmKG4uYmFzZXx8MT09PW4ubm9kZVR5cGUmJm4pfHxudWxsfXZhciBfbj1mdW5jdGlvbihuLHQpe3JldHVybiBuKHQpfSxibj1mdW5jdGlvbihuLHQpe3ZhciByPWUuZGVib3VuY2VSZW5kZXJpbmc7ZS5kZWJvdW5jZVJlbmRlcmluZz1mdW5jdGlvbihuKXtyZXR1cm4gbigpfTt2YXIgdT1uKHQpO3JldHVybiBlLmRlYm91bmNlUmVuZGVyaW5nPXIsdX0sU249aG4sZ249e3VzZVN0YXRlOmEsdXNlSWQ6cCx1c2VSZWR1Y2VyOmIsdXNlRWZmZWN0OmgsdXNlTGF5b3V0RWZmZWN0OnMsdXNlSW5zZXJ0aW9uRWZmZWN0OkksdXNlVHJhbnNpdGlvbjprLHVzZURlZmVycmVkVmFsdWU6dyx1c2VTeW5jRXh0ZXJuYWxTdG9yZTpDLHN0YXJ0VHJhbnNpdGlvbjp4LHVzZVJlZjpTLHVzZUltcGVyYXRpdmVIYW5kbGU6eSx1c2VNZW1vOl8sdXNlQ2FsbGJhY2s6dix1c2VDb250ZXh0OmQsdXNlRGVidWdWYWx1ZTptLHZlcnNpb246XCIxOC4zLjFcIixDaGlsZHJlbjpMLHJlbmRlcjpubixoeWRyYXRlOnRuLHVubW91bnRDb21wb25lbnRBdE5vZGU6cG4sY3JlYXRlUG9ydGFsOiQsY3JlYXRlRWxlbWVudDp0LGNyZWF0ZUNvbnRleHQ6bCxjcmVhdGVGYWN0b3J5OnNuLGNsb25lRWxlbWVudDptbixjcmVhdGVSZWY6YyxGcmFnbWVudDp1LGlzVmFsaWRFbGVtZW50OmhuLGlzRWxlbWVudDpTbixpc0ZyYWdtZW50OnZuLGlzTWVtbzpkbixmaW5kRE9NTm9kZTp5bixDb21wb25lbnQ6bixQdXJlQ29tcG9uZW50Ok0sbWVtbzpOLGZvcndhcmRSZWY6RCxmbHVzaFN5bmM6Ym4sdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6X24sU3RyaWN0TW9kZTp1LFN1c3BlbnNlOlAsU3VzcGVuc2VMaXN0OkIsbGF6eTp6LF9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEOmZufTtleHBvcnR7TCBhcyBDaGlsZHJlbixNIGFzIFB1cmVDb21wb25lbnQsUCBhcyBTdXNwZW5zZSxCIGFzIFN1c3BlbnNlTGlzdCxmbiBhcyBfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCxtbiBhcyBjbG9uZUVsZW1lbnQsc24gYXMgY3JlYXRlRmFjdG9yeSwkIGFzIGNyZWF0ZVBvcnRhbCxnbiBhcyBkZWZhdWx0LHluIGFzIGZpbmRET01Ob2RlLGJuIGFzIGZsdXNoU3luYyxEIGFzIGZvcndhcmRSZWYsdG4gYXMgaHlkcmF0ZSxTbiBhcyBpc0VsZW1lbnQsdm4gYXMgaXNGcmFnbWVudCxkbiBhcyBpc01lbW8saG4gYXMgaXNWYWxpZEVsZW1lbnQseiBhcyBsYXp5LE4gYXMgbWVtbyxubiBhcyByZW5kZXIseCBhcyBzdGFydFRyYW5zaXRpb24scG4gYXMgdW5tb3VudENvbXBvbmVudEF0Tm9kZSxfbiBhcyB1bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyx3IGFzIHVzZURlZmVycmVkVmFsdWUsSSBhcyB1c2VJbnNlcnRpb25FZmZlY3QsQyBhcyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSxrIGFzIHVzZVRyYW5zaXRpb24sYW4gYXMgdmVyc2lvbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21wYXQubW9kdWxlLmpzLm1hcFxuIiwKICAgICIvKipcbiAqIEZvY3VzIHRyYXAuXG4gKlxuICogS2VlcHMgVGFiIC8gU2hpZnQrVGFiIGluc2lkZSBhIHJvb3QgZWxlbWVudC4gUmV0dXJucyBhIGNsZWFudXAgdGhhdFxuICogcmVzdG9yZXMgZm9jdXMgdG8gdGhlIGVsZW1lbnQgdGhhdCB3YXMgYWN0aXZlIGJlZm9yZSB0aGUgdHJhcCBtb3VudGVkLlxuICogU2ltcGxlIGFuZCBzeW5jaHJvbm91cyDigJQgYXNzdW1lcyBhIHNpbmdsZSBhY3RpdmUgdHJhcCBwZXIgT3ZlcmxheVJvb3RcbiAqIGFuZCBsZXRzIHRoZSBvdmVybGF5IHJlZ2lzdHJ5IGluIGBAZmFpcmZveC9wb2xseS9hY3Rpb25zYCBlbmZvcmNlIHRoYXRcbiAqIGF0IHRoZSBzdGFjayBsZXZlbC5cbiAqL1xuXG5jb25zdCBGT0NVU0FCTEVfU0VMRUNUT1IgPSBbXG4gIFwiYVtocmVmXVwiLFxuICBcImFyZWFbaHJlZl1cIixcbiAgXCJidXR0b246bm90KFtkaXNhYmxlZF0pXCIsXG4gIFwiaW5wdXQ6bm90KFtkaXNhYmxlZF0pOm5vdChbdHlwZT1oaWRkZW5dKVwiLFxuICBcInNlbGVjdDpub3QoW2Rpc2FibGVkXSlcIixcbiAgXCJ0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSlcIixcbiAgXCJpZnJhbWVcIixcbiAgXCJvYmplY3RcIixcbiAgXCJlbWJlZFwiLFxuICAnW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJyxcbiAgXCJbY29udGVudGVkaXRhYmxlXVwiLFxuXS5qb2luKFwiLFwiKTtcblxuZnVuY3Rpb24gZ2V0Rm9jdXNhYmxlKHJvb3Q6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRbXSB7XG4gIGNvbnN0IG5vZGVzID0gQXJyYXkuZnJvbShyb290LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KEZPQ1VTQUJMRV9TRUxFQ1RPUikpO1xuICByZXR1cm4gbm9kZXMuZmlsdGVyKFxuICAgIChlbCkgPT4gIWVsLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpICYmIGVsLmdldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIpICE9PSBcInRydWVcIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbEZvY3VzVHJhcChyb290OiBIVE1MRWxlbWVudCk6ICgpID0+IHZvaWQge1xuICBjb25zdCBwcmV2aW91c0FjdGl2ZSA9IChcbiAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IDogbnVsbFxuICApIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAvLyBNb3ZlIGZvY3VzIGludG8gdGhlIHJvb3QgaWYgaXQncyBub3QgYWxyZWFkeS5cbiAgY29uc3QgZm9jdXNhYmxlID0gZ2V0Rm9jdXNhYmxlKHJvb3QpO1xuICBjb25zdCBmaXJzdCA9IGZvY3VzYWJsZVswXSA/PyByb290O1xuICBpZiAoIXJvb3QuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICBmaXJzdC5mb2N1cygpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgIT09IFwiVGFiXCIpIHJldHVybjtcbiAgICBjb25zdCBpdGVtcyA9IGdldEZvY3VzYWJsZShyb290KTtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdEl0ZW0gPSBpdGVtc1swXTtcbiAgICBjb25zdCBsYXN0SXRlbSA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdO1xuICAgIGlmICghZmlyc3RJdGVtIHx8ICFsYXN0SXRlbSkgcmV0dXJuO1xuICAgIGNvbnN0IGFjdGl2ZSA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICBpZiAoYWN0aXZlID09PSBmaXJzdEl0ZW0gfHwgIXJvb3QuY29udGFpbnMoYWN0aXZlKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBsYXN0SXRlbS5mb2N1cygpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWN0aXZlID09PSBsYXN0SXRlbSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGZpcnN0SXRlbS5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGhhbmRsZUtleURvd24pO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bik7XG4gICAgaWYgKHByZXZpb3VzQWN0aXZlICYmIGRvY3VtZW50LmNvbnRhaW5zKHByZXZpb3VzQWN0aXZlKSkge1xuICAgICAgcHJldmlvdXNBY3RpdmUuZm9jdXMoKTtcbiAgICB9XG4gIH07XG59XG4iLAogICAgIi8qKlxuICogU2Nyb2xsIGxvY2suXG4gKlxuICogUmVmZXJlbmNlLWNvdW50ZWQuIE11bHRpcGxlIG92ZXJsYXlzIGNhbiByZXF1ZXN0IGEgbG9jazsgdGhlIGJvZHlcbiAqIHN0YXlzIGxvY2tlZCB1bnRpbCBldmVyeSByZXF1ZXN0IHJlbGVhc2VzLiBBIHNjcm9sbGJhci1ndXR0ZXIgdG9rZW5cbiAqIGlzIHdyaXR0ZW4gYXQgYWNxdWlyZSB0aW1lIHNvIGNvbnRlbnQgYmVoaW5kIHRoZSBvdmVybGF5IGRvZXNuJ3RcbiAqIHJlZmxvdyB3aGVuIHRoZSBiYXIgZGlzYXBwZWFycy5cbiAqL1xuXG5sZXQgY291bnQgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gYWNxdWlyZVNjcm9sbExvY2soKTogKCkgPT4gdm9pZCB7XG4gIGlmIChjb3VudCA9PT0gMCkge1xuICAgIGNvbnN0IGh0bWwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgY29uc3QgZ3V0dGVyID0gd2luZG93LmlubmVyV2lkdGggLSBodG1sLmNsaWVudFdpZHRoO1xuICAgIGh0bWwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvbGx5LXNjcm9sbGJhci1ndXR0ZXJcIiwgYCR7Z3V0dGVyfXB4YCk7XG4gICAgaHRtbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXBvbGx5LXNjcm9sbC1sb2NrZWRcIiwgXCJ0cnVlXCIpO1xuICB9XG4gIGNvdW50ICs9IDE7XG4gIGxldCByZWxlYXNlZCA9IGZhbHNlO1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmIChyZWxlYXNlZCkgcmV0dXJuO1xuICAgIHJlbGVhc2VkID0gdHJ1ZTtcbiAgICBjb3VudCAtPSAxO1xuICAgIGlmIChjb3VudCA8PSAwKSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgICBjb25zdCBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgaHRtbC5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLXBvbGx5LXNjcm9sbC1sb2NrZWRcIik7XG4gICAgICBodG1sLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwiLS1wb2xseS1zY3JvbGxiYXItZ3V0dGVyXCIpO1xuICAgIH1cbiAgfTtcbn1cbiIsCiAgICAiLyoqXG4gKiBPdmVybGF5Um9vdCDigJQgcG9ydGFsIHRhcmdldCBmb3Igc3RhY2tlZCBvdmVybGF5cy5cbiAqXG4gKiBBcHBzIHJlbmRlciA8T3ZlcmxheVJvb3QgLz4gb25jZSwgdHlwaWNhbGx5IGFzIHRoZSBsYXN0IGNoaWxkIG9mIHRoZVxuICogYXBwIHJvb3QuIE1vZGFsLCBDb25maXJtRGlhbG9nLCBhbmQgVG9hc3QgcG9ydGFsIGludG8gdGhpcyBlbGVtZW50O1xuICogdGhlIHNjcm9sbCBsb2NrIHRvZ2dsZXMgYmFzZWQgb24gdGhlIG92ZXJsYXkgcmVnaXN0cnkgY291bnQuXG4gKi9cblxuaW1wb3J0IHsgZWZmZWN0IH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBoYXNPcGVuT3ZlcmxheSB9IGZyb20gXCIuLi9hY3Rpb25zL292ZXJsYXkudHNcIjtcbmltcG9ydCB7IGFjcXVpcmVTY3JvbGxMb2NrIH0gZnJvbSBcIi4vaW50ZXJuYWwvc2Nyb2xsLWxvY2sudHNcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL092ZXJsYXlSb290Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIE92ZXJsYXlSb290KCkge1xuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgbGV0IHJlbGVhc2U6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IGRpc3Bvc2UgPSBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGhhc09wZW5PdmVybGF5KCkpIHtcbiAgICAgICAgaWYgKCFyZWxlYXNlKSByZWxlYXNlID0gYWNxdWlyZVNjcm9sbExvY2soKTtcbiAgICAgIH0gZWxzZSBpZiAocmVsZWFzZSkge1xuICAgICAgICByZWxlYXNlKCk7XG4gICAgICAgIHJlbGVhc2UgPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkaXNwb3NlKCk7XG4gICAgICByZWxlYXNlPy4oKTtcbiAgICB9O1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIDxkaXYgcmVmPXtyZWZ9IGNsYXNzPXtjbGFzc2VzW1wicm9vdFwiXX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LW92ZXJsYXktcm9vdCAvPjtcbn1cblxuLyoqIEdldCB0aGUgbW91bnQgbm9kZSBmb3IgcG9ydGFsZWQgb3ZlcmxheXMuIFJldHVybnMgbnVsbCBiZWZvcmUgbW91bnQuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3ZlcmxheVJvb3ROb2RlKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcIltkYXRhLXBvbGx5LW92ZXJsYXktcm9vdF1cIik7XG59XG4iLAogICAgIi8qKlxuICogTW9kYWwg4oCUIGNvbXBvdW5kIGRpYWxvZyB3aXRoIGZvY3VzIHRyYXAsIEVzY2FwZSBoYW5kbGluZywgcG9ydGFsLFxuICogYW5kIG92ZXJsYXktc3RhY2sgaW50ZWdyYXRpb24uXG4gKlxuICogUm9vdCB0YWtlcyBhIGB3aGVuYCBzaWduYWwgKG9yIGJvb2xlYW4pLiBXaGVuIHRydXRoeSB0aGUgY29udGVudCBtb3VudHNcbiAqIGludG8gdGhlIE92ZXJsYXlSb290IHBvcnRhbCwgZm9jdXMgbW92ZXMgaW5zaWRlLCBUYWIgaXMgdHJhcHBlZCwgRXNjYXBlXG4gKiBmaXJlcyBgZGF0YS1hY3Rpb249XCJtb2RhbDpjbG9zZVwiYCAob3IgdGhlIG92ZXJsYXkgcmVnaXN0cnkncyBvbkNsb3NlXG4gKiBjYWxsYmFjayksIGFuZCB0aGUgYm9keSBzY3JvbGwgbG9ja3MuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZWFkb25seVNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUNvbnRleHQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInByZWFjdC9jb21wYXRcIjtcbmltcG9ydCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlSWQsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBwb3BPdmVybGF5LCBwdXNoT3ZlcmxheSB9IGZyb20gXCIuLi9hY3Rpb25zL292ZXJsYXkudHNcIjtcbmltcG9ydCB7IGluc3RhbGxGb2N1c1RyYXAgfSBmcm9tIFwiLi9pbnRlcm5hbC9mb2N1cy10cmFwLnRzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9Nb2RhbC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBnZXRPdmVybGF5Um9vdE5vZGUgfSBmcm9tIFwiLi9PdmVybGF5Um9vdC50c3hcIjtcbmltcG9ydCB7IFN1cmZhY2UgfSBmcm9tIFwiLi9TdXJmYWNlLnRzeFwiO1xuXG50eXBlIE1vZGFsQ29udGV4dCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGVJZDogc3RyaW5nO1xuICBkZXNjSWQ6IHN0cmluZztcbiAgY2xvc2U6ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBDdHggPSBjcmVhdGVDb250ZXh0PE1vZGFsQ29udGV4dCB8IG51bGw+KG51bGwpO1xuXG5mdW5jdGlvbiB1c2VNb2RhbCgpOiBNb2RhbENvbnRleHQge1xuICBjb25zdCBjdHggPSB1c2VDb250ZXh0KEN0eCk7XG4gIGlmICghY3R4KSB0aHJvdyBuZXcgRXJyb3IoXCJNb2RhbCBzdWItY29tcG9uZW50cyBtdXN0IHJlbmRlciBpbnNpZGUgPE1vZGFsLlJvb3Q+XCIpO1xuICByZXR1cm4gY3R4O1xufVxuXG50eXBlIFJvb3RQcm9wcyA9IHtcbiAgd2hlbjogUmVhZG9ubHlTaWduYWw8Ym9vbGVhbj4gfCBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICAvKiogQWNjZXNzaWJsZSBsYWJlbCBzb3VyY2U6IFwidGl0bGVcIiB1c2VzIHRoZSA8TW9kYWwuVGl0bGU+IGlkLCBvciBwYXNzIGFuIGV4cGxpY2l0IGxhYmVsLiAqL1xuICBcImFyaWEtbGFiZWxcIj86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFJvb3QoeyB3aGVuLCBvbkNsb3NlLCBjaGlsZHJlbiwgXCJhcmlhLWxhYmVsXCI6IGFyaWFMYWJlbCB9OiBSb290UHJvcHMpIHtcbiAgY29uc3QgaWQgPSB1c2VJZCgpO1xuICBjb25zdCB0aXRsZUlkID0gYCR7aWR9LXRpdGxlYDtcbiAgY29uc3QgZGVzY0lkID0gYCR7aWR9LWRlc2NgO1xuICBjb25zdCBtb3VudFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbcG9ydGFsTm9kZSwgc2V0UG9ydGFsTm9kZV0gPSB1c2VTdGF0ZTxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGlzT3BlbiA9IHR5cGVvZiB3aGVuID09PSBcImJvb2xlYW5cIiA/IHdoZW4gOiB3aGVuLnZhbHVlO1xuXG4gIC8vIENvbnN1bWVycyBhbG1vc3QgYWx3YXlzIHBhc3MgYW4gaW5saW5lIGNsb3N1cmUgZm9yIGBvbkNsb3NlYCwgc28gdGhlIHByb3BcbiAgLy8gaGFzIGEgbmV3IGlkZW50aXR5IG9uIGV2ZXJ5IHJlbmRlci4gS2VlcGluZyBpdCBpbiB0aGUgb3ZlcmxheSBlZmZlY3Qnc1xuICAvLyBkZXBlbmRlbmN5IGFycmF5IG1hZGUgdGhhdCBlZmZlY3QgdGVhciBkb3duIGFuZCByZS1pbnN0YWxsIHBlciByZW5kZXI6XG4gIC8vIGVhY2ggcnVuIHdyb3RlIHRoZSBgc3RhY2tgIHNpZ25hbCB0d2ljZSBhbmQgbW92ZWQgZm9jdXMgdHdpY2UsIGFuZCB0aGVcbiAgLy8gc2lnbmFsIHdyaXRlIHJlLXJlbmRlcmVkIHRoZSBzdWJzY3JpYmVyIHRoYXQgcHJvZHVjZWQgdGhlIG5leHQgY2xvc3VyZS5cbiAgLy8gVGhlIHJlc3VsdCB3YXMgYW4gdW5ib3VuZGVkIHJlbmRlciBsb29wIHRoYXQgcGlubmVkIHRoZSBtYWluIHRocmVhZFxuICAvLyAocG9sbHkjMTc3KS4gVGhlIGVmZmVjdCBub3cgcmVhZHMgdGhlIGxhdGVzdCBjYWxsYmFjayB0aHJvdWdoIGEgcmVmLCBzb1xuICAvLyBpdHMgZGVwZW5kZW5jaWVzIGFyZSBvbmx5IHRoZSB2YWx1ZXMgdGhhdCBnZW51aW5lbHkgcmUtb3BlbiB0aGUgb3ZlcmxheS5cbiAgY29uc3Qgb25DbG9zZVJlZiA9IHVzZVJlZihvbkNsb3NlKTtcbiAgb25DbG9zZVJlZi5jdXJyZW50ID0gb25DbG9zZTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuKSB7XG4gICAgICBzZXRQb3J0YWxOb2RlKG51bGwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRQb3J0YWxOb2RlKGdldE92ZXJsYXlSb290Tm9kZSgpKTtcbiAgfSwgW2lzT3Blbl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4gfHwgIXBvcnRhbE5vZGUpIHJldHVybjtcbiAgICBjb25zdCBlbnRyeSA9IHsgaWQsIG9uQ2xvc2U6ICgpID0+IG9uQ2xvc2VSZWYuY3VycmVudD8uKCkgfTtcbiAgICBwdXNoT3ZlcmxheShlbnRyeSk7XG4gICAgY29uc3QgZWwgPSBtb3VudFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGNsZWFudXAgPSBlbFxuICAgICAgPyBpbnN0YWxsRm9jdXNUcmFwKGVsKVxuICAgICAgOiAoKSA9PiB7XG4gICAgICAgICAgLyogbm8gcmVmIHlldCAqL1xuICAgICAgICB9O1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhbnVwKCk7XG4gICAgICBwb3BPdmVybGF5KGlkKTtcbiAgICB9O1xuICB9LCBbaXNPcGVuLCBwb3J0YWxOb2RlLCBpZF0pO1xuXG4gIGlmICghaXNPcGVuIHx8ICFwb3J0YWxOb2RlKSByZXR1cm4gbnVsbDtcblxuICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICBvbkNsb3NlPy4oKTtcbiAgfTtcblxuICBjb25zdCBjdHg6IE1vZGFsQ29udGV4dCA9IHsgaWQsIHRpdGxlSWQsIGRlc2NJZCwgY2xvc2UgfTtcblxuICBjb25zdCBjb250ZW50ID0gKFxuICAgIDxDdHguUHJvdmlkZXIgdmFsdWU9e2N0eH0+XG4gICAgICA8TGF5b3V0XG4gICAgICAgIGVsZW1lbnRSZWY9e21vdW50UmVmfVxuICAgICAgICBhbGlnbkl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAganVzdGlmeUl0ZW1zPVwiY2VudGVyXCJcbiAgICAgICAgaGVpZ2h0PVwiMTAwJVwiXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc1tcImNvbnRhaW5lclwiXX1cbiAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICBkYXRhLXBvbGx5LW1vZGFsLWNvbnRlbnRcbiAgICAgICAgZGF0YS1vdmVybGF5LWlkPXtpZH1cbiAgICAgICAgZGF0YS1zdGF0ZT1cIm9wZW5cIlxuICAgICAgICByb2xlPVwiZGlhbG9nXCJcbiAgICAgICAgYXJpYS1tb2RhbD1cInRydWVcIlxuICAgICAgICBhcmlhLWxhYmVsbGVkYnk9e2FyaWFMYWJlbCA/IHVuZGVmaW5lZCA6IHRpdGxlSWR9XG4gICAgICAgIGFyaWEtbGFiZWw9e2FyaWFMYWJlbH1cbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT17ZGVzY0lkfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0xheW91dD5cbiAgICA8L0N0eC5Qcm92aWRlcj5cbiAgKTtcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKGNvbnRlbnQsIHBvcnRhbE5vZGUpO1xufVxuXG5mdW5jdGlvbiBCYWNrZHJvcCgpIHtcbiAgY29uc3QgeyBjbG9zZSB9ID0gdXNlTW9kYWwoKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzPXtjbGFzc2VzW1wiYmFja2Ryb3BcIl19IGRhdGEtcG9sbHktbW9kYWwtYmFja2Ryb3Agb25DbGljaz17Y2xvc2V9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICk7XG59XG5cbnR5cGUgQ29udGVudFByb3BzID0ge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgc3R5bGU/OiBKU1guQ1NTUHJvcGVydGllcztcbn07XG5cbmZ1bmN0aW9uIENvbnRlbnQoeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBzdHlsZSB9OiBDb250ZW50UHJvcHMpIHtcbiAgY29uc3QgY2xzID0gY2xhc3NOYW1lID8gYCR7Y2xhc3Nlc1tcInN1cmZhY2VcIl19ICR7Y2xhc3NOYW1lfWAgOiBjbGFzc2VzW1wic3VyZmFjZVwiXTtcbiAgcmV0dXJuIChcbiAgICA8U3VyZmFjZVxuICAgICAgdmFyaWFudD1cInJhaXNlZFwiXG4gICAgICByYWRpdXM9XCJsZ1wiXG4gICAgICBzaGFkb3c9XCJsZ1wiXG4gICAgICBwb3NpdGlvbj1cInJlbGF0aXZlXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xzfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgZGF0YS1wb2xseS1tb2RhbC1zdXJmYWNlXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZnVuY3Rpb24gSGVhZGVyKHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICByZXR1cm4gKFxuICAgIDxoZWFkZXIgY2xhc3M9e2NsYXNzZXNbXCJoZWFkZXJcIl19IGRhdGEtcG9sbHktbW9kYWwtaGVhZGVyPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvaGVhZGVyPlxuICApO1xufVxuXG5mdW5jdGlvbiBUaXRsZSh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuIH0pIHtcbiAgY29uc3QgeyB0aXRsZUlkIH0gPSB1c2VNb2RhbCgpO1xuICByZXR1cm4gKFxuICAgIDxoMiBpZD17dGl0bGVJZH0gY2xhc3M9e2NsYXNzZXNbXCJ0aXRsZVwiXX0gZGF0YS1wb2xseS1tb2RhbC10aXRsZT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2gyPlxuICApO1xufVxuXG5mdW5jdGlvbiBCb2R5KHsgY2hpbGRyZW4gfTogeyBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW4gfSkge1xuICBjb25zdCB7IGRlc2NJZCB9ID0gdXNlTW9kYWwoKTtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGlkPXtkZXNjSWR9IGNsYXNzPXtjbGFzc2VzW1wiYm9keVwiXX0gZGF0YS1wb2xseS1tb2RhbC1ib2R5PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5mdW5jdGlvbiBGb290ZXIoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPGZvb3RlciBjbGFzcz17Y2xhc3Nlc1tcImZvb3RlclwiXX0gZGF0YS1wb2xseS1tb2RhbC1mb290ZXI+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9mb290ZXI+XG4gICk7XG59XG5cbnR5cGUgQ2xvc2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICAvKiogRmlyZSBhIHJlZ2lzdGVyZWQgZGF0YS1hY3Rpb24gaW5zdGVhZCBvZiBjYWxsaW5nIHRoZSBvbkNsb3NlIGNhbGxiYWNrLiAqL1xuICBhY3Rpb24/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBDbG9zZSh7IGNoaWxkcmVuLCBhY3Rpb24gfTogQ2xvc2VQcm9wcykge1xuICBjb25zdCB7IGNsb3NlIH0gPSB1c2VNb2RhbCgpO1xuICBpZiAoYWN0aW9uKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzPXtjbGFzc2VzW1wiY2xvc2VcIl19XG4gICAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgICAgZGF0YS1wb2xseS1pbnRlcmFjdGl2ZVxuICAgICAgICBkYXRhLXBvbGx5LW1vZGFsLWNsb3NlXG4gICAgICAgIGRhdGEtYWN0aW9uPXthY3Rpb259XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPXtjbGFzc2VzW1wiY2xvc2VcIl19XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICBkYXRhLXBvbGx5LW1vZGFsLWNsb3NlXG4gICAgICBvbkNsaWNrPXtjbG9zZX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBNb2RhbCA9IHtcbiAgUm9vdCxcbiAgQmFja2Ryb3AsXG4gIENvbnRlbnQsXG4gIEhlYWRlcixcbiAgVGl0bGUsXG4gIEJvZHksXG4gIEZvb3RlcixcbiAgQ2xvc2UsXG59O1xuIiwKICAgICIvKipcbiAqIENvbmZpcm1EaWFsb2cg4oCUIFByb21pc2UtcmV0dXJuaW5nIGNvbmZpcm1hdGlvbiBwcmltaXRpdmUuXG4gKlxuICogYGNvbmZpcm0oeyB0aXRsZSwgYm9keSwgZGFuZ2VyIH0pYCByZXR1cm5zIFByb21pc2U8Ym9vbGVhbj4uIE9wZW5zIHRoZVxuICogcmVuZGVyZWQgYDxDb25maXJtRGlhbG9nLkhvc3QgLz5gIG1vZGFsICh3aGljaCBtdXN0IGJlIG1vdW50ZWQgb25jZSBhdFxuICogdGhlIGFwcCByb290KS4gVXNlciBwaWNraW5nIGNvbmZpcm0gb3IgY2FuY2VsIHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogRXNjYXBlLCBiYWNrZHJvcCBjbGljaywgYW5kIGV4cGxpY2l0IGAuZGlzbWlzcygpYCByZXNvbHZlIGZhbHNlLlxuICovXG5cbmltcG9ydCB7IHNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vQ29uZmlybURpYWxvZy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gXCIuL01vZGFsLnRzeFwiO1xuXG50eXBlIENvbmZpcm1SZXF1ZXN0ID0ge1xuICBpZDogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nO1xuICBkYW5nZXI/OiBib29sZWFuO1xuICBjb25maXJtTGFiZWw/OiBzdHJpbmc7XG4gIGNhbmNlbExhYmVsPzogc3RyaW5nO1xuICByZXNvbHZlOiAodmFsdWU6IGJvb2xlYW4pID0+IHZvaWQ7XG59O1xuXG5jb25zdCBwZW5kaW5nID0gc2lnbmFsPENvbmZpcm1SZXF1ZXN0IHwgbnVsbD4obnVsbCk7XG5jb25zdCBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xubGV0IG5leHRJZCA9IDA7XG5cbmV4cG9ydCB0eXBlIENvbmZpcm1PcHRpb25zID0ge1xuICB0aXRsZTogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nO1xuICBkYW5nZXI/OiBib29sZWFuO1xuICBjb25maXJtTGFiZWw/OiBzdHJpbmc7XG4gIGNhbmNlbExhYmVsPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbmZpcm0ob3B0aW9uczogQ29uZmlybU9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XG4gICAgbmV4dElkICs9IDE7XG4gICAgcGVuZGluZy52YWx1ZSA9IHtcbiAgICAgIGlkOiBuZXh0SWQsXG4gICAgICB0aXRsZTogb3B0aW9ucy50aXRsZSxcbiAgICAgIGJvZHk6IG9wdGlvbnMuYm9keSxcbiAgICAgIGRhbmdlcjogb3B0aW9ucy5kYW5nZXIsXG4gICAgICBjb25maXJtTGFiZWw6IG9wdGlvbnMuY29uZmlybUxhYmVsLFxuICAgICAgY2FuY2VsTGFiZWw6IG9wdGlvbnMuY2FuY2VsTGFiZWwsXG4gICAgICByZXNvbHZlLFxuICAgIH07XG4gICAgaXNPcGVuLnZhbHVlID0gdHJ1ZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsb3NlKHJlc3VsdDogYm9vbGVhbik6IHZvaWQge1xuICBjb25zdCBjdXJyZW50ID0gcGVuZGluZy52YWx1ZTtcbiAgaWYgKCFjdXJyZW50KSByZXR1cm47XG4gIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICBwZW5kaW5nLnZhbHVlID0gbnVsbDtcbiAgY3VycmVudC5yZXNvbHZlKHJlc3VsdCk7XG59XG5cbi8qKiBSZW5kZXJzIHRoZSBhY3RpdmUgY29uZmlybSBkaWFsb2cuIE1vdW50IG9uY2UgbmVhciB0aGUgYXBwIHJvb3QuICovXG5mdW5jdGlvbiBIb3N0KCk6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IGN1cnJlbnQgPSBwZW5kaW5nLnZhbHVlO1xuICBpZiAoIWN1cnJlbnQpIHJldHVybiBudWxsO1xuICByZXR1cm4gKFxuICAgIDxNb2RhbC5Sb290IHdoZW49e2lzT3Blbn0gb25DbG9zZT17KCkgPT4gY2xvc2UoZmFsc2UpfT5cbiAgICAgIDxNb2RhbC5CYWNrZHJvcCAvPlxuICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgIDxNb2RhbC5IZWFkZXI+XG4gICAgICAgICAgPE1vZGFsLlRpdGxlPntjdXJyZW50LnRpdGxlfTwvTW9kYWwuVGl0bGU+XG4gICAgICAgIDwvTW9kYWwuSGVhZGVyPlxuICAgICAgICB7Y3VycmVudC5ib2R5ID8gPE1vZGFsLkJvZHk+e2N1cnJlbnQuYm9keX08L01vZGFsLkJvZHk+IDogbnVsbH1cbiAgICAgICAgPE1vZGFsLkZvb3Rlcj5cbiAgICAgICAgICA8TGF5b3V0XG4gICAgICAgICAgICBjb2x1bW5zPVwiYXV0byBhdXRvXCJcbiAgICAgICAgICAgIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudD1cImVuZFwiXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXNbXCJhY3Rpb25zXCJdfVxuICAgICAgICAgICAgZGF0YS1wb2xseS1jb25maXJtLWFjdGlvbnNcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcImNhbmNlbFwiXX1cbiAgICAgICAgICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LWludGVyYWN0aXZlXG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktY29uZmlybS1jYW5jZWxcbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gY2xvc2UoZmFsc2UpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7Y3VycmVudC5jYW5jZWxMYWJlbCA/PyBcIkNhbmNlbFwifVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz17Y3VycmVudC5kYW5nZXIgPyBjbGFzc2VzW1wiY29uZmlybURhbmdlclwiXSA6IGNsYXNzZXNbXCJjb25maXJtXCJdfVxuICAgICAgICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgICAgICAgIGRhdGEtcG9sbHktaW50ZXJhY3RpdmVcbiAgICAgICAgICAgICAgZGF0YS1wb2xseS1jb25maXJtLW9rXG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNsb3NlKHRydWUpfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7Y3VycmVudC5jb25maXJtTGFiZWwgPz8gXCJPS1wifVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvTW9kYWwuRm9vdGVyPlxuICAgICAgPC9Nb2RhbC5Db250ZW50PlxuICAgIDwvTW9kYWwuUm9vdD5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IENvbmZpcm1EaWFsb2cgPSB7IEhvc3QsIGNvbmZpcm0gfTtcbiIsCiAgICAiLyoqXG4gKiBGaWxlSW5wdXQg4oCUIGEgc3R5bGVkIHRyaWdnZXIgZm9yIHRoZSBuYXRpdmUgZmlsZSBwaWNrZXIuXG4gKlxuICogQSBmaWxlIGlzIGEgYmluYXJ5IG9iamVjdDogaXQgY2Fubm90IHJpZGUgYSBgZGF0YS1hY3Rpb25gIGF0dHJpYnV0ZVxuICogdGhlIHdheSBhIHN0cmluZyB2YWx1ZSBkb2VzLCBzbyBGaWxlSW5wdXQgaXMgdGhlIG9uZSBpbnB1dCBwcmltaXRpdmVcbiAqIHRoYXQgdGFrZXMgYSBjYWxsYmFjay4gYG9uRmlsZXNgIGZpcmVzIHdpdGggdGhlIGNob3NlbiBGaWxlTGlzdC4gVGhlXG4gKiBuYXRpdmUgPGlucHV0IHR5cGU9XCJmaWxlXCI+IHN0YXlzIGluIHRoZSBET00g4oCUIHZpc3VhbGx5IGhpZGRlbiBpbnNpZGVcbiAqIHRoZSA8bGFiZWw+IOKAlCBzbyB0aGUgd2hvbGUgY29udHJvbCBvcGVucyB0aGUgcGlja2VyIGFuZCByZW1haW5zXG4gKiBrZXlib2FyZC1hY2Nlc3NpYmxlIChwb2xseSMxMzUpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vRmlsZUlucHV0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgRmlsZUlucHV0UHJvcHMgPSB7XG4gIC8qKiBGaXJlZCB3aXRoIHRoZSBjaG9zZW4gZmlsZXMgd2hlbmV2ZXIgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzLiAqL1xuICBvbkZpbGVzOiAoZmlsZXM6IEZpbGVMaXN0KSA9PiB2b2lkO1xuICAvKiogVmlzaWJsZSB0cmlnZ2VyIHRleHQuIERlZmF1bHQ6ICdDaG9vc2UgZmlsZScuICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogYGFjY2VwdGAgZmlsdGVyIGZvcndhcmRlZCB0byB0aGUgbmF0aXZlIGlucHV0IChlLmcuICdpbWFnZS8qJykuICovXG4gIGFjY2VwdD86IHN0cmluZztcbiAgLyoqIEFsbG93IHNlbGVjdGluZyBtb3JlIHRoYW4gb25lIGZpbGUuICovXG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIEZpbGVJbnB1dChwcm9wczogRmlsZUlucHV0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgb25GaWxlcywgbGFiZWwgPSBcIkNob29zZSBmaWxlXCIsIGFjY2VwdCwgbXVsdGlwbGUsIGRpc2FibGVkLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoZTogSlNYLlRhcmdldGVkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pOiB2b2lkID0+IHtcbiAgICBjb25zdCB7IGZpbGVzIH0gPSBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIG9uRmlsZXMoZmlsZXMpO1xuICB9O1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJmaWxlSW5wdXRcIl1dO1xuICBpZiAoZGlzYWJsZWQpIHBhcnRzLnB1c2goY2xhc3Nlc1tcImRpc2FibGVkXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGxhYmVsIGlkPXtpZH0gY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX0gZGF0YS1wb2xseS11aSBkYXRhLXBvbGx5LWZpbGUtaW5wdXQ+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcIm5hdGl2ZVwiXX1cbiAgICAgICAgYWNjZXB0PXthY2NlcHR9XG4gICAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgLz5cbiAgICAgIDxzcGFuPntsYWJlbH08L3NwYW4+XG4gICAgPC9sYWJlbD5cbiAgKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBIdG1sIOKAlCByZW5kZXIgdHJ1c3RlZCwgYWxyZWFkeS1zYW5pdGlzZWQgcmF3IG1hcmt1cC5cbiAqXG4gKiBUaGUgZGVsaWJlcmF0ZSBlc2NhcGUgaGF0Y2ggZm9yIHRoZSByYXJlIHRoaW5nIHBvbGx5LXVpIGNhbm5vdFxuICogZXhwcmVzczogYSBsb2NhbGx5IGdlbmVyYXRlZCwgYWxyZWFkeS1zYWZlIFNWRyAoYSBRUiBjb2RlKSwgYVxuICogcHJlLXJlbmRlcmVkIGRpYWdyYW0uIFRoZSBjYWxsZXIgb3ducyBzYWZldHkg4oCUIGBodG1sYCBnb2VzIHN0cmFpZ2h0XG4gKiBpbnRvIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAsIHNvIGl0IE1VU1QgYmUgdHJ1c3RlZCBvciBzYW5pdGlzZWRcbiAqIGZpcnN0LiBGb3IgdW50cnVzdGVkIG1hcmtkb3duIHVzZSBgcmVuZGVyTWFya2Rvd25gLCB3aGljaCBzYW5pdGlzZXM7XG4gKiBmb3IgYW55dGhpbmcgYSBwcmltaXRpdmUgYWxyZWFkeSBjb3ZlcnMsIHVzZSB0aGUgcHJpbWl0aXZlLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuXG5leHBvcnQgdHlwZSBIdG1sUHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICAvKiogVHJ1c3RlZCwgYWxyZWFkeS1zYW5pdGlzZWQgSFRNTC4gVGhlIGNhbGxlciBvd25zIGl0cyBzYWZldHkuICovXG4gIGh0bWw6IHN0cmluZztcbiAgLyoqIFBvbHltb3JwaGljIHdyYXBwZXIgZWxlbWVudCAoZGl2LCBzcGFuLCBmaWd1cmUsIOKApikuIERlZmF1bHRzIHRvICdkaXYnLiAqL1xuICBhcz86IGtleW9mIEpTWC5JbnRyaW5zaWNFbGVtZW50cztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBIdG1sKHByb3BzOiBIdG1sUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgaHRtbCwgYXMgPSBcImRpdlwiLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChhcywge1xuICAgIC8vIENvbnN1bWVyIGRhdGEtKi9hcmlhLSovdGl0bGUgZmlyc3Q7IHRoZSBwcmltaXRpdmUncyBvd25cbiAgICAvLyBhdHRyaWJ1dGVzIGJlbG93IHdpbiBvbiBhbnkgY29sbGlzaW9uLlxuICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgaWQsXG4gICAgY2xhc3M6IGNsYXNzTmFtZSxcbiAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9sbHktaHRtbFwiOiB0cnVlLFxuICAgIC8vIG5vc2VtZ3JlcDogdHlwZXNjcmlwdC5yZWFjdC5zZWN1cml0eS5hdWRpdC5yZWFjdC1kYW5nZXJvdXNseXNldGlubmVyaHRtbC5yZWFjdC1kYW5nZXJvdXNseXNldGlubmVyaHRtbCDigJQgdGhpcyBwcmltaXRpdmUgSVMgdGhlIGRvY3VtZW50ZWQgdHJ1c3RlZC1tYXJrdXAgZXNjYXBlIGhhdGNoOyB0aGUgY2FsbGVyIG93bnMgc2FuaXRpc2F0aW9uIChzZWUgbW9kdWxlIGRvY3MpLlxuICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7IF9faHRtbDogaHRtbCB9LFxuICB9KTtcbn1cbiIsCiAgICAiLyoqXG4gKiBMaW5rIOKAlCB0b2tlbi1zdHlsZWQgbmF2aWdhdGlvbmFsIGFuY2hvci5cbiAqXG4gKiBUaGUgcHJpbWl0aXZlIGZvciBwbGFpbiBoeXBlcmxpbmtzOiBodWIgYXBwLWdyaWQgY2FyZHMsIGEgZmlsZVxuICogZG93bmxvYWQsIGFuIGV4dGVybmFsIHJlZmVyZW5jZS4gPEJ1dHRvbiBocmVmPiBpcyBmb3IgbGluay1zaGFwZWRcbiAqIEJVVFRPTlMg4oCUIGEgY2FsbCB0byBhY3Rpb24gd2VhcmluZyBidXR0b24gY2hyb21lOyA8TGluaz4gaXMgZm9yXG4gKiBpbmxpbmUsIHRleHR1YWwgbGlua3MgdGhhdCByZWFkIGFzIGxpbmtzLiBgZXh0ZXJuYWxgIG9wZW5zIGEgbmV3IHRhYlxuICogd2l0aCBgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiYDsgYGRvd25sb2FkYCBvZmZlcnMgdGhlIHRhcmdldCBhcyBhXG4gKiBmaWxlIChhbiBlbXB0eSBzdHJpbmcga2VlcHMgdGhlIHJlc291cmNlJ3Mgb3duIGZpbGVuYW1lKS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9MaW5rLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgTGlua1Byb3BzID0gUGFzc3Rocm91Z2hBdHRycyAmIHtcbiAgY2hpbGRyZW46IENvbXBvbmVudENoaWxkcmVuO1xuICBocmVmOiBzdHJpbmc7XG4gIC8qKiBPcGVuIGluIGEgbmV3IHRhYiB3aXRoIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIi4gKi9cbiAgZXh0ZXJuYWw/OiBib29sZWFuO1xuICAvKiogT2ZmZXIgdGhlIGhyZWYgYXMgYSBkb3dubG9hZDsgYW4gZW1wdHkgc3RyaW5nIGtlZXBzIGl0cyBmaWxlbmFtZS4gKi9cbiAgZG93bmxvYWQ/OiBzdHJpbmc7XG4gIC8qKiBEcm9wIHRoZSB1bmRlcmxpbmUgdW50aWwgaG92ZXIg4oCUIGZvciBsaW5rIGdyaWRzIGFuZCBjYXJkIGxpbmtzLiAqL1xuICBzdWJ0bGU/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIExpbmsocHJvcHM6IExpbmtQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgeyBjaGlsZHJlbiwgaHJlZiwgZXh0ZXJuYWwsIGRvd25sb2FkLCBzdWJ0bGUsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJsaW5rXCJdXTtcbiAgaWYgKHN1YnRsZSkgcGFydHMucHVzaChjbGFzc2VzW1wic3VidGxlXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGFcbiAgICAgIHsuLi5jb2xsZWN0UGFzc3Rocm91Z2gocHJvcHMpfVxuICAgICAgaWQ9e2lkfVxuICAgICAgY2xhc3M9e3BhcnRzLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKX1cbiAgICAgIGhyZWY9e2hyZWZ9XG4gICAgICB0YXJnZXQ9e2V4dGVybmFsID8gXCJfYmxhbmtcIiA6IHVuZGVmaW5lZH1cbiAgICAgIHJlbD17ZXh0ZXJuYWwgPyBcIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiA6IHVuZGVmaW5lZH1cbiAgICAgIGRvd25sb2FkPXtkb3dubG9hZH1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktbGlua1xuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2E+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogT3V0cHV0IOKAlCByZWFkLW9ubHksIG11bHRpLWxpbmUgZGlhZ25vc3RpYyB0ZXh0LlxuICpcbiAqIEZvciBwcm9ncmFtIG91dHB1dCBhIGNvbnN1bWVyIG11c3QgU0hPVyBidXQgbm90IGVkaXQ6IGEgbWVzaC1zdGF0ZVxuICogc25hcHNob3QsIGEgcGVyLXBlZXIgc3luYyB0YWJsZSwgYSByZWNvdmVyeSBibG9iLiA8VGV4dElucHV0PiBhbmRcbiAqIDxBY3Rpb25JbnB1dD4gYXJlIHNpbmdsZS1saW5lIGFuZCBlZGl0YWJsZTsgPENvZGU+IGlzIGZvciBjb2RlXG4gKiBzYW1wbGVzIGFuZCBuZXZlciB3cmFwcy4gPE91dHB1dD4gcmVuZGVycyBhIG1vbm9zcGFjZSA8cHJlPiB0aGF0XG4gKiB3cmFwcyBsb25nIGxpbmVzIGJ5IGRlZmF1bHQg4oCUIGEgZGlhZ25vc3RpYyBkdW1wIHNob3VsZCBzdGF5IG9uXG4gKiBzY3JlZW4g4oCUIHdpdGggYHNjcm9sbGAgdG8gc3dpdGNoIHRvIGEgaG9yaXpvbnRhbCBzY3JvbGxiYXIgaW5zdGVhZC5cbiAqXG4gKiBJdCBjYXJyaWVzIHRoZSBwb2xseSMxMjUgcGFzc3Rocm91Z2ggc3VyZmFjZSwgc28gYSBgZGF0YS1hY3Rpb25gXG4gKiBmb3IgYSB0YXAtdG8tc2VsZWN0LWFsbCBnZXN0dXJlIHJpZGVzIHN0cmFpZ2h0IG9udG8gdGhlIDxwcmU+XG4gKiAocG9sbHkjMTM1KS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjb2xsZWN0UGFzc3Rocm91Z2gsIHR5cGUgUGFzc3Rocm91Z2hBdHRycyB9IGZyb20gXCIuL2ludGVybmFsL3Bhc3N0aHJvdWdoLnRzXCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9PdXRwdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBPdXRwdXRQcm9wcyA9IFBhc3N0aHJvdWdoQXR0cnMgJiB7XG4gIGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbjtcbiAgLyoqIFNjcm9sbCBsb25nIHVuYnJlYWthYmxlIGxpbmVzIGhvcml6b250YWxseSBpbnN0ZWFkIG9mIHdyYXBwaW5nLiAqL1xuICBzY3JvbGw/OiBib29sZWFuO1xuICAvKiogTWFrZSB0aGUgYmxvY2sgZm9jdXNhYmxlIOKAlCBwYWlyIHdpdGggYSBgZGF0YS1hY3Rpb25gIHRhcCBnZXN0dXJlLiAqL1xuICB0YWJJbmRleD86IG51bWJlcjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBPdXRwdXQocHJvcHM6IE91dHB1dFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoaWxkcmVuLCBzY3JvbGwsIHRhYkluZGV4LCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcblxuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1wib3V0cHV0XCJdXTtcbiAgaWYgKHNjcm9sbCkgcGFydHMucHVzaChjbGFzc2VzW1wic2Nyb2xsXCJdKTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPHByZVxuICAgICAgey4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyl9XG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgdGFiSW5kZXg9e3RhYkluZGV4fVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS1vdXRwdXRcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9wcmU+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogU2VsZWN0IOKAlCBkcm9wZG93biBvZiBvcHRpb25zIHdpdGggc2luZ2xlLSBvciBtdWx0aS1zZWxlY3Qgc2VtYW50aWNzLlxuICpcbiAqIENvbXBvc2VzIERyb3Bkb3duIGZvciB0aGUgbWVudSBhbmQgYSBuYXRpdmUgY2hlY2tib3ggaW4gZWFjaCBvcHRpb25cbiAqIHJvdyBmb3IgbXVsdGktc2VsZWN0LiBUaGUgYHNlbGVjdGVkYCBzdGF0ZSBpcyBhIFNpZ25hbDxTZXQ8VD4+O1xuICogc2luZ2xlLXNlbGVjdCByZXBsYWNlcyB0aGUgc2V0LCBtdWx0aS1zZWxlY3QgdG9nZ2xlcyBtZW1iZXJzaGlwLlxuICogTXVsdGktc2VsZWN0IG1vZGUgYWxzbyBzaG93cyBTZWxlY3QgQWxsIC8gQ2xlYXIgYWN0aW9uIGJ1dHRvbnMgYXRcbiAqIHRoZSB0b3Agb2YgdGhlIG1lbnUuIFNpbmdsZS1zZWxlY3QgbW9kZSBjYW4gb3B0IGludG8gYGNsZWFyYWJsZWAsXG4gKiB3aGljaCBwcmVwZW5kcyBhIHBsYWNlaG9sZGVyLWxhYmVsbGVkIG9wdGlvbiB0aGF0IHJldHVybnMgdGhlXG4gKiBzZWxlY3Rpb24gdG8gZW1wdHkg4oCUIGZvciBcIkFueSDigKZcIiBmaWx0ZXIgc2VtYW50aWNzLlxuICovXG5cbmltcG9ydCB7IHR5cGUgU2lnbmFsLCB1c2VDb21wdXRlZCwgdXNlU2lnbmFsIH0gZnJvbSBcIkBwcmVhY3Qvc2lnbmFsc1wiO1xuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBEcm9wZG93biB9IGZyb20gXCIuL0Ryb3Bkb3duLnRzeFwiO1xuaW1wb3J0IHsgU2VsZWN0VHJpZ2dlciB9IGZyb20gXCIuL2ludGVybmFsL3NlbGVjdC10cmlnZ2VyLnRzeFwiO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSBcIi4vTGF5b3V0LnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vU2VsZWN0Lm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgU2VsZWN0T3B0aW9uPFQgPSBzdHJpbmc+ID0geyB2YWx1ZTogVDsgbGFiZWw6IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBTZWxlY3RQcm9wczxUID0gc3RyaW5nPiA9IHtcbiAgb3B0aW9uczogU2VsZWN0T3B0aW9uPFQ+W107XG4gIHNlbGVjdGVkOiBTaWduYWw8U2V0PFQ+PjtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBtdWx0aVNlbGVjdD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTaW5nbGUtc2VsZWN0IG9ubHk6IHByZXBlbmQgYW4gb3B0aW9uIGxhYmVsbGVkIHdpdGggdGhlIHBsYWNlaG9sZGVyXG4gICAqIHRoYXQgcmV0dXJucyB0aGUgc2VsZWN0aW9uIHRvIGVtcHR5LiBXaXRob3V0IGl0LCBwaWNraW5nIGFuIG9wdGlvblxuICAgKiBpcyBhIHRyYXAg4oCUIG5vdGhpbmcgaW4gdGhlIGxpc3QgbGVhZHMgYmFjayB0byBcImFueVwiLiBVc2UgaXQgZm9yXG4gICAqIG9wdGlvbmFsIGZpbHRlcnMgKFwiQW55IHN0YWdlXCIpLCBub3QgcmVxdWlyZWQgZm9ybSBmaWVsZHNcbiAgICogKFwiU2VsZWN0IGEgdGVhbVwiKS4gSWdub3JlZCBpbiBtdWx0aS1zZWxlY3QsIHdoaWNoIGhhcyBDbGVhci5cbiAgICovXG4gIGNsZWFyYWJsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEFwcGx5IGEgY29tZm9ydGFibGUgbWluaW11bSB3aWR0aCB0byB0aGUgdHJpZ2dlci4gRGVmYXVsdDogc2l6ZXMgdG8gY29udGVudC4gKi9cbiAgd2lkZT86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBNVUxUSV9TRUxFQ1RfTEFCRUxfVEhSRVNIT0xEID0gMjtcblxuZnVuY3Rpb24gZm9ybWF0U2VsZWN0ZWQ8VD4oXG4gIG9wdGlvbnM6IFNlbGVjdE9wdGlvbjxUPltdLFxuICBzZWxlY3RlZDogU2V0PFQ+LFxuICBtdWx0aVNlbGVjdDogYm9vbGVhblxuKTogc3RyaW5nIHtcbiAgaWYgKHNlbGVjdGVkLnNpemUgPT09IDApIHJldHVybiBcIlwiO1xuICBpZiAobXVsdGlTZWxlY3QgJiYgc2VsZWN0ZWQuc2l6ZSA+IE1VTFRJX1NFTEVDVF9MQUJFTF9USFJFU0hPTEQpIHtcbiAgICByZXR1cm4gYCR7c2VsZWN0ZWQuc2l6ZX0gc2VsZWN0ZWRgO1xuICB9XG4gIGNvbnN0IGxhYmVsczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGlmIChzZWxlY3RlZC5oYXMob3B0LnZhbHVlKSkgbGFiZWxzLnB1c2gob3B0LmxhYmVsKTtcbiAgfVxuICByZXR1cm4gbGFiZWxzLmpvaW4oXCIsIFwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNlbGVjdDxUID0gc3RyaW5nPihwcm9wczogU2VsZWN0UHJvcHM8VD4pOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBvcHRpb25zLFxuICAgIHNlbGVjdGVkLFxuICAgIGxhYmVsLFxuICAgIHBsYWNlaG9sZGVyID0gXCJTZWxlY3RcXHUyMDI2XCIsXG4gICAgbXVsdGlTZWxlY3QgPSBmYWxzZSxcbiAgICBjbGVhcmFibGUgPSBmYWxzZSxcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgIHdpZGUgPSBmYWxzZSxcbiAgICBjbGFzc05hbWUsXG4gICAgaWQsXG4gIH0gPSBwcm9wcztcblxuICBjb25zdCBpc09wZW4gPSB1c2VTaWduYWwoZmFsc2UpO1xuXG4gIGNvbnN0IGRpc3BsYXlUZXh0ID0gdXNlQ29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHRleHQgPSBmb3JtYXRTZWxlY3RlZChvcHRpb25zLCBzZWxlY3RlZC52YWx1ZSwgbXVsdGlTZWxlY3QpO1xuICAgIHJldHVybiB0ZXh0Lmxlbmd0aCA+IDAgPyB0ZXh0IDogcGxhY2Vob2xkZXI7XG4gIH0pO1xuXG4gIGNvbnN0IGlzRW1wdHkgPSB1c2VDb21wdXRlZCgoKSA9PiBzZWxlY3RlZC52YWx1ZS5zaXplID09PSAwKTtcblxuICBjb25zdCBoYW5kbGVPcHRpb25DbGljayA9ICh2YWx1ZTogVCk6IHZvaWQgPT4ge1xuICAgIGlmIChtdWx0aVNlbGVjdCkge1xuICAgICAgY29uc3QgbmV4dCA9IG5ldyBTZXQoc2VsZWN0ZWQudmFsdWUpO1xuICAgICAgaWYgKG5leHQuaGFzKHZhbHVlKSkgbmV4dC5kZWxldGUodmFsdWUpO1xuICAgICAgZWxzZSBuZXh0LmFkZCh2YWx1ZSk7XG4gICAgICBzZWxlY3RlZC52YWx1ZSA9IG5leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGVjdGVkLnZhbHVlID0gbmV3IFNldChbdmFsdWVdKTtcbiAgICAgIGlzT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTZWxlY3RBbGwgPSAoKTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KG9wdGlvbnMubWFwKChvKSA9PiBvLnZhbHVlKSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2xlYXIgPSAoKTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KCk7XG4gIH07XG5cbiAgLy8gVGhlIGNsZWFyIG9wdGlvbiBiZWhhdmVzIGxpa2UgYSBub3JtYWwgc2VsZWN0aW9uOiBwaWNrIGl0LCBtZW51IGNsb3Nlcy5cbiAgY29uc3QgaGFuZGxlQ2xlYXJPcHRpb24gPSAoKTogdm9pZCA9PiB7XG4gICAgc2VsZWN0ZWQudmFsdWUgPSBuZXcgU2V0KCk7XG4gICAgaXNPcGVuLnZhbHVlID0gZmFsc2U7XG4gIH07XG5cbiAgY29uc3QgdHJpZ2dlclBhcnRzID0gW2NsYXNzZXNbXCJ0cmlnZ2VyXCJdID8/IFwiXCJdO1xuICBpZiAoaXNFbXB0eS52YWx1ZSkgdHJpZ2dlclBhcnRzLnB1c2goY2xhc3Nlc1tcInBsYWNlaG9sZGVyXCJdID8/IFwiXCIpO1xuICBpZiAod2lkZSkgdHJpZ2dlclBhcnRzLnB1c2goY2xhc3Nlc1tcInRyaWdnZXJXaWRlXCJdID8/IFwiXCIpO1xuICBjb25zdCB0cmlnZ2VyQ2xhc3MgPSB0cmlnZ2VyUGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpO1xuICBjb25zdCB0cmlnZ2VyQ29udGVudCA9IDxTZWxlY3RUcmlnZ2VyIGxhYmVsPXtkaXNwbGF5VGV4dC52YWx1ZX0gLz47XG5cbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInNlbGVjdFwiXSA/PyBcIlwiXTtcbiAgaWYgKGNsYXNzTmFtZSkgcGFydHMucHVzaChjbGFzc05hbWUpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBpZD17aWR9IGNsYXNzPXtwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIil9IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1zZWxlY3Q+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICAgIDxEcm9wZG93blxuICAgICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgICAgdHJpZ2dlcj17dHJpZ2dlckNvbnRlbnR9XG4gICAgICAgIHRyaWdnZXJDbGFzc05hbWU9e3RyaWdnZXJDbGFzc31cbiAgICAgICAgdHJpZ2dlckRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgdHJpZ2dlclRpdGxlPXtkaXNwbGF5VGV4dC52YWx1ZX1cbiAgICAgICAgbXVsdGlTZWxlY3Q9e211bHRpU2VsZWN0fVxuICAgICAgPlxuICAgICAgICB7bXVsdGlTZWxlY3QgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25zXCJdfT5cbiAgICAgICAgICAgIDxMYXlvdXQgY29sdW1ucz1cIjFmciAxZnJcIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14cylcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25CdG5cIl19IG9uQ2xpY2s9e2hhbmRsZVNlbGVjdEFsbH0+XG4gICAgICAgICAgICAgICAgU2VsZWN0IEFsbFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9e2NsYXNzZXNbXCJhY3Rpb25CdG5cIl19IG9uQ2xpY2s9e2hhbmRsZUNsZWFyfT5cbiAgICAgICAgICAgICAgICBDbGVhclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICB7IW11bHRpU2VsZWN0ICYmIGNsZWFyYWJsZSAmJiAoXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICByb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9e2lzRW1wdHkudmFsdWUgPyBcInRydWVcIiA6IFwiZmFsc2VcIn1cbiAgICAgICAgICAgIGNsYXNzPXtcbiAgICAgICAgICAgICAgaXNFbXB0eS52YWx1ZVxuICAgICAgICAgICAgICAgID8gYCR7Y2xhc3Nlc1tcIm9wdGlvblwiXX0gJHtjbGFzc2VzW1wib3B0aW9uU2VsZWN0ZWRcIl19YFxuICAgICAgICAgICAgICAgIDogY2xhc3Nlc1tcIm9wdGlvblwiXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YS1wb2xseS1zZWxlY3QtY2xlYXJcbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsZWFyT3B0aW9ufVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPntwbGFjZWhvbGRlcn08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICl9XG4gICAgICAgIHtvcHRpb25zLm1hcCgob3B0KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHNlbGVjdGVkLnZhbHVlLmhhcyhvcHQudmFsdWUpO1xuICAgICAgICAgIGNvbnN0IG9wdENsYXNzID0gaXNTZWxlY3RlZFxuICAgICAgICAgICAgPyBgJHtjbGFzc2VzW1wib3B0aW9uXCJdfSAke2NsYXNzZXNbXCJvcHRpb25TZWxlY3RlZFwiXX1gXG4gICAgICAgICAgICA6IGNsYXNzZXNbXCJvcHRpb25cIl07XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAga2V5PXtTdHJpbmcob3B0LnZhbHVlKX1cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICBhcmlhLXNlbGVjdGVkPXtpc1NlbGVjdGVkID8gXCJ0cnVlXCIgOiBcImZhbHNlXCJ9XG4gICAgICAgICAgICAgIGNsYXNzPXtvcHRDbGFzc31cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlT3B0aW9uQ2xpY2sob3B0LnZhbHVlKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge211bHRpU2VsZWN0ICYmIChcbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcIm9wdGlvbkNoZWNrXCJdfVxuICAgICAgICAgICAgICAgICAgY2hlY2tlZD17aXNTZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgIHRhYkluZGV4PXstMX1cbiAgICAgICAgICAgICAgICAgIHJlYWRPbmx5PXt0cnVlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxzcGFuPntvcHQubGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgICA8L0Ryb3Bkb3duPlxuICAgIDwvZGl2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFNrZWxldG9uIOKAlCBzaGltbWVyaW5nIHBsYWNlaG9sZGVyIGZvciBsb2FkaW5nIHN0YXRlcy5cbiAqXG4gKiBUaHJlZSB2YXJpYW50czogdGV4dCAoZnVsbC13aWR0aCwgMWVtIHRhbGwpLCByZWN0IChmdWxsLXdpZHRoLCAxMDBweFxuICogdGFsbCksIGNpcmNsZSAoNDB4NDApLiBBIENTUyBncmFkaWVudCBhbmltYXRlcyBsZWZ0LXRvLXJpZ2h0IG92ZXJcbiAqIDEuNXMuIGBwcmVmZXJzLXJlZHVjZWQtbW90aW9uYCB6ZXJvZXMgdGhlIGFuaW1hdGlvbiB2aWEgdGhlIHRva2VuXG4gKiBzeXN0ZW0uIENvbnN1bWVycyBzaXplIHZpYSB3aWR0aC9oZWlnaHQgcHJvcHMgKHB4IG51bWJlcnMgb3IgQ1NTXG4gKiBzdHJpbmdzKTsgZGVmYXVsdCBzaXppbmcgY29tZXMgZnJvbSB0aGUgdmFyaWFudC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1NrZWxldG9uLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgU2tlbGV0b25WYXJpYW50ID0gXCJ0ZXh0XCIgfCBcInJlY3RcIiB8IFwiY2lyY2xlXCI7XG5cbmV4cG9ydCB0eXBlIFNrZWxldG9uUHJvcHMgPSB7XG4gIHZhcmlhbnQ/OiBTa2VsZXRvblZhcmlhbnQ7XG4gIHdpZHRoPzogc3RyaW5nIHwgbnVtYmVyO1xuICBoZWlnaHQ/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIHJlc29sdmVTaXplKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikgcmV0dXJuIGAke3ZhbHVlfXB4YDtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiB2YXJpYW50Q2xhc3ModmFyaWFudDogU2tlbGV0b25WYXJpYW50KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHZhcmlhbnQgPT09IFwiY2lyY2xlXCIpIHJldHVybiBjbGFzc2VzW1wiY2lyY2xlXCJdO1xuICBpZiAodmFyaWFudCA9PT0gXCJyZWN0XCIpIHJldHVybiBjbGFzc2VzW1wicmVjdFwiXTtcbiAgcmV0dXJuIGNsYXNzZXNbXCJ0ZXh0XCJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU2tlbGV0b24ocHJvcHM6IFNrZWxldG9uUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHsgdmFyaWFudCA9IFwidGV4dFwiLCB3aWR0aCwgaGVpZ2h0LCBjbGFzc05hbWUgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHN0eWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGNvbnN0IHcgPSByZXNvbHZlU2l6ZSh3aWR0aCk7XG4gIGNvbnN0IGggPSByZXNvbHZlU2l6ZShoZWlnaHQpO1xuICBpZiAodyAhPT0gdW5kZWZpbmVkKSBzdHlsZVtcIndpZHRoXCJdID0gdztcbiAgaWYgKGggIT09IHVuZGVmaW5lZCkgc3R5bGVbXCJoZWlnaHRcIl0gPSBoO1xuXG4gIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBiYXNlID0gY2xhc3Nlc1tcInNrZWxldG9uXCJdO1xuICBpZiAoYmFzZSkgcGFydHMucHVzaChiYXNlKTtcbiAgY29uc3QgdkNsYXNzID0gdmFyaWFudENsYXNzKHZhcmlhbnQpO1xuICBpZiAodkNsYXNzKSBwYXJ0cy5wdXNoKHZDbGFzcyk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcblxuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBjbGFzcz17cGFydHMuam9pbihcIiBcIil9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXNrZWxldG9uPXt2YXJpYW50fVxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAvPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFRhYnMg4oCUIGhvcml6b250YWwgbmF2IHdpdGggYWN0aXZlLXRhYiBhY2NlbnQuXG4gKlxuICogRWFjaCBidXR0b24gY2FycmllcyBgZGF0YS1hY3Rpb25gICh0aGUgY29uc3VtZXItcHJvdmlkZWQgYWN0aW9uIG5hbWUpXG4gKiBhbmQgYGRhdGEtYWN0aW9uLWlkPXt0YWIuaWR9YCBzbyB0aGUgZXZlbnQgZGVsZWdhdG9yIHJlc29sdmVzIHRoZVxuICogYWN0aXZhdGVkIHRhYi4gVGhlIGFjdGl2ZSB0YWIgZ2V0cyBgYXJpYS1jdXJyZW50PVwicGFnZVwiYCBhbmQgYVxuICogYm90dG9tLWJvcmRlciBhY2NlbnQuIFRoZSBuYXYgc2Nyb2xscyBob3Jpem9udGFsbHkgd2l0aCBhIGhpZGRlblxuICogc2Nyb2xsYmFyIGZvciBvdmVyZmxvdy4gSW50ZXJuYWwgYXJyYW5nZW1lbnQgdXNlcyA8TGF5b3V0PiwgcGFja2VkIHRvXG4gKiB0aGUgaW5saW5lIHN0YXJ0OiB0aGUgZ3JpZCBpcyAxMDAlIHdpZGUsIHNvIHdpdGhvdXQganVzdGlmeUNvbnRlbnQgdGhlXG4gKiBgYXV0b2AgdHJhY2tzIHN0cmV0Y2ggYW5kIGZvdXIgdGFicyBzcHJlYWQgYWNyb3NzIHRoZSB3aG9sZSBjb250YWluZXIuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgY2xhc3NlcyBmcm9tIFwiLi9UYWJzLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgVGFiID0geyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyBkaXNhYmxlZD86IGJvb2xlYW4gfTtcblxuZXhwb3J0IHR5cGUgVGFic1Byb3BzID0ge1xuICB0YWJzOiBUYWJbXTtcbiAgYWN0aXZlVGFiOiBzdHJpbmc7XG4gIGFjdGlvbj86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbiAgXCJhcmlhLWxhYmVsXCI/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gVGFicyhwcm9wczogVGFic1Byb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IHRhYnMsIGFjdGl2ZVRhYiwgYWN0aW9uLCBjbGFzc05hbWUsIGlkIH0gPSBwcm9wcztcbiAgY29uc3QgcGFydHMgPSBbY2xhc3Nlc1tcInRhYnNcIl0gPz8gXCJcIl07XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8bmF2XG4gICAgICBpZD17aWR9XG4gICAgICBjbGFzcz17cGFydHMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIgXCIpfVxuICAgICAgYXJpYS1sYWJlbD17cHJvcHNbXCJhcmlhLWxhYmVsXCJdfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS10YWJzXG4gICAgPlxuICAgICAgPExheW91dFxuICAgICAgICBjb2x1bW5zPXtgcmVwZWF0KCR7dGFicy5sZW5ndGh9LCBhdXRvKWB9XG4gICAgICAgIGdhcD1cIjBcIlxuICAgICAgICBhbGlnbkl0ZW1zPVwiZW5kXCJcbiAgICAgICAganVzdGlmeUNvbnRlbnQ9XCJzdGFydFwiXG4gICAgICA+XG4gICAgICAgIHt0YWJzLm1hcCgodGFiKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVUYWIgPT09IHRhYi5pZDtcbiAgICAgICAgICBjb25zdCB0YWJDbGFzcyA9IGlzQWN0aXZlID8gYCR7Y2xhc3Nlc1tcInRhYlwiXX0gJHtjbGFzc2VzW1wiYWN0aXZlXCJdfWAgOiBjbGFzc2VzW1widGFiXCJdO1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGtleT17dGFiLmlkfVxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9e3RhYkNsYXNzfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17dGFiLmRpc2FibGVkfVxuICAgICAgICAgICAgICBhcmlhLWN1cnJlbnQ9e2lzQWN0aXZlID8gXCJwYWdlXCIgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGRhdGEtYWN0aW9uPXthY3Rpb259XG4gICAgICAgICAgICAgIGRhdGEtYWN0aW9uLWlkPXt0YWIuaWR9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0YWIubGFiZWx9XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApO1xuICAgICAgICB9KX1cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvbmF2PlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFRleHQg4oCUIHR5cG9ncmFwaGljIHByaW1pdGl2ZSBmb3Igc2Vjb25kYXJ5LCBzaXplZCwgYW5kIHN0YXR1cyBjb3B5LlxuICpcbiAqIFJlbmRlcnMgc3VidGl0bGVzLCBjYXB0aW9ucywgZmllbGQgbGFiZWxzLCBlbXB0eS1zdGF0ZSBjb3B5LCBhbmRcbiAqIGVycm9yL3dhcm5pbmcgbWVzc2FnZXMgd2l0aG91dCB0aGUgY29uc3VtZXIgcmVhY2hpbmcgZm9yIGEgYHN0eWxlYFxuICogYXR0cmlidXRlIG9yIGEgaGFuZC1yb2xsZWQgY2xhc3MuIGB0b25lYCBtYXBzIHRvIHRoZSBzZW1hbnRpY1xuICogYC0tcG9sbHktdGV4dC0qYCBhbmQgYC0tcG9sbHktc3RhdHVzLSpgIHRva2VuIGZhbWlsaWVzOyBgc2l6ZWAsXG4gKiBgd2VpZ2h0YCwgYGl0YWxpY2AsIGFuZCBgbGVhZGluZ2AgY292ZXIgdGhlIHJlbWFpbmluZyB0eXBvZ3JhcGhpY1xuICogYXhlcy4gYGFzYCBrZWVwcyB0aGUgZWxlbWVudCBwb2x5bW9ycGhpYyBzbyB0aGUgc2FtZSBwcmltaXRpdmUgYmFja3MgYVxuICogPHNwYW4+LCA8cD4sIDxsYWJlbD4sIG9yIDxmaWdjYXB0aW9uPi4gQSBuby1wcm9wIDxUZXh0PiBpcyBhbiBvcmRpbmFyeVxuICogPHNwYW4+IGF0IGJvZHkgc2l6ZSBhbmQgZGVmYXVsdCBjb2xvdXIuXG4gKlxuICogcG9sbHkjMTI1OiBhcmJpdHJhcnkgYGRhdGEtKmAgLyBgYXJpYS0qYCBhdHRyaWJ1dGVzIGFyZSBmb3J3YXJkZWQgdG9cbiAqIHRoZSByZW5kZXJlZCBlbGVtZW50LCBzbyBhIFRleHQgdGhhdCBhbHNvIG5lZWRzIGEgdGVzdCBob29rIG9yIGFuXG4gKiBhMTF5IGF0dHJpYnV0ZSBzdGF5cyBhIHNpbmdsZSBlbGVtZW50LlxuICovXG5cbmltcG9ydCB7IHR5cGUgQ29tcG9uZW50Q2hpbGRyZW4sIGNyZWF0ZUVsZW1lbnQsIHR5cGUgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgY29sbGVjdFBhc3N0aHJvdWdoLCB0eXBlIFBhc3N0aHJvdWdoQXR0cnMgfSBmcm9tIFwiLi9pbnRlcm5hbC9wYXNzdGhyb3VnaC50c1wiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVGV4dC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFRleHRUb25lID0gXCJkZWZhdWx0XCIgfCBcIm11dGVkXCIgfCBcImRhbmdlclwiIHwgXCJ3YXJuaW5nXCIgfCBcInN1Y2Nlc3NcIjtcbmV4cG9ydCB0eXBlIFRleHRTaXplID0gXCJ4c1wiIHwgXCJzbVwiIHwgXCJtZFwiIHwgXCJsZ1wiIHwgXCJ4bFwiO1xuZXhwb3J0IHR5cGUgVGV4dFdlaWdodCA9IFwibm9ybWFsXCIgfCBcIm1lZGl1bVwiIHwgXCJib2xkXCI7XG5leHBvcnQgdHlwZSBUZXh0TGVhZGluZyA9IFwidGlnaHRcIiB8IFwiYmFzZVwiIHwgXCJsb29zZVwiO1xuXG5leHBvcnQgdHlwZSBUZXh0UHJvcHMgPSBQYXNzdGhyb3VnaEF0dHJzICYge1xuICBjaGlsZHJlbjogQ29tcG9uZW50Q2hpbGRyZW47XG5cbiAgLyoqIFBvbHltb3JwaGljIGVsZW1lbnQgKHNwYW4sIHAsIGxhYmVsLCBmaWdjYXB0aW9uLCDigKYpLiBEZWZhdWx0cyB0byAnc3BhbicuICovXG4gIGFzPzoga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzO1xuXG4gIC8qKiBDb2xvdXIgcm9sZS4gJ211dGVkJyBkZS1lbXBoYXNpc2VzOyAnZGFuZ2VyJy8nd2FybmluZycvJ3N1Y2Nlc3MnXG4gICAqIHJlbmRlciBzdGF0dXMgY29weSBmcm9tIHRoZSBgLS1wb2xseS1zdGF0dXMtKmAgdG9rZW5zLiBEZWZhdWx0OiAnZGVmYXVsdCcuICovXG4gIHRvbmU/OiBUZXh0VG9uZTtcblxuICAvKiogVG9rZW4tYmFja2VkIGZvbnQgc2l6ZS4gRGVmYXVsdDogaW5oZXJpdCBmcm9tIGNvbnRleHQuICovXG4gIHNpemU/OiBUZXh0U2l6ZTtcblxuICAvKiogVG9rZW4tYmFja2VkIGZvbnQgd2VpZ2h0LiBEZWZhdWx0OiBpbmhlcml0IGZyb20gY29udGV4dC4gKi9cbiAgd2VpZ2h0PzogVGV4dFdlaWdodDtcblxuICAvKiogSXRhbGljIGVtcGhhc2lzIOKAlCBmb3IgaGludHMgYW5kIGFzaWRlcyDigJQgd2l0aG91dCBhbiBpbmxpbmUgc3R5bGUuICovXG4gIGl0YWxpYz86IGJvb2xlYW47XG5cbiAgLyoqIExpbmUtdGhyb3VnaCDigJQgZm9yIGNvbXBsZXRlZCB0b2RvIGl0ZW1zIGFuZCBzdXBlcnNlZGVkIGNvcHkuICovXG4gIHN0cmlrZXRocm91Z2g/OiBib29sZWFuO1xuXG4gIC8qKiBUb2tlbi1iYWNrZWQgbGluZSBoZWlnaHQuICdsb29zZScgc3VpdHMgbXVsdGktbGluZSBib2R5IGNvcHkuICovXG4gIGxlYWRpbmc/OiBUZXh0TGVhZGluZztcblxuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICAvKiogRm9yd2FyZGVkIHNvIDxUZXh0IGFzPVwibGFiZWxcIj4gY2FuIHBvaW50IGF0IGEgY29udHJvbC4gKi9cbiAgaHRtbEZvcj86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBUZXh0KHByb3BzOiBUZXh0UHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBhcyA9IFwic3BhblwiLFxuICAgIHRvbmUgPSBcImRlZmF1bHRcIixcbiAgICBzaXplLFxuICAgIHdlaWdodCxcbiAgICBpdGFsaWMsXG4gICAgc3RyaWtldGhyb3VnaCxcbiAgICBsZWFkaW5nLFxuICAgIGNsYXNzTmFtZSxcbiAgICBpZCxcbiAgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHBhcnRzID0gW2NsYXNzZXNbXCJ0ZXh0XCJdXTtcbiAgaWYgKHRvbmUgIT09IFwiZGVmYXVsdFwiKSBwYXJ0cy5wdXNoKGNsYXNzZXNbdG9uZV0pO1xuICBpZiAoc2l6ZSkgcGFydHMucHVzaChjbGFzc2VzW3NpemVdKTtcbiAgaWYgKHdlaWdodCkgcGFydHMucHVzaChjbGFzc2VzW3dlaWdodF0pO1xuICBpZiAoaXRhbGljKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJpdGFsaWNcIl0pO1xuICBpZiAoc3RyaWtldGhyb3VnaCkgcGFydHMucHVzaChjbGFzc2VzW1wic3RyaWtldGhyb3VnaFwiXSk7XG4gIGlmIChsZWFkaW5nKSBwYXJ0cy5wdXNoKGNsYXNzZXNbbGVhZGluZ10pO1xuICBpZiAoY2xhc3NOYW1lKSBwYXJ0cy5wdXNoKGNsYXNzTmFtZSk7XG5cbiAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoXG4gICAgYXMsXG4gICAge1xuICAgICAgLy8gQ29uc3VtZXIgZGF0YS0qL2FyaWEtKiBmaXJzdDsgdGhlIHByaW1pdGl2ZSdzIG93biBhdHRyaWJ1dGVzXG4gICAgICAvLyBiZWxvdyB3aW4gb24gYW55IGNvbGxpc2lvbi5cbiAgICAgIC4uLmNvbGxlY3RQYXNzdGhyb3VnaChwcm9wcyksXG4gICAgICBpZCxcbiAgICAgIGNsYXNzOiBwYXJ0cy5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIiksXG4gICAgICBmb3I6IHByb3BzLmh0bWxGb3IsXG4gICAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICAgIFwiZGF0YS1wb2xseS10ZXh0XCI6IHRvbmUsXG4gICAgfSxcbiAgICBjaGlsZHJlblxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFNoYXJlZCBpbnB1dCBhMTF5IHdpcmluZy5cbiAqXG4gKiBSZXR1cm5zIGEgY29tbW9uIHNldCBvZiBhdHRyaWJ1dGVzIHRoYXQgVGV4dElucHV0LCBBY3Rpb25JbnB1dCwgYW5kXG4gKiBhbnkgY29uc3VtZXItYnVpbHQgaW5wdXQgY2FuIHNwbGF0IG9udG8gaXRzIG5hdGl2ZSBlbGVtZW50LiBLZWVwc1xuICogYXJpYS0qIGFuZCBkYXRhLXBvbGx5LSogbmFtZXMgY29uc2lzdGVudCBhY3Jvc3MgdGhlIGZhbWlseS5cbiAqL1xuXG5leHBvcnQgdHlwZSBJbnB1dEExMXlQcm9wcyA9IHtcbiAgbmFtZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgaW52YWxpZD86IGJvb2xlYW47XG4gIGRlc2NyaWJlZEJ5Pzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICByZWFkT25seT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRJbnB1dEExMXkocHJvcHM6IElucHV0QTExeVByb3BzKSB7XG4gIGNvbnN0IGF0dHJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBcImRhdGEtcG9sbHktdWlcIjogdHJ1ZSxcbiAgICBcImRhdGEtcG9sbHktaW5wdXRcIjogdHJ1ZSxcbiAgICBcImFyaWEtaW52YWxpZFwiOiBwcm9wcy5pbnZhbGlkID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQsXG4gICAgXCJhcmlhLXJlcXVpcmVkXCI6IHByb3BzLnJlcXVpcmVkID8gXCJ0cnVlXCIgOiB1bmRlZmluZWQsXG4gICAgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IHByb3BzLmRlc2NyaWJlZEJ5LFxuICAgIG5hbWU6IHByb3BzLm5hbWUsXG4gICAgaWQ6IHByb3BzLmlkLFxuICAgIHBsYWNlaG9sZGVyOiBwcm9wcy5wbGFjZWhvbGRlcixcbiAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQsXG4gICAgcmVhZE9ubHk6IHByb3BzLnJlYWRPbmx5LFxuICB9O1xuICBpZiAocHJvcHMuaW52YWxpZCkgYXR0cnNbXCJkYXRhLXN0YXRlXCJdID0gXCJpbnZhbGlkXCI7XG4gIHJldHVybiBhdHRycztcbn1cbiIsCiAgICAiLyoqXG4gKiBUZXh0SW5wdXQg4oCUIHBhc3NpdmUsIHNpZ25hbC1mcmllbmRseSBuYXRpdmUgaW5wdXQgd3JhcHBlci5cbiAqXG4gKiBEZXNpZ25lZCB0byBsaXZlIGluc2lkZSA8QWN0aW9uRm9ybT4uIFBhc3MgYSBwbGFpbiBzdHJpbmcgZm9yXG4gKiB1bmNvbnRyb2xsZWQgbW9kZSAoRm9ybURhdGEtb24tc3VibWl0IHBpY2tzIHVwIHRoZSB2YWx1ZSkgb3IgYVxuICogU2lnbmFsPHN0cmluZz4gZm9yIGNvbnRyb2xsZWQgbW9kZS4gRWl0aGVyIHdheSwgYTExeSBhdHRyaWJ1dGVzIGFyZVxuICogd2lyZWQgYnkgdGhlIHNoYXJlZCBpbnB1dC1iYXNlLCB0aGUgc3RhYmxlIGBbZGF0YS1wb2xseS1pbnB1dF1gIGhvb2tcbiAqIGlzIGFwcGxpZWQgZm9yIHN0eWxpbmcsIGFuZCBgaW52YWxpZGAgZmxpcHMgYGFyaWEtaW52YWxpZGAgYW5kXG4gKiBgZGF0YS1zdGF0ZT1cImludmFsaWRcImAgZm9yIGNvbnN1bWVyIHNlbGVjdG9ycy5cbiAqXG4gKiBgaW5wdXRUeXBlYCBzZXRzIHRoZSBuYXRpdmUgc2luZ2xlLWxpbmUgaW5wdXQgdHlwZSDigJQgXCJ0ZXh0XCIgKGRlZmF1bHQpLFxuICogXCJlbWFpbFwiLCBcIm51bWJlclwiLCBcImRhdGVcIiwgYW5kIGZyaWVuZHMg4oCUIHNvIHRoZSBicm93c2VyIHN1cHBsaWVzIHRoZVxuICogcmlnaHQga2V5Ym9hcmQgYW5kIHZhbGlkYXRpb24uIGBtaW5gL2BtYXhgL2BzdGVwYCBhcHBseSB0byB0aGVcbiAqIHNpbmdsZS1saW5lIHZhcmlhbnQgKGUuZy4gbnVtZXJpYyBvciBkYXRlIGJvdW5kcykgYW5kIGtlZXAgZmlsdGVyXG4gKiBmaWVsZHMgZnJvbSBiZWluZyB1bnZhbGlkYXRlZCBmcmVlIHRleHQuXG4gKlxuICogYGVycm9yYCwgd2hlbiBzdXBwbGllZCwgcmVuZGVycyBhIG1lc3NhZ2UgYmVuZWF0aCB0aGUgZmllbGQsIHdyYXBzIHRoZVxuICogY29udHJvbCBpbiBhIGxhYmVsbGVkIGdyb3VwLCBhbmQgYXV0by13aXJlcyBgYXJpYS1kZXNjcmliZWRieWAgcGx1cyB0aGVcbiAqIGludmFsaWQgc3RhdGUg4oCUIG5vIG1hbnVhbCBpZCBqdWdnbGluZy4gV2l0aG91dCBgZXJyb3JgIHRoZSBwcmltaXRpdmVcbiAqIHN0YXlzIGEgYmFyZSBuYXRpdmUgZWxlbWVudCwgZXhhY3RseSBhcyBiZWZvcmUsIHNvIGNvbnN1bWVycyB0aGF0IG93blxuICogdGhlaXIgb3duIHN1cnJvdW5kaW5nIHN0cnVjdHVyZSBhcmUgdW5hZmZlY3RlZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgSlNYIH0gZnJvbSBcInByZWFjdFwiO1xuaW1wb3J0IHsgdXNlSWQgfSBmcm9tIFwicHJlYWN0L2hvb2tzXCI7XG5pbXBvcnQgeyBidWlsZElucHV0QTExeSB9IGZyb20gXCIuL2ludGVybmFsL2lucHV0LWJhc2UudHNcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1RleHRJbnB1dC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVmFyaWFudCA9IFwic2luZ2xlXCIgfCBcIm11bHRpXCI7XG5cbi8qKiBOYXRpdmUgc2luZ2xlLWxpbmUgaW5wdXQgdHlwZXMgcG9sbHkncyBmaWx0ZXIvZm9ybSBmaWVsZHMgdXNlLiAqL1xuZXhwb3J0IHR5cGUgVGV4dElucHV0VHlwZSA9XG4gIHwgXCJ0ZXh0XCJcbiAgfCBcImVtYWlsXCJcbiAgfCBcInVybFwiXG4gIHwgXCJ0ZWxcIlxuICB8IFwic2VhcmNoXCJcbiAgfCBcInBhc3N3b3JkXCJcbiAgfCBcIm51bWJlclwiXG4gIHwgXCJkYXRlXCJcbiAgfCBcImRhdGV0aW1lLWxvY2FsXCJcbiAgfCBcInRpbWVcIlxuICB8IFwibW9udGhcIlxuICB8IFwid2Vla1wiO1xuXG5leHBvcnQgdHlwZSBUZXh0SW5wdXRQcm9wcyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICAvKiogU2lnbmFsPHN0cmluZz4gZm9yIGNvbnRyb2xsZWQsIHN0cmluZyBmb3IgdW5jb250cm9sbGVkIGRlZmF1bHQuICovXG4gIHZhbHVlPzogU2lnbmFsPHN0cmluZz4gfCBzdHJpbmc7XG4gIHZhcmlhbnQ/OiBWYXJpYW50O1xuICAvKiogTmF0aXZlIGlucHV0IHR5cGUgZm9yIHRoZSBzaW5nbGUtbGluZSB2YXJpYW50LiBEZWZhdWx0OiBcInRleHRcIi4gKi9cbiAgaW5wdXRUeXBlPzogVGV4dElucHV0VHlwZTtcbiAgLyoqIExvd2VyIGJvdW5kIGZvciB0aGUgc2luZ2xlLWxpbmUgdmFyaWFudCAobnVtYmVyL2RhdGUgdHlwZXMpLiAqL1xuICBtaW4/OiBudW1iZXIgfCBzdHJpbmc7XG4gIC8qKiBVcHBlciBib3VuZCBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQgKG51bWJlci9kYXRlIHR5cGVzKS4gKi9cbiAgbWF4PzogbnVtYmVyIHwgc3RyaW5nO1xuICAvKiogU3RlcCBncmFudWxhcml0eSBmb3IgdGhlIHNpbmdsZS1saW5lIHZhcmlhbnQgKG51bWJlci9kYXRlIHR5cGVzKS4gKi9cbiAgc3RlcD86IG51bWJlciB8IHN0cmluZztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBOYXRpdmUgaG92ZXIgdG9vbHRpcCDigJQgYSBoaW50IGJleW9uZCB0aGUgcGxhY2Vob2xkZXIvbGFiZWwuICovXG4gIHRpdGxlPzogc3RyaW5nO1xuICBpbnZhbGlkPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFZhbGlkYXRpb24gbWVzc2FnZSByZW5kZXJlZCBiZW5lYXRoIHRoZSBmaWVsZC4gV2hlbiBwcmVzZW50IHRoZVxuICAgKiBwcmltaXRpdmUgd3JhcHMgdGhlIGNvbnRyb2wsIGxpbmtzIHRoZSBtZXNzYWdlIHZpYSBhcmlhLWRlc2NyaWJlZGJ5LFxuICAgKiBhbmQgbWFya3MgdGhlIGZpZWxkIGludmFsaWQuIE9taXQgaXQgdG8ga2VlcCBhIGJhcmUgbmF0aXZlIGVsZW1lbnQuXG4gICAqL1xuICBlcnJvcj86IHN0cmluZztcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHJlYWRPbmx5PzogYm9vbGVhbjtcbiAgaWQ/OiBzdHJpbmc7XG4gIGRlc2NyaWJlZEJ5Pzogc3RyaW5nO1xuICByb3dzPzogbnVtYmVyO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBpc1NpZ25hbDxUPih2OiBTaWduYWw8VD4gfCBUIHwgdW5kZWZpbmVkKTogdiBpcyBTaWduYWw8VD4ge1xuICByZXR1cm4gdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPT0gbnVsbCAmJiBcInZhbHVlXCIgaW4gdiAmJiBcInBlZWtcIiBpbiAodiBhcyB1bmtub3duIGFzIG9iamVjdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUZXh0SW5wdXQocHJvcHM6IFRleHRJbnB1dFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB2YXJpYW50ID0gcHJvcHMudmFyaWFudCA/PyBcInNpbmdsZVwiO1xuICAvLyBBbHdheXMgY2FsbGVkIHNvIGhvb2sgb3JkZXIgaXMgc3RhYmxlOyBvbmx5IHVzZWQgd2hlbiBgZXJyb3JgIGlzIHNldC5cbiAgY29uc3QgZXJyb3JJZCA9IHVzZUlkKCk7XG4gIGNvbnN0IGhhc0Vycm9yID0gcHJvcHMuZXJyb3IgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5lcnJvciAhPT0gXCJcIjtcblxuICBjb25zdCBkZXNjcmliZWRCeSA9XG4gICAgW3Byb3BzLmRlc2NyaWJlZEJ5LCBoYXNFcnJvciA/IGVycm9ySWQgOiB1bmRlZmluZWRdLmZpbHRlcihCb29sZWFuKS5qb2luKFwiIFwiKSB8fCB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYTExeSA9IGJ1aWxkSW5wdXRBMTF5KHtcbiAgICBuYW1lOiBwcm9wcy5uYW1lLFxuICAgIGlkOiBwcm9wcy5pZCxcbiAgICByZXF1aXJlZDogcHJvcHMucmVxdWlyZWQsXG4gICAgLy8gQW4gZXJyb3IgbWVzc2FnZSBpbXBsaWVzIHRoZSBmaWVsZCBpcyBpbnZhbGlkLlxuICAgIGludmFsaWQ6IHByb3BzLmludmFsaWQgfHwgaGFzRXJyb3IsXG4gICAgZGVzY3JpYmVkQnksXG4gICAgcGxhY2Vob2xkZXI6IHByb3BzLnBsYWNlaG9sZGVyLFxuICAgIGRpc2FibGVkOiBwcm9wcy5kaXNhYmxlZCxcbiAgICByZWFkT25seTogcHJvcHMucmVhZE9ubHksXG4gIH0pO1xuXG4gIGNvbnN0IGNvbnRyb2xsZWQgPSBpc1NpZ25hbChwcm9wcy52YWx1ZSk7XG4gIGNvbnN0IHN0cmluZ1ZhbHVlID0gY29udHJvbGxlZCA/IChwcm9wcy52YWx1ZSBhcyB1bmtub3duIGFzIFNpZ25hbDxzdHJpbmc+KS52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gY29udHJvbGxlZFxuICAgID8gdW5kZWZpbmVkXG4gICAgOiAoKHByb3BzLnZhbHVlIGFzIHVua25vd24gYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSA/PyBcIlwiKTtcblxuICBjb25zdCBjbGFzc05hbWUgPSBwcm9wcy5jbGFzc05hbWUgPyBgJHtjbGFzc2VzW1wiaW5wdXRcIl19ICR7cHJvcHMuY2xhc3NOYW1lfWAgOiBjbGFzc2VzW1wiaW5wdXRcIl07XG5cbiAgY29uc3Qgb25JbnB1dCA9IChlOiBKU1guVGFyZ2V0ZWRFdmVudDxIVE1MSW5wdXRFbGVtZW50IHwgSFRNTFRleHRBcmVhRWxlbWVudD4pOiB2b2lkID0+IHtcbiAgICBpZiAoY29udHJvbGxlZCkge1xuICAgICAgKHByb3BzLnZhbHVlIGFzIHVua25vd24gYXMgU2lnbmFsPHN0cmluZz4pLnZhbHVlID0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjb250cm9sID1cbiAgICB2YXJpYW50ID09PSBcIm11bHRpXCIgPyAoXG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgey4uLihhMTF5IGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KX1cbiAgICAgICAgY2xhc3M9e2NsYXNzTmFtZX1cbiAgICAgICAgdGl0bGU9e3Byb3BzLnRpdGxlfVxuICAgICAgICBkYXRhLXBvbGx5LWlucHV0LXZhcmlhbnQ9XCJtdWx0aVwiXG4gICAgICAgIHJvd3M9e3Byb3BzLnJvd3N9XG4gICAgICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L2ExMXkvbm9BdXRvZm9jdXM6IG9wdC1pbiBwcm9wIOKAlCBjYWxsZXIgcmVxdWVzdHMgYXV0b2ZvY3VzIGV4cGxpY2l0bHkgKGUuZy4gZm9ybSBvcGVucyB0byB0aGlzIGZpZWxkKS5cbiAgICAgICAgYXV0b0ZvY3VzPXtwcm9wcy5hdXRvRm9jdXN9XG4gICAgICAgIHZhbHVlPXtzdHJpbmdWYWx1ZX1cbiAgICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9XG4gICAgICAgIG9uSW5wdXQ9e29uSW5wdXR9XG4gICAgICAvPlxuICAgICkgOiAoXG4gICAgICA8aW5wdXRcbiAgICAgICAgey4uLihhMTF5IGFzIHVua25vd24gYXMgSlNYLkhUTUxBdHRyaWJ1dGVzPEhUTUxJbnB1dEVsZW1lbnQ+KX1cbiAgICAgICAgdHlwZT17cHJvcHMuaW5wdXRUeXBlID8/IFwidGV4dFwifVxuICAgICAgICBjbGFzcz17Y2xhc3NOYW1lfVxuICAgICAgICB0aXRsZT17cHJvcHMudGl0bGV9XG4gICAgICAgIGRhdGEtcG9sbHktaW5wdXQtdmFyaWFudD1cInNpbmdsZVwiXG4gICAgICAgIG1pbj17cHJvcHMubWlufVxuICAgICAgICBtYXg9e3Byb3BzLm1heH1cbiAgICAgICAgc3RlcD17cHJvcHMuc3RlcH1cbiAgICAgICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvYTExeS9ub0F1dG9mb2N1czogb3B0LWluIHByb3Ag4oCUIGNhbGxlciByZXF1ZXN0cyBhdXRvZm9jdXMgZXhwbGljaXRseSAoZS5nLiBmb3JtIG9wZW5zIHRvIHRoaXMgZmllbGQpLlxuICAgICAgICBhdXRvRm9jdXM9e3Byb3BzLmF1dG9Gb2N1c31cbiAgICAgICAgdmFsdWU9e3N0cmluZ1ZhbHVlfVxuICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cbiAgICAgICAgb25JbnB1dD17b25JbnB1dH1cbiAgICAgIC8+XG4gICAgKTtcblxuICBpZiAoIWhhc0Vycm9yKSByZXR1cm4gY29udHJvbDtcblxuICByZXR1cm4gKFxuICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCIgY2xhc3NOYW1lPXtjbGFzc2VzW1wiZmllbGRcIl19IGRhdGEtcG9sbHktdWkgZGF0YS1wb2xseS1maWVsZD5cbiAgICAgIHtjb250cm9sfVxuICAgICAgPHNwYW4gaWQ9e2Vycm9ySWR9IHJvbGU9XCJhbGVydFwiIGNsYXNzPXtjbGFzc2VzW1wiZXJyb3JcIl19PlxuICAgICAgICB7cHJvcHMuZXJyb3J9XG4gICAgICA8L3NwYW4+XG4gICAgPC9MYXlvdXQ+XG4gICk7XG59XG4iLAogICAgIi8qKlxuICogVG9hc3Qg4oCUIGNvbnN1bWVyLWZhY2luZyBzdXJmYWNlIGZvciB0aGUgZ2xvYmFsIGVycm9yU3RhdGUuXG4gKlxuICogUmVuZGVycyBldmVyeSBlbnRyeSBvZiB0aGUgYGVycm9yU3RhdGVgIHNpZ25hbCBpbnRvIGEgdmlld3BvcnQgbW91bnRlZFxuICogaW5zaWRlIE92ZXJsYXlSb290LiBgYXJpYS1saXZlYCBpcyBwb2xpdGUgZm9yIGluZm8vd2FybmluZyBhbmRcbiAqIGFzc2VydGl2ZSBmb3IgZXJyb3Igc2V2ZXJpdHkuIEVhY2ggaXRlbSBhdXRvLWRpc21pc3NlcyBhZnRlclxuICogYGF1dG9EaXNtaXNzTXNgIHVubGVzcyB0aGUgdXNlciBob3ZlcnMgdGhlIHZpZXdwb3J0LiBDbGlja2luZyBhXG4gKiB0b2FzdCBvciBpdHMgY2xvc2UgYnV0dG9uIHJlbW92ZXMgdGhhdCBzaW5nbGUgZW50cnkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicHJlYWN0L2NvbXBhdFwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJwcmVhY3QvaG9va3NcIjtcbmltcG9ydCB7IGNsZWFyRXJyb3IsIHR5cGUgRXJyb3JFbnRyeSwgZXJyb3JTdGF0ZSB9IGZyb20gXCIuLi9hY3Rpb25zL2Vycm9yLnRzXCI7XG5pbXBvcnQgeyBMYXlvdXQgfSBmcm9tIFwiLi9MYXlvdXQudHN4XCI7XG5pbXBvcnQgeyBnZXRPdmVybGF5Um9vdE5vZGUgfSBmcm9tIFwiLi9PdmVybGF5Um9vdC50c3hcIjtcbmltcG9ydCB7IFN1cmZhY2UgfSBmcm9tIFwiLi9TdXJmYWNlLnRzeFwiO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSBcIi4vVG9hc3QubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBUb2FzdFZpZXdwb3J0UHJvcHMgPSB7XG4gIGF1dG9EaXNtaXNzTXM/OiBudW1iZXI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFZpZXdwb3J0KHByb3BzOiBUb2FzdFZpZXdwb3J0UHJvcHMpOiBKU1guRWxlbWVudCB8IG51bGwge1xuICBjb25zdCBhdXRvRGlzbWlzc01zID0gcHJvcHMuYXV0b0Rpc21pc3NNcyA/PyA1MDAwO1xuICBjb25zdCBbcG9ydGFsTm9kZSwgc2V0UG9ydGFsTm9kZV0gPSB1c2VTdGF0ZTxIVE1MRWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbcGF1c2VkLCBzZXRQYXVzZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBlbnRyaWVzID0gZXJyb3JTdGF0ZS52YWx1ZTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFBvcnRhbE5vZGUoZ2V0T3ZlcmxheVJvb3ROb2RlKCkpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocGF1c2VkIHx8IGVudHJpZXMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgaGVhZCA9IGVudHJpZXNbMF07XG4gICAgaWYgKCFoZWFkKSByZXR1cm47XG4gICAgY29uc3QgdGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjbGVhckVycm9yKGhlYWQuaWQpO1xuICAgIH0sIGF1dG9EaXNtaXNzTXMpO1xuICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgfSwgW3BhdXNlZCwgZW50cmllcywgYXV0b0Rpc21pc3NNc10pO1xuXG4gIGlmICghcG9ydGFsTm9kZSkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgY29udGVudCA9IChcbiAgICA8TGF5b3V0XG4gICAgICBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIlxuICAgICAgY2xhc3NOYW1lPXtgJHtjbGFzc2VzW1widmlld3BvcnRcIl19ICR7cHJvcHMuY2xhc3NOYW1lID8/IFwiXCJ9YC50cmltKCl9XG4gICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICBkYXRhLXBvbGx5LXRvYXN0LXZpZXdwb3J0XG4gICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldFBhdXNlZCh0cnVlKX1cbiAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0UGF1c2VkKGZhbHNlKX1cbiAgICA+XG4gICAgICB7ZW50cmllcy5tYXAoKGVudHJ5KSA9PiAoXG4gICAgICAgIDxUb2FzdEl0ZW0ga2V5PXtlbnRyeS5pZH0gZW50cnk9e2VudHJ5fSAvPlxuICAgICAgKSl9XG4gICAgPC9MYXlvdXQ+XG4gICk7XG4gIHJldHVybiBjcmVhdGVQb3J0YWwoY29udGVudCwgcG9ydGFsTm9kZSk7XG59XG5cbmZ1bmN0aW9uIFRvYXN0SXRlbSh7IGVudHJ5IH06IHsgZW50cnk6IEVycm9yRW50cnkgfSk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgbGl2ZW5lc3MgPSBlbnRyeS5zZXZlcml0eSA9PT0gXCJlcnJvclwiID8gXCJhc3NlcnRpdmVcIiA6IFwicG9saXRlXCI7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIHZhcmlhbnQ9XCJyYWlzZWRcIlxuICAgICAgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKSB2YXIoLS1wb2xseS1zcGFjZS1sZylcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzW1wiaXRlbVwiXX1cbiAgICAgIGRhdGEtcG9sbHktdWlcbiAgICAgIGRhdGEtcG9sbHktdG9hc3QtaXRlbVxuICAgICAgZGF0YS1zZXZlcml0eT17ZW50cnkuc2V2ZXJpdHl9XG4gICAgICByb2xlPXtlbnRyeS5zZXZlcml0eSA9PT0gXCJlcnJvclwiID8gXCJhbGVydFwiIDogXCJzdGF0dXNcIn1cbiAgICAgIGFyaWEtbGl2ZT17bGl2ZW5lc3N9XG4gICAgPlxuICAgICAgPExheW91dCBjb2x1bW5zPVwiMWZyIGF1dG9cIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIiBhbGlnbkl0ZW1zPVwiY2VudGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPXtjbGFzc2VzW1wibWVzc2FnZVwiXX0+e2VudHJ5Lm1lc3NhZ2V9PC9zcGFuPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9e2NsYXNzZXNbXCJjbG9zZVwiXX1cbiAgICAgICAgICBkYXRhLXBvbGx5LXVpXG4gICAgICAgICAgZGF0YS1wb2xseS1pbnRlcmFjdGl2ZVxuICAgICAgICAgIGRhdGEtcG9sbHktdG9hc3QtY2xvc2VcbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBjbGVhckVycm9yKGVudHJ5LmlkKX1cbiAgICAgICAgICBhcmlhLWxhYmVsPVwiRGlzbWlzc1wiXG4gICAgICAgID5cbiAgICAgICAgICDDl1xuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IFRvYXN0ID0geyBWaWV3cG9ydCB9O1xuIiwKICAgICIvKipcbiAqIFRvZ2dsZSDigJQgc3dpdGNoLXJvbGUgY2hlY2tib3guXG4gKlxuICogQSB2aXN1YWxseS1oaWRkZW4gPGlucHV0IHJvbGU9XCJzd2l0Y2hcIj4gcGFpcmVkIHdpdGggYSBzdHlsZWQgdHJhY2tcbiAqIGFuZCB0aHVtYiBpbnNpZGUgYSA8bGFiZWw+LiBQYXNzaXZlOiB0aGUgY2FsbGVyIGRyaXZlcyBgY2hlY2tlZGAgYW5kXG4gKiBoYW5kbGVzIHN0YXRlIGNoYW5nZXMgdmlhIHRoZSBhY3Rpb24gcmVnaXN0cnkgKHdyYXAgdGhlIFRvZ2dsZSBpbiBhXG4gKiA8bGFiZWwgZGF0YS1hY3Rpb249XCIuLi5cIj4gb3IgYmluZCBhIHBhcmVudCBmb3JtJ3Mgc3VibWl0KS4gYTExeVxuICogYXR0cmlidXRlcyBjb21lIGZyb20gdGhlIG5hdGl2ZSBpbnB1dDsgdGhlIGxhYmVsIHdyYXBzIHNvIGNsaWNrc1xuICogYW55d2hlcmUgaW4gdGhlIGNvbnRyb2wgdG9nZ2xlIHRoZSBpbnB1dC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEpTWCB9IGZyb20gXCJwcmVhY3RcIjtcbmltcG9ydCB7IExheW91dCB9IGZyb20gXCIuL0xheW91dC50c3hcIjtcbmltcG9ydCBjbGFzc2VzIGZyb20gXCIuL1RvZ2dsZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIFRvZ2dsZVByb3BzID0ge1xuICBjaGVja2VkPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBsYWJlbD86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpZD86IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBUb2dnbGUocHJvcHM6IFRvZ2dsZVByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCB7IGNoZWNrZWQgPSBmYWxzZSwgZGlzYWJsZWQgPSBmYWxzZSwgbGFiZWwsIG5hbWUsIGNsYXNzTmFtZSwgaWQgfSA9IHByb3BzO1xuICBjb25zdCBwYXJ0cyA9IFtjbGFzc2VzW1widG9nZ2xlXCJdXTtcbiAgaWYgKGRpc2FibGVkKSBwYXJ0cy5wdXNoKGNsYXNzZXNbXCJkaXNhYmxlZFwiXSk7XG4gIGlmIChjbGFzc05hbWUpIHBhcnRzLnB1c2goY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcbiAgICA8TGF5b3V0XG4gICAgICBhcz1cImxhYmVsXCJcbiAgICAgIGlubGluZVxuICAgICAgY29sdW1ucz1cImF1dG8gYXV0b1wiXG4gICAgICBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIlxuICAgICAgYWxpZ25JdGVtcz1cImNlbnRlclwiXG4gICAgICBjbGFzc05hbWU9e3BhcnRzLmpvaW4oXCIgXCIpfVxuICAgICAgZGF0YS1wb2xseS11aVxuICAgICAgZGF0YS1wb2xseS10b2dnbGVcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgaWQ9e2lkfVxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICByb2xlPVwic3dpdGNoXCJcbiAgICAgICAgbmFtZT17bmFtZX1cbiAgICAgICAgYXJpYS1jaGVja2VkPXtjaGVja2VkfVxuICAgICAgICBjbGFzcz17Y2xhc3Nlc1tcImlucHV0XCJdfVxuICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9e2NoZWNrZWQgPyBgJHtjbGFzc2VzW1widHJhY2tcIl19ICR7Y2xhc3Nlc1tcInRyYWNrQ2hlY2tlZFwiXX1gIDogY2xhc3Nlc1tcInRyYWNrXCJdfT5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz17Y2hlY2tlZCA/IGAke2NsYXNzZXNbXCJ0aHVtYlwiXX0gJHtjbGFzc2VzW1widGh1bWJDaGVja2VkXCJdfWAgOiBjbGFzc2VzW1widGh1bWJcIl19XG4gICAgICAgIC8+XG4gICAgICA8L3NwYW4+XG4gICAgICB7bGFiZWwgIT09IHVuZGVmaW5lZCAmJiA8c3BhbiBjbGFzcz17Y2xhc3Nlc1tcImxhYmVsXCJdfT57bGFiZWx9PC9zcGFuPn1cbiAgICA8L0xheW91dD5cbiAgKTtcbn1cbiIsCiAgICAiLy8gU3RhdGUgcHJpbWl0aXZlcyB3aXRoIG9wdGlvbmFsIHN5bmMgYW5kIHBlcnNpc3RlbmNlXG5cbmltcG9ydCB7IGVmZmVjdCwgdHlwZSBTaWduYWwsIHNpZ25hbCB9IGZyb20gXCJAcHJlYWN0L3NpZ25hbHNcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZUJ1cyB9IGZyb20gXCIuL21lc3NhZ2UtYnVzXCI7XG5pbXBvcnQgeyBjcmVhdGVTdG9yYWdlQWRhcHRlciwgdHlwZSBTdG9yYWdlQWRhcHRlciB9IGZyb20gXCIuL3N0b3JhZ2UtYWRhcHRlclwiO1xuaW1wb3J0IHsgY3JlYXRlU3luY0FkYXB0ZXIsIHR5cGUgU3RhdGVTeW5jTWVzc2FnZSwgdHlwZSBTeW5jQWRhcHRlciB9IGZyb20gXCIuL3N5bmMtYWRhcHRlclwiO1xuXG4vKipcbiAqIFNpZ25hbCBleHRlbmRlZCB3aXRoIC5sb2FkZWQgcHJvbWlzZSBmb3IgaHlkcmF0aW9uIGNvbnRyb2xcbiAqL1xudHlwZSBTaWduYWxXaXRoTG9hZGVkPFQ+ID0gU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD4gfTtcblxuLyoqXG4gKiBTaWduYWwgZXh0ZW5kZWQgd2l0aCAubG9hZGVkIGFuZCAudmVyaWZ5IHByb3BlcnRpZXMgZm9yIHZlcmlmaWNhdGlvbiB0cmFja2luZ1xuICovXG50eXBlIFNpZ25hbFdpdGhWZXJpZnk8VD4gPSBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPjsgdmVyaWZ5OiBUIH07XG5cbnR5cGUgU3RhdGVFbnRyeTxUPiA9IHtcbiAgc2lnbmFsOiBTaWduYWw8VD47XG4gIGNsb2NrOiBudW1iZXI7IC8vIExhbXBvcnQgY2xvY2sgZm9yIGNhdXNhbCBvcmRlcmluZ1xuICBsb2FkZWQ6IFByb21pc2U8dm9pZD47XG4gIHVwZGF0aW5nOiBib29sZWFuO1xufTtcblxudHlwZSBTdGF0ZU9wdGlvbnM8VCA9IHVua25vd24+ID0ge1xuICAvLyBMZWdhY3kgTWVzc2FnZUJ1cyBzdXBwb3J0IChkZXByZWNhdGVkLCB3aWxsIGJlIHJlbW92ZWQgaW4gdjIuMClcbiAgYnVzPzogTWVzc2FnZUJ1cztcblxuICAvLyBOZXcgYWRhcHRlciBzeXN0ZW0gKHJlY29tbWVuZGVkKVxuICBzdG9yYWdlPzogU3RvcmFnZUFkYXB0ZXI7IC8vIEN1c3RvbSBzdG9yYWdlIGFkYXB0ZXJcbiAgc3luYz86IFN5bmNBZGFwdGVyOyAvLyBDdXN0b20gc3luYyBhZGFwdGVyXG5cbiAgLy8gQmVoYXZpb3Igb3B0aW9uc1xuICBkZWJvdW5jZU1zPzogbnVtYmVyOyAvLyBEZWJvdW5jZSBzdG9yYWdlIHdyaXRlc1xuICB2YWxpZGF0b3I/OiAodmFsdWU6IHVua25vd24pID0+IHZhbHVlIGlzIFQ7IC8vIFJ1bnRpbWUgdHlwZSB2YWxpZGF0aW9uXG4gIHZlcmlmeT86IGJvb2xlYW47IC8vIEVuYWJsZSB2ZXJpZmljYXRpb24gdHJhY2tpbmcgKGNyZWF0ZXMgcGxhaW4gb2JqZWN0IG1pcnJvcilcbn07XG5cbmNvbnN0IHN0YXRlUmVnaXN0cnkgPSBuZXcgTWFwPHN0cmluZywgU3RhdGVFbnRyeTx1bmtub3duPj4oKTtcblxuLyoqXG4gKiBTaGFyZWQgc3RhdGU6IHN5bmNlZCBhY3Jvc3MgYWxsIGNvbnRleHRzIEFORCBwZXJzaXN0ZWQgdG8gc3RvcmFnZVxuICpcbiAqIFVzZXMgTGFtcG9ydCBjbG9jayBmb3IgY29uZmxpY3QgcmVzb2x1dGlvbi4gU3RhdGUgaXMgYXV0b21hdGljYWxseTpcbiAqIC0gTG9hZGVkIGZyb20gY2hyb21lLnN0b3JhZ2Ugb24gaW5pdGlhbGl6YXRpb25cbiAqIC0gU3luY2VkIHRvIG90aGVyIGNvbnRleHRzIHZpYSBicm9hZGNhc3QgbWVzc2FnZXNcbiAqIC0gUGVyc2lzdGVkIHRvIGNocm9tZS5zdG9yYWdlIG9uIGV2ZXJ5IGNoYW5nZVxuICpcbiAqIEF2YWlsYWJsZSBpbjogYmFja2dyb3VuZCwgcG9wdXAsIG9wdGlvbnMsIGRldnRvb2xzLCBjb250ZW50IHNjcmlwdHNcbiAqIOKaoO+4jyBOT1QgYXZhaWxhYmxlIGluIHBhZ2Ugc2NyaXB0cyAodXNlIGNvbnRlbnQgc2NyaXB0IHN0YXRlIGluc3RlYWQpXG4gKlxuICogQHBhcmFtIGtleSAtIFVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGlzIHN0YXRlIChlLmcuLCBcImFwcC1zZXR0aW5nc1wiKVxuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIERlZmF1bHQgdmFsdWUgaWYgbm90aGluZyBpcyBpbiBzdG9yYWdlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gKGJ1cywgZGVib3VuY2VNcylcbiAqIEByZXR1cm5zIFJlYWN0aXZlIHNpZ25hbCB0aGF0IHN0YXlzIGluIHN5bmMgYWNyb3NzIGFsbCBjb250ZXh0c1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBEZWZpbmUgb25jZSwgdXNlIGV2ZXJ5d2hlcmVcbiAqIGNvbnN0IHNldHRpbmdzID0gJHNoYXJlZFN0YXRlKFwic2V0dGluZ3NcIiwgeyB0aGVtZTogXCJkYXJrXCIgfSlcbiAqXG4gKiAvLyBDaGFuZ2VzIGF1dG9tYXRpY2FsbHkgc3luY1xuICogc2V0dGluZ3MudmFsdWUgPSB7IHRoZW1lOiBcImxpZ2h0XCIgfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiAkc2hhcmVkU3RhdGU8VD4oXG4gIGtleTogc3RyaW5nLFxuICBpbml0aWFsVmFsdWU6IFQsXG4gIG9wdGlvbnM6IFN0YXRlT3B0aW9uczxUPiA9IHt9XG4pOiBTaWduYWw8VD4gJiB7IGxvYWRlZDogUHJvbWlzZTx2b2lkPjsgdmVyaWZ5PzogVCB9IHtcbiAgY29uc3Qgc2lnID0gY3JlYXRlU3RhdGUoa2V5LCBpbml0aWFsVmFsdWUsIHtcbiAgICAuLi5vcHRpb25zLFxuICAgIGVuYWJsZVN5bmM6IHRydWUsXG4gICAgZW5hYmxlUGVyc2lzdDogdHJ1ZSxcbiAgfSk7XG5cbiAgLy8gRXhwb3NlIGxvYWRlZCBwcm9taXNlIGZvciBhd2FpdGluZyBoeWRyYXRpb25cbiAgY29uc3QgZW50cnkgPSBzdGF0ZVJlZ2lzdHJ5LmdldChrZXkpO1xuICBpZiAoZW50cnkpIHtcbiAgICAoc2lnIGFzIHVua25vd24gYXMgU2lnbmFsV2l0aExvYWRlZDxUPikubG9hZGVkID0gZW50cnkubG9hZGVkO1xuICB9XG5cbiAgcmV0dXJuIHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbDxUPiAmIHsgbG9hZGVkOiBQcm9taXNlPHZvaWQ+IH07XG59XG5cbi8qKlxuICogU3luY2VkIHN0YXRlOiBzeW5jZWQgYWNyb3NzIGFsbCBjb250ZXh0cyBidXQgTk9UIHBlcnNpc3RlZFxuICpcbiAqIFN0YXRlIGlzIGJyb2FkY2FzdCB0byBhbGwgY29udGV4dHMgaW4gcmVhbC10aW1lIGJ1dCByZXNldHMgb24gZXh0ZW5zaW9uIHJlbG9hZC5cbiAqXG4gKiBBdmFpbGFibGUgaW46IGJhY2tncm91bmQsIHBvcHVwLCBvcHRpb25zLCBkZXZ0b29scywgY29udGVudCBzY3JpcHRzXG4gKiDimqDvuI8gTk9UIGF2YWlsYWJsZSBpbiBwYWdlIHNjcmlwdHNcbiAqXG4gKiBAcGFyYW0ga2V5IC0gVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgc3RhdGVcbiAqIEBwYXJhbSBpbml0aWFsVmFsdWUgLSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIFJlYWN0aXZlIHNpZ25hbCBzeW5jZWQgYWNyb3NzIGNvbnRleHRzIChidXQgbm90IHBlcnNpc3RlZClcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gVGVtcG9yYXJ5IHNoYXJlZCBzdGF0ZVxuICogY29uc3QgYWN0aXZlVGFiSWQgPSAkc3luY2VkU3RhdGUoXCJhY3RpdmUtdGFiXCIsIG51bGwpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uICRzeW5jZWRTdGF0ZTxUPihcbiAga2V5OiBzdHJpbmcsXG4gIGluaXRpYWxWYWx1ZTogVCxcbiAgb3B0aW9uczogU3RhdGVPcHRpb25zPFQ+ID0ge31cbik6IFNpZ25hbDxUPiB7XG4gIHJldHVybiBjcmVhdGVTdGF0ZShrZXksIGluaXRpYWxWYWx1ZSwge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgZW5hYmxlU3luYzogdHJ1ZSxcbiAgICBlbmFibGVQZXJzaXN0OiBmYWxzZSxcbiAgfSk7XG59XG5cbi8qKlxuICogUGVyc2lzdGVkIHN0YXRlOiBwZXJzaXN0ZWQgdG8gc3RvcmFnZSBidXQgTk9UIHN5bmNlZCBhY3Jvc3MgY29udGV4dHNcbiAqXG4gKiBFYWNoIGNvbnRleHQgaGFzIGl0cyBvd24gY29weSBvZiB0aGUgc3RhdGUsIHBlcnNpc3RlZCBpbmRlcGVuZGVudGx5LlxuICpcbiAqIEF2YWlsYWJsZSBpbjogYmFja2dyb3VuZCwgcG9wdXAsIG9wdGlvbnMsIGRldnRvb2xzLCBjb250ZW50IHNjcmlwdHNcbiAqIOKaoO+4jyBOT1QgYXZhaWxhYmxlIGluIHBhZ2Ugc2NyaXB0c1xuICpcbiAqIEBwYXJhbSBrZXkgLSBVbmlxdWUgaWRlbnRpZmllciAodXNlIHByZWZpeCBsaWtlIFwicG9wdXA6c3RhdGVcIiB0byBhdm9pZCBjb2xsaXNpb25zKVxuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgUmVhY3RpdmUgc2lnbmFsIHBlcnNpc3RlZCB0byBzdG9yYWdlIChidXQgbm90IHN5bmNlZClcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gRWFjaCBjb250ZXh0IGhhcyBpdHMgb3duIHBlcnNpc3RlZCBzdGF0ZVxuICogY29uc3QgcG9wdXBTdGF0ZSA9ICRwZXJzaXN0ZWRTdGF0ZShcInBvcHVwOmxhc3QtcGFuZWxcIiwgXCJob21lXCIpXG4gKiBjb25zdCBkZXZ0b29sc1N0YXRlID0gJHBlcnNpc3RlZFN0YXRlKFwiZGV2dG9vbHM6ZXhwYW5kZWRcIiwgdHJ1ZSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gJHBlcnNpc3RlZFN0YXRlPFQ+KFxuICBrZXk6IHN0cmluZyxcbiAgaW5pdGlhbFZhbHVlOiBULFxuICBvcHRpb25zOiBTdGF0ZU9wdGlvbnM8VD4gPSB7fVxuKTogU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD4gfSB7XG4gIGNvbnN0IHNpZyA9IGNyZWF0ZVN0YXRlKGtleSwgaW5pdGlhbFZhbHVlLCB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICBlbmFibGVTeW5jOiBmYWxzZSxcbiAgICBlbmFibGVQZXJzaXN0OiB0cnVlLFxuICB9KTtcblxuICAvLyBFeHBvc2UgbG9hZGVkIHByb21pc2UgZm9yIGF3YWl0aW5nIGh5ZHJhdGlvblxuICBjb25zdCBlbnRyeSA9IHN0YXRlUmVnaXN0cnkuZ2V0KGtleSk7XG4gIGlmIChlbnRyeSkge1xuICAgIChzaWcgYXMgdW5rbm93biBhcyBTaWduYWxXaXRoTG9hZGVkPFQ+KS5sb2FkZWQgPSBlbnRyeS5sb2FkZWQ7XG4gIH1cblxuICByZXR1cm4gc2lnIGFzIHVua25vd24gYXMgU2lnbmFsPFQ+ICYgeyBsb2FkZWQ6IFByb21pc2U8dm9pZD4gfTtcbn1cblxuLyoqXG4gKiBMb2NhbCBzdGF0ZTogbm90IHN5bmNlZCwgbm90IHBlcnNpc3RlZCAobGlrZSByZWd1bGFyIFByZWFjdCBzaWduYWwpXG4gKlxuICogU2ltcGxlIHJlYWN0aXZlIHN0YXRlIHRoYXQgbGl2ZXMgb25seSBpbiB0aGUgY3VycmVudCBjb250ZXh0LlxuICogUmVzZXRzIG9uIHJlbG9hZCBvciBjb250ZXh0IHJlc3RhcnQuXG4gKlxuICogQXZhaWxhYmxlIGluOiBhbGwgY29udGV4dHMgKGluY2x1ZGluZyBwYWdlIHNjcmlwdHMpXG4gKlxuICogQHBhcmFtIGluaXRpYWxWYWx1ZSAtIERlZmF1bHQgdmFsdWVcbiAqIEByZXR1cm5zIFJlYWN0aXZlIHNpZ25hbCAobG9jYWwgb25seSlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gTG9jYWwgVUkgc3RhdGVcbiAqIGNvbnN0IGlzTG9hZGluZyA9ICRzdGF0ZShmYWxzZSlcbiAqIGNvbnN0IGVycm9yID0gJHN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uICRzdGF0ZTxUPihpbml0aWFsVmFsdWU6IFQpOiBTaWduYWw8VD4ge1xuICByZXR1cm4gc2lnbmFsKGluaXRpYWxWYWx1ZSk7XG59XG5cbi8qKiBTZXJ2ZXItc2lkZSBhdXRob3JpdGF0aXZlIHN0YXRlLCBrZXllZCBmb3Igc3RhYmxlIGlkZW50aXR5IGFjcm9zcyB0aGVcbiAqICBwcm9jZXNzLiBVbmxpa2UgdGhlIGJyb3dzZXIgcHJpbWl0aXZlcyBpdCBkb2VzIE5PVCBzeW5jIGFjcm9zcyBjb250ZXh0cyBvclxuICogIHBlcnNpc3QgdG8gY2hyb21lLnN0b3JhZ2Ug4oCUIHRoZSBzZXJ2ZXIgaG9sZHMgdGhlIGNhbm9uaWNhbCByZXBsaWNhIGFuZCBpc1xuICogIHRoZSBhbHdheXMtb24gcGVlcjsgY29ubmVjdGVkIGNsaWVudHMgcmVjZWl2ZSBkZXJpdmVkIHVwZGF0ZXMgdGhyb3VnaCB0aGVcbiAqICBFbHlzaWEgYHBvbGx5KClgIHBsdWdpbidzIGVmZmVjdC9icm9hZGNhc3QgbGF5ZXIgcmF0aGVyIHRoYW4gdGhyb3VnaCB0aGlzXG4gKiAgc2lnbmFsIGRpcmVjdGx5LiBVc2VkIGluc2lkZSBgcG9sbHkoeyBzdGF0ZTogeyBzZXJ2ZXI6IHsgLi4uIH0gfSB9KWAgYW5kXG4gKiAgcmVhZCBvbiB0aGUgcmVxdWVzdCBjb250ZXh0IGFzIGBwb2xseVN0YXRlLnNlcnZlci48a2V5Pi52YWx1ZWAuICovXG5jb25zdCBzZXJ2ZXJTdGF0ZVJlZ2lzdHJ5ID0gbmV3IE1hcDxzdHJpbmcsIFNpZ25hbDx1bmtub3duPj4oKTtcblxuLyoqXG4gKiBSZWFjdGl2ZSBzZXJ2ZXItb25seSBzdGF0ZS4gVGhlIGZpcnN0IGNhbGwgZm9yIGEgYGtleWAgY3JlYXRlcyB0aGUgc2lnbmFsO1xuICogbGF0ZXIgY2FsbHMgd2l0aCB0aGUgc2FtZSBga2V5YCByZXR1cm4gdGhhdCBzYW1lIHNpZ25hbCwgc28gYSBtb2R1bGUgdGhhdFxuICogZGVjbGFyZXMgaXRzIHNlcnZlciBzdGF0ZSBvbmNlIGdldHMgYSBzdGFibGUgcmVmZXJlbmNlIGV2ZXJ5d2hlcmUgaXQgaXNcbiAqIHJlYWQuXG4gKlxuICogQHBhcmFtIGtleSAtIFN0YWJsZSBpZGVudGlmaWVyIGZvciB0aGlzIHNlcnZlciBzdGF0ZSAoZS5nLiBcImRiXCIpXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIC0gVmFsdWUgaGVsZCB1bnRpbCB0aGUgc2VydmVyIG11dGF0ZXMgaXRcbiAqIEByZXR1cm5zIEEgcmVhY3RpdmUgc2lnbmFsIGhvbGRpbmcgdGhlIGF1dGhvcml0YXRpdmUgc2VydmVyIHZhbHVlXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7ICRzZXJ2ZXJTdGF0ZSB9IGZyb20gXCJAZmFpcmZveC9wb2xseVwiO1xuICpcbiAqIGNvbnN0IGRiID0geyB0b2Rvczogc2lnbmFsKFtdKSwgbmV4dElkOiAxIH07XG4gKiBwb2xseSh7IHN0YXRlOiB7IHNlcnZlcjogeyBkYjogJHNlcnZlclN0YXRlKFwiZGJcIiwgZGIpIH0gfSB9KTtcbiAqIC8vIGluIGEgaGFuZGxlcjogY3R4LnBvbGx5U3RhdGUuc2VydmVyLmRiLnZhbHVlLnRvZG9zLnZhbHVlID0gWy4uLl1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gJHNlcnZlclN0YXRlPFQ+KGtleTogc3RyaW5nLCBpbml0aWFsVmFsdWU6IFQpOiBTaWduYWw8VD4ge1xuICBjb25zdCBleGlzdGluZyA9IHNlcnZlclN0YXRlUmVnaXN0cnkuZ2V0KGtleSk7XG4gIC8vIFRoZSByZWdpc3RyeSBlcmFzZXMgVCAoaXQgc3RvcmVzIFNpZ25hbDx1bmtub3duPik7IHRoZSBrZXkgaXMgdGhlXG4gIC8vIGNhbGxlcidzIGNvbnRyYWN0IHRoYXQgdGhlIHN0b3JlZCBzaWduYWwgY2FycmllcyB0aGVpciBULlxuICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZyBhcyB1bmtub3duIGFzIFNpZ25hbDxUPjtcbiAgY29uc3Qgc2lnID0gc2lnbmFsKGluaXRpYWxWYWx1ZSk7XG4gIHNlcnZlclN0YXRlUmVnaXN0cnkuc2V0KGtleSwgc2lnIGFzIHVua25vd24gYXMgU2lnbmFsPHVua25vd24+KTtcbiAgcmV0dXJuIHNpZztcbn1cblxudHlwZSBJbnRlcm5hbFN0YXRlT3B0aW9uczxUID0gdW5rbm93bj4gPSBTdGF0ZU9wdGlvbnM8VD4gJiB7XG4gIGVuYWJsZVN5bmM6IGJvb2xlYW47IC8vIFdoZXRoZXIgdG8gZW5hYmxlIHN5bmMgKGF2b2lkIGNvbGxpc2lvbiB3aXRoIHN5bmM/OiBTeW5jQWRhcHRlcilcbiAgZW5hYmxlUGVyc2lzdDogYm9vbGVhbjsgLy8gV2hldGhlciB0byBlbmFibGUgcGVyc2lzdGVuY2Vcbn07XG5cbi8vIERlZXAgZXF1YWxpdHkgY2hlY2sgdG8gcHJldmVudCByZWR1bmRhbnQgdXBkYXRlc1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBFcXVhbChhOiB1bmtub3duLCBiOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBhICE9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBiICE9PSBcIm9iamVjdFwiKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3Qga2V5c0EgPSBPYmplY3Qua2V5cyhhKTtcbiAgY29uc3Qga2V5c0IgPSBPYmplY3Qua2V5cyhiKTtcblxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzQSkge1xuICAgIGlmICgha2V5c0IuaW5jbHVkZXMoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChcbiAgICAgICFkZWVwRXF1YWwoXG4gICAgICAgIChhIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0sXG4gICAgICAgIChiIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV1cbiAgICAgIClcbiAgICApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHN0b3JhZ2UgYW5kIHN5bmMgYWRhcHRlcnMgd2l0aCB0aHJlZS10aWVyIHByaW9yaXR5OlxuICogMS4gRXhwbGljaXQgYWRhcHRlcnMgZnJvbSBvcHRpb25zIChoaWdoZXN0IHByaW9yaXR5KVxuICogMi4gTWVzc2FnZUJ1cyBhZGFwdGVycyAobGVnYWN5LCBkZXByZWNhdGVkKVxuICogMy4gQXV0by1kZXRlY3RlZCBhZGFwdGVycyAoZGVmYXVsdCBiZWhhdmlvcilcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUFkYXB0ZXJzKG9wdGlvbnM6IEludGVybmFsU3RhdGVPcHRpb25zKToge1xuICBzdG9yYWdlOiBTdG9yYWdlQWRhcHRlciB8IG51bGw7XG4gIHN5bmM6IFN5bmNBZGFwdGVyIHwgbnVsbDtcbn0ge1xuICAvLyBQcmlvcml0eSAxOiBFeHBsaWNpdCBhZGFwdGVycyAocGFydGlhbCBvciBmdWxsKVxuICBpZiAob3B0aW9ucy5zdG9yYWdlIHx8IG9wdGlvbnMuc3luYykge1xuICAgIHJldHVybiB7XG4gICAgICBzdG9yYWdlOiBvcHRpb25zLnN0b3JhZ2UgfHwgKG9wdGlvbnMuZW5hYmxlUGVyc2lzdCA/IGNyZWF0ZVN0b3JhZ2VBZGFwdGVyKCkgOiBudWxsKSxcbiAgICAgIHN5bmM6IG9wdGlvbnMuc3luYyB8fCAob3B0aW9ucy5lbmFibGVTeW5jID8gY3JlYXRlU3luY0FkYXB0ZXIoKSA6IG51bGwpLFxuICAgIH07XG4gIH1cblxuICAvLyBQcmlvcml0eSAyOiBNZXNzYWdlQnVzIChsZWdhY3kgc3VwcG9ydClcbiAgLy8gTWVzc2FnZUJ1cyBkb2Vzbid0IHByb3ZpZGUgc3luYyBhZGFwdGVyLCBvbmx5IENocm9tZSBzdG9yYWdlXG4gIGlmIChvcHRpb25zLmJ1cykge1xuICAgIHJldHVybiB7XG4gICAgICBzdG9yYWdlOiBvcHRpb25zLmJ1cy5hZGFwdGVycy5zdG9yYWdlLFxuICAgICAgc3luYzogb3B0aW9ucy5lbmFibGVTeW5jID8gY3JlYXRlU3luY0FkYXB0ZXIoKSA6IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFByaW9yaXR5IDM6IEF1dG8tZGV0ZWN0IGJhc2VkIG9uIGVuYWJsZVN5bmMgYW5kIGVuYWJsZVBlcnNpc3QgZmxhZ3NcbiAgcmV0dXJuIHtcbiAgICBzdG9yYWdlOiBvcHRpb25zLmVuYWJsZVBlcnNpc3QgPyBjcmVhdGVTdG9yYWdlQWRhcHRlcigpIDogbnVsbCxcbiAgICBzeW5jOiBvcHRpb25zLmVuYWJsZVN5bmMgPyBjcmVhdGVTeW5jQWRhcHRlcigpIDogbnVsbCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RhdGU8VD4oa2V5OiBzdHJpbmcsIGluaXRpYWxWYWx1ZTogVCwgb3B0aW9uczogSW50ZXJuYWxTdGF0ZU9wdGlvbnM8VD4pOiBTaWduYWw8VD4ge1xuICAvLyBSZXR1cm4gZXhpc3Rpbmcgc2lnbmFsIGlmIGFscmVhZHkgcmVnaXN0ZXJlZFxuICBpZiAoc3RhdGVSZWdpc3RyeS5oYXMoa2V5KSkge1xuICAgIHJldHVybiBzdGF0ZVJlZ2lzdHJ5LmdldChrZXkpPy5zaWduYWwgYXMgdW5rbm93biBhcyBTaWduYWw8VD47XG4gIH1cblxuICBjb25zdCBzaWcgPSBzaWduYWwoaW5pdGlhbFZhbHVlKTtcblxuICAvLyBDcmVhdGUgdmVyaWZpY2F0aW9uIG1pcnJvciBpZiByZXF1ZXN0ZWRcbiAgaWYgKG9wdGlvbnMudmVyaWZ5KSB7XG4gICAgLy8gQ3JlYXRlIHBsYWluIG9iamVjdCBtaXJyb3IgZm9yIHZlcmlmaWNhdGlvblxuICAgIGNvbnN0IG1pcnJvciA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaW5pdGlhbFZhbHVlKSkgYXMgdW5rbm93biBhcyBUO1xuICAgIChzaWcgYXMgdW5rbm93biBhcyBTaWduYWxXaXRoVmVyaWZ5PFQ+KS52ZXJpZnkgPSBtaXJyb3I7XG4gIH1cblxuICBjb25zdCBlbnRyeTogU3RhdGVFbnRyeTxUPiA9IHtcbiAgICBzaWduYWw6IHNpZyxcbiAgICBjbG9jazogMCxcbiAgICBsb2FkZWQ6IFByb21pc2UucmVzb2x2ZSgpLFxuICAgIHVwZGF0aW5nOiBmYWxzZSxcbiAgfTtcblxuICAvLyBSZXNvbHZlIGFkYXB0ZXJzIChleHBsaWNpdCwgTWVzc2FnZUJ1cywgb3IgYXV0by1kZXRlY3QpXG4gIGNvbnN0IGFkYXB0ZXJzID0gcmVzb2x2ZUFkYXB0ZXJzKG9wdGlvbnMpO1xuXG4gIC8vIExvYWQgZnJvbSBzdG9yYWdlIGlmIHBlcnNpc3QgaXMgZW5hYmxlZFxuICBpZiAob3B0aW9ucy5lbmFibGVQZXJzaXN0ICYmIGFkYXB0ZXJzLnN0b3JhZ2UpIHtcbiAgICBlbnRyeS5sb2FkZWQgPSBsb2FkRnJvbVN0b3JhZ2Uoa2V5LCBzaWcsIGVudHJ5LCBhZGFwdGVycy5zdG9yYWdlLCBvcHRpb25zLnZhbGlkYXRvcik7XG4gIH1cblxuICAvLyBwb2xseSMxNjc6IHRoZSBwZW5kaW5nIGRlYm91bmNlIHRpbWVyIGxpdmVzIGluIGNyZWF0ZVN0YXRlIHNjb3BlLCBub3RcbiAgLy8gaW5zaWRlIHRoZSBgbG9hZGVkYCBjYWxsYmFjaywgYmVjYXVzZSB0aGUgaW5jb21pbmctbWVzc2FnZSBoYW5kbGVyIGJlbG93XG4gIC8vIGhhcyB0byBiZSBhYmxlIHRvIGNhbmNlbCBhIHdyaXRlIHRoZSBtZXNzYWdlIHN1cGVyc2VkZXMuXG4gIGxldCBkZWJvdW5jZVRpbWVyOiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFdhdGNoIGZvciBjaGFuZ2VzIGFmdGVyIGluaXRpYWwgbG9hZFxuICBlbnRyeS5sb2FkZWQudGhlbigoKSA9PiB7XG4gICAgbGV0IHByZXZpb3VzVmFsdWUgPSBzaWcudmFsdWU7XG4gICAgbGV0IGlzRmlyc3RSdW4gPSB0cnVlO1xuXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvY29tcGxleGl0eS9ub0V4Y2Vzc2l2ZUNvZ25pdGl2ZUNvbXBsZXhpdHk6IFN5bmMgZWZmZWN0IHJlcXVpcmVzIGNvb3JkaW5hdGlvbiBvZiBtdWx0aXBsZSBzdGF0ZSBjaGFuZ2Ugc2NlbmFyaW9zXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIC8vIFJlYWQgdGhlIHNpZ25hbCBGSVJTVCwgYmVmb3JlIGFueSBlYXJseSByZXR1cm4gY2FuIGhhcHBlbi5cbiAgICAgIC8vXG4gICAgICAvLyBQcmVhY3QgcmUtY29sbGVjdHMgYW4gZWZmZWN0J3MgZGVwZW5kZW5jaWVzIG9uIGV2ZXJ5IHJ1biwgc28gYSBydW4gdGhhdFxuICAgICAgLy8gcmV0dXJucyB3aXRob3V0IHRvdWNoaW5nIGBzaWcudmFsdWVgIHVuc3Vic2NyaWJlcyB0aGUgZWZmZWN0IGZvciBnb29kLlxuICAgICAgLy8gVGhlIHJ1biBhbiBpbmNvbWluZyBzeW5jIG1lc3NhZ2UgdHJpZ2dlcnMgaXMgZXhhY3RseSBzdWNoIGEgcnVuLlxuICAgICAgY29uc3QgdmFsdWUgPSBzaWcudmFsdWU7XG5cbiAgICAgIC8vIFNraXAgZmlyc3QgcnVuIChlZmZlY3QgZmlyZXMgaW1tZWRpYXRlbHkgb24gcmVnaXN0cmF0aW9uKVxuICAgICAgaWYgKGlzRmlyc3RSdW4pIHtcbiAgICAgICAgaXNGaXJzdFJ1biA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEFuIGluY29taW5nIG1lc3NhZ2UgaXMgYmVpbmcgYXBwbGllZC4gQWRvcHQgaXQgYXMgdGhlIGJhc2VsaW5lIOKAlCB0aGlzXG4gICAgICAvLyBjb250ZXh0IG5vdyBob2xkcyBpdCwgc28gdGhlIG5leHQgbG9jYWwgY2hhbmdlIGlzIGEgY2hhbmdlIGFnYWluc3QgaXQg4oCUXG4gICAgICAvLyBhbmQgZG8gbm90IGJyb2FkY2FzdCwgd2hpY2ggd291bGQgZWNobyBpdCBiYWNrIHRvIHRoZSBzZW5kZXIuXG4gICAgICBpZiAoZW50cnkudXBkYXRpbmcpIHtcbiAgICAgICAgcHJldmlvdXNWYWx1ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNraXAgaWYgdmFsdWUgaGFzbid0IGNoYW5nZWQgKGRlZXAgZXF1YWxpdHkgY2hlY2spXG4gICAgICBpZiAoZGVlcEVxdWFsKHZhbHVlLCBwcmV2aW91c1ZhbHVlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzVmFsdWUgPSB2YWx1ZTtcblxuICAgICAgLy8gVXBkYXRlIHZlcmlmaWNhdGlvbiBtaXJyb3IgaWYgZW5hYmxlZFxuICAgICAgaWYgKG9wdGlvbnMudmVyaWZ5KSB7XG4gICAgICAgIGNvbnN0IHZlcmlmeVNpZ25hbCA9IHNpZyBhcyB1bmtub3duIGFzIFNpZ25hbFdpdGhWZXJpZnk8VD47XG4gICAgICAgIGlmICh2ZXJpZnlTaWduYWwudmVyaWZ5KSB7XG4gICAgICAgICAgLy8gbm9zZW1ncmVwOiBqYXZhc2NyaXB0Lmxhbmcuc2VjdXJpdHkuaW5zZWN1cmUtb2JqZWN0LWFzc2lnbi5pbnNlY3VyZS1vYmplY3QtYXNzaWduIOKAlCBpbnRlcm5hbCBtaXJyb3I7IHZhbHVlIGlzIGEgZGVlcCBKU09OIGNsb25lLCBub3QgYXJiaXRyYXJ5IGV4dGVybmFsIGlucHV0LlxuICAgICAgICAgIE9iamVjdC5hc3NpZ24odmVyaWZ5U2lnbmFsLnZlcmlmeSwgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJbmNyZW1lbnQgY2xvY2sgbW9ub3RvbmljYWxseVxuICAgICAgZW50cnkuY2xvY2srKztcblxuICAgICAgLy8gcG9sbHkjMTY3OiBiaW5kIHRoZSBjbG9jayB0byB0aGUgdmFsdWUgSEVSRSwgd2hlcmUgdGhlIHR3byBhZ3JlZS5cbiAgICAgIC8vXG4gICAgICAvLyBgZG9VcGRhdGVgIHVzZWQgdG8gcmVhZCBgZW50cnkuY2xvY2tgIHdoZW4gaXQgZmlyZWQuIFVuZGVyXG4gICAgICAvLyBgZGVib3VuY2VNc2AgdGhhdCBpcyBhIGxhdGVyIG1vbWVudCwgYW5kIHRoZSBpbmNvbWluZy1tZXNzYWdlIGhhbmRsZXJcbiAgICAgIC8vIGJlbG93IHJhaXNlcyBgZW50cnkuY2xvY2tgIHRvIGFueSBtZXNzYWdlJ3MgY2xvY2sg4oCUIGluY2x1ZGluZyBhXG4gICAgICAvLyBtZXNzYWdlIHdob3NlIHZhbHVlIGl0IHJlamVjdHMuIFNvIHRoZSBkZWZlcnJlZCB3cml0ZSBwYWlyZWQgdGhpc1xuICAgICAgLy8gdmFsdWUgd2l0aCBzb21lYm9keSBlbHNlJ3MgY2xvY2ssIHBlcnNpc3RlZCB0aGUgcGFpciwgYW5kIGJyb2FkY2FzdFxuICAgICAgLy8gaXQuIFRoZSBwZXJzaXN0ZWQgY2xvY2sgaXMgcmVzdG9yZWQgb24gdGhlIG5leHQgbG9hZCwgc28gYSBwZWVyXG4gICAgICAvLyByZS1zZW5kaW5nIHRoZSByZWFsIHZhbHVlIGF0IHRoYXQgY2xvY2sgd2FzIHRoZW4gcmVmdXNlZCBieSB0aGVcbiAgICAgIC8vIHN0cmljdGx5LWdyZWF0ZXIgcnVsZSBhbmQgdGhlIGRpdmVyZ2VuY2UgYmVjYW1lIGR1cmFibGUuXG4gICAgICBjb25zdCBjbG9ja0F0V3JpdGUgPSBlbnRyeS5jbG9jaztcblxuICAgICAgY29uc3QgZG9VcGRhdGUgPSAoKSA9PiB7XG4gICAgICAgIGRlYm91bmNlVGltZXIgPSBudWxsO1xuXG4gICAgICAgIC8vIFBlcnNpc3QgdG8gc3RvcmFnZVxuICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVQZXJzaXN0ICYmIGFkYXB0ZXJzLnN0b3JhZ2UpIHtcbiAgICAgICAgICBwZXJzaXN0VG9TdG9yYWdlKGtleSwgdmFsdWUsIGNsb2NrQXRXcml0ZSwgYWRhcHRlcnMuc3RvcmFnZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCcm9hZGNhc3QgdG8gb3RoZXIgY29udGV4dHNcbiAgICAgICAgaWYgKG9wdGlvbnMuZW5hYmxlU3luYyAmJiBhZGFwdGVycy5zeW5jKSB7XG4gICAgICAgICAgYnJvYWRjYXN0VXBkYXRlKGtleSwgdmFsdWUsIGNsb2NrQXRXcml0ZSwgYWRhcHRlcnMuc3luYyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIC8vIERlYm91bmNlIGlmIHNwZWNpZmllZFxuICAgICAgaWYgKG9wdGlvbnMuZGVib3VuY2VNcykge1xuICAgICAgICBpZiAoZGVib3VuY2VUaW1lcikgY2xlYXJUaW1lb3V0KGRlYm91bmNlVGltZXIpO1xuICAgICAgICBkZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dChkb1VwZGF0ZSwgb3B0aW9ucy5kZWJvdW5jZU1zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIExpc3RlbiBmb3IgdXBkYXRlcyBmcm9tIG90aGVyIGNvbnRleHRzIChvbmx5IGlmIHN5bmMgZW5hYmxlZClcbiAgaWYgKG9wdGlvbnMuZW5hYmxlU3luYyAmJiBhZGFwdGVycy5zeW5jKSB7XG4gICAgLy8gQ29ubmVjdCBpZiBuZWVkZWQgKHNvbWUgYWRhcHRlcnMgcmVxdWlyZSBleHBsaWNpdCBjb25uZWN0aW9uKVxuICAgIGlmIChhZGFwdGVycy5zeW5jLmNvbm5lY3QpIHtcbiAgICAgIGFkYXB0ZXJzLnN5bmMuY29ubmVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRha2UgYW4gaW5jb21pbmcgdmFsdWUgdGhpcyBjb250ZXh0IGhhcyBkZWNpZGVkIHRvIGFjY2VwdC5cbiAgICAgKlxuICAgICAqIHBvbGx5IzE2NyBwdXQgdHdvIHN0ZXBzIGluIGZyb250IG9mIHRoZSBhcHBseS4gQm90aCBhcmUgYWJvdXQgYSBwZW5kaW5nXG4gICAgICogZGVib3VuY2UgdGltZXIgdGhhdCB0aGUgbWVzc2FnZSBoYXMganVzdCBtYWRlIHdyb25nLlxuICAgICAqL1xuICAgIGNvbnN0IGFjY2VwdEluY29taW5nID0gKHZhbHVlOiBULCBjbG9jazogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAvLyBUaGUgbG9jYWwgdmFsdWUgaXMgY2F1c2FsbHkgb2xkZXIgdGhhbiB0aGlzIG9uZSwgc28gdGhlIGRlZmVycmVkIHdyaXRlXG4gICAgICAvLyBoYXMgbm90aGluZyBsZWZ0IHRvIHNheS4gRHJvcHBpbmcgaXQgc3RvcHMgYSBzdGFsZSBicm9hZGNhc3QgdGhhdCBhXG4gICAgICAvLyB0aGlyZCBjb250ZXh0IHN0aWxsIGJlbG93IHRoaXMgY2xvY2sgd291bGQgYWNjZXB0LlxuICAgICAgLy9cbiAgICAgIC8vIFJlYWNoZWQgb25seSBmb3IgYSB2YWx1ZSB0aGlzIGNvbnRleHQgZG9lcyBub3QgYWxyZWFkeSBob2xkOiB0aGVcbiAgICAgIC8vIGRlZXAtZXF1YWxpdHkgc2tpcCBiZWxvdyByZXR1cm5zIGZpcnN0LCB3aGljaCBsZWF2ZXMgYSBwZW5kaW5nIHRpbWVyXG4gICAgICAvLyBob2xkaW5nIHRoYXQgc2FtZSB2YWx1ZSBhcm1lZCwgYXMgaXQgc2hvdWxkIGJlLlxuICAgICAgaWYgKGRlYm91bmNlVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGRlYm91bmNlVGltZXIpO1xuICAgICAgICBkZWJvdW5jZVRpbWVyID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgYXBwbHlVcGRhdGUoZW50cnksIHZhbHVlLCBjbG9jayk7XG5cbiAgICAgIC8vIGBhcHBseVVwZGF0ZWAgc2V0cyBgZW50cnkudXBkYXRpbmdgLCBzbyB0aGUgbG9jYWwgZWZmZWN0IHJldHVybnNcbiAgICAgIC8vIHdpdGhvdXQgd3JpdGluZy4gUGVyc2lzdCB0aGUgaW5jb21pbmcgcGFpciBoZXJlLCBvciBzdG9yYWdlIGtlZXBzXG4gICAgICAvLyB3aGF0ZXZlciBpdCBsYXN0IGhlbGQgd2hpbGUgdGhlIHNpZ25hbCBob2xkcyB0aGlzIHZhbHVlIOKAlCBhbmQgb24gdGhlXG4gICAgICAvLyBuZXh0IGxvYWQgdGhlIHR3byBkaXNhZ3JlZS5cbiAgICAgIGlmIChvcHRpb25zLmVuYWJsZVBlcnNpc3QgJiYgYWRhcHRlcnMuc3RvcmFnZSkge1xuICAgICAgICBwZXJzaXN0VG9TdG9yYWdlKGtleSwgdmFsdWUsIGNsb2NrLCBhZGFwdGVycy5zdG9yYWdlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqIFdoZXRoZXIgYW4gaW5jb21pbmcgdmFsdWUgaXMgb25lIHRoaXMgY29udGV4dCBzaG91bGQgdGFrZS4gKi9cbiAgICBjb25zdCBzaG91bGRBY2NlcHQgPSAobWVzc2FnZTogU3RhdGVTeW5jTWVzc2FnZTxUPik6IGJvb2xlYW4gPT4ge1xuICAgICAgLy8gVmFsaWRhdGUgaW5jb21pbmcgdmFsdWUgaWYgdmFsaWRhdG9yIHByb3ZpZGVkXG4gICAgICBpZiAob3B0aW9ucy52YWxpZGF0b3IgJiYgIW9wdGlvbnMudmFsaWRhdG9yKG1lc3NhZ2UudmFsdWUpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW1BvbGx5XSBTdGF0ZSBcIiR7a2V5fVwiOiBSZWNlaXZlZCBpbnZhbGlkIHZhbHVlIGZyb20gc3luYyAoY2xvY2s6ICR7bWVzc2FnZS5jbG9ja30pYCxcbiAgICAgICAgICBtZXNzYWdlLnZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gU2tpcCByZWR1bmRhbnQgdXBkYXRlcyAoZGVlcCBlcXVhbGl0eSBjaGVjaylcbiAgICAgIHJldHVybiAhZGVlcEVxdWFsKGVudHJ5LnNpZ25hbC52YWx1ZSwgbWVzc2FnZS52YWx1ZSk7XG4gICAgfTtcblxuICAgIC8vIFJlZ2lzdGVyIHN5bmMgbWVzc2FnZSBsaXN0ZW5lclxuICAgIGFkYXB0ZXJzLnN5bmMub25NZXNzYWdlPFQ+KChtZXNzYWdlKSA9PiB7XG4gICAgICBpZiAobWVzc2FnZS5rZXkgIT09IGtleSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBvbGRDbG9jayA9IGVudHJ5LmNsb2NrO1xuXG4gICAgICAvLyBMYW1wb3J0IGNsb2NrIHJ1bGU6IEFsd2F5cyB1cGRhdGUgdG8gbWF4KGxvY2FsLCByZWNlaXZlZClcbiAgICAgIC8vIFRoaXMgbWFpbnRhaW5zIGNhdXNhbCBvcmRlcmluZyBldmVuIHdoZW4gcmVqZWN0aW5nIHVwZGF0ZXNcbiAgICAgIGVudHJ5LmNsb2NrID0gTWF0aC5tYXgoZW50cnkuY2xvY2ssIG1lc3NhZ2UuY2xvY2spO1xuXG4gICAgICAvLyBPbmx5IGFjY2VwdCB2YWx1ZSB1cGRhdGVzIGlmIHJlY2VpdmVkIGNsb2NrIGlzIHN0cmljdGx5IGdyZWF0ZXIgdGhhbiBvbGQgbG9jYWwgY2xvY2tcbiAgICAgIC8vIFRoaXMgZW5zdXJlcyB3ZSBvbmx5IGFwcGx5IGNhdXNhbGx5IG5ld2VyIHVwZGF0ZXNcbiAgICAgIGlmIChtZXNzYWdlLmNsb2NrID4gb2xkQ2xvY2sgJiYgc2hvdWxkQWNjZXB0KG1lc3NhZ2UpKSB7XG4gICAgICAgIGFjY2VwdEluY29taW5nKG1lc3NhZ2UudmFsdWUgYXMgdW5rbm93biBhcyBULCBtZXNzYWdlLmNsb2NrKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRlUmVnaXN0cnkuc2V0KGtleSwgZW50cnkgYXMgdW5rbm93biBhcyBTdGF0ZUVudHJ5PHVua25vd24+KTtcbiAgcmV0dXJuIHNpZztcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbi8qKlxuICogQmFja2ZpbGwga2V5cyBhZGRlZCB0byB0aGUgc3RhdGUgc2hhcGUgc2luY2UgYSB2YWx1ZSB3YXMgcGVyc2lzdGVkLlxuICpcbiAqIFN0b3JlZCBwbGFpbiBvYmplY3RzIGFyZSBzaGFsbG93LW1lcmdlZCBvdmVyIHRoZSBjdXJyZW50IGRlZmF1bHRzIHNvIHRoYXQgYVxuICogZmllbGQgYWRkZWQgaW4gYSBsYXRlciByZWxlYXNlIHJlaHlkcmF0ZXMgdG8gaXRzIGRlZmF1bHQgcmF0aGVyIHRoYW5cbiAqIGB1bmRlZmluZWRgLiBQcmltaXRpdmVzIGFuZCBhcnJheXMgYXJlIHJlcGxhY2VkIHdob2xlc2FsZSDigJQgbWVyZ2luZyB0aG9zZVxuICogd291bGQgY29ycnVwdCB0aGVtLlxuICovXG5mdW5jdGlvbiByZWNvbmNpbGVXaXRoRGVmYXVsdHM8VD4oZGVmYXVsdHM6IFQsIHN0b3JlZDogdW5rbm93bik6IFQge1xuICAvLyBQZXJzaXN0ZWQgdmFsdWVzIGFyZSB0cnVzdGVkIHRvIGJlIHRoZSBUIHRoaXMga2V5IHdhcyByZWdpc3RlcmVkIHdpdGg7XG4gIC8vIHNjaGVtYSBkcmlmdCBpcyBoYW5kbGVkIGJ5IHRoZSBtZXJnZSwgbm90IGJ5IHJ1bnRpbWUgdmFsaWRhdGlvbi5cbiAgaWYgKGlzUGxhaW5PYmplY3QoZGVmYXVsdHMpICYmIGlzUGxhaW5PYmplY3Qoc3RvcmVkKSkge1xuICAgIHJldHVybiB7IC4uLmRlZmF1bHRzLCAuLi5zdG9yZWQgfSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cbiAgcmV0dXJuIHN0b3JlZCBhcyB1bmtub3duIGFzIFQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxvYWRGcm9tU3RvcmFnZTxUPihcbiAga2V5OiBzdHJpbmcsXG4gIHNpZzogU2lnbmFsPFQ+LFxuICBlbnRyeTogU3RhdGVFbnRyeTxUPixcbiAgc3RvcmFnZTogU3RvcmFnZUFkYXB0ZXIsXG4gIHZhbGlkYXRvcj86ICh2YWx1ZTogdW5rbm93bikgPT4gdmFsdWUgaXMgVFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RvcmFnZS5nZXQoW2tleSwgYCR7a2V5fTpjbG9ja2BdKTtcblxuICAgIGlmIChyZXN1bHRba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBzaWcgc3RpbGwgaG9sZHMgdGhlIGluaXRpYWwgdmFsdWUgaGVyZSwgc28gaXQgaXMgdGhlIGRlZmF1bHQgYmFzZVxuICAgICAgLy8gZm9yIGJhY2tmaWxsaW5nIGtleXMgdGhlIHBlcnNpc3RlZCBibG9iIHByZWRhdGVzLlxuICAgICAgY29uc3Qgc3RvcmVkVmFsdWUgPSByZWNvbmNpbGVXaXRoRGVmYXVsdHMoc2lnLnBlZWsoKSwgcmVzdWx0W2tleV0pO1xuXG4gICAgICAvLyBWYWxpZGF0ZSBzdG9yZWQgdmFsdWUgaWYgdmFsaWRhdG9yIHByb3ZpZGVkXG4gICAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICAgIGlmICh2YWxpZGF0b3Ioc3RvcmVkVmFsdWUpKSB7XG4gICAgICAgICAgc2lnLnZhbHVlID0gc3RvcmVkVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFtQb2xseV0gU3RhdGUgXCIke2tleX1cIjogU3RvcmVkIHZhbHVlIGZhaWxlZCB2YWxpZGF0aW9uLCB1c2luZyBpbml0aWFsIHZhbHVlYCxcbiAgICAgICAgICAgIHN0b3JlZFZhbHVlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2lnLnZhbHVlID0gc3RvcmVkVmFsdWUgYXMgdW5rbm93biBhcyBUO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXN1bHRbYCR7a2V5fTpjbG9ja2BdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVudHJ5LmNsb2NrID0gcmVzdWx0W2Ake2tleX06Y2xvY2tgXSBhcyB1bmtub3duIGFzIG51bWJlcjtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS53YXJuKGBbUG9sbHldIEZhaWxlZCB0byBsb2FkIHN0YXRlIGZyb20gc3RvcmFnZTogJHtrZXl9YCwgZXJyb3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBlcnNpc3RUb1N0b3JhZ2U8VD4oa2V5OiBzdHJpbmcsIHZhbHVlOiBULCBjbG9jazogbnVtYmVyLCBzdG9yYWdlOiBTdG9yYWdlQWRhcHRlcik6IHZvaWQge1xuICB0cnkge1xuICAgIHN0b3JhZ2Uuc2V0KHtcbiAgICAgIFtrZXldOiB2YWx1ZSxcbiAgICAgIFtgJHtrZXl9OmNsb2NrYF06IGNsb2NrLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybihgW1BvbGx5XSBGYWlsZWQgdG8gcGVyc2lzdCBzdGF0ZSB0byBzdG9yYWdlOiAke2tleX1gLCBlcnJvcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gYnJvYWRjYXN0VXBkYXRlPFQ+KGtleTogc3RyaW5nLCB2YWx1ZTogVCwgY2xvY2s6IG51bWJlciwgc3luYzogU3luY0FkYXB0ZXIpOiB2b2lkIHtcbiAgdHJ5IHtcbiAgICBzeW5jLmJyb2FkY2FzdCh7XG4gICAgICBrZXksXG4gICAgICB2YWx1ZSxcbiAgICAgIGNsb2NrLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybihgW1BvbGx5XSBGYWlsZWQgdG8gYnJvYWRjYXN0IHN0YXRlIHVwZGF0ZTogJHtrZXl9YCwgZXJyb3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VXBkYXRlPFQ+KGVudHJ5OiBTdGF0ZUVudHJ5PFQ+LCB2YWx1ZTogVCwgY2xvY2s6IG51bWJlcik6IHZvaWQge1xuICBlbnRyeS51cGRhdGluZyA9IHRydWU7XG4gIGVudHJ5LnNpZ25hbC52YWx1ZSA9IHZhbHVlO1xuICBlbnRyeS5jbG9jayA9IGNsb2NrO1xuICBlbnRyeS51cGRhdGluZyA9IGZhbHNlO1xufVxuXG4vKipcbiAqIEdldCBzdGF0ZSBieSBrZXkgKHVzZWZ1bCBmb3IgcmV0cmlldmluZyBzdGF0ZSB3aXRob3V0IHJlLWNyZWF0aW5nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhdGVCeUtleTxUPihrZXk6IHN0cmluZyk6IFNpZ25hbDxUPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGVudHJ5ID0gc3RhdGVSZWdpc3RyeS5nZXQoa2V5KTtcbiAgcmV0dXJuIGVudHJ5Py5zaWduYWwgYXMgdW5rbm93biBhcyBTaWduYWw8VD4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2xlYXIgc3RhdGUgcmVnaXN0cnkgKHVzZWZ1bCBmb3IgdGVzdGluZylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyU3RhdGVSZWdpc3RyeSgpOiB2b2lkIHtcbiAgc3RhdGVSZWdpc3RyeS5jbGVhcigpO1xufVxuIiwKICAgICIvKipcbiAqIFN0YXRlIG93bmVkIGJ5IHRoZSBjb21wb25lbnQgZ2FsbGVyeS5cbiAqXG4gKiBUaGUgZ2FsbGVyeSBpcyBhIHN0YW5kYWxvbmUgZGV2IHN1cmZhY2Ugd2l0aCBubyBzZXJ2ZXIgc3RhdGUsIHNvIHRoZXNlXG4gKiBzaWduYWxzIHN0YXkgbW9kdWxlLWxvY2FsIOKAlCB0aGV5IG5ldmVyIGpvaW4gYSBzeW5jZWQgc3RvcmUgYnVuZGxlLiBBY3Rpb25cbiAqIGhhbmRsZXJzIChhY3Rpb25zLnRzKSByZWFjaCB0aGVtIGJ5IGltcG9ydCwgdGhlIHdheSBlYWwncyBzaG93Y2FzZSBkb2VzLlxuICogYHJlc2V0R2FsbGVyeVN0b3JlcygpYCBleGlzdHMgc28gdGhlIGJyb3dzZXIvdmlzdWFsIHRlc3QgY2FuIGlzb2xhdGUgcnVucy5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVGb3JtLCBzZXRFcnJvciB9IGZyb20gXCIuLi8uLi8uLi9zcmMvYWN0aW9uc1wiO1xuaW1wb3J0IHsgJHN0YXRlIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9zaGFyZWQvbGliL3N0YXRlLnRzXCI7XG5cbmV4cG9ydCB0eXBlIEdhbGxlcnlUaGVtZSA9IFwic3lzdGVtXCIgfCBcImxpZ2h0XCIgfCBcImRhcmtcIjtcblxuLyoqIFRoZSBnYWxsZXJ5J3MgQWN0aW9uRm9ybSBiaW5kcyB0byBhbiBlbXB0eSBidW5kbGUg4oCUIG5vIHN0b3JlIGlzIHRvdWNoZWQuICovXG5leHBvcnQgdHlwZSBHYWxsZXJ5U3RvcmVzID0gUmVjb3JkPHN0cmluZywgbmV2ZXI+O1xuXG4vKiogVGhlbWUgb3ZlcnJpZGUsIGFwcGxpZWQgdG8gdGhlIHBhbmVsIGFzIGBkYXRhLXBvbGx5LXRoZW1lYC4gYHN5c3RlbWAgb21pdHNcbiAqICB0aGUgYXR0cmlidXRlIGFuZCBsZXRzIGBwcmVmZXJzLWNvbG9yLXNjaGVtZWAgZGVjaWRlLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5VGhlbWUgPSAkc3RhdGU8R2FsbGVyeVRoZW1lPihcInN5c3RlbVwiKTtcbi8qKiBEcml2ZXMgdGhlIGxpdmUgPE1vZGFsPiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeU1vZGFsT3BlbiA9ICRzdGF0ZTxib29sZWFuPihmYWxzZSk7XG4vKiogRHJpdmVzIHRoZSBsaXZlIDxEcm9wZG93bj4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlEcm9wZG93bk9wZW4gPSAkc3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuLyoqIFNlbGVjdGlvbiBmb3IgdGhlIHNpbmdsZS1zZWxlY3QgPFNlbGVjdD4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlTZWxlY3RTaW5nbGUgPSAkc3RhdGU8U2V0PHN0cmluZz4+KG5ldyBTZXQoW1wiY29tZXRcIl0pKTtcbi8qKiBTZWxlY3Rpb24gZm9yIHRoZSBtdWx0aS1zZWxlY3QgPFNlbGVjdD4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlTZWxlY3RNdWx0aSA9ICRzdGF0ZTxTZXQ8c3RyaW5nPj4obmV3IFNldChbXCJjb21ldFwiLCBcIm5lYnVsYVwiXSkpO1xuLyoqIFNlbGVjdGlvbiBmb3IgdGhlIGNsZWFyYWJsZSBzaW5nbGUtc2VsZWN0IDxTZWxlY3Q+IHNwZWNpbWVuLiBTdGFydHMgZW1wdHlcbiAqICBzbyB0aGUgXCJBbnkg4oCmXCIgY2xlYXIgb3B0aW9uIGlzIHRoZSBhY3RpdmUgcm93LiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5U2VsZWN0Q2xlYXJhYmxlID0gJHN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KCkpO1xuLyoqIFNlbGVjdGlvbiBmb3IgdGhlIGxvbmctbGFiZWwgPFNlbGVjdD4gc3BlY2ltZW4gKHBvbGx5IzE4MCkuIFRoZSBsYWJlbCBpc1xuICogIHdpZGVyIHRoYW4gYC0tcG9sbHktY29udHJvbC1tYXgtd2lkdGhgLCBzbyB0aGUgdHJpZ2dlciBtdXN0IHRydW5jYXRlIGl0XG4gKiAgcmF0aGVyIHRoYW4gd3JhcCB0aGUgY2FyZXQgb250byBhIHNlY29uZCBsaW5lLiBFdmVyeSBzaG9ydC1sYWJlbCBzcGVjaW1lblxuICogIHBhc3NlZCB0aHJvdWdob3V0IHRoYXQgcmVncmVzc2lvbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVNlbGVjdExvbmcgPSAkc3RhdGU8U2V0PHN0cmluZz4+KG5ldyBTZXQoW1wibG9uZ1wiXSkpO1xuLyoqIFRoZSBsaXZlLCBzaWduYWwtYm91bmQgPENoZWNrYm94PiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeUNoZWNrZWQgPSAkc3RhdGU8Ym9vbGVhbj4odHJ1ZSk7XG4vKiogVGhlIGNvbnRyb2xsZWQgPFRleHRJbnB1dD4gc3BlY2ltZW4gdmFsdWUuICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlUZXh0ID0gJHN0YXRlPHN0cmluZz4oXCJDb250cm9sbGVkIHZhbHVlXCIpO1xuLyoqIExhc3QgdmFsdWUgY29tbWl0dGVkIGJ5IHRoZSA8QWN0aW9uSW5wdXQ+IC8gPEFjdGlvblNlbGVjdD4gc3BlY2ltZW5zLiAqL1xuZXhwb3J0IGNvbnN0ICRnYWxsZXJ5Q29tbWl0dGVkID0gJHN0YXRlPHN0cmluZz4oXCLigJRcIik7XG4vKiogQWN0aXZlIHRhYiBpZCBmb3IgdGhlIDxUYWJzPiBzcGVjaW1lbi4gKi9cbmV4cG9ydCBjb25zdCAkZ2FsbGVyeVRhYiA9ICRzdGF0ZTxzdHJpbmc+KFwib3ZlcnZpZXdcIik7XG4vKiogTmFtZSBvZiB0aGUgbGFzdCBmaWxlIHBpY2tlZCBieSB0aGUgPEZpbGVJbnB1dD4gc3BlY2ltZW4uICovXG5leHBvcnQgY29uc3QgJGdhbGxlcnlGaWxlTmFtZSA9ICRzdGF0ZTxzdHJpbmc+KFwi4oCUXCIpO1xuXG4vKipcbiAqIFRoZSBmb3JtIGJlaGluZCB0aGUgPEFjdGlvbkZvcm0+IHNwZWNpbWVuLiBgY3JlYXRlRm9ybWAgcmVxdWlyZXMgYGJpbmRTdG9yZXNgXG4gKiBiZWZvcmUgYSBzdWJtaXQgY2FuIHJ1bjsgY2xpZW50LnRzeCBiaW5kcyBpdCB0byB0aGUgZW1wdHkgZ2FsbGVyeSBidW5kbGUgYXRcbiAqIGJvb3QuIEl0cyBgLmFjdGlvbnNgIGFyZSBzcHJlYWQgaW50byB0aGUgcmVnaXN0cnkgKHNlZSBhY3Rpb25zLnRzKS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdhbGxlcnlGb3JtID0gY3JlYXRlRm9ybTx7IGZ1bGxOYW1lOiBzdHJpbmc7IGVtYWlsOiBzdHJpbmcgfSwgR2FsbGVyeVN0b3Jlcz4oe1xuICBuYW1lOiBcImdhbGxlcnktZm9ybVwiLFxuICBpbml0aWFsVmFsdWVzOiB7IGZ1bGxOYW1lOiBcIlwiLCBlbWFpbDogXCJcIiB9LFxuICBvblN1Ym1pdDogKHsgdmFsdWVzIH0pID0+IHtcbiAgICBzZXRFcnJvcihcbiAgICAgIGBBY3Rpb25Gb3JtIHN1Ym1pdHRlZCDigJQgbmFtZSBcIiR7dmFsdWVzLmZ1bGxOYW1lIHx8IFwiKGVtcHR5KVwifVwiLCBgICtcbiAgICAgICAgYGVtYWlsIFwiJHt2YWx1ZXMuZW1haWwgfHwgXCIoZW1wdHkpXCJ9XCIuYCxcbiAgICAgIHsgc2V2ZXJpdHk6IFwiaW5mb1wiIH1cbiAgICApO1xuICB9LFxufSk7XG5cbi8qKiBSZXNldCBldmVyeSBnYWxsZXJ5IHNpZ25hbCB0byBpdHMgaW5pdGlhbCB2YWx1ZSDigJQgZm9yIHRlc3QgaXNvbGF0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0R2FsbGVyeVN0b3JlcygpOiB2b2lkIHtcbiAgJGdhbGxlcnlUaGVtZS52YWx1ZSA9IFwic3lzdGVtXCI7XG4gICRnYWxsZXJ5TW9kYWxPcGVuLnZhbHVlID0gZmFsc2U7XG4gICRnYWxsZXJ5RHJvcGRvd25PcGVuLnZhbHVlID0gZmFsc2U7XG4gICRnYWxsZXJ5U2VsZWN0U2luZ2xlLnZhbHVlID0gbmV3IFNldChbXCJjb21ldFwiXSk7XG4gICRnYWxsZXJ5U2VsZWN0TXVsdGkudmFsdWUgPSBuZXcgU2V0KFtcImNvbWV0XCIsIFwibmVidWxhXCJdKTtcbiAgJGdhbGxlcnlTZWxlY3RDbGVhcmFibGUudmFsdWUgPSBuZXcgU2V0KCk7XG4gICRnYWxsZXJ5U2VsZWN0TG9uZy52YWx1ZSA9IG5ldyBTZXQoW1wibG9uZ1wiXSk7XG4gICRnYWxsZXJ5Q2hlY2tlZC52YWx1ZSA9IHRydWU7XG4gICRnYWxsZXJ5VGV4dC52YWx1ZSA9IFwiQ29udHJvbGxlZCB2YWx1ZVwiO1xuICAkZ2FsbGVyeUNvbW1pdHRlZC52YWx1ZSA9IFwi4oCUXCI7XG4gICRnYWxsZXJ5VGFiLnZhbHVlID0gXCJvdmVydmlld1wiO1xuICAkZ2FsbGVyeUZpbGVOYW1lLnZhbHVlID0gXCLigJRcIjtcbiAgZ2FsbGVyeUZvcm0uY2xvc2UoKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBBY3Rpb25zIGZvciB0aGUgZ2FsbGVyeSdzIGludGVyYWN0aXZlIHNwZWNpbWVucy4gRXZlcnkgaGFuZGxlciBkcml2ZXMgYVxuICogbW9kdWxlLWxvY2FsIHNpZ25hbCAoc3RvcmVzLnRzKSBvciBhIHBvbGx5IG92ZXJsYXkgcHJpbWl0aXZlIOKAlCBub25lIHRvdWNoZXMgYVxuICogc3RvcmUgYnVuZGxlLCBzbyB0aGUgZ2FsbGVyeSBzdGF5cyBhIHNlbGYtY29udGFpbmVkIGRldiBzdXJmYWNlLiBTcHJlYWRpbmdcbiAqIGBnYWxsZXJ5Rm9ybS5hY3Rpb25zYCBhZGRzIHRoZSBhdXRvLXJlZ2lzdGVyZWQgYGdhbGxlcnktZm9ybTp7b3BlbixjbG9zZSxcbiAqIHN1Ym1pdH1gIGhhbmRsZXJzLiBjbGllbnQudHN4IHdpcmVzIHRoaXMgcmVnaXN0cnkgaW50byB0aGUgZG9jdW1lbnQgdmlhXG4gKiBgaW5zdGFsbEV2ZW50RGVsZWdhdGlvbmAsIGV4YWN0bHkgYXMgYSByZWFsIGNvbnN1bWVyIGFwcCB3b3VsZC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFjdGlvblJlZ2lzdHJ5LCBFcnJvclNldmVyaXR5IH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9hY3Rpb25zXCI7XG5pbXBvcnQgeyBzZXRFcnJvciB9IGZyb20gXCIuLi8uLi8uLi9zcmMvYWN0aW9uc1wiO1xuaW1wb3J0IHsgY29uZmlybSB9IGZyb20gXCIuLi8uLi8uLi9zcmMvcG9sbHktdWlcIjtcbmltcG9ydCB7XG4gICRnYWxsZXJ5Q29tbWl0dGVkLFxuICAkZ2FsbGVyeU1vZGFsT3BlbixcbiAgJGdhbGxlcnlUYWIsXG4gICRnYWxsZXJ5VGhlbWUsXG4gIHR5cGUgR2FsbGVyeVN0b3JlcyxcbiAgdHlwZSBHYWxsZXJ5VGhlbWUsXG4gIGdhbGxlcnlGb3JtLFxufSBmcm9tIFwiLi9zdG9yZXMudHNcIjtcblxuY29uc3QgVEhFTUVTOiByZWFkb25seSBHYWxsZXJ5VGhlbWVbXSA9IFtcInN5c3RlbVwiLCBcImxpZ2h0XCIsIFwiZGFya1wiXTtcbmNvbnN0IFNFVkVSSVRJRVM6IHJlYWRvbmx5IEVycm9yU2V2ZXJpdHlbXSA9IFtcImluZm9cIiwgXCJ3YXJuaW5nXCIsIFwiZXJyb3JcIl07XG5cbmV4cG9ydCBjb25zdCBHQUxMRVJZX0FDVElPTlM6IEFjdGlvblJlZ2lzdHJ5PEdhbGxlcnlTdG9yZXM+ID0ge1xuICAuLi5nYWxsZXJ5Rm9ybS5hY3Rpb25zLFxuXG4gIFwiZ2FsbGVyeTpzZXQtdGhlbWVcIjogKHsgZGF0YSB9KSA9PiB7XG4gICAgY29uc3QgdGhlbWUgPSBkYXRhW1widGhlbWVcIl07XG4gICAgaWYgKHRoZW1lID09PSBcInN5c3RlbVwiIHx8IHRoZW1lID09PSBcImxpZ2h0XCIgfHwgdGhlbWUgPT09IFwiZGFya1wiKSB7XG4gICAgICAkZ2FsbGVyeVRoZW1lLnZhbHVlID0gdGhlbWU7XG4gICAgfVxuICB9LFxuXG4gIFwiZ2FsbGVyeTpzZXQtdGFiXCI6ICh7IGRhdGEgfSkgPT4ge1xuICAgIGNvbnN0IGlkID0gZGF0YVtcImlkXCJdO1xuICAgIGlmICh0eXBlb2YgaWQgPT09IFwic3RyaW5nXCIpICRnYWxsZXJ5VGFiLnZhbHVlID0gaWQ7XG4gIH0sXG5cbiAgXCJnYWxsZXJ5Om1vZGFsLW9wZW5cIjogKCkgPT4ge1xuICAgICRnYWxsZXJ5TW9kYWxPcGVuLnZhbHVlID0gdHJ1ZTtcbiAgfSxcblxuICBcImdhbGxlcnk6Y29tbWl0XCI6ICh7IGRhdGEgfSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gZGF0YVtcInZhbHVlXCJdO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpICRnYWxsZXJ5Q29tbWl0dGVkLnZhbHVlID0gdmFsdWU7XG4gIH0sXG5cbiAgXCJnYWxsZXJ5OnRvYXN0XCI6ICh7IGRhdGEgfSkgPT4ge1xuICAgIGNvbnN0IHNldmVyaXR5ID0gU0VWRVJJVElFUy5maW5kKChzKSA9PiBzID09PSBkYXRhW1wic2V2ZXJpdHlcIl0pID8/IFwiaW5mb1wiO1xuICAgIHNldEVycm9yKGBUaGlzIGlzIGEgJHtzZXZlcml0eX0gdG9hc3Qg4oCUIGNsaWNrIGl0IG9yIHdhaXQgZm9yIGl0IHRvIGRpc21pc3MuYCwge1xuICAgICAgc2V2ZXJpdHksXG4gICAgfSk7XG4gIH0sXG5cbiAgXCJnYWxsZXJ5OmNvbmZpcm1cIjogYXN5bmMgKHsgZGF0YSB9KSA9PiB7XG4gICAgY29uc3QgZGFuZ2VyID0gZGF0YVtcImRhbmdlclwiXSA9PT0gXCJ0cnVlXCI7XG4gICAgY29uc3Qgb2sgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgIHRpdGxlOiBkYW5nZXIgPyBcIkRlbGV0ZSB0aGlzIGl0ZW0/XCIgOiBcIlNhdmUgeW91ciBjaGFuZ2VzP1wiLFxuICAgICAgYm9keTogZGFuZ2VyXG4gICAgICAgID8gXCJUaGlzIGNhbm5vdCBiZSB1bmRvbmUuIFRoZSBpdGVtIHdpbGwgYmUgcGVybWFuZW50bHkgcmVtb3ZlZC5cIlxuICAgICAgICA6IFwiWW91ciBjaGFuZ2VzIHdpbGwgYmUgYXBwbGllZCBpbW1lZGlhdGVseS5cIixcbiAgICAgIGRhbmdlcixcbiAgICAgIGNvbmZpcm1MYWJlbDogZGFuZ2VyID8gXCJEZWxldGVcIiA6IFwiU2F2ZVwiLFxuICAgIH0pO1xuICAgIHNldEVycm9yKGBDb25maXJtRGlhbG9nIHJlc29sdmVkICR7U3RyaW5nKG9rKX0uYCwgeyBzZXZlcml0eTogb2sgPyBcImluZm9cIiA6IFwid2FybmluZ1wiIH0pO1xuICB9LFxufTtcblxuLyoqIFRoZSB0aGVtZSBjeWNsZSwgZXhwb3NlZCBzbyB0aGUgcGFuZWwgY2FuIHJlbmRlciBvbmUgYnV0dG9uIHBlciBvcHRpb24uICovXG5leHBvcnQgeyBUSEVNRVMgfTtcbiIsCiAgICAiLyoqXG4gKiBUaGUgZ2FsbGVyeSBjYXRhbG9ndWUg4oCUIG9uZSBzZWN0aW9uIHBlciBwb2xseS11aSBwcmltaXRpdmUsIGVhY2ggcmVuZGVyaW5nXG4gKiB0aGUgY29uZmlndXJhdGlvbnMgd29ydGggc2VlaW5nLiBBZGFwdGVkIGZyb20gZWFsJ3Mgc2hvd2Nhc2UgKHdoaWNoIGNvbnN1bWVzXG4gKiB0aGlzIHZlcnkgbGlicmFyeSksIHJlcG9pbnRlZCBhdCB0aGUgbG9jYWwgc291cmNlIHNvIHRoZSBnYWxsZXJ5IHJlbmRlcnMgdGhlXG4gKiBwcmltaXRpdmVzIGV4YWN0bHkgYXMgdGhleSBzaGlwLlxuICpcbiAqIEV2ZXJ5IHNlY3Rpb24gY2FycmllcyBhIGBjb21wb25lbnRgIG5hbWluZyB0aGUgcG9sbHktdWkgZXhwb3J0IGl0IGNvdmVycztcbiAqIHJlZ2lzdHJ5LWNvdmVyYWdlLnRzIGFzc2VydHMgdGhhdCBldmVyeSBjb21wb25lbnQgaW4gcmVnaXN0cnkuZ2VuZXJhdGVkLnRzXG4gKiBoYXMgYSBzZWN0aW9uIGhlcmUsIHNvIGEgbmV3IHByaW1pdGl2ZSBjYW4ndCBsYW5kIHdpdGhvdXQgYSBzcGVjaW1lbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudENoaWxkcmVuLCBKU1ggfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQge1xuICBBY3Rpb25Gb3JtLFxuICBBY3Rpb25JbnB1dCxcbiAgQWN0aW9uU2VsZWN0LFxuICBCYWRnZSxcbiAgQnV0dG9uLFxuICBDYXJkLFxuICBDaGVja2JveCxcbiAgQ2x1c3RlcixcbiAgQ29kZSxcbiAgQ29sbGFwc2libGUsXG4gIERyb3Bkb3duLFxuICBGaWxlSW5wdXQsXG4gIEh0bWwsXG4gIExheW91dCxcbiAgTGluayxcbiAgTW9kYWwsXG4gIE91dHB1dCxcbiAgU2VsZWN0LFxuICBTa2VsZXRvbixcbiAgU3VyZmFjZSxcbiAgVGFicyxcbiAgVGV4dCxcbiAgVGV4dElucHV0LFxuICBUb2dnbGUsXG59IGZyb20gXCIuLi8uLi8uLi9zcmMvcG9sbHktdWlcIjtcbmltcG9ydCB7XG4gICRnYWxsZXJ5Q2hlY2tlZCxcbiAgJGdhbGxlcnlDb21taXR0ZWQsXG4gICRnYWxsZXJ5RHJvcGRvd25PcGVuLFxuICAkZ2FsbGVyeUZpbGVOYW1lLFxuICAkZ2FsbGVyeU1vZGFsT3BlbixcbiAgJGdhbGxlcnlTZWxlY3RDbGVhcmFibGUsXG4gICRnYWxsZXJ5U2VsZWN0TG9uZyxcbiAgJGdhbGxlcnlTZWxlY3RNdWx0aSxcbiAgJGdhbGxlcnlTZWxlY3RTaW5nbGUsXG4gICRnYWxsZXJ5VGFiLFxuICAkZ2FsbGVyeVRleHQsXG4gIGdhbGxlcnlGb3JtLFxufSBmcm9tIFwiLi9zdG9yZXMudHNcIjtcblxuLyoqXG4gKiBPbmUgY2F0YWxvZ3VlZCBleGFtcGxlOiBhIHN0YWdlIGhvbGRpbmcgbGl2ZSBjb21wb25lbnQocykgYW5kIGEgY2FwdGlvblxuICogbmFtaW5nIHRoZSBjb25maWd1cmF0aW9uIG9uIHNob3cuIGB3aWRlYCBzcGFucyBldmVyeSBncmlkIGNvbHVtbiBmb3JcbiAqIHNwZWNpbWVucyB0aGF0IG5lZWQgdGhlIHJvb20gKGxheW91dHMsIGZvcm1zLCBjYXJkcykuXG4gKi9cbmZ1bmN0aW9uIFNwZWNpbWVuKHByb3BzOiB7IGNhcHRpb246IHN0cmluZzsgd2lkZT86IGJvb2xlYW47IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2VcbiAgICAgIHZhcmlhbnQ9XCJzdW5rZW5cIlxuICAgICAgcmFkaXVzPVwibWRcIlxuICAgICAgYm9yZGVyPVwiZGVmYXVsdFwiXG4gICAgICBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCJcbiAgICAgIGNsYXNzTmFtZT17cHJvcHMud2lkZSA/IFwiZ2FsbGVyeS1zcGVjaW1lbiBnYWxsZXJ5LXNwZWNpbWVuLS13aWRlXCIgOiBcImdhbGxlcnktc3BlY2ltZW5cIn1cbiAgICA+XG4gICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2FsbGVyeS1zdGFnZVwiPntwcm9wcy5jaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgPFRleHQgc2l6ZT1cInhzXCIgdG9uZT1cIm11dGVkXCIgY2xhc3NOYW1lPVwiZ2FsbGVyeS1jb2RlXCI+XG4gICAgICAgICAge3Byb3BzLmNhcHRpb259XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvTGF5b3V0PlxuICAgIDwvU3VyZmFjZT5cbiAgKTtcbn1cblxuLyoqIEEgbmV1dHJhbCBmaWxsZXIgYmxvY2sgZm9yIHRoZSBsYXlvdXQgc3BlY2ltZW5zLiAqL1xuZnVuY3Rpb24gQm94KHByb3BzOiB7IGNoaWxkcmVuOiBDb21wb25lbnRDaGlsZHJlbiB9KSB7XG4gIHJldHVybiAoXG4gICAgPFN1cmZhY2UgdmFyaWFudD1cInJhaXNlZFwiIHJhZGl1cz1cInNtXCIgYm9yZGVyPVwiZGVmYXVsdFwiIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgIDxUZXh0IHNpemU9XCJzbVwiPntwcm9wcy5jaGlsZHJlbn08L1RleHQ+XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5jb25zdCBTVEFSOiBKU1guRWxlbWVudCA9IChcbiAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJnYWxsZXJ5LWljb25cIj5cbiAgICDimIVcbiAgPC9zcGFuPlxuKTtcblxuLyoqXG4gKiBwb2xseSMxODA6IGEgbGFiZWwgd2lkZXIgdGhhbiBgLS1wb2xseS1jb250cm9sLW1heC13aWR0aGAsIHNoYXJlZCBieSB0aGVcbiAqIDxTZWxlY3Q+IGFuZCA8QWN0aW9uU2VsZWN0PiBsb25nLWxhYmVsIHNwZWNpbWVucyBzbyB0aGUgdHdvIHRyaWdnZXJzIG11c3RcbiAqIG1lYXN1cmUgdGhlIHNhbWUgYm94LiBFdmVyeSBjYXRhbG9ndWVkIFNlbGVjdCB1c2VkIGEgc2hvcnQgbGFiZWwsIHdoaWNoIGlzXG4gKiB3aHkgYSB0cmlnZ2VyIHRoYXQgaGFkIGxvc3QgaXRzIGxheW91dCByb3cgc3RpbGwgbWVhc3VyZWQgNDBweCBhbmQgdGhlXG4gKiBjYXJldCBvbmx5IHdyYXBwZWQgaW4gYSBjb25zdW1lciBhcHAuXG4gKi9cbmNvbnN0IExPTkdfU0VMRUNUX0xBQkVMID0gXCJBIGRlbGliZXJhdGVseSBsb25nIG9wdGlvbiBsYWJlbCB0aGF0IG92ZXJmbG93cyB0aGUgY29udHJvbCBtYXggd2lkdGhcIjtcblxuY29uc3QgTE9OR19TRUxFQ1RfT1BUSU9OUyA9IFtcbiAgeyB2YWx1ZTogXCJsb25nXCIsIGxhYmVsOiBMT05HX1NFTEVDVF9MQUJFTCB9LFxuICB7IHZhbHVlOiBcInNob3J0XCIsIGxhYmVsOiBcIlNob3J0XCIgfSxcbl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2FsbGVyeVNlY3Rpb24ge1xuICAvKiogQW5jaG9yIGlkIGZvciB0aGUgaW4tcGFnZSBuYXYuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBEaXNwbGF5IGhlYWRpbmcuICovXG4gIHRpdGxlOiBzdHJpbmc7XG4gIC8qKiBUaGUgcG9sbHktdWkgZXhwb3J0IHRoaXMgc2VjdGlvbiBjb3ZlcnMgKG1hdGNoZWQgYWdhaW5zdCB0aGUgcmVnaXN0cnkpLiAqL1xuICBjb21wb25lbnQ6IHN0cmluZztcbiAgLyoqIE9uZS1saW5lIGRlc2NyaXB0aW9uLiAqL1xuICBzdW1tYXJ5OiBzdHJpbmc7XG4gIHJlbmRlcjogKCkgPT4gSlNYLkVsZW1lbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBHQUxMRVJZX1NFQ1RJT05TOiByZWFkb25seSBHYWxsZXJ5U2VjdGlvbltdID0gW1xuICB7XG4gICAgaWQ6IFwiYmFkZ2VcIixcbiAgICB0aXRsZTogXCJCYWRnZVwiLFxuICAgIGNvbXBvbmVudDogXCJCYWRnZVwiLFxuICAgIHN1bW1hcnk6IFwiU21hbGwgaW5saW5lIHN0YXR1cyBjaGlwLiBPbmUgdmFyaWFudCBwZXIgc2VtYW50aWMgdG9uZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIHsoW1wiZGVmYXVsdFwiLCBcImluZm9cIiwgXCJzdWNjZXNzXCIsIFwid2FybmluZ1wiLCBcImRhbmdlclwiXSBhcyBjb25zdCkubWFwKCh2KSA9PiAoXG4gICAgICAgICAgPFNwZWNpbWVuIGtleT17dn0gY2FwdGlvbj17YHZhcmlhbnQ9XCIke3Z9XCJgfT5cbiAgICAgICAgICAgIDxCYWRnZSB2YXJpYW50PXt2fT57dn08L0JhZGdlPlxuICAgICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgICkpfVxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImJ1dHRvblwiLFxuICAgIHRpdGxlOiBcIkJ1dHRvblwiLFxuICAgIGNvbXBvbmVudDogXCJCdXR0b25cIixcbiAgICBzdW1tYXJ5OiBcIkludGVyYWN0aXZlIGNvbnRyb2wuIFRpZXIgc2V0cyBpbXBvcnRhbmNlLCBjb2xvciBvdmVybGF5cyBtZWFuaW5nLCBzaXplIHNldHMgc2NhbGUuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInRpZXI6IHByaW1hcnkgLyBzZWNvbmRhcnkgLyB0ZXJ0aWFyeVwiPlxuICAgICAgICAgIDxCdXR0b24gdGllcj1cInByaW1hcnlcIiBsYWJlbD1cIlByaW1hcnlcIiAvPlxuICAgICAgICAgIDxCdXR0b24gdGllcj1cInNlY29uZGFyeVwiIGxhYmVsPVwiU2Vjb25kYXJ5XCIgLz5cbiAgICAgICAgICA8QnV0dG9uIHRpZXI9XCJ0ZXJ0aWFyeVwiIGxhYmVsPVwiVGVydGlhcnlcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNvbG9yOiBkZWZhdWx0IC8gaW5mbyAvIHN1Y2Nlc3MgLyB3YXJuaW5nIC8gZGFuZ2VyXCI+XG4gICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cImRlZmF1bHRcIiBsYWJlbD1cIkRlZmF1bHRcIiAvPlxuICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJpbmZvXCIgbGFiZWw9XCJJbmZvXCIgLz5cbiAgICAgICAgICA8QnV0dG9uIGNvbG9yPVwic3VjY2Vzc1wiIGxhYmVsPVwiU3VjY2Vzc1wiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBjb2xvcj1cIndhcm5pbmdcIiBsYWJlbD1cIldhcm5pbmdcIiAvPlxuICAgICAgICAgIDxCdXR0b24gY29sb3I9XCJkYW5nZXJcIiBsYWJlbD1cIkRhbmdlclwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic2l6ZTogc21hbGwgLyBub3JtYWwgLyBsYXJnZVwiPlxuICAgICAgICAgIDxCdXR0b24gc2l6ZT1cInNtYWxsXCIgbGFiZWw9XCJTbWFsbFwiIC8+XG4gICAgICAgICAgPEJ1dHRvbiBzaXplPVwibm9ybWFsXCIgbGFiZWw9XCJOb3JtYWxcIiAvPlxuICAgICAgICAgIDxCdXR0b24gc2l6ZT1cImxhcmdlXCIgbGFiZWw9XCJMYXJnZVwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICA8QnV0dG9uIGxhYmVsPVwiRGlzYWJsZWRcIiBkaXNhYmxlZCAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImljb24gKyBsYWJlbFwiPlxuICAgICAgICAgIDxCdXR0b24gaWNvbj17U1RBUn0gbGFiZWw9XCJXaXRoIGljb25cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNpcmNsZSAoaWNvbi1vbmx5IG5lZWRzIGFyaWEtbGFiZWwpXCI+XG4gICAgICAgICAgPEJ1dHRvbiBjaXJjbGUgYXJpYS1sYWJlbD1cIlN0YXJcIiBsYWJlbD17U1RBUn0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJocmVmIOKAlCByZW5kZXJzIGFuIDxhPlwiPlxuICAgICAgICAgIDxCdXR0b24gaHJlZj1cIiNidXR0b25cIiB0aWVyPVwic2Vjb25kYXJ5XCIgbGFiZWw9XCJMaW5rIGJ1dHRvblwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZnVsbFdpZHRoXCIgd2lkZT5cbiAgICAgICAgICA8QnV0dG9uIGZ1bGxXaWR0aCB0aWVyPVwicHJpbWFyeVwiIGxhYmVsPVwiRnVsbC13aWR0aCBidXR0b25cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICB7LyogVGhlIHR3byByb3dzIHNoYXJlIGEgbGVmdCBlZGdlLCBzbyB0aGUgb2Zmc2V0IGlzIHRoZSB3aG9sZSBwb2ludDpcbiAgICAgICAgICAgIHRoZSBkZWZhdWx0IGJ1dHRvbiBhbGlnbnMgaXRzIEJPWCB0byB0aGF0IGVkZ2UgYW5kIGl0cyBsYWJlbCBzaXRzXG4gICAgICAgICAgICBhbiBpbmxpbmUtcGFkZGluZyBmdXJ0aGVyIGluOyB0aGUgZmx1c2ggb25lIHB1dHMgdGhlIExBQkVMIHRoZXJlLiAqL31cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJmbHVzaCDigJQgbGFiZWwgb24gdGhlIHRleHQgZWRnZSwgZm9yIGEgdGVydGlhcnkgYnV0dG9uIGJlc2lkZSBjb3B5XCIgd2lkZT5cbiAgICAgICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiPlxuICAgICAgICAgICAgPFRleHQgc2l6ZT1cInNtXCIgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICAgIEEgbGluZSBvZiBib2R5IGNvcHkgZm9yIHRoZSBsZWZ0IGVkZ2UuXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8Q2x1c3Rlcj5cbiAgICAgICAgICAgICAgPEJ1dHRvbiB0aWVyPVwidGVydGlhcnlcIiBsYWJlbD1cIkRlZmF1bHQg4oCUIGJveCBhbGlnbnNcIiAvPlxuICAgICAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgICAgICAgPENsdXN0ZXI+XG4gICAgICAgICAgICAgIDxCdXR0b24gdGllcj1cInRlcnRpYXJ5XCIgZmx1c2ggbGFiZWw9XCJGbHVzaCDigJQgbGFiZWwgYWxpZ25zXCIgLz5cbiAgICAgICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJ0ZXh0XCIsXG4gICAgdGl0bGU6IFwiVGV4dFwiLFxuICAgIGNvbXBvbmVudDogXCJUZXh0XCIsXG4gICAgc3VtbWFyeTogXCJUeXBvZ3JhcGhpYyBwcmltaXRpdmUg4oCUIHRvbmUsIHNpemUsIHdlaWdodCwgaXRhbGljLCBzdHJpa2V0aHJvdWdoLCBhbmQgbGVhZGluZy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwidG9uZTogZGVmYXVsdCAvIG11dGVkIC8gZGFuZ2VyIC8gd2FybmluZyAvIHN1Y2Nlc3NcIj5cbiAgICAgICAgICA8VGV4dCB0b25lPVwiZGVmYXVsdFwiPkRlZmF1bHQ8L1RleHQ+XG4gICAgICAgICAgPFRleHQgdG9uZT1cIm11dGVkXCI+TXV0ZWQ8L1RleHQ+XG4gICAgICAgICAgPFRleHQgdG9uZT1cImRhbmdlclwiPkRhbmdlcjwvVGV4dD5cbiAgICAgICAgICA8VGV4dCB0b25lPVwid2FybmluZ1wiPldhcm5pbmc8L1RleHQ+XG4gICAgICAgICAgPFRleHQgdG9uZT1cInN1Y2Nlc3NcIj5TdWNjZXNzPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNpemU6IHhzIC8gc20gLyBtZCAvIGxnIC8geGxcIj5cbiAgICAgICAgICB7KFtcInhzXCIsIFwic21cIiwgXCJtZFwiLCBcImxnXCIsIFwieGxcIl0gYXMgY29uc3QpLm1hcCgocykgPT4gKFxuICAgICAgICAgICAgPFRleHQga2V5PXtzfSBzaXplPXtzfT5cbiAgICAgICAgICAgICAge3N9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwid2VpZ2h0OiBub3JtYWwgLyBtZWRpdW0gLyBib2xkXCI+XG4gICAgICAgICAgPFRleHQgd2VpZ2h0PVwibm9ybWFsXCI+Tm9ybWFsPC9UZXh0PlxuICAgICAgICAgIDxUZXh0IHdlaWdodD1cIm1lZGl1bVwiPk1lZGl1bTwvVGV4dD5cbiAgICAgICAgICA8VGV4dCB3ZWlnaHQ9XCJib2xkXCI+Qm9sZDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJpdGFsaWMgLyBzdHJpa2V0aHJvdWdoXCI+XG4gICAgICAgICAgPFRleHQgaXRhbGljPkl0YWxpYyBlbXBoYXNpczwvVGV4dD5cbiAgICAgICAgICA8VGV4dCBzdHJpa2V0aHJvdWdoPlN0cnVjayB0aHJvdWdoPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0nbGVhZGluZz1cImxvb3NlXCIg4oCUIG11bHRpLWxpbmUgYm9keSBjb3B5JyB3aWRlPlxuICAgICAgICAgIDxUZXh0IGFzPVwicFwiIGxlYWRpbmc9XCJsb29zZVwiPlxuICAgICAgICAgICAgQSBwYXJhZ3JhcGggcmVuZGVyZWQgd2l0aCBsb29zZSBsZWFkaW5nLiBQb2xseSdzIFRleHQgcHJpbWl0aXZlIGJhY2tzIGV2ZXJ5IHNwYW4sXG4gICAgICAgICAgICBwYXJhZ3JhcGgsIGxhYmVsLCBhbmQgY2FwdGlvbiBzbyBjb25zdW1lcnMgbmV2ZXIgcmVhY2ggZm9yIGEgcmF3IHN0eWxlIGF0dHJpYnV0ZSB0byBzZXRcbiAgICAgICAgICAgIHRvbmUsIHNpemUsIHdlaWdodCwgb3IgbGluZSBoZWlnaHQuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNvZGVcIixcbiAgICB0aXRsZTogXCJDb2RlXCIsXG4gICAgY29tcG9uZW50OiBcIkNvZGVcIixcbiAgICBzdW1tYXJ5OiBcIk1vbm9zcGFjZSBjb2RlIOKAlCBpbmxpbmUgYnkgZGVmYXVsdCwgb3IgYSB3cmFwcGVkIGJsb2NrLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJpbmxpbmVcIj5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIFJ1biA8Q29kZT5wb2xseSBnYWxsZXJ5PC9Db2RlPiB0byBvcGVuIHRoaXMgcGFnZS5cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiYmxvY2tcIiB3aWRlPlxuICAgICAgICAgIDxDb2RlIGJsb2NrPnsnY29uc3QgZ2FsbGVyeSA9IHtcXG4gIHNlcnZlZDogXCJieSBwb2xseVwiLFxcbn07J308L0NvZGU+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwibGlua1wiLFxuICAgIHRpdGxlOiBcIkxpbmtcIixcbiAgICBjb21wb25lbnQ6IFwiTGlua1wiLFxuICAgIHN1bW1hcnk6IFwiQW5jaG9yIHByaW1pdGl2ZSDigJQgdW5kZXJsaW5lIGJ5IGRlZmF1bHQsIHdpdGggZXh0ZXJuYWwsIHN1YnRsZSwgYW5kIGRvd25sb2FkIG1vZGVzLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkZWZhdWx0XCI+XG4gICAgICAgICAgPExpbmsgaHJlZj1cIiNsaW5rXCI+SW4tcGFnZSBsaW5rPC9MaW5rPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImV4dGVybmFsIOKAlCBuZXcgdGFiLCByZWw9bm9vcGVuZXJcIj5cbiAgICAgICAgICA8TGluayBocmVmPVwiaHR0cHM6Ly9leGFtcGxlLmNvbVwiIGV4dGVybmFsPlxuICAgICAgICAgICAgRXh0ZXJuYWwgbGlua1xuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzdWJ0bGUg4oCUIHVuZGVybGluZSBvbiBob3ZlciBvbmx5XCI+XG4gICAgICAgICAgPExpbmsgaHJlZj1cIiNsaW5rXCIgc3VidGxlPlxuICAgICAgICAgICAgU3VidGxlIGxpbmtcbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZG93bmxvYWRcIj5cbiAgICAgICAgICA8TGluayBocmVmPVwiZGF0YTp0ZXh0L3BsYWluLGdhbGxlcnlcIiBkb3dubG9hZD1cImdhbGxlcnkudHh0XCI+XG4gICAgICAgICAgICBEb3dubG9hZCBsaW5rXG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInN1cmZhY2VcIixcbiAgICB0aXRsZTogXCJTdXJmYWNlXCIsXG4gICAgY29tcG9uZW50OiBcIlN1cmZhY2VcIixcbiAgICBzdW1tYXJ5OiBcIk93bnMgdmlzdWFsIGNocm9tZSDigJQgYmFja2dyb3VuZCwgYm9yZGVyLCByYWRpdXMsIHNoYWRvdywgcG9zaXRpb25pbmcuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICB7KFtcInBsYWluXCIsIFwicmFpc2VkXCIsIFwic3Vua2VuXCIsIFwiYnViYmxlXCIsIFwiY2hpcFwiLCBcImNhbGxvdXRcIl0gYXMgY29uc3QpLm1hcCgodikgPT4gKFxuICAgICAgICAgIDxTcGVjaW1lbiBrZXk9e3Z9IGNhcHRpb249e2B2YXJpYW50PVwiJHt2fVwiYH0+XG4gICAgICAgICAgICA8U3VyZmFjZSB2YXJpYW50PXt2fSBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCI+XG4gICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJzbVwiPnt2fTwvVGV4dD5cbiAgICAgICAgICAgIDwvU3VyZmFjZT5cbiAgICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICApKX1cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J3ZhcmlhbnQ6IFwiZmxvYXRpbmdcIiAvIFwic3RpY2t5LWJhclwiIHBpbiB0byB0aGUgdmlld3BvcnQg4oCUIG9taXR0ZWQgaGVyZSc+XG4gICAgICAgICAgPFRleHQgc2l6ZT1cInhzXCIgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICBQb3NpdGlvbmFsIHZhcmlhbnRzIGFyZSBwcmV2aWV3ZWQgaW4gY29udGV4dCwgbm90IGluIGEgZ3JpZCBjZWxsLlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgey8qIEVxdWFsIHNxdWFyZSBib3hlcy4gVGhlIGxhYmVsIHVzZWQgdG8gc2l6ZSBlYWNoIG9uZSwgc28gdGhlIGxhZGRlclxuICAgICAgICAgICAgd2FzIGNvbXBhcmVkIGFjcm9zcyBmaXZlIGRpZmZlcmVudCB3aWR0aHMgKDQ2LzM1LzM2LzI4LzM1IHB4KSBhbmRcbiAgICAgICAgICAgIGBmdWxsYCByZW5kZXJlZCBhcyBhIHN0YWRpdW0gdGFsbGVyIHRoYW4gaXQgd2FzIHdpZGUgcmF0aGVyIHRoYW4gYVxuICAgICAgICAgICAgY2lyY2xlLiBBIHNxdWFyZSBib3ggbWFrZXMgOTk5OXB4IHJlYWQgYXMgdGhlIGNpcmNsZSBpdCBpcy4gKi99XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwicmFkaXVzOiBub25lIC8gc20gLyBtZCAvIGxnIC8gZnVsbFwiPlxuICAgICAgICAgIHsoW1wibm9uZVwiLCBcInNtXCIsIFwibWRcIiwgXCJsZ1wiLCBcImZ1bGxcIl0gYXMgY29uc3QpLm1hcCgocikgPT4gKFxuICAgICAgICAgICAgPFN1cmZhY2VcbiAgICAgICAgICAgICAga2V5PXtyfVxuICAgICAgICAgICAgICB2YXJpYW50PVwicmFpc2VkXCJcbiAgICAgICAgICAgICAgYm9yZGVyPVwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgIHJhZGl1cz17cn1cbiAgICAgICAgICAgICAgd2lkdGg9XCI1NnB4XCJcbiAgICAgICAgICAgICAgaGVpZ2h0PVwiNTZweFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxMYXlvdXQgaGVpZ2h0PVwiMTAwJVwiIGFsaWduSXRlbXM9XCJjZW50ZXJcIiBqdXN0aWZ5SXRlbXM9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8VGV4dCBzaXplPVwieHNcIj57cn08L1RleHQ+XG4gICAgICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICAgICAgPC9TdXJmYWNlPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImJvcmRlcjogbm9uZSAvIGRlZmF1bHQgLyBzdHJvbmdcIj5cbiAgICAgICAgICB7KFtcIm5vbmVcIiwgXCJkZWZhdWx0XCIsIFwic3Ryb25nXCJdIGFzIGNvbnN0KS5tYXAoKGIpID0+IChcbiAgICAgICAgICAgIDxTdXJmYWNlIGtleT17Yn0gYm9yZGVyPXtifSByYWRpdXM9XCJtZFwiIHBhZGRpbmc9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgICAgICAgPFRleHQgc2l6ZT1cInhzXCI+e2J9PC9UZXh0PlxuICAgICAgICAgICAgPC9TdXJmYWNlPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICB7LyogT24gdGhlIHN1bmtlbiBjYXJkIGV2ZXJ5IHNwZWNpbWVuIHNpdHMgb24sIGEgc29mdCBzaGFkb3cgbGFuZHMgZ3JleVxuICAgICAgICAgICAgb24gZ3JleSBhbmQgbm9uZSBvZiB0aGUgdGhyZWUgc3RlcHMgcmVhZC4gVGhleSBhcmUgY2FzdCBvbiBhIHBsYWluXG4gICAgICAgICAgICBzdXJmYWNlIGhlcmUsIGFuZCBlYWNoIGJveCBpcyBzcXVhcmUgYW5kIGVxdWFsIHNvIHRoZSBvbmx5IHRoaW5nXG4gICAgICAgICAgICB0aGF0IGRpZmZlcnMgYmV0d2VlbiB0aGVtIGlzIHRoZSBzaGFkb3cuICovfVxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNoYWRvdzogc20gLyBtZCAvIGxnXCI+XG4gICAgICAgICAgPFN1cmZhY2UgYmFja2dyb3VuZD1cInZhcigtLXBvbGx5LXN1cmZhY2UpXCIgcmFkaXVzPVwibWRcIiBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbGcpXCI+XG4gICAgICAgICAgICA8Q2x1c3RlciBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS14bClcIj5cbiAgICAgICAgICAgICAgeyhbXCJzbVwiLCBcIm1kXCIsIFwibGdcIl0gYXMgY29uc3QpLm1hcCgocykgPT4gKFxuICAgICAgICAgICAgICAgIDxTdXJmYWNlIGtleT17c30gdmFyaWFudD1cInJhaXNlZFwiIHNoYWRvdz17c30gcmFkaXVzPVwibWRcIiB3aWR0aD1cIjU2cHhcIiBoZWlnaHQ9XCI1NnB4XCI+XG4gICAgICAgICAgICAgICAgICA8TGF5b3V0IGhlaWdodD1cIjEwMCVcIiBhbGlnbkl0ZW1zPVwiY2VudGVyXCIganVzdGlmeUl0ZW1zPVwiY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxUZXh0IHNpemU9XCJ4c1wiPntzfTwvVGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICAgICAgICAgIDwvU3VyZmFjZT5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICAgICAgPC9TdXJmYWNlPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNhcmRcIixcbiAgICB0aXRsZTogXCJDYXJkXCIsXG4gICAgY29tcG9uZW50OiBcIkNhcmRcIixcbiAgICBzdW1tYXJ5OiBcIkNvbXBvdW5kIG9mIFN1cmZhY2VzIOKAlCBhIHJhaXNlZCBSb290IHdyYXBwaW5nIEhlYWRlciwgQm9keSwgYW5kIEZvb3RlciBzbG90cy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiQ2FyZC5Sb290ID4gSGVhZGVyIC8gQm9keSAvIEZvb3RlclwiIHdpZGU+XG4gICAgICAgIDxDYXJkLlJvb3QgcGFkZGluZz1cIjBcIj5cbiAgICAgICAgICA8Q2FyZC5IZWFkZXIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiPlxuICAgICAgICAgICAgPFRleHQgd2VpZ2h0PVwiYm9sZFwiPkNhcmQgaGVhZGVyPC9UZXh0PlxuICAgICAgICAgIDwvQ2FyZC5IZWFkZXI+XG4gICAgICAgICAgPENhcmQuQm9keSBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCI+XG4gICAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgICAgVGhlIGJvZHkgc2xvdCBjYXJyaWVzIHRoZSBtYWluIGNvbnRlbnQuIEVhY2ggc2xvdCBhY2NlcHRzIHRoZSBmdWxsIFN1cmZhY2VQcm9wcywgc28gaXRcbiAgICAgICAgICAgICAgY2FuIGJlIHJldGludGVkIG9yIHJlcGFkZGVkIHdpdGhvdXQgcmVhY2hpbmcgcGFzdCB0aGUgcHJpbWl0aXZlLlxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvQ2FyZC5Cb2R5PlxuICAgICAgICAgIDxDYXJkLkZvb3RlciBwYWRkaW5nPVwidmFyKC0tcG9sbHktc3BhY2UtbWQpXCI+XG4gICAgICAgICAgICA8QnV0dG9uIHNpemU9XCJzbWFsbFwiIHRpZXI9XCJwcmltYXJ5XCIgbGFiZWw9XCJGb290ZXIgYWN0aW9uXCIgLz5cbiAgICAgICAgICA8L0NhcmQuRm9vdGVyPlxuICAgICAgICA8L0NhcmQuUm9vdD5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInNrZWxldG9uXCIsXG4gICAgdGl0bGU6IFwiU2tlbGV0b25cIixcbiAgICBjb21wb25lbnQ6IFwiU2tlbGV0b25cIixcbiAgICBzdW1tYXJ5OiBcIlNoaW1tZXJpbmcgcGxhY2Vob2xkZXIgZm9yIGxvYWRpbmcgc3RhdGVzLiBBbmltYXRpb24gaG9ub3VycyByZWR1Y2VkLW1vdGlvbi5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIHsoW1widGV4dFwiLCBcInJlY3RcIiwgXCJjaXJjbGVcIl0gYXMgY29uc3QpLm1hcCgodikgPT4gKFxuICAgICAgICAgIDxTcGVjaW1lbiBrZXk9e3Z9IGNhcHRpb249e2B2YXJpYW50PVwiJHt2fVwiYH0+XG4gICAgICAgICAgICA8U2tlbGV0b24gdmFyaWFudD17dn0gLz5cbiAgICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICApKX1cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjdXN0b20gd2lkdGggKyBoZWlnaHRcIj5cbiAgICAgICAgICA8U2tlbGV0b24gdmFyaWFudD1cInJlY3RcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9ezY0fSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcIm91dHB1dFwiLFxuICAgIHRpdGxlOiBcIk91dHB1dFwiLFxuICAgIGNvbXBvbmVudDogXCJPdXRwdXRcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJNb25vc3BhY2Ugb3V0cHV0IHJlZ2lvbiBmb3IgY29tbWFuZCByZXN1bHRzIG9yIGxvZ3Mg4oCUIHdyYXBzLCBvciBzY3JvbGxzIGhvcml6b250YWxseS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGVmYXVsdCDigJQgd3JhcHNcIiB3aWRlPlxuICAgICAgICAgIDxPdXRwdXQ+cG9sbHkgZ2FsbGVyeSDihpIgc2VydmluZyBhdCBodHRwOi8vbG9jYWxob3N0OjQzMjE8L091dHB1dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJzY3JvbGwg4oCUIHNpbmdsZSBsb25nIGxpbmUgc2Nyb2xscyBpbnN0ZWFkIG9mIHdyYXBwaW5nXCIgd2lkZT5cbiAgICAgICAgICA8T3V0cHV0IHNjcm9sbD5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgXCIkIHBvbGx5IGdhbGxlcnkgLS1idWlsZCAuL2Rpc3QvZ2FsbGVyeSAgICMgb25lIGxvbmcgbGluZSB0aGF0IHNjcm9sbHMgaG9yaXpvbnRhbGx5IHJhdGhlciB0aGFuIHdyYXBwaW5nIG9udG8gdGhlIG5leHQgcm93XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L091dHB1dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJodG1sXCIsXG4gICAgdGl0bGU6IFwiSHRtbFwiLFxuICAgIGNvbXBvbmVudDogXCJIdG1sXCIsXG4gICAgc3VtbWFyeTogXCJSZW5kZXJzIGEgdHJ1c3RlZCBIVE1MIHN0cmluZy4gVGhlIGNhbGxlciBvd25zIHNhbml0aXNhdGlvbiDigJQgbmV2ZXIgcGFzcyB1c2VyIGlucHV0LlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJodG1sPXt0cnVzdGVkIHN0cmluZ31cIiB3aWRlPlxuICAgICAgICA8SHRtbCBodG1sPVwiPHN0cm9uZz5Cb2xkPC9zdHJvbmc+LCA8ZW0+aXRhbGljPC9lbT4sIGFuZCBhIDxjb2RlPmNvZGUgc3BhbjwvY29kZT4gZnJvbSBhIHRydXN0ZWQgbWFya3VwIHN0cmluZy5cIiAvPlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiY29sbGFwc2libGVcIixcbiAgICB0aXRsZTogXCJDb2xsYXBzaWJsZVwiLFxuICAgIGNvbXBvbmVudDogXCJDb2xsYXBzaWJsZVwiLFxuICAgIHN1bW1hcnk6IFwiTmF0aXZlIDxkZXRhaWxzPi88c3VtbWFyeT4gZGlzY2xvc3VyZSDigJQga2V5Ym9hcmQgYW5kIHNjcmVlbi1yZWFkZXIgYmVoYXZpb3VyIGZyZWUuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNsb3NlZCBieSBkZWZhdWx0XCIgd2lkZT5cbiAgICAgICAgICA8Q29sbGFwc2libGUgc3VtbWFyeT1cIlNob3cgbW9yZSBkZXRhaWxcIj5cbiAgICAgICAgICAgIDxUZXh0PlRoaXMgY29udGVudCBpcyByZXZlYWxlZCB3aGVuIHRoZSBkaXNjbG9zdXJlIGlzIG9wZW5lZC48L1RleHQ+XG4gICAgICAgICAgPC9Db2xsYXBzaWJsZT5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkZWZhdWx0T3BlblwiIHdpZGU+XG4gICAgICAgICAgPENvbGxhcHNpYmxlIHN1bW1hcnk9XCJPcGVuIGZyb20gdGhlIHN0YXJ0XCIgZGVmYXVsdE9wZW4+XG4gICAgICAgICAgICA8VGV4dD5UaGlzIGNvbGxhcHNpYmxlIHJlbmRlcnMgZXhwYW5kZWQgb24gZmlyc3QgcGFpbnQuPC9UZXh0PlxuICAgICAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZWRpdGFibGUgZmllbGQgaW4gdGhlIHN1bW1hcnkg4oCUIFNwYWNlL0VudGVyIG5vIGxvbmdlciBjb2xsYXBzZSBpdFwiIHdpZGU+XG4gICAgICAgICAgPENvbGxhcHNpYmxlXG4gICAgICAgICAgICBzdW1tYXJ5PXtcbiAgICAgICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZ2FsbGVyeS1jb2xsYXBzaWJsZS1zdW1tYXJ5XCIgcGxhY2Vob2xkZXI9XCJUeXBlIGEgc3BhY2UgaGVyZeKAplwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRleHQ+VGhlIGhlYWRlciBndWFyZCBjYW5jZWxzIHRoZSBkaXNjbG9zdXJlIHRvZ2dsZSBmb3IgdGV4dC1lbnRyeSBmaWVsZHMuPC9UZXh0PlxuICAgICAgICAgIDwvQ29sbGFwc2libGU+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwibGF5b3V0XCIsXG4gICAgdGl0bGU6IFwiTGF5b3V0XCIsXG4gICAgY29tcG9uZW50OiBcIkxheW91dFwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIlRoZSBncmlkIHByaW1pdGl2ZS4gUHJvcHMgbWFwIHRvIENTUyBjdXN0b20gcHJvcGVydGllcyDigJQgbm8gaGFuZC13cml0dGVuIGZsZXggb3IgZ3JpZC5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSdjb2x1bW5zPVwiMWZyIDFmciAxZnJcIicgd2lkZT5cbiAgICAgICAgICA8TGF5b3V0IGNvbHVtbnM9XCIxZnIgMWZyIDFmclwiIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICAgICAgPEJveD4xZnI8L0JveD5cbiAgICAgICAgICAgIDxCb3g+MWZyPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PjFmcjwvQm94PlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0nY29sdW1ucz1cImF1dG8gMWZyIGF1dG9cIicgd2lkZT5cbiAgICAgICAgICA8TGF5b3V0IGNvbHVtbnM9XCJhdXRvIDFmciBhdXRvXCIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCIgYWxpZ25JdGVtcz1cImNlbnRlclwiPlxuICAgICAgICAgICAgPEJveD5hdXRvPC9Cb3g+XG4gICAgICAgICAgICA8Qm94PjFmcjwvQm94PlxuICAgICAgICAgICAgPEJveD5hdXRvPC9Cb3g+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwic3RhY2tPbk1vYmlsZSDigJQgY29sbGFwc2VzIHRvIG9uZSBjb2x1bW4g4omkNjQwcHhcIiB3aWRlPlxuICAgICAgICAgIDxMYXlvdXQgY29sdW1ucz1cIjFmciAxZnJcIiBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIiBzdGFja09uTW9iaWxlPlxuICAgICAgICAgICAgPEJveD5TaWRlIGJ5IHNpZGUsIHRoZW4gc3RhY2tlZDwvQm94PlxuICAgICAgICAgICAgPEJveD5TaWRlIGJ5IHNpZGUsIHRoZW4gc3RhY2tlZDwvQm94PlxuICAgICAgICAgIDwvTGF5b3V0PlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNsdXN0ZXJcIixcbiAgICB0aXRsZTogXCJDbHVzdGVyXCIsXG4gICAgY29tcG9uZW50OiBcIkNsdXN0ZXJcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJXcmFwcGluZyByb3cgb2YgdmFyaWFibGUtd2lkdGggaXRlbXMg4oCUIGNoaXBzLCB0YWdzLCBidXR0b24gZ3JvdXBzLiBSZWZsb3dzIGFzIHNwYWNlIHJ1bnMgb3V0LlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJnYXAg4oCUIGl0ZW1zIHdyYXAgb250byBuZXcgcm93c1wiIHdpZGU+XG4gICAgICAgIDxDbHVzdGVyIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiPlxuICAgICAgICAgIHtbXCJHcm9jZXJpZXNcIiwgXCJFcnJhbmRzXCIsIFwiSG9tZVwiLCBcIkdhcmRlblwiLCBcIkZpbmFuY2VcIiwgXCJUcmF2ZWxcIiwgXCJIZWFsdGhcIiwgXCJBZG1pblwiXS5tYXAoXG4gICAgICAgICAgICAodGFnKSA9PiAoXG4gICAgICAgICAgICAgIDxCYWRnZSBrZXk9e3RhZ30gdmFyaWFudD1cImluZm9cIj5cbiAgICAgICAgICAgICAgICB7dGFnfVxuICAgICAgICAgICAgICA8L0JhZGdlPlxuICAgICAgICAgICAgKVxuICAgICAgICAgICl9XG4gICAgICAgIDwvQ2x1c3Rlcj5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInRhYnNcIixcbiAgICB0aXRsZTogXCJUYWJzXCIsXG4gICAgY29tcG9uZW50OiBcIlRhYnNcIixcbiAgICBzdW1tYXJ5OiBcIkhvcml6b250YWwgbmF2IHdpdGggYW4gYWN0aXZlLXRhYiBhY2NlbnQuIERpc3BhdGNoZXMgYW4gYWN0aW9uIHBlciB0YWIuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImludGVyYWN0aXZlIOKAlCBvbmUgdGFiIGRpc2FibGVkXCIgd2lkZT5cbiAgICAgICAgPFRhYnNcbiAgICAgICAgICB0YWJzPXtbXG4gICAgICAgICAgICB7IGlkOiBcIm92ZXJ2aWV3XCIsIGxhYmVsOiBcIk92ZXJ2aWV3XCIgfSxcbiAgICAgICAgICAgIHsgaWQ6IFwiYWN0aXZpdHlcIiwgbGFiZWw6IFwiQWN0aXZpdHlcIiB9LFxuICAgICAgICAgICAgeyBpZDogXCJzZXR0aW5nc1wiLCBsYWJlbDogXCJTZXR0aW5nc1wiIH0sXG4gICAgICAgICAgICB7IGlkOiBcImFyY2hpdmVkXCIsIGxhYmVsOiBcIkFyY2hpdmVkXCIsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgXX1cbiAgICAgICAgICBhY3RpdmVUYWI9eyRnYWxsZXJ5VGFiLnZhbHVlfVxuICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6c2V0LXRhYlwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkdhbGxlcnkgdGFic1wiXG4gICAgICAgIC8+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJjaGVja2JveFwiLFxuICAgIHRpdGxlOiBcIkNoZWNrYm94XCIsXG4gICAgY29tcG9uZW50OiBcIkNoZWNrYm94XCIsXG4gICAgc3VtbWFyeTogXCJOYXRpdmUgY2hlY2tib3ggaW4gYSBsYWJlbC4gQSBwbGFpbiBib29sZWFuIGlzIGNvbnRyb2xsZWQ7IGEgU2lnbmFsIGJpbmRzIGl0c2VsZi5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwidW5jaGVja2VkXCI+XG4gICAgICAgICAgPENoZWNrYm94IGxhYmVsPVwiVW5jaGVja2VkXCIgY2hlY2tlZD17ZmFsc2V9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY2hlY2tlZFwiPlxuICAgICAgICAgIDxDaGVja2JveCBsYWJlbD1cIkNoZWNrZWRcIiBjaGVja2VkPXt0cnVlfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPENoZWNrYm94IGxhYmVsPVwiRGlzYWJsZWRcIiBjaGVja2VkPXt0cnVlfSBkaXNhYmxlZCAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImNoZWNrZWQ9e3NpZ25hbH0g4oCUIGNsaWNrIHRvIHRvZ2dsZVwiPlxuICAgICAgICAgIDxDaGVja2JveCBsYWJlbD1cIkJvdW5kIHRvIGEgc2lnbmFsXCIgY2hlY2tlZD17JGdhbGxlcnlDaGVja2VkfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInRvZ2dsZVwiLFxuICAgIHRpdGxlOiBcIlRvZ2dsZVwiLFxuICAgIGNvbXBvbmVudDogXCJUb2dnbGVcIixcbiAgICBzdW1tYXJ5OiBcIlN3aXRjaC1yb2xlIGNoZWNrYm94LiBQYXNzaXZlIOKAlCB0aGUgY2FsbGVyIGRyaXZlcyB0aGUgY2hlY2tlZCBzdGF0ZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwib2ZmXCI+XG4gICAgICAgICAgPFRvZ2dsZSBsYWJlbD1cIk9mZlwiIGNoZWNrZWQ9e2ZhbHNlfSAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm9uXCI+XG4gICAgICAgICAgPFRvZ2dsZSBsYWJlbD1cIk9uXCIgY2hlY2tlZD17dHJ1ZX0gLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZFwiPlxuICAgICAgICAgIDxUb2dnbGUgbGFiZWw9XCJEaXNhYmxlZFwiIGNoZWNrZWQ9e3RydWV9IGRpc2FibGVkIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwidGV4dC1pbnB1dFwiLFxuICAgIHRpdGxlOiBcIlRleHRJbnB1dFwiLFxuICAgIGNvbXBvbmVudDogXCJUZXh0SW5wdXRcIixcbiAgICBzdW1tYXJ5OlxuICAgICAgXCJTaWduYWwtZnJpZW5kbHkgbmF0aXZlIGlucHV0LiBBIHBsYWluIHN0cmluZyBpcyB1bmNvbnRyb2xsZWQ7IGEgU2lnbmFsIGlzIGNvbnRyb2xsZWQuIFwiICtcbiAgICAgIFwiaW5wdXRUeXBlIHBpY2tzIHRoZSBuYXRpdmUga2V5Ym9hcmQgYW5kIHZhbGlkYXRpb247IGVycm9yIHJlbmRlcnMgYSBsaW5rZWQgbWVzc2FnZS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSd2YXJpYW50PVwic2luZ2xlXCIgd2l0aCBwbGFjZWhvbGRlcic+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1zaW5nbGVcIiBwbGFjZWhvbGRlcj1cIlR5cGUgaGVyZeKAplwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPSd2YXJpYW50PVwibXVsdGlcIic+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1tdWx0aVwiIHZhcmlhbnQ9XCJtdWx0aVwiIHJvd3M9ezN9IHBsYWNlaG9sZGVyPVwiTXVsdGlwbGUgbGluZXPigKZcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0naW5wdXRUeXBlPVwiZW1haWxcIic+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1lbWFpbFwiIGlucHV0VHlwZT1cImVtYWlsXCIgcGxhY2Vob2xkZXI9XCJhZGFAZXhhbXBsZS5jb21cIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0naW5wdXRUeXBlPVwibnVtYmVyXCIgd2l0aCBtaW4vbWF4L3N0ZXAnPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tbnVtYmVyXCIgaW5wdXRUeXBlPVwibnVtYmVyXCIgbWluPXswfSBtYXg9ezEwfSBzdGVwPXsxfSB2YWx1ZT1cIjVcIiAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImVycm9yIOKAlCBsaW5rZWQgbWVzc2FnZSwgbWFya3MgaW52YWxpZFwiPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tZXJyb3JcIiB2YWx1ZT1cIm5vdC1hbi1lbWFpbFwiIGVycm9yPVwiRW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLlwiIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiaW52YWxpZFwiPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8taW52YWxpZFwiIHZhbHVlPVwibm90LWFuLWVtYWlsXCIgaW52YWxpZCAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImRpc2FibGVkXCI+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1kaXNhYmxlZFwiIHZhbHVlPVwiRGlzYWJsZWRcIiBkaXNhYmxlZCAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInJlYWRPbmx5XCI+XG4gICAgICAgICAgPFRleHRJbnB1dCBuYW1lPVwiZGVtby1yZWFkb25seVwiIHZhbHVlPVwiUmVhZCBvbmx5XCIgcmVhZE9ubHkgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ2YWx1ZT17c2lnbmFsfSDigJQgY29udHJvbGxlZFwiPlxuICAgICAgICAgIDxUZXh0SW5wdXQgbmFtZT1cImRlbW8tY29udHJvbGxlZFwiIHZhbHVlPXskZ2FsbGVyeVRleHR9IC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwic2VsZWN0XCIsXG4gICAgdGl0bGU6IFwiU2VsZWN0XCIsXG4gICAgY29tcG9uZW50OiBcIlNlbGVjdFwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIkRyb3Bkb3duIG9mIG9wdGlvbnMgYm91bmQgdG8gYSBTaWduYWw8U2V0Pi4gU2luZ2xlIHJlcGxhY2VzLCBtdWx0aSB0b2dnbGVzLiBcIiArXG4gICAgICAnY2xlYXJhYmxlIHByZXBlbmRzIGFuIFwiQW55IOKAplwiIHJvdyBzbyBhbiBvcHRpb25hbCBmaWx0ZXIgaGFzIGEgcGF0aCBiYWNrIHRvIHVuc2V0LicsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInNpbmdsZS1zZWxlY3RcIj5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIlBpY2sgb25lXCJcbiAgICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJjb21ldFwiLCBsYWJlbDogXCJDb21ldFwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibmVidWxhXCIsIGxhYmVsOiBcIk5lYnVsYVwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwicXVhc2FyXCIsIGxhYmVsOiBcIlF1YXNhclwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9eyRnYWxsZXJ5U2VsZWN0U2luZ2xlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY2xlYXJhYmxlIOKAlCBzaW5nbGUtc2VsZWN0IHdpdGggYW4g4oCcQW55IOKApuKAnSByb3dcIj5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBsYWJlbD1cIkZpbHRlciBieVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFueSBvYmplY3RcIlxuICAgICAgICAgICAgY2xlYXJhYmxlXG4gICAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwiY29tZXRcIiwgbGFiZWw6IFwiQ29tZXRcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcIm5lYnVsYVwiLCBsYWJlbDogXCJOZWJ1bGFcIiB9LFxuICAgICAgICAgICAgICB7IHZhbHVlOiBcInF1YXNhclwiLCBsYWJlbDogXCJRdWFzYXJcIiB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIHNlbGVjdGVkPXskZ2FsbGVyeVNlbGVjdENsZWFyYWJsZX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm11bHRpU2VsZWN0XCI+XG4gICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgbGFiZWw9XCJQaWNrIHNldmVyYWxcIlxuICAgICAgICAgICAgbXVsdGlTZWxlY3RcbiAgICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJjb21ldFwiLCBsYWJlbDogXCJDb21ldFwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibmVidWxhXCIsIGxhYmVsOiBcIk5lYnVsYVwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwicXVhc2FyXCIsIGxhYmVsOiBcIlF1YXNhclwiIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgc2VsZWN0ZWQ9eyRnYWxsZXJ5U2VsZWN0TXVsdGl9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJsb25nIGxhYmVsIOKAlCB0cnVuY2F0ZXMsIGNhcmV0IHN0YXlzIG9uIHRoZSByb3cgKHBvbGx5IzE4MClcIj5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBpZD1cImdhbGxlcnktc2VsZWN0LWxvbmdcIlxuICAgICAgICAgICAgbGFiZWw9XCJMb25nIGxhYmVsXCJcbiAgICAgICAgICAgIG9wdGlvbnM9e0xPTkdfU0VMRUNUX09QVElPTlN9XG4gICAgICAgICAgICBzZWxlY3RlZD17JGdhbGxlcnlTZWxlY3RMb25nfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICA8Lz5cbiAgICApLFxuICB9LFxuICB7XG4gICAgaWQ6IFwiZmlsZS1pbnB1dFwiLFxuICAgIHRpdGxlOiBcIkZpbGVJbnB1dFwiLFxuICAgIGNvbXBvbmVudDogXCJGaWxlSW5wdXRcIixcbiAgICBzdW1tYXJ5OiBcIlN0eWxlZCB3cmFwcGVyIG92ZXIgYSBuYXRpdmUgZmlsZSBwaWNrZXIuIEhhbmRzIHRoZSBjaG9zZW4gRmlsZUxpc3QgdG8gb25GaWxlcy5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwib25GaWxlcyDigJQgcGljayBhIGZpbGVcIj5cbiAgICAgICAgICA8RmlsZUlucHV0XG4gICAgICAgICAgICBsYWJlbD1cIkNob29zZSBmaWxlXCJcbiAgICAgICAgICAgIG9uRmlsZXM9eyhmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAkZ2FsbGVyeUZpbGVOYW1lLnZhbHVlID0gZmlsZXNbMF0/Lm5hbWUgPz8gXCLigJRcIjtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJhY2NlcHQgKyBtdWx0aXBsZVwiPlxuICAgICAgICAgIDxGaWxlSW5wdXRcbiAgICAgICAgICAgIGxhYmVsPVwiQ2hvb3NlIGltYWdlc1wiXG4gICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS8qXCJcbiAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICBvbkZpbGVzPXsoZmlsZXMpID0+IHtcbiAgICAgICAgICAgICAgJGdhbGxlcnlGaWxlTmFtZS52YWx1ZSA9IGZpbGVzWzBdPy5uYW1lID8/IFwi4oCUXCI7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICA8RmlsZUlucHV0XG4gICAgICAgICAgICBsYWJlbD1cIkRpc2FibGVkXCJcbiAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICBvbkZpbGVzPXsoKSA9PiB7XG4gICAgICAgICAgICAgIC8qIGRpc2FibGVkIOKAlCBuZXZlciBpbnZva2VkICovXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwibGFzdCBwaWNrZWQgZmlsZVwiIHdpZGU+XG4gICAgICAgICAgPFRleHQgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICBMYXN0IHBpY2tlZDogPENvZGU+eyRnYWxsZXJ5RmlsZU5hbWUudmFsdWV9PC9Db2RlPlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJkcm9wZG93blwiLFxuICAgIHRpdGxlOiBcIkRyb3Bkb3duXCIsXG4gICAgY29tcG9uZW50OiBcIkRyb3Bkb3duXCIsXG4gICAgc3VtbWFyeTpcbiAgICAgIFwiTG93LWxldmVsIHRyaWdnZXIgKyBwb3BvdmVyIHBsdW1iaW5nLiBUaGUgcHJpbWl0aXZlIGl0c2VsZiBoYXMgbm8gY2hyb21lIOKAlCBcIiArXG4gICAgICBcImNvbnN1bWVycyAoU2VsZWN0LCBBY3Rpb25TZWxlY3QpIHdyYXAgaXQgd2l0aCB0aGUgc3R5bGVkIHRyaWdnZXIgYW5kIGNhcmV0LlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJ0cmlnZ2VyIGRyZXNzZWQgdmlhIHRyaWdnZXJDbGFzc05hbWUgKyBkYXRhLW9wZW5cIj5cbiAgICAgICAgPERyb3Bkb3duXG4gICAgICAgICAgaXNPcGVuPXskZ2FsbGVyeURyb3Bkb3duT3Blbn1cbiAgICAgICAgICB0cmlnZ2VyQ2xhc3NOYW1lPVwiZ2FsbGVyeS1kcm9wZG93bi10cmlnZ2VyXCJcbiAgICAgICAgICB0cmlnZ2VyPXtcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxzcGFuPk9wZW4gbWVudTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJnYWxsZXJ5LWRyb3Bkb3duLWNhcmV0XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgIH1cbiAgICAgICAgPlxuICAgICAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteHMpXCIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiPlxuICAgICAgICAgICAgPFRleHQ+Rmlyc3QgaXRlbTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0PlNlY29uZCBpdGVtPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQ+VGhpcmQgaXRlbTwvVGV4dD5cbiAgICAgICAgICA8L0xheW91dD5cbiAgICAgICAgPC9Ecm9wZG93bj5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImFjdGlvbi1pbnB1dFwiLFxuICAgIHRpdGxlOiBcIkFjdGlvbklucHV0XCIsXG4gICAgY29tcG9uZW50OiBcIkFjdGlvbklucHV0XCIsXG4gICAgc3VtbWFyeTogXCJEdWFsLW1vZGUgdmlldy9lZGl0IGZpZWxkLiBDbGljayB0byBlZGl0OyBjb21taXQgZGlzcGF0Y2hlcyBhbiBhY3Rpb24uXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8PlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj0nc2F2ZU9uPVwiYmx1clwiJz5cbiAgICAgICAgICA8QWN0aW9uSW5wdXRcbiAgICAgICAgICAgIHZhbHVlPVwiQ2xpY2sgdG8gZWRpdCwgY29tbWl0cyBvbiBibHVyXCJcbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIHNhdmVPbj1cImJsdXJcIlxuICAgICAgICAgICAgYXJpYUxhYmVsPVwiQmx1ci1jb21taXQgZGVtb1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J3NhdmVPbj1cImVudGVyXCInPlxuICAgICAgICAgIDxBY3Rpb25JbnB1dFxuICAgICAgICAgICAgdmFsdWU9XCJFZGl0IGFuZCBwcmVzcyBFbnRlclwiXG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgICBzYXZlT249XCJlbnRlclwiXG4gICAgICAgICAgICBhcmlhTGFiZWw9XCJFbnRlci1jb21taXQgZGVtb1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J2lucHV0VHlwZT1cImRhdGVcIic+XG4gICAgICAgICAgPEFjdGlvbklucHV0XG4gICAgICAgICAgICB2YWx1ZT1cIjIwMjYtMDUtMjJcIlxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgaW5wdXRUeXBlPVwiZGF0ZVwiXG4gICAgICAgICAgICBzYXZlT249XCJibHVyXCJcbiAgICAgICAgICAgIGFyaWFMYWJlbD1cIkRhdGUgZGVtb1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249J3ZhcmlhbnQ9XCJtdWx0aVwiJz5cbiAgICAgICAgICA8QWN0aW9uSW5wdXRcbiAgICAgICAgICAgIHZhbHVlPVwiQSBsb25nZXIsIG11bHRpLWxpbmUgdmFsdWVcIlxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgdmFyaWFudD1cIm11bHRpXCJcbiAgICAgICAgICAgIHNhdmVPbj1cImJsdXJcIlxuICAgICAgICAgICAgYXJpYUxhYmVsPVwiTXVsdGktbGluZSBkZW1vXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImxhc3QgY29tbWl0dGVkIHZhbHVlXCIgd2lkZT5cbiAgICAgICAgICA8VGV4dCB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICAgIExhc3QgY29tbWl0dGVkOiA8Q29kZT57JGdhbGxlcnlDb21taXR0ZWQudmFsdWV9PC9Db2RlPlxuICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgIDwvPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJhY3Rpb24tc2VsZWN0XCIsXG4gICAgdGl0bGU6IFwiQWN0aW9uU2VsZWN0XCIsXG4gICAgY29tcG9uZW50OiBcIkFjdGlvblNlbGVjdFwiLFxuICAgIHN1bW1hcnk6IFwiU2luZ2xlLXNlbGVjdCB0aGF0IGNvbW1pdHMgYSBwbGFpbiBzdHJpbmcgdmFsdWUgdGhyb3VnaCB0aGUgYWN0aW9uIHN5c3RlbS5cIixcbiAgICByZW5kZXI6ICgpID0+IChcbiAgICAgIDw+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwiY29tbWl0cyB2aWEgYWN0aW9uXCI+XG4gICAgICAgICAgPEFjdGlvblNlbGVjdFxuICAgICAgICAgICAgbGFiZWw9XCJQcmlvcml0eVwiXG4gICAgICAgICAgICB2YWx1ZT1cIm1lZGl1bVwiXG4gICAgICAgICAgICBvcHRpb25zPXtbXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibG93XCIsIGxhYmVsOiBcIkxvd1wiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwibWVkaXVtXCIsIGxhYmVsOiBcIk1lZGl1bVwiIH0sXG4gICAgICAgICAgICAgIHsgdmFsdWU6IFwiaGlnaFwiLCBsYWJlbDogXCJIaWdoXCIgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBhY3Rpb249XCJnYWxsZXJ5OmNvbW1pdFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJkaXNhYmxlZCDigJQgcmVuZGVycyBhcyBzdGF0aWMgdGV4dFwiPlxuICAgICAgICAgIDxBY3Rpb25TZWxlY3RcbiAgICAgICAgICAgIGxhYmVsPVwiUHJpb3JpdHlcIlxuICAgICAgICAgICAgdmFsdWU9XCJoaWdoXCJcbiAgICAgICAgICAgIG9wdGlvbnM9e1tcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJsb3dcIiwgbGFiZWw6IFwiTG93XCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJtZWRpdW1cIiwgbGFiZWw6IFwiTWVkaXVtXCIgfSxcbiAgICAgICAgICAgICAgeyB2YWx1ZTogXCJoaWdoXCIsIGxhYmVsOiBcIkhpZ2hcIiB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJsb25nIGxhYmVsIOKAlCB0cnVuY2F0ZXMsIGNhcmV0IHN0YXlzIG9uIHRoZSByb3cgKHBvbGx5IzE4MClcIj5cbiAgICAgICAgICA8QWN0aW9uU2VsZWN0XG4gICAgICAgICAgICBpZD1cImdhbGxlcnktYWN0aW9uLXNlbGVjdC1sb25nXCJcbiAgICAgICAgICAgIGxhYmVsPVwiTG9uZyBsYWJlbFwiXG4gICAgICAgICAgICB2YWx1ZT1cImxvbmdcIlxuICAgICAgICAgICAgb3B0aW9ucz17TE9OR19TRUxFQ1RfT1BUSU9OU31cbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImxvbmcgbGFiZWwsIGRpc2FibGVkIOKAlCBvbmUgcm93IGF0IHRoZSBjb250cm9sIGhlaWdodFwiPlxuICAgICAgICAgIDxBY3Rpb25TZWxlY3RcbiAgICAgICAgICAgIGlkPVwiZ2FsbGVyeS1hY3Rpb24tc2VsZWN0LWxvbmctZGlzYWJsZWRcIlxuICAgICAgICAgICAgbGFiZWw9XCJMb25nIGxhYmVsXCJcbiAgICAgICAgICAgIHZhbHVlPVwibG9uZ1wiXG4gICAgICAgICAgICBvcHRpb25zPXtMT05HX1NFTEVDVF9PUFRJT05TfVxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cImVtcHR5IOKAlCB0aGUgcGxhY2Vob2xkZXIgaXMgdGhlIHNhbWUgYm94IGFzIGEgdmFsdWVcIj5cbiAgICAgICAgICA8QWN0aW9uU2VsZWN0XG4gICAgICAgICAgICBpZD1cImdhbGxlcnktYWN0aW9uLXNlbGVjdC1sb25nLWVtcHR5XCJcbiAgICAgICAgICAgIGxhYmVsPVwiTG9uZyBwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICB2YWx1ZT1cIlwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17TE9OR19TRUxFQ1RfTEFCRUx9XG4gICAgICAgICAgICBvcHRpb25zPXtMT05HX1NFTEVDVF9PUFRJT05TfVxuICAgICAgICAgICAgYWN0aW9uPVwiZ2FsbGVyeTpjb21taXRcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU3BlY2ltZW4+XG4gICAgICAgIDxTcGVjaW1lbiBjYXB0aW9uPVwid2lkZSDigJQgc2hvcnQgbGFiZWwsIHN0aWxsIG9uZSBjZW50cmVkIHJvd1wiPlxuICAgICAgICAgIDxBY3Rpb25TZWxlY3RcbiAgICAgICAgICAgIGlkPVwiZ2FsbGVyeS1hY3Rpb24tc2VsZWN0LXdpZGVcIlxuICAgICAgICAgICAgbGFiZWw9XCJXaWRlXCJcbiAgICAgICAgICAgIHZhbHVlPVwic2hvcnRcIlxuICAgICAgICAgICAgb3B0aW9ucz17TE9OR19TRUxFQ1RfT1BUSU9OU31cbiAgICAgICAgICAgIGFjdGlvbj1cImdhbGxlcnk6Y29tbWl0XCJcbiAgICAgICAgICAgIHdpZGVcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImFjdGlvbi1mb3JtXCIsXG4gICAgdGl0bGU6IFwiQWN0aW9uRm9ybVwiLFxuICAgIGNvbXBvbmVudDogXCJBY3Rpb25Gb3JtXCIsXG4gICAgc3VtbWFyeTogXCJXcmFwcyBhIG5hdGl2ZSBmb3JtIHdpdGggdGhlIGFjdGlvbiBwYXR0ZXJuIOKAlCBzdWJtaXQgZGlzcGF0Y2hlcyB0aGUgZm9ybSBoYW5kbGVyLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJmb3JtIHdpdGggVGV4dElucHV0IGZpZWxkcyArIGEgc3VibWl0IEJ1dHRvblwiIHdpZGU+XG4gICAgICAgIDxBY3Rpb25Gb3JtIGZvcm09e2dhbGxlcnlGb3JtfSBhcmlhLWxhYmVsPVwiR2FsbGVyeSBkZW1vIGZvcm1cIj5cbiAgICAgICAgICA8TGF5b3V0IGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiPlxuICAgICAgICAgICAgPFRleHQgYXM9XCJsYWJlbFwiIHNpemU9XCJzbVwiIHRvbmU9XCJtdXRlZFwiIGh0bWxGb3I9XCJnYWxsZXJ5LWZvcm0tbmFtZVwiPlxuICAgICAgICAgICAgICBGdWxsIG5hbWVcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0SW5wdXQgaWQ9XCJnYWxsZXJ5LWZvcm0tbmFtZVwiIG5hbWU9XCJmdWxsTmFtZVwiIHBsYWNlaG9sZGVyPVwiQWRhIExvdmVsYWNlXCIgLz5cbiAgICAgICAgICAgIDxUZXh0IGFzPVwibGFiZWxcIiBzaXplPVwic21cIiB0b25lPVwibXV0ZWRcIiBodG1sRm9yPVwiZ2FsbGVyeS1mb3JtLWVtYWlsXCI+XG4gICAgICAgICAgICAgIEVtYWlsXG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8VGV4dElucHV0IGlkPVwiZ2FsbGVyeS1mb3JtLWVtYWlsXCIgbmFtZT1cImVtYWlsXCIgcGxhY2Vob2xkZXI9XCJhZGFAZXhhbXBsZS5jb21cIiAvPlxuICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPVwic3VibWl0XCIgdGllcj1cInByaW1hcnlcIiBjb2xvcj1cImluZm9cIiBsYWJlbD1cIlN1Ym1pdFwiIC8+XG4gICAgICAgICAgPC9MYXlvdXQ+XG4gICAgICAgIDwvQWN0aW9uRm9ybT5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcIm1vZGFsXCIsXG4gICAgdGl0bGU6IFwiTW9kYWxcIixcbiAgICBjb21wb25lbnQ6IFwiTW9kYWxcIixcbiAgICBzdW1tYXJ5OiBcIkNvbXBvdW5kIGRpYWxvZyDigJQgZm9jdXMgdHJhcCwgRXNjYXBlIGhhbmRsaW5nLCBwb3J0YWwsIHNjcm9sbCBsb2NrLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJvcGVucyBhIHBvcnRhbGxlZCBkaWFsb2dcIj5cbiAgICAgICAgPEJ1dHRvbiB0aWVyPVwicHJpbWFyeVwiIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTptb2RhbC1vcGVuXCIgbGFiZWw9XCJPcGVuIG1vZGFsXCIgLz5cbiAgICAgICAgPE1vZGFsLlJvb3RcbiAgICAgICAgICB3aGVuPXskZ2FsbGVyeU1vZGFsT3Blbn1cbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiB7XG4gICAgICAgICAgICAkZ2FsbGVyeU1vZGFsT3Blbi52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIH19XG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkRlbW8gbW9kYWxcIlxuICAgICAgICA+XG4gICAgICAgICAgPE1vZGFsLkJhY2tkcm9wIC8+XG4gICAgICAgICAgPE1vZGFsLkNvbnRlbnQ+XG4gICAgICAgICAgICA8TW9kYWwuSGVhZGVyPlxuICAgICAgICAgICAgICA8TW9kYWwuVGl0bGU+TW9kYWwgdGl0bGU8L01vZGFsLlRpdGxlPlxuICAgICAgICAgICAgPC9Nb2RhbC5IZWFkZXI+XG4gICAgICAgICAgICA8TW9kYWwuQm9keT5cbiAgICAgICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICAgICAgRm9jdXMgaXMgdHJhcHBlZCBpbnNpZGUgdGhlIGRpYWxvZywgRXNjYXBlIGNsb3NlcyBpdCwgdGhlIGJhY2tkcm9wIGNsaWNrIGNsb3NlcyBpdCxcbiAgICAgICAgICAgICAgICBhbmQgdGhlIGJvZHkgc2Nyb2xsIGlzIGxvY2tlZCB3aGlsZSBpdCBpcyBvcGVuLlxuICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICA8L01vZGFsLkJvZHk+XG4gICAgICAgICAgICA8TW9kYWwuRm9vdGVyPlxuICAgICAgICAgICAgICA8TW9kYWwuQ2xvc2U+XG4gICAgICAgICAgICAgICAgPEJ1dHRvbiB0aWVyPVwicHJpbWFyeVwiIGxhYmVsPVwiRG9uZVwiIC8+XG4gICAgICAgICAgICAgIDwvTW9kYWwuQ2xvc2U+XG4gICAgICAgICAgICA8L01vZGFsLkZvb3Rlcj5cbiAgICAgICAgICA8L01vZGFsLkNvbnRlbnQ+XG4gICAgICAgIDwvTW9kYWwuUm9vdD5cbiAgICAgIDwvU3BlY2ltZW4+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcImNvbmZpcm0tZGlhbG9nXCIsXG4gICAgdGl0bGU6IFwiQ29uZmlybURpYWxvZ1wiLFxuICAgIGNvbXBvbmVudDogXCJDb25maXJtRGlhbG9nXCIsXG4gICAgc3VtbWFyeTogXCJQcm9taXNlLXJldHVybmluZyBjb25maXJtYXRpb24uIGNvbmZpcm0oKSByZXNvbHZlcyB0cnVlIG9yIGZhbHNlLlwiLFxuICAgIHJlbmRlcjogKCkgPT4gKFxuICAgICAgPD5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjb25maXJtKCkg4oCUIHN0YW5kYXJkXCI+XG4gICAgICAgICAgPEJ1dHRvbiB0aWVyPVwic2Vjb25kYXJ5XCIgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OmNvbmZpcm1cIiBsYWJlbD1cIkNvbmZpcm0gYW4gYWN0aW9uXCIgLz5cbiAgICAgICAgPC9TcGVjaW1lbj5cbiAgICAgICAgPFNwZWNpbWVuIGNhcHRpb249XCJjb25maXJtKHsgZGFuZ2VyOiB0cnVlIH0pXCI+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdGllcj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbj1cImdhbGxlcnk6Y29uZmlybVwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbi1kYW5nZXI9XCJ0cnVlXCJcbiAgICAgICAgICAgIGxhYmVsPVwiQ29uZmlybSBhIGRlbGV0aW9uXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L1NwZWNpbWVuPlxuICAgICAgPC8+XG4gICAgKSxcbiAgfSxcbiAge1xuICAgIGlkOiBcInRvYXN0XCIsXG4gICAgdGl0bGU6IFwiVG9hc3RcIixcbiAgICBjb21wb25lbnQ6IFwiVG9hc3RcIixcbiAgICBzdW1tYXJ5OiBcIlJlbmRlcnMgdGhlIGdsb2JhbCBlcnJvclN0YXRlIHNpZ25hbC4gU2V2ZXJpdHkgc2V0cyB0aGUgYXJpYS1saXZlIHBvbGl0ZW5lc3MuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cInB1c2ggYSB0b2FzdCBhdCBlYWNoIHNldmVyaXR5XCIgd2lkZT5cbiAgICAgICAgPENsdXN0ZXIgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdGllcj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBjb2xvcj1cImluZm9cIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OnRvYXN0XCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uLXNldmVyaXR5PVwiaW5mb1wiXG4gICAgICAgICAgICBsYWJlbD1cIkluZm8gdG9hc3RcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdGllcj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBjb2xvcj1cIndhcm5pbmdcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb249XCJnYWxsZXJ5OnRvYXN0XCJcbiAgICAgICAgICAgIGRhdGEtYWN0aW9uLXNldmVyaXR5PVwid2FybmluZ1wiXG4gICAgICAgICAgICBsYWJlbD1cIldhcm5pbmcgdG9hc3RcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdGllcj1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBjb2xvcj1cImRhbmdlclwiXG4gICAgICAgICAgICBkYXRhLWFjdGlvbj1cImdhbGxlcnk6dG9hc3RcIlxuICAgICAgICAgICAgZGF0YS1hY3Rpb24tc2V2ZXJpdHk9XCJlcnJvclwiXG4gICAgICAgICAgICBsYWJlbD1cIkVycm9yIHRvYXN0XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICA8L1NwZWNpbWVuPlxuICAgICksXG4gIH0sXG4gIHtcbiAgICBpZDogXCJvdmVybGF5LXJvb3RcIixcbiAgICB0aXRsZTogXCJPdmVybGF5Um9vdFwiLFxuICAgIGNvbXBvbmVudDogXCJPdmVybGF5Um9vdFwiLFxuICAgIHN1bW1hcnk6XG4gICAgICBcIkluZnJhc3RydWN0dXJlLCBub3QgYSB2aXN1YWwgY29udHJvbC4gTW91bnQgaXQgb25jZSBuZWFyIHRoZSBhcHAgcm9vdDsgTW9kYWwsIFRvYXN0LCBhbmQgXCIgK1xuICAgICAgXCJDb25maXJtRGlhbG9nIHBvcnRhbCBpbnRvIGl0LiBUaGUgZ2FsbGVyeSBzaGVsbCBhbHJlYWR5IG1vdW50cyBvbmUg4oCUIHRoaXMgc2VjdGlvbiBkb2N1bWVudHMgaXQuXCIsXG4gICAgcmVuZGVyOiAoKSA9PiAoXG4gICAgICA8U3BlY2ltZW4gY2FwdGlvbj1cIm1vdW50ZWQgb25jZSBhdCB0aGUgYXBwIHJvb3RcIiB3aWRlPlxuICAgICAgICA8VGV4dD5cbiAgICAgICAgICA8Q29kZT57XCI8T3ZlcmxheVJvb3QgLz5cIn08L0NvZGU+IHJlbmRlcnMgdGhlIHBvcnRhbCB0YXJnZXQgdGhlIG92ZXJsYXkgcHJpbWl0aXZlcyBuZWVkLlxuICAgICAgICAgIFdpdGhvdXQgaXQsIHRoZSBNb2RhbCAvIFRvYXN0IC8gQ29uZmlybURpYWxvZyBzcGVjaW1lbnMgYWJvdmUgd291bGQgaGF2ZSBub3doZXJlIHRvXG4gICAgICAgICAgcmVuZGVyLiBJdCBkcmF3cyBub3RoaW5nIGl0c2VsZjsgdGhlIGdhbGxlcnkgc2hlbGwgbW91bnRzIHRoZSBzaW5nbGUgbGl2ZSBpbnN0YW5jZS5cbiAgICAgICAgPC9UZXh0PlxuICAgICAgPC9TcGVjaW1lbj5cbiAgICApLFxuICB9LFxuXTtcbiIsCiAgICAiLyoqXG4gKiBUaGUgZ2FsbGVyeSBhcHAgcm9vdCDigJQgYSBzaW5nbGUgc2Nyb2xsYWJsZSBwYWdlIGNhdGFsb2d1aW5nIGV2ZXJ5IHBvbGx5LXVpXG4gKiBwcmltaXRpdmUgaW4gaXRzIGNvbmZpZ3VyYXRpb25zLiBBbiBpbi1wYWdlIG5hdiBqdW1wcyBiZXR3ZWVuIHNlY3Rpb25zOyBhXG4gKiB0aGVtZSB0b2dnbGUgZm9yY2VzIGxpZ2h0L2Rhcmsgb24gdGhlIHBhbmVsIHN1YnRyZWUgdmlhIGBkYXRhLXBvbGx5LXRoZW1lYFxuICogc28gYm90aCBwYWxldHRlcyBjYW4gYmUgaW5zcGVjdGVkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIE9TIHNldHRpbmcuXG4gKlxuICogVGhlIG92ZXJsYXkgaG9zdHMgKE92ZXJsYXlSb290IC8gVG9hc3QuVmlld3BvcnQgLyBDb25maXJtRGlhbG9nLkhvc3QpIGFyZVxuICogbW91bnRlZCBoZXJlIG9uY2UsIHNvIHRoZSBNb2RhbCwgVG9hc3QsIGFuZCBDb25maXJtRGlhbG9nIHNwZWNpbWVucyBoYXZlIGFcbiAqIHBvcnRhbCB0YXJnZXQg4oCUIHRoZSBzYW1lIHdpcmluZyBhIHJlYWwgY29uc3VtZXIgYXBwIGRvZXMgYXQgaXRzIHJvb3QuXG4gKi9cblxuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBDbHVzdGVyLFxuICBDb25maXJtRGlhbG9nLFxuICBMYXlvdXQsXG4gIE92ZXJsYXlSb290LFxuICBTdXJmYWNlLFxuICBUZXh0LFxuICBUb2FzdCxcbn0gZnJvbSBcIi4uLy4uLy4uL3NyYy9wb2xseS11aVwiO1xuaW1wb3J0IHsgVEhFTUVTIH0gZnJvbSBcIi4vYWN0aW9ucy50c1wiO1xuaW1wb3J0IHsgR0FMTEVSWV9TRUNUSU9OUywgdHlwZSBHYWxsZXJ5U2VjdGlvbiB9IGZyb20gXCIuL3NwZWNpbWVucy50c3hcIjtcbmltcG9ydCB7ICRnYWxsZXJ5VGhlbWUgfSBmcm9tIFwiLi9zdG9yZXMudHNcIjtcblxuLyoqIEEgY2FwaXRhbGlzZWQgbGFiZWwgZm9yIGEgdGhlbWUgb3B0aW9uLiAqL1xuZnVuY3Rpb24gdGhlbWVMYWJlbCh0aGVtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRoZW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhlbWUuc2xpY2UoMSk7XG59XG5cbi8qKiBPbmUgY2F0YWxvZ3VlZCBjb21wb25lbnQ6IGEgbGFiZWxsZWQgbGFuZG1hcmsgd2l0aCBhIGdyaWQgb2Ygc3BlY2ltZW5zLiAqL1xuZnVuY3Rpb24gU2VjdGlvbihwcm9wczogeyBzZWN0aW9uOiBHYWxsZXJ5U2VjdGlvbiB9KSB7XG4gIGNvbnN0IHsgc2VjdGlvbiB9ID0gcHJvcHM7XG4gIGNvbnN0IGhlYWRpbmdJZCA9IGAke3NlY3Rpb24uaWR9LWhlYWRpbmdgO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICBhcz1cInNlY3Rpb25cIlxuICAgICAgaWQ9e3NlY3Rpb24uaWR9XG4gICAgICB2YXJpYW50PVwicGxhaW5cIlxuICAgICAgY2xhc3NOYW1lPVwiZ2FsbGVyeS1zZWN0aW9uXCJcbiAgICAgIGFyaWEtbGFiZWxsZWRieT17aGVhZGluZ0lkfVxuICAgID5cbiAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2Utc20pXCI+XG4gICAgICAgIDxoMiBpZD17aGVhZGluZ0lkfSBjbGFzcz1cImdhbGxlcnktc2VjdGlvbi10aXRsZVwiPlxuICAgICAgICAgIHtzZWN0aW9uLnRpdGxlfVxuICAgICAgICA8L2gyPlxuICAgICAgICA8VGV4dCBhcz1cInBcIiB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICB7c2VjdGlvbi5zdW1tYXJ5fVxuICAgICAgICA8L1RleHQ+XG4gICAgICAgIDxMYXlvdXRcbiAgICAgICAgICBjb2x1bW5zPVwicmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KG1pbigxMDAlLCAxNHJlbSksIDFmcikpXCJcbiAgICAgICAgICBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1tZClcIlxuICAgICAgICA+XG4gICAgICAgICAge3NlY3Rpb24ucmVuZGVyKCl9XG4gICAgICAgIDwvTGF5b3V0PlxuICAgICAgPC9MYXlvdXQ+XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gR2FsbGVyeUFwcCgpIHtcbiAgY29uc3QgdGhlbWUgPSAkZ2FsbGVyeVRoZW1lLnZhbHVlO1xuICByZXR1cm4gKFxuICAgIDxTdXJmYWNlXG4gICAgICB2YXJpYW50PVwicmFpc2VkXCJcbiAgICAgIHBhZGRpbmc9XCJjbGFtcCh2YXIoLS1wb2xseS1zcGFjZS1zbSksIDN2dywgdmFyKC0tcG9sbHktc3BhY2UteGwpKVwiXG4gICAgICBkYXRhLWdhbGxlcnktcGFuZWw9XCJ0cnVlXCJcbiAgICAgIGRhdGEtcG9sbHktdGhlbWU9e3RoZW1lID09PSBcInN5c3RlbVwiID8gdW5kZWZpbmVkIDogdGhlbWV9XG4gICAgPlxuICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1sZylcIj5cbiAgICAgICAgPExheW91dCBnYXA9XCJ2YXIoLS1wb2xseS1zcGFjZS1zbSlcIj5cbiAgICAgICAgICA8aDEgY2xhc3M9XCJnYWxsZXJ5LXRpdGxlXCI+UG9sbHkgVUkgZ2FsbGVyeTwvaDE+XG4gICAgICAgICAgPFRleHQgYXM9XCJwXCIgdG9uZT1cIm11dGVkXCI+XG4gICAgICAgICAgICBFdmVyeSA8VGV4dCB3ZWlnaHQ9XCJtZWRpdW1cIj5AZmFpcmZveC9wb2xseS91aTwvVGV4dD4gcHJpbWl0aXZlLCBpbiBpdHMgY29uZmlndXJhdGlvbnMg4oCUXG4gICAgICAgICAgICBhIHJlZmVyZW5jZSBmb3IgYnVpbGRpbmcgcG9sbHkgYXBwcywgYW5kIGEgc2luZ2xlIHN1cmZhY2UgZm9yIGFjY2Vzc2liaWxpdHkgYW5kXG4gICAgICAgICAgICB2aXN1YWwtcmVncmVzc2lvbiBjaGVja3MuXG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L0xheW91dD5cblxuICAgICAgICA8U3VyZmFjZSB2YXJpYW50PVwiY2FsbG91dFwiIHJhZGl1cz1cIm1kXCIgcGFkZGluZz1cInZhcigtLXBvbGx5LXNwYWNlLW1kKVwiPlxuICAgICAgICAgIDxDbHVzdGVyIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXNtKVwiIGFsaWduPVwiY2VudGVyXCI+XG4gICAgICAgICAgICA8VGV4dCBzaXplPVwic21cIiB0b25lPVwibXV0ZWRcIj5cbiAgICAgICAgICAgICAgVGhlbWVcbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIHtUSEVNRVMubWFwKCh0KSA9PiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e3R9XG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICB0aWVyPXt0ID09PSB0aGVtZSA/IFwicHJpbWFyeVwiIDogXCJ0ZXJ0aWFyeVwifVxuICAgICAgICAgICAgICAgIGRhdGEtYWN0aW9uPVwiZ2FsbGVyeTpzZXQtdGhlbWVcIlxuICAgICAgICAgICAgICAgIGRhdGEtYWN0aW9uLXRoZW1lPXt0fVxuICAgICAgICAgICAgICAgIGxhYmVsPXt0aGVtZUxhYmVsKHQpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9DbHVzdGVyPlxuICAgICAgICA8L1N1cmZhY2U+XG5cbiAgICAgICAgPG5hdiBhcmlhLWxhYmVsPVwiQ29tcG9uZW50c1wiPlxuICAgICAgICAgIDxDbHVzdGVyIGdhcD1cInZhcigtLXBvbGx5LXNwYWNlLXhzKVwiPlxuICAgICAgICAgICAge0dBTExFUllfU0VDVElPTlMubWFwKChzZWN0aW9uKSA9PiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBrZXk9e3NlY3Rpb24uaWR9XG4gICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICB0aWVyPVwidGVydGlhcnlcIlxuICAgICAgICAgICAgICAgIGhyZWY9e2AjJHtzZWN0aW9uLmlkfWB9XG4gICAgICAgICAgICAgICAgbGFiZWw9e3NlY3Rpb24udGl0bGV9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L0NsdXN0ZXI+XG4gICAgICAgIDwvbmF2PlxuXG4gICAgICAgIDxMYXlvdXQgZ2FwPVwidmFyKC0tcG9sbHktc3BhY2UteGwpXCI+XG4gICAgICAgICAge0dBTExFUllfU0VDVElPTlMubWFwKChzZWN0aW9uKSA9PiAoXG4gICAgICAgICAgICA8U2VjdGlvbiBrZXk9e3NlY3Rpb24uaWR9IHNlY3Rpb249e3NlY3Rpb259IC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvTGF5b3V0PlxuICAgICAgPC9MYXlvdXQ+XG5cbiAgICAgIHsvKiBNb3VudGVkIG9uY2Ugc28gdGhlIG92ZXJsYXkgc3BlY2ltZW5zIGhhdmUgYSBwb3J0YWwgdGFyZ2V0LiAqL31cbiAgICAgIDxPdmVybGF5Um9vdCAvPlxuICAgICAgPFRvYXN0LlZpZXdwb3J0IC8+XG4gICAgICA8Q29uZmlybURpYWxvZy5Ib3N0IC8+XG4gICAgPC9TdXJmYWNlPlxuICApO1xufVxuIiwKICAgICIvKipcbiAqIFRoZSBnYWxsZXJ5J3MgYnJvd3NlciBlbnRyeSBwb2ludC4gQnVuZGxlZCBieSBzZXJ2ZXIudHMgKG9uZSBCdW4uYnVpbGQgcGFzcylcbiAqIOKAlCBpdHMgdHJhbnNpdGl2ZSBgLm1vZHVsZS5jc3NgIGltcG9ydHMgcGx1cyB0aGUgZ2xvYmFsIHN0eWxlc2hlZXRzIGJlbG93IGNvbWVcbiAqIG91dCBhcyBhIHNpbmdsZSBDU1MgYXJ0aWZhY3QgdGhlIHNlcnZlciBzZXJ2ZXMgYWxvbmdzaWRlIHRoaXMgc2NyaXB0LlxuICpcbiAqIEJvb3QgbWlycm9ycyBhIHJlYWwgY29uc3VtZXIgYXBwOiBiaW5kIHRoZSBkZW1vIGZvcm0sIGluc3RhbGwgdGhlIGRvY3VtZW50XG4gKiBldmVudCBkZWxlZ2F0aW9uIHRoYXQgcm91dGVzIGBkYXRhLWFjdGlvbmAgY2xpY2tzL3N1Ym1pdHMgaW50byB0aGUgZ2FsbGVyeSdzXG4gKiBhY3Rpb24gcmVnaXN0cnksIHRoZW4gcmVuZGVyLiBUaGUgb3ZlcmxheSBob3N0cyBsaXZlIGluc2lkZSA8R2FsbGVyeUFwcCAvPi5cbiAqL1xuXG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tIFwicHJlYWN0XCI7XG5pbXBvcnQgeyBpbnN0YWxsRXZlbnREZWxlZ2F0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL3NyYy9hY3Rpb25zXCI7XG5pbXBvcnQgeyBHQUxMRVJZX0FDVElPTlMgfSBmcm9tIFwiLi9hY3Rpb25zLnRzXCI7XG5pbXBvcnQgeyBHYWxsZXJ5QXBwIH0gZnJvbSBcIi4vZ2FsbGVyeS1hcHAudHN4XCI7XG5pbXBvcnQgeyB0eXBlIEdhbGxlcnlTdG9yZXMsIGdhbGxlcnlGb3JtIH0gZnJvbSBcIi4vc3RvcmVzLnRzXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi9zcmMvcG9sbHktdWkvdGhlbWUuY3NzXCI7XG5pbXBvcnQgXCIuLi8uLi8uLi9zcmMvcG9sbHktdWkvc3R5bGVzLmNzc1wiO1xuaW1wb3J0IFwiLi9nYWxsZXJ5LmNzc1wiO1xuXG5jb25zdCBzdG9yZXM6IEdhbGxlcnlTdG9yZXMgPSB7fTtcbmdhbGxlcnlGb3JtLmJpbmRTdG9yZXMoKCkgPT4gc3RvcmVzKTtcblxuaW5zdGFsbEV2ZW50RGVsZWdhdGlvbihhc3luYyAoZGlzcGF0Y2gpID0+IHtcbiAgY29uc3QgaGFuZGxlciA9IEdBTExFUllfQUNUSU9OU1tkaXNwYXRjaC5hY3Rpb25dO1xuICBpZiAoaGFuZGxlcikge1xuICAgIGF3YWl0IGhhbmRsZXIoe1xuICAgICAgc3RvcmVzLFxuICAgICAgZXZlbnQ6IGRpc3BhdGNoLmV2ZW50LFxuICAgICAgZWxlbWVudDogZGlzcGF0Y2guZWxlbWVudCxcbiAgICAgIGRhdGE6IGRpc3BhdGNoLmRhdGEsXG4gICAgfSk7XG4gIH1cbn0pO1xuXG5jb25zdCByb290ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhcHBcIikgPz8gZG9jdW1lbnQuYm9keTtcbnJlbmRlcig8R2FsbGVyeUFwcCAvPiwgcm9vdCk7XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsSUFBSTtBQUFKLElBQU07QUFBTixJQUFRO0FBQVIsSUFBVTtBQUFWLElBQVk7QUFBWixJQUFjO0FBQWQsSUFBZ0I7QUFBaEIsSUFBa0I7QUFBbEIsSUFBb0I7QUFBcEIsSUFBc0I7QUFBdEIsSUFBd0I7QUFBeEIsSUFBMEI7QUFBMUIsSUFBNEI7QUFBNUIsSUFBOEI7QUFBOUIsSUFBZ0M7QUFBaEMsSUFBa0M7QUFBbEMsSUFBb0MsSUFB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QUFHLE1BQUssRUFBRSxPQUFLLEtBQUcsRUFBRSxDQUFDO0FBQUEsRUFBQztBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsS0FBVSxJQUFFLEVBQUUsT0FBWCxRQUFzQixFQUFFLE9BQVI7QUFBQSxJQUFZLE9BQU8sRUFBRSxNQUFJLEVBQUUsSUFBSSxPQUFLLE1BQUssRUFBRSxJQUFJLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxNQUFDLElBQVMsS0FBTixRQUFlLEVBQUUsT0FBUjtBQUFBLFFBQVksT0FBTyxFQUFFLE1BQUksRUFBRSxJQUFJLE9BQUssRUFBRTtBQUFBLEtBQUksR0FBRSxFQUFFLENBQUM7QUFBQTtBQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUU7QUFBQSxHQUFFLENBQUMsRUFBRSxRQUFNLEVBQUUsTUFBSSxTQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUcsQ0FBQyxFQUFFLFNBQU8sS0FBRyxFQUFFLHdCQUFzQixJQUFFLEVBQUUsc0JBQW9CLEdBQUcsQ0FBQztBQUFBO0FBQUUsU0FBUyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUc7QUFBQSxJQUFDLFNBQVEsR0FBRSxJQUFFLEVBQUUsRUFBRTtBQUFBLE1BQVEsRUFBRSxTQUFPLEtBQUcsRUFBRSxLQUFLLENBQUMsR0FBRSxJQUFFLEVBQUUsTUFBTSxHQUFFLElBQUUsRUFBRSxRQUFPLEVBQUUsQ0FBQztBQUFBLFlBQUU7QUFBQSxJQUFRLEVBQUUsU0FBTyxFQUFFLE1BQUk7QUFBQTtBQUFBO0FBQUcsU0FBUyxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsSUFBRSxLQUFHLEVBQUUsT0FBSyxHQUFFLElBQUUsRUFBRTtBQUFBLEVBQU8sS0FBSSxJQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsSUFBRSxFQUFFLElBQUUsR0FBRTtBQUFBLEtBQVcsSUFBRSxFQUFFLElBQUksT0FBZixTQUFxQixJQUFNLEVBQUUsT0FBTixNQUFXLEVBQUUsRUFBRSxRQUFNLEdBQUUsRUFBRSxNQUFJLEdBQUUsSUFBRSxFQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxJQUFFLEVBQUUsS0FBSSxFQUFFLE9BQUssRUFBRSxPQUFLLEVBQUUsUUFBTSxFQUFFLE9BQUssRUFBRSxFQUFFLEtBQUksTUFBSyxDQUFDLEdBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSSxFQUFFLE9BQUssR0FBRSxDQUFDLElBQVMsS0FBTixRQUFlLEtBQU4sU0FBVSxJQUFFLEtBQUksSUFBRSxDQUFDLEVBQUUsSUFBRSxFQUFFLFNBQU8sRUFBRSxRQUFNLEVBQUUsT0FBSyxJQUFFLEVBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxHQUFFLEtBQUcsRUFBRSxRQUFNLEVBQUUsTUFBSSxTQUFtQixPQUFPLEVBQUUsUUFBckIsY0FBb0MsTUFBSixZQUFNLElBQUUsSUFBRSxNQUFJLElBQUUsRUFBRSxjQUFhLEVBQUUsT0FBSztBQUFBLEVBQUksT0FBTyxFQUFFLE1BQUksR0FBRTtBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxJQUFFLEVBQUUsUUFBTyxJQUFFLEdBQUUsSUFBRTtBQUFBLEVBQUUsS0FBSSxFQUFFLE1BQUksSUFBSSxNQUFNLENBQUMsR0FBRSxJQUFFLEVBQUUsSUFBRSxHQUFFO0FBQUEsS0FBVyxJQUFFLEVBQUUsT0FBWCxRQUEyQixPQUFPLEtBQWxCLGFBQWlDLE9BQU8sS0FBbkIsY0FBZ0MsT0FBTyxLQUFqQixZQUE4QixPQUFPLEtBQWpCLFlBQThCLE9BQU8sS0FBakIsWUFBb0IsRUFBRSxlQUFhLFNBQU8sSUFBRSxFQUFFLElBQUksS0FBRyxFQUFFLE1BQUssR0FBRSxNQUFLLE1BQUssSUFBSSxJQUFFLEVBQUUsQ0FBQyxJQUFFLElBQUUsRUFBRSxJQUFJLEtBQUcsRUFBRSxHQUFFLEVBQUMsVUFBUyxFQUFDLEdBQUUsTUFBSyxNQUFLLElBQUksSUFBVyxFQUFFLGdCQUFOLGFBQW1CLEVBQUUsTUFBSSxJQUFFLElBQUUsRUFBRSxJQUFJLEtBQUcsRUFBRSxFQUFFLE1BQUssRUFBRSxPQUFNLEVBQUUsS0FBSSxFQUFFLE1BQUksRUFBRSxNQUFJLE1BQUssRUFBRSxHQUFHLElBQUUsRUFBRSxJQUFJLEtBQUcsR0FBRSxJQUFFLElBQUUsR0FBRSxFQUFFLEtBQUcsR0FBRSxFQUFFLE1BQUksRUFBRSxNQUFJLEdBQUUsSUFBRSxPQUFVLElBQUUsRUFBRSxNQUFJLEVBQUUsR0FBRSxHQUFFLEdBQUUsQ0FBQyxNQUF0QixPQUEyQixNQUFLLElBQUUsRUFBRSxRQUFNLEVBQUUsT0FBSyxLQUFVLEtBQU4sUUFBZSxFQUFFLE9BQVIsUUFBaUIsS0FBSixPQUFRLElBQUUsSUFBRSxNQUFJLElBQUUsS0FBRyxNQUFpQixPQUFPLEVBQUUsUUFBckIsZUFBNEIsRUFBRSxPQUFLLE1BQUksS0FBRyxNQUFJLEtBQUcsSUFBRSxJQUFFLE1BQUksS0FBRyxJQUFFLElBQUUsT0FBSyxJQUFFLElBQUUsTUFBSSxLQUFJLEVBQUUsT0FBSyxPQUFLLEVBQUUsSUFBSSxLQUFHO0FBQUEsRUFBSyxJQUFHO0FBQUEsSUFBRSxLQUFJLElBQUUsRUFBRSxJQUFFLEdBQUU7QUFBQSxPQUFXLElBQUUsRUFBRSxPQUFYLFNBQW9CLElBQUUsRUFBRSxRQUFSLE1BQWUsRUFBRSxPQUFLLE1BQUksSUFBRSxFQUFFLENBQUMsSUFBRyxFQUFFLEdBQUUsQ0FBQztBQUFBLEVBQUcsT0FBTztBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBSSxHQUFFO0FBQUEsRUFBRSxJQUFlLE9BQU8sRUFBRSxRQUFyQixZQUEwQjtBQUFBLElBQUMsS0FBSSxJQUFFLEVBQUUsS0FBSSxJQUFFLEVBQUUsS0FBRyxJQUFFLEVBQUUsUUFBTztBQUFBLE1BQUksRUFBRSxPQUFLLEVBQUUsR0FBRyxLQUFHLEdBQUUsSUFBRSxFQUFFLEVBQUUsSUFBRyxHQUFFLEdBQUUsQ0FBQztBQUFBLElBQUcsT0FBTztBQUFBLEVBQUM7QUFBQSxFQUFDLEVBQUUsT0FBSyxNQUFJLE1BQUksS0FBRyxFQUFFLFFBQU0sQ0FBQyxFQUFFLGVBQWEsSUFBRSxFQUFFLENBQUMsSUFBRyxFQUFFLGFBQWEsRUFBRSxLQUFJLEtBQUcsSUFBSSxJQUFHLElBQUUsRUFBRTtBQUFBLEVBQUssR0FBRTtBQUFBLElBQUMsSUFBRSxLQUFHLEVBQUU7QUFBQSxFQUFXLFNBQWEsS0FBTixRQUFZLEVBQUUsWUFBTDtBQUFBLEVBQWUsT0FBTztBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLElBQUUsS0FBRyxDQUFDLEdBQVEsS0FBTixRQUFvQixPQUFPLEtBQWxCLGNBQXNCLEVBQUUsQ0FBQyxJQUFFLEVBQUUsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsRUFBRSxHQUFFLENBQUM7QUFBQSxHQUFFLElBQUUsRUFBRSxLQUFLLENBQUMsSUFBRztBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUUsR0FBRTtBQUFBLEVBQUMsSUFBSSxHQUFFLEdBQUUsS0FBTSxLQUFKLEdBQVksTUFBSixNQUFFLEdBQU8sSUFBRSxFQUFFLElBQUcsSUFBUSxLQUFOLFNBQWEsSUFBRSxFQUFFLFFBQVI7QUFBQSxFQUFhLElBQVUsTUFBUCxRQUFnQixLQUFOLFFBQVMsS0FBRyxLQUFHLEVBQUUsT0FBSyxLQUFHLEVBQUU7QUFBQSxJQUFLLE9BQU87QUFBQSxFQUFFLElBQUcsS0FBRyxJQUFFLElBQUU7QUFBQSxJQUFHLEtBQUksSUFBRSxJQUFFLEdBQUUsSUFBRSxJQUFFLEVBQUUsS0FBRyxLQUFHLElBQUUsRUFBRTtBQUFBLE1BQVEsS0FBVSxJQUFFLEVBQUUsSUFBRSxLQUFHLElBQUUsTUFBSSxTQUF0QixTQUFpQyxJQUFFLEVBQUUsUUFBUixLQUFjLEtBQUcsRUFBRSxPQUFLLEtBQUcsRUFBRTtBQUFBLFFBQUssT0FBTztBQUFBO0FBQUEsRUFBRSxPQUFNO0FBQUE7QUFBRyxTQUFTLENBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRTtBQUFBLEVBQU0sRUFBRSxNQUFQLE1BQVUsRUFBRSxZQUFZLEdBQVEsS0FBTixPQUFRLEtBQUcsQ0FBQyxJQUFFLEVBQUUsS0FBUyxLQUFOLE9BQVEsS0FBYSxPQUFPLEtBQWpCLFlBQW9CLEVBQUUsS0FBSyxDQUFDLElBQUUsSUFBRSxJQUFFO0FBQUE7QUFBSyxTQUFTLENBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQUksR0FBRTtBQUFBLEVBQUU7QUFBQSxJQUFFLElBQVksS0FBVDtBQUFBLE1BQVcsSUFBYSxPQUFPLEtBQWpCO0FBQUEsUUFBbUIsRUFBRSxNQUFNLFVBQVE7QUFBQSxNQUFNO0FBQUEsUUFBQyxJQUFhLE9BQU8sS0FBakIsYUFBcUIsRUFBRSxNQUFNLFVBQVEsSUFBRSxLQUFJO0FBQUEsVUFBRSxLQUFJLEtBQUs7QUFBQSxZQUFFLEtBQUcsS0FBSyxLQUFHLEVBQUUsRUFBRSxPQUFNLEdBQUUsRUFBRTtBQUFBLFFBQUUsSUFBRztBQUFBLFVBQUUsS0FBSSxLQUFLO0FBQUEsWUFBRSxLQUFHLEVBQUUsTUFBSSxFQUFFLE1BQUksRUFBRSxFQUFFLE9BQU0sR0FBRSxFQUFFLEVBQUU7QUFBQTtBQUFBLElBQU8sU0FBUSxFQUFFLE1BQVAsT0FBZ0IsRUFBRSxNQUFQO0FBQUEsTUFBVSxJQUFFLE1BQUksSUFBRSxFQUFFLFFBQVEsR0FBRSxJQUFJLElBQUcsSUFBRSxFQUFFLFlBQVksR0FBRSxJQUFFLEtBQUssS0FBaUIsS0FBZCxnQkFBOEIsS0FBYixjQUFlLEVBQUUsTUFBTSxDQUFDLElBQUUsRUFBRSxNQUFNLENBQUMsR0FBRSxFQUFFLE1BQUksRUFBRSxJQUFFLENBQUMsSUFBRyxFQUFFLEVBQUUsSUFBRSxLQUFHLEdBQUUsSUFBRSxJQUFFLEVBQUUsS0FBRyxFQUFFLE1BQUksRUFBRSxLQUFHLEdBQUUsRUFBRSxpQkFBaUIsR0FBRSxJQUFFLElBQUUsR0FBRSxDQUFDLEtBQUcsRUFBRSxvQkFBb0IsR0FBRSxJQUFFLElBQUUsR0FBRSxDQUFDO0FBQUEsSUFBTTtBQUFBLE1BQUMsSUFBaUMsS0FBOUI7QUFBQSxRQUFnQyxJQUFFLEVBQUUsUUFBUSxlQUFjLEdBQUcsRUFBRSxRQUFRLFVBQVMsR0FBRztBQUFBLE1BQU8sU0FBWSxLQUFULFdBQXNCLEtBQVYsWUFBcUIsS0FBUixVQUFtQixLQUFSLFVBQW1CLEtBQVIsVUFBdUIsS0FBWixjQUEyQixLQUFaLGNBQTBCLEtBQVgsYUFBeUIsS0FBWCxhQUFzQixLQUFSLFVBQXNCLEtBQVgsYUFBYyxLQUFLO0FBQUEsUUFBRSxJQUFHO0FBQUEsVUFBQyxFQUFFLEtBQVMsS0FBTixPQUFRLEtBQUc7QUFBQSxVQUFFO0FBQUEsVUFBUSxPQUFNLEdBQUU7QUFBQSxNQUFjLE9BQU8sS0FBbkIsZUFBNkIsS0FBTixRQUFjLE1BQUwsU0FBYSxFQUFFLE1BQVAsTUFBVSxFQUFFLGdCQUFnQixDQUFDLElBQUUsRUFBRSxhQUFhLEdBQWEsS0FBWCxhQUFpQixLQUFILElBQUssS0FBRyxDQUFDO0FBQUE7QUFBQTtBQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLE9BQU8sUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLElBQUcsS0FBSyxHQUFFO0FBQUEsTUFBQyxJQUFJLElBQUUsS0FBSyxFQUFFLEVBQUUsT0FBSztBQUFBLE1BQUcsSUFBUyxFQUFFLE1BQVI7QUFBQSxRQUFXLEVBQUUsS0FBRztBQUFBLE1BQVMsU0FBRyxFQUFFLEtBQUcsRUFBRTtBQUFBLFFBQUc7QUFBQSxNQUFPLE9BQU8sRUFBRSxFQUFFLFFBQU0sRUFBRSxNQUFNLENBQUMsSUFBRSxDQUFDO0FBQUEsSUFBQztBQUFBO0FBQUE7QUFBRyxTQUFTLENBQUMsQ0FBQyxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLElBQUUsRUFBRTtBQUFBLEVBQUssSUFBWSxFQUFFLGdCQUFOO0FBQUEsSUFBa0IsT0FBTztBQUFBLEVBQUssTUFBSSxFQUFFLFFBQU0sSUFBRSxDQUFDLEVBQUUsS0FBRyxFQUFFLE1BQUssSUFBRSxDQUFDLElBQUUsRUFBRSxNQUFJLEVBQUUsR0FBRyxLQUFJLElBQUUsRUFBRSxRQUFNLEVBQUUsQ0FBQztBQUFBLEVBQUU7QUFBQSxJQUFFLElBQWUsT0FBTyxLQUFuQjtBQUFBLE1BQXFCLElBQUc7QUFBQSxRQUFDLElBQUcsSUFBRSxFQUFFLE9BQU0sSUFBRSxFQUFFLGFBQVcsRUFBRSxVQUFVLFFBQU8sS0FBRyxJQUFFLEVBQUUsZ0JBQWMsRUFBRSxFQUFFLE1BQUssSUFBRSxJQUFFLElBQUUsRUFBRSxNQUFNLFFBQU0sRUFBRSxLQUFHLEdBQUUsRUFBRSxNQUFJLEtBQUcsSUFBRSxFQUFFLE1BQUksRUFBRSxLQUFLLEtBQUcsRUFBRSxPQUFLLElBQUUsRUFBRSxNQUFJLElBQUUsSUFBSSxFQUFFLEdBQUUsQ0FBQyxLQUFHLEVBQUUsTUFBSSxJQUFFLElBQUksRUFBRSxHQUFFLENBQUMsR0FBRSxFQUFFLGNBQVksR0FBRSxFQUFFLFNBQU8sSUFBRyxLQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUUsRUFBRSxVQUFRLEVBQUUsUUFBTSxDQUFDLElBQUcsRUFBRSxNQUFJLEdBQUUsSUFBRSxFQUFFLE1BQUksTUFBRyxFQUFFLE1BQUksQ0FBQyxHQUFFLEVBQUUsTUFBSSxDQUFDLElBQUcsS0FBUyxFQUFFLE9BQVIsU0FBYyxFQUFFLE1BQUksRUFBRSxRQUFPLEtBQVMsRUFBRSw0QkFBUixTQUFtQyxFQUFFLE9BQUssRUFBRSxVQUFRLEVBQUUsTUFBSSxFQUFFLENBQUMsR0FBRSxFQUFFLEdBQUcsSUFBRyxFQUFFLEVBQUUsS0FBSSxFQUFFLHlCQUF5QixHQUFFLEVBQUUsR0FBRyxDQUFDLElBQUcsSUFBRSxFQUFFLE9BQU0sSUFBRSxFQUFFLE9BQU0sRUFBRSxNQUFJLEdBQUU7QUFBQSxVQUFFLEtBQVMsRUFBRSw0QkFBUixRQUF3QyxFQUFFLHNCQUFSLFFBQTRCLEVBQUUsbUJBQW1CLEdBQUUsS0FBUyxFQUFFLHFCQUFSLFFBQTJCLEVBQUUsSUFBSSxLQUFLLEVBQUUsaUJBQWlCO0FBQUEsUUFBTTtBQUFBLFVBQUMsSUFBRyxLQUFTLEVBQUUsNEJBQVIsUUFBa0MsTUFBSSxLQUFTLEVBQUUsNkJBQVIsUUFBbUMsRUFBRSwwQkFBMEIsR0FBRSxDQUFDLEdBQUUsRUFBRSxPQUFLLEVBQUUsT0FBSyxDQUFDLEVBQUUsT0FBVyxFQUFFLHlCQUFSLFFBQW9DLEVBQUUsc0JBQXNCLEdBQUUsRUFBRSxLQUFJLENBQUMsTUFBdEMsT0FBd0M7QUFBQSxZQUFDLEVBQUUsT0FBSyxFQUFFLFFBQU0sRUFBRSxRQUFNLEdBQUUsRUFBRSxRQUFNLEVBQUUsS0FBSSxFQUFFLE1BQUksUUFBSSxFQUFFLE1BQUksRUFBRSxLQUFJLEVBQUUsTUFBSSxFQUFFLEtBQUksRUFBRSxJQUFJLEtBQUssUUFBUSxDQUFDLEdBQUU7QUFBQSxjQUFDLE1BQUksRUFBRSxLQUFHO0FBQUEsYUFBRyxHQUFFLEVBQUUsS0FBSyxNQUFNLEVBQUUsS0FBSSxFQUFFLEdBQUcsR0FBRSxFQUFFLE1BQUksQ0FBQyxHQUFFLEVBQUUsSUFBSSxVQUFRLEVBQUUsS0FBSyxDQUFDO0FBQUEsWUFBRTtBQUFBLFVBQU87QUFBQSxVQUFPLEVBQUUsdUJBQVIsUUFBNkIsRUFBRSxvQkFBb0IsR0FBRSxFQUFFLEtBQUksQ0FBQyxHQUFFLEtBQVMsRUFBRSxzQkFBUixRQUE0QixFQUFFLElBQUksS0FBSyxRQUFRLEdBQUU7QUFBQSxZQUFDLEVBQUUsbUJBQW1CLEdBQUUsR0FBRSxDQUFDO0FBQUEsV0FBRTtBQUFBO0FBQUEsUUFBRSxJQUFHLEVBQUUsVUFBUSxHQUFFLEVBQUUsUUFBTSxHQUFFLEVBQUUsTUFBSSxHQUFFLEVBQUUsTUFBSSxPQUFHLElBQUUsRUFBRSxLQUFJLElBQUUsR0FBRTtBQUFBLFVBQUUsRUFBRSxRQUFNLEVBQUUsS0FBSSxFQUFFLE1BQUksT0FBRyxLQUFHLEVBQUUsQ0FBQyxHQUFFLElBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTSxFQUFFLE9BQU0sRUFBRSxPQUFPLEdBQUUsRUFBRSxLQUFLLE1BQU0sRUFBRSxLQUFJLEVBQUUsR0FBRyxHQUFFLEVBQUUsTUFBSSxDQUFDO0FBQUEsUUFBTztBQUFBLGFBQUU7QUFBQSxZQUFDLEVBQUUsTUFBSSxPQUFHLEtBQUcsRUFBRSxDQUFDLEdBQUUsSUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFNLEVBQUUsT0FBTSxFQUFFLE9BQU8sR0FBRSxFQUFFLFFBQU0sRUFBRTtBQUFBLFVBQUcsU0FBTyxFQUFFLE9BQUssRUFBRSxJQUFFO0FBQUEsUUFBSSxFQUFFLFFBQU0sRUFBRSxLQUFVLEVBQUUsbUJBQVIsU0FBMEIsSUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFFLENBQUMsR0FBRSxFQUFFLGdCQUFnQixDQUFDLElBQUcsS0FBRyxDQUFDLEtBQVMsRUFBRSwyQkFBUixTQUFrQyxJQUFFLEVBQUUsd0JBQXdCLEdBQUUsQ0FBQyxJQUFHLElBQVEsS0FBTixRQUFTLEVBQUUsU0FBTyxLQUFTLEVBQUUsT0FBUixPQUFZLEVBQUUsRUFBRSxNQUFNLFFBQVEsSUFBRSxHQUFFLElBQUUsRUFBRSxHQUFFLEVBQUUsQ0FBQyxJQUFFLElBQUUsQ0FBQyxDQUFDLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUMsR0FBRSxFQUFFLE9BQUssRUFBRSxLQUFJLEVBQUUsT0FBSyxNQUFLLEVBQUUsSUFBSSxVQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUUsTUFBSSxFQUFFLE1BQUksRUFBRSxLQUFHO0FBQUEsUUFBTSxPQUFNLEdBQUU7QUFBQSxRQUFDLElBQUcsRUFBRSxNQUFJLE1BQUssS0FBUyxLQUFOO0FBQUEsVUFBUSxJQUFHLEVBQUUsTUFBSztBQUFBLFlBQUMsS0FBSSxFQUFFLE9BQUssSUFBRSxNQUFJLElBQUksS0FBTSxFQUFFLFlBQUwsS0FBZSxFQUFFO0FBQUEsY0FBYSxJQUFFLEVBQUU7QUFBQSxZQUFZLEVBQUUsRUFBRSxRQUFRLENBQUMsS0FBRyxNQUFLLEVBQUUsTUFBSTtBQUFBLFVBQUMsRUFBSztBQUFBLFlBQUMsS0FBSSxJQUFFLEVBQUUsT0FBTztBQUFBLGNBQUssRUFBRSxFQUFFLEVBQUU7QUFBQSxZQUFFLEVBQUUsQ0FBQztBQUFBO0FBQUEsUUFBTztBQUFBLFlBQUUsTUFBSSxFQUFFLEtBQUksRUFBRSxNQUFJLEVBQUUsS0FBSSxFQUFFLFFBQU0sRUFBRSxDQUFDO0FBQUEsUUFBRSxFQUFFLElBQUksR0FBRSxHQUFFLENBQUM7QUFBQTtBQUFBLElBQU87QUFBQSxNQUFNLEtBQU4sUUFBUyxFQUFFLE9BQUssRUFBRSxPQUFLLEVBQUUsTUFBSSxFQUFFLEtBQUksRUFBRSxNQUFJLEVBQUUsT0FBSyxJQUFFLEVBQUUsTUFBSSxFQUFFLEVBQUUsS0FBSSxHQUFFLEdBQUUsR0FBRSxHQUFFLEdBQUUsR0FBRSxHQUFFLENBQUM7QUFBQSxFQUFFLFFBQU8sSUFBRSxFQUFFLFdBQVMsRUFBRSxDQUFDLEdBQUUsTUFBSSxFQUFFLE1BQVMsWUFBRTtBQUFBO0FBQUUsU0FBUyxDQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsTUFBSSxFQUFFLFFBQU0sRUFBRSxJQUFJLE1BQUksT0FBSSxFQUFFLE9BQUssRUFBRSxJQUFJLEtBQUssQ0FBQztBQUFBO0FBQUcsU0FBUyxDQUFDLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLFNBQVEsSUFBRSxFQUFFLElBQUUsRUFBRSxRQUFPO0FBQUEsSUFBSSxFQUFFLEVBQUUsSUFBRyxFQUFFLEVBQUUsSUFBRyxFQUFFLEVBQUUsRUFBRTtBQUFBLEVBQUUsRUFBRSxPQUFLLEVBQUUsSUFBSSxHQUFFLENBQUMsR0FBRSxFQUFFLEtBQUss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SUFBRSxFQUFFLENBQUMsSUFBRSxHQUFPLFdBQUUsQ0FBQyxHQUFFLFFBQVEsQ0FBQyxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRSxNQUFJLEVBQUUsSUFBSSxLQUFHLEVBQUUsR0FBRyxJQUFHLElBQUUsRUFBRSxFQUFFLEdBQUUsQ0FBQztBQUFBLElBQUUsTUFBSSxNQUFJLEVBQUUsTUFBSSxDQUFDLEdBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRSxFQUFFLElBQUksU0FBUyxDQUFDLENBQUM7QUFBQSxHQUFHLEdBQUUsRUFBRSxNQUFJLElBQUUsQ0FBQyxHQUFFLE1BQUs7QUFBQSxJQUFDLElBQUksSUFBRSxRQUFRLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxNQUFDLElBQUcsQ0FBQyxFQUFFLElBQUk7QUFBQSxRQUFJLE9BQU07QUFBQSxNQUFHLElBQUksSUFBRSxFQUFFLElBQUksSUFBSSxHQUFHLE9BQU8sUUFBUSxDQUFDLEdBQUU7QUFBQSxRQUFDLE9BQU8sRUFBRTtBQUFBLE9BQUk7QUFBQSxNQUFFLElBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQyxHQUFFO0FBQUEsUUFBQyxPQUFNLENBQUMsRUFBRTtBQUFBLE9BQUk7QUFBQSxRQUFFLE9BQU0sQ0FBQyxLQUFHLEVBQUUsS0FBSyxNQUFLLEdBQUUsR0FBRSxDQUFDO0FBQUEsTUFBRSxJQUFJLElBQUUsRUFBRSxJQUFJLFVBQVE7QUFBQSxNQUFFLE9BQU8sRUFBRSxLQUFLLFFBQVEsQ0FBQyxHQUFFO0FBQUEsUUFBQyxJQUFHLEVBQUUsS0FBSTtBQUFBLFVBQUMsSUFBSSxJQUFFLEVBQUUsR0FBRztBQUFBLFVBQUcsRUFBRSxLQUFHLEVBQUUsS0FBSSxFQUFFLE1BQVMsV0FBRSxNQUFJLEVBQUUsR0FBRyxPQUFLLElBQUU7QUFBQSxRQUFHO0FBQUEsT0FBRSxHQUFFLEtBQUcsRUFBRSxLQUFLLE1BQUssR0FBRSxHQUFFLENBQUMsS0FBRztBQUFBO0FBQUEsSUFBRyxHQUFFLE1BQUk7QUFBQSxJQUFHLElBQUksSUFBRSxHQUFFLHVCQUFzQixJQUFFLEdBQUU7QUFBQSxJQUFvQixHQUFFLHNCQUFvQixRQUFRLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxNQUFDLElBQUcsS0FBSyxLQUFJO0FBQUEsUUFBQyxJQUFJLElBQUU7QUFBQSxRQUFFLElBQU8sV0FBRSxFQUFFLEdBQUUsR0FBRSxDQUFDLEdBQUUsSUFBRTtBQUFBLE1BQUM7QUFBQSxNQUFDLEtBQUcsRUFBRSxLQUFLLE1BQUssR0FBRSxHQUFFLENBQUM7QUFBQSxPQUFHLEdBQUUsd0JBQXNCO0FBQUEsRUFBQztBQUFBLEVBQUMsT0FBTyxFQUFFLE9BQUssRUFBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxNQUFJLENBQUM7QUFBQSxFQUFFLENBQUMsR0FBRSxPQUFLLEdBQUUsRUFBRSxLQUFJLENBQUMsTUFBSSxFQUFFLEtBQUcsR0FBRSxFQUFFLElBQUUsR0FBRSxHQUFFLElBQUksSUFBSSxLQUFLLENBQUM7QUFBQTtBQUFtRixTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUUsR0FBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTSxFQUFDLFNBQVEsRUFBQztBQUFBLEtBQUcsQ0FBQyxDQUFDO0FBQUE7QUFBdU4sU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxNQUFJLENBQUM7QUFBQSxFQUFFLE9BQU8sR0FBRSxFQUFFLEtBQUksQ0FBQyxNQUFJLEVBQUUsS0FBRyxFQUFFLEdBQUUsRUFBRSxNQUFJLEdBQUUsRUFBRSxNQUFJLElBQUcsRUFBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUUsR0FBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTztBQUFBLEtBQUcsQ0FBQztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEdBQUUsUUFBUSxFQUFFLE1BQUssSUFBRSxHQUFFLE1BQUksQ0FBQztBQUFBLEVBQUUsT0FBTyxFQUFFLElBQUUsR0FBRSxLQUFTLEVBQUUsTUFBUixTQUFhLEVBQUUsS0FBRyxNQUFHLEVBQUUsSUFBSSxFQUFDLElBQUcsRUFBRSxNQUFNLFNBQU8sRUFBRTtBQUFBO0FBQWtPLFNBQVMsRUFBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsR0FBRSxNQUFJLEVBQUU7QUFBQSxFQUFFLElBQUcsQ0FBQyxFQUFFLElBQUc7QUFBQSxJQUFDLFNBQVEsSUFBRSxHQUFFLElBQVcsTUFBUCxRQUFVLENBQUMsRUFBRSxPQUFZLEVBQUUsT0FBVDtBQUFBLE1BQWEsSUFBRSxFQUFFO0FBQUEsSUFBRyxJQUFJLElBQUUsRUFBRSxRQUFNLEVBQUUsTUFBSSxDQUFDLEdBQUUsQ0FBQztBQUFBLElBQUcsRUFBRSxLQUFHLE1BQUksRUFBRSxLQUFHLE1BQUksRUFBRTtBQUFBLEVBQUk7QUFBQSxFQUFDLE9BQU8sRUFBRTtBQUFBO0FBQUcsU0FBUyxFQUFDLEdBQUU7QUFBQSxFQUFDLFNBQVEsRUFBRSxJQUFFLEdBQUUsTUFBTSxLQUFHO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRTtBQUFBLElBQUksSUFBRyxFQUFFLE9BQUs7QUFBQSxNQUFFLElBQUc7QUFBQSxRQUFDLEVBQUUsSUFBSSxLQUFLLEVBQUMsR0FBRSxFQUFFLElBQUksS0FBSyxFQUFDLEdBQUUsRUFBRSxNQUFJLENBQUM7QUFBQSxRQUFFLE9BQU0sR0FBRTtBQUFBLFFBQUMsRUFBRSxNQUFJLENBQUMsR0FBRSxHQUFFLElBQUksR0FBRSxFQUFFLEdBQUc7QUFBQTtBQUFBLEVBQUU7QUFBQTtBQUFFLEdBQUUsTUFBSSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsS0FBRSxNQUFLLE1BQUcsR0FBRSxDQUFDO0FBQUEsR0FBRyxHQUFFLEtBQUcsUUFBUSxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsS0FBRyxFQUFFLE9BQUssRUFBRSxJQUFJLFFBQU0sRUFBRSxNQUFJLEVBQUUsSUFBSSxNQUFLLE1BQUcsR0FBRSxHQUFFLENBQUM7QUFBQSxHQUFHLEdBQUUsTUFBSSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsTUFBRyxHQUFFLENBQUMsR0FBRSxLQUFFO0FBQUEsRUFBRSxJQUFJLEtBQUcsS0FBRSxFQUFFLEtBQUs7QUFBQSxFQUFJLE1BQUksT0FBSSxNQUFHLEVBQUUsTUFBSSxDQUFDLEdBQUUsR0FBRSxNQUFJLENBQUMsR0FBRSxFQUFFLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsRUFBRSxRQUFNLEVBQUUsS0FBRyxFQUFFLE1BQUssRUFBRSxJQUFFLEVBQUUsTUFBUztBQUFBLEdBQUUsTUFBSSxFQUFFLElBQUksS0FBSyxFQUFDLEdBQUUsRUFBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEVBQUUsTUFBSSxDQUFDLEdBQUUsS0FBRSxLQUFJLEtBQUU7QUFBQSxHQUFHLEdBQUUsU0FBTyxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsTUFBRyxHQUFFLENBQUM7QUFBQSxFQUFFLElBQUksSUFBRSxFQUFFO0FBQUEsRUFBSSxLQUFHLEVBQUUsUUFBTSxFQUFFLElBQUksSUFBSSxXQUFhLEdBQUUsS0FBSyxDQUFDLE1BQVosS0FBZSxPQUFJLEdBQUUsMkJBQXlCLEtBQUUsR0FBRSwwQkFBd0IsSUFBRyxFQUFDLElBQUcsRUFBRSxJQUFJLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsRUFBRSxNQUFJLEVBQUUsTUFBSSxFQUFFLElBQUcsRUFBRSxJQUFPO0FBQUEsR0FBRSxJQUFHLEtBQUUsS0FBRTtBQUFBLEdBQU0sR0FBRSxNQUFJLFFBQVEsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsR0FBRTtBQUFBLElBQUMsSUFBRztBQUFBLE1BQUMsRUFBRSxJQUFJLEtBQUssRUFBQyxHQUFFLEVBQUUsTUFBSSxFQUFFLElBQUksT0FBTyxRQUFRLENBQUMsR0FBRTtBQUFBLFFBQUMsT0FBTSxDQUFDLEVBQUUsTUFBSSxH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QUEsSUFBQyxFQUFNLFNBQVEsRUFBRSxNQUFQLElBQVM7QUFBQSxNQUFDLEVBQUUsSUFBRTtBQUFBLE1BQUUsSUFBWSxFQUFFLE1BQU4sV0FBUTtBQUFBLFFBQUMsRUFBRSxFQUFFLElBQUUsRUFBRTtBQUFBLFFBQUUsSUFBWSxFQUFFLE1BQU47QUFBQSxVQUFRLEVBQUUsRUFBRSxJQUFFLEVBQUU7QUFBQSxRQUFFLEVBQUUsSUFBRSxHQUFFO0FBQUEsUUFBRSxFQUFFLElBQU87QUFBQSxRQUFFLEdBQUUsRUFBRSxJQUFFO0FBQUEsUUFBRSxHQUFFLElBQUU7QUFBQSxNQUFDO0FBQUEsTUFBQyxPQUFPO0FBQUEsSUFBQztBQUFBLEVBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUUsR0FBRTtBQUFBLEVBQUMsS0FBSyxJQUFFO0FBQUEsRUFBRSxLQUFLLElBQUU7QUFBQSxFQUFFLEtBQUssSUFBTztBQUFBLEVBQUUsS0FBSyxJQUFPO0FBQUEsRUFBRSxLQUFLLElBQUU7QUFBQSxFQUFFLEtBQUssSUFBUSxLQUFOLE9BQWEsWUFBRSxFQUFFO0FBQUEsRUFBUSxLQUFLLElBQVEsS0FBTixPQUFhLFlBQUUsRUFBRTtBQUFBLEVBQVUsS0FBSyxPQUFXLEtBQU4sT0FBYSxZQUFFLEVBQUU7QUFBQTtBQUFLLEdBQUUsVUFBVSxRQUFNO0FBQUUsR0FBRSxVQUFVLElBQUUsUUFBUSxHQUFFO0FBQUEsRUFBQyxPQUFNO0FBQUE7QUFBSSxHQUFFLFVBQVUsSUFBRSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLE1BQUssSUFBRSxLQUFLO0FBQUEsRUFBRSxJQUFHLE1BQUksS0FBWSxFQUFFLE1BQU4sV0FBUTtBQUFBLElBQUMsRUFBRSxJQUFFO0FBQUEsSUFBRSxLQUFLLElBQUU7QUFBQSxJQUFFLElBQVksTUFBSjtBQUFBLE1BQU0sRUFBRSxJQUFFO0FBQUEsSUFBTztBQUFBLFNBQUUsUUFBUSxHQUFFO0FBQUEsUUFBQyxJQUFJO0FBQUEsU0FBUyxJQUFFLEVBQUUsTUFBWCxRQUFlLEVBQUUsS0FBSyxDQUFDO0FBQUEsT0FBRTtBQUFBLEVBQUM7QUFBQTtBQUFHLEdBQUUsVUFBVSxJQUFFLFFBQVEsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUU7QUFBQSxFQUFLLElBQVksS0FBSyxNQUFULFdBQVc7QUFBQSxJQUFDLE1BQVEsR0FBSixHQUFVLEdBQUosTUFBRTtBQUFBLElBQUksSUFBWSxNQUFKLFdBQU07QUFBQSxNQUFDLEVBQUUsSUFBRTtBQUFBLE1BQUUsRUFBRSxJQUFPO0FBQUEsSUFBQztBQUFBLElBQUMsSUFBWSxNQUFKLFdBQU07QUFBQSxNQUFDLEVBQUUsSUFBRTtBQUFBLE1BQUUsRUFBRSxJQUFPO0FBQUEsSUFBQztBQUFBLElBQUMsSUFBRyxNQUFJLEtBQUssR0FBRTtBQUFBLE1BQUMsS0FBSyxJQUFFO0FBQUEsTUFBRSxJQUFZLE1BQUo7QUFBQSxRQUFNLEdBQUUsUUFBUSxHQUFFO0FBQUEsVUFBQyxJQUFJO0FBQUEsV0FBUyxJQUFFLEVBQUUsTUFBWCxRQUFlLEVBQUUsS0FBSyxDQUFDO0FBQUEsU0FBRTtBQUFBLElBQUM7QUFBQSxFQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsWUFBVSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFO0FBQUEsRUFBSyxPQUFPLEdBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxJQUFJLElBQUUsRUFBRSxPQUFNLElBQUU7QUFBQSxJQUFFLEtBQU87QUFBQSxJQUFFLElBQUc7QUFBQSxNQUFDLEVBQUUsQ0FBQztBQUFBLGNBQUU7QUFBQSxNQUFRLEtBQUU7QUFBQTtBQUFBLEtBQUksRUFBQyxNQUFLLE1BQUssQ0FBQztBQUFBO0FBQUcsR0FBRSxVQUFVLFVBQVEsUUFBUSxHQUFFO0FBQUEsRUFBQyxPQUFPLEtBQUs7QUFBQTtBQUFPLEdBQUUsVUFBVSxXQUFTLFFBQVEsR0FBRTtBQUFBLEVBQUMsT0FBTyxLQUFLLFFBQU07QUFBQTtBQUFJLEdBQUUsVUFBVSxTQUFPLFFBQVEsR0FBRTtBQUFBLEVBQUMsT0FBTyxLQUFLO0FBQUE7QUFBTyxHQUFFLFVBQVUsT0FBSyxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRTtBQUFBLEVBQUssT0FBTyxHQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsT0FBTyxFQUFFO0FBQUEsR0FBTTtBQUFBO0FBQUcsT0FBTyxlQUFlLEdBQUUsV0FBVSxTQUFRLEVBQUMsS0FBSSxRQUFRLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxHQUFFLElBQUk7QUFBQSxFQUFFLElBQVksTUFBSjtBQUFBLElBQU0sRUFBRSxJQUFFLEtBQUs7QUFBQSxFQUFFLE9BQU8sS0FBSztBQUFBLEdBQUcsS0FBSSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBRyxNQUFJLEtBQUssR0FBRTtBQUFBLElBQUMsSUFBRyxLQUFFO0FBQUEsTUFBSSxNQUFNLElBQUksTUFBTSxnQkFBZ0I7QUFBQSxLQUFHLFFBQVEsQ0FBQyxHQUFFO0FBQUEsTUFBQyxJQUFPLE9BQUosS0FBVyxPQUFKO0FBQUEsUUFBTSxJQUFHLEVBQUUsTUFBSSxJQUFFO0FBQUEsVUFBQyxFQUFFLElBQUU7QUFBQSxVQUFFLEtBQUUsRUFBQyxHQUFFLEdBQUUsR0FBRSxFQUFFLEdBQUUsR0FBRSxFQUFFLEdBQUUsR0FBRSxHQUFDO0FBQUEsUUFBQztBQUFBO0FBQUEsT0FBRyxJQUFJO0FBQUEsSUFBRSxLQUFLLElBQUU7QUFBQSxJQUFFLEtBQUs7QUFBQSxJQUFJO0FBQUEsSUFBSTtBQUFBLElBQUksSUFBRztBQUFBLE1BQUMsU0FBUSxJQUFFLEtBQUssRUFBVyxNQUFKLFdBQU0sSUFBRSxFQUFFO0FBQUEsUUFBRSxFQUFFLEVBQUUsRUFBRTtBQUFBLGNBQUU7QUFBQSxNQUFRLEdBQUU7QUFBQTtBQUFBLEVBQUU7QUFBQSxFQUFFLENBQUM7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLE9BQU8sSUFBSSxHQUFFLEdBQUUsQ0FBQztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsU0FBUSxJQUFFLEVBQUUsRUFBVyxNQUFKLFdBQU0sSUFBRSxFQUFFO0FBQUEsSUFBRSxJQUFHLEVBQUUsRUFBRSxNQUFJLEVBQUUsS0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUcsRUFBRSxFQUFFLE1BQUksRUFBRTtBQUFBLE1BQUUsT0FBTTtBQUFBLEVBQUcsT0FBTTtBQUFBO0FBQUcsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsU0FBUSxJQUFFLEVBQUUsRUFBVyxNQUFKLFdBQU0sSUFBRSxFQUFFLEdBQUU7QUFBQSxJQUFDLElBQUksSUFBRSxFQUFFLEVBQUU7QUFBQSxJQUFFLElBQVksTUFBSjtBQUFBLE1BQU0sRUFBRSxJQUFFO0FBQUEsSUFBRSxFQUFFLEVBQUUsSUFBRTtBQUFBLElBQUUsRUFBRSxJQUFFO0FBQUEsSUFBRyxJQUFZLEVBQUUsTUFBTixXQUFRO0FBQUEsTUFBQyxFQUFFLElBQUU7QUFBQSxNQUFFO0FBQUEsSUFBSztBQUFBLEVBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxFQUFFLEdBQUUsSUFBTztBQUFBLEVBQUUsT0FBZSxNQUFKLFdBQU07QUFBQSxJQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsSUFBRSxJQUFRLEVBQUUsTUFBUCxJQUFTO0FBQUEsTUFBQyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQUEsTUFBRSxJQUFZLE1BQUo7QUFBQSxRQUFNLEVBQUUsSUFBRSxFQUFFO0FBQUEsTUFBRSxJQUFZLEVBQUUsTUFBTjtBQUFBLFFBQVEsRUFBRSxFQUFFLElBQUU7QUFBQSxJQUFDLEVBQU07QUFBQSxVQUFFO0FBQUEsSUFBRSxFQUFFLEVBQUUsSUFBRSxFQUFFO0FBQUEsSUFBRSxJQUFZLEVBQUUsTUFBTjtBQUFBLE1BQVEsRUFBRSxJQUFPO0FBQUEsSUFBRSxJQUFFO0FBQUEsRUFBQztBQUFBLEVBQUMsRUFBRSxJQUFFO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLEdBQUUsS0FBSyxNQUFVLFNBQUM7QUFBQSxFQUFFLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxJQUFPO0FBQUEsRUFBRSxLQUFLLElBQUUsS0FBRTtBQUFBLEVBQUUsS0FBSyxJQUFFO0FBQUEsRUFBRSxLQUFLLElBQVEsS0FBTixPQUFhLFlBQUUsRUFBRTtBQUFBLEVBQVEsS0FBSyxJQUFRLEtBQU4sT0FBYSxZQUFFLEVBQUU7QUFBQSxFQUFVLEtBQUssT0FBVyxLQUFOLE9BQWEsWUFBRSxFQUFFO0FBQUE7QUFBSyxHQUFFLFlBQVUsSUFBSTtBQUFFLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsS0FBSyxLQUFHO0FBQUEsRUFBRyxJQUFHLElBQUUsS0FBSztBQUFBLElBQUUsT0FBTTtBQUFBLEVBQUcsS0FBUSxLQUFHLEtBQUssTUFBYjtBQUFBLElBQWdCLE9BQU07QUFBQSxFQUFHLEtBQUssS0FBRztBQUFBLEVBQUcsSUFBRyxLQUFLLE1BQUk7QUFBQSxJQUFFLE9BQU07QUFBQSxFQUFHLEtBQUssSUFBRTtBQUFBLEVBQUUsS0FBSyxLQUFHO0FBQUEsRUFBRSxJQUFHLEtBQUssSUFBRSxLQUFHLENBQUMsR0FBRSxJQUFJLEdBQUU7QUFBQSxJQUFDLEtBQUssS0FBRztBQUFBLElBQUcsT0FBTTtBQUFBLEVBQUU7QUFBQSxFQUFDLElBQUksSUFBRTtBQUFBLEVBQUUsSUFBRztBQUFBLElBQUMsR0FBRSxJQUFJO0FBQUEsSUFBRSxLQUFFO0FBQUEsSUFBSyxJQUFJLElBQUUsS0FBSyxFQUFFO0FBQUEsSUFBRSxJQUFHLEtBQUcsS0FBSyxLQUFHLEtBQUssTUFBSSxLQUFPLEtBQUssTUFBVCxHQUFXO0FBQUEsTUFBQyxLQUFLLElBQUU7QUFBQSxNQUFFLEtBQUssS0FBRztBQUFBLE1BQUksS0FBSztBQUFBLElBQUc7QUFBQSxJQUFFLE9BQU0sR0FBRTtBQUFBLElBQUMsS0FBSyxJQUFFO0FBQUEsSUFBRSxLQUFLLEtBQUc7QUFBQSxJQUFHLEtBQUs7QUFBQTtBQUFBLEVBQUksS0FBRTtBQUFBLEVBQUUsR0FBRSxJQUFJO0FBQUEsRUFBRSxLQUFLLEtBQUc7QUFBQSxFQUFHLE9BQU07QUFBQTtBQUFJLEdBQUUsVUFBVSxJQUFFLFFBQVEsQ0FBQyxHQUFFO0FBQUEsRUFBQyxJQUFZLEtBQUssTUFBVCxXQUFXO0FBQUEsSUFBQyxLQUFLLEtBQUc7QUFBQSxJQUFHLFNBQVEsSUFBRSxLQUFLLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLE1BQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUFBLEVBQUM7QUFBQSxFQUFDLEdBQUUsVUFBVSxFQUFFLEtBQUssTUFBSyxDQUFDO0FBQUE7QUFBRyxHQUFFLFVBQVUsSUFBRSxRQUFRLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBWSxLQUFLLE1BQVQsV0FBVztBQUFBLElBQUMsR0FBRSxVQUFVLEVBQUUsS0FBSyxNQUFLLENBQUM7QUFBQSxJQUFFLElBQVksS0FBSyxNQUFULFdBQVc7QUFBQSxNQUFDLEtBQUssS0FBRztBQUFBLE1BQUksU0FBUSxJQUFFLEtBQUssRUFBVyxNQUFKLFdBQU0sSUFBRSxFQUFFO0FBQUEsUUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQUEsSUFBQztBQUFBLEVBQUM7QUFBQTtBQUFHLEdBQUUsVUFBVSxJQUFFLFFBQVEsR0FBRTtBQUFBLEVBQUMsSUFBRyxFQUFFLElBQUUsS0FBSyxJQUFHO0FBQUEsSUFBQyxLQUFLLEtBQUc7QUFBQSxJQUFFLFNBQVEsSUFBRSxLQUFLLEVBQVcsTUFBSixXQUFNLElBQUUsRUFBRTtBQUFBLE1BQUUsRUFBRSxFQUFFLEVBQUU7QUFBQSxFQUFDO0FBQUE7QUFBRyxPQUFPLGVBQWUsR0FBRSxXQUFVLFNBQVEsRUFBQyxLQUFJLFFBQVEsR0FBRTtBQUFBLEVBQUMsSUFBRyxJQUFFLEtBQUs7QUFBQSxJQUFFLE1BQU0sSUFBSSxNQUFNLGdCQUFnQjtBQUFBLEVBQUUsSUFBSSxJQUFFLEdBQUUsSUFBSTtBQUFBLEVBQUUsS0FBSyxFQUFFO0FBQUEsRUFBRSxJQUFZLE1BQUo7QUFBQSxJQUFNLEVBQUUsSUFBRSxLQUFLO0FBQUEsRUFBRSxJQUFHLEtBQUcsS0FBSztBQUFBLElBQUUsTUFBTSxLQUFLO0FBQUEsRUFBRSxPQUFPLEtBQUs7QUFBQSxFQUFFLENBQUM7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLE9BQU8sSUFBSSxHQUFFLEdBQUUsQ0FBQztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxFQUFFLEVBQUUsSUFBTztBQUFBLEVBQUUsSUFBZSxPQUFPLEtBQW5CLFlBQXFCO0FBQUEsSUFBQztBQUFBLElBQUksSUFBSSxJQUFFO0FBQUEsSUFBRSxLQUFPO0FBQUEsSUFBRSxJQUFHO0FBQUEsTUFBQyxFQUFFO0FBQUEsTUFBRSxPQUFNLEdBQUU7QUFBQSxNQUFDLEVBQUUsS0FBRztBQUFBLE1BQUcsRUFBRSxLQUFHO0FBQUEsTUFBRSxHQUFFLENBQUM7QUFBQSxNQUFFLE1BQU07QUFBQSxjQUFFO0FBQUEsTUFBUSxLQUFFO0FBQUEsTUFBRSxHQUFFO0FBQUE7QUFBQSxFQUFFO0FBQUE7QUFBRSxTQUFTLEVBQUMsQ0FBQyxHQUFFO0FBQUEsRUFBQyxTQUFRLElBQUUsRUFBRSxFQUFXLE1BQUosV0FBTSxJQUFFLEVBQUU7QUFBQSxJQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFBQSxFQUFFLEVBQUUsSUFBTztBQUFBLEVBQUUsRUFBRSxJQUFPO0FBQUEsRUFBRSxHQUFFLENBQUM7QUFBQTtBQUFFLFNBQVMsRUFBQyxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUcsT0FBSTtBQUFBLElBQUssTUFBTSxJQUFJLE1BQU0scUJBQXFCO0FBQUEsRUFBRSxHQUFFLElBQUk7QUFBQSxFQUFFLEtBQUU7QUFBQSxFQUFFLEtBQUssS0FBRztBQUFBLEVBQUcsSUFBRyxJQUFFLEtBQUs7QUFBQSxJQUFFLEdBQUUsSUFBSTtBQUFBLEVBQUUsR0FBRTtBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxLQUFLLElBQUU7QUFB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UUFBUSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUU7QUFBQSxFQUFLLE9BQU0sRUFBQyxNQUFLLE1BQUssS0FBSyxHQUFFO0FBQUEsSUFBQyxPQUFPLEVBQUU7QUFBQSxJQUFNLEVBQUM7QUFBQSxFQUFFLEdBQUUsS0FBSSxFQUFDLGNBQWEsTUFBRyxPQUFNLEVBQUMsRUFBQyxDQUFDO0FBQUUsR0FBRSxPQUFNLFFBQVEsQ0FBQyxHQUFFLEdBQUU7QUFBQSxFQUFDLElBQWEsT0FBTyxFQUFFLFFBQW5CLFVBQXdCO0FBQUEsSUFBQyxJQUFJLEdBQUUsSUFBRSxFQUFFO0FBQUEsSUFBTSxTQUFRLEtBQUs7QUFBQSxNQUFFLElBQWdCLE1BQWIsWUFBZTtBQUFBLFFBQUMsSUFBSSxJQUFFLEVBQUU7QUFBQSxRQUFHLElBQUcsYUFBYSxJQUFFO0FBQUEsVUFBQyxJQUFHLENBQUM7QUFBQSxZQUFFLEVBQUUsT0FBSyxJQUFFLENBQUM7QUFBQSxVQUFFLEVBQUUsS0FBRztBQUFBLFVBQUUsRUFBRSxLQUFHLEVBQUUsS0FBSztBQUFBLFFBQUM7QUFBQSxNQUFDO0FBQUEsRUFBQztBQUFBLEVBQUMsRUFBRSxDQUFDO0FBQUEsQ0FBRTtBQUFFLEdBQUUsT0FBTSxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxFQUFFLENBQUM7QUFBQSxFQUFFLElBQUcsRUFBRSxTQUFPLEdBQUU7QUFBQSxJQUFDLEdBQUU7QUFBQSxJQUFFLElBQUksR0FBRSxJQUFFLEVBQUU7QUFBQSxJQUFJLElBQUcsR0FBRTtBQUFBLE1BQUMsRUFBRSxRQUFNO0FBQUEsTUFBRyxLQUFhLElBQUUsRUFBRSxVQUFUO0FBQUEsUUFBZSxFQUFFLE9BQUssSUFBRSxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsVUFBQyxJQUFJO0FBQUEsVUFBRSxHQUFFLFFBQVEsR0FBRTtBQUFBLFlBQUMsSUFBRTtBQUFBLGFBQU0sRUFBQyxNQUFLLEVBQUMsQ0FBQztBQUFBLFVBQUUsRUFBRSxJQUFFO0FBQUEsVUFBRSxPQUFPO0FBQUEsVUFBRyxRQUFRLEdB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QUFLLEVBQUUsSUFBSSxRQUFNLEVBQUUsSUFBSSxJQUFJLEdBQUcsUUFBUSxRQUFRLENBQUMsR0FBRTtBQUFBLElBQWEsT0FBTyxFQUFFLE9BQXJCLGNBQTBCLEVBQUUsSUFBSTtBQUFBLEdBQUUsR0FBRSxFQUFFLElBQUksTUFBSSxRQUFhLElBQUUsR0FBRSxDQUFDLEdBQUUsQ0FBQyxHQUFHLE9BQWxCLFNBQXdCLEVBQUUsSUFBSSxRQUFNLE1BQUksRUFBRSxJQUFJLE1BQUksSUFBRyxFQUFFLElBQUksTUFBSSxNQUFHLEVBQUUsTUFBSSxPQUFNLEVBQUUsTUFBSSxFQUFFLE9BQUssRUFBRSxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLE9BQU8sR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLEdBQUUsSUFBRztBQUFBO0FBQUUsU0FBUyxFQUFDLENBQUMsR0FBRSxHQUFFLEdBQUU7QUFBQSxFQUFDLE9BQU8sS0FBRyxNQUFJLEVBQUUsTUFBSSxNQUFLLEVBQUUsTUFBSSxFQUFFLE9BQUssRUFBRSxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUU7QUFBQSxJQUFDLE9BQU8sR0FBRSxHQUFFLEdBQUUsQ0FBQztBQUFBLEdBQUUsR0FBRSxFQUFFLE9BQUssRUFBRSxJQUFJLFFBQU0sTUFBSSxFQUFFLE9BQUssRUFBRSxZQUFZLEVBQUUsR0FBRyxHQUFFLEVBQUUsSUFBSSxNQUFJLE1BQUcsRUFBRSxJQUFJLE1BQUksS0FBSTtBQUFBO0FBQUUsU0FBUyxFQUFDLEdBQUU7QUFBQSxFQUFDLEtBQUssTUFBSSxHQUFFLEtBQUssSUFBRSxNQUFLLEtBQUssTUFBSTtBQUFBO0FBQUssU0FBUyxFQUFDLENBQUMsR0FBRTtBQUFBLEVBQUMsSUFBSSxJQUFFLEVBQUUsTUFBSSxFQUFFLEdBQUc7QUFBQSxFQUFJLE9BQU8sS0FBRyxFQUFFLE9BQUssRUFBRSxJQUFJLENBQUM7QUFBQTtBQUFtTixTQUFTLEVBQUMsR0FBRTtBQUFBLEVBQUMsS0FBSyxJQUFFLE1BQUssS0FBSyxJQUFFO0FBQUE7QUFBSyxFQUFFLFVBQVEsUUFBUSxDQUFDLEdBQUU7QUFBQSxFQUFDLElBQUksSUFBRSxFQUFFO0FBQUEsRUFBSSxNQUFJLEVBQUUsTUFBSSxPQUFJLEtBQUcsRUFBRSxPQUFLLEVBQUUsSUFBSSxHQUFFLEtBQUcsS0FBRyxFQUFFLFFBQU0sRUFBRSxPQUFLLE9BQU0sTUFBRyxHQUFFLENBQUM7QUFBQSxJQUFJLEdBQUUsWUFBVSxJQUFJLEdBQUcsTUFBSSxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFJLElBQUUsRUFBRSxLQUFJLElBQUU7QUFBQSxFQUFXLEVBQUUsS0FBUixTQUFZLEVBQUUsSUFBRSxDQUFDLElBQUcsRUFBRSxFQUFFLEtBQUssQ0FBQztBQUFBLEVBQUUsSUFBSSxJQUFFLEdBQUUsRUFBRSxHQUFHLEdBQUUsSUFBRSxPQUFHLElBQUUsUUFBUSxHQUFFO0FBQUEsSUFBQyxLQUFHLEVBQUUsUUFBTSxJQUFFLE1BQUcsRUFBRSxNQUFJLE1BQUssSUFBRSxFQUFFLENBQUMsSUFBRSxFQUFFO0FBQUE7QUFBQSxFQUFJLEVBQUUsTUFBSTtBQUFBLEVBQUUsSUFBSSxLQUFFLEVBQUU7QUFBQSxFQUFJLEVBQUUsTUFBSTtBQUFBLEVBQUssSUFBSSxJQUFFLFFBQVEsR0FBRTtBQUFBLElBQUMsSUFBRyxDQUFDLEVBQUUsRUFBRSxLQUFJO0FBQUEsTUFBQyxJQUFHLEVBQUUsTUFBTSxLQUFJO0FBQUEsUUFBQyxJQUFJLElBQUUsRUFBRSxNQUFNO0FBQUEsUUFBSSxFQUFFLElBQUksSUFBSSxLQUFHLEdBQUUsR0FBRSxFQUFFLElBQUksS0FBSSxFQUFFLElBQUksR0FBRztBQUFBLE1BQUM7QUFBQSxNQUFDLElBQUk7QUFBQSxNQUFFLEtBQUksRUFBRSxTQUFTLEVBQUMsS0FBSSxFQUFFLE1BQUksS0FBSSxDQUFDLEVBQUUsSUFBRSxFQUFFLEVBQUUsSUFBSTtBQUFBLFFBQUcsRUFBRSxNQUFJLElBQUUsRUFBRSxZQUFZO0FBQUEsSUFBQztBQUFBO0FBQUEsRUFBRyxFQUFFLFNBQU8sS0FBRyxFQUFFLE9BQUssRUFBRSxTQUFTLEVBQUMsS0FBSSxFQUFFLE1BQUksRUFBRSxJQUFJLElBQUksR0FBRSxDQUFDLEdBQUUsRUFBRSxLQUFLLEdBQUUsQ0FBQztBQUFBLEdBQUcsR0FBRSxVQUFVLHVCQUFxQixRQUFRLEdBQUU7QUFBQSxFQUFDLEtBQUssSUFBRSxDQUFDO0FBQUEsR0FBRyxHQUFFLFVBQVUsU0FBTyxRQUFRLENBQUMsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFHLEtBQUssS0FBSTtBQUFBLElBQUMsSUFBRyxLQUFLLElBQUksS0FBSTtBQUFBLE1BQUMsSUFBSSxJQUFFLFNBQVMsY0FBYyxLQUFLLEdBQUUsSUFBRSxLQUFLLElBQUksSUFBSSxHQUFHO0FBQUEsTUFBSSxLQUFLLElBQUksSUFBSSxLQUFHLEdBQUUsS0FBSyxLQUFJLEdBQUUsRUFBRSxNQUFJLEVBQUUsR0FBRztBQUFBLElBQUM7QUFBQSxJQUFDLEtBQUssTUFBSTtBQUFBLEVBQUk7QUFBQSxFQUFDLElBQUksSUFBRSxFQUFFLE9BQUssRUFBRSxHQUFFLE1BQUssRUFBRSxRQUFRO0FBQUEsRUFBRSxPQUFPLE1BQUksRUFBRSxPQUFLLE1BQUssQ0FBQyxFQUFFLEdBQUUsTUFBSyxFQUFFLE1BQUksT0FBSyxFQUFFLFFBQVEsR0FBRSxDQUFDO0FBQUE7QUFBRyxJQUFJLEtBQUUsUUFBUSxDQUFDLEdBQUUsR0FBRSxHQUFFO0FBQUEsRUFBQyxJQUFHLEVBQUUsRUFBRSxPQUFLLEVBQUUsTUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUUsRUFBRSxNQUFNLGdCQUFvQixFQUFFLE1BQU0sWUFBWSxPQUExQixPQUE4QixDQUFDLEVBQUUsRUFBRTtBQUFBLElBQU0sS0FBSSxJQUFFLEVBQUUsRUFBRSxLQUFHO0FBQUEsTUFBQyxNQUFLLEVBQUUsU0FBTztBQUFBLFFBQUcsRUFBRSxJQUFJLEVBQUU7QUFBQSxNQUFFLElBQUcsRUFBRSxLQUFHLEVBQUU7QUFBQSxRQUFHO0FBQUEsTUFBTSxFQUFFLElBQUUsSUFBRSxFQUFFO0FBQUEs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LDBCQUVGLEdBSUUsUUFKRjtBQUFBLFlBQVEsS0FBSTtBQUFBLFlBQVosVUFDRyxpQkFBaUIsSUFBSSxDQUFDLDRCQUNyQixHQUFDLFNBQUQ7QUFBQSxjQUEwQjtBQUFBLGVBQVosUUFBUSxJQUF0QixzQkFBNEMsQ0FDN0M7QUFBQSxhQUhILGlDQUlFO0FBQUE7QUFBQSxTQTlDSixnQ0ErQ0U7QUFBQSxzQkFHRixHQUFDLGFBQUQscUNBQWE7QUFBQSxzQkFDYixHQUFDLE1BQU0sVUFBUCxxQ0FBZ0I7QUFBQSxzQkFDaEIsR0FBQyxjQUFjLE1BQWYscUNBQW9CO0FBQUE7QUFBQSxLQTFEdEIsZ0NBMkRFO0FBQUE7OztBQ3ZHTixJQUFNLFNBQXdCLENBQUM7QUFDL0IsWUFBWSxXQUFXLE1BQU0sTUFBTTtBQUVuQyx1QkFBdUIsT0FBTyxhQUFhO0FBQUEsRUFDekMsTUFBTSxVQUFVLGdCQUFnQixTQUFTO0FBQUEsRUFDekMsSUFBSSxTQUFTO0FBQUEsSUFDWCxNQUFNLFFBQVE7QUFBQSxNQUNaO0FBQUEsTUFDQSxPQUFPLFNBQVM7QUFBQSxNQUNoQixTQUFTLFNBQVM7QUFBQSxNQUNsQixNQUFNLFNBQVM7QUFBQSxJQUNqQixDQUFDO0FBQUEsRUFDSDtBQUFBLENBQ0Q7QUFFRCxJQUFNLE9BQU8sU0FBUyxlQUFlLEtBQUssS0FBSyxTQUFTO0FBQ3hELGtCQUFPLEdBQUMsWUFBRCxxQ0FBWSxHQUFJLElBQUk7IiwKICAiZGVidWdJZCI6ICIwRDI1MzRGMzk3OEQ5RTA5NjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
|