{"id":6912,"date":"2026-08-18T23:34:38","date_gmt":"2026-08-18T23:34:38","guid":{"rendered":"https:\/\/thg-egypt.com\/clinics-dashboard\/"},"modified":"2026-08-19T04:26:42","modified_gmt":"2026-08-19T04:26:42","slug":"clinics-dashboard","status":"publish","type":"page","link":"https:\/\/thg-egypt.com\/ar\/clinics-dashboard\/","title":{"rendered":"\u0646\u0638\u0627\u0645 \u062d\u062c\u0648\u0632\u0627\u062a \u0627\u0644\u0639\u064a\u0627\u062f\u0627\u062a \u0627\u0644\u062e\u0627\u0631\u062c\u064a\u0629"},"content":{"rendered":"<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\"> <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin> <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Tajawal:wght@400;500;700;800&#038;display=swap\" rel=\"stylesheet\">\n<style> #thg-app{position:fixed;inset:0;z-index:999999;background:#eef2f7;direction:rtl;font-family:'Tajawal',Tahoma,'Segoe UI',sans-serif !important;overflow-y:auto;color:#122033;-webkit-font-smoothing:antialiased} #thg-app *{box-sizing:border-box;margin:0;padding:0;font-family:'Tajawal',Tahoma,'Segoe UI',sans-serif !important} #thg-app .wrap{max-width:1160px;margin:0 auto;padding:20px} #thg-app .card{background:#fff;border:1px solid #dde6ef;border-radius:16px;padding:20px;margin-bottom:16px;box-shadow:0 1px 3px rgba(18,32,51,.06)} #thg-app h1{font-size:19px;font-weight:800;letter-spacing:-.2px} #thg-app h2{font-size:15px;font-weight:700;margin-bottom:12px;color:#143a66} #thg-app .btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:0;border-radius:10px;padding:10px 18px;font-size:14px;font-weight:700;cursor:pointer;background:#143a66;color:#fff;font-family:inherit;transition:background .15s,transform .1s,box-shadow .15s;box-shadow:0 1px 2px rgba(20,58,102,.25)} #thg-app .btn:hover{background:#0e2c4f;box-shadow:0 3px 8px rgba(20,58,102,.3)} #thg-app .btn:active{transform:translateY(1px)} #thg-app .btn.sec{background:#fff;color:#143a66;border:1.5px solid #bccde0;box-shadow:none} #thg-app .btn.sec:hover{background:#f2f6fb;border-color:#143a66} #thg-app .btn.warn{background:#fff;color:#b91c1c;border:1.5px solid #fecaca;box-shadow:none} #thg-app .btn.warn:hover{background:#fef2f2;border-color:#b91c1c} #thg-app .btn.wa{background:#16a34a;box-shadow:0 1px 2px rgba(22,163,74,.3)} #thg-app .btn.wa:hover{background:#15803d} #thg-app .btn.orange{background:#ee7b4d;box-shadow:0 1px 2px rgba(238,123,77,.35)} #thg-app .btn.orange:hover{background:#d96436} #thg-app .btn:disabled{opacity:.45;cursor:not-allowed;transform:none;box-shadow:none} #thg-app input,#thg-app select,#thg-app textarea{width:100%;border:1.5px solid #ccd9e8;border-radius:10px;padding:10px 14px;font-size:14px;font-family:inherit;background:#fbfcfe;color:#122033;transition:border-color .15s,box-shadow .15s} #thg-app input:focus,#thg-app select:focus,#thg-app textarea:focus{outline:none;border-color:#143a66;box-shadow:0 0 0 3px rgba(20,58,102,.12);background:#fff} #thg-app label{display:block;font-size:13px;margin-bottom:5px;color:#3c5a7d;font-weight:700} #thg-app .field{margin-bottom:14px} #thg-app .row{display:flex;gap:10px;flex-wrap:wrap;align-items:center} #thg-app .grow{flex:1;min-width:140px} #thg-app .topbar{background:linear-gradient(135deg,#0a2342 0%,#143a66 55%,#1a4a80 100%);color:#fff;padding:14px 0;box-shadow:0 2px 14px rgba(10,35,66,.35)} #thg-app .topbar .wrap{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding-top:0;padding-bottom:0} #thg-app .topbar .brand{display:flex;align-items:center;gap:14px} #thg-app .topbar .logo-img{height:88px;width:auto;display:block;filter:drop-shadow(0 2px 6px rgba(0,0,0,.3))} #thg-app .topbar h1{color:#fff !important;font-size:21px} #thg-app .topbar .sub{font-size:13px;color:rgba(255,255,255,.85) !important;margin-top:2px} #thg-app .alertbar{display:flex;align-items:center;gap:12px;background:#fff7ed;border:1.5px solid #fdba74;border-radius:14px;padding:13px 18px;margin:16px 0 0;font-size:14.5px;font-weight:700;color:#c2410c;box-shadow:0 2px 10px rgba(238,123,77,.15)} #thg-app .alertbar .bell{font-size:20px;animation:thgring 1.6s ease infinite} @keyframes thgring{0%,60%,100%{transform:rotate(0)}65%{transform:rotate(14deg)}70%{transform:rotate(-12deg)}75%{transform:rotate(8deg)}80%{transform:rotate(-6deg)}} #thg-app .badge.alert{background:#ffedd5;color:#c2410c;border:1px solid #fdba74;animation:thgpulse 1.5s ease infinite} @keyframes thgpulse{0%,100%{box-shadow:0 0 0 0 rgba(238,123,77,.45)}50%{box-shadow:0 0 0 5px rgba(238,123,77,0)}} #thg-app .userchip{display:flex;align-items:center;gap:8px;background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.2);border-radius:12px;padding:6px 12px;font-size:13px;font-weight:500} #thg-app .userchip .avatar{width:30px;height:30px;border-radius:50%;background:#ee7b4d;color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:14px} #thg-app .userchip .role{font-size:11px;opacity:.8} #thg-app .tabs{display:flex;gap:8px;flex-wrap:wrap;margin:18px 0} #thg-app .tabs button{border:1.5px solid transparent;background:#fff;color:#3c5a7d;border-radius:12px;padding:10px 22px;cursor:pointer;font-size:14px;font-weight:700;font-family:inherit;box-shadow:0 1px 2px rgba(18,32,51,.07);transition:all .15s} #thg-app .tabs button:hover{color:#143a66;border-color:#bccde0} #thg-app .tabs button.on{background:#143a66;color:#fff;box-shadow:0 3px 10px rgba(20,58,102,.35)} #thg-app table{width:100%;border-collapse:collapse;font-size:13.5px} #thg-app th{background:#f1f5fa;color:#143a66;text-align:right;padding:11px 10px;border-bottom:2px solid #ccd9e8;white-space:nowrap;font-size:12.5px;font-weight:800} #thg-app td{padding:11px 10px;border-bottom:1px solid #e9eff6;vertical-align:middle} #thg-app tbody tr:last-child td{border-bottom:0} #thg-app tr:hover td{background:#f6f9fc} #thg-app .badge{display:inline-flex;align-items:center;gap:4px;border-radius:20px;padding:4px 12px;font-size:12px;font-weight:700;white-space:nowrap} #thg-app .badge.g{background:#dcfce7;color:#166534} #thg-app .badge.y{background:#fef3c7;color:#92400e} #thg-app .daychips{display:flex;flex-wrap:wrap;gap:6px} #thg-app .daychip{padding:6px 12px;border:1.5px solid #cbd5e1;border-radius:999px;background:#fff;color:#334155;font-size:12.5px;font-weight:600;cursor:pointer;user-select:none;transition:all .15s} #thg-app .daychip.on{background:#1e3a5f;border-color:#1e3a5f;color:#fff} #thg-app .badge.b{background:#dbeafe;color:#1e40af} #thg-app .badge.r{background:#fee2e2;color:#991b1b} #thg-app .badge.o{background:#ffedd5;color:#c2410c} #thg-app .msg{padding:12px 16px;border-radius:12px;font-size:14px;font-weight:500;margin-bottom:12px;display:none} #thg-app .msg.err{background:#fef2f2;color:#991b1b;border:1px solid #fecaca;display:block} #thg-app .msg.ok{background:#f0fdf4;color:#166534;border:1px solid #bbf7d0;display:block} #thg-app .stat{flex:1;min-width:150px;background:#fff;border:1px solid #dde6ef;border-radius:16px;padding:18px 16px;text-align:center;box-shadow:0 1px 3px rgba(18,32,51,.06);position:relative;overflow:hidden} #thg-app .stat::before{content:\"\";position:absolute;top:0;right:0;left:0;height:3px;background:linear-gradient(90deg,#143a66,#ee7b4d)} #thg-app .stat b{display:block;font-size:30px;font-weight:800;color:#143a66;line-height:1.2} #thg-app .stat span{font-size:13px;color:#3c5a7d;font-weight:500} #thg-app .bar{background:#eef2f7;border-radius:8px;height:20px;overflow:hidden} #thg-app .bar i{display:block;height:100%;background:linear-gradient(90deg,#143a66,#3b82f6);border-radius:8px;transition:width .4s ease} #thg-app .muted{color:#6d84a0;font-size:12px} #thg-app .loading{text-align:center;padding:56px 20px;color:#3c5a7d;font-weight:500} #thg-app .loading::before{content:\"\";display:block;width:36px;height:36px;margin:0 auto 14px;border:3.5px solid #ccd9e8;border-top-color:#143a66;border-radius:50%;animation:thgspin .7s linear infinite} @keyframes thgspin{to{transform:rotate(360deg)}} #thg-app .login-wrap{min-height:100%;display:flex;align-items:center;justify-content:center;padding:20px;background:linear-gradient(160deg,#0a2342 0%,#143a66 45%,#eef2f7 45.1%)} #thg-app .login-box{width:100%;max-width:400px;background:#fff;border-radius:20px;padding:36px 32px;box-shadow:0 20px 50px rgba(10,35,66,.35)} #thg-app .login-box .logo-login{display:block;margin:0 auto 8px;height:110px;width:auto;background:#0a2342;border-radius:16px;padding:10px 16px} #thg-app .login-box h1{text-align:center;margin-bottom:4px;color:#122033;font-size:20px} #thg-app .login-box p{text-align:center;font-size:13.5px;color:#3c5a7d;margin-bottom:24px} #thg-app .tblwrap{overflow-x:auto} #thg-app .pager{display:flex;align-items:center;justify-content:center;gap:10px;padding:14px 0 4px;flex-wrap:wrap} #thg-app .pager .info{font-size:13px;color:#3c5a7d;font-weight:700} #thg-app .pgnum{min-width:38px;height:38px;padding:0 8px;border:1.5px solid #c9d8ea;border-radius:10px;background:#fff;color:#1b3a5c;font-weight:800;font-size:14px;cursor:pointer;font-family:inherit} #thg-app .pgnum:hover:not(:disabled){border-color:#1b3a5c} #thg-app .pgnum.on{background:#1b3a5c;color:#fff;border-color:#1b3a5c;cursor:default} #thg-app .pgdots{color:#6d84a0;font-weight:800;padding:0 2px} @media(max-width:700px){#thg-app td,#thg-app th{padding:8px 6px;font-size:12px}#thg-app .wrap{padding:12px}#thg-app .stat b{font-size:24px}#thg-app .topbar .logo-img{height:60px}} <\/style>\n<div id=\"thg-app\">\n<div id=\"thg-root\">\n<div class=\"loading\">\u062c\u0627\u0631\u064d \u0627\u0644\u062a\u062d\u0645\u064a\u0644&#8230;<\/div>\n<\/div>\n<\/div>\n<p><script>(function(){var c=atob(\"CihmdW5jdGlvbigpewoidXNlIHN0cmljdCI7Ci8qID09PT09PT09PT09PT09PT09INin2YTYpdi52K\/Yp9iv2KfYqiA9PT09PT09PT09PT09PT09PSAqLwp2YXIgQVBJX1VSTCA9ICJodHRwczovL3NjcmlwdC5nb29nbGUuY29tL21hY3Jvcy9zL0FLZnljYnlhbmRuZnVFLTFyWEs4ajRzU3BlS1FKQ3ZxVzBLbDJCVzJQVUVwbzZrT0hHQTljZ05fWjJmSDdSbDJZWVVhal9RSlFnL2V4ZWMiOwp2YXIgTE9HT19VUkwgPSAiaHR0cHM6Ly9oZWJia3gxYW5oaWxhNXlmLnB1YmxpYy5ibG9iLnZlcmNlbC1zdG9yYWdlLmNvbS9waWMlMjAlMjgxMyUyOS02eWwycjRQbG5JN2ZsS293ek1wb3RnVDU0UHlSaUcucG5nIjsKdmFyIENMSU5JQ19QSE9ORSA9ICIwMTA2NjYzODM4NCI7CnZhciBQQUdFX1NJWkUgPSA1MDsKCi8qID09PT09INin2YTZgtmK2YUg2KfZhNir2KfYqNiq2Kkg2KfZhNmF2LfYp9io2YLYqSDZhNmE2YHZiNix2YUg2KfZhNij2LPYp9iz2YkgKNis2YjYrNmEINmB2YjYsdmFKSA9PT09PSAqLwp2YXIgQ0xJTklDUz1bIti52YrYp9iv2Ycg2KfZhNij2LfZgdin2YQiLCLYudmK2KfYr9mHINin2YTYo9mG2YEg2Ygg2KfZhNij2LDZhiIsIti52YrYp9iv2Ycg2KfZhNis2YfYp9iyINin2YTZh9i22YXZiSDZiCDYp9mE2YPYqNivIiwi2LnZitin2K\/ZhyDYp9mE2KPZhdix2KfYtiDYp9mE2YXYstmF2YbZhyIsIti52YrYp9iv2Ycg2LfYqCDYp9mE2KPYs9ix2KkiLCLYudmK2KfYr9mHINin2YTYqNin2LfZhtipINmIINin2YTZg9mE2YkiLCLYudmK2KfYr9mHINin2YTYqNin2LfZhtmHINin2YTYudin2YXZhyIsIti52YrYp9iv2Ycg2KfZhNi62K\/YryDYp9mE2LXZhdin2KEg2Ygg2KfZhNiz2YPYsSIsIti52YrYp9iv2Ycg2KfZhNis2LHYp9it2Ycg2KfZhNi52KfZhdmHIiwi2LnZitin2K\/ZhyDYudmE2KfYrCDYp9mE2KLZhNin2YUiLCLYudmK2KfYr9mHINin2YTYo9mF2LHYp9i2INin2YTZhtmB2LPZitipINmIINin2YTYudi12KjZitipIiwi2LnZitin2K\/ZhyDYp9mE2LXYr9ixIiwi2LnZitin2K\/ZhyDYrNix2KfYrdipINin2YTZhdiuINmIINin2YTYo9i52LXYp9ioIiwi2LnZitin2K\/ZhyDYo9mF2LHYp9i2INin2YTZhdiuINmIINin2YTYo9i52LXYp9ioIiwi2LnZitin2K\/ZhyDYp9mE2YXYs9in2YTZgyDYp9mE2KjZiNmE2YrZhyIsIti52YrYp9iv2Ycg2KfZhNmG2LPYpyDZiNin2YTYqtmI2YTZitivIiwi2LnZitin2K\/ZhyDYp9mE2KzZhNiv2YrYqSIsIti52YrYp9iv2Ycg2KfZhNmC2YTYqCIsIti52YrYp9iv2Ycg2KzYsdin2K3YqSDYp9mE2KPZiNi52YrYqSDYp9mE2K\/ZhdmI2YrYqSIsIti52YrYp9iv2Ycg2KzYsdin2K3YqSDYp9mE2KPYt9mB2KfZhCIsIti52YrYp9iv2Ycg2KzYsdin2K3ZhyDYp9mE2LnYuNin2YUiLCLYudmK2KfYr9mHINin2YTYqti62LDZitmHINin2YTYudmE2KfYrNmK2YciLCLYudmK2KfYr9mHINin2YTYsdmI2YXYp9iq2YrYstmFIiwi2LnZitin2K\/ZhyDYo9mF2LHYp9i2INin2YTYr9mFIiwi2LnZitin2K\/ZhyDYp9mE2KPZiNix2KfZhSIsIti52YrYp9iv2Ycg2KfZhNij2LPZhtin2YYiLCLYudmK2KfYr9mHINin2YTYrdiz2KfYs9mK2Kkg2Ygg2KfZhNmF2YbYp9i52KkiLCLYudmK2KfYr9mHINiq2KPYrtixINin2YTYpdmG2KzYp9ioINmIINin2YTYudmC2YUiLCLYudmK2KfYr9mHINiv2YrZhtin2YXZitmD2YrYqSDYp9mE2KjZiNmEIiwi2LnZitin2K\/ZhyDYp9mE2LnZhNin2Kwg2KfZhNi32KjZiti52YkiLCLYudmK2KfYr9mHINin2YXYsdin2LYg2KfZhNiv2YUgKNin2LfZgdin2YQpIiwi2LnZitin2K\/ZhyDYrNix2KfYrdmHINin2YTYqtis2YXZitmEIiwi2LnZitin2K\/ZhyDYrNix2KfYrdin2Kog2KfZhNi52YXZiNivINin2YTZgdmC2LHZiiIsIti52YrYp9iv2Ycg2KfZhNmC2YTYqCAoINij2LfZgdin2YQpIiwi2LnZitin2K\/ZhyDYp9mE2YPYqNivINmI2YXZhtin2LjZitixINin2YTYrNmH2KfYsiDYp9mE2YfYttmF2YkgKCDYo9i32YHYp9mEICkiLCLYudmK2KfYr9mHINmF2K4g2YjYp9i52LXYp9ioINin2YTYp9i32YHYp9mEIiwi2LnZitin2K\/ZhyDYsdmI2YXYp9iq2YrYstmFINin2YTYp9i32YHYp9mEIl07CnZhciBEQVlTPVsi2KfZhNiz2KjYqiIsItin2YTYo9it2K8iLCLYp9mE2KPYq9mG2YrZhiIsItin2YTYq9mE2KfYq9in2KEiLCLYp9mE2KPYsdio2LnYp9ihIiwi2KfZhNiu2YXZitizIiwi2KfZhNis2YXYudipIiwi2YrZiNmF2YrYp9mLIl07CnZhciBUSU1FUz1bIjA5OjAwINi12KjYp9it2KfZiyIsIjA5OjMwINi12KjYp9it2KfZiyIsIjEwOjAwINi12KjYp9it2KfZiyIsIjEwOjMwINi12KjYp9it2KfZiyIsIjExOjAwINi12KjYp9it2KfZiyIsIjExOjMwINi12KjYp9it2KfZiyIsIjEyOjAwINi42YfYsdin2YsiLCIxMjozMCDYuNmH2LHYp9mLIiwiMDE6MDAg2YXYs9in2KHZiyIsIjAxOjMwINmF2LPYp9ih2YsiLCIwMjowMCDZhdiz2KfYodmLIiwiMDI6MzAg2YXYs9in2KHZiyIsIjAzOjAwINmF2LPYp9ih2YsiLCIwMzozMCDZhdiz2KfYodmLIiwiMDQ6MDAg2YXYs9in2KHZiyIsIjA0OjMwINmF2LPYp9ih2YsiLCIwNTowMCDZhdiz2KfYodmLIiwiMDU6MzAg2YXYs9in2KHZiyIsIjA2OjAwINmF2LPYp9ih2YsiLCIwNjozMCDZhdiz2KfYodmLIiwiMDc6MDAg2YXYs9in2KHZiyIsIjA3OjMwINmF2LPYp9ih2YsiLCIwODowMCDZhdiz2KfYodmLIiwi2YXZhiAxMNi1INil2YTZiSA12YUiXTsKZnVuY3Rpb24gb3B0aW9uc0h0bWwobGlzdCxzZWxlY3RlZCl7CiAgcmV0dXJuIGxpc3QubWFwKGZ1bmN0aW9uKHYpe3JldHVybiAnPG9wdGlvbiB2YWx1ZT0iJytlc2ModikrJyIgJysodj09PXNlbGVjdGVkPyJzZWxlY3RlZCI6IiIpKyc+Jytlc2ModikrJzwvb3B0aW9uPic7fSkuam9pbigiIik7Cn0KCi8qINmF2YbYuSDYp9mE2YHZh9ix2LPYqSAqLwp2YXIgbT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJtZXRhIik7bS5uYW1lPSJyb2JvdHMiO20uY29udGVudD0ibm9pbmRleCxub2ZvbGxvdyxub2FyY2hpdmUiO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobSk7Cgp2YXIgcm9vdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGhnLXJvb3QiKTsKdmFyIHN0YXRlPXt0b2tlbjpudWxsLHVzZXI6bnVsbCx0YWI6ImJvb2tpbmdzIixzdWJUYWI6InBlbmRpbmciLGJvb2tpbmdzOm51bGwsc2NoZWR1bGU6bnVsbCxzdGF0czpudWxsLHVzZXJzOm51bGwsc2VhcmNoOiIiLGRvY3RvckZpbHRlcjoiIixwYWdlOjEsbXNnU2VhcmNoOiIiLG1zZ1BhZ2U6MSxlZGl0Um93Om51bGwsZnVsbExvYWQ6ZmFsc2V9OwoKdHJ5e3ZhciBzYXZlZD1KU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJ0aGdfc2Vzc2lvbiIpfHwibnVsbCIpOwppZihzYXZlZCYmc2F2ZWQuZXhwPkRhdGUubm93KCkpe3N0YXRlLnRva2VuPXNhdmVkLnRva2VuO3N0YXRlLnVzZXI9c2F2ZWQudXNlcjt9fWNhdGNoKGUpe30KCi8qINin2KrYtdin2YQg2KjZhdmH2YTYqSA0NSDYq9in2YbZitipICsg2KXYudin2K\/YqSDZhdit2KfZiNmE2Kkg2KrZhNmC2KfYptmK2Kkg2LnZhtivINin2YTZgdi02YQKICAgKNij2YjZhCDYt9mE2Kgg2YTZgCBBcHBzIFNjcmlwdCDYo9it2YrYp9mG2KfZiyDZitiq2KPYrtixIC0gItiq2LTYutmK2YQg2KjYp9ix2K8iKSAqLwpmdW5jdGlvbiBhcGkocGF5bG9hZCxjYixfcmV0cmllZCl7CiAgcGF5bG9hZC50b2tlbj1zdGF0ZS50b2tlbjsKICB2YXIgY3RybD0odHlwZW9mIEFib3J0Q29udHJvbGxlciE9PSJ1bmRlZmluZWQiKT9uZXcgQWJvcnRDb250cm9sbGVyKCk6bnVsbDsKICB2YXIgdGltZXI9Y3RybD9zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Y3RybC5hYm9ydCgpO30sNDUwMDApOm51bGw7CiAgZmV0Y2goQVBJX1VSTCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04In0sYm9keTpKU09OLnN0cmluZ2lmeShwYXlsb2FkKSxzaWduYWw6Y3RybD9jdHJsLnNpZ25hbDp1bmRlZmluZWR9KQogIC50aGVuKGZ1bmN0aW9uKHIpe3JldHVybiByLmpzb24oKTt9KQogIC50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICBpZih0aW1lciljbGVhclRpbWVvdXQodGltZXIpOwogICAgaWYocmVzJiZyZXMuZXhwaXJlZCl7bG9nb3V0KCk7cmV0dXJuO30KICAgIGNiKHJlcyk7CiAgfSkKICAuY2F0Y2goZnVuY3Rpb24oKXsKICAgIGlmKHRpbWVyKWNsZWFyVGltZW91dCh0aW1lcik7CiAgICBpZighX3JldHJpZWQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXthcGkocGF5bG9hZCxjYix0cnVlKTt9LDE1MDApO3JldHVybjt9CiAgICBjYih7c3VjY2VzczpmYWxzZSxtZXNzYWdlOiLYqti52LDYsSDYp9mE2KfYqti12KfZhCDYqNin2YTYrtin2K\/ZhSAtINiq2KPZg9ivINmF2YYg2KfZhNil2YbYqtix2YbYqiJ9KTsKICB9KTsKfQoKLyogPT09PT0g2YPYp9i0INmF2K3ZhNmJOiDYp9mE2KrZhtmC2YQg2KjZitmGINin2YTYqtio2YjZitio2KfYqiDZgdmI2LHZiSAtINmI2KfZhNiq2K3Yr9mK2Ksg2YrYqtmFINmB2Ykg2KfZhNiu2YTZgdmK2KkgPT09PT0gKi8KdmFyIENBQ0hFX1RUTD0xMCo2MCoxMDAwOyAvKiDYtdmE2KfYrdmK2Kkg2KfZhNmD2KfYtCDYp9mE2YXYrtiy2YY6IDEwINiv2YLYp9im2YIgKi8KZnVuY3Rpb24gY2FjaGVHZXQoa2V5KXsKICB0cnl7dmFyIGM9SlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCJ0aGdfY18iK2tleSl8fCJudWxsIik7CiAgaWYoYyYmRGF0ZS5ub3coKS1jLnQ8Q0FDSEVfVFRMKXJldHVybiBjLmQ7fWNhdGNoKGUpe30KICByZXR1cm4gbnVsbDsKfQpmdW5jdGlvbiBjYWNoZVNldChrZXksZCl7dHJ5e3Nlc3Npb25TdG9yYWdlLnNldEl0ZW0oInRoZ19jXyIra2V5LEpTT04uc3RyaW5naWZ5KHt0OkRhdGUubm93KCksZDpkfSkpO31jYXRjaChlKXt9fQpmdW5jdGlvbiBjYWNoZUNsZWFyQWxsKCl7dHJ5e09iamVjdC5rZXlzKHNlc3Npb25TdG9yYWdlKS5mb3JFYWNoKGZ1bmN0aW9uKGspe2lmKGsuaW5kZXhPZigidGhnX2NfIik9PT0wKXNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oayk7fSk7fWNhdGNoKGUpe319Ci8qINi02KfYsdipINi12LrZitix2Kkg2KPYudmE2Ykg2KfZhNi12YHYrdipINij2KvZhtin2KEg2KfZhNiq2K3Yr9mK2Ksg2KfZhNi12KfZhdiqICovCmZ1bmN0aW9uIHN5bmNCYWRnZShzaG93KXsKICB2YXIgYj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGhnLXN5bmMiKTsKICBpZihzaG93KXsKICAgIGlmKCFiKXtiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2IuaWQ9InRoZy1zeW5jIjsKICAgICAgYi5zdHlsZS5jc3NUZXh0PSJwb3NpdGlvbjpmaXhlZDtib3R0b206MThweDtpbnNldC1pbmxpbmUtc3RhcnQ6MThweDt6LWluZGV4Ojk5OTk7YmFja2dyb3VuZDojMWIzYTVjO2NvbG9yOiNmZmY7cGFkZGluZzo3cHggMTRweDtib3JkZXItcmFkaXVzOjIwcHg7Zm9udC1zaXplOjEyLjVweDtmb250LXdlaWdodDo3MDA7Ym94LXNoYWRvdzowIDRweCAxNHB4IHJnYmEoMCwwLDAsLjI1KTtmb250LWZhbWlseTppbmhlcml0IjsKICAgICAgYi50ZXh0Q29udGVudD0i2KzYp9ix2Y0g2KrYrdiv2YrYqyDYp9mE2KjZitin2YbYp9iqLi4uIjtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGIpO30KICB9ZWxzZSBpZihiKXtiLnJlbW92ZSgpO30KfQoKZnVuY3Rpb24gZXNjKHMpe3JldHVybiBTdHJpbmcocz09bnVsbD8iIjpzKS5yZXBsYWNlKC9bJjw+IiddL2csZnVuY3Rpb24oYyl7cmV0dXJueyImIjoiJmFtcDsiLCI8IjoiJmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyJ9W2NdO30pO30KZnVuY3Rpb24gZWwoaHRtbCl7dmFyIGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZC5pbm5lckhUTUw9aHRtbDtyZXR1cm4gZDt9CgpmdW5jdGlvbiBsb2dvdXQoKXsKICBpZihzdGF0ZS50b2tlbilhcGkoe2FjdGlvbjoibG9nb3V0In0sZnVuY3Rpb24oKXt9KTsKICBzdGF0ZS50b2tlbj1udWxsO3N0YXRlLnVzZXI9bnVsbDtsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgidGhnX3Nlc3Npb24iKTsKICBjYWNoZUNsZWFyQWxsKCk7CiAgaWYoYXV0b1RpbWVyKXtjbGVhckludGVydmFsKGF1dG9UaW1lcik7YXV0b1RpbWVyPW51bGw7fQogIHJlbmRlcigpOwp9CgovKiA9PT09PT09PT09PT09PT09PSDYp9mE2LXZhNin2K3Zitin2KogPT09PT09PT09PT09PT09PT0gKi8KZnVuY3Rpb24gcm9sZUxhYmVsKHIpe3JldHVybiByPT09ImFkbWluIj8i2YXYr9mK2LEiOnI9PT0ic3VwZXJ2aXNvciI\/ItmF2LTYsdmBIjpyPT09InN0YWZmIj8i2YXZiNi42YEiOiLZhdi02KfZh9iv2Kkg2YHZgti3Ijt9CmZ1bmN0aW9uIGlzQWRtaW4oKXtyZXR1cm4gc3RhdGUudXNlci5yb2xlPT09ImFkbWluIjt9CmZ1bmN0aW9uIGlzU3VwZXJ2aXNvcigpe3JldHVybiBzdGF0ZS51c2VyLnJvbGU9PT0ic3VwZXJ2aXNvciI7fQpmdW5jdGlvbiBjYW5FZGl0RGF0ZXMoKXtyZXR1cm4gaXNBZG1pbigpfHxpc1N1cGVydmlzb3IoKXx8c3RhdGUudXNlci5yb2xlPT09InN0YWZmIjt9CmZ1bmN0aW9uIGNhbk1hbmFnZVNjaGVkdWxlKCl7cmV0dXJuIGlzQWRtaW4oKXx8aXNTdXBlcnZpc29yKCk7fQoKLyogPT09PT09PT09PT09PT09PT0g2YLZiNin2YTYqCDYsdiz2KfYptmEINmI2KfYqtiz2KfYqCA9PT09PT09PT09PT09PT09PSAqLwpmdW5jdGlvbiB3YVBob25lKHApewogIHZhciBwaG9uZT1TdHJpbmcocHx8IiIpLnJlcGxhY2UoL1xEL2csIiIpOwogIGlmKHBob25lLmNoYXJBdCgwKT09PSIwIilwaG9uZT0iMiIrcGhvbmU7CiAgaWYocGhvbmUuaW5kZXhPZigiMjAiKSE9PTAmJnBob25lLmxlbmd0aD09PTEwKXBob25lPSIyMCIrcGhvbmU7CiAgcmV0dXJuIHBob25lOwp9CmZ1bmN0aW9uIHdhUmVxdWVzdExpbmsoYil7CiAgdmFyIG1zZz0i2KPZh9mE2KfZiyDYqNmDINij2LPYqtin2LAv2KkgIitiLnBhdGllbnROYW1lKyLYjCDYqtmFINin2LPYqtmE2KfZhSDYt9mE2Kgg2KfZhNit2KzYsiDYp9mE2K7Yp9i1INio2YMg2YXYuSAiK2IuZG9jdG9yKyIg2YjYrNin2LHZiiDYqtit2K\/ZitivINmF2YjYudivINin2YTZg9i02YEg2YjYs9mG2YjYp9mB2YrZg9mFINio2Ycg2YLYsdmK2KjYp9mLLiI7CiAgcmV0dXJuICJodHRwczovL3dhLm1lLyIrd2FQaG9uZShiLnBob25lKSsiP3RleHQ9IitlbmNvZGVVUklDb21wb25lbnQobXNnKTsKfQovKiDZhdi52KfYryDYqtij2YPZitivINin2YTYrdis2LIg2YrYrtiq2YTZgSDYrdiz2Kgg2KfZhNi32KjZitioICovCmZ1bmN0aW9uIGNvbmZpcm1UaW1lKGRvY3Rvcil7CiAgdmFyIGQ9U3RyaW5nKGRvY3Rvcnx8IiIpOwogIGlmKGQuaW5kZXhPZigi2KrYp9mF2LEg2KfZhNi12YrYsdmB2YkiKT4tMXx8ZC5pbmRleE9mKCLYqtin2YXYsSDYp9mE2LXZitix2YHZiiIpPi0xKXJldHVybiAi2YXZhiA5INil2YTZiSAxMSDYtdio2KfYrdiiIjsKICBpZihkLmluZGV4T2YoItmI2K3ZitivINi02YjZhdin2YYiKT4tMSlyZXR1cm4gItmF2YYgOCDYpdmE2YkgOSDYtdio2KfYrdiiIjsKICByZXR1cm4gItmF2YYgOCDYpdmE2YkgMTAg2LXYqNin2K3YoiI7Cn0KZnVuY3Rpb24gd2FEYXRlTGluayhiKXsKICB2YXIgbXNnPSLYudmF2YrZhNmG2Kcg2KfZhNi52LLZitiyINijLyAiK2IucGF0aWVudE5hbWUrItiMINiq2YUg2KrYrdiv2YrYryDZhdmI2LnYryDYp9mE2YPYtNmBINin2YTYrtin2LUg2KjZg9mFINmF2LkgIitiLmRvY3RvcisiINmI2LDZhNmDINmK2YjZhTogIitiLmFwcHREYXRlKyJcbiIrCiAgItmK2LHYrNmJINin2YTYqtmI2KfYtdmEINi52YTZiSDYp9mE2LnZitin2K\/Yp9iqINmC2KjZhCDZhdmI2LnYryDYp9mE2YPYtNmBINio2YAg2aTZqCDYs9in2LnYqSDZhNmF2LnYsdmB2Kkg2YXYudin2K8g2KfZhNi32KjZitioINio2KfZhNiq2K3Yr9mK2K8g2YXZhiDYrtmE2KfZhCDYp9mE2LHZgtmFOlxuIitDTElOSUNfUEhPTkUrIlxuIisKICAi2YTYpyDZitmI2KzYryDYqtij2YPZitivINmE2YTYrdis2LIg2KrZhNmK2YHZiNmG2YrYoiDYp9mIINmI2KfYqtizINin2KhcbiIrCiAgItiq2KPZg9mK2K8g2KfZhNit2KzYsiDYudmG2K8g2KfZhNit2LbZiNixINmB2YLYtyDZgdmJINmK2YjZhSDYp9mE2YPYtNmBXG4iKwogICLZhdi52KfYryDYqtij2YPZitivINin2YTYrdis2LI6ICIrY29uZmlybVRpbWUoYi5kb2N0b3IpKyJcbiIrCiAgItin2Ykg2KfYs9iq2YHYs9in2LEg2KLYrtixINio2LHYrNin2KEg2KfZhNiq2YjYp9i12YQg2LnZhNmJINin2YTYudmK2KfYr9in2Kog2YjZh9mK2LPYp9i52K\/ZiNinINit2LbYsdiq2YMuIjsKICByZXR1cm4gImh0dHBzOi8vd2EubWUvIit3YVBob25lKGIucGhvbmUpKyI\/dGV4dD0iK2VuY29kZVVSSUNvbXBvbmVudChtc2cpOwp9CgovKiA9PT09PT09PT09PT09PT09PSDYtNin2LTYqSDYp9mE2K\/YrtmI2YQgPT09PT09PT09PT09PT09PT0gKi8KZnVuY3Rpb24gcmVuZGVyTG9naW4oZXJyTXNnKXsKICByb290LmlubmVySFRNTD0iIjsKICB2YXIgYm94PWVsKCc8ZGl2IGNsYXNzPSJsb2dpbi13cmFwIj48ZGl2IGNsYXNzPSJsb2dpbi1ib3giPicrCiAgICAnPGltZyBjbGFzcz0ibG9nby1sb2dpbiIgc3JjPSInK0xPR09fVVJMKyciIGFsdD0i2YXYs9iq2LTZgdmJINin2YTYqtmK2LPZitixIj4nKwogICAgJzxoMT7Zhdiz2KrYtNmB2Ykg2KfZhNiq2YrYs9mK2LE8L2gxPicrCiAgICAnPHA+2YbYuNin2YUg2KXYr9in2LHYqSDYrdis2YjYstin2Kog2KfZhNi52YrYp9iv2KfYqiDYp9mE2K7Yp9ix2KzZitipPC9wPicrCiAgICAnPGRpdiBjbGFzcz0ibXNnIGVyciIgaWQ9ImxnLWVyciIgc3R5bGU9ImRpc3BsYXk6JysoZXJyTXNnPyJibG9jayI6Im5vbmUiKSsnIj4nK2VzYyhlcnJNc2d8fCIiKSsnPC9kaXY+JysKICAgICc8ZGl2IGNsYXNzPSJmaWVsZCI+PGxhYmVsPtin2LPZhSDYp9mE2YXYs9iq2K7Yr9mFPC9sYWJlbD48aW5wdXQgaWQ9ImxnLXUiIGF1dG9jb21wbGV0ZT0idXNlcm5hbWUiPjwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0iZmllbGQiPjxsYWJlbD7Zg9mE2YXYqSDYp9mE2YXYsdmI2LE8L2xhYmVsPjxpbnB1dCBpZD0ibGctcCIgdHlwZT0icGFzc3dvcmQiIGF1dG9jb21wbGV0ZT0iY3VycmVudC1wYXNzd29yZCI+PC9kaXY+JysKICAgICc8YnV0dG9uIGNsYXNzPSJidG4iIGlkPSJsZy1idG4iIHN0eWxlPSJ3aWR0aDoxMDAlO21hcmdpbi10b3A6NnB4Ij7Yqtiz2KzZitmEINin2YTYr9iu2YjZhDwvYnV0dG9uPicrCiAgJzwvZGl2PjwvZGl2PicpOwogIHJvb3QuYXBwZW5kQ2hpbGQoYm94KTsKICB2YXIgYnRuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsZy1idG4iKTsKICBmdW5jdGlvbiBzdWJtaXQoKXsKICAgIHZhciB1PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsZy11IikudmFsdWUudHJpbSgpOwogICAgdmFyIHA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxnLXAiKS52YWx1ZTsKICAgIGlmKCF1fHwhcClyZXR1cm47CiAgICBidG4uZGlzYWJsZWQ9dHJ1ZTtidG4udGV4dENvbnRlbnQ9Itis2KfYsdmNINin2YTYr9iu2YjZhC4uLiI7CiAgICBhcGkoe2FjdGlvbjoibG9naW4iLHVzZXJuYW1lOnUscGFzc3dvcmQ6cH0sZnVuY3Rpb24ocmVzKXsKICAgICAgaWYocmVzLnN1Y2Nlc3MpewogICAgICAgIHN0YXRlLnRva2VuPXJlcy5kYXRhLnRva2VuO3N0YXRlLnVzZXI9cmVzLmRhdGEudXNlcjsKICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgidGhnX3Nlc3Npb24iLEpTT04uc3RyaW5naWZ5KHt0b2tlbjpzdGF0ZS50b2tlbix1c2VyOnN0YXRlLnVzZXIsZXhwOkRhdGUubm93KCkrNiozNjAwKjEwMDB9KSk7CiAgICAgICAgc3RhdGUudGFiPSJib29raW5ncyI7cmVuZGVyKCk7CiAgICAgIH1lbHNlewogICAgICAgIHJlbmRlckxvZ2luKHJlcy5tZXNzYWdlfHwi2K3Yr9irINiu2LfYoyIpOwogICAgICB9CiAgICB9KTsKICB9CiAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixzdWJtaXQpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsZy1wIikuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsZnVuY3Rpb24oZSl7aWYoZS5rZXk9PT0iRW50ZXIiJiYhZS5pc0NvbXBvc2luZyYmZS5rZXlDb2RlIT09MjI5KXN1Ym1pdCgpO30pOwp9CgovKiA9PT09PT09PT09PT09PT09PSDYp9mE2YfZitmD2YQg2KfZhNi52KfZhSA9PT09PT09PT09PT09PT09PSAqLwpmdW5jdGlvbiB0YWJzRm9yUm9sZSgpewogIHZhciByPXN0YXRlLnVzZXIucm9sZTsKICBpZihyPT09ImFkbWluIilyZXR1cm5bWyJib29raW5ncyIsItin2YTYrdis2YjYstin2KoiXSxbIm1lc3NhZ2VzIiwi2KfZhNix2LPYp9im2YQiXSxbInNjaGVkdWxlIiwi2KzYr9mI2YQg2KfZhNi52YrYp9iv2KfYqiJdLFsibG9nIiwi2KfZhNiz2KzZhCJdLFsic3RhdHMiLCLYp9mE2KXYrdi12KfYptmK2KfYqiJdLFsidXNlcnMiLCLYp9mE2YXZiNi42YHZitmGIl1dOwogIGlmKHI9PT0ic3VwZXJ2aXNvciIpcmV0dXJuW1siYm9va2luZ3MiLCLYp9mE2K3YrNmI2LLYp9iqIl0sWyJzY2hlZHVsZSIsItis2K\/ZiNmEINin2YTYudmK2KfYr9in2KoiXV07CiAgcmV0dXJuW1siYm9va2luZ3MiLCLYp9mE2K3YrNmI2LLYp9iqIl1dOwp9CgpmdW5jdGlvbiByZW5kZXJTaGVsbCgpewogIHJvb3QuaW5uZXJIVE1MPSIiOwogIHZhciB0YWJzPXRhYnNGb3JSb2xlKCk7CiAgdmFyIGFsbG93ZWQ9dGFicy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF07fSk7CiAgaWYoYWxsb3dlZC5pbmRleE9mKHN0YXRlLnRhYik9PT0tMSlzdGF0ZS50YWI9ImJvb2tpbmdzIjsKICB2YXIgdGFic0h0bWw9dGFicy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuICc8YnV0dG9uIGRhdGEtdGFiPSInK3RbMF0rJyIgY2xhc3M9IicrKHN0YXRlLnRhYj09PXRbMF0\/Im9uIjoiIikrJyI+Jyt0WzFdKyc8L2J1dHRvbj4nO30pLmpvaW4oIiIpOwogIHZhciBpbml0aWFsPWVzYygoc3RhdGUudXNlci5uYW1lfHwiPyIpLnRyaW0oKS5jaGFyQXQoMCkpOwogIHZhciBzaGVsbD1lbCgKICAgICc8ZGl2IGNsYXNzPSJ0b3BiYXIiPjxkaXYgY2xhc3M9IndyYXAiPicrCiAgICAgICc8ZGl2IGNsYXNzPSJicmFuZCI+PGltZyBjbGFzcz0ibG9nby1pbWciIHNyYz0iJytMT0dPX1VSTCsnIiBhbHQ9ItmF2LPYqti02YHZiSDYp9mE2KrZitiz2YrYsSI+JysKICAgICAgJzxkaXY+PGgxPtit2KzZiNiy2KfYqiDYp9mE2LnZitin2K\/Yp9iqINin2YTYrtin2LHYrNmK2Kk8L2gxPjxkaXYgY2xhc3M9InN1YiI+2YXYs9iq2LTZgdmJINin2YTYqtmK2LPZitixIOKAlCDZhdis2YXZiNi52Kkg2KfZhNiq2YrYs9mK2LEg2KfZhNi32KjZitipPC9kaXY+PC9kaXY+PC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9InJvdyI+JysKICAgICAgICAnPGRpdiBjbGFzcz0idXNlcmNoaXAiPjxzcGFuIGNsYXNzPSJhdmF0YXIiPicraW5pdGlhbCsnPC9zcGFuPicrCiAgICAgICAgJzxzcGFuPicrZXNjKHN0YXRlLnVzZXIubmFtZSkrJzxkaXYgY2xhc3M9InJvbGUiPicrcm9sZUxhYmVsKHN0YXRlLnVzZXIucm9sZSkrJzwvZGl2Pjwvc3Bhbj48L2Rpdj4nKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gc2VjIiBpZD0iYnRuLWxvZ291dCIgc3R5bGU9ImJhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMSk7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwuMykiPtiu2LHZiNisPC9idXR0b24+JysKICAgICAgJzwvZGl2PicrCiAgICAnPC9kaXY+PC9kaXY+JysKICAgICc8ZGl2IGNsYXNzPSJ3cmFwIj48ZGl2IGlkPSJ0aGctYWxlcnQiPjwvZGl2PjxkaXYgY2xhc3M9InRhYnMiIGlkPSJ0aGctdGFicyI+Jyt0YWJzSHRtbCsnPC9kaXY+PGRpdiBpZD0idGhnLXZpZXciPjwvZGl2PjwvZGl2PicpOwogIHJvb3QuYXBwZW5kQ2hpbGQoc2hlbGwpOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJidG4tbG9nb3V0IikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGxvZ291dCk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRoZy10YWJzIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGUpewogICAgdmFyIGI9ZS50YXJnZXQuY2xvc2VzdCgiYnV0dG9uIik7aWYoIWIpcmV0dXJuOwogICAgc3RhdGUudGFiPWIuZ2V0QXR0cmlidXRlKCJkYXRhLXRhYiIpO3N0YXRlLnBhZ2U9MTtzdGF0ZS5tc2dQYWdlPTE7cmVuZGVyKCk7CiAgfSk7CiAgdmFyIHZpZXc9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRoZy12aWV3Iik7CiAgaWYoaXNBZG1pbigpKXN0YXJ0QXV0b1JlZnJlc2goKTsKICAvKiDYrNmE2Kgg2YXYs9io2YIg2LXYp9mF2Kog2YTYrNiv2YjZhCDYp9mE2LnZitin2K\/Yp9iqINio2LnYryDYp9iz2KrZgtix2KfYsSDYp9mE2LXZgdit2KkgLSDYo9mI2YQg2LbYuti32Kkg2LnZhNmJINin2YTYqtio2YjZitioINiq2YPZiNmGINmB2YjYsdmK2KkgKi8KICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICBpZihzdGF0ZS50b2tlbiYmY2FuTWFuYWdlU2NoZWR1bGUoKSYmIXN0YXRlLnNjaGVkdWxlJiYhY2FjaGVHZXQoInNjaGVkdWxlIikpewogICAgICBhcGkoe2FjdGlvbjoibGlzdFNjaGVkdWxlIn0sZnVuY3Rpb24ocil7aWYoci5zdWNjZXNzKXtzdGF0ZS5zY2hlZHVsZT1yLmRhdGE7Y2FjaGVTZXQoInNjaGVkdWxlIixyLmRhdGEpO319KTsKICAgIH0KICB9LDEwMDAwKTsgLyog2KjYudivIDEwINir2YjYp9mG2YkgLSDYrdiq2Ykg2YTYpyDZitiq2LLYp9it2YUg2YXYuSDYqtit2YXZitmEINin2YTYrdis2YjYstin2Kog2LnZhtivINin2YTYr9iu2YjZhCAqLwogIGlmKHN0YXRlLnRhYj09PSJib29raW5ncyIpcmVuZGVyQm9va2luZ3Modmlldyk7CiAgZWxzZSBpZihzdGF0ZS50YWI9PT0ibWVzc2FnZXMiKXJlbmRlck1lc3NhZ2VzKHZpZXcpOwogIGVsc2UgaWYoc3RhdGUudGFiPT09InNjaGVkdWxlIilyZW5kZXJTY2hlZHVsZSh2aWV3KTsKICBlbHNlIGlmKHN0YXRlLnRhYj09PSJsb2ciKXJlbmRlckxvZyh2aWV3KTsKICBlbHNlIGlmKHN0YXRlLnRhYj09PSJzdGF0cyIpcmVuZGVyU3RhdHModmlldyk7CiAgZWxzZSBpZihzdGF0ZS50YWI9PT0idXNlcnMiKXJlbmRlclVzZXJzKHZpZXcpOwp9CgpmdW5jdGlvbiByZW5kZXIoKXtpZighc3RhdGUudG9rZW4pe3JlbmRlckxvZ2luKCk7fWVsc2V7cmVuZGVyU2hlbGwoKTt9fQoKLyogPT09PT0g2LTYsdmK2Lcg2KrZhtio2YrZhyDYp9mE2YXYr9mK2LEgPT09PT0KICAg2YrYuNmH2LEg2YHZgti3INi52YbYryDYqti62YrZitixINmF2YjYudivINmD2LTZgSDZhNi52YXZitmEINmD2KfZhiDZhdmD2KrZhdmEINin2YTYrdis2LIg2KjYp9mE2YHYudmECiAgICjYp9mE2LPZg9ix2YrYqNiqINmK2YPYqtioINi52YTYp9mF2KkgItiq2LnYr9mK2YQg2YXZiNi52K982KfZhNiq2KfYsdmK2K4g2KfZhNmC2K\/ZitmFfNmI2YLYqiDYp9mE2KrYudiv2YrZhCIg2YTYrdi42Kkg2KfZhNiq2LrZitmK2LEpCiAgIOKAlCDYp9mE2KrZhtio2YrZh9in2Kog2KfZhNmC2K\/ZitmF2Kkg2KjYtdmK2Log2LPYp9io2YLYqSDZhNinINiq2Y\/Yrdiq2LPYqDog2KfZhNmG2LjYp9mFINmK2KjYr9ijINmF2YYg2KfZhNii2YYgKi8KZnVuY3Rpb24gaXNEYXRlQ2hhbmdlQWxlcnQoYil7CiAgcmV0dXJuICEhYi5hbGVydCYmU3RyaW5nKGIuYWxlcnQpLmluZGV4T2YoItiq2LnYr9mK2YQg2YXZiNi52K98Iik9PT0wOwp9CmZ1bmN0aW9uIGFsZXJ0SW5mbyhiKXsKICB2YXIgcD1TdHJpbmcoYi5hbGVydCkuc3BsaXQoInwiKTsKICByZXR1cm57b2xkRGF0ZTpwWzFdfHwiIix3aGVuOnBbMl18fCIifTsKfQpmdW5jdGlvbiB1cGRhdGVBbGVydEJhcigpewogIHZhciBib3g9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRoZy1hbGVydCIpOwogIGlmKCFib3h8fCFpc0FkbWluKCl8fCFzdGF0ZS5ib29raW5ncylyZXR1cm47CiAgdmFyIGFsZXJ0cz1zdGF0ZS5ib29raW5ncy5wZW5kaW5nLmNvbmNhdChzdGF0ZS5ib29raW5ncy5jb25maXJtZWQpLmZpbHRlcihpc0RhdGVDaGFuZ2VBbGVydCk7CiAgaWYoIWFsZXJ0cy5sZW5ndGgpe2JveC5pbm5lckhUTUw9IiI7cmV0dXJuO30KICB2YXIgbmFtZXM9YWxlcnRzLnNsaWNlKDAsMykubWFwKGZ1bmN0aW9uKGIpe3JldHVybiAiwqsiK2VzYyhiLnBhdGllbnROYW1lKSsiwrsiO30pLmpvaW4oItiMICIpOwogIGJveC5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImFsZXJ0YmFyIj48c3BhbiBjbGFzcz0iYmVsbCI+JiMxMjgyNzY7PC9zcGFuPicrCiAgICAnPHNwYW4gY2xhc3M9Imdyb3ciPtiq2YbYqNmK2Yc6INiq2YUg2KrYutmK2YrYsSDZhdmI2LnYryDZg9i02YEg2YTYudiv2K8gPGI+JythbGVydHMubGVuZ3RoKyc8L2I+INi52YXZitmEINmF2YPYqtmF2YQg2KfZhNit2KzYsiDigJQgJytuYW1lcysoYWxlcnRzLmxlbmd0aD4zPyIg2YjYotiu2LHZiNmGIjoiIikrJyDigJQg2YrYrNioINil2LHYs9in2YQg2LHYs9in2YTYqSDYqNin2YTZhdmI2LnYryDYp9mE2KzYr9mK2K88L3NwYW4+JysKICAgICc8YnV0dG9uIGNsYXNzPSJidG4gb3JhbmdlIiBpZD0iYWwtZ28iIHN0eWxlPSJwYWRkaW5nOjhweCAxNnB4Ij7Yudix2LYg2YHZiSDYp9mE2LHYs9in2KbZhDwvYnV0dG9uPjwvZGl2Pic7CiAgdmFyIGdvPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhbC1nbyIpOwogIGlmKGdvKWdvLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3N0YXRlLnRhYj0ibWVzc2FnZXMiO3N0YXRlLm1zZ1BhZ2U9MTtzdGF0ZS5tc2dTaG93QWxsPXRydWU7cmVuZGVyKCk7fSk7Cn0KCi8qINiq2K3Yr9mK2Ksg2KrZhNmC2KfYptmJINmD2YQgNjAg2KvYp9mG2YrYqSDZgdmJINin2YTYrtmE2YHZitipIC0g2YrZhNiq2YLYtyDZhdmI2KfYudmK2K8g2KfZhNmF2YjYuNmB2YrZhiDZgdmI2LEg2KrYrdiv2YrYr9mH2KcgKi8KdmFyIGF1dG9UaW1lcj1udWxsOwpmdW5jdGlvbiBzdGFydEF1dG9SZWZyZXNoKCl7CiAgaWYoYXV0b1RpbWVyKWNsZWFySW50ZXJ2YWwoYXV0b1RpbWVyKTsKICBhdXRvVGltZXI9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKICAgIGlmKCFzdGF0ZS50b2tlbnx8ZG9jdW1lbnQuaGlkZGVuKXJldHVybjsKICAgIHZhciB2aWV3PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0aGctdmlldyIpOwogICAgaWYoIXZpZXcpcmV0dXJuOwogICAgLyog2YbZgdizINiv2KfZhNipINin2YTYqtit2K\/ZitirINin2YTYrtmE2YHZiSDYp9mE2YXZiNit2K\/YqSAtINiq2YXZhti5INin2YTYt9mE2KjYp9iqINin2YTZhdiy2K\/ZiNis2Kkg2KrZhNmC2KfYptmK2KfZiwogICAgICAg2YjYpdi52KfYr9ipINin2YTYsdiz2YUg2YHZgti3INmE2Ygg2KfZhNiq2KjZiNmK2Kgg2KfZhNit2KfZhNmJINmK2LnYsdi2INin2YTYrdis2YjYstin2KogKi8KICAgIHJlZnJlc2hCb29raW5nc0JnKHZpZXcsZnVuY3Rpb24odil7CiAgICAgIGlmKHN0YXRlLnRhYj09PSJib29raW5ncyIpZHJhd0Jvb2tpbmdzKHYpOwogICAgICBlbHNlIGlmKHN0YXRlLnRhYj09PSJtZXNzYWdlcyIpZHJhd01lc3NhZ2VzKHYpOwogICAgfSk7CiAgfSw5MDAwMCk7Cn0KCi8qID09PT09PT09PT09PT09PT09INiq2LHZgtmK2YUg2KfZhNi12YHYrdin2KogPT09PT09PT09PT09PT09PT0gKi8KZnVuY3Rpb24gcGFnaW5hdGUobGlzdCxwYWdlKXsKICB2YXIgdG90YWxQYWdlcz1NYXRoLm1heCgxLE1hdGguY2VpbChsaXN0Lmxlbmd0aC9QQUdFX1NJWkUpKTsKICBpZihwYWdlPnRvdGFsUGFnZXMpcGFnZT10b3RhbFBhZ2VzOwogIHJldHVybntpdGVtczpsaXN0LnNsaWNlKChwYWdlLTEpKlBBR0VfU0laRSxwYWdlKlBBR0VfU0laRSkscGFnZTpwYWdlLHRvdGFsUGFnZXM6dG90YWxQYWdlcyx0b3RhbDpsaXN0Lmxlbmd0aH07Cn0KLyog2KrYsdmC2YrZhSDYqNij2LHZgtin2YUg2KfZhNi12YHYrdin2Ko6INmK2LnYsdi2INit2KrZiSA3INij2LLYsdin2LEg2K3ZiNmEINin2YTYtdmB2K3YqSDYp9mE2K3Yp9mE2YrYqSAqLwpmdW5jdGlvbiBwYWdlckh0bWwocCxpZFByZWZpeCl7CiAgaWYocC50b3RhbFBhZ2VzPD0xKXJldHVybiIiOwogIHZhciBzdGFydD1NYXRoLm1heCgxLHAucGFnZS0zKSxlbmQ9TWF0aC5taW4ocC50b3RhbFBhZ2VzLHN0YXJ0KzYpOwogIHN0YXJ0PU1hdGgubWF4KDEsZW5kLTYpOwogIHZhciBudW1zPSIiOwogIGlmKHN0YXJ0PjEpbnVtcys9JzxidXR0b24gY2xhc3M9InBnbnVtIiBkYXRhLXBnPSIxIj4xPC9idXR0b24+Jysoc3RhcnQ+Mj8nPHNwYW4gY2xhc3M9InBnZG90cyI+4oCmPC9zcGFuPic6IiIpOwogIGZvcih2YXIgaT1zdGFydDtpPD1lbmQ7aSsrKXsKICAgIG51bXMrPSc8YnV0dG9uIGNsYXNzPSJwZ251bScrKGk9PT1wLnBhZ2U\/IiBvbiI6IiIpKyciIGRhdGEtcGc9IicraSsnIiAnKyhpPT09cC5wYWdlPyJkaXNhYmxlZCI6IiIpKyc+JytpKyc8L2J1dHRvbj4nOwogIH0KICBpZihlbmQ8cC50b3RhbFBhZ2VzKW51bXMrPShlbmQ8cC50b3RhbFBhZ2VzLTE\/JzxzcGFuIGNsYXNzPSJwZ2RvdHMiPuKApjwvc3Bhbj4nOiIiKSsnPGJ1dHRvbiBjbGFzcz0icGdudW0iIGRhdGEtcGc9IicrcC50b3RhbFBhZ2VzKyciPicrcC50b3RhbFBhZ2VzKyc8L2J1dHRvbj4nOwogIHJldHVybiAnPGRpdiBjbGFzcz0icGFnZXIiIGlkPSInK2lkUHJlZml4KyctcGFnZXIiPicrbnVtcysKICAgICc8c3BhbiBjbGFzcz0iaW5mbyBtdXRlZCIgc3R5bGU9Im1hcmdpbi1pbmxpbmUtc3RhcnQ6MTBweCI+KNil2KzZhdin2YTZiiAnK3AudG90YWwrJyk8L3NwYW4+PC9kaXY+JzsKfQpmdW5jdGlvbiBiaW5kUGFnZXIoaWRQcmVmaXgsb25QYWdlKXsKICB2YXIgcGFnZXI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRQcmVmaXgrIi1wYWdlciIpOwogIGlmKCFwYWdlcilyZXR1cm47CiAgcGFnZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKGUpewogICAgdmFyIGI9ZS50YXJnZXQuY2xvc2VzdCgiLnBnbnVtIik7aWYoIWJ8fGIuZGlzYWJsZWQpcmV0dXJuOwogICAgb25QYWdlKE51bWJlcihiLmdldEF0dHJpYnV0ZSgiZGF0YS1wZyIpKSk7CiAgfSk7Cn0KCi8qID09PT09PT09PT09PT09PT09INin2YTYrdis2YjYstin2KogPT09PT09PT09PT09PT09PT0gKi8KLyog2KrYrdmF2YrZhCDYp9mE2K3YrNmI2LLYp9iqINio2KfZhNmD2KfYtDog2LnYsdi2INmB2YjYsdmJINmF2YYg2KfZhNiw2KfZg9ix2KkgKyDYqtit2K\/ZitirINi12KfZhdiqINmF2YYg2KfZhNi02YrYqiDZgdmJINin2YTYrtmE2YHZitipICovCmZ1bmN0aW9uIGxvYWRCb29raW5ncyh2aWV3LGRyYXdGbixmb3JjZSl7CiAgaWYoIWZvcmNlKXsKICAgIHZhciBjPXN0YXRlLmJvb2tpbmdzfHxjYWNoZUdldCgiYm9va2luZ3MiKTsKICAgIGlmKGMpewogICAgICBzdGF0ZS5ib29raW5ncz1jOwogICAgICBkcmF3Rm4odmlldyk7CiAgICAgIC8qINiq2K3Yr9mK2Ksg2YHZiNix2Ykg2KXYrNio2KfYsdmJINi52YbYryDYr9iu2YjZhCDYp9mE2KrYqNmI2YrYqCDigJQg2K3YqtmJINiq2YPZiNmGINin2YTYo9i52K\/Yp9ivINiv2YLZitmC2Kkg2K\/Yp9im2YXYp9mLICovCiAgICAgIHJlZnJlc2hCb29raW5nc0JnKHZpZXcsZHJhd0ZuLHRydWUpOwogICAgICByZXR1cm47CiAgICB9CiAgfQogIHZpZXcuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJsb2FkaW5nIj7YrNin2LHZjSDYqtit2YXZitmEINin2YTYrdis2YjYstin2KouLi48L2Rpdj4nOwogIGFwaSh7YWN0aW9uOiJsaXN0Qm9va2luZ3MifSxmdW5jdGlvbihyZXMpewogICAgaWYoIXJlcy5zdWNjZXNzKXt2aWV3LmlubmVySFRNTD0nPGRpdiBjbGFzcz0ibXNnIGVyciI+Jytlc2MocmVzLm1lc3NhZ2UpKyc8L2Rpdj4nO3JldHVybjt9CiAgICBzdGF0ZS5ib29raW5ncz1yZXMuZGF0YTtjYWNoZVNldCgiYm9va2luZ3MiLHJlcy5kYXRhKTsKICAgIGRyYXdGbih2aWV3KTsKICB9KTsKfQovKiDZhdmG2Lkg2KrYstin2K3ZhSDYp9mE2LfZhNio2KfYqjog2LfZhNioINmI2KfYrdivINmB2YLYtyDZgdmJINmG2YHYsyDYp9mE2YTYrdi42KkgLSDZiNin2YTYr9mI2LHZiSDZg9mEIDYwINir2KfZhtmK2KkgKi8KdmFyIGJrU3luYz17dDowLGJ1c3k6ZmFsc2V9OwpmdW5jdGlvbiByZWZyZXNoQm9va2luZ3NCZyh2aWV3LGRyYXdGbixmb3JjZSl7CiAgaWYoYmtTeW5jLmJ1c3kpcmV0dXJuOwogIGlmKCFmb3JjZSYmRGF0ZS5ub3coKS1ia1N5bmMudDw2MDAwMClyZXR1cm47CiAgaWYoZm9yY2UmJkRhdGUubm93KCktYmtTeW5jLnQ8NTAwMClyZXR1cm47IC8qINit2YXYp9mK2Kkg2YXZhiDYp9mE2KrZg9ix2KfYsSDYp9mE2LPYsdmK2Lkg2YHZgti3ICovCiAgYmtTeW5jLmJ1c3k9dHJ1ZTsKICBzeW5jQmFkZ2UodHJ1ZSk7CiAgYXBpKHthY3Rpb246Imxpc3RCb29raW5ncyJ9LGZ1bmN0aW9uKHJlcyl7CiAgICBia1N5bmMuYnVzeT1mYWxzZTtia1N5bmMudD1EYXRlLm5vdygpOwogICAgc3luY0JhZGdlKGZhbHNlKTsKICAgIGlmKCFyZXMuc3VjY2VzcylyZXR1cm47CiAgICB2YXIgY2hhbmdlZD1KU09OLnN0cmluZ2lmeShyZXMuZGF0YSkhPT1KU09OLnN0cmluZ2lmeShzdGF0ZS5ib29raW5ncyk7CiAgICBzdGF0ZS5ib29raW5ncz1yZXMuZGF0YTtjYWNoZVNldCgiYm9va2luZ3MiLHJlcy5kYXRhKTsKICAgIHVwZGF0ZUFsZXJ0QmFyKCk7CiAgICAvKiDYpdi52KfYr9ipINin2YTYsdiz2YUg2YHZgti3INmE2Ygg2KfZhNio2YrYp9mG2KfYqiDYp9iq2LrZitix2Kog2YHYudmE2KfZiyAtINmI2KjYtNix2Lcg2KPZhiDYp9mE2YXYs9iq2K7Yr9mFINmE2LPZhyDZgdmJINmG2YHYsyDYp9mE2KrYqNmI2YrYqCAqLwogICAgaWYoY2hhbmdlZCYmZG9jdW1lbnQuYm9keS5jb250YWlucyh2aWV3KSlkcmF3Rm4odmlldyk7CiAgfSk7Cn0KZnVuY3Rpb24gcmVuZGVyQm9va2luZ3Modmlldyxmb3JjZSl7CiAgbG9hZEJvb2tpbmdzKHZpZXcsZHJhd0Jvb2tpbmdzLGZvcmNlKTsKfQoKZnVuY3Rpb24gZHJhd0Jvb2tpbmdzKHZpZXcpewogIHZhciBlZGl0YWJsZT1jYW5FZGl0RGF0ZXMoKTsKICB2YXIgZGF0YT1zdGF0ZS5ib29raW5nczsKICB1cGRhdGVBbGVydEJhcigpOwogIC8qINin2YTYtNmK2Kog2YrYs9is2YQg2KfZhNij2K3Yr9irINmB2Ykg2KPZiNmEINi12YEg4oCUINmG2LnYsdi2INio2YbZgdizINiq2LHYqtmK2Kgg2KfZhNi02YrYqiAo2KfZhNij2K3Yr9irINio2KfZhNij2LnZhNmJKSAqLwogIHZhciBsaXN0PShzdGF0ZS5zdWJUYWI9PT0icGVuZGluZyI\/ZGF0YS5wZW5kaW5nOmRhdGEuY29uZmlybWVkKS5zbGljZSgpLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5yb3dJbmRleC1iLnJvd0luZGV4O30pOwogIHZhciBkb2N0b3JzPXt9OwogIGRhdGEucGVuZGluZy5jb25jYXQoZGF0YS5jb25maXJtZWQpLmZvckVhY2goZnVuY3Rpb24oYil7aWYoYi5kb2N0b3IpZG9jdG9yc1tiLmRvY3Rvcl09MTt9KTsKICB2YXIgcT1zdGF0ZS5zZWFyY2gudHJpbSgpOwogIGlmKHEpbGlzdD1saXN0LmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4gYi5wYXRpZW50TmFtZS5pbmRleE9mKHEpPi0xfHxiLnBob25lLmluZGV4T2YocSk+LTF8fGIuZG9jdG9yLmluZGV4T2YocSk+LTE7fSk7CiAgaWYoc3RhdGUuZG9jdG9yRmlsdGVyKWxpc3Q9bGlzdC5maWx0ZXIoZnVuY3Rpb24oYil7cmV0dXJuIGIuZG9jdG9yPT09c3RhdGUuZG9jdG9yRmlsdGVyO30pOwoKICB2YXIgcGc9cGFnaW5hdGUobGlzdCxzdGF0ZS5wYWdlKTsKICBzdGF0ZS5wYWdlPXBnLnBhZ2U7CgogIHZhciByb3dzPXBnLml0ZW1zLm1hcChmdW5jdGlvbihiKXsKICAgIHZhciBpPWIucm93SW5kZXg7CiAgICByZXR1cm4gJzx0ciBkYXRhLXJvdz0iJytpKyciPicrCiAgICAgICc8dGQ+PGI+Jytlc2MoYi5wYXRpZW50TmFtZSkrJzwvYj48ZGl2IGNsYXNzPSJtdXRlZCI+Jytlc2MoYi5yZWdEYXRlKSsnPC9kaXY+PC90ZD4nKwogICAgICAnPHRkPicrZXNjKGIuZG9jdG9yKSsnPC90ZD4nKwogICAgICAnPHRkIGRpcj0ibHRyIiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+Jytlc2MoYi5waG9uZSkrJzwvdGQ+JysKICAgICAgJzx0ZD4nKyhiLmFwcHREYXRlPyc8c3BhbiBjbGFzcz0iYmFkZ2UgZyI+Jytlc2MoYi5hcHB0RGF0ZSkrJzwvc3Bhbj4nOic8c3BhbiBjbGFzcz0iYmFkZ2UgeSI+2KjYp9mG2KrYuNin2LEg2KfZhNmF2YjYudivPC9zcGFuPicpKwogICAgICAgIChpc0RhdGVDaGFuZ2VBbGVydChiKSYmaXNBZG1pbigpPycgPHNwYW4gY2xhc3M9ImJhZGdlIGFsZXJ0Ij4mIzk3MzM7INiq2LrZitmR2LEg2KfZhNmF2YjYudivICjZg9in2YYgJytlc2MoYWxlcnRJbmZvKGIpLm9sZERhdGUpKycpPC9zcGFuPic6IiIpKyc8L3RkPicrCiAgICAgICc8dGQ+Jytlc2MoYi5ub3RlfHwi4oCUIikrJzwvdGQ+JysKICAgICAgKGVkaXRhYmxlPyc8dGQ+PGlucHV0IHR5cGU9ImRhdGUiIGNsYXNzPSJhcHB0LWRhdGUiIHN0eWxlPSJ3aWR0aDoxNTBweCIgdmFsdWU9IicrKGIuYXBwdERhdGU\/Yi5hcHB0RGF0ZS5yZXBsYWNlKC9cLy9nLCItIik6IiIpKyciIHRpdGxlPSLZitmP2K3Zgdi4INiq2YTZgtin2KbZitin2Ysg2YHZiNixINin2K7YqtmK2KfYsSDYp9mE2KrYp9ix2YrYriI+PC90ZD4nOiIiKSsnPC90cj4nOwogIH0pLmpvaW4oIiIpOwoKICB2aWV3LmlubmVySFRNTD0KICAgICc8ZGl2IGNsYXNzPSJjYXJkIj48ZGl2IGNsYXNzPSJyb3ciPicrCiAgICAgICc8ZGl2IGNsYXNzPSJncm93Ij48aW5wdXQgaWQ9ImJrLXNlYXJjaCIgcGxhY2Vob2xkZXI9Itin2KjYrdirINio2KfZhNin2LPZhSDYo9mIINin2YTZh9in2KrZgSDYo9mIINin2YTYt9io2YrYqC4uLiIgdmFsdWU9IicrZXNjKHN0YXRlLnNlYXJjaCkrJyI+PC9kaXY+JysKICAgICAgJzxzZWxlY3QgaWQ9ImJrLWRvY3RvciIgc3R5bGU9Im1heC13aWR0aDoyMjBweCI+PG9wdGlvbiB2YWx1ZT0iIj7Zg9mEINin2YTYo9i32KjYp9ihPC9vcHRpb24+JysKICAgICAgICBPYmplY3Qua2V5cyhkb2N0b3JzKS5zb3J0KCkubWFwKGZ1bmN0aW9uKGQpe3JldHVybiAnPG9wdGlvbiAnKyhzdGF0ZS5kb2N0b3JGaWx0ZXI9PT1kPyJzZWxlY3RlZCI6IiIpKyc+Jytlc2MoZCkrJzwvb3B0aW9uPic7fSkuam9pbigiIikrCiAgICAgICc8L3NlbGVjdD4nKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIHNlYyIgaWQ9ImJrLXJlZnJlc2giPtiq2K3Yr9mK2Ks8L2J1dHRvbj4nKwogICAgJzwvZGl2PjwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0idGFicyI+JysKICAgICAgJzxidXR0b24gaWQ9ImJrLXBlbmRpbmciIGNsYXNzPSInKyhzdGF0ZS5zdWJUYWI9PT0icGVuZGluZyI\/Im9uIjoiIikrJyI+2KjYp9mG2KrYuNin2LEg2KfZhNmF2YjYudivICgnK2RhdGEucGVuZGluZy5sZW5ndGgrJyk8L2J1dHRvbj4nKwogICAgICAnPGJ1dHRvbiBpZD0iYmstY29uZmlybWVkIiBjbGFzcz0iJysoc3RhdGUuc3ViVGFiPT09ImNvbmZpcm1lZCI\/Im9uIjoiIikrJyI+2KfZhNmF2KTZg9iv2KkgKCcrZGF0YS5jb25maXJtZWQubGVuZ3RoKycpPC9idXR0b24+JysKICAgICc8L2Rpdj4nKwogICAgJzxkaXYgY2xhc3M9Im1zZyIgaWQ9ImJrLW1zZyI+PC9kaXY+JysKICAgICc8ZGl2IGNsYXNzPSJjYXJkIHRibHdyYXAiPjx0YWJsZT48dGhlYWQ+PHRyPjx0aD7Yp9mE2K3Yp9mE2Kk8L3RoPjx0aD7Yp9mE2LfYqNmK2Kg8L3RoPjx0aD7Yp9mE2YfYp9iq2YE8L3RoPjx0aD7Yp9mE2YXZiNi52K88L3RoPjx0aD7ZhdmE2K3ZiNi42Kk8L3RoPicrKGVkaXRhYmxlPyc8dGg+2KrYrdiv2YrYryDYp9mE2YXZiNi52K88L3RoPic6JycpKyc8L3RyPjwvdGhlYWQ+JysKICAgICc8dGJvZHk+Jysocm93c3x8Jzx0cj48dGQgY29sc3Bhbj0iNiIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MzBweDtjb2xvcjojNmQ4NGEwIj4nKyhzdGF0ZS5zdWJUYWI9PT0icGVuZGluZyI\/ItmE2Kcg2YrZiNis2K8g2K3YrNmI2LLYp9iqINis2K\/Zitiv2Ycg2KfZhNii2YYiOiLZhNinINiq2YjYrNivINmG2KrYp9im2KwiKSsnPC90ZD48L3RyPicpKyc8L3Rib2R5PjwvdGFibGU+JysKICAgIHBhZ2VySHRtbChwZywiYmsiKSsnPC9kaXY+JzsKCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJrLXJlZnJlc2giKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtyZW5kZXJCb29raW5ncyh2aWV3LHRydWUpO30pOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiay1wZW5kaW5nIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7c3RhdGUuc3ViVGFiPSJwZW5kaW5nIjtzdGF0ZS5wYWdlPTE7ZHJhd0Jvb2tpbmdzKHZpZXcpO30pOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiay1jb25maXJtZWQiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtzdGF0ZS5zdWJUYWI9ImNvbmZpcm1lZCI7c3RhdGUucGFnZT0xO2RyYXdCb29raW5ncyh2aWV3KTt9KTsKICB2YXIgc2k9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJrLXNlYXJjaCIpOwogIHNpLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IixmdW5jdGlvbigpe3N0YXRlLnNlYXJjaD1zaS52YWx1ZTtzdGF0ZS5wYWdlPTE7ZHJhd0Jvb2tpbmdzKHZpZXcpO3ZhciBuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiay1zZWFyY2giKTtuLmZvY3VzKCk7bi5zZXRTZWxlY3Rpb25SYW5nZShuLnZhbHVlLmxlbmd0aCxuLnZhbHVlLmxlbmd0aCk7fSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImJrLWRvY3RvciIpLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsZnVuY3Rpb24oZSl7c3RhdGUuZG9jdG9yRmlsdGVyPWUudGFyZ2V0LnZhbHVlO3N0YXRlLnBhZ2U9MTtkcmF3Qm9va2luZ3Modmlldyk7fSk7CiAgYmluZFBhZ2VyKCJiayIsZnVuY3Rpb24ocGdOdW0pe3N0YXRlLnBhZ2U9cGdOdW07ZHJhd0Jvb2tpbmdzKHZpZXcpO30pOwoKICAvKiDYrdmB2Lgg2KrZhNmC2KfYptmJINmB2YjYsSDYp9iu2KrZitin2LEg2KfZhNiq2KfYsdmK2K4gLSDYqNiv2YjZhiDYstixINit2YHYuCAqLwogIHZpZXcucXVlcnlTZWxlY3RvckFsbCgiLmFwcHQtZGF0ZSIpLmZvckVhY2goZnVuY3Rpb24oaW5wKXsKICAgIGlucC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLGZ1bmN0aW9uKCl7CiAgICAgIHZhciB0cj1pbnAuY2xvc2VzdCgidHIiKTsKICAgICAgdmFyIHJvd0luZGV4PU51bWJlcih0ci5nZXRBdHRyaWJ1dGUoImRhdGEtcm93IikpOwogICAgICB2YXIgdmFsPWlucC52YWx1ZTsKICAgICAgdmFyIG1zZ0VsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJiay1tc2ciKTsKICAgICAgaW5wLmRpc2FibGVkPXRydWU7CiAgICAgIHZhciBuZXdEYXRlPXZhbD92YWwucmVwbGFjZSgvLS9nLCIvIik6IiI7CiAgICAgIGFwaSh7YWN0aW9uOiJ1cGRhdGVCb29raW5nIixyb3dJbmRleDpyb3dJbmRleCx1cGRhdGVzOnthcHB0RGF0ZTpuZXdEYXRlfX0sZnVuY3Rpb24ocmVzKXsKICAgICAgICBtc2dFbC5jbGFzc05hbWU9Im1zZyAiKyhyZXMuc3VjY2Vzcz8ib2siOiJlcnIiKTsKICAgICAgICBtc2dFbC50ZXh0Q29udGVudD1yZXMuc3VjY2Vzcz8i2KrZhSDYrdmB2Lgg2KfZhNmF2YjYudivINiq2YTZgtin2KbZitin2YsiOnJlcy5tZXNzYWdlOwogICAgICAgIGlmKHJlcy5zdWNjZXNzKXsKICAgICAgICAgIC8qINiq2K3Yr9mK2Ksg2YXYrdmE2Ykg2YHZiNix2Ykg2KjYr9mI2YYg2KXYudin2K\/YqSDYqtit2YXZitmEINmF2YYg2KfZhNi02YrYqiAqLwogICAgICAgICAgdmFyIGQ9c3RhdGUuYm9va2luZ3M7CiAgICAgICAgICB2YXIgaWR4PS0xLGI9bnVsbDsKICAgICAgICAgIGZvcih2YXIgaT0wO2k8ZC5wZW5kaW5nLmxlbmd0aDtpKyspe2lmKGQucGVuZGluZ1tpXS5yb3dJbmRleD09PXJvd0luZGV4KXtpZHg9aTtiPWQucGVuZGluZ1tpXTticmVhazt9fQogICAgICAgICAgaWYoYiYmbmV3RGF0ZSl7ZC5wZW5kaW5nLnNwbGljZShpZHgsMSk7Yi5hcHB0RGF0ZT1uZXdEYXRlO2Iuc3RhdHVzPSLYp9mD2KrZhdmEINin2YTYrdis2LIg4pyFIjtkLmNvbmZpcm1lZC5wdXNoKGIpO30KICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgIGQuY29uZmlybWVkLmNvbmNhdChkLnBlbmRpbmcpLmZvckVhY2goZnVuY3Rpb24oeCl7aWYoeC5yb3dJbmRleD09PXJvd0luZGV4KXguYXBwdERhdGU9bmV3RGF0ZTt9KTsKICAgICAgICAgICAgaWYoIW5ld0RhdGUpewogICAgICAgICAgICAgIGZvcih2YXIgaj0wO2o8ZC5jb25maXJtZWQubGVuZ3RoO2orKyl7aWYoZC5jb25maXJtZWRbal0ucm93SW5kZXg9PT1yb3dJbmRleCl7dmFyIG12PWQuY29uZmlybWVkLnNwbGljZShqLDEpWzBdO212LnN0YXR1cz0i2KjYp9mG2KrYuNin2LEg2KrYrdiv2YrYryDYp9mE2YXZiNi52K8g2YXZhiDYp9mE2LnZitin2K\/YqSDij7MiO2QucGVuZGluZy5wdXNoKG12KTticmVhazt9fQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBjYWNoZVNldCgiYm9va2luZ3MiLGQpOwogICAgICAgICAgZHJhd0Jvb2tpbmdzKHZpZXcpOwogICAgICAgIH1lbHNle2lucC5kaXNhYmxlZD1mYWxzZTt9CiAgICAgIH0pOwogICAgfSk7CiAgfSk7Cn0KCi8qID09PT09PT09PT09PT09PT09INin2YTYsdiz2KfYptmEICjZhNmE2YXYr9mK2LEg2YHZgti3KSA9PT09PT09PT09PT09PT09PSAqLwpmdW5jdGlvbiByZW5kZXJNZXNzYWdlcyh2aWV3LGZvcmNlKXsKICAvKiDZhtmB2LMg2YPYp9i0INin2YTYrdis2YjYstin2KogLSDYudix2LYg2YHZiNix2Ykg2YjYqtit2K\/ZitirINi12KfZhdiqICovCiAgbG9hZEJvb2tpbmdzKHZpZXcsZHJhd01lc3NhZ2VzLGZvcmNlKTsKfQoKZnVuY3Rpb24gZHJhd01lc3NhZ2VzKHZpZXcpewogIHVwZGF0ZUFsZXJ0QmFyKCk7CiAgLyog2KfZhNi02YrYqiDZitiz2KzZhCDYp9mE2KPYrdiv2Ksg2YHZiSDYo9mI2YQg2LXZgSDigJQg2YbYudix2LYg2KjZhtmB2LMg2KrYsdiq2YrYqCDYp9mE2LTZitiqICjYp9mE2KPYrdiv2Ksg2KjYp9mE2KPYudmE2YkpICovCiAgdmFyIGFsbD1zdGF0ZS5ib29raW5ncy5wZW5kaW5nLmNvbmNhdChzdGF0ZS5ib29raW5ncy5jb25maXJtZWQpOwogIGFsbC5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEucm93SW5kZXgtYi5yb3dJbmRleDt9KTsKICB2YXIgcT1zdGF0ZS5tc2dTZWFyY2gudHJpbSgpOwogIC8qINin2YHYqtix2KfYttmK2KfZizog2KrYuNmH2LEg2YHZgti3INin2YTYrdis2YjYstin2Kog2LrZitixINin2YTZhdmD2KrZhdmE2KkuCiAgICAg2KfZhNio2K3YqyDZiti02YXZhCDYp9mE2YPZhCDYr9in2KbZhdin2YsgLSDZiNiy2LEgIti52LHYtiDYp9mE2YXZg9iq2YXZhNipIiDZiti42YfYsSDYp9mE2YPZhCDYqNmF2Kcg2YHZitmH2YUg2KfZhNmF2YPYqtmF2YTZiNmGICjZhNmE2K3YsNmBINmF2KvZhNin2YspICovCiAgLyog2KfZhNmF2YPYqtmF2YTZiNmGINmK2Y\/YrtmB2YjZhiDYp9mB2KrYsdin2LbZitin2Ysg4oCUINil2YTYpyDZhdmGINmE2K\/ZitmHINiq2YbYqNmK2Ycg2KrYutmK2YrYsSDZhdmI2LnYryDZgdmK2LjZh9ixINiv2KfYptmF2KfZiyAqLwogIGlmKCFxJiYhc3RhdGUubXNnU2hvd0FsbClhbGw9YWxsLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4gIWIuc2VudHx8aXNEYXRlQ2hhbmdlQWxlcnQoYik7fSk7CiAgaWYocSlhbGw9YWxsLmZpbHRlcihmdW5jdGlvbihiKXtyZXR1cm4gYi5wYXRpZW50TmFtZS5pbmRleE9mKHEpPi0xfHxiLnBob25lLmluZGV4T2YocSk+LTF8fGIuZG9jdG9yLmluZGV4T2YocSk+LTE7fSk7CgogIHZhciBwZz1wYWdpbmF0ZShhbGwsc3RhdGUubXNnUGFnZSk7CiAgc3RhdGUubXNnUGFnZT1wZy5wYWdlOwoKICB2YXIgcm93cz1wZy5pdGVtcy5tYXAoZnVuY3Rpb24oYil7CiAgICAvKiDYp9mE2KPYstix2KfYsSDYqti42YQg2YbYtNi32Kkg2K\/Yp9im2YXYp9mLINmE2KXYudin2K\/YqSDYp9mE2KXYsdiz2KfZhCDYudmG2K8g2KfZhNit2KfYrNipICjYsdmC2YUg2K7Yp9i32KYg2YXYq9mE2KfZiykgKi8KICAgIHZhciByZXFCdG49JzxhIGNsYXNzPSJidG4gd2EiIHN0eWxlPSJwYWRkaW5nOjdweCAxMnB4O2ZvbnQtc2l6ZToxMi41cHg7dGV4dC1kZWNvcmF0aW9uOm5vbmUiIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIiBocmVmPSInK3dhUmVxdWVzdExpbmsoYikrJyI+2KXYsdiz2KfZhCDYt9mE2Kgg2KfZhNit2KzYsjwvYT4nOwogICAgdmFyIGRhdGVCdG49Yi5hcHB0RGF0ZQogICAgICA\/JzxhIGNsYXNzPSJidG4gb3JhbmdlIiBzdHlsZT0icGFkZGluZzo3cHggMTJweDtmb250LXNpemU6MTIuNXB4O3RleHQtZGVjb3JhdGlvbjpub25lIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciIgaHJlZj0iJyt3YURhdGVMaW5rKGIpKyciPtil2LHYs9in2YQg2KrYp9ix2YrYriDYp9mE2YPYtNmBPC9hPicKICAgICAgOic8YnV0dG9uIGNsYXNzPSJidG4iIHN0eWxlPSJwYWRkaW5nOjdweCAxMnB4O2ZvbnQtc2l6ZToxMi41cHgiIGRpc2FibGVkIHRpdGxlPSLZhNmFINmK2KrZhSDYqtit2K\/ZitivINin2YTZhdmI2LnYryDYqNi52K8iPtil2LHYs9in2YQg2KrYp9ix2YrYriDYp9mE2YPYtNmBPC9idXR0b24+JzsKICAgIC8qINit2KfZhNipINin2YTYrdis2LIg2YrYrdiv2K\/Zh9inINin2YTZhdiv2YrYsSDZitiv2YjZitin2YsgKi8KICAgIHZhciBzdFZhbD1iLnNlbnQ\/ImRvbmUiOihiLnJlY2VpdmVkPyJyZWNlaXZlZCI6Im5vbmUiKTsKICAgIHZhciBzdFNlbGVjdD0nPHNlbGVjdCBjbGFzcz0ibXMtc3RhdHVzIiBkYXRhLXJvdz0iJytiLnJvd0luZGV4KyciIHN0eWxlPSJtaW4td2lkdGg6MjAwcHg7cGFkZGluZzo3cHggMTBweDtmb250LXNpemU6MTIuNXB4Ij4nKwogICAgICAnPG9wdGlvbiB2YWx1ZT0ibm9uZSIgJysoc3RWYWw9PT0ibm9uZSI\/InNlbGVjdGVkIjoiIikrJz7ZhNmFINmK2KrZhSDYp9mE2KXYsdiz2KfZhCDYqNi52K88L29wdGlvbj4nKwogICAgICAnPG9wdGlvbiB2YWx1ZT0icmVjZWl2ZWQiICcrKHN0VmFsPT09InJlY2VpdmVkIj8ic2VsZWN0ZWQiOiIiKSsnPtiq2YUg2KXYsdiz2KfZhCDYp9mE2LfZhNioIOKAlCDYqNin2YbYqti42KfYsSDYp9mE2YXZiNi52K88L29wdGlvbj4nKwogICAgICAnPG9wdGlvbiB2YWx1ZT0iZG9uZSIgJysoc3RWYWw9PT0iZG9uZSI\/InNlbGVjdGVkIjoiIikrJz7Yp9mD2KrZhdmEINin2YTYrdis2LIg2KjYp9mE2YPYp9mF2YQ8L29wdGlvbj4nKwogICAgJzwvc2VsZWN0Pic7CiAgICB2YXIgc3RCYWRnZT1iLnNlbnQ\/JzxzcGFuIGNsYXNzPSJiYWRnZSBnIj4mIzEwMDAzOyDYp9mD2KrZhdmEPC9zcGFuPic6KGIucmVjZWl2ZWQ\/JzxzcGFuIGNsYXNzPSJiYWRnZSB5Ij4mIzkyMDM7INio2KfZhtiq2LjYp9ixINin2YTZhdmI2LnYrzwvc3Bhbj4nOic8c3BhbiBjbGFzcz0iYmFkZ2UgciI+2YTZhSDZitmP2LHYs9mEPC9zcGFuPicpOwogICAgcmV0dXJuICc8dHI+JysKICAgICAgJzx0ZD48Yj4nK2VzYyhiLnBhdGllbnROYW1lKSsnPC9iPjxkaXYgY2xhc3M9Im11dGVkIj4nK2VzYyhiLnJlZ0RhdGUpKyc8L2Rpdj48L3RkPicrCiAgICAgICc8dGQ+Jytlc2MoYi5kb2N0b3IpKyc8L3RkPicrCiAgICAgICc8dGQgZGlyPSJsdHIiIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij4nK2VzYyhiLnBob25lKSsnPC90ZD4nKwogICAgICAnPHRkPicrKGIuYXBwdERhdGU\/JzxzcGFuIGNsYXNzPSJiYWRnZSBnIj4nK2VzYyhiLmFwcHREYXRlKSsnPC9zcGFuPic6JzxzcGFuIGNsYXNzPSJiYWRnZSB5Ij7YqNin2YbYqti42KfYsSDYp9mE2YXZiNi52K88L3NwYW4+JykrCiAgICAgICAgKGlzRGF0ZUNoYW5nZUFsZXJ0KGIpPycgPHNwYW4gY2xhc3M9ImJhZGdlIGFsZXJ0Ij4mIzk3MzM7INiq2LrZitmR2LEg2KfZhNmF2YjYudivICjZg9in2YYgJytlc2MoYWxlcnRJbmZvKGIpLm9sZERhdGUpKycpPC9zcGFuPiA8YnV0dG9uIGNsYXNzPSJidG4gc2VjIG1zLWFjayIgZGF0YS1yb3c9IicrYi5yb3dJbmRleCsnIiBzdHlsZT0icGFkZGluZzo0cHggMTBweDtmb250LXNpemU6MTEuNXB4IiB0aXRsZT0i2KXYrtmB2KfYoSDYp9mE2KrZhtio2YrZhyDYqNi52K8g2KXYsdiz2KfZhCDYp9mE2LHYs9in2YTYqSDYp9mE2KzYr9mK2K\/YqSI+2KrZhdiqINin2YTZhdi52KfZhNis2Kk8L2J1dHRvbj4nOiIiKSsnPC90ZD4nKwogICAgICAnPHRkPjxkaXYgY2xhc3M9InJvdyIgc3R5bGU9ImdhcDo2cHg7ZmxleC13cmFwOm5vd3JhcCI+JytyZXFCdG4rZGF0ZUJ0bisnPC9kaXY+PC90ZD4nKwogICAgICAnPHRkPjxkaXYgY2xhc3M9InJvdyIgc3R5bGU9ImdhcDo2cHg7ZmxleC13cmFwOm5vd3JhcCI+JytzdEJhZGdlK3N0U2VsZWN0KwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gd2FybiBtcy1kZWwiIGRhdGEtcm93PSInK2Iucm93SW5kZXgrJyIgZGF0YS1uYW1lPSInK2VzYyhiLnBhdGllbnROYW1lKSsnIiBzdHlsZT0icGFkZGluZzo3cHggMTJweDtmb250LXNpemU6MTIuNXB4IiB0aXRsZT0i2K3YsNmBINin2YTYudmF2YrZhCDZhtmH2KfYptmK2KfZiyDZhdmGINin2YTZgdmI2LHZhSI+2K3YsNmBPC9idXR0b24+JysKICAgICAgJzwvZGl2PjwvdGQ+JysKICAgICc8L3RyPic7CiAgfSkuam9pbigiIik7CgogIHZpZXcuaW5uZXJIVE1MPQogICAgJzxkaXYgY2xhc3M9ImNhcmQiPjxkaXYgY2xhc3M9InJvdyI+JysKICAgICAgJzxkaXYgY2xhc3M9Imdyb3ciPjxpbnB1dCBpZD0ibXMtc2VhcmNoIiBwbGFjZWhvbGRlcj0i2KfYqNit2Ksg2KjYp9mE2KfYs9mFINij2Ygg2KfZhNmH2KfYqtmBINij2Ygg2KfZhNi32KjZitioLi4uIiB2YWx1ZT0iJytlc2Moc3RhdGUubXNnU2VhcmNoKSsnIj48L2Rpdj4nKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuICcrKHN0YXRlLm1zZ1Nob3dBbGw\/IiI6InNlYyIpKyciIGlkPSJtcy1zaG93YWxsIj4nKyhzdGF0ZS5tc2dTaG93QWxsPyLYpdiu2YHYp9ihINin2YTZhdmD2KrZhdmE2KkiOiLYudix2LYg2KfZhNmF2YPYqtmF2YTYqSIpKyc8L2J1dHRvbj4nKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIHNlYyIgaWQ9Im1zLXJlZnJlc2giPtiq2K3Yr9mK2Ks8L2J1dHRvbj4nKwogICAgJzwvZGl2PjwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0ibXNnIiBpZD0ibXMtbXNnIj48L2Rpdj4nKwogICAgJzxkaXYgY2xhc3M9ImNhcmQgdGJsd3JhcCI+PHRhYmxlPjx0aGVhZD48dHI+PHRoPtin2YTYudmF2YrZhDwvdGg+PHRoPtin2YTYt9io2YrYqDwvdGg+PHRoPtin2YTZh9in2KrZgTwvdGg+PHRoPtin2YTZhdmI2LnYrzwvdGg+PHRoPtix2LPYp9im2YQg2YjYp9iq2LPYp9ioPC90aD48dGg+2K3Yp9mE2Kkg2KfZhNit2KzYsjwvdGg+PC90cj48L3RoZWFkPicrCiAgICAnPHRib2R5PicrKHJvd3N8fCc8dHI+PHRkIGNvbHNwYW49IjYiIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjMwcHg7Y29sb3I6IzZkODRhMCI+2YTYpyDYqtmI2KzYryDYt9mE2KjYp9iqPC90ZD48L3RyPicpKyc8L3Rib2R5PjwvdGFibGU+JysKICAgIHBhZ2VySHRtbChwZywibXMiKSsnPC9kaXY+JzsKCiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1zLXJlZnJlc2giKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXtyZW5kZXJNZXNzYWdlcyh2aWV3LHRydWUpO30pOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtcy1zaG93YWxsIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7c3RhdGUubXNnU2hvd0FsbD0hc3RhdGUubXNnU2hvd0FsbDtzdGF0ZS5tc2dQYWdlPTE7ZHJhd01lc3NhZ2VzKHZpZXcpO30pOwogIHZhciBzaT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXMtc2VhcmNoIik7CiAgc2kuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLGZ1bmN0aW9uKCl7c3RhdGUubXNnU2VhcmNoPXNpLnZhbHVlO3N0YXRlLm1zZ1BhZ2U9MTtkcmF3TWVzc2FnZXModmlldyk7dmFyIG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1zLXNlYXJjaCIpO24uZm9jdXMoKTtuLnNldFNlbGVjdGlvblJhbmdlKG4udmFsdWUubGVuZ3RoLG4udmFsdWUubGVuZ3RoKTt9KTsKICBiaW5kUGFnZXIoIm1zIixmdW5jdGlvbihwZ051bSl7c3RhdGUubXNnUGFnZT1wZ051bTtkcmF3TWVzc2FnZXModmlldyk7fSk7CgogIC8qINiq2LrZitmK2LEg2K3Yp9mE2Kkg2KfZhNit2KzYsiDZitiv2YjZitin2Ysg4oCUINmK2YXYs9itINiq2YbYqNmK2YcgItmF2YjYudivINis2K\/ZitivIiDYqtmE2YLYp9im2YrYp9mLICovCiAgdmlldy5xdWVyeVNlbGVjdG9yQWxsKCIubXMtc3RhdHVzIikuZm9yRWFjaChmdW5jdGlvbihzZWwpewogICAgc2VsLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsZnVuY3Rpb24oKXsKICAgICAgdmFyIHJvd0luZGV4PU51bWJlcihzZWwuZ2V0QXR0cmlidXRlKCJkYXRhLXJvdyIpKTsKICAgICAgdmFyIHY9c2VsLnZhbHVlOwogICAgICB2YXIgdXBkYXRlcz17cmVjZWl2ZWQ6diE9PSJub25lIixzZW50OnY9PT0iZG9uZSIsY2xlYXJBbGVydDp0cnVlfTsKICAgICAgc2VsLmRpc2FibGVkPXRydWU7CiAgICAgIGFwaSh7YWN0aW9uOiJ1cGRhdGVCb29raW5nIixyb3dJbmRleDpyb3dJbmRleCx1cGRhdGVzOnVwZGF0ZXN9LGZ1bmN0aW9uKHJlcyl7CiAgICAgICAgaWYocmVzLnN1Y2Nlc3MpewogICAgICAgICAgdmFyIGI9YWxsLmZpbHRlcihmdW5jdGlvbih4KXtyZXR1cm4geC5yb3dJbmRleD09PXJvd0luZGV4O30pWzBdOwogICAgICAgICAgaWYoYil7Yi5yZWNlaXZlZD11cGRhdGVzLnJlY2VpdmVkO2Iuc2VudD11cGRhdGVzLnNlbnQ7Yi5hbGVydD0iIjt9CiAgICAgICAgICBjYWNoZVNldCgiYm9va2luZ3MiLHN0YXRlLmJvb2tpbmdzKTsKICAgICAgICAgIGRyYXdNZXNzYWdlcyh2aWV3KTsKICAgICAgICB9ZWxzZXsKICAgICAgICAgIHZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtcy1tc2ciKTtlLmNsYXNzTmFtZT0ibXNnIGVyciI7ZS50ZXh0Q29udGVudD1yZXMubWVzc2FnZTtzZWwuZGlzYWJsZWQ9ZmFsc2U7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0pOwoKICAvKiAi2KrZhdiqINin2YTZhdi52KfZhNis2KkiOiDYpdiu2YHYp9ihINiq2YbYqNmK2Ycg2KrYutmK2YrYsSDYp9mE2YXZiNi52K8g2KjYudivINil2LHYs9in2YQg2KfZhNix2LPYp9mE2Kkg2KfZhNis2K\/Zitiv2KkgKi8KICB2aWV3LnF1ZXJ5U2VsZWN0b3JBbGwoIi5tcy1hY2siKS5mb3JFYWNoKGZ1bmN0aW9uKGJ0bil7CiAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7CiAgICAgIHZhciByb3dJbmRleD1OdW1iZXIoYnRuLmdldEF0dHJpYnV0ZSgiZGF0YS1yb3ciKSk7CiAgICAgIGJ0bi5kaXNhYmxlZD10cnVlO2J0bi50ZXh0Q29udGVudD0iLi4uIjsKICAgICAgYXBpKHthY3Rpb246InVwZGF0ZUJvb2tpbmciLHJvd0luZGV4OnJvd0luZGV4LHVwZGF0ZXM6e2NsZWFyQWxlcnQ6dHJ1ZX19LGZ1bmN0aW9uKHJlcyl7CiAgICAgICAgaWYocmVzLnN1Y2Nlc3MpewogICAgICAgICAgc3RhdGUuYm9va2luZ3MucGVuZGluZy5jb25jYXQoc3RhdGUuYm9va2luZ3MuY29uZmlybWVkKS5mb3JFYWNoKGZ1bmN0aW9uKHgpe2lmKHgucm93SW5kZXg9PT1yb3dJbmRleCl4LmFsZXJ0PSIiO30pOwogICAgICAgICAgY2FjaGVTZXQoImJvb2tpbmdzIixzdGF0ZS5ib29raW5ncyk7CiAgICAgICAgICB1cGRhdGVBbGVydEJhcigpOwogICAgICAgICAgZHJhd01lc3NhZ2VzKHZpZXcpOwogICAgICAgIH1lbHNle2J0bi5kaXNhYmxlZD1mYWxzZTtidG4udGV4dENvbnRlbnQ9Itiq2YXYqiDYp9mE2YXYudin2YTYrNipIjt9CiAgICAgIH0pOwogICAgfSk7CiAgfSk7CgogIC8qINit2LDZgSDYudmF2YrZhCDZhtmH2KfYptmK2KfZiyDZhdmGINin2YTZgdmI2LHZhSDigJQg2YTZhNmF2K\/ZitixINmB2YLYtyAtINio2KrYo9mD2YrYryDZhdiy2K\/ZiNisICovCiAgdmlldy5xdWVyeVNlbGVjdG9yQWxsKCIubXMtZGVsIikuZm9yRWFjaChmdW5jdGlvbihidG4pewogICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpewogICAgICB2YXIgcm93SW5kZXg9TnVtYmVyKGJ0bi5nZXRBdHRyaWJ1dGUoImRhdGEtcm93IikpOwogICAgICB2YXIgbmFtZT1idG4uZ2V0QXR0cmlidXRlKCJkYXRhLW5hbWUiKXx8IiI7CiAgICAgIGlmKCFjb25maXJtKCLZh9mEINij2YbYqiDZhdiq2KPZg9ivINmF2YYg2K3YsNmBINin2YTYudmF2YrZhCDCqyIrbmFtZSsiwrsg2YbZh9in2KbZitin2Ysg2YXZhiDYp9mE2YHZiNix2YXYn1xu2YTYpyDZitmF2YPZhiDYp9mE2KrYsdin2KzYuSDYudmGINmH2LDYpyDYp9mE2KXYrNix2KfYoS4iKSlyZXR1cm47CiAgICAgIHZhciBtc2dFbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXMtbXNnIik7CiAgICAgIGJ0bi5kaXNhYmxlZD10cnVlO2J0bi50ZXh0Q29udGVudD0iLi4uIjsKICAgICAgYXBpKHthY3Rpb246ImRlbGV0ZUJvb2tpbmciLHJvd0luZGV4OnJvd0luZGV4fSxmdW5jdGlvbihyZXMpewogICAgICAgIGlmKHJlcy5zdWNjZXNzKXsKICAgICAgICAgIC8qINiq2K3Yr9mK2Ksg2YXYrdmE2Ykg2YHZiNix2Yk6INit2LDZgSDYp9mE2LnZhdmK2YQg2YXZhiDYp9mE2LDYp9mD2LHYqSArINiq2LnYr9mK2YQg2KPYsdmC2KfZhSDYp9mE2LXZgdmI2YEKICAgICAgICAgICAgICjYrdiw2YEg2LXZgSDZhdmGINin2YTYtNmK2Kog2YrYsdmB2Lkg2YPZhCDYp9mE2LXZgdmI2YEg2KfZhNmE2Ykg2KrYrdiq2Ycg2KjZhdmC2K\/Yp9ixIDEpICovCiAgICAgICAgICB2YXIgZD1zdGF0ZS5ib29raW5nczsKICAgICAgICAgIGQucGVuZGluZz1kLnBlbmRpbmcuZmlsdGVyKGZ1bmN0aW9uKHgpe3JldHVybiB4LnJvd0luZGV4IT09cm93SW5kZXg7fSk7CiAgICAgICAgICBkLmNvbmZpcm1lZD1kLmNvbmZpcm1lZC5maWx0ZXIoZnVuY3Rpb24oeCl7cmV0dXJuIHgucm93SW5kZXghPT1yb3dJbmRleDt9KTsKICAgICAgICAgIGQucGVuZGluZy5jb25jYXQoZC5jb25maXJtZWQpLmZvckVhY2goZnVuY3Rpb24oeCl7aWYoeC5yb3dJbmRleD5yb3dJbmRleCl4LnJvd0luZGV4LS07fSk7CiAgICAgICAgICBjYWNoZVNldCgiYm9va2luZ3MiLGQpOwogICAgICAgICAgZHJhd01lc3NhZ2VzKHZpZXcpOwogICAgICAgICAgLyog2KfZhNix2LPYp9mE2Kkg2KjYudivINil2LnYp9iv2Kkg2KfZhNix2LPZhSDYrdiq2Ykg2YTYpyDYqtmP2YXYs9itICovCiAgICAgICAgICB2YXIgbTI9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1zLW1zZyIpOwogICAgICAgICAgaWYobTIpe20yLmNsYXNzTmFtZT0ibXNnIG9rIjttMi50ZXh0Q29udGVudD0i2KrZhSDYrdiw2YEg2KfZhNi52YXZitmEIMKrIituYW1lKyLCuyDZhdmGINin2YTZgdmI2LHZhSI7fQogICAgICAgICAgLyog2KrYrdiv2YrYqyDYtdin2YXYqiDZhdmGINin2YTYtNmK2Kog2YHZiSDYp9mE2K7ZhNmB2YrYqSDZhNmE2KrYo9mD2K8g2YXZhiDYp9mE2KrYt9in2KjZgiAqLwogICAgICAgICAgcmVmcmVzaEJvb2tpbmdzQmcodmlldyxkcmF3TWVzc2FnZXMpOwogICAgICAgIH1lbHNlewogICAgICAgICAgbXNnRWwuY2xhc3NOYW1lPSJtc2cgZXJyIjttc2dFbC50ZXh0Q29udGVudD1yZXMubWVzc2FnZTsKICAgICAgICAgIGJ0bi5kaXNhYmxlZD1mYWxzZTtidG4udGV4dENvbnRlbnQ9Itit2LDZgSI7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0pOwp9CgovKiA9PT09PT09PT09PT09PT09PSDYrNiv2YjZhCDYp9mE2LnZitin2K\/Yp9iqID09PT09PT09PT09PT09PT09ICovCmZ1bmN0aW9uIHJlbmRlclNjaGVkdWxlKHZpZXcsZm9yY2UpewogIGlmKCFmb3JjZSl7CiAgICB2YXIgYz1zdGF0ZS5zY2hlZHVsZXx8Y2FjaGVHZXQoInNjaGVkdWxlIik7CiAgICBpZihjKXsKICAgICAgc3RhdGUuc2NoZWR1bGU9YztzdGF0ZS5lZGl0Um93PW51bGw7ZHJhd1NjaGVkdWxlKHZpZXcpOwogICAgICAvKiDYqtit2K\/ZitirINi12KfZhdiqINmB2Ykg2KfZhNiu2YTZgdmK2KkgKi8KICAgICAgc3luY0JhZGdlKHRydWUpOwogICAgICBhcGkoe2FjdGlvbjoibGlzdFNjaGVkdWxlIn0sZnVuY3Rpb24ocmVzKXsKICAgICAgICBzeW5jQmFkZ2UoZmFsc2UpOwogICAgICAgIGlmKCFyZXMuc3VjY2VzcylyZXR1cm47CiAgICAgICAgdmFyIGNoYW5nZWQ9SlNPTi5zdHJpbmdpZnkocmVzLmRhdGEpIT09SlNPTi5zdHJpbmdpZnkoc3RhdGUuc2NoZWR1bGUpOwogICAgICAgIHN0YXRlLnNjaGVkdWxlPXJlcy5kYXRhO2NhY2hlU2V0KCJzY2hlZHVsZSIscmVzLmRhdGEpOwogICAgICAgIGlmKGNoYW5nZWQmJmRvY3VtZW50LmJvZHkuY29udGFpbnModmlldykmJnN0YXRlLmVkaXRSb3c9PT1udWxsKWRyYXdTY2hlZHVsZSh2aWV3KTsKICAgICAgfSk7CiAgICAgIHJldHVybjsKICAgIH0KICB9CiAgdmlldy5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImxvYWRpbmciPtis2KfYsdmNINiq2K3ZhdmK2YQg2KfZhNis2K\/ZiNmELi4uPC9kaXY+JzsKICBhcGkoe2FjdGlvbjoibGlzdFNjaGVkdWxlIn0sZnVuY3Rpb24ocmVzKXsKICAgIGlmKCFyZXMuc3VjY2Vzcyl7dmlldy5pbm5lckhUTUw9JzxkaXYgY2xhc3M9Im1zZyBlcnIiPicrZXNjKHJlcy5tZXNzYWdlKSsnPC9kaXY+JztyZXR1cm47fQogICAgc3RhdGUuc2NoZWR1bGU9cmVzLmRhdGE7Y2FjaGVTZXQoInNjaGVkdWxlIixyZXMuZGF0YSk7c3RhdGUuZWRpdFJvdz1udWxsO2RyYXdTY2hlZHVsZSh2aWV3KTsKICB9KTsKfQoKLyogPT09PT0g2KfYrtiq2YrYp9ixINmF2KrYudiv2K8gKNij2YrYp9mFIC8g2KrZiNmC2YrYqtin2KopID09PT09CiAgINmF2YfZhSDYrNiv2KfZizog2K7ZhNin2YrYpyDYp9mE2LTZitiqINmC2YjYp9im2YUg2YXZhtiz2K\/ZhNipINmF2KrYudiv2K\/YqSDYp9mE2KfYrtiq2YrYp9ixIChjaGlwcykKICAg2YjYtdmK2LrYqtmH2Kcg2KfZhNiv2KfYrtmE2YrYqTog2KfZhNmC2YrZhSDZhdmB2LXZiNmE2Kkg2KjZgdin2LXZhNipINil2YbYrNmE2YrYstmK2KkgKyDZhdiz2KfZgdipICIsICIKICAg2KPZiSDYtdmK2LrYqSDYo9iu2LHZiSAo2YXYq9mEINin2YTZgdin2LXZhNipINin2YTYudix2KjZitipICLYjCIpINmK2LHZgdi22YfYpyDYp9mE2LTZitiqINmD2KXYr9iu2KfZhCDYutmK2LEg2LXYp9mE2K0gKi8KdmFyIENISVBfU0VQPSIsICI7CmZ1bmN0aW9uIHNwbGl0RGF5cyhzdHIpewogIHJldHVybiBTdHJpbmcoc3RyfHwiIikuc3BsaXQoL1vYjCxdLykubWFwKGZ1bmN0aW9uKHMpe3JldHVybiBzLnRyaW0oKTt9KS5maWx0ZXIoQm9vbGVhbik7Cn0KZnVuY3Rpb24gY2hpcHNIdG1sKGNscyxpdGVtcyxzZWxlY3RlZFN0cil7CiAgdmFyIHNlbD1zcGxpdERheXMoc2VsZWN0ZWRTdHIpOwogIHJldHVybiAnPGRpdiBjbGFzcz0iZGF5Y2hpcHMgJytjbHMrJyI+JytpdGVtcy5tYXAoZnVuY3Rpb24oZCl7CiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPSJkYXljaGlwJysoc2VsLmluZGV4T2YoZCk+LTE\/IiBvbiI6IiIpKyciIGRhdGEtdmFsPSInK2VzYyhkKSsnIj4nK2VzYyhkKSsnPC9zcGFuPic7CiAgfSkuam9pbigiIikrJzwvZGl2Pic7Cn0KZnVuY3Rpb24gd2lyZURheUNoaXBzKGNvbnRhaW5lcil7CiAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5kYXljaGlwIikuZm9yRWFjaChmdW5jdGlvbihjaCl7CiAgICBjaC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXsKICAgICAgdmFyIHZhbD1jaC5nZXRBdHRyaWJ1dGUoImRhdGEtdmFsIik7CiAgICAgIGlmKHZhbD09PSLZitmI2YXZitin2YsiKXsKICAgICAgICAvKiDZitmI2YXZitin2Ysg2K3Ytdix2Yk6INmK2YTYutmJINio2KfZgtmJINin2YTYo9mK2KfZhSAqLwogICAgICAgIHZhciB0dXJuT249IWNoLmNsYXNzTGlzdC5jb250YWlucygib24iKTsKICAgICAgICBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgiLmRheWNoaXAiKS5mb3JFYWNoKGZ1bmN0aW9uKHgpe3guY2xhc3NMaXN0LnJlbW92ZSgib24iKTt9KTsKICAgICAgICBpZih0dXJuT24pY2guY2xhc3NMaXN0LmFkZCgib24iKTsKICAgICAgfWVsc2V7CiAgICAgICAgdmFyIGRhaWx5PWNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuZGF5Y2hpcFtkYXRhLXZhbD0i2YrZiNmF2YrYp9mLIl0nKTsKICAgICAgICBpZihkYWlseSlkYWlseS5jbGFzc0xpc3QucmVtb3ZlKCJvbiIpOwogICAgICAgIGNoLmNsYXNzTGlzdC50b2dnbGUoIm9uIik7CiAgICAgIH0KICAgIH0pOwogIH0pOwp9CmZ1bmN0aW9uIHJlYWRDaGlwcyhjb250YWluZXIpewogIC8qINin2YTYrdmB2Lgg2KjZhtmB2LMg2LXZiti62Kkg2KfZhNi02YrYqiDYqtmF2KfZhdin2YsgLSDZiNio2YbZgdizINiq2LHYqtmK2Kgg2KfZhNmC2KfYptmF2Kkg2KfZhNir2KfYqNiq2KkgKi8KICByZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCIuZGF5Y2hpcC5vbiIpLGZ1bmN0aW9uKHgpewogICAgcmV0dXJuIHguZ2V0QXR0cmlidXRlKCJkYXRhLXZhbCIpOwogIH0pLmpvaW4oQ0hJUF9TRVApOwp9CgpmdW5jdGlvbiBkcmF3U2NoZWR1bGUodmlldyl7CiAgdmFyIGNhbk1hbmFnZT1jYW5NYW5hZ2VTY2hlZHVsZSgpOwogIC8qINin2YTYqtis2YXZiti5INio2KrYsdiq2YrYqCDYuNmH2YjYsSDYp9mE2LnZitin2K\/Yp9iqINmB2Ykg2KfZhNi02YrYqiDZg9mF2Kcg2YfZiSAtINio2K\/ZiNmGINil2LnYp9iv2Kkg2KrYsdiq2YrYqCAqLwogIHZhciBncm91cHM9e30sb3JkZXI9W107CiAgc3RhdGUuc2NoZWR1bGUuZm9yRWFjaChmdW5jdGlvbihyKXsKICAgIHZhciBjPXIuY2xpbmljfHwi2LrZitixINmF2K3Yr9ivIjsKICAgIGlmKCFncm91cHNbY10pe2dyb3Vwc1tjXT1bXTtvcmRlci5wdXNoKGMpO30KICAgIGdyb3Vwc1tjXS5wdXNoKHIpOwogIH0pOwogIHZhciBieVJvdz17fTtzdGF0ZS5zY2hlZHVsZS5mb3JFYWNoKGZ1bmN0aW9uKHIpe2J5Um93W3Iucm93SW5kZXhdPXI7fSk7CiAgdmFyIGh0bWw9JzxkaXYgY2xhc3M9Im1zZyIgaWQ9InNjLW1zZyI+PC9kaXY+JzsKICBpZihjYW5NYW5hZ2UpewogICAgaHRtbCs9JzxkaXYgY2xhc3M9ImNhcmQiPjxoMj7Ypdi22KfZgdipINmF2YjYudivINis2K\/ZitivPC9oMj4nKwogICAgICAnPGRpdiBjbGFzcz0icm93IiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMHB4Ij4nKwogICAgICAgICc8c2VsZWN0IGlkPSJzYy1jbGluaWMiIGNsYXNzPSJncm93Ij48b3B0aW9uIHZhbHVlPSIiPtin2K7YqtixINin2YTYudmK2KfYr9ipLi4uPC9vcHRpb24+JytvcHRpb25zSHRtbChDTElOSUNTLCIiKSsnPC9zZWxlY3Q+JysKICAgICAgICAnPGlucHV0IGlkPSJzYy1kb2N0b3IiIGNsYXNzPSJncm93IiBwbGFjZWhvbGRlcj0i2KfYs9mFINin2YTYt9io2YrYqCI+JysKICAgICAgICAnPHNlbGVjdCBpZD0ic2MtdHlwZSIgc3R5bGU9Im1heC13aWR0aDoxNDBweCI+PG9wdGlvbj7YqNin2YTYrdi22YjYsTwvb3B0aW9uPjxvcHRpb24+2KjYp9mE2K3YrNiyINin2YTZhdiz2KjZgjwvb3B0aW9uPjwvc2VsZWN0PicrCiAgICAgICc8L2Rpdj4nKwogICAgICAnPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxMHB4Ij48ZGl2IGNsYXNzPSJtdXRlZCIgc3R5bGU9ImZvbnQtc2l6ZToxMi41cHg7bWFyZ2luLWJvdHRvbTo2cHgiPtin2YTYo9mK2KfZhSAo2KfYrtiq2LEg2YrZiNmFINij2Ygg2KPZg9ir2LEpOjwvZGl2PicrCiAgICAgICAgY2hpcHNIdG1sKCJzYy1kYXlzIixEQVlTLCIiKSsnPC9kaXY+JysKICAgICAgJzxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206MTBweCI+PGRpdiBjbGFzcz0ibXV0ZWQiIHN0eWxlPSJmb250LXNpemU6MTIuNXB4O21hcmdpbi1ib3R0b206NnB4Ij7Yp9mE2LPYp9i52KkgKNin2K7YqtixINiq2YjZgtmK2Kog2KPZiCDYo9mD2KvYsSk6PC9kaXY+JysKICAgICAgICBjaGlwc0h0bWwoInNjLXRpbWVzIixUSU1FUywiIikrJzwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJyb3ciIHN0eWxlPSJhbGlnbi1pdGVtczpjZW50ZXIiPicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biIgaWQ9InNjLWFkZCI+2KXYttin2YHYqTwvYnV0dG9uPicrCiAgICAgICAgJzxzcGFuIGNsYXNzPSJtdXRlZCIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4Ij7ZhNi32KjZitioINmE2Ycg2YXZiNin2LnZitivINmF2K7YqtmE2YHYqSDZgdmJINij2YrYp9mFINmF2K7YqtmE2YHYqTog2KPYttmBINi12YHYp9mLINmE2YPZhCDZhdi52KfYryDYqNmG2YHYsyDYp9iz2YUg2KfZhNi32KjZitioPC9zcGFuPicrCiAgICAgICc8L2Rpdj4nKwogICAgJzwvZGl2Pic7CiAgfQogIG9yZGVyLmZvckVhY2goZnVuY3Rpb24oY2xpbmljKXsKICAgIGh0bWwrPSc8ZGl2IGNsYXNzPSJjYXJkIj48aDI+Jytlc2MoY2xpbmljKSsnIDxzcGFuIGNsYXNzPSJtdXRlZCI+KCcrZ3JvdXBzW2NsaW5pY10ubGVuZ3RoKycg2YXZiNi52K8pPC9zcGFuPjwvaDI+PGRpdiBjbGFzcz0idGJsd3JhcCI+PHRhYmxlPicrCiAgICAgICc8dGhlYWQ+PHRyPjx0aD7Yp9mE2LfYqNmK2Kg8L3RoPjx0aD7Yp9mE2YrZiNmFPC90aD48dGg+2YbYuNin2YUg2KfZhNit2KzYsjwvdGg+JysoY2FuTWFuYWdlPyc8dGggc3R5bGU9IndpZHRoOjE3MHB4Ij7Ypdis2LHYp9ih2KfYqjwvdGg+JzonJykrJzwvdHI+PC90aGVhZD48dGJvZHk+JysKICAgICAgZ3JvdXBzW2NsaW5pY10ubWFwKGZ1bmN0aW9uKHIpewogICAgICAgIGlmKGNhbk1hbmFnZSYmc3RhdGUuZWRpdFJvdz09PXIucm93SW5kZXgpewogICAgICAgICAgcmV0dXJuICc8dHIgZGF0YS1yb3c9Iicrci5yb3dJbmRleCsnIj4nKwogICAgICAgICAgICAnPHRkPjxpbnB1dCBjbGFzcz0iZWQtZG9jdG9yIiB2YWx1ZT0iJytlc2Moci5kb2N0b3IpKyciPjwvdGQ+JysKICAgICAgICAgICAgJzx0ZD48ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDo4cHg7bWluLXdpZHRoOjMwMHB4Ij4nKwogICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJtdXRlZCIgc3R5bGU9ImZvbnQtc2l6ZToxMS41cHgiPtin2YTYo9mK2KfZhTo8L2Rpdj4nK2NoaXBzSHRtbCgiZWQtZGF5cyIsREFZUyxyLmRheSkrCiAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9Im11dGVkIiBzdHlsZT0iZm9udC1zaXplOjExLjVweCI+2KfZhNiz2KfYudipOjwvZGl2PicrY2hpcHNIdG1sKCJlZC10aW1lcyIsVElNRVMsci50aW1lKSsKICAgICAgICAgICAgJzwvZGl2PjwvdGQ+JysKICAgICAgICAgICAgJzx0ZD48c2VsZWN0IGNsYXNzPSJlZC10eXBlIj48b3B0aW9uICcrKHIuYm9va2luZ1R5cGUuaW5kZXhPZigi2YXYs9io2YIiKT09PS0xPyJzZWxlY3RlZCI6IiIpKyc+2KjYp9mE2K3YttmI2LE8L29wdGlvbj48b3B0aW9uICcrKHIuYm9va2luZ1R5cGUuaW5kZXhPZigi2YXYs9io2YIiKT4tMT8ic2VsZWN0ZWQiOiIiKSsnPtio2KfZhNit2KzYsiDYp9mE2YXYs9io2YI8L29wdGlvbj48L3NlbGVjdD48L3RkPicrCiAgICAgICAgICAgICc8dGQ+PGRpdiBjbGFzcz0icm93IiBzdHlsZT0iZ2FwOjZweDtmbGV4LXdyYXA6bm93cmFwIj4nKwogICAgICAgICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gc2Mtc2F2ZSIgc3R5bGU9InBhZGRpbmc6NnB4IDEycHg7Zm9udC1zaXplOjEyLjVweCI+2K3Zgdi4PC9idXR0b24+JysKICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIHNlYyBzYy1jYW5jZWwiIHN0eWxlPSJwYWRkaW5nOjZweCAxMnB4O2ZvbnQtc2l6ZToxMi41cHgiPtil2YTYutin2KE8L2J1dHRvbj4nKwogICAgICAgICAgICAnPC9kaXY+PC90ZD48L3RyPic7CiAgICAgICAgfQogICAgICAgIHJldHVybiAnPHRyIGRhdGEtcm93PSInK3Iucm93SW5kZXgrJyI+PHRkPjxiPicrZXNjKHIuZG9jdG9yKSsnPC9iPjwvdGQ+PHRkPicrZXNjKHIuZGF5KSsoci50aW1lPycgPHNwYW4gY2xhc3M9Im11dGVkIiBzdHlsZT0iZm9udC1zaXplOjEycHgiPignK2VzYyhyLnRpbWUpKycpPC9zcGFuPic6JycpKyc8L3RkPicrCiAgICAgICAgJzx0ZD4nKyhyLmJvb2tpbmdUeXBlPyc8c3BhbiBjbGFzcz0iYmFkZ2UgJysoci5ib29raW5nVHlwZS5pbmRleE9mKCLZhdiz2KjZgiIpPi0xPyJ5IjoiZyIpKyciPicrZXNjKHIuYm9va2luZ1R5cGUpKyc8L3NwYW4+Jzoi4oCUIikrJzwvdGQ+JysKICAgICAgICAoY2FuTWFuYWdlPyc8dGQ+PGRpdiBjbGFzcz0icm93IiBzdHlsZT0iZ2FwOjZweDtmbGV4LXdyYXA6bm93cmFwIj4nKwogICAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBzZWMgc2MtZWRpdCIgc3R5bGU9InBhZGRpbmc6NnB4IDEycHg7Zm9udC1zaXplOjEyLjVweCI+2KrYudiv2YrZhDwvYnV0dG9uPicrCiAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIHdhcm4gc2MtZGVsIiBzdHlsZT0icGFkZGluZzo2cHggMTJweDtmb250LXNpemU6MTIuNXB4Ij7Yrdiw2YE8L2J1dHRvbj4nKwogICAgICAgICc8L2Rpdj48L3RkPic6JycpKyc8L3RyPic7CiAgICAgIH0pLmpvaW4oIiIpKyc8L3Rib2R5PjwvdGFibGU+PC9kaXY+PC9kaXY+JzsKICB9KTsKICB2aWV3LmlubmVySFRNTD1odG1sOwogIGlmKCFjYW5NYW5hZ2UpcmV0dXJuOwoKICBmdW5jdGlvbiBzaG93RXJyKHRleHQpe3ZhciBtc2c9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNjLW1zZyIpO21zZy5jbGFzc05hbWU9Im1zZyBlcnIiO21zZy50ZXh0Q29udGVudD10ZXh0O30KCiAgLyog2KrZgdi52YrZhCDYo9iy2LHYp9ixINin2YTYo9mK2KfZhSDZgdmJINmB2YjYsdmFINin2YTYpdi22KfZgdipINmI2LXZgSDYp9mE2KrYudiv2YrZhCAqLwogIHZpZXcucXVlcnlTZWxlY3RvckFsbCgiLmRheWNoaXBzIikuZm9yRWFjaCh3aXJlRGF5Q2hpcHMpOwoKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2MtYWRkIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7CiAgICB2YXIgcm93PXtjbGluaWM6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNjLWNsaW5pYyIpLnZhbHVlLGRvY3Rvcjpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic2MtZG9jdG9yIikudmFsdWUudHJpbSgpLAogICAgICBkYXk6cmVhZENoaXBzKHZpZXcucXVlcnlTZWxlY3RvcigiLnNjLWRheXMiKSksdGltZTpyZWFkQ2hpcHModmlldy5xdWVyeVNlbGVjdG9yKCIuc2MtdGltZXMiKSksCiAgICAgIGJvb2tpbmdUeXBlOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzYy10eXBlIikudmFsdWV9OwogICAgaWYoIXJvdy5jbGluaWN8fCFyb3cuZG9jdG9yKXtzaG93RXJyKCLYp9iu2KrYsSDYp9mE2LnZitin2K\/YqSDZiNin2YPYqtioINin2LPZhSDYp9mE2LfYqNmK2KgiKTtyZXR1cm47fQogICAgaWYoIXJvdy5kYXkpe3Nob3dFcnIoItin2K7YqtixINmK2YjZhdin2Ysg2YjYp9it2K\/Yp9mLINi52YTZiSDYp9mE2KPZgtmEIik7cmV0dXJuO30KICAgIGlmKCFyb3cudGltZSl7c2hvd0Vycigi2KfYrtiq2LEg2KrZiNmC2YrYqtin2Ysg2YjYp9it2K\/Yp9mLINi52YTZiSDYp9mE2KPZgtmEIik7cmV0dXJuO30KICAgIGFwaSh7YWN0aW9uOiJhZGRTY2hlZHVsZVJvdyIscm93OnJvd30sZnVuY3Rpb24ocmVzKXsKICAgICAgaWYocmVzLnN1Y2Nlc3MpcmVuZGVyU2NoZWR1bGUodmlldyx0cnVlKTtlbHNlIHNob3dFcnIocmVzLm1lc3NhZ2UpOwogICAgfSk7CiAgfSk7CiAgdmlldy5xdWVyeVNlbGVjdG9yQWxsKCIuc2MtZWRpdCIpLmZvckVhY2goZnVuY3Rpb24oYnRuKXsKICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXsKICAgICAgc3RhdGUuZWRpdFJvdz1OdW1iZXIoYnRuLmNsb3Nlc3QoInRyIikuZ2V0QXR0cmlidXRlKCJkYXRhLXJvdyIpKTsKICAgICAgZHJhd1NjaGVkdWxlKHZpZXcpOwogICAgfSk7CiAgfSk7CiAgdmlldy5xdWVyeVNlbGVjdG9yQWxsKCIuc2MtY2FuY2VsIikuZm9yRWFjaChmdW5jdGlvbihidG4pewogICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpe3N0YXRlLmVkaXRSb3c9bnVsbDtkcmF3U2NoZWR1bGUodmlldyk7fSk7CiAgfSk7CiAgdmlldy5xdWVyeVNlbGVjdG9yQWxsKCIuc2Mtc2F2ZSIpLmZvckVhY2goZnVuY3Rpb24oYnRuKXsKICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXsKICAgICAgdmFyIHRyPWJ0bi5jbG9zZXN0KCJ0ciIpOwogICAgICB2YXIgcm93SW5kZXg9TnVtYmVyKHRyLmdldEF0dHJpYnV0ZSgiZGF0YS1yb3ciKSk7CiAgICAgIHZhciBvcmlnPWJ5Um93W3Jvd0luZGV4XXx8e307CiAgICAgIHZhciBkYXlWYWw9cmVhZENoaXBzKHRyLnF1ZXJ5U2VsZWN0b3IoIi5lZC1kYXlzIikpOwogICAgICB2YXIgdGltZVZhbD1yZWFkQ2hpcHModHIucXVlcnlTZWxlY3RvcigiLmVkLXRpbWVzIikpOwogICAgICB2YXIgcm93PXsKICAgICAgICBjbGluaWM6b3JpZy5jbGluaWN8fCIiLAogICAgICAgIGRvY3Rvcjp0ci5xdWVyeVNlbGVjdG9yKCIuZWQtZG9jdG9yIikudmFsdWUudHJpbSgpLAogICAgICAgIGRheTpkYXlWYWx8fG9yaWcuZGF5fHwiIiwKICAgICAgICB0aW1lOnRpbWVWYWx8fG9yaWcudGltZXx8IiIsCiAgICAgICAgYm9va2luZ1R5cGU6dHIucXVlcnlTZWxlY3RvcigiLmVkLXR5cGUiKS52YWx1ZQogICAgICB9OwogICAgICBpZighcm93LmRvY3Rvcil7c2hvd0Vycigi2KfYs9mFINin2YTYt9io2YrYqCDZhdi32YTZiNioIik7cmV0dXJuO30KICAgICAgaWYoIXJvdy5kYXkpe3Nob3dFcnIoItin2K7YqtixINmK2YjZhdin2Ysg2YjYp9it2K\/Yp9mLINi52YTZiSDYp9mE2KPZgtmEIik7cmV0dXJuO30KICAgICAgaWYoIXJvdy50aW1lKXtzaG93RXJyKCLYp9iu2KrYsSDYqtmI2YLZitiq2KfZiyDZiNin2K3Yr9in2Ysg2LnZhNmJINin2YTYo9mC2YQiKTtyZXR1cm47fQogICAgICBidG4uZGlzYWJsZWQ9dHJ1ZTtidG4udGV4dENvbnRlbnQ9Ii4uLiI7CiAgICAgIGFwaSh7YWN0aW9uOiJ1cGRhdGVTY2hlZHVsZVJvdyIscm93SW5kZXg6cm93SW5kZXgscm93OnJvd30sZnVuY3Rpb24ocmVzKXsKICAgICAgICBpZihyZXMuc3VjY2VzcylyZW5kZXJTY2hlZHVsZSh2aWV3LHRydWUpO2Vsc2Ugc2hvd0VycihyZXMubWVzc2FnZSk7CiAgICAgIH0pOwogICAgfSk7CiAgfSk7CiAgdmlldy5xdWVyeVNlbGVjdG9yQWxsKCIuc2MtZGVsIikuZm9yRWFjaChmdW5jdGlvbihidG4pewogICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIixmdW5jdGlvbigpewogICAgICBpZighd2luZG93LmNvbmZpcm0oItiq2KPZg9mK2K8g2K3YsNmBINmH2LDYpyDYp9mE2YXZiNi52K8g2YXZhiDYp9mE2KzYr9mI2YTYnyIpKXJldHVybjsKICAgICAgdmFyIHJvd0luZGV4PU51bWJlcihidG4uY2xvc2VzdCgidHIiKS5nZXRBdHRyaWJ1dGUoImRhdGEtcm93IikpOwogICAgICBhcGkoe2FjdGlvbjoiZGVsZXRlU2NoZWR1bGVSb3ciLHJvd0luZGV4OnJvd0luZGV4fSxmdW5jdGlvbihyZXMpewogICAgICAgIGlmKHJlcy5zdWNjZXNzKXJlbmRlclNjaGVkdWxlKHZpZXcsdHJ1ZSk7ZWxzZSBzaG93RXJyKHJlcy5tZXNzYWdlKTsKICAgICAgfSk7CiAgICB9KTsKICB9KTsKfQoKLyogPT09PT09PT09PT09PT09PT0g2KfZhNiz2KzZhCAo2YTZhNmF2K\/ZitixINmB2YLYtykgPT09PT09PT09PT09PT09PT0gKi8KZnVuY3Rpb24gcmVuZGVyTG9nKHZpZXcsZm9yY2UpewogIGlmKCFmb3JjZSl7CiAgICB2YXIgYz1zdGF0ZS5sb2d8fGNhY2hlR2V0KCJsb2ciKTsKICAgIGlmKGMpewogICAgICBzdGF0ZS5sb2c9YztkcmF3TG9nKHZpZXcpOwogICAgICBzeW5jQmFkZ2UodHJ1ZSk7CiAgICAgIGFwaSh7YWN0aW9uOiJsaXN0TG9nIn0sZnVuY3Rpb24ocmVzKXsKICAgICAgICBzeW5jQmFkZ2UoZmFsc2UpOwogICAgICAgIGlmKCFyZXMuc3VjY2VzcylyZXR1cm47CiAgICAgICAgdmFyIGNoYW5nZWQ9SlNPTi5zdHJpbmdpZnkocmVzLmRhdGEpIT09SlNPTi5zdHJpbmdpZnkoc3RhdGUubG9nKTsKICAgICAgICBzdGF0ZS5sb2c9cmVzLmRhdGE7Y2FjaGVTZXQoImxvZyIscmVzLmRhdGEpOwogICAgICAgIGlmKGNoYW5nZWQmJmRvY3VtZW50LmJvZHkuY29udGFpbnModmlldykpZHJhd0xvZyh2aWV3KTsKICAgICAgfSk7CiAgICAgIHJldHVybjsKICAgIH0KICB9CiAgdmlldy5pbm5lckhUTUw9JzxkaXYgY2xhc3M9ImxvYWRpbmciPtis2KfYsdmNINiq2K3ZhdmK2YQg2KfZhNiz2KzZhC4uLjwvZGl2Pic7CiAgYXBpKHthY3Rpb246Imxpc3RMb2cifSxmdW5jdGlvbihyZXMpewogICAgaWYoIXJlcy5zdWNjZXNzKXt2aWV3LmlubmVySFRNTD0nPGRpdiBjbGFzcz0ibXNnIGVyciI+Jytlc2MocmVzLm1lc3NhZ2UpKyc8L2Rpdj4nO3JldHVybjt9CiAgICBzdGF0ZS5sb2c9cmVzLmRhdGE7Y2FjaGVTZXQoImxvZyIscmVzLmRhdGEpO3N0YXRlLmxvZ1BhZ2U9MTtkcmF3TG9nKHZpZXcpOwogIH0pOwp9CmZ1bmN0aW9uIGRyYXdMb2codmlldyl7CiAgLyog2KfZhNij2K3Yr9irINio2KfZhNij2LnZhNmJICovCiAgdmFyIGxpc3Q9c3RhdGUubG9nLnNsaWNlKCkucmV2ZXJzZSgpOwogIHZhciBwZz1wYWdpbmF0ZShsaXN0LHN0YXRlLmxvZ1BhZ2V8fDEpOwogIHN0YXRlLmxvZ1BhZ2U9cGcucGFnZTsKICB2YXIgcm93cz1wZy5pdGVtcy5tYXAoZnVuY3Rpb24oZSl7CiAgICByZXR1cm4gJzx0cj4nKwogICAgICAnPHRkIHN0eWxlPSJ3aGl0ZS1zcGFjZTpub3dyYXAiIGRpcj0ibHRyIj4nK2VzYyhlLnRpbWUpKyc8L3RkPicrCiAgICAgICc8dGQ+PGI+Jytlc2MoZS51c2VyKSsnPC9iPjxkaXYgY2xhc3M9Im11dGVkIj4nK2VzYyhlLnJvbGUpKyc8L2Rpdj48L3RkPicrCiAgICAgICc8dGQ+PHNwYW4gY2xhc3M9ImJhZGdlICcrKGUuYWN0aW9uLmluZGV4T2YoItit2LDZgSIpPi0xPyJyIjplLmFjdGlvbi5pbmRleE9mKCLZhdmI2LnYryIpPi0xPyJnIjoieSIpKyciPicrZXNjKGUuYWN0aW9uKSsnPC9zcGFuPjwvdGQ+JysKICAgICAgJzx0ZD4nK2VzYyhlLmRldGFpbHMpKyc8L3RkPicrCiAgICAnPC90cj4nOwogIH0pLmpvaW4oIiIpOwogIHZpZXcuaW5uZXJIVE1MPQogICAgJzxkaXYgY2xhc3M9ImNhcmQiPjxkaXYgY2xhc3M9InJvdyI+JysKICAgICAgJzxoMiBjbGFzcz0iZ3JvdyIgc3R5bGU9Im1hcmdpbjowIj7Ys9is2YQg2KfZhNiq2K3Yr9mK2KvYp9iqIDxzcGFuIGNsYXNzPSJtdXRlZCI+4oCUINmD2YQg2K3YsdmD2Kkg2KrYqtmFINi52YTZiSDYp9mE2K\/Yp9i0INio2YjYsdivPC9zcGFuPjwvaDI+JysKICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBzZWMiIGlkPSJsZy1yZWZyZXNoIj7Yqtit2K\/ZitirPC9idXR0b24+JysKICAgICc8L2Rpdj48L2Rpdj4nKwogICAgJzxkaXYgY2xhc3M9ImNhcmQgdGJsd3JhcCI+PHRhYmxlPjx0aGVhZD48dHI+PHRoIHN0eWxlPSJ3aWR0aDoxNTBweCI+2KfZhNiq2KfYsdmK2K4g2YjYp9mE2YjZgtiqPC90aD48dGg+2KfZhNmF2LPYqtiu2K\/ZhTwvdGg+PHRoPtin2YTYrdiv2Ks8L3RoPjx0aD7Yp9mE2KrZgdin2LXZitmEPC90aD48L3RyPjwvdGhlYWQ+JysKICAgICc8dGJvZHk+Jysocm93c3x8Jzx0cj48dGQgY29sc3Bhbj0iNCIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6MzBweDtjb2xvcjojNmQ4NGEwIj7ZhNinINiq2YjYrNivINij2K3Yr9in2Ksg2YXYs9is2YTYqSDYqNi52K88L3RkPjwvdHI+JykrJzwvdGJvZHk+PC90YWJsZT4nKwogICAgcGFnZXJIdG1sKHBnLCJsZyIpKyc8L2Rpdj4nOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsZy1yZWZyZXNoIikuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7cmVuZGVyTG9nKHZpZXcsdHJ1ZSk7fSk7CiAgYmluZFBhZ2VyKCJsZyIsZnVuY3Rpb24ocGdOdW0pe3N0YXRlLmxvZ1BhZ2U9cGdOdW07ZHJhd0xvZyh2aWV3KTt9KTsKfQoKLyogPT09PT09PT09PT09PT09PT0g2KfZhNil2K3Ytdin2KbZitin2KogPT09PT09PT09PT09PT09PT0gKi8KZnVuY3Rpb24gcmVuZGVyU3RhdHModmlldyl7CiAgdmFyIGM9c3RhdGUuc3RhdHN8fGNhY2hlR2V0KCJzdGF0cyIpOwogIGlmKGMpe2RyYXdTdGF0cyh2aWV3LGMpOwogICAgc3luY0JhZGdlKHRydWUpOwogICAgYXBpKHthY3Rpb246InN0YXRzIn0sZnVuY3Rpb24ocmVzKXsKICAgICAgc3luY0JhZGdlKGZhbHNlKTsKICAgICAgaWYoIXJlcy5zdWNjZXNzKXJldHVybjsKICAgICAgc3RhdGUuc3RhdHM9cmVzLmRhdGE7Y2FjaGVTZXQoInN0YXRzIixyZXMuZGF0YSk7CiAgICAgIGlmKGRvY3VtZW50LmJvZHkuY29udGFpbnModmlldykpZHJhd1N0YXRzKHZpZXcscmVzLmRhdGEpOwogICAgfSk7CiAgICByZXR1cm47CiAgfQogIHZpZXcuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJsb2FkaW5nIj7YrNin2LHZjSDYqtit2YXZitmEINin2YTYpdit2LXYp9im2YrYp9iqLi4uPC9kaXY+JzsKICBhcGkoe2FjdGlvbjoic3RhdHMifSxmdW5jdGlvbihyZXMpewogICAgaWYoIXJlcy5zdWNjZXNzKXt2aWV3LmlubmVySFRNTD0nPGRpdiBjbGFzcz0ibXNnIGVyciI+Jytlc2MocmVzLm1lc3NhZ2UpKyc8L2Rpdj4nO3JldHVybjt9CiAgICBzdGF0ZS5zdGF0cz1yZXMuZGF0YTtjYWNoZVNldCgic3RhdHMiLHJlcy5kYXRhKTsKICAgIGRyYXdTdGF0cyh2aWV3LHJlcy5kYXRhKTsKICB9KTsKfQpmdW5jdGlvbiBkcmF3U3RhdHModmlldyxkKXsKICAgIHZhciBtYXhEPU1hdGgubWF4LmFwcGx5KG51bGwsZC5ieURvY3Rvci5tYXAoZnVuY3Rpb24oeCl7cmV0dXJuIHguY291bnQ7fSkuY29uY2F0KFsxXSkpOwogICAgdmlldy5pbm5lckhUTUw9CiAgICAgICc8ZGl2IGNsYXNzPSJyb3ciIHN0eWxlPSJtYXJnaW4tYm90dG9tOjE0cHgiPicrCiAgICAgICAgJzxkaXYgY2xhc3M9InN0YXQiPjxiPicrZC50b3RhbCsnPC9iPjxzcGFuPtil2KzZhdin2YTZiiDYp9mE2K3YrNmI2LLYp9iqPC9zcGFuPjwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InN0YXQiPjxiPicrZC5wZW5kaW5nKyc8L2I+PHNwYW4+2KjYp9mG2KrYuNin2LEg2KfZhNmF2YjYudivPC9zcGFuPjwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InN0YXQiPjxiPicrZC5jb25maXJtZWQrJzwvYj48c3Bhbj7Zhdik2YPYr9ipPC9zcGFuPjwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InN0YXQiPjxiPicrZC50b2RheSsnPC9iPjxzcGFuPtit2KzZiNiy2KfYqiDYp9mE2YrZiNmFPC9zcGFuPjwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InN0YXQiPjxiPicrZC50aGlzTW9udGgrJzwvYj48c3Bhbj7Zh9iw2Kcg2KfZhNi02YfYsTwvc3Bhbj48L2Rpdj4nKwogICAgICAnPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9ImNhcmQiPjxoMj7Yp9mE2K3YrNmI2LLYp9iqINit2LPYqCDYp9mE2LfYqNmK2Kg8L2gyPicrCiAgICAgICAgZC5ieURvY3Rvci5zbGljZSgwLDE1KS5tYXAoZnVuY3Rpb24oeCl7CiAgICAgICAgICByZXR1cm4gJzxkaXYgY2xhc3M9InJvdyIgc3R5bGU9Im1hcmdpbi1ib3R0b206OHB4Ij48ZGl2IHN0eWxlPSJ3aWR0aDoyMjBweDtmb250LXNpemU6MTNweCI+Jytlc2MoeC5kb2N0b3IpKyc8L2Rpdj4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9Imdyb3cgYmFyIj48aSBzdHlsZT0id2lkdGg6JytNYXRoLnJvdW5kKHguY291bnQvbWF4RCoxMDApKyclIj48L2k+PC9kaXY+PGIgc3R5bGU9IndpZHRoOjM2cHg7dGV4dC1hbGlnbjpsZWZ0Ij4nK3guY291bnQrJzwvYj48L2Rpdj4nOwogICAgICAgIH0pLmpvaW4oIiIpKwogICAgICAnPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9ImNhcmQiPjxoMj7Yotiu2LEgMTQg2YrZiNmFPC9oMj4nKwogICAgICAgIGQuZGFpbHkubWFwKGZ1bmN0aW9uKHgpewogICAgICAgICAgdmFyIG1heERheT1NYXRoLm1heC5hcHBseShudWxsLGQuZGFpbHkubWFwKGZ1bmN0aW9uKHkpe3JldHVybiB5LmNvdW50O30pLmNvbmNhdChbMV0pKTsKICAgICAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0icm93IiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo2cHgiPjxkaXYgc3R5bGU9IndpZHRoOjEwMHB4O2ZvbnQtc2l6ZToxMnB4IiBkaXI9Imx0ciI+Jytlc2MoeC5kYXRlKSsnPC9kaXY+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJncm93IGJhciI+PGkgc3R5bGU9IndpZHRoOicrTWF0aC5yb3VuZCh4LmNvdW50L21heERheSoxMDApKyclIj48L2k+PC9kaXY+PGIgc3R5bGU9IndpZHRoOjM2cHg7dGV4dC1hbGlnbjpsZWZ0Ij4nK3guY291bnQrJzwvYj48L2Rpdj4nOwogICAgICAgIH0pLmpvaW4oIiIpKwogICAgICAnPC9kaXY+JzsKfQoKLyogPT09PT09PT09PT09PT09PT0g2KfZhNmF2YjYuNmB2YjZhiA9PT09PT09PT09PT09PT09PSAqLwpmdW5jdGlvbiByZW5kZXJVc2Vycyh2aWV3LGZvcmNlKXsKICBpZighZm9yY2UpewogICAgdmFyIGM9c3RhdGUudXNlcnN8fGNhY2hlR2V0KCJ1c2VycyIpOwogICAgaWYoYyl7CiAgICAgIHN0YXRlLnVzZXJzPWM7ZHJhd1VzZXJzKHZpZXcpOwogICAgICBzeW5jQmFkZ2UodHJ1ZSk7CiAgICAgIGFwaSh7YWN0aW9uOiJsaXN0VXNlcnMifSxmdW5jdGlvbihyZXMpewogICAgICAgIHN5bmNCYWRnZShmYWxzZSk7CiAgICAgICAgaWYoIXJlcy5zdWNjZXNzKXJldHVybjsKICAgICAgICB2YXIgY2hhbmdlZD1KU09OLnN0cmluZ2lmeShyZXMuZGF0YSkhPT1KU09OLnN0cmluZ2lmeShzdGF0ZS51c2Vycyk7CiAgICAgICAgc3RhdGUudXNlcnM9cmVzLmRhdGE7Y2FjaGVTZXQoInVzZXJzIixyZXMuZGF0YSk7CiAgICAgICAgaWYoY2hhbmdlZCYmZG9jdW1lbnQuYm9keS5jb250YWlucyh2aWV3KSlkcmF3VXNlcnModmlldyk7CiAgICAgIH0pOwogICAgICByZXR1cm47CiAgICB9CiAgfQogIHZpZXcuaW5uZXJIVE1MPSc8ZGl2IGNsYXNzPSJsb2FkaW5nIj7YrNin2LHZjSDYqtit2YXZitmEINin2YTZhdiz2KrYrtiv2YXZitmGLi4uPC9kaXY+JzsKICBhcGkoe2FjdGlvbjoibGlzdFVzZXJzIn0sZnVuY3Rpb24ocmVzKXsKICAgIGlmKCFyZXMuc3VjY2Vzcyl7dmlldy5pbm5lckhUTUw9JzxkaXYgY2xhc3M9Im1zZyBlcnIiPicrZXNjKHJlcy5tZXNzYWdlKSsnPC9kaXY+JztyZXR1cm47fQogICAgc3RhdGUudXNlcnM9cmVzLmRhdGE7Y2FjaGVTZXQoInVzZXJzIixyZXMuZGF0YSk7ZHJhd1VzZXJzKHZpZXcpOwogIH0pOwp9CgpmdW5jdGlvbiBkcmF3VXNlcnModmlldyl7CiAgdmFyIGh0bWw9JzxkaXYgY2xhc3M9Im1zZyIgaWQ9InVzLW1zZyI+PC9kaXY+JysKICAgICc8ZGl2IGNsYXNzPSJjYXJkIj48aDI+2KXYttin2YHYqSDZhdmI2LjZgSDYrNiv2YrYrzwvaDI+PGRpdiBjbGFzcz0icm93Ij4nKwogICAgICAnPGlucHV0IGlkPSJ1cy1uYW1lIiBjbGFzcz0iZ3JvdyIgcGxhY2Vob2xkZXI9Itin2YTYp9iz2YUg2KfZhNmD2KfZhdmEIj4nKwogICAgICAnPGlucHV0IGlkPSJ1cy11c2VybmFtZSIgY2xhc3M9Imdyb3ciIHBsYWNlaG9sZGVyPSLYp9iz2YUg2KfZhNmF2LPYqtiu2K\/ZhSAo2KfZhtis2YTZitiy2YkpIiBkaXI9Imx0ciI+JysKICAgICAgJzxpbnB1dCBpZD0idXMtcGFzcyIgY2xhc3M9Imdyb3ciIHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSLZg9mE2YXYqSDYp9mE2YXYsdmI2LEiIGRpcj0ibHRyIj4nKwogICAgICAnPHNlbGVjdCBpZD0idXMtcm9sZSIgc3R5bGU9Im1heC13aWR0aDoxNjBweCI+PG9wdGlvbiB2YWx1ZT0ic3RhZmYiPtmF2YjYuNmBPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT0ic3VwZXJ2aXNvciI+2YXYtNix2YE8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJhZG1pbiI+2YXYr9mK2LE8L29wdGlvbj48b3B0aW9uIHZhbHVlPSJ2aWV3ZXIiPtmF2LTYp9mH2K\/YqSDZgdmC2Lc8L29wdGlvbj48L3NlbGVjdD4nKwogICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIiBpZD0idXMtYWRkIj7Ypdi22KfZgdipPC9idXR0b24+PC9kaXY+PC9kaXY+JysKICAgICc8ZGl2IGNsYXNzPSJjYXJkIHRibHdyYXAiPjx0YWJsZT48dGhlYWQ+PHRyPjx0aD7Yp9mE2KfYs9mFPC90aD48dGg+2KfYs9mFINin2YTZhdiz2KrYrtiv2YU8L3RoPjx0aD7Yp9mE2LXZhNin2K3ZitipPC90aD48dGg+2KfZhNit2KfZhNipPC90aD48dGg+2KXYrNix2KfYodin2Ko8L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JysKICAgIHN0YXRlLnVzZXJzLm1hcChmdW5jdGlvbih1KXsKICAgICAgcmV0dXJuICc8dHIgZGF0YS11PSInK2VzYyh1LnVzZXJuYW1lKSsnIj4nKwogICAgICAgICc8dGQ+PGI+Jytlc2ModS5uYW1lKSsnPC9iPjwvdGQ+PHRkIGRpcj0ibHRyIiBzdHlsZT0idGV4dC1hbGlnbjpyaWdodCI+Jytlc2ModS51c2VybmFtZSkrJzwvdGQ+JysKICAgICAgICAnPHRkPjxzcGFuIGNsYXNzPSJiYWRnZSBiIj4nK3JvbGVMYWJlbCh1LnJvbGUpKyc8L3NwYW4+PC90ZD4nKwogICAgICAgICc8dGQ+JysodS5hY3RpdmU\/JzxzcGFuIGNsYXNzPSJiYWRnZSBnIj7Zhti02Lc8L3NwYW4+JzonPHNwYW4gY2xhc3M9ImJhZGdlIHIiPtmF2LnYt9mEPC9zcGFuPicpKyc8L3RkPicrCiAgICAgICAgJzx0ZD48ZGl2IGNsYXNzPSJyb3ciIHN0eWxlPSJnYXA6NnB4Ij4nKwogICAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBzZWMgdXMtdG9nZ2xlIiBzdHlsZT0icGFkZGluZzo1cHggMTBweDtmb250LXNpemU6MTJweCI+JysodS5hY3RpdmU\/Itiq2LnYt9mK2YQiOiLYqtmB2LnZitmEIikrJzwvYnV0dG9uPicrCiAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIHNlYyB1cy1wYXNzMiIgc3R5bGU9InBhZGRpbmc6NXB4IDEwcHg7Zm9udC1zaXplOjEycHgiPtiq2LrZitmK2LEg2YPZhNmF2Kkg2KfZhNmF2LHZiNixPC9idXR0b24+JysKICAgICAgICAnPC9kaXY+PC90ZD48L3RyPic7CiAgICB9KS5qb2luKCIiKSsnPC90Ym9keT48L3RhYmxlPjwvZGl2Pic7CiAgdmlldy5pbm5lckhUTUw9aHRtbDsKCiAgZnVuY3Rpb24gbXNnKG9rLHRleHQpe3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cy1tc2ciKTtlLmNsYXNzTmFtZT0ibXNnICIrKG9rPyJvayI6ImVyciIpO2UudGV4dENvbnRlbnQ9dGV4dDt9CgogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cy1hZGQiKS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXsKICAgIHZhciBib2R5PXthY3Rpb246ImFkZFVzZXIiLG5hbWU6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVzLW5hbWUiKS52YWx1ZS50cmltKCksCiAgICAgIG5ld1VzZXJuYW1lOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cy11c2VybmFtZSIpLnZhbHVlLnRyaW0oKSwKICAgICAgcGFzc3dvcmQ6ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVzLXBhc3MiKS52YWx1ZSxyb2xlOmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cy1yb2xlIikudmFsdWV9OwogICAgaWYoIWJvZHkubmFtZXx8IWJvZHkubmV3VXNlcm5hbWV8fCFib2R5LnBhc3N3b3JkKXttc2coZmFsc2UsItij2YPZhdmEINmD2YQg2KfZhNio2YrYp9mG2KfYqiIpO3JldHVybjt9CiAgICBpZihib2R5LnBhc3N3b3JkLmxlbmd0aDw4KXttc2coZmFsc2UsItmD2YTZhdipINin2YTZhdix2YjYsSDZitis2Kgg2KPZhiDYqtmD2YjZhiA4INij2K3YsdmBINi52YTZiSDYp9mE2KPZgtmEIik7cmV0dXJuO30KICAgIGFwaShib2R5LGZ1bmN0aW9uKHJlcyl7cmVzLnN1Y2Nlc3M\/cmVuZGVyVXNlcnModmlldyx0cnVlKTptc2coZmFsc2UscmVzLm1lc3NhZ2UpO30pOwogIH0pOwogIHZpZXcucXVlcnlTZWxlY3RvckFsbCgiLnVzLXRvZ2dsZSIpLmZvckVhY2goZnVuY3Rpb24oYnRuKXsKICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsZnVuY3Rpb24oKXsKICAgICAgdmFyIHVzZXJuYW1lPWJ0bi5jbG9zZXN0KCJ0ciIpLmdldEF0dHJpYnV0ZSgiZGF0YS11Iik7CiAgICAgIHZhciB1PXN0YXRlLnVzZXJzLmZpbHRlcihmdW5jdGlvbih4KXtyZXR1cm4geC51c2VybmFtZT09PXVzZXJuYW1lO30pWzBdOwogICAgICBpZih1LnVzZXJuYW1lPT09c3RhdGUudXNlci51c2VybmFtZSl7bXNnKGZhbHNlLCLZhNinINmK2YXZg9mG2YMg2KrYudi32YrZhCDYrdiz2KfYqNmDINin2YTYrdin2YTZiSIpO3JldHVybjt9CiAgICAgIGFwaSh7YWN0aW9uOiJ1cGRhdGVVc2VyIix1c2VybmFtZTp1c2VybmFtZSx1cGRhdGVzOnthY3RpdmU6IXUuYWN0aXZlfX0sZnVuY3Rpb24ocmVzKXsKICAgICAgICByZXMuc3VjY2Vzcz9yZW5kZXJVc2Vycyh2aWV3LHRydWUpOm1zZyhmYWxzZSxyZXMubWVzc2FnZSk7CiAgICAgIH0pOwogICAgfSk7CiAgfSk7CiAgdmlldy5xdWVyeVNlbGVjdG9yQWxsKCIudXMtcGFzczIiKS5mb3JFYWNoKGZ1bmN0aW9uKGJ0bil7CiAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLGZ1bmN0aW9uKCl7CiAgICAgIHZhciB1c2VybmFtZT1idG4uY2xvc2VzdCgidHIiKS5nZXRBdHRyaWJ1dGUoImRhdGEtdSIpOwogICAgICB2YXIgbnA9d2luZG93LnByb21wdCgi2YPZhNmF2Kkg2KfZhNmF2LHZiNixINin2YTYrNiv2YrYr9ipINmE2YTZhdiz2KrYrtiv2YUgIit1c2VybmFtZSsiICg4INij2K3YsdmBINi52YTZiSDYp9mE2KPZgtmEKToiKTsKICAgICAgaWYoIW5wKXJldHVybjsKICAgICAgaWYobnAubGVuZ3RoPDgpe21zZyhmYWxzZSwi2YPZhNmF2Kkg2KfZhNmF2LHZiNixINmC2LXZitix2Kkg2KzYr9in2YsiKTtyZXR1cm47fQogICAgICBhcGkoe2FjdGlvbjoidXBkYXRlVXNlciIsdXNlcm5hbWU6dXNlcm5hbWUsdXBkYXRlczp7bmV3UGFzc3dvcmQ6bnB9fSxmdW5jdGlvbihyZXMpewogICAgICAgIG1zZyhyZXMuc3VjY2VzcyxyZXMuc3VjY2Vzcz8i2KrZhSDYqti62YrZitixINmD2YTZhdipINin2YTZhdix2YjYsSI6cmVzLm1lc3NhZ2UpOwogICAgICB9KTsKICAgIH0pOwogIH0pOwp9CgpyZW5kZXIoKTsKfSkoKTsK\");c=decodeURIComponent(escape(c));(new Function(c))();})();<\/script><\/p>","protected":false},"excerpt":{"rendered":"<p>\u062c\u0627\u0631\u064d \u0627\u0644\u062a\u062d\u0645\u064a\u0644&#8230;<\/p>","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-6912","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/thg-egypt.com\/ar\/wp-json\/wp\/v2\/pages\/6912","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thg-egypt.com\/ar\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/thg-egypt.com\/ar\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/thg-egypt.com\/ar\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thg-egypt.com\/ar\/wp-json\/wp\/v2\/comments?post=6912"}],"version-history":[{"count":18,"href":"https:\/\/thg-egypt.com\/ar\/wp-json\/wp\/v2\/pages\/6912\/revisions"}],"predecessor-version":[{"id":6932,"href":"https:\/\/thg-egypt.com\/ar\/wp-json\/wp\/v2\/pages\/6912\/revisions\/6932"}],"wp:attachment":[{"href":"https:\/\/thg-egypt.com\/ar\/wp-json\/wp\/v2\/media?parent=6912"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}