เครื่องมือสำหรับศิลปินทาโรต์

เดคของคุณ มีชีวิตบนหน้าจอ

อัปโหลดลายเส้นของคุณ ใส่ความหมายไพ่ แล้วลองเล่นเป็นผู้ใช้จริงดูว่าลูกค้าจะเห็นเดคของคุณยังไง

ข้อมูลเดคและศิลปิน

ข้อมูลนี้จะแสดงในหน้าพรีวิวให้ลูกค้าเห็น

มาตรฐานทาโรต์ทั่วไปคือ 2:3 ถ้าไพ่ของคุณยาวกว่านี้ เช่น 1:2 ปรับตรงนี้ได้เลย ระบบจะปรับกรอบกองไพ่ ช่องเปิดไพ่ และหน้าต่างขยายให้อัตโนมัติทั้งหมด
คลิกเพื่อเลือกรูป — ถ้าไม่ใส่จะใช้ลายไล่สีเริ่มต้นแทน
ปรับสีให้เข้ากับแบรนด์ของคุณ — อยากได้ธีมสำเร็จรูปที่ออกแบบไว้ให้พร้อมใช้ รอในหน้าร้านเสริมที่จะเปิดตามมาครับ

ไพ่ทั้ง 22 ใบ

คลิกแต่ละใบเพื่ออัปโหลดรูปและใส่ความหมาย ระบบจะเช็คขนาดภาพให้อัตโนมัติ

อัปโหลดแล้ว 0 / 22 ใบ

อัปโหลดรูปหลายไฟล์พร้อมกัน — ตั้งชื่อไฟล์เป็นตัวเลข 0 ถึง 21 ตามลำดับไพ่ (เช่น 0.png, 1.png … 21.png) ระบบจะจับคู่ให้อัตโนมัติ

ยังไม่มีรูปพร้อมใช้? กดปุ่มนี้เพื่อดึงชื่อไพ่และความหมายตัวอย่างมาใส่ให้ทันที (ไม่มีรูป) ไว้ลองระบบก่อน แล้วค่อยแก้ไขทีหลังได้

พรีวิวเป็นผู้เล่นจริง

นี่คือสิ่งที่ลูกค้าของศิลปินจะเห็นและใช้จ่ายเงินจริง

อดีต
ไพ่ของคุณ
อนาคต

ชอบเดคนี้ไหม?

ไพ่ชุดนี้ออกแบบโดย

ซื้อเดคจริง / ติดต่อศิลปิน

Evatar Studio

มีคำถาม? ติดต่อ evatarintermedia@gmail.com

ZnVuY3Rpb24gdGFyb3RSZWFkeShmbil7CiAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgIT09ICdsb2FkaW5nJyl7IGZuKCk7IH0KICBlbHNlIHsgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZuKTsgfQp9CnRhcm90UmVhZHkoZnVuY3Rpb24oKXsKCiAgY29uc3QgREVNT19NRUFOSU5HUyA9IFsKICAgIHsgbmFtZTonVGhlIEZvb2wnLCB1cDon4LiB4Liy4Lij4LmA4Lij4Li04LmI4Lih4LiV4LmJ4LiZ4LmD4Lir4Lih4LmI4LiU4LmJ4Lin4Lii4LmD4LiI4LmA4Lib4Li04LiU4LiB4Lin4LmJ4Liy4LiHJywgcmV2OifguILguLLguJTguIHguLLguKPguKfguLLguIfguYHguJzguJkg4Lir4Li44LiZ4Lir4Lix4LiZ4Lie4Lil4Lix4LiZ4LmB4Lil4LmI4LiZJyB9LAogICAgeyBuYW1lOidUaGUgTWFnaWNpYW4nLCB1cDon4Lih4Li14LiX4Lij4Lix4Lie4Lii4Liy4LiB4Lij4LiE4Lij4Lia4Lih4Li34LitIOC4nuC4o+C5ieC4reC4oeC4peC4h+C4oeC4t+C4reC4quC4o+C5ieC4suC4h+C4quC4o+C4o+C4hOC5jCcsIHJldjon4Lih4Li14LiC4Lit4LiH4LmB4LiV4LmI4LiC4Liy4LiU4LmC4Lif4LiB4Lix4LiqJyB9LAogICAgeyBuYW1lOidUaGUgSGlnaCBQcmllc3Rlc3MnLCB1cDon4Lif4Lix4LiH4Liq4Lix4LiN4LiK4Liy4LiV4LiN4Liy4LiT4LmB4Lil4Liw4LmA4Liq4Li14Lii4LiH4Lig4Liy4Lii4LmD4LiZJywgcmV2OifguJXguLHguJTguILguLLguJTguIjguLLguIHguYPguIjguJXguLHguKfguYDguK3guIcnIH0sCiAgICB7IG5hbWU6J1RoZSBFbXByZXNzJywgdXA6J+C4hOC4p+C4suC4oeC4reC4uOC4lOC4oeC4quC4oeC4muC4ueC4o+C4k+C5jOC5geC4peC4sOC4geC4suC4o+C5gOC4leC4tOC4muC5guC4lScsIHJldjon4Lil4Liw4LmA4Lil4Lii4LiV4Lix4Lin4LmA4Lit4LiH4Lir4Lij4Li34Lit4LiE4LiZ4Lij4Lit4Lia4LiC4LmJ4Liy4LiHJyB9LAogICAgeyBuYW1lOidUaGUgRW1wZXJvcicsIHVwOifguYLguITguKPguIfguKrguKPguYnguLLguIfguYHguKXguLDguITguKfguLLguKHguKHguLHguYjguJnguITguIcnLCByZXY6J+C5gOC4hOC4o+C5iOC4h+C4hOC4o+C4seC4lOC5gOC4geC4tOC4meC5hOC4m+C4iOC4meC4guC4suC4lOC4ouC4t+C4lOC4q+C4ouC4uOC5iOC4mScgfSwKICAgIHsgbmFtZTonVGhlIEhpZXJvcGhhbnQnLCB1cDon4Lii4Li24LiU4LiW4Li34Lit4LiE4Li44LiT4LiE4LmI4Liy4LmB4Lil4Liw4Lib4Lij4Liw4LmA4Lie4LiT4Li14Lij4LmI4Lin4LihJywgcmV2OifguKLguLbguJTguJXguLTguJTguIHguI7guIjguJnguYTguKHguYjguKLguK3guKHguYDguJvguKXguLXguYjguKLguJknIH0sCiAgICB7IG5hbWU6J1RoZSBMb3ZlcnMnLCB1cDon4LiB4Liy4Lij4LiV4Lix4LiU4Liq4Li04LiZ4LmD4LiI4LiE4Lij4Lix4LmJ4LiH4Liq4Liz4LiE4Lix4LiN4LiU4LmJ4Lin4Lii4LmD4LiIJywgcmV2OifguKXguLHguIfguYDguKXguYTguKHguYjguIHguKXguYnguLLguYDguKXguLfguK3guIEnIH0sCiAgICB7IG5hbWU6J1RoZSBDaGFyaW90JywgdXA6J+C4oeC4uOC5iOC4h+C4oeC4seC5iOC4meC4hOC4p+C4muC4hOC4uOC4oeC4quC4luC4suC4meC4geC4suC4o+C4k+C5jOC5hOC4m+C4guC5ieC4suC4h+C4q+C4meC5ieC4sicsIHJldjon4LmA4Lij4LmI4LiH4Lij4Li14Lia4LiI4LiZ4LiC4Liy4LiU4LiB4Liy4Lij4LiE4Lin4Lia4LiE4Li44LihJyB9LAogICAgeyBuYW1lOidTdHJlbmd0aCcsIHVwOifguITguKfguLLguKHguIHguKXguYnguLLguKvguLLguI3guJfguLXguYjguK3guYjguK3guJnguYLguKLguJnguIjguLLguIHguKDguLLguKLguYPguJknLCByZXY6J+C4guC4suC4lOC4hOC4p+C4suC4oeC4oeC4seC5iOC4meC5g+C4iOC5g+C4meC4leC4seC4p+C5gOC4reC4hycgfSwKICAgIHsgbmFtZTonVGhlIEhlcm1pdCcsIHVwOifguJbguK3guKLguKHguLLguITguYnguJnguKvguLLguJvguLHguI3guI3guLLguKDguLLguKLguYPguJknLCByZXY6J+C5guC4lOC4lOC5gOC4lOC4teC5iOC4ouC4p+C4iOC4meC4leC4seC4lOC4guC4suC4lOC4iOC4suC4geC5guC4peC4gScgfSwKICAgIHsgbmFtZTonV2hlZWwgb2YgRm9ydHVuZScsIHVwOifguIjguLHguIfguKvguKfguLDguIrguLXguKfguLTguJXguKvguKHguLjguJnguYDguKfguLXguKLguJkg4LmA4Lib4Li04LiU4Lij4Lix4Lia4LmC4Lit4LiB4Liy4Liq4LmD4Lir4Lih4LmIJywgcmV2OifguIHguKXguLHguKfguITguKfguLLguKHguYDguJvguKXguLXguYjguKLguJnguYHguJvguKXguIcnIH0sCiAgICB7IG5hbWU6J0p1c3RpY2UnLCB1cDon4LiE4Lin4Liy4Lih4LmA4Lib4LmH4LiZ4LiY4Lij4Lij4Lih4LmB4Lil4Liw4Lic4Lil4LiI4Liy4LiB4LiB4Liy4Lij4LiB4Lij4Liw4LiX4LizJywgcmV2OifguKHguK3guIfguYTguKHguYjguYDguKvguYfguJnguITguKfguLLguKHguIjguKPguLTguIfguJXguLLguKHguJfguLXguYjguYDguJvguYfguJknIH0sCiAgICB7IG5hbWU6J1RoZSBIYW5nZWQgTWFuJywgdXA6J+C4q+C4ouC4uOC4lOC4nuC4seC4geC5gOC4nuC4t+C5iOC4reC4oeC4reC4h+C4oeC4uOC4oeC5g+C4q+C4oeC5iCcsIHJldjon4LiV4Li04LiU4Lit4Lii4Li54LmI4LiB4Lix4Lia4LiE4Lin4Liy4Lih4LmE4Lih4LmI4LiB4LmJ4Liy4Lin4Lir4LiZ4LmJ4LiyJyB9LAogICAgeyBuYW1lOidEZWF0aCcsIHVwOifguJvguKXguYjguK3guKLguKrguLTguYjguIfguYDguIHguYjguLLguYDguJ7guLfguYjguK3guYDguKPguLTguYjguKHguKrguLTguYjguIfguYPguKvguKHguYgnLCByZXY6J+C4geC4peC4seC4p+C4geC4suC4o+C5gOC4m+C4peC4teC5iOC4ouC4meC4nOC5iOC4suC4mSDguKLguLbguJTguJXguLTguJTguK3guJTguLXguJUnIH0sCiAgICB7IG5hbWU6J1RlbXBlcmFuY2UnLCB1cDon4LiE4Lin4Liy4Lih4Liq4Lih4LiU4Li44Lil4LmB4Lil4Liw4LiB4Liy4Lij4Lic4Liq4Lih4Lic4Liq4Liy4LiZJywgcmV2OifguIrguLXguKfguLTguJXguILguLLguJTguITguKfguLLguKHguKXguIfguJXguLHguKcnIH0sCiAgICB7IG5hbWU6J1RoZSBEZXZpbCcsIHVwOifguJXguKPguLDguKvguJnguLHguIHguJbguLbguIfguJ7guLHguJnguJjguJnguLLguIHguLLguKPguJfguLXguYjguJzguLnguIHguJXguLHguKfguYDguK3guIcnLCByZXY6J+C4luC4ueC4geC4hOC4o+C4reC4muC4h+C4s+C4lOC5ieC4p+C4ouC4meC4tOC4quC4seC4ouC5gOC4lOC4tOC4oScgfSwKICAgIHsgbmFtZTonVGhlIFRvd2VyJywgdXA6J+C4geC4suC4o+C4quC4seC5iOC4meC4quC4sOC5gOC4l+C4t+C4reC4meC4l+C4teC5iOC4meC4s+C5hOC4m+C4quC4ueC5iOC5guC4hOC4o+C4h+C4quC4o+C5ieC4suC4h+C5g+C4q+C4oeC5iOC4l+C4teC5iOC5geC4guC5h+C4h+C5geC4o+C4h+C4geC4p+C5iOC4sicsIHJldjon4LmA4Lil4Li14LmI4Lii4LiH4LmA4Lic4LiK4Li04LiN4Lin4Li04LiB4Lik4LiV4LiI4LiZ4Liq4Liw4Liq4Lih4Lib4Lix4LiN4Lir4LiyJyB9LAogICAgeyBuYW1lOidUaGUgU3RhcicsIHVwOifguITguKfguLLguKHguKvguKfguLHguIfguYHguKXguLDguYHguKPguIfguJrguLHguJnguJTguLLguKXguYPguIgnLCByZXY6J+C4quC4tOC5ieC4meC4q+C4p+C4seC4hyDguKHguK3guIfguYTguKHguYjguYDguKvguYfguJnguYHguKrguIfguKrguKfguYjguLLguIcnIH0sCiAgICB7IG5hbWU6J1RoZSBNb29uJywgdXA6J+C4quC4seC4jeC4iuC4suC4leC4jeC4suC4k+C4l+C4teC5iOC4leC5ieC4reC4h+C4leC4teC4hOC4p+C4suC4oeC4reC4ouC5iOC4suC4h+C4o+C4sOC4p+C4seC4hycsIHJldjon4Liq4Lix4Lia4Liq4LiZ4Lir4Lil4Li44LiU4LiI4Liy4LiB4LiE4Lin4Liy4Lih4LmA4Lib4LmH4LiZ4LiI4Lij4Li04LiHJyB9LAogICAgeyBuYW1lOidUaGUgU3VuJywgdXA6J+C4hOC4p+C4suC4oeC4quC4lOC5g+C4quC5geC4peC4sOC4hOC4p+C4suC4oeC4quC4s+C5gOC4o+C5h+C4iCcsIHJldjon4LiC4Liy4LiU4Lie4Lil4Lix4LiH4LiK4Li14Lin4Li04LiVIOC4q+C4oeC4lOC5hOC4nycgfSwKICAgIHsgbmFtZTonSnVkZ2VtZW50JywgdXA6J+C4geC4suC4o+C4m+C4peC4uOC4geC4quC4s+C4meC4tuC4geC5geC4peC4sOC4m+C4o+C4sOC5gOC4oeC4tOC4meC4leC4meC5gOC4reC4h+C5g+C4q+C4oeC5iCcsIHJldjon4Lib4LiP4Li04LmA4Liq4LiY4LiB4Liy4Lij4LmA4Lij4Li14Lii4LiB4Lij4LmJ4Lit4LiH4LmD4Lir4LmJ4LmA4Lib4Lil4Li14LmI4Lii4LiZ4LmB4Lib4Lil4LiHJyB9LAogICAgeyBuYW1lOidUaGUgV29ybGQnLCB1cDon4LiE4Lin4Liy4Lih4Liq4Lih4Lia4Li54Lij4LiT4LmM4LmB4Lil4Liw4LiB4Liy4Lij4Lia4Lij4Lij4Lil4Li44LmA4Lib4LmJ4Liy4Lir4Lih4Liy4LiiJywgcmV2OifguKPguLnguYnguKrguLbguIHguILguLLguJTguK3guLDguYTguKPguJrguLLguIfguK3guKLguYjguLLguIfguK3guKLguLnguYjguYDguKrguKHguK0nIH0KICBdOwoKICBsZXQgY2FyZERhdGEgPSBBcnJheS5mcm9tKHtsZW5ndGg6MjJ9LCAoKSA9PiAoeyBuYW1lOicnLCBpbWc6JycsIHVwOicnLCByZXY6JycgfSkpOwogIGxldCBlZGl0aW5nSW5kZXggPSBudWxsOwogIGxldCBjYXJkUmF0aW9XID0gMiwgY2FyZFJhdGlvSCA9IDM7CiAgbGV0IGRlY2tCYWNrSW1hZ2UgPSAnJzsKCiAgY29uc3QgZWwgPSBpZCA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CgogIGZ1bmN0aW9uIGFwcGx5Q2FyZFJhdGlvKCl7CiAgICBjYXJkUmF0aW9XID0gcGFyc2VGbG9hdChlbCgnY2FyZFJhdGlvVycpLnZhbHVlKSB8fCAyOwogICAgY2FyZFJhdGlvSCA9IHBhcnNlRmxvYXQoZWwoJ2NhcmRSYXRpb0gnKS52YWx1ZSkgfHwgMzsKICAgIGVsKCd0YXJvdEFwcFNjb3BlJykuc3R5bGUuc2V0UHJvcGVydHkoJy0tY2FyZC1yYXRpbycsIGNhcmRSYXRpb1cgKyAnIC8gJyArIGNhcmRSYXRpb0gpOwogICAgY29uc3QgYmFzZVdpZHRoID0gOTY7CiAgICBlbCgnZGVjay1hcmVhJykuc3R5bGUuaGVpZ2h0ID0gTWF0aC5yb3VuZChiYXNlV2lkdGggKiAoY2FyZFJhdGlvSCAvIGNhcmRSYXRpb1cpKSArIDI0ICsgJ3B4JzsKICB9CiAgZWwoJ2NhcmRSYXRpb1cnKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7IGFwcGx5Q2FyZFJhdGlvKCk7IHNhdmVNZXRhKCk7IH0pOwogIGVsKCdjYXJkUmF0aW9IJykuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4geyBhcHBseUNhcmRSYXRpbygpOyBzYXZlTWV0YSgpOyB9KTsKCiAgZnVuY3Rpb24gYXBwbHlEZWNrQmFjaygpewogICAgZWwoJ3Rhcm90QXBwU2NvcGUnKS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1kZWNrLWJhY2staW1hZ2UnLCBkZWNrQmFja0ltYWdlID8gYHVybCgnJHtkZWNrQmFja0ltYWdlfScpYCA6ICdub25lJyk7CiAgICBlbCgndGFyb3RBcHBTY29wZScpLmNsYXNzTGlzdC50b2dnbGUoJ2hhcy1iYWNrLWltYWdlJywgISFkZWNrQmFja0ltYWdlKTsKICB9CiAgZWwoJ2JhY2tJbWFnZURyb3B6b25lJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBlbCgnYmFja0ltYWdlSW5wdXQnKS5jbGljaygpKTsKICBlbCgnYmFja0ltYWdlSW5wdXQnKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbihlKXsKICAgIGNvbnN0IGZpbGUgPSBlLnRhcmdldC5maWxlc1swXTsKICAgIGlmICghZmlsZSkgcmV0dXJuOwogICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgIHJlYWRlci5vbmxvYWQgPSBldiA9PiB7CiAgICAgIGRlY2tCYWNrSW1hZ2UgPSBldi50YXJnZXQucmVzdWx0OwogICAgICBjb25zdCBkeiA9IGVsKCdiYWNrSW1hZ2VEcm9wem9uZScpOwogICAgICBkei5jbGFzc05hbWUgPSAnZHJvcHpvbmUgaGFzLWltYWdlJzsKICAgICAgZHouaW5uZXJIVE1MID0gYDxpbWcgc3JjPSIke2RlY2tCYWNrSW1hZ2V9Ij5gOwogICAgICBhcHBseURlY2tCYWNrKCk7CiAgICB9OwogICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7CiAgfSk7CgogIGZ1bmN0aW9uIGFwcGx5VGhlbWUoKXsKICAgIGVsKCd0YXJvdEFwcFNjb3BlJykuc3R5bGUuc2V0UHJvcGVydHkoJy0tZ3JhZC1hJywgZWwoJ3RoZW1lQ29sb3JBJykudmFsdWUpOwogICAgZWwoJ3Rhcm90QXBwU2NvcGUnKS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1ncmFkLWInLCBlbCgndGhlbWVDb2xvckInKS52YWx1ZSk7CiAgICBlbCgndGFyb3RBcHBTY29wZScpLnN0eWxlLnNldFByb3BlcnR5KCctLWdvbGQnLCBlbCgndGhlbWVDb2xvckdvbGQnKS52YWx1ZSk7CiAgfQogIFsndGhlbWVDb2xvckEnLCd0aGVtZUNvbG9yQicsJ3RoZW1lQ29sb3JHb2xkJ10uZm9yRWFjaChpZCA9PiB7CiAgICBlbChpZCkuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB7IGFwcGx5VGhlbWUoKTsgc2F2ZU1ldGEoKTsgfSk7CiAgfSk7CgogIC8qIC0tLS0tLS0tLS0gc3RlcCBuYXZpZ2F0aW9uIC0tLS0tLS0tLS0gKi8KICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3RlcC1idG4nKS5mb3JFYWNoKGJ0biA9PiB7CiAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiBnb1RvU3RlcChidG4uZGF0YXNldC5zdGVwKSk7CiAgfSk7CiAgZnVuY3Rpb24gZ29Ub1N0ZXAobil7CiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3RlcC1idG4nKS5mb3JFYWNoKGIgPT4gYi5jbGFzc0xpc3QudG9nZ2xlKCdhY3RpdmUnLCBiLmRhdGFzZXQuc3RlcCA9PT0gU3RyaW5nKG4pKSk7CiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3RlcC1wYW5lbCcpLmZvckVhY2gocCA9PiBwLmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScsIHAuaWQgPT09ICdwYW5lbC0nICsgbikpOwogICAgaWYgKG4gPT09ICc0JykgYnVpbGREZWNrUHJldmlldygpOwogIH0KCiAgLyogLS0tLS0tLS0tLSBzdG9yYWdlICh0ZXh0IGRhdGEgb25seSwgbm8gaW1hZ2VzKSAtLS0tLS0tLS0tCiAgICAgVXNlcyB3aW5kb3cuc3RvcmFnZSBpbnNpZGUgdGhlIENsYXVkZSBwcmV2aWV3OyBmYWxscyBiYWNrIHRvCiAgICAgbG9jYWxTdG9yYWdlIGF1dG9tYXRpY2FsbHkgb25jZSB0aGlzIGZpbGUgaXMgb3BlbmVkIGFzIGEgcmVhbAogICAgIHN0YW5kYWxvbmUgSFRNTCBmaWxlIG9uIGFuIGFydGlzdCdzIG93biBkZXZpY2UgKG5vIHNlcnZlciBuZWVkZWQpLiAqLwogIGNvbnN0IHN0b3JhZ2VBZGFwdGVyID0gewogICAgYXN5bmMgZ2V0KGtleSl7CiAgICAgIGlmICh3aW5kb3cuc3RvcmFnZSAmJiB0eXBlb2Ygd2luZG93LnN0b3JhZ2UuZ2V0ID09PSAnZnVuY3Rpb24nKXsKICAgICAgICB0cnkgeyByZXR1cm4gYXdhaXQgd2luZG93LnN0b3JhZ2UuZ2V0KGtleSwgZmFsc2UpOyB9IGNhdGNoKGUpeyByZXR1cm4gbnVsbDsgfQogICAgICB9CiAgICAgIHRyeSB7IGNvbnN0IHYgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpOyByZXR1cm4gdiAhPT0gbnVsbCA/IHsgdmFsdWU6IHYgfSA6IG51bGw7IH0KICAgICAgY2F0Y2goZSl7IHJldHVybiBudWxsOyB9CiAgICB9LAogICAgYXN5bmMgc2V0KGtleSwgdmFsdWUpewogICAgICBpZiAod2luZG93LnN0b3JhZ2UgJiYgdHlwZW9mIHdpbmRvdy5zdG9yYWdlLnNldCA9PT0gJ2Z1bmN0aW9uJyl7CiAgICAgICAgdHJ5IHsgcmV0dXJuIGF3YWl0IHdpbmRvdy5zdG9yYWdlLnNldChrZXksIHZhbHVlLCBmYWxzZSk7IH0gY2F0Y2goZSl7IHJldHVybiBudWxsOyB9CiAgICAgIH0KICAgICAgdHJ5IHsgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCB2YWx1ZSk7IHJldHVybiB7IHZhbHVlIH07IH0gY2F0Y2goZSl7IHJldHVybiBudWxsOyB9CiAgICB9CiAgfTsKICBhc3luYyBmdW5jdGlvbiBzYXZlTWV0YSgpewogICAgdHJ5IHsKICAgICAgYXdhaXQgc3RvcmFnZUFkYXB0ZXIuc2V0KCdhcnRpc3QtZGVjay1tZXRhJywgSlNPTi5zdHJpbmdpZnkoewogICAgICAgIGRlY2tOYW1lOiBlbCgnZGVja05hbWUnKS52YWx1ZSwgYXJ0aXN0TmFtZTogZWwoJ2FydGlzdE5hbWUnKS52YWx1ZSwgcHVyY2hhc2VMaW5rOiBlbCgncHVyY2hhc2VMaW5rJykudmFsdWUsCiAgICAgICAgY2FyZFJhdGlvVzogZWwoJ2NhcmRSYXRpb1cnKS52YWx1ZSwgY2FyZFJhdGlvSDogZWwoJ2NhcmRSYXRpb0gnKS52YWx1ZSwKICAgICAgICB0aGVtZUNvbG9yQTogZWwoJ3RoZW1lQ29sb3JBJykudmFsdWUsIHRoZW1lQ29sb3JCOiBlbCgndGhlbWVDb2xvckInKS52YWx1ZSwgdGhlbWVDb2xvckdvbGQ6IGVsKCd0aGVtZUNvbG9yR29sZCcpLnZhbHVlCiAgICAgIH0pKTsKICAgICAgYXdhaXQgc3RvcmFnZUFkYXB0ZXIuc2V0KCdhcnRpc3QtY2FyZC10ZXh0JywgSlNPTi5zdHJpbmdpZnkoCiAgICAgICAgY2FyZERhdGEubWFwKGMgPT4gKHsgbmFtZTpjLm5hbWUsIHVwOmMudXAsIHJldjpjLnJldiwgaW1nOiBjLmltZyAmJiBjLmltZy5zdGFydHNXaXRoKCdodHRwJykgPyBjLmltZyA6ICcnIH0pKQogICAgICApKTsKICAgIH0gY2F0Y2goZSl7IC8qIG5vbi1mYXRhbCBmb3IgYSBkZW1vICovIH0KICB9CiAgYXN5bmMgZnVuY3Rpb24gbG9hZE1ldGEoKXsKICAgIHRyeSB7CiAgICAgIGNvbnN0IG1ldGEgPSBhd2FpdCBzdG9yYWdlQWRhcHRlci5nZXQoJ2FydGlzdC1kZWNrLW1ldGEnKTsKICAgICAgaWYgKG1ldGEgJiYgbWV0YS52YWx1ZSl7CiAgICAgICAgY29uc3QgbSA9IEpTT04ucGFyc2UobWV0YS52YWx1ZSk7CiAgICAgICAgZWwoJ2RlY2tOYW1lJykudmFsdWUgPSBtLmRlY2tOYW1lIHx8ICcnOwogICAgICAgIGVsKCdhcnRpc3ROYW1lJykudmFsdWUgPSBtLmFydGlzdE5hbWUgfHwgJyc7CiAgICAgICAgZWwoJ3B1cmNoYXNlTGluaycpLnZhbHVlID0gbS5wdXJjaGFzZUxpbmsgfHwgJyc7CiAgICAgICAgZWwoJ2NhcmRSYXRpb1cnKS52YWx1ZSA9IG0uY2FyZFJhdGlvVyB8fCAyOwogICAgICAgIGVsKCdjYXJkUmF0aW9IJykudmFsdWUgPSBtLmNhcmRSYXRpb0ggfHwgMzsKICAgICAgICBlbCgndGhlbWVDb2xvckEnKS52YWx1ZSA9IG0udGhlbWVDb2xvckEgfHwgJyMzM2U2YzQnOwogICAgICAgIGVsKCd0aGVtZUNvbG9yQicpLnZhbHVlID0gbS50aGVtZUNvbG9yQiB8fCAnIzhiNWNmNic7CiAgICAgICAgZWwoJ3RoZW1lQ29sb3JHb2xkJykudmFsdWUgPSBtLnRoZW1lQ29sb3JHb2xkIHx8ICcjZjJjMTRlJzsKICAgICAgfQogICAgfSBjYXRjaChlKXt9CiAgICBhcHBseUNhcmRSYXRpbygpOwogICAgYXBwbHlUaGVtZSgpOwogICAgYXBwbHlEZWNrQmFjaygpOwogICAgdHJ5IHsKICAgICAgY29uc3QgY2FyZFRleHQgPSBhd2FpdCBzdG9yYWdlQWRhcHRlci5nZXQoJ2FydGlzdC1jYXJkLXRleHQnKTsKICAgICAgaWYgKGNhcmRUZXh0ICYmIGNhcmRUZXh0LnZhbHVlKXsKICAgICAgICBjb25zdCBhcnIgPSBKU09OLnBhcnNlKGNhcmRUZXh0LnZhbHVlKTsKICAgICAgICBhcnIuZm9yRWFjaCgoYyxpKSA9PiB7IGlmIChjYXJkRGF0YVtpXSl7IGNhcmREYXRhW2ldLm5hbWUgPSBjLm5hbWU7IGNhcmREYXRhW2ldLnVwID0gYy51cDsgY2FyZERhdGFbaV0ucmV2ID0gYy5yZXY7IGlmIChjLmltZykgY2FyZERhdGFbaV0uaW1nID0gYy5pbWc7IH0gfSk7CiAgICAgIH0KICAgIH0gY2F0Y2goZSl7fQogICAgcmVuZGVyQ2FyZExpc3QoKTsKICB9CiAgWydkZWNrTmFtZScsJ2FydGlzdE5hbWUnLCdwdXJjaGFzZUxpbmsnXS5mb3JFYWNoKGlkID0+IGVsKGlkKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBzYXZlTWV0YSkpOwoKICBlbCgnYnVsa1VwbG9hZEJ0bicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gZWwoJ2J1bGtGaWxlSW5wdXQnKS5jbGljaygpKTsKICBlbCgnYnVsa0ZpbGVJbnB1dCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGZ1bmN0aW9uKGUpewogICAgY29uc3QgZmlsZXMgPSBBcnJheS5mcm9tKGUudGFyZ2V0LmZpbGVzKTsKICAgIGlmICghZmlsZXMubGVuZ3RoKSByZXR1cm47CiAgICBsZXQgbWF0Y2hlZCA9IDA7CiAgICBjb25zdCB1bm1hdGNoZWQgPSBbXTsKICAgIGxldCBwZW5kaW5nID0gZmlsZXMubGVuZ3RoOwoKICAgIGZ1bmN0aW9uIGZpbmlzaEJ1bGsoKXsKICAgICAgcmVuZGVyQ2FyZExpc3QoKTsKICAgICAgc2F2ZU1ldGEoKTsKICAgICAgbGV0IG1zZyA9IGDguJnguLPguYDguILguYnguLLguKrguLPguYDguKPguYfguIggJHttYXRjaGVkfSDguYPguJpgOwogICAgICBpZiAodW5tYXRjaGVkLmxlbmd0aCkgbXNnICs9IGAg4oCUIOC5hOC4oeC5iOC4nuC4muC5gOC4peC4guC5hOC4nuC5iOC4l+C4teC5iOC4luC4ueC4geC4leC5ieC4reC4h+C5g+C4meC4iuC4t+C5iOC4reC5hOC4n+C4peC5jCAke3VubWF0Y2hlZC5sZW5ndGh9IOC5hOC4n+C4peC5jDogJHt1bm1hdGNoZWQuam9pbignLCAnKX1gOwogICAgICBlbCgnYnVsa1Jlc3VsdE1zZycpLnRleHRDb250ZW50ID0gbXNnOwogICAgfQoKICAgIGZpbGVzLmZvckVhY2goZmlsZSA9PiB7CiAgICAgIGNvbnN0IG0gPSBmaWxlLm5hbWUubWF0Y2goLyhcZCspLyk7CiAgICAgIGNvbnN0IG4gPSBtID8gcGFyc2VJbnQobVsxXSwgMTApIDogbnVsbDsKICAgICAgaWYgKG4gPT09IG51bGwgfHwgbiA8IDAgfHwgbiA+IDIxKXsKICAgICAgICB1bm1hdGNoZWQucHVzaChmaWxlLm5hbWUpOwogICAgICAgIHBlbmRpbmctLTsKICAgICAgICBpZiAocGVuZGluZyA9PT0gMCkgZmluaXNoQnVsaygpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICByZWFkZXIub25sb2FkID0gZXYgPT4gewogICAgICAgIGNhcmREYXRhW25dLmltZyA9IGV2LnRhcmdldC5yZXN1bHQ7CiAgICAgICAgbWF0Y2hlZCsrOwogICAgICAgIHBlbmRpbmctLTsKICAgICAgICBpZiAocGVuZGluZyA9PT0gMCkgZmluaXNoQnVsaygpOwogICAgICB9OwogICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTsKICAgIH0pOwogICAgZWwoJ2J1bGtGaWxlSW5wdXQnKS52YWx1ZSA9ICcnOwogIH0pOwoKICBlbCgnZmlsbERlbW9CdG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgIERFTU9fTUVBTklOR1MuZm9yRWFjaCgoZCxpKSA9PiB7IGNhcmREYXRhW2ldLm5hbWUgPSBkLm5hbWU7IGNhcmREYXRhW2ldLnVwID0gZC51cDsgY2FyZERhdGFbaV0ucmV2ID0gZC5yZXY7IH0pOwogICAgcmVuZGVyQ2FyZExpc3QoKTsKICAgIHNhdmVNZXRhKCk7CiAgfSk7CgogIC8qIC0tLS0tLS0tLS0gY2FyZCBsaXN0IChzdGVwIDIpIC0tLS0tLS0tLS0gKi8KICBmdW5jdGlvbiByZW5kZXJDYXJkTGlzdCgpewogICAgY29uc3QgbGlzdCA9IGVsKCdjYXJkLWxpc3QnKTsKICAgIGxpc3QuaW5uZXJIVE1MID0gJyc7CiAgICBsZXQgZG9uZUNvdW50ID0gMDsKICAgIGNhcmREYXRhLmZvckVhY2goKGMsaSkgPT4gewogICAgICBjb25zdCBkb25lID0gISEoYy5pbWcgJiYgYy5uYW1lICYmIGMudXAgJiYgYy5yZXYpOwogICAgICBpZiAoZG9uZSkgZG9uZUNvdW50Kys7CiAgICAgIGNvbnN0IHJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICByb3cuY2xhc3NOYW1lID0gJ2NhcmQtcm93JzsKICAgICAgcm93LmlubmVySFRNTCA9IGAKICAgICAgICA8c3BhbiBjbGFzcz0iaWR4Ij4ke2l9PC9zcGFuPgogICAgICAgIDxkaXYgY2xhc3M9InRodW1iIiBzdHlsZT0iJHtjLmltZyA/IGBiYWNrZ3JvdW5kLWltYWdlOnVybCgnJHtjLmltZ30nKWAgOiAnJ30iPiR7Yy5pbWcgPyAnJyA6ICfinKYnfTwvZGl2PgogICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj4ke2MubmFtZSB8fCAn4Lii4Lix4LiH4LmE4Lih4LmI4LiV4Lix4LmJ4LiH4LiK4Li34LmI4LitJ308L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9InN0YXR1cy1kb3QgJHtkb25lID8gJ2RvbmUnIDogJyd9Ij48L3NwYW4+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuLWdob3N0IiBkYXRhLWVkaXQ9IiR7aX0iPuC5geC4geC5ieC5hOC4gjwvYnV0dG9uPgogICAgICBgOwogICAgICByb3cucXVlcnlTZWxlY3RvcignW2RhdGEtZWRpdF0nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IG9wZW5FZGl0KGkpKTsKICAgICAgbGlzdC5hcHBlbmRDaGlsZChyb3cpOwogICAgfSk7CiAgICBlbCgnY29tcGxldGlvblRleHQnKS50ZXh0Q29udGVudCA9IGDguK3guLHguJvguYLguKvguKXguJTguYHguKXguYnguKcgJHtkb25lQ291bnR9IC8gMjIg4LmD4LiaYDsKICB9CgogIGZ1bmN0aW9uIG9wZW5FZGl0KGkpewogICAgZWRpdGluZ0luZGV4ID0gaTsKICAgIGNvbnN0IGMgPSBjYXJkRGF0YVtpXTsKICAgIGVsKCdlZGl0TW9kYWxUaXRsZScpLnRleHRDb250ZW50ID0gYOC5geC4geC5ieC5hOC4guC5hOC4nuC5iCAjJHtpfWA7CiAgICBlbCgnZWRpdE5hbWUnKS52YWx1ZSA9IGMubmFtZTsKICAgIGVsKCdlZGl0TWVhbmluZ1VwJykudmFsdWUgPSBjLnVwOwogICAgZWwoJ2VkaXRNZWFuaW5nUmV2JykudmFsdWUgPSBjLnJldjsKICAgIGNvbnN0IGR6ID0gZWwoJ2VkaXREcm9wem9uZScpOwogICAgaWYgKGMuaW1nKXsKICAgICAgZHouY2xhc3NOYW1lID0gJ2Ryb3B6b25lIGhhcy1pbWFnZSc7CiAgICAgIGR6LmlubmVySFRNTCA9IGA8aW1nIHNyYz0iJHtjLmltZ30iPmA7CiAgICB9IGVsc2UgewogICAgICBkei5jbGFzc05hbWUgPSAnZHJvcHpvbmUnOwogICAgICBkei50ZXh0Q29udGVudCA9ICfguITguKXguLTguIHguYDguJ7guLfguYjguK3guYDguKXguLfguK3guIHguKPguLnguJsnOwogICAgfQogICAgZWwoJ3ZhbGlkYXRlTXNnJykudGV4dENvbnRlbnQgPSAnJzsKICAgIGVsKCdlZGl0T3ZlcmxheScpLmNsYXNzTGlzdC5hZGQoJ3Nob3cnKTsKICB9CiAgZWwoJ2VkaXRDYW5jZWxCdG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGVsKCdlZGl0T3ZlcmxheScpLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKSk7CiAgZWwoJ2VkaXRPdmVybGF5JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4geyBpZiAoZS50YXJnZXQuaWQgPT09ICdlZGl0T3ZlcmxheScpIGVsKCdlZGl0T3ZlcmxheScpLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTsgfSk7CgogIGVsKCdlZGl0RHJvcHpvbmUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGVsKCdlZGl0RmlsZUlucHV0JykuY2xpY2soKSk7CiAgZWwoJ2VkaXRGaWxlSW5wdXQnKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBmdW5jdGlvbihlKXsKICAgIGNvbnN0IGZpbGUgPSBlLnRhcmdldC5maWxlc1swXTsKICAgIGlmICghZmlsZSkgcmV0dXJuOwogICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihldil7CiAgICAgIGNvbnN0IGRhdGFVcmwgPSBldi50YXJnZXQucmVzdWx0OwogICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTsKICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uKCl7CiAgICAgICAgY29uc3QgdyA9IGltZy5uYXR1cmFsV2lkdGgsIGggPSBpbWcubmF0dXJhbEhlaWdodDsKICAgICAgICBjb25zdCByYXRpbyA9IHcgLyBoOwogICAgICAgIGNvbnN0IHRhcmdldCA9IGNhcmRSYXRpb1cgLyBjYXJkUmF0aW9IOwogICAgICAgIGNvbnN0IG1pblcgPSA3NTA7CiAgICAgICAgY29uc3QgbWluSCA9IE1hdGgucm91bmQobWluVyAqIChjYXJkUmF0aW9IIC8gY2FyZFJhdGlvVykpOwogICAgICAgIGNvbnN0IG1zZyA9IGVsKCd2YWxpZGF0ZU1zZycpOwogICAgICAgIGlmIChNYXRoLmFicyhyYXRpbyAtIHRhcmdldCkgPiAwLjA2KXsKICAgICAgICAgIG1zZy5jbGFzc05hbWUgPSAndmFsaWRhdGUtbXNnIHdhcm4nOwogICAgICAgICAgbXNnLnRleHRDb250ZW50ID0gYOKaoCDguKrguLHguJTguKrguYjguKfguJnguKDguLLguJ4gJHt3fcOXJHtofSDguYTguKHguYjguJXguKPguIcgJHtjYXJkUmF0aW9XfToke2NhcmRSYXRpb0h9IOC4nuC4reC4lOC4tSDigJQg4Lii4Lix4LiH4Lit4Lix4Lib4LmC4Lir4Lil4LiU4LmE4LiU4LmJ4LmB4LiV4LmI4Lig4Liy4Lie4Lit4Liy4LiI4LiW4Li54LiB4LiE4Lij4Lit4Lib4LiV4Lit4LiZ4LmB4Liq4LiU4LiH4Lic4LilYDsKICAgICAgICB9IGVsc2UgaWYgKHcgPCBtaW5XIHx8IGggPCBtaW5IKXsKICAgICAgICAgIG1zZy5jbGFzc05hbWUgPSAndmFsaWRhdGUtbXNnIHdhcm4nOwogICAgICAgICAgbXNnLnRleHRDb250ZW50ID0gYOKaoCDguITguKfguLLguKHguKXguLDguYDguK3guLXguKLguJQgJHt3fcOXJHtofXB4IOC4leC5iOC4s+C4geC4p+C5iOC4suC4l+C4teC5iOC5geC4meC4sOC4meC4syAoJHttaW5XfcOXJHttaW5IfXB4KWA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1zZy5jbGFzc05hbWUgPSAndmFsaWRhdGUtbXNnIG9rJzsKICAgICAgICAgIG1zZy50ZXh0Q29udGVudCA9IGDinJMg4LiC4LiZ4Liy4LiU4Lig4Liy4LieICR7d33DlyR7aH1weCDguJzguYjguLLguJnguJXguLLguKHguKrguYDguJvguIFgOwogICAgICAgIH0KICAgICAgICBjYXJkRGF0YVtlZGl0aW5nSW5kZXhdLmltZyA9IGRhdGFVcmw7CiAgICAgICAgY29uc3QgZHogPSBlbCgnZWRpdERyb3B6b25lJyk7CiAgICAgICAgZHouY2xhc3NOYW1lID0gJ2Ryb3B6b25lIGhhcy1pbWFnZSc7CiAgICAgICAgZHouaW5uZXJIVE1MID0gYDxpbWcgc3JjPSIke2RhdGFVcmx9Ij5gOwogICAgICB9OwogICAgICBpbWcuc3JjID0gZGF0YVVybDsKICAgIH07CiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTsKICB9KTsKCiAgZWwoJ2VkaXRTYXZlQnRuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7CiAgICBjYXJkRGF0YVtlZGl0aW5nSW5kZXhdLm5hbWUgPSBlbCgnZWRpdE5hbWUnKS52YWx1ZS50cmltKCk7CiAgICBjYXJkRGF0YVtlZGl0aW5nSW5kZXhdLnVwID0gZWwoJ2VkaXRNZWFuaW5nVXAnKS52YWx1ZS50cmltKCk7CiAgICBjYXJkRGF0YVtlZGl0aW5nSW5kZXhdLnJldiA9IGVsKCdlZGl0TWVhbmluZ1JldicpLnZhbHVlLnRyaW0oKTsKICAgIGVsKCdlZGl0T3ZlcmxheScpLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTsKICAgIHJlbmRlckNhcmRMaXN0KCk7CiAgICBzYXZlTWV0YSgpOwogIH0pOwoKICAvKiAtLS0tLS0tLS0tIFN0ZXAgNDogcmVhZGVyIHByZXZpZXcgKDEgb3IgMyBjYXJkIGRyYXcgdXNpbmcgdXBsb2FkZWQgZGVjaykgLS0tLS0tLS0tLSAqLwogIGxldCBwcmV2aWV3RGVja09yZGVyID0gW107CiAgbGV0IG1vZGVDb3VudCA9IDE7CiAgbGV0IGlzWWVzTm8gPSBmYWxzZTsKICBsZXQgcGxhY2VkID0gMDsKICBsZXQgZHJhd25TbG90cyA9IHt9OwoKICBmdW5jdGlvbiBzaHVmZmxlQXJyKGFycil7CiAgICBmb3IgKGxldCBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pewogICAgICBjb25zdCBqID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKGkgKyAxKSk7CiAgICAgIFthcnJbaV0sIGFycltqXV0gPSBbYXJyW2pdLCBhcnJbaV1dOwogICAgfQogIH0KCiAgZnVuY3Rpb24gYnVpbGREZWNrUHJldmlldygpewogICAgcmVzZXRQcmV2aWV3KCk7CiAgfQoKICBmdW5jdGlvbiByZXNldFByZXZpZXcoKXsKICAgIHBsYWNlZCA9IDA7CiAgICBkcmF3blNsb3RzID0ge307CiAgICBlbCgndXNlclF1ZXN0aW9uJykudmFsdWUgPSAnJzsKICAgIGVsKCdkZWNrLWFyZWEnKS5jbGFzc0xpc3QucmVtb3ZlKCdkZWNrLWRvbmUnKTsKICAgIGVsKCd5ZXNOb0Fuc3dlcicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICBlbCgneWVzTm9BbnN3ZXInKS50ZXh0Q29udGVudCA9ICcnOwogICAgZWwoJ3JlYWRpbmdTdW1tYXJ5Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgIGVsKCdyZWFkaW5nU3VtbWFyeScpLmlubmVySFRNTCA9ICcnOwogICAgWzAsMSwyXS5mb3JFYWNoKGkgPT4gewogICAgICBjb25zdCBzY2VuZSA9IGVsKCdzY2VuZScgKyBpKTsKICAgICAgc2NlbmUuY2xhc3NMaXN0LnJlbW92ZSgnZmxpcHBlZCcsJ3JldmVyc2VkJyk7CiAgICAgIGVsKCdiYWNrJyArIGkpLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9ICcnOwogICAgICBlbCgnbmFtZScgKyBpKS50ZXh0Q29udGVudCA9ICcnOwogICAgfSk7CiAgICBpZiAobW9kZUNvdW50ID09PSAxKXsKICAgICAgZWwoJ3Nsb3QtY29udGFpbmVyLTAnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICBlbCgnc2xvdC1jb250YWluZXItMicpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgIGVsKCdzbG90LWNvbnRhaW5lci0xJykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JzsKICAgICAgZWwoJ2xhYmVsMScpLnRleHRDb250ZW50ID0gaXNZZXNObyA/ICfguYTguJ7guYjguITguLPguJXguK3guJonIDogJ+C5hOC4nuC5iOC4guC4reC4h+C4hOC4uOC4kyc7CiAgICB9IGVsc2UgewogICAgICBlbCgnc2xvdC1jb250YWluZXItMCcpLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7CiAgICAgIGVsKCdzbG90LWNvbnRhaW5lci0xJykuc3R5bGUuZGlzcGxheSA9ICdmbGV4JzsKICAgICAgZWwoJ3Nsb3QtY29udGFpbmVyLTInKS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnOwogICAgICBlbCgnbGFiZWwwJykudGV4dENvbnRlbnQgPSAn4Lit4LiU4Li14LiVJzsKICAgICAgZWwoJ2xhYmVsMScpLnRleHRDb250ZW50ID0gJ+C4m+C4seC4iOC4iOC4uOC4muC4seC4mSc7CiAgICAgIGVsKCdsYWJlbDInKS50ZXh0Q29udGVudCA9ICfguK3guJnguLLguITguJUnOwogICAgfQogICAgZWwoJ3VubG9jay1zZWN0aW9uJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgIGVsKCdzdGF0dXMtbGluZScpLnRleHRDb250ZW50ID0gaXNZZXNObyA/ICfguYHguJXguLDguYTguJ7guYjguYDguJ7guLfguYjguK3guJTguLnguITguLPguJXguK3guJonIDogKG1vZGVDb3VudCA9PT0gMSA/ICcnIDogJ+C5geC4leC4sOC5hOC4nuC5iCAzIOC4hOC4o+C4seC5ieC4hyDguJXguLLguKHguKXguLPguJTguLHguJonKTsKICAgIGNvbnN0IHZhbGlkSWR4ID0gY2FyZERhdGEubWFwKChjLGkpPT5pKS5maWx0ZXIoaSA9PiBjYXJkRGF0YVtpXS51cCB8fCBjYXJkRGF0YVtpXS5uYW1lKTsKICAgIHByZXZpZXdEZWNrT3JkZXIgPSAodmFsaWRJZHgubGVuZ3RoID8gdmFsaWRJZHggOiBjYXJkRGF0YS5tYXAoKF8saSk9PmkpKS5zbGljZSgpOwogICAgc2h1ZmZsZUFycihwcmV2aWV3RGVja09yZGVyKTsKICAgIHJlbmRlckRlY2tGYW4oKTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlckRlY2tGYW4oKXsKICAgIGNvbnN0IGFyZWEgPSBlbCgnZGVjay1hcmVhJyk7CiAgICBhcmVhLmlubmVySFRNTCA9ICcnOwogICAgaWYgKHBsYWNlZCA+PSBtb2RlQ291bnQpIHJldHVybjsKICAgIGNvbnN0IHRvdGFsID0gTWF0aC5taW4ocHJldmlld0RlY2tPcmRlci5sZW5ndGgsIDIyKTsKICAgIGNvbnN0IG9mZnNldCA9IDksIGNlbnRlciA9ICgodG90YWwtMSkqb2Zmc2V0KS8yOwogICAgZm9yIChsZXQgaT0wO2k8dG90YWw7aSsrKXsKICAgICAgY29uc3QgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBkLmNsYXNzTmFtZSA9ICdkZWNrLWNhcmQnOwogICAgICBjb25zdCB4ID0gKGkqb2Zmc2V0KSAtIGNlbnRlcjsKICAgICAgY29uc3Qgcm90ID0gKGkgLSAodG90YWwtMSkvMikgKiAxLjY7CiAgICAgIGQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoY2FsYygtNTAlICsgJHt4fXB4KSkgcm90YXRlKCR7cm90fWRlZylgOwogICAgICBkLnN0eWxlLnpJbmRleCA9IHRvdGFsIC0gaTsKICAgICAgZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGRyYXdQcmV2aWV3Q2FyZCwgeyBvbmNlOnRydWUgfSk7CiAgICAgIGFyZWEuYXBwZW5kQ2hpbGQoZCk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBkcmF3UHJldmlld0NhcmQoKXsKICAgIGlmIChwbGFjZWQgPj0gbW9kZUNvdW50IHx8ICFwcmV2aWV3RGVja09yZGVyLmxlbmd0aCkgcmV0dXJuOwogICAgY29uc3QgaWR4ID0gcHJldmlld0RlY2tPcmRlci5wb3AoKTsKICAgIGNvbnN0IGMgPSBjYXJkRGF0YVtpZHhdOwogICAgY29uc3QgaXNSZXYgPSBNYXRoLnJhbmRvbSgpIDwgMC41OwogICAgY29uc3Qgc2xvdEluZGV4ID0gbW9kZUNvdW50ID09PSAxID8gMSA6IHBsYWNlZDsKICAgIGNvbnN0IHNjZW5lID0gZWwoJ3NjZW5lJyArIHNsb3RJbmRleCk7CiAgICBjb25zdCBiYWNrRWwgPSBlbCgnYmFjaycgKyBzbG90SW5kZXgpOwogICAgYmFja0VsLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGMuaW1nID8gYHVybCgnJHtjLmltZ30nKWAgOiAnbGluZWFyLWdyYWRpZW50KDE2MGRlZywgcmdiYSgxMzksOTIsMjQ2LDAuNCksIHJnYmEoNTEsMjMwLDE5NiwwLjIpKSc7CiAgICBzY2VuZS5jbGFzc0xpc3QudG9nZ2xlKCdyZXZlcnNlZCcsIGlzUmV2KTsKICAgIHNjZW5lLmNsYXNzTGlzdC5hZGQoJ2ZsaXBwZWQnKTsKICAgIGVsKCduYW1lJyArIHNsb3RJbmRleCkudGV4dENvbnRlbnQgPSAoYy5uYW1lIHx8IGDguYTguJ7guYggIyR7aWR4fWApICsgKGlzUmV2ID8gJyAo4LiB4Lil4Lix4Lia4Lir4Lix4LinKScgOiAnJykgKyAnIOKAlCDguYHguJXguLDguYDguJ7guLfguYjguK3guJTguLnguITguLPguJfguLPguJnguLLguKInOwogICAgYmFja0VsLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJzsKICAgIGJhY2tFbC5vbmNsaWNrID0gKCkgPT4gc2hvd0NhcmRQb3B1cChpZHgsIGlzUmV2KTsKICAgIGRyYXduU2xvdHNbc2xvdEluZGV4XSA9IHsgaWR4LCBpc1JldiB9OwoKICAgIGlmIChpc1llc05vKXsKICAgICAgY29uc3QgYmFubmVyID0gZWwoJ3llc05vQW5zd2VyJyk7CiAgICAgIGJhbm5lci50ZXh0Q29udGVudCA9IGlzUmV2ID8gJ+C5hOC4oeC5iOC5g+C4iuC5iCcgOiAn4LmD4LiK4LmIJzsKICAgICAgYmFubmVyLmNsYXNzTmFtZSA9IGlzUmV2ID8gJ25vJyA6ICd5ZXMnOwogICAgICBiYW5uZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICB9CgogICAgcGxhY2VkKys7CgogICAgaWYgKHBsYWNlZCA8IG1vZGVDb3VudCl7CiAgICAgIHJlbmRlckRlY2tGYW4oKTsKICAgICAgZWwoJ3N0YXR1cy1saW5lJykudGV4dENvbnRlbnQgPSBg4LmA4Lil4Li34Lit4LiB4LmE4Lie4LmI4Lit4Li14LiBICR7bW9kZUNvdW50IC0gcGxhY2VkfSDguYPguJpgOwogICAgfSBlbHNlIHsKICAgICAgZWwoJ3N0YXR1cy1saW5lJykudGV4dENvbnRlbnQgPSAnJzsKICAgICAgZWwoJ2RlY2stYXJlYScpLmNsYXNzTGlzdC5hZGQoJ2RlY2stZG9uZScpOwogICAgICBzZXRUaW1lb3V0KCgpID0+IHsgcmVuZGVyUmVhZGluZ1N1bW1hcnkoKTsgc2hvd1VubG9ja1NlY3Rpb24oKTsgfSwgNTAwKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHJlbmRlclJlYWRpbmdTdW1tYXJ5KCl7CiAgICBjb25zdCBzbG90cyA9IG1vZGVDb3VudCA9PT0gMSA/IFsxXSA6IFswLDEsMl07CiAgICBjb25zdCBsYWJlbE1hcCA9IG1vZGVDb3VudCA9PT0gMSA/IHsxOifguYTguJ7guYjguILguK3guIfguITguLjguJMnfSA6IHswOifguK3guJTguLXguJUnLDE6J+C4m+C4seC4iOC4iOC4uOC4muC4seC4mScsMjon4Lit4LiZ4Liy4LiE4LiVJ307CiAgICBsZXQgaHRtbCA9ICcnOwogICAgY29uc3QgcXVlc3Rpb24gPSBlbCgndXNlclF1ZXN0aW9uJykudmFsdWUudHJpbSgpOwogICAgaWYgKHF1ZXN0aW9uKXsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ic3VtbWFyeS1pdGVtIiBzdHlsZT0iYm9yZGVyLWNvbG9yOnZhcigtLWdyYWQtYik7Ij48cCBjbGFzcz0ic3VtbWFyeS1sYWJlbCI+4LiE4Liz4LiW4Liy4Lih4LiC4Lit4LiH4LiE4Li44LiTPC9wPjxoND4nICsgcXVlc3Rpb24gKyAnPC9oND48L2Rpdj4nOwogICAgfQogICAgc2xvdHMuZm9yRWFjaChpID0+IHsKICAgICAgY29uc3QgaW5mbyA9IGRyYXduU2xvdHNbaV07CiAgICAgIGlmICghaW5mbykgcmV0dXJuOwogICAgICBjb25zdCBjID0gY2FyZERhdGFbaW5mby5pZHhdOwogICAgICBjb25zdCB0aXRsZSA9IChjLm5hbWUgfHwgKCfguYTguJ7guYggIycgKyBpbmZvLmlkeCkpICsgKGluZm8uaXNSZXYgPyAnICjguIHguKXguLHguJrguKvguLHguKcpJyA6ICcnKTsKICAgICAgY29uc3QgbWVhbmluZyA9IChpbmZvLmlzUmV2ID8gYy5yZXYgOiBjLnVwKSB8fCAn4Lii4Lix4LiH4LmE4Lih4LmI4LmE4LiU4LmJ4LmD4Liq4LmI4LiE4Lin4Liy4Lih4Lir4Lih4Liy4Lii4LmE4Lin4LmJ4Liq4Liz4Lir4Lij4Lix4Lia4LmE4Lie4LmI4LmD4Lia4LiZ4Li14LmJJzsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ic3VtbWFyeS1pdGVtIj48cCBjbGFzcz0ic3VtbWFyeS1sYWJlbCI+JyArIGxhYmVsTWFwW2ldICsgJzwvcD4nCiAgICAgICAgKyAnPGg0PicgKyB0aXRsZSArICc8L2g0PjxwPicgKyBtZWFuaW5nICsgJzwvcD48L2Rpdj4nOwogICAgfSk7CiAgICBlbCgncmVhZGluZ1N1bW1hcnknKS5pbm5lckhUTUwgPSBodG1sOwogICAgZWwoJ3JlYWRpbmdTdW1tYXJ5Jykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgfQoKICBmdW5jdGlvbiBzaG93Q2FyZFBvcHVwKGlkeCwgaXNSZXYpewogICAgY29uc3QgYyA9IGNhcmREYXRhW2lkeF07CiAgICBjb25zdCBpbWdFbCA9IGVsKCdjYXJkUG9wdXBJbWcnKTsKICAgIGltZ0VsLnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGMuaW1nID8gYHVybCgnJHtjLmltZ30nKWAgOiAnbGluZWFyLWdyYWRpZW50KDE2MGRlZywgcmdiYSgxMzksOTIsMjQ2LDAuNCksIHJnYmEoNTEsMjMwLDE5NiwwLjIpKSc7CiAgICBpbWdFbC5zdHlsZS5maWx0ZXIgPSBpc1JldiA/ICdncmF5c2NhbGUoODglKSBjb250cmFzdCgxLjA1KSBicmlnaHRuZXNzKDAuODIpJyA6ICdub25lJzsKICAgIGVsKCdjYXJkUG9wdXBUaXRsZScpLnRleHRDb250ZW50ID0gKGMubmFtZSB8fCAn4LmE4Lie4LmIJykgKyAoaXNSZXYgPyAnICjguIHguKXguLHguJrguKvguLHguKcpJyA6ICcnKTsKICAgIGVsKCdjYXJkUG9wdXBNZWFuaW5nJykudGV4dENvbnRlbnQgPSAoaXNSZXYgPyBjLnJldiA6IGMudXApIHx8ICfguKLguLHguIfguYTguKHguYjguYTguJTguYnguYPguKrguYjguITguKfguLLguKHguKvguKHguLLguKLguYTguKfguYnguKrguLPguKvguKPguLHguJrguYTguJ7guYjguYPguJrguJnguLXguYknOwogICAgZWwoJ2NhcmRQb3B1cE92ZXJsYXknKS5jbGFzc0xpc3QuYWRkKCdzaG93Jyk7CiAgfQogIGVsKCdjYXJkUG9wdXBDbG9zZUJ0bicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gZWwoJ2NhcmRQb3B1cE92ZXJsYXknKS5jbGFzc0xpc3QucmVtb3ZlKCdzaG93JykpOwogIGVsKCdjYXJkUG9wdXBPdmVybGF5JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4geyBpZiAoZS50YXJnZXQuaWQgPT09ICdjYXJkUG9wdXBPdmVybGF5JykgZWwoJ2NhcmRQb3B1cE92ZXJsYXknKS5jbGFzc0xpc3QucmVtb3ZlKCdzaG93Jyk7IH0pOwoKICBmdW5jdGlvbiBzaG93VW5sb2NrU2VjdGlvbigpewogICAgZWwoJ3VubG9jay1zZWN0aW9uJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICBjb25zdCBhcnRpc3QgPSBlbCgnYXJ0aXN0TmFtZScpLnZhbHVlIHx8ICfguKjguLTguKXguJvguLTguJknOwogICAgZWwoJ2N0YUFydGlzdE5hbWUnKS50ZXh0Q29udGVudCA9IGFydGlzdDsKICAgIGNvbnN0IGxpbmsgPSBlbCgncHVyY2hhc2VMaW5rJykudmFsdWUudHJpbSgpOwogICAgY29uc3QgYnRuID0gZWwoJ3B1cmNoYXNlTGlua0J0bicpOwogICAgaWYgKGxpbmspewogICAgICBidG4uaHJlZiA9IGxpbmsuc3RhcnRzV2l0aCgnaHR0cCcpID8gbGluayA6ICgnaHR0cHM6Ly8nICsgbGluayk7CiAgICAgIGJ0bi5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7CiAgICB9IGVsc2UgewogICAgICBidG4uc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgIH0KICB9CgogIGVsKCdtb2RlMScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gewogICAgbW9kZUNvdW50ID0gMTsKICAgIGlzWWVzTm8gPSBmYWxzZTsKICAgIGVsKCdtb2RlMScpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgZWwoJ21vZGUzJykuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgICBlbCgnbW9kZVllc05vJykuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgICByZXNldFByZXZpZXcoKTsKICB9KTsKICBlbCgnbW9kZTMnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgIG1vZGVDb3VudCA9IDM7CiAgICBpc1llc05vID0gZmFsc2U7CiAgICBlbCgnbW9kZTMnKS5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTsKICAgIGVsKCdtb2RlMScpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgZWwoJ21vZGVZZXNObycpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpOwogICAgcmVzZXRQcmV2aWV3KCk7CiAgfSk7CiAgZWwoJ21vZGVZZXNObycpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gewogICAgbW9kZUNvdW50ID0gMTsKICAgIGlzWWVzTm8gPSB0cnVlOwogICAgZWwoJ21vZGVZZXNObycpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpOwogICAgZWwoJ21vZGUxJykuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7CiAgICBlbCgnbW9kZTMnKS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTsKICAgIHJlc2V0UHJldmlldygpOwogIH0pOwogIGVsKCdyZXNldFByZXZpZXdCdG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlc2V0UHJldmlldyk7CgogIC8qIC0tLS0tLS0tLS0gYm9vdGggLyBraW9zayBtb2RlIC0tLS0tLS0tLS0KICAgICDguYDguJvguKXguLXguYjguKLguJnguKPguKvguLHguKrguJnguLXguYnguYTguJTguYnguJXguLLguKHguJXguYnguK3guIfguIHguLLguKMg4LmD4LiK4LmJ4LiB4Lix4LiZ4Lil4Li54LiB4LiE4LmJ4Liy4LmA4Lic4Lil4Lit4LiB4LiU4LiB4Lil4Lix4Lia4LmE4Lib4Lir4LiZ4LmJ4Liy4LiV4Lix4LmJ4LiH4LiE4LmI4LiyICovCiAgY29uc3QgS0lPU0tfRVhJVF9QSU4gPSAnMTIzNCc7CiAgbGV0IHNhdmVkSGVyb1RpdGxlID0gJycsIHNhdmVkSGVyb1RhZ2xpbmUgPSAnJzsKCiAgZWwoJ2tpb3NrRW50ZXJCdG4nKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsKICAgIHNhdmVkSGVyb1RpdGxlID0gZWwoJ21haW5UaXRsZScpLnRleHRDb250ZW50OwogICAgc2F2ZWRIZXJvVGFnbGluZSA9IGVsKCdtYWluVGFnbGluZScpLnRleHRDb250ZW50OwogICAgY29uc3QgZGVja1RpdGxlID0gZWwoJ2RlY2tOYW1lJykudmFsdWUudHJpbSgpIHx8ICfguYTguJ7guYjguJfguLLguYLguKPguJXguYwnOwogICAgY29uc3QgYXJ0aXN0ID0gZWwoJ2FydGlzdE5hbWUnKS52YWx1ZS50cmltKCk7CiAgICBlbCgnbWFpblRpdGxlJykudGV4dENvbnRlbnQgPSBkZWNrVGl0bGU7CiAgICBlbCgnbWFpblRhZ2xpbmUnKS50ZXh0Q29udGVudCA9IGFydGlzdCA/IGDguYLguJTguKIgJHthcnRpc3R9YCA6ICcnOwogICAgZWwoJ21haW5UYWdsaW5lJykuc3R5bGUuZGlzcGxheSA9IGFydGlzdCA/ICdibG9jaycgOiAnbm9uZSc7CiAgICBlbCgncGFuZWw0VGl0bGUnKS50ZXh0Q29udGVudCA9ICfguYHguJXguLDguYTguJ7guYjguYDguJ7guLfguYjguK3guJTguLnguJTguKfguIcnOwogICAgZWwoJ3BhbmVsNEhpbnQnKS50ZXh0Q29udGVudCA9ICcnOwogICAgZWwoJ3Rhcm90QXBwU2NvcGUnKS5jbGFzc0xpc3QuYWRkKCdraW9zay1tb2RlJyk7CiAgICBnb1RvU3RlcCgnNCcpOwogIH0pOwoKICBlbCgna2lvc2tFeGl0TGluaycpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gewogICAgY29uc3QgcGluID0gcHJvbXB0KCfguYPguKrguYjguKPguKvguLHguKogNCDguKvguKXguLHguIHguYDguJ7guLfguYjguK3guIHguKXguLHguJrguYTguJvguKvguJnguYnguLLguJXguLHguYnguIfguITguYjguLInKTsKICAgIGlmIChwaW4gPT09IG51bGwpIHJldHVybjsKICAgIGlmIChwaW4gPT09IEtJT1NLX0VYSVRfUElOKXsKICAgICAgZWwoJ3Rhcm90QXBwU2NvcGUnKS5jbGFzc0xpc3QucmVtb3ZlKCdraW9zay1tb2RlJyk7CiAgICAgIGVsKCdtYWluVGl0bGUnKS50ZXh0Q29udGVudCA9IHNhdmVkSGVyb1RpdGxlOwogICAgICBlbCgnbWFpblRhZ2xpbmUnKS50ZXh0Q29udGVudCA9IHNhdmVkSGVyb1RhZ2xpbmU7CiAgICAgIGVsKCdtYWluVGFnbGluZScpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICBlbCgncGFuZWw0VGl0bGUnKS50ZXh0Q29udGVudCA9ICfguJ7guKPguLXguKfguLTguKfguYDguJvguYfguJnguJzguLnguYnguYDguKXguYjguJnguIjguKPguLTguIcnOwogICAgICBlbCgncGFuZWw0SGludCcpLnRleHRDb250ZW50ID0gJ+C4meC4teC5iOC4hOC4t+C4reC4quC4tOC5iOC4h+C4l+C4teC5iOC4peC4ueC4geC4hOC5ieC4suC4guC4reC4h+C4qOC4tOC4peC4m+C4tOC4meC4iOC4sOC5gOC4q+C5h+C4meC5geC4peC4sOC5g+C4iuC5ieC4iOC5iOC4suC4ouC5gOC4h+C4tOC4meC4iOC4o+C4tOC4hyc7CiAgICAgIGdvVG9TdGVwKCcxJyk7CiAgICB9IGVsc2UgewogICAgICBhbGVydCgn4Lij4Lir4Lix4Liq4LmE4Lih4LmI4LiW4Li54LiB4LiV4LmJ4Lit4LiHJyk7CiAgICB9CiAgfSk7CgogIGxvYWRNZXRhKCk7CiAgcmVuZGVyQ2FyZExpc3QoKTsKfSk7