xiaomianao666

插件名:calendar

Jun 19th, 2023
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:网页插件¥js_url¥calendar@base64://LyoqDQoqIEAxOTAwLTIxMDDljLrpl7TlhoXnmoTlhazljobjgIHlhpzljobkupLovawNCiogQGNoYXJzZXQgVVRGLTgNCiogQEF1dGhvciAgSmVh5p2oKEpKb25saW5lQEpKb25saW5lLkNuKQ0KKiBAVGltZSAgICAyMDE0LTctMjENCiogQFRpbWUgICAgMjAxNi04LTEzIEZpeGVkIDIwMzNoZXjjgIFBdHRyaWJ1dGlvbiBBbm5hbHMNCiogQFRpbWUgICAgMjAxNi05LTI1IEZpeGVkIGx1bmFyIExlYXBNb250aCBQYXJhbSBCdWcNCiogQFRpbWUgICAgMjAxNy03LTI0IEZpeGVkIHVzZSBnZXRUZXJtIEZ1bmMgUGFyYW0gRXJyb3IudXNlIHNvbGFyIHllYXIsTk9UIGx1bmFyIHllYXINCiogQFZlcnNpb24gMS4wLjMNCiogQOWFrOWOhui9rOWGnOWOhu+8mmNhbGVuZGFyLnNvbGFyMmx1bmFyKDE5ODcsMTEsMDEpOyAvL1t5b3UgY2FuIGlnbm9yZSBwYXJhbXMgb2YgcHJlZml4IDBdDQoqIEDlhpzljobovazlhazljobvvJpjYWxlbmRhci5sdW5hcjJzb2xhcigxOTg3LDA5LDEwKTsgLy9beW91IGNhbiBpZ25vcmUgcGFyYW1zIG9mIHByZWZpeCAwXQ0KKi8NCnZhciBjYWxlbmRhciA9IHsNCg0KICAgIC8qKg0KICAgICAgKiDlhpzljoYxOTAwLTIxMDDnmoTmtqblpKflsI/kv6Hmga/ooagNCiAgICAgICogQEFycmF5IE9mIFByb3BlcnR5DQogICAgICAqIEByZXR1cm4gSGV4DQogICAgICAqLw0KICAgIGx1bmFySW5mbzpbMHgwNGJkOCwweDA0YWUwLDB4MGE1NzAsMHgwNTRkNSwweDBkMjYwLDB4MGQ5NTAsMHgxNjU1NCwweDA1NmEwLDB4MDlhZDAsMHgwNTVkMiwvLzE5MDAtMTkwOQ0KICAgICAgICAgICAgMHgwNGFlMCwweDBhNWI2LDB4MGE0ZDAsMHgwZDI1MCwweDFkMjU1LDB4MGI1NDAsMHgwZDZhMCwweDBhZGEyLDB4MDk1YjAsMHgxNDk3NywvLzE5MTAtMTkxOQ0KICAgICAgICAgICAgMHgwNDk3MCwweDBhNGIwLDB4MGI0YjUsMHgwNmE1MCwweDA2ZDQwLDB4MWFiNTQsMHgwMmI2MCwweDA5NTcwLDB4MDUyZjIsMHgwNDk3MCwvLzE5MjAtMTkyOQ0KICAgICAgICAgICAgMHgwNjU2NiwweDBkNGEwLDB4MGVhNTAsMHgxNmE5NSwweDA1YWQwLDB4MDJiNjAsMHgxODZlMywweDA5MmUwLDB4MWM4ZDcsMHgwYzk1MCwvLzE5MzAtMTkzOQ0KICAgICAgICAgICAgMHgwZDRhMCwweDFkOGE2LDB4MGI1NTAsMHgwNTZhMCwweDFhNWI0LDB4MDI1ZDAsMHgwOTJkMCwweDBkMmIyLDB4MGE5NTAsMHgwYjU1NywvLzE5NDAtMTk0OQ0KICAgICAgICAgICAgMHgwNmNhMCwweDBiNTUwLDB4MTUzNTUsMHgwNGRhMCwweDBhNWIwLDB4MTQ1NzMsMHgwNTJiMCwweDBhOWE4LDB4MGU5NTAsMHgwNmFhMCwvLzE5NTAtMTk1OQ0KICAgICAgICAgICAgMHgwYWVhNiwweDBhYjUwLDB4MDRiNjAsMHgwYWFlNCwweDBhNTcwLDB4MDUyNjAsMHgwZjI2MywweDBkOTUwLDB4MDViNTcsMHgwNTZhMCwvLzE5NjAtMTk2OQ0KICAgICAgICAgICAgMHgwOTZkMCwweDA0ZGQ1LDB4MDRhZDAsMHgwYTRkMCwweDBkNGQ0LDB4MGQyNTAsMHgwZDU1OCwweDBiNTQwLDB4MGI2YTAsMHgxOTVhNiwvLzE5NzAtMTk3OQ0KICAgICAgICAgICAgMHgwOTViMCwweDA0OWIwLDB4MGE5NzQsMHgwYTRiMCwweDBiMjdhLDB4MDZhNTAsMHgwNmQ0MCwweDBhZjQ2LDB4MGFiNjAsMHgwOTU3MCwvLzE5ODAtMTk4OQ0KICAgICAgICAgICAgMHgwNGFmNSwweDA0OTcwLDB4MDY0YjAsMHgwNzRhMywweDBlYTUwLDB4MDZiNTgsMHgwNWFjMCwweDBhYjYwLDB4MDk2ZDUsMHgwOTJlMCwvLzE5OTAtMTk5OQ0KICAgICAgICAgICAgMHgwYzk2MCwweDBkOTU0LDB4MGQ0YTAsMHgwZGE1MCwweDA3NTUyLDB4MDU2YTAsMHgwYWJiNywweDAyNWQwLDB4MDkyZDAsMHgwY2FiNSwvLzIwMDAtMjAwOQ0KICAgICAgICAgICAgMHgwYTk1MCwweDBiNGEwLDB4MGJhYTQsMHgwYWQ1MCwweDA1NWQ5LDB4MDRiYTAsMHgwYTViMCwweDE1MTc2LDB4MDUyYjAsMHgwYTkzMCwvLzIwMTAtMjAxOQ0KICAgICAgICAgICAgMHgwNzk1NCwweDA2YWEwLDB4MGFkNTAsMHgwNWI1MiwweDA0YjYwLDB4MGE2ZTYsMHgwYTRlMCwweDBkMjYwLDB4MGVhNjUsMHgwZDUzMCwvLzIwMjAtMjAyOQ0KICAgICAgICAgICAgMHgwNWFhMCwweDA3NmEzLDB4MDk2ZDAsMHgwNGFmYiwweDA0YWQwLDB4MGE0ZDAsMHgxZDBiNiwweDBkMjUwLDB4MGQ1MjAsMHgwZGQ0NSwvLzIwMzAtMjAzOQ0KICAgICAgICAgICAgMHgwYjVhMCwweDA1NmQwLDB4MDU1YjIsMHgwNDliMCwweDBhNTc3LDB4MGE0YjAsMHgwYWE1MCwweDFiMjU1LDB4MDZkMjAsMHgwYWRhMCwvLzIwNDAtMjA0OQ0KICAgICAgICAgICAgLyoqQWRkIEJ5IEpKb25saW5lQEpKb25saW5lLkNuKiovDQogICAgICAgICAgICAweDE0YjYzLDB4MDkzNzAsMHgwNDlmOCwweDA0OTcwLDB4MDY0YjAsMHgxNjhhNiwweDBlYTUwLCAweDA2YjIwLDB4MWE2YzQsMHgwYWFlMCwvLzIwNTAtMjA1OQ0KICAgICAgICAgICAgMHgwOTJlMCwweDBkMmUzLDB4MGM5NjAsMHgwZDU1NywweDBkNGEwLDB4MGRhNTAsMHgwNWQ1NSwweDA1NmEwLDB4MGE2ZDAsMHgwNTVkNCwvLzIwNjAtMjA2OQ0KICAgICAgICAgICAgMHgwNTJkMCwweDBhOWI4LDB4MGE5NTAsMHgwYjRhMCwweDBiNmE2LDB4MGFkNTAsMHgwNTVhMCwweDBhYmE0LDB4MGE1YjAsMHgwNTJiMCwvLzIwNzAtMjA3OQ0KICAgICAgICAgICAgMHgwYjI3MywweDA2OTMwLDB4MDczMzcsMHgwNmFhMCwweDBhZDUwLDB4MTRiNTUsMHgwNGI2MCwweDBhNTcwLDB4MDU0ZTQsMHgwZDE2MCwvLzIwODAtMjA4OQ0KICAgICAgICAgICAgMHgwZTk2OCwweDBkNTIwLDB4MGRhYTAsMHgxNmFhNiwweDA1NmQwLDB4MDRhZTAsMHgwYTlkNCwweDBhMmQwLDB4MGQxNTAsMHgwZjI1MiwvLzIwOTAtMjA5OQ0KICAgICAgICAgICAgMHgwZDUyMF0sLy8yMTAwDQoNCiAgICAvKioNCiAgICAgICog5YWs5Y6G5q+P5Liq5pyI5Lu955qE5aSp5pWw5pmu6YCa6KGoDQogICAgICAqIEBBcnJheSBPZiBQcm9wZXJ0eQ0KICAgICAgKiBAcmV0dXJuIE51bWJlcg0KICAgICAgKi8NCiAgICBzb2xhck1vbnRoOlszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV0sDQoNCiAgICAvKioNCiAgICAgICog5aSp5bmy5Zyw5pSv5LmL5aSp5bmy6YCf5p+l6KGoDQogICAgICAqIEBBcnJheSBPZiBQcm9wZXJ0eSB0cmFuc1si55SyIiwi5LmZIiwi5LiZIiwi5LiBIiwi5oiKIiwi5bexIiwi5bqaIiwi6L6bIiwi5aOsIiwi55m4Il0NCiAgICAgICogQHJldHVybiBDbiBzdHJpbmcNCiAgICAgICovDQogICAgR2FuOlsiXHU3NTMyIiwiXHU0ZTU5IiwiXHU0ZTE5IiwiXHU0ZTAxIiwiXHU2MjBhIiwiXHU1ZGYxIiwiXHU1ZTlhIiwiXHU4ZjliIiwiXHU1OGVjIiwiXHU3Njc4Il0sDQoNCiAgICAvKioNCiAgICAgICog5aSp5bmy5Zyw5pSv5LmL5Zyw5pSv6YCf5p+l6KGoDQogICAgICAqIEBBcnJheSBPZiBQcm9wZXJ0eQ0KICAgICAgKiBAdHJhbnNbIuWtkCIsIuS4kSIsIuWvhSIsIuWNryIsIui+sCIsIuW3syIsIuWNiCIsIuacqiIsIueUsyIsIumFiSIsIuaIjCIsIuS6pSJdDQogICAgICAqIEByZXR1cm4gQ24gc3RyaW5nDQogICAgICAqLw0KICAgIFpoaTpbIlx1NWI1MCIsIlx1NGUxMSIsIlx1NWJjNSIsIlx1NTM2ZiIsIlx1OGZiMCIsIlx1NWRmMyIsIlx1NTM0OCIsIlx1NjcyYSIsIlx1NzUzMyIsIlx1OTE0OSIsIlx1NjIwYyIsIlx1NGVhNSJdLA0KDQogICAgLyoqDQogICAgICAqIOWkqeW5suWcsOaUr+S5i+WcsOaUr+mAn+afpeihqDw9PueUn+iClg0KICAgICAgKiBAQXJyYXkgT2YgUHJvcGVydHkNCiAgICAgICogQHRyYW5zWyLpvKAiLCLniZsiLCLomY4iLCLlhZQiLCLpvpkiLCLom4ciLCLpqawiLCLnvooiLCLnjLQiLCLpuKEiLCLni5ciLCLnjKoiXQ0KICAgICAgKiBAcmV0dXJuIENuIHN0cmluZw0KICAgICAgKi8NCiAgICBBbmltYWxzOlsiXHU5ZjIwIiwiXHU3MjViIiwiXHU4NjRlIiwiXHU1MTU0IiwiXHU5Zjk5IiwiXHU4NmM3IiwiXHU5YTZjIiwiXHU3ZjhhIiwiXHU3MzM0IiwiXHU5ZTIxIiwiXHU3MmQ3IiwiXHU3MzJhIl0sDQogICAgDQogICAgLyoqDQogICAgICog6Ziz5Y6G6IqC5pelDQogICAgICovDQogICAgZmVzdGl2YWw6IHsNCiAgICAgICcxLTEnOiAgIHt0aXRsZTogJ+WFg+aXpuiKgid9LA0KICAgICAgJzItMTQnOiAge3RpdGxlOiAn5oOF5Lq66IqCJ30sDQogICAgICAnNS0xJzogICB7dGl0bGU6ICflirPliqjoioInfSwNCiAgICAgICc1LTQnOiAgIHt0aXRsZTogJ+mdkuW5tOiKgid9LA0KICAgICAgJzYtMSc6ICAge3RpdGxlOiAn5YS/56ul6IqCJ30sDQogICAgICAnOS0xMCc6ICB7dGl0bGU6ICfmlZnluIjoioInfSwNCiAgICAgICcxMC0xJzogIHt0aXRsZTogJ+WbveW6huiKgid9LA0KICAgICAgJzEyLTI1Jzoge3RpdGxlOiAn5Zyj6K+e6IqCJ30sDQoNCiAgICAgICczLTgnOiAgIHt0aXRsZTogJ+Wmh+Wls+iKgid9LA0KICAgICAgJzMtMTInOiAge3RpdGxlOiAn5qSN5qCR6IqCJ30sDQogICAgICAnNC0xJzogICB7dGl0bGU6ICfmhJrkurroioInfSwNCiAgICAgICc1LTEyJzogIHt0aXRsZTogJ+aKpOWjq+iKgid9LA0KICAgICAgJzctMSc6ICAge3RpdGxlOiAn5bu65YWa6IqCJ30sDQogICAgICAnOC0xJzogICB7dGl0bGU6ICflu7rlhpvoioInfSwNCiAgICAgICcxMi0yNCc6IHt0aXRsZTogJ+W5s+WuieWknCd9LA0KICAgIH0sDQoNCiAgICAvKioNCiAgICAgKiDlhpzljoboioLml6UNCiAgICAgKi8NCiAgICBsZmVzdGl2YWw6IHsNCiAgICAgICcxMi0zMCc6IHt0aXRsZTogJ+mZpOWklSd9LA0KICAgICAgJzEtMSc6ICAge3RpdGxlOiAn5pil6IqCJ30sDQogICAgICAnMS0xNSc6ICB7dGl0bGU6ICflhYPlrrXoioInfSwNCiAgICAgICc1LTUnOiAgIHt0aXRsZTogJ+err+WNiOiKgid9LA0KICAgICAgJzgtMTUnOiAge3RpdGxlOiAn5Lit56eL6IqCJ30sDQogICAgICAnOS05JzogICB7dGl0bGU6ICfph43pmLPoioInfSwNCiAgICB9LA0KDQogICAgLyoqDQogICAgICog6L+U5Zue6buY6K6k5a6a5LmJ55qE6Ziz5Y6G6IqC5pelDQogICAgICovDQogICAgZ2V0RmVzdGl2YWwoKXsNCiAgICAgIHJldHVybiB0aGlzLmZlc3RpdmFsDQogICAgfSwNCg0KICAgIC8qKg0KICAgICAqIOi/lOWbnum7mOiupOWumuS5ieeahOWGheWuuemHjOiKguaXpQ0KICAgICAqLw0KICAgIGdldEx1bmFyRmVzdGl2YWwoKXsNCiAgICAgIHJldHVybiB0aGlzLmxmZXN0aXZhbA0KICAgIH0sDQoNCiAgICAvKioNCiAgICAgKiANCiAgICAgKiBAcGFyYW0ge09iamVjdH0g5oyJ54WnZmVzdGl2YWznmoTmoLzlvI/ovpPlhaXmlbDmja7vvIzorr7nva7pmLPljoboioLml6UNCiAgICAgKi8NCiAgICBzZXRGZXN0aXZhbChwYXJhbT17fSl7DQogICAgICB0aGlzLmZlc3RpdmFsID0gcGFyYW0NCiAgICB9LA0KDQogICAgLyoqDQogICAgICogDQogICAgICogQHBhcmFtIHtPYmplY3R9IOaMieeFp2xmZXN0aXZhbOeahOagvOW8j+i+k+WFpeaVsOaNru+8jOiuvue9ruWGnOWOhuiKguaXpQ0KICAgICAqLw0KICAgIHNldEx1bmFyRmVzdGl2YWwocGFyYW09e30pew0KICAgICAgdGhpcy5sZmVzdGl2YWwgPSBwYXJhbQ0KICAgIH0sDQoNCiAgICAvKioNCiAgICAgICogMjToioLmsJTpgJ/mn6XooagNCiAgICAgICogQEFycmF5IE9mIFByb3BlcnR5DQogICAgICAqIEB0cmFuc1si5bCP5a+SIiwi5aSn5a+SIiwi56uL5pilIiwi6Zuo5rC0Iiwi5oOK6JuwIiwi5pil5YiGIiwi5riF5piOIiwi6LC36ZuoIiwi56uL5aSPIiwi5bCP5ruhIiwi6IqS56eNIiwi5aSP6IezIiwi5bCP5pqRIiwi5aSn5pqRIiwi56uL56eLIiwi5aSE5pqRIiwi55m96ZyyIiwi56eL5YiGIiwi5a+S6ZyyIiwi6Zyc6ZmNIiwi56uL5YasIiwi5bCP6ZuqIiwi5aSn6ZuqIiwi5Yas6IezIl0NCiAgICAgICogQHJldHVybiBDbiBzdHJpbmcNCiAgICAgICovDQogICAgc29sYXJUZXJtOlsiXHU1YzBmXHU1YmQyIiwiXHU1OTI3XHU1YmQyIiwiXHU3YWNiXHU2NjI1IiwiXHU5NmU4XHU2YzM0IiwiXHU2MGNhXHU4NmYwIiwiXHU2NjI1XHU1MjA2IiwiXHU2ZTA1XHU2NjBlIiwiXHU4YzM3XHU5NmU4IiwiXHU3YWNiXHU1OTBmIiwiXHU1YzBmXHU2ZWUxIiwiXHU4MjkyXHU3OWNkIiwiXHU1OTBmXHU4MWYzIiwiXHU1YzBmXHU2NjkxIiwiXHU1OTI3XHU2NjkxIiwiXHU3YWNiXHU3OWNiIiwiXHU1OTA0XHU2NjkxIiwiXHU3NjdkXHU5NzMyIiwiXHU3OWNiXHU1MjA2IiwiXHU1YmQyXHU5NzMyIiwiXHU5NzFjXHU5NjRkIiwiXHU3YWNiXHU1MWFjIiwiXHU1YzBmXHU5NmVhIiwiXHU1OTI3XHU5NmVhIiwiXHU1MWFjXHU4MWYzIl0sDQoNCiAgICAvKioNCiAgICAgICogMTkwMC0yMTAw5ZCE5bm055qEMjToioLmsJTml6XmnJ/pgJ/mn6XooagNCiAgICAgICogQEFycmF5IE9mIFByb3BlcnR5DQogICAgICAqIEByZXR1cm4gMHggc3RyaW5nIEZvciBzcGxpY2UNCiAgICAgICovDQogICAgc1Rlcm1JbmZvOlsnOTc3ODM5N2JkMDk3YzM2YjBiNmZjOTI3NGM5MWFhJywnOTdiNmI5N2JkMTk4MDFlYzkyMTBjOTY1Y2M5MjBlJywnOTdiY2Y5N2MzNTk4MDgyYzk1ZjhjOTY1Y2M5MjBmJywNCiAgICAgICAgICAgICAgJzk3YmQwYjA2YmRiMDcyMmM5NjVjZTFjZmNjOTIwZicsJ2IwMjcwOTdiZDA5N2MzNmIwYjZmYzkyNzRjOTFhYScsJzk3YjZiOTdiZDE5ODAxZWM5MjEwYzk2NWNjOTIwZScsDQogICAgICAgICAgICAgICc5N2JjZjk3YzM1OTgwMWVjOTVmOGM5NjVjYzkyMGYnLCc5N2JkMGIwNmJkYjA3MjJjOTY1Y2UxY2ZjYzkyMGYnLCdiMDI3MDk3YmQwOTdjMzZiMGI2ZmM5Mjc0YzkxYWEnLA0KICAgICAgICAgICAgICAnOTdiNmI5N2JkMTk4MDFlYzkyMTBjOTY1Y2M5MjBlJywnOTdiY2Y5N2MzNTk4MDFlYzk1ZjhjOTY1Y2M5MjBmJywnOTdiZDBiMDZiZGIwNzIyYzk2NWNlMWNmY2M5MjBmJywNCiAgICAgICAgICAgICAgJ2IwMjcwOTdiZDA5N2MzNmIwYjZmYzkyNzRjOTFhYScsJzk3NzgzOTdiZDE5ODAxZWM5MjEwYzk2NWNjOTIwZScsJzk3YjZiOTdiZDE5ODAxZWM5NWY4Yzk2NWNjOTIwZicsDQogICAgICAgICAgICAgICc5N2JkMDk4MDFkOTgwODJjOTVmOGUxY2ZjYzkyMGYnLCc5N2JkMDk3YmQwOTdjMzZiMGI2ZmM5MjEwYzhkYzInLCc5Nzc4Mzk3YmQxOTdjMzZjOTIxMGM5Mjc0YzkxYWEnLA0KICAgICAgICAgICAgICAnOTdiNmI5N2JkMTk4MDFlYzk1ZjhjOTY1Y2M5MjBlJywnOTdiZDA5ODAxZDk4MDgyYzk1ZjhlMWNmY2M5MjBmJywnOTdiZDA5N2JkMDk3YzM2YjBiNmZjOTIxMGM4ZGMyJywNCiAgICAgICAgICAgICAgJzk3NzgzOTdiZDA5N2MzNmM5MjEwYzkyNzRjOTFhYScsJzk3YjZiOTdiZDE5ODAxZWM5NWY4Yzk2NWNjOTIwZScsJzk3YmNmOTdjMzU5ODA4MmM5NWY4ZTFjZmNjOTIwZicsDQogICAgICAgICAgICAgICc5N2JkMDk3YmQwOTdjMzZiMGI2ZmM5MjEwYzhkYzInLCc5Nzc4Mzk3YmQwOTdjMzZjOTIxMGM5Mjc0YzkxYWEnLCc5N2I2Yjk3YmQxOTgwMWVjOTIxMGM5NjVjYzkyMGUnLA0KICAgICAgICAgICAgICAnOTdiY2Y5N2MzNTk4MDgyYzk1ZjhjOTY1Y2M5MjBmJywnOTdiZDA5N2JkMDk3YzM1YjBiNmZjOTIwZmIwNzIyJywnOTc3ODM5N2JkMDk3YzM2YjBiNmZjOTI3NGM5MWFhJywNCiAgICAgICAgICAgICAgJzk3YjZiOTdiZDE5ODAxZWM5MjEwYzk2NWNjOTIwZScsJzk3YmNmOTdjMzU5ODA4MmM5NWY4Yzk2NWNjOTIwZicsJzk3YmQwOTdiZDA5N2MzNWIwYjZmYzkyMGZiMDcyMicsDQogICAgICAgICAgICAgICc5Nzc4Mzk3YmQwOTdjMzZiMGI2ZmM5Mjc0YzkxYWEnLCc5N2I2Yjk3YmQxOTgwMWVjOTIxMGM5NjVjYzkyMGUnLCc5N2JjZjk3YzM1OTgwMWVjOTVmOGM5NjVjYzkyMGYnLA0KICAgICAgICAgICAgICAnOTdiZDA5N2JkMDk3YzM1YjBiNmZjOTIwZmIwNzIyJywnOTc3ODM5N2JkMDk3YzM2YjBiNmZjOTI3NGM5MWFhJywnOTdiNmI5N2JkMTk4MDFlYzkyMTBjOTY1Y2M5MjBlJywNCiAgICAgICAgICAgICAgJzk3YmNmOTdjMzU5ODAxZWM5NWY4Yzk2NWNjOTIwZicsJzk3YmQwOTdiZDA5N2MzNWIwYjZmYzkyMGZiMDcyMicsJzk3NzgzOTdiZDA5N2MzNmIwYjZmYzkyNzRjOTFhYScsDQogICAgICAgICAgICAgICc5N2I2Yjk3YmQxOTgwMWVjOTIxMGM5NjVjYzkyMGUnLCc5N2JjZjk3YzM1OTgwMWVjOTVmOGM5NjVjYzkyMGYnLCc5N2JkMDk3YmQwN2Y1OTViMGI2ZmM5MjBmYjA3MjInLA0KICAgICAgICAgICAgICAnOTc3ODM5N2JkMDk3YzM2YjBiNmZjOTIxMGM4ZGMyJywnOTc3ODM5N2JkMTk4MDFlYzkyMTBjOTI3NGM5MjBlJywnOTdiNmI5N2JkMTk4MDFlYzk1ZjhjOTY1Y2M5MjBmJywNCiAgICAgICAgICAgICAgJzk3YmQwN2Y1MzA3ZjU5NWIwYjBiYzkyMGZiMDcyMicsJzdmMGUzOTdiZDA5N2MzNmIwYjZmYzkyMTBjOGRjMicsJzk3NzgzOTdiZDA5N2MzNmM5MjEwYzkyNzRjOTIwZScsDQogICAgICAgICAgICAgICc5N2I2Yjk3YmQxOTgwMWVjOTVmOGM5NjVjYzkyMGYnLCc5N2JkMDdmNTMwN2Y1OTViMGIwYmM5MjBmYjA3MjInLCc3ZjBlMzk3YmQwOTdjMzZiMGI2ZmM5MjEwYzhkYzInLA0KICAgICAgICAgICAgICAnOTc3ODM5N2JkMDk3YzM2YzkyMTBjOTI3NGM5MWFhJywnOTdiNmI5N2JkMTk4MDFlYzkyMTBjOTY1Y2M5MjBlJywnOTdiZDA3ZjE0ODdmNTk1YjBiMGJjOTIwZmIwNzIyJywNCiAgICAgICAgICAgICAgJzdmMGUzOTdiZDA5N2MzNmIwYjZmYzkyMTBjOGRjMicsJzk3NzgzOTdiZDA5N2MzNmIwYjZmYzkyNzRjOTFhYScsJzk3YjZiOTdiZDE5ODAxZWM5MjEwYzk2NWNjOTIwZScsDQogICAgICAgICAgICAgICc5N2JjZjdmMTQ4N2Y1OTViMGIwYmIwYjZmYjA3MjInLCc3ZjBlMzk3YmQwOTdjMzViMGI2ZmM5MjBmYjA3MjInLCc5Nzc4Mzk3YmQwOTdjMzZiMGI2ZmM5Mjc0YzkxYWEnLA0KICAgICAgICAgICAgICAnOTdiNmI5N2JkMTk4MDFlYzkyMTBjOTY1Y2M5MjBlJywnOTdiY2Y3ZjE0ODdmNTk1YjBiMGJiMGI2ZmIwNzIyJywnN2YwZTM5N2JkMDk3YzM1YjBiNmZjOTIwZmIwNzIyJywNCiAgICAgICAgICAgICAgJzk3NzgzOTdiZDA5N2MzNmIwYjZmYzkyNzRjOTFhYScsJzk3YjZiOTdiZDE5ODAxZWM5MjEwYzk2NWNjOTIwZScsJzk3YmNmN2YxNDg3ZjUzMWIwYjBiYjBiNmZiMDcyMicsDQogICAgICAgICAgICAgICc3ZjBlMzk3YmQwOTdjMzViMGI2ZmM5MjBmYjA3MjInLCc5Nzc4Mzk3YmQwOTdjMzZiMGI2ZmM5Mjc0YzkxYWEnLCc5N2I2Yjk3YmQxOTgwMWVjOTIxMGM5NjVjYzkyMGUnLA0KICAgICAgICAgICAgICAnOTdiY2Y3ZjE0ODdmNTMxYjBiMGJiMGI2ZmIwNzIyJywnN2YwZTM5N2JkMDdmNTk1YjBiNmZjOTIwZmIwNzIyJywnOTc3ODM5N2JkMDk3YzM2YjBiNmZjOTI3NGM5MWFhJywNCiAgICAgICAgICAgICAgJzk3YjZiOTdiZDE5ODAxZWM5MjEwYzkyNzRjOTIwZScsJzk3YmNmN2YwZTQ3ZjUzMWIwYjBiYjBiNmZiMDcyMicsJzdmMGUzOTdiZDA3ZjU5NWIwYjBiYzkyMGZiMDcyMicsDQogICAgICAgICAgICAgICc5Nzc4Mzk3YmQwOTdjMzZiMGI2ZmM5MjEwYzkxYWEnLCc5N2I2Yjk3YmQxOTdjMzZjOTIxMGM5Mjc0YzkyMGUnLCc5N2JjZjdmMGU0N2Y1MzFiMGIwYmIwYjZmYjA3MjInLA0KICAgICAgICAgICAgICAnN2YwZTM5N2JkMDdmNTk1YjBiMGJjOTIwZmIwNzIyJywnOTc3ODM5N2JkMDk3YzM2YjBiNmZjOTIxMGM4ZGMyJywnOTc3ODM5N2JkMDk3YzM2YzkyMTBjOTI3NGM5MjBlJywNCiAgICAgICAgICAgICAgJzk3YjZiN2YwZTQ3ZjUzMWIwNzIzYjBiNmZiMDcyMicsJzdmMGUzN2Y1MzA3ZjU5NWIwYjBiYzkyMGZiMDcyMicsJzdmMGUzOTdiZDA5N2MzNmIwYjZmYzkyMTBjOGRjMicsDQogICAgICAgICAgICAgICc5Nzc4Mzk3YmQwOTdjMzZiMGI3MGM5Mjc0YzkxYWEnLCc5N2I2YjdmMGU0N2Y1MzFiMDcyM2IwYjZmYjA3MjEnLCc3ZjBlMzdmMTQ4N2Y1OTViMGIwYmIwYjZmYjA3MjInLA0KICAgICAgICAgICAgICAnN2YwZTM5N2JkMDk3YzM1YjBiNmZjOTIxMGM4ZGMyJywnOTc3ODM5N2JkMDk3YzM2YjBiNmZjOTI3NGM5MWFhJywnOTdiNmI3ZjBlNDdmNTMxYjA3MjNiMGI2ZmIwNzIxJywNCiAgICAgICAgICAgICAgJzdmMGUyN2YxNDg3ZjU5NWIwYjBiYjBiNmZiMDcyMicsJzdmMGUzOTdiZDA5N2MzNWIwYjZmYzkyMGZiMDcyMicsJzk3NzgzOTdiZDA5N2MzNmIwYjZmYzkyNzRjOTFhYScsDQogICAgICAgICAgICAgICc5N2I2YjdmMGU0N2Y1MzFiMDcyM2IwYjZmYjA3MjEnLCc3ZjBlMjdmMTQ4N2Y1MzFiMGIwYmIwYjZmYjA3MjInLCc3ZjBlMzk3YmQwOTdjMzViMGI2ZmM5MjBmYjA3MjInLA0KICAgICAgICAgICAgICAnOTc3ODM5N2JkMDk3YzM2YjBiNmZjOTI3NGM5MWFhJywnOTdiNmI3ZjBlNDdmNTMxYjA3MjNiMGI2ZmIwNzIxJywnN2YwZTI3ZjE0ODdmNTMxYjBiMGJiMGI2ZmIwNzIyJywNCiAgICAgICAgICAgICAgJzdmMGUzOTdiZDA5N2MzNWIwYjZmYzkyMGZiMDcyMicsJzk3NzgzOTdiZDA5N2MzNmIwYjZmYzkyNzRjOTFhYScsJzk3YjZiN2YwZTQ3ZjUzMWIwNzIzYjBiNmZiMDcyMScsDQogICAgICAgICAgICAgICc3ZjBlMjdmMTQ4N2Y1MzFiMGIwYmIwYjZmYjA3MjInLCc3ZjBlMzk3YmQwN2Y1OTViMGIwYmM5MjBmYjA3MjInLCc5Nzc4Mzk3YmQwOTdjMzZiMGI2ZmM5Mjc0YzkxYWEnLA0KICAgICAgICAgICAgICAnOTdiNmI3ZjBlNDdmNTMxYjA3MjNiMDc4N2IwNzIxJywnN2YwZTI3ZjBlNDdmNTMxYjBiMGJiMGI2ZmIwNzIyJywnN2YwZTM5N2JkMDdmNTk1YjBiMGJjOTIwZmIwNzIyJywNCiAgICAgICAgICAgICAgJzk3NzgzOTdiZDA5N2MzNmIwYjZmYzkyMTBjOTFhYScsJzk3YjZiN2YwZTQ3ZjE0OWIwNzIzYjA3ODdiMDcyMScsJzdmMGUyN2YwZTQ3ZjUzMWIwNzIzYjBiNmZiMDcyMicsDQogICAgICAgICAgICAgICc3ZjBlMzk3YmQwN2Y1OTViMGIwYmM5MjBmYjA3MjInLCc5Nzc4Mzk3YmQwOTdjMzZiMGI2ZmM5MjEwYzhkYzInLCc5Nzc4MzdmMGUzN2YxNDliMDcyM2IwNzg3YjA3MjEnLA0KICAgICAgICAgICAgICAnN2YwN2U3ZjBlNDdmNTMxYjA3MjNiMGI2ZmIwNzIyJywnN2YwZTM3ZjUzMDdmNTk1YjBiMGJjOTIwZmIwNzIyJywnN2YwZTM5N2JkMDk3YzM1YjBiNmZjOTIxMGM4ZGMyJywNCiAgICAgICAgICAgICAgJzk3NzgzN2YwZTM3ZjE0OTk4MDgyYjA3ODdiMDcyMScsJzdmMDdlN2YwZTQ3ZjUzMWIwNzIzYjBiNmZiMDcyMScsJzdmMGUzN2YxNDg3ZjU5NWIwYjBiYjBiNmZiMDcyMicsDQogICAgICAgICAgICAgICc3ZjBlMzk3YmQwOTdjMzViMGI2ZmM5MjEwYzhkYzInLCc5Nzc4MzdmMGUzN2YxNDk5ODA4MmIwNzg3YjA2YmQnLCc3ZjA3ZTdmMGU0N2Y1MzFiMDcyM2IwYjZmYjA3MjEnLA0KICAgICAgICAgICAgICAnN2YwZTI3ZjE0ODdmNTMxYjBiMGJiMGI2ZmIwNzIyJywnN2YwZTM5N2JkMDk3YzM1YjBiNmZjOTIwZmIwNzIyJywnOTc3ODM3ZjBlMzdmMTQ5OTgwODJiMDc4N2IwNmJkJywNCiAgICAgICAgICAgICAgJzdmMDdlN2YwZTQ3ZjUzMWIwNzIzYjBiNmZiMDcyMScsJzdmMGUyN2YxNDg3ZjUzMWIwYjBiYjBiNmZiMDcyMicsJzdmMGUzOTdiZDA5N2MzNWIwYjZmYzkyMGZiMDcyMicsDQogICAgICAgICAgICAgICc5Nzc4MzdmMGUzN2YxNDk5ODA4MmIwNzg3YjA2YmQnLCc3ZjA3ZTdmMGU0N2Y1MzFiMDcyM2IwYjZmYjA3MjEnLCc3ZjBlMjdmMTQ4N2Y1MzFiMGIwYmIwYjZmYjA3MjInLA0KICAgICAgICAgICAgICAnN2YwZTM5N2JkMDdmNTk1YjBiMGJjOTIwZmIwNzIyJywnOTc3ODM3ZjBlMzdmMTQ5OTgwODJiMDc4N2IwNmJkJywnN2YwN2U3ZjBlNDdmNTMxYjA3MjNiMGI2ZmIwNzIxJywNCiAgICAgICAgICAgICAgJzdmMGUyN2YxNDg3ZjUzMWIwYjBiYjBiNmZiMDcyMicsJzdmMGUzOTdiZDA3ZjU5NWIwYjBiYzkyMGZiMDcyMicsJzk3NzgzN2YwZTM3ZjE0OTk4MDgyYjA3ODdiMDZiZCcsDQogICAgICAgICAgICAgICc3ZjA3ZTdmMGU0N2YxNDliMDcyM2IwNzg3YjA3MjEnLCc3ZjBlMjdmMGU0N2Y1MzFiMGIwYmIwYjZmYjA3MjInLCc3ZjBlMzk3YmQwN2Y1OTViMGIwYmM5MjBmYjA3MjInLA0KICAgICAgICAgICAgICAnOTc3ODM3ZjBlMzdmMTQ5OTgwODJiMDcyM2IwNmJkJywnN2YwN2U3ZjBlMzdmMTQ5YjA3MjNiMDc4N2IwNzIxJywnN2YwZTI3ZjBlNDdmNTMxYjA3MjNiMGI2ZmIwNzIyJywNCiAgICAgICAgICAgICAgJzdmMGUzOTdiZDA3ZjU5NWIwYjBiYzkyMGZiMDcyMicsJzk3NzgzN2YwZTM3ZjE0ODk4MDgyYjA3MjNiMDJkNScsJzdlYzk2N2YwZTM3ZjE0OTk4MDgyYjA3ODdiMDcyMScsDQogICAgICAgICAgICAgICc3ZjA3ZTdmMGU0N2Y1MzFiMDcyM2IwYjZmYjA3MjInLCc3ZjBlMzdmMTQ4N2Y1OTViMGIwYmIwYjZmYjA3MjInLCc3ZjBlMzdmMGUzN2YxNDg5ODA4MmIwNzIzYjAyZDUnLA0KICAgICAgICAgICAgICAnN2VjOTY3ZjBlMzdmMTQ5OTgwODJiMDc4N2IwNzIxJywnN2YwN2U3ZjBlNDdmNTMxYjA3MjNiMGI2ZmIwNzIyJywnN2YwZTM3ZjE0ODdmNTMxYjBiMGJiMGI2ZmIwNzIyJywNCiAgICAgICAgICAgICAgJzdmMGUzN2YwZTM3ZjE0ODk4MDgyYjA3MjNiMDJkNScsJzdlYzk2N2YwZTM3ZjE0OTk4MDgyYjA3ODdiMDZiZCcsJzdmMDdlN2YwZTQ3ZjUzMWIwNzIzYjBiNmZiMDcyMScsDQogICAgICAgICAgICAgICc3ZjBlMzdmMTQ4N2Y1MzFiMGIwYmIwYjZmYjA3MjInLCc3ZjBlMzdmMGUzN2YxNDg5ODA4MmIwNzIyOTdjMzUnLCc3ZWM5NjdmMGUzN2YxNDk5ODA4MmIwNzg3YjA2YmQnLA0KICAgICAgICAgICAgICAnN2YwN2U3ZjBlNDdmNTMxYjA3MjNiMGI2ZmIwNzIxJywnN2YwZTI3ZjE0ODdmNTMxYjBiMGJiMGI2ZmIwNzIyJywnN2YwZTM3ZjBlMzdmMTQ4OTgwODJiMDcyMjk3YzM1JywNCiAgICAgICAgICAgICAgJzdlYzk2N2YwZTM3ZjE0OTk4MDgyYjA3ODdiMDZiZCcsJzdmMDdlN2YwZTQ3ZjUzMWIwNzIzYjBiNmZiMDcyMScsJzdmMGUyN2YxNDg3ZjUzMWIwYjBiYjBiNmZiMDcyMicsDQogICAgICAgICAgICAgICc3ZjBlMzdmMGUzNjZhYTg5ODAxZWIwNzIyOTdjMzUnLCc3ZWM5NjdmMGUzN2YxNDk5ODA4MmIwNzg3YjA2YmQnLCc3ZjA3ZTdmMGU0N2YxNDliMDcyM2IwNzg3YjA3MjEnLA0KICAgICAgICAgICAgICAnN2YwZTI3ZjE0ODdmNTMxYjBiMGJiMGI2ZmIwNzIyJywnN2YwZTM3ZjBlMzY2YWE4OTgwMWViMDcyMjk3YzM1JywnN2VjOTY3ZjBlMzdmMTQ5OTgwODJiMDcyM2IwNmJkJywNCiAgICAgICAgICAgICAgJzdmMDdlN2YwZTQ3ZjE0OWIwNzIzYjA3ODdiMDcyMScsJzdmMGUyN2YwZTQ3ZjUzMWIwNzIzYjBiNmZiMDcyMicsJzdmMGUzN2YwZTM2NmFhODk4MDFlYjA3MjI5N2MzNScsDQogICAgICAgICAgICAgICc3ZWM5NjdmMGUzN2YxNDk5ODA4MmIwNzIzYjA2YmQnLCc3ZjA3ZTdmMGUzN2YxNDk5ODA4M2IwNzg3YjA3MjEnLCc3ZjBlMjdmMGU0N2Y1MzFiMDcyM2IwYjZmYjA3MjInLA0KICAgICAgICAgICAgICAnN2YwZTM3ZjBlMzY2YWE4OTgwMWViMDcyMjk3YzM1JywnN2VjOTY3ZjBlMzdmMTQ4OTgwODJiMDcyM2IwMmQ1JywnN2YwN2U3ZjBlMzdmMTQ5OTgwODJiMDc4N2IwNzIxJywNCiAgICAgICAgICAgICAgJzdmMDdlN2YwZTQ3ZjUzMWIwNzIzYjBiNmZiMDcyMicsJzdmMGUzNjY2NWI2NmFhODk4MDFlOTgwODI5N2MzNScsJzY2NWY2N2YwZTM3ZjE0ODk4MDgyYjA3MjNiMDJkNScsDQogICAgICAgICAgICAgICc3ZWM5NjdmMGUzN2YxNDk5ODA4MmIwNzg3YjA3MjEnLCc3ZjA3ZTdmMGU0N2Y1MzFiMDcyM2IwYjZmYjA3MjInLCc3ZjBlMzY2NjViNjZhNDQ5ODAxZTk4MDgyOTdjMzUnLA0KICAgICAgICAgICAgICAnNjY1ZjY3ZjBlMzdmMTQ4OTgwODJiMDcyM2IwMmQ1JywnN2VjOTY3ZjBlMzdmMTQ5OTgwODJiMDc4N2IwNmJkJywnN2YwN2U3ZjBlNDdmNTMxYjA3MjNiMGI2ZmIwNzIxJywNCiAgICAgICAgICAgICAgJzdmMGUzNjY2NWI2NmE0NDk4MDFlOTgwODI5N2MzNScsJzY2NWY2N2YwZTM3ZjE0ODk4MDgyYjA3MjI5N2MzNScsJzdlYzk2N2YwZTM3ZjE0OTk4MDgyYjA3ODdiMDZiZCcsDQogICAgICAgICAgICAgICc3ZjA3ZTdmMGU0N2Y1MzFiMDcyM2IwYjZmYjA3MjEnLCc3ZjBlMjY2NjViNjZhNDQ5ODAxZTk4MDgyOTdjMzUnLCc2NjVmNjdmMGUzN2YxNDg5ODAxZWIwNzIyOTdjMzUnLA0KICAgICAgICAgICAgICAnN2VjOTY3ZjBlMzdmMTQ5OTgwODJiMDc4N2IwNmJkJywnN2YwN2U3ZjBlNDdmNTMxYjA3MjNiMGI2ZmIwNzIxJywnN2YwZTI3ZjE0ODdmNTMxYjBiMGJiMGI2ZmIwNzIyJ10sDQoNCiAgICAvKioNCiAgICAgICog5pWw5a2X6L2s5Lit5paH6YCf5p+l6KGoDQogICAgICAqIEBBcnJheSBPZiBQcm9wZXJ0eQ0KICAgICAgKiBAdHJhbnMgWyfml6UnLCfkuIAnLCfkuownLCfkuIknLCflm5snLCfkupQnLCflha0nLCfkuIMnLCflhasnLCfkuZ0nLCfljYEnXQ0KICAgICAgKiBAcmV0dXJuIENuIHN0cmluZw0KICAgICAgKi8NCiAgICBuU3RyMTpbIlx1NjVlNSIsIlx1NGUwMCIsIlx1NGU4YyIsIlx1NGUwOSIsIlx1NTZkYiIsIlx1NGU5NCIsIlx1NTE2ZCIsIlx1NGUwMyIsIlx1NTE2YiIsIlx1NGU1ZCIsIlx1NTM0MSJdLA0KDQogICAgLyoqDQogICAgICAqIOaXpeacn+i9rOWGnOWOhuensOWRvOmAn+afpeihqA0KICAgICAgKiBAQXJyYXkgT2YgUHJvcGVydHkNCiAgICAgICogQHRyYW5zIFsn5YidJywn5Y2BJywn5bu/Jywn5Y2FJ10NCiAgICAgICogQHJldHVybiBDbiBzdHJpbmcNCiAgICAgICovDQogICAgblN0cjI6WyJcdTUyMWQiLCJcdTUzNDEiLCJcdTVlZmYiLCJcdTUzNDUiXSwNCg0KICAgIC8qKg0KICAgICAgKiDmnIjku73ovazlhpzljobnp7DlkbzpgJ/mn6XooagNCiAgICAgICogQEFycmF5IE9mIFByb3BlcnR5DQogICAgICAqIEB0cmFucyBbJ+atoycsJ+S4gCcsJ+S6jCcsJ+S4iScsJ+WbmycsJ+S6lCcsJ+WFrScsJ+S4gycsJ+WFqycsJ+S5nScsJ+WNgScsJ+WGrCcsJ+iFiiddDQogICAgICAqIEByZXR1cm4gQ24gc3RyaW5nDQogICAgICAqLw0KICAgIG5TdHIzOlsiXHU2YjYzIiwiXHU0ZThjIiwiXHU0ZTA5IiwiXHU1NmRiIiwiXHU0ZTk0IiwiXHU1MTZkIiwiXHU0ZTAzIiwiXHU1MTZiIiwiXHU0ZTVkIiwiXHU1MzQxIiwiXHU1MWFjIiwiXHU4MTRhIl0sDQoNCiAgICAvKioNCiAgICAgICog6L+U5Zue5Yac5Y6GeeW5tOS4gOaVtOW5tOeahOaAu+WkqeaVsA0KICAgICAgKiBAcGFyYW0gbHVuYXIgWWVhcg0KICAgICAgKiBAcmV0dXJuIE51bWJlcg0KICAgICAgKiBAZWc6dmFyIGNvdW50ID0gY2FsZW5kYXIubFllYXJEYXlzKDE5ODcpIDsvL2NvdW50PTM4Nw0KICAgICAgKi8NCiAgICBsWWVhckRheXM6ZnVuY3Rpb24oeSkgew0KICAgICAgICB2YXIgaSwgc3VtID0gMzQ4Ow0KICAgICAgICBmb3IoaT0weDgwMDA7IGk+MHg4OyBpPj49MSkgeyBzdW0gKz0gKHRoaXMubHVuYXJJbmZvW3ktMTkwMF0gJiBpKT8gMTogMDsgfQ0KICAgICAgICByZXR1cm4oc3VtK3RoaXMubGVhcERheXMoeSkpOw0KICAgIH0sDQoNCiAgICAvKioNCiAgICAgICog6L+U5Zue5Yac5Y6GeeW5tOmXsOaciOaYr+WTquS4quaciO+8m+iLpXnlubTmsqHmnInpl7DmnIgg5YiZ6L+U5ZueMA0KICAgICAgKiBAcGFyYW0gbHVuYXIgWWVhcg0KICAgICAgKiBAcmV0dXJuIE51bWJlciAoMC0xMikNCiAgICAgICogQGVnOnZhciBsZWFwTW9udGggPSBjYWxlbmRhci5sZWFwTW9udGgoMTk4NykgOy8vbGVhcE1vbnRoPTYNCiAgICAgICovDQogICAgbGVhcE1vbnRoOmZ1bmN0aW9uKHkpIHsgLy/pl7DlrZfnvJbnoIEgXHU5NWYwDQogICAgICAgIHJldHVybih0aGlzLmx1bmFySW5mb1t5LTE5MDBdICYgMHhmKTsNCiAgICB9LA0KDQogICAgLyoqDQogICAgICAqIOi/lOWbnuWGnOWOhnnlubTpl7DmnIjnmoTlpKnmlbAg6Iul6K+l5bm05rKh5pyJ6Zew5pyI5YiZ6L+U5ZueMA0KICAgICAgKiBAcGFyYW0gbHVuYXIgWWVhcg0KICAgICAgKiBAcmV0dXJuIE51bWJlciAoMOOAgTI544CBMzApDQogICAgICAqIEBlZzp2YXIgbGVhcE1vbnRoRGF5ID0gY2FsZW5kYXIubGVhcERheXMoMTk4NykgOy8vbGVhcE1vbnRoRGF5PTI5DQogICAgICAqLw0KICAgIGxlYXBEYXlzOmZ1bmN0aW9uKHkpIHsNCiAgICAgICAgaWYodGhpcy5sZWFwTW9udGgoeSkpICB7DQogICAgICAgICAgICByZXR1cm4oKHRoaXMubHVuYXJJbmZvW3ktMTkwMF0gJiAweDEwMDAwKT8gMzA6IDI5KTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4oMCk7DQogICAgfSwNCg0KICAgIC8qKg0KICAgICAgKiDov5Tlm57lhpzljoZ55bm0beaciO+8iOmdnumXsOaciO+8ieeahOaAu+WkqeaVsO+8jOiuoeeul23kuLrpl7DmnIjml7bnmoTlpKnmlbDor7fkvb/nlKhsZWFwRGF5c+aWueazlQ0KICAgICAgKiBAcGFyYW0gbHVuYXIgWWVhcg0KICAgICAgKiBAcmV0dXJuIE51bWJlciAoLTHjgIEyOeOAgTMwKQ0KICAgICAgKiBAZWc6dmFyIE1vbnRoRGF5ID0gY2FsZW5kYXIubW9udGhEYXlzKDE5ODcsOSkgOy8vTW9udGhEYXk9MjkNCiAgICAgICovDQogICAgbW9udGhEYXlzOmZ1bmN0aW9uKHksbSkgew0KICAgICAgICBpZihtPjEyIHx8IG08MSkge3JldHVybiAtMX0vL+aciOS7veWPguaVsOS7jjHoh7MxMu+8jOWPguaVsOmUmeivr+i/lOWbni0xDQogICAgICAgIHJldHVybiggKHRoaXMubHVuYXJJbmZvW3ktMTkwMF0gJiAoMHgxMDAwMD4+bSkpPyAzMDogMjkgKTsNCiAgICB9LA0KDQogICAgLyoqDQogICAgICAqIOi/lOWbnuWFrOWOhighKXnlubRt5pyI55qE5aSp5pWwDQogICAgICAqIEBwYXJhbSBzb2xhciBZZWFyDQogICAgICAqIEByZXR1cm4gTnVtYmVyICgtMeOAgTI444CBMjnjgIEzMOOAgTMxKQ0KICAgICAgKiBAZWc6dmFyIHNvbGFyTW9udGhEYXkgPSBjYWxlbmRhci5sZWFwRGF5cygxOTg3KSA7Ly9zb2xhck1vbnRoRGF5PTMwDQogICAgICAqLw0KICAgIHNvbGFyRGF5czpmdW5jdGlvbih5LG0pIHsNCiAgICAgICAgaWYobT4xMiB8fCBtPDEpIHtyZXR1cm4gLTF9IC8v6Iul5Y+C5pWw6ZSZ6K+vIOi/lOWbni0xDQogICAgICAgIHZhciBtcyA9IG0tMTsNCiAgICAgICAgaWYobXM9PTEpIHsgLy8y5pyI5Lu955qE6Zew5bmz6KeE5b6L5rWL566X5ZCO56Gu6K6k6L+U5ZueMjjmiJYyOQ0KICAgICAgICAgICAgcmV0dXJuKCgoeSU0ID09IDApICYmICh5JTEwMCAhPSAwKSB8fCAoeSU0MDAgPT0gMCkpPyAyOTogMjgpOw0KICAgICAgICB9ZWxzZSB7DQogICAgICAgICAgICByZXR1cm4odGhpcy5zb2xhck1vbnRoW21zXSk7DQogICAgICAgIH0NCiAgICB9LA0KDQogICAgLyoqDQogICAgICog5Yac5Y6G5bm05Lu96L2s5o2i5Li65bmy5pSv57qq5bm0DQogICAgICogQHBhcmFtICBsWWVhciDlhpzljoblubTnmoTlubTku73mlbANCiAgICAgKiBAcmV0dXJuIENuIHN0cmluZw0KICAgICAqLw0KICAgIHRvR2FuWmhpWWVhcjpmdW5jdGlvbihsWWVhcikgew0KICAgICAgICB2YXIgZ2FuS2V5ID0gKGxZZWFyIC0gMykgJSAxMDsNCiAgICAgICAgdmFyIHpoaUtleSA9IChsWWVhciAtIDMpICUgMTI7DQogICAgICAgIGlmKGdhbktleSA9PSAwKSBnYW5LZXkgPSAxMDsvL+WmguaenOS9meaVsOS4ujDliJnkuLrmnIDlkI7kuIDkuKrlpKnlubINCiAgICAgICAgaWYoemhpS2V5ID09IDApIHpoaUtleSA9IDEyOy8v5aaC5p6c5L2Z5pWw5Li6MOWImeS4uuacgOWQjuS4gOS4quWcsOaUrw0KICAgICAgICByZXR1cm4gdGhpcy5HYW5bZ2FuS2V5LTFdICsgdGhpcy5aaGlbemhpS2V5LTFdOw0KDQogICAgfSwNCg0KICAgIC8qKg0KICAgICAqIOWFrOWOhuaciOOAgeaXpeWIpOaWreaJgOWxnuaYn+W6pw0KICAgICAqIEBwYXJhbSAgY01vbnRoIFtkZXNjcmlwdGlvbl0NCiAgICAgKiBAcGFyYW0gIGNEYXkgW2Rlc2NyaXB0aW9uXQ0KICAgICAqIEByZXR1cm4gQ24gc3RyaW5nDQogICAgICovDQogICAgdG9Bc3RybzpmdW5jdGlvbihjTW9udGgsY0RheSkgew0KICAgICAgICB2YXIgcyAgID0gIlx1OWI1NFx1N2ZhZlx1NmMzNFx1NzRmNlx1NTNjY1x1OWM3Y1x1NzY3ZFx1N2Y4YVx1OTFkMVx1NzI1Ylx1NTNjY1x1NWI1MFx1NWRlOFx1ODdmOVx1NzJlZVx1NWI1MFx1NTkwNFx1NTk3M1x1NTkyOVx1NzllNFx1NTkyOVx1ODc0ZVx1NWMwNFx1NjI0Ylx1OWI1NFx1N2ZhZiI7DQogICAgICAgIHZhciBhcnIgPSBbMjAsMTksMjEsMjEsMjEsMjIsMjMsMjMsMjMsMjMsMjIsMjJdOw0KICAgICAgICByZXR1cm4gcy5zdWJzdHIoY01vbnRoKjIgLSAoY0RheSA8IGFycltjTW9udGgtMV0gPyAyIDogMCksMikgKyAiXHU1ZWE3IjsvL+W6pw0KICAgIH0sDQoNCiAgICAvKioNCiAgICAgICog5Lyg5YWlb2Zmc2V05YGP56e76YeP6L+U5Zue5bmy5pSvDQogICAgICAqIEBwYXJhbSBvZmZzZXQg55u45a+555Sy5a2Q55qE5YGP56e76YePDQogICAgICAqIEByZXR1cm4gQ24gc3RyaW5nDQogICAgICAqLw0KICAgIHRvR2FuWmhpOmZ1bmN0aW9uKG9mZnNldCkgew0KICAgICAgICByZXR1cm4gdGhpcy5HYW5bb2Zmc2V0JTEwXSArIHRoaXMuWmhpW29mZnNldCUxMl07DQogICAgfSwNCg0KICAgIC8qKg0KICAgICAgKiDkvKDlhaXlhazljoYoISl55bm06I635b6X6K+l5bm056ysbuS4quiKguawlOeahOWFrOWOhuaXpeacnw0KICAgICAgKiBAcGFyYW0geeWFrOWOhuW5tCgxOTAwLTIxMDAp77ybbuS6jOWNgeWbm+iKguawlOS4reeahOesrOWHoOS4quiKguawlCgxfjI0Ke+8m+S7jm49MSjlsI/lr5Ip566X6LW3DQogICAgICAqIEByZXR1cm4gZGF5IE51bWJlcg0KICAgICAgKiBAZWc6dmFyIF8yNCA9IGNhbGVuZGFyLmdldFRlcm0oMTk4NywzKSA7Ly9fMjQ9NDvmhI/ljbMxOTg35bm0MuaciDTml6Xnq4vmmKUNCiAgICAgICovDQogICAgZ2V0VGVybTpmdW5jdGlvbih5LG4pIHsNCiAgICAgICAgaWYoeTwxOTAwIHx8IHk+MjEwMCkge3JldHVybiAtMTt9DQogICAgICAgIGlmKG48MSB8fCBuPjI0KSB7cmV0dXJuIC0xO30NCiAgICAgICAgdmFyIF90YWJsZSA9IHRoaXMuc1Rlcm1JbmZvW3ktMTkwMF07DQogICAgICAgIHZhciBfaW5mbyA9IFsNCiAgICAgICAgICAgIHBhcnNlSW50KCcweCcrX3RhYmxlLnN1YnN0cigwLDUpKS50b1N0cmluZygpICwNCiAgICAgICAgICAgIHBhcnNlSW50KCcweCcrX3RhYmxlLnN1YnN0cig1LDUpKS50b1N0cmluZygpLA0KICAgICAgICAgICAgcGFyc2VJbnQoJzB4JytfdGFibGUuc3Vic3RyKDEwLDUpKS50b1N0cmluZygpLA0KICAgICAgICAgICAgcGFyc2VJbnQoJzB4JytfdGFibGUuc3Vic3RyKDE1LDUpKS50b1N0cmluZygpLA0KICAgICAgICAgICAgcGFyc2VJbnQoJzB4JytfdGFibGUuc3Vic3RyKDIwLDUpKS50b1N0cmluZygpLA0KICAgICAgICAgICAgcGFyc2VJbnQoJzB4JytfdGFibGUuc3Vic3RyKDI1LDUpKS50b1N0cmluZygpDQogICAgICAgIF07DQogICAgICAgIHZhciBfY2FsZGF5ID0gWw0KICAgICAgICAgICAgX2luZm9bMF0uc3Vic3RyKDAsMSksDQogICAgICAgICAgICBfaW5mb1swXS5zdWJzdHIoMSwyKSwNCiAgICAgICAgICAgIF9pbmZvWzBdLnN1YnN0cigzLDEpLA0KICAgICAgICAgICAgX2luZm9bMF0uc3Vic3RyKDQsMiksDQoNCiAgICAgICAgICAgIF9pbmZvWzFdLnN1YnN0cigwLDEpLA0KICAgICAgICAgICAgX2luZm9bMV0uc3Vic3RyKDEsMiksDQogICAgICAgICAgICBfaW5mb1sxXS5zdWJzdHIoMywxKSwNCiAgICAgICAgICAgIF9pbmZvWzFdLnN1YnN0cig0LDIpLA0KDQogICAgICAgICAgICBfaW5mb1syXS5zdWJzdHIoMCwxKSwNCiAgICAgICAgICAgIF9pbmZvWzJdLnN1YnN0cigxLDIpLA0KICAgICAgICAgICAgX2luZm9bMl0uc3Vic3RyKDMsMSksDQogICAgICAgICAgICBfaW5mb1syXS5zdWJzdHIoNCwyKSwNCg0KICAgICAgICAgICAgX2luZm9bM10uc3Vic3RyKDAsMSksDQogICAgICAgICAgICBfaW5mb1szXS5zdWJzdHIoMSwyKSwNCiAgICAgICAgICAgIF9pbmZvWzNdLnN1YnN0cigzLDEpLA0KICAgICAgICAgICAgX2luZm9bM10uc3Vic3RyKDQsMiksDQoNCiAgICAgICAgICAgIF9pbmZvWzRdLnN1YnN0cigwLDEpLA0KICAgICAgICAgICAgX2luZm9bNF0uc3Vic3RyKDEsMiksDQogICAgICAgICAgICBfaW5mb1s0XS5zdWJzdHIoMywxKSwNCiAgICAgICAgICAgIF9pbmZvWzRdLnN1YnN0cig0LDIpLA0KDQogICAgICAgICAgICBfaW5mb1s1XS5zdWJzdHIoMCwxKSwNCiAgICAgICAgICAgIF9pbmZvWzVdLnN1YnN0cigxLDIpLA0KICAgICAgICAgICAgX2luZm9bNV0uc3Vic3RyKDMsMSksDQogICAgICAgICAgICBfaW5mb1s1XS5zdWJzdHIoNCwyKSwNCiAgICAgICAgXTsNCiAgICAgICAgcmV0dXJuIHBhcnNlSW50KF9jYWxkYXlbbi0xXSk7DQogICAgfSwNCg0KICAgIC8qKg0KICAgICAgKiDkvKDlhaXlhpzljobmlbDlrZfmnIjku73ov5Tlm57msYnor63pgJrkv5fooajnpLrms5UNCiAgICAgICogQHBhcmFtIGx1bmFyIG1vbnRoDQogICAgICAqIEByZXR1cm4gQ24gc3RyaW5nDQogICAgICAqIEBlZzp2YXIgY25Nb250aCA9IGNhbGVuZGFyLnRvQ2hpbmFNb250aCgxMikgOy8vY25Nb250aD0n6IWK5pyIJw0KICAgICAgKi8NCiAgICB0b0NoaW5hTW9udGg6ZnVuY3Rpb24obSkgeyAvLyDmnIggPT4gXHU2NzA4DQogICAgICAgIGlmKG0+MTIgfHwgbTwxKSB7cmV0dXJuIC0xfSAvL+iLpeWPguaVsOmUmeivryDov5Tlm54tMQ0KICAgICAgICB2YXIgcyA9IHRoaXMublN0cjNbbS0xXTsNCiAgICAgICAgcys9ICJcdTY3MDgiOy8v5Yqg5LiK5pyI5a2XDQogICAgICAgIHJldHVybiBzOw0KICAgIH0sDQoNCiAgICAvKioNCiAgICAgICog5Lyg5YWl5Yac5Y6G5pel5pyf5pWw5a2X6L+U5Zue5rGJ5a2X6KGo56S65rOVDQogICAgICAqIEBwYXJhbSBsdW5hciBkYXkNCiAgICAgICogQHJldHVybiBDbiBzdHJpbmcNCiAgICAgICogQGVnOnZhciBjbkRheSA9IGNhbGVuZGFyLnRvQ2hpbmFEYXkoMjEpIDsvL2NuTW9udGg9J+W7v+S4gCcNCiAgICAgICovDQogICAgdG9DaGluYURheTpmdW5jdGlvbihkKXsgLy/ml6UgPT4gXHU2NWU1DQogICAgICAgIHZhciBzOw0KICAgICAgICBzd2l0Y2ggKGQpIHsNCiAgICAgICAgICAgIGNhc2UgMTA6DQogICAgICAgICAgICBzID0gJ1x1NTIxZFx1NTM0MSc7IGJyZWFrOw0KICAgICAgICBjYXNlIDIwOg0KICAgICAgICAgICAgcyA9ICdcdTRlOGNcdTUzNDEnOyBicmVhazsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlIDMwOg0KICAgICAgICAgICAgcyA9ICdcdTRlMDlcdTUzNDEnOyBicmVhazsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBkZWZhdWx0IDoNCiAgICAgICAgICAgIHMgPSB0aGlzLm5TdHIyW01hdGguZmxvb3IoZC8xMCldOw0KICAgICAgICAgICAgcyArPSB0aGlzLm5TdHIxW2QlMTBdOw0KICAgICAgICB9DQogICAgICAgIHJldHVybihzKTsNCiAgICB9LA0KDQogICAgLyoqDQogICAgICAqIOW5tOS7vei9rOeUn+iCllsh5LuF6IO95aSn6Ie06L2s5o2iXSA9PiDnsr7noa7liJLliIbnlJ/ogpbliIbnlYznur/mmK/igJznq4vmmKXigJ0NCiAgICAgICogQHBhcmFtIHkgeWVhcg0KICAgICAgKiBAcmV0dXJuIENuIHN0cmluZw0KICAgICAgKiBAZWc6dmFyIGFuaW1hbCA9IGNhbGVuZGFyLmdldEFuaW1hbCgxOTg3KSA7Ly9hbmltYWw9J+WFlCcNCiAgICAgICovDQogICAgZ2V0QW5pbWFsOiBmdW5jdGlvbih5KSB7DQogICAgICAgIHJldHVybiB0aGlzLkFuaW1hbHNbKHkgLSA0KSAlIDEyXQ0KICAgIH0sDQoNCiAgICAvKioNCiAgICAgICog5Lyg5YWl6Ziz5Y6G5bm05pyI5pel6I635b6X6K+m57uG55qE5YWs5Y6G44CB5Yac5Y6Gb2JqZWN05L+h5oGvIDw9PkpTT04NCiAgICAgICogQHBhcmFtIHkgIHNvbGFyIHllYXINCiAgICAgICogQHBhcmFtIG0gIHNvbGFyIG1vbnRoDQogICAgICAqIEBwYXJhbSBkICBzb2xhciBkYXkNCiAgICAgICogQHJldHVybiBKU09OIG9iamVjdA0KICAgICAgKiBAZWc6Y29uc29sZS5sb2coY2FsZW5kYXIuc29sYXIybHVuYXIoMTk4NywxMSwwMSkpOw0KICAgICAgKi8NCiAgICBzb2xhcjJsdW5hcjpmdW5jdGlvbiAoeSxtLGQpIHsgLy/lj4LmlbDljLrpl7QxOTAwLjEuMzF+MjEwMC4xMi4zMQ0KICAgICAgICB5ID0gcGFyc2VJbnQoeSkNCiAgICAgICAgbSA9IHBhcnNlSW50KG0pDQogICAgICAgIGQgPSBwYXJzZUludChkKQ0KICAgICAgICAvL+W5tOS7vemZkOWumuOAgeS4iumZkA0KICAgICAgICBpZih5PDE5MDAgfHwgeT4yMTAwKSB7DQogICAgICAgICAgICByZXR1cm4gLTE7Ly8gdW5kZWZpbmVk6L2s5o2i5Li65pWw5a2X5Y+Y5Li6TmFODQogICAgICAgIH0NCiAgICAgICAgLy/lhazljobkvKDlj4LmnIDkuIvpmZANCiAgICAgICAgaWYoeT09MTkwMCYmbT09MSYmZDwzMSkgew0KICAgICAgICAgICAgcmV0dXJuIC0xOw0KICAgICAgICB9DQogICAgICAgIC8v5pyq5Lyg5Y+CICDojrflvpflvZPlpKkNCiAgICAgICAgaWYoIXkpIHsNCiAgICAgICAgICAgIHZhciBvYmpEYXRlID0gbmV3IERhdGUoKTsNCiAgICAgICAgfWVsc2Ugew0KICAgICAgICAgICAgdmFyIG9iakRhdGUgPSBuZXcgRGF0ZSh5LHBhcnNlSW50KG0pLTEsZCkNCiAgICAgICAgfQ0KICAgICAgICB2YXIgaSwgbGVhcD0wLCB0ZW1wPTA7DQogICAgICAgIC8v5L+u5q2jeW1k5Y+C5pWwDQogICAgICAgIHZhciB5ID0gb2JqRGF0ZS5nZXRGdWxsWWVhcigpLA0KICAgICAgICAgICAgbSA9IG9iakRhdGUuZ2V0TW9udGgoKSsxLA0KICAgICAgICAgICAgZCA9IG9iakRhdGUuZ2V0RGF0ZSgpOw0KICAgICAgICB2YXIgb2Zmc2V0ID0gKERhdGUuVVRDKG9iakRhdGUuZ2V0RnVsbFllYXIoKSxvYmpEYXRlLmdldE1vbnRoKCksb2JqRGF0ZS5nZXREYXRlKCkpIC0gRGF0ZS5VVEMoMTkwMCwwLDMxKSkvODY0MDAwMDA7DQogICAgICAgIGZvcihpPTE5MDA7IGk8MjEwMSAmJiBvZmZzZXQ+MDsgaSsrKSB7DQogICAgICAgICAgICB0ZW1wICAgID0gdGhpcy5sWWVhckRheXMoaSk7DQogICAgICAgICAgICBvZmZzZXQgLT0gdGVtcDsNCiAgICAgICAgfQ0KICAgICAgICBpZihvZmZzZXQ8MCkgew0KICAgICAgICAgICAgb2Zmc2V0Kz10ZW1wOyBpLS07DQogICAgICAgIH0NCg0KICAgICAgICAvL+aYr+WQpuS7iuWkqQ0KICAgICAgICB2YXIgaXNUb2RheU9iaiA9IG5ldyBEYXRlKCksDQogICAgICAgICAgICBpc1RvZGF5ICAgID0gZmFsc2U7DQogICAgICAgIGlmKGlzVG9kYXlPYmouZ2V0RnVsbFllYXIoKT09eSAmJiBpc1RvZGF5T2JqLmdldE1vbnRoKCkrMT09bSAmJiBpc1RvZGF5T2JqLmdldERhdGUoKT09ZCkgew0KICAgICAgICAgICAgaXNUb2RheSA9IHRydWU7DQogICAgICAgIH0NCiAgICAgICAgLy/mmJ/mnJ/lh6ANCiAgICAgICAgdmFyIG5XZWVrID0gb2JqRGF0ZS5nZXREYXkoKSwNCiAgICAgICAgICAgY1dlZWsgID0gdGhpcy5uU3RyMVtuV2Vla107DQogICAgICAgIC8v5pWw5a2X6KGo56S65ZGo5Yeg6aG65bqU5aSp5pyd5ZGo5LiA5byA5aeL55qE5oOv5L6LDQogICAgICAgIGlmKG5XZWVrPT0wKSB7DQogICAgICAgICAgICBuV2VlayA9IDc7DQogICAgICAgIH0NCiAgICAgICAgLy/lhpzljoblubQNCiAgICAgICAgdmFyIHllYXIgICA9IGk7DQogICAgICAgIHZhciBsZWFwICAgPSB0aGlzLmxlYXBNb250aChpKTsgLy/pl7Dlk6rkuKrmnIgNCiAgICAgICAgdmFyIGlzTGVhcCA9IGZhbHNlOw0KDQogICAgICAgIC8v5pWI6aqM6Zew5pyIDQogICAgICAgIGZvcihpPTE7IGk8MTMgJiYgb2Zmc2V0PjA7IGkrKykgew0KICAgICAgICAgICAgLy/pl7DmnIgNCiAgICAgICAgICAgIGlmKGxlYXA+MCAmJiBpPT0obGVhcCsxKSAmJiBpc0xlYXA9PWZhbHNlKXsNCiAgICAgICAgICAgICAgICAtLWk7DQogICAgICAgICAgICAgICAgaXNMZWFwID0gdHJ1ZTsgdGVtcCA9IHRoaXMubGVhcERheXMoeWVhcik7IC8v6K6h566X5Yac5Y6G6Zew5pyI5aSp5pWwDQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlew0KICAgICAgICAgICAgICAgIHRlbXAgPSB0aGlzLm1vbnRoRGF5cyh5ZWFyLCBpKTsvL+iuoeeul+WGnOWOhuaZrumAmuaciOWkqeaVsA0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy/op6PpmaTpl7DmnIgNCiAgICAgICAgICAgIGlmKGlzTGVhcD09dHJ1ZSAmJiBpPT0obGVhcCsxKSkgeyBpc0xlYXAgPSBmYWxzZTsgfQ0KICAgICAgICAgICAgb2Zmc2V0IC09IHRlbXA7DQogICAgICAgIH0NCiAgICAgICAgLy8g6Zew5pyI5a+86Ie05pWw57uE5LiL5qCH6YeN5Y+g5Y+W5Y+NDQogICAgICAgIGlmKG9mZnNldD09MCAmJiBsZWFwPjAgJiYgaT09bGVhcCsxKQ0KICAgICAgICB7DQogICAgICAgICAgICBpZihpc0xlYXApew0KICAgICAgICAgICAgICAgIGlzTGVhcCA9IGZhbHNlOw0KICAgICAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAgICAgaXNMZWFwID0gdHJ1ZTsgLS1pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmKG9mZnNldDwwKQ0KICAgICAgICB7DQogICAgICAgICAgICBvZmZzZXQgKz0gdGVtcDsgLS1pOw0KICAgICAgICB9DQogICAgICAgIC8v5Yac5Y6G5pyIDQogICAgICAgIHZhciBtb250aCAgICAgID0gaTsNCiAgICAgICAgLy/lhpzljobml6UNCiAgICAgICAgdmFyIGRheSAgICAgICAgPSBvZmZzZXQgKyAxOw0KICAgICAgICAvL+WkqeW5suWcsOaUr+WkhOeQhg0KICAgICAgICB2YXIgc20gICAgICAgICA9IG0tMTsNCiAgICAgICAgdmFyIGd6WSAgICAgICAgPSB0aGlzLnRvR2FuWmhpWWVhcih5ZWFyKTsNCg0KICAgICAgICAvLyDlvZPmnIjnmoTkuKTkuKroioLmsJQNCiAgICAgICAgLy8gYnVnZml4LTIwMTctNy0yNCAxMTowMzozOCB1c2UgbHVuYXIgWWVhciBQYXJhbSBgeWAgTm90IGB5ZWFyYA0KICAgICAgICB2YXIgZmlyc3ROb2RlICA9IHRoaXMuZ2V0VGVybSh5LChtKjItMSkpOy8v6L+U5Zue5b2T5pyI44CM6IqC44CN5Li65Yeg5pel5byA5aeLDQogICAgICAgIHZhciBzZWNvbmROb2RlID0gdGhpcy5nZXRUZXJtKHksKG0qMikpOy8v6L+U5Zue5b2T5pyI44CM6IqC44CN5Li65Yeg5pel5byA5aeLDQoNCiAgICAgICAgLy8g5L6d5o2uMTLoioLmsJTkv67mraPlubLmlK/mnIgNCiAgICAgICAgdmFyIGd6TSAgICAgICAgPSB0aGlzLnRvR2FuWmhpKCh5LTE5MDApKjEyK20rMTEpOw0KICAgICAgICBpZihkPj1maXJzdE5vZGUpIHsNCiAgICAgICAgICAgIGd6TSAgICAgICAgPSB0aGlzLnRvR2FuWmhpKCh5LTE5MDApKjEyK20rMTIpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy/kvKDlhaXnmoTml6XmnJ/nmoToioLmsJTkuI7lkKYNCiAgICAgICAgdmFyIGlzVGVybSA9IGZhbHNlOw0KICAgICAgICB2YXIgVGVybSAgID0gbnVsbDsNCiAgICAgICAgaWYoZmlyc3ROb2RlPT1kKSB7DQogICAgICAgICAgICBpc1Rlcm0gID0gdHJ1ZTsNCiAgICAgICAgICAgIFRlcm0gICAgPSB0aGlzLnNvbGFyVGVybVttKjItMl07DQogICAgICAgIH0NCiAgICAgICAgaWYoc2Vjb25kTm9kZT09ZCkgew0KICAgICAgICAgICAgaXNUZXJtICA9IHRydWU7DQogICAgICAgICAgICBUZXJtICAgID0gdGhpcy5zb2xhclRlcm1bbSoyLTFdOw0KICAgICAgICB9DQogICAgICAgIC8v5pel5p+xIOW9k+aciOS4gOaXpeS4jiAxOTAwLzEvMSDnm7jlt67lpKnmlbANCiAgICAgICAgdmFyIGRheUN5Y2xpY2FsID0gRGF0ZS5VVEMoeSxzbSwxLDAsMCwwLDApLzg2NDAwMDAwKzI1NTY3KzEwOw0KICAgICAgICB2YXIgZ3pEICAgICAgICAgPSB0aGlzLnRvR2FuWmhpKGRheUN5Y2xpY2FsK2QtMSk7DQogICAgICAgIC8v6K+l5pel5pyf5omA5bGe55qE5pif5bqnDQogICAgICAgIHZhciBhc3RybyAgICAgICA9IHRoaXMudG9Bc3RybyhtLGQpOw0KDQogICAgICAgIHZhciBzb2xhckRhdGUgPSB5KyctJyttKyctJytkDQogICAgICAgIHZhciBsdW5hckRhdGUgPSB5ZWFyKyctJyttb250aCsnLScrZGF5DQoNCiAgICAgICAgdmFyIGZlc3RpdmFsID0gdGhpcy5mZXN0aXZhbA0KICAgICAgICB2YXIgbGZlc3RpdmFsID0gdGhpcy5sZmVzdGl2YWwNCg0KICAgICAgICB2YXIgZmVzdGl2YWxEYXRlID0gbSsnLScrZA0KICAgICAgICB2YXIgbHVuYXJGZXN0aXZhbERhdGUgPSBtb250aCsnLScrZGF5DQoNCiAgICAgICAgcmV0dXJuIHsNCiAgICAgICAgICBkYXRlOiBzb2xhckRhdGUsDQogICAgICAgICAgbHVuYXJEYXRlOiBsdW5hckRhdGUsDQogICAgICAgICAgZmVzdGl2YWw6IGZlc3RpdmFsW2Zlc3RpdmFsRGF0ZV0gPyBmZXN0aXZhbFtmZXN0aXZhbERhdGVdLnRpdGxlIDogbnVsbCwNCiAgICAgICAgICBsdW5hckZlc3RpdmFsOiBsZmVzdGl2YWxbbHVuYXJGZXN0aXZhbERhdGVdID8gbGZlc3RpdmFsW2x1bmFyRmVzdGl2YWxEYXRlXS50aXRsZSA6IG51bGwsDQogICAgICAgICAgJ2xZZWFyJzp5ZWFyLA0KICAgICAgICAgICdsTW9udGgnOm1vbnRoLA0KICAgICAgICAgICdsRGF5JzpkYXksDQogICAgICAgICAgJ0FuaW1hbCc6dGhpcy5nZXRBbmltYWwoeWVhciksDQogICAgICAgICAgJ0lNb250aENuJzooaXNMZWFwPyJcdTk1ZjAiOicnKSt0aGlzLnRvQ2hpbmFNb250aChtb250aCksDQogICAgICAgICAgJ0lEYXlDbic6dGhpcy50b0NoaW5hRGF5KGRheSksDQogICAgICAgICAgJ2NZZWFyJzp5LA0KICAgICAgICAgICdjTW9udGgnOm0sDQogICAgICAgICAgJ2NEYXknOmQsDQogICAgICAgICAgJ2d6WWVhcic6Z3pZLA0KICAgICAgICAgICdnek1vbnRoJzpnek0sDQogICAgICAgICAgJ2d6RGF5JzpnekQsDQogICAgICAgICAgJ2lzVG9kYXknOmlzVG9kYXksDQogICAgICAgICAgJ2lzTGVhcCc6aXNMZWFwLA0KICAgICAgICAgICduV2Vlayc6bldlZWssDQogICAgICAgICAgJ25jV2Vlayc6Ilx1NjYxZlx1NjcxZiIrY1dlZWssDQogICAgICAgICAgJ2lzVGVybSc6aXNUZXJtLA0KICAgICAgICAgICdUZXJtJzpUZXJtLA0KICAgICAgICAgICdhc3Rybyc6YXN0cm8NCiAgICAgICAgfTsNCiAgICB9LA0KDQogICAgLyoqDQogICAgICAqIOS8oOWFpeWGnOWOhuW5tOaciOaXpeS7peWPiuS8oOWFpeeahOaciOS7veaYr+WQpumXsOaciOiOt+W+l+ivpue7hueahOWFrOWOhuOAgeWGnOWOhm9iamVjdOS/oeaBryA8PT5KU09ODQogICAgICAqIEBwYXJhbSB5ICBsdW5hciB5ZWFyDQogICAgICAqIEBwYXJhbSBtICBsdW5hciBtb250aA0KICAgICAgKiBAcGFyYW0gZCAgbHVuYXIgZGF5DQogICAgICAqIEBwYXJhbSBpc0xlYXBNb250aCAgbHVuYXIgbW9udGggaXMgbGVhcCBvciBub3QuW+WmguaenOaYr+WGnOWOhumXsOaciOesrOWbm+S4quWPguaVsOi1i+WAvHRydWXljbPlj69dDQogICAgICAqIEByZXR1cm4gSlNPTiBvYmplY3QNCiAgICAgICogQGVnOmNvbnNvbGUubG9nKGNhbGVuZGFyLmx1bmFyMnNvbGFyKDE5ODcsOSwxMCkpOw0KICAgICAgKi8NCiAgICBsdW5hcjJzb2xhcjpmdW5jdGlvbih5LG0sZCxpc0xlYXBNb250aCkgeyAgIC8v5Y+C5pWw5Yy66Ze0MTkwMC4xLjMxfjIxMDAuMTIuMQ0KICAgICAgICB5ID0gcGFyc2VJbnQoeSkNCiAgICAgICAgbSA9IHBhcnNlSW50KG0pDQogICAgICAgIGQgPSBwYXJzZUludChkKQ0KICAgICAgICB2YXIgaXNMZWFwTW9udGggPSAhIWlzTGVhcE1vbnRoOw0KICAgICAgICB2YXIgbGVhcE9mZnNldCAgPSAwOw0KICAgICAgICB2YXIgbGVhcE1vbnRoICAgPSB0aGlzLmxlYXBNb250aCh5KTsNCiAgICAgICAgdmFyIGxlYXBEYXkgICAgID0gdGhpcy5sZWFwRGF5cyh5KTsNCiAgICAgICAgaWYoaXNMZWFwTW9udGgmJihsZWFwTW9udGghPW0pKSB7cmV0dXJuIC0xO30vL+S8oOWPguimgeaxguiuoeeul+ivpemXsOaciOWFrOWOhiDkvYbor6XlubTlvpflh7rnmoTpl7DmnIjkuI7kvKDlj4LnmoTmnIjku73lubbkuI3lkIwNCiAgICAgICAgaWYoeT09MjEwMCYmbT09MTImJmQ+MSB8fCB5PT0xOTAwJiZtPT0xJiZkPDMxKSB7cmV0dXJuIC0xO30vL+i2heWHuuS6huacgOWkp+aegemZkOWAvA0KICAgICAgICB2YXIgZGF5ICA9IHRoaXMubW9udGhEYXlzKHksbSk7DQogICAgICAgIHZhciBfZGF5ID0gZGF5Ow0KICAgICAgICAvL2J1Z0ZpeCAyMDE2LTktMjUNCiAgICAgICAgLy9pZiBtb250aCBpcyBsZWFwLCBfZGF5IHVzZSBsZWFwRGF5cyBtZXRob2QNCiAgICAgICAgaWYoaXNMZWFwTW9udGgpIHsNCiAgICAgICAgICAgIF9kYXkgPSB0aGlzLmxlYXBEYXlzKHksbSk7DQogICAgICAgIH0NCiAgICAgICAgaWYoeSA8IDE5MDAgfHwgeSA+IDIxMDAgfHwgZCA+IF9kYXkpIHtyZXR1cm4gLTE7fS8v5Y+C5pWw5ZCI5rOV5oCn5pWI6aqMDQoNCiAgICAgICAgLy/orqHnrpflhpzljobnmoTml7bpl7Tlt64NCiAgICAgICAgdmFyIG9mZnNldCA9IDA7DQogICAgICAgIGZvcih2YXIgaT0xOTAwO2k8eTtpKyspIHsNCiAgICAgICAgICAgIG9mZnNldCs9dGhpcy5sWWVhckRheXMoaSk7DQogICAgICAgIH0NCiAgICAgICAgdmFyIGxlYXAgPSAwLGlzQWRkPSBmYWxzZTsNCiAgICAgICAgZm9yKHZhciBpPTE7aTxtO2krKykgew0KICAgICAgICAgICAgbGVhcCA9IHRoaXMubGVhcE1vbnRoKHkpOw0KICAgICAgICAgICAgaWYoIWlzQWRkKSB7Ly/lpITnkIbpl7DmnIgNCiAgICAgICAgICAgICAgICBpZihsZWFwPD1pICYmIGxlYXA+MCkgew0KICAgICAgICAgICAgICAgICAgICBvZmZzZXQrPXRoaXMubGVhcERheXMoeSk7aXNBZGQgPSB0cnVlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIG9mZnNldCs9dGhpcy5tb250aERheXMoeSxpKTsNCiAgICAgICAgfQ0KICAgICAgICAvL+i9rOaNoumXsOaciOWGnOWOhiDpnIDooaXlhYXor6XlubTpl7DmnIjnmoTliY3kuIDkuKrmnIjnmoTml7blt64NCiAgICAgICAgaWYoaXNMZWFwTW9udGgpIHtvZmZzZXQrPWRheTt9DQogICAgICAgIC8vMTkwMOW5tOWGnOWOhuato+aciOS4gOaXpeeahOWFrOWOhuaXtumXtOS4ujE5MDDlubQx5pyIMzDml6Uw5pe2MOWIhjDnp5Io6K+l5pe26Ze05Lmf5piv5pys5Yac5Y6G55qE5pyA5byA5aeL6LW35aeL54K5KQ0KICAgICAgICB2YXIgc3RtYXAgICA9ICAgRGF0ZS5VVEMoMTkwMCwxLDMwLDAsMCwwKTsNCiAgICAgICAgdmFyIGNhbE9iaiAgPSAgIG5ldyBEYXRlKChvZmZzZXQrZC0zMSkqODY0MDAwMDArc3RtYXApOw0KICAgICAgICB2YXIgY1kgICAgICA9ICAgY2FsT2JqLmdldFVUQ0Z1bGxZZWFyKCk7DQogICAgICAgIHZhciBjTSAgICAgID0gICBjYWxPYmouZ2V0VVRDTW9udGgoKSsxOw0KICAgICAgICB2YXIgY0QgICAgICA9ICAgY2FsT2JqLmdldFVUQ0RhdGUoKTsNCg0KICAgICAgICByZXR1cm4gdGhpcy5zb2xhcjJsdW5hcihjWSxjTSxjRCk7DQogICAgfQ0KfTsNCg==
Add Comment
Please, Sign In to add comment