{"id":38923,"date":"2026-01-27T00:58:19","date_gmt":"2026-01-26T22:58:19","guid":{"rendered":"https:\/\/staging.fotovmag.ro\/?page_id=38923"},"modified":"2026-10-02T10:55:29","modified_gmt":"2026-10-02T07:55:29","slug":"qr-generator-ai-marketing-tool-fotovmag","status":"publish","type":"page","link":"https:\/\/staging.fotovmag.ro\/es\/qr-generator-ai-marketing-tool-fotovmag\/","title":{"rendered":"Generador de c\u00f3digos QR"},"content":{"rendered":"\n<div class=\"wp-block-wd-section wd-8314a3f5\">\n<div class=\"wp-block-wd-container wd-dir-col wd-align-is-lg-center fv-qr-hero wd-749fb148\">\n<div class=\"wp-block-wd-icon fv-rs-kicker wd-with-text wd-7fa949a5\"><span class=\"wd-text-icon\">Instrument gratuit<\/span><\/div>\n\n\n\n<h1 class=\"wp-block-wd-title title wd-a544c2c3\">Generator cod QR<\/h1>\n\n\n\n<p class=\"wp-block-wd-paragraph fv-rs-lead wd-695a185b\">Linkuri, WiFi, contacte vCard, WhatsApp, SMS, e-mail \u0219i coduri de bare EAN \u2014 cu puncte, col\u021buri \u0219i culori la alegere \u0219i logo \u00een mijloc. Totul se genereaz\u0103 pe loc, \u00een browserul t\u0103u; descarci PNG sau SVG vectorial.<\/p>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-wd-section wd-38496263\">\n<div class=\"wp-block-wd-container wd-dir-col fv-qr-app wd-4b00d48f wd-custom-width\">\n<style>\/* FotoVmag \u2013 Generator cod QR (fv-qr): form on the left, sticky preview card on the right. Theme tokens. *\/\n.fvqr { --q-ink: var(--wd-title-color, #1e262e); --q-mut: var(--wd-text-color, #5b6570); --q-line: var(--wd-form-brd-color, #e3e6ea); --q-acc: var(--wd-primary-color, #83b735); --q-r: 14px; box-sizing: border-box; max-width: 1180px; margin: 0 auto; padding: 0 20px; color: var(--q-ink); }\n.fvqr *, .fvqr *::before, .fvqr *::after { box-sizing: border-box; }\n.fvqr__grid { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(320px, .9fr); gap: 28px; align-items: start; }\n.fvqr__types { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 18px; }\n.fvqr__types button { padding: 9px 15px; border: 1px solid var(--q-line); border-radius: 999px; background: #fff; color: var(--q-ink); font-size: 14px; font-weight: 600; line-height: 1.2; cursor: pointer; transition: border-color .2s, background-color .2s, color .2s; }\n.fvqr__types button:hover { border-color: var(--q-ink); }\n.fvqr__types button.is-on { border-color: var(--q-ink); background: var(--q-ink); color: #fff; }\n.fvqr__fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 14px; margin: 0 0 16px; }\n.fvqr__fields > :only-child, .fvqr__field:has(textarea), .fvqr__short-row { grid-column: 1 \/ -1; }\n.fvqr__field { display: flex; flex-direction: column; gap: 6px; margin: 0; }\n.fvqr__field > span { color: var(--q-mut); font-size: 13px; font-weight: 600; }\n.fvqr__field input, .fvqr__field textarea, .fvqr__field select { width: 100%; min-height: 46px; margin: 0; padding: 10px 12px; border: 1px solid var(--q-line); border-radius: 10px; background: #fff; color: var(--q-ink); font: inherit; font-size: 15px; }\n.fvqr__field textarea { min-height: 90px; resize: vertical; }\n.fvqr__field input:focus, .fvqr__field textarea:focus, .fvqr__field select:focus { border-color: var(--q-acc); outline: 2px solid color-mix(in srgb, var(--q-acc) 25%, transparent); }\n.fvqr__check { display: flex; align-items: center; gap: 8px; margin: 0; font-size: 14px; cursor: pointer; }\n.fvqr__short-row { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }\n.fvqr__short { min-height: 40px; padding: 8px 16px; border: 1px solid var(--q-acc); border-radius: 10px; background: #fff; color: var(--q-ink); font-weight: 700; cursor: pointer; }\n.fvqr__short:hover { background: var(--q-acc); color: #fff; }\n.fvqr__short:disabled { opacity: .6; cursor: progress; }\n.fvqr__short-msg { color: var(--q-mut); font-size: 13px; }\n.fvqr__more { border: 1px solid var(--q-line); border-radius: var(--q-r); background: #fff; }\n.fvqr__more > summary { padding: 14px 16px; font-weight: 700; cursor: pointer; list-style-position: inside; }\n.fvqr__design { display: grid; gap: 16px; padding: 0 16px 18px; }\n.fvqr__label { margin: 0 0 8px; color: var(--q-mut); font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }\n.fvqr__chips { display: flex; flex-wrap: wrap; gap: 8px; }\n.fvqr__chip { display: inline-flex; align-items: center; gap: 8px; padding: 6px 12px 6px 7px; border: 1px solid var(--q-line); border-radius: 10px; background: #fff; color: var(--q-ink); font-size: 13px; font-weight: 600; cursor: pointer; transition: border-color .2s, box-shadow .2s; }\n.fvqr__chip[aria-checked=\"true\"] { border-color: var(--q-acc); box-shadow: 0 0 0 2px color-mix(in srgb, var(--q-acc) 30%, transparent); }\n.fvqr__chip i { display: block; width: 22px; height: 22px; background: var(--q-ink); }\n.fvqr__chip--dots-square i { border-radius: 2px; } .fvqr__chip--dots-rounded i { border-radius: 7px; } .fvqr__chip--dots-dots i { border-radius: 50%; }\n.fvqr__chip--dots-fluid i { border-radius: 11px 11px 3px 11px; } .fvqr__chip--dots-leaf i { border-radius: 11px 0 11px 0; }\n.fvqr__chip[class*=\"--outer-\"] i { border: 5px solid var(--q-ink); background: transparent; }\n.fvqr__chip--outer-square i { border-radius: 2px; } .fvqr__chip--outer-rounded i { border-radius: 8px; } .fvqr__chip--outer-circle i { border-radius: 50%; } .fvqr__chip--outer-leaf i { border-radius: 10px 0 10px 0; }\n.fvqr__chip[class*=\"--inner-\"] i { width: 16px; height: 16px; margin: 3px; }\n.fvqr__chip--inner-square i { border-radius: 1px; } .fvqr__chip--inner-rounded i { border-radius: 5px; } .fvqr__chip--inner-circle i { border-radius: 50%; }\n.fvqr__colour { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }\n.fvqr__colour input[type=\"color\"] { width: 46px; height: 38px; padding: 2px; border: 1px solid var(--q-line); border-radius: 8px; background: #fff; cursor: pointer; }\n.fvqr__swatches { display: flex; flex-wrap: wrap; gap: 6px; }\n.fvqr__sw { width: 26px; height: 26px; padding: 0; border: 2px solid #fff; border-radius: 50%; background: var(--c); box-shadow: 0 0 0 1px var(--q-line); cursor: pointer; }\n.fvqr__group--colour .fvqr__check { margin-top: 8px; }\n.fvqr__logo { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }\n.fvqr__file { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }\n.fvqr__upload { display: inline-block; margin: 0; padding: 9px 14px; border: 1px dashed var(--q-acc); border-radius: 10px; color: var(--q-ink); font-size: 14px; font-weight: 600; cursor: pointer; }\n.fvqr__upload:hover { background: color-mix(in srgb, var(--q-acc) 10%, #fff); }\n.fvqr__link { padding: 0; border: 0; background: none; color: var(--q-mut); font-size: 13px; text-decoration: underline; cursor: pointer; }\n.fvqr__range { display: flex; align-items: center; gap: 10px; margin: 10px 0 0; font-size: 13px; }\n.fvqr__range input { flex: 1; accent-color: var(--q-acc); }\n.fvqr__hint { margin: 8px 0 0; color: var(--q-mut); font-size: 12.5px; line-height: 1.5; }\n.fvqr__group--row { display: flex; align-items: center; justify-content: space-between; gap: 12px; }\n.fvqr__group--row .fvqr__label { margin: 0; }\n.fvqr__group select { min-height: 40px; padding: 6px 10px; border: 1px solid var(--q-line); border-radius: 10px; background: #fff; color: var(--q-ink); }\n.fvqr__out { position: sticky; top: 110px; }\n.fvqr__card { padding: 22px; border: 1px solid var(--q-line); border-radius: 18px; background: #fff; box-shadow: 0 24px 60px rgba(18, 22, 28, .1); }\n.fvqr__preview { display: grid; place-items: center; aspect-ratio: 1 \/ 1; overflow: hidden; border-radius: 12px; background: repeating-conic-gradient(#f2f3f4 0 25%, #fff 0 50%) 50% \/ 20px 20px; }\n.fvqr__preview svg { display: block; width: 100%; height: auto; max-height: 100%; }\n.fvqr__empty { margin: 0; padding: 24px; color: var(--q-mut); text-align: center; }\n.fvqr__info { margin: 12px 0 0; color: var(--q-mut); font-size: 13px; text-align: center; }\n.fvqr__note { margin: 6px 0 0; color: #b7791f; font-size: 13px; text-align: center; }\n.fvqr__note:empty, .fvqr__info:empty { display: none; }\n.fvqr__dl { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 16px; }\n.fvqr__btn { min-height: 46px; padding: 8px 12px; border: 1px solid var(--q-ink); border-radius: 10px; background: #fff; color: var(--q-ink); font-size: 14px; font-weight: 700; cursor: pointer; transition: filter .2s; }\n.fvqr__btn:hover { filter: brightness(.94); }\n.fvqr__btn--main { border-color: var(--q-acc); background: var(--q-acc); color: #fff; }\n.fvqr__btn--vcf { display: none; grid-column: 1 \/ -1; }\n.fvqr__dl[data-vcf] .fvqr__btn--vcf { display: block; }\n.fvqr.is-empty .fvqr__btn { opacity: .45; pointer-events: none; }\n@media (max-width: 900px) {\n\t.fvqr__grid { grid-template-columns: minmax(0, 1fr); }\n\t.fvqr__out { position: static; }\n}\n@media (max-width: 600px) {\n\t.fvqr { padding: 0 16px; }\n\t.fvqr__fields { grid-template-columns: minmax(0, 1fr); }\n\t.fvqr__card { padding: 16px; }\n}\n\n.fv-qr-hero { max-width: 860px; margin: 0 auto; padding: clamp(28px, 5vw, 56px) 20px clamp(18px, 3vw, 30px); text-align: center; align-items: center; }\n.fv-qr-hero h1.wp-block-wd-title { margin: 0 0 12px; font-size: clamp(30px, 4.4vw, 50px); line-height: 1.08; letter-spacing: -.02em; }\n.fv-qr-hero p.wp-block-wd-paragraph.fv-rs-lead { margin: 0 auto; }\n.fv-qr-app { padding-bottom: clamp(30px, 5vw, 60px); }<\/style>\n<div id=\"fvqr\" class=\"fvqr\" data-short=\"\/wp-json\/fotovmag\/v1\/short\"><noscript><p>Generatorul are nevoie de JavaScript activat \u00een browser.<\/p><\/noscript><\/div>\n<script>new Function(new TextDecoder().decode(Uint8Array.from(atob(\"LyogRm90b1ZtYWcgUVIgZW5jb2RlciAoZnYtcXIpOiBieXRlIG1vZGUgKFVURi04KSwgZXJyb3IgY29ycmVjdGlvbiBML00vUS9ILCB2ZXJzaW9ucyAx4oCTNDAsIGF1dG9tYXRpYyB2ZXJzaW9uIGFuZCBtYXNrLgogICBGb2xsb3dzIElTTy9JRUMgMTgwMDQgdGhlIHdheSBQcm9qZWN0IE5heXVraSdzIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBkb2VzLiBObyBkZXBlbmRlbmNpZXMuIFJldHVybnMgYSBzcXVhcmUKICAgYXJyYXkgb2Ygcm93cyBvZiBib29sZWFucyAodHJ1ZSA9IGRhcmspLCB3aXRob3V0IHRoZSBxdWlldCB6b25lLiBVc2FnZTogRlZRUi5lbmNvZGUodGV4dCwgeyBlY2w6ICJNIiwgbWFzazogLTEsIHZlcnNpb246IDAgfSkgKi8KdmFyIEZWUVIgPSAoZnVuY3Rpb24gKCkgewoJInVzZSBzdHJpY3QiOwoJdmFyIEVDQyA9IHsgLy8gY29kZXdvcmRzIHBlciBibG9jaywgaW5kZXggPSB2ZXJzaW9uICgwIHVudXNlZCkKCQlMOiBbLTEsIDcsIDEwLCAxNSwgMjAsIDI2LCAxOCwgMjAsIDI0LCAzMCwgMTgsIDIwLCAyNCwgMjYsIDMwLCAyMiwgMjQsIDI4LCAzMCwgMjgsIDI4LCAyOCwgMjgsIDMwLCAzMCwgMjYsIDI4LCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzBdLAoJCU06IFstMSwgMTAsIDE2LCAyNiwgMTgsIDI0LCAxNiwgMTgsIDIyLCAyMiwgMjYsIDMwLCAyMiwgMjIsIDI0LCAyNCwgMjgsIDI4LCAyNiwgMjYsIDI2LCAyNiwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjhdLAoJCVE6IFstMSwgMTMsIDIyLCAxOCwgMjYsIDE4LCAyNCwgMTgsIDIyLCAyMCwgMjQsIDI4LCAyNiwgMjQsIDIwLCAzMCwgMjQsIDI4LCAyOCwgMjYsIDMwLCAyOCwgMzAsIDMwLCAzMCwgMzAsIDI4LCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzBdLAoJCUg6IFstMSwgMTcsIDI4LCAyMiwgMTYsIDIyLCAyOCwgMjYsIDI2LCAyNCwgMjgsIDI0LCAyOCwgMjIsIDI0LCAyNCwgMzAsIDI4LCAyOCwgMjYsIDI4LCAzMCwgMjQsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzBdCgl9OwoJdmFyIEJMT0NLUyA9IHsgLy8gbnVtYmVyIG9mIGVycm9yIGNvcnJlY3Rpb24gYmxvY2tzLCBpbmRleCA9IHZlcnNpb24KCQlMOiBbLTEsIDEsIDEsIDEsIDEsIDEsIDIsIDIsIDIsIDIsIDQsIDQsIDQsIDQsIDQsIDYsIDYsIDYsIDYsIDcsIDgsIDgsIDksIDksIDEwLCAxMiwgMTIsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMTksIDIwLCAyMSwgMjIsIDI0LCAyNV0sCgkJTTogWy0xLCAxLCAxLCAxLCAyLCAyLCA0LCA0LCA0LCA1LCA1LCA1LCA4LCA5LCA5LCAxMCwgMTAsIDExLCAxMywgMTQsIDE2LCAxNywgMTcsIDE4LCAyMCwgMjEsIDIzLCAyNSwgMjYsIDI4LCAyOSwgMzEsIDMzLCAzNSwgMzcsIDM4LCA0MCwgNDMsIDQ1LCA0NywgNDldLAoJCVE6IFstMSwgMSwgMSwgMiwgMiwgNCwgNCwgNiwgNiwgOCwgOCwgOCwgMTAsIDEyLCAxNiwgMTIsIDE3LCAxNiwgMTgsIDIxLCAyMCwgMjMsIDIzLCAyNSwgMjcsIDI5LCAzNCwgMzQsIDM1LCAzOCwgNDAsIDQzLCA0NSwgNDgsIDUxLCA1MywgNTYsIDU5LCA2MiwgNjUsIDY4XSwKCQlIOiBbLTEsIDEsIDEsIDIsIDQsIDQsIDQsIDUsIDYsIDgsIDgsIDExLCAxMSwgMTYsIDE2LCAxOCwgMTYsIDE5LCAyMSwgMjUsIDI1LCAyNSwgMzQsIDMwLCAzMiwgMzUsIDM3LCA0MCwgNDIsIDQ1LCA0OCwgNTEsIDU0LCA1NywgNjAsIDYzLCA2NiwgNzAsIDc0LCA3NywgODFdCgl9OwoJdmFyIEZPUk1BVCA9IHsgTDogMSwgTTogMCwgUTogMywgSDogMiB9OwoKCWZ1bmN0aW9uIHV0Zjgoc3RyKSB7CgkJdmFyIG91dCA9IFtdOwoJCWZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7CgkJCXZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSk7CgkJCWlmIChjID49IDB4ZDgwMCAmJiBjIDw9IDB4ZGJmZiAmJiBpICsgMSA8IHN0ci5sZW5ndGgpIHsgdmFyIGQgPSBzdHIuY2hhckNvZGVBdChpICsgMSk7IGlmIChkID49IDB4ZGMwMCAmJiBkIDw9IDB4ZGZmZikgeyBjID0gMHgxMDAwMCArICgoYyAtIDB4ZDgwMCkgPDwgMTApICsgKGQgLSAweGRjMDApOyBpKys7IH0gfQoJCQlpZiAoYyA8IDB4ODApIG91dC5wdXNoKGMpOwoJCQllbHNlIGlmIChjIDwgMHg4MDApIG91dC5wdXNoKDB4YzAgfCBjID4+IDYsIDB4ODAgfCBjICYgNjMpOwoJCQllbHNlIGlmIChjIDwgMHgxMDAwMCkgb3V0LnB1c2goMHhlMCB8IGMgPj4gMTIsIDB4ODAgfCBjID4+IDYgJiA2MywgMHg4MCB8IGMgJiA2Myk7CgkJCWVsc2Ugb3V0LnB1c2goMHhmMCB8IGMgPj4gMTgsIDB4ODAgfCBjID4+IDEyICYgNjMsIDB4ODAgfCBjID4+IDYgJiA2MywgMHg4MCB8IGMgJiA2Myk7CgkJfQoJCXJldHVybiBvdXQ7Cgl9CglmdW5jdGlvbiByYXdNb2R1bGVzKHZlcikgewoJCXZhciByID0gKDE2ICogdmVyICsgMTI4KSAqIHZlciArIDY0OwoJCWlmICh2ZXIgPj0gMikgeyB2YXIgbiA9IE1hdGguZmxvb3IodmVyIC8gNykgKyAyOyByIC09ICgyNSAqIG4gLSAxMCkgKiBuIC0gNTU7IGlmICh2ZXIgPj0gNykgciAtPSAzNjsgfQoJCXJldHVybiByOwoJfQoJZnVuY3Rpb24gZGF0YUNvZGV3b3Jkcyh2ZXIsIGVjbCkgeyByZXR1cm4gTWF0aC5mbG9vcihyYXdNb2R1bGVzKHZlcikgLyA4KSAtIEVDQ1tlY2xdW3Zlcl0gKiBCTE9DS1NbZWNsXVt2ZXJdOyB9CglmdW5jdGlvbiBjYXBhY2l0eUJ5dGVzKHZlciwgZWNsKSB7IHJldHVybiBNYXRoLmZsb29yKChkYXRhQ29kZXdvcmRzKHZlciwgZWNsKSAqIDggLSA0IC0gKHZlciA8IDEwID8gOCA6IDE2KSkgLyA4KTsgfQoKCS8vIFJlZWTigJNTb2xvbW9uIG92ZXIgR0YoMl44KSwgcG9seW5vbWlhbCAweDExRAoJZnVuY3Rpb24gbXVsKHgsIHkpIHsgdmFyIHogPSAwOyBmb3IgKHZhciBpID0gNzsgaSA+PSAwOyBpLS0pIHsgeiA9ICh6IDw8IDEpIF4gKCh6ID4+PiA3KSAqIDB4MTFkKTsgeiBePSAoKHkgPj4+IGkpICYgMSkgKiB4OyB9IHJldHVybiB6OyB9CglmdW5jdGlvbiBkaXZpc29yKGRlZ3JlZSkgewoJCXZhciByID0gW107IGZvciAodmFyIGkgPSAwOyBpIDwgZGVncmVlIC0gMTsgaSsrKSByLnB1c2goMCk7IHIucHVzaCgxKTsKCQl2YXIgcm9vdCA9IDE7CgkJZm9yIChpID0gMDsgaSA8IGRlZ3JlZTsgaSsrKSB7IGZvciAodmFyIGogPSAwOyBqIDwgci5sZW5ndGg7IGorKykgeyByW2pdID0gbXVsKHJbal0sIHJvb3QpOyBpZiAoaiArIDEgPCByLmxlbmd0aCkgcltqXSBePSByW2ogKyAxXTsgfSByb290ID0gbXVsKHJvb3QsIDIpOyB9CgkJcmV0dXJuIHI7Cgl9CglmdW5jdGlvbiByZW1haW5kZXIoZGF0YSwgZGl2KSB7CgkJdmFyIHIgPSBkaXYubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIDA7IH0pOwoJCWRhdGEuZm9yRWFjaChmdW5jdGlvbiAoYikgeyB2YXIgZiA9IGIgXiByLnNoaWZ0KCk7IHIucHVzaCgwKTsgZGl2LmZvckVhY2goZnVuY3Rpb24gKGMsIGkpIHsgcltpXSBePSBtdWwoYywgZik7IH0pOyB9KTsKCQlyZXR1cm4gcjsKCX0KCWZ1bmN0aW9uIGludGVybGVhdmUoZGF0YSwgdmVyLCBlY2wpIHsKCQl2YXIgbmIgPSBCTE9DS1NbZWNsXVt2ZXJdLCBlY0xlbiA9IEVDQ1tlY2xdW3Zlcl0sIHJhdyA9IE1hdGguZmxvb3IocmF3TW9kdWxlcyh2ZXIpIC8gOCk7CgkJdmFyIG5TaG9ydCA9IG5iIC0gcmF3ICUgbmIsIHNob3J0TGVuID0gTWF0aC5mbG9vcihyYXcgLyBuYiksIGRpdiA9IGRpdmlzb3IoZWNMZW4pLCBibG9ja3MgPSBbXSwgayA9IDA7CgkJZm9yICh2YXIgaSA9IDA7IGkgPCBuYjsgaSsrKSB7CgkJCXZhciBkYXQgPSBkYXRhLnNsaWNlKGssIGsgKyBzaG9ydExlbiAtIGVjTGVuICsgKGkgPCBuU2hvcnQgPyAwIDogMSkpOyBrICs9IGRhdC5sZW5ndGg7CgkJCXZhciBlY2MgPSByZW1haW5kZXIoZGF0LCBkaXYpOwoJCQlpZiAoaSA8IG5TaG9ydCkgZGF0LnB1c2goMCk7CgkJCWJsb2Nrcy5wdXNoKGRhdC5jb25jYXQoZWNjKSk7CgkJfQoJCXZhciBvdXQgPSBbXTsKCQlmb3IgKGkgPSAwOyBpIDwgYmxvY2tzWzBdLmxlbmd0aDsgaSsrKSBibG9ja3MuZm9yRWFjaChmdW5jdGlvbiAoYiwgaikgeyBpZiAoaSAhPT0gc2hvcnRMZW4gLSBlY0xlbiB8fCBqID49IG5TaG9ydCkgb3V0LnB1c2goYltpXSk7IH0pOwoJCXJldHVybiBvdXQ7Cgl9CglmdW5jdGlvbiBhbGlnblBvc2l0aW9ucyh2ZXIpIHsKCQlpZiAodmVyID09PSAxKSByZXR1cm4gW107CgkJdmFyIG4gPSBNYXRoLmZsb29yKHZlciAvIDcpICsgMiwgc3RlcCA9IE1hdGguZmxvb3IoKHZlciAqIDggKyBuICogMyArIDUpIC8gKG4gKiA0IC0gNCkpICogMiwgc2l6ZSA9IHZlciAqIDQgKyAxNywgciA9IFs2XTsKCQlmb3IgKHZhciBwb3MgPSBzaXplIC0gNzsgci5sZW5ndGggPCBuOyBwb3MgLT0gc3RlcCkgci5zcGxpY2UoMSwgMCwgcG9zKTsKCQlyZXR1cm4gcjsKCX0KCglmdW5jdGlvbiBidWlsZChieXRlcywgdmVyLCBlY2wsIGZvcmNlZE1hc2ssIHF1aXJrKSB7CgkJdmFyIHNpemUgPSB2ZXIgKiA0ICsgMTcsIG0gPSBbXSwgZm4gPSBbXSwgaSwgajsKCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7IG0ucHVzaChuZXcgQXJyYXkoc2l6ZSkuZmlsbChmYWxzZSkpOyBmbi5wdXNoKG5ldyBBcnJheShzaXplKS5maWxsKGZhbHNlKSk7IH0KCQlmdW5jdGlvbiBzZXQoeCwgeSwgZGFyaykgeyBtW3ldW3hdID0gZGFyazsgZm5beV1beF0gPSB0cnVlOyB9CgkJLy8gdGltaW5nLCBmaW5kZXJzLCBhbGlnbm1lbnQKCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7IHNldCg2LCBpLCBpICUgMiA9PT0gMCk7IHNldChpLCA2LCBpICUgMiA9PT0gMCk7IH0KCQlbWzMsIDNdLCBbc2l6ZSAtIDQsIDNdLCBbMywgc2l6ZSAtIDRdXS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7CgkJCWZvciAodmFyIGR5ID0gLTQ7IGR5IDw9IDQ7IGR5KyspIGZvciAodmFyIGR4ID0gLTQ7IGR4IDw9IDQ7IGR4KyspIHsKCQkJCXZhciBkID0gTWF0aC5tYXgoTWF0aC5hYnMoZHgpLCBNYXRoLmFicyhkeSkpLCB4ID0gY1swXSArIGR4LCB5ID0gY1sxXSArIGR5OwoJCQkJaWYgKHggPj0gMCAmJiB4IDwgc2l6ZSAmJiB5ID49IDAgJiYgeSA8IHNpemUpIHNldCh4LCB5LCBkICE9PSAyICYmIGQgIT09IDQpOwoJCQl9CgkJfSk7CgkJdmFyIGFwID0gYWxpZ25Qb3NpdGlvbnModmVyKSwgbGFzdCA9IGFwLmxlbmd0aCAtIDE7CgkJYXAuZm9yRWFjaChmdW5jdGlvbiAoYSwgaWEpIHsgYXAuZm9yRWFjaChmdW5jdGlvbiAoYiwgaWIpIHsKCQkJaWYgKChpYSA9PT0gMCAmJiBpYiA9PT0gMCkgfHwgKGlhID09PSAwICYmIGliID09PSBsYXN0KSB8fCAoaWEgPT09IGxhc3QgJiYgaWIgPT09IDApKSByZXR1cm47CgkJCWZvciAodmFyIGR5ID0gLTI7IGR5IDw9IDI7IGR5KyspIGZvciAodmFyIGR4ID0gLTI7IGR4IDw9IDI7IGR4KyspIHNldChhICsgZHgsIGIgKyBkeSwgTWF0aC5tYXgoTWF0aC5hYnMoZHgpLCBNYXRoLmFicyhkeSkpICE9PSAxKTsKCQl9KTsgfSk7CgkJZnVuY3Rpb24gZHJhd0Zvcm1hdChtYXNrKSB7CgkJCXZhciBkYXRhID0gRk9STUFUW2VjbF0gPDwgMyB8IG1hc2ssIHJlbSA9IGRhdGE7CgkJCWZvciAodmFyIGsgPSAwOyBrIDwgMTA7IGsrKykgcmVtID0gKHJlbSA8PCAxKSBeICgocmVtID4+PiA5KSAqIDB4NTM3KTsKCQkJdmFyIGJpdHMgPSAoZGF0YSA8PCAxMCB8IHJlbSkgXiAweDU0MTIsIGJpdCA9IGZ1bmN0aW9uIChuKSB7IHJldHVybiAoKGJpdHMgPj4+IG4pICYgMSkgIT09IDA7IH07CgkJCWZvciAoayA9IDA7IGsgPD0gNTsgaysrKSBzZXQoOCwgaywgYml0KGspKTsKCQkJc2V0KDgsIDcsIGJpdCg2KSk7IHNldCg4LCA4LCBiaXQoNykpOyBzZXQoNywgOCwgYml0KDgpKTsKCQkJZm9yIChrID0gOTsgayA8IDE1OyBrKyspIHNldCgxNCAtIGssIDgsIGJpdChrKSk7CgkJCWZvciAoayA9IDA7IGsgPCA4OyBrKyspIHNldChzaXplIC0gMSAtIGssIDgsIGJpdChrKSk7CgkJCWZvciAoayA9IDg7IGsgPCAxNTsgaysrKSBzZXQoOCwgc2l6ZSAtIDE1ICsgaywgYml0KGspKTsKCQkJc2V0KDgsIHNpemUgLSA4LCB0cnVlKTsKCQl9CgkJZHJhd0Zvcm1hdCgwKTsKCQlpZiAodmVyID49IDcpIHsKCQkJdmFyIHJlbSA9IHZlcjsgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHJlbSA9IChyZW0gPDwgMSkgXiAoKHJlbSA+Pj4gMTEpICogMHgxZjI1KTsKCQkJdmFyIHZiaXRzID0gdmVyIDw8IDEyIHwgcmVtOwoJCQlmb3IgKGkgPSAwOyBpIDwgMTg7IGkrKykgeyB2YXIgYnQgPSAoKHZiaXRzID4+PiBpKSAmIDEpICE9PSAwLCBhID0gc2l6ZSAtIDExICsgaSAlIDMsIGIgPSBNYXRoLmZsb29yKGkgLyAzKTsgc2V0KGEsIGIsIGJ0KTsgc2V0KGIsIGEsIGJ0KTsgfQoJCX0KCQkvLyBkYXRhIGJpdHMKCQl2YXIgYmIgPSBbXTsKCQlmdW5jdGlvbiBwdXQodmFsLCBsZW4pIHsgZm9yICh2YXIgayA9IGxlbiAtIDE7IGsgPj0gMDsgay0tKSBiYi5wdXNoKCh2YWwgPj4+IGspICYgMSk7IH0KCQlwdXQoNCwgNCk7IHB1dChieXRlcy5sZW5ndGgsIHZlciA8IDEwID8gOCA6IDE2KTsgYnl0ZXMuZm9yRWFjaChmdW5jdGlvbiAoYikgeyBwdXQoYiwgOCk7IH0pOwoJCXZhciBjYXAgPSBkYXRhQ29kZXdvcmRzKHZlciwgZWNsKSAqIDg7CgkJcHV0KDAsIE1hdGgubWluKDQsIGNhcCAtIGJiLmxlbmd0aCkpOyBwdXQoMCwgKDggLSBiYi5sZW5ndGggJSA4KSAlIDgpOwoJCWlmIChxdWlyayAmJiBiYi5sZW5ndGggPCBjYXApIHB1dCgwLCA4KTsgLy8gdGVzdCBvbmx5OiBzZWdubyB3cml0ZXMgYSB3aG9sZSB6ZXJvIGJ5dGUgd2hlbiB0aGUgc3RyZWFtIGlzIGFscmVhZHkgYnl0ZSBhbGlnbmVkCgkJZm9yICh2YXIgcGFkID0gMHhlYzsgYmIubGVuZ3RoIDwgY2FwOyBwYWQgXj0gMHhlYyBeIDB4MTEpIHB1dChwYWQsIDgpOwoJCXZhciBjdyA9IFtdOyBmb3IgKGkgPSAwOyBpIDwgYmIubGVuZ3RoOyBpICs9IDgpIHsgdmFyIHYgPSAwOyBmb3IgKGogPSAwOyBqIDwgODsgaisrKSB2ID0gdiA8PCAxIHwgYmJbaSArIGpdOyBjdy5wdXNoKHYpOyB9CgkJdmFyIGFsbCA9IGludGVybGVhdmUoY3csIHZlciwgZWNsKSwgaWR4ID0gMDsKCQlmb3IgKHZhciByaWdodCA9IHNpemUgLSAxOyByaWdodCA+PSAxOyByaWdodCAtPSAyKSB7CgkJCWlmIChyaWdodCA9PT0gNikgcmlnaHQgPSA1OwoJCQlmb3IgKHZhciB2ZXJ0ID0gMDsgdmVydCA8IHNpemU7IHZlcnQrKykgZm9yIChqID0gMDsgaiA8IDI7IGorKykgewoJCQkJdmFyIHggPSByaWdodCAtIGosIHVwID0gKChyaWdodCArIDEpICYgMikgPT09IDAsIHkgPSB1cCA\/IHNpemUgLSAxIC0gdmVydCA6IHZlcnQ7CgkJCQlpZiAoIWZuW3ldW3hdICYmIGlkeCA8IGFsbC5sZW5ndGggKiA4KSB7IG1beV1beF0gPSAoKGFsbFtpZHggPj4+IDNdID4+PiAoNyAtIChpZHggJiA3KSkpICYgMSkgIT09IDA7IGlkeCsrOyB9CgkJCX0KCQl9CgkJZnVuY3Rpb24gYXBwbHlNYXNrKGspIHsKCQkJZm9yICh2YXIgeSA9IDA7IHkgPCBzaXplOyB5KyspIGZvciAodmFyIHggPSAwOyB4IDwgc2l6ZTsgeCsrKSB7CgkJCQlpZiAoZm5beV1beF0pIGNvbnRpbnVlOwoJCQkJdmFyIGludjsKCQkJCXN3aXRjaCAoaykgewoJCQkJCWNhc2UgMDogaW52ID0gKHggKyB5KSAlIDIgPT09IDA7IGJyZWFrOwoJCQkJCWNhc2UgMTogaW52ID0geSAlIDIgPT09IDA7IGJyZWFrOwoJCQkJCWNhc2UgMjogaW52ID0geCAlIDMgPT09IDA7IGJyZWFrOwoJCQkJCWNhc2UgMzogaW52ID0gKHggKyB5KSAlIDMgPT09IDA7IGJyZWFrOwoJCQkJCWNhc2UgNDogaW52ID0gKE1hdGguZmxvb3IoeCAvIDMpICsgTWF0aC5mbG9vcih5IC8gMikpICUgMiA9PT0gMDsgYnJlYWs7CgkJCQkJY2FzZSA1OiBpbnYgPSB4ICogeSAlIDIgKyB4ICogeSAlIDMgPT09IDA7IGJyZWFrOwoJCQkJCWNhc2UgNjogaW52ID0gKHggKiB5ICUgMiArIHggKiB5ICUgMykgJSAyID09PSAwOyBicmVhazsKCQkJCQlkZWZhdWx0OiBpbnYgPSAoKHggKyB5KSAlIDIgKyB4ICogeSAlIDMpICUgMiA9PT0gMDsKCQkJCX0KCQkJCWlmIChpbnYpIG1beV1beF0gPSAhbVt5XVt4XTsKCQkJfQoJCX0KCQlmdW5jdGlvbiBwZW5hbHR5KCkgewoJCQl2YXIgcCA9IDAsIGRhcmsgPSAwLCB5LCB4LCBydW4sIGNvbDsKCQkJZnVuY3Rpb24gbGluZXMoZ2V0KSB7CgkJCQlmb3IgKHZhciBhID0gMDsgYSA8IHNpemU7IGErKykgewoJCQkJCXJ1biA9IDE7IGNvbCA9IGdldChhLCAwKTsKCQkJCQlmb3IgKHZhciBiID0gMTsgYiA8PSBzaXplOyBiKyspIHsKCQkJCQkJdmFyIGMgPSBiIDwgc2l6ZSA\/IGdldChhLCBiKSA6ICFjb2w7CgkJCQkJCWlmIChjID09PSBjb2wpIHJ1bisrOyBlbHNlIHsgaWYgKHJ1biA+PSA1KSBwICs9IDMgKyBydW4gLSA1OyBydW4gPSAxOyBjb2wgPSBjOyB9CgkJCQkJfQoJCQkJCXZhciBzID0gIiI7IGZvciAoYiA9IDA7IGIgPCBzaXplOyBiKyspIHMgKz0gZ2V0KGEsIGIpID8gIjEiIDogIjAiOwoJCQkJCXZhciB0ID0gIjAwMDAiICsgcyArICIwMDAwIiwgcmUgPSAvKD89MTAxMTEwMTAwMDB8MDAwMDEwMTExMDEpL2csIGhpdDsKCQkJCQl3aGlsZSAoKGhpdCA9IHJlLmV4ZWModCkpICE9PSBudWxsKSB7IHAgKz0gNDA7IHJlLmxhc3RJbmRleCA9IGhpdC5pbmRleCArIDE7IH0KCQkJCX0KCQkJfQoJCQlsaW5lcyhmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gbVthXVtiXTsgfSk7CgkJCWxpbmVzKGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiBtW2JdW2FdOyB9KTsKCQkJZm9yICh5ID0gMDsgeSA8IHNpemUgLSAxOyB5KyspIGZvciAoeCA9IDA7IHggPCBzaXplIC0gMTsgeCsrKSB7IHZhciBjMCA9IG1beV1beF07IGlmIChjMCA9PT0gbVt5XVt4ICsgMV0gJiYgYzAgPT09IG1beSArIDFdW3hdICYmIGMwID09PSBtW3kgKyAxXVt4ICsgMV0pIHAgKz0gMzsgfQoJCQlmb3IgKHkgPSAwOyB5IDwgc2l6ZTsgeSsrKSBmb3IgKHggPSAwOyB4IDwgc2l6ZTsgeCsrKSBpZiAobVt5XVt4XSkgZGFyaysrOwoJCQl2YXIgdG90YWwgPSBzaXplICogc2l6ZSwgazIgPSBNYXRoLmNlaWwoTWF0aC5hYnMoZGFyayAqIDIwIC0gdG90YWwgKiAxMCkgLyB0b3RhbCkgLSAxOwoJCQlyZXR1cm4gcCArIE1hdGgubWF4KDAsIGsyKSAqIDEwOwoJCX0KCQl2YXIgbWFzayA9IGZvcmNlZE1hc2s7CgkJaWYgKG1hc2sgPCAwIHx8IG1hc2sgPiA3KSB7CgkJCXZhciBiZXN0ID0gMWU5OwoJCQlmb3IgKHZhciBrID0gMDsgayA8IDg7IGsrKykgeyBhcHBseU1hc2soayk7IGRyYXdGb3JtYXQoayk7IHZhciBzYyA9IHBlbmFsdHkoKTsgaWYgKHNjIDwgYmVzdCkgeyBiZXN0ID0gc2M7IG1hc2sgPSBrOyB9IGFwcGx5TWFzayhrKTsgfQoJCX0KCQlhcHBseU1hc2sobWFzayk7IGRyYXdGb3JtYXQobWFzayk7CgkJcmV0dXJuIHsgc2l6ZTogc2l6ZSwgbW9kdWxlczogbSwgdmVyc2lvbjogdmVyLCBlY2w6IGVjbCwgbWFzazogbWFzayB9OwoJfQoKCWZ1bmN0aW9uIGVuY29kZSh0ZXh0LCBvcHQpIHsKCQlvcHQgPSBvcHQgfHwge307CgkJdmFyIGVjbCA9IC9eW0xNUUhdJC8udGVzdChvcHQuZWNsKSA\/IG9wdC5lY2wgOiAiTSIsIGJ5dGVzID0gdXRmOChTdHJpbmcodGV4dCkpLCB2ZXIgPSBvcHQudmVyc2lvbiB8IDA7CgkJaWYgKCF2ZXIpIHsgZm9yICh2ZXIgPSAxOyB2ZXIgPD0gNDAgJiYgY2FwYWNpdHlCeXRlcyh2ZXIsIGVjbCkgPCBieXRlcy5sZW5ndGg7IHZlcisrKTsgfQoJCWlmICh2ZXIgPiA0MCB8fCBjYXBhY2l0eUJ5dGVzKHZlciwgZWNsKSA8IGJ5dGVzLmxlbmd0aCkgdGhyb3cgbmV3IEVycm9yKCJUZXh0dWwgZXN0ZSBwcmVhIGx1bmcgcGVudHJ1IHVuIGNvZCBRUiAoIiArIGJ5dGVzLmxlbmd0aCArICIgb2N0ZcibaSkuIik7CgkJLy8gYSBiaWdnZXIgZXJyb3IgY29ycmVjdGlvbiBsZXZlbCBmb3IgZnJlZSB3aGVuIGl0IGZpdHMgaW4gdGhlIHNhbWUgdmVyc2lvbgoJCWlmIChvcHQuYm9vc3QgIT09IGZhbHNlKSBbIk0iLCAiUSIsICJIIl0uZm9yRWFjaChmdW5jdGlvbiAoZSkgeyBpZiAoIkxNUUgiLmluZGV4T2YoZSkgPiAiTE1RSCIuaW5kZXhPZihlY2wpICYmIGNhcGFjaXR5Qnl0ZXModmVyLCBlKSA+PSBieXRlcy5sZW5ndGgpIGVjbCA9IGU7IH0pOwoJCXJldHVybiBidWlsZChieXRlcywgdmVyLCBlY2wsIG9wdC5tYXNrID09PSB1bmRlZmluZWQgPyAtMSA6IG9wdC5tYXNrLCAhIW9wdC5fc2Vnbm8pOwoJfQoJcmV0dXJuIHsgZW5jb2RlOiBlbmNvZGUsIGNhcGFjaXR5Qnl0ZXM6IGNhcGFjaXR5Qnl0ZXMsIHV0Zjg6IHV0ZjggfTsKfSkoKTsKCi8qIEZvdG9WbWFnIOKAkyBHZW5lcmF0b3IgY29kIFFSIChmdi1xcikgYXBwLiBFdmVyeXRoaW5nIHJ1bnMgaW4gdGhlIHZpc2l0b3IncyBicm93c2VyOiBGVlFSIChvd24gZW5jb2RlciwgYnl0ZSBtb2RlLAogICB2ZXJzaW9ucyAx4oCTNDApIGFuZCBGVkVBTiAoRUFOLTEzIC8gRUFOLTgpIGJ1aWxkIHRoZSBzeW1ib2wsIHRoZSByZW5kZXJlciBkcmF3cyBpdCBhcyBTVkcgd2l0aCB0aGUgY2hvc2VuIGRvdHMsIGNvcm5lcnMsCiAgIGNvbG91cnMgYW5kIG9wdGlvbmFsIGxvZ287IGRvd25sb2FkcyBhcmUgU1ZHICh2ZWN0b3IpIG9yIFBORyAoY2FudmFzKS4gTGluayBzaG9ydGVuZXI6IFBPU1QgZGF0YS1zaG9ydCAoZnYtc2hvcnRsaW5rcwogICBzbmlwcGV0KSDihpIgaHR0cHM6Ly88c2l0ZT4vcS88Y29kZT4uIFRoZSBsYXN0IHNldHRpbmdzIGFyZSByZW1lbWJlcmVkIGluIGxvY2FsU3RvcmFnZSAodGhpcyBicm93c2VyIG9ubHkpLiAqLwp2YXIgRlZFQU4gPSAoZnVuY3Rpb24gKCkgewoJInVzZSBzdHJpY3QiOwoJdmFyIEwgPSBbIjAwMDExMDEiLCAiMDAxMTAwMSIsICIwMDEwMDExIiwgIjAxMTExMDEiLCAiMDEwMDAxMSIsICIwMTEwMDAxIiwgIjAxMDExMTEiLCAiMDExMTAxMSIsICIwMTEwMTExIiwgIjAwMDEwMTEiXTsKCXZhciBHID0gWyIwMTAwMTExIiwgIjAxMTAwMTEiLCAiMDAxMTAxMSIsICIwMTAwMDAxIiwgIjAwMTExMDEiLCAiMDExMTAwMSIsICIwMDAwMTAxIiwgIjAwMTAwMDEiLCAiMDAwMTAwMSIsICIwMDEwMTExIl07Cgl2YXIgUiA9IFsiMTExMDAxMCIsICIxMTAwMTEwIiwgIjExMDExMDAiLCAiMTAwMDAxMCIsICIxMDExMTAwIiwgIjEwMDExMTAiLCAiMTAxMDAwMCIsICIxMDAwMTAwIiwgIjEwMDEwMDAiLCAiMTExMDEwMCJdOwoJdmFyIFBBUiA9IFsiTExMTExMIiwgIkxMR0xHRyIsICJMTEdHTEciLCAiTExHR0dMIiwgIkxHTExHRyIsICJMR0dMTEciLCAiTEdHR0xMIiwgIkxHTEdMRyIsICJMR0xHR0wiLCAiTEdHTEdMIl07CglmdW5jdGlvbiBjaGVjayhkKSB7IHZhciBzID0gMDsgZm9yICh2YXIgaSA9IDA7IGkgPCBkLmxlbmd0aDsgaSsrKSBzICs9IChpICUgMiA9PT0gMCA\/IDMgOiAxKSAqICtkW2QubGVuZ3RoIC0gMSAtIGldOyByZXR1cm4gKDEwIC0gcyAlIDEwKSAlIDEwOyB9CglmdW5jdGlvbiBlbmNvZGUocmF3KSB7CgkJdmFyIGQgPSBTdHJpbmcocmF3KS5yZXBsYWNlKC9cRC9nLCAiIik7CgkJdmFyIGtpbmQgPSBkLmxlbmd0aCA8PSA4ID8gOCA6IDEzLCBib2R5ID0ga2luZCA9PT0gMTMgPyAxMiA6IDc7CgkJaWYgKGQubGVuZ3RoICE9PSBib2R5ICYmIGQubGVuZ3RoICE9PSBib2R5ICsgMSkgdGhyb3cgbmV3IEVycm9yKGtpbmQgPT09IDEzID8gIkVBTi0xMyBhcmUgMTIgY2lmcmUgKHBsdXMgY2lmcmEgZGUgY29udHJvbCkuIiA6ICJFQU4tOCBhcmUgNyBjaWZyZSAocGx1cyBjaWZyYSBkZSBjb250cm9sKS4iKTsKCQl2YXIgYyA9IGNoZWNrKGQuc2xpY2UoMCwgYm9keSkpOwoJCWlmIChkLmxlbmd0aCA9PT0gYm9keSArIDEgJiYgK2RbYm9keV0gIT09IGMpIHRocm93IG5ldyBFcnJvcigiQ2lmcmEgZGUgY29udHJvbCBudSBzZSBwb3RyaXZlyJl0ZTogYXIgdHJlYnVpIHPEgyBmaWUgIiArIGMgKyAiLiIpOwoJCWQgPSBkLnNsaWNlKDAsIGJvZHkpICsgYzsKCQl2YXIgYml0cyA9ICIxMDEiOwoJCWlmIChraW5kID09PSAxMykgeyB2YXIgcCA9IFBBUlsrZFswXV07IGZvciAodmFyIGkgPSAxOyBpIDw9IDY7IGkrKykgYml0cyArPSAocFtpIC0gMV0gPT09ICJMIiA\/IEwgOiBHKVsrZFtpXV07IGJpdHMgKz0gIjAxMDEwIjsgZm9yIChpID0gNzsgaSA8PSAxMjsgaSsrKSBiaXRzICs9IFJbK2RbaV1dOyB9CgkJZWxzZSB7IGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIGJpdHMgKz0gTFsrZFtpXV07IGJpdHMgKz0gIjAxMDEwIjsgZm9yIChpID0gNDsgaSA8IDg7IGkrKykgYml0cyArPSBSWytkW2ldXTsgfQoJCXJldHVybiB7IGtpbmQ6IGtpbmQsIGRpZ2l0czogZCwgYml0czogYml0cyArICIxMDEiIH07Cgl9CglyZXR1cm4geyBlbmNvZGU6IGVuY29kZSwgY2hlY2s6IGNoZWNrIH07Cn0pKCk7CgooZnVuY3Rpb24gKCkgewoJInVzZSBzdHJpY3QiOwoJdmFyIHJvb3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnZxciIpOwoJaWYgKCFyb290IHx8IHJvb3QuZ2V0QXR0cmlidXRlKCJkYXRhLXJlYWR5IikpIHJldHVybjsKCXJvb3Quc2V0QXR0cmlidXRlKCJkYXRhLXJlYWR5IiwgIjEiKTsKCXZhciBTSE9SVCA9IHJvb3QuZ2V0QXR0cmlidXRlKCJkYXRhLXNob3J0IikgfHwgIiIsIExTID0gImZ2cXItdjEiOwoJdmFyIFRZUEVTID0gW1sidXJsIiwgIkxpbmsiXSwgWyJ0ZXh0IiwgIlRleHQiXSwgWyJ3YSIsICJXaGF0c0FwcCJdLCBbIndpZmkiLCAiV2lGaSJdLCBbInZjYXJkIiwgIkNvbnRhY3QgdkNhcmQiXSwgWyJlbWFpbCIsICJFLW1haWwiXSwgWyJzbXMiLCAiU01TIl0sIFsidGVsIiwgIlRlbGVmb24iXSwgWyJlYW4iLCAiQ29kIEVBTiJdXTsKCXZhciBGSUVMRFMgPSB7CgkJdXJsOiBbWyJ1cmwiLCAiQWRyZXNhIChsaW5rKSIsICJodHRwczovL2ZvdG92bWFnLnJvIiwgInVybCJdXSwKCQl0ZXh0OiBbWyJ0ZXh0IiwgIlRleHR1bCIsICJTY3JpZSBvcmljZSB0ZXh04oCmIiwgImFyZWEiXV0sCgkJd2E6IFtbInBob25lIiwgIk51bcSDcnVsIGRlIFdoYXRzQXBwIiwgIis0MCA3NzEgMzA2IDgyMiIsICJ0ZWwiXSwgWyJtc2ciLCAiTWVzYWp1bCAob3DIm2lvbmFsKSIsICJCdW7EgyB6aXVhISBByJkgZG9yaeKApiIsICJhcmVhIl1dLAoJCXdpZmk6IFtbInNzaWQiLCAiTnVtZWxlIHJlyJtlbGVpIChTU0lEKSIsICJTdHVkaW8tR3Vlc3QiLCAidGV4dCJdLCBbInBhc3MiLCAiUGFyb2xhIiwgInBhcm9sYSByZcibZWxlaSIsICJ0ZXh0Il0sIFsic2VjIiwgIlNlY3VyaXRhdGUiLCAiIiwgInNlbDpXUEF8V1BBL1dQQTIvV1BBMyxXRVB8V0VQLG5vcGFzc3xGxINyxIMgcGFyb2zEgyJdLCBbImhpZGRlbiIsICJSZcibZWEgYXNjdW5zxIMiLCAiIiwgImNoZWNrIl1dLAoJCXZjYXJkOiBbWyJmaXJzdCIsICJQcmVudW1lIiwgIkFuYSIsICJ0ZXh0Il0sIFsibGFzdCIsICJOdW1lIiwgIlBvcGVzY3UiLCAidGV4dCJdLCBbIm9yZyIsICJGaXJtxIMiLCAiU3R1ZGlvIEZvdG8gQW5hIiwgInRleHQiXSwgWyJ0aXRsZSIsICJGdW5jyJtpZSIsICJGb3RvZ3JhZiIsICJ0ZXh0Il0sIFsibW9iaWxlIiwgIlRlbGVmb24gbW9iaWwiLCAiKzQwIDd4eCB4eHggeHh4IiwgInRlbCJdLCBbIndvcmsiLCAiVGVsZWZvbiBmaXggKG9wyJtpb25hbCkiLCAiIiwgInRlbCJdLCBbImVtYWlsIiwgIkUtbWFpbCIsICJhbmFAZXhlbXBsdS5ybyIsICJlbWFpbCJdLCBbIndlYiIsICJXZWJzaXRlIiwgImh0dHBzOi8vZXhlbXBsdS5ybyIsICJ1cmwiXSwgWyJzdHJlZXQiLCAiU3RyYWTEgyDImWkgbnVtxINyIiwgIiIsICJ0ZXh0Il0sIFsiY2l0eSIsICJPcmHImSIsICJPcmFkZWEiLCAidGV4dCJdLCBbInppcCIsICJDb2QgcG\/ImXRhbCIsICIiLCAidGV4dCJdLCBbImNvdW50cnkiLCAiyJphcmEiLCAiUm9tw6JuaWEiLCAidGV4dCJdLCBbIm5vdGUiLCAiTm90xIMgKG9wyJtpb25hbCkiLCAiIiwgInRleHQiXV0sCgkJZW1haWw6IFtbInRvIiwgIkFkcmVzYSBkZSBlLW1haWwiLCAiY29udGFjdEBleGVtcGx1LnJvIiwgImVtYWlsIl0sIFsic3ViamVjdCIsICJTdWJpZWN0IiwgIiIsICJ0ZXh0Il0sIFsiYm9keSIsICJNZXNhaiIsICIiLCAiYXJlYSJdXSwKCQlzbXM6IFtbInBob25lIiwgIk51bcSDciBkZSB0ZWxlZm9uIiwgIis0MCA3eHggeHh4IHh4eCIsICJ0ZWwiXSwgWyJtc2ciLCAiTWVzYWoiLCAiIiwgImFyZWEiXV0sCgkJdGVsOiBbWyJwaG9uZSIsICJOdW3Eg3IgZGUgdGVsZWZvbiIsICIrNDAgNzcxIDMwNiA4MjIiLCAidGVsIl1dLAoJCWVhbjogW1siY29kZSIsICJDaWZyZWxlIGNvZHVsdWkgKDEyIHBlbnRydSBFQU4tMTMsIDcgcGVudHJ1IEVBTi04KSIsICI1OTQwMDAwMDAwMDAiLCAidGV4dCJdXQoJfTsKCXZhciBET1RTID0gW1sic3F1YXJlIiwgIlDEg3RyYXQiXSwgWyJyb3VuZGVkIiwgIlJvdHVuaml0Il0sIFsiZG90cyIsICJQdW5jdGUiXSwgWyJmbHVpZCIsICJGbHVpZCJdLCBbImxlYWYiLCAiRnJ1bnrEgyJdXTsKCXZhciBPVVRFUiA9IFtbInNxdWFyZSIsICJQxIN0cmF0Il0sIFsicm91bmRlZCIsICJSb3R1bmppdCJdLCBbImNpcmNsZSIsICJDZXJjIl0sIFsibGVhZiIsICJGcnVuesSDIl1dOwoJdmFyIElOTkVSID0gW1sic3F1YXJlIiwgIlDEg3RyYXQiXSwgWyJyb3VuZGVkIiwgIlJvdHVuaml0Il0sIFsiY2lyY2xlIiwgIkNlcmMiXV07Cgl2YXIgU1dBVENIID0gWyIjMTExMTExIiwgIiM4M2I3MzUiLCAiIzFmMmE0NCIsICIjN2ExZjJiIiwgIiM1YjNmZDYiLCAiIzBmNzY2ZSJdOwoJdmFyIFMgPSB7IHR5cGU6ICJ1cmwiLCB2OiB7fSwgZG90czogInJvdW5kZWQiLCBvdXRlcjogInJvdW5kZWQiLCBpbm5lcjogInJvdW5kZWQiLCBmZzogIiMxMTExMTEiLCBleWU6ICIiLCBiZzogIiNmZmZmZmYiLCB0cmFuc3BhcmVudDogZmFsc2UsIGVjbDogImF1dG8iLCBsb2dvOiAiIiwgbG9nb1NpemU6IDIyLCBweDogMTAyNCB9OwoJdHJ5IHsgdmFyIHNhdmVkID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShMUykgfHwgIm51bGwiKTsgaWYgKHNhdmVkICYmIHR5cGVvZiBzYXZlZCA9PT0gIm9iamVjdCIpIGZvciAodmFyIGsgaW4gc2F2ZWQpIGlmIChrICE9PSAibG9nbyIgJiYgayAhPT0gInYiKSBTW2tdID0gc2F2ZWRba107IH0gY2F0Y2ggKGUpIHt9CglmdW5jdGlvbiBzYXZlKCkgeyB0cnkgeyB2YXIgbyA9IHt9OyBmb3IgKHZhciBrIGluIFMpIGlmIChrICE9PSAibG9nbyIgJiYgayAhPT0gInYiKSBvW2tdID0gU1trXTsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oTFMsIEpTT04uc3RyaW5naWZ5KG8pKTsgfSBjYXRjaCAoZSkge30gfSAvLyBkZXNpZ24gb25seTogbm8gcGFzc3dvcmRzIG9yIGNvbnRhY3QgZGF0YSBpbiB0aGUgYnJvd3NlciBzdG9yYWdlCgoJLy8gdHJhbnNsYXRlZCBwYWdlcyAoVHJhbnNsYXRlUHJlc3MgL2VzLyDigKYpOiB0ZXh0cyBmcm9tIGl0cyBkaWN0aW9uYXJ5IHRocm91Z2ggaXRzIGxvb2t1cCBlbmRwb2ludDsgUm9tYW5pYW4gcGFnZXM6IFQgcmV0dXJucyB0aGUgdGV4dCBhcyBpcwoJdmFyIGRpY3QgPSBudWxsOwoJZnVuY3Rpb24gVCh0KSB7IGlmICghZGljdCB8fCB0ID09IG51bGwpIHJldHVybiB0OyB0ID0gU3RyaW5nKHQpOyB2YXIgayA9IHQudHJpbSgpOyByZXR1cm4gayAmJiBkaWN0W2tdICE9PSB1bmRlZmluZWQgPyB0LnJlcGxhY2UoaywgZGljdFtrXSkgOiB0OyB9CglmdW5jdGlvbiBkZWMoeCkgeyB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7IGUuaW5uZXJIVE1MID0geDsgcmV0dXJuIGUudmFsdWU7IH0KCWZ1bmN0aW9uIGkxOG4odGV4dHMpIHsKCSAgdmFyIGQgPSB3aW5kb3cudHJwX2RhdGE7CgkgIGlmICghZCB8fCAhZC50cnBfY3VzdG9tX2FqYXhfdXJsIHx8ICFkLnRycF9jdXJyZW50X2xhbmd1YWdlIHx8IGQudHJwX2N1cnJlbnRfbGFuZ3VhZ2UgPT09IGQudHJwX29yaWdpbmFsX2xhbmd1YWdlIHx8ICF3aW5kb3cuZmV0Y2ggfHwgIXdpbmRvdy5VUkxTZWFyY2hQYXJhbXMpIHJldHVybiBQcm9taXNlLnJlamVjdCgpOwoJICB2YXIgbGFuZyA9IGQudHJwX2xhbmd1YWdlX3RvX3F1ZXJ5IHx8IGQudHJwX2N1cnJlbnRfbGFuZ3VhZ2U7CgkgIHZhciBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7IGFjdGlvbjogInRycF9nZXRfdHJhbnNsYXRpb25zX2RvbWNoYW5nZXMiLCBvcmlnaW5hbHM6IEpTT04uc3RyaW5naWZ5KHRleHRzKSwgc2tpcF9tYWNoaW5lX3RyYW5zbGF0aW9uOiAiW10iLCBsYW5ndWFnZTogbGFuZywgb3JpZ2luYWxfbGFuZ3VhZ2U6IGQudHJwX29yaWdpbmFsX2xhbmd1YWdlIH0pOwoJICB2YXIgYXNrID0gZnVuY3Rpb24gKHUpIHsgcmV0dXJuIGZldGNoKHUsIHsgbWV0aG9kOiAiUE9TVCIsIGJvZHk6IGJvZHkgfSkudGhlbihmdW5jdGlvbiAocikgeyBpZiAoIXIub2spIHRocm93IHIuc3RhdHVzOyByZXR1cm4gci5qc29uKCk7IH0pOyB9OwoJICByZXR1cm4gYXNrKGQudHJwX2N1c3RvbV9hamF4X3VybCkuY2F0Y2goZnVuY3Rpb24gKCkgeyBpZiAoZC50cnBfd3BfYWpheF91cmwpIHJldHVybiBhc2soZC50cnBfd3BfYWpheF91cmwpOyB0aHJvdyAwOyB9KS50aGVuKGZ1bmN0aW9uIChsaXN0KSB7IHZhciBtID0ge307IChBcnJheS5pc0FycmF5KGxpc3QpID8gbGlzdCA6IFtdKS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7IHZhciB0ID0geCAmJiB4LnRyYW5zbGF0aW9uc0FycmF5ICYmIHgudHJhbnNsYXRpb25zQXJyYXlbbGFuZ107IGlmICh0ICYmIHQudHJhbnNsYXRlZCkgbVtkZWMoeC5vcmlnaW5hbCldID0gZGVjKHQudHJhbnNsYXRlZCk7IH0pOyBkaWN0ID0gbTsgfSk7Cgl9CgkvLyBUcmFuc2xhdGVQcmVzcyBwcmludHMgaXRzIHNldHRpbmdzICh0cnBfZGF0YSkgYWZ0ZXIgdGhlIHBhZ2UncyBzY3JpcHRzCglmdW5jdGlvbiB3aGVuUGFyc2VkKGZuKSB7IGlmICh3aW5kb3cudHJwX2RhdGEgfHwgZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gImxvYWRpbmciKSBmbigpOyBlbHNlIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBmbik7IH0KCWZ1bmN0aW9uIGVhY2gobm9kZSwgc2tpcCwgZm4pIHsgdmFyIHcgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKG5vZGUsIE5vZGVGaWx0ZXIuU0hPV19BTEwsIHsgYWNjZXB0Tm9kZTogZnVuY3Rpb24gKG4pIHsgcmV0dXJuIG4ubm9kZVR5cGUgPT09IDEgJiYgc2tpcChuKSA\/IE5vZGVGaWx0ZXIuRklMVEVSX1JFSkVDVCA6IE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVDsgfSB9KTsgZm4obm9kZSk7IGZvciAodmFyIG4gPSB3Lm5leHROb2RlKCk7IG47IG4gPSB3Lm5leHROb2RlKCkpIGZuKG4pOyB9CglmdW5jdGlvbiBjb2xsZWN0KG5vZGUsIHNraXAsIHRleHRzKSB7IGVhY2gobm9kZSwgc2tpcCwgZnVuY3Rpb24gKG4pIHsgaWYgKG4ubm9kZVR5cGUgPT09IDMpIHsgaWYgKC9bQS1aYS16xILDgsOOyJjImsSDw6LDrsiZyJtdLy50ZXN0KG4ubm9kZVZhbHVlKSkgdGV4dHMucHVzaChuLm5vZGVWYWx1ZS50cmltKCkpOyB9IGVsc2UgaWYgKG4ubm9kZVR5cGUgPT09IDEpIFsidGl0bGUiLCAicGxhY2Vob2xkZXIiLCAiYXJpYS1sYWJlbCJdLmZvckVhY2goZnVuY3Rpb24gKGEpIHsgdmFyIHYgPSBuLmdldEF0dHJpYnV0ZShhKTsgaWYgKHYpIHRleHRzLnB1c2godi50cmltKCkpOyB9KTsgfSk7IHJldHVybiB0ZXh0czsgfQoJZnVuY3Rpb24gdHJhbnNsYXRlVHJlZShub2RlLCBza2lwKSB7IGVhY2gobm9kZSwgc2tpcCwgZnVuY3Rpb24gKG4pIHsgaWYgKG4ubm9kZVR5cGUgPT09IDMpIHsgdmFyIHYgPSBUKG4ubm9kZVZhbHVlKTsgaWYgKHYgIT09IG4ubm9kZVZhbHVlKSBuLm5vZGVWYWx1ZSA9IHY7IH0gZWxzZSBpZiAobi5ub2RlVHlwZSA9PT0gMSkgWyJ0aXRsZSIsICJwbGFjZWhvbGRlciIsICJhcmlhLWxhYmVsIl0uZm9yRWFjaChmdW5jdGlvbiAoYSkgeyB2YXIgdiA9IG4uZ2V0QXR0cmlidXRlKGEpOyBpZiAodikgbi5zZXRBdHRyaWJ1dGUoYSwgVCh2KSk7IH0pOyB9KTsgfQoJZnVuY3Rpb24gaCh0YWcsIGF0dHJzLCBraWRzKSB7CgkJdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpOwoJCWlmIChhdHRycykgZm9yICh2YXIgYSBpbiBhdHRycykgeyBpZiAoYSA9PT0gInRleHQiKSBlbC50ZXh0Q29udGVudCA9IFQoYXR0cnNbYV0pOyBlbHNlIGlmIChhID09PSAib24iKSBmb3IgKHZhciBldiBpbiBhdHRycy5vbikgZWwuYWRkRXZlbnRMaXN0ZW5lcihldiwgYXR0cnMub25bZXZdKTsgZWxzZSBpZiAoYXR0cnNbYV0gIT09IG51bGwgJiYgYXR0cnNbYV0gIT09IHVuZGVmaW5lZCkgZWwuc2V0QXR0cmlidXRlKGEsIC9eKHRpdGxlfHBsYWNlaG9sZGVyfGFyaWEtbGFiZWwpJC8udGVzdChhKSA\/IFQoYXR0cnNbYV0pIDogYXR0cnNbYV0pOyB9CgkJKGtpZHMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKGMpIHsgaWYgKGMpIGVsLmFwcGVuZENoaWxkKGMpOyB9KTsKCQlyZXR1cm4gZWw7Cgl9CglmdW5jdGlvbiB2YWwoa2V5LCBkZWYpIHsgdmFyIHQgPSBTLnZbUy50eXBlXSB8fCB7fTsgcmV0dXJuIHRba2V5XSAhPT0gdW5kZWZpbmVkID8gdFtrZXldIDogKGRlZiB8fCAiIik7IH0KCWZ1bmN0aW9uIHNldFZhbChrZXksIHYpIHsgKFMudltTLnR5cGVdID0gUy52W1MudHlwZV0gfHwge30pW2tleV0gPSB2OyBxdWV1ZSgpOyB9CgoJLy8gLS0tLS0tLS0tLSBwYXlsb2FkcyAtLS0tLS0tLS0tCglmdW5jdGlvbiBlc2MocykgeyByZXR1cm4gU3RyaW5nKHMpLnJlcGxhY2UoLyhbXFw7LDoiXSkvZywgIlxcJDEiKTsgfQoJZnVuY3Rpb24gdmMocykgeyByZXR1cm4gU3RyaW5nKHMpLnJlcGxhY2UoLyhbXFwsO10pL2csICJcXCQxIikucmVwbGFjZSgvXHI\/XG4vZywgIlxcbiIpOyB9IC8vIHZDYXJkIDMuMCB0ZXh0IHZhbHVlIGVzY2FwaW5nCglmdW5jdGlvbiBkaWdpdHMocykgeyByZXR1cm4gU3RyaW5nKHMpLnJlcGxhY2UoL1teXGQrXS9nLCAiIikucmVwbGFjZSgvXjAwLywgIisiKTsgfQoJZnVuY3Rpb24gcGF5bG9hZCgpIHsKCQl2YXIgdCA9IFMudHlwZTsKCQlpZiAodCA9PT0gInVybCIpIHsgdmFyIHUgPSB2YWwoInVybCIpLnRyaW0oKTsgaWYgKHUgJiYgIS9eW2Etel1bYS16MC05Ky4tXSo6L2kudGVzdCh1KSkgdSA9ICJodHRwczovLyIgKyB1OyByZXR1cm4gdTsgfQoJCWlmICh0ID09PSAidGV4dCIpIHJldHVybiB2YWwoInRleHQiKTsKCQlpZiAodCA9PT0gIndhIikgeyB2YXIgcCA9IGRpZ2l0cyh2YWwoInBob25lIikpLnJlcGxhY2UoL15cKy8sICIiKTsgaWYgKCFwKSByZXR1cm4gIiI7IHZhciBtID0gdmFsKCJtc2ciKTsgcmV0dXJuICJodHRwczovL3dhLm1lLyIgKyBwICsgKG0gPyAiP3RleHQ9IiArIGVuY29kZVVSSUNvbXBvbmVudChtKSA6ICIiKTsgfQoJCWlmICh0ID09PSAid2lmaSIpIHsgaWYgKCF2YWwoInNzaWQiKSkgcmV0dXJuICIiOyB2YXIgc2VjID0gdmFsKCJzZWMiLCAiV1BBIik7IHJldHVybiAiV0lGSTpUOiIgKyBzZWMgKyAiO1M6IiArIGVzYyh2YWwoInNzaWQiKSkgKyAiOyIgKyAoc2VjICE9PSAibm9wYXNzIiA\/ICJQOiIgKyBlc2ModmFsKCJwYXNzIikpICsgIjsiIDogIiIpICsgKHZhbCgiaGlkZGVuIikgPyAiSDp0cnVlOyIgOiAiIikgKyAiOyI7IH0KCQlpZiAodCA9PT0gInZjYXJkIikgewoJCQlpZiAoIXZhbCgiZmlyc3QiKSAmJiAhdmFsKCJsYXN0IikgJiYgIXZhbCgib3JnIikpIHJldHVybiAiIjsKCQkJdmFyIEwyID0gWyJCRUdJTjpWQ0FSRCIsICJWRVJTSU9OOjMuMCIsICJOOiIgKyB2Yyh2YWwoImxhc3QiKSkgKyAiOyIgKyB2Yyh2YWwoImZpcnN0IikpICsgIjs7OyIsICJGTjoiICsgdmMoKHZhbCgiZmlyc3QiKSArICIgIiArIHZhbCgibGFzdCIpKS50cmltKCkpXTsKCQkJaWYgKHZhbCgib3JnIikpIEwyLnB1c2goIk9SRzoiICsgdmModmFsKCJvcmciKSkpOyBpZiAodmFsKCJ0aXRsZSIpKSBMMi5wdXNoKCJUSVRMRToiICsgdmModmFsKCJ0aXRsZSIpKSk7CgkJCWlmICh2YWwoIm1vYmlsZSIpKSBMMi5wdXNoKCJURUw7VFlQRT1DRUxMOiIgKyBkaWdpdHModmFsKCJtb2JpbGUiKSkpOyBpZiAodmFsKCJ3b3JrIikpIEwyLnB1c2goIlRFTDtUWVBFPVdPUks6IiArIGRpZ2l0cyh2YWwoIndvcmsiKSkpOwoJCQlpZiAodmFsKCJlbWFpbCIpKSBMMi5wdXNoKCJFTUFJTDoiICsgdmFsKCJlbWFpbCIpKTsgaWYgKHZhbCgid2ViIikpIEwyLnB1c2goIlVSTDoiICsgdmFsKCJ3ZWIiKSk7CgkJCWlmICh2YWwoInN0cmVldCIpIHx8IHZhbCgiY2l0eSIpIHx8IHZhbCgiemlwIikgfHwgdmFsKCJjb3VudHJ5IikpIEwyLnB1c2goIkFEUjtUWVBFPVdPUks6OzsiICsgdmModmFsKCJzdHJlZXQiKSkgKyAiOyIgKyB2Yyh2YWwoImNpdHkiKSkgKyAiOzsiICsgdmModmFsKCJ6aXAiKSkgKyAiOyIgKyB2Yyh2YWwoImNvdW50cnkiKSkpOwoJCQlpZiAodmFsKCJub3RlIikpIEwyLnB1c2goIk5PVEU6IiArIHZjKHZhbCgibm90ZSIpKSk7CgkJCUwyLnB1c2goIkVORDpWQ0FSRCIpOyByZXR1cm4gTDIuam9pbigiXHJcbiIpOwoJCX0KCQlpZiAodCA9PT0gImVtYWlsIikgeyBpZiAoIXZhbCgidG8iKSkgcmV0dXJuICIiOyB2YXIgcSA9IFtdOyBpZiAodmFsKCJzdWJqZWN0IikpIHEucHVzaCgic3ViamVjdD0iICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbCgic3ViamVjdCIpKSk7IGlmICh2YWwoImJvZHkiKSkgcS5wdXNoKCJib2R5PSIgKyBlbmNvZGVVUklDb21wb25lbnQodmFsKCJib2R5IikpKTsgcmV0dXJuICJtYWlsdG86IiArIHZhbCgidG8iKSArIChxLmxlbmd0aCA\/ICI\/IiArIHEuam9pbigiJiIpIDogIiIpOyB9CgkJaWYgKHQgPT09ICJzbXMiKSB7IHZhciBzcCA9IGRpZ2l0cyh2YWwoInBob25lIikpOyByZXR1cm4gc3AgPyAiU01TVE86IiArIHNwICsgIjoiICsgdmFsKCJtc2ciKSA6ICIiOyB9CgkJaWYgKHQgPT09ICJ0ZWwiKSB7IHZhciB0cCA9IGRpZ2l0cyh2YWwoInBob25lIikpOyByZXR1cm4gdHAgPyAidGVsOiIgKyB0cCA6ICIiOyB9CgkJcmV0dXJuICIiOwoJfQoKCS8vIC0tLS0tLS0tLS0gUVIg4oaSIFNWRyAtLS0tLS0tLS0tCglmdW5jdGlvbiBmKG4pIHsgcmV0dXJuIE1hdGgucm91bmQobiAqIDEwMDApIC8gMTAwMDsgfQoJZnVuY3Rpb24gcnIoeCwgeSwgdywgaGd0LCB0bCwgdHIsIGJyLCBibCkgeyAvLyByb3VuZGVkIHJlY3RhbmdsZSBwYXRoLCBvbmUgcmFkaXVzIHBlciBjb3JuZXIKCQlyZXR1cm4gIk0iICsgZih4ICsgdGwpICsgIiAiICsgZih5KSArICJIIiArIGYoeCArIHcgLSB0cikgKyAodHIgPyAiQSIgKyBmKHRyKSArICIgIiArIGYodHIpICsgIiAwIDAgMSAiICsgZih4ICsgdykgKyAiICIgKyBmKHkgKyB0cikgOiAiIikgKyAiViIgKyBmKHkgKyBoZ3QgLSBicikgKyAoYnIgPyAiQSIgKyBmKGJyKSArICIgIiArIGYoYnIpICsgIiAwIDAgMSAiICsgZih4ICsgdyAtIGJyKSArICIgIiArIGYoeSArIGhndCkgOiAiIikgKyAiSCIgKyBmKHggKyBibCkgKyAoYmwgPyAiQSIgKyBmKGJsKSArICIgIiArIGYoYmwpICsgIiAwIDAgMSAiICsgZih4KSArICIgIiArIGYoeSArIGhndCAtIGJsKSA6ICIiKSArICJWIiArIGYoeSArIHRsKSArICh0bCA\/ICJBIiArIGYodGwpICsgIiAiICsgZih0bCkgKyAiIDAgMCAxICIgKyBmKHggKyB0bCkgKyAiICIgKyBmKHkpIDogIiIpICsgIloiOwoJfQoJZnVuY3Rpb24gc2hhcGUoc3R5bGUsIHgsIHksIHMsIHBhcnQpIHsgLy8gcGFydDogIm91dGVyIiAoN8OXNyksICJob2xlIiAoNcOXNSksICJleWUiICgzw5czKQoJCWlmIChzdHlsZSA9PT0gImNpcmNsZSIpIHsgdmFyIHIgPSBzIC8gMiwgY3ggPSB4ICsgciwgY3kgPSB5ICsgcjsgcmV0dXJuICJNIiArIGYoY3ggLSByKSArICIgIiArIGYoY3kpICsgImEiICsgZihyKSArICIgIiArIGYocikgKyAiIDAgMSAwICIgKyBmKDIgKiByKSArICIgMGEiICsgZihyKSArICIgIiArIGYocikgKyAiIDAgMSAwICIgKyBmKC0yICogcikgKyAiIDBaIjsgfQoJCXZhciBrID0gc3R5bGUgPT09ICJyb3VuZGVkIiA\/IChwYXJ0ID09PSAiZXllIiA\/IDAuOSA6IHBhcnQgPT09ICJob2xlIiA\/IDEuMiA6IDIpIDogc3R5bGUgPT09ICJsZWFmIiA\/IHMgKiAwLjQyIDogMDsKCQlpZiAoc3R5bGUgPT09ICJsZWFmIikgcmV0dXJuIHJyKHgsIHksIHMsIHMsIGssIDAsIGssIDApOwoJCXJldHVybiBycih4LCB5LCBzLCBzLCBrLCBrLCBrLCBrKTsKCX0KCWZ1bmN0aW9uIHFyU3ZnKHEsIGxvZ28pIHsKCQl2YXIgbiA9IHEuc2l6ZSwgbSA9IDQsIFQgPSBuICsgMiAqIG0sIGRhcmsgPSBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4geCA+PSAwICYmIHkgPj0gMCAmJiB4IDwgbiAmJiB5IDwgbiAmJiBxLm1vZHVsZXNbeV1beF07IH07CgkJdmFyIGluRmluZGVyID0gZnVuY3Rpb24gKHgsIHkpIHsgcmV0dXJuICh4IDwgNyAmJiB5IDwgNykgfHwgKHggPj0gbiAtIDcgJiYgeSA8IDcpIHx8ICh4IDwgNyAmJiB5ID49IG4gLSA3KTsgfTsKCQl2YXIgbHogPSAwLCBsMCA9IDA7IGlmIChsb2dvKSB7IGx6ID0gTWF0aC5yb3VuZChuICogUy5sb2dvU2l6ZSAvIDEwMCk7IGlmIChseiAlIDIgIT09IG4gJSAyKSBseisrOyBsMCA9IChuIC0gbHopIC8gMjsgfQoJCXZhciBpbkxvZ28gPSBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4gbG9nbyAmJiB4ID49IGwwIC0gMSAmJiB4IDwgbDAgKyBseiArIDEgJiYgeSA+PSBsMCAtIDEgJiYgeSA8IGwwICsgbHogKyAxOyB9OwoJCXZhciBkID0gIiIsIHgsIHk7CgkJZm9yICh5ID0gMDsgeSA8IG47IHkrKykgZm9yICh4ID0gMDsgeCA8IG47IHgrKykgewoJCQlpZiAoIWRhcmsoeCwgeSkgfHwgaW5GaW5kZXIoeCwgeSkgfHwgaW5Mb2dvKHgsIHkpKSBjb250aW51ZTsKCQkJdmFyIFggPSB4ICsgbSwgWSA9IHkgKyBtOwoJCQlpZiAoUy5kb3RzID09PSAic3F1YXJlIikgeyB2YXIgcnVuID0gMTsgd2hpbGUgKHggKyBydW4gPCBuICYmIGRhcmsoeCArIHJ1biwgeSkgJiYgIWluRmluZGVyKHggKyBydW4sIHkpICYmICFpbkxvZ28oeCArIHJ1biwgeSkpIHJ1bisrOyBkICs9ICJNIiArIFggKyAiICIgKyBZICsgImgiICsgcnVuICsgInYxaC0iICsgcnVuICsgIloiOyB4ICs9IHJ1biAtIDE7IH0KCQkJZWxzZSBpZiAoUy5kb3RzID09PSAiZG90cyIpIGQgKz0gIk0iICsgZihYICsgMC4wNCkgKyAiICIgKyBmKFkgKyAwLjUpICsgImEwLjQ2IDAuNDYgMCAxIDAgMC45MiAwYTAuNDYgMC40NiAwIDEgMCAtMC45MiAwWiI7CgkJCWVsc2UgaWYgKFMuZG90cyA9PT0gInJvdW5kZWQiKSBkICs9IHJyKFggKyAwLjA0LCBZICsgMC4wNCwgMC45MiwgMC45MiwgMC4zLCAwLjMsIDAuMywgMC4zKTsKCQkJZWxzZSBpZiAoUy5kb3RzID09PSAibGVhZiIpIGQgKz0gcnIoWCwgWSwgMSwgMSwgMC41LCAwLCAwLjUsIDApOwoJCQllbHNlIHsgLy8gZmx1aWQ6IHJvdW5kIG9ubHkgdGhlIGNvcm5lcnMgdGhhdCB0b3VjaCBub3RoaW5nCgkJCQl2YXIgTiA9IGRhcmsoeCwgeSAtIDEpICYmICFpbkZpbmRlcih4LCB5IC0gMSksIEUgPSBkYXJrKHggKyAxLCB5KSAmJiAhaW5GaW5kZXIoeCArIDEsIHkpLCBTbyA9IGRhcmsoeCwgeSArIDEpICYmICFpbkZpbmRlcih4LCB5ICsgMSksIFcgPSBkYXJrKHggLSAxLCB5KSAmJiAhaW5GaW5kZXIoeCAtIDEsIHkpLCByID0gMC41OwoJCQkJZCArPSBycihYLCBZLCAxLCAxLCAhTiAmJiAhVyA\/IHIgOiAwLCAhTiAmJiAhRSA\/IHIgOiAwLCAhU28gJiYgIUUgPyByIDogMCwgIVNvICYmICFXID8gciA6IDApOwoJCQl9CgkJfQoJCXZhciBleWUgPSBTLmV5ZSB8fCBTLmZnLCBjb3JuZXJzID0gIiIsIGV5ZXMgPSAiIjsKCQlbWzAsIDBdLCBbbiAtIDcsIDBdLCBbMCwgbiAtIDddXS5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7CgkJCXZhciBYID0gcFswXSArIG0sIFkgPSBwWzFdICsgbTsKCQkJY29ybmVycyArPSBzaGFwZShTLm91dGVyLCBYLCBZLCA3LCAib3V0ZXIiKSArIHNoYXBlKFMub3V0ZXIsIFggKyAxLCBZICsgMSwgNSwgImhvbGUiKTsKCQkJZXllcyArPSBzaGFwZShTLmlubmVyLCBYICsgMiwgWSArIDIsIDMsICJleWUiKTsKCQl9KTsKCQl2YXIgY3Jpc3AgPSBTLmRvdHMgPT09ICJzcXVhcmUiICYmIFMub3V0ZXIgPT09ICJzcXVhcmUiICYmIFMuaW5uZXIgPT09ICJzcXVhcmUiOwoJCXZhciBvdXQgPSAnPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgJyArIFQgKyAiICIgKyBUICsgJyIgd2lkdGg9IicgKyBUICogMTAgKyAnIiBoZWlnaHQ9IicgKyBUICogMTAgKyAnIiBzaGFwZS1yZW5kZXJpbmc9IicgKyAoY3Jpc3AgPyAiY3Jpc3BFZGdlcyIgOiAiZ2VvbWV0cmljUHJlY2lzaW9uIikgKyAnIj4nOwoJCWlmICghUy50cmFuc3BhcmVudCkgb3V0ICs9ICc8cmVjdCB3aWR0aD0iJyArIFQgKyAnIiBoZWlnaHQ9IicgKyBUICsgJyIgZmlsbD0iJyArIFMuYmcgKyAnIi8+JzsKCQlvdXQgKz0gJzxwYXRoIGZpbGw9IicgKyBTLmZnICsgJyIgZD0iJyArIGQgKyAnIi8+PHBhdGggZmlsbD0iJyArIGV5ZSArICciIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iJyArIGNvcm5lcnMgKyAnIi8+PHBhdGggZmlsbD0iJyArIGV5ZSArICciIGQ9IicgKyBleWVzICsgJyIvPic7CgkJaWYgKGxvZ28pIHsKCQkJdmFyIHBhZCA9IDAuNiwgbHggPSBsMCArIG0gLSBwYWQsIGxzID0gbHogKyAyICogcGFkOwoJCQlvdXQgKz0gJzxyZWN0IHg9IicgKyBmKGx4KSArICciIHk9IicgKyBmKGx4KSArICciIHdpZHRoPSInICsgZihscykgKyAnIiBoZWlnaHQ9IicgKyBmKGxzKSArICciIHJ4PSInICsgZihscyAqIDAuMTgpICsgJyIgZmlsbD0iJyArIChTLnRyYW5zcGFyZW50ID8gIiNmZmZmZmYiIDogUy5iZykgKyAnIi8+JzsKCQkJb3V0ICs9ICc8aW1hZ2UgeD0iJyArIGYobDAgKyBtKSArICciIHk9IicgKyBmKGwwICsgbSkgKyAnIiB3aWR0aD0iJyArIGx6ICsgJyIgaGVpZ2h0PSInICsgbHogKyAnIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IiBocmVmPSInICsgbG9nbyArICciIHhsaW5rOmhyZWY9IicgKyBsb2dvICsgJyIvPic7CgkJfQoJCXJldHVybiBvdXQgKyAiPC9zdmc+IjsKCX0KCWZ1bmN0aW9uIGVhblN2ZyhlKSB7CgkJdmFyIHcgPSBlLmJpdHMubGVuZ3RoLCBxeiA9IGUua2luZCA9PT0gMTMgPyAxMSA6IDcsIFQgPSB3ICsgcXogKyA3LCBIID0gNzAsIHgwID0gcXosIGJhcnMgPSAiIiwgaSA9IDA7CgkJdmFyIGd1YXJkID0gZnVuY3Rpb24gKGspIHsgcmV0dXJuIGsgPCAzIHx8IGsgPj0gdyAtIDMgfHwgKGsgPj0gKHcgLSA1KSAvIDIgJiYgayA8ICh3ICsgNSkgLyAyKTsgfTsKCQl3aGlsZSAoaSA8IHcpIHsgaWYgKGUuYml0c1tpXSA9PT0gIjEiKSB7IHZhciBqID0gaTsgd2hpbGUgKGogPCB3ICYmIGUuYml0c1tqXSA9PT0gIjEiICYmIGd1YXJkKGopID09PSBndWFyZChpKSkgaisrOyBiYXJzICs9ICc8cmVjdCB4PSInICsgKHgwICsgaSkgKyAnIiB5PSI0IiB3aWR0aD0iJyArIChqIC0gaSkgKyAnIiBoZWlnaHQ9IicgKyAoZ3VhcmQoaSkgPyBIICsgNSA6IEgpICsgJyIvPic7IGkgPSBqOyB9IGVsc2UgaSsrOyB9CgkJdmFyIHR4dCA9IGZ1bmN0aW9uIChzLCB4LCBhbmNob3IpIHsgcmV0dXJuICc8dGV4dCB4PSInICsgeCArICciIHk9IicgKyAoSCArIDE0KSArICciIGZvbnQtZmFtaWx5PSJcJ09DUiBCXCcsIENvbnNvbGFzLCBcJ0NvdXJpZXIgTmV3XCcsIG1vbm9zcGFjZSIgZm9udC1zaXplPSIxMCIgdGV4dC1hbmNob3I9IicgKyAoYW5jaG9yIHx8ICJtaWRkbGUiKSArICciIGxldHRlci1zcGFjaW5nPSIxLjYiPicgKyBzICsgIjwvdGV4dD4iOyB9OwoJCXZhciBkID0gZS5kaWdpdHMsIGxhYmVscyA9IGUua2luZCA9PT0gMTMgPyB0eHQoZFswXSwgeDAgLSA0LCAiZW5kIikgKyB0eHQoZC5zbGljZSgxLCA3KSwgeDAgKyAzICsgMjEpICsgdHh0KGQuc2xpY2UoNyksIHgwICsgNTAgKyAyMSkgOiB0eHQoZC5zbGljZSgwLCA0KSwgeDAgKyAzICsgMTQpICsgdHh0KGQuc2xpY2UoNCksIHgwICsgMzYgKyAxNCk7CgkJcmV0dXJuICc8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwICcgKyBUICsgIiAiICsgKEggKyAyMCkgKyAnIiB3aWR0aD0iJyArIFQgKiA2ICsgJyIgaGVpZ2h0PSInICsgKEggKyAyMCkgKiA2ICsgJyIgc2hhcGUtcmVuZGVyaW5nPSJjcmlzcEVkZ2VzIj4nICsgKFMudHJhbnNwYXJlbnQgPyAiIiA6ICc8cmVjdCB3aWR0aD0iJyArIFQgKyAnIiBoZWlnaHQ9IicgKyAoSCArIDIwKSArICciIGZpbGw9IicgKyBTLmJnICsgJyIvPicpICsgJzxnIGZpbGw9IicgKyBTLmZnICsgJyI+JyArIGJhcnMgKyBsYWJlbHMgKyAiPC9nPjwvc3ZnPiI7Cgl9CgoJLy8gLS0tLS0tLS0tLSBVSSAtLS0tLS0tLS0tCgl2YXIgdHlwZXNCYXIgPSBoKCJkaXYiLCB7ICJjbGFzcyI6ICJmdnFyX190eXBlcyIsIHJvbGU6ICJ0YWJsaXN0IiwgImFyaWEtbGFiZWwiOiAiVGlwdWwgY29kdWx1aSIgfSk7Cgl2YXIgZmllbGRzID0gaCgiZGl2IiwgeyAiY2xhc3MiOiAiZnZxcl9fZmllbGRzIiB9KTsKCXZhciBkZXNpZ24gPSBoKCJkaXYiLCB7ICJjbGFzcyI6ICJmdnFyX19kZXNpZ24iIH0pOwoJdmFyIHByZXZpZXcgPSBoKCJkaXYiLCB7ICJjbGFzcyI6ICJmdnFyX19wcmV2aWV3IiwgImFyaWEtbGl2ZSI6ICJwb2xpdGUiIH0pOwoJdmFyIGluZm8gPSBoKCJwIiwgeyAiY2xhc3MiOiAiZnZxcl9faW5mbyIgfSk7Cgl2YXIgZGwgPSBoKCJkaXYiLCB7ICJjbGFzcyI6ICJmdnFyX19kbCIgfSk7Cgl2YXIgbm90ZSA9IGgoInAiLCB7ICJjbGFzcyI6ICJmdnFyX19ub3RlIiB9KTsKCVRZUEVTLmZvckVhY2goZnVuY3Rpb24gKHQpIHsgdHlwZXNCYXIuYXBwZW5kQ2hpbGQoaCgiYnV0dG9uIiwgeyB0eXBlOiAiYnV0dG9uIiwgcm9sZTogInRhYiIsICJkYXRhLXQiOiB0WzBdLCB0ZXh0OiB0WzFdLCBvbjogeyBjbGljazogZnVuY3Rpb24gKCkgeyBTLnR5cGUgPSB0WzBdOyBkcmF3RmllbGRzKCk7IHF1ZXVlKCk7IH0gfSB9KSk7IH0pOwoKCWZ1bmN0aW9uIGRyYXdGaWVsZHMoKSB7CgkJZmllbGRzLmlubmVySFRNTCA9ICIiOwoJCVtdLmZvckVhY2guY2FsbCh0eXBlc0Jhci5jaGlsZHJlbiwgZnVuY3Rpb24gKGIpIHsgdmFyIG9uID0gYi5nZXRBdHRyaWJ1dGUoImRhdGEtdCIpID09PSBTLnR5cGU7IGIuc2V0QXR0cmlidXRlKCJhcmlhLXNlbGVjdGVkIiwgb24gPyAidHJ1ZSIgOiAiZmFsc2UiKTsgYi5jbGFzc0xpc3QudG9nZ2xlKCJpcy1vbiIsIG9uKTsgfSk7CgkJRklFTERTW1MudHlwZV0uZm9yRWFjaChmdW5jdGlvbiAoZmQpIHsKCQkJdmFyIGlkID0gImZ2cXItIiArIFMudHlwZSArICItIiArIGZkWzBdLCBraW5kID0gZmRbM10sIGlucHV0OwoJCQlpZiAoa2luZCA9PT0gImFyZWEiKSBpbnB1dCA9IGgoInRleHRhcmVhIiwgeyBpZDogaWQsIHJvd3M6IDMsIHBsYWNlaG9sZGVyOiBmZFsyXSB9KTsKCQkJZWxzZSBpZiAoa2luZCA9PT0gImNoZWNrIikgeyBpbnB1dCA9IGgoImlucHV0IiwgeyBpZDogaWQsIHR5cGU6ICJjaGVja2JveCIgfSk7IGlucHV0LmNoZWNrZWQgPSAhIXZhbChmZFswXSk7IGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsgc2V0VmFsKGZkWzBdLCBpbnB1dC5jaGVja2VkID8gMSA6IDApOyB9KTsgZmllbGRzLmFwcGVuZENoaWxkKGgoImxhYmVsIiwgeyAiY2xhc3MiOiAiZnZxcl9fY2hlY2siLCAiZm9yIjogaWQgfSwgW2lucHV0LCBoKCJzcGFuIiwgeyB0ZXh0OiBmZFsxXSB9KV0pKTsgcmV0dXJuOyB9CgkJCWVsc2UgaWYgKGtpbmQuaW5kZXhPZigic2VsOiIpID09PSAwKSB7IGlucHV0ID0gaCgic2VsZWN0IiwgeyBpZDogaWQgfSk7IGtpbmQuc2xpY2UoNCkuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7IHZhciBwID0gby5zcGxpdCgifCIpOyBpbnB1dC5hcHBlbmRDaGlsZChoKCJvcHRpb24iLCB7IHZhbHVlOiBwWzBdLCB0ZXh0OiBwWzFdIH0pKTsgfSk7IGlucHV0LnZhbHVlID0gdmFsKGZkWzBdLCAiV1BBIik7IGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsgc2V0VmFsKGZkWzBdLCBpbnB1dC52YWx1ZSk7IH0pOyBmaWVsZHMuYXBwZW5kQ2hpbGQoaCgibGFiZWwiLCB7ICJjbGFzcyI6ICJmdnFyX19maWVsZCIsICJmb3IiOiBpZCB9LCBbaCgic3BhbiIsIHsgdGV4dDogZmRbMV0gfSksIGlucHV0XSkpOyByZXR1cm47IH0KCQkJZWxzZSBpbnB1dCA9IGgoImlucHV0IiwgeyBpZDogaWQsIHR5cGU6IGtpbmQgPT09ICJ1cmwiID8gInVybCIgOiBraW5kID09PSAidGVsIiA\/ICJ0ZWwiIDoga2luZCA9PT0gImVtYWlsIiA\/ICJlbWFpbCIgOiAidGV4dCIsIHBsYWNlaG9sZGVyOiBmZFsyXSwgaW5wdXRtb2RlOiBraW5kID09PSAidGVsIiA\/ICJ0ZWwiIDogUy50eXBlID09PSAiZWFuIiA\/ICJudW1lcmljIiA6IG51bGwsIGF1dG9jb21wbGV0ZTogIm9mZiIgfSk7CgkJCWlucHV0LnZhbHVlID0gdmFsKGZkWzBdKTsKCQkJaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCBmdW5jdGlvbiAoKSB7IHNldFZhbChmZFswXSwgaW5wdXQudmFsdWUpOyB9KTsKCQkJdmFyIHdyYXAgPSBoKCJsYWJlbCIsIHsgImNsYXNzIjogImZ2cXJfX2ZpZWxkIiwgImZvciI6IGlkIH0sIFtoKCJzcGFuIiwgeyB0ZXh0OiBmZFsxXSB9KSwgaW5wdXRdKTsKCQkJZmllbGRzLmFwcGVuZENoaWxkKHdyYXApOwoJCQlpZiAoUy50eXBlID09PSAidXJsIiAmJiBTSE9SVCkgewoJCQkJdmFyIG1zZyA9IGgoInNwYW4iLCB7ICJjbGFzcyI6ICJmdnFyX19zaG9ydC1tc2ciIH0pOwoJCQkJdmFyIGJ0biA9IGgoImJ1dHRvbiIsIHsgdHlwZTogImJ1dHRvbiIsICJjbGFzcyI6ICJmdnFyX19zaG9ydCIsIHRleHQ6ICJTY3VydGVhesSDIGxpbmt1bCIsIG9uOiB7IGNsaWNrOiBmdW5jdGlvbiAoKSB7IHNob3J0ZW4oYnRuLCBtc2cpOyB9IH0gfSk7CgkJCQlmaWVsZHMuYXBwZW5kQ2hpbGQoaCgiZGl2IiwgeyAiY2xhc3MiOiAiZnZxcl9fc2hvcnQtcm93IiB9LCBbYnRuLCBtc2ddKSk7CgkJCX0KCQl9KTsKCQlpZiAoUy50eXBlID09PSAidmNhcmQiKSBkbC5zZXRBdHRyaWJ1dGUoImRhdGEtdmNmIiwgIjEiKTsgZWxzZSBkbC5yZW1vdmVBdHRyaWJ1dGUoImRhdGEtdmNmIik7Cgl9CglmdW5jdGlvbiBzaG9ydGVuKGJ0biwgbXNnKSB7CgkJdmFyIHUgPSBwYXlsb2FkKCk7IGlmICghdSkgeyBtc2cudGV4dENvbnRlbnQgPSBUKCJTY3JpZSBtYWkgw65udMOiaSBsaW5rdWwuIik7IHJldHVybjsgfQoJCWJ0bi5kaXNhYmxlZCA9IHRydWU7IG1zZy50ZXh0Q29udGVudCA9IFQoIlNlIHNjdXJ0ZWF6xIPigKYiKTsKCQlmZXRjaChTSE9SVCwgeyBtZXRob2Q6ICJQT1NUIiwgaGVhZGVyczogeyAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iIH0sIGNyZWRlbnRpYWxzOiAic2FtZS1vcmlnaW4iLCBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHVybDogdSB9KSB9KQoJCQkudGhlbihmdW5jdGlvbiAocikgeyByZXR1cm4gci5qc29uKCkudGhlbihmdW5jdGlvbiAoaikgeyByZXR1cm4geyBvazogci5vaywgc3RhdHVzOiByLnN0YXR1cywgajogaiB9OyB9KTsgfSkKCQkJLnRoZW4oZnVuY3Rpb24gKHJlcykgewoJCQkJYnRuLmRpc2FibGVkID0gZmFsc2U7CgkJCQlpZiAocmVzLm9rICYmIHJlcy5qICYmIHJlcy5qLnNob3J0KSB7IHNldFZhbCgidXJsIiwgcmVzLmouc2hvcnQpOyBkcmF3RmllbGRzKCk7IGZpZWxkcy5xdWVyeVNlbGVjdG9yKCIuZnZxcl9fc2hvcnQtbXNnIikudGV4dENvbnRlbnQgPSBUKCJMaW5rIHNjdXJ0IGNyZWF0IOKAlCBjb2R1bCBRUiBhIGRldmVuaXQgbWFpIHNpbXBsdS4iKTsgfQoJCQkJZWxzZSBtc2cudGV4dENvbnRlbnQgPSByZXMuc3RhdHVzID09PSA0MDQgPyBUKCJTY3VydGFyZWEgbGlua3VyaWxvciBudSBlc3RlIGFjdGl2xIMgw65uY8SDLiIpIDogKHJlcy5qICYmIHJlcy5qLm1lc3NhZ2UpIHx8IFQoIk51IHMtYSBwdXR1dCBzY3VydGEgbGlua3VsLiIpOwoJCQl9KQoJCQkuY2F0Y2goZnVuY3Rpb24gKCkgeyBidG4uZGlzYWJsZWQgPSBmYWxzZTsgbXNnLnRleHRDb250ZW50ID0gVCgiU2N1cnRhcmVhIGxpbmt1cmlsb3IgbnUgZXN0ZSBhY3RpdsSDIMOubmPEgy4iKTsgfSk7Cgl9CglmdW5jdGlvbiBjaGlwcyhsYWJlbCwgbGlzdCwga2V5LCBjbHMpIHsKCQl2YXIgcm93ID0gaCgiZGl2IiwgeyAiY2xhc3MiOiAiZnZxcl9fY2hpcHMiICsgKGNscyA\/ICIgIiArIGNscyA6ICIiKSwgcm9sZTogInJhZGlvZ3JvdXAiLCAiYXJpYS1sYWJlbCI6IGxhYmVsIH0pOwoJCWxpc3QuZm9yRWFjaChmdW5jdGlvbiAobykgeyB2YXIgYiA9IGgoImJ1dHRvbiIsIHsgdHlwZTogImJ1dHRvbiIsIHJvbGU6ICJyYWRpbyIsICJkYXRhLXYiOiBvWzBdLCAiY2xhc3MiOiAiZnZxcl9fY2hpcCBmdnFyX19jaGlwLS0iICsga2V5ICsgIi0iICsgb1swXSwgImFyaWEtY2hlY2tlZCI6IFNba2V5XSA9PT0gb1swXSA\/ICJ0cnVlIiA6ICJmYWxzZSIsIG9uOiB7IGNsaWNrOiBmdW5jdGlvbiAoKSB7IFNba2V5XSA9IG9bMF07IGRyYXdEZXNpZ24oKTsgcXVldWUoKTsgfSB9IH0sIFtoKCJpIiwgeyAiYXJpYS1oaWRkZW4iOiAidHJ1ZSIgfSksIGgoInNwYW4iLCB7IHRleHQ6IG9bMV0gfSldKTsgcm93LmFwcGVuZENoaWxkKGIpOyB9KTsKCQlyZXR1cm4gaCgiZGl2IiwgeyAiY2xhc3MiOiAiZnZxcl9fZ3JvdXAiIH0sIFtoKCJwIiwgeyAiY2xhc3MiOiAiZnZxcl9fbGFiZWwiLCB0ZXh0OiBsYWJlbCB9KSwgcm93XSk7Cgl9CglmdW5jdGlvbiBjb2xvdXIobGFiZWwsIGtleSkgewoJCXZhciBpbnAgPSBoKCJpbnB1dCIsIHsgdHlwZTogImNvbG9yIiwgdmFsdWU6IFNba2V5XSB8fCBTLmZnLCAiYXJpYS1sYWJlbCI6IGxhYmVsIH0pOyBpbnAuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCBmdW5jdGlvbiAoKSB7IFNba2V5XSA9IGlucC52YWx1ZTsgcXVldWUoKTsgfSk7CgkJdmFyIHN3ID0gaCgiZGl2IiwgeyAiY2xhc3MiOiAiZnZxcl9fc3dhdGNoZXMiIH0pOyBpZiAoa2V5ICE9PSAiYmciKSBTV0FUQ0guZm9yRWFjaChmdW5jdGlvbiAoYykgeyBzdy5hcHBlbmRDaGlsZChoKCJidXR0b24iLCB7IHR5cGU6ICJidXR0b24iLCAiY2xhc3MiOiAiZnZxcl9fc3ciLCBzdHlsZTogIi0tYzoiICsgYywgImFyaWEtbGFiZWwiOiBjLCBvbjogeyBjbGljazogZnVuY3Rpb24gKCkgeyBTW2tleV0gPSBjOyBpbnAudmFsdWUgPSBjOyBxdWV1ZSgpOyB9IH0gfSkpOyB9KTsKCQlyZXR1cm4gaCgiZGl2IiwgeyAiY2xhc3MiOiAiZnZxcl9fZ3JvdXAgZnZxcl9fZ3JvdXAtLWNvbG91ciIgfSwgW2goInAiLCB7ICJjbGFzcyI6ICJmdnFyX19sYWJlbCIsIHRleHQ6IGxhYmVsIH0pLCBoKCJkaXYiLCB7ICJjbGFzcyI6ICJmdnFyX19jb2xvdXIiIH0sIFtpbnAsIHN3XSldKTsKCX0KCWZ1bmN0aW9uIGRyYXdEZXNpZ24oKSB7CgkJZGVzaWduLmlubmVySFRNTCA9ICIiOwoJCWlmIChTLnR5cGUgIT09ICJlYW4iKSB7IGRlc2lnbi5hcHBlbmRDaGlsZChjaGlwcygiUHVuY3RlbGUiLCBET1RTLCAiZG90cyIpKTsgZGVzaWduLmFwcGVuZENoaWxkKGNoaXBzKCJDb2zIm3VyaWxlIChjaGVuYXJ1bCkiLCBPVVRFUiwgIm91dGVyIikpOyBkZXNpZ24uYXBwZW5kQ2hpbGQoY2hpcHMoIkNvbMibdXJpbGUgKGNlbnRydWwpIiwgSU5ORVIsICJpbm5lciIpKTsgfQoJCWRlc2lnbi5hcHBlbmRDaGlsZChjb2xvdXIoUy50eXBlID09PSAiZWFuIiA\/ICJDdWxvYXJlYSBiYXJlbG9yIiA6ICJDdWxvYXJlYSBwdW5jdGVsb3IiLCAiZmciKSk7CgkJaWYgKFMudHlwZSAhPT0gImVhbiIpIGRlc2lnbi5hcHBlbmRDaGlsZChjb2xvdXIoIkN1bG9hcmVhIGNvbMibdXJpbG9yIiwgImV5ZSIpKTsKCQl2YXIgYmdjID0gY29sb3VyKCJGdW5kYWx1bCIsICJiZyIpLCB0ciA9IGgoImlucHV0IiwgeyB0eXBlOiAiY2hlY2tib3giLCBpZDogImZ2cXItdHIiIH0pOyB0ci5jaGVja2VkID0gISFTLnRyYW5zcGFyZW50OyB0ci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7IFMudHJhbnNwYXJlbnQgPSB0ci5jaGVja2VkOyBxdWV1ZSgpOyB9KTsKCQliZ2MuYXBwZW5kQ2hpbGQoaCgibGFiZWwiLCB7ICJjbGFzcyI6ICJmdnFyX19jaGVjayIsICJmb3IiOiAiZnZxci10ciIgfSwgW3RyLCBoKCJzcGFuIiwgeyB0ZXh0OiAiRnVuZGFsIHRyYW5zcGFyZW50IiB9KV0pKTsgZGVzaWduLmFwcGVuZENoaWxkKGJnYyk7CgkJaWYgKFMudHlwZSAhPT0gImVhbiIpIHsKCQkJdmFyIGZpbGUgPSBoKCJpbnB1dCIsIHsgdHlwZTogImZpbGUiLCBhY2NlcHQ6ICJpbWFnZS9wbmcsaW1hZ2UvanBlZyxpbWFnZS93ZWJwLGltYWdlL3N2Zyt4bWwiLCAiY2xhc3MiOiAiZnZxcl9fZmlsZSIsIGlkOiAiZnZxci1sb2dvIiB9KTsKCQkJZmlsZS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCBmdW5jdGlvbiAoKSB7IHZhciBmbCA9IGZpbGUuZmlsZXMgJiYgZmlsZS5maWxlc1swXTsgaWYgKCFmbCkgcmV0dXJuOyBsb2FkTG9nbyhmbCk7IH0pOwoJCQl2YXIgcm0gPSBoKCJidXR0b24iLCB7IHR5cGU6ICJidXR0b24iLCAiY2xhc3MiOiAiZnZxcl9fbGluayIsIHRleHQ6ICJGxINyxIMgbG9nbyIsIG9uOiB7IGNsaWNrOiBmdW5jdGlvbiAoKSB7IFMubG9nbyA9ICIiOyBmaWxlLnZhbHVlID0gIiI7IGRyYXdEZXNpZ24oKTsgcXVldWUoKTsgfSB9IH0pOwoJCQl2YXIgc2l6ZSA9IGgoImlucHV0IiwgeyB0eXBlOiAicmFuZ2UiLCBtaW46IDEyLCBtYXg6IDI2LCBzdGVwOiAxLCB2YWx1ZTogUy5sb2dvU2l6ZSwgImFyaWEtbGFiZWwiOiAiTcSDcmltZWEgbG9nb3VsdWkiIH0pOyBzaXplLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgZnVuY3Rpb24gKCkgeyBTLmxvZ29TaXplID0gK3NpemUudmFsdWU7IHF1ZXVlKCk7IH0pOwoJCQlkZXNpZ24uYXBwZW5kQ2hpbGQoaCgiZGl2IiwgeyAiY2xhc3MiOiAiZnZxcl9fZ3JvdXAiIH0sIFtoKCJwIiwgeyAiY2xhc3MiOiAiZnZxcl9fbGFiZWwiLCB0ZXh0OiAiTG9nbyDDrm4gbWlqbG9jIiB9KSwgaCgiZGl2IiwgeyAiY2xhc3MiOiAiZnZxcl9fbG9nbyIgfSwgW2goImxhYmVsIiwgeyAiY2xhc3MiOiAiZnZxcl9fdXBsb2FkIiwgImZvciI6ICJmdnFyLWxvZ28iLCB0ZXh0OiBTLmxvZ28gPyAiU2NoaW1ixIMgbG9nb3VsIiA6ICJBbGVnZSBsb2dvdWwiIH0pLCBmaWxlLCBTLmxvZ28gPyBybSA6IG51bGxdKSwgUy5sb2dvID8gaCgibGFiZWwiLCB7ICJjbGFzcyI6ICJmdnFyX19yYW5nZSIgfSwgW2goInNwYW4iLCB7IHRleHQ6ICJNxINyaW1lIiB9KSwgc2l6ZV0pIDogbnVsbCwgaCgicCIsIHsgImNsYXNzIjogImZ2cXJfX2hpbnQiLCB0ZXh0OiAiQ3UgbG9nbywgY29kdWwgZm9sb3NlyJl0ZSBjb3JlY8ibaWEgbWF4aW3EgyAoMzAgJSksIGNhIHPEgyBzZSBzY2FuZXplIMiZaSBjdSBtaWpsb2N1bCBhY29wZXJpdC4iIH0pXSkpOwoJCQl2YXIgZWNsID0gaCgic2VsZWN0IiwgeyAiYXJpYS1sYWJlbCI6ICJDb3JlY8ibaWEgZXJvcmlsb3IiIH0pOyBbWyJhdXRvIiwgIkF1dG9tYXTEgyJdLCBbIkwiLCAiTCDCtyA3ICUiXSwgWyJNIiwgIk0gwrcgMTUgJSJdLCBbIlEiLCAiUSDCtyAyNSAlIl0sIFsiSCIsICJIIMK3IDMwICUiXV0uZm9yRWFjaChmdW5jdGlvbiAobykgeyBlY2wuYXBwZW5kQ2hpbGQoaCgib3B0aW9uIiwgeyB2YWx1ZTogb1swXSwgdGV4dDogb1sxXSB9KSk7IH0pOyBlY2wudmFsdWUgPSBTLmVjbDsgZWNsLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGZ1bmN0aW9uICgpIHsgUy5lY2wgPSBlY2wudmFsdWU7IHF1ZXVlKCk7IH0pOwoJCQlkZXNpZ24uYXBwZW5kQ2hpbGQoaCgiZGl2IiwgeyAiY2xhc3MiOiAiZnZxcl9fZ3JvdXAgZnZxcl9fZ3JvdXAtLXJvdyIgfSwgW2goInAiLCB7ICJjbGFzcyI6ICJmdnFyX19sYWJlbCIsIHRleHQ6ICJDb3JlY8ibaWEgZXJvcmlsb3IiIH0pLCBlY2xdKSk7CgkJfQoJCXZhciBweCA9IGgoInNlbGVjdCIsIHsgImFyaWEtbGFiZWwiOiAiTcSDcmltZWEgUE5HIiB9KTsgW1s1MTIsICI1MTIgcHgiXSwgWzEwMjQsICIxMDI0IHB4Il0sIFsyMDQ4LCAiMjA0OCBweCJdLCBbNDA5NiwgIjQwOTYgcHggKHByaW50IG1hcmUpIl1dLmZvckVhY2goZnVuY3Rpb24gKG8pIHsgcHguYXBwZW5kQ2hpbGQoaCgib3B0aW9uIiwgeyB2YWx1ZTogb1swXSwgdGV4dDogb1sxXSB9KSk7IH0pOyBweC52YWx1ZSA9IFN0cmluZyhTLnB4KTsgcHguYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgZnVuY3Rpb24gKCkgeyBTLnB4ID0gK3B4LnZhbHVlOyBzYXZlKCk7IH0pOwoJCWRlc2lnbi5hcHBlbmRDaGlsZChoKCJkaXYiLCB7ICJjbGFzcyI6ICJmdnFyX19ncm91cCBmdnFyX19ncm91cC0tcm93IiB9LCBbaCgicCIsIHsgImNsYXNzIjogImZ2cXJfX2xhYmVsIiwgdGV4dDogIk3Eg3JpbWVhIFBORyIgfSksIHB4XSkpOwoJfQoJZnVuY3Rpb24gbG9hZExvZ28oZmlsZSkgewoJCXZhciByZCA9IG5ldyBGaWxlUmVhZGVyKCk7CgkJcmQub25sb2FkID0gZnVuY3Rpb24gKCkgewoJCQl2YXIgc3JjID0gU3RyaW5nKHJkLnJlc3VsdCk7CgkJCWlmICgvXmRhdGE6aW1hZ2VcL3N2Zy8udGVzdChzcmMpKSB7IFMubG9nbyA9IHNyYzsgZHJhd0Rlc2lnbigpOyBxdWV1ZSgpOyByZXR1cm47IH0KCQkJdmFyIGltZyA9IG5ldyBJbWFnZSgpOyBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkgeyB2YXIgayA9IE1hdGgubWluKDEsIDQ4MCAvIE1hdGgubWF4KGltZy53aWR0aCwgaW1nLmhlaWdodCkpLCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7IGMud2lkdGggPSBNYXRoLnJvdW5kKGltZy53aWR0aCAqIGspOyBjLmhlaWdodCA9IE1hdGgucm91bmQoaW1nLmhlaWdodCAqIGspOyBjLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKGltZywgMCwgMCwgYy53aWR0aCwgYy5oZWlnaHQpOyBTLmxvZ28gPSBjLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7IGRyYXdEZXNpZ24oKTsgcXVldWUoKTsgfTsgaW1nLnNyYyA9IHNyYzsKCQl9OwoJCXJkLnJlYWRBc0RhdGFVUkwoZmlsZSk7Cgl9CgoJdmFyIGN1cnJlbnQgPSAiIiwgcGVuZGluZyA9IGZhbHNlOwoJZnVuY3Rpb24gcXVldWUoKSB7IHNhdmUoKTsgaWYgKHBlbmRpbmcpIHJldHVybjsgcGVuZGluZyA9IHRydWU7IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZW5kZXIpOyB9CglmdW5jdGlvbiByZW5kZXIoKSB7CgkJcGVuZGluZyA9IGZhbHNlOyBub3RlLnRleHRDb250ZW50ID0gIiI7CgkJdHJ5IHsKCQkJaWYgKFMudHlwZSA9PT0gImVhbiIpIHsKCQkJCXZhciBjb2RlID0gdmFsKCJjb2RlIik7IGlmICghY29kZS5yZXBsYWNlKC9cRC9nLCAiIikpIHsgZW1wdHkoIlNjcmllIGNpZnJlbGUgY29kdWx1aSBFQU4uIik7IHJldHVybjsgfQoJCQkJdmFyIGUgPSBGVkVBTi5lbmNvZGUoY29kZSk7IGN1cnJlbnQgPSBlYW5TdmcoZSk7IHByZXZpZXcuaW5uZXJIVE1MID0gY3VycmVudDsgaW5mby50ZXh0Q29udGVudCA9ICJFQU4tIiArIGUua2luZCArICIgwrcgIiArIGUuZGlnaXRzICsgIiDCtyAiICsgVCgiY2lmcmEgZGUgY29udHJvbCIpICsgIiAiICsgZS5kaWdpdHMuc2xpY2UoLTEpOwoJCQl9IGVsc2UgewoJCQkJdmFyIHRleHQgPSBwYXlsb2FkKCk7IGlmICghdGV4dCkgeyBlbXB0eSgiQ29tcGxldGVhesSDIGPDom1wdXJpbGUgY2Egc8SDIHZlemkgY29kdWwuIik7IHJldHVybjsgfQoJCQkJdmFyIGVjbCA9IFMubG9nbyA\/ICJIIiA6IFMuZWNsID09PSAiYXV0byIgPyAiTSIgOiBTLmVjbDsKCQkJCXZhciBxID0gRlZRUi5lbmNvZGUodGV4dCwgeyBlY2w6IGVjbCwgYm9vc3Q6IFMuZWNsID09PSAiYXV0byIgfHwgISFTLmxvZ28gfSk7CgkJCQljdXJyZW50ID0gcXJTdmcocSwgUy5sb2dvKTsgcHJldmlldy5pbm5lckhUTUwgPSBjdXJyZW50OwoJCQkJaW5mby50ZXh0Q29udGVudCA9IFQoIlZlcnNpdW5lYSIpICsgIiAiICsgcS52ZXJzaW9uICsgIiDCtyAiICsgcS5zaXplICsgIsOXIiArIHEuc2l6ZSArICIgIiArIFQoIm1vZHVsZSIpICsgIiDCtyAiICsgVCgiY29yZWPIm2llIikgKyAiICIgKyBxLmVjbCArICIgwrcgIiArIEZWUVIudXRmOCh0ZXh0KS5sZW5ndGggKyAiICIgKyBUKCJvY3RlyJtpIik7CgkJCQl2YXIgbm90ZXMgPSBbXTsKCQkJCWlmIChxLnZlcnNpb24gPiAxMCkgbm90ZXMucHVzaChUKCJDb2R1bCBlIGRlbnM6IHVuIGxpbmsgc2N1cnQgc2F1IG1haSBwdcibaW4gdGV4dCDDrmwgZmFjZSBtYWkgdciZb3IgZGUgc2NhbmF0LiIpKTsKCQkJCWlmIChTLmRvdHMgPT09ICJkb3RzIiB8fCBTLmRvdHMgPT09ICJsZWFmIikgbm90ZXMucHVzaChUKCJTdGlsdWwgYWxlcyBlIGRlY29yYXRpdjogdGVzdGVhesSDIGNvZHVsIGN1IHRlbGVmb251bCDDrm5haW50ZSBkZSBwcmludC4iKSk7CgkJCQl2YXIgY3cgPSBjb250cmFzdChTLmZnLCBTLnRyYW5zcGFyZW50ID8gIiNmZmZmZmYiIDogUy5iZyksIGNlID0gY29udHJhc3QoUy5leWUgfHwgUy5mZywgUy50cmFuc3BhcmVudCA\/ICIjZmZmZmZmIiA6IFMuYmcpOwoJCQkJaWYgKGN3LmludmVydGVkIHx8IGNlLmludmVydGVkKSBub3Rlcy5wdXNoKFQoIkN1bG9yaWxlIHN1bnQgaW52ZXJzYXRlIChwdW5jdGUgZGVzY2hpc2UgcGUgZnVuZGFsIMOubmNoaXMpOiB1bmVsZSB0ZWxlZm9hbmUgbnUgY2l0ZXNjIGFzdGZlbCBkZSBjb2R1cmkuIikpOwoJCQkJZWxzZSBpZiAoY3cucmF0aW8gPCA0IHx8IGNlLnJhdGlvIDwgNCkgbm90ZXMucHVzaChUKCJDb250cmFzdCBtaWMgw65udHJlIHB1bmN0ZSDImWkgZnVuZGFsOiBhbGVnZSBwdW5jdGUgbWFpIMOubmNoaXNlIHNhdSB1biBmdW5kYWwgbWFpIGRlc2NoaXMuIikpOwoJCQkJbm90ZS50ZXh0Q29udGVudCA9IG5vdGVzLmpvaW4oIiAiKTsKCQkJfQoJCQlyb290LmNsYXNzTGlzdC5yZW1vdmUoImlzLWVtcHR5Iik7CgkJfSBjYXRjaCAoZXJyKSB7IGVtcHR5KGVyci5tZXNzYWdlKTsgfQoJfQoJZnVuY3Rpb24gbHVtKGhleCkgeyB2YXIgbiA9IHBhcnNlSW50KFN0cmluZyhoZXgpLnJlcGxhY2UoIiMiLCAiIiksIDE2KSwgYyA9IFtuID4+IDE2ICYgMjU1LCBuID4+IDggJiAyNTUsIG4gJiAyNTVdLm1hcChmdW5jdGlvbiAodikgeyB2IC89IDI1NTsgcmV0dXJuIHYgPiAwLjAzOTI4ID8gTWF0aC5wb3coKHYgKyAwLjA1NSkgLyAxLjA1NSwgMi40KSA6IHYgLyAxMi45MjsgfSk7IHJldHVybiAwLjIxMjYgKiBjWzBdICsgMC43MTUyICogY1sxXSArIDAuMDcyMiAqIGNbMl07IH0KCWZ1bmN0aW9uIGNvbnRyYXN0KGZnLCBiZykgeyB2YXIgYSA9IGx1bShmZyksIGIgPSBsdW0oYmcpOyByZXR1cm4geyBpbnZlcnRlZDogYSA+IGIsIHJhdGlvOiAoTWF0aC5tYXgoYSwgYikgKyAwLjA1KSAvIChNYXRoLm1pbihhLCBiKSArIDAuMDUpIH07IH0KCWZ1bmN0aW9uIGVtcHR5KG1zZykgeyBjdXJyZW50ID0gIiI7IHByZXZpZXcuaW5uZXJIVE1MID0gIiI7IHByZXZpZXcuYXBwZW5kQ2hpbGQoaCgicCIsIHsgImNsYXNzIjogImZ2cXJfX2VtcHR5IiwgdGV4dDogbXNnIH0pKTsgaW5mby50ZXh0Q29udGVudCA9ICIiOyByb290LmNsYXNzTGlzdC5hZGQoImlzLWVtcHR5Iik7IH0KCWZ1bmN0aW9uIGRvd25sb2FkKG5hbWUsIGJsb2IpIHsgdmFyIGEgPSBoKCJhIiwgeyBocmVmOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpLCBkb3dubG9hZDogbmFtZSB9KTsgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTsgYS5jbGljaygpOyBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgVVJMLnJldm9rZU9iamVjdFVSTChhLmhyZWYpOyBhLnJlbW92ZSgpOyB9LCAxMDAwKTsgfQoJZnVuY3Rpb24gZmlsZU5hbWUoZXh0KSB7IHJldHVybiAiZm90b3ZtYWctIiArIChTLnR5cGUgPT09ICJlYW4iID8gImVhbiIgOiAicXItIiArIFMudHlwZSkgKyAiLiIgKyBleHQ7IH0KCWRsLmFwcGVuZENoaWxkKGgoImJ1dHRvbiIsIHsgdHlwZTogImJ1dHRvbiIsICJjbGFzcyI6ICJmdnFyX19idG4gZnZxcl9fYnRuLS1tYWluIiwgdGV4dDogIkRlc2NhcmPEgyBQTkciLCBvbjogeyBjbGljazogZnVuY3Rpb24gKCkgewoJCWlmICghY3VycmVudCkgcmV0dXJuOwoJCXZhciBpbWcgPSBuZXcgSW1hZ2UoKTsgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsgdmFyIFcgPSBTLnB4LCBIaCA9IE1hdGgucm91bmQoVyAqIGltZy5oZWlnaHQgLyBpbWcud2lkdGgpLCBjID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7IGMud2lkdGggPSBXOyBjLmhlaWdodCA9IEhoOyB2YXIgeCA9IGMuZ2V0Q29udGV4dCgiMmQiKTsgeC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTsgeC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBXLCBIaCk7IGMudG9CbG9iKGZ1bmN0aW9uIChiKSB7IGRvd25sb2FkKGZpbGVOYW1lKCJwbmciKSwgYik7IH0sICJpbWFnZS9wbmciKTsgfTsKCQlpbWcuc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbY3VycmVudF0sIHsgdHlwZTogImltYWdlL3N2Zyt4bWwiIH0pKTsKCX0gfSB9KSk7CglkbC5hcHBlbmRDaGlsZChoKCJidXR0b24iLCB7IHR5cGU6ICJidXR0b24iLCAiY2xhc3MiOiAiZnZxcl9fYnRuIiwgdGV4dDogIkRlc2NhcmPEgyBTVkciLCBvbjogeyBjbGljazogZnVuY3Rpb24gKCkgeyBpZiAoY3VycmVudCkgZG93bmxvYWQoZmlsZU5hbWUoInN2ZyIpLCBuZXcgQmxvYihbY3VycmVudF0sIHsgdHlwZTogImltYWdlL3N2Zyt4bWwiIH0pKTsgfSB9IH0pKTsKCWRsLmFwcGVuZENoaWxkKGgoImJ1dHRvbiIsIHsgdHlwZTogImJ1dHRvbiIsICJjbGFzcyI6ICJmdnFyX19idG4gZnZxcl9fYnRuLS12Y2YiLCB0ZXh0OiAiRGVzY2FyY8SDIC52Y2YiLCBvbjogeyBjbGljazogZnVuY3Rpb24gKCkgeyB2YXIgdCA9IFMudHlwZSA9PT0gInZjYXJkIiAmJiBwYXlsb2FkKCk7IGlmICh0KSBkb3dubG9hZCgiY29udGFjdC52Y2YiLCBuZXcgQmxvYihbdCArICJcclxuIl0sIHsgdHlwZTogInRleHQvdmNhcmQiIH0pKTsgfSB9IH0pKTsKCglyb290LmlubmVySFRNTCA9ICIiOwoJcm9vdC5hcHBlbmRDaGlsZChoKCJkaXYiLCB7ICJjbGFzcyI6ICJmdnFyX19ncmlkIiB9LCBbCgkJaCgiZGl2IiwgeyAiY2xhc3MiOiAiZnZxcl9fZm9ybSIgfSwgW3R5cGVzQmFyLCBmaWVsZHMsIGgoImRldGFpbHMiLCB7ICJjbGFzcyI6ICJmdnFyX19tb3JlIiwgb3Blbjogd2luZG93LmlubmVyV2lkdGggPiA5MDAgPyAiIiA6IG51bGwgfSwgW2goInN1bW1hcnkiLCB7IHRleHQ6ICJEZXNpZ246IHB1bmN0ZSwgY29syJt1cmksIGN1bG9yaSwgbG9nbyIgfSksIGRlc2lnbl0pXSksCgkJaCgiZGl2IiwgeyAiY2xhc3MiOiAiZnZxcl9fb3V0IiB9LCBbaCgiZGl2IiwgeyAiY2xhc3MiOiAiZnZxcl9fY2FyZCIgfSwgW3ByZXZpZXcsIGluZm8sIG5vdGUsIGRsXSldKQoJXSkpOwoJLy8gYSBsaW5rIGVuZGluZyBpbiAjd2lmaSwgI3dhLCAjdmNhcmQsICNlYW4sICN1cmwg4oCmIG9wZW5zIHRoZSBnZW5lcmF0b3Igb24gdGhhdCBjb2RlIHR5cGUgKG1lbnUgbGlua3MgdXNlIHRoaXMpCglmdW5jdGlvbiBmcm9tSGFzaCgpIHsgdmFyIHQgPSAobG9jYXRpb24uaGFzaCB8fCAiIikuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTsgaWYgKCFGSUVMRFNbdF0pIHJldHVybiBmYWxzZTsgUy50eXBlID0gdDsgcmV0dXJuIHRydWU7IH0KCWZ1bmN0aW9uIHNob3dBcHAoKSB7IHZhciB5ID0gcm9vdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQgLSAxMTA7IHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogTWF0aC5tYXgoMCwgeSksIGJlaGF2aW9yOiAic21vb3RoIiB9KTsgfQoJaWYgKGZyb21IYXNoKCkpIHNldFRpbWVvdXQoc2hvd0FwcCwgNDAwKTsKCXdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIiwgZnVuY3Rpb24gKCkgeyBpZiAoZnJvbUhhc2goKSkgeyBkcmF3RmllbGRzKCk7IHF1ZXVlKCk7IHNob3dBcHAoKTsgfSB9KTsKCWRyYXdGaWVsZHMoKTsgZHJhd0Rlc2lnbigpOyByZW5kZXIoKTsKCS8vIHRyYW5zbGF0ZWQgcGFnZXM6IHRoZSB0b29sJ3MgdGV4dHMgZnJvbSBUcmFuc2xhdGVQcmVzcywgdGhlbiBldmVyeXRoaW5nIGlzIGRyYXduIGFnYWluICh0aGUgY29kZSBwcmV2aWV3IHN0YXlzIGFzIGl0IGlzKQoJd2hlblBhcnNlZChmdW5jdGlvbiAoKSB7CgkJdmFyIG91dHNpZGUgPSBmdW5jdGlvbiAobikgeyByZXR1cm4gbi5jbGFzc0xpc3QuY29udGFpbnMoImZ2cXJfX3ByZXZpZXciKSB8fCBuLm5hbWVzcGFjZVVSSSA9PT0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjsgfTsKCQl2YXIgdGV4dHMgPSBjb2xsZWN0KHJvb3QsIG91dHNpZGUsIFtdKTsKCQlUWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7IHRleHRzLnB1c2godFsxXSk7IH0pOyBbRE9UUywgT1VURVIsIElOTkVSXS5mb3JFYWNoKGZ1bmN0aW9uIChsKSB7IGwuZm9yRWFjaChmdW5jdGlvbiAobykgeyB0ZXh0cy5wdXNoKG9bMV0pOyB9KTsgfSk7CgkJT2JqZWN0LmtleXMoRklFTERTKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEZJRUxEU1trXS5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7IHRleHRzLnB1c2goZlsxXSk7IGlmIChmWzJdKSB0ZXh0cy5wdXNoKGZbMl0pOyBpZiAoZlszXS5pbmRleE9mKCJzZWw6IikgPT09IDApIGZbM10uc2xpY2UoNCkuc3BsaXQoIiwiKS5mb3JFYWNoKGZ1bmN0aW9uIChvKSB7IHRleHRzLnB1c2goby5zcGxpdCgifCIpWzFdKTsgfSk7IH0pOyB9KTsKCQl0ZXh0cy5wdXNoKCJTY3VydGVhesSDIGxpbmt1bCIsICJTY3JpZSBtYWkgw65udMOiaSBsaW5rdWwuIiwgIlNlIHNjdXJ0ZWF6xIPigKYiLCAiTGluayBzY3VydCBjcmVhdCDigJQgY29kdWwgUVIgYSBkZXZlbml0IG1haSBzaW1wbHUuIiwgIlNjdXJ0YXJlYSBsaW5rdXJpbG9yIG51IGVzdGUgYWN0aXbEgyDDrm5jxIMuIiwgIk51IHMtYSBwdXR1dCBzY3VydGEgbGlua3VsLiIsICJQdW5jdGVsZSIsICJDb2zIm3VyaWxlIChjaGVuYXJ1bCkiLCAiQ29syJt1cmlsZSAoY2VudHJ1bCkiLCAiQ3Vsb2FyZWEgYmFyZWxvciIsICJDdWxvYXJlYSBwdW5jdGVsb3IiLCAiQ3Vsb2FyZWEgY29syJt1cmlsb3IiLCAiRnVuZGFsdWwiLCAiRnVuZGFsIHRyYW5zcGFyZW50IiwgIkbEg3LEgyBsb2dvIiwgIk3Eg3JpbWVhIGxvZ291bHVpIiwgIkxvZ28gw65uIG1pamxvYyIsICJTY2hpbWLEgyBsb2dvdWwiLCAiQWxlZ2UgbG9nb3VsIiwgIk3Eg3JpbWUiLCAiQ3UgbG9nbywgY29kdWwgZm9sb3NlyJl0ZSBjb3JlY8ibaWEgbWF4aW3EgyAoMzAgJSksIGNhIHPEgyBzZSBzY2FuZXplIMiZaSBjdSBtaWpsb2N1bCBhY29wZXJpdC4iLCAiQ29yZWPIm2lhIGVyb3JpbG9yIiwgIkF1dG9tYXTEgyIsICJNxINyaW1lYSBQTkciLCAiNDA5NiBweCAocHJpbnQgbWFyZSkiLCAiU2NyaWUgY2lmcmVsZSBjb2R1bHVpIEVBTi4iLCAiQ29tcGxldGVhesSDIGPDom1wdXJpbGUgY2Egc8SDIHZlemkgY29kdWwuIiwgIlZlcnNpdW5lYSIsICJtb2R1bGUiLCAiY29yZWPIm2llIiwgIm9jdGXIm2kiLCAiY2lmcmEgZGUgY29udHJvbCIsICJDb2R1bCBlIGRlbnM6IHVuIGxpbmsgc2N1cnQgc2F1IG1haSBwdcibaW4gdGV4dCDDrmwgZmFjZSBtYWkgdciZb3IgZGUgc2NhbmF0LiIsICJTdGlsdWwgYWxlcyBlIGRlY29yYXRpdjogdGVzdGVhesSDIGNvZHVsIGN1IHRlbGVmb251bCDDrm5haW50ZSBkZSBwcmludC4iLCAiQ3Vsb3JpbGUgc3VudCBpbnZlcnNhdGUgKHB1bmN0ZSBkZXNjaGlzZSBwZSBmdW5kYWwgw65uY2hpcyk6IHVuZWxlIHRlbGVmb2FuZSBudSBjaXRlc2MgYXN0ZmVsIGRlIGNvZHVyaS4iLCAiQ29udHJhc3QgbWljIMOubnRyZSBwdW5jdGUgyJlpIGZ1bmRhbDogYWxlZ2UgcHVuY3RlIG1haSDDrm5jaGlzZSBzYXUgdW4gZnVuZGFsIG1haSBkZXNjaGlzLiIpOwoJCWkxOG4odGV4dHMuZmlsdGVyKGZ1bmN0aW9uICh4LCBpLCBhKSB7IHJldHVybiB4ICYmIGEuaW5kZXhPZih4KSA9PT0gaTsgfSkpLnRoZW4oZnVuY3Rpb24gKCkgewoJCQlyb290LnNldEF0dHJpYnV0ZSgiZGF0YS1uby1keW5hbWljLXRyYW5zbGF0aW9uIiwgIiIpOwoJCQl0cmFuc2xhdGVUcmVlKHJvb3QsIG91dHNpZGUpOyBkcmF3RmllbGRzKCk7IGRyYXdEZXNpZ24oKTsgcmVuZGVyKCk7CgkJfSwgZnVuY3Rpb24gKCkge30pOwoJfSk7Cn0pKCk7Cg==\"), function (c) { return c.charCodeAt(0); })))();<\/script>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-wd-section wd-22d462f3\">\n<div class=\"wp-block-wd-container wd-dir-col fv-rs fv-qr-types fv-rs-center wd-a5ffff5d wd-custom-width\">\n<div class=\"wp-block-wd-icon fv-rs-kicker wd-with-text wd-36aff703\"><span class=\"wd-text-icon\">9 tipuri<\/span><\/div>\n\n\n\n<h2 class=\"wp-block-wd-title title fv-rs-h2 wd-2d9eb868\">Ce po\u021bi pune \u00eentr-un cod<\/h2>\n\n\n\n<div class=\"wp-block-wd-container wd-dir-row fv-rs-trust wd-9217f5b9\">\n<div class=\"wp-block-wd-container wd-dir-col fv-rs-card fv-rv-item wd-animation wd-transform wd-animation-slide-from-bottom wd_delay_0 wd-8a888e81\">\n<div class=\"wp-block-wd-icon fv-rs-card__ico wd-with-text wd-79eec95b\"><span class=\"wd-text-icon\">\ud83d\udd17<\/span><\/div>\n\n\n\n<h3 class=\"wp-block-wd-title title wd-f27cc0a9\">Link<\/h3>\n\n\n\n<p class=\"wp-block-wd-paragraph fv-rs-card__text wd-5b069e52\">Adresa unui site, produs sau document; o po\u021bi scurta cu un clic, pe domeniul fotovmag.ro.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-wd-container wd-dir-col fv-rs-card fv-rv-item wd-animation wd-transform wd-animation-slide-from-bottom wd_delay_100 wd-6162c0dd\">\n<div class=\"wp-block-wd-icon fv-rs-card__ico wd-with-text wd-f9d84ac8\"><span class=\"wd-text-icon\">\ud83d\udcac<\/span><\/div>\n\n\n\n<h3 class=\"wp-block-wd-title title wd-9654f99f\">WhatsApp<\/h3>\n\n\n\n<p class=\"wp-block-wd-paragraph fv-rs-card__text wd-5f211f2f\">Deschide conversa\u021bia cu tine, cu mesajul deja scris.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-wd-container wd-dir-col fv-rs-card fv-rv-item wd-animation wd-transform wd-animation-slide-from-bottom wd_delay_200 wd-016e5aa7\">\n<div class=\"wp-block-wd-icon fv-rs-card__ico wd-with-text wd-092c0217\"><span class=\"wd-text-icon\">\ud83d\udcf6<\/span><\/div>\n\n\n\n<h3 class=\"wp-block-wd-title title wd-63857f0a\">WiFi<\/h3>\n\n\n\n<p class=\"wp-block-wd-paragraph fv-rs-card__text wd-a5a10e2e\">Oaspe\u021bii se conecteaz\u0103 la re\u021bea f\u0103r\u0103 s\u0103 tasteze parola.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-wd-container wd-dir-col fv-rs-card fv-rv-item wd-animation wd-transform wd-animation-slide-from-bottom wd_delay_300 wd-b11b4c46\">\n<div class=\"wp-block-wd-icon fv-rs-card__ico wd-with-text wd-56a15b84\"><span class=\"wd-text-icon\">\ud83d\udc64<\/span><\/div>\n\n\n\n<h3 class=\"wp-block-wd-title title wd-c233c6c1\">Contact vCard<\/h3>\n\n\n\n<p class=\"wp-block-wd-paragraph fv-rs-card__text wd-1199dca5\">Numele, telefonul, e-mailul \u0219i adresa ajung direct \u00een agend\u0103; descarci \u0219i fi\u0219ierul .vcf.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-wd-container wd-dir-col fv-rs-card fv-rv-item wd-animation wd-transform wd-animation-slide-from-bottom wd_delay_400 wd-3cfd0e1a\">\n<div class=\"wp-block-wd-icon fv-rs-card__ico wd-with-text wd-94d7c948\"><span class=\"wd-text-icon\">\u2709\ufe0f<\/span><\/div>\n\n\n\n<h3 class=\"wp-block-wd-title title wd-f98dd337\">E-mail \u0219i SMS<\/h3>\n\n\n\n<p class=\"wp-block-wd-paragraph fv-rs-card__text wd-ebcd6b54\">Un mesaj c\u0103tre tine, cu subiectul \u0219i textul deja completate.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-wd-container wd-dir-col fv-rs-card fv-rv-item wd-animation wd-transform wd-animation-slide-from-bottom wd_delay_400 wd-8fb95b58\">\n<div class=\"wp-block-wd-icon fv-rs-card__ico wd-with-text wd-c0bb2fbd\"><span class=\"wd-text-icon\">\ud83d\udcde<\/span><\/div>\n\n\n\n<h3 class=\"wp-block-wd-title title wd-9d34316c\">Telefon<\/h3>\n\n\n\n<p class=\"wp-block-wd-paragraph fv-rs-card__text wd-72bd246e\">Un apel c\u0103tre tine, la o singur\u0103 atingere.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-wd-container wd-dir-col fv-rs-card fv-rv-item wd-animation wd-transform wd-animation-slide-from-bottom wd_delay_400 wd-ae16da9a\">\n<div class=\"wp-block-wd-icon fv-rs-card__ico wd-with-text wd-c835c962\"><span class=\"wd-text-icon\">\ud83d\udcdd<\/span><\/div>\n\n\n\n<h3 class=\"wp-block-wd-title title wd-b3fdf2ef\">Text<\/h3>\n\n\n\n<p class=\"wp-block-wd-paragraph fv-rs-card__text wd-e610c830\">Orice text scurt: un mesaj, un cod, o instruc\u021biune.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-wd-container wd-dir-col fv-rs-card fv-rv-item wd-animation wd-transform wd-animation-slide-from-bottom wd_delay_400 wd-35fe400b\">\n<div class=\"wp-block-wd-icon fv-rs-card__ico wd-with-text wd-7dbab397\"><span class=\"wd-text-icon\">\u25ae\u25af\u25ae<\/span><\/div>\n\n\n\n<h3 class=\"wp-block-wd-title title wd-cb24a963\">Cod EAN<\/h3>\n\n\n\n<p class=\"wp-block-wd-paragraph fv-rs-card__text wd-8bef874d\">Coduri de bare EAN-13 \u0219i EAN-8, cu cifra de control calculat\u0103 automat.<\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-wd-container wd-dir-col fv-rs-card fv-rv-item wd-animation wd-transform wd-animation-slide-from-bottom wd_delay_400 wd-c607649b\">\n<div class=\"wp-block-wd-icon fv-rs-card__ico wd-with-text wd-780070e1\"><span class=\"wd-text-icon\">\ud83c\udfa8<\/span><\/div>\n\n\n\n<h3 class=\"wp-block-wd-title title wd-e1e59ceb\">Designul t\u0103u<\/h3>\n\n\n\n<p class=\"wp-block-wd-paragraph fv-rs-card__text wd-6fcc599a\">Puncte rotunde sau p\u0103trate, col\u021buri, culori, fundal transparent \u0219i logo \u00een mijloc.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-wd-section wd-dc579a76\">\n<div class=\"wp-block-wd-container wd-dir-col fv-rs fv-qr-tips wd-ef265da3 wd-custom-width\">\n<div class=\"wp-block-wd-container wd-dir-col fv-rs-send fv-rv-item wd-animation wd-transform wd-animation-slide-from-bottom wd_delay_0 wd-a4736958\">\n<h2 class=\"wp-block-wd-title title fv-rs-h2 wd-6119ba68\">Sfaturi pentru print<\/h2>\n\n\n\n<p class=\"wp-block-wd-paragraph fv-rs-lead wd-1eae1df6\">Un cod QR bun se scaneaz\u0103 din prima. Patru reguli simple:<\/p>\n\n\n\n<ul><li>P\u0103streaz\u0103 contrastul: puncte \u00eenchise pe fundal deschis. Codurile inversate (deschise pe \u00eenchis) nu se citesc pe toate telefoanele.<\/li><li>Las\u0103 marginea goal\u0103 din jurul codului \u2014 cel pu\u021bin 4 puncte; generatorul o include automat.<\/li><li>M\u0103rime minim\u0103: aproximativ 2 \u00d7 2 cm pentru un link scurt citit de aproape; pe afi\u0219e, cu c\u00e2t se scaneaz\u0103 de mai departe, cu at\u00e2t codul trebuie s\u0103 fie mai mare.<\/li><li>Pentru tipar folose\u0219te SVG sau PNG la 2048 px \u0219i testeaz\u0103 codul cu 2\u20133 telefoane \u00eenainte de tiraj.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-wd-paragraph fv-rs-lead wd-53e1aded\">Vrei codul pe c\u0103r\u021bi de vizit\u0103? <a href=\"https:\/\/staging.fotovmag.ro\/produse\/carti-de-vizita-personalizate-set-100-buc\/\">Creeaz\u0103-le \u00een configurator<\/a> \u2014 codul QR vCard se pune singur pe verso.<\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-wd-section wd-7af8a270\">\n<div class=\"wp-block-wd-container wd-dir-col fv-pp-faq wd-7b356e05\">\n<div class=\"wp-block-wd-menu-anchor wd-menu-anchor wd-faa0be04\" data-id=\"intrebari\" data-offset=\"130\"><div id=\"intrebari\"><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-wd-title title wd-d852981b\">\u00centreb\u0103ri despre codurile QR<\/h2>\n\n\n\n<div class=\"wp-block-wd-accordion wd-accordion wd-style-default wd-titles-start wd-opener-style-plus wd-opener-pos-end wd-3a167b7c fv-qa-acc\" data-state=\"all\">\n<div class=\"wp-block-wd-accordion-pane wd-accordion-item wd-7261cc9a\"><div class=\"wd-accordion-title wd-role-btn\" tabindex=\"0\"><div class=\"wd-accordion-title-text\"><span>Codurile QR generate aici expir\u0103?<\/span><\/div><span class=\"wd-accordion-opener\"><\/span><\/div><div class=\"wd-accordion-content\"><div class=\"wd-accordion-content-inner\">\n<p class=\"wp-block-wd-paragraph wd-c7038477\">Nu. Codurile sunt statice: informa\u021bia este chiar \u00een desen, a\u0219a c\u0103 func\u021bioneaz\u0103 f\u0103r\u0103 abonament \u0219i f\u0103r\u0103 server. Singura excep\u021bie sunt linkurile scurtate, care func\u021bioneaz\u0103 c\u00e2t timp linkul scurt exist\u0103 pe fotovmag.ro.<\/p>\n<\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-wd-accordion-pane wd-accordion-item wd-d2477e7b\"><div class=\"wd-accordion-title wd-role-btn\" tabindex=\"0\"><div class=\"wd-accordion-title-text\"><span>Generatorul este gratuit?<\/span><\/div><span class=\"wd-accordion-opener\"><\/span><\/div><div class=\"wd-accordion-content\"><div class=\"wd-accordion-content-inner\">\n<p class=\"wp-block-wd-paragraph wd-de5c75ea\">Da, f\u0103r\u0103 cont, f\u0103r\u0103 limit\u0103 de coduri \u0219i f\u0103r\u0103 filigran. Codurile le po\u021bi folosi \u0219i \u00een scop comercial.<\/p>\n<\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-wd-accordion-pane wd-accordion-item wd-14c4faea\"><div class=\"wd-accordion-title wd-role-btn\" tabindex=\"0\"><div class=\"wd-accordion-title-text\"><span>Datele pe care le scriu ajung la voi?<\/span><\/div><span class=\"wd-accordion-opener\"><\/span><\/div><div class=\"wd-accordion-content\"><div class=\"wd-accordion-content-inner\">\n<p class=\"wp-block-wd-paragraph wd-fb413c48\">Nu. Codul se genereaz\u0103 \u00een browserul t\u0103u; nimic din ce scrii nu este trimis c\u0103tre server, cu excep\u021bia linkului pe care alegi s\u0103-l scurtezi.<\/p>\n<\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-wd-accordion-pane wd-accordion-item wd-d5c6f056\"><div class=\"wd-accordion-title wd-role-btn\" tabindex=\"0\"><div class=\"wd-accordion-title-text\"><span>De ce s\u0103 scurtez linkul?<\/span><\/div><span class=\"wd-accordion-opener\"><\/span><\/div><div class=\"wd-accordion-content\"><div class=\"wd-accordion-content-inner\">\n<p class=\"wp-block-wd-paragraph wd-44256425\">Un link scurt are mai pu\u021bine caractere, deci codul are mai pu\u021bine puncte, mai mari: se scaneaz\u0103 mai u\u0219or, de la distan\u021b\u0103 mai mare \u0219i la dimensiuni mai mici.<\/p>\n<\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-wd-accordion-pane wd-accordion-item wd-7e13a5b2\"><div class=\"wd-accordion-title wd-role-btn\" tabindex=\"0\"><div class=\"wd-accordion-title-text\"><span>Pot pune logoul meu \u00een mijlocul codului?<\/span><\/div><span class=\"wd-accordion-opener\"><\/span><\/div><div class=\"wd-accordion-content\"><div class=\"wd-accordion-content-inner\">\n<p class=\"wp-block-wd-paragraph wd-dabedff3\">Da. Cu logo, generatorul folose\u0219te automat corec\u021bia maxim\u0103 a erorilor (30 %), ca un cod par\u021bial acoperit s\u0103 se scaneze \u00een continuare. P\u0103streaz\u0103 logoul sub un sfert din l\u0103\u021bimea codului \u0219i testeaz\u0103-l \u00eenainte de print.<\/p>\n<\/div><\/div><\/div>\n\n\n\n<div class=\"wp-block-wd-accordion-pane wd-accordion-item wd-8430b911\"><div class=\"wd-accordion-title wd-role-btn\" tabindex=\"0\"><div class=\"wd-accordion-title-text\"><span>Ce este un cod EAN?<\/span><\/div><span class=\"wd-accordion-opener\"><\/span><\/div><div class=\"wd-accordion-content\"><div class=\"wd-accordion-content-inner\">\n<p class=\"wp-block-wd-paragraph wd-9011ca24\">Codul de bare de pe produsele din magazine: EAN-13 pentru majoritatea produselor, EAN-8 pentru ambalajele mici. Generatorul calculeaz\u0103 cifra de control; numerele pentru produsele v\u00e2ndute \u00een retail se ob\u021bin de la GS1 Rom\u00e2nia.<\/p>\n<\/div><\/div><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<script type=\"application\/ld+json\">{\"@context\":\"https:\/\/schema.org\",\"@type\":\"WebApplication\",\"name\":\"Generator cod QR FotoVmag\",\"url\":\"https:\/\/staging.fotovmag.ro\/qr-generator-ai-marketing-tool-fotovmag\/\",\"applicationCategory\":\"DesignApplication\",\"operatingSystem\":\"Any\",\"browserRequirements\":\"Requires JavaScript\",\"isAccessibleForFree\":true,\"inLanguage\":\"ro\",\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"RON\"},\"provider\":{\"@id\":\"https:\/\/staging.fotovmag.ro\/#business\"},\"featureList\":[\"Link, text, WhatsApp, WiFi, contact vCard, e-mail, SMS, telefon\",\"Coduri de bare EAN-13 \u0219i EAN-8\",\"Puncte, col\u021buri, culori \u0219i logo la alegere\",\"Export SVG \u0219i PNG\",\"Link scurt pe fotovmag.ro\"]}<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Generador de c\u00f3digos QR gratuito, directamente en el navegador: enlace, WiFi, vCard, WhatsApp, SMS, correo electr\u00f3nico y c\u00f3digos EAN, con colores y logo, exportaci\u00f3n PNG o SVG.<\/p>","protected":false},"author":1,"featured_media":38935,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_seopress_titles_title":"Generator cod QR gratuit: link, WiFi, vCard | FotoVmag","_seopress_titles_desc":"Generator cod QR gratuit, direct \u00een browser: link, WiFi, vCard, WhatsApp, SMS, e-mail \u0219i coduri EAN, cu culori \u0219i logo, export PNG sau SVG.","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"generator cod QR,generator QR,marketing,codurile QR","wpai_generated_summary":"","_joinchat":[],"footnotes":""},"class_list":["post-38923","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/staging.fotovmag.ro\/es\/wp-json\/wp\/v2\/pages\/38923","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/staging.fotovmag.ro\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/staging.fotovmag.ro\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/staging.fotovmag.ro\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/staging.fotovmag.ro\/es\/wp-json\/wp\/v2\/comments?post=38923"}],"version-history":[{"count":3,"href":"https:\/\/staging.fotovmag.ro\/es\/wp-json\/wp\/v2\/pages\/38923\/revisions"}],"predecessor-version":[{"id":40514,"href":"https:\/\/staging.fotovmag.ro\/es\/wp-json\/wp\/v2\/pages\/38923\/revisions\/40514"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/staging.fotovmag.ro\/es\/wp-json\/wp\/v2\/media\/38935"}],"wp:attachment":[{"href":"https:\/\/staging.fotovmag.ro\/es\/wp-json\/wp\/v2\/media?parent=38923"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}