aW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnOwppbXBvcnQgeyBDaGV2cm9uTGVmdCwgQ2hldnJvblJpZ2h0LCBUcmVuZGluZ1VwLCBCYXJDaGFydDQsIFBpZUNoYXJ0LCBEb2xsYXJTaWduLCBCcmllZmNhc2UsIFRhcmdldCB9IGZyb20gJ2x1Y2lkZS1yZWFjdCc7CmltcG9ydCB7IExpbmVDaGFydCwgTGluZSwgWEF4aXMsIFlBeGlzLCBDYXJ0ZXNpYW5HcmlkLCBUb29sdGlwLCBMZWdlbmQsIEJhckNoYXJ0LCBCYXIsIFBpZUNoYXJ0IGFzIFJlY2hhcnRQaWVDaGFydCwgUGllLCBDZWxsLCBSZXNwb25zaXZlQ29udGFpbmVyIH0gZnJvbSAncmVjaGFydHMnOwoKY29uc3QgSW52ZXN0bWVudFBsYW5QcmVzZW50YXRpb24gPSAoKSA9Jmd0OyB7CiAgY29uc3QgW2N1cnJlbnRTbGlkZSwgc2V0Q3VycmVudFNsaWRlXSA9IHVzZVN0YXRlKDApOwogIAogIGNvbnN0IHRvdGFsU2xpZGVzID0gMTI7CiAgCiAgY29uc3QgZ29Ub05leHRTbGlkZSA9ICgpID0mZ3Q7IHsKICAgIHNldEN1cnJlbnRTbGlkZSgocHJldikgPSZndDsgKHByZXYgJmx0OyB0b3RhbFNsaWRlcyAtIDEgPyBwcmV2ICsgMSA6IHByZXYpKTsKICB9OwogIAogIGNvbnN0IGdvVG9QcmV2U2xpZGUgPSAoKSA9Jmd0OyB7CiAgICBzZXRDdXJyZW50U2xpZGUoKHByZXYpID0mZ3Q7IChwcmV2ICZndDsgMCA/IHByZXYgLSAxIDogcHJldikpOwogIH07CiAgCiAgLy8g4LiC4LmJ4Lit4Lih4Li54Lil4Liq4Liz4Lir4Lij4Lix4Lia4LiB4Lij4Liy4Lif4LiV4LmI4Liy4LiH4LmGCiAgY29uc3Qgc2FsYXJ5RGF0YSA9IFsKICAgIHsgYWdlOiAyMywgc2FsYXJ5OiAyNDAwMDAsIHBvc2l0aW9uOiAnRmluYW5jaWFsIEFuYWx5c3QnIH0sCiAgICB7IGFnZTogMjUsIHNhbGFyeTogMjc0Nzc2LCBwb3NpdGlvbjogJ0ZpbmFuY2lhbCBBbmFseXN0JyB9LAogICAgeyBhZ2U6IDMwLCBzYWxhcnk6IDM4NTM5MiwgcG9zaXRpb246ICdTZW5pb3IgRmluYW5jaWFsIEFuYWx5c3QnIH0sCiAgICB7IGFnZTogMzUsIHNhbGFyeTogNDkxODMyLCBwb3NpdGlvbjogJ0ZpbmFuY2UgTWFuYWdlcicgfSwKICAgIHsgYWdlOiA0MCwgc2FsYXJ5OiA2MjY5NDAsIHBvc2l0aW9uOiAnU2VuaW9yIEZpbmFuY2UgTWFuYWdlcicgfSwKICAgIHsgYWdlOiA0NSwgc2FsYXJ5OiA3Mjc0MTYsIHBvc2l0aW9uOiAnRmluYW5jZSBEaXJlY3RvcicgfSwKICAgIHsgYWdlOiA1MCwgc2FsYXJ5OiA4NDMwMDAsIHBvc2l0aW9uOiAnVlAgb2YgRmluYW5jZScgfSwKICAgIHsgYWdlOiA1NSwgc2FsYXJ5OiA5MzA3NDQsIHBvc2l0aW9uOiAnQ0ZPJyB9LAogICAgeyBhZ2U6IDYwLCBzYWxhcnk6IDEwMjc2MDgsIHBvc2l0aW9uOiAnQ0ZPJyB9CiAgXTsKICAKICBjb25zdCBwb3J0Zm9saW9Hcm93dGhEYXRhID0gWwogICAgeyBhZ2U6IDIzLCB2YWx1ZTogMzg4ODAgfSwKICAgIHsgYWdlOiAyNSwgdmFsdWU6IDEyNzA1MyB9LAogICAgeyBhZ2U6IDMwLCB2YWx1ZTogNjUwMDAwIH0sCiAgICB7IGFnZTogMzUsIHZhbHVlOiAxNzAwMDAwIH0sCiAgICB7IGFnZTogNDAsIHZhbHVlOiAzMjAwMDAwIH0sCiAgICB7IGFnZTogNDUsIHZhbHVlOiA1NTAwMDAwIH0sCiAgICB7IGFnZTogNTAsIHZhbHVlOiA3NTAwMDAwIH0sCiAgICB7IGFnZTogNTUsIHZhbHVlOiAxNDAwMDAwMCB9LAogICAgeyBhZ2U6IDYwLCB2YWx1ZTogMjMwMDAwMDAgfQogIF07CiAgCiAgY29uc3QgYWxsb2NhdGlvbkRhdGEgPSBbCiAgICB7IG5hbWU6ICdFVEYnLCB2YWx1ZTogNTAgfSwKICAgIHsgbmFtZTogJ+C4q+C4uOC5ieC4mScsIHZhbHVlOiAyMCB9LAogICAgeyBuYW1lOiAnUkVJVHMnLCB2YWx1ZTogMTAgfSwKICAgIHsgbmFtZTogJ+C4nuC4seC4meC4mOC4muC4seC4leC4oycsIHZhbHVlOiAxMCB9LAogICAgeyBuYW1lOiAn4LiX4Lit4LiHL+C4hOC4o+C4tOC4m+C5guC4lScsIHZhbHVlOiAxMCB9CiAgXTsKICAKICBjb25zdCBleHBlbnNlRGF0YSA9IFsKICAgIHsgbmFtZTogJ+C4hOC5iOC4suC4geC4tOC4meC4reC4ouC4ueC5iCcsIHZhbHVlOiAzMCB9LAogICAgeyBuYW1lOiAn4LiE4LmI4Liy4Lic4LmI4Lit4LiZ4Lia4LmJ4Liy4LiZL+C4o+C4licsIHZhbHVlOiAyMCB9LAogICAgeyBuYW1lOiAn4LiE4LmI4Liy4LmD4LiK4LmJ4LiI4LmI4Liy4Lii4Liq4LmI4Lin4LiZ4LiV4Lix4LinJywgdmFsdWU6IDE1IH0sCiAgICB7IG5hbWU6ICfguITguYjguLLguJvguKPguLDguIHguLHguJnguYHguKXguLDguKrguLjguILguKDguLLguJ4nLCB2YWx1ZTogMTAgfSwKICAgIHsgbmFtZTogJ+C5gOC4h+C4tOC4meC4reC4reC4oeC5geC4peC4sOC4peC4h+C4l+C4uOC4mScsIHZhbHVlOiAxNSB9LAogICAgeyBuYW1lOiAn4Lig4Liy4Lip4Li14LmB4Lil4Liw4LiB4Lit4LiH4LiX4Li44LiZJywgdmFsdWU6IDEwIH0KICBdOwogIAogIGNvbnN0IGNhcmVlclBhdGhEYXRhID0gWwogICAgeyBwb3NpdGlvbjogJ0ZpbmFuY2lhbCBBbmFseXN0JywgYWdlUmFuZ2U6ICcyMy0yOScsIHNhbGFyeTogJzIwLDAwMC0zMCwyMDAg4Lia4Liy4LiXJyB9LAogICAgeyBwb3NpdGlvbjogJ1NlbmlvciBGaW5hbmNpYWwgQW5hbHlzdCcsIGFnZVJhbmdlOiAnMzAtMzQnLCBzYWxhcnk6ICczMiwxMDAtMzksMjAwIOC4muC4suC4lycgfSwKICAgIHsgcG9zaXRpb246ICdGaW5hbmNlIE1hbmFnZXInLCBhZ2VSYW5nZTogJzM1LTM5Jywgc2FsYXJ5OiAnNDEsMDAwLTUwLDAwMCDguJrguLLguJcnIH0sCiAgICB7IHBvc2l0aW9uOiAnU2VuaW9yIEZpbmFuY2UgTWFuYWdlcicsIGFnZVJhbmdlOiAnNDAtNDQnLCBzYWxhcnk6ICc1MiwyMDAtNTgsOTAwIOC4muC4suC4lycgfSwKICAgIHsgcG9zaXRpb246ICdGaW5hbmNlIERpcmVjdG9yJywgYWdlUmFuZ2U6ICc0NS00OScsIHNhbGFyeTogJzYwLDYwMC02OCwzMDAg4Lia4Liy4LiXJyB9LAogICAgeyBwb3NpdGlvbjogJ1ZQIG9mIEZpbmFuY2UnLCBhZ2VSYW5nZTogJzUwLTU0Jywgc2FsYXJ5OiAnNzAsMjAwLTc2LDEwMCDguJrguLLguJcnIH0sCiAgICB7IHBvc2l0aW9uOiAnQ0ZPJywgYWdlUmFuZ2U6ICc1NS02MCcsIHNhbGFyeTogJzc3LDYwMC04NSw2MDAg4Lia4Liy4LiXJyB9CiAgXTsKICAKICBjb25zdCBDT0xPUlMgPSBbJyMwMDg4RkUnLCAnIzAwQzQ5RicsICcjRkZCQjI4JywgJyNGRjgwNDInLCAnIzg4ODRkOCcsICcjODJjYTlkJ107CiAgCiAgY29uc3QgZm9ybWF0TW9uZXkgPSAoYW1vdW50KSA9Jmd0OyB7CiAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KCd0aC1USCcpLmZvcm1hdChhbW91bnQpOwogIH07CiAgCiAgY29uc3QgcmVuZGVyU2xpZGUgPSAoKSA9Jmd0OyB7CiAgICBzd2l0Y2ggKGN1cnJlbnRTbGlkZSkgewogICAgICAvLyDguKrguYTguKXguJTguYzguJfguLXguYggMTog4Lib4LiB4LiZ4Liz4LmA4Liq4LiZ4LitCiAgICAgIGNhc2UgMDoKICAgICAgICByZXR1cm4gKAogICAgICAgICAgJmx0O2RpdiBjbGFzc05hbWU9JnF1b3Q7ZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgaC1mdWxsIHRleHQtY2VudGVyJnF1b3Q7Jmd0OwogICAgICAgICAgICAmbHQ7ZGl2IGNsYXNzTmFtZT0mcXVvdDttYi04JnF1b3Q7Jmd0OwogICAgICAgICAgICAgICZsdDtEb2xsYXJTaWduIHNpemU9ezY0fSBjbGFzc05hbWU9JnF1b3Q7dGV4dC1ibHVlLTYwMCBteC1hdXRvIG1iLTQmcXVvdDsgLyZndDsKICAgICAgICAgICAgJmx0Oy9kaXYmZ3Q7CiAgICAgICAgICAgICZsdDtoMSBjbGFzc05hbWU9JnF1b3Q7dGV4dC00eGwgZm9udC1ib2xkIHRleHQtYmx1ZS04MDAgbWItNCZxdW90OyZndDvguIHguLLguKPguKfguLLguIfguYHguJzguJnguIHguLLguKPguKXguIfguJfguLjguJnguJfguLLguIfguIHguLLguKPguYDguIfguLTguJnguKPguLDguKLguLDguKLguLLguKcmbHQ7L2gxJmd0OwogICAgICAgICAgICAmbHQ7aDIgY2xhc3NOYW1lPSZxdW90O3RleHQtMnhsIHRleHQtYmx1ZS02MDAgbWItMTAmcXVvdDsmZ3Q74LiB4Lil4Lii4Li44LiX4LiY4LmM4LiB4Liy4Lij4Liq4Lij4LmJ4Liy4LiH4LiE4Lin4Liy4Lih4Lih4Lix4LmI4LiH4LiE4Lix4LmI4LiH4LiV4Liy4Lih4LiK4LmI4Lin4LiH4Lit4Liy4Lii4Li44LmB4Lil4Liw4Lij4Liw4LiU4Lix4Lia4Lij4Liy4Lii4LmE4LiU4LmJJmx0Oy9oMiZndDsKICAgICAgICAgICAgJmx0O2RpdiBjbGFzc05hbWU9JnF1b3Q7bXQtMTYmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgJmx0O3AgY2xhc3NOYW1lPSZxdW90O3RleHQtbGcmcXVvdDsmZ3Q74Lin4Lix4LiZ4LiX4Li14LmIIDMxIOC4oeC4teC4meC4suC4hOC4oSAyMDI1Jmx0Oy9wJmd0OwogICAgICAgICAgICAgICZsdDtwIGNsYXNzTmFtZT0mcXVvdDt0ZXh0LWxnIG10LTImcXVvdDsmZ3Q74Lid4LmI4Liy4Lii4Lin4Liy4LiH4LmB4Lic4LiZ4LiB4Liy4Lij4Lil4LiH4LiX4Li44LiZJmx0Oy9wJmd0OwogICAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICk7CiAgICAgIAogICAgICAvLyDguKrguYTguKXguJTguYzguJfguLXguYggMjog4Lia4LiX4LiZ4Liz4LmB4Lil4Liw4Lin4Lix4LiV4LiW4Li44Lib4Lij4Liw4Liq4LiH4LiE4LmMCiAgICAgIGNhc2UgMToKICAgICAgICByZXR1cm4gKAogICAgICAgICAgJmx0O2RpdiBjbGFzc05hbWU9JnF1b3Q7aC1mdWxsJnF1b3Q7Jmd0OwogICAgICAgICAgICAmbHQ7aDIgY2xhc3NOYW1lPSZxdW90O3RleHQtMnhsIGZvbnQtYm9sZCB0ZXh0LWJsdWUtODAwIG1iLTYmcXVvdDsmZ3Q74Lin4Lix4LiV4LiW4Li44Lib4Lij4Liw4Liq4LiH4LiE4LmM4LiB4Liy4Lij4LiZ4Liz4LmA4Liq4LiZ4LitJmx0Oy9oMiZndDsKICAgICAgICAgICAgJmx0O2RpdiBjbGFzc05hbWU9JnF1b3Q7YmctYmx1ZS01MCBwLTYgcm91bmRlZC1sZyBzaGFkb3ctbWQmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgJmx0O3VsIGNsYXNzTmFtZT0mcXVvdDtzcGFjZS15LTQmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7bGkgY2xhc3NOYW1lPSZxdW90O2ZsZXggaXRlbXMtc3RhcnQmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O21yLTQgbXQtMSB0ZXh0LWJsdWUtNjAwJnF1b3Q7Jmd0OyZsdDtUYXJnZXQgc2l6ZT17MjR9IC8mZ3Q7Jmx0Oy9kaXYmZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtwJmd0O+C4meC4s+C5gOC4quC4meC4reC5geC4nOC4meC4geC4suC4o+C4peC4h+C4l+C4uOC4meC4leC4seC5ieC4h+C5geC4leC5iOC4reC4suC4ouC4uCAyMy02MCDguJvguLUmbHQ7L3AmZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7L2xpJmd0OwogICAgICAgICAgICAgICAgJmx0O2xpIGNsYXNzTmFtZT0mcXVvdDtmbGV4IGl0ZW1zLXN0YXJ0JnF1b3Q7Jmd0OwogICAgICAgICAgICAgICAgICAmbHQ7ZGl2IGNsYXNzTmFtZT0mcXVvdDttci00IG10LTEgdGV4dC1ibHVlLTYwMCZxdW90OyZndDsmbHQ7UGllQ2hhcnQgc2l6ZT17MjR9IC8mZ3Q7Jmx0Oy9kaXYmZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtwJmd0O+C4p+C4tOC5gOC4hOC4o+C4suC4sOC4q+C5jOC4o+C4ueC4m+C5geC4muC4muC4geC4suC4o+C4iOC4seC4lOC4quC4o+C4o+C5gOC4h+C4tOC4meC4peC4h+C4l+C4uOC4meC5g+C4meC4quC4tOC4meC4l+C4o+C4seC4nuC4ouC5jOC4m+C4o+C4sOC5gOC4oOC4l+C4leC5iOC4suC4h+C5hiZsdDsvcCZndDsKICAgICAgICAgICAgICAgICZsdDsvbGkmZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7bGkgY2xhc3NOYW1lPSZxdW90O2ZsZXggaXRlbXMtc3RhcnQmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O21yLTQgbXQtMSB0ZXh0LWJsdWUtNjAwJnF1b3Q7Jmd0OyZsdDtUcmVuZGluZ1VwIHNpemU9ezI0fSAvJmd0OyZsdDsvZGl2Jmd0OwogICAgICAgICAgICAgICAgICAmbHQ7cCZndDvguYHguKrguJTguIfguIHguLLguKPguYDguJXguLTguJrguYLguJXguILguK3guIfguJ7guK3guKPguYzguJXguYLguJ/guKXguLTguYLguK3guYHguKXguLDguITguKfguLLguKHguKHguLHguYjguIfguITguLHguYjguIfguKPguLDguKLguLDguKLguLLguKcmbHQ7L3AmZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7L2xpJmd0OwogICAgICAgICAgICAgICAgJmx0O2xpIGNsYXNzTmFtZT0mcXVvdDtmbGV4IGl0ZW1zLXN0YXJ0JnF1b3Q7Jmd0OwogICAgICAgICAgICAgICAgICAmbHQ7ZGl2IGNsYXNzTmFtZT0mcXVvdDttci00IG10LTEgdGV4dC1ibHVlLTYwMCZxdW90OyZndDsmbHQ7QmFyQ2hhcnQ0IHNpemU9ezI0fSAvJmd0OyZsdDsvZGl2Jmd0OwogICAgICAgICAgICAgICAgICAmbHQ7cCZndDvguJnguLPguYDguKrguJnguK3guIHguKXguKLguLjguJfguJjguYzguIHguLLguKPguJrguKPguLTguKvguLLguKPguKPguLLguKLguYTguJTguYnguYHguKXguLDguKPguLLguKLguIjguYjguLLguKImbHQ7L3AmZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7L2xpJmd0OwogICAgICAgICAgICAgICZsdDsvdWwmZ3Q7CiAgICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICAgICAmbHQ7ZGl2IGNsYXNzTmFtZT0mcXVvdDttdC04IHAtNCBiZy15ZWxsb3ctNTAgYm9yZGVyLWwtNCBib3JkZXIteWVsbG93LTQwMCByb3VuZGVkJnF1b3Q7Jmd0OwogICAgICAgICAgICAgICZsdDtwIGNsYXNzTmFtZT0mcXVvdDt0ZXh0LWxnJnF1b3Q7Jmd0O+C4geC4suC4o+C4p+C4suC4h+C5geC4nOC4meC4geC4suC4o+C4peC4h+C4l+C4uOC4meC4l+C4teC5iOC4lOC4teC4iOC4sOC4iuC5iOC4p+C4ouC5g+C4q+C5ieC4hOC4uOC4k+C4quC4o+C5ieC4suC4h+C4hOC4p+C4suC4oeC4oeC4seC5iOC4h+C4hOC4seC5iOC4h+C5hOC4lOC5ieC4reC4ouC5iOC4suC4h+C4oeC4teC4m+C4o+C4sOC4quC4tOC4l+C4mOC4tOC4oOC4suC4nuC5geC4peC4sOC4muC4o+C4o+C4peC4uOC5gOC4m+C5ieC4suC4q+C4oeC4suC4ouC4l+C4suC4h+C4geC4suC4o+C5gOC4h+C4tOC4meC5g+C4meC4o+C4sOC4ouC4sOC4ouC4suC4pyZsdDsvcCZndDsKICAgICAgICAgICAgJmx0Oy9kaXYmZ3Q7CiAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICApOwogICAgICAKICAgICAgLy8g4Liq4LmE4Lil4LiU4LmM4LiX4Li14LmIIDM6IOC4oOC4suC4nuC4o+C4p+C4oeC4guC4reC4h+C4guC5ieC4reC4oeC4ueC4pQogICAgICBjYXNlIDI6CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O2gtZnVsbCZxdW90OyZndDsKICAgICAgICAgICAgJmx0O2gyIGNsYXNzTmFtZT0mcXVvdDt0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1ibHVlLTgwMCBtYi02JnF1b3Q7Jmd0O+C4oOC4suC4nuC4o+C4p+C4oeC4geC4suC4o+C4p+C4suC4h+C5geC4nOC4meC4geC4suC4o+C5gOC4h+C4tOC4mSZsdDsvaDImZ3Q7CiAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O21iLTQmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgJmx0O3AgY2xhc3NOYW1lPSZxdW90O21iLTQmcXVvdDsmZ3Q74LiE4Lin4Liy4Lih4Liq4Lix4Lih4Lie4Lix4LiZ4LiY4LmM4Lij4Liw4Lir4Lin4LmI4Liy4LiH4Lit4Liy4Lii4Li44LiB4Lix4Lia4Lij4Liw4LiU4Lix4Lia4LmA4LiH4Li04LiZ4LmA4LiU4Li34Lit4LiZIOC5geC4peC4sOC4geC4suC4o+C5gOC4leC4tOC4muC5guC4leC4guC4reC4h+C4leC4s+C5geC4q+C4meC5iOC4h+C4h+C4suC4mSZsdDsvcCZndDsKICAgICAgICAgICAgICAmbHQ7ZGl2IGNsYXNzTmFtZT0mcXVvdDtoLTY0JnF1b3Q7Jmd0OwogICAgICAgICAgICAgICAgJmx0O1Jlc3BvbnNpdmVDb250YWluZXIgd2lkdGg9JnF1b3Q7MTAwJSZxdW90OyBoZWlnaHQ9JnF1b3Q7MTAwJSZxdW90OyZndDsKICAgICAgICAgICAgICAgICAgJmx0O0xpbmVDaGFydAogICAgICAgICAgICAgICAgICAgIGRhdGE9e3NhbGFyeURhdGF9CiAgICAgICAgICAgICAgICAgICAgbWFyZ2luPXt7IHRvcDogNSwgcmlnaHQ6IDMwLCBsZWZ0OiAyMCwgYm90dG9tOiA1IH19CiAgICAgICAgICAgICAgICAgICZndDsKICAgICAgICAgICAgICAgICAgICAmbHQ7Q2FydGVzaWFuR3JpZCBzdHJva2VEYXNoYXJyYXk9JnF1b3Q7MyAzJnF1b3Q7IC8mZ3Q7CiAgICAgICAgICAgICAgICAgICAgJmx0O1hBeGlzIGRhdGFLZXk9JnF1b3Q7YWdlJnF1b3Q7IC8mZ3Q7CiAgICAgICAgICAgICAgICAgICAgJmx0O1lBeGlzIC8mZ3Q7CiAgICAgICAgICAgICAgICAgICAgJmx0O1Rvb2x0aXAgZm9ybWF0dGVyPXsodmFsdWUpID0mZ3Q7IFtgJHtmb3JtYXRNb25leSh2YWx1ZSl9IOC4muC4suC4l2AsICfguYDguIfguLTguJnguYDguJTguLfguK3guJnguJXguYjguK3guJvguLUnXX0gLyZndDsKICAgICAgICAgICAgICAgICAgICAmbHQ7TGVnZW5kIC8mZ3Q7CiAgICAgICAgICAgICAgICAgICAgJmx0O0xpbmUgdHlwZT0mcXVvdDttb25vdG9uZSZxdW90OyBkYXRhS2V5PSZxdW90O3NhbGFyeSZxdW90OyBzdHJva2U9JnF1b3Q7Izg4ODRkOCZxdW90OyBhY3RpdmVEb3Q9e3sgcjogOCB9fSBuYW1lPSZxdW90O+C5gOC4h+C4tOC4meC5gOC4lOC4t+C4reC4meC4leC5iOC4reC4m+C4tSAo4Lia4Liy4LiXKSZxdW90OyAvJmd0OwogICAgICAgICAgICAgICAgICAmbHQ7L0xpbmVDaGFydCZndDsKICAgICAgICAgICAgICAgICZsdDsvUmVzcG9uc2l2ZUNvbnRhaW5lciZndDsKICAgICAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICAgICAgJmx0Oy9kaXYmZ3Q7CiAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O210LTYgcC00IGJnLWJsdWUtNTAgcm91bmRlZC1sZyZxdW90OyZndDsKICAgICAgICAgICAgICAmbHQ7aDMgY2xhc3NOYW1lPSZxdW90O2ZvbnQtc2VtaWJvbGQgbWItMiZxdW90OyZndDvguIHguLLguKPguYDguJXguLTguJrguYLguJXguILguK3guIfguJXguLPguYHguKvguJnguYjguIfguIfguLLguJk6Jmx0Oy9oMyZndDsKICAgICAgICAgICAgICAmbHQ7cCZndDtGaW5hbmNpYWwgQW5hbHlzdCAmcmFycjsgU2VuaW9yIEZpbmFuY2lhbCBBbmFseXN0ICZyYXJyOyBGaW5hbmNlIE1hbmFnZXIgJnJhcnI7IFNlbmlvciBGaW5hbmNlIE1hbmFnZXIgJnJhcnI7IEZpbmFuY2UgRGlyZWN0b3IgJnJhcnI7IFZQIG9mIEZpbmFuY2UgJnJhcnI7IENGTyZsdDsvcCZndDsKICAgICAgICAgICAgJmx0Oy9kaXYmZ3Q7CiAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICApOwogICAgICAKICAgICAgLy8g4Liq4LmE4Lil4LiU4LmM4LiX4Li14LmIIDQ6IOC4geC4suC4o+C4iOC4seC4lOC4quC4o+C4o+C4o+C4suC4ouC5hOC4lOC5iQogICAgICBjYXNlIDM6CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O2gtZnVsbCZxdW90OyZndDsKICAgICAgICAgICAgJmx0O2gyIGNsYXNzTmFtZT0mcXVvdDt0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1ibHVlLTgwMCBtYi02JnF1b3Q7Jmd0O+C4geC4suC4o+C4iOC4seC4lOC4quC4o+C4o+C4o+C4suC4ouC5hOC4lOC5ieC4m+C4o+C4sOC4iOC4s+C4m+C4tSZsdDsvaDImZ3Q7CiAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O2dyaWQgZ3JpZC1jb2xzLTIgZ2FwLTQmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgJmx0O2RpdiBjbGFzc05hbWU9JnF1b3Q7aC02NCZxdW90OyZndDsKICAgICAgICAgICAgICAgICZsdDtSZXNwb25zaXZlQ29udGFpbmVyIHdpZHRoPSZxdW90OzEwMCUmcXVvdDsgaGVpZ2h0PSZxdW90OzEwMCUmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtSZWNoYXJ0UGllQ2hhcnQmZ3Q7CiAgICAgICAgICAgICAgICAgICAgJmx0O1BpZQogICAgICAgICAgICAgICAgICAgICAgZGF0YT17ZXhwZW5zZURhdGF9CiAgICAgICAgICAgICAgICAgICAgICBjeD0mcXVvdDs1MCUmcXVvdDsKICAgICAgICAgICAgICAgICAgICAgIGN5PSZxdW90OzUwJSZxdW90OwogICAgICAgICAgICAgICAgICAgICAgbGFiZWxMaW5lPXtmYWxzZX0KICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXsoeyBuYW1lLCBwZXJjZW50IH0pID0mZ3Q7IGAke25hbWV9OiAkeyhwZXJjZW50ICogMTAwKS50b0ZpeGVkKDApfSVgfQogICAgICAgICAgICAgICAgICAgICAgb3V0ZXJSYWRpdXM9ezgwfQogICAgICAgICAgICAgICAgICAgICAgZmlsbD0mcXVvdDsjODg4NGQ4JnF1b3Q7CiAgICAgICAgICAgICAgICAgICAgICBkYXRhS2V5PSZxdW90O3ZhbHVlJnF1b3Q7CiAgICAgICAgICAgICAgICAgICAgJmd0OwogICAgICAgICAgICAgICAgICAgICAge2V4cGVuc2VEYXRhLm1hcCgoZW50cnksIGluZGV4KSA9Jmd0OyAoCiAgICAgICAgICAgICAgICAgICAgICAgICZsdDtDZWxsIGtleT17YGNlbGwtJHtpbmRleH1gfSBmaWxsPXtDT0xPUlNbaW5kZXggJSBDT0xPUlMubGVuZ3RoXX0gLyZndDsKICAgICAgICAgICAgICAgICAgICAgICkpfQogICAgICAgICAgICAgICAgICAgICZsdDsvUGllJmd0OwogICAgICAgICAgICAgICAgICAgICZsdDtUb29sdGlwIC8mZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDsvUmVjaGFydFBpZUNoYXJ0Jmd0OwogICAgICAgICAgICAgICAgJmx0Oy9SZXNwb25zaXZlQ29udGFpbmVyJmd0OwogICAgICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICAgICAgICZsdDtkaXYmZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7aDMgY2xhc3NOYW1lPSZxdW90O2ZvbnQtc2VtaWJvbGQgbWItMyZxdW90OyZndDvguKrguLHguJTguKrguYjguKfguJnguIHguLLguKPguIjguLHguJTguKrguKPguKPguKPguLLguKLguYTguJTguYkmbHQ7L2gzJmd0OwogICAgICAgICAgICAgICAgJmx0O3VsIGNsYXNzTmFtZT0mcXVvdDtzcGFjZS15LTImcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgICAgIHtleHBlbnNlRGF0YS5tYXAoKGl0ZW0sIGluZGV4KSA9Jmd0OyAoCiAgICAgICAgICAgICAgICAgICAgJmx0O2xpIGtleT17aW5kZXh9IGNsYXNzTmFtZT0mcXVvdDtmbGV4IGl0ZW1zLWNlbnRlciZxdW90OyZndDsKICAgICAgICAgICAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O3ctNCBoLTQgbXItMiZxdW90OyBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IENPTE9SU1tpbmRleCAlIENPTE9SUy5sZW5ndGhdIH19Jmd0OyZsdDsvZGl2Jmd0OwogICAgICAgICAgICAgICAgICAgICAgJmx0O3NwYW4mZ3Q7e2l0ZW0ubmFtZX06IHtpdGVtLnZhbHVlfSUmbHQ7L3NwYW4mZ3Q7CiAgICAgICAgICAgICAgICAgICAgJmx0Oy9saSZndDsKICAgICAgICAgICAgICAgICAgKSl9CiAgICAgICAgICAgICAgICAmbHQ7L3VsJmd0OwogICAgICAgICAgICAgICAgJmx0O2RpdiBjbGFzc05hbWU9JnF1b3Q7bXQtNCBwLTMgYmctYmx1ZS01MCByb3VuZGVkJnF1b3Q7Jmd0OwogICAgICAgICAgICAgICAgICAmbHQ7cCZndDvguIHguLLguKPguIjguLHguJTguKrguKPguKPguKPguLLguKLguYTguJTguYnguK3guKLguYjguLLguIfguKrguKHguJTguLjguKXguIrguYjguKfguKLguYPguKvguYnguKHguLXguYDguIfguLTguJnguYDguJ7guLXguKLguIfguJ7guK3guKrguLPguKvguKPguLHguJrguIHguLLguKPguYPguIrguYnguIjguYjguLLguKLguJvguLHguIjguIjguLjguJrguLHguJnguYHguKXguLDguIHguLLguKPguKrguKPguYnguLLguIfguITguKfguLLguKHguKHguLHguYjguIfguITguLHguYjguIfguYPguJnguK3guJnguLLguITguJUmbHQ7L3AmZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICAgICAgJmx0Oy9kaXYmZ3Q7CiAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICApOwogICAgICAKICAgICAgLy8g4Liq4LmE4Lil4LiU4LmM4LiX4Li14LmIIDU6IOC4geC4peC4ouC4uOC4l+C4mOC5jOC4geC4suC4o+C4peC4h+C4l+C4uOC4mQogICAgICBjYXNlIDQ6CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O2gtZnVsbCZxdW90OyZndDsKICAgICAgICAgICAgJmx0O2gyIGNsYXNzTmFtZT0mcXVvdDt0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1ibHVlLTgwMCBtYi02JnF1b3Q7Jmd0O+C4geC4suC4o+C4iOC4seC4lOC4quC4o+C4o+C5gOC4h+C4tOC4meC4peC4h+C4l+C4uOC4mSZsdDsvaDImZ3Q7CiAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O2dyaWQgZ3JpZC1jb2xzLTIgZ2FwLTQmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgJmx0O2RpdiBjbGFzc05hbWU9JnF1b3Q7aC02NCZxdW90OyZndDsKICAgICAgICAgICAgICAgICZsdDtSZXNwb25zaXZlQ29udGFpbmVyIHdpZHRoPSZxdW90OzEwMCUmcXVvdDsgaGVpZ2h0PSZxdW90OzEwMCUmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtSZWNoYXJ0UGllQ2hhcnQmZ3Q7CiAgICAgICAgICAgICAgICAgICAgJmx0O1BpZQogICAgICAgICAgICAgICAgICAgICAgZGF0YT17YWxsb2NhdGlvbkRhdGF9CiAgICAgICAgICAgICAgICAgICAgICBjeD0mcXVvdDs1MCUmcXVvdDsKICAgICAgICAgICAgICAgICAgICAgIGN5PSZxdW90OzUwJSZxdW90OwogICAgICAgICAgICAgICAgICAgICAgbGFiZWxMaW5lPXtmYWxzZX0KICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXsoeyBuYW1lLCBwZXJjZW50IH0pID0mZ3Q7IGAke25hbWV9OiAkeyhwZXJjZW50ICogMTAwKS50b0ZpeGVkKDApfSVgfQogICAgICAgICAgICAgICAgICAgICAgb3V0ZXJSYWRpdXM9ezgwfQogICAgICAgICAgICAgICAgICAgICAgZmlsbD0mcXVvdDsjODg4NGQ4JnF1b3Q7CiAgICAgICAgICAgICAgICAgICAgICBkYXRhS2V5PSZxdW90O3ZhbHVlJnF1b3Q7CiAgICAgICAgICAgICAgICAgICAgJmd0OwogICAgICAgICAgICAgICAgICAgICAge2FsbG9jYXRpb25EYXRhLm1hcCgoZW50cnksIGluZGV4KSA9Jmd0OyAoCiAgICAgICAgICAgICAgICAgICAgICAgICZsdDtDZWxsIGtleT17YGNlbGwtJHtpbmRleH1gfSBmaWxsPXtDT0xPUlNbaW5kZXggJSBDT0xPUlMubGVuZ3RoXX0gLyZndDsKICAgICAgICAgICAgICAgICAgICAgICkpfQogICAgICAgICAgICAgICAgICAgICZsdDsvUGllJmd0OwogICAgICAgICAgICAgICAgICAgICZsdDtUb29sdGlwIC8mZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDsvUmVjaGFydFBpZUNoYXJ0Jmd0OwogICAgICAgICAgICAgICAgJmx0Oy9SZXNwb25zaXZlQ29udGFpbmVyJmd0OwogICAgICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICAgICAgICZsdDtkaXYmZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7aDMgY2xhc3NOYW1lPSZxdW90O2ZvbnQtc2VtaWJvbGQgbWItMyZxdW90OyZndDvguKrguLHguJTguKrguYjguKfguJnguIHguLLguKPguKXguIfguJfguLjguJnguYPguJnguKrguLTguJnguJfguKPguLHguJ7guKLguYzguJXguYjguLLguIfguYYmbHQ7L2gzJmd0OwogICAgICAgICAgICAgICAgJmx0O3VsIGNsYXNzTmFtZT0mcXVvdDtzcGFjZS15LTImcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgICAgIHthbGxvY2F0aW9uRGF0YS5tYXAoKGl0ZW0sIGluZGV4KSA9Jmd0OyAoCiAgICAgICAgICAgICAgICAgICAgJmx0O2xpIGtleT17aW5kZXh9IGNsYXNzTmFtZT0mcXVvdDtmbGV4IGl0ZW1zLWNlbnRlciZxdW90OyZndDsKICAgICAgICAgICAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O3ctNCBoLTQgbXItMiZxdW90OyBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IENPTE9SU1tpbmRleCAlIENPTE9SUy5sZW5ndGhdIH19Jmd0OyZsdDsvZGl2Jmd0OwogICAgICAgICAgICAgICAgICAgICAgJmx0O3NwYW4mZ3Q7e2l0ZW0ubmFtZX06IHtpdGVtLnZhbHVlfSUmbHQ7L3NwYW4mZ3Q7CiAgICAgICAgICAgICAgICAgICAgJmx0Oy9saSZndDsKICAgICAgICAgICAgICAgICAgKSl9CiAgICAgICAgICAgICAgICAmbHQ7L3VsJmd0OwogICAgICAgICAgICAgICAgJmx0O2RpdiBjbGFzc05hbWU9JnF1b3Q7bXQtNCBwLTMgYmctYmx1ZS01MCByb3VuZGVkJnF1b3Q7Jmd0OwogICAgICAgICAgICAgICAgICAmbHQ7cCZndDvguIHguLLguKPguIHguKPguLDguIjguLLguKLguIHguLLguKPguKXguIfguJfguLjguJnguIrguYjguKfguKLguKXguJTguITguKfguLLguKHguYDguKrguLXguYjguKLguIfguYHguKXguLDguYDguJ7guLTguYjguKHguYLguK3guIHguLLguKrguYPguJnguIHguLLguKPguYTguJTguYnguKPguLHguJrguJzguKXguJXguK3guJrguYHguJfguJnguJfguLXguYjguKHguLHguYjguJnguITguIfguYPguJnguKPguLDguKLguLDguKLguLLguKcmbHQ7L3AmZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICAgICAgJmx0Oy9kaXYmZ3Q7CiAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICApOwogICAgICAKICAgICAgLy8g4Liq4LmE4Lil4LiU4LmM4LiX4Li14LmIIDY6IOC4geC4suC4o+C5gOC4leC4tOC4muC5guC4leC4guC4reC4h+C4o+C4suC4ouC5hOC4lOC5ieC5geC4peC4sOC4leC4s+C5geC4q+C4meC5iOC4hwogICAgICBjYXNlIDU6CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O2gtZnVsbCZxdW90OyZndDsKICAgICAgICAgICAgJmx0O2gyIGNsYXNzTmFtZT0mcXVvdDt0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1ibHVlLTgwMCBtYi02JnF1b3Q7Jmd0O+C5gOC4quC5ieC4meC4l+C4suC4h+C4hOC4p+C4suC4oeC4geC5ieC4suC4p+C4q+C4meC5ieC4suC5g+C4meC4reC4suC4iuC4teC4nuC5geC4peC4sOC4o+C4suC4ouC5hOC4lOC5iSZsdDsvaDImZ3Q7CiAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O292ZXJmbG93LWF1dG8gaC02NCBtYi02JnF1b3Q7Jmd0OwogICAgICAgICAgICAgICZsdDt0YWJsZSBjbGFzc05hbWU9JnF1b3Q7bWluLXctZnVsbCBiZy13aGl0ZSBib3JkZXImcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7dGhlYWQgY2xhc3NOYW1lPSZxdW90O2JnLWJsdWUtMTAwJnF1b3Q7Jmd0OwogICAgICAgICAgICAgICAgICAmbHQ7dHImZ3Q7CiAgICAgICAgICAgICAgICAgICAgJmx0O3RoIGNsYXNzTmFtZT0mcXVvdDtweS0yIHB4LTQgYm9yZGVyJnF1b3Q7Jmd0O+C4leC4s+C5geC4q+C4meC5iOC4hyZsdDsvdGgmZ3Q7CiAgICAgICAgICAgICAgICAgICAgJmx0O3RoIGNsYXNzTmFtZT0mcXVvdDtweS0yIHB4LTQgYm9yZGVyJnF1b3Q7Jmd0O+C4iuC5iOC4p+C4h+C4reC4suC4ouC4uCZsdDsvdGgmZ3Q7CiAgICAgICAgICAgICAgICAgICAgJmx0O3RoIGNsYXNzTmFtZT0mcXVvdDtweS0yIHB4LTQgYm9yZGVyJnF1b3Q7Jmd0O+C5gOC4h+C4tOC4meC5gOC4lOC4t+C4reC4meC5guC4lOC4ouC4m+C4o+C4sOC4oeC4suC4kyZsdDsvdGgmZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDsvdHImZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7L3RoZWFkJmd0OwogICAgICAgICAgICAgICAgJmx0O3Rib2R5Jmd0OwogICAgICAgICAgICAgICAgICB7Y2FyZWVyUGF0aERhdGEubWFwKChpdGVtLCBpbmRleCkgPSZndDsgKAogICAgICAgICAgICAgICAgICAgICZsdDt0ciBrZXk9e2luZGV4fSBjbGFzc05hbWU9e2luZGV4ICUgMiA9PT0gMCA/ICdiZy1ncmF5LTUwJyA6ICdiZy13aGl0ZSd9Jmd0OwogICAgICAgICAgICAgICAgICAgICAgJmx0O3RkIGNsYXNzTmFtZT0mcXVvdDtweS0yIHB4LTQgYm9yZGVyIGZvbnQtbWVkaXVtJnF1b3Q7Jmd0O3tpdGVtLnBvc2l0aW9ufSZsdDsvdGQmZ3Q7CiAgICAgICAgICAgICAgICAgICAgICAmbHQ7dGQgY2xhc3NOYW1lPSZxdW90O3B5LTIgcHgtNCBib3JkZXIgdGV4dC1jZW50ZXImcXVvdDsmZ3Q7e2l0ZW0uYWdlUmFuZ2V9Jmx0Oy90ZCZndDsKICAgICAgICAgICAgICAgICAgICAgICZsdDt0ZCBjbGFzc05hbWU9JnF1b3Q7cHktMiBweC00IGJvcmRlciB0ZXh0LXJpZ2h0JnF1b3Q7Jmd0O3tpdGVtLnNhbGFyeX0mbHQ7L3RkJmd0OwogICAgICAgICAgICAgICAgICAgICZsdDsvdHImZ3Q7CiAgICAgICAgICAgICAgICAgICkpfQogICAgICAgICAgICAgICAgJmx0Oy90Ym9keSZndDsKICAgICAgICAgICAgICAmbHQ7L3RhYmxlJmd0OwogICAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICAgICAgJmx0O2RpdiBjbGFzc05hbWU9JnF1b3Q7cC00IGJnLWJsdWUtNTAgcm91bmRlZC1sZyZxdW90OyZndDsKICAgICAgICAgICAgICAmbHQ7cCZndDsmbHQ7c3BhbiBjbGFzc05hbWU9JnF1b3Q7Zm9udC1tZWRpdW0mcXVvdDsmZ3Q74LiC4LmJ4Lit4Liq4Lix4LiH4LmA4LiB4LiVOiZsdDsvc3BhbiZndDsg4Lit4Lix4LiV4Lij4Liy4LiB4Liy4Lij4LmA4LiV4Li04Lia4LmC4LiV4LiC4Lit4LiH4LmA4LiH4Li04LiZ4LmA4LiU4Li34Lit4LiZ4LiI4Liw4Liq4Li54LiH4LmD4LiZ4LiK4LmI4Lin4LiH4LiV4LmJ4LiZ4LiC4Lit4LiH4Lit4Liy4LiK4Li14LieICg3LTglIOC4leC5iOC4reC4m+C4tSkg4LmB4Lil4Liw4LiE4LmI4Lit4Lii4LmGIOC4peC4lOC4peC4h+C5g+C4meC4iuC5iOC4p+C4h+C4m+C4peC4suC4oiAoMi0zJSDguJXguYjguK3guJvguLUpIOC5geC4leC5iOC4kOC4suC4meC5gOC4h+C4tOC4meC5gOC4lOC4t+C4reC4meC4l+C4teC5iOC4quC4ueC4h+C4guC4tuC5ieC4meC4l+C4s+C5g+C4q+C5ieC4o+C4suC4ouC5hOC4lOC5ieC4o+C4p+C4oeC4ouC4seC4h+C4hOC4h+C5gOC4nuC4tOC5iOC4oeC4guC4tuC5ieC4meC4reC4ouC5iOC4suC4h+C4oeC4teC4meC4seC4ouC4quC4s+C4hOC4seC4jSZsdDsvcCZndDsKICAgICAgICAgICAgJmx0Oy9kaXYmZ3Q7CiAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICApOwogICAgICAKICAgICAgLy8g4Liq4LmE4Lil4LiU4LmM4LiX4Li14LmIIDc6IOC4geC4suC4o+C5gOC4leC4tOC4muC5guC4leC4guC4reC4h+C4o+C4suC4ouC5hOC4lOC5ieC5geC4peC4sOC4leC4s+C5geC4q+C4meC5iOC4hyAo4LiV4LmI4LitKQogICAgICBjYXNlIDY6CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O2gtZnVsbCZxdW90OyZndDsKICAgICAgICAgICAgJmx0O2gyIGNsYXNzTmFtZT0mcXVvdDt0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1ibHVlLTgwMCBtYi02JnF1b3Q7Jmd0O+C4geC4suC4o+C5gOC4leC4tOC4muC5guC4leC4guC4reC4h+C4o+C4suC4ouC5hOC4lOC5ieC4leC4suC4oeC4iuC5iOC4p+C4h+C4reC4suC4ouC4uCZsdDsvaDImZ3Q7CiAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O2gtNjQgbWItNiZxdW90OyZndDsKICAgICAgICAgICAgICAmbHQ7UmVzcG9uc2l2ZUNvbnRhaW5lciB3aWR0aD0mcXVvdDsxMDAlJnF1b3Q7IGhlaWdodD0mcXVvdDsxMDAlJnF1b3Q7Jmd0OwogICAgICAgICAgICAgICAgJmx0O0JhckNoYXJ0CiAgICAgICAgICAgICAgICAgIGRhdGE9e3NhbGFyeURhdGF9CiAgICAgICAgICAgICAgICAgIG1hcmdpbj17eyB0b3A6IDUsIHJpZ2h0OiAzMCwgbGVmdDogMjAsIGJvdHRvbTogNSB9fQogICAgICAgICAgICAgICAgJmd0OwogICAgICAgICAgICAgICAgICAmbHQ7Q2FydGVzaWFuR3JpZCBzdHJva2VEYXNoYXJyYXk9JnF1b3Q7MyAzJnF1b3Q7IC8mZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtYQXhpcyBkYXRhS2V5PSZxdW90O2FnZSZxdW90OyAvJmd0OwogICAgICAgICAgICAgICAgICAmbHQ7WUF4aXMgLyZndDsKICAgICAgICAgICAgICAgICAgJmx0O1Rvb2x0aXAgZm9ybWF0dGVyPXsodmFsdWUpID0mZ3Q7IFtgJHtmb3JtYXRNb25leSh2YWx1ZSl9IOC4muC4suC4l2AsICfguYDguIfguLTguJnguYDguJTguLfguK3guJnguJXguYjguK3guJvguLUnXX0gLyZndDsKICAgICAgICAgICAgICAgICAgJmx0O0xlZ2VuZCAvJmd0OwogICAgICAgICAgICAgICAgICAmbHQ7QmFyIGRhdGFLZXk9JnF1b3Q7c2FsYXJ5JnF1b3Q7IG5hbWU9JnF1b3Q74LmA4LiH4Li04LiZ4LmA4LiU4Li34Lit4LiZ4LiV4LmI4Lit4Lib4Li1ICjguJrguLLguJcpJnF1b3Q7IGZpbGw9JnF1b3Q7Izg4ODRkOCZxdW90OyAvJmd0OwogICAgICAgICAgICAgICAgJmx0Oy9CYXJDaGFydCZndDsKICAgICAgICAgICAgICAmbHQ7L1Jlc3BvbnNpdmVDb250YWluZXImZ3Q7CiAgICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICAgICAmbHQ7ZGl2IGNsYXNzTmFtZT0mcXVvdDtncmlkIGdyaWQtY29scy0zIGdhcC00IG10LTQmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgJmx0O2RpdiBjbGFzc05hbWU9JnF1b3Q7cC00IGJnLWJsdWUtNTAgcm91bmRlZC1sZyB0ZXh0LWNlbnRlciZxdW90OyZndDsKICAgICAgICAgICAgICAgICZsdDtwIGNsYXNzTmFtZT0mcXVvdDtmb250LW1lZGl1bSZxdW90OyZndDvguIrguYjguKfguIfguJXguYnguJnguK3guLLguIrguLXguJ4gKDIzLTM1IOC4m+C4tSkmbHQ7L3AmZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7cCZndDvguK3guLHguJXguKPguLLguYDguJXguLTguJrguYLguJU6IDUtOCUg4LiV4LmI4Lit4Lib4Li1Jmx0Oy9wJmd0OwogICAgICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O3AtNCBiZy1ncmVlbi01MCByb3VuZGVkLWxnIHRleHQtY2VudGVyJnF1b3Q7Jmd0OwogICAgICAgICAgICAgICAgJmx0O3AgY2xhc3NOYW1lPSZxdW90O2ZvbnQtbWVkaXVtJnF1b3Q7Jmd0O+C4iuC5iOC4p+C4h+C4geC4peC4suC4h+C4reC4suC4iuC4teC4niAoMzYtNDUg4Lib4Li1KSZsdDsvcCZndDsKICAgICAgICAgICAgICAgICZsdDtwJmd0O+C4reC4seC4leC4o+C4suC5gOC4leC4tOC4muC5guC4lTogMy01JSDguJXguYjguK3guJvguLUmbHQ7L3AmZ3Q7CiAgICAgICAgICAgICAgJmx0Oy9kaXYmZ3Q7CiAgICAgICAgICAgICAgJmx0O2RpdiBjbGFzc05hbWU9JnF1b3Q7cC00IGJnLXllbGxvdy01MCByb3VuZGVkLWxnIHRleHQtY2VudGVyJnF1b3Q7Jmd0OwogICAgICAgICAgICAgICAgJmx0O3AgY2xhc3NOYW1lPSZxdW90O2ZvbnQtbWVkaXVtJnF1b3Q7Jmd0O+C4iuC5iOC4p+C4h+C4m+C4peC4suC4ouC4reC4suC4iuC4teC4niAoNDYtNjAg4Lib4Li1KSZsdDsvcCZndDsKICAgICAgICAgICAgICAgICZsdDtwJmd0O+C4reC4seC4leC4o+C4suC5gOC4leC4tOC4muC5guC4lTogMi0zJSDguJXguYjguK3guJvguLUmbHQ7L3AmZ3Q7CiAgICAgICAgICAgICAgJmx0Oy9kaXYmZ3Q7CiAgICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICAgJmx0Oy9kaXYmZ3Q7CiAgICAgICAgKTsKICAgICAgCiAgICAgIC8vIOC4quC5hOC4peC4lOC5jOC4l+C4teC5iCA4OiDguIHguLLguKPguYDguJXguLTguJrguYLguJXguILguK3guIfguJ7guK3guKPguYzguJXguIHguLLguKPguKXguIfguJfguLjguJkKICAgICAgY2FzZSA3OgogICAgICAgIHJldHVybiAoCiAgICAgICAgICAmbHQ7ZGl2IGNsYXNzTmFtZT0mcXVvdDtoLWZ1bGwmcXVvdDsmZ3Q7CiAgICAgICAgICAgICZsdDtoMiBjbGFzc05hbWU9JnF1b3Q7dGV4dC0yeGwgZm9udC1ib2xkIHRleHQtYmx1ZS04MDAgbWItNiZxdW90OyZndDvguIHguLLguKPguYDguJXguLTguJrguYLguJXguILguK3guIfguJ7guK3guKPguYzguJXguIHguLLguKPguKXguIfguJfguLjguJkmbHQ7L2gyJmd0OwogICAgICAgICAgICAmbHQ7ZGl2IGNsYXNzTmFtZT0mcXVvdDtoLTY0IG1iLTYmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgJmx0O1Jlc3BvbnNpdmVDb250YWluZXIgd2lkdGg9JnF1b3Q7MTAwJSZxdW90OyBoZWlnaHQ9JnF1b3Q7MTAwJSZxdW90OyZndDsKICAgICAgICAgICAgICAgICZsdDtMaW5lQ2hhcnQKICAgICAgICAgICAgICAgICAgZGF0YT17cG9ydGZvbGlvR3Jvd3RoRGF0YX0KICAgICAgICAgICAgICAgICAgbWFyZ2luPXt7IHRvcDogNSwgcmlnaHQ6IDMwLCBsZWZ0OiAyMCwgYm90dG9tOiA1IH19CiAgICAgICAgICAgICAgICAmZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtDYXJ0ZXNpYW5HcmlkIHN0cm9rZURhc2hhcnJheT0mcXVvdDszIDMmcXVvdDsgLyZndDsKICAgICAgICAgICAgICAgICAgJmx0O1hBeGlzIGRhdGFLZXk9JnF1b3Q7YWdlJnF1b3Q7IC8mZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtZQXhpcyAvJmd0OwogICAgICAgICAgICAgICAgICAmbHQ7VG9vbHRpcCBmb3JtYXR0ZXI9eyh2YWx1ZSkgPSZndDsgW2Ake2Zvcm1hdE1vbmV5KHZhbHVlKX0g4Lia4Liy4LiXYCwgJ+C4oeC4ueC4peC4hOC5iOC4suC4nuC4reC4o+C5jOC4lSddfSAvJmd0OwogICAgICAgICAgICAgICAgICAmbHQ7TGVnZW5kIC8mZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtMaW5lIHR5cGU9JnF1b3Q7bW9ub3RvbmUmcXVvdDsgZGF0YUtleT0mcXVvdDt2YWx1ZSZxdW90OyBzdHJva2U9JnF1b3Q7IzAwQzQ5RiZxdW90OyBhY3RpdmVEb3Q9e3sgcjogOCB9fSBuYW1lPSZxdW90O+C4oeC4ueC4peC4hOC5iOC4suC4nuC4reC4o+C5jOC4leC4quC4sOC4quC4oSAo4Lia4Liy4LiXKSZxdW90OyAvJmd0OwogICAgICAgICAgICAgICAgJmx0Oy9MaW5lQ2hhcnQmZ3Q7CiAgICAgICAgICAgICAgJmx0Oy9SZXNwb25zaXZlQ29udGFpbmVyJmd0OwogICAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICAgICAgJmx0O2RpdiBjbGFzc05hbWU9JnF1b3Q7cC00IGJnLWdyZWVuLTUwIHJvdW5kZWQtbGcmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgJmx0O3AgY2xhc3NOYW1lPSZxdW90O2ZvbnQtbWVkaXVtIG1iLTImcXVvdDsmZ3Q74LiC4LmJ4Lit4Liq4Lix4LiH4LmA4LiB4LiV4Liq4Liz4LiE4Lix4LiNOiZsdDsvcCZndDsKICAgICAgICAgICAgICAmbHQ7cCZndDvguKHguLnguKXguITguYjguLLguJ7guK3guKPguYzguJXguIHguLLguKPguKXguIfguJfguLjguJnguKHguLXguIHguLLguKPguYDguJXguLTguJrguYLguJXguYHguJrguJrguIHguYnguLLguKfguIHguKPguLDguYLguJTguJTguYPguJnguIrguYjguKfguIfguK3guLLguKLguLggNDUtNjAg4Lib4Li1IOC4i+C4tuC5iOC4h+C5gOC4m+C5h+C4meC4nOC4peC4oeC4suC4iOC4suC4geC4geC4suC4o+C4quC4sOC4quC4oeC5gOC4h+C4tOC4meC4peC4h+C4l+C4uOC4meC4reC4ouC5iOC4suC4h+C4leC5iOC4reC5gOC4meC4t+C5iOC4reC4h+C4o+C4p+C4oeC4geC4seC4muC4nOC4peC4leC4reC4muC5geC4l+C4meC4l+C4teC5iOC4l+C4muC4leC5ieC4mSAoQ29tcG91bmQgRWZmZWN0KSDguJfguLXguYjguIrguLHguJTguYDguIjguJnguKHguLLguIHguILguLbguYnguJnguYDguKHguLfguYjguK3guYDguKfguKXguLLguJzguYjguLLguJnguYTguJsmbHQ7L3AmZ3Q7CiAgICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICAgJmx0Oy9kaXYmZ3Q7CiAgICAgICAgKTsKICAgICAgCiAgICAgIC8vIOC4quC5hOC4peC4lOC5jOC4l+C4teC5iCA5OiDguIHguLLguKPguYDguJXguLTguJrguYLguJXguILguK3guIfguJ7guK3guKPguYzguJXguIHguLLguKPguKXguIfguJfguLjguJkgKOC4leC5iOC4rSkKICAgICAgY2FzZSA4OgogICAgICAgIHJldHVybiAoCiAgICAgICAgICAmbHQ7ZGl2IGNsYXNzTmFtZT0mcXVvdDtoLWZ1bGwmcXVvdDsmZ3Q7CiAgICAgICAgICAgICZsdDtoMiBjbGFzc05hbWU9JnF1b3Q7dGV4dC0yeGwgZm9udC1ib2xkIHRleHQtYmx1ZS04MDAgbWItNiZxdW90OyZndDvguKHguLnguKXguITguYjguLLguJ7guK3guKPguYzguJXguKrguLDguKrguKHguJXguLLguKHguIrguYjguKfguIfguK3guLLguKLguLjguKrguLPguITguLHguI0mbHQ7L2gyJmd0OwogICAgICAgICAgICAmbHQ7ZGl2IGNsYXNzTmFtZT0mcXVvdDtncmlkIGdyaWQtY29scy0yIGdhcC02JnF1b3Q7Jmd0OwogICAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O2NvbC1zcGFuLTIgbWItNCZxdW90OyZndDsKICAgICAgICAgICAgICAgICZsdDtwIGNsYXNzTmFtZT0mcXVvdDttYi0yJnF1b3Q7Jmd0O+C4oeC4ueC4peC4hOC5iOC4suC4nuC4reC4o+C5jOC4leC4geC4suC4o+C4peC4h+C4l+C4uOC4meC5gOC4leC4tOC4muC5guC4leC5geC4muC4muC4l+C4p+C4teC4hOC4ueC4k+C4lOC5ieC4p+C4ouC4reC4seC4leC4o+C4suC4nOC4peC4leC4reC4muC5geC4l+C4meC5gOC4ieC4peC4teC5iOC4oiA4JSDguJXguYjguK3guJvguLUmbHQ7L3AmZ3Q7CiAgICAgICAgICAgICAgJmx0Oy9kaXYmZ3Q7CiAgICAgICAgICAgICAgJmx0O2RpdiBjbGFzc05hbWU9JnF1b3Q7c3BhY2UteS00JnF1b3Q7Jmd0OwogICAgICAgICAgICAgICAgJmx0O2RpdiBjbGFzc05hbWU9JnF1b3Q7cC00IGJnLWJsdWUtNTAgcm91bmRlZC1sZyZxdW90OyZndDsKICAgICAgICAgICAgICAgICAgJmx0O2gzIGNsYXNzTmFtZT0mcXVvdDtmb250LXNlbWlib2xkIHRleHQtbGcgbWItMiZxdW90OyZndDvguK3guLLguKLguLggMzAg4Lib4Li1Jmx0Oy9oMyZndDsKICAgICAgICAgICAgICAgICAgJmx0O3AgY2xhc3NOYW1lPSZxdW90O3RleHQteGwgdGV4dC1ibHVlLTcwMCBmb250LWJvbGQmcXVvdDsmZ3Q7e2Zvcm1hdE1vbmV5KDY1MDAwMCl9IOC4muC4suC4lyZsdDsvcCZndDsKICAgICAgICAgICAgICAgICAgJmx0O3AgY2xhc3NOYW1lPSZxdW90O3RleHQtc20gbXQtMSZxdW90OyZndDvguIrguYjguKfguIfguYDguKPguLTguYjguKHguJXguYnguJnguIHguLLguKPguKrguLDguKrguKHguITguKfguLLguKHguKHguLHguYjguIfguITguLHguYjguIcmbHQ7L3AmZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O3AtNCBiZy1ibHVlLTUwIHJvdW5kZWQtbGcmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtoMyBjbGFzc05hbWU9JnF1b3Q7Zm9udC1zZW1pYm9sZCB0ZXh0LWxnIG1iLTImcXVvdDsmZ3Q74Lit4Liy4Lii4Li4IDQwIOC4m+C4tSZsdDsvaDMmZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtwIGNsYXNzTmFtZT0mcXVvdDt0ZXh0LXhsIHRleHQtYmx1ZS03MDAgZm9udC1ib2xkJnF1b3Q7Jmd0O3tmb3JtYXRNb25leSgzMjAwMDAwKX0g4Lia4Liy4LiXJmx0Oy9wJmd0OwogICAgICAgICAgICAgICAgICAmbHQ7cCBjbGFzc05hbWU9JnF1b3Q7dGV4dC1zbSBtdC0xJnF1b3Q7Jmd0O+C4geC4suC4o+C5gOC4leC4tOC4muC5guC4leC4guC4reC4h+C4nuC4reC4o+C5jOC4leC5gOC4o+C4tOC5iOC4oeC4oeC4teC4meC4seC4ouC4quC4s+C4hOC4seC4jSZsdDsvcCZndDsKICAgICAgICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O3NwYWNlLXktNCZxdW90OyZndDsKICAgICAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O3AtNCBiZy1ibHVlLTUwIHJvdW5kZWQtbGcmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtoMyBjbGFzc05hbWU9JnF1b3Q7Zm9udC1zZW1pYm9sZCB0ZXh0LWxnIG1iLTImcXVvdDsmZ3Q74Lit4Liy4Lii4Li4IDUwIOC4m+C4tSZsdDsvaDMmZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtwIGNsYXNzTmFtZT0mcXVvdDt0ZXh0LXhsIHRleHQtYmx1ZS03MDAgZm9udC1ib2xkJnF1b3Q7Jmd0O3tmb3JtYXRNb25leSg3NTAwMDAwKX0g4Lia4Liy4LiXJmx0Oy9wJmd0OwogICAgICAgICAgICAgICAgICAmbHQ7cCBjbGFzc05hbWU9JnF1b3Q7dGV4dC1zbSBtdC0xJnF1b3Q7Jmd0O+C4nOC4peC4guC4reC4h+C4geC4suC4o+C4peC4h+C4l+C4uOC4meC4o+C4sOC4ouC4sOC4ouC4suC4p+C5gOC4o+C4tOC5iOC4oeC4iuC4seC4lOC5gOC4iOC4mSZsdDsvcCZndDsKICAgICAgICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICAgICAgICAgJmx0O2RpdiBjbGFzc05hbWU9JnF1b3Q7cC00IGJnLWJsdWUtNTAgcm91bmRlZC1sZyZxdW90OyZndDsKICAgICAgICAgICAgICAgICAgJmx0O2gzIGNsYXNzTmFtZT0mcXVvdDtmb250LXNlbWlib2xkIHRleHQtbGcgbWItMiZxdW90OyZndDvguK3guLLguKLguLggNjAg4Lib4Li1Jmx0Oy9oMyZndDsKICAgICAgICAgICAgICAgICAgJmx0O3AgY2xhc3NOYW1lPSZxdW90O3RleHQteGwgdGV4dC1ibHVlLTcwMCBmb250LWJvbGQmcXVvdDsmZ3Q7e2Zvcm1hdE1vbmV5KDIzMDAwMDAwKX0g4Lia4Liy4LiXJmx0Oy9wJmd0OwogICAgICAgICAgICAgICAgICAmbHQ7cCBjbGFzc05hbWU9JnF1b3Q7dGV4dC1zbSBtdC0xJnF1b3Q7Jmd0O+C5gOC4m+C5ieC4suC4q+C4oeC4suC4ouC4hOC4p+C4suC4oeC4oeC4seC5iOC4h+C4hOC4seC5iOC4h+C4geC5iOC4reC4meC5gOC4geC4qeC4teC4ouC4kyZsdDsvcCZndDsKICAgICAgICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICk7CiAgICAgIAogICAgICAvLyDguKrguYTguKXguJTguYzguJfguLXguYggMTA6IOC4iOC4uOC4lOC5gOC4m+C4peC4teC5iOC4ouC4meC4l+C4suC4h+C4geC4suC4o+C5gOC4h+C4tOC4meC4l+C4teC5iOC4quC4s+C4hOC4seC4jQogICAgICBjYXNlIDk6CiAgICAgICAgcmV0dXJuICgKICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O2gtZnVsbCZxdW90OyZndDsKICAgICAgICAgICAgJmx0O2gyIGNsYXNzTmFtZT0mcXVvdDt0ZXh0LTJ4bCBmb250LWJvbGQgdGV4dC1ibHVlLTgwMCBtYi02JnF1b3Q7Jmd0O+C4iOC4uOC4lOC5gOC4m+C4peC4teC5iOC4ouC4meC4quC4s+C4hOC4seC4jeC5g+C4meC5gOC4quC5ieC4meC4l+C4suC4h+C4geC4suC4o+C5gOC4h+C4tOC4mSZsdDsvaDImZ3Q7CiAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O3NwYWNlLXktNCZxdW90OyZndDsKICAgICAgICAgICAgICAmbHQ7ZGl2IGNsYXNzTmFtZT0mcXVvdDtwLTQgYmctYmx1ZS01MCByb3VuZGVkLWxnIGJvcmRlci1sLTQgYm9yZGVyLWJsdWUtNjAwIGZsZXgmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7ZGl2IGNsYXNzTmFtZT0mcXVvdDt0ZXh0LWNlbnRlciBtci02IGZsZXgtc2hyaW5rLTAmcXVvdDsmZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtoMyBjbGFzc05hbWU9JnF1b3Q7dGV4dC1sZyBmb250LWJvbGQmcXVvdDsmZ3Q74Lit4Liy4Lii4Li4IDM1IOC4m+C4tSZsdDsvaDMmZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtCcmllZmNhc2Ugc2l6ZT17MzJ9IGNsYXNzTmFtZT0mcXVvdDt0ZXh0LWJsdWUtNjAwIG14LWF1dG8gbXktMiZxdW90OyAvJmd0OwogICAgICAgICAgICAgICAgJmx0Oy9kaXYmZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7ZGl2Jmd0OwogICAgICAgICAgICAgICAgICAmbHQ7cCBjbGFzc05hbWU9JnF1b3Q7Zm9udC1tZWRpdW0mcXVvdDsmZ3Q74LiB4Liy4Lij4LmA4Lil4Li34LmI4Lit4LiZ4LiV4Liz4LmB4Lir4LiZ4LmI4LiH4LmA4Lib4LmH4LiZIEZpbmFuY2UgTWFuYWdlciZsdDsvcCZndDsKICAgICAgICAgICAgICAgICAgJmx0O3AmZ3Q74Lie4Lit4Lij4LmM4LiV4Lil4LiH4LiX4Li44LiZ4Lih4Li54Lil4LiE4LmI4LiyIDEuNyDguKXguYnguLLguJnguJrguLLguJcmbHQ7L3AmZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtwIGNsYXNzTmFtZT0mcXVvdDt0ZXh0LXNtIHRleHQtZ3JheS02MDAgbXQtMSZxdW90OyZndDvguYDguIfguLTguJnguYDguJTguLfguK3guJnguYDguJ7guLTguYjguKHguILguLbguYnguJnguYDguJvguYfguJkgNDEsMDAwIOC4muC4suC4ly/guYDguJTguLfguK3guJkmbHQ7L3AmZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICAgICAgICAKICAgICAgICAgICAgICAmbHQ7ZGl2IGNsYXNzTmFtZT0mcXVvdDtwLTQgYmctZ3JlZW4tNTAgcm91bmRlZC1sZyBib3JkZXItbC00IGJvcmRlci1ncmVlbi02MDAgZmxleCZxdW90OyZndDsKICAgICAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O3RleHQtY2VudGVyIG1yLTYgZmxleC1zaHJpbmstMCZxdW90OyZndDsKICAgICAgICAgICAgICAgICAgJmx0O2gzIGNsYXNzTmFtZT0mcXVvdDt0ZXh0LWxnIGZvbnQtYm9sZCZxdW90OyZndDvguK3guLLguKLguLggNDUg4Lib4Li1Jmx0Oy9oMyZndDsKICAgICAgICAgICAgICAgICAgJmx0O0JyaWVmY2FzZSBzaXplPXszMn0gY2xhc3NOYW1lPSZxdW90O3RleHQtZ3JlZW4tNjAwIG14LWF1dG8gbXktMiZxdW90OyAvJmd0OwogICAgICAgICAgICAgICAgJmx0Oy9kaXYmZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7ZGl2Jmd0OwogICAgICAgICAgICAgICAgICAmbHQ7cCBjbGFzc05hbWU9JnF1b3Q7Zm9udC1tZWRpdW0mcXVvdDsmZ3Q74LiB4Liy4Lij4LmA4Lil4Li34LmI4Lit4LiZ4LiV4Liz4LmB4Lir4LiZ4LmI4LiH4LmA4Lib4LmH4LiZIEZpbmFuY2UgRGlyZWN0b3ImbHQ7L3AmZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtwJmd0O+C4nuC4reC4o+C5jOC4leC4peC4h+C4l+C4uOC4meC4oeC4ueC4peC4hOC5iOC4siA1LjUg4Lil4LmJ4Liy4LiZ4Lia4Liy4LiXJmx0Oy9wJmd0OwogICAgICAgICAgICAgICAgICAmbHQ7cCBjbGFzc05hbWU9JnF1b3Q7dGV4dC1zbSB0ZXh0LWdyYXktNjAwIG10LTEmcXVvdDsmZ3Q74LmA4LiH4Li04LiZ4LmA4LiU4Li34Lit4LiZ4LmA4Lie4Li04LmI4Lih4LiC4Li24LmJ4LiZ4LmA4Lib4LmH4LiZIDYwLDYwMCDguJrguLLguJcv4LmA4LiU4Li34Lit4LiZJmx0Oy9wJmd0OwogICAgICAgICAgICAgICAgJmx0Oy9kaXYmZ3Q7CiAgICAgICAgICAgICAgJmx0Oy9kaXYmZ3Q7CiAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgJmx0O2RpdiBjbGFzc05hbWU9JnF1b3Q7cC00IGJnLXllbGxvdy01MCByb3VuZGVkLWxnIGJvcmRlci1sLTQgYm9yZGVyLXllbGxvdy02MDAgZmxleCZxdW90OyZndDsKICAgICAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O3RleHQtY2VudGVyIG1yLTYgZmxleC1zaHJpbmstMCZxdW90OyZndDsKICAgICAgICAgICAgICAgICAgJmx0O2gzIGNsYXNzTmFtZT0mcXVvdDt0ZXh0LWxnIGZvbnQtYm9sZCZxdW90OyZndDvguK3guLLguKLguLggNTUg4Lib4Li1Jmx0Oy9oMyZndDsKICAgICAgICAgICAgICAgICAgJmx0O0JyaWVmY2FzZSBzaXplPXszMn0gY2xhc3NOYW1lPSZxdW90O3RleHQteWVsbG93LTYwMCBteC1hdXRvIG15LTImcXVvdDsgLyZndDsKICAgICAgICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICAgICAgICAgJmx0O2RpdiZndDsKICAgICAgICAgICAgICAgICAgJmx0O3AgY2xhc3NOYW1lPSZxdW90O2ZvbnQtbWVkaXVtJnF1b3Q7Jmd0O+C4geC4suC4o+C5gOC4peC4t+C5iOC4reC4meC4leC4s+C5geC4q+C4meC5iOC4h+C5gOC4m+C5h+C4mSBDRk8mbHQ7L3AmZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtwJmd0O+C4nuC4reC4o+C5jOC4leC4peC4h+C4l+C4uOC4meC4oeC4ueC4peC4hOC5iOC4siAxNCDguKXguYnguLLguJnguJrguLLguJcmbHQ7L3AmZ3Q7CiAgICAgICAgICAgICAgICAgICZsdDtwIGNsYXNzTmFtZT0mcXVvdDt0ZXh0LXNtIHRleHQtZ3JheS02MDAgbXQtMSZxdW90OyZndDvguYDguIfguLTguJnguYDguJTguLfguK3guJnguYDguJ7guLTguYjguKHguILguLbguYnguJnguYDguJvguYfguJkgNzcsNjAwIOC4muC4suC4ly/guYDguJTguLfguK3guJkmbHQ7L3AmZ3Q7CiAgICAgICAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICAgICAgICAKICAgICAgICAgICAgICAmbHQ7ZGl2IGNsYXNzTmFtZT0mcXVvdDtwLTQgYmctcHVycGxlLTUwIHJvdW5kZWQtbGcgYm9yZGVyLWwtNCBib3JkZXItcHVycGxlLTYwMCBmbGV4JnF1b3Q7Jmd0OwogICAgICAgICAgICAgICAgJmx0O2RpdiBjbGFzc05hbWU9JnF1b3Q7dGV4dC1jZW50ZXIgbXItNiBmbGV4LXNocmluay0wJnF1b3Q7Jmd0OwogICAgICAgICAgICAgICAgICAmbHQ7aDMgY2xhc3NOYW1lPSZxdW90O3RleHQtbGcgZm9udC1ib2xkJnF1b3Q7Jmd0O+C4reC4suC4ouC4uCA2MCDguJvguLUmbHQ7L2gzJmd0OwogICAgICAgICAgICAgICAgICAmbHQ7RG9sbGFyU2lnbiBzaXplPXszMn0gY2xhc3NOYW1lPSZxdW90O3RleHQtcHVycGxlLTYwMCBteC1hdXRvIG15LTImcXVvdDsgLyZndDsKICAgICAgICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICAgICAgICAgJmx0O2RpdiZndDsKICAgICAgICAgICAgICAgICAgJmx0O3AgY2xhc3NOYW1lPSZxdW90O2ZvbnQtbWVkaXVtJnF1b3Q7Jmd0O+C5gOC4geC4qeC4teC4ouC4k+C4reC4suC4ouC4uCZsdDsvcCZndDsKICAgICAgICAgICAgICAgICAgJmx0O3AmZ3Q74Lie4Lit4Lij4LmM4LiV4Lil4LiH4LiX4Li44LiZ4Lih4Li54Lil4LiE4LmI4LiyIDIzIOC4peC5ieC4suC4meC4muC4suC4lyZsdDsvcCZndDsKICAgICAgICAgICAgICAgICAgJmx0O3AgY2xhc3NOYW1lPSZxdW90O3RleHQtc20gdGV4dC1ncmF5LTYwMCBtdC0xJnF1b3Q7Jmd0O+C4quC4suC4oeC4suC4o+C4luC5g+C4iuC5ieC4nOC4peC4leC4reC4muC5geC4l+C4meC4iOC4suC4geC4geC4suC4o+C4peC4h+C4l+C4uOC4meC5gOC4m+C5h+C4meC4o+C4suC4ouC5hOC4lOC5ieC4q+C4peC4seC4h+C5gOC4geC4qeC4teC4ouC4kyZsdDsvcCZndDsKICAgICAgICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICAgICAmbHQ7L2RpdiZndDsKICAgICAgICAgICZsdDsvZGl2Jmd0OwogICAgICAgICk7CiAgICAgIAogICAgICAvLyDguKrguYTguKXguJTguYzguJfguLXguYggMTE6IOC4m+C4seC4iOC4iOC4seC4ouC4hOC4p+C4suC4oeC4quC4s+C5gOC4o+C5h+C4iAogICAgICBjYXNlIDEwOgogICAgICAgIHJldHVybiAoCiAgICAgICAgICAmbHQ7ZGl2IGNsYXNzTmFtZT0mcXVvdDtoLWZ1bGwmcXVvdDsmZ3Q7CiAgICAgICAgICAgICZsdDtoMiBjbGFzc05hbWU9JnF1b3Q7dGV4dC0yeGwgZm9udC1ib2xkIHRleHQtYmx1ZS04MDAgbWItNiZxdW90OyZndDvguJvguLHguIjguIjguLHguKLguKrguLnguYjguITguKfguLLguKHguKrguLPguYDguKPguYfguIjguJfguLLguIfguIHguLLguKPguYDguIfguLTguJkmbHQ7L2gyJmd0OwogICAgICAgICAgICAmbHQ7ZGl2IGNsYXNzTmFtZT0mcXVvdDtncmlkIGdyaWQtY29scy0yIGdhcC00JnF1b3Q7Jmd0OwogICAgICAgICAgICAgICZsdDtkaXYgY2xhc3NOYW1lPSZxdW90O3AtNCBiZy1ibHVlLTUwIHJvdW5kZWQtbGcgc2hhZG93LXNtJnF1b3Q7Jmd0OwogICAgICAgICAgICAgICAgJmx0O2gzIGNsYXNzTmFtZT0mcXVvdDtmb250LXNlbWlib2xkIHRleHQtbGcgbWItMiBmbGV4IGl0ZW1zLWNlbnRlciZxdW90OyZndDsKICAgICAgICAgICAgICAgICAgJmx0O3NwYW4gY2xhc3NOYW1lPSZxdW90O21yLTIgdGV4dC1ibHVlLTYwMCZxdW90OyZndDsmbHQ7RG9sbGFyU2lnbiBzaXpl
import React, { useState } from 'react';
import { ChevronLeft, ChevronRight, TrendingUp, BarChart4, PieChart, DollarSign, Briefcase, Target } from 'lucide-react';
import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend, BarChart, Bar, PieChart as RechartPieChart, Pie, Cell, ResponsiveContainer } from 'recharts';
const InvestmentPlanPresentation = () => {
const [currentSlide, setCurrentSlide] = useState(0);
const totalSlides = 12;
const goToNextSlide = () => {
setCurrentSlide((prev) => (prev < totalSlides - 1 ? prev + 1 : prev));
};
const goToPrevSlide = () => {
setCurrentSlide((prev) => (prev > 0 ? prev - 1 : prev));
};
// ข้อมูลสำหรับกราฟต่างๆ
const salaryData = [
{ age: 23, salary: 240000, position: 'Financial Analyst' },
{ age: 25, salary: 274776, position: 'Financial Analyst' },
{ age: 30, salary: 385392, position: 'Senior Financial Analyst' },
{ age: 35, salary: 491832, position: 'Finance Manager' },
{ age: 40, salary: 626940, position: 'Senior Finance Manager' },
{ age: 45, salary: 727416, position: 'Finance Director' },
{ age: 50, salary: 843000, position: 'VP of Finance' },
{ age: 55, salary: 930744, position: 'CFO' },
{ age: 60, salary: 1027608, position: 'CFO' }
];
const portfolioGrowthData = [
{ age: 23, value: 38880 },
{ age: 25, value: 127053 },
{ age: 30, value: 650000 },
{ age: 35, value: 1700000 },
{ age: 40, value: 3200000 },
{ age: 45, value: 5500000 },
{ age: 50, value: 7500000 },
{ age: 55, value: 14000000 },
{ age: 60, value: 23000000 }
];
const allocationData = [
{ name: 'ETF', value: 50 },
{ name: 'หุ้น', value: 20 },
{ name: 'REITs', value: 10 },
{ name: 'พันธบัตร', value: 10 },
{ name: 'ทอง/คริปโต', value: 10 }
];
const expenseData = [
{ name: 'ค่ากินอยู่', value: 30 },
{ name: 'ค่าผ่อนบ้าน/รถ', value: 20 },
{ name: 'ค่าใช้จ่ายส่วนตัว', value: 15 },
{ name: 'ค่าประกันและสุขภาพ', value: 10 },
{ name: 'เงินออมและลงทุน', value: 15 },
{ name: 'ภาษีและกองทุน', value: 10 }
];
const careerPathData = [
{ position: 'Financial Analyst', ageRange: '23-29', salary: '20,000-30,200 บาท' },
{ position: 'Senior Financial Analyst', ageRange: '30-34', salary: '32,100-39,200 บาท' },
{ position: 'Finance Manager', ageRange: '35-39', salary: '41,000-50,000 บาท' },
{ position: 'Senior Finance Manager', ageRange: '40-44', salary: '52,200-58,900 บาท' },
{ position: 'Finance Director', ageRange: '45-49', salary: '60,600-68,300 บาท' },
{ position: 'VP of Finance', ageRange: '50-54', salary: '70,200-76,100 บาท' },
{ position: 'CFO', ageRange: '55-60', salary: '77,600-85,600 บาท' }
];
const COLORS = ['#0088FE', '#00C49F', '#FFBB28', '#FF8042', '#8884d8', '#82ca9d'];
const formatMoney = (amount) => {
return new Intl.NumberFormat('th-TH').format(amount);
};
const renderSlide = () => {
switch (currentSlide) {
// สไลด์ที่ 1: ปกนำเสนอ
case 0:
return (
<div className="flex flex-col items-center justify-center h-full text-center">
<div className="mb-8">
<DollarSign size={64} className="text-blue-600 mx-auto mb-4" />
</div>
<h1 className="text-4xl font-bold text-blue-800 mb-4">การวางแผนการลงทุนทางการเงินระยะยาว</h1>
<h2 className="text-2xl text-blue-600 mb-10">กลยุทธ์การสร้างความมั่งคั่งตามช่วงอายุและระดับรายได้</h2>
<div className="mt-16">
<p className="text-lg">วันที่ 31 มีนาคม 2025</p>
<p className="text-lg mt-2">ฝ่ายวางแผนการลงทุน</p>
</div>
</div>
);
// สไลด์ที่ 2: บทนำและวัตถุประสงค์
case 1:
return (
<div className="h-full">
<h2 className="text-2xl font-bold text-blue-800 mb-6">วัตถุประสงค์การนำเสนอ</h2>
<div className="bg-blue-50 p-6 rounded-lg shadow-md">
<ul className="space-y-4">
<li className="flex items-start">
<div className="mr-4 mt-1 text-blue-600"><Target size={24} /></div>
<p>นำเสนอแผนการลงทุนตั้งแต่อายุ 23-60 ปี</p>
</li>
<li className="flex items-start">
<div className="mr-4 mt-1 text-blue-600"><PieChart size={24} /></div>
<p>วิเคราะห์รูปแบบการจัดสรรเงินลงทุนในสินทรัพย์ประเภทต่างๆ</p>
</li>
<li className="flex items-start">
<div className="mr-4 mt-1 text-blue-600"><TrendingUp size={24} /></div>
<p>แสดงการเติบโตของพอร์ตโฟลิโอและความมั่งคั่งระยะยาว</p>
</li>
<li className="flex items-start">
<div className="mr-4 mt-1 text-blue-600"><BarChart4 size={24} /></div>
<p>นำเสนอกลยุทธ์การบริหารรายได้และรายจ่าย</p>
</li>
</ul>
</div>
<div className="mt-8 p-4 bg-yellow-50 border-l-4 border-yellow-400 rounded">
<p className="text-lg">การวางแผนการลงทุนที่ดีจะช่วยให้คุณสร้างความมั่งคั่งได้อย่างมีประสิทธิภาพและบรรลุเป้าหมายทางการเงินในระยะยาว</p>
</div>
</div>
);
// สไลด์ที่ 3: ภาพรวมของข้อมูล
case 2:
return (
<div className="h-full">
<h2 className="text-2xl font-bold text-blue-800 mb-6">ภาพรวมการวางแผนการเงิน</h2>
<div className="mb-4">
<p className="mb-4">ความสัมพันธ์ระหว่างอายุกับระดับเงินเดือน และการเติบโตของตำแหน่งงาน</p>
<div className="h-64">
<ResponsiveContainer width="100%" height="100%">
<LineChart
data={salaryData}
margin={{ top: 5, right: 30, left: 20, bottom: 5 }}
>
<CartesianGrid strokeDasharray="3 3" />
<XAxis dataKey="age" />
<YAxis />
<Tooltip formatter={(value) => [`${formatMoney(value)} บาท`, 'เงินเดือนต่อปี']} />
<Legend />
<Line type="monotone" dataKey="salary" stroke="#8884d8" activeDot={{ r: 8 }} name="เงินเดือนต่อปี (บาท)" />
</LineChart>
</ResponsiveContainer>
</div>
</div>
<div className="mt-6 p-4 bg-blue-50 rounded-lg">
<h3 className="font-semibold mb-2">การเติบโตของตำแหน่งงาน:</h3>
<p>Financial Analyst → Senior Financial Analyst → Finance Manager → Senior Finance Manager → Finance Director → VP of Finance → CFO</p>
</div>
</div>
);
// สไลด์ที่ 4: การจัดสรรรายได้
case 3:
return (
<div className="h-full">
<h2 className="text-2xl font-bold text-blue-800 mb-6">การจัดสรรรายได้ประจำปี</h2>
<div className="grid grid-cols-2 gap-4">
<div className="h-64">
<ResponsiveContainer width="100%" height="100%">
<RechartPieChart>
<Pie
data={expenseData}
cx="50%"
cy="50%"
labelLine={false}
label={({ name, percent }) => `${name}: ${(percent * 100).toFixed(0)}%`}
outerRadius={80}
fill="#8884d8"
dataKey="value"
>
{expenseData.map((entry, index) => (
<Cell key={`cell-${index}`} fill={COLORS[index % COLORS.length]} />
))}
</Pie>
<Tooltip />
</RechartPieChart>
</ResponsiveContainer>
</div>
<div>
<h3 className="font-semibold mb-3">สัดส่วนการจัดสรรรายได้</h3>
<ul className="space-y-2">
{expenseData.map((item, index) => (
<li key={index} className="flex items-center">
<div className="w-4 h-4 mr-2" style={{ backgroundColor: COLORS[index % COLORS.length] }}></div>
<span>{item.name}: {item.value}%</span>
</li>
))}
</ul>
<div className="mt-4 p-3 bg-blue-50 rounded">
<p>การจัดสรรรายได้อย่างสมดุลช่วยให้มีเงินเพียงพอสำหรับการใช้จ่ายปัจจุบันและการสร้างความมั่งคั่งในอนาคต</p>
</div>
</div>
</div>
</div>
);
// สไลด์ที่ 5: กลยุทธ์การลงทุน
case 4:
return (
<div className="h-full">
<h2 className="text-2xl font-bold text-blue-800 mb-6">การจัดสรรเงินลงทุน</h2>
<div className="grid grid-cols-2 gap-4">
<div className="h-64">
<ResponsiveContainer width="100%" height="100%">
<RechartPieChart>
<Pie
data={allocationData}
cx="50%"
cy="50%"
labelLine={false}
label={({ name, percent }) => `${name}: ${(percent * 100).toFixed(0)}%`}
outerRadius={80}
fill="#8884d8"
dataKey="value"
>
{allocationData.map((entry, index) => (
<Cell key={`cell-${index}`} fill={COLORS[index % COLORS.length]} />
))}
</Pie>
<Tooltip />
</RechartPieChart>
</ResponsiveContainer>
</div>
<div>
<h3 className="font-semibold mb-3">สัดส่วนการลงทุนในสินทรัพย์ต่างๆ</h3>
<ul className="space-y-2">
{allocationData.map((item, index) => (
<li key={index} className="flex items-center">
<div className="w-4 h-4 mr-2" style={{ backgroundColor: COLORS[index % COLORS.length] }}></div>
<span>{item.name}: {item.value}%</span>
</li>
))}
</ul>
<div className="mt-4 p-3 bg-blue-50 rounded">
<p>การกระจายการลงทุนช่วยลดความเสี่ยงและเพิ่มโอกาสในการได้รับผลตอบแทนที่มั่นคงในระยะยาว</p>
</div>
</div>
</div>
</div>
);
// สไลด์ที่ 6: การเติบโตของรายได้และตำแหน่ง
case 5:
return (
<div className="h-full">
<h2 className="text-2xl font-bold text-blue-800 mb-6">เส้นทางความก้าวหน้าในอาชีพและรายได้</h2>
<div className="overflow-auto h-64 mb-6">
<table className="min-w-full bg-white border">
<thead className="bg-blue-100">
<tr>
<th className="py-2 px-4 border">ตำแหน่ง</th>
<th className="py-2 px-4 border">ช่วงอายุ</th>
<th className="py-2 px-4 border">เงินเดือนโดยประมาณ</th>
</tr>
</thead>
<tbody>
{careerPathData.map((item, index) => (
<tr key={index} className={index % 2 === 0 ? 'bg-gray-50' : 'bg-white'}>
<td className="py-2 px-4 border font-medium">{item.position}</td>
<td className="py-2 px-4 border text-center">{item.ageRange}</td>
<td className="py-2 px-4 border text-right">{item.salary}</td>
</tr>
))}
</tbody>
</table>
</div>
<div className="p-4 bg-blue-50 rounded-lg">
<p><span className="font-medium">ข้อสังเกต:</span> อัตราการเติบโตของเงินเดือนจะสูงในช่วงต้นของอาชีพ (7-8% ต่อปี) และค่อยๆ ลดลงในช่วงปลาย (2-3% ต่อปี) แต่ฐานเงินเดือนที่สูงขึ้นทำให้รายได้รวมยังคงเพิ่มขึ้นอย่างมีนัยสำคัญ</p>
</div>
</div>
);
// สไลด์ที่ 7: การเติบโตของรายได้และตำแหน่ง (ต่อ)
case 6:
return (
<div className="h-full">
<h2 className="text-2xl font-bold text-blue-800 mb-6">การเติบโตของรายได้ตามช่วงอายุ</h2>
<div className="h-64 mb-6">
<ResponsiveContainer width="100%" height="100%">
<BarChart
data={salaryData}
margin={{ top: 5, right: 30, left: 20, bottom: 5 }}
>
<CartesianGrid strokeDasharray="3 3" />
<XAxis dataKey="age" />
<YAxis />
<Tooltip formatter={(value) => [`${formatMoney(value)} บาท`, 'เงินเดือนต่อปี']} />
<Legend />
<Bar dataKey="salary" name="เงินเดือนต่อปี (บาท)" fill="#8884d8" />
</BarChart>
</ResponsiveContainer>
</div>
<div className="grid grid-cols-3 gap-4 mt-4">
<div className="p-4 bg-blue-50 rounded-lg text-center">
<p className="font-medium">ช่วงต้นอาชีพ (23-35 ปี)</p>
<p>อัตราเติบโต: 5-8% ต่อปี</p>
</div>
<div className="p-4 bg-green-50 rounded-lg text-center">
<p className="font-medium">ช่วงกลางอาชีพ (36-45 ปี)</p>
<p>อัตราเติบโต: 3-5% ต่อปี</p>
</div>
<div className="p-4 bg-yellow-50 rounded-lg text-center">
<p className="font-medium">ช่วงปลายอาชีพ (46-60 ปี)</p>
<p>อัตราเติบโต: 2-3% ต่อปี</p>
</div>
</div>
</div>
);
// สไลด์ที่ 8: การเติบโตของพอร์ตการลงทุน
case 7:
return (
<div className="h-full">
<h2 className="text-2xl font-bold text-blue-800 mb-6">การเติบโตของพอร์ตการลงทุน</h2>
<div className="h-64 mb-6">
<ResponsiveContainer width="100%" height="100%">
<LineChart
data={portfolioGrowthData}
margin={{ top: 5, right: 30, left: 20, bottom: 5 }}
>
<CartesianGrid strokeDasharray="3 3" />
<XAxis dataKey="age" />
<YAxis />
<Tooltip formatter={(value) => [`${formatMoney(value)} บาท`, 'มูลค่าพอร์ต']} />
<Legend />
<Line type="monotone" dataKey="value" stroke="#00C49F" activeDot={{ r: 8 }} name="มูลค่าพอร์ตสะสม (บาท)" />
</LineChart>
</ResponsiveContainer>
</div>
<div className="p-4 bg-green-50 rounded-lg">
<p className="font-medium mb-2">ข้อสังเกตสำคัญ:</p>
<p>มูลค่าพอร์ตการลงทุนมีการเติบโตแบบก้าวกระโดดในช่วงอายุ 45-60 ปี ซึ่งเป็นผลมาจากการสะสมเงินลงทุนอย่างต่อเนื่องรวมกับผลตอบแทนที่ทบต้น (Compound Effect) ที่ชัดเจนมากขึ้นเมื่อเวลาผ่านไป</p>
</div>
</div>
);
// สไลด์ที่ 9: การเติบโตของพอร์ตการลงทุน (ต่อ)
case 8:
return (
<div className="h-full">
<h2 className="text-2xl font-bold text-blue-800 mb-6">มูลค่าพอร์ตสะสมตามช่วงอายุสำคัญ</h2>
<div className="grid grid-cols-2 gap-6">
<div className="col-span-2 mb-4">
<p className="mb-2">มูลค่าพอร์ตการลงทุนเติบโตแบบทวีคูณด้วยอัตราผลตอบแทนเฉลี่ย 8% ต่อปี</p>
</div>
<div className="space-y-4">
<div className="p-4 bg-blue-50 rounded-lg">
<h3 className="font-semibold text-lg mb-2">อายุ 30 ปี</h3>
<p className="text-xl text-blue-700 font-bold">{formatMoney(650000)} บาท</p>
<p className="text-sm mt-1">ช่วงเริ่มต้นการสะสมความมั่งคั่ง</p>
</div>
<div className="p-4 bg-blue-50 rounded-lg">
<h3 className="font-semibold text-lg mb-2">อายุ 40 ปี</h3>
<p className="text-xl text-blue-700 font-bold">{formatMoney(3200000)} บาท</p>
<p className="text-sm mt-1">การเติบโตของพอร์ตเริ่มมีนัยสำคัญ</p>
</div>
</div>
<div className="space-y-4">
<div className="p-4 bg-blue-50 rounded-lg">
<h3 className="font-semibold text-lg mb-2">อายุ 50 ปี</h3>
<p className="text-xl text-blue-700 font-bold">{formatMoney(7500000)} บาท</p>
<p className="text-sm mt-1">ผลของการลงทุนระยะยาวเริ่มชัดเจน</p>
</div>
<div className="p-4 bg-blue-50 rounded-lg">
<h3 className="font-semibold text-lg mb-2">อายุ 60 ปี</h3>
<p className="text-xl text-blue-700 font-bold">{formatMoney(23000000)} บาท</p>
<p className="text-sm mt-1">เป้าหมายความมั่งคั่งก่อนเกษียณ</p>
</div>
</div>
</div>
</div>
);
// สไลด์ที่ 10: จุดเปลี่ยนทางการเงินที่สำคัญ
case 9:
return (
<div className="h-full">
<h2 className="text-2xl font-bold text-blue-800 mb-6">จุดเปลี่ยนสำคัญในเส้นทางการเงิน</h2>
<div className="space-y-4">
<div className="p-4 bg-blue-50 rounded-lg border-l-4 border-blue-600 flex">
<div className="text-center mr-6 flex-shrink-0">
<h3 className="text-lg font-bold">อายุ 35 ปี</h3>
<Briefcase size={32} className="text-blue-600 mx-auto my-2" />
</div>
<div>
<p className="font-medium">การเลื่อนตำแหน่งเป็น Finance Manager</p>
<p>พอร์ตลงทุนมูลค่า 1.7 ล้านบาท</p>
<p className="text-sm text-gray-600 mt-1">เงินเดือนเพิ่มขึ้นเป็น 41,000 บาท/เดือน</p>
</div>
</div>
<div className="p-4 bg-green-50 rounded-lg border-l-4 border-green-600 flex">
<div className="text-center mr-6 flex-shrink-0">
<h3 className="text-lg font-bold">อายุ 45 ปี</h3>
<Briefcase size={32} className="text-green-600 mx-auto my-2" />
</div>
<div>
<p className="font-medium">การเลื่อนตำแหน่งเป็น Finance Director</p>
<p>พอร์ตลงทุนมูลค่า 5.5 ล้านบาท</p>
<p className="text-sm text-gray-600 mt-1">เงินเดือนเพิ่มขึ้นเป็น 60,600 บาท/เดือน</p>
</div>
</div>
<div className="p-4 bg-yellow-50 rounded-lg border-l-4 border-yellow-600 flex">
<div className="text-center mr-6 flex-shrink-0">
<h3 className="text-lg font-bold">อายุ 55 ปี</h3>
<Briefcase size={32} className="text-yellow-600 mx-auto my-2" />
</div>
<div>
<p className="font-medium">การเลื่อนตำแหน่งเป็น CFO</p>
<p>พอร์ตลงทุนมูลค่า 14 ล้านบาท</p>
<p className="text-sm text-gray-600 mt-1">เงินเดือนเพิ่มขึ้นเป็น 77,600 บาท/เดือน</p>
</div>
</div>
<div className="p-4 bg-purple-50 rounded-lg border-l-4 border-purple-600 flex">
<div className="text-center mr-6 flex-shrink-0">
<h3 className="text-lg font-bold">อายุ 60 ปี</h3>
<DollarSign size={32} className="text-purple-600 mx-auto my-2" />
</div>
<div>
<p className="font-medium">เกษียณอายุ</p>
<p>พอร์ตลงทุนมูลค่า 23 ล้านบาท</p>
<p className="text-sm text-gray-600 mt-1">สามารถใช้ผลตอบแทนจากการลงทุนเป็นรายได้หลังเกษียณ</p>
</div>
</div>
</div>
</div>
);
// สไลด์ที่ 11: ปัจจัยความสำเร็จ
case 10:
return (
<div className="h-full">
<h2 className="text-2xl font-bold text-blue-800 mb-6">ปัจจัยสู่ความสำเร็จทางการเงิน</h2>
<div className="grid grid-cols-2 gap-4">
<div className="p-4 bg-blue-50 rounded-lg shadow-sm">
<h3 className="font-semibold text-lg mb-2 flex items-center">
<span className="mr-2 text-blue-600"><DollarSign size