{"id":3680,"date":"2026-10-18T15:13:20","date_gmt":"2026-10-18T22:13:20","guid":{"rendered":"https:\/\/www.barbiltours.com\/list\/?page_id=3680"},"modified":"2026-10-18T23:35:04","modified_gmt":"2026-10-19T06:35:04","slug":"st-marys-barbil-diamond-jubilee-celebrations-2026","status":"publish","type":"page","link":"https:\/\/www.barbiltours.com\/list\/?page_id=3680","title":{"rendered":"St Mary&#8217;s Barbil Diamond Jubilee Celebrations 2026"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"3680\" class=\"elementor elementor-3680\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c4c813e elementor-section-boxed elementor-section-height-default elementor-section-height-default rt-parallax-bg-no\" data-id=\"c4c813e\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-a625a91\" data-id=\"a625a91\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-bd31428 elementor-widget elementor-widget-shortcode\" data-id=\"bd31428\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\n<div class=\"wpcf7 no-js\" id=\"wpcf7-f339-o1\" lang=\"en-US\" dir=\"ltr\" data-wpcf7-id=\"339\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/list\/index.php?rest_route=%2Fwp%2Fv2%2Fpages%2F3680#wpcf7-f339-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Contact form\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"339\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.4\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"en_US\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f339-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/>\n<\/fieldset>\n<div>\n\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"your-name\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Name*\" value=\"\" type=\"text\" name=\"your-name\" \/><\/span>\n\t<\/p>\n<\/div>\n<div>\n\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"your-phone\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Phone Number*\" value=\"\" type=\"text\" name=\"your-phone\" \/><\/span>\n\t<\/p>\n<\/div>\n<div>\n\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"your-email\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Email*\" value=\"\" type=\"email\" name=\"your-email\" \/><\/span>\n\t<\/p>\n<\/div>\n<div>\n\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"your-subject\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Subject*\" value=\"\" type=\"text\" name=\"your-subject\" \/><\/span>\n\t<\/p>\n<\/div>\n<div>\n\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"your-message\"><textarea cols=\"40\" rows=\"10\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea wpcf7-validates-as-required\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Message*\" name=\"your-message\"><\/textarea><\/span>\n\t<\/p>\n<\/div>\n<div>\n\t<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner\" type=\"submit\" value=\"Submit\" \/>\n\t<\/p>\n<\/div><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-0ce44e5 elementor-section-boxed elementor-section-height-default elementor-section-height-default rt-parallax-bg-no\" data-id=\"0ce44e5\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e36de6f\" data-id=\"e36de6f\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-8b12511 elementor-widget elementor-widget-html\" data-id=\"8b12511\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- ===== COPY FROM HERE INTO AN ELEMENTOR HTML WIDGET ===== -->\r\n<!-- Sending: this page also needs an Elementor \"Shortcode\" widget holding the\r\n     Jubilee Registration Contact Form 7 form, e.g. [contact-form-7 id=\"xxxxxxx\" title=\"Jubilee Registration\"]\r\n     This code hides that form automatically and sends every registration (with uploads) through it. -->\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\r\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Cormorant+Garamond:ital,wght@0,600;0,700;1,600&family=Manrope:wght@400;500;600;700;800&display=swap\" rel=\"stylesheet\">\r\n<style>\r\n\/* Hide the Contact Form 7 form on this page: it only delivers the registration *\/\r\n.wpcf7{position:absolute!important;left:-10000px!important;top:auto!important;width:1px!important;height:1px!important;overflow:hidden!important}\r\n\/* Everything below is scoped to .sj so it won't affect the rest of the site *\/\r\n.sj{--navy:#14284B;--navy2:#1E3A66;--gold:#B88A3E;--gold-dk:#8F6A2C;--gold-lt:#F1E6CF;--cream:#FBF8F2;--ink:#1B2433;--muted:#556070;--line:#E5DCCB;--err:#B3261E;--ok:#1E6B4A;\r\n  font-family:'Manrope',system-ui,-apple-system,'Segoe UI',sans-serif;color:var(--ink);background:var(--cream);line-height:1.5;overflow-x:hidden;-webkit-font-smoothing:antialiased;font-size:16px}\r\n.sj *,.sj *::before,.sj *::after{box-sizing:border-box}\r\n.sj h1,.sj h2,.sj h3,.sj p,.sj ul,.sj ol,.sj fieldset,.sj figure{margin:0;padding:0}\r\n.sj fieldset{border:0;min-width:0}\r\n.sj ul,.sj ol{list-style:none}\r\n.sj a{color:var(--navy2)}\r\n.sj img,.sj svg{display:block}\r\n.sj [hidden]{display:none!important}\r\n.sj .wrap{max-width:1120px;margin:0 auto;padding-left:20px;padding-right:20px}\r\n.sj .serif{font-family:'Cormorant Garamond',Georgia,'Times New Roman',serif}\r\n\r\n\/* ---------- Hero ---------- *\/\r\n.sj .hero{position:relative;background:var(--navy);color:#fff;overflow:hidden}\r\n.sj .hero::before{content:\"\";position:absolute;inset:0;opacity:.07;background-image:linear-gradient(45deg,#fff 1px,transparent 1px),linear-gradient(-45deg,#fff 1px,transparent 1px);background-size:34px 34px;pointer-events:none}\r\n.sj .hero::after{content:\"\";position:absolute;right:-180px;top:-200px;width:560px;height:560px;border-radius:50%;background:radial-gradient(circle,rgba(212,170,92,.32),rgba(212,170,92,0) 68%);pointer-events:none}\r\n.sj .hero-in{position:relative;z-index:1;display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:40px;align-items:center;padding-top:44px;padding-bottom:52px}\r\n.sj .hero-text{display:flex;flex-direction:column;gap:16px;align-items:flex-start}\r\n.sj .crest{display:flex;align-items:center;gap:14px}\r\n.sj .crest-badge{width:132px;height:132px;border-radius:50%;flex-shrink:0;box-shadow:0 0 0 3px rgba(227,200,143,.35),0 14px 34px rgba(0,0,0,.35)}\r\n.sj .crest small{display:block;font-size:12.5px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:#E3C88F}\r\n.sj .crest b{display:block;font-size:15px;font-weight:700;color:#fff}\r\n.sj h1{font-family:'Cormorant Garamond',Georgia,serif;font-weight:700;font-size:clamp(38px,5.6vw,64px);line-height:1;letter-spacing:-.01em;color:#fff}\r\n.sj h1 em{font-style:italic;color:#E3C88F;font-weight:600}\r\n.sj .hero-sub{font-size:18px;color:#D5DCE8;max-width:560px}\r\n.sj .chips{display:flex;flex-wrap:wrap;gap:10px}\r\n.sj .chip{display:inline-flex;align-items:center;gap:8px;border:1px solid rgba(227,200,143,.55);border-radius:999px;padding:8px 14px;font-weight:700;font-size:14.5px;color:#fff;background:rgba(255,255,255,.04)}\r\n.sj .chip svg{color:#E3C88F;flex-shrink:0}\r\n.sj .btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:52px;padding:12px 26px;border-radius:999px;border:0;font:inherit;font-weight:800;font-size:16.5px;text-decoration:none;cursor:pointer;transition:background .2s,transform .15s,box-shadow .2s}\r\n.sj .btn-gold{background:linear-gradient(180deg,#D1A659,#B88A3E);color:#1A1405;box-shadow:0 10px 24px rgba(184,138,62,.35)}\r\n.sj .btn-gold:hover{transform:translateY(-1px);box-shadow:0 14px 28px rgba(184,138,62,.45);color:#1A1405}\r\n.sj .btn-navy{background:var(--navy);color:#fff}\r\n.sj .btn-navy:hover{background:var(--navy2);color:#fff}\r\n.sj .btn-line{background:#fff;color:var(--navy);border:1.5px solid var(--navy)}\r\n.sj .btn-line:hover{background:#EEF2F8;color:var(--navy)}\r\n.sj .btn:focus-visible,.sj a:focus-visible,.sj button:focus-visible{outline:3px solid #E3C88F;outline-offset:3px}\r\n.sj .hero-cta{display:flex;flex-wrap:wrap;align-items:center;gap:14px 20px}\r\n.sj .countdown{display:flex;gap:8px}\r\n.sj .countdown div{min-width:58px;text-align:center;border-radius:12px;background:rgba(255,255,255,.08);padding:6px 6px 5px}\r\n.sj .countdown b{display:block;font-family:'Cormorant Garamond',Georgia,serif;font-size:26px;line-height:1;color:#fff}\r\n.sj .countdown small{font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#C3CCDA}\r\n.sj .by{font-size:13.5px;color:#AFBACB}\r\n.sj .by a{color:#E3C88F;font-weight:700}\r\n\r\n.sj .ready{background:#fff;color:var(--ink);border-radius:22px;padding:26px;box-shadow:0 24px 50px rgba(0,0,0,.25);display:flex;flex-direction:column;gap:14px;border-top:5px solid var(--gold)}\r\n.sj .ready h2{font-family:'Cormorant Garamond',Georgia,serif;font-size:28px;line-height:1.1;color:var(--navy)}\r\n.sj .ready li{display:flex;gap:12px;align-items:flex-start;font-size:15px;color:var(--muted)}\r\n.sj .ready li b{color:var(--ink)}\r\n.sj .ready li svg{flex-shrink:0;margin-top:2px;color:var(--gold-dk)}\r\n.sj .ready ul{display:flex;flex-direction:column;gap:12px}\r\n.sj .ready .note{font-size:13.5px;color:var(--muted);border-top:1px solid var(--line);padding-top:12px}\r\n\r\n\/* ---------- Form ---------- *\/\r\n.sj .reg{padding-top:48px;padding-bottom:56px;scroll-margin-top:90px}\r\n.sj .reg-head{max-width:820px;margin:0 auto 26px;text-align:center;display:flex;flex-direction:column;gap:8px;align-items:center}\r\n.sj .eyebrow{font-size:12.5px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-dk)}\r\n.sj .reg-head h2{font-family:'Cormorant Garamond',Georgia,serif;font-size:clamp(32px,4vw,44px);line-height:1.05;color:var(--navy)}\r\n.sj .reg-head p{color:var(--muted);font-size:16px}\r\n.sj .req-note{font-size:14px;color:var(--muted)}\r\n.sj .req-note i,.sj .star{color:var(--err);font-style:normal}\r\n.sj form{max-width:880px;margin:0 auto;display:flex;flex-direction:column;gap:20px}\r\n.sj .card{background:#fff;border:1px solid var(--line);border-radius:22px;padding:26px 26px 28px;display:flex;flex-direction:column;gap:20px;box-shadow:0 2px 0 rgba(20,40,75,.03)}\r\n.sj .card-h{display:flex;align-items:center;gap:14px;padding-bottom:16px;border-bottom:1px solid var(--line)}\r\n.sj .num{flex-shrink:0;width:42px;height:42px;border-radius:50%;display:grid;place-items:center;background:var(--navy);color:#E3C88F;font-family:'Cormorant Garamond',Georgia,serif;font-weight:700;font-size:22px;box-shadow:0 0 0 3px #fff,0 0 0 5px var(--gold-lt)}\r\n.sj .card-h h3{font-size:19px;font-weight:800;color:var(--navy);line-height:1.2}\r\n.sj .card-h p{font-size:14px;color:var(--muted);margin-top:2px}\r\n.sj .done-tick{margin-left:auto;flex-shrink:0;display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:800;color:var(--ok);background:#E5F2EB;border-radius:999px;padding:5px 10px;opacity:0;transform:scale(.9);transition:opacity .2s,transform .2s}\r\n.sj .card.complete .done-tick{opacity:1;transform:none}\r\n.sj .grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:18px 18px}\r\n.sj .c6{grid-column:span 6}.sj .c4{grid-column:span 4}.sj .c3{grid-column:span 3}.sj .c2{grid-column:span 2}\r\n.sj .f{display:flex;flex-direction:column;gap:7px;min-width:0}\r\n.sj .f > label,.sj .f legend,.sj .lab{font-size:14.5px;font-weight:800;color:var(--ink);padding:0}\r\n.sj .f legend{margin-bottom:9px}\r\n.sj .hint{font-size:13px;color:var(--muted);font-weight:500}\r\n.sj input[type=text],.sj input[type=email],.sj input[type=tel],.sj input[type=number],.sj input[type=date],.sj textarea,.sj select{\r\n  width:100%;min-height:50px;padding:12px 14px;border:1.5px solid #D6CDBB;border-radius:12px;background:#fff;font:inherit;font-size:16px;color:var(--ink);transition:border-color .15s,box-shadow .15s;-webkit-appearance:none;appearance:none}\r\n.sj textarea{min-height:96px;resize:vertical}\r\n.sj select{padding-right:42px;cursor:pointer;background-image:url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%2314284B' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'\/%3E%3C\/svg%3E\");background-repeat:no-repeat;background-position:right 14px center}\r\n.sj .f.invalid select{border-color:var(--err)}\r\n.sj input:focus,.sj textarea:focus,.sj select:focus{outline:none;border-color:var(--navy2);box-shadow:0 0 0 4px rgba(30,58,102,.14)}\r\n.sj input::placeholder,.sj textarea::placeholder{color:#97A0AD}\r\n.sj .opts{display:flex;flex-wrap:wrap;gap:10px}\r\n.sj .opt{position:relative;display:inline-flex;align-items:center;gap:10px;min-height:46px;padding:10px 16px 10px 12px;border:1.5px solid #D6CDBB;border-radius:999px;background:#fff;font-weight:700;font-size:15px;cursor:pointer;user-select:none;transition:border-color .15s,background .15s}\r\n.sj .opt input{width:20px;height:20px;margin:0;accent-color:var(--navy);flex-shrink:0;cursor:pointer}\r\n.sj .opt:hover{border-color:var(--navy2)}\r\n.sj .opt:has(input:checked){border-color:var(--navy);background:#EEF2F8}\r\n.sj .opt:has(input:focus-visible){box-shadow:0 0 0 4px rgba(30,58,102,.18)}\r\n.sj .opt small{font-weight:600;color:var(--muted)}\r\n.sj .inline-in{display:flex;align-items:center;gap:10px;flex-wrap:wrap}\r\n.sj .inline-in input{max-width:220px}\r\n.sj .rupee{position:relative}\r\n.sj .rupee input{padding-left:32px}\r\n.sj .rupee::before{content:\"\\20B9\";position:absolute;left:14px;top:50%;transform:translateY(-50%);font-weight:800;color:var(--muted)}\r\n.sj .err{display:none;font-size:13.5px;font-weight:700;color:var(--err)}\r\n.sj .f.invalid .err{display:block}\r\n.sj .f.invalid input:not([type=radio]):not([type=checkbox]),.sj .f.invalid textarea{border-color:var(--err)}\r\n.sj .f.invalid .opt{border-color:#E0A39E}\r\n.sj .sub-block{grid-column:span 6;display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:18px;padding:18px;border-radius:16px;background:var(--cream);border:1px dashed #D9CCB2}\r\n\r\n\/* Photo + uploads *\/\r\n.sj .s1{display:grid;grid-template-columns:minmax(0,1fr) 190px;gap:22px;align-items:start}\r\n.sj .photo{display:flex;flex-direction:column;gap:8px}\r\n.sj .photo-box{position:relative;aspect-ratio:3\/4;border:2px dashed #CDB98F;border-radius:16px;background:#FCFAF5;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;text-align:center;padding:12px;cursor:pointer;overflow:hidden;color:var(--muted);font-size:13.5px;font-weight:700;transition:border-color .15s,background .15s}\r\n.sj .photo-box:hover{border-color:var(--gold);background:#FBF5E8}\r\n.sj .photo-box svg{color:var(--gold-dk)}\r\n.sj .photo-box img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}\r\n.sj .photo-box input,.sj .drop input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}\r\n.sj .photo .hint{text-align:center}\r\n.sj .drop{position:relative;display:flex;align-items:center;gap:14px;padding:14px 16px;border:2px dashed #CDB98F;border-radius:14px;background:#FCFAF5;cursor:pointer;transition:border-color .15s,background .15s}\r\n.sj .drop:hover{border-color:var(--gold);background:#FBF5E8}\r\n.sj .drop svg{flex-shrink:0;color:var(--gold-dk)}\r\n.sj .drop b{display:block;font-size:15px;line-height:1.3;color:var(--ink)}\r\n.sj .drop span span{display:block;font-size:13px;color:var(--muted);margin-top:2px}\r\n.sj .file-ok{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:12px;background:#E9F3EE;color:var(--ok);font-weight:700;font-size:14px}\r\n.sj .file-ok span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}\r\n.sj .file-ok button{border:0;background:none;color:var(--err);font:inherit;font-weight:800;font-size:13.5px;cursor:pointer;padding:4px 6px}\r\n.sj .badge{display:inline-block;font-size:11.5px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;border-radius:999px;padding:3px 8px;margin-left:6px;vertical-align:2px}\r\n.sj .badge.req{background:#FBE7E5;color:var(--err)}\r\n.sj .badge.opt-b{background:#EEF2F8;color:var(--navy2)}\r\n\r\n\/* Payment *\/\r\n.sj .note-box{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;border-radius:14px;background:var(--gold-lt);color:#4A3A1A;font-size:14.5px}\r\n.sj .note-box svg{flex-shrink:0;margin-top:2px;color:var(--gold-dk)}\r\n.sj .pay-box{grid-column:span 6;border:1.5px solid var(--line);border-radius:16px;padding:18px;display:flex;flex-direction:column;gap:12px;background:#FCFBF8}\r\n.sj .pay-box h4{margin:0;font-size:15.5px;font-weight:800;color:var(--navy)}\r\n.sj .pay-row{display:flex;flex-wrap:wrap;gap:18px;align-items:flex-start}\r\n.sj .pay-row img{width:150px;height:150px;object-fit:contain;border-radius:12px;border:1px solid var(--line);background:#fff}\r\n.sj .pay-row dl{margin:0;display:grid;grid-template-columns:auto 1fr;gap:6px 14px;font-size:15px}\r\n.sj .pay-row dt{color:var(--muted);font-weight:600}\r\n.sj .pay-row dd{margin:0;font-weight:800;word-break:break-word}\r\n.sj .pay-later{font-size:14.5px;color:var(--muted)}\r\n.sj .upi-wait{font-size:14.5px;color:var(--muted);padding:12px 14px;border-radius:12px;background:#fff;border:1px dashed var(--line)}\r\n.sj .upi-grid{display:flex;flex-wrap:wrap;gap:18px 24px;align-items:center}\r\n.sj .upi-qr-wrap{display:flex;flex-direction:column;align-items:center;gap:6px}\r\n.sj .upi-qr{width:184px;height:184px;padding:6px;background:#fff;border:1px solid var(--line);border-radius:14px}\r\n.sj .upi-qr svg{width:100%;height:100%}\r\n.sj .upi-side{flex:1;min-width:220px;display:flex;flex-direction:column;gap:10px;align-items:flex-start}\r\n.sj .upi-amt{font-size:14px;font-weight:700;color:var(--muted);display:flex;align-items:baseline;gap:10px}\r\n.sj .upi-amt b{font-family:'Cormorant Garamond',Georgia,serif;font-size:34px;line-height:1;color:var(--navy)}\r\n.sj .upi-btn{min-height:54px;font-size:17px;padding:12px 26px;width:100%;max-width:340px}\r\n.sj .upi-dl{margin:0;display:grid;grid-template-columns:auto 1fr;gap:4px 14px;font-size:14.5px}\r\n.sj .upi-dl dt{color:var(--muted);font-weight:600}\r\n.sj .upi-dl dd{margin:0;font-weight:800;word-break:break-all}\r\n.sj .upi-after{font-size:14px;color:var(--muted);border-top:1px solid var(--line);padding-top:12px;margin-top:4px}\r\n.sj .done .upi-done{display:flex;flex-direction:column;align-items:center;gap:10px;padding:16px;border-radius:16px;background:#FCFBF8;border:1.5px solid var(--line);width:100%}\r\n.sj .done .upi-done h3{font-size:17px;font-weight:800;color:var(--navy)}\r\n\r\n.sj .copy{border:0;background:#EEF2F8;color:var(--navy);font:inherit;font-size:12.5px;font-weight:800;border-radius:999px;padding:3px 10px;margin-left:6px;cursor:pointer}\r\n\r\n\/* Declaration + submit *\/\r\n.sj .decl{display:flex;gap:12px;align-items:flex-start;padding:16px;border-radius:14px;border:1.5px solid #D6CDBB;background:#fff;font-weight:700;cursor:pointer}\r\n.sj .decl input{width:22px;height:22px;margin:1px 0 0;accent-color:var(--navy);flex-shrink:0}\r\n.sj .decl:has(input:checked){border-color:var(--navy);background:#EEF2F8}\r\n.sj .sign{font-family:'Cormorant Garamond',Georgia,serif;font-size:24px!important;font-style:italic;font-weight:600}\r\n.sj .submit-row{display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center}\r\n.sj .submit-row .btn{width:100%;max-width:440px;min-height:58px;font-size:17.5px}\r\n.sj .submit-row small{font-size:13.5px;color:var(--muted)}\r\n.sj .spin{width:18px;height:18px;border-radius:50%;border:2.5px solid rgba(26,20,5,.25);border-top-color:#1A1405;animation:sjspin .8s linear infinite}\r\n@keyframes sjspin{to{transform:rotate(360deg)}}\r\n.sj .draft{font-size:13px;color:var(--muted);text-align:center}\r\n.sj .draft button{border:0;background:none;font:inherit;color:var(--navy2);font-weight:800;text-decoration:underline;cursor:pointer;padding:0}\r\n\r\n\/* Result boxes *\/\r\n.sj .fail{display:none;flex-direction:column;gap:12px;padding:20px;border-radius:16px;background:#FDF1EF;border:1.5px solid #EDB9B3}\r\n.sj .fail.show{display:flex}\r\n.sj .fail b{color:var(--err);font-size:16px}\r\n.sj .fail p{font-size:14.5px;color:#5B2420}\r\n.sj .fail .acts{display:flex;flex-wrap:wrap;gap:10px}\r\n.sj .fail .btn{min-height:46px;font-size:15px;padding:10px 18px}\r\n.sj .done{max-width:760px;margin:0 auto;background:#fff;border:1px solid var(--line);border-top:6px solid var(--gold);border-radius:24px;padding:34px 28px;display:flex;flex-direction:column;gap:18px;align-items:center;text-align:center;scroll-margin-top:90px}\r\n.sj .done:focus{outline:none}\r\n.sj .done .medal{width:76px;height:76px;border-radius:50%;background:var(--navy);display:grid;place-items:center;color:#E3C88F;box-shadow:0 0 0 4px #fff,0 0 0 6px var(--gold-lt)}\r\n.sj .done h2{font-family:'Cormorant Garamond',Georgia,serif;font-size:clamp(30px,4vw,40px);line-height:1.05;color:var(--navy)}\r\n.sj .done p{color:var(--muted);max-width:560px}\r\n.sj .regid{display:inline-flex;flex-direction:column;align-items:center;gap:2px;border:1.5px dashed var(--gold);border-radius:14px;padding:10px 22px;background:#FCFAF5}\r\n.sj .regid small{font-size:12px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--gold-dk)}\r\n.sj .regid b{font-size:clamp(17px,4.4vw,24px);letter-spacing:.04em;color:var(--navy)}\r\n.sj .done dl{width:100%;margin:0;display:grid;grid-template-columns:minmax(0,190px) minmax(0,1fr);gap:8px 16px;text-align:left;font-size:15px;border-top:1px solid var(--line);padding-top:16px}\r\n.sj .done dt{color:var(--muted);font-weight:600}\r\n.sj .done dd{margin:0;font-weight:700;word-break:break-word}\r\n.sj .done .acts{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}\r\n.sj .done .btn{min-height:48px;font-size:15.5px;padding:10px 20px}\r\n\r\n\/* Registrations so far, verification, captcha *\/\r\n\/* Registrations so far *\/\r\n.sj .stats{background:#fff;border-bottom:1px solid var(--line);scroll-margin-top:90px}\r\n.sj .stats-in{display:grid;grid-template-columns:minmax(0,300px) minmax(0,1fr);gap:28px 48px;padding-top:36px;padding-bottom:36px;align-items:start}\r\n.sj .stats-total{display:flex;flex-direction:column;gap:6px;align-items:flex-start}\r\n.sj .stats-total b{font-family:'Cormorant Garamond',Georgia,serif;font-size:72px;line-height:.95;color:var(--navy);font-variant-numeric:tabular-nums}\r\n.sj .stats-total p{color:var(--muted);font-size:15px;margin-bottom:10px}\r\n.sj .stats-total .btn{min-height:46px;font-size:15px;padding:10px 20px}\r\n.sj .stats-bars h2{font-size:15px;font-weight:800;color:var(--ink);margin-bottom:12px}\r\n.sj .stats-empty{color:var(--muted);font-size:15px}\r\n.sj .bars{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 28px}\r\n.sj .bars li{display:grid;grid-template-columns:44px minmax(0,1fr) 34px;align-items:center;gap:10px;padding:5px 6px;border-radius:8px;font-size:14px}\r\n.sj .bars li:hover{background:#F4F1EA}\r\n.sj .bars .yr{font-weight:700;color:var(--muted);font-variant-numeric:tabular-nums}\r\n.sj .bars .track{height:10px;border-radius:0 4px 4px 0;background:transparent;position:relative}\r\n.sj .bars .fill{position:absolute;left:0;top:0;bottom:0;min-width:3px;border-radius:0 4px 4px 0;background:var(--navy2)}\r\n.sj .bars li:hover .fill{background:var(--navy)}\r\n.sj .bars .n{font-weight:800;color:var(--ink);text-align:right;font-variant-numeric:tabular-nums}\r\n.sj .linkbtn{border:0;background:none;padding:0;font:inherit;font-weight:800;color:var(--navy2);text-decoration:underline;text-underline-offset:3px;cursor:pointer}\r\n.sj .stats-bars .linkbtn{margin-top:10px;font-size:14px}\r\n\/* Email verification + captcha *\/\r\n.sj .email-row{display:flex;gap:10px;align-items:stretch}\r\n.sj .email-row input{flex:1;min-width:0}\r\n.sj .vbtn{min-height:50px;font-size:15px;padding:10px 18px;white-space:nowrap;flex-shrink:0}\r\n.sj .vbox{display:flex;flex-direction:column;gap:10px;padding:14px;border-radius:14px;background:var(--cream);border:1px dashed #D9CCB2;margin-top:4px}\r\n.sj .vmsg{font-size:14.5px;color:var(--ink)}\r\n.sj .vmsg.bad{color:var(--err);font-weight:700}\r\n.sj .js-code{letter-spacing:.3em;font-weight:800;font-variant-numeric:tabular-nums}\r\n.sj .f.invalid .js-code{border-color:#D6CDBB}\r\n.sj .vok{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:14.5px;font-weight:800;color:var(--ok);background:#E9F3EE;border-radius:999px;padding:6px 14px;align-self:flex-start}\r\n.sj .vok .linkbtn{font-size:13.5px;color:var(--navy2);margin-left:4px}\r\n.sj #sj-email[readonly]{background:#F7F5EF;color:var(--muted)}\r\n.sj [data-captcha] .linkbtn{font-size:13.5px;white-space:nowrap}\r\n.sj .js-capq{font-weight:800;color:var(--navy)}\r\n.sj .status{display:inline-block;margin-top:6px;font-size:12px;font-weight:800;letter-spacing:.08em;border-radius:999px;padding:4px 12px}\r\n.sj .status.pending{background:#FFF1D6;color:#7A4B00}\r\n.sj .status.confirmed{background:#E5F2EB;color:var(--ok)}\r\n.sj .regid b{word-break:break-all}\r\n.sj .utr-note{margin-top:6px;font-size:13.5px}\r\n.sj .hero-link{color:#E3C88F;font-weight:700;font-size:14.5px;text-decoration:underline;text-underline-offset:3px}\r\n.sj .hero-link:hover{color:#fff}\r\n.sj .upd{padding-bottom:48px;scroll-margin-top:90px}\r\n.sj .upd-card{max-width:880px;margin:0 auto}\r\n.sj .upd-pay{font-size:13.5px}\r\n.sj .upd-result{padding:14px 16px;border-radius:14px;font-size:15px;font-weight:700}\r\n.sj .upd-result.ok{background:#E5F2EB;color:var(--ok)}\r\n.sj .upd-result.bad{background:#FDF1EF;color:var(--err)}\r\n.sj .upd .submit-row .btn{max-width:360px}\r\n.sj .utr-row{position:relative}\r\n.sj .utr-row input{padding-right:70px;font-variant-numeric:tabular-nums;letter-spacing:.06em;text-transform:uppercase}\r\n.sj .utr-row input::placeholder{text-transform:none;letter-spacing:0}\r\n.sj .utr-count{position:absolute;right:14px;top:50%;transform:translateY(-50%);font-size:13px;font-weight:800;color:var(--muted);font-variant-numeric:tabular-nums}\r\n.sj .utr-count.good{color:var(--ok)}\r\n\r\n\/* Barbil Tours travel desk *\/\r\n.sj .travel{grid-column:span 6;position:relative;overflow:hidden;background:var(--navy);color:#fff;border-radius:20px;padding:24px;display:flex;flex-direction:column;gap:18px;box-shadow:0 18px 40px rgba(20,40,75,.22);border:1px solid #2A4777}\r\n.sj .travel::before{content:\"\";position:absolute;right:-120px;top:-140px;width:340px;height:340px;border-radius:50%;background:radial-gradient(circle,rgba(212,170,92,.30),rgba(212,170,92,0) 70%);pointer-events:none}\r\n.sj .travel > *{position:relative}\r\n.sj .travel-head{display:flex;flex-direction:column;gap:8px;align-items:flex-start}\r\n.sj .travel-badge{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:#1A1405;background:linear-gradient(180deg,#E3C88F,#C99D50);border-radius:999px;padding:5px 12px}\r\n.sj .travel-title{font-family:'Cormorant Garamond',Georgia,serif;font-size:clamp(24px,3vw,30px);font-weight:700;line-height:1.1;color:#fff;padding:0;margin:0;float:none;width:auto}\r\n.sj .travel-title em{color:#E3C88F;font-weight:600}\r\n.sj .travel-sub{font-size:15px;color:#D5DCE8;max-width:640px}\r\n.sj .travel-opts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}\r\n.sj .topt{position:relative;display:flex;flex-direction:column;gap:10px;padding:16px;border-radius:16px;background:rgba(255,255,255,.06);border:1.5px solid rgba(227,200,143,.35);cursor:pointer;transition:background .15s,border-color .15s,transform .15s}\r\n.sj .topt:hover{background:rgba(255,255,255,.10);border-color:#E3C88F}\r\n.sj .topt input{position:absolute;opacity:0;width:1px;height:1px}\r\n.sj .topt .ticon{flex-shrink:0;width:42px;height:42px;border-radius:12px;display:grid;place-items:center;background:rgba(227,200,143,.16);color:#E3C88F}\r\n.sj .topt b{display:block;font-size:15.5px;color:#fff}\r\n.sj .topt small{display:block;font-size:13px;color:#C3CCDA;margin-top:2px;line-height:1.4}\r\n.sj .topt .tcheck{position:absolute;top:14px;right:14px;width:24px;height:24px;border-radius:50%;border:2px solid rgba(227,200,143,.6)}\r\n.sj .topt:has(input:checked){background:#FBF5E8;border-color:#E3C88F}\r\n.sj .topt:has(input:checked) b{color:var(--navy)}\r\n.sj .topt:has(input:checked) small{color:var(--muted)}\r\n.sj .topt:has(input:checked) .ticon{background:var(--navy);color:#E3C88F}\r\n.sj .topt:has(input:checked) .tcheck{background:var(--gold) url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'\/%3E%3C\/svg%3E\") center\/14px no-repeat;border-color:var(--gold)}\r\n.sj .topt:has(input:focus-visible){outline:3px solid #E3C88F;outline-offset:3px}\r\n.sj .travel-why{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 22px;padding-top:16px;border-top:1px solid rgba(227,200,143,.25)}\r\n.sj .travel-why li{display:flex;gap:10px;align-items:flex-start;font-size:14px;color:#D5DCE8;line-height:1.45}\r\n.sj .travel-why li svg{flex-shrink:0;margin-top:1px}\r\n.sj .travel-why b{color:#fff}\r\n.sj .travel-note{display:flex;align-items:center;gap:8px;font-size:14.5px;font-weight:700;color:#1A1405;background:#E3C88F;border-radius:12px;padding:10px 14px}\r\n.sj .done .helpdesk{width:100%;display:flex;gap:14px;align-items:flex-start;text-align:left;padding:18px;border-radius:16px;background:var(--navy);color:#fff}\r\n.sj .done .helpdesk .ticon{flex-shrink:0;width:44px;height:44px;border-radius:12px;display:grid;place-items:center;background:rgba(227,200,143,.16);color:#E3C88F}\r\n.sj .done .helpdesk b{display:block;color:#E3C88F;font-size:15.5px;margin-bottom:4px}\r\n.sj .done .helpdesk p{color:#D5DCE8;font-size:14.5px;max-width:none}\r\n\/* Travel desk: compact layout *\/\r\n.sj .travel{padding:18px 20px;gap:12px}\r\n.sj .travel-head{flex-direction:row;flex-wrap:wrap;align-items:center;gap:6px 12px}\r\n.sj .travel-title{font-size:clamp(21px,2.4vw,25px)}\r\n.sj .travel-sub{flex-basis:100%;font-size:14px}\r\n.sj .travel-opts{gap:10px}\r\n.sj .topt{flex-direction:row;align-items:center;gap:10px;padding:10px 40px 10px 10px;border-radius:14px}\r\n.sj .topt .ticon{width:36px;height:36px;border-radius:10px}\r\n.sj .topt b{font-size:14.5px;line-height:1.25}\r\n.sj .topt small{font-size:12px;line-height:1.35}\r\n.sj .topt .tcheck{top:50%;right:12px;transform:translateY(-50%);width:20px;height:20px}\r\n.sj .travel-more{border-top:1px solid rgba(227,200,143,.25);padding-top:8px}\r\n.sj .travel-more summary{list-style:none;display:flex;align-items:center;gap:10px;flex-wrap:wrap;cursor:pointer;padding:4px 0;font-size:14px}\r\n.sj .travel-more summary::-webkit-details-marker{display:none}\r\n.sj .tm-label{font-weight:800;color:#E3C88F}\r\n.sj .tm-peek{color:#C3CCDA;font-size:13px}\r\n.sj .tm-chev{margin-left:auto;color:#E3C88F;transition:transform .2s}\r\n.sj .travel-more[open] .tm-chev{transform:rotate(180deg)}\r\n.sj .travel-more summary:focus-visible{outline:3px solid #E3C88F;outline-offset:3px;border-radius:6px}\r\n.sj .travel-more .travel-why{border-top:0;padding-top:10px}\r\n.sj .travel-note{padding:8px 12px;font-size:14px}\r\n\/* Memory Lane album *\/\r\n.sj .album{background:linear-gradient(180deg,#FBF8F2,#F4EEE2);border-bottom:1px solid var(--line)}\r\n.sj .album-in{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.35fr);gap:20px 40px;align-items:center;padding-top:26px;padding-bottom:26px}\r\n.sj .album-text{display:flex;flex-direction:column;gap:6px}\r\n.sj .album-text h2{font-family:'Cormorant Garamond',Georgia,serif;font-size:clamp(26px,3vw,34px);line-height:1.05;color:var(--navy)}\r\n.sj .album-text p{color:var(--muted);font-size:15px;max-width:420px}\r\n.sj .album-text a{font-weight:700}\r\n.sj .album-frame{position:relative;margin:0;background:#fff;padding:8px 8px 34px;border-radius:6px;box-shadow:0 14px 34px rgba(20,40,75,.16),0 2px 6px rgba(20,40,75,.08);transform:rotate(-.6deg)}\r\n.sj .album-stage{position:relative;height:260px;overflow:hidden;border-radius:3px;background:#E9E2D3}\r\n.sj .album-stage .sl{position:absolute;inset:0;opacity:0;transition:opacity 1.1s ease;overflow:hidden}\r\n.sj .album-stage .sl.on{opacity:1}\r\n.sj .album-stage .bg{position:absolute;inset:-20px;width:calc(100% + 40px);height:calc(100% + 40px);object-fit:cover;filter:blur(18px) brightness(.8) saturate(.9)}\r\n.sj .album-stage .fg{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;filter:saturate(.95) sepia(.06)}\r\n.sj .album-stage .sl.on .fg{animation:sjkb 7s ease-out forwards}\r\n@keyframes sjkb{from{transform:scale(1)}to{transform:scale(1.06)}}\r\n.sj .album-cap{position:absolute;left:14px;right:120px;bottom:7px;display:flex;gap:10px;align-items:baseline;font-family:'Cormorant Garamond',Georgia,serif;font-style:italic;font-size:17px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\r\n.sj .album-n{font-family:'Manrope',system-ui,sans-serif;font-style:normal;font-size:11.5px;font-weight:700;color:var(--muted)}\r\n.sj .album-nav{position:absolute;right:8px;bottom:4px;display:flex;gap:4px}\r\n.sj .album-btn{width:28px;height:28px;border-radius:50%;border:0;background:transparent;color:var(--navy);display:grid;place-items:center;cursor:pointer}\r\n.sj .album-btn:hover{background:#EEF2F8}\r\n.sj .album-btn .i-play{display:none}\r\n.sj .album-btn[aria-pressed=\"true\"] .i-play{display:block}\r\n.sj .album-btn[aria-pressed=\"true\"] .i-pause{display:none}\r\n\/* Registration Help Desk *\/\r\n.sj .help-strip{margin-top:10px;display:flex;align-items:center;gap:12px;text-align:left;max-width:640px;width:100%;padding:12px 16px;border-radius:14px;border:1.5px solid var(--gold);background:#FFF8E8;color:var(--ink);font:inherit;font-size:14.5px;cursor:pointer;box-shadow:0 6px 16px rgba(184,138,62,.18);transition:transform .15s,box-shadow .15s}\r\n.sj .help-strip:hover{transform:translateY(-1px);box-shadow:0 10px 22px rgba(184,138,62,.26)}\r\n.sj .help-strip svg{flex-shrink:0;color:var(--gold-dk)}\r\n.sj .help-strip b{color:var(--navy)}\r\n.sj .hs-go{margin-left:auto;font-weight:800;color:var(--gold-dk);font-size:18px}\r\n.sj .help-fab{position:fixed;right:16px;bottom:16px;z-index:9990;display:inline-flex;align-items:center;gap:8px;min-height:48px;padding:10px 18px 10px 14px;border-radius:999px;border:0;background:var(--navy);color:#fff;font:inherit;font-weight:800;font-size:15px;cursor:pointer;box-shadow:0 10px 26px rgba(20,40,75,.35);transition:transform .15s}\r\n.sj .help-fab svg{color:#E3C88F}\r\n.sj .help-fab:hover{transform:translateY(-2px)}\r\n.sj .hd{width:min(720px,calc(100vw - 24px));max-height:calc(100vh - 32px);padding:0;border:0;border-radius:20px;background:#fff;color:var(--ink);box-shadow:0 30px 80px rgba(0,0,0,.35);overflow:hidden;font-family:'Manrope',system-ui,sans-serif}\r\n.sj .hd[open]{display:flex;flex-direction:column}\r\n.sj .hd::backdrop{background:rgba(14,28,52,.55)}\r\n.sj .hd-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:20px 22px 14px;background:var(--navy);color:#fff}\r\n.sj .hd-head .eyebrow{color:#E3C88F}\r\n.sj .hd-head h2{font-family:'Cormorant Garamond',Georgia,serif;font-size:26px;line-height:1.1;color:#fff;margin-top:2px}\r\n.sj .hd-x{flex-shrink:0;width:40px;height:40px;border-radius:50%;border:0;background:rgba(255,255,255,.12);color:#fff;font-size:24px;line-height:1;cursor:pointer}\r\n.sj .hd-x:hover{background:rgba(255,255,255,.22)}\r\n.sj .hd-body{overflow-y:auto;padding:16px 22px 8px;display:flex;flex-direction:column;gap:10px;font-size:14.5px;line-height:1.55}\r\n.sj .hd-flow{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:0;padding:0;list-style:none}\r\n.sj .hd-flow li{display:flex;flex-direction:column;align-items:center;gap:4px;text-align:center;font-size:13px;font-weight:700;color:var(--navy);padding:10px 6px;border-radius:12px;background:#F4F1EA}\r\n.sj .hd-flow b{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;background:var(--navy);color:#E3C88F;font-size:13px}\r\n.sj .hd-lead{color:var(--muted)}\r\n.sj .hd details{border:1px solid var(--line);border-radius:14px;padding:0 16px;background:#FCFBF8}\r\n.sj .hd details[open]{background:#fff}\r\n.sj .hd summary{list-style:none;cursor:pointer;padding:13px 28px 13px 0;font-weight:800;color:var(--navy);position:relative}\r\n.sj .hd summary::-webkit-details-marker{display:none}\r\n.sj .hd summary::after{content:\"+\";position:absolute;right:0;top:50%;transform:translateY(-50%);font-size:20px;color:var(--gold-dk)}\r\n.sj .hd details[open] summary::after{content:\"\\2212\"}\r\n.sj .hd details > *:not(summary){margin:0 0 12px}\r\n.sj .hd ul,.sj .hd ol{padding-left:20px}\r\n.sj .hd ul{list-style:disc}.sj .hd ol{list-style:decimal}\r\n.sj .hd li{margin-bottom:4px}\r\n.sj .hd-table{width:100%;border-collapse:collapse;font-size:13.5px}\r\n.sj .hd-table th{text-align:left;font-weight:800;color:var(--muted);border-bottom:1.5px solid var(--line);padding:6px 8px}\r\n.sj .hd-table td{border-bottom:1px solid var(--line);padding:7px 8px;vertical-align:top;word-break:break-word}\r\n.sj .hd-ok,.sj .hd-pend{display:inline-block;font-size:11.5px;font-weight:800;border-radius:999px;padding:2px 8px}\r\n.sj .hd-ok{background:#E5F2EB;color:var(--ok)}.sj .hd-pend{background:#FFF1D6;color:#7A4B00}\r\n.sj .hd-foot{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:14px 22px;border-top:1px solid var(--line);background:#FCFBF8}\r\n.sj .hd-foot span{font-weight:700;margin-right:auto}\r\n.sj .hd-foot .btn{min-height:44px;font-size:14.5px;padding:8px 16px}\r\n\/* Day-by-batch info *\/\r\n.sj .day-info{display:flex;gap:12px;align-items:flex-start;margin-top:12px;padding:14px 16px;border-radius:14px;background:#EEF2F8;border:1px solid #D3DDEC;font-size:14.5px}\r\n.sj .day-info > svg{flex-shrink:0;margin-top:2px;color:var(--navy2)}\r\n.sj .day-info > div > b{display:block;color:var(--navy);margin-bottom:6px}\r\n.sj .day-info ul{display:flex;flex-direction:column;gap:6px}\r\n.sj .day-info li{display:flex;gap:10px;align-items:baseline;padding:4px 6px;border-radius:8px;transition:background .2s}\r\n.sj .day-info li.mine{background:#fff;box-shadow:inset 3px 0 0 var(--gold)}\r\n.sj .dtag{flex-shrink:0;font-size:11.5px;font-weight:800;letter-spacing:.04em;color:#fff;background:var(--navy2);border-radius:999px;padding:2px 9px}\r\n.sj .day-mine{margin-top:8px;font-weight:700;color:var(--navy)}\r\n.sj .day-all{margin-top:6px;color:var(--muted);font-size:13.5px}\r\n\/* Help strip *\/\r\n.sj .help{background:#fff;border-top:1px solid var(--line)}\r\n.sj .help-in{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:16px;padding-top:26px;padding-bottom:26px}\r\n.sj .help-in p{font-size:15.5px;color:var(--muted)}\r\n.sj .help-in p b{color:var(--ink)}\r\n.sj .help-in .acts{display:flex;flex-wrap:wrap;gap:10px}\r\n.sj .help-in .btn{min-height:46px;font-size:15px;padding:10px 18px}\r\n.sj .wa{background:#1FAF57;color:#fff}\r\n.sj .wa:hover{background:#178F46;color:#fff}\r\n\r\n@media (max-width:900px){\r\n  .sj .hero-in{grid-template-columns:1fr;gap:28px;padding-top:32px;padding-bottom:36px}\r\n  .sj .crest-badge{width:104px;height:104px}\r\n}\r\n@media (max-width:720px){\r\n  .sj .card{padding:20px 16px 22px;border-radius:18px;gap:18px}\r\n  .sj .grid,.sj .sub-block{grid-template-columns:1fr;gap:16px}\r\n  .sj .c6,.sj .c4,.sj .c3,.sj .c2,.sj .sub-block,.sj .pay-box{grid-column:1\/-1}\r\n  .sj .f.c3:empty{display:none}\r\n  .sj .hd{width:100vw;max-width:100vw;height:100%;max-height:100%;border-radius:0;margin:0}\r\n  .sj .hd-flow{grid-template-columns:repeat(2,minmax(0,1fr))}\r\n  .sj .hd-head{padding:16px}\r\n  .sj .hd-body{padding:14px 16px 8px}\r\n  .sj .hd-foot{padding:12px 16px}\r\n  .sj .hd-foot span{flex-basis:100%}\r\n  .sj .help-fab span{display:none}\r\n  .sj .help-fab{padding:12px;right:12px;bottom:12px}\r\n  .sj .album-in{grid-template-columns:1fr;gap:12px;padding-top:18px;padding-bottom:22px}\r\n  .sj .album-text p{font-size:14px}\r\n  .sj .album-stage{height:210px}\r\n  .sj .album-cap{font-size:15px;right:100px}\r\n  .sj .album-n{display:none}\r\n  .sj .album-frame{transform:none}\r\n  .sj .travel{grid-column:1\/-1;padding:16px 14px}\r\n  .sj .travel-opts{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}\r\n  .sj .topt small{display:none}\r\n  .sj .topt{flex-direction:column;align-items:center;text-align:center;gap:6px;padding:12px 6px 10px}\r\n  .sj .topt b{font-size:13px}\r\n  .sj .topt .tcheck{top:6px;right:6px;transform:none;width:18px;height:18px}\r\n  .sj .travel-title{font-size:21px}\r\n  .sj .travel-badge{font-size:10.5px}\r\n  .sj .tm-peek{display:none}\r\n  .sj .travel-why{grid-template-columns:1fr}\r\n  .sj .stats-in{grid-template-columns:1fr;gap:20px;padding-top:26px;padding-bottom:28px}\r\n  .sj .stats-total b{font-size:60px}\r\n  .sj .bars{grid-template-columns:1fr}\r\n  .sj .email-row{flex-wrap:wrap}\r\n  .sj .email-row .vbtn{width:100%}\r\n  .sj .upi-grid.has-btn{flex-direction:column-reverse;align-items:stretch}\r\n  .sj .upi-grid.has-btn .upi-qr{width:176px;height:176px}\r\n  .sj .upi-side{min-width:0}\r\n  .sj .upi-btn{max-width:none}\r\n  .sj .sub-block{padding:14px}\r\n  .sj .s1{grid-template-columns:1fr}\r\n  .sj .photo{max-width:170px}\r\n  .sj .opt{font-size:14.5px;padding:9px 14px 9px 10px;min-height:44px}\r\n  .sj .done{padding:26px 16px}\r\n  .sj .done dl{grid-template-columns:1fr;gap:2px}\r\n  .sj .done dd{margin-bottom:8px}\r\n  .sj .reg{padding-top:36px}\r\n  .sj .hero-sub{font-size:16.5px}\r\n  .sj .countdown div{min-width:52px}\r\n}\r\n@media (prefers-reduced-motion:reduce){.sj .album-stage .sl.on .fg{animation:none}.sj *{transition:none!important;animation-duration:.01s!important}}\r\n@media print{\r\n  .sj .help-fab{display:none!important}\r\n  body *{visibility:hidden!important}\r\n  .sj .done,.sj .done *{visibility:visible!important}\r\n  .sj .done{position:absolute;left:0;top:0;width:100%;border:0;box-shadow:none}\r\n  .sj .done .acts{display:none!important}\r\n}\r\n<\/style>\r\n\r\n<div class=\"sj\" data-wa=\"14257369700\" data-email=\"barbiltours@gmail.com\">\r\n<svg width=\"0\" height=\"0\" style=\"position:absolute\" aria-hidden=\"true\">\r\n  <defs>\r\n    <symbol id=\"sj-check\" viewBox=\"0 0 24 24\"><path d=\"M20 6 9 17l-5-5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/symbol>\r\n    <symbol id=\"sj-up\" viewBox=\"0 0 24 24\"><g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 16V4M7 9l5-5 5 5\"\/><path d=\"M4 16v3a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-3\"\/><\/g><\/symbol>\r\n    <symbol id=\"sj-info\" viewBox=\"0 0 24 24\"><g fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9.5\"\/><path d=\"M12 11v6M12 7.5v.01\"\/><\/g><\/symbol>\r\n  <\/defs>\r\n<\/svg>\r\n\r\n<!-- Hero -->\r\n<section class=\"hero\" id=\"jubilee-top\">\r\n  <div class=\"wrap hero-in\">\r\n    <div class=\"hero-text\">\r\n      <div class=\"crest\">\r\n        <img class=\"crest-badge\" src=\"data:image\/webp;base64,UklGRhJ1AABXRUJQVlA4WAoAAAAQAAAAPwEAPwEAQUxQSDQJAAABzlDbtg0j\/\/93W5MlIpI30jkzCG\/rtjW1kSQr7O6E7uFpZmbufmYuGHhlZmZmfGNmZvgJ7VU4zMxUzEyW11KEbKctRXzD94tPXygiZMG22rYWB3IQQpAe27e84j+AIP7vJUQEI7dtw3yj7WxZu6H+yLo9ZbhYOPOGe5\/wknd+5mur1v5lw9\/2DktoG\/7L2vQ1fSeeEG84c2HMFQ47WNXAwYlXLHvmOz\/f\/\/32\/UeHS0QTFf3PvzMtu+LEjgPTDXUql+5vvfCeF3507d\/3D8sYHCsA5MyjhJnhXh8pI\/597UdfeE+j5dsQ5rnTb3\/JF3+xs\/RwHW2cR0uWDOcRbBqIg536xZfcfnpgp4wqCpy38l2rNrhrnXoyddhypaUbVmlsndeQmuDVFeeePfnOt6zeUs7NZabgcuqW1W+582TnWSEBKys9FLj4Kd\/887DAsTG5M09NUqD9pl7cKdAL03Kxb4vphpf397ifTblUDOx+pmn\/5Tf07JtwaAKsAvCVb1yfu3WlonDLcvvGKzPneRKY94vzXnD\/YefpyVJhlG\/X4ftjG5BONv8Bj\/6Gfbso6tYCsMs18gNsegBqA7jy7b913i6kLijfRgXbp03me09XxAP2uZhLzcAJIk1coT53jAIPf+737M5yKVK7QFPkfU8fbt+6fO1d\/LZ\/2GcgS01Rusnt2y62jo+9q967e6kfVfX5EGvee5V1fOtd+6k9k9Sub2mN8KmT9YDL4\/6y5wsnfioBvcyX3vnv3lXUcTxvOEWZ+O7zvego8PA3bSt7vnG2wW4DeK6JYO65fyp7PnL0uXMw4rdVK75f9nzlfH+FXeSvVRd9aelbSj7YivrSRZ5axIr5l2+zBw08hwTZpvM+2pdU4PbvDsXxvOeIRHgnyIqTPjRJE5\/10JP8ElRg2a+LL3+INwGWqB4JZj2cbKPiVdhg44sNAFPU\/O2IqFeDWpQ0HpCE+XccHTbiYTTSREXyQLcrV42IejiYriya1T3t8Tvs8R1Pgxtptciqd9r7J+jm3Waoc1YXV60fsa3p7WCS9ipoXb8HCcu2jO\/m52bQjuF61njNsVFpfs9Kr6ljiS5O+MxwAAkCANFYuyzFeWvG1PB+idjWTHu46Q+j0sKQFVGrjgnLd42rH4Lysa2PZoqnNjKQwADStHXZB2LG65z6wVEIdzKuhfF77C5rgMCQ92Q1UAY+NkHLgHT8GFB1NZj78viWYenIczBVt2+NbxmajlptFcx\/21rYtFWYyhvZNJNFZzZ8qjBc1a5fthZC5Wo25a75qLUwajRaPWXFu62FUhnV0x5eZy2cykiVs6cUezvhFE6iFdOEZc5PCQdUkbRS2sVNu3ggQQU43tTRCm2vn\/PH4TEJLJI058BUZ3t9rbXw6trKbL8rPmctxMrQilR49biGIe33aqRK+MuPpTzMwim10ApUuHwLFxZoZaSZF8h08XvlpDDnNFCedewD5aRQ5zB0xhUeYy3sik6aadKV2wd52IWhV84wJ+sev66cFPIcjbPLUbzDWvg1QmdmtxW\/Lib8wgm3zUgz89DfDQdCAEDaZHg2\/GE3RoHQh6Ezsfvywoig3EBnEfu9G6NB6PdFaGYxqoUMbh55tIcCBdPNMFOOLfzQjdEhxO10Q4pXuDFKhFroNGN8\/s5BTgth7Dw\/M9PkL1umBjF0inZPPhByAHzP1DQzcyPWEGPJ3LSWKJ7jxugRes6UyMhJfx2AIgLEk4xMh99imSb0Fuh0Wuwa1YIaHeJUOijea5kq1ECnwJfttkwVai5bOgk+Z5kuxDBL5mv2W6YLxZSZqTDdSLJL91mmDO27NDNTqkKzIobP25UzbYQ5tkshxVuHR4U4aESXQIyHbrBMHdqQkE3Oz3XnqTOtkxMf96PhgD4C+dFxPDEvs0Yh1UnJ4Ft2TKGhwkz6Hf4H8iGJwE2aTHt4u2UaETq9iSo\/4A92hkYTUTs8SfajrFFJ20mSDX8jP0YlSRwzM0H2uXuGOZWERc+FGT9+gZtNpeQ4dpix9nNKCfc143HjKw4NSYUW44Y9vNGOKTV8I3pjxnPfpZbEOebR4+uO5LQa8JE4etjDyy3TinT00KQ+vaTfMyPHF+0ZUmsgmkYNu9lTLFOLlLujLr6R00s4jrjIcNLf7Jhaw+YklIoq7i6+z59cALcdLcub7Qy9JrgsJltNMwGb8iHH7XaGXhN6LhztYqVlilGEuvIuOUoxaURdybBaBhQTyOoOO3baRqrJRrZqcNsgZ4oJM5JNVLzYztBsooXaiy\/ZlTRbCKeU\/szO0GyCHb5w1zCnmbDEBkZxLxdMNOLY0R5eYDOplhiRDD5qM6mWGG3iuiHdBqId4ETnmDfVEpsTgSv2U04iOlhux3Qbth08266k20IG3kU7UeALkugmSRpkfdqF+7zwe7uSbgvRnr6VdhJPv2E\/7STqvc5qwi2Oj7eZlEvUl0qinCSJ76CexM9QT\/Qr1JOvrKZeyuo11JP4F8kpJyx\/2UA92fA36kmzV4iHVv7nH1ryGf32G+l33IJ+x81+57a\/e4PfvdXv3vR3b\/97N\/J7t\/R7N\/d7t\/l7N\/x7t\/77bsL33c7vu7Hfd4u\/72Z\/320DcwN+uRW\/3JRfbs8vN+qXW+bLzevlNgZzQ3+5tb\/cZF9u9y83\/tdb8OvN8PW2\/HqDfr1Vv940Xm9fsDfy11va680F9jb\/esN\/vfU+boIft8OPG8PHLfLjZvFx2\/y4gX7cSj5uqh+3l48b7cct1+PmA3Ib\/rghfdyaP25SH7frjxvXxy3842b2cVv\/uMF93Oo\/bnoft\/9vN4Jvt8RvN4dvt4lvN8xvt45vN9Fvt5NvN5Zvt9hvN5tvt51vN+Bvt6JvN6Vvt+dvN6pvt6xvN69vt\/FvN7Rvt7ZvN7lvt7tvN\/7PW4DPm4HP24LPG4TPW4XPm8bP24fPG4nPW4rPm4vP24zPG47PW4\/Pm5DP25HPG5PPW5TPm1XP25bPG5jPW5nPm5rP25vPG13PW57Pm5\/P26DPG2LPW6PPm6TP22XPG6fPW2jPm6nP22rPG6zPW23Pm27P26\/PG3HPW3LPm3PP23TPG3bPW3fPm3jP2znPG3vPW3zPmz3P2z7xzhtA778V7P6bAvHO2wPtzhvFP2\/nLYN8580DVlA4ILhrAABwEQGdASpAAUABPmEmj0UkIiEYi5ZUQAYEtDdwYFYxsEm\/y3ToyL58\/Wf3H8gPdj4566fcv2z\/I+sjqf6y8uXpjzl\/779qvc9\/SP9P\/7\/cE\/ZH1M\/+v1ff4T\/weo\/9u\/3l937\/k\/tH7yf7J\/vfyw+Q\/+t\/6f\/\/+15\/5PZK\/zn\/Y\/\/\/uR\/u36wH\/t\/eX4Wv7N\/2P3a\/\/\/yKftv\/\/\/+V7gH\/\/9QD\/tcUt\/Q\/xR\/aT5n+Gn4D\/BftF53\/jHzj+A\/uP7X\/3r\/5\/7T4i\/8jyN9Uf830P\/kP3O\/H\/3r9y\/8Z+6fyj\/1fCv4gf2f99\/d\/\/O\/IL+PfzL\/Df2j\/G\/8v+9\/vb9U\/0f\/c7nXaf83\/yv8H7BfsN9K\/1H+B\/zv\/l\/0npHfzX+c\/dr+ofB32E\/1v5wf6n7Af5f\/S\/9H\/fv3c\/u\/\/\/+x\/8j+wnk7fcP9r\/5v9l8AX8w\/r3+7\/yX+0\/b36Wv6f\/vf5z\/Y\/tl7XPzv\/Kf9\/\/L\/7X9s\/sG\/lf9Y\/4f97\/z\/\/z\/1n\/\/\/+X3z\/+\/3Pfuj\/\/PdY\/aj\/qOcwzRj2+e6\/aeGsaLj\/\/cQd1V2l4M7\/ufs\/ZCytTLimkW9HmD+yf0YTm2ZOInTAyydb26v2oT\/\/ODEz71vgzopGEWZkayChHupFtPtfTRLrcwsfTGE\/52X7LyCNvAdevWK7MxxSbyEBEKiK2GzonyJlkxZCtxBGhbxxkyLPoKw\/OO8RvUF\/4DFJyNeSON606EKXdSvvNdtkhp76cfKHll965KpN4161bdIK9jjsOGGPsvJDbhpvGRUzyt1dVwMRFEAgDnBdDjoHN94vSTqS9FveTGwWc82B7BGhNR3Bb6mGYgNEpj7teJyvlKUnHrZ15uUEe44+vNFJkOo3uLTITWN\/9qgyh\/173rKrWpDKGOys8\/\/OEZXZYxSGU2hCOg8e1jkblOV9yUTGAkq6ihDcdQVDGr7C2F6VfOmECq\/p27e29L1KCOx4LOHDwSSKXwfbJBxwuQ5JZvcZnOZY2O+blH5EPhehKglA2R9AMFxpk6mhaqTuA7s9mEC1kFd2SEhw+FwVwAsXAo+e2P6JsVv0yn0DTFKxaebYRboCd2YYlEu7IojWz6SkMvhlLrhhG9Bgh71u1KPDdftEUTHmGLGKn7LHWRffwaktOhjskXgehGJ01JvXscQJCNP3A4ynZDa1hqcXKn\/f5e94r6eJJYkdjEXaq4\/RXCkh1bGVaaQIVXm1fGQb6Kgv79uMYUUj7Z+DJcPIq+9jJhqU09JgJ4wCV0n+Y5yohp7rPzdY2HWF+gY7ZXTBKFcQ5cbdoytmOLfcLfI9PCQ\/o19MCRd\/Ng\/m\/J6wVUCwbLoU4jwiOGej1Xr2j\/mmILUs1e6hXiAhjjHgtjeFlbdwljHAGyZNnnhYJwDsX5rIBSUjLFmSV4bduI1\/74G6771r3ZgrpvfNs311t0+Iwi+dztZmku8F5Z7GtLA2ghmGRAxcB4630YELgTRajHmuywojFloYgU4c6asLHZ3xzzklddtuxkiqxTIYjnXa+ksX1zJJ7Uj+vwYtreDavrF2EEEK36OR9\/hBeZdXJLPer9OPTIvSYj08dpH+dGBqENLcl4XK\/\/Ht0TlMx8ojMFhzFhQpK31qTk1JxKpcKie5nbsRmhSYdn5zvLgTlx\/I0c814tBKoIsQjddUEXBx\/g4rUmAH7HYkHweanMMlu3oHGZiV1QSp+E\/GBbvioDxtSWRFPOyW5RoBqNPbHDLH1HK1GWL7YHuwti60JJYM1K2bLwAQGHB3YMWJxAJ12n\/n9TAdkjv4hNY10V2R9c9\/QdDeZMOj+FvFzYIpgskn5gopfZY9hVszWEUWmxRLc5FkRZadG6WfDwGNIp\/+qYD8llWoxNMWrmK2EFfiL84yOWpYouOg\/PGt1fQrvA\/TrfxPFcj11rFvnFydIzef+RozULYz4TQ40fOnxqCMnZCaQnHGYAnkZxPLn3xSHuKHbK0TVhpQoWv0NFcWtzcn29g+0FGJHveFjlFu+m2xRSIFp5KQe3A7haKlZsoplio8+9BUbWyG3CtycYxphhuU7uODvWnCHP7FAWxPkE\/TdizVWUQPL9HcpwVMHfq9LbcfW3mUbmsHvKn\/Qg7l44hf6iWZoUGK7nF1nMVb87UZF\/lpGR6ZuXzobracBux45mDGSn1sPvTUeeOIH5qZvvG0SVx+3NGbLK\/1ACjOrjtD\/dnuEFmcknxF31mPoQY3uwUj4w5YsJuaUELs9YzlO35iB0sc+NnxnjQGEvL\/hadwjWxpXXmgLf2fJVLMwf4eP24LMjDBPpaMQR\/\/NOw8KWmCdUVAPQXV\/7DK2i+QIQOHGvwDnxnq2AGm\/gumDRsnASXNxVXZTnjgsk50yKUSDh+ZWK\/DBDx8KsU1OhTcyAmxpIsiHcRdfLDJOl0+8qrrQUwd+Rul7m87FSWBmDCDHibqv3efvo776PdpjJpWGAF6q685xT0A\/UnnHfTo1+mGUYcQSZeGBmMbRz2\/7Xi9FPqBtqXruS69udFaxdZZrPwzmBtYtC382q6R\/H1rnwN\/lRrpxuj4tpsdm26sjmzuJXb77yYpzrj6gsKlYGP2zidqFpaowuZlUyfShfjo3QeKEl18QDjn2K9xr6yF8eQiTed6i6Mq4+LWlf5L8Prs+lg6szTvBrvzJ1KfQpcFnKz\/FJ+jnmx2eVgitaIwG2JLyCPzp\/JhcrFcLAQwHvhPBINkMr\/9SjnBzDev0CmHDxCOIOeOhJ4z6EXvMcD\/eQ4o2s\/1fOWZZgKImlPBx9iuMNlqbU9TvhH\/x34G2bUTfEIZEaJ79YAZdQqgMlst9G0FVEqs+udVfmX3cNEfP\/\/\/XFdXQT8Czcs8tCRTODE0CehQTnFvwU323USUjeKuVFVJfa3n+pB\/pUbcO3iZHM4da704UC\/\/s04x7IHuR5mm4PmR0heWYgAA\/vDpAAYn6m44pUJi\/rCOGWW\/NmrcePzLLDcvMqzYUFOxyeb+6WQs2SGaeRO4l+RFOfQRG7U55TRutOTmKXdoLaYhSSKibDsgRc6WCXENokcXCB2YbkzOr8DezhsUtGwToLLwZfgrawyyDQNjAxJ\/82wkNgzr0Rnxtf3\/4uYuvnvbjk4S0I+n3dgWRZGLjiMCN5r0irPGuulrmP2UI54aaGQs3eoPL5p8qDw+gaLQtGY0vyTc5J2wMdcvXrD6qGfT8z7MjYxTtOgIbttX+jox+d4O0MQNgm+LZ6rbc8p2nj7grf+fuE6cRJa8lVc86pqwb+9sHvrNhpPpK\/G2ba1yX9Roc14zxiul3f0nSV7KCRXOmSN5NyU1Jl7+MgY5ogTtZeV72eKBXn4Em34fzPhAUDV1PxvnGeLg7EsbF94OfL34pIPcxS0tAjsPrFsZnCD2dPhn384lpZoukWeeijpVIp5N7x5tW6pYC+QAhOS7EJfkXyQFW\/OaimB545Q+gNoU4DHM3hRhVTOwrHbw1OwXvCtx0sLfpmJTB3V26BiWDiNCr6RgmL3Nff\/qa+9WrTVnkCtYyE4lUNOGPvj79XIFAG5nQatPHGX\/DIcaufNWXWHXXcYH+Hl3cfu8pPPpeGZjnupe94MDvHSkaNN3wyP29q0UnWy74uE7WULS5\/po5AKkwnyiDLHntMY\/Yh2LKT3xrqpIV58N5hMuzEVCwXFtRwLO7TZ3fsstJWPca1SM4TbBwcq10NlUxZ0o9P8C0ZxKxh8iSFmDNF5yqDHFD6OXpeyOiA4l7dWdFrz6V5Pgib82LC6Hnwi1DYOCZsC2vs+gry1Krxsav4uQ\/+eNvidBhpDtpkRPY3adh6ymX94ZHfys02iWzo6UdeuAwDpE0MCAQotmyz\/EXXplfQ52JOyXIL17JV7w16VqtVuAaYzqX00tyLAhuA+gxyHo31Yr5JyTqJ6KDSyZ3yQ2HL8svDN+EkgnW2NERveRb6QcnEg0Qv31wAAAKH9WYjcbFOnMZUUKXs3RMmq7e2fwAEuAkX7f7Ck9sit0T05cJh14umxmScOAXJC65fkSOU4mOLp4hVMAGR1zl4cDCM\/kbrXkaFFTpPh04Wq14TZCEyNvQUCmIOWLABSrruSMHtwark9gt7ooMwqE5b1j\/VpstER5riZ+eeY8Rla89ijoBVGSJ1MtYxGcsrnPlbEVxcz3h12tIFblULkXw4\/8QVRonOvUZk6Sv2CoXdiurJxB1CimgsPbTpLPUONOFW1W6HMlJ7JrWpK9lPuxXpe+lpzU4UQd\/kGDcPH9iLB3DzGGEv4Q5r738eDhLNDwFKh98Q+En7bPjbAQarPmbo+DnltKO0QtxYQQASpfr+A47g00\/r\/TkMdhiBaGBi71be3qEYOtHI3sSVsHeICfPwqq+1+iBYiC3mFJrvJGrWcw7GzrQtkAEX3xA8c6NkeQjQccC6Po34mbcgkL2Kuf8GxFwnRScGUJ90A9oMiLP9pI0dgKuVJe62YHvatag6Xle2YZWSkY\/S+tKH4XI3QSPIV5GCcqiFDhHNP7vRwHI4wGLKiIBkkrKRluWtkZthc\/hUw7aoj4FJviuE1iuDIKBSeiOf+IQScPDY1HdJLq9EHIAuTrh1cJKlwjbTjbPafE3\/iiyxuJcOGLEZDsx+AzUYNAVrFb3kxmpN\/CseS39S3ZTnDYvv96\/FprLQFutxD6R0kApIdna3uPkqC8fQ+XgWhh+6Zlr\/PYa7kn4cV+PiqYLung56QgSDKym8\/qSnLFP6EN2XY8Go4jlNSKqJZSkK\/8tSqMz+5OusWZZehgfp1\/C2XYmFlWZabh7f91NjVNcZIPDISUx0uqZnUtkuC+ykrbU9rW39\/3AE07EydKnp8YTWteHqXDbgUnEcRCVFDKjRLMncUvXUR0UioWKTY7P+4HempjX7orROwWXpiDRkrfj\/hO6v8XmffOHG3ro9d9y5bCtgiNCrsOeHaHmhOPhTvkq\/tFrOWki6zSD7rsoOJYPA7R9IDIlAcLnpnPyJks6\/9junJCbFV+fKOYupAc4H61xWBVRxnrQ4A\/Y9lKcTbmed09QFvS6tkXj1P4jsrWmi0aYZSEqkawUYCyb7eel5wV\/OJSgcCbH0HVcrnoaCJe\/+6mbknoNSsMJbPDjeU06FjSjQ+cmpks8Z0CpFDIYJKLx3ZDPH7m\/riXFw41PG953R4UlwMthoF+roywUQLkYLqcDRSQJIAMROAsUFTDptMb2C67LhT01+430pUbtJIF71Xr2G\/D+WjX0mrowLceeZ4XiOqkLzE4Rkj6kJPS56kCBCQlayXkgOU8SzWe\/PpPio9y3YU38PJCLuvdg3lkkqiwX+4QsL9iqhQsMGBt51ynUYMGRHmYoqfimJWE03+eklf2h3Pms1vlJ\/QBR\/wNAA4\/xfqTZoCMOa8tvjtpU1oWMZmSDWl92MVWgHKX7WnH\/wYZlQvRR5XhwifpH0INye7Dzn51DHfCfPoXDg4RBptrNRPM76a9Utygwrf+VeBRG7yuAra3c1etY3+zxEg4+QnQdELpl3YK88X1ZccYVeP5zdAZdfcBP28kLWleS8ntTmv4hCGftSBeiRx0bWHgR1ARDA2c8GIBQjcaI5QCPewtSgc5SpNjlaey9xKsvmYPHtLNwMB8Ah0QjqhWGj1P5h\/yf7XPMMKLJmv\/pXrNDS72tPmpEHMrrYnjPhlWttE3TGTMrMH+WWhQMmv+0SGv83kAS3\/DYxFrXo1nxzkYn8vhIDGyVZ32y\/rQV2ncROr69P35X7jOPL+VBcfvKYqwYmHuQBut2m60lvFK72\/9rp91mtup6mZwNZLKOQsxw45S0tnHtMqSwQoKP2tW1PfABV7U4DW0M6+FKzr0EjreC00Wjy\/OAjlqt1LTs\/FhkmDYjahUhJOs2FDplTXnYMo2t5zeKKl4TkFFHTfxJyMNxZY+79NoAAQeaWaEn544phMsphb\/fwDUlM8dnzttNvAjGGUle+8fa7BOfFcuxtP7AIl1nZ3LXwfde2ToFWLcmDLQUqZS0iTCVdHeiks26OQ43e1FsUk8FJLYx0yQ\/g26Qv5Ej6PjTAvjaGpz\/U8pG2bdXfC9Ix0MxuOdN0T+gbMQ2UPvVezzMCx4VW9ATFdhjs9cu5+Zx\/35r7e2QnQb5U2eRrIqZkv3b64QM\/8omCuxlfDunptmJpu8SQOt9WOMgEA+qWDzyHxSy+puZWWig1f8scTSlIzqjJaMU6XnNyfyy\/q4Lz7zj2H\/KmR6kxD9Ldp042qpCTbbZ0SDNIAA6mJKnc6HgUIIQOqqSXHuT7XwWNWrjh5TC3qMuW4i5p57Q91M4it+aVMAUZ0pTTzHJ7xthPI58COTn\/TDYeXGJ1W2jgc+qcBtQZUOYdB3Akyh78m8H7KgZ6poXbH2DgTWl0ga7dEdn+iEyiod8HY2+YCW1KTiLW+F2rxp32jmny57IDQd+GZqjiCgiym+tqzhyQlnVPYczDNKpNXGIWmgpqyZqDSdqYRF5+LGYnpyMav7bRPmgoUtWEzMbOuzlJWWCWOkGR6OZy8d1bzyXdRitZN0V0u2eP75lNXMJcdF8tKmGD2Z4OV3u77GIy8yi4e3YkKxhpYaickWC27yS7Vssif0ZsStnNvo\/BaK4++gI3sLkEqVRSP1C4qyS\/8IDzqye8R9AyEKdgk4Nc4i3pDii7i1NENf93mdBvjWxkNWCJPGX\/OODt0oxjCcjSTwjM8E1iXBj+2f\/\/WyFA8D5Q5oxnjFIzb\/al2ocdEgixAnLcXf8CbUI1F4M7ruZxF5lR33ZcwFrRRzOZ6MrQzkpWPUll25sYatg9giudJkmUU4xZ\/5dtWhTAbBvGWXEphvXLbM2z2x5pFa31VG8nlAvCt6RNBPCssf88bDCP1SOV5LlF6tYoqT7Hdqm3A+bC6w4NiqMw6fg5CLHknf4rZm56EbI9z\/fUBaxQrWPgiBW8uw1p6Nblg20QfE6gJ4u01sG32E\/L9MssFVd\/4vTZfwLJGqsrMVTXqMR8QagdyTBhZsbhRg+eVPChMF9GpHgSuIgd2nZQiRtzKW3X6cablG\/wNiDf5UEveRioxGWbYgyAODFD3ts9GMLtfK7mHr6bWAhnvCoIie4OQJRFFk8njFmP5qqCHWiAnKV4y+7HpBPkWyhjCDhlrBrsHn6JacFei4D\/WMRk2S0FgP\/8gs5fQzkCBk7XskX1a3JBKEF3jYTGB1iVXsyZiUh9tXGT3xia1kOb5j2Sx1qXbcCVX6V+3Q7l7cAG9f2BOyFbiq2lTykiWepuQ\/qCpuvHLCDhUMhvVIdUm0vnz8QMJDlpUt2ZW664FaVEtaxAc4SUNklcvl4aaIwGFTZDwGaNIkP4Mth4gVIBsgF1ExrLlScb95UOW6sA19UtKElKYR3ZpG5\/Bx+ofd4FRUZr\/\/pz6kZWqXga+kklqC4cMx3i5eEZHcnO34EQcEWLZW+2akEHiAOuiUUzTMZhiJ+HjLp4TjBPSkoIOdDCSzoIWbGeVs95A8MuzMeb55Azgs5BiYr4NVLYAO5orDcqbtYw8w\/fCrn1Gu0eSs4m3NMKpainVKQvHm+KJnyGoEa6gFOSvX3jZ2VbEexSAzN9vUc0kFph9Lfpi7DVsdfJ3PPMzsRLStLLjnf1ornzZ+i59j7EIf3rzVGup3badvJ9VEasRWlq2Z6D46pL1yTJ+bvrNQaLmMne1sdaxP6cYQghRkTzNdxDxFTvET0fEqUdCPA7c+CXy+osjWQQ2DKx8rzHr4sbRMGbMA2wBZyHC4o2iWq+YOs28d7p2o0QyVUrQ97kkRJEhUQOnHbBGXQCcp5pmnMOmSgSEDD5AoQSr2lUJ158a1JyW+wUBJyuiGHX4xlUWEzdGM\/TN+qFoagdEsX\/OmXoJOM9gahukL3zmivgiVlHCqkDGenURNx3Ynp9HdBoL8rObOIZf7XRVgxyerZmwRl2sbhDNP+p\/2X8jdWxBu9wa5kpVEckCNKVUv9gMT40kg6lR97RcuVsNNyzhOslAyJr4mv3aZFFbP3nzbCGc9q5RG2xk2C\/v6jvLPcK+gAqHHmNtNEO62Zxc4gsj8b7hFQ7LkLhfHIzjKIiiXDlWrh9HKGys9ZDYdiCzyJ2ijjbsfJJ7fLbD3GXp\/lKYiJqmytfoAnxC\/xfKJU0pA03ddyGL\/Fry0V35DyVRmGhEQ4N93pZggxPrse\/g80WCCRTWI3QuSeQGj4VqAojW1mShcr7LTxCFTtm6Y1vG6UCycdJoKbtJASyJU3gNVRNIPECTZc1zIqGTipFGLCdLFk08HNE8RJ6iaLkkzUsk8jt5Fzyou1t\/wdE6qSb0ebwq5x2WJHWNpxnkCvix1mC1M2y00bcT130Qf3tIZzi9zau3UAd0usEtspvf3H0ugEJNN4vemTsnEwg4s0Rj6QJgSmw9tAjAJtVA7qlp1jD1zUhPPK35dD8ITrapmtHjFkx1YA+f2C2R7nINqlje4SKtpZROO25xbbToargXYYsgalP51F0BRW0Co9qlw0TUrhYa26zIhFjF9msuA0StOHQ85qvbteCTYd7M81FjYHwGNVyh8aSKO2fYF+iYL9su8ws8AUkWWLbZgNUCObHCMQcl+4VjQWcDJF3PNa2cZ1AuTxK19XJml0fdYW3K8Kbmb2DGag2\/ktZ2KXTDktfhjNXreN4rfVz7RMwKutMg66PEfKNiR1DR\/awdtA6T4utXCY3QiUxquz\/qLBKDacFwLwGZ\/Jt6h7W7XI10puUlHPjdBXegLuLNg49aXQZljtENYP4lw0ev8mPYLY\/hrTBgjCFbpD8nNrqdie0AUllZp6Y4YzJelBC+6TFzmmfcK3XYqzvqZGbb37ieNJ4Vkso18b+Rp3XG2idAMIrtqDenF0iJLjApRB\/91a8VdJOrC54qQOq8xAGkWHRo0JETDa0dIivN5xnCkf08SokrtYtZ7q6+CHfGr2RVW\/Kx47+zgWj4L\/EPhfAgtoFEcV7eiO8YdTqOHnQ82Y4t3PU69OpzqB4jvnpPy6AOX4oZD5scpLwZawEZq1MlwMiwj89JXf9Ls\/\/xWV6wW7K9BL2RTj8vDLUBwtgMW\/HP6XTDjuxIP5pML6N4rfA46K7FElyvCKC8jjHShLiSOCxUEMxSOSU\/+YphE2cOsNDHiw6LWqcAu\/U5DzQwCVUXumoMcICEvSysymqbb3JtFxm\/GQ6ST7fbLyeF6fTz+hpcz5xU+hGLlFdIJVE63drgzp1oP3CAWAfIfQkbK+4Y2fwfGZqunVcginbzEoQ\/2QClQrIoZVOWEAf\/J9UDhcxJIw2hKlKvESltGeA\/DcABZE9nK6aPaDpJcofYZXzsNPNivs2hSwthomRtmh2WiwYijVL41XXdAzzdx4bswxGa54uySD9RUUwVFDNISCw+cwPzoiIHVEh9yPg1Qi3RjujHppfRidcGcbbwXal4YqfEMOXLl\/FNv\/81RvfUNQ5jqJQcX7zjoGiGOy+w1NriDnW\/fknXJstBe4RQq2gZY\/oMvl2kcXNe0J3F152XtGGHAFfdwMEuc0MrDICunBVgJYaAUA5411ybkv8dnSOxr7IYzYU5d0FRgoEpu3gPvxCT4IdDQWVdqJLSZOsQxhVvfPPirGKXrY+FET7RffgtzhIEIuWDmI\/0VySXPk1JOSk42LCKRs0Mk4jQtGFgaYs8IW7Qf6GhrugK7QU2C7V8t1jq6gPg3h8elFFmepk\/fhfA9dwhIVe4tLk3nt0I92s6TdqnyMDLhjHqvHlKjkdVT5hIVOYYBB2zB5YdsHFVDEmLmre3xyFUSGpjhbkBsyq6rU8oPdwchRr\/5tGwGX+8O6nVAt2YSCDPsMuLbzyuxgvZ4cLMA\/WCZmUh+c7a61PugdHB7fOfk1VKl\/7SM4XpNLa4aD0yZTpZ00Q7HRlLeCH9x9Q5bWXOE32QCVKKFPMA8C9B9Ljh4eO2+aOUzswSU6Eaf4NSOHGaw9qGp7yTw4tRI+8uzJRGb6PriP1TwqMLoH556XUJM2k69bgtAkUfWY37HyBDhEjxTduA630pHuOPMRn\/gNclK13GhCxucgXJkkpJHSgQGeOEYPylfRrJ5m1Sc8njyeQJ94VytiiEDugC3tkmauGGPUNh62JIJIcci3op0hv0SMj+qfcRoMNcBoHgCbAYHdKstkAnqKh\/ZpY5H8P3+Li8MDRbtdThhmRT7NsOpijk2Bavw8zRMvlvB0qmfWcc2uN8YQtoHqFRhCaoVSUHghMvRm4TVixMz4JjfjrNC9TUIUW13NR6M6b7vtVIMMz8pEs7a6Ga8JbMIkGrEZHjZu\/qtaT+vrenwcMrVT1iJ7sMife0iJO6+lwNG36+ad35p+nLookYIyeCHwfs\/bSwgr8wJFP8AgP2xT+cTEOGswHxOBO1bH7GzeXbNzLpG25gxDYxUHXvXw3JauW0aIzW8GsrKa+nxYPk0ckoYfCbAGgFqhda9stfcXUX0v8VYZxt2hsI0rPvSThu6dm9RO\/NWkaS7Kr4w6UQRxlvUp22t9rnQ4T9AIw7lhf5gEnDg2YlilbPQwaLXKUsO203lzSUPxIYd2dPRvvKi44OgvpP9SdtoR9yeFCD4V9YQF6r3L6hc8rtr5p6CuUiYr1cDZ5ENeTDkOVWf05waCN8vvLr1jFNXHg0vnInIdaw81Kd8H1T8b5U\/6AO8+a\/WZzTeZLUkecstleDJWcqIRDO9WxO2lMQ82PMvzn5A1QiiVe8knz2EmsJcfFk2WxCDn\/bBEhrgeTNneaL4s5F6uVqXwCRbeNR1CUrl8huqEO3KnuuitZMCyk7DSW+9AIta6glCiu\/5cJxtqFwuFWf4a9Lh8EP797utXAtphpjEQfQJCbVnlDP36EtDWL\/jdjgFN39a4Lzc4EG1UvK0UeckHNfY7dzx8bZt8jcWbHaER0b\/S08yZ+EGnXSvzYTzIiMrEvMQMtiaAt4wqy3WIQwUwMYIpN\/aGx4nkGQ7V7S0OSdmXXCazg4zfwCuhGSEB2Qx\/xit5rb\/vabexXPi31J8JHoRWlt+VDISUl8FBFickVk1\/rM1OgSXhor5FqaKXQ6m7uOInvXBPz024R+wP+xDoRLCx7FNECmupuMbORl2gf4qNmkv0OnOezSAdJDcxjE8dxl\/W2rJKDQT1pnwrEEm5dtzMbw8RdM+2FMn7Q+CKcgH376s2lCJSVJyl\/zKGjABUSxplzHG6QSmmhH49KcTUHONSc+1\/PK83X0MxpckqA8OjWpaq7wzGDdEt7msK2sPFZ1XJ6m08H5kaT+nvQmXdje\/1ukKtCnMLxtjRDSvG8c\/+8BPaaBZ2TAJXm8UjSMeF\/+VlMdJ4Ki5Qd5LhhVh86+E7diJjZwO8ZG1sy+rVFugts8wI9HrVZjNohjCD5bGDeR9OlXxdr16pivrywFg9ivGi48xEDwaLiNc39jdviCInhqA9WVRNpsUdXV0gcSWdud2tI0sZUiql1+FcG6r9mfzkcQi6WD7aZLm\/Ddz6AUhvCT5coZXLAaKE+BPHw9baijD37ssgbynEVKnz+6\/7l3rMEtYwFkK16OnnKSosdQ+n1O0O5xpI\/50Ab0EbwEbydLpw75XeukHb\/Pt1otq2TbSHnpgC0uIltE6V+zwgbTYx3RlsjNruf0REZdao7c3Mx1wdbTW3wss+McCK6T19FFwWcMms7hO2DbqrTJXxsd1ZZ4K\/\/zoD7BNZwMhTYWqoym3KHXMjg8pEE8coUjq\/ML3BULxIayfio0sG04MyxBGLrpBjB\/7Fo5aHPugmqfe31Pj7Y9gI1jhEfp2ZAGrc6EtYKjYiqjc8NmIF5Vd4ci97GVnscYzFdgsAVmPgSGKFo1r4MjQ1hf2BlJs6HCwxkGvlxQkbR2lZPoiOpH+JvMEJJ5Vey\/DRMEuxXpytarNCAvHdArQGKIr0inyThk+qVZ9sszYYdxiXas\/o9SYixvZfEKszUUqys06pYAWZ1+e+RhH8aGOTZCB9kbqEd7dy8XqhygoyEpygi\/EADRJsvAhNSBNtAxdfMOCA5KUDZ1HUmtIKGess2hW1TySCYnNMQuwBggcg0N\/J\/QO96+xNEKEmdYxGF40FRHZSSbXA+YaQG25WT2jbBgFRNoJnF3xhIRlvGHzN+H+XFaULMlHQfUsmPZ7F8xXehwndcqFkWpm9o+mpI100Vt9yTkox4Nj\/bfWX8LzsApp3oXQC\/NCqyPFtNnSOS4mcwO16XzL1QdRQ1kJmch8f7Uguw5O2qeeztE2wqFX1eKLv3HnbCfllJUqubqiHpy13bqnEdg3VOmw19BNfrS0NoKJRFaDcKWpY8H6ow\/+KFL3IDZspxynkcZE4sei2sV9dAPp1G2uvX7n6Xn+Qr2yJZOTfeh+lbVvixEdXDOzZVewnWyoFPeGRsZqVsZouWPbpU6hUmCIpSeY7Vzf3UbHR0SeokxeShRNp7gl5h3ktbeF19aX+eD1hwGVDVms1t07dU2Pu3tQayhRAIMKmaUnMeEJAqzfvzL+Cr12tB3GvZolv3\/sXT0V6JQ77ShsIXACOLBY+oPk32zGQSL3WHppzI31L0MLKFx94yi2S899oBJrOdq7McZv4XnqASD68PSl7lFCtdTwbcnfKJw2RJsxUm+7fBxwdMcWHofH6vZrEjaRdAWceAX1bFSWjJwJvxnmR2YLthmRxZA5abQ5BT+fDzwGAzJ9bD3M\/wvmX9tiaiDCr12Xvb+Z+GsRWPH779k7kQJKwuQ53in0j0UZBZAYZZJXRLrFsmopcebPUe24yhGFbeurhtvhiDgyX0v6UIACasjwYVk+hLQXm7wdrD6\/EbyoMaKOefw+9CKAgOJRFQUDPYTRTvW5uwHfxXH+lpPTdk3HuuabbaVObs6aXPu4XmHk4PGxwzVXIyvSOoInfZPvdNeRhTLC7qudx3+siXuitR8+maS7VUDl1evsaek9oYILah4KE3OthjT4O\/vrmkI+xeLYMhap+FtJS1TX0XcgR6o4dLn54uPMohXIs6EfGrjRKJbgKztpMLsWvtxd2sUZg+LvC9yxDUXjeio83vm4S++YAXlaru+NK90CEO4PqgCZPTm\/KwrTAp7hLd2po\/UxNi+GsxPZ2TF\/D7wQ9hp5fkBKetm7+gmzhoK3iWpkHiji3webFoi+VyXpeiGnp+LgMUZsW6mi41s2nlN7qFknH1z+7a7UzWRnaKqVo5UHIB39MU+QmUd82DS14DvoJzpOK6m6uBCK7\/gaQ3t70oB\/XErklt4EatHKNdrL9TsiQAMldKDW8f3eVmRuk680nn16rQV7nO3vr5weuXq+kENqHywUlfSo1M9jiyIUkoSLB9s2VmQ+mNWVzYGvwR3bU9eooFGck3YRb8wCfpsfaJ1AcHJPnGwTwkBkAbOZnxnOsLE\/0kUeiR50gYS\/u8Zt8RRqCOxp4lAFJgVrvcj9WIPfNrziKDlhQIt1ZdhlCDavGzIPkOUrUAW2rtODoZd\/McrFok9wW+k39U1CYjohOc2qGmNzOR3nD3FCHZtzr2KnpXndqTJycU9YEidgfBGVP8IzNoKGC5K9++Rg\/AFKtRlN\/FsJQh\/F7urz7zE9nCG+U0C2fJu9WYy4g4MjtWSc5RzZ\/P5u999\/XKl7hYxPdeoHkq8eTGmgUtgiSuw\/WOUqSdSZ+5Ti2oRW2ibki2EChs2Agi\/XVFulOpLPVXOFnVtKo2BjHwHc43MRnQuGo5IZVMxJRQ47lnQaHTNMXTyTtDJsmJ7jKBBxKR1Gxv5UfwMiRDN3kaZfBw+2+Vdsvfxiq0V8V+mrenv\/i\/PhxdY2Eftz9acVMuEa0JwVyrMrLEvIROgLCeCmdtgC1IPz4wk96iUdXFD3aio7QzrWfuz7blPYd\/SN9i1Y4U09Q103IKFqs0tdkqyI50uJs+MHlb\/gGyO\/aAhV03Pg+gPIYlDPT4VTSp3Y\/aOdHs\/Duwts\/4YzV6lvIeqAruw1nCswS6E7qKI4LICRf0yCAXzNV47Citr6ge6TX5Ydr2gk4NEqT5oMaIK8YQaSZyNjwf45TBqVK5WlkGSUnDpp529JyeW5Wa4Kp\/ZEcuY9CJtPskF1M8D2ihHZdBMOcA6uY6WLPeWuWsw9MwMPs17VzG0pgEdibe8i2K4lYZo2kB\/hM3hm1MbCq6uZe\/G0ODBITq0bYL3l9kaUHogdwENqCgq5LrwhuPbTbHDFsRHn5Xe\/QTsww8LG0YysSHRHin9zvz3Zr6AqZg6GbSvAlJldRambDZrO0J8MGM8MNxfDo\/lZNk2Mjn+DPQepxLXSt0rDu1iJMCK+47R15DF8x70ZBE9orKyuttXi8I1NK8teaEe+RDFpzBde4S1lHMItDuKPAiYlfEvcRvSsYB79vjwehRaFj\/\/66dDSEiHzvSZ24qEElQUihqAgioc+e1UobFVygDfDQ8GKIzckugDTWD7JG6GmuOgyG0ZYL1k4IUGp9dPskBQsbbGTmMpjYMMi3G8teHTpxik2G8j8Mo36ZEPsAXdUKNcxyuVTMOSss4BYjFRoyGUXhuvd1M4dEt7XlFGs8+fIWoCKjp2NDQaF6vqWROp+iuZF+tVialxnVCs\/7SVqd4vIW2ZWKVYEIlnuqGbiIhOPQLO+6EVQEs6UNls9UV8d7Cmz03uvhYbt2SnEvZ4\/ClB9xdLeZvLOAQkY9FSGSP3rVr7psaYA7KucnUVkLfbXo0j3tegCMvUB2JKzbPL+CfquX7P1jxLRkJMQuyrwcexm1Vhry6xk+T7SCIx1pP43EXQJOZIQtWqZB4kbtS\/dX\/j5d32g4t1epxUX\/4Jw3Ck9yN0RLSV5kY9FTR8LdfFEpyDw\/O9DdarugRC9orhmk2QfZiHwL9e5BKz+0YDbeLhUGDhNwcxXKxS6dL\/oOu\/SVWtUpQSf4dMSSFjz7\/NPk5QXebdGM68YKXyrUxN77wsR6QIqttkg+q1sQ4ONdm53ENRZZrWYxKLs+41nKWf3h7iyel0Nlxver5eiD4sYa0P1AEeq\/Pzy2kFLPFIk0w7lAcOwniepQKPUcolVT+8+4ip\/FcyTYXKgtsF1oknM1GuQxGmt3n77xg\/QXV2B4H7ZiBQVEsgd38elww4O0wbPOQTe7kZ3MMFkK\/vJgViCedtlwsJjUbGOaye2alB+PJaCc4oreqJr3Ajen6PwZTawTupYSJC1JpfcqBRrIWZDnoxhMwtSOOGO+p5PklC9ZuP1lL514DgbcFqFz9KWwJCgwxv46Ys10Ux+SPYvvtlA82HGAKN+LwliFT5K4yCffSZ5MsiSzfCV8YArxFFxLDNiMiKhbSVBZO7T0YRs\/+NaOMxQQcU1OBlkPFGQrONafBOxLxEITnbHavP+DA1GWyaOw6MZdKxt6MKGgrUUf\/AcWG7U9T74U22qAeq+c+NbS+XFZnTB\/u9wwkhCqlXTjvvDtlN0UkgsC4luHknE3h9IpDm67hQu0RUnHoSUr2Iig5QUimAn1Ozo\/BD7Vuh+H0ocH4cAo5Rg4WogTQ05Sltnt9ic8i1fjg6mGg8ovZ4GBvTJf6Wf4K0RRKNPjzsUqFudegRu\/tcmiwAtjQUfTGCEUWnTOiwB\/AZ\/DCP2PHj7q11N+4rP8h2UsPvEql+xUBe2om2AeMkSciyzKUixDuMqFj3gj9tf8LL1qkeC3Yo3KhmXZ3xVaE239uNjKRUbqjOJLn5ACKKDLl++Ukatn2Ldtr26hIZo34kTG5OHWoPkuQGT1\/fdrOwJnLnm3CH7\/NKrjmh7mUSWeNO21SQluWsEn0jSAwEQiSqKwVBGHrcjuUI7fHpWpF1jjQQ30bQ0OOAqEO8MlK7o9cmO3DVFDMWDDmH+imIUjKA2bwT8zlKlj2NT3GUAttgF7TTCos+pdRTd99Yc52Ebbpw4DZle5TuV\/fN60baJka0OE89imB+TpMvEBQWiwDYF8Zp35Zk7giFTzkDe61upSTHdNJ6UhaO2Ux8AQBxG2M2mp3XssWISy+w61yCGDlg34RhbRIoVBeG+9WdGFlysDwmB1l6GIl0JgwVuEmUcZv2QeKXa6W3cMUkg2\/whMGRC+ADMqdTEdalypy\/KhLkFbsF6vIPM1Y7woaJT9G+HacAkCBlmEVLxoPnJhu2ovjqYq65vbO3UfiIx\/lhgja3cQKUK3OWosRtUdQHCN5PRWVj9x37EoWaXk9F\/k04ZNa5Y11xN41NkYMW6zP64IDc02y2MeYK+OcaDZlDOGcw0aMnRZnsUXCnzjrkpQvo5kCdbyDj1A0h9lUZXGSHQCzPnqFT1yxk6AenxNgHkh8ntIo2HL5LogapGkK5W9cXE3t7jVo81gzMmUM5e+6L+dKVuh6JGlh8HrIFvJfw1YQ750RdiS7WoJnSJfuqxY6ai5hU+eMGhqrpydg8mFSEPs2b95ZUr0WQ\/F\/eN6em37efLB86xzeI0OKMBnh3X0MOyS+cAYW2c0WACvgtL4P5\/ZpY03YO0Mg1uNPX+NEGgXmgGeS2DILSH55lwNfjEyPWE+6LV2Qacuv7GxTcM23VfoRwUP52FnzSq1J2DTQmD\/RuHjiwMiS6hKfbjGAmKBPJ6pdtISjUN4mrMJMVtDycWLmaJ+LpdIzkFUXtVI\/P+wQlA\/zDWNEPS26im7tFT1Gqjf1FYx07QBWi8uEiIrh+yFFgVb666wAdhQhVp6nMknzm4CclHBlg\/4pgJan9\/9Y+59JN\/mj5przNyymlfPd6K5Q0d2Q\/NLcBtHgyp34IyP5vCFpYFD1BGTaS79WzKN6wyBWWjXXUvSj6FB4wV3syNzfIo0fAdC3H1Ic2nObaG7JUcGwQFJaN0ZCEZe0dDqXtPHf2l3+m8GTU6qZI2ZUmxty9H5MejjSaeN6lcQ3G9WVaasLrOuk3TSaJMcnYRDiznV5UFqyf9HIDYk1fusW9nHugNakCKrCZq5u+61juJF\/+aGtBPvhVfLMcEnoNi3g\/2\/A5vliXgmFpZhh1kGorF+mwV80adrIeD86KQNcvw9cSaI0RrMWDzZbgIwZZcdWDdfRrAMGEyDkyTsaQQ4pSdHpCSY58TqxNNm+9UG9csUtlDnRq9l0JKeFxISb4FM80CZoq12kxTiuvYC\/T4fHkzmI6VbCwEuyKOSgT3+mrdcIZol3i2P5\/kTevCBVzrEZWBJheStkNLn19tsxgjJee4D0s3LYcib+h07rDVbykMhAWduDDcTdxTNNoa98awsn0H3Bwi7JNlOoGs8EngxSTAbtlgzx2E3+Lu4YZ8L85ucCehjXL0oWGpVAAsFe\/QxwqngOcurtDyaNN85dZ\/O+LQHc5\/5P7FrabYDP7Ujtcz+U18nnGQia7OSXaFy8vtYoJyEXuLQ7c1ZUKiVudr8Ig2Dp0QWF1IPs5wRwEmgT8BWba2dgwo91acDs9OJekUQ0cxGTDnkt+BaUsQ\/m6G+SNl2dBNovQg\/pRPigZD6MEoqmgLpgnd9MehzsvKTsSsR5Owqhz6JTaTWC7WdupOfkl4OD7YsAfiTGhAR792CHM5dkJw0R1C\/FB75u\/B6hVtICBPuT0zvn8HEgcywIoh6Oj0frkTb4JJMf88q2q0ypsKx5uVCoDIGQqRb3cuPRFehBABJthV2x9JG6ldef\/hi1z05JiYkWDgGWoGmIikP1bXauwG7sWQUbi2l2PZWMbaos3rDek3+m0CKtch6x8Loly+h6yu22epOL3cAqYCGfxtqUNnJuPZJ3NIhkzHLsxXkB0IeHPYVSj9r+doVBRJnSmIMBvcb9gsI9Wket53JDvTBWmFluysGOpoZx3XV3kYKvarE5+JBh1zSFXQgpCJW4u2rbYdys9LYEYVTCCibEFLhQqOgKKw090EufTfhASk1\/Fior9zVhBzgUfi8R7dK0ICLT6ysmSNj3HG3arbFj2YDADDyxyDkCn5oW89hqvMUSF1UuQbJbGD1\/hFXVUvWlti1kXUw8klipvSe94dbYaYqQjG1LGlwUaMwSlt7dHaq\/mTtq9EAR0B6skaT5+QILmm6bnqbhAVaBY6SvWRwrFSP2ewWJWehMeicPhMLdtmiR3DarrujG3G7uSyG+bV43pQW3NoTZagy4FNa0AlwCijAsdtgsq9RKFTn\/oWQ5AD6a393lwPRF1Eonjk6hdM3mw1yfA7fd7ARDdx4\/u2XRpvRaxbHrCNzSS60gREX\/ShaG+mp8+aLuk3T4ARyKwca15cnzJPe32WxdQTBuiWXRkLuUCSbT4F+2Pc3usdSWmk7HFZc\/W9Zyf4yTdUv5+QB6fuY2bpfMkiSZmEhTlLL9WRuUuwpIUEeiv5WEWiGXKAqxIqvZed9A1XpTCy74zDCyop9l9LSV2e3HIyHibZvGAjYt3B2FhQWMKN\/bDK8O6\/o5fXAu\/nNlcRfS+XCs7K3QKUFJt8OjA0Ou6ytsymMe3wCexNsNRQQmU80pYf0jmWLM5Dwszo5zzgIUD1\/DHgFY1Vq3YTIzfLCplXqUDXmo9Y1siUVSSY2qvFMWMvcvYaelSSEzcjNwctZYsxhYX0zdoE8XoKatB9YjDAcZ5os8AE1iS6KtpMn7fkvZ\/NemFKg8C7zJO\/Y+NAk8XND0vjEtkLKQ66O3iO1tXVY62JvLSW9WFpih\/x0OiYBJWHexx0CIjrXq8945JH7m84XKHXlMqf7+T3NXKH0A3hBxB8Ku1RqhG7aZTFD+jnTSQuXLaBXWgCnx9f7aYZcnH9YK2ijyCDuIj8gx\/u73mPDAAolLoEGbAXgvfzgjJiJZQwexMB+tUyu9AEp6NLmS7BkiEZR8xFmIEvzI9T+0IlcPDsXOrVJQYRzdHWPoBDXTvUrw\/iroDO02DVKTNiysnL8EgRlgz8Tbv4BmsJzS5P2CvlI4\/D9Vi4hyvWsKiVnzpuGDweW\/MfYpgpcRNggk7LVuQ3vnXGGm5xhIu5n7iVQD8mzvZA\/MkDfWz+RVpeuWxdG88u+y\/oC25mYT13i656PuLRUGyKazv7Lxe9\/vA+SyrNd4yI1cuENOlBb9aOCR+P5tia30uuUcVdtL\/V8xec0KKM0fObOpJP\/VarSQ3B6wOi3CdUjhj6kf2NQrjU9jhPWS1ziAqwaHQtQP+6HomvnpP4RTGnUDP+WEJAFE\/906csrwR\/J1GJ3rL2Kp6fFsvFrOuOGRe7+U95Y7SoJlSf7LSky2QiLTLX82PLE6dLkFQ97OzxeIt99fjnlVGCtT2alzql3WSDfjW8I+WxVxkjzbA+Qj2jaLES5B1wCwtACkBtiZFIln1mJi+kmTJkaXpVqHX09G33gYDehXM4o2XsL3w388k60csuKPDVlpfNa6\/Q8\/5cxRs4UQwBulMaOTJtUfjiDWi6s5nmz66K4W4V0C5gHUFxb4VqS0+4v\/vub5pQrvTIRFL0VfdfRq4mgJEUnjwZq1EOvVPIHaAK+7i41W2W1m5TWVcPj+0CsNyWSiM7NlD7K81GfDp9iKAOA6bFZ7y1OU35x9aVGzPMFPXpttB2KNrgmAF69y3WZI899G9jXm1vJl1oklBvWTmlFyv+h+El0CHoxSSiRplYXck5FCrW8epAoy+DU6lZBun536dZUi5d6Ien2UkUecdKW+haUQ+g1MMKTKwRIkHFZV+ROR2xh92+1qyhyyTSXxlxSjR06Unn8uBV2IxEEZN9I2y4qnw4Bjel83tchbISoX+ByuIQUgwsWCa3O2szcVpVvmC2ubnfPbJ2RlRj2oQhYfZvZu32nZe6t3QCGM0a+spmb723RG\/+kMemv4lP2TH0zcguP+QhiyuEeLU\/P40GyJi5ce\/qgAPOoPaSNsQa5mS8dI1xSJO7PbGrFRalXab3khCnZ5Vf0irhdSvmtIVXzcVAx06QFlleNWY4YlI3ldxTMDOFZtK7oaBXq5PWLfBdYLpW6wEWIhd\/LfW0rDUAg\/ZCepFtjQmTyMQ3gEGnhW4NyApuVuSMaVGL5k56fhfX6byUvL7KMcpgqP8CXU98fcQShDwG2YDz\/WzvMI3rZ5e7NCm1NLec3Os\/UmYz00q3LLDhQ9zINaFH8u2I2yTgmcmmLojf8iTIB0gcJeWferAXjNvOpelZGgebKwd9RBAMFAqPBuMaNzpY5+p9WKn9OzfaBRtlmV6Zhm5e1xewBSRphCKMp9VJur6TDU56f0stCz5X5Iz8IRmjQgLP0WRY1VE0HhQxDokoP3UPo44Nm26lcn3LZB0Am0xkKVUysMXG\/i0hmqSRhXY7EFomgiXFLO6DkUVrtK\/f1Sqy7Nq5bvZxezmwf7Pgfk6bXGWG9LPnqpitBMgVIcxoamy6dBKQXubvFAzt9Pnkr7ebKfQt7vNMyhNVZ2vpj120WpVzxXUAYc\/T\/rEkf\/PixhPn0lRcyljio1Bwtt9PS9UWI+1V3j6mHi\/rfy0SnmZkRrqjFZ4thWwdjIkVyuA02VGeJrNzD5AQynbkMQ7NysPuwGJ6dYPNHvhKxYUyFRFvfNmkc3DjWrZiyq64oBwXghngensozCIjqJGRVaKh54Fklj2\/2pr9KOYZOF6e0G7H\/WCU8PpI047IAdFog46farYYJZWbUtTcYvczNRNS7e+WGDu5STbtRapVEwP08RfNPgffnhqCKQHwg\/hdUp+nIICc97Y9I9ZmUJs8Eib0ke9662BciHxzxQPN9P21ger1et5hr7Bt92fo52A6scYItYUYmytc4g0qpRDKTjR+0TrP0oSOeRyXGdI01qAd8xImNpcOAgmPdQXPYXHYR6XamojBxcXkNRkv94SqAohYPaHq24momhq98Ks6udM1\/yoahnQ1Ohu3+HiYK4uxHV3qnWdiIGg7tYdP28+xuk+xQAk\/668kiL6YreHw7Se9krHa4ATFPHnfYXr3MSOltLesulm\/5duRip4qetKGQAlcJbNAuGv\/atfnOjBj2C\/rAsnQUOCOb22UNPECT4Ih1ZusVPrL4EPndwULAexMMaBsWX0Fu6oN5GzHH0nlVF3vnOni9+QqI2csTWLmjIdh6FXy8+pG5w8XqrSyK45wFP20zEkIzs2MTlNcXpEqLYJAjPSnMQ6etJB+xsoQ6M0+8DK2bvvacaaMHHhlf7n84pPXWTmzufGdKsWVVtC3em36qs4NZSQAwlqsgHDkQHUxniXUj5YkXeTnIwmsrSm5mCGkMCXnxJI+96TznYn9xfY31ffXuLOnSY7w5bd+ZZdokAYa6iIBYji0XXWoZicY4LcVHe9ct3PiVIsyRtH3+Ys\/iDBga0MXi1uruDckYlgq4ikNX7kztLNi0OPqGzXjiiZwkDxwr9SLoiiEK6pgEpt161b5hvnkxSvek20YYRTRetSELLi5vqxnPzgIIxJSUYz2a4nOyh9FpobWtMYANfHaWlDaO2c1DUlAx8ru8WAJ7KOn9nvGMuQy4CBvvT4a7\/7632bFs+uTZH2\/X28NGj5dr5pUfdGgqC3PkGnqMLNNV4mN1VfDwB8h42NJaPEe9ZTIJBtF\/YLrsC\/4c5XnGFWUAsjn94XP5gYx+SMb3dxQQ99iFgZkMNhV2SaGVDHBzG7eFkPBhIVZlSwgh5CmznG+hGZvooUzEt\/JrDUQvDalpkb13Y01ki3sJF7lIxvlTbLiTzFefXzIpldaesvXtzOGbupjHrJF\/7ml7BENYgvfZ3GQvFn3rS0qfFAy4iuHB3ms9vk1Ybf2K02sAbCX4FSK5lf9Tb+hh15sqtMsTNltVQGe7b9OnAUrJOtfMNXczkTkYHNQDbgwTzo2o6SscFSFMd4Pzo6j19F65qvGujmcGk1FaKWXTLf+2JmOVene7FNMpOT6FsOGLfqPvlAFN+rFOnBUP+91vCPrP9sPY58Mrqv+nkBqVERFrycIuEA5nvI3Ywzk06BtD\/OGIqTdOUCn7rnFrI0rKIZGD6vqGKWcq52o\/mupzQzrP8HtpXVkbWrQICHg5vOmtTxzgCcOu4iclPMcoXseY8PsDXfgvxIwaHJJMI2wNUCZGpBwfyqSx8bZ10yJWiqMrWgddS3asDS2NmDwRekQTLwO0M+YxIM3exHyRzMZczj9+18zrJHa96FHc0w6FljrU9L60itMCP\/YLZbOoqP2H16bwmwosTi9kJvi9Ej0+Hj51Hej63yDeWHkvr7mRyKqS5SLhdVjFpFI90fTWMBQHN0VNTms031qvbznthuHFw2mNwjxe3\/RloBmt3zexDeamFKojA2JoayyMpoP\/90GZK\/nD11ToyKpPAiapRuwGhZoQe\/pw1+SF9tdwmaC6GEb5l01FaYFFx9AeBdcqLQ4frJwDfq9dZYleErZmlSiTE793WnLJVhN2QpLhcMLD+rmzMcCfIMTI7XEucn2R8SyfS07+XLVJ3BYvyb9gXIJICSzD2XRioZO4nGbAictyitBJwFpt10kX2IGEw2aybJ5syFrFnGzMVOVv5YlOYEcyJaiXkcDUZwxNj3d9KKQOBIiAv2J5Kfu1hVe\/rsoPKAH73XgpX7\/BfAyNEMgqLxArtwe2sTuEnN+pnzz9Nd\/TyELdZXxrPA0xfC3VIhehU9Exl5ojszOEnWJ8qkqQl03Nk+QG0PAjaXtv8Do6ZWjLLZxQMZXx93yjJSJQ+myZF3RAqsd1IkrkQhH\/wLPwyxXqSYu7avd6IUSjYo0QeKNv3Ilks45E70elus19vXfq31lgdNixiwF0jVirBZ7HcomrD9tFjG5T+9UMVehmMNJC0mzuKxZSzK4Q5uKEJ8mU\/qw65VW9y2J7qzFBSIO+lqwjIxVWFM0qVawwDDv++uxjtyr7qeD43W5BP0efhdttM7NLswp\/gh6xyTI2gjfYklkM2I1YKZ8BcPN3cOWTKADXwMu7Aig20AKHUthQZTjUBoD8j1RoXMyU9cEhnN+n1DCq0ET8sjtUHOou1nrb6IIv0TJGCg1hSxFv3Qna4YErM1Bg4hM5NGinZUt8XEhUgkyuAVpYLe\/MbBeXYqKMv2I8vwAoJ6s6JEX8H+pI+hQ42yMPK2MfntyudCMYIKOur93Hl8jfcMOcxNaIEkno\/hKBaPrjV7Y1voMCCC0\/dfJ+Rp1wgKCKXo29frf0ema3504sg254G01CmgDis9dXIy+s3Fdx7AQNEUA1hDk9\/iys5QsLu7ZIb4YmwpKzC5nP0VqkC9vsR8o8uIFEq2cLzEfntYi3WZkzsL6fSW9oWsB37wMbihaVdPLdFWRV3kZcxiI2XeiJtTkEr8uhZw+\/WfY8QInQ1\/Id8VabcTP2DP+4aMCVoLKsHq2es4Mc44E558fINcNqdWi6ZgunwNGCeKJdUywxUebg59+S8gnuIc6kw8ne1t+c5JBs9aiGf9qGancZFzZOGKrzY9CX903PyEtENnOiNelbthpu9jctv2cYJTT4JcYFwpYlj1Wzmj8afKxzsIbrvN+RN4U+68+HCCbvDAHUW+UY4NH+OB3kfXf\/XRrLznElottzanZkLsCzBUACcDt11rwJZRXeDen5yeKY1O2wVOhWK1qBI9DlsmkoXlxRncr5EuOY30TboWkrIIN8zSn2HEISsq0Q3GjmkiYxRbqgWU3uLUPiR1R9+nZHDBa\/wdPT9D2WQh7sII3HnraO8cpLwnb+8T4xTR92I\/OSPutLNwL2+UjO9mxSQw7cbRU91Hexi\/xv2xiDDN2JdQZf04P39xYLoNklOxBICJ852tHvVgvcKPekmsUg9xhiXOv\/9YqohrIL35lvFNhgA3JTxL+5ru963+Sc3GcyiPLb\/zlmGsIlPNcqpgWEHWoOO710SCfPOLbCCRjS\/MM\/ie7WVpREjjz\/VJXX9yWlf4Ie3qVkpCTO\/BGiY9Yb2Yv4Cbn3aSrxXx3x9xIbMCNlRnJpErk2MYYpdfJ9sc19S3C18IwQskPvmbwJ+BGJuZpJKiuAnSNnEGtZcLtJB1hvU6dOAZj5xec82xro6e3U31j\/sNZ4qJfRDOB8epEqZr7W3S0CsI4BGOAGAmiuhb7qK\/GRnHVon4G7dR+zjOzmqFnMus6xj4oh534fWEkvIRo5unizLNu0HNvo9wS9K4OKHE6aIkExERm0NawuvH+Swoj586huizgjyjAihzlzwH3JE0Q1\/SnsoN92iu6bv9ARACFoie0M6klr9M9rh8BRBaXdwIwU+ubaH4pUALyCIQX\/HKgH9zTS8xrf2jyBRJJnsOU8dtzJ0uh7LhAMD7J7XMgsRg496NF7dGs50h2uAShjipkIf94RUHDba+PjkH9M8z+RWXPAZKTAxEwbrlIxYBfZT6IWDCLe15k4cl35m0TeSgFyL5H2nD6fRSA5GuWjQieXfB8Mb4J98RCn6DiWns6Rmofb6IiZv5DSF0ooxLzjI2GBua86Bl+MlqnG7uKGKKRvpci+rg1DFBBsFpImWBz+iIwdjw8RgRZs1oojVouGxt9PhTHNmHkCe2Q0WLeFdjUc+zc85IjTnQmnutMfYE7BenxTJ7RONCPMyfIEyFvR4Ay\/b5a2znJfmSEhWA5EBmJ\/fNFXi1HJXBf50yShV1035D7C++ItIISbi0i70ejEVDmyhIDCI5NaCN3ZO\/a0K1ej7zxk6An0Y817Y\/+hxs0cUzMQHe\/+uDocGqtOIyoPfPUYAhpM51i\/POrnINhjhnCfutZojCqXMdxr2e3DN9AQK9iyfUYVQNLatfRZr6BLq2nx99BgvP\/H8N3FbN\/X4oYZBGKqKmSSak8mdGy2K9MC5WiNgoDiCrq9Syvc6bt2ox9zNBVyHUj\/FDer9Q\/fO99ED9SU8XTJ+aZrP1BiTc3l3g1zw01A\/jAwWAcVQ15C2GGg4kXXLAJTygx+K9tnG1d5TgJ3lm\/Uk1dQBk6VA21s1bNbf2qXURY0P9Sm5+iz1yWnB0otyFd\/yZwHr93VOsyIW2OMVk108myqvgwbNd7lsJF2ttuWSwp8Dqt3Ay1blaScT+iyYlGqxRafLJ16JqeB0YwHdgieEN\/Z5Ni4G\/PivPmSzBqxDuF9pqNSnReEINDyoM5fQIT\/W9irnA0IRT4Z9hwTxnyP5T8MeZIC78ry+BkzMOMVFD1bMfHYEpnN+GItIqpL4VQVZP7HnDIXA38jNzTsKjxcVfrI1Pilf4N7jAMR5enW1AQVphwHvFfa1kwgDC\/rlXhaIpcFGKoI4e3\/dneVRQ12TnqIiybtHlSRwah\/5OmliPzAVahUcdGX4IuzaJ8c3YKu\/lVfAtBQUobhZrxaodjoQKAmBqJU5dhm1G1u1c31M8IalL8bIz5ZF2MVYNHmKvgrW30bSmyE2VEsSyjRTD5mxMzEEhZrNEMpDrS60zfhey+gz\/8vEwG21J83EGNZ9SZA9sBDCxem075mQs4mM49mZ6iuaIncOMcpBVrzYtyV+V\/8cEGQ99ax4vViezJoH98mAI6GCZXNAZAYHvg4VGr0AvnXX\/UEzbb+UhSnOxo3WzM9VsNG0EUkNOLHcvU7qi98wq5Kc\/r1NhPEQp3Wg\/uAfjyR2L2E2ijbgwofaFmz3MJrFmVEXZsFuCEBzDuRdPV24TyqNfWzpaqyoH2Mj4Lre7vl0PUAXRm9MQncpu5e7roVJ6EAJNtYVEEt9O2IJp\/oqj87huePIsRX7l4Q+NMyDdQGnj1hpObCAVqvv232n8Cv\/ghhO7aga3pgV36PrV7rlDRbl+1ULK7CgQPrE0zkzSshoCLwxVB19eopl5sPq43ZBm7I1dLj1hgIXapr\/kS4biQoCu3yyi0M8pkx\/m2GVZMGeXLLKTYLe\/pWJkW9id39aNJwSFfoVNfx6mqCtevc4zsR7a5yqO41ap5y6gMc9RTUcdfFuvPk5p6FWBZgop74Dbc\/dcZRzw6jD5cHSx6MxtTRXqVXIJ6U9yQK789Hj4yHCfFcBZtquYt6ePuCGy1JpsCxTTHxV3lRPbshFfqB\/ZC9uMYVmMrPIe00fHfselvVaEtvNnMfurpd5oEZpJ90u\/qBlE9FtNXrUPCF8oEHaIkHwt1uCvopLrJUhb\/jExz8I0rib+fsRiRae4gDZclQ3FdPQ+LpkLvi0epGolk4JdoK6sY8nGNlHfVduRleUK7+ESJ2aJfWPFWmwnrMkpFIPb\/++D8vl9KPXE+SKyw0tz61Y+ziB1KV1CBR1PINh3f4pUPD5VDOVGXbFLZVOKR65J8C5rKFxcM6aN5jndtAc2zug266wR+DgF9cnB5iwUarLW392OLT53EU03VZxOXKRwOLBNbhCYd+qz0Vw4j9Dh9vhxDUxsI1vmtnJKsBlkKqp7XjS6Wsk+naCQMU+3Xot0CQm\/+WrD+BZfCtNhRgiX4eauYFfix8BgA6m\/RH8a5SpZpz4v\/7E45YDIDA7dlU461oN\/k2jxbjcUeKWr\/WFJoVoXgYWPB6EKIONCHYlJC0f8PiVO4LjrlcRYMSn\/yi4YMZEDDptY1J24PG7X9P8bkjoql\/GeJ3Q4bdAdWLbjI2UH\/mIocjsHhleiLldV39CW4LpfQO3vwgwF78v1DiHe6FIIxsHghhwwDW8zst7Bn\/NW4Jq9esXU4O2sSA0gx75SMhAYwShvUljMdFZximydBLIRUJSS2XJ0CNXaeP1ya26rgWMwduXmz0E57KNX22asua9ffHLLzh6EFgv+0\/IqCUl1ZATYSIQi5nawELu8\/S4jxxA0IZed4TLO9O1IHLiKf+9YQ4x81\/6rsPmiLK3ksbPjCvNAl\/sYVHJLKKmcp\/h4DoPScjoLo\/TYqE2C63mmCZhP6WO+BpDilUK5B\/BAiJuAvVKyESmmJwGo\/RRGtbjMysrvYEBTyLxvefq6f2XdDVhdwstLKL5CAujbH\/mHTpte9JLiAXSlzQdUsD5dZe\/FzwOu4LLSlAHn4RMB9\/fjjf8EtSw8OBhC24zkkicjRreajXU755YWpJ4TQGkOQdn7ffUj4OGJM9BqSyX90S4qj7cRB00kXww\/OgUKQSI6hB1QcXSMsXhSX0ZND\/HRJGCoMK6K0nhs3dIzF6ThrkTWv4I\/MJK6dW9CydXB+0H7MqVqY83jqwtqP0INJQD9Agssd\/lxeSiYEbqFxTNW0VgjAX1O8zmaKej+y67EiRkK1h0Sjx+kjkJHa2ZRgrmLDH4GJmj6+ZbA5bhmryxOtO\/bTi6D+9F1eunReOrj+ZGOJETMcqsqm91DfwrAN5XD\/wFL7OyDKXv3muYJC3Rx3mfEH8RkNKbMP\/tlHBYv4\/1a66HTFGvw5Z7S2AXYgjMQqsHS9Y\/pZKiSCwFfzH4bIYI72s06AEDXo7Y2RzQ3fqvICBk8xeZ+cB\/BWIxYKN9UhFXaxGdqoni57t0XWIUj31zKADiYfuakQY\/KnsZ33qSERpMBmRTqqtCsju40Sbm3HXHEkMJdyo7pTOZsqX4PmVjp78L8hReT5d+bMJjxHvsbMSgjm9poV7ahdEC0OHErxTzk\/qIBLteZl\/KJgyDDj2KntD2nAGrRLFvL2dfIzyODnhgWNkPz4IwhbymnsuTRD68nfkLBRyisjyE8KhyIQv2P1MjGaZIKC2VVnrhX99MA2wBkPxizneHbdY64oFJvC9aewBcZKB1OYZdlJd9nZRPqI5s8qqNPbFibbIpiRobda8nvgjyV7RwqgdLx90N6UgRQOsSOLr0Tr8pFuL7WH04x8xWRmn\/cqHu2RkczRtja+e7pTYocw14++GEJVjdJavSCrAc34UuXJgrppggNR2JDibNn+PFVki3et7B6cWZaGZ4UG1NntOC9ypH6raGBD6AlEj2XjQfbdLoMPlCTHYsEO0mLDV9K3jwDwX+4ZZfeDGYwd7GJC9FRzkv96B4N0J3J260smq3Qxoqv+XB1u15WSXlN1rSoN4ElQ2cPaOI0\/LNmkBl\/F4ZzPRdFIRh7cg7v42i9eHuDRg2Fac8TFgD4e5e90gGhyHGV7QlI8pYz8TBmTwDuNbKjR1RI2OhnsbP+DUWc97Cf2iv2RdRMAthy+eJh2wrUqA9OktG7CvDo2dLEI0\/Ujy0MRktc8ysvCuEkdKWft8GI+IDWe2AciFHd2C2g0dl39Y666MISvJJ4HI4eH6SJGbRWn+DRZKnyJZFgs0\/5Y2njonGo7p2Fkd+PsxHpN1Px7GjfqrcvhgKyypbc37O7xDmyI\/mgOFRtcpfNvXix3MZxbgU8g\/U9htUVX3Fj\/U9g869m890fE0OSUXKG2SCiJzURGa\/VNGnYonm3GIvwXoC\/2eZSNdEE\/IOp6aYUrjz6TT6FuKXS8AqmCDIkExxBZOiwpfw2TaXW\/M\/F7ShtSSVVS4clG5r5N5z+AUdaQTQ6SryIkiuTGi+E03qwmBzj\/onu4YyV03dST3ya1e\/jCMBGxXCUshYfSykuCwc6v7OnpKA6BO8xrdjvgAoi3+DfHq0GmV79mupneBYwdvli7l4O9TQo56GXq8Dzp6KLDBXOXsS8P1tHz4lVpjDJMSoSHXtIol+T4IMv206\/Ac3w7sIF3t0kL8KMVC+nQT4KnnOBCgBLq3GsGCfcibll1lDeg1kVJI0rutrvYZmA6txoEAm03XlvKbespvpAHixJ3gzX6keFZIUu+YEO3H\/SS92MXV3OiOYdOVKZHdYfWiIvjnmnedNsfZfRQvid\/r+WfnNcpZv2M62Mi8TiET4EO8KGPqFsJHofCMn5JtgYgH2VnonheYFMxPVZSKylJJL19lnTuvpo1F5r3KPDBC2XZihg2R7siNexKAxeCrITWMnHpqu63oyW9MOr+jYntwPBYrly0X5JSzKyc0H8zjh3TO\/GvcH7haBvaJBQT9z5uqwwN0y\/DyxWxCnVHwrtYf48pBIgf8\/rUnM6S3p47sV6LDm9+nc+1tEo\/bRI+nUCGb5d8DB1gWS6\/MEETOd8ThTL0IYgksFvGXBVuG+glvvtgcd4ldswavezRy2ba41cXOBTSfOf\/vq5eGgKgkYzf5lC\/She8BEAcY8QJ\/PoIGQnK5zmIfU9vIO0gG4m0IdUAwmDdaUYtPKyPCA8DNsK4vZiIqheVVfE1ZEP+GxsHRLW7IWyjiOf0U9i+mjwpLfcO4O9Y1T8dM\/5NWQZlStfaX4j0GzJV2VEFn9dBmg37LHZuEt8qsvGiTFBK\/b9cgjfhURaRIABcU1M6TqkWLY1g9CdsqSQIG9etEouNQMplySiSAvhdsnIYekLdyA0qygSVWC4kKgGcCTSGCNDjMAoCwl2fmcgd\/m0EVW9oTNpCAgTRwMgt2tIk8zsih3DhtckQOheK9eU9jDEJ8vgmi6KGEnyv2l0fIoMm1MW63ELmukkuNGhBCKfUmSazL9ScrBXefcOvkb8VhBTwKOj+8vy5uEmIgkhp+6mzgDc5R3VcPgiepzqjtuWmR2tdkpaNikS+mk0+73vlg24BDGRiIO5XHNlg+dz5PfTJBR7AOjfq4RpPNsRGdVtAiQyZZxzMAJgwR7\/mjiTJeSXmv9LdU8W9Qm7fEM39BN2wWAXlYs84Gat1y4RG\/xi62moULwTBOlBqalw\/9sU6IfQTkfj4I40rXlY5nTgayudflqWxMuas132FL5tGDkQsK600b2OnDI1lUd6CvRxPkXlUDdiYy+5mHLgG8A4uUzIo+6+thGCP\/AC8WiY8uIA\/wO0H7BJ02GUp3bObtaVqwaC8O5qkMLxGDx5V9Emg4R3hB8I1Oj1sCh4pL\/9HuXoiU\/Ax7lZG90hRo3VAK2v+CIWlI4JwRGfrc5eOxqcLhh40DgxVYFkbg\/hA3ObHVKj\/onBuSmBAxcEOrFk84LdPKczFm2cnchUPkNsYABCrGXzg63WlRa7ivngEkLZWO\/Amge40BBSQmgpMZ2R0wWPPGNKOC0xzO9H8+3WJSi7tcvGmHdFRq\/xJgWHVgJ+ONyIZOISVvTUyHo227FX9qSmYSHG9XNu1JLich2jauuUcpEpfNAkwdXTCM5LJhNU9agxzIsCvyPVQXf2roHR71wFmgnh7AeFc50BqBdx6VXsq5Jr\/oFpo43NpONofIwACA0xAv3ecutrwDi1v9ThLmDEnPC1xnqm4AIKcfODa54hrtKklK02uNNIJkKUi9giXHdnR8t2foF6P2rsTkzBQ8i1iv0BmGKyEYaXeERJbfyLndOhSV\/5+hNQsK6CvXfHhiYwhOnBCwtqVT3KA8V+28bMWli52F2lzWONcD7tHSSeF+62bzptjbRbMfdjSXSbsxDIIPSZ6jaEPQEi\/+r6fdIe6L2q9P4stsQN6MYTn4wXLn0nBCFFofIVmomgCUHwXY1792x5WCdmltvSbmyfqs5Ru6\/FHPkTghO2uqQgQpU59rgDZoWpemX5Fs2+YpnnH2T\/OgDWqebr93siFXesCVelzLczVTf661kTlsYQ+trhWQG9xkNQKQzaq\/mUebAD5\/IAWELpbrPwJ2+AkLtYx6WhdbUd47TA3aiI\/0qcAi6s\/zsAcjXvB+jdzNH0ciALA\/xfIdEDf6cRPWN\/PTw54Zcp25X\/wZ\/98OQbVd8AsvRXS16GTQGQ533hAukd6HoUX5xnVXzQMK7sALp3c5gtA5YYyjavR1+Pucjfyh+P+u1CE\/6m1jvr0deqivjioHC3\/4DC8rrz37E\/z0x\/ENaAIT+VaOAuE8d9jY0+\/gWKwpbCBvfjYJKBqYzWIWrpdehx7YTDtry8NBW\/UyVZnZYZ048mb1Zcod9XCn\/Erh9cYFjvKYL80NU5mnmR3D2w\/gCljPWjq78SBDbZT1jbnXsTLcQ0UvqavgdNcxmcfTgSPSRAwi2Y8JT1iFLw6GwoJV9df0o5MIeZCqGK9MTC8Ger+fXS\/x8ELThV9wTY5E5XqZOrZSU8xcn5TU+Df4E5c3xrgjDKnC38IwoZagNz2p60Fz9QfpZsPrbeAfEjOhEz5W3sUrgts4HX4+zVeAcpFS9U1VnGk\/nfFDFljMtl7Z7AhmRWRbRmZHtTemOyzMjWYizVStPRWCJ5R02s\/oiXP\/vGrgfI+GGohadQxU5UchK7pOSqjR28XzZH\/CvvlxmeTWvM24RTbqAdmIl6IMtZBexxNnsU51Nq5Os3ms1JeARwfK33+\/\/k675eQpOUtDWEsy9ISnLkMBs6B4iQo9rRqpZLlT8LPV\/gKp50TGvliNn2VnhVIG71pJYTQAN7v07uXRoi8OFvzpyr9jl81LkYHavIv95Y3Q+bkD+2ve6zpQTTkJ3biEi4dFicv7rGsLh3fGMXApTELkc34c8+m93Tub8xigZOQS+qwtIb5PoMoYn6n5YHOACNeeGaJxI\/QK+gkhFuiZJD2sm2W2RJzKLhBRH8uC31lkscHsA3CU+RbyOihIZqup2Bq3tkM\/9EXVury3TCyGh\/vLA7MU8e4m0eHPRCSSZ6K6aNv9+PfSP5e8A2P0txj9gsDbQkuYmuZrQ\/rH3\/2SI1MTeMviBj\/oz9wG99D7SzrL4v6uPjOArXvgfo2uTMf6NyPwUKp2ckXwJLwYYuSzvNJCSbEvT5DLQS2vXL8OVjt7ro\/\/yXChGpE\/AxaZUEeZBxvdeKoqUkA7hLqS\/Da1fq5gto3iXHcH9LTf+FmczSZakk6DMK1VVdPxL7yECHctAOpIU1qqjAcajzIUNbQzdHhUZwqUWZ1nWrmpVdSIs90HHN+cq4zXvkMfebJDeqn0zQLl6nh1cTi5qaeyouWs32Jd\/LUrBdBfSJq8zw4whSJ07GyqzlRaku0ekyTUB4o5MVT0NwLgCPDSTBQfRVfFPbnvDjQYb9ls28AMySTIY3rKs4fJ95JtPX7CcsGZiRX2VvCKZMNCYr0KJn1qa\/6JlZaVPkTRJ3mKPNkyeBNf940GVHx3iaaxymHWg6csk6\/5MbMiAEDo\/7UmVEg\/fY4xBzdMEoiwHCnZbltUVLZ2tsV3G8TG6x+8+gzFqvnemF9Kjs2EtO0JAkYRzybehff1F6u02ivH+Pq+31u8QWeBl6tss9vOPkvmJh0s85cCZJJ39i2jmsPS2QvwUjGG2g4PlY+vDdn2xL4FAHsmrcvKbIp8IBVhteENWmXOxhAhNMD9u3DYZxrhB0lUHeV31MjSf5pyptaqPerokh\/iVRcNuSA+BG35dv+MmH+xKSWrdExEYUh49ekHRsYiyGPLDLjpEtBJx679yCd471fWx\/Qt9D6Sasfsl9R3nBWcgRKwWSZWzRpCB1XgGiROlpEsMQ7DNApDwdUqr9+Qb2bC8dAL6UvNIxl0tNK4NUwtrnHdDnTGDa0ds4qvd+0WKUVFjXZJE4qcG++uTiYo4+IPGAUBy9DzWeSLV22vaYMgfg25p\/\/1uAodSTv97Ab9KxpWkCKUDmAljbUqrMqVsffwC2yzPb8Jwr1MiJcTYcnzUnJ8wOVPXA96iplufhesFfx4ho49sBDqttWkmnyjU8Nh8asfoIBaNz1gbozBjDjN+eDCAfM8bFSvr1fKNAXHRptRUUAf2uUU+wpTONzgIvLKtMirL\/Fa0sECInzAvnVd9bNpLmlN3MYU25TD+IDvMjSgVrvoTfIViY93aGXe3q2f1jKZoUmP5zCCoVqL2BRYJDmwEA3hNeV3elwxkbXxhtfkHy6hAX9DzJBhaJddXVtchdkrVxGuvaa4w3ZWXuHwhmopDr51PR4AjrydEja\/nAYTB5gIeELHgg6keTJDEgDVW4+8rTVtrp1nuiYFNn6uyhjNmViJY+oymDTTrIa3\/bDUQITqJKTVcgGyJpbdEmcaeq7PEKLMqBn30nPWPZl5B\/xxRnjthdyDgElv9fb37aGYFAWBYBNWrijeze2EvxdDfc\/BBikOIAb9r2I5EjPtHsNDdbJtDa2E0lG6NtM5iyk23Kt\/t86kS5SuFio0iXb6JMlem6C2cI4e\/Ck1wLe0FWZ3MmvPNawplPSHqt\/bisCYfxJR6LYrYG8nL94zpIltjywGptxLC5BgBph0lkz\/BS9WW9Y6i+tJ4KYzdk1J5E2cxkDky3ui\/Sf67CSFTqzENbjRFXx0wWzfCRIK478c8jPuKdY72a4D\/MtOS9VTivMcDXLacM6g\/sscX4ZCuvfX3afF4hzqKqb6ubss+g5lxMhQhcudz52865eQ6SZUW76E6r4smahFazu50wF4rVD1VP3KB3pGGNScPmJg9490qWzkpYdk9GVlqtQF+tkDM1K3ZKa0hvp9rOhJC2\/AVB5bc+Eh\/\/8mU\/\/yW7\/\/8k4NmvBQ9uClwB\/pvMAAALxsX+WFAlrSiEBiG0ADPbQeLBDS5cuvS48TjX0wYbo8fv5132UxhOSHZTUm9C06Uu9Y+eufNgfsnEZJenMncJivKir0Bpk2y5sxB9NJCqIG30PjGCXToDlU\/Qu9cOG1blxUwykoQiKIIzbXBC9oHRK2FjwfZZJCUO10Am5\/b\/c1bwIC9H0S29eTyePpAsxlqKwZXpaBl5DFeIg1J9F+wo+VPXrwsdhDV6ni1E9uxwe+MWBeU7yrRKFjaqMsPbfuDGFzbe0hpe1kallkKySV1yv7Udcllz9mDtbqH+g5m8qSerIgfG6qY4FPynWw+YFp8GZfDHf+W6SkgSudWu+JGYrtY7VZB9E25kAcRI8mritidfcoTsgL8c1OZf5BbJ29hAlmDTObMKd1I5bG5Oigp5\/Rr\/oCazdHByjwKevTJYHbT3UL0Nu5mbybVjeyvDXN2Xic2o2ySkFz6Qzjk5cAMtxm86LqqGc+aQcosrVb+aklWYaJk2EL\/Z8LOUBeZIA+Kgp83YogjPIStRFMv1OVVSD8rUH9QJgh4a7c9jYfQ2Z7JP13Yb\/JjQu2Z5YL8ISV9IE0ejDHJvDCmXg1rXwOXrJFYB\/2pO\/p1sy69T\/TOxn9JqjE96j4PFhLx94Q81075BpIggdoiwIMhCAVgxRn5gyyeeVMM08SG6UarYDimA4cFlZVuZtwo8z1HMgxDHYw8CJB8ar4XuzxkwO6dGG2e86RsEAn\/2D1ijNi6yHwqabcg3VeV7WEAQWL9h9dJ1X5uFrlJqNJH10sGTPDCYDWkQEFudlruPg8gBiX1uUDJWRTmpKyKCuq2WpW7sCfIEmCCiMRYgBs9k5XoLjQVAsq9iuhD3\/kOm3C3VBJSdsW\/8Xr9cQj1gtdj1cSB3T6gqYEdnySPz6RJA5KTys11634aqjTsmC9XWkvK5cN7l+lwkdb2CBJPhWQ4+k\/EUvH0ZhAokxivhv24Q9hoQntQP1UC\/hgalDcpNuLFuN+vhWa70yel+zAJzNh+uJ5+zlMUxib4drwvtXjAQhyE4Fdu1BSa\/OQzw8eU1WLqMXZfVzDcMLBzWIwKPc8ckQgA9AAB5DnVS9zvx93BTL5Ge+cdSK2nmqIzKxnKFaBdAsjvrPMqCAuQRf2fKhQ9uZvhhLhLoVlFSHbjVUMcj\/wwRnBvKEUuPI5XX\/SsL9buPT6b0dGEvrKfPlJ3JzaK75eOp\/YZ6MJEJPJ7Gzg7SQw2QvDoCNG+u9jrtHSYNnZ0QEDg0kY48w5xnGr7qJtR3vLAY\/rlRmGY\/wBcAr1saT8LyQC4\/5HvMHyuhMUI9SPvMKSTtgAABJYF6dWVhWzigCirVGLTxa7Zlc46a9kGn60SoWMC7npU0X\/apeNZy6dai4mBJMeavM3Vs\/4Ahaifhsum07HwizrEnKKKf9zLQ7AwqW\/86z7QbcdgBRKGU2oaurZ7QWWLdJcLM2L\/o0WbsxqRzQjE6d8Xp3Lmu9Ru6DZVWrI32ZafIAt\/2\/a9MI14TyHQwWMzwgsH2zQKtvInjpoknoBsrzBXbjkvWkccIbULOl0LspHzQXswY9E4tleMGhgxvQV0G\/YsyjetSImypDM13FYKdwIukYh8j1Ts75ASwkfH0Zo8WfhkK3LJrUWtLfrq4LpgXvAskd809W1ajLqxjVCTFUpUNK9RAXUxFxg\/bhIVbwIKY9UOynqXCUGtcUlttculrkjZsFXbLc68bE\/zy\/f3bT4YxmnuH+svliZKOFiEeQZ1j8JppTJVVk8EuXOmE7I9CAzhVwB\/cIFrhXOqvdvuv7uhI\/XvVXRojONfxB8NnshP2sr6GY\/DuZaIY4EouqpRijxl3kEkrZp\/fvca9Jrr9W4NrK2mbbdDdTmh2jr5gJs6o7m7gXGFJBZlr++qmaeLEIpRX3sNi9gySYv+wwFG0lIKiAeK1CSiG8pLfFhH+lnQODRAlE96KtRdGQGhFl+LocxT0WotHZGNiZgw5T+rts3xh7vBYNJmsUHdGQerHm2Lm1GrQmLUwZ0AjmTOLmdljVTywNe6YdzQ5uGNct1f7hTzY2GrxxfxWGLKqB70i7bgTrUYj\/dp5NVV5aVP8KaFemhsOwiOe6J1c4jnLebMF0VHu0pyTezLJONuxUHiQOg\/Gay+kRwuYZaHTfl5\/xH26RhpM0rcJywwyEmgA3DKG1GvuzPxiY9TAqfmuifIPpSFrquADt8gr4\/r61lQczbXAhO2HCNPMMwj8uxc5hy8xyUZInXEVKShN0hGch36Qh2Uk1E\/a84Wi2yHyH83iTma9CSxj7Jag5eQCHoUSz5u2+H+8CFUDldEI5ZMOi\/PCYPZcL4GPr34ZfE6Eo722ilpX\/MaPzxBeXNYgvugWT8hMQcUSZTgxZCTPR239j83xbr1xZwCtLsdf7ItTN4dfqxNLrClGvlwx4VMqG8FyZGdjo+LfyZMpT+oS5b2wVfPV6F7YnztVMeSyaL+gSKZoa0P4j8AKMr7M4pgo7AizhjrOk7+y7p5kqtNyfGTQGnZ4Xt5wDxmtB+AsLcLmY8Hxt\/A\/M4uBIRG5nCqsD1DJLmpbvijTVEdXErPuTGEE1CEQkdd1JH6HuxTJHNF2fD9S9Hg6rsVLm8h4mJ6k+9MiSDrAINVj6GXVwoE\/\/atSO3IRROVMM6X9uq5Dka2Dic4a3qCoXSJAG3Swo0BgO9KsIPUJrclZ9+n8ojzOWVvFtyHO822VZmdeOd4hSjrHcRTLlXMpUXvgP9jMLvIA5AmwNzAIInBJ9xsppomH3xSH6HUnS8rhg4nT4GAd7I7ikSX51H2gX4HtKQD3UJljHE+8n44AAAAAElhgwr\/qHiFi62W0SssnKShCZhtevXldyyxrlFF0XDtQ85yqHuMHGIZUf\/B6tu1qkmG\/hFwRdJLo6nrqQvZ3652yHJZkjiC2r2MTpZaX7+Bo55VnyTeWbEieXHB58hWYEQ0DA89nbJ5EC5IJmPSN6uV7CZ5TpYGY3+yZTLG9ysUB7EvAzrKVBdGvtQ1E0GURfzF80\/mwS1pNSJmaKX5QpePsmF9gS44aliND0Tgks\/YhTGDCvq1YzemJ+xkS9BFcpdhHfC4n5\/3FK2fcSJvXdqtLGdNBtP2M5QJh0RwQtd2JwgdqmXSl5d5+t2i2fQnuKSUgNvGF28+5hJrCdtox3PsdJD37ght6wWVSvJ1vss3b54oDZC71cJJ+wjJCPIVKvl2i7CbwIHNGYfmJIOnWmZjIVaaH6bBZyg1B+wimTXf1e0zK3uGiqc7c1RbGbA7SlmNEZWjVJlchyymBfX\/govpiqgv0co4BtqMsJiaWjTVioq3lcQVf6PmTkRCaDKh9\/NVotc6GF13dve0dY3cBSK6nB+GRfjhti03\/LpZXkCsy+9InbyoiEBrUQHHpyGYv2B7rWKO1GOerya\/nF9+DIQN2GdSMWc4U+nr\/8OZfuIyrfHGlNsl9eNvpKOPNhbxKO\/umMaqxNBQ5wgZp2jjFg2XHAGIC6aE2poUi9FlJa+IZypFZV0OBL9e+gIwr5yplPp7n2NVR7bJwzl\/E2X44oL5s9r6fhLENBL+DLRIbGghqQzzDeHJdqTHF3rHYBKFYNlm1xV1kMhcDhTdk8GEHIGfp7xC16OTwhVrFENwyXnlEQ0Qok9USjex4A4iC0vYi+fQec63Dilp7q74doJaLGq6S1+a0P8m9IcsUmVljCRMt0zWGBtB91QsGPFzlf7OmYj8jWTmcM0K8a5DhFVNt012VlDw1zdcUiKHrlQzgSiRRTHQM4sadYXy\/GiC4imGgs00HLB2uOyyYLDsWaayNT2ABV3cN55mttnZnDyoqutObC9fYqV\/\/czQAAAAAAAAA=\" width=\"132\" height=\"132\" alt=\"St. Mary's School, Barbil Diamond Jubilee 1966&#8211;2026 emblem: 60 years of legacy, Pray &#183; Work &#183; Serve\" decoding=\"async\">\r\n        <span><small>St. Mary's School, Barbil<\/small><b>Diamond Jubilee Celebrations<\/b><\/span>\r\n      <\/div>\r\n      <h1>Diamond Jubilee<br><em>Alumni Reunion 2026<\/em><\/h1>\r\n      <p class=\"hero-sub\">Ex-students, come home. Register for three days of memories, friendships and celebration at St. Mary's School, Barbil, Odisha.<\/p>\r\n      <ul class=\"chips\" aria-label=\"Event details\">\r\n        <li class=\"chip\"><svg aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"5\" width=\"18\" height=\"16\" rx=\"2\"\/><path d=\"M16 3v4M8 3v4M3 10h18\"\/><\/svg>9th, 10th &amp; 11th December 2026<\/li>\r\n        <li class=\"chip\"><svg aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 21s-7-6.2-7-11.5A7 7 0 0 1 19 9.5C19 14.8 12 21 12 21z\"\/><circle cx=\"12\" cy=\"9.5\" r=\"2.5\"\/><\/svg>Barbil, Odisha<\/li>\r\n      <\/ul>\r\n      <div class=\"hero-cta\">\r\n        <a class=\"btn btn-gold\" href=\"#jubilee-register\">Register now <span aria-hidden=\"true\">&#8594;<\/span><\/a>\r\n        <a class=\"hero-link js-pay-link\" href=\"#jubilee-payment\" hidden>Already registered? Add your payment UTR<\/a>\r\n        <div class=\"countdown\" aria-label=\"Time until the celebrations\" hidden>\r\n          <div><b data-cd=\"d\">00<\/b><small>Days<\/small><\/div>\r\n          <div><b data-cd=\"h\">00<\/b><small>Hours<\/small><\/div>\r\n          <div><b data-cd=\"m\">00<\/b><small>Mins<\/small><\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <p class=\"by\">Registration and travel support by <a href=\"https:\/\/www.barbiltours.com\/list\/\">Barbil Tours<\/a> and <a href=\"https:\/\/www.barbiltaxi.com\/\" target=\"_blank\" rel=\"noopener\">BarbilTaxi.com<\/a><\/p>\r\n    <\/div>\r\n    <aside class=\"ready\" aria-labelledby=\"sj-ready-h\">\r\n      <h2 id=\"sj-ready-h\">Before you start<\/h2>\r\n      <p style=\"font-size:15px;color:var(--muted)\">It takes about 5 minutes. Keep these handy:<\/p>\r\n      <ul>\r\n        <li><svg aria-hidden=\"true\" width=\"20\" height=\"20\"><use href=\"#sj-check\"\/><\/svg><span><b>A recent passport-size photo<\/b> on your phone or computer<\/span><\/li>\r\n        <li><svg aria-hidden=\"true\" width=\"20\" height=\"20\"><use href=\"#sj-check\"\/><\/svg><span><b>Your batch year<\/b>, the year you left or passed out<\/span><\/li>\r\n        <li><svg aria-hidden=\"true\" width=\"20\" height=\"20\"><use href=\"#sj-check\"\/><\/svg><span><b>Payment UTR \/ UPI ID<\/b> or a screenshot of your payment<\/span><\/li>\r\n      <\/ul>\r\n      <p class=\"note\">The patronage fee is for the alumnus only. Accompanying family members don't pay it.<\/p>\r\n    <\/aside>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- Registrations so far -->\r\n<section class=\"stats js-stats\" id=\"jubilee-stats\" aria-labelledby=\"sj-stats-h\" hidden>\r\n  <div class=\"wrap stats-in\">\r\n    <div class=\"stats-total\">\r\n      <span class=\"eyebrow\">Registrations so far<\/span>\r\n      <b class=\"js-total\">0<\/b>\r\n      <p class=\"js-total-sub\"><\/p>\r\n      <a class=\"btn btn-gold\" href=\"#jubilee-register\">Add your name <span aria-hidden=\"true\">&rarr;<\/span><\/a>\r\n    <\/div>\r\n    <div class=\"stats-bars\">\r\n      <h2 id=\"sj-stats-h\">By batch year<\/h2>\r\n      <p class=\"stats-empty js-empty\" hidden>No registrations yet. Be the first from your batch!<\/p>\r\n      <ol class=\"bars js-bars\"><\/ol>\r\n      <button type=\"button\" class=\"linkbtn js-bars-more\" hidden>Show all batches<\/button>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- Memory Lane photo album\r\n     ===== ADD YOUR PHOTOS HERE =====\r\n     One <li> per photo: data-src = the photo's web address (e.g. from WordPress Media > the photo > \"Copy URL\"),\r\n     data-caption = a short caption. The album stays hidden until at least one photo is added. -->\r\n<section class=\"album js-album\" id=\"jubilee-memories\" aria-label=\"Memory Lane photo album\" hidden>\r\n  <div class=\"wrap album-in\">\r\n    <div class=\"album-text\">\r\n      <span class=\"eyebrow\">Memory Lane<\/span>\r\n      <h2>Remember these days?<\/h2>\r\n      <p>Moments from our years at St. Mary's. Have a photo to share? <a href=\"https:\/\/wa.me\/14257369700?text=Hi!%20I%27d%20like%20to%20share%20a%20photo%20for%20the%20St.%20Mary%27s%20Diamond%20Jubilee%20Memory%20Lane%20album.\" target=\"_blank\" rel=\"noopener\">Send it on WhatsApp<\/a>.<\/p>\r\n    <\/div>\r\n    <figure class=\"album-frame\" aria-roledescription=\"slideshow\">\r\n      <div class=\"album-stage js-album-stage\" aria-live=\"off\"><\/div>\r\n      <figcaption class=\"album-cap\"><span class=\"js-album-cap\"><\/span><span class=\"album-n js-album-n\"><\/span><\/figcaption>\r\n      <div class=\"album-nav\">\r\n        <button type=\"button\" class=\"album-btn js-album-prev\" aria-label=\"Previous photo\"><svg aria-hidden=\"true\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m15 18-6-6 6-6\"\/><\/svg><\/button>\r\n        <button type=\"button\" class=\"album-btn js-album-play\" aria-label=\"Pause slideshow\"><svg class=\"i-pause\" aria-hidden=\"true\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><rect x=\"6\" y=\"4\" width=\"4\" height=\"16\" rx=\"1\"\/><rect x=\"14\" y=\"4\" width=\"4\" height=\"16\" rx=\"1\"\/><\/svg><svg class=\"i-play\" aria-hidden=\"true\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M7 4.5v15a1 1 0 0 0 1.5.86l12-7.5a1 1 0 0 0 0-1.72l-12-7.5A1 1 0 0 0 7 4.5z\"\/><\/svg><\/button>\r\n        <button type=\"button\" class=\"album-btn js-album-next\" aria-label=\"Next photo\"><svg aria-hidden=\"true\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m9 18 6-6-6-6\"\/><\/svg><\/button>\r\n      <\/div>\r\n    <\/figure>\r\n    <ul class=\"js-album-photos\" hidden>\r\n      <li data-src=\"https:\/\/www.barbiltours.com\/wp-content\/uploads\/2026\/10\/sms-memory-01.jpg\" data-caption=\"Class photo from our school days\"><\/li>\r\n      <li data-src=\"https:\/\/www.barbiltours.com\/wp-content\/uploads\/2026\/10\/sms-memory-02.jpg\" data-caption=\"Class photo with our teachers\"><\/li>\r\n      <li data-src=\"https:\/\/www.barbiltours.com\/wp-content\/uploads\/2026\/10\/sms-memory-03.jpg\" data-caption=\"Class photo with Sister and our class teacher\"><\/li>\r\n      <li data-src=\"https:\/\/www.barbiltours.com\/wp-content\/uploads\/2026\/10\/sms-memory-04.jpg\" data-caption=\"Chemistry on the blackboard: C + O&#8322; &#8594;\"><\/li>\r\n      <li data-src=\"https:\/\/www.barbiltours.com\/wp-content\/uploads\/2026\/10\/sms-memory-05.jpg\" data-caption=\"School excursion by the river\"><\/li>\r\n      <li data-src=\"https:\/\/www.barbiltours.com\/wp-content\/uploads\/2026\/10\/sms-memory-06.jpg\" data-caption=\"Picnic lunch on the rocks\"><\/li>\r\n      <li data-src=\"https:\/\/www.barbiltours.com\/wp-content\/uploads\/2026\/10\/sms-memory-07.jpg\" data-caption=\"&#8220;Footprints on the sands of time&#8221;: 1994 batch reunion, 4th Dec 2016\"><\/li>\r\n      <li data-src=\"https:\/\/www.barbiltours.com\/wp-content\/uploads\/2026\/10\/sms-memory-08.jpg\" data-caption=\"The 1994 batch, together again\"><\/li>\r\n      <li data-src=\"https:\/\/www.barbiltours.com\/wp-content\/uploads\/2026\/10\/sms-memory-09.jpg\" data-caption=\"Back on campus with our Sisters\"><\/li>\r\n      <li data-src=\"https:\/\/www.barbiltours.com\/wp-content\/uploads\/2026\/10\/sms-memory-10.jpg\" data-caption=\"Flowers for Sister at the reunion\"><\/li>\r\n      <li data-src=\"https:\/\/www.barbiltours.com\/wp-content\/uploads\/2026\/10\/sms-memory-11.jpg\" data-caption=\"Under the old tree, back at school\"><\/li>\r\n      <li data-src=\"https:\/\/www.barbiltours.com\/wp-content\/uploads\/2026\/10\/sms-memory-12.jpg\" data-caption=\"A reunion evening on campus\"><\/li>\r\n      <li data-src=\"https:\/\/www.barbiltours.com\/wp-content\/uploads\/2026\/10\/sms-memory-13.jpg\" data-caption=\"An evening at the church\"><\/li>\r\n      <li data-src=\"https:\/\/www.barbiltours.com\/wp-content\/uploads\/2026\/10\/sms-memory-14.jpg\" data-caption=\"Old friends, late-night catch-up\"><\/li>\r\n      <li data-src=\"https:\/\/www.barbiltours.com\/wp-content\/uploads\/2026\/10\/sms-memory-15.jpg\" data-caption=\"Movie outing with batchmates\"><\/li>\r\n      <li data-src=\"https:\/\/www.barbiltours.com\/wp-content\/uploads\/2026\/10\/sms-memory-16.jpg\" data-caption=\"Visits that mean the world\"><\/li>\r\n      <li data-src=\"https:\/\/www.barbiltours.com\/wp-content\/uploads\/2026\/10\/sms-memory-17.jpg\" data-caption=\"Batchmates, friends for life\"><\/li>\r\n      <li data-src=\"https:\/\/www.barbiltours.com\/wp-content\/uploads\/2026\/10\/sms-memory-18.jpg\" data-caption=\"Alumni travels: Gurdwara Nanak Shahi, Dhaka\"><\/li>\r\n    <\/ul>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- Registration form -->\r\n<section class=\"reg wrap\" id=\"jubilee-register\" aria-labelledby=\"sj-reg-h\">\r\n  <div class=\"reg-head\">\r\n    <span class=\"eyebrow\">Ex-Students Registration Form<\/span>\r\n    <h2 id=\"sj-reg-h\">Register for the reunion<\/h2>\r\n    <p class=\"req-note\">Fields marked <i>*<\/i> are required.<\/p>\r\n    <button type=\"button\" class=\"help-strip js-help-open\"><svg aria-hidden=\"true\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9.5\"\/><path d=\"M9.3 9.2a2.8 2.8 0 0 1 5.4 1c0 1.9-2.7 2.5-2.7 2.5M12 16.8v.01\"\/><\/svg><span><b>Need help registering?<\/b> Open the step-by-step guide: verification, payment, UTR and more.<\/span><span class=\"hs-go\" aria-hidden=\"true\">&rarr;<\/span><\/button>\r\n  <\/div>\r\n\r\n  <form id=\"sj-form\" novalidate action=\"#jubilee-register\" method=\"post\" onsubmit=\"if(!window.sjLoaded&&!window.sjBooted){window.sjBooted=1;var d=document.getElementById('sj-js');if(d){var b=atob(d.getAttribute('data-code'));try{b=decodeURIComponent(escape(b));}catch(e){}var s=document.createElement('script');s.text=b;(document.body||document.documentElement).appendChild(s);}}if(!window.sjReady&&window.sjStart){window.sjStart();}if(window.sjReady){this.dispatchEvent(new Event('submit',{cancelable:true}));return false;}var x=this.querySelector('.fail');if(x){var m=x.querySelector('.fail-msg');if(m){m.textContent=(window.sjLoaded?'[Code A2] The page script stopped with an error: '+(window.sjError||'unknown')+'.':'[Code A1] The page script was blocked or delayed by a speed\/optimization plugin.')+' Please register on WhatsApp instead.';}x.classList.add('show');x.scrollIntoView();}return false;\">\r\n\r\n    <!-- 1. Personal -->\r\n    <div class=\"card\" data-sec=\"1\">\r\n      <div class=\"card-h\"><span class=\"num\" aria-hidden=\"true\">1<\/span><div><h3>Personal details<\/h3><p>As you'd like them printed on your badge.<\/p><\/div><span class=\"done-tick\"><svg aria-hidden=\"true\" width=\"14\" height=\"14\"><use href=\"#sj-check\"\/><\/svg>Done<\/span><\/div>\r\n      <div class=\"s1\">\r\n        <div class=\"grid\">\r\n          <div class=\"f c6\" data-req data-msg=\"Please enter your full name.\">\r\n            <label for=\"sj-name\">Full name <span class=\"star\">*<\/span><\/label>\r\n            <input id=\"sj-name\" name=\"sj_name\" type=\"text\" autocomplete=\"name\" placeholder=\"Your current full name\">\r\n            <span class=\"err\" role=\"alert\"><\/span>\r\n          <\/div>\r\n          <div class=\"f c6\">\r\n            <label for=\"sj-maiden\">Maiden name <span class=\"hint\">(if applicable)<\/span><\/label>\r\n            <input id=\"sj-maiden\" name=\"sj_maiden\" type=\"text\" placeholder=\"Name while at school, if different\">\r\n          <\/div>\r\n          <div class=\"f c6\" data-req data-msg=\"Please enter your date of birth.\">\r\n            <label for=\"sj-dob\">Date of birth <span class=\"star\">*<\/span><\/label>\r\n            <input id=\"sj-dob\" name=\"sj_dob\" type=\"date\" min=\"1925-01-01\" max=\"2012-12-31\">\r\n            <span class=\"err\" role=\"alert\"><\/span>\r\n          <\/div>\r\n          <fieldset class=\"f c6\" data-req data-msg=\"Please choose one.\">\r\n            <legend>Gender <span class=\"star\">*<\/span><\/legend>\r\n            <div class=\"opts\">\r\n              <label class=\"opt\"><input type=\"radio\" name=\"sj_gender\" value=\"Male\">Male<\/label>\r\n              <label class=\"opt\"><input type=\"radio\" name=\"sj_gender\" value=\"Female\">Female<\/label>\r\n              <label class=\"opt\"><input type=\"radio\" name=\"sj_gender\" value=\"Other\">Other<\/label>\r\n            <\/div>\r\n            <span class=\"err\" role=\"alert\"><\/span>\r\n          <\/fieldset>\r\n        <\/div>\r\n        <div class=\"photo\">\r\n          <span class=\"lab\">Recent photo <span class=\"badge opt-b\">Recommended<\/span><\/span>\r\n          <label class=\"photo-box\" data-file=\"sj_photo\">\r\n            <input type=\"file\" name=\"sj_photo\" accept=\"image\/*\" aria-label=\"Upload a recent passport-size photograph\">\r\n            <svg aria-hidden=\"true\" width=\"30\" height=\"30\"><use href=\"#sj-up\"\/><\/svg>\r\n            <span class=\"pb-txt\">Upload passport-size photo<\/span>\r\n          <\/label>\r\n          <span class=\"hint\">JPG or PNG. <button type=\"button\" class=\"copy js-remove\" data-for=\"sj_photo\" hidden>Remove<\/button><\/span>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"grid\">\r\n        <fieldset class=\"f c6\">\r\n          <legend>Marital status<\/legend>\r\n          <div class=\"opts\">\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_marital\" value=\"Single\">Single<\/label>\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_marital\" value=\"Married\">Married<\/label>\r\n          <\/div>\r\n        <\/fieldset>\r\n        <fieldset class=\"f c6\" data-req data-msg=\"Please choose one.\">\r\n          <legend>Citizenship <span class=\"star\">*<\/span><\/legend>\r\n          <div class=\"opts\">\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_citizen\" value=\"Indian\">Indian<\/label>\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_citizen\" value=\"NRI\">NRI<\/label>\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_citizen\" value=\"Abroad \/ Other\">Abroad \/ Other<\/label>\r\n          <\/div>\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n        <\/fieldset>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- 2. School -->\r\n    <div class=\"card\" data-sec=\"2\">\r\n      <div class=\"card-h\"><span class=\"num\" aria-hidden=\"true\">2<\/span><div><h3>School &amp; alumni credentials<\/h3><p>Help us place you in the right batch.<\/p><\/div><span class=\"done-tick\"><svg aria-hidden=\"true\" width=\"14\" height=\"14\"><use href=\"#sj-check\"\/><\/svg>Done<\/span><\/div>\r\n      <div class=\"grid\">\r\n        <div class=\"f c2\" data-req data-msg=\"Please choose your batch year.\">\r\n          <label for=\"sj-year\">Batch year <span class=\"hint\">(year of leaving \/ passing)<\/span> <span class=\"star\">*<\/span><\/label>\r\n          <select id=\"sj-year\" name=\"sj_year\"><option value=\"\">Select year<\/option><option value=\"2026\">2026<\/option><option value=\"2025\">2025<\/option><option value=\"2024\">2024<\/option><option value=\"2023\">2023<\/option><option value=\"2022\">2022<\/option><option value=\"2021\">2021<\/option><option value=\"2020\">2020<\/option><option value=\"2019\">2019<\/option><option value=\"2018\">2018<\/option><option value=\"2017\">2017<\/option><option value=\"2016\">2016<\/option><option value=\"2015\">2015<\/option><option value=\"2014\">2014<\/option><option value=\"2013\">2013<\/option><option value=\"2012\">2012<\/option><option value=\"2011\">2011<\/option><option value=\"2010\">2010<\/option><option value=\"2009\">2009<\/option><option value=\"2008\">2008<\/option><option value=\"2007\">2007<\/option><option value=\"2006\">2006<\/option><option value=\"2005\">2005<\/option><option value=\"2004\">2004<\/option><option value=\"2003\">2003<\/option><option value=\"2002\">2002<\/option><option value=\"2001\">2001<\/option><option value=\"2000\">2000<\/option><option value=\"1999\">1999<\/option><option value=\"1998\">1998<\/option><option value=\"1997\">1997<\/option><option value=\"1996\">1996<\/option><option value=\"1995\">1995<\/option><option value=\"1994\">1994<\/option><option value=\"1993\">1993<\/option><option value=\"1992\">1992<\/option><option value=\"1991\">1991<\/option><option value=\"1990\">1990<\/option><option value=\"1989\">1989<\/option><option value=\"1988\">1988<\/option><option value=\"1987\">1987<\/option><option value=\"1986\">1986<\/option><option value=\"1985\">1985<\/option><option value=\"1984\">1984<\/option><option value=\"1983\">1983<\/option><option value=\"1982\">1982<\/option><option value=\"1981\">1981<\/option><option value=\"1980\">1980<\/option><option value=\"1979\">1979<\/option><option value=\"1978\">1978<\/option><option value=\"1977\">1977<\/option><option value=\"1976\">1976<\/option><option value=\"1975\">1975<\/option><option value=\"1974\">1974<\/option><option value=\"1973\">1973<\/option><option value=\"1972\">1972<\/option><option value=\"1971\">1971<\/option><option value=\"1970\">1970<\/option><option value=\"1969\">1969<\/option><option value=\"1968\">1968<\/option><option value=\"1967\">1967<\/option><option value=\"1966\">1966<\/option><\/select>\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n        <\/div>\r\n        <fieldset class=\"f c4\" data-req data-msg=\"Please choose the highest class you completed.\">\r\n          <legend>Highest class completed <span class=\"star\">*<\/span><\/legend>\r\n          <div class=\"opts\">\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_class\" value=\"Class X (10th)\">Class X <small>(10th)<\/small><\/label>\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_class\" value=\"Class XII (12th)\">Class XII <small>(12th)<\/small><\/label>\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_class\" value=\"Other\">Other<\/label>\r\n          <\/div>\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n        <\/fieldset>\r\n        <div class=\"f c6\" data-req data-msg=\"Please tell us which class.\" data-show-if=\"sj_class=Other\" hidden>\r\n          <label for=\"sj-class-other\">Which class? <span class=\"star\">*<\/span><\/label>\r\n          <input id=\"sj-class-other\" name=\"sj_class_other\" type=\"text\" placeholder=\"e.g. Class VIII\">\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- 3. Contact -->\r\n    <div class=\"card\" data-sec=\"3\">\r\n      <div class=\"card-h\"><span class=\"num\" aria-hidden=\"true\">3<\/span><div><h3>Contact &amp; professional info<\/h3><p>We'll send updates on WhatsApp and email.<\/p><\/div><span class=\"done-tick\"><svg aria-hidden=\"true\" width=\"14\" height=\"14\"><use href=\"#sj-check\"\/><\/svg>Done<\/span><\/div>\r\n      <div class=\"grid\">\r\n        <div class=\"f c3\" data-req data-tel data-msg=\"Please enter a WhatsApp number with country code.\">\r\n          <label for=\"sj-wa\">WhatsApp number <span class=\"star\">*<\/span><\/label>\r\n          <input id=\"sj-wa\" name=\"sj_whatsapp\" type=\"tel\" autocomplete=\"tel\" inputmode=\"tel\" placeholder=\"+91 98765 43210\">\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n        <\/div>\r\n        <div class=\"f c3\">\r\n          <label for=\"sj-alt\">Alternate contact number<\/label>\r\n          <input id=\"sj-alt\" name=\"sj_alt_phone\" type=\"tel\" inputmode=\"tel\" placeholder=\"Optional\">\r\n        <\/div>\r\n        <div class=\"f c6\" data-req data-email data-msg=\"Please enter a valid email address.\">\r\n          <label for=\"sj-email\">Email address <span class=\"star\">*<\/span><\/label>\r\n          <div class=\"email-row\">\r\n            <input id=\"sj-email\" name=\"sj_email\" type=\"email\" autocomplete=\"email\" placeholder=\"you@example.com\">\r\n            <button type=\"button\" class=\"btn btn-navy vbtn js-send-code\" hidden>Verify email<\/button>\r\n          <\/div>\r\n          <input type=\"hidden\" name=\"sj_email_token\" value=\"\">\r\n          <div class=\"vbox js-vbox\" hidden>\r\n            <p class=\"vmsg js-vmsg\" role=\"status\"><\/p>\r\n            <div class=\"email-row\">\r\n              <input class=\"js-code\" type=\"text\" inputmode=\"numeric\" autocomplete=\"one-time-code\" maxlength=\"6\" placeholder=\"6-digit code\" aria-label=\"6-digit verification code\">\r\n              <button type=\"button\" class=\"btn btn-gold vbtn js-check-code\">Confirm code<\/button>\r\n            <\/div>\r\n            <p class=\"hint\">Didn't get it? Check your spam or promotions folder, or <button type=\"button\" class=\"linkbtn js-resend\">send a new code<\/button>.<\/p>\r\n          <\/div>\r\n          <p class=\"vok js-vok\" hidden><svg aria-hidden=\"true\" width=\"16\" height=\"16\"><use href=\"#sj-check\"\/><\/svg>Email verified <button type=\"button\" class=\"linkbtn js-change\">Change email<\/button><\/p>\r\n          <span class=\"hint js-vhint\" hidden>We'll email you a 6-digit code to confirm it's yours (works with Gmail, Yahoo, Outlook and any other email).<\/span>\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n        <\/div>\r\n        <div class=\"f c6\" data-req data-msg=\"Please enter your present address.\">\r\n          <label for=\"sj-addr\">Present address <span class=\"star\">*<\/span><\/label>\r\n          <input id=\"sj-addr\" name=\"sj_address\" type=\"text\" autocomplete=\"street-address\" placeholder=\"House \/ street \/ area\">\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n        <\/div>\r\n        <div class=\"f c2\" data-req data-msg=\"Please enter your city.\">\r\n          <label for=\"sj-city\">City <span class=\"star\">*<\/span><\/label>\r\n          <input id=\"sj-city\" name=\"sj_city\" type=\"text\" autocomplete=\"address-level2\">\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n        <\/div>\r\n        <div class=\"f c2\" data-req data-msg=\"Please enter your state.\">\r\n          <label for=\"sj-state\">State <span class=\"star\">*<\/span><\/label>\r\n          <input id=\"sj-state\" name=\"sj_state\" type=\"text\" autocomplete=\"address-level1\">\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n        <\/div>\r\n        <div class=\"f c2\" data-req data-msg=\"Please enter your PIN \/ ZIP code.\">\r\n          <label for=\"sj-pin\">PIN \/ ZIP <span class=\"star\">*<\/span><\/label>\r\n          <input id=\"sj-pin\" name=\"sj_pin\" type=\"text\" inputmode=\"numeric\" autocomplete=\"postal-code\">\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n        <\/div>\r\n        <div class=\"f c3\">\r\n          <label for=\"sj-country\">Country<\/label>\r\n          <input id=\"sj-country\" name=\"sj_country\" type=\"text\" autocomplete=\"country-name\" value=\"India\">\r\n        <\/div>\r\n        <div class=\"f c3\"><\/div>\r\n        <div class=\"f c3\">\r\n          <label for=\"sj-occ\">Occupation \/ designation<\/label>\r\n          <input id=\"sj-occ\" name=\"sj_occupation\" type=\"text\" autocomplete=\"organization-title\">\r\n        <\/div>\r\n        <div class=\"f c3\">\r\n          <label for=\"sj-org\">Company \/ organisation<\/label>\r\n          <input id=\"sj-org\" name=\"sj_company\" type=\"text\" autocomplete=\"organization\">\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- 4. Attendance -->\r\n    <div class=\"card\" data-sec=\"4\">\r\n      <div class=\"card-h\"><span class=\"num\" aria-hidden=\"true\">4<\/span><div><h3>Attendance &amp; family details<\/h3><p>So we can plan seating, meals and badges.<\/p><\/div><span class=\"done-tick\"><svg aria-hidden=\"true\" width=\"14\" height=\"14\"><use href=\"#sj-check\"\/><\/svg>Done<\/span><\/div>\r\n      <div class=\"grid\">\r\n        <fieldset class=\"f c6\" data-req data-msg=\"Please choose the day(s) you'll attend.\">\r\n          <legend>Days of attendance <span class=\"star\">*<\/span><\/legend>\r\n          <div class=\"opts\">\r\n            <label class=\"opt\"><input type=\"checkbox\" name=\"sj_days\" value=\"All three days\" data-all>All three days<\/label>\r\n            <label class=\"opt\"><input type=\"checkbox\" name=\"sj_days\" value=\"Day 1 (Wed 9th Dec)\">Day 1 <small>Wed 9th Dec<\/small><\/label>\r\n            <label class=\"opt\"><input type=\"checkbox\" name=\"sj_days\" value=\"Day 2 (Thu 10th Dec)\">Day 2 <small>Thu 10th Dec<\/small><\/label>\r\n            <label class=\"opt\"><input type=\"checkbox\" name=\"sj_days\" value=\"Day 3 (Fri 11th Dec)\">Day 3 <small>Fri 11th Dec<\/small><\/label>\r\n          <\/div>\r\n          <div class=\"day-info\" role=\"note\" aria-label=\"Which day is for which batches\">\r\n            <svg aria-hidden=\"true\" width=\"20\" height=\"20\"><use href=\"#sj-info\"\/><\/svg>\r\n            <div>\r\n              <b>Which day is for your batch?<\/b>\r\n              <ul>\r\n                <li data-day=\"1\"><span class=\"dtag\">Day 1<\/span><span><b>Wed 9th Dec:<\/b> batches from 2014 to 2026<\/span><\/li>\r\n                <li data-day=\"2\"><span class=\"dtag\">Day 2<\/span><span><b>Thu 10th Dec:<\/b> all batches up to 2013<\/span><\/li>\r\n                <li data-day=\"3\"><span class=\"dtag\">Day 3<\/span><span><b>Fri 11th Dec:<\/b> open to all batches for the Diamond Jubilee celebrations<\/span><\/li>\r\n              <\/ul>\r\n              <p class=\"day-mine js-day-mine\" hidden><\/p>\r\n              <p class=\"day-all\">Alumni are welcome to attend <b>all three days<\/b>; just tick &ldquo;All three days&rdquo; above.<\/p>\r\n            <\/div>\r\n          <\/div>\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n        <\/fieldset>\r\n        <fieldset class=\"f c6\" data-req data-msg=\"Please choose Yes or No.\">\r\n          <legend>Will family members be accompanying you? <span class=\"star\">*<\/span><\/legend>\r\n          <div class=\"opts\">\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_family\" value=\"Yes\">Yes<\/label>\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_family\" value=\"No\">No<\/label>\r\n          <\/div>\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n        <\/fieldset>\r\n        <div class=\"sub-block\" data-show-if=\"sj_family=Yes\" hidden>\r\n          <div class=\"f c3\" data-req data-msg=\"Please enter a number (0 or more).\">\r\n            <label for=\"sj-adults\">Adults <span class=\"hint\">(12+)<\/span> <span class=\"star\">*<\/span><\/label>\r\n            <input id=\"sj-adults\" name=\"sj_adults\" type=\"number\" inputmode=\"numeric\" min=\"0\" max=\"20\" placeholder=\"0\">\r\n            <span class=\"err\" role=\"alert\"><\/span>\r\n          <\/div>\r\n          <div class=\"f c3\" data-req data-msg=\"Please enter a number (0 or more).\">\r\n            <label for=\"sj-kids\">Children <span class=\"hint\">(under 12)<\/span> <span class=\"star\">*<\/span><\/label>\r\n            <input id=\"sj-kids\" name=\"sj_children\" type=\"number\" inputmode=\"numeric\" min=\"0\" max=\"20\" placeholder=\"0\">\r\n            <span class=\"err\" role=\"alert\"><\/span>\r\n          <\/div>\r\n          <div class=\"f c6\">\r\n            <label for=\"sj-fam-names\">Names of accompanying family members<\/label>\r\n            <textarea id=\"sj-fam-names\" name=\"sj_family_names\" rows=\"2\" placeholder=\"e.g. Anita (spouse), Rohan (son, 9)\"><\/textarea>\r\n          <\/div>\r\n        <\/div>\r\n        <fieldset class=\"travel c6\" aria-labelledby=\"sj-travel-h\">\r\n          <div class=\"travel-head\">\r\n            <span class=\"travel-badge\">Barbil Tours Travel Desk<\/span>\r\n            <h4 class=\"travel-title\" id=\"sj-travel-h\">Coming from out of town? <em>Let us handle the travel.<\/em><\/h4>\r\n            <p class=\"travel-sub\">Tick what you need and our helpdesk will plan it with you. Optional, no obligation.<\/p>\r\n          <\/div>\r\n          <div class=\"travel-opts\">\r\n            <label class=\"topt\"><input type=\"checkbox\" name=\"sj_travel\" value=\"Hotel stay\"><span class=\"ticon\"><svg aria-hidden=\"true\" width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.9\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 21V7l9-4 9 4v14\"\/><path d=\"M9 21v-6h6v6\"\/><path d=\"M8 10h.01M12 10h.01M16 10h.01\"\/><\/svg><\/span><span class=\"ttext\"><b>Hotel stay<\/b><small>Comfortable rooms near the school, booked for your dates<\/small><\/span><span class=\"tcheck\" aria-hidden=\"true\"><\/span><\/label>\r\n            <label class=\"topt\"><input type=\"checkbox\" name=\"sj_travel\" value=\"Airport \/ railway pickup\"><span class=\"ticon\"><svg aria-hidden=\"true\" width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.9\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 17h14M5 17a2 2 0 1 0 4 0M15 17a2 2 0 1 0 4 0\"\/><path d=\"M3 17v-4l2-5h12l3 5h1v4\"\/><path d=\"M6.5 8 8 12h10\"\/><\/svg><\/span><span class=\"ttext\"><b>Airport \/ railway pickup<\/b><small>A private car waiting for you, door to door<\/small><\/span><span class=\"tcheck\" aria-hidden=\"true\"><\/span><\/label>\r\n            <label class=\"topt\"><input type=\"checkbox\" name=\"sj_travel\" value=\"Local sightseeing\"><span class=\"ticon\"><svg aria-hidden=\"true\" width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.9\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 21s-7-6.2-7-11.5A7 7 0 0 1 19 9.5C19 14.8 12 21 12 21z\"\/><circle cx=\"12\" cy=\"9.5\" r=\"2.5\"\/><\/svg><\/span><span class=\"ttext\"><b>Local sightseeing<\/b><small>Revisit old haunts and see the region with a local guide<\/small><\/span><span class=\"tcheck\" aria-hidden=\"true\"><\/span><\/label>\r\n          <\/div>\r\n          <details class=\"travel-more\">\r\n            <summary><span class=\"tm-label\">Why Barbil Tours?<\/span><span class=\"tm-peek\">4.7&#9733; &middot; Door-to-door &middot; No obligation<\/span><svg class=\"tm-chev\" aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m6 9 6 6 6-6\"\/><\/svg><\/summary>\r\n          <ul class=\"travel-why\" aria-label=\"Why travel with Barbil Tours\">\r\n            <li><svg aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\"><path d=\"M12 2.6l2.9 6 6.6.8-4.9 4.5 1.3 6.5L12 17.1l-5.9 3.3 1.3-6.5L2.5 9.4l6.6-.8z\" fill=\"#E3C88F\"\/><\/svg><span><b>4.7&#9733; from 481 reviews<\/b> on Google, Tripadvisor &amp; GetYourGuide<\/span><\/li>\r\n            <li><svg aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#E3C88F\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 12l9-8 9 8\"\/><path d=\"M5 10v10h14V10\"\/><path d=\"M10 20v-6h4v6\"\/><\/svg><span><b>Door-to-door<\/b> pickup in private vehicles<\/span><\/li>\r\n            <li><svg aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#E3C88F\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12a8 8 0 0 1-11.6 7.1L4 20.5l1.4-4.9A8 8 0 1 1 21 12z\"\/><\/svg><span><b>One WhatsApp contact<\/b> for every question, before and during your trip<\/span><\/li>\r\n            <li><svg aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#E3C88F\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20.8 5.6a5.5 5.5 0 0 0-7.8 0L12 6.7l-1-1.1a5.5 5.5 0 0 0-7.8 7.8L12 22l8.8-8.6a5.5 5.5 0 0 0 0-7.8z\"\/><\/svg><span><b>Family-run team<\/b> that looks after every guest like family<\/span><\/li>\r\n            <li><svg aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#E3C88F\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20.6 13.4 13.4 20.6a2 2 0 0 1-2.8 0L3 13V3h10l7.6 7.6a2 2 0 0 1 0 2.8z\"\/><circle cx=\"7.5\" cy=\"7.5\" r=\"1.5\"\/><\/svg><span><b>No obligation:<\/b> we share options and prices before you book<\/span><\/li>\r\n          <\/ul>\r\n          <\/details>\r\n          <p class=\"travel-note js-travel-note\" hidden><svg aria-hidden=\"true\" width=\"16\" height=\"16\"><use href=\"#sj-check\"\/><\/svg>Great choice! A Barbil Tours helpdesk team member will contact you on WhatsApp and email after you register.<\/p>\r\n        <\/fieldset>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- 5. Participation -->\r\n    <div class=\"card\" data-sec=\"5\">\r\n      <div class=\"card-h\"><span class=\"num\" aria-hidden=\"true\">5<\/span><div><h3>Programme participation &amp; volunteering<\/h3><p>Share your talent, a memory or a helping hand.<\/p><\/div><span class=\"done-tick\"><svg aria-hidden=\"true\" width=\"14\" height=\"14\"><use href=\"#sj-check\"\/><\/svg>Done<\/span><\/div>\r\n      <div class=\"grid\">\r\n        <fieldset class=\"f c6\" data-req data-msg=\"Please choose one.\">\r\n          <legend>Are you willing to participate in or contribute to the reunion programme? <span class=\"star\">*<\/span><\/legend>\r\n          <div class=\"opts\">\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_part\" value=\"Yes\">Yes<\/label>\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_part\" value=\"No\">No<\/label>\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_part\" value=\"Maybe\">Maybe<\/label>\r\n          <\/div>\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n        <\/fieldset>\r\n        <div class=\"sub-block\" data-show-if=\"sj_part=Yes|Maybe\" hidden>\r\n          <fieldset class=\"f c6\" data-req data-msg=\"Please choose at least one.\">\r\n            <legend>In what capacity? <span class=\"star\">*<\/span><\/legend>\r\n            <div class=\"opts\">\r\n              <label class=\"opt\"><input type=\"checkbox\" name=\"sj_cap\" value=\"Stage performance\">Stage performance<\/label>\r\n              <label class=\"opt\"><input type=\"checkbox\" name=\"sj_cap\" value=\"Speech \/ reminiscence\">Speech \/ reminiscence<\/label>\r\n              <label class=\"opt\"><input type=\"checkbox\" name=\"sj_cap\" value=\"Volunteering\">Volunteering<\/label>\r\n              <label class=\"opt\"><input type=\"checkbox\" name=\"sj_cap\" value=\"Souvenir \/ article\">Souvenir \/ article<\/label>\r\n              <label class=\"opt\"><input type=\"checkbox\" name=\"sj_cap\" value=\"Other\">Other<\/label>\r\n            <\/div>\r\n            <span class=\"err\" role=\"alert\"><\/span>\r\n          <\/fieldset>\r\n          <div class=\"f c6\" data-req data-msg=\"Please describe the other contribution.\" data-show-if=\"sj_cap=Other\" hidden>\r\n            <label for=\"sj-cap-other\">Other contribution <span class=\"star\">*<\/span><\/label>\r\n            <input id=\"sj-cap-other\" name=\"sj_cap_other\" type=\"text\">\r\n            <span class=\"err\" role=\"alert\"><\/span>\r\n          <\/div>\r\n          <div class=\"f c6\">\r\n            <label for=\"sj-contrib\">Details of proposed contribution<\/label>\r\n            <textarea id=\"sj-contrib\" name=\"sj_contrib\" rows=\"3\" placeholder=\"e.g. A song with my 1990 batchmates, about 5 minutes\"><\/textarea>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- 6. Payment -->\r\n    <div class=\"card\" data-sec=\"6\">\r\n      <div class=\"card-h\"><span class=\"num\" aria-hidden=\"true\">6<\/span><div><h3>Patronage fee &amp; payment details<\/h3><p>Pay first, then enter your transaction reference below.<\/p><\/div><span class=\"done-tick\"><svg aria-hidden=\"true\" width=\"14\" height=\"14\"><use href=\"#sj-check\"\/><\/svg>Done<\/span><\/div>\r\n      <div class=\"note-box\"><svg aria-hidden=\"true\" width=\"20\" height=\"20\"><use href=\"#sj-info\"\/><\/svg><span>The patronage fee is for the alumnus only, not for accompanying family.<\/span><\/div>\r\n      <div class=\"grid\">\r\n        <fieldset class=\"f c6\" data-req data-msg=\"Please choose the patronage fee amount.\">\r\n          <legend>Patronage fee amount <span class=\"star\">*<\/span><\/legend>\r\n          <div class=\"opts\">\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_fee\" value=\"200\">&#8377;200<\/label>\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_fee\" value=\"400\">&#8377;400<\/label>\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_fee\" value=\"500\">&#8377;500<\/label>\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_fee\" value=\"800\">&#8377;800<\/label>\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_fee\" value=\"Other\">Other <small>(&#8377;500 &amp; above)<\/small><\/label>\r\n          <\/div>\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n        <\/fieldset>\r\n        <div class=\"f c3\" data-req data-min=\"500\" data-msg=\"Please enter an amount of &#8377;500 or more.\" data-show-if=\"sj_fee=Other\" hidden>\r\n          <label for=\"sj-fee-other\">Your amount <span class=\"star\">*<\/span><\/label>\r\n          <div class=\"rupee\"><input id=\"sj-fee-other\" name=\"sj_fee_other\" type=\"number\" inputmode=\"numeric\" min=\"500\" step=\"1\" placeholder=\"500\"><\/div>\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n        <\/div>\r\n        <fieldset class=\"f c6\" data-req data-msg=\"Please choose how you paid or will pay.\">\r\n          <legend>Mode of payment <span class=\"star\">*<\/span><\/legend>\r\n          <div class=\"opts\">\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_mode\" value=\"UPI \/ QR code\">UPI <small>(pay online now)<\/small><\/label>\r\n            <label class=\"opt\"><input type=\"radio\" name=\"sj_mode\" value=\"NEFT \/ IMPS\">NEFT \/ IMPS<\/label>\r\n          <\/div>\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n        <\/fieldset>\r\n\r\n        <!-- ===== EDIT YOUR PAYMENT DETAILS HERE =====\r\n             Replace each [ADD ...] with the real details. Until you do, visitors\r\n             see \"We'll send the payment details to you on WhatsApp\" instead.\r\n             UPI: only the UPI ID and payee name are needed. The QR code and the\r\n             \"Pay\" button are created automatically with the chosen amount. -->\r\n        <div class=\"pay-box pay-upi\" data-show-if=\"sj_mode=UPI \/ QR code\" hidden>\r\n          <h4>Pay online by UPI<\/h4>\r\n          <div class=\"pay-real\">\r\n            <p class=\"upi-wait js-upi-wait\">Choose the patronage fee amount above to get your payment link.<\/p>\r\n            <div class=\"upi-grid js-upi-ready\" hidden>\r\n              <div class=\"upi-qr-wrap\">\r\n                <div class=\"upi-qr js-qr\" aria-hidden=\"false\"><\/div>\r\n                <span class=\"hint\">Scan with any UPI app<\/span>\r\n              <\/div>\r\n              <div class=\"upi-side\">\r\n                <p class=\"upi-amt\">Amount <b class=\"js-amt\">&#8377;0<\/b><\/p>\r\n                <a class=\"btn btn-navy upi-btn js-upi-pay\" href=\"#\" hidden>Pay <span class=\"js-amt\">&#8377;0<\/span> now <span aria-hidden=\"true\">&rarr;<\/span><\/a>\r\n                <p class=\"hint upi-apps\">Google Pay, PhonePe, Paytm, BHIM or any bank's UPI app<\/p>\r\n                <dl class=\"upi-dl\">\r\n                  <dt>UPI ID<\/dt><dd><span class=\"js-upi\" data-mc=\"7407\">stmaryschoolbbl@sbi<\/span><button type=\"button\" class=\"copy js-copy-upi\">Copy<\/button><\/dd>\r\n                  <dt>Payee<\/dt><dd class=\"js-payee\">PRINCIPAL ST MARY SCH BBL SALA<\/dd>\r\n                  <dt>Reference<\/dt><dd class=\"js-tn\">&mdash;<\/dd>\r\n                <\/dl>\r\n              <\/div>\r\n            <\/div>\r\n            <p class=\"upi-after\">After paying, enter the <b>UTR \/ UPI reference number<\/b> from your UPI app below.<\/p>\r\n          <\/div>\r\n          <p class=\"pay-later\" hidden>We'll send the UPI payment link to you on WhatsApp after you register. You can add the UTR later.<\/p>\r\n        <\/div>\r\n        <div class=\"pay-box\" data-show-if=\"sj_mode=NEFT \/ IMPS\" hidden>\r\n          <h4>Pay by bank transfer (NEFT \/ IMPS)<\/h4>\r\n          <div class=\"pay-real pay-row\">\r\n            <dl>\r\n              <dt>Account name<\/dt><dd>St. Marys School<\/dd>\r\n              <dt>Account no.<\/dt><dd>11192571846 <button type=\"button\" class=\"copy\" data-copy=\"11192571846\">Copy<\/button><\/dd>\r\n              <dt>IFSC<\/dt><dd>SBIN0002011 <button type=\"button\" class=\"copy\" data-copy=\"SBIN0002011\">Copy<\/button><\/dd>\r\n              <dt>Bank &amp; branch<\/dt><dd>State Bank of India, Barbil<\/dd>\r\n            <\/dl>\r\n          <\/div>\r\n          <p class=\"pay-later\" hidden>We'll send the bank details to you on WhatsApp after you register. You can add the UTR later.<\/p>\r\n        <\/div>\r\n        <!-- ===== END OF PAYMENT DETAILS ===== -->\r\n\r\n        <div class=\"f c6\" data-utr data-show-if=\"sj_mode=UPI \/ QR code|NEFT \/ IMPS\" hidden>\r\n          <label for=\"sj-utr\"><span class=\"js-utr-label\">Transaction reference (UTR)<\/span> <span class=\"hint\">(optional until you've paid)<\/span><\/label>\r\n          <div class=\"utr-row\">\r\n            <input id=\"sj-utr\" name=\"sj_utr\" type=\"text\" autocomplete=\"off\" autocapitalize=\"characters\" spellcheck=\"false\" maxlength=\"24\" placeholder=\"\">\r\n            <span class=\"utr-count js-utr-count\" aria-live=\"polite\"><\/span>\r\n          <\/div>\r\n          <span class=\"hint js-utr-hint\"><\/span>\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n          <div class=\"note-box utr-note\"><svg aria-hidden=\"true\" width=\"20\" height=\"20\"><use href=\"#sj-info\"\/><\/svg><span><b>Haven't paid yet?<\/b> Leave this blank. You'll get a registration ID ending in <b>-PENDING_PAYMENT<\/b> and can add your UTR later on this page to change it to <b>CONFIRMED<\/b>. Your UTR will be verified offline against the school's bank statement. If it can't be matched, we'll let you know on WhatsApp or email.<\/span><\/div>\r\n        <\/div>\r\n        <div class=\"f c6\" data-show-if=\"sj_mode=UPI \/ QR code|NEFT \/ IMPS\" hidden>\r\n          <span class=\"lab\">Payment receipt \/ screenshot <span class=\"badge opt-b\">Optional<\/span><\/span>\r\n          <label class=\"drop\" data-file=\"sj_receipt\">\r\n            <input type=\"file\" name=\"sj_receipt\" accept=\"image\/*,application\/pdf\" aria-label=\"Upload your payment receipt or screenshot\">\r\n            <svg aria-hidden=\"true\" width=\"28\" height=\"28\"><use href=\"#sj-up\"\/><\/svg>\r\n            <span><b>Upload receipt or screenshot<\/b><span>Photo or PDF, up to 5 MB<\/span><\/span>\r\n          <\/label>\r\n          <div class=\"file-ok\" data-ok=\"sj_receipt\" hidden><svg aria-hidden=\"true\" width=\"18\" height=\"18\"><use href=\"#sj-check\"\/><\/svg><span><\/span><button type=\"button\" class=\"js-remove\" data-for=\"sj_receipt\">Remove<\/button><\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- Declaration -->\r\n    <div class=\"card\" data-sec=\"7\">\r\n      <fieldset class=\"f\" data-req data-msg=\"Please confirm the declaration.\">\r\n        <legend class=\"lab\" style=\"margin-bottom:9px\">Declaration <span class=\"star\">*<\/span><\/legend>\r\n        <label class=\"decl\"><input type=\"checkbox\" name=\"sj_declare\" value=\"yes\">I confirm that the details provided above are true and complete.<\/label>\r\n        <span class=\"err\" role=\"alert\"><\/span>\r\n      <\/fieldset>\r\n      <div class=\"grid\">\r\n        <div class=\"f c4\" data-req data-msg=\"Please type your full name as your signature.\">\r\n          <label for=\"sj-sign\">Signature <span class=\"hint\">(type your full name)<\/span> <span class=\"star\">*<\/span><\/label>\r\n          <input id=\"sj-sign\" class=\"sign\" name=\"sj_sign\" type=\"text\" autocomplete=\"off\">\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n        <\/div>\r\n        <div class=\"f c2\">\r\n          <label for=\"sj-date\">Date<\/label>\r\n          <input id=\"sj-date\" name=\"sj_date\" type=\"text\" readonly tabindex=\"-1\">\r\n        <\/div>\r\n        <div class=\"f c3\" data-req data-captcha data-msg=\"Please answer the quick check.\" hidden>\r\n          <label for=\"sj-cap\">Quick check: <span class=\"js-capq\">&hellip;<\/span> <span class=\"star\">*<\/span><\/label>\r\n          <div class=\"email-row\">\r\n            <input id=\"sj-cap\" type=\"text\" inputmode=\"numeric\" autocomplete=\"off\" maxlength=\"3\" placeholder=\"Answer\">\r\n            <button type=\"button\" class=\"linkbtn js-cap-new\">New question<\/button>\r\n          <\/div>\r\n          <span class=\"err\" role=\"alert\"><\/span>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"fail\" role=\"alert\" tabindex=\"-1\">\r\n        <b>Your registration wasn't sent yet<\/b>\r\n        <p class=\"fail-msg\">Something went wrong.<\/p>\r\n        <div class=\"acts\">\r\n          <a class=\"btn wa js-wa-fallback\" href=\"https:\/\/wa.me\/14257369700\" target=\"_blank\" rel=\"noopener\">Send on WhatsApp instead<\/a>\r\n          <button type=\"button\" class=\"btn btn-line js-copy-summary\">Copy my details<\/button>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"submit-row\">\r\n        <button type=\"submit\" class=\"btn btn-gold\">Submit registration <span aria-hidden=\"true\">&#8594;<\/span><\/button>\r\n        <small>You'll get a registration ID straight away.<\/small>\r\n        <p class=\"draft\" hidden>Your answers are saved on this device as you type. <button type=\"button\" class=\"js-clear\">Start over<\/button><\/p>\r\n      <\/div>\r\n    <\/div>\r\n  <\/form>\r\n\r\n  <div class=\"done\" tabindex=\"-1\" hidden>\r\n    <div class=\"medal\"><svg aria-hidden=\"true\" width=\"38\" height=\"38\"><use href=\"#sj-check\"\/><\/svg><\/div>\r\n    <h2 class=\"done-title\">You're registered!<\/h2>\r\n    <div class=\"regid\"><small>Registration ID<\/small><b class=\"js-regid\">&#8212;<\/b><span class=\"status js-status\"><\/span><\/div>\r\n    <p class=\"done-msg\">Thank you for registering for the Diamond Jubilee Alumni Reunion. We'll confirm your registration and share updates on WhatsApp and email.<\/p>\r\n    <div class=\"upi-done js-done-pay\" hidden>\r\n      <h3>Complete your payment: <span class=\"js-amt\">&#8377;0<\/span><\/h3>\r\n      <a class=\"btn btn-navy upi-btn js-done-upi\" href=\"#\" hidden>Pay <span class=\"js-amt\">&#8377;0<\/span> by UPI <span aria-hidden=\"true\">&rarr;<\/span><\/a>\r\n      <div class=\"upi-qr js-done-qr\"><\/div>\r\n      <span class=\"hint\">Scan with any UPI app. Reference: <b class=\"js-tn\"><\/b><\/span>\r\n    <\/div>\r\n    <a class=\"btn btn-gold js-later\" href=\"#jubilee-payment\" hidden>I've paid: add my UTR <span aria-hidden=\"true\">&rarr;<\/span><\/a>\r\n    <div class=\"helpdesk js-helpdesk\" hidden><span class=\"ticon\"><svg aria-hidden=\"true\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#E3C88F\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12a8 8 0 0 1-11.6 7.1L4 20.5l1.4-4.9A8 8 0 1 1 21 12z\"\/><\/svg><\/span><div><b>Barbil Tours Travel Desk will be in touch<\/b><p class=\"js-helpdesk-msg\"><\/p><\/div><\/div>\r\n    <div class=\"note-box js-verify-note\" hidden><svg aria-hidden=\"true\" width=\"20\" height=\"20\"><use href=\"#sj-info\"\/><\/svg><span>Your UTR will be verified offline against the school's bank statement. If it can't be matched, we'll let you know on WhatsApp or email.<\/span><\/div>\r\n    <dl class=\"js-sum\"><\/dl>\r\n    <div class=\"acts\">\r\n      <a class=\"btn wa js-done-wa\" href=\"#\" target=\"_blank\" rel=\"noopener\">Send a copy on WhatsApp<\/a>\r\n      <button type=\"button\" class=\"btn btn-line js-print\">Print \/ save as PDF<\/button>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- Add a payment reference (UTR) after registering -->\r\n<section class=\"wrap upd\" id=\"jubilee-payment\" aria-labelledby=\"sj-upd-h\" hidden>\r\n  <form class=\"card upd-card\" id=\"sj-upd\" novalidate>\r\n    <div class=\"card-h\"><span class=\"num\" aria-hidden=\"true\">&#8377;<\/span><div><h3 id=\"sj-upd-h\">Already registered? Add your payment reference<\/h3><p>Paid after registering? Enter your UTR to change your status from PENDING_PAYMENT to CONFIRMED.<\/p><\/div><\/div>\r\n    <div class=\"grid\">\r\n      <div class=\"f c3\" data-u=\"id\" data-msg=\"Please enter your registration ID, e.g. SMS-BBL-1992-001-PENDING_PAYMENT.\">\r\n        <label for=\"sj-u-id\">Registration ID <span class=\"star\">*<\/span><\/label>\r\n        <input id=\"sj-u-id\" type=\"text\" autocomplete=\"off\" autocapitalize=\"characters\" spellcheck=\"false\" placeholder=\"SMS-BBL-1992-001-PENDING_PAYMENT\">\r\n        <span class=\"err\" role=\"alert\"><\/span>\r\n      <\/div>\r\n      <div class=\"f c3\" data-u=\"email\" data-msg=\"Please enter the email you registered with.\">\r\n        <label for=\"sj-u-email\">Email you registered with <span class=\"star\">*<\/span><\/label>\r\n        <input id=\"sj-u-email\" type=\"email\" autocomplete=\"email\" placeholder=\"you@example.com\">\r\n        <span class=\"err\" role=\"alert\"><\/span>\r\n      <\/div>\r\n      <fieldset class=\"f c6\" data-u=\"mode\" data-msg=\"Please choose how you paid.\">\r\n        <legend>How did you pay? <span class=\"star\">*<\/span><\/legend>\r\n        <div class=\"opts\">\r\n          <label class=\"opt\"><input type=\"radio\" name=\"sj_u_mode\" value=\"UPI \/ QR code\">UPI<\/label>\r\n          <label class=\"opt\"><input type=\"radio\" name=\"sj_u_mode\" value=\"NEFT \/ IMPS\">NEFT \/ IMPS<\/label>\r\n        <\/div>\r\n        <span class=\"err\" role=\"alert\"><\/span>\r\n      <\/fieldset>\r\n      <div class=\"f c6\" data-u=\"utr\">\r\n        <label for=\"sj-u-utr\"><span class=\"js-u-label\">Transaction reference (UTR)<\/span> <span class=\"star\">*<\/span><\/label>\r\n        <div class=\"utr-row\">\r\n          <input id=\"sj-u-utr\" type=\"text\" autocomplete=\"off\" autocapitalize=\"characters\" spellcheck=\"false\" maxlength=\"24\" placeholder=\"Choose how you paid first\">\r\n          <span class=\"utr-count js-u-count\" aria-live=\"polite\"><\/span>\r\n        <\/div>\r\n        <span class=\"hint js-u-hint\"><\/span>\r\n        <span class=\"err\" role=\"alert\"><\/span>\r\n      <\/div>\r\n    <\/div>\r\n    <p class=\"hint upd-pay\">Not paid yet? UPI: <b>stmaryschoolbbl@sbi<\/b> &middot; Bank transfer: St. Marys School, A\/c <b>11192571846<\/b>, IFSC <b>SBIN0002011<\/b>, State Bank of India, Barbil.<\/p>\r\n    <div class=\"note-box\"><svg aria-hidden=\"true\" width=\"20\" height=\"20\"><use href=\"#sj-info\"\/><\/svg><span>Your UTR will be verified offline against the school's bank statement. If it can't be matched, we'll let you know on WhatsApp or email.<\/span><\/div>\r\n    <div class=\"upd-result js-u-result\" role=\"status\" tabindex=\"-1\" hidden><\/div>\r\n    <div class=\"submit-row\"><button type=\"submit\" class=\"btn btn-navy js-u-send\">Update my registration<\/button><\/div>\r\n  <\/form>\r\n<\/section>\r\n\r\n<!-- Help -->\r\n<section class=\"help\" aria-label=\"Help with registration\">\r\n  <div class=\"wrap help-in\">\r\n    <p><b>Questions about registering?<\/b> Message us, we're happy to help.<\/p>\r\n    <div class=\"acts\">\r\n      <button type=\"button\" class=\"btn btn-navy js-help-open\">Registration guide<\/button>\r\n      <a class=\"btn wa\" href=\"https:\/\/wa.me\/14257369700?text=Hi!%20I%20have%20a%20question%20about%20the%20St.%20Mary%27s%20Diamond%20Jubilee%20registration.\" target=\"_blank\" rel=\"noopener\">WhatsApp us<\/a>\r\n      <a class=\"btn btn-line\" href=\"mailto:barbiltours@gmail.com?subject=Diamond%20Jubilee%20registration\">Email us<\/a>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n\r\n<!-- Registration Help Desk: floating button + guide panel -->\r\n<button type=\"button\" class=\"help-fab js-help-open\" aria-haspopup=\"dialog\"><svg aria-hidden=\"true\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"9.5\"\/><path d=\"M9.3 9.2a2.8 2.8 0 0 1 5.4 1c0 1.9-2.7 2.5-2.7 2.5M12 16.8v.01\"\/><\/svg><span>Help<\/span><\/button>\r\n<dialog class=\"hd\" id=\"sj-help\" aria-labelledby=\"sj-help-h\">\r\n  <div class=\"hd-head\">\r\n    <div><span class=\"eyebrow\">Registration Help Desk<\/span><h2 id=\"sj-help-h\">How to register, step by step<\/h2><\/div>\r\n    <button type=\"button\" class=\"hd-x js-help-close\" aria-label=\"Close help\">&times;<\/button>\r\n  <\/div>\r\n  <div class=\"hd-body\">\r\n    <ol class=\"hd-flow\" aria-label=\"Registration in four steps\">\r\n      <li><b>1<\/b>Fill in the form<\/li><li><b>2<\/b>Verify email<\/li><li><b>3<\/b>Submit<\/li><li><b>4<\/b>Pay &amp; add UTR<\/li>\r\n    <\/ol>\r\n    <p class=\"hd-lead\">Registering takes about 5 minutes. You can pay now or later: without a UTR your ID ends in <b style=\"white-space:nowrap\">-PENDING_PAYMENT<\/b>; once you add it, your status becomes <b>CONFIRMED<\/b>.<\/p>\r\n    <details open><summary>Before you start<\/summary>\r\n      <ul><li><b>Access to your email inbox<\/b> for a 6-digit code (Gmail, Yahoo, Outlook and others all work).<\/li><li><b>Your batch year<\/b>: the year you left or passed out.<\/li><li><b>A recent passport-size photo<\/b> (optional but recommended).<\/li><li><b>Your payment reference (UTR)<\/b> if you've already paid. If not, you can add it later.<\/li><\/ul>\r\n      <p>Your answers are saved on this device as you type, so you can come back later.<\/p>\r\n    <\/details>\r\n    <details><summary>Filling in the form<\/summary>\r\n      <ol><li><b>Personal details:<\/b> name, maiden name if any, date of birth, gender, citizenship and an optional photo.<\/li><li><b>School:<\/b> choose your batch year (1966 to 2026) and highest class completed.<\/li><li><b>Contact:<\/b> WhatsApp number with country code (e.g. +91 98765 43210), then verify your email, and your address.<\/li><li><b>Attendance:<\/b> the day(s) you'll attend (9th, 10th, 11th December or all three; see which days are for your batch) and any family coming with you.<\/li><li><b>Programme:<\/b> whether you'd like to perform, speak, volunteer or write for the souvenir.<\/li><li><b>Fee &amp; payment:<\/b> &#8377;200, &#8377;400, &#8377;500, &#8377;800 or another amount of &#8377;500 or more, then UPI or NEFT \/ IMPS. The fee is for the alumnus only.<\/li><li><b>Declaration:<\/b> tick it, check your typed signature, answer the quick check and tap <b>Submit registration<\/b>.<\/li><\/ol>\r\n      <p>A green <b>Done<\/b> tick appears on each completed section. If something is missing, the page takes you to it.<\/p>\r\n    <\/details>\r\n    <details><summary>Verifying your email &amp; the quick check<\/summary>\r\n      <ol><li>Type your email and tap <b>Verify email<\/b>.<\/li><li>Find the email \"Your verification code\" from Barbil Tours (check spam or promotions too).<\/li><li>Type the 6 digits. You'll see <b>Email verified<\/b>.<\/li><\/ol>\r\n      <p>Codes expire after 15 minutes. Use <b>send a new code<\/b> if needed. The quick check above the Submit button is a simple sum; tap <b>New question<\/b> for a different one.<\/p>\r\n    <\/details>\r\n    <details><summary>Paying the patronage fee &amp; UTR formats<\/summary>\r\n      <p><b>UPI:<\/b> stmaryschoolbbl@sbi (shows as PRINCIPAL ST MARY SCH BBL SALA). On a phone tap <b>Pay now<\/b>; on a computer scan the QR code.<br><b>NEFT \/ IMPS:<\/b> St. Marys School, A\/c 11192571846, IFSC SBIN0002011, State Bank of India, Barbil.<\/p>\r\n      <table class=\"hd-table\"><thead><tr><th>Payment<\/th><th>Reference (UTR) format<\/th><th>Example<\/th><\/tr><\/thead><tbody>\r\n        <tr><td>UPI<\/td><td>12 characters, usually digits<\/td><td>412345678901<\/td><\/tr>\r\n        <tr><td>IMPS<\/td><td>12 digits<\/td><td>412345678901<\/td><\/tr>\r\n        <tr><td>NEFT<\/td><td>16 characters: bank code + N + year + day + number<\/td><td>SBINN26291123456<\/td><\/tr>\r\n      <\/tbody><\/table>\r\n      <p>Every UTR is verified offline against the school's bank statement. If it can't be matched, we'll contact you on WhatsApp or email.<\/p>\r\n    <\/details>\r\n    <details><summary>Your registration ID &amp; status<\/summary>\r\n      <table class=\"hd-table\"><thead><tr><th>You submitted<\/th><th>Registration ID<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n        <tr><td>With a UTR<\/td><td>SMS-BBL-1992-001<\/td><td><span class=\"hd-ok\">CONFIRMED<\/span><\/td><\/tr>\r\n        <tr><td>Without a UTR<\/td><td>SMS-BBL-1992-001-PENDING_PAYMENT<\/td><td><span class=\"hd-pend\">PENDING_PAYMENT<\/span><\/td><\/tr>\r\n      <\/tbody><\/table>\r\n      <p>Keep your registration ID. You can send a copy to WhatsApp or save it as a PDF from the confirmation screen.<\/p>\r\n    <\/details>\r\n    <details><summary>Adding your UTR later<\/summary>\r\n      <ol><li>Pay by UPI or bank transfer.<\/li><li>Open <b>Already registered? Add your payment reference<\/b> on this page.<\/li><li>Enter your registration ID and the email you registered with.<\/li><li>Choose how you paid, enter the UTR and tap <b>Update my registration<\/b>.<\/li><\/ol>\r\n      <p><a href=\"#jubilee-payment\" class=\"js-help-close\">Go to \"Add your payment reference\" &rarr;<\/a><\/p>\r\n    <\/details>\r\n    <details><summary>Travel &amp; stay help<\/summary>\r\n      <p>Tick <b>Hotel stay<\/b>, <b>Airport \/ railway pickup<\/b> or <b>Local sightseeing<\/b> in section 4. A Barbil Tours helpdesk team member will contact you on WhatsApp and email, sharing options and prices before anything is booked.<\/p>\r\n    <\/details>\r\n    <details><summary>Troubleshooting<\/summary>\r\n      <table class=\"hd-table\"><thead><tr><th>Problem<\/th><th>What to do<\/th><\/tr><\/thead><tbody>\r\n        <tr><td>\"Please verify your email\"<\/td><td>Tap <b>Verify email<\/b> and enter the 6-digit code.<\/td><\/tr>\r\n        <tr><td>Code didn't arrive<\/td><td>Wait a minute, check spam, check the spelling, then <b>send a new code<\/b>.<\/td><\/tr>\r\n        <tr><td>Code wrong or expired<\/td><td>Use the newest code; request a new one after 5 tries or 15 minutes.<\/td><\/tr>\r\n        <tr><td>Quick check rejected<\/td><td>Answer the new question and submit again.<\/td><\/tr>\r\n        <tr><td>UTR error<\/td><td>UPI and IMPS: 12 characters. NEFT: 16. Or leave it blank and add it later.<\/td><\/tr>\r\n        <tr><td>UPI Pay button does nothing<\/td><td>It works on phones with a UPI app. On a computer, scan the QR code.<\/td><\/tr>\r\n        <tr><td>Photo or receipt won't upload<\/td><td>Use a JPG, PNG or PDF under 5 MB.<\/td><\/tr>\r\n        <tr><td>\"Registration wasn't sent\" (Code A1, A2, B, C, E or F)<\/td><td>Tap <b>Send on WhatsApp instead<\/b>, or try again later. Your answers are kept.<\/td><\/tr>\r\n        <tr><td>Code D<\/td><td>The message after \"Code D\" says what to fix.<\/td><\/tr>\r\n      <\/tbody><\/table>\r\n    <\/details>\r\n  <\/div>\r\n  <div class=\"hd-foot\">\r\n    <span>Still stuck? Our team will help.<\/span>\r\n    <a class=\"btn wa\" href=\"https:\/\/wa.me\/14257369700?text=Hi!%20I%20need%20help%20with%20the%20St.%20Mary%27s%20Diamond%20Jubilee%20registration.\" target=\"_blank\" rel=\"noopener\">WhatsApp us<\/a>\r\n    <a class=\"btn btn-line\" href=\"mailto:barbiltours@gmail.com?subject=Help%20with%20Diamond%20Jubilee%20registration\">Email us<\/a>\r\n  <\/div>\r\n<\/dialog>\r\n<script data-no-optimize=\"1\" data-no-defer=\"1\" data-no-minify=\"1\" data-noptimize=\"1\" data-cfasync=\"false\" data-pagespeed-no-defer nowprocket>\r\n(function () {\r\n  window.sjLoaded = true;\r\n  var me = document.currentScript;\r\n  function start() {\r\n    if (window.sjReady || window.sjTried) return;\r\n    if (!document.getElementById('sj-form')) return;       \/\/ page not ready yet: try again later\r\n    window.sjTried = true;\r\n    try { run(); } catch (err) {\r\n      window.sjError = (err && err.message) ? err.message : String(err);\r\n      if (window.console) console.error('Jubilee registration script error', err);\r\n    }\r\n  }\r\n  window.sjStart = start;\r\n  \/\/ ---------- Tiny QR code maker (byte mode, error correction M, versions 1-10) ----------\r\n  var sjQR = (function () {\r\n    var EC = [0, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26];               \/\/ EC codewords per block\r\n    var BLK = [0, [[1, 16]], [[1, 28]], [[1, 44]], [[2, 32]], [[2, 43]], [[4, 27]], [[4, 31]], [[2, 38], [2, 39]], [[3, 36], [2, 37]], [[4, 43], [1, 44]]];\r\n    var ALN = [0, [], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50]];\r\n    var EXP = [], LOG = [];\r\n    (function () { var x = 1; for (var i = 0; i < 255; i++) { EXP[i] = x; LOG[x] = i; x <<= 1; if (x & 256) x ^= 0x11d; } for (i = 255; i < 512; i++) EXP[i] = EXP[i - 255]; })();\r\n    function mul(a, b) { return a && b ? EXP[LOG[a] + LOG[b]] : 0; }\r\n    function rsGen(n) { var g = [1]; for (var i = 0; i < n; i++) { var r = []; for (var j = 0; j <= g.length; j++) r[j] = (j < g.length ? g[j] : 0) ^ (j > 0 ? mul(g[j - 1], EXP[i]) : 0); g = r; } return g; }\r\n    function rs(data, n) {\r\n      var g = rsGen(n), r = data.concat(new Array(n).fill(0));\r\n      for (var i = 0; i < data.length; i++) { var c = r[i]; if (c) for (var j = 0; j < g.length; j++) r[i + j] ^= mul(g[j], c); }\r\n      return r.slice(data.length);\r\n    }\r\n    function utf8(s) { var b = [], u = unescape(encodeURIComponent(s)); for (var i = 0; i < u.length; i++) b.push(u.charCodeAt(i)); return b; }\r\n    return function (text) {\r\n      var bytes = utf8(text), ver = 0, cap;\r\n      for (var v = 1; v <= 10; v++) {\r\n        cap = BLK[v].reduce(function (s, g) { return s + g[0] * g[1]; }, 0);\r\n        if (4 + (v < 10 ? 8 : 16) + bytes.length * 8 <= cap * 8) { ver = v; break; }\r\n      }\r\n      if (!ver) return null;\r\n      \/\/ Data bits\r\n      var bits = [];\r\n      function put(val, len) { for (var i = len - 1; i >= 0; i--) bits.push((val >>> i) & 1); }\r\n      put(4, 4); put(bytes.length, ver < 10 ? 8 : 16);\r\n      bytes.forEach(function (b) { put(b, 8); });\r\n      put(0, Math.min(4, cap * 8 - bits.length));\r\n      while (bits.length % 8) bits.push(0);\r\n      var data = [];\r\n      for (var i = 0; i < bits.length; i += 8) { var x = 0; for (var k = 0; k < 8; k++) x = (x << 1) | bits[i + k]; data.push(x); }\r\n      for (var p = 0; data.length < cap; p++) data.push(p % 2 ? 0x11 : 0xEC);\r\n      \/\/ Blocks + interleave\r\n      var blocks = [], ecs = [], pos = 0;\r\n      BLK[ver].forEach(function (g) { for (var n = 0; n < g[0]; n++) { var d = data.slice(pos, pos + g[1]); pos += g[1]; blocks.push(d); ecs.push(rs(d, EC[ver])); } });\r\n      var code = [], maxD = Math.max.apply(null, blocks.map(function (b) { return b.length; }));\r\n      for (i = 0; i < maxD; i++) blocks.forEach(function (b) { if (i < b.length) code.push(b[i]); });\r\n      for (i = 0; i < EC[ver]; i++) ecs.forEach(function (e) { code.push(e[i]); });\r\n      \/\/ Matrix\r\n      var N = ver * 4 + 17, M = [], F = [];\r\n      for (i = 0; i < N; i++) { M.push(new Array(N).fill(false)); F.push(new Array(N).fill(false)); }\r\n      function set(r, c, on) { M[r][c] = on; F[r][c] = true; }\r\n      function finder(r, c) {\r\n        for (var dr = -1; dr <= 7; dr++) for (var dc = -1; dc <= 7; dc++) {\r\n          var rr = r + dr, cc = c + dc; if (rr < 0 || cc < 0 || rr >= N || cc >= N) continue;\r\n          var on = dr >= 0 && dr <= 6 && dc >= 0 && dc <= 6 && (dr === 0 || dr === 6 || dc === 0 || dc === 6 || (dr >= 2 && dr <= 4 && dc >= 2 && dc <= 4));\r\n          set(rr, cc, on);\r\n        }\r\n      }\r\n      finder(0, 0); finder(0, N - 7); finder(N - 7, 0);\r\n      for (i = 8; i < N - 8; i++) { set(6, i, i % 2 === 0); set(i, 6, i % 2 === 0); }\r\n      var A = ALN[ver];\r\n      A.forEach(function (r) { A.forEach(function (c) {\r\n        if ((r === 6 && c === 6) || (r === 6 && c === A[A.length - 1]) || (r === A[A.length - 1] && c === 6)) return;\r\n        for (var dr = -2; dr <= 2; dr++) for (var dc = -2; dc <= 2; dc++) set(r + dr, c + dc, Math.max(Math.abs(dr), Math.abs(dc)) !== 1);\r\n      }); });\r\n      \/\/ Reserve format + version areas\r\n      for (i = 0; i < 9; i++) { F[8][i] = F[i][8] = true; }\r\n      for (i = 0; i < 8; i++) { F[8][N - 1 - i] = F[N - 1 - i][8] = true; }\r\n      set(N - 8, 8, true);\r\n      if (ver >= 7) {\r\n        var vb = ver; for (i = 0; i < 12; i++) vb = (vb << 1) ^ ((vb >>> 11) * 0x1F25);\r\n        var vbits = (ver << 12) | vb;\r\n        for (i = 0; i < 18; i++) { var bit = ((vbits >>> i) & 1) === 1, a = N - 11 + i % 3, b = Math.floor(i \/ 3); set(a, b, bit); set(b, a, bit); }\r\n      }\r\n      \/\/ Place data (zigzag)\r\n      var all = []; code.forEach(function (c) { for (var k = 7; k >= 0; k--) all.push((c >>> k) & 1); });\r\n      var idx = 0;\r\n      for (var right = N - 1; right >= 1; right -= 2) {\r\n        if (right === 6) right = 5;\r\n        for (var vert = 0; vert < N; vert++) for (var j = 0; j < 2; j++) {\r\n          var c2 = right - j, up = ((right + 1) & 2) === 0, r2 = up ? N - 1 - vert : vert;\r\n          if (!F[r2][c2]) { M[r2][c2] = idx < all.length ? all[idx] === 1 : false; idx++; }\r\n        }\r\n      }\r\n      function maskFn(m, r, c) {\r\n        switch (m) {\r\n          case 0: return (r + c) % 2 === 0; case 1: return r % 2 === 0; case 2: return c % 3 === 0; case 3: return (r + c) % 3 === 0;\r\n          case 4: return (Math.floor(r \/ 2) + Math.floor(c \/ 3)) % 2 === 0; case 5: return r * c % 2 + r * c % 3 === 0;\r\n          case 6: return (r * c % 2 + r * c % 3) % 2 === 0; default: return ((r + c) % 2 + r * c % 3) % 2 === 0;\r\n        }\r\n      }\r\n      function format(G, m) {\r\n        var d = (0 << 3) | m, rem = d;                                   \/\/ level M = 00\r\n        for (var k = 0; k < 10; k++) rem = (rem << 1) ^ ((rem >>> 9) * 0x537);\r\n        var f = ((d << 10) | rem) ^ 0x5412;\r\n        function b(k) { return ((f >>> k) & 1) === 1; }\r\n        for (k = 0; k <= 5; k++) G[k][8] = b(k);\r\n        G[7][8] = b(6); G[8][8] = b(7); G[8][7] = b(8);\r\n        for (k = 9; k < 15; k++) G[8][14 - k] = b(k);\r\n        for (k = 0; k < 8; k++) G[8][N - 1 - k] = b(k);\r\n        for (k = 8; k < 15; k++) G[N - 15 + k][8] = b(k);\r\n        G[N - 8][8] = true;\r\n      }\r\n      function penalty(G) {\r\n        var s = 0, r, c, k;\r\n        for (var pass = 0; pass < 2; pass++) for (r = 0; r < N; r++) {\r\n          var run = 1, line = [];\r\n          for (c = 0; c < N; c++) line.push(pass ? G[c][r] : G[r][c]);\r\n          for (c = 1; c < N; c++) { if (line[c] === line[c - 1]) { run++; if (run === 5) s += 3; else if (run > 5) s++; } else run = 1; }\r\n          var str = line.map(function (x) { return x ? 1 : 0; }).join('');\r\n          k = -1; while ((k = str.indexOf('1011101', k + 1)) > -1) { if (str.substr(k - 4, 4) === '0000' || str.substr(k + 7, 4) === '0000') s += 40; }\r\n        }\r\n        for (r = 0; r < N - 1; r++) for (c = 0; c < N - 1; c++) { var v0 = G[r][c]; if (v0 === G[r][c + 1] && v0 === G[r + 1][c] && v0 === G[r + 1][c + 1]) s += 3; }\r\n        var dark = 0; for (r = 0; r < N; r++) for (c = 0; c < N; c++) if (G[r][c]) dark++;\r\n        s += Math.floor(Math.abs(dark * 20 - N * N * 10) \/ (N * N)) * 10;\r\n        return s;\r\n      }\r\n      var best = null, bestScore = Infinity;\r\n      for (var m = 0; m < 8; m++) {\r\n        var G = M.map(function (row, r) { return row.map(function (on, c) { return F[r][c] ? on : (on !== maskFn(m, r, c)); }); });\r\n        format(G, m);\r\n        var sc = penalty(G);\r\n        if (sc < bestScore) { bestScore = sc; best = G; }\r\n      }\r\n      return best;\r\n    };\r\n  })();\r\n  function qrSvg(text, px) {\r\n    var m = sjQR(text); if (!m) return '';\r\n    var n = m.length, q = 4, size = n + q * 2, d = '';\r\n    for (var r = 0; r < n; r++) for (var c = 0; c < n; c++) if (m[r][c]) d += 'M' + (c + q) + ' ' + (r + q) + 'h1v1h-1z';\r\n    return '<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 ' + size + ' ' + size + '\" width=\"' + (px || 180) + '\" height=\"' + (px || 180) + '\" shape-rendering=\"crispEdges\" role=\"img\" aria-label=\"UPI QR code\"><rect width=\"' + size + '\" height=\"' + size + '\" fill=\"#fff\"\/><path d=\"' + d + '\" fill=\"#000\"\/><\/svg>';\r\n  }\r\n\r\n\r\n  function run() {\r\n  var form = document.getElementById('sj-form');\r\n  var root = (me && me.closest && me.closest('.sj')) || form.closest('.sj');\r\n  if (!root || !root.contains(form)) root = form.closest('.sj');\r\n  function $(s, c) { return (c || root).querySelector(s); }\r\n  function $$(s, c) { return Array.prototype.slice.call((c || root).querySelectorAll(s)); }\r\n  var WA = (root.getAttribute('data-wa') || '14257369700').replace(\/\\D\/g, '');\r\n  var DRAFT_KEY = 'sjJubileeDraft2026';\r\n  var MAX_BYTES = 5 * 1024 * 1024;\r\n\r\n  \/\/ ---------- Countdown to 9 December 2026 (India time) ----------\r\n  var cd = $('.countdown');\r\n  var EVENT = new Date('2026-12-09T09:00:00+05:30').getTime();\r\n  function pad(n) { return (n < 10 ? '0' : '') + n; }\r\n  function tick() {\r\n    var ms = EVENT - Date.now();\r\n    if (!cd) return;\r\n    if (ms <= 0) { cd.hidden = true; return; }\r\n    var m = Math.floor(ms \/ 60000);\r\n    $('[data-cd=d]', cd).textContent = Math.floor(m \/ 1440);\r\n    $('[data-cd=h]', cd).textContent = pad(Math.floor(m % 1440 \/ 60));\r\n    $('[data-cd=m]', cd).textContent = pad(m % 60);\r\n    cd.hidden = false;\r\n  }\r\n  tick(); setInterval(tick, 30000);\r\n\r\n  \/\/ ---------- Memory Lane album ----------\r\n  (function () {\r\n    var band = $('.js-album');\r\n    if (!band) return;\r\n    var items = $$('.js-album-photos li', band).filter(function (li) { return \/^https?:\\\/\\\/\/.test(li.getAttribute('data-src') || ''); });\r\n    if (!items.length) return;\r\n    band.hidden = false;\r\n    var stage = $('.js-album-stage', band), cap = $('.js-album-cap', band), num = $('.js-album-n', band), play = $('.js-album-play', band);\r\n    var imgs = items.map(function (li, i) {        \/\/ each slide: blurred backdrop + the whole photo\r\n      var sl = document.createElement('div'); sl.className = 'sl';\r\n      var bg = document.createElement('img'); bg.className = 'bg'; bg.alt = ''; bg.setAttribute('aria-hidden', 'true');\r\n      var fg = document.createElement('img'); fg.className = 'fg'; fg.decoding = 'async';\r\n      fg.alt = li.getAttribute('data-caption') || 'Memory Lane photo ' + (i + 1);\r\n      sl.appendChild(bg); sl.appendChild(fg);\r\n      sl.setAttribute('data-src', li.getAttribute('data-src'));\r\n      fg.onerror = function () { sl.remove(); if (sl.classList.contains('on')) show(cur + 1); };\r\n      stage.appendChild(sl);\r\n      return sl;\r\n    });\r\n    var cur = -1, timer = null, paused = false;\r\n    var still = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\r\n    function load(sl) {\r\n      if (!sl || sl.getAttribute('data-loaded')) return;\r\n      var src = sl.getAttribute('data-src'); sl.setAttribute('data-loaded', '1');\r\n      sl.querySelector('.fg').src = src; sl.querySelector('.bg').src = src;\r\n    }\r\n    function show(i) {\r\n      var live = imgs.filter(function (im) { return im.isConnected; });\r\n      if (!live.length) { band.hidden = true; return; }\r\n      cur = (i + imgs.length) % imgs.length;\r\n      if (!imgs[cur].isConnected) return show(cur + 1);\r\n      imgs.forEach(function (im, k) { im.classList.toggle('on', k === cur); });\r\n      load(imgs[cur]); load(imgs[(cur + 1) % imgs.length]);   \/\/ preload the next photo only\r\n      cap.textContent = items[cur].getAttribute('data-caption') || '';\r\n      num.textContent = imgs.length > 1 ? (cur + 1) + ' \/ ' + imgs.length : '';\r\n    }\r\n    function schedule() { clearInterval(timer); if (!paused && !still && imgs.length > 1) timer = setInterval(function () { show(cur + 1); }, 5000); }\r\n    $('.js-album-prev', band).addEventListener('click', function () { show(cur - 1); schedule(); });\r\n    $('.js-album-next', band).addEventListener('click', function () { show(cur + 1); schedule(); });\r\n    play.addEventListener('click', function () {\r\n      paused = !paused; play.setAttribute('aria-pressed', paused ? 'true' : 'false');\r\n      play.setAttribute('aria-label', paused ? 'Play slideshow' : 'Pause slideshow'); schedule();\r\n    });\r\n    if (imgs.length < 2) $('.album-nav', band).hidden = true;\r\n    if (still) { paused = true; play.setAttribute('aria-pressed', 'true'); play.setAttribute('aria-label', 'Play slideshow'); }\r\n    var frame = $('.album-frame', band);\r\n    frame.addEventListener('mouseenter', function () { clearInterval(timer); });\r\n    frame.addEventListener('mouseleave', schedule);\r\n    document.addEventListener('visibilitychange', function () { if (document.hidden) clearInterval(timer); else schedule(); });\r\n    show(0); schedule();\r\n  })();\r\n\r\n  \/\/ ---------- Registration Help Desk ----------\r\n  (function () {\r\n    var dlg = document.getElementById('sj-help');\r\n    if (!dlg) return;\r\n    var opener = null;\r\n    function open(e) {\r\n      if (e) e.preventDefault();\r\n      opener = document.activeElement;\r\n      if (dlg.showModal) { if (!dlg.open) dlg.showModal(); } else dlg.setAttribute('open', '');\r\n      document.documentElement.style.overflow = 'hidden';\r\n    }\r\n    function close() {\r\n      if (dlg.close && dlg.open) dlg.close(); else dlg.removeAttribute('open');\r\n    }\r\n    dlg.addEventListener('close', function () {\r\n      document.documentElement.style.overflow = '';\r\n      if (opener && opener.focus) try { opener.focus({ preventScroll: true }); } catch (x) {}\r\n    });\r\n    $$('.js-help-open').forEach(function (b) { b.addEventListener('click', open); });\r\n    $$('.js-help-close', dlg).forEach(function (b) {\r\n      b.addEventListener('click', function (e) {\r\n        var href = b.getAttribute('href');\r\n        close();\r\n        if (href && href.charAt(0) === '#') {\r\n          e.preventDefault();\r\n          var target = document.querySelector(href);\r\n          if (target && !target.hidden) setTimeout(function () { target.scrollIntoView({ behavior: 'smooth', block: 'start' }); }, 50);\r\n        }\r\n      });\r\n    });\r\n    dlg.addEventListener('click', function (e) { if (e.target === dlg) close(); });   \/\/ click on the dimmed backdrop\r\n    if (\/^#(help|registration-help)$\/.test(location.hash)) open();\r\n  })();\r\n\r\n  \/\/ ---------- Helpers ----------\r\n  function el(n) { return form.elements[n]; }\r\n  function val(n) { var e = el(n); if (!e) return ''; if (e.length !== undefined && !e.tagName) return radio(n); return (e.value || '').trim(); }\r\n  function radio(n) { var c = form.querySelector('input[name=\"' + n + '\"]:checked'); return c ? c.value : ''; }\r\n  function checks(n) { return $$('input[name=\"' + n + '\"]:checked', form).map(function (c) { return c.value; }); }\r\n  function isShown(node) { while (node && node !== form) { if (node.hidden) return false; node = node.parentNode; } return true; }\r\n  var today = new Date();\r\n  var MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\r\n  function nice(d) { return pad(d.getDate()) + ' ' + MONTHS[d.getMonth()] + ' ' + d.getFullYear(); }\r\n  el('sj_date').value = nice(today);\r\n  function dob() { var v = val('sj_dob'); if (!\/^\\d{4}-\\d{2}-\\d{2}$\/.test(v)) return v; var p = v.split('-'); return p[2] + '\/' + p[1] + '\/' + p[0]; }\r\n\r\n  \/\/ ---------- Payment details: hide placeholders until they're filled in ----------\r\n  $$('.pay-box', form).forEach(function (box) {\r\n    var real = $('.pay-real', box), later = $('.pay-later', box);\r\n    if (!real) return;\r\n    var unfilled = \/\\[ADD [^\\]]*\\]\/.test(real.textContent);\r\n    real.hidden = unfilled;\r\n    if (later) later.hidden = !unfilled;\r\n  });\r\n  var upiEl = $('.js-upi'), payeeEl = $('.js-payee');\r\n  var UPI = upiEl && !\/\\[ADD\/.test(upiEl.textContent) ? upiEl.textContent.trim() : '';\r\n  var PAYEE = payeeEl && !\/\\[ADD\/.test(payeeEl.textContent) ? payeeEl.textContent.trim() : 'St Marys School Diamond Jubilee';\r\n  var MC = upiEl ? (upiEl.getAttribute('data-mc') || '').replace(\/\\D\/g, '') : '';\r\n  $$('[data-copy]', form).forEach(function (b) { b.addEventListener('click', function () { copyText(b.getAttribute('data-copy'), function () { b.textContent = 'Copied'; }); }); });\r\n  var copyUpi = $('.js-copy-upi');\r\n  if (copyUpi) copyUpi.addEventListener('click', function () { copyText(UPI, function () { copyUpi.textContent = 'Copied'; }); });\r\n\r\n  function feeAmount() {\r\n    var f = radio('sj_fee');\r\n    if (f === 'Other') { var n = parseInt(val('sj_fee_other'), 10); return n > 0 ? n : 0; }\r\n    return parseInt(f, 10) || 0;\r\n  }\r\n  var finalId = '';\r\n  function upiNote() {\r\n    if (finalId) return 'Jubilee ' + finalId;\r\n    var n = 'Jubilee ' + (val('sj_year') || '') + ' ' + (val('sj_name') || '');\r\n    return n.replace(\/[^A-Za-z0-9 .\\-]\/g, '').replace(\/\\s+\/g, ' ').trim().slice(0, 45);\r\n  }\r\n  function upiLink() {\r\n    if (!UPI) return '';\r\n    var amt = feeAmount();\r\n    return 'upi:\/\/pay?pa=' + encodeURIComponent(UPI).replace(\/%40\/g, '@') + '&pn=' + encodeURIComponent(PAYEE) + (MC ? '&mc=' + MC : '') + (amt ? '&am=' + amt + '.00' : '') + '&cu=INR&tn=' + encodeURIComponent(upiNote());\r\n  }\r\n  function rupees(n) { try { return '\\u20B9' + n.toLocaleString('en-IN'); } catch (x) { return '\\u20B9' + n; } }\r\n  var lastQr = '';\r\n  function updateUpi() {\r\n    var box = $('.pay-upi', form);\r\n    if (!box || !UPI) return;\r\n    var amt = feeAmount(), okAmt = amt > 0 && (radio('sj_fee') !== 'Other' || amt >= 500);\r\n    var ready = $('.js-upi-ready', box);\r\n    ready.hidden = !okAmt; $('.js-upi-wait', box).hidden = okAmt;\r\n    if (!okAmt) return;\r\n    var link = upiLink();\r\n    $$('.js-amt', root).forEach(function (e) { e.textContent = rupees(amt); });\r\n    $$('.js-tn', root).forEach(function (e) { e.textContent = upiNote(); });\r\n    var btn = $('.js-upi-pay', box); btn.hidden = !mobile; btn.href = link;\r\n    ready.classList.toggle('has-btn', mobile);\r\n    if (link !== lastQr) { $('.js-qr', box).innerHTML = qrSvg(link, 172); lastQr = link; }\r\n  }\r\n  var mobile = \/Android|iPhone|iPad|iPod\/i.test(navigator.userAgent || '');\r\n\r\n  \/\/ ---------- Transaction reference (UTR) rules ----------\r\n  \/\/ UPI: 12 characters (usually digits). NEFT: 16 characters, XXXXNYYDDDNNNNNN\r\n  \/\/ (4-letter bank code, N, 2-digit year, 3-digit day of the year, 6-character number). IMPS: 12 digits.\r\n  function cleanUtr() { return (val('sj_utr') || '').toUpperCase().replace(\/[\\s\\-\\\/]\/g, ''); }\r\n  function cleanRef(v) { return (v || '').toUpperCase().replace(\/[\\s\\-\\\/]\/g, ''); }\r\n  function utrCheck() { return utrRules(radio('sj_mode'), cleanUtr()); }\r\n  function utrRules(mode, u) {\r\n    if (!u) return { ok: true };\r\n    if (mode === 'UPI \/ QR code') {\r\n      if (!\/^[A-Z0-9]{12}$\/.test(u)) return { ok: false, msg: 'A UPI transaction ID (UTR) has exactly 12 characters, e.g. 412345678901. You have entered ' + u.length + '.' };\r\n      if (!\/\\d\/.test(u)) return { ok: false, msg: 'A UPI transaction ID contains numbers. Please copy it from the payment details in your UPI app.' };\r\n      return { ok: true };\r\n    }\r\n    if (\/^\\d{12}$\/.test(u)) return { ok: true };                      \/\/ IMPS reference\r\n    if (u.length !== 16) return { ok: false, msg: 'A NEFT UTR has 16 characters (e.g. SBINN26291123456) and an IMPS reference has 12 digits. You have entered ' + u.length + '.' };\r\n    var m = u.match(\/^([A-Z]{4})N(\\d{2})(\\d{3})([A-Z0-9]{6})$\/);\r\n    if (!m) return { ok: false, msg: 'This doesn\\'t look like a NEFT UTR. It starts with the 4-letter bank code and the letter N, then the year, day and number, e.g. SBINN26291123456.' };\r\n    var yy = Number(m[2]), cur = new Date().getFullYear() % 100, day = Number(m[3]);\r\n    if (yy !== cur && yy !== (cur + 99) % 100) return { ok: false, msg: 'The year in this UTR (characters 6\\u20137: \"' + m[2] + '\") doesn\\'t match a recent payment. Please check it.' };\r\n    if (day < 1 || day > 366) return { ok: false, msg: 'Characters 8\\u201310 of a NEFT UTR are the day of the year (001\\u2013366). \"' + m[3] + '\" isn\\'t valid. Please check it.' };\r\n    return { ok: true };\r\n  }\r\n  var utrIn = $('#sj-utr'), lastMode = '';\r\n  function utrUi() {\r\n    var mode = radio('sj_mode'), u = cleanUtr(), count = $('.js-utr-count');\r\n    if (mode !== lastMode) {\r\n      lastMode = mode;\r\n      var upi = mode === 'UPI \/ QR code';\r\n      $('.js-utr-label').textContent = upi ? 'UPI transaction ID (UTR \/ UPI Ref. No.)' : 'NEFT UTR or IMPS reference number';\r\n      utrIn.placeholder = upi ? '12 digits, e.g. 412345678901' : 'NEFT e.g. SBINN26291123456 \\u00b7 IMPS 12 digits';\r\n      $('.js-utr-hint').textContent = upi\r\n        ? 'Find it in your UPI app under the payment details (called UPI Ref. No., UTR or Transaction ID). It has 12 characters.'\r\n        : 'Find it on your bank\\'s transfer confirmation. NEFT UTRs have 16 characters (bank code + N + year + day + number); IMPS references have 12 digits.';\r\n      var f = utrIn.closest('.f'); if (u && f) check(f);\r\n    }\r\n    var target = mode === 'UPI \/ QR code' ? '12' : (\/^\\d+$\/.test(u) ? '12' : '16');\r\n    count.textContent = u ? u.length + '\/' + target : '';\r\n    count.classList.toggle('good', !!u && utrCheck().ok);\r\n  }\r\n  utrIn.addEventListener('blur', function () { var c = cleanUtr(); if (c !== utrIn.value) { utrIn.value = c; saveDraft(); } });\r\n\r\n  \/\/ ---------- Show \/ hide follow-up questions ----------\r\n  function refresh() {\r\n    $$('[data-show-if]', form).forEach(function (node) {\r\n      var rule = node.getAttribute('data-show-if'), i = rule.indexOf('=');\r\n      var name = rule.slice(0, i), wanted = rule.slice(i + 1).split('|');\r\n      var have = form.querySelector('input[name=\"' + name + '\"][type=checkbox]') ? checks(name) : [radio(name)];\r\n      node.hidden = !have.some(function (v) { return wanted.indexOf(v) > -1; });\r\n    });\r\n    updateUpi();\r\n    utrUi();\r\n    var yr = parseInt(val('sj_year'), 10), mine = $('.js-day-mine');\r\n    $$('.day-info li', form).forEach(function (li) {\r\n      var d = li.getAttribute('data-day');\r\n      li.classList.toggle('mine', !!yr && (d === '3' || (d === '1' && yr >= 2014) || (d === '2' && yr <= 2013)));\r\n    });\r\n    if (mine) {\r\n      mine.hidden = !yr;\r\n      if (yr) mine.textContent = 'For your batch (' + yr + '): ' + (yr >= 2014 ? 'Day 1 (Wed 9th Dec)' : 'Day 2 (Thu 10th Dec)') + ' and Day 3 (Fri 11th Dec), or join all three days.';\r\n    }\r\n    var tn = $('.js-travel-note'); if (tn) tn.hidden = !checks('sj_travel').length;\r\n    sections();\r\n  }\r\n\r\n  \/\/ ---------- Validation ----------\r\n  var EMAIL = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$\/;\r\n  function check(f) {\r\n    if (!isShown(f)) { f.classList.remove('invalid'); return true; }\r\n    var ok = true, override = '';\r\n    if (f.hasAttribute('data-utr')) { var u = utrCheck(); ok = u.ok; override = u.msg || ''; }\r\n    else {\r\n      var boxes = $$('input[type=radio],input[type=checkbox]', f);\r\n      if (boxes.length) ok = boxes.some(function (b) { return b.checked; });\r\n      else {\r\n        var inp = $('input,textarea,select', f);\r\n        var v = (inp.value || '').trim();\r\n        ok = v !== '';\r\n        if (ok && inp.type === 'email') ok = EMAIL.test(v);\r\n        if (ok && f.hasAttribute('data-email') && API && !emailVerified()) { ok = false; override = 'Please verify your email: tap \"Verify email\" and enter the 6-digit code we send you.'; }\r\n        if (ok && f.hasAttribute('data-tel')) ok = v.replace(\/\\D\/g, '').length >= 8;\r\n        if (ok && inp.type === 'number') {\r\n          var n = Number(v), min = inp.getAttribute('min'), max = inp.getAttribute('max');\r\n          ok = !isNaN(n) && (min === null || n >= Number(min)) && (max === null || n <= Number(max));\r\n        }\r\n        if (ok && inp.id === 'sj-dob') ok = \/^\\d{4}-\\d{2}-\\d{2}$\/.test(v) && v >= '1925-01-01' && v <= '2012-12-31';\r\n      }\r\n    }\r\n    f.classList.toggle('invalid', !ok);\r\n    var err = $('.err', f);\r\n    if (err) err.textContent = ok ? '' : (override || f.getAttribute('data-msg') || 'Please complete this field.');\r\n    $$('input,textarea', f).forEach(function (i) { if (i.type !== 'radio' && i.type !== 'checkbox') i.setAttribute('aria-invalid', ok ? 'false' : 'true'); });\r\n    return ok;\r\n  }\r\n  function quiet(f) {      \/\/ same test, without showing an error (for the \"Done\" ticks)\r\n    var had = f.classList.contains('invalid'), msg = $('.err', f) ? $('.err', f).textContent : '';\r\n    var ok = check(f);\r\n    if (!had) { f.classList.remove('invalid'); if ($('.err', f)) $('.err', f).textContent = ''; }\r\n    else if (!ok && $('.err', f)) $('.err', f).textContent = msg || f.getAttribute('data-msg');\r\n    return ok;\r\n  }\r\n  function reqFields(scope) { return $$('[data-req],[data-utr]', scope || form); }\r\n  function sections() {\r\n    $$('.card[data-sec]', form).forEach(function (c) {\r\n      var list = reqFields(c);\r\n      c.classList.toggle('complete', list.length > 0 && list.every(quiet));\r\n    });\r\n  }\r\n  form.addEventListener('focusout', function (e) {\r\n    var f = e.target.closest && e.target.closest('[data-req],[data-utr]');\r\n    if (f && e.target.value && e.target.type !== 'radio' && e.target.type !== 'checkbox') check(f);\r\n  });\r\n  form.addEventListener('input', onChange);\r\n  form.addEventListener('change', onChange);\r\n  function onChange(e) {\r\n    var t = e.target;\r\n    if (t.name === 'sj_days') {               \/\/ \"All three days\" ticks every day\r\n      var all = form.querySelector('input[name=sj_days][data-all]');\r\n      var days = $$('input[name=sj_days]:not([data-all])', form);\r\n      if (t === all) days.forEach(function (d) { d.checked = all.checked; });\r\n      else all.checked = days.every(function (d) { return d.checked; });\r\n    }\r\n    if (t.name === 'sj_name' && !signTouched) el('sj_sign').value = t.value;\r\n    if (t.name === 'sj_sign') signTouched = true;\r\n    refresh();\r\n    var f = t.closest && t.closest('[data-req],[data-utr]');\r\n    if (f && (f.classList.contains('invalid') || t.type === 'radio' || t.type === 'checkbox')) check(f);\r\n    saveDraft();\r\n  }\r\n  var signTouched = false;\r\n\r\n  \/\/ ---------- File uploads (photos are shrunk to keep uploads fast) ----------\r\n  var files = {};\r\n  function shrink(file) {\r\n    return new Promise(function (resolve) {\r\n      if (!\/^image\\\/(jpeg|png|webp)$\/.test(file.type) || file.size < 900 * 1024) return resolve(file);\r\n      var url = URL.createObjectURL(file), img = new Image();\r\n      img.onload = function () {\r\n        var scale = Math.min(1, 1600 \/ Math.max(img.naturalWidth, img.naturalHeight));\r\n        var c = document.createElement('canvas');\r\n        c.width = Math.round(img.naturalWidth * scale); c.height = Math.round(img.naturalHeight * scale);\r\n        var g = c.getContext('2d'); g.fillStyle = '#fff'; g.fillRect(0, 0, c.width, c.height);\r\n        g.drawImage(img, 0, 0, c.width, c.height);\r\n        URL.revokeObjectURL(url);\r\n        c.toBlob(function (b) {\r\n          if (!b || b.size >= file.size) return resolve(file);\r\n          var name = file.name.replace(\/\\.[^.]+$\/, '') + '.jpg';\r\n          try { resolve(new File([b], name, { type: 'image\/jpeg' })); } catch (x) { b.name = name; resolve(b); }\r\n        }, 'image\/jpeg', 0.85);\r\n      };\r\n      img.onerror = function () { URL.revokeObjectURL(url); resolve(file); };\r\n      img.src = url;\r\n    });\r\n  }\r\n  function fileErr(input, msg) {\r\n    var f = input.closest('.f') || input.closest('.photo');\r\n    alertBox(msg, f);\r\n  }\r\n  function alertBox(msg, near) {\r\n    var e = near && $('.err', near);\r\n    if (e) { e.textContent = msg; near.classList.add('invalid'); }\r\n    else window.setTimeout(function () { try { window.alert(msg); } catch (x) {} }, 0);\r\n  }\r\n  $$('input[type=file]', form).forEach(function (input) {\r\n    input.addEventListener('change', function () {\r\n      var file = input.files && input.files[0];\r\n      if (!file) return;\r\n      var okType = input.accept.indexOf('pdf') > -1 ? \/^image\\\/|application\\\/pdf\/.test(file.type) || \/\\.(pdf|jpe?g|png|heic|webp)$\/i.test(file.name) : \/^image\\\/\/.test(file.type) || \/\\.(jpe?g|png|heic|webp)$\/i.test(file.name);\r\n      if (!okType) { input.value = ''; return fileErr(input, 'Please choose a photo (JPG\/PNG)' + (input.accept.indexOf('pdf') > -1 ? ' or a PDF.' : '.')); }\r\n      shrink(file).then(function (out) {\r\n        if (out.size > MAX_BYTES) { input.value = ''; return fileErr(input, 'That file is larger than 5 MB. Please choose a smaller one.'); }\r\n        files[input.name] = out;\r\n        input.value = '';\r\n        showFile(input.name);\r\n        refresh();\r\n      });\r\n    });\r\n  });\r\n  function showFile(name) {\r\n    var file = files[name];\r\n    if (name === 'sj_photo') {\r\n      var box = $('.photo-box', form), img = $('img', box), rm = $('.js-remove[data-for=sj_photo]', form);\r\n      if (file) {\r\n        if (!img) { img = document.createElement('img'); img.alt = 'Your photo'; box.appendChild(img); }\r\n        img.src = URL.createObjectURL(file);\r\n        $('.pb-txt', box).textContent = 'Change photo';\r\n      } else if (img) { img.remove(); $('.pb-txt', box).textContent = 'Upload passport-size photo'; }\r\n      rm.hidden = !file;\r\n      return;\r\n    }\r\n    var ok = $('[data-ok=\"' + name + '\"]', form), drop = $('.drop[data-file=\"' + name + '\"]', form);\r\n    if (!ok) return;\r\n    ok.hidden = !file; drop.hidden = !!file;\r\n    if (file) $('span', ok).textContent = (file.name || 'file') + ' \\u00b7 ' + Math.max(1, Math.round(file.size \/ 1024)) + ' KB';\r\n  }\r\n  form.addEventListener('click', function (e) {\r\n    var rm = e.target.closest && e.target.closest('.js-remove');\r\n    if (!rm) return;\r\n    e.preventDefault();\r\n    delete files[rm.getAttribute('data-for')];\r\n    showFile(rm.getAttribute('data-for'));\r\n    refresh();\r\n  });\r\n\r\n  \/\/ ---------- Draft saved on this device ----------\r\n  var draftNote = $('.draft', form), saveTimer;\r\n  function saveDraft() {\r\n    clearTimeout(saveTimer);\r\n    saveTimer = setTimeout(function () {\r\n      var data = {};\r\n      $$('input,textarea,select', form).forEach(function (i) {\r\n        if (!i.name || i.type === 'file' || i.name === 'sj_date') return;\r\n        if (i.type === 'radio' || i.type === 'checkbox') { if (i.checked) (data[i.name] = data[i.name] || []).push(i.value); }\r\n        else if (i.value) data[i.name] = i.value;\r\n      });\r\n      try { localStorage.setItem(DRAFT_KEY, JSON.stringify(data)); if (draftNote) draftNote.hidden = false; } catch (x) {}\r\n    }, 400);\r\n  }\r\n  function loadDraft() {\r\n    var data = null;\r\n    try { data = JSON.parse(localStorage.getItem(DRAFT_KEY) || 'null'); } catch (x) {}\r\n    if (!data) return;\r\n    $$('input,textarea,select', form).forEach(function (i) {\r\n      if (!i.name || !(i.name in data) || i.type === 'file' || i.name === 'sj_date') return;\r\n      if (i.type === 'radio' || i.type === 'checkbox') i.checked = data[i.name].indexOf(i.value) > -1;\r\n      else i.value = data[i.name];\r\n    });\r\n    if (data.sj_sign) signTouched = data.sj_sign !== data.sj_name;\r\n    if (draftNote) draftNote.hidden = false;\r\n  }\r\n  function clearDraft() { clearTimeout(saveTimer); try { localStorage.removeItem(DRAFT_KEY); } catch (x) {} }\r\n  var clearBtn = $('.js-clear', form);\r\n  if (clearBtn) clearBtn.addEventListener('click', function () {\r\n    clearDraft(); form.reset(); el('sj_email_token').value = ''; $('#sj-email').readOnly = false; files = {}; ['sj_photo', 'sj_receipt'].forEach(showFile);\r\n    el('sj_date').value = nice(today); signTouched = false;\r\n    $$('.invalid', form).forEach(function (f) { f.classList.remove('invalid'); });\r\n    draftNote.hidden = true; refresh(); vstate();\r\n    form.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n  });\r\n  loadDraft();\r\n  refresh();\r\n\r\n  \/\/ ---------- Website helpers: registration counts, email verification, captcha ----------\r\n  \/\/ These need the \"Jubilee registration\" snippet on the website; without it the form still works.\r\n  var API = false, apiRoot = null;\r\n  function api(path, opts) {\r\n    var roots = apiRoot ? [apiRoot] : restRoots(), i = 0;\r\n    function attempt() {\r\n      if (i >= roots.length) return Promise.reject(new Error('not available'));\r\n      var r = roots[i++], url = r.replace(\/\\\/?$\/, '\/') + 'sj\/v1\/' + path;\r\n      url += (url.indexOf('?') > -1 ? '&' : '?') + '_=' + Date.now();\r\n      \/\/ POST even for reads, so page caches never serve an old or wrong answer\r\n      return fetch(url, opts || { method: 'POST', credentials: 'omit', headers: { 'Accept': 'application\/json' } }).then(function (res) {\r\n        if (res.status === 404 && !apiRoot) return attempt();\r\n        return res.json().then(function (j) {\r\n          if (!res.ok) { var e = new Error((j && j.message) || ('HTTP ' + res.status)); e.data = j; throw e; }\r\n          apiRoot = r; return j;\r\n        }, function () { if (!apiRoot) return attempt(); throw new Error('HTTP ' + res.status); });\r\n      });\r\n    }\r\n    return attempt();\r\n  }\r\n  function post(path, body) {\r\n    return api(path, { method: 'POST', credentials: 'omit', headers: { 'Content-Type': 'application\/json', 'Accept': 'application\/json' }, body: JSON.stringify(body) });\r\n  }\r\n\r\n  \/\/ Captcha\r\n  var capField = $('[data-captcha]', form), capInput = $('#sj-cap'), capToken = '';\r\n  function loadCaptcha() {\r\n    return api('captcha').then(function (c) {\r\n      if (!c || !c.token) throw new Error('bad captcha');\r\n      API = true; capToken = c.token;\r\n      var upd = $('#jubilee-payment'); if (upd) upd.hidden = false;\r\n      var pl = $('.js-pay-link'); if (pl) pl.hidden = false;\r\n      $('.js-capq', capField).textContent = c.question;\r\n      capInput.value = ''; capField.hidden = false; capField.classList.remove('invalid');\r\n      vstate(); sections();\r\n    });\r\n  }\r\n  $('.js-cap-new', capField).addEventListener('click', function () { loadCaptcha().then(function () { capInput.focus(); }, function () {}); });\r\n\r\n  \/\/ Email verification with a 6-digit code\r\n  var emailIn = $('#sj-email'), tokenIn = el('sj_email_token'), vbox = $('.js-vbox'), vmsg = $('.js-vmsg'), vok = $('.js-vok');\r\n  var vBtn = $('.js-send-code'), vhint = $('.js-vhint'), codeIn = $('.js-code'), codeBtn = $('.js-check-code');\r\n  function verifiedFor() { var p = (tokenIn.value || '').split('|'); return p.length === 2 ? p[0] : ''; }\r\n  function emailVerified() { var e = (emailIn.value || '').trim().toLowerCase(); return !!e && verifiedFor() === e; }\r\n  function vstate() {\r\n    if (!API) return;\r\n    var ok = emailVerified();\r\n    if (ok) vbox.hidden = true;\r\n    vok.hidden = !ok; emailIn.readOnly = ok;\r\n    vBtn.hidden = ok || !vbox.hidden; vhint.hidden = ok || !vbox.hidden;\r\n  }\r\n  function say(text, bad, bold) {\r\n    vmsg.textContent = text; vmsg.classList.toggle('bad', !!bad);\r\n    if (bold) { var b = document.createElement('b'); b.textContent = bold; vmsg.appendChild(b); vmsg.appendChild(document.createTextNode('. It can take a minute to arrive.')); }\r\n  }\r\n  emailIn.addEventListener('input', function () {\r\n    if (verifiedFor() && !emailVerified()) tokenIn.value = '';\r\n    vbox.hidden = true; vstate();\r\n  });\r\n  function sendCode() {\r\n    var e = (emailIn.value || '').trim(), f = emailIn.closest('.f');\r\n    if (!EMAIL.test(e)) { check(f); emailIn.focus(); return; }\r\n    vBtn.disabled = true; var label = vBtn.textContent; vBtn.textContent = 'Sending\\u2026';\r\n    post('send-code', { email: e }).then(function () {\r\n      vbox.hidden = false; say('We\\'ve sent a 6-digit code to ', false, e);\r\n      f.classList.remove('invalid'); var er = $('.err', f); if (er) er.textContent = '';\r\n      codeIn.value = ''; try { codeIn.focus(); } catch (x) {}\r\n    }, function (err) {\r\n      vbox.hidden = false; say((err.data && err.data.message) || 'We couldn\\'t send the code just now. Please try again in a minute.', true);\r\n    }).then(function () { vBtn.disabled = false; vBtn.textContent = label; vstate(); });\r\n  }\r\n  function confirmCode() {\r\n    var e = (emailIn.value || '').trim(), c = (codeIn.value || '').replace(\/\\D\/g, '');\r\n    if (c.length !== 6) { say('Please enter the 6-digit code from the email.', true); codeIn.focus(); return; }\r\n    if (codeBtn.disabled) return;\r\n    codeBtn.disabled = true;\r\n    post('verify-code', { email: e, code: c }).then(function (r) {\r\n      tokenIn.value = e.toLowerCase() + '|' + r.token;\r\n      vstate(); check(emailIn.closest('.f')); refresh(); saveDraft();\r\n    }, function (err) {\r\n      say((err.data && err.data.message) || 'We couldn\\'t check the code just now. Please try again.', true);\r\n    }).then(function () { codeBtn.disabled = false; });\r\n  }\r\n  vBtn.addEventListener('click', sendCode);\r\n  $('.js-resend').addEventListener('click', sendCode);\r\n  codeBtn.addEventListener('click', confirmCode);\r\n  codeIn.addEventListener('keydown', function (e) { if (e.key === 'Enter') { e.preventDefault(); confirmCode(); } });\r\n  codeIn.addEventListener('input', function () { if (codeIn.value.replace(\/\\D\/g, '').length === 6) confirmCode(); });\r\n  $('.js-change').addEventListener('click', function () { tokenIn.value = ''; emailIn.readOnly = false; vstate(); emailIn.focus(); emailIn.select(); });\r\n\r\n  \/\/ Registrations so far, by batch year\r\n  var statsEl = $('.js-stats'), stats = null, showAll = false, LIMIT = 12;\r\n  function loadStats() { return api('stats').then(function (s) { stats = s; drawStats(); }); }\r\n  function drawStats() {\r\n    if (!stats || !statsEl) return;\r\n    var list = (stats.batches || []).filter(function (b) { return b.count > 0; });\r\n    var total = Number(stats.total) || 0;\r\n    statsEl.hidden = false;\r\n    $('.js-total', statsEl).textContent = total.toLocaleString('en-IN');\r\n    $('.js-total-sub', statsEl).textContent = total\r\n      ? (total === 1 ? 'alumnus' : 'alumni') + ' from ' + list.length + (list.length === 1 ? ' batch' : ' batches') + ' registered'\r\n      : 'Registration is open now.';\r\n    $('.js-empty', statsEl).hidden = list.length > 0;\r\n    var shown = showAll ? list.slice() : list.slice().sort(function (a, b) { return b.count - a.count || b.year - a.year; }).slice(0, LIMIT);\r\n    shown.sort(function (a, b) { return b.year - a.year; });\r\n    var max = Math.max.apply(null, shown.map(function (b) { return b.count; }).concat([1]));\r\n    var ol = $('.js-bars', statsEl); ol.innerHTML = '';\r\n    shown.forEach(function (b) {\r\n      var li = document.createElement('li'); li.title = 'Batch of ' + b.year + ': ' + b.count + ' registered';\r\n      li.innerHTML = '<span class=\"yr\"><\/span><span class=\"track\" aria-hidden=\"true\"><span class=\"fill\"><\/span><\/span><span class=\"n\"><\/span>';\r\n      li.querySelector('.yr').textContent = b.year;\r\n      li.querySelector('.n').textContent = b.count;\r\n      li.querySelector('.fill').style.width = Math.max(2, b.count \/ max * 100) + '%';\r\n      li.setAttribute('aria-label', 'Batch of ' + b.year + ', ' + b.count + ' registered');\r\n      ol.appendChild(li);\r\n    });\r\n    var more = $('.js-bars-more', statsEl);\r\n    more.hidden = showAll || list.length <= LIMIT;\r\n    more.textContent = 'Show all ' + list.length + ' batches';\r\n    $('#sj-stats-h', statsEl).textContent = !showAll && list.length > LIMIT ? 'Top batches so far' : 'By batch year';\r\n  }\r\n  if (statsEl) $('.js-bars-more', statsEl).addEventListener('click', function () { showAll = true; drawStats(); });\r\n\r\n  loadCaptcha().catch(function () {});\r\n  loadStats().catch(function () {});\r\n\r\n  \/\/ ---------- Contact Form 7 delivery ----------\r\n  function findCF7() {\r\n    var forms = document.querySelectorAll('form.wpcf7-form'), best = null;\r\n    for (var i = 0; i < forms.length; i++) {\r\n      if (root.contains(forms[i])) continue;\r\n      if (forms[i].querySelector('input[type=file]')) return forms[i];   \/\/ prefer the form that accepts uploads\r\n      if (!best) best = forms[i];\r\n    }\r\n    return best;\r\n  }\r\n  function pick(fm, test) {\r\n    var els = fm.querySelectorAll('input, textarea, select');\r\n    for (var i = 0; i < els.length; i++) {\r\n      var e = els[i], n = (e.name || '').toLowerCase();\r\n      if (e.type === 'hidden' || e.type === 'file' || n.charAt(0) === '_') continue;\r\n      if (test(e, n)) return e;\r\n    }\r\n    return null;\r\n  }\r\n  function setVal(e, v) { if (!e) return; e.value = v; e.dispatchEvent(new Event('input', { bubbles: true })); e.dispatchEvent(new Event('change', { bubbles: true })); }\r\n  function fillCF7(fm, d) {\r\n    var used = [];\r\n    var email = pick(fm, function (e, n) { return e.type === 'email' || n.indexOf('email') > -1; });\r\n    var name = pick(fm, function (e, n) { return e.tagName === 'INPUT' && e.type === 'text' && n.indexOf('name') > -1; });\r\n    var subject = pick(fm, function (e, n) { return n.indexOf('subject') > -1; });\r\n    var phone = pick(fm, function (e, n) { return e.type === 'tel' || n.indexOf('phone') > -1 || n.indexOf('tel') > -1 || n.indexOf('mobile') > -1 || n.indexOf('whatsapp') > -1; });\r\n    var msg = pick(fm, function (e) { return e.tagName === 'TEXTAREA'; });\r\n    setVal(email, d.email); setVal(name, d.name); setVal(subject, d.subject); setVal(phone, d.phone); setVal(msg, d.summary);\r\n    used.push(email, name, subject, phone, msg);\r\n    \/\/ Optional extra fields, if the Contact Form 7 form has them (named like ours, e.g. \"regid\", \"batch\")\r\n    Object.keys(d.extra).forEach(function (k) {\r\n      var e = fm.querySelector('[name=\"' + k + '\"]');\r\n      if (e && used.indexOf(e) === -1 && e.type !== 'file') { setVal(e, d.extra[k]); used.push(e); }\r\n    });\r\n    fm.querySelectorAll('.wpcf7-acceptance input[type=checkbox], input[type=checkbox][name*=\"accept\"]').forEach(function (c) { c.checked = true; });\r\n    fm.querySelectorAll('input[aria-required=\"true\"], textarea[aria-required=\"true\"], .wpcf7-validates-as-required').forEach(function (e) {\r\n      if (used.indexOf(e) === -1 && !e.value && (e.tagName === 'TEXTAREA' || e.type === 'text')) setVal(e, d.subject);\r\n    });\r\n    if (!msg && subject) setVal(subject, d.subject + ' | ' + d.summary.replace(\/\\n+\/g, ' | '));\r\n  }\r\n  function fileSlots(fm) {      \/\/ which of our uploads the Contact Form 7 form can take\r\n    var slots = {}, inputs = fm.querySelectorAll('input[type=file]');\r\n    var rules = { sj_photo: \/photo|pic|image\/i, sj_receipt: \/receipt|pay|screen|utr\/i };\r\n    var taken = [];\r\n    Object.keys(rules).forEach(function (k) {\r\n      for (var i = 0; i < inputs.length; i++) {\r\n        if (taken.indexOf(inputs[i]) === -1 && rules[k].test(inputs[i].name)) { slots[k] = inputs[i].name; taken.push(inputs[i]); return; }\r\n      }\r\n    });\r\n    return slots;\r\n  }\r\n  function restRoots() {\r\n    var roots = [];\r\n    try { if (window.wpcf7 && wpcf7.api && wpcf7.api.root) roots.push(wpcf7.api.root); } catch (x) {}\r\n    var link = document.querySelector('link[rel=\"https:\/\/api.w.org\/\"]');\r\n    if (link && link.href) roots.push(link.href);\r\n    var path = location.pathname.split('\/')[1];\r\n    if (path && path.indexOf('.') === -1) roots.push(location.origin + '\/' + path + '\/wp-json\/');\r\n    roots.push(location.origin + '\/wp-json\/');\r\n    roots.push(location.origin + '\/?rest_route=\/');\r\n    return roots.filter(function (r, i) { return roots.indexOf(r) === i; });\r\n  }\r\n  function endpoint(r, id) { return r.replace(\/\\\/?$\/, '\/') + 'contact-form-7\/v1\/contact-forms\/' + id + '\/feedback'; }\r\n  function sendCF7(fm, slots, extra) {\r\n    var idEl = fm.querySelector('input[name=\"_wpcf7\"]'), id = idEl ? idEl.value : '';\r\n    if (!id) return Promise.reject(new Error('form id missing'));\r\n    var data = new FormData(fm);\r\n    Object.keys(extra || {}).forEach(function (k) { data.set(k, extra[k]); });\r\n    if (!data.get('_wpcf7_unit_tag')) {\r\n      var host = fm.closest('.wpcf7');\r\n      data.set('_wpcf7_unit_tag', host && host.id ? host.id : 'wpcf7-f' + id + '-o1');\r\n    }\r\n    Object.keys(slots).forEach(function (k) { if (files[k]) data.set(slots[k], files[k], files[k].name || (k + '.jpg')); });\r\n    var roots = restRoots(), i = 0;\r\n    function attempt() {\r\n      if (i >= roots.length) return Promise.reject(new Error('endpoint not found'));\r\n      return fetch(endpoint(roots[i++], id), { method: 'POST', body: data, credentials: 'same-origin', headers: { 'Accept': 'application\/json' } })\r\n        .then(function (r) {\r\n          if (r.status === 404) return attempt();\r\n          return r.json().catch(function () { throw new Error('HTTP ' + r.status); });\r\n        });\r\n    }\r\n    var timeout = new Promise(function (_, rej) { setTimeout(function () { rej(new Error('timed out')); }, 60000); });\r\n    return Promise.race([attempt(), timeout]);\r\n  }\r\n\r\n  \/\/ ---------- Add a UTR after registering ----------\r\n  var uForm = $('#sj-upd');\r\n  if (uForm) {\r\n    var uId = $('#sj-u-id', uForm), uEmail = $('#sj-u-email', uForm), uUtr = $('#sj-u-utr', uForm), uRes = $('.js-u-result', uForm), uBtn = $('.js-u-send', uForm);\r\n    var cleanId = function (v) { return (v || '').toUpperCase().replace(\/\\s+\/g, '').replace(\/_\/g, '_'); };\r\n    var uMode = function () { var c = uForm.querySelector('input[name=sj_u_mode]:checked'); return c ? c.value : ''; };\r\n    var uShow = function (key, msg) {\r\n      var f = $('[data-u=\"' + key + '\"]', uForm); f.classList.toggle('invalid', !!msg);\r\n      $('.err', f).textContent = msg || ''; return !msg;\r\n    };\r\n    var uUi = function () {\r\n      var m = uMode(), u = cleanRef(uUtr.value), upi = m === 'UPI \/ QR code';\r\n      $('.js-u-label', uForm).textContent = !m ? 'Transaction reference (UTR)' : upi ? 'UPI transaction ID (UTR \/ UPI Ref. No.)' : 'NEFT UTR or IMPS reference number';\r\n      uUtr.placeholder = !m ? 'Choose how you paid first' : upi ? '12 digits, e.g. 412345678901' : 'NEFT e.g. SBINN26291123456 \\u00b7 IMPS 12 digits';\r\n      $('.js-u-hint', uForm).textContent = !m ? '' : upi ? 'In your UPI app under the payment details. It has 12 characters.' : 'On your bank\\'s transfer confirmation. NEFT: 16 characters. IMPS: 12 digits.';\r\n      var cnt = $('.js-u-count', uForm), target = upi ? '12' : (\/^\\d+$\/.test(u) ? '12' : '16');\r\n      cnt.textContent = u && m ? u.length + '\/' + target : '';\r\n      cnt.classList.toggle('good', !!u && !!m && utrRules(m, u).ok);\r\n    };\r\n    uForm.addEventListener('input', uUi); uForm.addEventListener('change', function () { uUi(); if ($('[data-u=\"utr\"]', uForm).classList.contains('invalid')) uCheck(); });\r\n    uUtr.addEventListener('blur', function () { uUtr.value = cleanRef(uUtr.value); uUi(); });\r\n    var uCheck = function () {\r\n      var ok = true, id = cleanId(uId.value), m = uMode(), u = cleanRef(uUtr.value);\r\n      ok = uShow('id', \/^SMS-BBL-\\d{4}-\\d{1,4}(-PENDING_?PAYMENT)?$\/.test(id) ? '' : 'Please enter your registration ID, e.g. SMS-BBL-1992-001-PENDING_PAYMENT.') && ok;\r\n      ok = uShow('email', EMAIL.test((uEmail.value || '').trim()) ? '' : 'Please enter the email you registered with.') && ok;\r\n      ok = uShow('mode', m ? '' : 'Please choose how you paid.') && ok;\r\n      var r = m ? (u ? utrRules(m, u) : { ok: false, msg: 'Please enter your transaction reference (UTR).' }) : { ok: true };\r\n      ok = uShow('utr', r.ok ? '' : r.msg) && ok;\r\n      return ok;\r\n    };\r\n    uForm.addEventListener('submit', function (e) {\r\n      e.preventDefault();\r\n      uRes.hidden = true;\r\n      if (!uCheck()) { var bad = $('.invalid input', uForm); if (bad) bad.focus(); return; }\r\n      uBtn.disabled = true; var label = uBtn.textContent; uBtn.textContent = 'Updating\\u2026';\r\n      post('add-utr', { regid: cleanId(uId.value), email: (uEmail.value || '').trim(), mode: uMode(), utr: cleanRef(uUtr.value) }).then(function (r) {\r\n        uRes.className = 'upd-result js-u-result ok';\r\n        uRes.textContent = 'Thank you! ' + r.regid + ' is now CONFIRMED. We\\'ve emailed you a confirmation. Your UTR will be verified offline, and we\\'ll contact you if it can\\'t be matched.';\r\n        var st = $('.js-status', doneBox);\r\n        if (!doneBox.hidden && regId && regId.indexOf(r.regid) === 0) {\r\n          st.textContent = 'CONFIRMED'; st.className = 'status js-status confirmed';\r\n          $('.js-regid', doneBox).textContent = r.regid; $('.js-later', doneBox).hidden = true; $('.js-done-pay', doneBox).hidden = true;\r\n        }\r\n      }, function (err) {\r\n        uRes.className = 'upd-result js-u-result bad';\r\n        uRes.textContent = (err.data && err.data.message) || 'We couldn\\'t update your registration just now. Please try again, or WhatsApp us.';\r\n      }).then(function () {\r\n        uBtn.disabled = false; uBtn.textContent = label; uRes.hidden = false;\r\n        try { uRes.focus({ preventScroll: true }); } catch (x) {}\r\n        uRes.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n      });\r\n    });\r\n  }\r\n\r\n  \/\/ ---------- Submit ----------\r\n  var sendBtn = $('button[type=submit]', form), sendLabel = sendBtn.innerHTML;\r\n  var failBox = $('.fail', form), doneBox = $('.done');\r\n  var summary = '', regId = '', waText = '';\r\n  function busy(on, label) {\r\n    sendBtn.disabled = on;\r\n    sendBtn.setAttribute('aria-busy', on ? 'true' : 'false');\r\n    sendBtn.innerHTML = on ? '<span class=\"spin\" aria-hidden=\"true\"><\/span>' + (label || 'Sending your registration\\u2026') : sendLabel;\r\n  }\r\n  function fail(msg) {\r\n    busy(false);\r\n    $('.fail-msg', failBox).textContent = msg + ' Your answers are still here, so you can try again, or send them to us on WhatsApp.';\r\n    failBox.classList.add('show');\r\n    failBox.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n    try { failBox.focus({ preventScroll: true }); } catch (x) {}\r\n  }\r\n  function copyText(t, ok) {\r\n    if (navigator.clipboard && navigator.clipboard.writeText) navigator.clipboard.writeText(t).then(ok, function () {});\r\n    else { var a = document.createElement('textarea'); a.value = t; document.body.appendChild(a); a.select(); try { document.execCommand('copy'); ok(); } catch (x) {} a.remove(); }\r\n  }\r\n  $('.js-copy-summary', form).addEventListener('click', function (e) {\r\n    var b = e.currentTarget; copyText(summary, function () { b.textContent = 'Copied'; });\r\n  });\r\n\r\n  form.removeAttribute('onsubmit');\r\n  window.sjReady = true;\r\n  form.addEventListener('submit', function (e) {\r\n    e.preventDefault();\r\n    if (sendBtn.disabled) return;\r\n    try { submit(); } catch (err) {\r\n      if (window.console) console.error('Jubilee registration error', err);\r\n      fail('[Code F] Something went wrong on this page (' + (err && err.message ? err.message : 'unknown error') + ').');\r\n    }\r\n  });\r\n\r\n  function build() {\r\n    var fee = feeAmount(), mode = radio('sj_mode'), fam = radio('sj_family'), part = radio('sj_part');\r\n    var cls = radio('sj_class') === 'Other' ? 'Other: ' + val('sj_class_other') : radio('sj_class');\r\n    var caps = checks('sj_cap').map(function (c) { return c === 'Other' ? 'Other: ' + val('sj_cap_other') : c; });\r\n    var days = checks('sj_days'); if (days.indexOf('All three days') > -1) days = ['All three days (9th, 10th & 11th Dec)'];\r\n    var addr = [val('sj_address'), val('sj_city'), val('sj_state') + ' ' + val('sj_pin'), val('sj_country')].map(function (s) { return s.trim(); }).filter(Boolean).join(', ');\r\n    var rows = [\r\n      ['SECTION 1: PERSONAL DETAILS'],\r\n      ['Full name', val('sj_name')], ['Maiden name', val('sj_maiden') || '\\u2014'], ['Date of birth', dob()],\r\n      ['Gender', radio('sj_gender')], ['Marital status', radio('sj_marital') || '\\u2014'], ['Citizenship', radio('sj_citizen')],\r\n      ['SECTION 2: SCHOOL & ALUMNI CREDENTIALS'],\r\n      ['Batch year', val('sj_year')], ['Highest class completed', cls],\r\n      ['SECTION 3: CONTACT & PROFESSIONAL INFO'],\r\n      ['WhatsApp', val('sj_whatsapp')], ['Alternate contact', val('sj_alt_phone') || '\\u2014'], ['Email', val('sj_email')],\r\n      ['Present address', addr], ['Occupation \/ designation', val('sj_occupation') || '\\u2014'], ['Company \/ organisation', val('sj_company') || '\\u2014'],\r\n      ['SECTION 4: ATTENDANCE & FAMILY DETAILS'],\r\n      ['Days of attendance', days.join(', ')], ['Family accompanying', fam]\r\n    ];\r\n    if (fam === 'Yes') rows.push(['Adults (12+)', val('sj_adults') || '0'], ['Children (under 12)', val('sj_children') || '0'], ['Family members', val('sj_family_names') || '\\u2014']);\r\n    var travel = checks('sj_travel');\r\n    rows.push(['Travel \/ stay help', travel.length ? travel.join(', ') + ' (Barbil Tours helpdesk to contact via WhatsApp & email)' : 'Not needed']);\r\n    rows.push(['SECTION 5: PROGRAMME PARTICIPATION'], ['Willing to participate', part]);\r\n    if (part !== 'No') rows.push(['Capacity', caps.join(', ') || '\\u2014'], ['Proposed contribution', val('sj_contrib') || '\\u2014']);\r\n    rows.push(['SECTION 6: PATRONAGE FEE & PAYMENT'], ['Patronage fee', '\\u20b9' + fee], ['Mode of payment', mode]);\r\n    rows.push(['UTR \/ UPI reference', cleanUtr() || 'Not paid yet']);\r\n    rows.push(['Payment status', cleanUtr() ? 'CONFIRMED (UTR submitted, to be verified offline)' : 'PENDING_PAYMENT (UTR can be added later)']);\r\n    return rows;\r\n  }\r\n\r\n  function submit() {\r\n    failBox.classList.remove('show');\r\n    var bad = null;\r\n    reqFields().forEach(function (f) { if (!check(f) && !bad) bad = f; });\r\n    if (bad) {\r\n      bad.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n      var i = $('input:not([type=hidden]),textarea', bad);\r\n      if (i) setTimeout(function () { try { i.focus({ preventScroll: true }); } catch (x) {} }, 350);\r\n      return;\r\n    }\r\n    \/\/ Final ID (SMS-BBL-<batch>-<number>) is given by the website when the registration arrives\r\n    regId = 'SMS-BBL-' + val('sj_year') + '-PENDING';\r\n    var rows = build();\r\n    var fm = findCF7();\r\n    var slots = fm ? fileSlots(fm) : {};\r\n    var attached = [], missing = [];\r\n    [['sj_photo', 'Photo'], ['sj_receipt', 'Payment receipt']].forEach(function (p) {\r\n      if (!files[p[0]]) return;\r\n      (slots[p[0]] ? attached : missing).push(p[1]);\r\n    });\r\n    var lines = ['DIAMOND JUBILEE ALUMNI REUNION 2026 - REGISTRATION', \"St. Mary's School, Barbil | 9th, 10th & 11th December 2026\", 'Registration ID: ' + regId, 'Submitted: ' + nice(today), ''];\r\n    rows.forEach(function (r) { if (r.length === 1) lines.push('', r[0]); else lines.push(r[0] + ': ' + r[1]); });\r\n    lines.push('', 'Declaration: confirmed', 'Signature: ' + val('sj_sign') + '   Date: ' + nice(today));\r\n    lines.push('', 'Attachments: ' + (attached.length ? attached.join(', ') : 'none'));\r\n    if (missing.length) lines.push('NOT RECEIVED ONLINE (ask the alumnus to send on WhatsApp): ' + missing.join(', '));\r\n    summary = lines.join('\\n');\r\n    var subject = 'Jubilee registration ' + regId + ' - ' + val('sj_name') + ' (Batch ' + val('sj_year') + ')';\r\n    waText = 'Hello! My Diamond Jubilee registration details:\\n\\n' + summary;\r\n    $('.js-wa-fallback', form).href = 'https:\/\/wa.me\/' + WA + '?text=' + encodeURIComponent(waText.slice(0, 3500));\r\n\r\n    if (!fm) return fail('[Code B] Online registration isn\\'t switched on for this page yet.');\r\n    busy(true, attached.length ? 'Uploading and sending\\u2026' : 'Sending your registration\\u2026');\r\n    fillCF7(fm, {\r\n      email: val('sj_email'), name: val('sj_name'), subject: subject, phone: val('sj_whatsapp'), summary: summary,\r\n      extra: { 'regid': regId, 'batch': val('sj_year'), 'whatsapp': val('sj_whatsapp'), 'city': val('sj_city'), 'fee': String(feeAmount()), 'payment-mode': radio('sj_mode'), 'utr': cleanUtr() }\r\n    });\r\n    var extra = API ? { '_sj_captcha': (capInput.value || '').trim(), '_sj_captcha_token': capToken, '_sj_email_token': (tokenIn.value.split('|')[1] || '') } : {};\r\n    \/\/ Always send these, even if the Contact Form 7 form has no matching fields\r\n    extra['batch'] = val('sj_year'); extra['fee'] = String(feeAmount()); extra['payment-mode'] = radio('sj_mode'); extra['utr'] = cleanUtr();\r\n    sendCF7(fm, slots, extra).then(function (res) {\r\n      if (res.status === 'mail_sent') return success(rows, missing, res.sj_regid || '', res.sj_base || '', res.sj_status || '');\r\n      if (API) {\r\n        loadCaptcha().catch(function () {});\r\n        var txt = JSON.stringify(res.invalid_fields || '');\r\n        if (\/verify your email\/i.test(txt)) { tokenIn.value = ''; vstate(); }\r\n      }\r\n      var msg = '[Code E] ' + (res.status ? res.status + ': ' : '') + (res.message || '');\r\n      if (res.invalid_fields && res.invalid_fields.length) {\r\n        msg = '[Code D] ' + res.invalid_fields.map(function (x) { return x.message; }).join(' ');\r\n      }\r\n      fail(msg);\r\n    }, function (err) {\r\n      if (API) loadCaptcha().catch(function () {});\r\n      fail('[Code C] We couldn\\'t reach the registration system (' + (err && err.message ? err.message : 'network error') + ').');\r\n    });\r\n  }\r\n\r\n  function success(rows, missing, serverId, serverBase, serverStatus) {\r\n    busy(false);\r\n    setTimeout(function () { loadStats().catch(function () {}); }, 400);\r\n    clearDraft();\r\n    var shownId = \/^SMS-BBL-\\d{4}-\\d+(-PENDING_PAYMENT)?$\/.test(serverId) ? serverId : '';\r\n    finalId = shownId ? (serverBase || shownId.replace(\/-PENDING_PAYMENT$\/, '')) : '';   \/\/ used in the UPI note\r\n    var pending = serverStatus ? serverStatus === 'PENDING_PAYMENT' : !cleanUtr();\r\n    if (shownId) waText = waText.split(regId).join(shownId);\r\n    regId = shownId;\r\n    $('.regid', doneBox).hidden = !shownId;\r\n    var st = $('.js-status', doneBox);\r\n    st.textContent = pending ? 'PENDING_PAYMENT' : 'CONFIRMED';\r\n    st.className = 'status js-status ' + (pending ? 'pending' : 'confirmed');\r\n    var later = $('.js-later', doneBox);\r\n    later.hidden = !(pending && shownId && API);\r\n    if (!later.hidden) { $('#sj-u-id').value = shownId; $('#sj-u-email').value = val('sj_email'); }\r\n    $('.js-verify-note', doneBox).hidden = pending;\r\n    var travel = checks('sj_travel'), hd = $('.js-helpdesk', doneBox);\r\n    hd.hidden = !travel.length;\r\n    if (travel.length) {\r\n      $('.js-helpdesk-msg', hd).textContent = 'You asked for help with ' + travel.join(', ').toLowerCase().replace(\/, ([^,]*)$\/, ' and $1') +\r\n        '. A Barbil Tours helpdesk team member will contact you on WhatsApp (' + val('sj_whatsapp') + ') and by email (' + val('sj_email') +\r\n        ') to plan it with you, sharing options and prices before anything is booked.';\r\n    }\r\n    var first = (val('sj_name').split(' ')[0] || '').trim();\r\n    $('.done-title', doneBox).textContent = first ? 'Thank you, ' + first + '! You\\'re registered.' : 'You\\'re registered!';\r\n    $('.js-regid', doneBox).textContent = shownId;\r\n    var dl = $('.js-sum', doneBox); dl.innerHTML = '';\r\n    var show = ['Full name', 'Batch year', 'WhatsApp', 'Email', 'Days of attendance', 'Family accompanying', 'Adults (12+)', 'Children (under 12)', 'Patronage fee', 'Mode of payment', 'UTR \/ UPI reference', 'Payment status'];\r\n    rows.forEach(function (r) {\r\n      if (r.length < 2 || show.indexOf(r[0]) === -1) return;\r\n      var dt = document.createElement('dt'), dd = document.createElement('dd');\r\n      dt.textContent = r[0]; dd.textContent = r[1]; dl.appendChild(dt); dl.appendChild(dd);\r\n    });\r\n    var msg = finalId ? 'We\\'ll confirm your registration and share updates on WhatsApp and email. Please keep your registration ID for reference.'\r\n      : 'We\\'ve received your registration. Your registration ID will be sent to you on WhatsApp and email.';\r\n    if (missing.length) msg += ' Please send your ' + missing.join(' and ').toLowerCase() + ' to us on WhatsApp, quoting your registration ID.';\r\n    if (pending) msg += API ? ' Your payment is pending. Once you\\'ve paid, add your UTR below or on this page any time to confirm your registration.' : ' Your payment is pending. Once you\\'ve paid, send us the UTR \/ UPI reference on WhatsApp.';\r\n    $('.done-msg', doneBox).textContent = msg;\r\n    $('.js-done-wa', doneBox).href = 'https:\/\/wa.me\/' + WA + '?text=' + encodeURIComponent(waText.slice(0, 3500));\r\n    var payBox = $('.js-done-pay', doneBox), link = upiLink();\r\n    var needPay = !!(link && radio('sj_mode') === 'UPI \/ QR code' && pending && feeAmount());\r\n    payBox.hidden = !needPay;\r\n    if (needPay) {\r\n      var up = $('.js-done-upi', payBox); up.href = link; up.hidden = !mobile;\r\n      $('.js-done-qr', payBox).innerHTML = qrSvg(link, 172);\r\n      $$('.js-amt', payBox).forEach(function (e) { e.textContent = rupees(feeAmount()); });\r\n      $('.js-tn', payBox).textContent = upiNote();\r\n    }\r\n    form.hidden = true;\r\n    var head = $('.reg-head'); if (head) head.hidden = true;\r\n    doneBox.hidden = false;\r\n    doneBox.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n    try { doneBox.focus({ preventScroll: true }); } catch (x) {}\r\n  }\r\n  $('.js-print', doneBox).addEventListener('click', function () { window.print(); });\r\n  }\r\n\r\n  start();\r\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', start);\r\n  window.addEventListener('load', start);\r\n})();\r\n\r\n<\/script>\r\n<div id=\"sj-js\" hidden aria-hidden=\"true\" data-code=\"KGZ1bmN0aW9uICgpIHsKICB3aW5kb3cuc2pMb2FkZWQgPSB0cnVlOwogIHZhciBtZSA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQ7CiAgZnVuY3Rpb24gc3RhcnQoKSB7CiAgICBpZiAod2luZG93LnNqUmVhZHkgfHwgd2luZG93LnNqVHJpZWQpIHJldHVybjsKICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NqLWZvcm0nKSkgcmV0dXJuOyAgICAgICAvLyBwYWdlIG5vdCByZWFkeSB5ZXQ6IHRyeSBhZ2FpbiBsYXRlcgogICAgd2luZG93LnNqVHJpZWQgPSB0cnVlOwogICAgdHJ5IHsgcnVuKCk7IH0gY2F0Y2ggKGVycikgewogICAgICB3aW5kb3cuc2pFcnJvciA9IChlcnIgJiYgZXJyLm1lc3NhZ2UpID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTsKICAgICAgaWYgKHdpbmRvdy5jb25zb2xlKSBjb25zb2xlLmVycm9yKCdKdWJpbGVlIHJlZ2lzdHJhdGlvbiBzY3JpcHQgZXJyb3InLCBlcnIpOwogICAgfQogIH0KICB3aW5kb3cuc2pTdGFydCA9IHN0YXJ0OwogIC8vIC0tLS0tLS0tLS0gVGlueSBRUiBjb2RlIG1ha2VyIChieXRlIG1vZGUsIGVycm9yIGNvcnJlY3Rpb24gTSwgdmVyc2lvbnMgMS0xMCkgLS0tLS0tLS0tLQogIHZhciBzalFSID0gKGZ1bmN0aW9uICgpIHsKICAgIHZhciBFQyA9IFswLCAxMCwgMTYsIDI2LCAxOCwgMjQsIDE2LCAxOCwgMjIsIDIyLCAyNl07ICAgICAgICAgICAgICAgLy8gRUMgY29kZXdvcmRzIHBlciBibG9jawogICAgdmFyIEJMSyA9IFswLCBbWzEsIDE2XV0sIFtbMSwgMjhdXSwgW1sxLCA0NF1dLCBbWzIsIDMyXV0sIFtbMiwgNDNdXSwgW1s0LCAyN11dLCBbWzQsIDMxXV0sIFtbMiwgMzhdLCBbMiwgMzldXSwgW1szLCAzNl0sIFsyLCAzN11dLCBbWzQsIDQzXSwgWzEsIDQ0XV1dOwogICAgdmFyIEFMTiA9IFswLCBbXSwgWzYsIDE4XSwgWzYsIDIyXSwgWzYsIDI2XSwgWzYsIDMwXSwgWzYsIDM0XSwgWzYsIDIyLCAzOF0sIFs2LCAyNCwgNDJdLCBbNiwgMjYsIDQ2XSwgWzYsIDI4LCA1MF1dOwogICAgdmFyIEVYUCA9IFtdLCBMT0cgPSBbXTsKICAgIChmdW5jdGlvbiAoKSB7IHZhciB4ID0gMTsgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTU7IGkrKykgeyBFWFBbaV0gPSB4OyBMT0dbeF0gPSBpOyB4IDw8PSAxOyBpZiAoeCAmIDI1NikgeCBePSAweDExZDsgfSBmb3IgKGkgPSAyNTU7IGkgPCA1MTI7IGkrKykgRVhQW2ldID0gRVhQW2kgLSAyNTVdOyB9KSgpOwogICAgZnVuY3Rpb24gbXVsKGEsIGIpIHsgcmV0dXJuIGEgJiYgYiA\/IEVYUFtMT0dbYV0gKyBMT0dbYl1dIDogMDsgfQogICAgZnVuY3Rpb24gcnNHZW4obikgeyB2YXIgZyA9IFsxXTsgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHsgdmFyIHIgPSBbXTsgZm9yICh2YXIgaiA9IDA7IGogPD0gZy5sZW5ndGg7IGorKykgcltqXSA9IChqIDwgZy5sZW5ndGggPyBnW2pdIDogMCkgXiAoaiA+IDAgPyBtdWwoZ1tqIC0gMV0sIEVYUFtpXSkgOiAwKTsgZyA9IHI7IH0gcmV0dXJuIGc7IH0KICAgIGZ1bmN0aW9uIHJzKGRhdGEsIG4pIHsKICAgICAgdmFyIGcgPSByc0dlbihuKSwgciA9IGRhdGEuY29uY2F0KG5ldyBBcnJheShuKS5maWxsKDApKTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7IHZhciBjID0gcltpXTsgaWYgKGMpIGZvciAodmFyIGogPSAwOyBqIDwgZy5sZW5ndGg7IGorKykgcltpICsgal0gXj0gbXVsKGdbal0sIGMpOyB9CiAgICAgIHJldHVybiByLnNsaWNlKGRhdGEubGVuZ3RoKTsKICAgIH0KICAgIGZ1bmN0aW9uIHV0ZjgocykgeyB2YXIgYiA9IFtdLCB1ID0gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHMpKTsgZm9yICh2YXIgaSA9IDA7IGkgPCB1Lmxlbmd0aDsgaSsrKSBiLnB1c2godS5jaGFyQ29kZUF0KGkpKTsgcmV0dXJuIGI7IH0KICAgIHJldHVybiBmdW5jdGlvbiAodGV4dCkgewogICAgICB2YXIgYnl0ZXMgPSB1dGY4KHRleHQpLCB2ZXIgPSAwLCBjYXA7CiAgICAgIGZvciAodmFyIHYgPSAxOyB2IDw9IDEwOyB2KyspIHsKICAgICAgICBjYXAgPSBCTEtbdl0ucmVkdWNlKGZ1bmN0aW9uIChzLCBnKSB7IHJldHVybiBzICsgZ1swXSAqIGdbMV07IH0sIDApOwogICAgICAgIGlmICg0ICsgKHYgPCAxMCA\/IDggOiAxNikgKyBieXRlcy5sZW5ndGggKiA4IDw9IGNhcCAqIDgpIHsgdmVyID0gdjsgYnJlYWs7IH0KICAgICAgfQogICAgICBpZiAoIXZlcikgcmV0dXJuIG51bGw7CiAgICAgIC8vIERhdGEgYml0cwogICAgICB2YXIgYml0cyA9IFtdOwogICAgICBmdW5jdGlvbiBwdXQodmFsLCBsZW4pIHsgZm9yICh2YXIgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSBiaXRzLnB1c2goKHZhbCA+Pj4gaSkgJiAxKTsgfQogICAgICBwdXQoNCwgNCk7IHB1dChieXRlcy5sZW5ndGgsIHZlciA8IDEwID8gOCA6IDE2KTsKICAgICAgYnl0ZXMuZm9yRWFjaChmdW5jdGlvbiAoYikgeyBwdXQoYiwgOCk7IH0pOwogICAgICBwdXQoMCwgTWF0aC5taW4oNCwgY2FwICogOCAtIGJpdHMubGVuZ3RoKSk7CiAgICAgIHdoaWxlIChiaXRzLmxlbmd0aCAlIDgpIGJpdHMucHVzaCgwKTsKICAgICAgdmFyIGRhdGEgPSBbXTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiaXRzLmxlbmd0aDsgaSArPSA4KSB7IHZhciB4ID0gMDsgZm9yICh2YXIgayA9IDA7IGsgPCA4OyBrKyspIHggPSAoeCA8PCAxKSB8IGJpdHNbaSArIGtdOyBkYXRhLnB1c2goeCk7IH0KICAgICAgZm9yICh2YXIgcCA9IDA7IGRhdGEubGVuZ3RoIDwgY2FwOyBwKyspIGRhdGEucHVzaChwICUgMiA\/IDB4MTEgOiAweEVDKTsKICAgICAgLy8gQmxvY2tzICsgaW50ZXJsZWF2ZQogICAgICB2YXIgYmxvY2tzID0gW10sIGVjcyA9IFtdLCBwb3MgPSAwOwogICAgICBCTEtbdmVyXS5mb3JFYWNoKGZ1bmN0aW9uIChnKSB7IGZvciAodmFyIG4gPSAwOyBuIDwgZ1swXTsgbisrKSB7IHZhciBkID0gZGF0YS5zbGljZShwb3MsIHBvcyArIGdbMV0pOyBwb3MgKz0gZ1sxXTsgYmxvY2tzLnB1c2goZCk7IGVjcy5wdXNoKHJzKGQsIEVDW3Zlcl0pKTsgfSB9KTsKICAgICAgdmFyIGNvZGUgPSBbXSwgbWF4RCA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGJsb2Nrcy5tYXAoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIubGVuZ3RoOyB9KSk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBtYXhEOyBpKyspIGJsb2Nrcy5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7IGlmIChpIDwgYi5sZW5ndGgpIGNvZGUucHVzaChiW2ldKTsgfSk7CiAgICAgIGZvciAoaSA9IDA7IGkgPCBFQ1t2ZXJdOyBpKyspIGVjcy5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7IGNvZGUucHVzaChlW2ldKTsgfSk7CiAgICAgIC8vIE1hdHJpeAogICAgICB2YXIgTiA9IHZlciAqIDQgKyAxNywgTSA9IFtdLCBGID0gW107CiAgICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspIHsgTS5wdXNoKG5ldyBBcnJheShOKS5maWxsKGZhbHNlKSk7IEYucHVzaChuZXcgQXJyYXkoTikuZmlsbChmYWxzZSkpOyB9CiAgICAgIGZ1bmN0aW9uIHNldChyLCBjLCBvbikgeyBNW3JdW2NdID0gb247IEZbcl1bY10gPSB0cnVlOyB9CiAgICAgIGZ1bmN0aW9uIGZpbmRlcihyLCBjKSB7CiAgICAgICAgZm9yICh2YXIgZHIgPSAtMTsgZHIgPD0gNzsgZHIrKykgZm9yICh2YXIgZGMgPSAtMTsgZGMgPD0gNzsgZGMrKykgewogICAgICAgICAgdmFyIHJyID0gciArIGRyLCBjYyA9IGMgKyBkYzsgaWYgKHJyIDwgMCB8fCBjYyA8IDAgfHwgcnIgPj0gTiB8fCBjYyA+PSBOKSBjb250aW51ZTsKICAgICAgICAgIHZhciBvbiA9IGRyID49IDAgJiYgZHIgPD0gNiAmJiBkYyA+PSAwICYmIGRjIDw9IDYgJiYgKGRyID09PSAwIHx8IGRyID09PSA2IHx8IGRjID09PSAwIHx8IGRjID09PSA2IHx8IChkciA+PSAyICYmIGRyIDw9IDQgJiYgZGMgPj0gMiAmJiBkYyA8PSA0KSk7CiAgICAgICAgICBzZXQocnIsIGNjLCBvbik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZpbmRlcigwLCAwKTsgZmluZGVyKDAsIE4gLSA3KTsgZmluZGVyKE4gLSA3LCAwKTsKICAgICAgZm9yIChpID0gODsgaSA8IE4gLSA4OyBpKyspIHsgc2V0KDYsIGksIGkgJSAyID09PSAwKTsgc2V0KGksIDYsIGkgJSAyID09PSAwKTsgfQogICAgICB2YXIgQSA9IEFMTlt2ZXJdOwogICAgICBBLmZvckVhY2goZnVuY3Rpb24gKHIpIHsgQS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7CiAgICAgICAgaWYgKChyID09PSA2ICYmIGMgPT09IDYpIHx8IChyID09PSA2ICYmIGMgPT09IEFbQS5sZW5ndGggLSAxXSkgfHwgKHIgPT09IEFbQS5sZW5ndGggLSAxXSAmJiBjID09PSA2KSkgcmV0dXJuOwogICAgICAgIGZvciAodmFyIGRyID0gLTI7IGRyIDw9IDI7IGRyKyspIGZvciAodmFyIGRjID0gLTI7IGRjIDw9IDI7IGRjKyspIHNldChyICsgZHIsIGMgKyBkYywgTWF0aC5tYXgoTWF0aC5hYnMoZHIpLCBNYXRoLmFicyhkYykpICE9PSAxKTsKICAgICAgfSk7IH0pOwogICAgICAvLyBSZXNlcnZlIGZvcm1hdCArIHZlcnNpb24gYXJlYXMKICAgICAgZm9yIChpID0gMDsgaSA8IDk7IGkrKykgeyBGWzhdW2ldID0gRltpXVs4XSA9IHRydWU7IH0KICAgICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeyBGWzhdW04gLSAxIC0gaV0gPSBGW04gLSAxIC0gaV1bOF0gPSB0cnVlOyB9CiAgICAgIHNldChOIC0gOCwgOCwgdHJ1ZSk7CiAgICAgIGlmICh2ZXIgPj0gNykgewogICAgICAgIHZhciB2YiA9IHZlcjsgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHZiID0gKHZiIDw8IDEpIF4gKCh2YiA+Pj4gMTEpICogMHgxRjI1KTsKICAgICAgICB2YXIgdmJpdHMgPSAodmVyIDw8IDEyKSB8IHZiOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCAxODsgaSsrKSB7IHZhciBiaXQgPSAoKHZiaXRzID4+PiBpKSAmIDEpID09PSAxLCBhID0gTiAtIDExICsgaSAlIDMsIGIgPSBNYXRoLmZsb29yKGkgLyAzKTsgc2V0KGEsIGIsIGJpdCk7IHNldChiLCBhLCBiaXQpOyB9CiAgICAgIH0KICAgICAgLy8gUGxhY2UgZGF0YSAoemlnemFnKQogICAgICB2YXIgYWxsID0gW107IGNvZGUuZm9yRWFjaChmdW5jdGlvbiAoYykgeyBmb3IgKHZhciBrID0gNzsgayA+PSAwOyBrLS0pIGFsbC5wdXNoKChjID4+PiBrKSAmIDEpOyB9KTsKICAgICAgdmFyIGlkeCA9IDA7CiAgICAgIGZvciAodmFyIHJpZ2h0ID0gTiAtIDE7IHJpZ2h0ID49IDE7IHJpZ2h0IC09IDIpIHsKICAgICAgICBpZiAocmlnaHQgPT09IDYpIHJpZ2h0ID0gNTsKICAgICAgICBmb3IgKHZhciB2ZXJ0ID0gMDsgdmVydCA8IE47IHZlcnQrKykgZm9yICh2YXIgaiA9IDA7IGogPCAyOyBqKyspIHsKICAgICAgICAgIHZhciBjMiA9IHJpZ2h0IC0gaiwgdXAgPSAoKHJpZ2h0ICsgMSkgJiAyKSA9PT0gMCwgcjIgPSB1cCA\/IE4gLSAxIC0gdmVydCA6IHZlcnQ7CiAgICAgICAgICBpZiAoIUZbcjJdW2MyXSkgeyBNW3IyXVtjMl0gPSBpZHggPCBhbGwubGVuZ3RoID8gYWxsW2lkeF0gPT09IDEgOiBmYWxzZTsgaWR4Kys7IH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gbWFza0ZuKG0sIHIsIGMpIHsKICAgICAgICBzd2l0Y2ggKG0pIHsKICAgICAgICAgIGNhc2UgMDogcmV0dXJuIChyICsgYykgJSAyID09PSAwOyBjYXNlIDE6IHJldHVybiByICUgMiA9PT0gMDsgY2FzZSAyOiByZXR1cm4gYyAlIDMgPT09IDA7IGNhc2UgMzogcmV0dXJuIChyICsgYykgJSAzID09PSAwOwogICAgICAgICAgY2FzZSA0OiByZXR1cm4gKE1hdGguZmxvb3IociAvIDIpICsgTWF0aC5mbG9vcihjIC8gMykpICUgMiA9PT0gMDsgY2FzZSA1OiByZXR1cm4gciAqIGMgJSAyICsgciAqIGMgJSAzID09PSAwOwogICAgICAgICAgY2FzZSA2OiByZXR1cm4gKHIgKiBjICUgMiArIHIgKiBjICUgMykgJSAyID09PSAwOyBkZWZhdWx0OiByZXR1cm4gKChyICsgYykgJSAyICsgciAqIGMgJSAzKSAlIDIgPT09IDA7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZvcm1hdChHLCBtKSB7CiAgICAgICAgdmFyIGQgPSAoMCA8PCAzKSB8IG0sIHJlbSA9IGQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXZlbCBNID0gMDAKICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IDEwOyBrKyspIHJlbSA9IChyZW0gPDwgMSkgXiAoKHJlbSA+Pj4gOSkgKiAweDUzNyk7CiAgICAgICAgdmFyIGYgPSAoKGQgPDwgMTApIHwgcmVtKSBeIDB4NTQxMjsKICAgICAgICBmdW5jdGlvbiBiKGspIHsgcmV0dXJuICgoZiA+Pj4gaykgJiAxKSA9PT0gMTsgfQogICAgICAgIGZvciAoayA9IDA7IGsgPD0gNTsgaysrKSBHW2tdWzhdID0gYihrKTsKICAgICAgICBHWzddWzhdID0gYig2KTsgR1s4XVs4XSA9IGIoNyk7IEdbOF1bN10gPSBiKDgpOwogICAgICAgIGZvciAoayA9IDk7IGsgPCAxNTsgaysrKSBHWzhdWzE0IC0ga10gPSBiKGspOwogICAgICAgIGZvciAoayA9IDA7IGsgPCA4OyBrKyspIEdbOF1bTiAtIDEgLSBrXSA9IGIoayk7CiAgICAgICAgZm9yIChrID0gODsgayA8IDE1OyBrKyspIEdbTiAtIDE1ICsga11bOF0gPSBiKGspOwogICAgICAgIEdbTiAtIDhdWzhdID0gdHJ1ZTsKICAgICAgfQogICAgICBmdW5jdGlvbiBwZW5hbHR5KEcpIHsKICAgICAgICB2YXIgcyA9IDAsIHIsIGMsIGs7CiAgICAgICAgZm9yICh2YXIgcGFzcyA9IDA7IHBhc3MgPCAyOyBwYXNzKyspIGZvciAociA9IDA7IHIgPCBOOyByKyspIHsKICAgICAgICAgIHZhciBydW4gPSAxLCBsaW5lID0gW107CiAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgTjsgYysrKSBsaW5lLnB1c2gocGFzcyA\/IEdbY11bcl0gOiBHW3JdW2NdKTsKICAgICAgICAgIGZvciAoYyA9IDE7IGMgPCBOOyBjKyspIHsgaWYgKGxpbmVbY10gPT09IGxpbmVbYyAtIDFdKSB7IHJ1bisrOyBpZiAocnVuID09PSA1KSBzICs9IDM7IGVsc2UgaWYgKHJ1biA+IDUpIHMrKzsgfSBlbHNlIHJ1biA9IDE7IH0KICAgICAgICAgIHZhciBzdHIgPSBsaW5lLm1hcChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCA\/IDEgOiAwOyB9KS5qb2luKCcnKTsKICAgICAgICAgIGsgPSAtMTsgd2hpbGUgKChrID0gc3RyLmluZGV4T2YoJzEwMTExMDEnLCBrICsgMSkpID4gLTEpIHsgaWYgKHN0ci5zdWJzdHIoayAtIDQsIDQpID09PSAnMDAwMCcgfHwgc3RyLnN1YnN0cihrICsgNywgNCkgPT09ICcwMDAwJykgcyArPSA0MDsgfQogICAgICAgIH0KICAgICAgICBmb3IgKHIgPSAwOyByIDwgTiAtIDE7IHIrKykgZm9yIChjID0gMDsgYyA8IE4gLSAxOyBjKyspIHsgdmFyIHYwID0gR1tyXVtjXTsgaWYgKHYwID09PSBHW3JdW2MgKyAxXSAmJiB2MCA9PT0gR1tyICsgMV1bY10gJiYgdjAgPT09IEdbciArIDFdW2MgKyAxXSkgcyArPSAzOyB9CiAgICAgICAgdmFyIGRhcmsgPSAwOyBmb3IgKHIgPSAwOyByIDwgTjsgcisrKSBmb3IgKGMgPSAwOyBjIDwgTjsgYysrKSBpZiAoR1tyXVtjXSkgZGFyaysrOwogICAgICAgIHMgKz0gTWF0aC5mbG9vcihNYXRoLmFicyhkYXJrICogMjAgLSBOICogTiAqIDEwKSAvIChOICogTikpICogMTA7CiAgICAgICAgcmV0dXJuIHM7CiAgICAgIH0KICAgICAgdmFyIGJlc3QgPSBudWxsLCBiZXN0U2NvcmUgPSBJbmZpbml0eTsKICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCA4OyBtKyspIHsKICAgICAgICB2YXIgRyA9IE0ubWFwKGZ1bmN0aW9uIChyb3csIHIpIHsgcmV0dXJuIHJvdy5tYXAoZnVuY3Rpb24gKG9uLCBjKSB7IHJldHVybiBGW3JdW2NdID8gb24gOiAob24gIT09IG1hc2tGbihtLCByLCBjKSk7IH0pOyB9KTsKICAgICAgICBmb3JtYXQoRywgbSk7CiAgICAgICAgdmFyIHNjID0gcGVuYWx0eShHKTsKICAgICAgICBpZiAoc2MgPCBiZXN0U2NvcmUpIHsgYmVzdFNjb3JlID0gc2M7IGJlc3QgPSBHOyB9CiAgICAgIH0KICAgICAgcmV0dXJuIGJlc3Q7CiAgICB9OwogIH0pKCk7CiAgZnVuY3Rpb24gcXJTdmcodGV4dCwgcHgpIHsKICAgIHZhciBtID0gc2pRUih0ZXh0KTsgaWYgKCFtKSByZXR1cm4gJyc7CiAgICB2YXIgbiA9IG0ubGVuZ3RoLCBxID0gNCwgc2l6ZSA9IG4gKyBxICogMiwgZCA9ICcnOwogICAgZm9yICh2YXIgciA9IDA7IHIgPCBuOyByKyspIGZvciAodmFyIGMgPSAwOyBjIDwgbjsgYysrKSBpZiAobVtyXVtjXSkgZCArPSAnTScgKyAoYyArIHEpICsgJyAnICsgKHIgKyBxKSArICdoMXYxaC0xeic7CiAgICByZXR1cm4gJzxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgJyArIHNpemUgKyAnICcgKyBzaXplICsgJyIgd2lkdGg9IicgKyAocHggfHwgMTgwKSArICciIGhlaWdodD0iJyArIChweCB8fCAxODApICsgJyIgc2hhcGUtcmVuZGVyaW5nPSJjcmlzcEVkZ2VzIiByb2xlPSJpbWciIGFyaWEtbGFiZWw9IlVQSSBRUiBjb2RlIj48cmVjdCB3aWR0aD0iJyArIHNpemUgKyAnIiBoZWlnaHQ9IicgKyBzaXplICsgJyIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9IicgKyBkICsgJyIgZmlsbD0iIzAwMCIvPjwvc3ZnPic7CiAgfQoKCiAgZnVuY3Rpb24gcnVuKCkgewogIHZhciBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NqLWZvcm0nKTsKICB2YXIgcm9vdCA9IChtZSAmJiBtZS5jbG9zZXN0ICYmIG1lLmNsb3Nlc3QoJy5zaicpKSB8fCBmb3JtLmNsb3Nlc3QoJy5zaicpOwogIGlmICghcm9vdCB8fCAhcm9vdC5jb250YWlucyhmb3JtKSkgcm9vdCA9IGZvcm0uY2xvc2VzdCgnLnNqJyk7CiAgZnVuY3Rpb24gJChzLCBjKSB7IHJldHVybiAoYyB8fCByb290KS5xdWVyeVNlbGVjdG9yKHMpOyB9CiAgZnVuY3Rpb24gJCQocywgYykgeyByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoKGMgfHwgcm9vdCkucXVlcnlTZWxlY3RvckFsbChzKSk7IH0KICB2YXIgV0EgPSAocm9vdC5nZXRBdHRyaWJ1dGUoJ2RhdGEtd2EnKSB8fCAnMTQyNTczNjk3MDAnKS5yZXBsYWNlKC9cRC9nLCAnJyk7CiAgdmFyIERSQUZUX0tFWSA9ICdzakp1YmlsZWVEcmFmdDIwMjYnOwogIHZhciBNQVhfQllURVMgPSA1ICogMTAyNCAqIDEwMjQ7CgogIC8vIC0tLS0tLS0tLS0gQ291bnRkb3duIHRvIDkgRGVjZW1iZXIgMjAyNiAoSW5kaWEgdGltZSkgLS0tLS0tLS0tLQogIHZhciBjZCA9ICQoJy5jb3VudGRvd24nKTsKICB2YXIgRVZFTlQgPSBuZXcgRGF0ZSgnMjAyNi0xMi0wOVQwOTowMDowMCswNTozMCcpLmdldFRpbWUoKTsKICBmdW5jdGlvbiBwYWQobikgeyByZXR1cm4gKG4gPCAxMCA\/ICcwJyA6ICcnKSArIG47IH0KICBmdW5jdGlvbiB0aWNrKCkgewogICAgdmFyIG1zID0gRVZFTlQgLSBEYXRlLm5vdygpOwogICAgaWYgKCFjZCkgcmV0dXJuOwogICAgaWYgKG1zIDw9IDApIHsgY2QuaGlkZGVuID0gdHJ1ZTsgcmV0dXJuOyB9CiAgICB2YXIgbSA9IE1hdGguZmxvb3IobXMgLyA2MDAwMCk7CiAgICAkKCdbZGF0YS1jZD1kXScsIGNkKS50ZXh0Q29udGVudCA9IE1hdGguZmxvb3IobSAvIDE0NDApOwogICAgJCgnW2RhdGEtY2Q9aF0nLCBjZCkudGV4dENvbnRlbnQgPSBwYWQoTWF0aC5mbG9vcihtICUgMTQ0MCAvIDYwKSk7CiAgICAkKCdbZGF0YS1jZD1tXScsIGNkKS50ZXh0Q29udGVudCA9IHBhZChtICUgNjApOwogICAgY2QuaGlkZGVuID0gZmFsc2U7CiAgfQogIHRpY2soKTsgc2V0SW50ZXJ2YWwodGljaywgMzAwMDApOwoKICAvLyAtLS0tLS0tLS0tIE1lbW9yeSBMYW5lIGFsYnVtIC0tLS0tLS0tLS0KICAoZnVuY3Rpb24gKCkgewogICAgdmFyIGJhbmQgPSAkKCcuanMtYWxidW0nKTsKICAgIGlmICghYmFuZCkgcmV0dXJuOwogICAgdmFyIGl0ZW1zID0gJCQoJy5qcy1hbGJ1bS1waG90b3MgbGknLCBiYW5kKS5maWx0ZXIoZnVuY3Rpb24gKGxpKSB7IHJldHVybiAvXmh0dHBzPzpcL1wvLy50ZXN0KGxpLmdldEF0dHJpYnV0ZSgnZGF0YS1zcmMnKSB8fCAnJyk7IH0pOwogICAgaWYgKCFpdGVtcy5sZW5ndGgpIHJldHVybjsKICAgIGJhbmQuaGlkZGVuID0gZmFsc2U7CiAgICB2YXIgc3RhZ2UgPSAkKCcuanMtYWxidW0tc3RhZ2UnLCBiYW5kKSwgY2FwID0gJCgnLmpzLWFsYnVtLWNhcCcsIGJhbmQpLCBudW0gPSAkKCcuanMtYWxidW0tbicsIGJhbmQpLCBwbGF5ID0gJCgnLmpzLWFsYnVtLXBsYXknLCBiYW5kKTsKICAgIHZhciBpbWdzID0gaXRlbXMubWFwKGZ1bmN0aW9uIChsaSwgaSkgeyAgICAgICAgLy8gZWFjaCBzbGlkZTogYmx1cnJlZCBiYWNrZHJvcCArIHRoZSB3aG9sZSBwaG90bwogICAgICB2YXIgc2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsgc2wuY2xhc3NOYW1lID0gJ3NsJzsKICAgICAgdmFyIGJnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7IGJnLmNsYXNzTmFtZSA9ICdiZyc7IGJnLmFsdCA9ICcnOyBiZy5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTsKICAgICAgdmFyIGZnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7IGZnLmNsYXNzTmFtZSA9ICdmZyc7IGZnLmRlY29kaW5nID0gJ2FzeW5jJzsKICAgICAgZmcuYWx0ID0gbGkuZ2V0QXR0cmlidXRlKCdkYXRhLWNhcHRpb24nKSB8fCAnTWVtb3J5IExhbmUgcGhvdG8gJyArIChpICsgMSk7CiAgICAgIHNsLmFwcGVuZENoaWxkKGJnKTsgc2wuYXBwZW5kQ2hpbGQoZmcpOwogICAgICBzbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJywgbGkuZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpKTsKICAgICAgZmcub25lcnJvciA9IGZ1bmN0aW9uICgpIHsgc2wucmVtb3ZlKCk7IGlmIChzbC5jbGFzc0xpc3QuY29udGFpbnMoJ29uJykpIHNob3coY3VyICsgMSk7IH07CiAgICAgIHN0YWdlLmFwcGVuZENoaWxkKHNsKTsKICAgICAgcmV0dXJuIHNsOwogICAgfSk7CiAgICB2YXIgY3VyID0gLTEsIHRpbWVyID0gbnVsbCwgcGF1c2VkID0gZmFsc2U7CiAgICB2YXIgc3RpbGwgPSB3aW5kb3cubWF0Y2hNZWRpYSAmJiB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSknKS5tYXRjaGVzOwogICAgZnVuY3Rpb24gbG9hZChzbCkgewogICAgICBpZiAoIXNsIHx8IHNsLmdldEF0dHJpYnV0ZSgnZGF0YS1sb2FkZWQnKSkgcmV0dXJuOwogICAgICB2YXIgc3JjID0gc2wuZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpOyBzbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbG9hZGVkJywgJzEnKTsKICAgICAgc2wucXVlcnlTZWxlY3RvcignLmZnJykuc3JjID0gc3JjOyBzbC5xdWVyeVNlbGVjdG9yKCcuYmcnKS5zcmMgPSBzcmM7CiAgICB9CiAgICBmdW5jdGlvbiBzaG93KGkpIHsKICAgICAgdmFyIGxpdmUgPSBpbWdzLmZpbHRlcihmdW5jdGlvbiAoaW0pIHsgcmV0dXJuIGltLmlzQ29ubmVjdGVkOyB9KTsKICAgICAgaWYgKCFsaXZlLmxlbmd0aCkgeyBiYW5kLmhpZGRlbiA9IHRydWU7IHJldHVybjsgfQogICAgICBjdXIgPSAoaSArIGltZ3MubGVuZ3RoKSAlIGltZ3MubGVuZ3RoOwogICAgICBpZiAoIWltZ3NbY3VyXS5pc0Nvbm5lY3RlZCkgcmV0dXJuIHNob3coY3VyICsgMSk7CiAgICAgIGltZ3MuZm9yRWFjaChmdW5jdGlvbiAoaW0sIGspIHsgaW0uY2xhc3NMaXN0LnRvZ2dsZSgnb24nLCBrID09PSBjdXIpOyB9KTsKICAgICAgbG9hZChpbWdzW2N1cl0pOyBsb2FkKGltZ3NbKGN1ciArIDEpICUgaW1ncy5sZW5ndGhdKTsgICAvLyBwcmVsb2FkIHRoZSBuZXh0IHBob3RvIG9ubHkKICAgICAgY2FwLnRleHRDb250ZW50ID0gaXRlbXNbY3VyXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtY2FwdGlvbicpIHx8ICcnOwogICAgICBudW0udGV4dENvbnRlbnQgPSBpbWdzLmxlbmd0aCA+IDEgPyAoY3VyICsgMSkgKyAnIC8gJyArIGltZ3MubGVuZ3RoIDogJyc7CiAgICB9CiAgICBmdW5jdGlvbiBzY2hlZHVsZSgpIHsgY2xlYXJJbnRlcnZhbCh0aW1lcik7IGlmICghcGF1c2VkICYmICFzdGlsbCAmJiBpbWdzLmxlbmd0aCA+IDEpIHRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgeyBzaG93KGN1ciArIDEpOyB9LCA1MDAwKTsgfQogICAgJCgnLmpzLWFsYnVtLXByZXYnLCBiYW5kKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsgc2hvdyhjdXIgLSAxKTsgc2NoZWR1bGUoKTsgfSk7CiAgICAkKCcuanMtYWxidW0tbmV4dCcsIGJhbmQpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgeyBzaG93KGN1ciArIDEpOyBzY2hlZHVsZSgpOyB9KTsKICAgIHBsYXkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgIHBhdXNlZCA9ICFwYXVzZWQ7IHBsYXkuc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCBwYXVzZWQgPyAndHJ1ZScgOiAnZmFsc2UnKTsKICAgICAgcGxheS5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBwYXVzZWQgPyAnUGxheSBzbGlkZXNob3cnIDogJ1BhdXNlIHNsaWRlc2hvdycpOyBzY2hlZHVsZSgpOwogICAgfSk7CiAgICBpZiAoaW1ncy5sZW5ndGggPCAyKSAkKCcuYWxidW0tbmF2JywgYmFuZCkuaGlkZGVuID0gdHJ1ZTsKICAgIGlmIChzdGlsbCkgeyBwYXVzZWQgPSB0cnVlOyBwbGF5LnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgJ3RydWUnKTsgcGxheS5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnUGxheSBzbGlkZXNob3cnKTsgfQogICAgdmFyIGZyYW1lID0gJCgnLmFsYnVtLWZyYW1lJywgYmFuZCk7CiAgICBmcmFtZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgZnVuY3Rpb24gKCkgeyBjbGVhckludGVydmFsKHRpbWVyKTsgfSk7CiAgICBmcmFtZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgc2NoZWR1bGUpOwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGZ1bmN0aW9uICgpIHsgaWYgKGRvY3VtZW50LmhpZGRlbikgY2xlYXJJbnRlcnZhbCh0aW1lcik7IGVsc2Ugc2NoZWR1bGUoKTsgfSk7CiAgICBzaG93KDApOyBzY2hlZHVsZSgpOwogIH0pKCk7CgogIC8vIC0tLS0tLS0tLS0gUmVnaXN0cmF0aW9uIEhlbHAgRGVzayAtLS0tLS0tLS0tCiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBkbGcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2otaGVscCcpOwogICAgaWYgKCFkbGcpIHJldHVybjsKICAgIHZhciBvcGVuZXIgPSBudWxsOwogICAgZnVuY3Rpb24gb3BlbihlKSB7CiAgICAgIGlmIChlKSBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIG9wZW5lciA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7CiAgICAgIGlmIChkbGcuc2hvd01vZGFsKSB7IGlmICghZGxnLm9wZW4pIGRsZy5zaG93TW9kYWwoKTsgfSBlbHNlIGRsZy5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nOwogICAgfQogICAgZnVuY3Rpb24gY2xvc2UoKSB7CiAgICAgIGlmIChkbGcuY2xvc2UgJiYgZGxnLm9wZW4pIGRsZy5jbG9zZSgpOyBlbHNlIGRsZy5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKICAgIH0KICAgIGRsZy5hZGRFdmVudExpc3RlbmVyKCdjbG9zZScsIGZ1bmN0aW9uICgpIHsKICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJyc7CiAgICAgIGlmIChvcGVuZXIgJiYgb3BlbmVyLmZvY3VzKSB0cnkgeyBvcGVuZXIuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pOyB9IGNhdGNoICh4KSB7fQogICAgfSk7CiAgICAkJCgnLmpzLWhlbHAtb3BlbicpLmZvckVhY2goZnVuY3Rpb24gKGIpIHsgYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG9wZW4pOyB9KTsKICAgICQkKCcuanMtaGVscC1jbG9zZScsIGRsZykuZm9yRWFjaChmdW5jdGlvbiAoYikgewogICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICB2YXIgaHJlZiA9IGIuZ2V0QXR0cmlidXRlKCdocmVmJyk7CiAgICAgICAgY2xvc2UoKTsKICAgICAgICBpZiAoaHJlZiAmJiBocmVmLmNoYXJBdCgwKSA9PT0gJyMnKSB7CiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihocmVmKTsKICAgICAgICAgIGlmICh0YXJnZXQgJiYgIXRhcmdldC5oaWRkZW4pIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0YXJnZXQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnc3RhcnQnIH0pOyB9LCA1MCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogICAgZGxnLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsgaWYgKGUudGFyZ2V0ID09PSBkbGcpIGNsb3NlKCk7IH0pOyAgIC8vIGNsaWNrIG9uIHRoZSBkaW1tZWQgYmFja2Ryb3AKICAgIGlmICgvXiMoaGVscHxyZWdpc3RyYXRpb24taGVscCkkLy50ZXN0KGxvY2F0aW9uLmhhc2gpKSBvcGVuKCk7CiAgfSkoKTsKCiAgLy8gLS0tLS0tLS0tLSBIZWxwZXJzIC0tLS0tLS0tLS0KICBmdW5jdGlvbiBlbChuKSB7IHJldHVybiBmb3JtLmVsZW1lbnRzW25dOyB9CiAgZnVuY3Rpb24gdmFsKG4pIHsgdmFyIGUgPSBlbChuKTsgaWYgKCFlKSByZXR1cm4gJyc7IGlmIChlLmxlbmd0aCAhPT0gdW5kZWZpbmVkICYmICFlLnRhZ05hbWUpIHJldHVybiByYWRpbyhuKTsgcmV0dXJuIChlLnZhbHVlIHx8ICcnKS50cmltKCk7IH0KICBmdW5jdGlvbiByYWRpbyhuKSB7IHZhciBjID0gZm9ybS5xdWVyeVNlbGVjdG9yKCdpbnB1dFtuYW1lPSInICsgbiArICciXTpjaGVja2VkJyk7IHJldHVybiBjID8gYy52YWx1ZSA6ICcnOyB9CiAgZnVuY3Rpb24gY2hlY2tzKG4pIHsgcmV0dXJuICQkKCdpbnB1dFtuYW1lPSInICsgbiArICciXTpjaGVja2VkJywgZm9ybSkubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLnZhbHVlOyB9KTsgfQogIGZ1bmN0aW9uIGlzU2hvd24obm9kZSkgeyB3aGlsZSAobm9kZSAmJiBub2RlICE9PSBmb3JtKSB7IGlmIChub2RlLmhpZGRlbikgcmV0dXJuIGZhbHNlOyBub2RlID0gbm9kZS5wYXJlbnROb2RlOyB9IHJldHVybiB0cnVlOyB9CiAgdmFyIHRvZGF5ID0gbmV3IERhdGUoKTsKICB2YXIgTU9OVEhTID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddOwogIGZ1bmN0aW9uIG5pY2UoZCkgeyByZXR1cm4gcGFkKGQuZ2V0RGF0ZSgpKSArICcgJyArIE1PTlRIU1tkLmdldE1vbnRoKCldICsgJyAnICsgZC5nZXRGdWxsWWVhcigpOyB9CiAgZWwoJ3NqX2RhdGUnKS52YWx1ZSA9IG5pY2UodG9kYXkpOwogIGZ1bmN0aW9uIGRvYigpIHsgdmFyIHYgPSB2YWwoJ3NqX2RvYicpOyBpZiAoIS9eXGR7NH0tXGR7Mn0tXGR7Mn0kLy50ZXN0KHYpKSByZXR1cm4gdjsgdmFyIHAgPSB2LnNwbGl0KCctJyk7IHJldHVybiBwWzJdICsgJy8nICsgcFsxXSArICcvJyArIHBbMF07IH0KCiAgLy8gLS0tLS0tLS0tLSBQYXltZW50IGRldGFpbHM6IGhpZGUgcGxhY2Vob2xkZXJzIHVudGlsIHRoZXkncmUgZmlsbGVkIGluIC0tLS0tLS0tLS0KICAkJCgnLnBheS1ib3gnLCBmb3JtKS5mb3JFYWNoKGZ1bmN0aW9uIChib3gpIHsKICAgIHZhciByZWFsID0gJCgnLnBheS1yZWFsJywgYm94KSwgbGF0ZXIgPSAkKCcucGF5LWxhdGVyJywgYm94KTsKICAgIGlmICghcmVhbCkgcmV0dXJuOwogICAgdmFyIHVuZmlsbGVkID0gL1xbQUREIFteXF1dKlxdLy50ZXN0KHJlYWwudGV4dENvbnRlbnQpOwogICAgcmVhbC5oaWRkZW4gPSB1bmZpbGxlZDsKICAgIGlmIChsYXRlcikgbGF0ZXIuaGlkZGVuID0gIXVuZmlsbGVkOwogIH0pOwogIHZhciB1cGlFbCA9ICQoJy5qcy11cGknKSwgcGF5ZWVFbCA9ICQoJy5qcy1wYXllZScpOwogIHZhciBVUEkgPSB1cGlFbCAmJiAhL1xbQURELy50ZXN0KHVwaUVsLnRleHRDb250ZW50KSA\/IHVwaUVsLnRleHRDb250ZW50LnRyaW0oKSA6ICcnOwogIHZhciBQQVlFRSA9IHBheWVlRWwgJiYgIS9cW0FERC8udGVzdChwYXllZUVsLnRleHRDb250ZW50KSA\/IHBheWVlRWwudGV4dENvbnRlbnQudHJpbSgpIDogJ1N0IE1hcnlzIFNjaG9vbCBEaWFtb25kIEp1YmlsZWUnOwogIHZhciBNQyA9IHVwaUVsID8gKHVwaUVsLmdldEF0dHJpYnV0ZSgnZGF0YS1tYycpIHx8ICcnKS5yZXBsYWNlKC9cRC9nLCAnJykgOiAnJzsKICAkJCgnW2RhdGEtY29weV0nLCBmb3JtKS5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7IGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7IGNvcHlUZXh0KGIuZ2V0QXR0cmlidXRlKCdkYXRhLWNvcHknKSwgZnVuY3Rpb24gKCkgeyBiLnRleHRDb250ZW50ID0gJ0NvcGllZCc7IH0pOyB9KTsgfSk7CiAgdmFyIGNvcHlVcGkgPSAkKCcuanMtY29weS11cGknKTsKICBpZiAoY29weVVwaSkgY29weVVwaS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsgY29weVRleHQoVVBJLCBmdW5jdGlvbiAoKSB7IGNvcHlVcGkudGV4dENvbnRlbnQgPSAnQ29waWVkJzsgfSk7IH0pOwoKICBmdW5jdGlvbiBmZWVBbW91bnQoKSB7CiAgICB2YXIgZiA9IHJhZGlvKCdzal9mZWUnKTsKICAgIGlmIChmID09PSAnT3RoZXInKSB7IHZhciBuID0gcGFyc2VJbnQodmFsKCdzal9mZWVfb3RoZXInKSwgMTApOyByZXR1cm4gbiA+IDAgPyBuIDogMDsgfQogICAgcmV0dXJuIHBhcnNlSW50KGYsIDEwKSB8fCAwOwogIH0KICB2YXIgZmluYWxJZCA9ICcnOwogIGZ1bmN0aW9uIHVwaU5vdGUoKSB7CiAgICBpZiAoZmluYWxJZCkgcmV0dXJuICdKdWJpbGVlICcgKyBmaW5hbElkOwogICAgdmFyIG4gPSAnSnViaWxlZSAnICsgKHZhbCgnc2pfeWVhcicpIHx8ICcnKSArICcgJyArICh2YWwoJ3NqX25hbWUnKSB8fCAnJyk7CiAgICByZXR1cm4gbi5yZXBsYWNlKC9bXkEtWmEtejAtOSAuXC1dL2csICcnKS5yZXBsYWNlKC9ccysvZywgJyAnKS50cmltKCkuc2xpY2UoMCwgNDUpOwogIH0KICBmdW5jdGlvbiB1cGlMaW5rKCkgewogICAgaWYgKCFVUEkpIHJldHVybiAnJzsKICAgIHZhciBhbXQgPSBmZWVBbW91bnQoKTsKICAgIHJldHVybiAndXBpOi8vcGF5P3BhPScgKyBlbmNvZGVVUklDb21wb25lbnQoVVBJKS5yZXBsYWNlKC8lNDAvZywgJ0AnKSArICcmcG49JyArIGVuY29kZVVSSUNvbXBvbmVudChQQVlFRSkgKyAoTUMgPyAnJm1jPScgKyBNQyA6ICcnKSArIChhbXQgPyAnJmFtPScgKyBhbXQgKyAnLjAwJyA6ICcnKSArICcmY3U9SU5SJnRuPScgKyBlbmNvZGVVUklDb21wb25lbnQodXBpTm90ZSgpKTsKICB9CiAgZnVuY3Rpb24gcnVwZWVzKG4pIHsgdHJ5IHsgcmV0dXJuICdcdTIwQjknICsgbi50b0xvY2FsZVN0cmluZygnZW4tSU4nKTsgfSBjYXRjaCAoeCkgeyByZXR1cm4gJ1x1MjBCOScgKyBuOyB9IH0KICB2YXIgbGFzdFFyID0gJyc7CiAgZnVuY3Rpb24gdXBkYXRlVXBpKCkgewogICAgdmFyIGJveCA9ICQoJy5wYXktdXBpJywgZm9ybSk7CiAgICBpZiAoIWJveCB8fCAhVVBJKSByZXR1cm47CiAgICB2YXIgYW10ID0gZmVlQW1vdW50KCksIG9rQW10ID0gYW10ID4gMCAmJiAocmFkaW8oJ3NqX2ZlZScpICE9PSAnT3RoZXInIHx8IGFtdCA+PSA1MDApOwogICAgdmFyIHJlYWR5ID0gJCgnLmpzLXVwaS1yZWFkeScsIGJveCk7CiAgICByZWFkeS5oaWRkZW4gPSAhb2tBbXQ7ICQoJy5qcy11cGktd2FpdCcsIGJveCkuaGlkZGVuID0gb2tBbXQ7CiAgICBpZiAoIW9rQW10KSByZXR1cm47CiAgICB2YXIgbGluayA9IHVwaUxpbmsoKTsKICAgICQkKCcuanMtYW10Jywgcm9vdCkuZm9yRWFjaChmdW5jdGlvbiAoZSkgeyBlLnRleHRDb250ZW50ID0gcnVwZWVzKGFtdCk7IH0pOwogICAgJCQoJy5qcy10bicsIHJvb3QpLmZvckVhY2goZnVuY3Rpb24gKGUpIHsgZS50ZXh0Q29udGVudCA9IHVwaU5vdGUoKTsgfSk7CiAgICB2YXIgYnRuID0gJCgnLmpzLXVwaS1wYXknLCBib3gpOyBidG4uaGlkZGVuID0gIW1vYmlsZTsgYnRuLmhyZWYgPSBsaW5rOwogICAgcmVhZHkuY2xhc3NMaXN0LnRvZ2dsZSgnaGFzLWJ0bicsIG1vYmlsZSk7CiAgICBpZiAobGluayAhPT0gbGFzdFFyKSB7ICQoJy5qcy1xcicsIGJveCkuaW5uZXJIVE1MID0gcXJTdmcobGluaywgMTcyKTsgbGFzdFFyID0gbGluazsgfQogIH0KICB2YXIgbW9iaWxlID0gL0FuZHJvaWR8aVBob25lfGlQYWR8aVBvZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJyk7CgogIC8vIC0tLS0tLS0tLS0gVHJhbnNhY3Rpb24gcmVmZXJlbmNlIChVVFIpIHJ1bGVzIC0tLS0tLS0tLS0KICAvLyBVUEk6IDEyIGNoYXJhY3RlcnMgKHVzdWFsbHkgZGlnaXRzKS4gTkVGVDogMTYgY2hhcmFjdGVycywgWFhYWE5ZWURERE5OTk5OTgogIC8vICg0LWxldHRlciBiYW5rIGNvZGUsIE4sIDItZGlnaXQgeWVhciwgMy1kaWdpdCBkYXkgb2YgdGhlIHllYXIsIDYtY2hhcmFjdGVyIG51bWJlcikuIElNUFM6IDEyIGRpZ2l0cy4KICBmdW5jdGlvbiBjbGVhblV0cigpIHsgcmV0dXJuICh2YWwoJ3NqX3V0cicpIHx8ICcnKS50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoL1tcc1wtXC9dL2csICcnKTsgfQogIGZ1bmN0aW9uIGNsZWFuUmVmKHYpIHsgcmV0dXJuICh2IHx8ICcnKS50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoL1tcc1wtXC9dL2csICcnKTsgfQogIGZ1bmN0aW9uIHV0ckNoZWNrKCkgeyByZXR1cm4gdXRyUnVsZXMocmFkaW8oJ3NqX21vZGUnKSwgY2xlYW5VdHIoKSk7IH0KICBmdW5jdGlvbiB1dHJSdWxlcyhtb2RlLCB1KSB7CiAgICBpZiAoIXUpIHJldHVybiB7IG9rOiB0cnVlIH07CiAgICBpZiAobW9kZSA9PT0gJ1VQSSAvIFFSIGNvZGUnKSB7CiAgICAgIGlmICghL15bQS1aMC05XXsxMn0kLy50ZXN0KHUpKSByZXR1cm4geyBvazogZmFsc2UsIG1zZzogJ0EgVVBJIHRyYW5zYWN0aW9uIElEIChVVFIpIGhhcyBleGFjdGx5IDEyIGNoYXJhY3RlcnMsIGUuZy4gNDEyMzQ1Njc4OTAxLiBZb3UgaGF2ZSBlbnRlcmVkICcgKyB1Lmxlbmd0aCArICcuJyB9OwogICAgICBpZiAoIS9cZC8udGVzdCh1KSkgcmV0dXJuIHsgb2s6IGZhbHNlLCBtc2c6ICdBIFVQSSB0cmFuc2FjdGlvbiBJRCBjb250YWlucyBudW1iZXJzLiBQbGVhc2UgY29weSBpdCBmcm9tIHRoZSBwYXltZW50IGRldGFpbHMgaW4geW91ciBVUEkgYXBwLicgfTsKICAgICAgcmV0dXJuIHsgb2s6IHRydWUgfTsKICAgIH0KICAgIGlmICgvXlxkezEyfSQvLnRlc3QodSkpIHJldHVybiB7IG9rOiB0cnVlIH07ICAgICAgICAgICAgICAgICAgICAgIC8vIElNUFMgcmVmZXJlbmNlCiAgICBpZiAodS5sZW5ndGggIT09IDE2KSByZXR1cm4geyBvazogZmFsc2UsIG1zZzogJ0EgTkVGVCBVVFIgaGFzIDE2IGNoYXJhY3RlcnMgKGUuZy4gU0JJTk4yNjI5MTEyMzQ1NikgYW5kIGFuIElNUFMgcmVmZXJlbmNlIGhhcyAxMiBkaWdpdHMuIFlvdSBoYXZlIGVudGVyZWQgJyArIHUubGVuZ3RoICsgJy4nIH07CiAgICB2YXIgbSA9IHUubWF0Y2goL14oW0EtWl17NH0pTihcZHsyfSkoXGR7M30pKFtBLVowLTldezZ9KSQvKTsKICAgIGlmICghbSkgcmV0dXJuIHsgb2s6IGZhbHNlLCBtc2c6ICdUaGlzIGRvZXNuXCd0IGxvb2sgbGlrZSBhIE5FRlQgVVRSLiBJdCBzdGFydHMgd2l0aCB0aGUgNC1sZXR0ZXIgYmFuayBjb2RlIGFuZCB0aGUgbGV0dGVyIE4sIHRoZW4gdGhlIHllYXIsIGRheSBhbmQgbnVtYmVyLCBlLmcuIFNCSU5OMjYyOTExMjM0NTYuJyB9OwogICAgdmFyIHl5ID0gTnVtYmVyKG1bMl0pLCBjdXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgJSAxMDAsIGRheSA9IE51bWJlcihtWzNdKTsKICAgIGlmICh5eSAhPT0gY3VyICYmIHl5ICE9PSAoY3VyICsgOTkpICUgMTAwKSByZXR1cm4geyBvazogZmFsc2UsIG1zZzogJ1RoZSB5ZWFyIGluIHRoaXMgVVRSIChjaGFyYWN0ZXJzIDZcdTIwMTM3OiAiJyArIG1bMl0gKyAnIikgZG9lc25cJ3QgbWF0Y2ggYSByZWNlbnQgcGF5bWVudC4gUGxlYXNlIGNoZWNrIGl0LicgfTsKICAgIGlmIChkYXkgPCAxIHx8IGRheSA+IDM2NikgcmV0dXJuIHsgb2s6IGZhbHNlLCBtc2c6ICdDaGFyYWN0ZXJzIDhcdTIwMTMxMCBvZiBhIE5FRlQgVVRSIGFyZSB0aGUgZGF5IG9mIHRoZSB5ZWFyICgwMDFcdTIwMTMzNjYpLiAiJyArIG1bM10gKyAnIiBpc25cJ3QgdmFsaWQuIFBsZWFzZSBjaGVjayBpdC4nIH07CiAgICByZXR1cm4geyBvazogdHJ1ZSB9OwogIH0KICB2YXIgdXRySW4gPSAkKCcjc2otdXRyJyksIGxhc3RNb2RlID0gJyc7CiAgZnVuY3Rpb24gdXRyVWkoKSB7CiAgICB2YXIgbW9kZSA9IHJhZGlvKCdzal9tb2RlJyksIHUgPSBjbGVhblV0cigpLCBjb3VudCA9ICQoJy5qcy11dHItY291bnQnKTsKICAgIGlmIChtb2RlICE9PSBsYXN0TW9kZSkgewogICAgICBsYXN0TW9kZSA9IG1vZGU7CiAgICAgIHZhciB1cGkgPSBtb2RlID09PSAnVVBJIC8gUVIgY29kZSc7CiAgICAgICQoJy5qcy11dHItbGFiZWwnKS50ZXh0Q29udGVudCA9IHVwaSA\/ICdVUEkgdHJhbnNhY3Rpb24gSUQgKFVUUiAvIFVQSSBSZWYuIE5vLiknIDogJ05FRlQgVVRSIG9yIElNUFMgcmVmZXJlbmNlIG51bWJlcic7CiAgICAgIHV0ckluLnBsYWNlaG9sZGVyID0gdXBpID8gJzEyIGRpZ2l0cywgZS5nLiA0MTIzNDU2Nzg5MDEnIDogJ05FRlQgZS5nLiBTQklOTjI2MjkxMTIzNDU2IFx1MDBiNyBJTVBTIDEyIGRpZ2l0cyc7CiAgICAgICQoJy5qcy11dHItaGludCcpLnRleHRDb250ZW50ID0gdXBpCiAgICAgICAgPyAnRmluZCBpdCBpbiB5b3VyIFVQSSBhcHAgdW5kZXIgdGhlIHBheW1lbnQgZGV0YWlscyAoY2FsbGVkIFVQSSBSZWYuIE5vLiwgVVRSIG9yIFRyYW5zYWN0aW9uIElEKS4gSXQgaGFzIDEyIGNoYXJhY3RlcnMuJwogICAgICAgIDogJ0ZpbmQgaXQgb24geW91ciBiYW5rXCdzIHRyYW5zZmVyIGNvbmZpcm1hdGlvbi4gTkVGVCBVVFJzIGhhdmUgMTYgY2hhcmFjdGVycyAoYmFuayBjb2RlICsgTiArIHllYXIgKyBkYXkgKyBudW1iZXIpOyBJTVBTIHJlZmVyZW5jZXMgaGF2ZSAxMiBkaWdpdHMuJzsKICAgICAgdmFyIGYgPSB1dHJJbi5jbG9zZXN0KCcuZicpOyBpZiAodSAmJiBmKSBjaGVjayhmKTsKICAgIH0KICAgIHZhciB0YXJnZXQgPSBtb2RlID09PSAnVVBJIC8gUVIgY29kZScgPyAnMTInIDogKC9eXGQrJC8udGVzdCh1KSA\/ICcxMicgOiAnMTYnKTsKICAgIGNvdW50LnRleHRDb250ZW50ID0gdSA\/IHUubGVuZ3RoICsgJy8nICsgdGFyZ2V0IDogJyc7CiAgICBjb3VudC5jbGFzc0xpc3QudG9nZ2xlKCdnb29kJywgISF1ICYmIHV0ckNoZWNrKCkub2spOwogIH0KICB1dHJJbi5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgZnVuY3Rpb24gKCkgeyB2YXIgYyA9IGNsZWFuVXRyKCk7IGlmIChjICE9PSB1dHJJbi52YWx1ZSkgeyB1dHJJbi52YWx1ZSA9IGM7IHNhdmVEcmFmdCgpOyB9IH0pOwoKICAvLyAtLS0tLS0tLS0tIFNob3cgLyBoaWRlIGZvbGxvdy11cCBxdWVzdGlvbnMgLS0tLS0tLS0tLQogIGZ1bmN0aW9uIHJlZnJlc2goKSB7CiAgICAkJCgnW2RhdGEtc2hvdy1pZl0nLCBmb3JtKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7CiAgICAgIHZhciBydWxlID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2hvdy1pZicpLCBpID0gcnVsZS5pbmRleE9mKCc9Jyk7CiAgICAgIHZhciBuYW1lID0gcnVsZS5zbGljZSgwLCBpKSwgd2FudGVkID0gcnVsZS5zbGljZShpICsgMSkuc3BsaXQoJ3wnKTsKICAgICAgdmFyIGhhdmUgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9IicgKyBuYW1lICsgJyJdW3R5cGU9Y2hlY2tib3hdJykgPyBjaGVja3MobmFtZSkgOiBbcmFkaW8obmFtZSldOwogICAgICBub2RlLmhpZGRlbiA9ICFoYXZlLnNvbWUoZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHdhbnRlZC5pbmRleE9mKHYpID4gLTE7IH0pOwogICAgfSk7CiAgICB1cGRhdGVVcGkoKTsKICAgIHV0clVpKCk7CiAgICB2YXIgeXIgPSBwYXJzZUludCh2YWwoJ3NqX3llYXInKSwgMTApLCBtaW5lID0gJCgnLmpzLWRheS1taW5lJyk7CiAgICAkJCgnLmRheS1pbmZvIGxpJywgZm9ybSkuZm9yRWFjaChmdW5jdGlvbiAobGkpIHsKICAgICAgdmFyIGQgPSBsaS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGF5Jyk7CiAgICAgIGxpLmNsYXNzTGlzdC50b2dnbGUoJ21pbmUnLCAhIXlyICYmIChkID09PSAnMycgfHwgKGQgPT09ICcxJyAmJiB5ciA+PSAyMDE0KSB8fCAoZCA9PT0gJzInICYmIHlyIDw9IDIwMTMpKSk7CiAgICB9KTsKICAgIGlmIChtaW5lKSB7CiAgICAgIG1pbmUuaGlkZGVuID0gIXlyOwogICAgICBpZiAoeXIpIG1pbmUudGV4dENvbnRlbnQgPSAnRm9yIHlvdXIgYmF0Y2ggKCcgKyB5ciArICcpOiAnICsgKHlyID49IDIwMTQgPyAnRGF5IDEgKFdlZCA5dGggRGVjKScgOiAnRGF5IDIgKFRodSAxMHRoIERlYyknKSArICcgYW5kIERheSAzIChGcmkgMTF0aCBEZWMpLCBvciBqb2luIGFsbCB0aHJlZSBkYXlzLic7CiAgICB9CiAgICB2YXIgdG4gPSAkKCcuanMtdHJhdmVsLW5vdGUnKTsgaWYgKHRuKSB0bi5oaWRkZW4gPSAhY2hlY2tzKCdzal90cmF2ZWwnKS5sZW5ndGg7CiAgICBzZWN0aW9ucygpOwogIH0KCiAgLy8gLS0tLS0tLS0tLSBWYWxpZGF0aW9uIC0tLS0tLS0tLS0KICB2YXIgRU1BSUwgPSAvXlteXHNAXStAW15cc0BdK1wuW15cc0BdezIsfSQvOwogIGZ1bmN0aW9uIGNoZWNrKGYpIHsKICAgIGlmICghaXNTaG93bihmKSkgeyBmLmNsYXNzTGlzdC5yZW1vdmUoJ2ludmFsaWQnKTsgcmV0dXJuIHRydWU7IH0KICAgIHZhciBvayA9IHRydWUsIG92ZXJyaWRlID0gJyc7CiAgICBpZiAoZi5oYXNBdHRyaWJ1dGUoJ2RhdGEtdXRyJykpIHsgdmFyIHUgPSB1dHJDaGVjaygpOyBvayA9IHUub2s7IG92ZXJyaWRlID0gdS5tc2cgfHwgJyc7IH0KICAgIGVsc2UgewogICAgICB2YXIgYm94ZXMgPSAkJCgnaW5wdXRbdHlwZT1yYWRpb10saW5wdXRbdHlwZT1jaGVja2JveF0nLCBmKTsKICAgICAgaWYgKGJveGVzLmxlbmd0aCkgb2sgPSBib3hlcy5zb21lKGZ1bmN0aW9uIChiKSB7IHJldHVybiBiLmNoZWNrZWQ7IH0pOwogICAgICBlbHNlIHsKICAgICAgICB2YXIgaW5wID0gJCgnaW5wdXQsdGV4dGFyZWEsc2VsZWN0JywgZik7CiAgICAgICAgdmFyIHYgPSAoaW5wLnZhbHVlIHx8ICcnKS50cmltKCk7CiAgICAgICAgb2sgPSB2ICE9PSAnJzsKICAgICAgICBpZiAob2sgJiYgaW5wLnR5cGUgPT09ICdlbWFpbCcpIG9rID0gRU1BSUwudGVzdCh2KTsKICAgICAgICBpZiAob2sgJiYgZi5oYXNBdHRyaWJ1dGUoJ2RhdGEtZW1haWwnKSAmJiBBUEkgJiYgIWVtYWlsVmVyaWZpZWQoKSkgeyBvayA9IGZhbHNlOyBvdmVycmlkZSA9ICdQbGVhc2UgdmVyaWZ5IHlvdXIgZW1haWw6IHRhcCAiVmVyaWZ5IGVtYWlsIiBhbmQgZW50ZXIgdGhlIDYtZGlnaXQgY29kZSB3ZSBzZW5kIHlvdS4nOyB9CiAgICAgICAgaWYgKG9rICYmIGYuaGFzQXR0cmlidXRlKCdkYXRhLXRlbCcpKSBvayA9IHYucmVwbGFjZSgvXEQvZywgJycpLmxlbmd0aCA+PSA4OwogICAgICAgIGlmIChvayAmJiBpbnAudHlwZSA9PT0gJ251bWJlcicpIHsKICAgICAgICAgIHZhciBuID0gTnVtYmVyKHYpLCBtaW4gPSBpbnAuZ2V0QXR0cmlidXRlKCdtaW4nKSwgbWF4ID0gaW5wLmdldEF0dHJpYnV0ZSgnbWF4Jyk7CiAgICAgICAgICBvayA9ICFpc05hTihuKSAmJiAobWluID09PSBudWxsIHx8IG4gPj0gTnVtYmVyKG1pbikpICYmIChtYXggPT09IG51bGwgfHwgbiA8PSBOdW1iZXIobWF4KSk7CiAgICAgICAgfQogICAgICAgIGlmIChvayAmJiBpbnAuaWQgPT09ICdzai1kb2InKSBvayA9IC9eXGR7NH0tXGR7Mn0tXGR7Mn0kLy50ZXN0KHYpICYmIHYgPj0gJzE5MjUtMDEtMDEnICYmIHYgPD0gJzIwMTItMTItMzEnOwogICAgICB9CiAgICB9CiAgICBmLmNsYXNzTGlzdC50b2dnbGUoJ2ludmFsaWQnLCAhb2spOwogICAgdmFyIGVyciA9ICQoJy5lcnInLCBmKTsKICAgIGlmIChlcnIpIGVyci50ZXh0Q29udGVudCA9IG9rID8gJycgOiAob3ZlcnJpZGUgfHwgZi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbXNnJykgfHwgJ1BsZWFzZSBjb21wbGV0ZSB0aGlzIGZpZWxkLicpOwogICAgJCQoJ2lucHV0LHRleHRhcmVhJywgZikuZm9yRWFjaChmdW5jdGlvbiAoaSkgeyBpZiAoaS50eXBlICE9PSAncmFkaW8nICYmIGkudHlwZSAhPT0gJ2NoZWNrYm94JykgaS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaW52YWxpZCcsIG9rID8gJ2ZhbHNlJyA6ICd0cnVlJyk7IH0pOwogICAgcmV0dXJuIG9rOwogIH0KICBmdW5jdGlvbiBxdWlldChmKSB7ICAgICAgLy8gc2FtZSB0ZXN0LCB3aXRob3V0IHNob3dpbmcgYW4gZXJyb3IgKGZvciB0aGUgIkRvbmUiIHRpY2tzKQogICAgdmFyIGhhZCA9IGYuY2xhc3NMaXN0LmNvbnRhaW5zKCdpbnZhbGlkJyksIG1zZyA9ICQoJy5lcnInLCBmKSA\/ICQoJy5lcnInLCBmKS50ZXh0Q29udGVudCA6ICcnOwogICAgdmFyIG9rID0gY2hlY2soZik7CiAgICBpZiAoIWhhZCkgeyBmLmNsYXNzTGlzdC5yZW1vdmUoJ2ludmFsaWQnKTsgaWYgKCQoJy5lcnInLCBmKSkgJCgnLmVycicsIGYpLnRleHRDb250ZW50ID0gJyc7IH0KICAgIGVsc2UgaWYgKCFvayAmJiAkKCcuZXJyJywgZikpICQoJy5lcnInLCBmKS50ZXh0Q29udGVudCA9IG1zZyB8fCBmLmdldEF0dHJpYnV0ZSgnZGF0YS1tc2cnKTsKICAgIHJldHVybiBvazsKICB9CiAgZnVuY3Rpb24gcmVxRmllbGRzKHNjb3BlKSB7IHJldHVybiAkJCgnW2RhdGEtcmVxXSxbZGF0YS11dHJdJywgc2NvcGUgfHwgZm9ybSk7IH0KICBmdW5jdGlvbiBzZWN0aW9ucygpIHsKICAgICQkKCcuY2FyZFtkYXRhLXNlY10nLCBmb3JtKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7CiAgICAgIHZhciBsaXN0ID0gcmVxRmllbGRzKGMpOwogICAgICBjLmNsYXNzTGlzdC50b2dnbGUoJ2NvbXBsZXRlJywgbGlzdC5sZW5ndGggPiAwICYmIGxpc3QuZXZlcnkocXVpZXQpKTsKICAgIH0pOwogIH0KICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgZnVuY3Rpb24gKGUpIHsKICAgIHZhciBmID0gZS50YXJnZXQuY2xvc2VzdCAmJiBlLnRhcmdldC5jbG9zZXN0KCdbZGF0YS1yZXFdLFtkYXRhLXV0cl0nKTsKICAgIGlmIChmICYmIGUudGFyZ2V0LnZhbHVlICYmIGUudGFyZ2V0LnR5cGUgIT09ICdyYWRpbycgJiYgZS50YXJnZXQudHlwZSAhPT0gJ2NoZWNrYm94JykgY2hlY2soZik7CiAgfSk7CiAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIG9uQ2hhbmdlKTsKICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIG9uQ2hhbmdlKTsKICBmdW5jdGlvbiBvbkNoYW5nZShlKSB7CiAgICB2YXIgdCA9IGUudGFyZ2V0OwogICAgaWYgKHQubmFtZSA9PT0gJ3NqX2RheXMnKSB7ICAgICAgICAgICAgICAgLy8gIkFsbCB0aHJlZSBkYXlzIiB0aWNrcyBldmVyeSBkYXkKICAgICAgdmFyIGFsbCA9IGZvcm0ucXVlcnlTZWxlY3RvcignaW5wdXRbbmFtZT1zal9kYXlzXVtkYXRhLWFsbF0nKTsKICAgICAgdmFyIGRheXMgPSAkJCgnaW5wdXRbbmFtZT1zal9kYXlzXTpub3QoW2RhdGEtYWxsXSknLCBmb3JtKTsKICAgICAgaWYgKHQgPT09IGFsbCkgZGF5cy5mb3JFYWNoKGZ1bmN0aW9uIChkKSB7IGQuY2hlY2tlZCA9IGFsbC5jaGVja2VkOyB9KTsKICAgICAgZWxzZSBhbGwuY2hlY2tlZCA9IGRheXMuZXZlcnkoZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGQuY2hlY2tlZDsgfSk7CiAgICB9CiAgICBpZiAodC5uYW1lID09PSAnc2pfbmFtZScgJiYgIXNpZ25Ub3VjaGVkKSBlbCgnc2pfc2lnbicpLnZhbHVlID0gdC52YWx1ZTsKICAgIGlmICh0Lm5hbWUgPT09ICdzal9zaWduJykgc2lnblRvdWNoZWQgPSB0cnVlOwogICAgcmVmcmVzaCgpOwogICAgdmFyIGYgPSB0LmNsb3Nlc3QgJiYgdC5jbG9zZXN0KCdbZGF0YS1yZXFdLFtkYXRhLXV0cl0nKTsKICAgIGlmIChmICYmIChmLmNsYXNzTGlzdC5jb250YWlucygnaW52YWxpZCcpIHx8IHQudHlwZSA9PT0gJ3JhZGlvJyB8fCB0LnR5cGUgPT09ICdjaGVja2JveCcpKSBjaGVjayhmKTsKICAgIHNhdmVEcmFmdCgpOwogIH0KICB2YXIgc2lnblRvdWNoZWQgPSBmYWxzZTsKCiAgLy8gLS0tLS0tLS0tLSBGaWxlIHVwbG9hZHMgKHBob3RvcyBhcmUgc2hydW5rIHRvIGtlZXAgdXBsb2FkcyBmYXN0KSAtLS0tLS0tLS0tCiAgdmFyIGZpbGVzID0ge307CiAgZnVuY3Rpb24gc2hyaW5rKGZpbGUpIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkgewogICAgICBpZiAoIS9eaW1hZ2VcLyhqcGVnfHBuZ3x3ZWJwKSQvLnRlc3QoZmlsZS50eXBlKSB8fCBmaWxlLnNpemUgPCA5MDAgKiAxMDI0KSByZXR1cm4gcmVzb2x2ZShmaWxlKTsKICAgICAgdmFyIHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSksIGltZyA9IG5ldyBJbWFnZSgpOwogICAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBzY2FsZSA9IE1hdGgubWluKDEsIDE2MDAgLyBNYXRoLm1heChpbWcubmF0dXJhbFdpZHRoLCBpbWcubmF0dXJhbEhlaWdodCkpOwogICAgICAgIHZhciBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CiAgICAgICAgYy53aWR0aCA9IE1hdGgucm91bmQoaW1nLm5hdHVyYWxXaWR0aCAqIHNjYWxlKTsgYy5oZWlnaHQgPSBNYXRoLnJvdW5kKGltZy5uYXR1cmFsSGVpZ2h0ICogc2NhbGUpOwogICAgICAgIHZhciBnID0gYy5nZXRDb250ZXh0KCcyZCcpOyBnLmZpbGxTdHlsZSA9ICcjZmZmJzsgZy5maWxsUmVjdCgwLCAwLCBjLndpZHRoLCBjLmhlaWdodCk7CiAgICAgICAgZy5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBjLndpZHRoLCBjLmhlaWdodCk7CiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpOwogICAgICAgIGMudG9CbG9iKGZ1bmN0aW9uIChiKSB7CiAgICAgICAgICBpZiAoIWIgfHwgYi5zaXplID49IGZpbGUuc2l6ZSkgcmV0dXJuIHJlc29sdmUoZmlsZSk7CiAgICAgICAgICB2YXIgbmFtZSA9IGZpbGUubmFtZS5yZXBsYWNlKC9cLlteLl0rJC8sICcnKSArICcuanBnJzsKICAgICAgICAgIHRyeSB7IHJlc29sdmUobmV3IEZpbGUoW2JdLCBuYW1lLCB7IHR5cGU6ICdpbWFnZS9qcGVnJyB9KSk7IH0gY2F0Y2ggKHgpIHsgYi5uYW1lID0gbmFtZTsgcmVzb2x2ZShiKTsgfQogICAgICAgIH0sICdpbWFnZS9qcGVnJywgMC44NSk7CiAgICAgIH07CiAgICAgIGltZy5vbmVycm9yID0gZnVuY3Rpb24gKCkgeyBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7IHJlc29sdmUoZmlsZSk7IH07CiAgICAgIGltZy5zcmMgPSB1cmw7CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gZmlsZUVycihpbnB1dCwgbXNnKSB7CiAgICB2YXIgZiA9IGlucHV0LmNsb3Nlc3QoJy5mJykgfHwgaW5wdXQuY2xvc2VzdCgnLnBob3RvJyk7CiAgICBhbGVydEJveChtc2csIGYpOwogIH0KICBmdW5jdGlvbiBhbGVydEJveChtc2csIG5lYXIpIHsKICAgIHZhciBlID0gbmVhciAmJiAkKCcuZXJyJywgbmVhcik7CiAgICBpZiAoZSkgeyBlLnRleHRDb250ZW50ID0gbXNnOyBuZWFyLmNsYXNzTGlzdC5hZGQoJ2ludmFsaWQnKTsgfQogICAgZWxzZSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IHRyeSB7IHdpbmRvdy5hbGVydChtc2cpOyB9IGNhdGNoICh4KSB7fSB9LCAwKTsKICB9CiAgJCQoJ2lucHV0W3R5cGU9ZmlsZV0nLCBmb3JtKS5mb3JFYWNoKGZ1bmN0aW9uIChpbnB1dCkgewogICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZnVuY3Rpb24gKCkgewogICAgICB2YXIgZmlsZSA9IGlucHV0LmZpbGVzICYmIGlucHV0LmZpbGVzWzBdOwogICAgICBpZiAoIWZpbGUpIHJldHVybjsKICAgICAgdmFyIG9rVHlwZSA9IGlucHV0LmFjY2VwdC5pbmRleE9mKCdwZGYnKSA+IC0xID8gL15pbWFnZVwvfGFwcGxpY2F0aW9uXC9wZGYvLnRlc3QoZmlsZS50eXBlKSB8fCAvXC4ocGRmfGpwZT9nfHBuZ3xoZWljfHdlYnApJC9pLnRlc3QoZmlsZS5uYW1lKSA6IC9eaW1hZ2VcLy8udGVzdChmaWxlLnR5cGUpIHx8IC9cLihqcGU\/Z3xwbmd8aGVpY3x3ZWJwKSQvaS50ZXN0KGZpbGUubmFtZSk7CiAgICAgIGlmICghb2tUeXBlKSB7IGlucHV0LnZhbHVlID0gJyc7IHJldHVybiBmaWxlRXJyKGlucHV0LCAnUGxlYXNlIGNob29zZSBhIHBob3RvIChKUEcvUE5HKScgKyAoaW5wdXQuYWNjZXB0LmluZGV4T2YoJ3BkZicpID4gLTEgPyAnIG9yIGEgUERGLicgOiAnLicpKTsgfQogICAgICBzaHJpbmsoZmlsZSkudGhlbihmdW5jdGlvbiAob3V0KSB7CiAgICAgICAgaWYgKG91dC5zaXplID4gTUFYX0JZVEVTKSB7IGlucHV0LnZhbHVlID0gJyc7IHJldHVybiBmaWxlRXJyKGlucHV0LCAnVGhhdCBmaWxlIGlzIGxhcmdlciB0aGFuIDUgTUIuIFBsZWFzZSBjaG9vc2UgYSBzbWFsbGVyIG9uZS4nKTsgfQogICAgICAgIGZpbGVzW2lucHV0Lm5hbWVdID0gb3V0OwogICAgICAgIGlucHV0LnZhbHVlID0gJyc7CiAgICAgICAgc2hvd0ZpbGUoaW5wdXQubmFtZSk7CiAgICAgICAgcmVmcmVzaCgpOwogICAgICB9KTsKICAgIH0pOwogIH0pOwogIGZ1bmN0aW9uIHNob3dGaWxlKG5hbWUpIHsKICAgIHZhciBmaWxlID0gZmlsZXNbbmFtZV07CiAgICBpZiAobmFtZSA9PT0gJ3NqX3Bob3RvJykgewogICAgICB2YXIgYm94ID0gJCgnLnBob3RvLWJveCcsIGZvcm0pLCBpbWcgPSAkKCdpbWcnLCBib3gpLCBybSA9ICQoJy5qcy1yZW1vdmVbZGF0YS1mb3I9c2pfcGhvdG9dJywgZm9ybSk7CiAgICAgIGlmIChmaWxlKSB7CiAgICAgICAgaWYgKCFpbWcpIHsgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7IGltZy5hbHQgPSAnWW91ciBwaG90byc7IGJveC5hcHBlbmRDaGlsZChpbWcpOyB9CiAgICAgICAgaW1nLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7CiAgICAgICAgJCgnLnBiLXR4dCcsIGJveCkudGV4dENvbnRlbnQgPSAnQ2hhbmdlIHBob3RvJzsKICAgICAgfSBlbHNlIGlmIChpbWcpIHsgaW1nLnJlbW92ZSgpOyAkKCcucGItdHh0JywgYm94KS50ZXh0Q29udGVudCA9ICdVcGxvYWQgcGFzc3BvcnQtc2l6ZSBwaG90byc7IH0KICAgICAgcm0uaGlkZGVuID0gIWZpbGU7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBvayA9ICQoJ1tkYXRhLW9rPSInICsgbmFtZSArICciXScsIGZvcm0pLCBkcm9wID0gJCgnLmRyb3BbZGF0YS1maWxlPSInICsgbmFtZSArICciXScsIGZvcm0pOwogICAgaWYgKCFvaykgcmV0dXJuOwogICAgb2suaGlkZGVuID0gIWZpbGU7IGRyb3AuaGlkZGVuID0gISFmaWxlOwogICAgaWYgKGZpbGUpICQoJ3NwYW4nLCBvaykudGV4dENvbnRlbnQgPSAoZmlsZS5uYW1lIHx8ICdmaWxlJykgKyAnIFx1MDBiNyAnICsgTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChmaWxlLnNpemUgLyAxMDI0KSkgKyAnIEtCJzsKICB9CiAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7CiAgICB2YXIgcm0gPSBlLnRhcmdldC5jbG9zZXN0ICYmIGUudGFyZ2V0LmNsb3Nlc3QoJy5qcy1yZW1vdmUnKTsKICAgIGlmICghcm0pIHJldHVybjsKICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgIGRlbGV0ZSBmaWxlc1tybS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZm9yJyldOwogICAgc2hvd0ZpbGUocm0uZ2V0QXR0cmlidXRlKCdkYXRhLWZvcicpKTsKICAgIHJlZnJlc2goKTsKICB9KTsKCiAgLy8gLS0tLS0tLS0tLSBEcmFmdCBzYXZlZCBvbiB0aGlzIGRldmljZSAtLS0tLS0tLS0tCiAgdmFyIGRyYWZ0Tm90ZSA9ICQoJy5kcmFmdCcsIGZvcm0pLCBzYXZlVGltZXI7CiAgZnVuY3Rpb24gc2F2ZURyYWZ0KCkgewogICAgY2xlYXJUaW1lb3V0KHNhdmVUaW1lcik7CiAgICBzYXZlVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgdmFyIGRhdGEgPSB7fTsKICAgICAgJCQoJ2lucHV0LHRleHRhcmVhLHNlbGVjdCcsIGZvcm0pLmZvckVhY2goZnVuY3Rpb24gKGkpIHsKICAgICAgICBpZiAoIWkubmFtZSB8fCBpLnR5cGUgPT09ICdmaWxlJyB8fCBpLm5hbWUgPT09ICdzal9kYXRlJykgcmV0dXJuOwogICAgICAgIGlmIChpLnR5cGUgPT09ICdyYWRpbycgfHwgaS50eXBlID09PSAnY2hlY2tib3gnKSB7IGlmIChpLmNoZWNrZWQpIChkYXRhW2kubmFtZV0gPSBkYXRhW2kubmFtZV0gfHwgW10pLnB1c2goaS52YWx1ZSk7IH0KICAgICAgICBlbHNlIGlmIChpLnZhbHVlKSBkYXRhW2kubmFtZV0gPSBpLnZhbHVlOwogICAgICB9KTsKICAgICAgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oRFJBRlRfS0VZLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7IGlmIChkcmFmdE5vdGUpIGRyYWZ0Tm90ZS5oaWRkZW4gPSBmYWxzZTsgfSBjYXRjaCAoeCkge30KICAgIH0sIDQwMCk7CiAgfQogIGZ1bmN0aW9uIGxvYWREcmFmdCgpIHsKICAgIHZhciBkYXRhID0gbnVsbDsKICAgIHRyeSB7IGRhdGEgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKERSQUZUX0tFWSkgfHwgJ251bGwnKTsgfSBjYXRjaCAoeCkge30KICAgIGlmICghZGF0YSkgcmV0dXJuOwogICAgJCQoJ2lucHV0LHRleHRhcmVhLHNlbGVjdCcsIGZvcm0pLmZvckVhY2goZnVuY3Rpb24gKGkpIHsKICAgICAgaWYgKCFpLm5hbWUgfHwgIShpLm5hbWUgaW4gZGF0YSkgfHwgaS50eXBlID09PSAnZmlsZScgfHwgaS5uYW1lID09PSAnc2pfZGF0ZScpIHJldHVybjsKICAgICAgaWYgKGkudHlwZSA9PT0gJ3JhZGlvJyB8fCBpLnR5cGUgPT09ICdjaGVja2JveCcpIGkuY2hlY2tlZCA9IGRhdGFbaS5uYW1lXS5pbmRleE9mKGkudmFsdWUpID4gLTE7CiAgICAgIGVsc2UgaS52YWx1ZSA9IGRhdGFbaS5uYW1lXTsKICAgIH0pOwogICAgaWYgKGRhdGEuc2pfc2lnbikgc2lnblRvdWNoZWQgPSBkYXRhLnNqX3NpZ24gIT09IGRhdGEuc2pfbmFtZTsKICAgIGlmIChkcmFmdE5vdGUpIGRyYWZ0Tm90ZS5oaWRkZW4gPSBmYWxzZTsKICB9CiAgZnVuY3Rpb24gY2xlYXJEcmFmdCgpIHsgY2xlYXJUaW1lb3V0KHNhdmVUaW1lcik7IHRyeSB7IGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKERSQUZUX0tFWSk7IH0gY2F0Y2ggKHgpIHt9IH0KICB2YXIgY2xlYXJCdG4gPSAkKCcuanMtY2xlYXInLCBmb3JtKTsKICBpZiAoY2xlYXJCdG4pIGNsZWFyQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgY2xlYXJEcmFmdCgpOyBmb3JtLnJlc2V0KCk7IGVsKCdzal9lbWFpbF90b2tlbicpLnZhbHVlID0gJyc7ICQoJyNzai1lbWFpbCcpLnJlYWRPbmx5ID0gZmFsc2U7IGZpbGVzID0ge307IFsnc2pfcGhvdG8nLCAnc2pfcmVjZWlwdCddLmZvckVhY2goc2hvd0ZpbGUpOwogICAgZWwoJ3NqX2RhdGUnKS52YWx1ZSA9IG5pY2UodG9kYXkpOyBzaWduVG91Y2hlZCA9IGZhbHNlOwogICAgJCQoJy5pbnZhbGlkJywgZm9ybSkuZm9yRWFjaChmdW5jdGlvbiAoZikgeyBmLmNsYXNzTGlzdC5yZW1vdmUoJ2ludmFsaWQnKTsgfSk7CiAgICBkcmFmdE5vdGUuaGlkZGVuID0gdHJ1ZTsgcmVmcmVzaCgpOyB2c3RhdGUoKTsKICAgIGZvcm0uc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnc3RhcnQnIH0pOwogIH0pOwogIGxvYWREcmFmdCgpOwogIHJlZnJlc2goKTsKCiAgLy8gLS0tLS0tLS0tLSBXZWJzaXRlIGhlbHBlcnM6IHJlZ2lzdHJhdGlvbiBjb3VudHMsIGVtYWlsIHZlcmlmaWNhdGlvbiwgY2FwdGNoYSAtLS0tLS0tLS0tCiAgLy8gVGhlc2UgbmVlZCB0aGUgIkp1YmlsZWUgcmVnaXN0cmF0aW9uIiBzbmlwcGV0IG9uIHRoZSB3ZWJzaXRlOyB3aXRob3V0IGl0IHRoZSBmb3JtIHN0aWxsIHdvcmtzLgogIHZhciBBUEkgPSBmYWxzZSwgYXBpUm9vdCA9IG51bGw7CiAgZnVuY3Rpb24gYXBpKHBhdGgsIG9wdHMpIHsKICAgIHZhciByb290cyA9IGFwaVJvb3QgPyBbYXBpUm9vdF0gOiByZXN0Um9vdHMoKSwgaSA9IDA7CiAgICBmdW5jdGlvbiBhdHRlbXB0KCkgewogICAgICBpZiAoaSA+PSByb290cy5sZW5ndGgpIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ25vdCBhdmFpbGFibGUnKSk7CiAgICAgIHZhciByID0gcm9vdHNbaSsrXSwgdXJsID0gci5yZXBsYWNlKC9cLz8kLywgJy8nKSArICdzai92MS8nICsgcGF0aDsKICAgICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID4gLTEgPyAnJicgOiAnPycpICsgJ189JyArIERhdGUubm93KCk7CiAgICAgIC8vIFBPU1QgZXZlbiBmb3IgcmVhZHMsIHNvIHBhZ2UgY2FjaGVzIG5ldmVyIHNlcnZlIGFuIG9sZCBvciB3cm9uZyBhbnN3ZXIKICAgICAgcmV0dXJuIGZldGNoKHVybCwgb3B0cyB8fCB7IG1ldGhvZDogJ1BPU1QnLCBjcmVkZW50aWFsczogJ29taXQnLCBoZWFkZXJzOiB7ICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbicgfSB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gNDA0ICYmICFhcGlSb290KSByZXR1cm4gYXR0ZW1wdCgpOwogICAgICAgIHJldHVybiByZXMuanNvbigpLnRoZW4oZnVuY3Rpb24gKGopIHsKICAgICAgICAgIGlmICghcmVzLm9rKSB7IHZhciBlID0gbmV3IEVycm9yKChqICYmIGoubWVzc2FnZSkgfHwgKCdIVFRQICcgKyByZXMuc3RhdHVzKSk7IGUuZGF0YSA9IGo7IHRocm93IGU7IH0KICAgICAgICAgIGFwaVJvb3QgPSByOyByZXR1cm4gajsKICAgICAgICB9LCBmdW5jdGlvbiAoKSB7IGlmICghYXBpUm9vdCkgcmV0dXJuIGF0dGVtcHQoKTsgdGhyb3cgbmV3IEVycm9yKCdIVFRQICcgKyByZXMuc3RhdHVzKTsgfSk7CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIGF0dGVtcHQoKTsKICB9CiAgZnVuY3Rpb24gcG9zdChwYXRoLCBib2R5KSB7CiAgICByZXR1cm4gYXBpKHBhdGgsIHsgbWV0aG9kOiAnUE9TVCcsIGNyZWRlbnRpYWxzOiAnb21pdCcsIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LCBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5KSB9KTsKICB9CgogIC8vIENhcHRjaGEKICB2YXIgY2FwRmllbGQgPSAkKCdbZGF0YS1jYXB0Y2hhXScsIGZvcm0pLCBjYXBJbnB1dCA9ICQoJyNzai1jYXAnKSwgY2FwVG9rZW4gPSAnJzsKICBmdW5jdGlvbiBsb2FkQ2FwdGNoYSgpIHsKICAgIHJldHVybiBhcGkoJ2NhcHRjaGEnKS50aGVuKGZ1bmN0aW9uIChjKSB7CiAgICAgIGlmICghYyB8fCAhYy50b2tlbikgdGhyb3cgbmV3IEVycm9yKCdiYWQgY2FwdGNoYScpOwogICAgICBBUEkgPSB0cnVlOyBjYXBUb2tlbiA9IGMudG9rZW47CiAgICAgIHZhciB1cGQgPSAkKCcjanViaWxlZS1wYXltZW50Jyk7IGlmICh1cGQpIHVwZC5oaWRkZW4gPSBmYWxzZTsKICAgICAgdmFyIHBsID0gJCgnLmpzLXBheS1saW5rJyk7IGlmIChwbCkgcGwuaGlkZGVuID0gZmFsc2U7CiAgICAgICQoJy5qcy1jYXBxJywgY2FwRmllbGQpLnRleHRDb250ZW50ID0gYy5xdWVzdGlvbjsKICAgICAgY2FwSW5wdXQudmFsdWUgPSAnJzsgY2FwRmllbGQuaGlkZGVuID0gZmFsc2U7IGNhcEZpZWxkLmNsYXNzTGlzdC5yZW1vdmUoJ2ludmFsaWQnKTsKICAgICAgdnN0YXRlKCk7IHNlY3Rpb25zKCk7CiAgICB9KTsKICB9CiAgJCgnLmpzLWNhcC1uZXcnLCBjYXBGaWVsZCkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7IGxvYWRDYXB0Y2hhKCkudGhlbihmdW5jdGlvbiAoKSB7IGNhcElucHV0LmZvY3VzKCk7IH0sIGZ1bmN0aW9uICgpIHt9KTsgfSk7CgogIC8vIEVtYWlsIHZlcmlmaWNhdGlvbiB3aXRoIGEgNi1kaWdpdCBjb2RlCiAgdmFyIGVtYWlsSW4gPSAkKCcjc2otZW1haWwnKSwgdG9rZW5JbiA9IGVsKCdzal9lbWFpbF90b2tlbicpLCB2Ym94ID0gJCgnLmpzLXZib3gnKSwgdm1zZyA9ICQoJy5qcy12bXNnJyksIHZvayA9ICQoJy5qcy12b2snKTsKICB2YXIgdkJ0biA9ICQoJy5qcy1zZW5kLWNvZGUnKSwgdmhpbnQgPSAkKCcuanMtdmhpbnQnKSwgY29kZUluID0gJCgnLmpzLWNvZGUnKSwgY29kZUJ0biA9ICQoJy5qcy1jaGVjay1jb2RlJyk7CiAgZnVuY3Rpb24gdmVyaWZpZWRGb3IoKSB7IHZhciBwID0gKHRva2VuSW4udmFsdWUgfHwgJycpLnNwbGl0KCd8Jyk7IHJldHVybiBwLmxlbmd0aCA9PT0gMiA\/IHBbMF0gOiAnJzsgfQogIGZ1bmN0aW9uIGVtYWlsVmVyaWZpZWQoKSB7IHZhciBlID0gKGVtYWlsSW4udmFsdWUgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpOyByZXR1cm4gISFlICYmIHZlcmlmaWVkRm9yKCkgPT09IGU7IH0KICBmdW5jdGlvbiB2c3RhdGUoKSB7CiAgICBpZiAoIUFQSSkgcmV0dXJuOwogICAgdmFyIG9rID0gZW1haWxWZXJpZmllZCgpOwogICAgaWYgKG9rKSB2Ym94LmhpZGRlbiA9IHRydWU7CiAgICB2b2suaGlkZGVuID0gIW9rOyBlbWFpbEluLnJlYWRPbmx5ID0gb2s7CiAgICB2QnRuLmhpZGRlbiA9IG9rIHx8ICF2Ym94LmhpZGRlbjsgdmhpbnQuaGlkZGVuID0gb2sgfHwgIXZib3guaGlkZGVuOwogIH0KICBmdW5jdGlvbiBzYXkodGV4dCwgYmFkLCBib2xkKSB7CiAgICB2bXNnLnRleHRDb250ZW50ID0gdGV4dDsgdm1zZy5jbGFzc0xpc3QudG9nZ2xlKCdiYWQnLCAhIWJhZCk7CiAgICBpZiAoYm9sZCkgeyB2YXIgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2InKTsgYi50ZXh0Q29udGVudCA9IGJvbGQ7IHZtc2cuYXBwZW5kQ2hpbGQoYik7IHZtc2cuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJy4gSXQgY2FuIHRha2UgYSBtaW51dGUgdG8gYXJyaXZlLicpKTsgfQogIH0KICBlbWFpbEluLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24gKCkgewogICAgaWYgKHZlcmlmaWVkRm9yKCkgJiYgIWVtYWlsVmVyaWZpZWQoKSkgdG9rZW5Jbi52YWx1ZSA9ICcnOwogICAgdmJveC5oaWRkZW4gPSB0cnVlOyB2c3RhdGUoKTsKICB9KTsKICBmdW5jdGlvbiBzZW5kQ29kZSgpIHsKICAgIHZhciBlID0gKGVtYWlsSW4udmFsdWUgfHwgJycpLnRyaW0oKSwgZiA9IGVtYWlsSW4uY2xvc2VzdCgnLmYnKTsKICAgIGlmICghRU1BSUwudGVzdChlKSkgeyBjaGVjayhmKTsgZW1haWxJbi5mb2N1cygpOyByZXR1cm47IH0KICAgIHZCdG4uZGlzYWJsZWQgPSB0cnVlOyB2YXIgbGFiZWwgPSB2QnRuLnRleHRDb250ZW50OyB2QnRuLnRleHRDb250ZW50ID0gJ1NlbmRpbmdcdTIwMjYnOwogICAgcG9zdCgnc2VuZC1jb2RlJywgeyBlbWFpbDogZSB9KS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgdmJveC5oaWRkZW4gPSBmYWxzZTsgc2F5KCdXZVwndmUgc2VudCBhIDYtZGlnaXQgY29kZSB0byAnLCBmYWxzZSwgZSk7CiAgICAgIGYuY2xhc3NMaXN0LnJlbW92ZSgnaW52YWxpZCcpOyB2YXIgZXIgPSAkKCcuZXJyJywgZik7IGlmIChlcikgZXIudGV4dENvbnRlbnQgPSAnJzsKICAgICAgY29kZUluLnZhbHVlID0gJyc7IHRyeSB7IGNvZGVJbi5mb2N1cygpOyB9IGNhdGNoICh4KSB7fQogICAgfSwgZnVuY3Rpb24gKGVycikgewogICAgICB2Ym94LmhpZGRlbiA9IGZhbHNlOyBzYXkoKGVyci5kYXRhICYmIGVyci5kYXRhLm1lc3NhZ2UpIHx8ICdXZSBjb3VsZG5cJ3Qgc2VuZCB0aGUgY29kZSBqdXN0IG5vdy4gUGxlYXNlIHRyeSBhZ2FpbiBpbiBhIG1pbnV0ZS4nLCB0cnVlKTsKICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkgeyB2QnRuLmRpc2FibGVkID0gZmFsc2U7IHZCdG4udGV4dENvbnRlbnQgPSBsYWJlbDsgdnN0YXRlKCk7IH0pOwogIH0KICBmdW5jdGlvbiBjb25maXJtQ29kZSgpIHsKICAgIHZhciBlID0gKGVtYWlsSW4udmFsdWUgfHwgJycpLnRyaW0oKSwgYyA9IChjb2RlSW4udmFsdWUgfHwgJycpLnJlcGxhY2UoL1xEL2csICcnKTsKICAgIGlmIChjLmxlbmd0aCAhPT0gNikgeyBzYXkoJ1BsZWFzZSBlbnRlciB0aGUgNi1kaWdpdCBjb2RlIGZyb20gdGhlIGVtYWlsLicsIHRydWUpOyBjb2RlSW4uZm9jdXMoKTsgcmV0dXJuOyB9CiAgICBpZiAoY29kZUJ0bi5kaXNhYmxlZCkgcmV0dXJuOwogICAgY29kZUJ0bi5kaXNhYmxlZCA9IHRydWU7CiAgICBwb3N0KCd2ZXJpZnktY29kZScsIHsgZW1haWw6IGUsIGNvZGU6IGMgfSkudGhlbihmdW5jdGlvbiAocikgewogICAgICB0b2tlbkluLnZhbHVlID0gZS50b0xvd2VyQ2FzZSgpICsgJ3wnICsgci50b2tlbjsKICAgICAgdnN0YXRlKCk7IGNoZWNrKGVtYWlsSW4uY2xvc2VzdCgnLmYnKSk7IHJlZnJlc2goKTsgc2F2ZURyYWZ0KCk7CiAgICB9LCBmdW5jdGlvbiAoZXJyKSB7CiAgICAgIHNheSgoZXJyLmRhdGEgJiYgZXJyLmRhdGEubWVzc2FnZSkgfHwgJ1dlIGNvdWxkblwndCBjaGVjayB0aGUgY29kZSBqdXN0IG5vdy4gUGxlYXNlIHRyeSBhZ2Fpbi4nLCB0cnVlKTsKICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkgeyBjb2RlQnRuLmRpc2FibGVkID0gZmFsc2U7IH0pOwogIH0KICB2QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2VuZENvZGUpOwogICQoJy5qcy1yZXNlbmQnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHNlbmRDb2RlKTsKICBjb2RlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgY29uZmlybUNvZGUpOwogIGNvZGVJbi5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHsgaWYgKGUua2V5ID09PSAnRW50ZXInKSB7IGUucHJldmVudERlZmF1bHQoKTsgY29uZmlybUNvZGUoKTsgfSB9KTsKICBjb2RlSW4uYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBmdW5jdGlvbiAoKSB7IGlmIChjb2RlSW4udmFsdWUucmVwbGFjZSgvXEQvZywgJycpLmxlbmd0aCA9PT0gNikgY29uZmlybUNvZGUoKTsgfSk7CiAgJCgnLmpzLWNoYW5nZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgeyB0b2tlbkluLnZhbHVlID0gJyc7IGVtYWlsSW4ucmVhZE9ubHkgPSBmYWxzZTsgdnN0YXRlKCk7IGVtYWlsSW4uZm9jdXMoKTsgZW1haWxJbi5zZWxlY3QoKTsgfSk7CgogIC8vIFJlZ2lzdHJhdGlvbnMgc28gZmFyLCBieSBiYXRjaCB5ZWFyCiAgdmFyIHN0YXRzRWwgPSAkKCcuanMtc3RhdHMnKSwgc3RhdHMgPSBudWxsLCBzaG93QWxsID0gZmFsc2UsIExJTUlUID0gMTI7CiAgZnVuY3Rpb24gbG9hZFN0YXRzKCkgeyByZXR1cm4gYXBpKCdzdGF0cycpLnRoZW4oZnVuY3Rpb24gKHMpIHsgc3RhdHMgPSBzOyBkcmF3U3RhdHMoKTsgfSk7IH0KICBmdW5jdGlvbiBkcmF3U3RhdHMoKSB7CiAgICBpZiAoIXN0YXRzIHx8ICFzdGF0c0VsKSByZXR1cm47CiAgICB2YXIgbGlzdCA9IChzdGF0cy5iYXRjaGVzIHx8IFtdKS5maWx0ZXIoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIuY291bnQgPiAwOyB9KTsKICAgIHZhciB0b3RhbCA9IE51bWJlcihzdGF0cy50b3RhbCkgfHwgMDsKICAgIHN0YXRzRWwuaGlkZGVuID0gZmFsc2U7CiAgICAkKCcuanMtdG90YWwnLCBzdGF0c0VsKS50ZXh0Q29udGVudCA9IHRvdGFsLnRvTG9jYWxlU3RyaW5nKCdlbi1JTicpOwogICAgJCgnLmpzLXRvdGFsLXN1YicsIHN0YXRzRWwpLnRleHRDb250ZW50ID0gdG90YWwKICAgICAgPyAodG90YWwgPT09IDEgPyAnYWx1bW51cycgOiAnYWx1bW5pJykgKyAnIGZyb20gJyArIGxpc3QubGVuZ3RoICsgKGxpc3QubGVuZ3RoID09PSAxID8gJyBiYXRjaCcgOiAnIGJhdGNoZXMnKSArICcgcmVnaXN0ZXJlZCcKICAgICAgOiAnUmVnaXN0cmF0aW9uIGlzIG9wZW4gbm93Lic7CiAgICAkKCcuanMtZW1wdHknLCBzdGF0c0VsKS5oaWRkZW4gPSBsaXN0Lmxlbmd0aCA+IDA7CiAgICB2YXIgc2hvd24gPSBzaG93QWxsID8gbGlzdC5zbGljZSgpIDogbGlzdC5zbGljZSgpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIuY291bnQgLSBhLmNvdW50IHx8IGIueWVhciAtIGEueWVhcjsgfSkuc2xpY2UoMCwgTElNSVQpOwogICAgc2hvd24uc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYi55ZWFyIC0gYS55ZWFyOyB9KTsKICAgIHZhciBtYXggPSBNYXRoLm1heC5hcHBseShudWxsLCBzaG93bi5tYXAoZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIuY291bnQ7IH0pLmNvbmNhdChbMV0pKTsKICAgIHZhciBvbCA9ICQoJy5qcy1iYXJzJywgc3RhdHNFbCk7IG9sLmlubmVySFRNTCA9ICcnOwogICAgc2hvd24uZm9yRWFjaChmdW5jdGlvbiAoYikgewogICAgICB2YXIgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpOyBsaS50aXRsZSA9ICdCYXRjaCBvZiAnICsgYi55ZWFyICsgJzogJyArIGIuY291bnQgKyAnIHJlZ2lzdGVyZWQnOwogICAgICBsaS5pbm5lckhUTUwgPSAnPHNwYW4gY2xhc3M9InlyIj48L3NwYW4+PHNwYW4gY2xhc3M9InRyYWNrIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHNwYW4gY2xhc3M9ImZpbGwiPjwvc3Bhbj48L3NwYW4+PHNwYW4gY2xhc3M9Im4iPjwvc3Bhbj4nOwogICAgICBsaS5xdWVyeVNlbGVjdG9yKCcueXInKS50ZXh0Q29udGVudCA9IGIueWVhcjsKICAgICAgbGkucXVlcnlTZWxlY3RvcignLm4nKS50ZXh0Q29udGVudCA9IGIuY291bnQ7CiAgICAgIGxpLnF1ZXJ5U2VsZWN0b3IoJy5maWxsJykuc3R5bGUud2lkdGggPSBNYXRoLm1heCgyLCBiLmNvdW50IC8gbWF4ICogMTAwKSArICclJzsKICAgICAgbGkuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0JhdGNoIG9mICcgKyBiLnllYXIgKyAnLCAnICsgYi5jb3VudCArICcgcmVnaXN0ZXJlZCcpOwogICAgICBvbC5hcHBlbmRDaGlsZChsaSk7CiAgICB9KTsKICAgIHZhciBtb3JlID0gJCgnLmpzLWJhcnMtbW9yZScsIHN0YXRzRWwpOwogICAgbW9yZS5oaWRkZW4gPSBzaG93QWxsIHx8IGxpc3QubGVuZ3RoIDw9IExJTUlUOwogICAgbW9yZS50ZXh0Q29udGVudCA9ICdTaG93IGFsbCAnICsgbGlzdC5sZW5ndGggKyAnIGJhdGNoZXMnOwogICAgJCgnI3NqLXN0YXRzLWgnLCBzdGF0c0VsKS50ZXh0Q29udGVudCA9ICFzaG93QWxsICYmIGxpc3QubGVuZ3RoID4gTElNSVQgPyAnVG9wIGJhdGNoZXMgc28gZmFyJyA6ICdCeSBiYXRjaCB5ZWFyJzsKICB9CiAgaWYgKHN0YXRzRWwpICQoJy5qcy1iYXJzLW1vcmUnLCBzdGF0c0VsKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsgc2hvd0FsbCA9IHRydWU7IGRyYXdTdGF0cygpOyB9KTsKCiAgbG9hZENhcHRjaGEoKS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7CiAgbG9hZFN0YXRzKCkuY2F0Y2goZnVuY3Rpb24gKCkge30pOwoKICAvLyAtLS0tLS0tLS0tIENvbnRhY3QgRm9ybSA3IGRlbGl2ZXJ5IC0tLS0tLS0tLS0KICBmdW5jdGlvbiBmaW5kQ0Y3KCkgewogICAgdmFyIGZvcm1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZm9ybS53cGNmNy1mb3JtJyksIGJlc3QgPSBudWxsOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmb3Jtcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAocm9vdC5jb250YWlucyhmb3Jtc1tpXSkpIGNvbnRpbnVlOwogICAgICBpZiAoZm9ybXNbaV0ucXVlcnlTZWxlY3RvcignaW5wdXRbdHlwZT1maWxlXScpKSByZXR1cm4gZm9ybXNbaV07ICAgLy8gcHJlZmVyIHRoZSBmb3JtIHRoYXQgYWNjZXB0cyB1cGxvYWRzCiAgICAgIGlmICghYmVzdCkgYmVzdCA9IGZvcm1zW2ldOwogICAgfQogICAgcmV0dXJuIGJlc3Q7CiAgfQogIGZ1bmN0aW9uIHBpY2soZm0sIHRlc3QpIHsKICAgIHZhciBlbHMgPSBmbS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCcpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGUgPSBlbHNbaV0sIG4gPSAoZS5uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpOwogICAgICBpZiAoZS50eXBlID09PSAnaGlkZGVuJyB8fCBlLnR5cGUgPT09ICdmaWxlJyB8fCBuLmNoYXJBdCgwKSA9PT0gJ18nKSBjb250aW51ZTsKICAgICAgaWYgKHRlc3QoZSwgbikpIHJldHVybiBlOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGZ1bmN0aW9uIHNldFZhbChlLCB2KSB7IGlmICghZSkgcmV0dXJuOyBlLnZhbHVlID0gdjsgZS5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSkpOyBlLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpOyB9CiAgZnVuY3Rpb24gZmlsbENGNyhmbSwgZCkgewogICAgdmFyIHVzZWQgPSBbXTsKICAgIHZhciBlbWFpbCA9IHBpY2soZm0sIGZ1bmN0aW9uIChlLCBuKSB7IHJldHVybiBlLnR5cGUgPT09ICdlbWFpbCcgfHwgbi5pbmRleE9mKCdlbWFpbCcpID4gLTE7IH0pOwogICAgdmFyIG5hbWUgPSBwaWNrKGZtLCBmdW5jdGlvbiAoZSwgbikgeyByZXR1cm4gZS50YWdOYW1lID09PSAnSU5QVVQnICYmIGUudHlwZSA9PT0gJ3RleHQnICYmIG4uaW5kZXhPZignbmFtZScpID4gLTE7IH0pOwogICAgdmFyIHN1YmplY3QgPSBwaWNrKGZtLCBmdW5jdGlvbiAoZSwgbikgeyByZXR1cm4gbi5pbmRleE9mKCdzdWJqZWN0JykgPiAtMTsgfSk7CiAgICB2YXIgcGhvbmUgPSBwaWNrKGZtLCBmdW5jdGlvbiAoZSwgbikgeyByZXR1cm4gZS50eXBlID09PSAndGVsJyB8fCBuLmluZGV4T2YoJ3Bob25lJykgPiAtMSB8fCBuLmluZGV4T2YoJ3RlbCcpID4gLTEgfHwgbi5pbmRleE9mKCdtb2JpbGUnKSA+IC0xIHx8IG4uaW5kZXhPZignd2hhdHNhcHAnKSA+IC0xOyB9KTsKICAgIHZhciBtc2cgPSBwaWNrKGZtLCBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZS50YWdOYW1lID09PSAnVEVYVEFSRUEnOyB9KTsKICAgIHNldFZhbChlbWFpbCwgZC5lbWFpbCk7IHNldFZhbChuYW1lLCBkLm5hbWUpOyBzZXRWYWwoc3ViamVjdCwgZC5zdWJqZWN0KTsgc2V0VmFsKHBob25lLCBkLnBob25lKTsgc2V0VmFsKG1zZywgZC5zdW1tYXJ5KTsKICAgIHVzZWQucHVzaChlbWFpbCwgbmFtZSwgc3ViamVjdCwgcGhvbmUsIG1zZyk7CiAgICAvLyBPcHRpb25hbCBleHRyYSBmaWVsZHMsIGlmIHRoZSBDb250YWN0IEZvcm0gNyBmb3JtIGhhcyB0aGVtIChuYW1lZCBsaWtlIG91cnMsIGUuZy4gInJlZ2lkIiwgImJhdGNoIikKICAgIE9iamVjdC5rZXlzKGQuZXh0cmEpLmZvckVhY2goZnVuY3Rpb24gKGspIHsKICAgICAgdmFyIGUgPSBmbS5xdWVyeVNlbGVjdG9yKCdbbmFtZT0iJyArIGsgKyAnIl0nKTsKICAgICAgaWYgKGUgJiYgdXNlZC5pbmRleE9mKGUpID09PSAtMSAmJiBlLnR5cGUgIT09ICdmaWxlJykgeyBzZXRWYWwoZSwgZC5leHRyYVtrXSk7IHVzZWQucHVzaChlKTsgfQogICAgfSk7CiAgICBmbS5xdWVyeVNlbGVjdG9yQWxsKCcud3BjZjctYWNjZXB0YW5jZSBpbnB1dFt0eXBlPWNoZWNrYm94XSwgaW5wdXRbdHlwZT1jaGVja2JveF1bbmFtZSo9ImFjY2VwdCJdJykuZm9yRWFjaChmdW5jdGlvbiAoYykgeyBjLmNoZWNrZWQgPSB0cnVlOyB9KTsKICAgIGZtLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W2FyaWEtcmVxdWlyZWQ9InRydWUiXSwgdGV4dGFyZWFbYXJpYS1yZXF1aXJlZD0idHJ1ZSJdLCAud3BjZjctdmFsaWRhdGVzLWFzLXJlcXVpcmVkJykuZm9yRWFjaChmdW5jdGlvbiAoZSkgewogICAgICBpZiAodXNlZC5pbmRleE9mKGUpID09PSAtMSAmJiAhZS52YWx1ZSAmJiAoZS50YWdOYW1lID09PSAnVEVYVEFSRUEnIHx8IGUudHlwZSA9PT0gJ3RleHQnKSkgc2V0VmFsKGUsIGQuc3ViamVjdCk7CiAgICB9KTsKICAgIGlmICghbXNnICYmIHN1YmplY3QpIHNldFZhbChzdWJqZWN0LCBkLnN1YmplY3QgKyAnIHwgJyArIGQuc3VtbWFyeS5yZXBsYWNlKC9cbisvZywgJyB8ICcpKTsKICB9CiAgZnVuY3Rpb24gZmlsZVNsb3RzKGZtKSB7ICAgICAgLy8gd2hpY2ggb2Ygb3VyIHVwbG9hZHMgdGhlIENvbnRhY3QgRm9ybSA3IGZvcm0gY2FuIHRha2UKICAgIHZhciBzbG90cyA9IHt9LCBpbnB1dHMgPSBmbS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPWZpbGVdJyk7CiAgICB2YXIgcnVsZXMgPSB7IHNqX3Bob3RvOiAvcGhvdG98cGljfGltYWdlL2ksIHNqX3JlY2VpcHQ6IC9yZWNlaXB0fHBheXxzY3JlZW58dXRyL2kgfTsKICAgIHZhciB0YWtlbiA9IFtdOwogICAgT2JqZWN0LmtleXMocnVsZXMpLmZvckVhY2goZnVuY3Rpb24gKGspIHsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodGFrZW4uaW5kZXhPZihpbnB1dHNbaV0pID09PSAtMSAmJiBydWxlc1trXS50ZXN0KGlucHV0c1tpXS5uYW1lKSkgeyBzbG90c1trXSA9IGlucHV0c1tpXS5uYW1lOyB0YWtlbi5wdXNoKGlucHV0c1tpXSk7IHJldHVybjsgfQogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBzbG90czsKICB9CiAgZnVuY3Rpb24gcmVzdFJvb3RzKCkgewogICAgdmFyIHJvb3RzID0gW107CiAgICB0cnkgeyBpZiAod2luZG93LndwY2Y3ICYmIHdwY2Y3LmFwaSAmJiB3cGNmNy5hcGkucm9vdCkgcm9vdHMucHVzaCh3cGNmNy5hcGkucm9vdCk7IH0gY2F0Y2ggKHgpIHt9CiAgICB2YXIgbGluayA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2xpbmtbcmVsPSJodHRwczovL2FwaS53Lm9yZy8iXScpOwogICAgaWYgKGxpbmsgJiYgbGluay5ocmVmKSByb290cy5wdXNoKGxpbmsuaHJlZik7CiAgICB2YXIgcGF0aCA9IGxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KCcvJylbMV07CiAgICBpZiAocGF0aCAmJiBwYXRoLmluZGV4T2YoJy4nKSA9PT0gLTEpIHJvb3RzLnB1c2gobG9jYXRpb24ub3JpZ2luICsgJy8nICsgcGF0aCArICcvd3AtanNvbi8nKTsKICAgIHJvb3RzLnB1c2gobG9jYXRpb24ub3JpZ2luICsgJy93cC1qc29uLycpOwogICAgcm9vdHMucHVzaChsb2NhdGlvbi5vcmlnaW4gKyAnLz9yZXN0X3JvdXRlPS8nKTsKICAgIHJldHVybiByb290cy5maWx0ZXIoZnVuY3Rpb24gKHIsIGkpIHsgcmV0dXJuIHJvb3RzLmluZGV4T2YocikgPT09IGk7IH0pOwogIH0KICBmdW5jdGlvbiBlbmRwb2ludChyLCBpZCkgeyByZXR1cm4gci5yZXBsYWNlKC9cLz8kLywgJy8nKSArICdjb250YWN0LWZvcm0tNy92MS9jb250YWN0LWZvcm1zLycgKyBpZCArICcvZmVlZGJhY2snOyB9CiAgZnVuY3Rpb24gc2VuZENGNyhmbSwgc2xvdHMsIGV4dHJhKSB7CiAgICB2YXIgaWRFbCA9IGZtLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9Il93cGNmNyJdJyksIGlkID0gaWRFbCA\/IGlkRWwudmFsdWUgOiAnJzsKICAgIGlmICghaWQpIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ2Zvcm0gaWQgbWlzc2luZycpKTsKICAgIHZhciBkYXRhID0gbmV3IEZvcm1EYXRhKGZtKTsKICAgIE9iamVjdC5rZXlzKGV4dHJhIHx8IHt9KS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IGRhdGEuc2V0KGssIGV4dHJhW2tdKTsgfSk7CiAgICBpZiAoIWRhdGEuZ2V0KCdfd3BjZjdfdW5pdF90YWcnKSkgewogICAgICB2YXIgaG9zdCA9IGZtLmNsb3Nlc3QoJy53cGNmNycpOwogICAgICBkYXRhLnNldCgnX3dwY2Y3X3VuaXRfdGFnJywgaG9zdCAmJiBob3N0LmlkID8gaG9zdC5pZCA6ICd3cGNmNy1mJyArIGlkICsgJy1vMScpOwogICAgfQogICAgT2JqZWN0LmtleXMoc2xvdHMpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgaWYgKGZpbGVzW2tdKSBkYXRhLnNldChzbG90c1trXSwgZmlsZXNba10sIGZpbGVzW2tdLm5hbWUgfHwgKGsgKyAnLmpwZycpKTsgfSk7CiAgICB2YXIgcm9vdHMgPSByZXN0Um9vdHMoKSwgaSA9IDA7CiAgICBmdW5jdGlvbiBhdHRlbXB0KCkgewogICAgICBpZiAoaSA+PSByb290cy5sZW5ndGgpIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ2VuZHBvaW50IG5vdCBmb3VuZCcpKTsKICAgICAgcmV0dXJuIGZldGNoKGVuZHBvaW50KHJvb3RzW2krK10sIGlkKSwgeyBtZXRob2Q6ICdQT1NUJywgYm9keTogZGF0YSwgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicsIGhlYWRlcnM6IHsgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJyB9IH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHIpIHsKICAgICAgICAgIGlmIChyLnN0YXR1cyA9PT0gNDA0KSByZXR1cm4gYXR0ZW1wdCgpOwogICAgICAgICAgcmV0dXJuIHIuanNvbigpLmNhdGNoKGZ1bmN0aW9uICgpIHsgdGhyb3cgbmV3IEVycm9yKCdIVFRQICcgKyByLnN0YXR1cyk7IH0pOwogICAgICAgIH0pOwogICAgfQogICAgdmFyIHRpbWVvdXQgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoXywgcmVqKSB7IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZWoobmV3IEVycm9yKCd0aW1lZCBvdXQnKSk7IH0sIDYwMDAwKTsgfSk7CiAgICByZXR1cm4gUHJvbWlzZS5yYWNlKFthdHRlbXB0KCksIHRpbWVvdXRdKTsKICB9CgogIC8vIC0tLS0tLS0tLS0gQWRkIGEgVVRSIGFmdGVyIHJlZ2lzdGVyaW5nIC0tLS0tLS0tLS0KICB2YXIgdUZvcm0gPSAkKCcjc2otdXBkJyk7CiAgaWYgKHVGb3JtKSB7CiAgICB2YXIgdUlkID0gJCgnI3NqLXUtaWQnLCB1Rm9ybSksIHVFbWFpbCA9ICQoJyNzai11LWVtYWlsJywgdUZvcm0pLCB1VXRyID0gJCgnI3NqLXUtdXRyJywgdUZvcm0pLCB1UmVzID0gJCgnLmpzLXUtcmVzdWx0JywgdUZvcm0pLCB1QnRuID0gJCgnLmpzLXUtc2VuZCcsIHVGb3JtKTsKICAgIHZhciBjbGVhbklkID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuICh2IHx8ICcnKS50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoL1xzKy9nLCAnJykucmVwbGFjZSgvXy9nLCAnXycpOyB9OwogICAgdmFyIHVNb2RlID0gZnVuY3Rpb24gKCkgeyB2YXIgYyA9IHVGb3JtLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W25hbWU9c2pfdV9tb2RlXTpjaGVja2VkJyk7IHJldHVybiBjID8gYy52YWx1ZSA6ICcnOyB9OwogICAgdmFyIHVTaG93ID0gZnVuY3Rpb24gKGtleSwgbXNnKSB7CiAgICAgIHZhciBmID0gJCgnW2RhdGEtdT0iJyArIGtleSArICciXScsIHVGb3JtKTsgZi5jbGFzc0xpc3QudG9nZ2xlKCdpbnZhbGlkJywgISFtc2cpOwogICAgICAkKCcuZXJyJywgZikudGV4dENvbnRlbnQgPSBtc2cgfHwgJyc7IHJldHVybiAhbXNnOwogICAgfTsKICAgIHZhciB1VWkgPSBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBtID0gdU1vZGUoKSwgdSA9IGNsZWFuUmVmKHVVdHIudmFsdWUpLCB1cGkgPSBtID09PSAnVVBJIC8gUVIgY29kZSc7CiAgICAgICQoJy5qcy11LWxhYmVsJywgdUZvcm0pLnRleHRDb250ZW50ID0gIW0gPyAnVHJhbnNhY3Rpb24gcmVmZXJlbmNlIChVVFIpJyA6IHVwaSA\/ICdVUEkgdHJhbnNhY3Rpb24gSUQgKFVUUiAvIFVQSSBSZWYuIE5vLiknIDogJ05FRlQgVVRSIG9yIElNUFMgcmVmZXJlbmNlIG51bWJlcic7CiAgICAgIHVVdHIucGxhY2Vob2xkZXIgPSAhbSA\/ICdDaG9vc2UgaG93IHlvdSBwYWlkIGZpcnN0JyA6IHVwaSA\/ICcxMiBkaWdpdHMsIGUuZy4gNDEyMzQ1Njc4OTAxJyA6ICdORUZUIGUuZy4gU0JJTk4yNjI5MTEyMzQ1NiBcdTAwYjcgSU1QUyAxMiBkaWdpdHMnOwogICAgICAkKCcuanMtdS1oaW50JywgdUZvcm0pLnRleHRDb250ZW50ID0gIW0gPyAnJyA6IHVwaSA\/ICdJbiB5b3VyIFVQSSBhcHAgdW5kZXIgdGhlIHBheW1lbnQgZGV0YWlscy4gSXQgaGFzIDEyIGNoYXJhY3RlcnMuJyA6ICdPbiB5b3VyIGJhbmtcJ3MgdHJhbnNmZXIgY29uZmlybWF0aW9uLiBORUZUOiAxNiBjaGFyYWN0ZXJzLiBJTVBTOiAxMiBkaWdpdHMuJzsKICAgICAgdmFyIGNudCA9ICQoJy5qcy11LWNvdW50JywgdUZvcm0pLCB0YXJnZXQgPSB1cGkgPyAnMTInIDogKC9eXGQrJC8udGVzdCh1KSA\/ICcxMicgOiAnMTYnKTsKICAgICAgY250LnRleHRDb250ZW50ID0gdSAmJiBtID8gdS5sZW5ndGggKyAnLycgKyB0YXJnZXQgOiAnJzsKICAgICAgY250LmNsYXNzTGlzdC50b2dnbGUoJ2dvb2QnLCAhIXUgJiYgISFtICYmIHV0clJ1bGVzKG0sIHUpLm9rKTsKICAgIH07CiAgICB1Rm9ybS5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIHVVaSk7IHVGb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHsgdVVpKCk7IGlmICgkKCdbZGF0YS11PSJ1dHIiXScsIHVGb3JtKS5jbGFzc0xpc3QuY29udGFpbnMoJ2ludmFsaWQnKSkgdUNoZWNrKCk7IH0pOwogICAgdVV0ci5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgZnVuY3Rpb24gKCkgeyB1VXRyLnZhbHVlID0gY2xlYW5SZWYodVV0ci52YWx1ZSk7IHVVaSgpOyB9KTsKICAgIHZhciB1Q2hlY2sgPSBmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBvayA9IHRydWUsIGlkID0gY2xlYW5JZCh1SWQudmFsdWUpLCBtID0gdU1vZGUoKSwgdSA9IGNsZWFuUmVmKHVVdHIudmFsdWUpOwogICAgICBvayA9IHVTaG93KCdpZCcsIC9eU01TLUJCTC1cZHs0fS1cZHsxLDR9KC1QRU5ESU5HXz9QQVlNRU5UKT8kLy50ZXN0KGlkKSA\/ICcnIDogJ1BsZWFzZSBlbnRlciB5b3VyIHJlZ2lzdHJhdGlvbiBJRCwgZS5nLiBTTVMtQkJMLTE5OTItMDAxLVBFTkRJTkdfUEFZTUVOVC4nKSAmJiBvazsKICAgICAgb2sgPSB1U2hvdygnZW1haWwnLCBFTUFJTC50ZXN0KCh1RW1haWwudmFsdWUgfHwgJycpLnRyaW0oKSkgPyAnJyA6ICdQbGVhc2UgZW50ZXIgdGhlIGVtYWlsIHlvdSByZWdpc3RlcmVkIHdpdGguJykgJiYgb2s7CiAgICAgIG9rID0gdVNob3coJ21vZGUnLCBtID8gJycgOiAnUGxlYXNlIGNob29zZSBob3cgeW91IHBhaWQuJykgJiYgb2s7CiAgICAgIHZhciByID0gbSA\/ICh1ID8gdXRyUnVsZXMobSwgdSkgOiB7IG9rOiBmYWxzZSwgbXNnOiAnUGxlYXNlIGVudGVyIHlvdXIgdHJhbnNhY3Rpb24gcmVmZXJlbmNlIChVVFIpLicgfSkgOiB7IG9rOiB0cnVlIH07CiAgICAgIG9rID0gdVNob3coJ3V0cicsIHIub2sgPyAnJyA6IHIubXNnKSAmJiBvazsKICAgICAgcmV0dXJuIG9rOwogICAgfTsKICAgIHVGb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIGZ1bmN0aW9uIChlKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgdVJlcy5oaWRkZW4gPSB0cnVlOwogICAgICBpZiAoIXVDaGVjaygpKSB7IHZhciBiYWQgPSAkKCcuaW52YWxpZCBpbnB1dCcsIHVGb3JtKTsgaWYgKGJhZCkgYmFkLmZvY3VzKCk7IHJldHVybjsgfQogICAgICB1QnRuLmRpc2FibGVkID0gdHJ1ZTsgdmFyIGxhYmVsID0gdUJ0bi50ZXh0Q29udGVudDsgdUJ0bi50ZXh0Q29udGVudCA9ICdVcGRhdGluZ1x1MjAyNic7CiAgICAgIHBvc3QoJ2FkZC11dHInLCB7IHJlZ2lkOiBjbGVhbklkKHVJZC52YWx1ZSksIGVtYWlsOiAodUVtYWlsLnZhbHVlIHx8ICcnKS50cmltKCksIG1vZGU6IHVNb2RlKCksIHV0cjogY2xlYW5SZWYodVV0ci52YWx1ZSkgfSkudGhlbihmdW5jdGlvbiAocikgewogICAgICAgIHVSZXMuY2xhc3NOYW1lID0gJ3VwZC1yZXN1bHQganMtdS1yZXN1bHQgb2snOwogICAgICAgIHVSZXMudGV4dENvbnRlbnQgPSAnVGhhbmsgeW91ISAnICsgci5yZWdpZCArICcgaXMgbm93IENPTkZJUk1FRC4gV2VcJ3ZlIGVtYWlsZWQgeW91IGEgY29uZmlybWF0aW9uLiBZb3VyIFVUUiB3aWxsIGJlIHZlcmlmaWVkIG9mZmxpbmUsIGFuZCB3ZVwnbGwgY29udGFjdCB5b3UgaWYgaXQgY2FuXCd0IGJlIG1hdGNoZWQuJzsKICAgICAgICB2YXIgc3QgPSAkKCcuanMtc3RhdHVzJywgZG9uZUJveCk7CiAgICAgICAgaWYgKCFkb25lQm94LmhpZGRlbiAmJiByZWdJZCAmJiByZWdJZC5pbmRleE9mKHIucmVnaWQpID09PSAwKSB7CiAgICAgICAgICBzdC50ZXh0Q29udGVudCA9ICdDT05GSVJNRUQnOyBzdC5jbGFzc05hbWUgPSAnc3RhdHVzIGpzLXN0YXR1cyBjb25maXJtZWQnOwogICAgICAgICAgJCgnLmpzLXJlZ2lkJywgZG9uZUJveCkudGV4dENvbnRlbnQgPSByLnJlZ2lkOyAkKCcuanMtbGF0ZXInLCBkb25lQm94KS5oaWRkZW4gPSB0cnVlOyAkKCcuanMtZG9uZS1wYXknLCBkb25lQm94KS5oaWRkZW4gPSB0cnVlOwogICAgICAgIH0KICAgICAgfSwgZnVuY3Rpb24gKGVycikgewogICAgICAgIHVSZXMuY2xhc3NOYW1lID0gJ3VwZC1yZXN1bHQganMtdS1yZXN1bHQgYmFkJzsKICAgICAgICB1UmVzLnRleHRDb250ZW50ID0gKGVyci5kYXRhICYmIGVyci5kYXRhLm1lc3NhZ2UpIHx8ICdXZSBjb3VsZG5cJ3QgdXBkYXRlIHlvdXIgcmVnaXN0cmF0aW9uIGp1c3Qgbm93LiBQbGVhc2UgdHJ5IGFnYWluLCBvciBXaGF0c0FwcCB1cy4nOwogICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHsKICAgICAgICB1QnRuLmRpc2FibGVkID0gZmFsc2U7IHVCdG4udGV4dENvbnRlbnQgPSBsYWJlbDsgdVJlcy5oaWRkZW4gPSBmYWxzZTsKICAgICAgICB0cnkgeyB1UmVzLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTsgfSBjYXRjaCAoeCkge30KICAgICAgICB1UmVzLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICAvLyAtLS0tLS0tLS0tIFN1Ym1pdCAtLS0tLS0tLS0tCiAgdmFyIHNlbmRCdG4gPSAkKCdidXR0b25bdHlwZT1zdWJtaXRdJywgZm9ybSksIHNlbmRMYWJlbCA9IHNlbmRCdG4uaW5uZXJIVE1MOwogIHZhciBmYWlsQm94ID0gJCgnLmZhaWwnLCBmb3JtKSwgZG9uZUJveCA9ICQoJy5kb25lJyk7CiAgdmFyIHN1bW1hcnkgPSAnJywgcmVnSWQgPSAnJywgd2FUZXh0ID0gJyc7CiAgZnVuY3Rpb24gYnVzeShvbiwgbGFiZWwpIHsKICAgIHNlbmRCdG4uZGlzYWJsZWQgPSBvbjsKICAgIHNlbmRCdG4uc2V0QXR0cmlidXRlKCdhcmlhLWJ1c3knLCBvbiA\/ICd0cnVlJyA6ICdmYWxzZScpOwogICAgc2VuZEJ0bi5pbm5lckhUTUwgPSBvbiA\/ICc8c3BhbiBjbGFzcz0ic3BpbiIgYXJpYS1oaWRkZW49InRydWUiPjwvc3Bhbj4nICsgKGxhYmVsIHx8ICdTZW5kaW5nIHlvdXIgcmVnaXN0cmF0aW9uXHUyMDI2JykgOiBzZW5kTGFiZWw7CiAgfQogIGZ1bmN0aW9uIGZhaWwobXNnKSB7CiAgICBidXN5KGZhbHNlKTsKICAgICQoJy5mYWlsLW1zZycsIGZhaWxCb3gpLnRleHRDb250ZW50ID0gbXNnICsgJyBZb3VyIGFuc3dlcnMgYXJlIHN0aWxsIGhlcmUsIHNvIHlvdSBjYW4gdHJ5IGFnYWluLCBvciBzZW5kIHRoZW0gdG8gdXMgb24gV2hhdHNBcHAuJzsKICAgIGZhaWxCb3guY2xhc3NMaXN0LmFkZCgnc2hvdycpOwogICAgZmFpbEJveC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pOwogICAgdHJ5IHsgZmFpbEJveC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7IH0gY2F0Y2ggKHgpIHt9CiAgfQogIGZ1bmN0aW9uIGNvcHlUZXh0KHQsIG9rKSB7CiAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCAmJiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCkgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodCkudGhlbihvaywgZnVuY3Rpb24gKCkge30pOwogICAgZWxzZSB7IHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTsgYS52YWx1ZSA9IHQ7IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7IGEuc2VsZWN0KCk7IHRyeSB7IGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7IG9rKCk7IH0gY2F0Y2ggKHgpIHt9IGEucmVtb3ZlKCk7IH0KICB9CiAgJCgnLmpzLWNvcHktc3VtbWFyeScsIGZvcm0pLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsKICAgIHZhciBiID0gZS5jdXJyZW50VGFyZ2V0OyBjb3B5VGV4dChzdW1tYXJ5LCBmdW5jdGlvbiAoKSB7IGIudGV4dENvbnRlbnQgPSAnQ29waWVkJzsgfSk7CiAgfSk7CgogIGZvcm0ucmVtb3ZlQXR0cmlidXRlKCdvbnN1Ym1pdCcpOwogIHdpbmRvdy5zalJlYWR5ID0gdHJ1ZTsKICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIGZ1bmN0aW9uIChlKSB7CiAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICBpZiAoc2VuZEJ0bi5kaXNhYmxlZCkgcmV0dXJuOwogICAgdHJ5IHsgc3VibWl0KCk7IH0gY2F0Y2ggKGVycikgewogICAgICBpZiAod2luZG93LmNvbnNvbGUpIGNvbnNvbGUuZXJyb3IoJ0p1YmlsZWUgcmVnaXN0cmF0aW9uIGVycm9yJywgZXJyKTsKICAgICAgZmFpbCgnW0NvZGUgRl0gU29tZXRoaW5nIHdlbnQgd3Jvbmcgb24gdGhpcyBwYWdlICgnICsgKGVyciAmJiBlcnIubWVzc2FnZSA\/IGVyci5tZXNzYWdlIDogJ3Vua25vd24gZXJyb3InKSArICcpLicpOwogICAgfQogIH0pOwoKICBmdW5jdGlvbiBidWlsZCgpIHsKICAgIHZhciBmZWUgPSBmZWVBbW91bnQoKSwgbW9kZSA9IHJhZGlvKCdzal9tb2RlJyksIGZhbSA9IHJhZGlvKCdzal9mYW1pbHknKSwgcGFydCA9IHJhZGlvKCdzal9wYXJ0Jyk7CiAgICB2YXIgY2xzID0gcmFkaW8oJ3NqX2NsYXNzJykgPT09ICdPdGhlcicgPyAnT3RoZXI6ICcgKyB2YWwoJ3NqX2NsYXNzX290aGVyJykgOiByYWRpbygnc2pfY2xhc3MnKTsKICAgIHZhciBjYXBzID0gY2hlY2tzKCdzal9jYXAnKS5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMgPT09ICdPdGhlcicgPyAnT3RoZXI6ICcgKyB2YWwoJ3NqX2NhcF9vdGhlcicpIDogYzsgfSk7CiAgICB2YXIgZGF5cyA9IGNoZWNrcygnc2pfZGF5cycpOyBpZiAoZGF5cy5pbmRleE9mKCdBbGwgdGhyZWUgZGF5cycpID4gLTEpIGRheXMgPSBbJ0FsbCB0aHJlZSBkYXlzICg5dGgsIDEwdGggJiAxMXRoIERlYyknXTsKICAgIHZhciBhZGRyID0gW3ZhbCgnc2pfYWRkcmVzcycpLCB2YWwoJ3NqX2NpdHknKSwgdmFsKCdzal9zdGF0ZScpICsgJyAnICsgdmFsKCdzal9waW4nKSwgdmFsKCdzal9jb3VudHJ5JyldLm1hcChmdW5jdGlvbiAocykgeyByZXR1cm4gcy50cmltKCk7IH0pLmZpbHRlcihCb29sZWFuKS5qb2luKCcsICcpOwogICAgdmFyIHJvd3MgPSBbCiAgICAgIFsnU0VDVElPTiAxOiBQRVJTT05BTCBERVRBSUxTJ10sCiAgICAgIFsnRnVsbCBuYW1lJywgdmFsKCdzal9uYW1lJyldLCBbJ01haWRlbiBuYW1lJywgdmFsKCdzal9tYWlkZW4nKSB8fCAnXHUyMDE0J10sIFsnRGF0ZSBvZiBiaXJ0aCcsIGRvYigpXSwKICAgICAgWydHZW5kZXInLCByYWRpbygnc2pfZ2VuZGVyJyldLCBbJ01hcml0YWwgc3RhdHVzJywgcmFkaW8oJ3NqX21hcml0YWwnKSB8fCAnXHUyMDE0J10sIFsnQ2l0aXplbnNoaXAnLCByYWRpbygnc2pfY2l0aXplbicpXSwKICAgICAgWydTRUNUSU9OIDI6IFNDSE9PTCAmIEFMVU1OSSBDUkVERU5USUFMUyddLAogICAgICBbJ0JhdGNoIHllYXInLCB2YWwoJ3NqX3llYXInKV0sIFsnSGlnaGVzdCBjbGFzcyBjb21wbGV0ZWQnLCBjbHNdLAogICAgICBbJ1NFQ1RJT04gMzogQ09OVEFDVCAmIFBST0ZFU1NJT05BTCBJTkZPJ10sCiAgICAgIFsnV2hhdHNBcHAnLCB2YWwoJ3NqX3doYXRzYXBwJyldLCBbJ0FsdGVybmF0ZSBjb250YWN0JywgdmFsKCdzal9hbHRfcGhvbmUnKSB8fCAnXHUyMDE0J10sIFsnRW1haWwnLCB2YWwoJ3NqX2VtYWlsJyldLAogICAgICBbJ1ByZXNlbnQgYWRkcmVzcycsIGFkZHJdLCBbJ09jY3VwYXRpb24gLyBkZXNpZ25hdGlvbicsIHZhbCgnc2pfb2NjdXBhdGlvbicpIHx8ICdcdTIwMTQnXSwgWydDb21wYW55IC8gb3JnYW5pc2F0aW9uJywgdmFsKCdzal9jb21wYW55JykgfHwgJ1x1MjAxNCddLAogICAgICBbJ1NFQ1RJT04gNDogQVRURU5EQU5DRSAmIEZBTUlMWSBERVRBSUxTJ10sCiAgICAgIFsnRGF5cyBvZiBhdHRlbmRhbmNlJywgZGF5cy5qb2luKCcsICcpXSwgWydGYW1pbHkgYWNjb21wYW55aW5nJywgZmFtXQogICAgXTsKICAgIGlmIChmYW0gPT09ICdZZXMnKSByb3dzLnB1c2goWydBZHVsdHMgKDEyKyknLCB2YWwoJ3NqX2FkdWx0cycpIHx8ICcwJ10sIFsnQ2hpbGRyZW4gKHVuZGVyIDEyKScsIHZhbCgnc2pfY2hpbGRyZW4nKSB8fCAnMCddLCBbJ0ZhbWlseSBtZW1iZXJzJywgdmFsKCdzal9mYW1pbHlfbmFtZXMnKSB8fCAnXHUyMDE0J10pOwogICAgdmFyIHRyYXZlbCA9IGNoZWNrcygnc2pfdHJhdmVsJyk7CiAgICByb3dzLnB1c2goWydUcmF2ZWwgLyBzdGF5IGhlbHAnLCB0cmF2ZWwubGVuZ3RoID8gdHJhdmVsLmpvaW4oJywgJykgKyAnIChCYXJiaWwgVG91cnMgaGVscGRlc2sgdG8gY29udGFjdCB2aWEgV2hhdHNBcHAgJiBlbWFpbCknIDogJ05vdCBuZWVkZWQnXSk7CiAgICByb3dzLnB1c2goWydTRUNUSU9OIDU6IFBST0dSQU1NRSBQQVJUSUNJUEFUSU9OJ10sIFsnV2lsbGluZyB0byBwYXJ0aWNpcGF0ZScsIHBhcnRdKTsKICAgIGlmIChwYXJ0ICE9PSAnTm8nKSByb3dzLnB1c2goWydDYXBhY2l0eScsIGNhcHMuam9pbignLCAnKSB8fCAnXHUyMDE0J10sIFsnUHJvcG9zZWQgY29udHJpYnV0aW9uJywgdmFsKCdzal9jb250cmliJykgfHwgJ1x1MjAxNCddKTsKICAgIHJvd3MucHVzaChbJ1NFQ1RJT04gNjogUEFUUk9OQUdFIEZFRSAmIFBBWU1FTlQnXSwgWydQYXRyb25hZ2UgZmVlJywgJ1x1MjBiOScgKyBmZWVdLCBbJ01vZGUgb2YgcGF5bWVudCcsIG1vZGVdKTsKICAgIHJvd3MucHVzaChbJ1VUUiAvIFVQSSByZWZlcmVuY2UnLCBjbGVhblV0cigpIHx8ICdOb3QgcGFpZCB5ZXQnXSk7CiAgICByb3dzLnB1c2goWydQYXltZW50IHN0YXR1cycsIGNsZWFuVXRyKCkgPyAnQ09ORklSTUVEIChVVFIgc3VibWl0dGVkLCB0byBiZSB2ZXJpZmllZCBvZmZsaW5lKScgOiAnUEVORElOR19QQVlNRU5UIChVVFIgY2FuIGJlIGFkZGVkIGxhdGVyKSddKTsKICAgIHJldHVybiByb3dzOwogIH0KCiAgZnVuY3Rpb24gc3VibWl0KCkgewogICAgZmFpbEJveC5jbGFzc0xpc3QucmVtb3ZlKCdzaG93Jyk7CiAgICB2YXIgYmFkID0gbnVsbDsKICAgIHJlcUZpZWxkcygpLmZvckVhY2goZnVuY3Rpb24gKGYpIHsgaWYgKCFjaGVjayhmKSAmJiAhYmFkKSBiYWQgPSBmOyB9KTsKICAgIGlmIChiYWQpIHsKICAgICAgYmFkLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7CiAgICAgIHZhciBpID0gJCgnaW5wdXQ6bm90KFt0eXBlPWhpZGRlbl0pLHRleHRhcmVhJywgYmFkKTsKICAgICAgaWYgKGkpIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0cnkgeyBpLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTsgfSBjYXRjaCAoeCkge30gfSwgMzUwKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gRmluYWwgSUQgKFNNUy1CQkwtPGJhdGNoPi08bnVtYmVyPikgaXMgZ2l2ZW4gYnkgdGhlIHdlYnNpdGUgd2hlbiB0aGUgcmVnaXN0cmF0aW9uIGFycml2ZXMKICAgIHJlZ0lkID0gJ1NNUy1CQkwtJyArIHZhbCgnc2pfeWVhcicpICsgJy1QRU5ESU5HJzsKICAgIHZhciByb3dzID0gYnVpbGQoKTsKICAgIHZhciBmbSA9IGZpbmRDRjcoKTsKICAgIHZhciBzbG90cyA9IGZtID8gZmlsZVNsb3RzKGZtKSA6IHt9OwogICAgdmFyIGF0dGFjaGVkID0gW10sIG1pc3NpbmcgPSBbXTsKICAgIFtbJ3NqX3Bob3RvJywgJ1Bob3RvJ10sIFsnc2pfcmVjZWlwdCcsICdQYXltZW50IHJlY2VpcHQnXV0uZm9yRWFjaChmdW5jdGlvbiAocCkgewogICAgICBpZiAoIWZpbGVzW3BbMF1dKSByZXR1cm47CiAgICAgIChzbG90c1twWzBdXSA\/IGF0dGFjaGVkIDogbWlzc2luZykucHVzaChwWzFdKTsKICAgIH0pOwogICAgdmFyIGxpbmVzID0gWydESUFNT05EIEpVQklMRUUgQUxVTU5JIFJFVU5JT04gMjAyNiAtIFJFR0lTVFJBVElPTicsICJTdC4gTWFyeSdzIFNjaG9vbCwgQmFyYmlsIHwgOXRoLCAxMHRoICYgMTF0aCBEZWNlbWJlciAyMDI2IiwgJ1JlZ2lzdHJhdGlvbiBJRDogJyArIHJlZ0lkLCAnU3VibWl0dGVkOiAnICsgbmljZSh0b2RheSksICcnXTsKICAgIHJvd3MuZm9yRWFjaChmdW5jdGlvbiAocikgeyBpZiAoci5sZW5ndGggPT09IDEpIGxpbmVzLnB1c2goJycsIHJbMF0pOyBlbHNlIGxpbmVzLnB1c2goclswXSArICc6ICcgKyByWzFdKTsgfSk7CiAgICBsaW5lcy5wdXNoKCcnLCAnRGVjbGFyYXRpb246IGNvbmZpcm1lZCcsICdTaWduYXR1cmU6ICcgKyB2YWwoJ3NqX3NpZ24nKSArICcgICBEYXRlOiAnICsgbmljZSh0b2RheSkpOwogICAgbGluZXMucHVzaCgnJywgJ0F0dGFjaG1lbnRzOiAnICsgKGF0dGFjaGVkLmxlbmd0aCA\/IGF0dGFjaGVkLmpvaW4oJywgJykgOiAnbm9uZScpKTsKICAgIGlmIChtaXNzaW5nLmxlbmd0aCkgbGluZXMucHVzaCgnTk9UIFJFQ0VJVkVEIE9OTElORSAoYXNrIHRoZSBhbHVtbnVzIHRvIHNlbmQgb24gV2hhdHNBcHApOiAnICsgbWlzc2luZy5qb2luKCcsICcpKTsKICAgIHN1bW1hcnkgPSBsaW5lcy5qb2luKCdcbicpOwogICAgdmFyIHN1YmplY3QgPSAnSnViaWxlZSByZWdpc3RyYXRpb24gJyArIHJlZ0lkICsgJyAtICcgKyB2YWwoJ3NqX25hbWUnKSArICcgKEJhdGNoICcgKyB2YWwoJ3NqX3llYXInKSArICcpJzsKICAgIHdhVGV4dCA9ICdIZWxsbyEgTXkgRGlhbW9uZCBKdWJpbGVlIHJlZ2lzdHJhdGlvbiBkZXRhaWxzOlxuXG4nICsgc3VtbWFyeTsKICAgICQoJy5qcy13YS1mYWxsYmFjaycsIGZvcm0pLmhyZWYgPSAnaHR0cHM6Ly93YS5tZS8nICsgV0EgKyAnP3RleHQ9JyArIGVuY29kZVVSSUNvbXBvbmVudCh3YVRleHQuc2xpY2UoMCwgMzUwMCkpOwoKICAgIGlmICghZm0pIHJldHVybiBmYWlsKCdbQ29kZSBCXSBPbmxpbmUgcmVnaXN0cmF0aW9uIGlzblwndCBzd2l0Y2hlZCBvbiBmb3IgdGhpcyBwYWdlIHlldC4nKTsKICAgIGJ1c3kodHJ1ZSwgYXR0YWNoZWQubGVuZ3RoID8gJ1VwbG9hZGluZyBhbmQgc2VuZGluZ1x1MjAyNicgOiAnU2VuZGluZyB5b3VyIHJlZ2lzdHJhdGlvblx1MjAyNicpOwogICAgZmlsbENGNyhmbSwgewogICAgICBlbWFpbDogdmFsKCdzal9lbWFpbCcpLCBuYW1lOiB2YWwoJ3NqX25hbWUnKSwgc3ViamVjdDogc3ViamVjdCwgcGhvbmU6IHZhbCgnc2pfd2hhdHNhcHAnKSwgc3VtbWFyeTogc3VtbWFyeSwKICAgICAgZXh0cmE6IHsgJ3JlZ2lkJzogcmVnSWQsICdiYXRjaCc6IHZhbCgnc2pfeWVhcicpLCAnd2hhdHNhcHAnOiB2YWwoJ3NqX3doYXRzYXBwJyksICdjaXR5JzogdmFsKCdzal9jaXR5JyksICdmZWUnOiBTdHJpbmcoZmVlQW1vdW50KCkpLCAncGF5bWVudC1tb2RlJzogcmFkaW8oJ3NqX21vZGUnKSwgJ3V0cic6IGNsZWFuVXRyKCkgfQogICAgfSk7CiAgICB2YXIgZXh0cmEgPSBBUEkgPyB7ICdfc2pfY2FwdGNoYSc6IChjYXBJbnB1dC52YWx1ZSB8fCAnJykudHJpbSgpLCAnX3NqX2NhcHRjaGFfdG9rZW4nOiBjYXBUb2tlbiwgJ19zal9lbWFpbF90b2tlbic6ICh0b2tlbkluLnZhbHVlLnNwbGl0KCd8JylbMV0gfHwgJycpIH0gOiB7fTsKICAgIC8vIEFsd2F5cyBzZW5kIHRoZXNlLCBldmVuIGlmIHRoZSBDb250YWN0IEZvcm0gNyBmb3JtIGhhcyBubyBtYXRjaGluZyBmaWVsZHMKICAgIGV4dHJhWydiYXRjaCddID0gdmFsKCdzal95ZWFyJyk7IGV4dHJhWydmZWUnXSA9IFN0cmluZyhmZWVBbW91bnQoKSk7IGV4dHJhWydwYXltZW50LW1vZGUnXSA9IHJhZGlvKCdzal9tb2RlJyk7IGV4dHJhWyd1dHInXSA9IGNsZWFuVXRyKCk7CiAgICBzZW5kQ0Y3KGZtLCBzbG90cywgZXh0cmEpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICBpZiAocmVzLnN0YXR1cyA9PT0gJ21haWxfc2VudCcpIHJldHVybiBzdWNjZXNzKHJvd3MsIG1pc3NpbmcsIHJlcy5zal9yZWdpZCB8fCAnJywgcmVzLnNqX2Jhc2UgfHwgJycsIHJlcy5zal9zdGF0dXMgfHwgJycpOwogICAgICBpZiAoQVBJKSB7CiAgICAgICAgbG9hZENhcHRjaGEoKS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7CiAgICAgICAgdmFyIHR4dCA9IEpTT04uc3RyaW5naWZ5KHJlcy5pbnZhbGlkX2ZpZWxkcyB8fCAnJyk7CiAgICAgICAgaWYgKC92ZXJpZnkgeW91ciBlbWFpbC9pLnRlc3QodHh0KSkgeyB0b2tlbkluLnZhbHVlID0gJyc7IHZzdGF0ZSgpOyB9CiAgICAgIH0KICAgICAgdmFyIG1zZyA9ICdbQ29kZSBFXSAnICsgKHJlcy5zdGF0dXMgPyByZXMuc3RhdHVzICsgJzogJyA6ICcnKSArIChyZXMubWVzc2FnZSB8fCAnJyk7CiAgICAgIGlmIChyZXMuaW52YWxpZF9maWVsZHMgJiYgcmVzLmludmFsaWRfZmllbGRzLmxlbmd0aCkgewogICAgICAgIG1zZyA9ICdbQ29kZSBEXSAnICsgcmVzLmludmFsaWRfZmllbGRzLm1hcChmdW5jdGlvbiAoeCkgeyByZXR1cm4geC5tZXNzYWdlOyB9KS5qb2luKCcgJyk7CiAgICAgIH0KICAgICAgZmFpbChtc2cpOwogICAgfSwgZnVuY3Rpb24gKGVycikgewogICAgICBpZiAoQVBJKSBsb2FkQ2FwdGNoYSgpLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTsKICAgICAgZmFpbCgnW0NvZGUgQ10gV2UgY291bGRuXCd0IHJlYWNoIHRoZSByZWdpc3RyYXRpb24gc3lzdGVtICgnICsgKGVyciAmJiBlcnIubWVzc2FnZSA\/IGVyci5tZXNzYWdlIDogJ25ldHdvcmsgZXJyb3InKSArICcpLicpOwogICAgfSk7CiAgfQoKICBmdW5jdGlvbiBzdWNjZXNzKHJvd3MsIG1pc3NpbmcsIHNlcnZlcklkLCBzZXJ2ZXJCYXNlLCBzZXJ2ZXJTdGF0dXMpIHsKICAgIGJ1c3koZmFsc2UpOwogICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7IGxvYWRTdGF0cygpLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTsgfSwgNDAwKTsKICAgIGNsZWFyRHJhZnQoKTsKICAgIHZhciBzaG93bklkID0gL15TTVMtQkJMLVxkezR9LVxkKygtUEVORElOR19QQVlNRU5UKT8kLy50ZXN0KHNlcnZlcklkKSA\/IHNlcnZlcklkIDogJyc7CiAgICBmaW5hbElkID0gc2hvd25JZCA\/IChzZXJ2ZXJCYXNlIHx8IHNob3duSWQucmVwbGFjZSgvLVBFTkRJTkdfUEFZTUVOVCQvLCAnJykpIDogJyc7ICAgLy8gdXNlZCBpbiB0aGUgVVBJIG5vdGUKICAgIHZhciBwZW5kaW5nID0gc2VydmVyU3RhdHVzID8gc2VydmVyU3RhdHVzID09PSAnUEVORElOR19QQVlNRU5UJyA6ICFjbGVhblV0cigpOwogICAgaWYgKHNob3duSWQpIHdhVGV4dCA9IHdhVGV4dC5zcGxpdChyZWdJZCkuam9pbihzaG93bklkKTsKICAgIHJlZ0lkID0gc2hvd25JZDsKICAgICQoJy5yZWdpZCcsIGRvbmVCb3gpLmhpZGRlbiA9ICFzaG93bklkOwogICAgdmFyIHN0ID0gJCgnLmpzLXN0YXR1cycsIGRvbmVCb3gpOwogICAgc3QudGV4dENvbnRlbnQgPSBwZW5kaW5nID8gJ1BFTkRJTkdfUEFZTUVOVCcgOiAnQ09ORklSTUVEJzsKICAgIHN0LmNsYXNzTmFtZSA9ICdzdGF0dXMganMtc3RhdHVzICcgKyAocGVuZGluZyA\/ICdwZW5kaW5nJyA6ICdjb25maXJtZWQnKTsKICAgIHZhciBsYXRlciA9ICQoJy5qcy1sYXRlcicsIGRvbmVCb3gpOwogICAgbGF0ZXIuaGlkZGVuID0gIShwZW5kaW5nICYmIHNob3duSWQgJiYgQVBJKTsKICAgIGlmICghbGF0ZXIuaGlkZGVuKSB7ICQoJyNzai11LWlkJykudmFsdWUgPSBzaG93bklkOyAkKCcjc2otdS1lbWFpbCcpLnZhbHVlID0gdmFsKCdzal9lbWFpbCcpOyB9CiAgICAkKCcuanMtdmVyaWZ5LW5vdGUnLCBkb25lQm94KS5oaWRkZW4gPSBwZW5kaW5nOwogICAgdmFyIHRyYXZlbCA9IGNoZWNrcygnc2pfdHJhdmVsJyksIGhkID0gJCgnLmpzLWhlbHBkZXNrJywgZG9uZUJveCk7CiAgICBoZC5oaWRkZW4gPSAhdHJhdmVsLmxlbmd0aDsKICAgIGlmICh0cmF2ZWwubGVuZ3RoKSB7CiAgICAgICQoJy5qcy1oZWxwZGVzay1tc2cnLCBoZCkudGV4dENvbnRlbnQgPSAnWW91IGFza2VkIGZvciBoZWxwIHdpdGggJyArIHRyYXZlbC5qb2luKCcsICcpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvLCAoW14sXSopJC8sICcgYW5kICQxJykgKwogICAgICAgICcuIEEgQmFyYmlsIFRvdXJzIGhlbHBkZXNrIHRlYW0gbWVtYmVyIHdpbGwgY29udGFjdCB5b3Ugb24gV2hhdHNBcHAgKCcgKyB2YWwoJ3NqX3doYXRzYXBwJykgKyAnKSBhbmQgYnkgZW1haWwgKCcgKyB2YWwoJ3NqX2VtYWlsJykgKwogICAgICAgICcpIHRvIHBsYW4gaXQgd2l0aCB5b3UsIHNoYXJpbmcgb3B0aW9ucyBhbmQgcHJpY2VzIGJlZm9yZSBhbnl0aGluZyBpcyBib29rZWQuJzsKICAgIH0KICAgIHZhciBmaXJzdCA9ICh2YWwoJ3NqX25hbWUnKS5zcGxpdCgnICcpWzBdIHx8ICcnKS50cmltKCk7CiAgICAkKCcuZG9uZS10aXRsZScsIGRvbmVCb3gpLnRleHRDb250ZW50ID0gZmlyc3QgPyAnVGhhbmsgeW91LCAnICsgZmlyc3QgKyAnISBZb3VcJ3JlIHJlZ2lzdGVyZWQuJyA6ICdZb3VcJ3JlIHJlZ2lzdGVyZWQhJzsKICAgICQoJy5qcy1yZWdpZCcsIGRvbmVCb3gpLnRleHRDb250ZW50ID0gc2hvd25JZDsKICAgIHZhciBkbCA9ICQoJy5qcy1zdW0nLCBkb25lQm94KTsgZGwuaW5uZXJIVE1MID0gJyc7CiAgICB2YXIgc2hvdyA9IFsnRnVsbCBuYW1lJywgJ0JhdGNoIHllYXInLCAnV2hhdHNBcHAnLCAnRW1haWwnLCAnRGF5cyBvZiBhdHRlbmRhbmNlJywgJ0ZhbWlseSBhY2NvbXBhbnlpbmcnLCAnQWR1bHRzICgxMispJywgJ0NoaWxkcmVuICh1bmRlciAxMiknLCAnUGF0cm9uYWdlIGZlZScsICdNb2RlIG9mIHBheW1lbnQnLCAnVVRSIC8gVVBJIHJlZmVyZW5jZScsICdQYXltZW50IHN0YXR1cyddOwogICAgcm93cy5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7CiAgICAgIGlmIChyLmxlbmd0aCA8IDIgfHwgc2hvdy5pbmRleE9mKHJbMF0pID09PSAtMSkgcmV0dXJuOwogICAgICB2YXIgZHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkdCcpLCBkZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RkJyk7CiAgICAgIGR0LnRleHRDb250ZW50ID0gclswXTsgZGQudGV4dENvbnRlbnQgPSByWzFdOyBkbC5hcHBlbmRDaGlsZChkdCk7IGRsLmFwcGVuZENoaWxkKGRkKTsKICAgIH0pOwogICAgdmFyIG1zZyA9IGZpbmFsSWQgPyAnV2VcJ2xsIGNvbmZpcm0geW91ciByZWdpc3RyYXRpb24gYW5kIHNoYXJlIHVwZGF0ZXMgb24gV2hhdHNBcHAgYW5kIGVtYWlsLiBQbGVhc2Uga2VlcCB5b3VyIHJlZ2lzdHJhdGlvbiBJRCBmb3IgcmVmZXJlbmNlLicKICAgICAgOiAnV2VcJ3ZlIHJlY2VpdmVkIHlvdXIgcmVnaXN0cmF0aW9uLiBZb3VyIHJlZ2lzdHJhdGlvbiBJRCB3aWxsIGJlIHNlbnQgdG8geW91IG9uIFdoYXRzQXBwIGFuZCBlbWFpbC4nOwogICAgaWYgKG1pc3NpbmcubGVuZ3RoKSBtc2cgKz0gJyBQbGVhc2Ugc2VuZCB5b3VyICcgKyBtaXNzaW5nLmpvaW4oJyBhbmQgJykudG9Mb3dlckNhc2UoKSArICcgdG8gdXMgb24gV2hhdHNBcHAsIHF1b3RpbmcgeW91ciByZWdpc3RyYXRpb24gSUQuJzsKICAgIGlmIChwZW5kaW5nKSBtc2cgKz0gQVBJID8gJyBZb3VyIHBheW1lbnQgaXMgcGVuZGluZy4gT25jZSB5b3VcJ3ZlIHBhaWQsIGFkZCB5b3VyIFVUUiBiZWxvdyBvciBvbiB0aGlzIHBhZ2UgYW55IHRpbWUgdG8gY29uZmlybSB5b3VyIHJlZ2lzdHJhdGlvbi4nIDogJyBZb3VyIHBheW1lbnQgaXMgcGVuZGluZy4gT25jZSB5b3VcJ3ZlIHBhaWQsIHNlbmQgdXMgdGhlIFVUUiAvIFVQSSByZWZlcmVuY2Ugb24gV2hhdHNBcHAuJzsKICAgICQoJy5kb25lLW1zZycsIGRvbmVCb3gpLnRleHRDb250ZW50ID0gbXNnOwogICAgJCgnLmpzLWRvbmUtd2EnLCBkb25lQm94KS5ocmVmID0gJ2h0dHBzOi8vd2EubWUvJyArIFdBICsgJz90ZXh0PScgKyBlbmNvZGVVUklDb21wb25lbnQod2FUZXh0LnNsaWNlKDAsIDM1MDApKTsKICAgIHZhciBwYXlCb3ggPSAkKCcuanMtZG9uZS1wYXknLCBkb25lQm94KSwgbGluayA9IHVwaUxpbmsoKTsKICAgIHZhciBuZWVkUGF5ID0gISEobGluayAmJiByYWRpbygnc2pfbW9kZScpID09PSAnVVBJIC8gUVIgY29kZScgJiYgcGVuZGluZyAmJiBmZWVBbW91bnQoKSk7CiAgICBwYXlCb3guaGlkZGVuID0gIW5lZWRQYXk7CiAgICBpZiAobmVlZFBheSkgewogICAgICB2YXIgdXAgPSAkKCcuanMtZG9uZS11cGknLCBwYXlCb3gpOyB1cC5ocmVmID0gbGluazsgdXAuaGlkZGVuID0gIW1vYmlsZTsKICAgICAgJCgnLmpzLWRvbmUtcXInLCBwYXlCb3gpLmlubmVySFRNTCA9IHFyU3ZnKGxpbmssIDE3Mik7CiAgICAgICQkKCcuanMtYW10JywgcGF5Qm94KS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7IGUudGV4dENvbnRlbnQgPSBydXBlZXMoZmVlQW1vdW50KCkpOyB9KTsKICAgICAgJCgnLmpzLXRuJywgcGF5Qm94KS50ZXh0Q29udGVudCA9IHVwaU5vdGUoKTsKICAgIH0KICAgIGZvcm0uaGlkZGVuID0gdHJ1ZTsKICAgIHZhciBoZWFkID0gJCgnLnJlZy1oZWFkJyk7IGlmIChoZWFkKSBoZWFkLmhpZGRlbiA9IHRydWU7CiAgICBkb25lQm94LmhpZGRlbiA9IGZhbHNlOwogICAgZG9uZUJveC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7CiAgICB0cnkgeyBkb25lQm94LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTsgfSBjYXRjaCAoeCkge30KICB9CiAgJCgnLmpzLXByaW50JywgZG9uZUJveCkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7IHdpbmRvdy5wcmludCgpOyB9KTsKICB9CgogIHN0YXJ0KCk7CiAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIHN0YXJ0KTsKICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHN0YXJ0KTsKfSkoKTsK\"><\/div>\r\n<img decoding=\"async\" alt=\"\" aria-hidden=\"true\" width=\"1\" height=\"1\" style=\"position:absolute;width:1px;height:1px;opacity:0;pointer-events:none\" data-no-lazy=\"1\" data-skip-lazy=\"1\" loading=\"eager\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" onload=\"if(!window.sjLoaded&amp;&amp;!window.sjBooted){window.sjBooted=1;var d=document.getElementById('sj-js');if(d){var b=atob(d.getAttribute('data-code'));try{b=decodeURIComponent(escape(b));}catch(e){}var s=document.createElement('script');s.text=b;(document.body||document.documentElement).appendChild(s);}}\">\r\n<svg width=\"0\" height=\"0\" style=\"position:absolute\" aria-hidden=\"true\" onload=\"if(!window.sjLoaded&amp;&amp;!window.sjBooted){window.sjBooted=1;var d=document.getElementById('sj-js');if(d){var b=atob(d.getAttribute('data-code'));try{b=decodeURIComponent(escape(b));}catch(e){}var s=document.createElement('script');s.text=b;(document.body||document.documentElement).appendChild(s);}}\"><\/svg>\r\n<\/div>\r\n\r\n<!-- ===== COPY UP TO HERE ===== -->\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>St. Mary&#8217;s School, BarbilDiamond Jubilee Celebrations Diamond JubileeAlumni Reunion 2026 Ex-students, come home. Register for three days of memories, friendships and celebration at St. Mary&#8217;s School, Barbil, Odisha. 9th, 10th &amp; 11th December 2026 Barbil, Odisha Register now &#8594; Already registered? Add your payment UTR 00Days 00Hours 00Mins Registration and travel support by Barbil Tours<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_rtcl_gb_attr":"","footnotes":""},"class_list":["post-3680","page","type-page","status-publish","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO Pro 4.9.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"9th, 10th &amp; 11th December 2026 Barbil, Odisha Register now \u2192 Already registered? Add your payment UTR 00Days 00Hours 00Mins Registration and travel support by Barbil Tours and BarbilTaxi.com Before you start It takes about 5 minutes. Keep these handy: A recent passport-size photo on your phone or computer Your batch year, the year you\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"google-site-verification\" content=\"yHBOeEZ2deCi1Qfs9XBCpJEVqJpC40zUmV-pfBG-zB4\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.barbiltours.com\/list\/?page_id=3680\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO Pro (AIOSEO) 4.9.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"www.barbiltours.com - Let&#039;s Travel\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"St Mary\u2019s Barbil Diamond Jubilee Celebrations 2026 - www.barbiltours.com\" \/>\n\t\t<meta property=\"og:description\" content=\"9th, 10th &amp; 11th December 2026 Barbil, Odisha Register now \u2192 Already registered? Add your payment UTR 00Days 00Hours 00Mins Registration and travel support by Barbil Tours and BarbilTaxi.com Before you start It takes about 5 minutes. Keep these handy: A recent passport-size photo on your phone or computer Your batch year, the year you\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.barbiltours.com\/list\/?page_id=3680\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/barbiltours.com\/V2\/wp-content\/uploads\/2024\/10\/pp-logo.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/barbiltours.com\/V2\/wp-content\/uploads\/2024\/10\/pp-logo.png\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-10-18T22:13:20+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-10-19T06:35:04+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/PlatformPointsLLC\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@PlatformPoints\" \/>\n\t\t<meta name=\"twitter:title\" content=\"St Mary\u2019s Barbil Diamond Jubilee Celebrations 2026 - www.barbiltours.com\" \/>\n\t\t<meta name=\"twitter:description\" content=\"9th, 10th &amp; 11th December 2026 Barbil, Odisha Register now \u2192 Already registered? Add your payment UTR 00Days 00Hours 00Mins Registration and travel support by Barbil Tours and BarbilTaxi.com Before you start It takes about 5 minutes. Keep these handy: A recent passport-size photo on your phone or computer Your batch year, the year you\" \/>\n\t\t<meta name=\"twitter:creator\" content=\"@PlatformPoints\" \/>\n\t\t<meta name=\"twitter:image\" content=\"http:\/\/barbiltours.com\/V2\/wp-content\/uploads\/2024\/10\/pp-logo.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.barbiltours.com\\\/list\\\/?page_id=3680#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.barbiltours.com\\\/list#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.barbiltours.com\\\/list\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.barbiltours.com\\\/list\\\/?page_id=3680#listItem\",\"name\":\"St Mary&#8217;s Barbil Diamond Jubilee Celebrations 2026\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.barbiltours.com\\\/list\\\/?page_id=3680#listItem\",\"position\":2,\"name\":\"St Mary&#8217;s Barbil Diamond Jubilee Celebrations 2026\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.barbiltours.com\\\/list#listItem\",\"name\":\"Home\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.barbiltours.com\\\/list\\\/#organization\",\"name\":\"http:\\\/\\\/barbiltours.com\\\/V2\",\"description\":\"Let's Travel Let's Travel\",\"url\":\"https:\\\/\\\/www.barbiltours.com\\\/list\\\/\",\"email\":\"business@platformpoints.com\",\"telephone\":\"+14257369700\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"http:\\\/\\\/barbiltours.com\\\/V2\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/pp-logo.png\",\"@id\":\"https:\\\/\\\/www.barbiltours.com\\\/list\\\/?page_id=3680\\\/#organizationLogo\"},\"image\":{\"@id\":\"https:\\\/\\\/www.barbiltours.com\\\/list\\\/?page_id=3680\\\/#organizationLogo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/PlatformPointsLLC\",\"https:\\\/\\\/twitter.com\\\/PlatformPoints\",\"https:\\\/\\\/www.instagram.com\\\/platormpointsllc?igsh=YzljYTk1ODg3Zg==\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/platformpoint\\\/?viewAsMember=true\"]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.barbiltours.com\\\/list\\\/?page_id=3680#webpage\",\"url\":\"https:\\\/\\\/www.barbiltours.com\\\/list\\\/?page_id=3680\",\"name\":\"St Mary\\u2019s Barbil Diamond Jubilee Celebrations 2026 - www.barbiltours.com\",\"description\":\"9th, 10th & 11th December 2026 Barbil, Odisha Register now \\u2192 Already registered? Add your payment UTR 00Days 00Hours 00Mins Registration and travel support by Barbil Tours and BarbilTaxi.com Before you start It takes about 5 minutes. Keep these handy: A recent passport-size photo on your phone or computer Your batch year, the year you\",\"inLanguage\":\"en\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.barbiltours.com\\\/list\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.barbiltours.com\\\/list\\\/?page_id=3680#breadcrumblist\"},\"datePublished\":\"2026-10-18T15:13:20-07:00\",\"dateModified\":\"2026-10-18T23:35:04-07:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.barbiltours.com\\\/list\\\/#website\",\"url\":\"https:\\\/\\\/www.barbiltours.com\\\/list\\\/\",\"name\":\"www.barbiltours.com\",\"description\":\"Let's Travel\",\"inLanguage\":\"en\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.barbiltours.com\\\/list\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO Pro -->\r\n\t\t<title>St Mary\u2019s Barbil Diamond Jubilee Celebrations 2026 - www.barbiltours.com<\/title>\n\n","aioseo_head_json":{"title":"St Mary\u2019s Barbil Diamond Jubilee Celebrations 2026 - www.barbiltours.com","description":"9th, 10th & 11th December 2026 Barbil, Odisha Register now \u2192 Already registered? Add your payment UTR 00Days 00Hours 00Mins Registration and travel support by Barbil Tours and BarbilTaxi.com Before you start It takes about 5 minutes. Keep these handy: A recent passport-size photo on your phone or computer Your batch year, the year you","canonical_url":"https:\/\/www.barbiltours.com\/list\/?page_id=3680","robots":"max-image-preview:large","keywords":"","webmasterTools":{"google-site-verification":"yHBOeEZ2deCi1Qfs9XBCpJEVqJpC40zUmV-pfBG-zB4","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/www.barbiltours.com\/list\/?page_id=3680#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.barbiltours.com\/list#listItem","position":1,"name":"Home","item":"https:\/\/www.barbiltours.com\/list","nextItem":{"@type":"ListItem","@id":"https:\/\/www.barbiltours.com\/list\/?page_id=3680#listItem","name":"St Mary&#8217;s Barbil Diamond Jubilee Celebrations 2026"}},{"@type":"ListItem","@id":"https:\/\/www.barbiltours.com\/list\/?page_id=3680#listItem","position":2,"name":"St Mary&#8217;s Barbil Diamond Jubilee Celebrations 2026","previousItem":{"@type":"ListItem","@id":"https:\/\/www.barbiltours.com\/list#listItem","name":"Home"}}]},{"@type":"Organization","@id":"https:\/\/www.barbiltours.com\/list\/#organization","name":"http:\/\/barbiltours.com\/V2","description":"Let's Travel Let's Travel","url":"https:\/\/www.barbiltours.com\/list\/","email":"business@platformpoints.com","telephone":"+14257369700","logo":{"@type":"ImageObject","url":"http:\/\/barbiltours.com\/V2\/wp-content\/uploads\/2024\/10\/pp-logo.png","@id":"https:\/\/www.barbiltours.com\/list\/?page_id=3680\/#organizationLogo"},"image":{"@id":"https:\/\/www.barbiltours.com\/list\/?page_id=3680\/#organizationLogo"},"sameAs":["https:\/\/www.facebook.com\/PlatformPointsLLC","https:\/\/twitter.com\/PlatformPoints","https:\/\/www.instagram.com\/platormpointsllc?igsh=YzljYTk1ODg3Zg==","https:\/\/www.linkedin.com\/company\/platformpoint\/?viewAsMember=true"]},{"@type":"WebPage","@id":"https:\/\/www.barbiltours.com\/list\/?page_id=3680#webpage","url":"https:\/\/www.barbiltours.com\/list\/?page_id=3680","name":"St Mary\u2019s Barbil Diamond Jubilee Celebrations 2026 - www.barbiltours.com","description":"9th, 10th & 11th December 2026 Barbil, Odisha Register now \u2192 Already registered? Add your payment UTR 00Days 00Hours 00Mins Registration and travel support by Barbil Tours and BarbilTaxi.com Before you start It takes about 5 minutes. Keep these handy: A recent passport-size photo on your phone or computer Your batch year, the year you","inLanguage":"en","isPartOf":{"@id":"https:\/\/www.barbiltours.com\/list\/#website"},"breadcrumb":{"@id":"https:\/\/www.barbiltours.com\/list\/?page_id=3680#breadcrumblist"},"datePublished":"2026-10-18T15:13:20-07:00","dateModified":"2026-10-18T23:35:04-07:00"},{"@type":"WebSite","@id":"https:\/\/www.barbiltours.com\/list\/#website","url":"https:\/\/www.barbiltours.com\/list\/","name":"www.barbiltours.com","description":"Let's Travel","inLanguage":"en","publisher":{"@id":"https:\/\/www.barbiltours.com\/list\/#organization"}}]},"og:locale":"en_US","og:site_name":"www.barbiltours.com - Let's Travel","og:type":"article","og:title":"St Mary\u2019s Barbil Diamond Jubilee Celebrations 2026 - www.barbiltours.com","og:description":"9th, 10th &amp; 11th December 2026 Barbil, Odisha Register now \u2192 Already registered? Add your payment UTR 00Days 00Hours 00Mins Registration and travel support by Barbil Tours and BarbilTaxi.com Before you start It takes about 5 minutes. Keep these handy: A recent passport-size photo on your phone or computer Your batch year, the year you","og:url":"https:\/\/www.barbiltours.com\/list\/?page_id=3680","og:image":"https:\/\/barbiltours.com\/V2\/wp-content\/uploads\/2024\/10\/pp-logo.png","og:image:secure_url":"https:\/\/barbiltours.com\/V2\/wp-content\/uploads\/2024\/10\/pp-logo.png","article:published_time":"2026-10-18T22:13:20+00:00","article:modified_time":"2026-10-19T06:35:04+00:00","article:publisher":"https:\/\/www.facebook.com\/PlatformPointsLLC","twitter:card":"summary_large_image","twitter:site":"@PlatformPoints","twitter:title":"St Mary\u2019s Barbil Diamond Jubilee Celebrations 2026 - www.barbiltours.com","twitter:description":"9th, 10th &amp; 11th December 2026 Barbil, Odisha Register now \u2192 Already registered? Add your payment UTR 00Days 00Hours 00Mins Registration and travel support by Barbil Tours and BarbilTaxi.com Before you start It takes about 5 minutes. Keep these handy: A recent passport-size photo on your phone or computer Your batch year, the year you","twitter:creator":"@PlatformPoints","twitter:image":"http:\/\/barbiltours.com\/V2\/wp-content\/uploads\/2024\/10\/pp-logo.png"},"aioseo_meta_data":{"post_id":"3680","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-10-19 07:06:59","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"open_ai":null,"ai":null,"created":"2026-10-18 22:11:17","updated":"2026-10-19 07:06:59"},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t<a href=\"https:\/\/www.barbiltours.com\/list\" title=\"Home\">Home<\/a>\n<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\tSt Mary\u2019s Barbil Diamond Jubilee Celebrations 2026\n<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.barbiltours.com\/list"},{"label":"St Mary&#8217;s Barbil Diamond Jubilee Celebrations 2026","link":"https:\/\/www.barbiltours.com\/list\/?page_id=3680"}],"_links":{"self":[{"href":"https:\/\/www.barbiltours.com\/list\/index.php?rest_route=\/wp\/v2\/pages\/3680","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.barbiltours.com\/list\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.barbiltours.com\/list\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.barbiltours.com\/list\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.barbiltours.com\/list\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3680"}],"version-history":[{"count":27,"href":"https:\/\/www.barbiltours.com\/list\/index.php?rest_route=\/wp\/v2\/pages\/3680\/revisions"}],"predecessor-version":[{"id":3737,"href":"https:\/\/www.barbiltours.com\/list\/index.php?rest_route=\/wp\/v2\/pages\/3680\/revisions\/3737"}],"wp:attachment":[{"href":"https:\/\/www.barbiltours.com\/list\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3680"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}