{"remainingRequest":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\xcjy-fvue\\src\\components\\MineMap\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\src\\components\\MineMap\\index.vue","mtime":1741378119818},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KDQppbXBvcnQgcGF0cm9JY29uIGZyb20gJ0Avdmlld3MvYmlnU2NyZWVuL3BhdHJvbFJlc2N1ZS9pbWFnZS9wYXRyb2wtaWNvbi5wbmcnDQppbXBvcnQgcmVzY3VlSWNvbiBmcm9tICdAL3ZpZXdzL2JpZ1NjcmVlbi9wYXRyb2xSZXNjdWUvaW1hZ2UvcmVzY3VlLWljb24ucG5nJw0KaW1wb3J0IGVtZXJnZXJFdmVudEljb24gZnJvbSAnQC92aWV3cy9iaWdTY3JlZW4vcGF0cm9sUmVzY3VlL2ltYWdlL2VtZXJnZXItZXZlbnQtaWNvbi5wbmcnDQppbXBvcnQgcmVzY3VlRXZlbnRJY29uIGZyb20gJ0Avdmlld3MvYmlnU2NyZWVuL3BhdHJvbFJlc2N1ZS9pbWFnZS9yZXNjdWUtZXZlbnQtaWNvbi5wbmcnDQppbXBvcnQgcm9hZEljb24gZnJvbSAnQC92aWV3cy9iaWdTY3JlZW4vcGF0cm9sUmVzY3VlL2ltYWdlL2NhcmRScm9hZC5wbmcnDQppbXBvcnQgcGlja3VwSWNvbiBmcm9tICdAL3ZpZXdzL2JpZ1NjcmVlbi9wYXRyb2xSZXNjdWUvaW1hZ2UvcGlja3VwLnBuZycNCmV4cG9ydCBkZWZhdWx0IHsNCiAgbmFtZTogJ01pbmVNYXAnLCAvLyBNYWluDQogIHByb3BzOiB7DQogICAgLy8g6buY6K6k5Zyw5Zu+5Yqg6L296YWN572uDQogICAgZGVmYXVsdE9wdGlvbnM6IHsNCiAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSksDQogICAgICB0eXBlOiBPYmplY3QsDQogICAgICByZXF1aXJlZDogZmFsc2UsDQogICAgfSwNCiAgICAvLyDoh6rlrprkuYnnsbvlkI0NCiAgICBjdXN0b21DbGFzczogew0KICAgICAgZGVmYXVsdDogJycsDQogICAgICB0eXBlOiBTdHJpbmcsDQogICAgICByZXF1aXJlZDogZmFsc2UsDQogICAgfSwNCiAgICAvLyDoh6rlrprkuYnngrnkvY3pm4blkIgNCiAgICBtYXJrZXJzOiB7DQogICAgICBkZWZhdWx0OiAoKSA9PiBbXSwNCiAgICAgIHR5cGU6IEFycmF5LA0KICAgICAgcmVxdWlyZWQ6IGZhbHNlLA0KICAgIH0sDQogICAgLy8g6Ieq5a6a5LmJ57q/6ZuG5ZCIDQogICAgbGluZXM6IHsNCiAgICAgIGRlZmF1bHQ6ICgpID0+IFtdLA0KICAgICAgdHlwZTogQXJyYXksDQogICAgICByZXF1aXJlZDogZmFsc2UsDQogICAgfSwNCiAgICAvLyDoh6rlrprkuYnpnaLpm4blkIgNCiAgICBwb2x5Z29uczogew0KICAgICAgZGVmYXVsdDogKCkgPT4gW10sDQogICAgICB0eXBlOiBBcnJheSwNCiAgICAgIHJlcXVpcmVkOiBmYWxzZSwNCiAgICB9LA0KICB9LA0KICBkYXRhKCkgew0KICAgIHJldHVybiB7DQogICAgICBtYXBPcHRpb25zOiB7DQogICAgICAgIC8vIHN0eWxlOiAnaHR0cHM6Ly9zZXJ2aWNlLm1pbmVkYXRhLmNuL21hcC9zb2x1L3N0eWxlLzExMDAxJyAvKiDlupXlm77moLflvI8gKi8sDQogICAgICAgIC8vIHN0eWxlOiAnbWluaU1hcC9zZXJ2aWNlL3NvbHUvc3R5bGUvaWQvMTY5MzInIC8qIOW6leWbvuagt+W8jyAqLywNCiAgICAgICAgc3R5bGU6DQogICAgICAgICAgJ2h0dHBzOi8vbWFwLmhvcGUuY21ldDE5NjUuY29tOjU4MDAwL3NlcnZpY2Uvc29sdS9zdHlsZS9pZC8xNjkzMicgLyog5bqV5Zu+5qC35byPICovLA0KICAgICAgICBjZW50ZXI6IFsxMDcuODU1ODUsIDI4LjQ2NTkwOF0gLyrlnLDlm77kuK3lv4PngrkqLywNCiAgICAgICAgem9vbTogNiAvKuWcsOWbvum7mOiupOe8qeaUvuetiee6pyovLA0KICAgICAgICBwaXRjaDogMCAvKuWcsOWbvuS/r+S7sOinkuW6piovLA0KICAgICAgICBtYXhab29tOiAyMCAvKuWcsOWbvuacgOWkp+e8qeaUvuetiee6pyovLA0KICAgICAgICBtaW5ab29tOiAzIC8q5Zyw5Zu+5pyA5bCP57yp5pS+562J57qnKi8sDQogICAgICB9LA0KICAgICAgbWluZU1hcDogT2JqZWN0LmZyZWV6ZShtaW5lbWFwKSwgLy8gbWluZU1hcOaPkuS7tg0KICAgICAgbWFwOiBudWxsLCAvLyDlnLDlm77lrp7kvovlr7nosaENCiAgICAgIG1hcExvYWRlZDogZmFsc2UsDQogICAgICBib3VuZGFyeUxpbmVGYWNlOiBbDQogICAgICAgIHsNCiAgICAgICAgICAvLyDlnLDlm77nnIHku73ovrnnlYwgIGxheWVySWRs6L6555WM57q/IGxheWVySWRmIOi+ueeVjOmdog0KICAgICAgICAgIGNvZGU6ICdTQycsDQogICAgICAgICAgbGF5ZXJJZGw6ICcyMDE4N2FjNzM2N2UxNDAzNGI4YzE5YTQwYTMzZmUzMCcsDQogICAgICAgICAgbGF5ZXJJZGY6ICc0Mzk0ODc2NDYwZjZjM2JkMzRkMDYxNWJmMDRjZmY0NycsDQogICAgICAgIH0sDQogICAgICAgIHsNCiAgICAgICAgICBjb2RlOiAnQUgnLA0KICAgICAgICAgIGxheWVySWRsOiAnZWYwMWEwMTY5YWFlYzgxZTc3ZTlmMDA0OGNlYjk3MTMnLA0KICAgICAgICAgIGxheWVySWRmOiAnM2RkZTUxMGM0NDYyMzBjYmQ0ZmRkMTVjNWZiODU0MTYnLA0KICAgICAgICB9LA0KICAgICAgICB7DQogICAgICAgICAgY29kZTogJ1lOJywNCiAgICAgICAgICBsYXllcklkbDogJzA2ZmMwMjMwZGFkNDM3ZTg1ZDI0NjAwZTA2NTE2NTg3JywNCiAgICAgICAgICBsYXllcklkZjogJzAzMWU1ZTYxZGY3Mzc3OGJjZTJjMmQ4MmE0ZmMwYTFjJywNCiAgICAgICAgfSwNCiAgICAgICAgew0KICAgICAgICAgIGNvZGU6ICdHWicsDQogICAgICAgICAgbGF5ZXJJZGw6ICc2YzY2Y2RiYWRkYmNmODM5YTUyOWIwM2JjZWUyMzI2NicsDQogICAgICAgICAgbGF5ZXJJZGY6ICdkOTYwY2U0ZjBmZTNlYWZlZWJmMDJhOTA4ZTI1OTEwYicsDQogICAgICAgIH0sDQogICAgICAgIHsNCiAgICAgICAgICBjb2RlOiAnQ1EnLA0KICAgICAgICAgIGxheWVySWRsOiAnZGZjOTc3OWE1MWRlNzliMmViNDA3OTBmNjEzOTY0ZTInLA0KICAgICAgICAgIGxheWVySWRmOiAnYjM3NTczZDVkNzNmMjIzYWE1Y2Y0MjkzZWZlZGEzYzAnLA0KICAgICAgICB9LA0KICAgICAgICB7DQogICAgICAgICAgY29kZTogJ1hKJywNCiAgICAgICAgICBsYXllcklkbDogJ2I2ZjhjNzNiMmQzMTRiZDZlMDkxMDEyZmQ3Njk4ZTk0JywNCiAgICAgICAgICBsYXllcklkZjogJzIzOGE1ZTlkZTU2ZmFhNzM4NTg3M2FhYWRmM2FkNjdkJywNCiAgICAgICAgfSwNCiAgICAgICAgew0KICAgICAgICAgIGNvZGU6ICdITicsDQogICAgICAgICAgbGF5ZXJJZGw6ICc0ZWRiZTk1ZTNlYzg3ODYyNzZiYjM5Y2U3YzQyNDUzZicsDQogICAgICAgICAgbGF5ZXJJZGY6ICdjMWM1YzA0MDI1NzMyNjM1MmQ2OTQ1MjhiN2UzM2ZhYycsDQogICAgICAgIH0sDQogICAgICBdLA0KICAgICAgLy8g6YeN5bqGIDE3NjYwMTc0NzI2OTc0NzUwNzINCiAgICAgIC8v5LqR5Y2XICAgMTc2NjAxNzk3NjIwMjY5ODc1Mg0KICAgICAgLy/lm5vlt50gMTc2NjAxOTMyMjg5NzI0NDE2MA0KICAgICAgcHJvdmluY2VNYXJrZXI6IFsNCiAgICAgICAgew0KICAgICAgICAgIHpiOiBbMTA3LjU2OTg1NSwgMzAuMzY3MDk1XSwNCiAgICAgICAgICBpZDogJzE0MzAwNDk1NTA1Mzc3MjM5MDQnLCAvL+mHjeW6hg0KICAgICAgICAgIHpvb206IDYuOCwNCiAgICAgICAgfSwNCiAgICAgICAgew0KICAgICAgICAgIHpiOiBbMTAyLjkyODk5NSwgMzAuNTI0ODddLA0KICAgICAgICAgIGlkOiAnIjE1NTE5NzM2MzQ1NjU3ODc2MzciJywNCiAgICAgICAgICB6b29tOiA1LjgsIC8v5Zub5bedDQogICAgICAgIH0sDQogICAgICAgIHsNCiAgICAgICAgICB6YjogWzEwMS41OTMxMDMsIDI1LjM1MzM3NV0sDQogICAgICAgICAgaWQ6ICcxNTUxOTczNjMwMTAyMDgxNTM2JywgLy/kupHljZcNCiAgICAgICAgICB6b29tOiA2LA0KICAgICAgICB9LA0KICAgICAgICB7DQogICAgICAgICAgemI6IFsxMDYuNjQxMjQzLCAyNy4xMDc5N10sDQogICAgICAgICAgaWQ6ICdHWicsDQogICAgICAgICAgem9vbTogNi41LA0KICAgICAgICB9LA0KICAgICAgICB7DQogICAgICAgICAgemI6IFsxMTcuMjI5OTI5LCAzMi4zMjUzOThdLA0KICAgICAgICAgIGlkOiAnQUgnLA0KICAgICAgICAgIHpvb206IDYuNSwNCiAgICAgICAgfSwNCiAgICAgIF0sDQogICAgICBpbnRlcnZhbElkOiBudWxsLA0KICAgICAgc3RhcnRSZXNjdWVpbnRlcnZhbElkOiBudWxsLA0KICAgICAgcmVzY3VlQmxpbmtJbnRlcnZhbHM6IFtdLA0KICAgICAgaWRMaXN0OiBbXSwNCiAgICAgIHNvdXJjZUlkTGlzdDogW10sDQogICAgICByZXNjdWVJZExpc3Q6IFtdLA0KICAgICAgcmVzY3VlU291cmNlSWRMaXN0OiBbXSwgLy/lm77lsYLotYTmupBpZA0KICAgICAgbWFya2Vyc1Jlc2N1ZTogW10sDQogICAgICBtYXJrZXJSZXNjdWVFdmVudDogW10sDQogICAgICBtYXJrZXJFbWVyZ2VuY2llczogW10sDQogICAgICBtYXJrZXJPbmxpbmVDYXI6IFtdLA0KICAgICAgbWFya2VyT25seUNhcjogW10sDQogICAgICBvbmxpbmVDYXJDbGljazogZmFsc2UsDQogICAgICBjb3VudDogMCwNCiAgICAgIHBhdHJvbENsaWNrOiBmYWxzZSwNCiAgICAgIHJlc2N1ZUNsaWNrOiBmYWxzZSwNCiAgICAgIGVtZXJnZW5jaWVzQ2xpY2s6IGZhbHNlLA0KICAgICAgcmVzY3VlRXZlbnRDbGljazogZmFsc2UsDQogICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgIGV2ZW50TWFya2VyczogW10sIC8vIOS6i+S7tumpu+eCuQ0KICAgICAgdGFza01hcmtlcnM6IFtdLCAvLyDku7vliqHpqbvngrkNCiAgICAgIGp5UGxhY2VNYXJrZXJzOiBbXSwgLy8g5beh5p+l6am754K5DQogICAgICB4Y1BsYWNlTWFya2VyczogW10sIC8vIOaVkeaPtOmpu+eCuQ0KICAgIH0NCiAgfSwNCiAgY3JlYXRlZCgpIHsNCiAgICAvLyDphY3nva4ga2V544CBc29sdXRpb24NCiAgICB0aGlzLm1pbmVNYXAua2V5ID0gJzMwYmU3ODMxY2FmODQ2ODViOTRlNzg3MjdlNGNlMjVmJw0KICAgIHRoaXMubWluZU1hcC5zb2x1dGlvbiA9IDE2OTMyDQogICAgdGhpcy5taW5lTWFwLmRvbWFpblVybCA9DQogICAgICAnaHR0cHM6Ly9tYXAuaG9wZS5jbWV0MTk2NS5jb206NTgwMDAnIC8qIE1pbmVNYXDmoLnln5/lkI3lnLDlnYAgKi8NCiAgICAvKiBNaW5lTWFw55+i6YeP5pWw5o2u5pyN5Yqh5qC55Z+f5ZCN5Zyw5Z2AICovDQogICAgdGhpcy5taW5lTWFwLmRhdGFEb21haW5VcmwgPSAnaHR0cHM6Ly9tYXAuaG9wZS5jbWV0MTk2NS5jb206NTgwMDAnDQogICAgLyogTWluZU1hcOefoumHj+aVsOaNruacjeWKoeaWsOinhOiMg+agueWfn+WQjeWcsOWdgCAqLw0KICAgIHRoaXMubWluZU1hcC5zZXJ2ZXJEb21haW5VcmwgPSAnaHR0cHM6Ly9tYXAuaG9wZS5jbWV0MTk2NS5jb206NTgwMDAnDQogICAgLyogTWluZU1hcOW6leWbvumbqueip+WbvuWcsOWdgCAqLw0KICAgIHRoaXMubWluZU1hcC5zcHJpdGVVcmwgPSBbDQogICAgICAnaHR0cHM6Ly9tYXAuaG9wZS5jbWV0MTk2NS5jb206NTgwMDAvbWluZW1hcGFwaS96c3h6L3pzeHonLA0KICAgIF0gLy8gIi4vbWFwcmVzb3VyY2Uvc3ByaXRlL3Nwcml0ZSIsDQogICAgLyogTWluZU1hcOWQjuWPsOacjeWKoeagueWcsOWdgCAqLw0KICAgIHRoaXMubWluZU1hcC5zZXJ2aWNlVXJsID0gJ2h0dHBzOi8vbWFwLmhvcGUuY21ldDE5NjUuY29tOjU4MDAwL3NlcnZpY2UvJw0KDQogICAgLy8g5ZCI5bm26KaG55uW6buY6K6k6YWN572u6aG5DQogICAgdGhpcy5tYXBPcHRpb25zID0gew0KICAgICAgLi4udGhpcy5tYXBPcHRpb25zLA0KICAgICAgLi4udGhpcy5kZWZhdWx0T3B0aW9ucywNCiAgICB9DQogIH0sDQogIG1vdW50ZWQoKSB7DQogICAgdGhpcy5pbml0TWluZU1hcCgpDQogIH0sDQogIG1ldGhvZHM6IHsNCiAgICAvLyDliqDovb1taW5lTWFwMkTlnLDlm74NCiAgICBpbml0TWluZU1hcCgpIHsNCiAgICAgIC8vIOWIneWni+WMluWcsOWbvuWunuS+iw0KICAgICAgdGhpcy5tYXAgPSBuZXcgdGhpcy5taW5lTWFwLk1hcCh7DQogICAgICAgIGNvbnRhaW5lcjogdGhpcy4kcmVmcy5tYXAsDQogICAgICAgIC4uLnRoaXMubWFwT3B0aW9ucywNCiAgICAgIH0pDQogICAgICAgIC5vbignbG9hZCcsIChfKSA9PiB7DQogICAgICAgICAgdGhpcy5zZXRIaW5pZ2h0KCkgLy8g56Gu5L+d5Zyo5Zyw5Zu+5Yqg6L295a6M5oiQ5ZCO6LCD55SoIHNldEhpbmlnaHQNCiAgICAgICAgICB0aGlzLm1hcExvYWRlZCA9IHRydWUgLy8g5b2T5Zyw5Zu+5Yqg6L295a6M5oiQ5pe277yM6K6+572u5qCH5b+X5Li6IHRydWUNCiAgICAgICAgfSkNCiAgICAgICAgLm9uKCdlcnJvcicsIChlcnJvcikgPT4gdGhpcy4kZW1pdCgnb25FcnJvcicsIGVycm9yKSkNCiAgICB9LA0KICAgIC8v6K6+572u6auY5Lqu5Yy65Z+fDQogICAgc2V0SGluaWdodCgpIHsNCiAgICAgIGlmICh0aGlzLm1hcCkgew0KICAgICAgICB0aGlzLmJvdW5kYXJ5TGluZUZhY2UuZm9yRWFjaCgoZWwpID0+IHsNCiAgICAgICAgICB0aGlzLm1hcC5zZXRMYXlvdXRQcm9wZXJ0eShlbC5sYXllcklkbCwgJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpDQogICAgICAgICAgdGhpcy5tYXAuc2V0TGF5b3V0UHJvcGVydHkoZWwubGF5ZXJJZGYsICd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKQ0KICAgICAgICB9KQ0KICAgICAgICB0aGlzLiRlbWl0KCdvbkxvYWQnLCB0aGlzLm1hcCkNCiAgICAgIH0NCiAgICB9LA0KICAgIC8v5Zyw5Zu+5Lit5b+D54K55YiH5o2iLXRlc3QNCiAgICBjaGFuZ2VNYXBDZW50ZXIodmFsKSB7DQogICAgICB0aGlzLnByb3ZpbmNlTWFya2VyLmZvckVhY2goKGVsKSA9PiB7DQogICAgICAgIGlmICh2YWwgPT09IGVsLmlkKSB7DQogICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gew0KICAgICAgICAgICAgdGhpcy5tYXAuZmx5VG8oew0KICAgICAgICAgICAgICBjZW50ZXI6IGVsLnpiLA0KICAgICAgICAgICAgICB6b29tOiBlbC56b29tLA0KICAgICAgICAgICAgfSkNCiAgICAgICAgICB9KQ0KICAgICAgICB9DQogICAgICB9KQ0KICAgIH0sDQogICAgLy8g6YeN5paw5Yqg6L295Zyw5Zu+DQogICAgcmVzZXRNYXAoY2FsbGJhY2spIHsNCiAgICAgIGlmICh0aGlzLm1hcCAmJiB0aGlzLm1hcExvYWRlZCkgew0KICAgICAgICAvLyDnp7vpmaTmiYDmnInliqjmgIHmt7vliqDnmoTmoIforrDjgIHnur/lkozpnaINCiAgICAgICAgdGhpcy5tYXJrZXJzLmZvckVhY2goKG1hcmtlcikgPT4gbWFya2VyLnJlbW92ZSgpKQ0KICAgICAgICB0aGlzLmxpbmVzLmZvckVhY2goKGxpbmUpID0+IHRoaXMubWFwLnJlbW92ZUxheWVyKGxpbmUuaWQpKQ0KICAgICAgICB0aGlzLnBvbHlnb25zLmZvckVhY2goKHBvbHlnb24pID0+IHRoaXMubWFwLnJlbW92ZUxheWVyKHBvbHlnb24uaWQpKQ0KDQogICAgICAgIC8vIOa4heepuuWtmOWCqOeahOWbvuWxguW8leeUqA0KICAgICAgICB0aGlzLm1hcmtlcnMubGVuZ3RoID0gMA0KICAgICAgICB0aGlzLmxpbmVzLmxlbmd0aCA9IDANCiAgICAgICAgdGhpcy5wb2x5Z29ucy5sZW5ndGggPSAwDQoNCiAgICAgICAgLy8g6YeN5paw5bqU55So5bqV5Zu+5qC35byPDQogICAgICAgIGNvbnN0IHtjZW50ZXIsIHpvb219ID0gdGhpcy5tYXBPcHRpb25zDQogICAgICAgIHRoaXMubWFwLnNldENlbnRlcihjZW50ZXIpDQogICAgICAgIHRoaXMubWFwLnNldFpvb20oem9vbSkNCiAgICAgIH0NCiAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHRoaXMubWFwKQ0KICAgIH0sDQoNCiAgICAvL+a4hemZpOW3oeafpempu+eCueWbvuWxguagh+iusA0KICAgIGNsZWFyTGF5TWFya2VyKCkgew0KICAgICAgdGhpcy5tYXJrZXJzLmZvckVhY2goKG1hcmtlcikgPT4gbWFya2VyLnJlbW92ZSgpKQ0KICAgICAgdGhpcy5tYXJrZXJzLmxlbmd0aCA9IDAgLy8g5riF56m65qCH6K6w5pWw57uEDQogICAgICAvL+enu+mZpOaVsOaNrua6kA0KICAgICAgdGhpcy5zb3VyY2VJZExpc3QuZm9yRWFjaCgoaXRlbSkgPT4gew0KICAgICAgICB0aGlzLm1hcC5yZW1vdmVTb3VyY2UoaXRlbSkNCiAgICAgIH0pDQogICAgICB0aGlzLnNvdXJjZUlkTGlzdC5sZW5ndGggPSAwDQogICAgICAvLyDnp7vpmaTot6/mrrXlm77lsYINCiAgICAgIHRoaXMuaWRMaXN0LmZvckVhY2goKGl0ZW0pID0+IHsNCiAgICAgICAgaWYgKHRoaXMubWFwLmdldExheWVyKGl0ZW0pKSB7DQogICAgICAgICAgdGhpcy5tYXAucmVtb3ZlTGF5ZXIoaXRlbSkNCiAgICAgICAgfQ0KICAgICAgfSkNCiAgICAgIHRoaXMuaWRMaXN0Lmxlbmd0aCA9IDANCiAgICAgIC8vIHRoaXMuc3RvcEJsaW5rKCkNCiAgICAgIC8vIHRoaXMuc3RvcEJsaW5raW5nKCkNCiAgICB9LA0KICAgIC8v5riF6Zmk5pWR5o+06am754K55Zu+5bGC5qCH6K6wDQogICAgY2xlYXJMYXlSZXNjdWVNYWtlcigpIHsNCiAgICAgIHRoaXMubWFya2Vyc1Jlc2N1ZS5mb3JFYWNoKChtYXJrZXIpID0+IG1hcmtlci5yZW1vdmUoKSkNCiAgICAgIHRoaXMubWFya2Vyc1Jlc2N1ZS5sZW5ndGggPSAwIC8vIOa4heepuuagh+iusOaVsOe7hA0KICAgICAgLy/np7vpmaTmlbDmja7mupANCiAgICAgIHRoaXMucmVzY3VlU291cmNlSWRMaXN0LmZvckVhY2goKGl0ZW0pID0+IHsNCiAgICAgICAgdGhpcy5tYXAucmVtb3ZlU291cmNlKGl0ZW0pDQogICAgICB9KQ0KICAgICAgdGhpcy5yZXNjdWVTb3VyY2VJZExpc3QubGVuZ3RoID0gMA0KICAgICAgLy8g56e76Zmk6Lev5q615Zu+5bGCDQogICAgICB0aGlzLnJlc2N1ZUlkTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7DQogICAgICAgIGlmICh0aGlzLm1hcC5nZXRMYXllcihpdGVtKSkgew0KICAgICAgICAgIHRoaXMubWFwLnJlbW92ZUxheWVyKGl0ZW0pDQogICAgICAgIH0NCiAgICAgIH0pDQogICAgICB0aGlzLnJlc2N1ZUlkTGlzdC5sZW5ndGggPSAwDQogICAgICB0aGlzLnN0b3BSZXNjdWVTdGFydEJsaW5raW5nKCkNCiAgICB9LA0KICAgIC8v5riF6Zmk6L2m6L6G5qOA5rWL5qCH6K6wDQogICAgY2xlYXJDYXJNYXJrZXIoKSB7DQogICAgICB0aGlzLm1hcmtlck9ubGluZUNhci5mb3JFYWNoKChtYXJrZXIpID0+IHsNCiAgICAgICAgbWFya2VyLnJlbW92ZSgpDQogICAgICB9KQ0KICAgICAgdGhpcy5tYXJrZXJPbmxpbmVDYXIubGVuZ3RoID0gMA0KICAgICAgdGhpcy5tYXJrZXJPbmx5Q2FyLmZvckVhY2goKG1hcmtlcikgPT4gew0KICAgICAgICBtYXJrZXIucmVtb3ZlKCkNCiAgICAgIH0pDQoNCiAgICAgIHRoaXMubWFya2VyT25seUNhci5sZW5ndGggPSAwDQogICAgfSwNCg0KICAgIC8v5pS55Y+Y5Zyw5Zu+5Lit5b+D54K5DQogICAgY2hhbmdlQ2VudGVyKHZhbCkgew0KICAgICAgaWYgKHRoaXMubWFwKSB7DQogICAgICAgIC8vIHRoaXMubWFwIC8vIOWQjOaXtuS8oOWFpee8qeaUvue6p+WIq+WSjOS4reW/g+eCuee7j+e6rOW6pg0KICAgICAgICAvLyAgIC5zZXRab29tQW5kQ2VudGVyKDgsIHZhbCkgLy/orr7nva7lnLDlm77lsYLnuqcNCiAgICAgICAgdGhpcy5tYXAuZmx5VG8oew0KICAgICAgICAgIGNlbnRlcjogdmFsLA0KICAgICAgICAgIHpvb206IDYuNSwNCiAgICAgICAgfSkNCiAgICAgIH0NCiAgICB9LA0KDQogICAgLyoqDQogICAgICogQGRlc2NyaXB0aW9uOg0KICAgICAqIEBwYXJhbSB7Kn0gdHlwZSDnsbvlnosNCiAgICAgKiBAcmV0dXJuIHsqfQ0KICAgICAqLw0KICAgIHJlbW92ZU1hcmtlcih0eXBlKSB7DQogICAgICB0aGlzW2Ake3R5cGV9TWFya2Vyc2BdLmZvckVhY2goKG1hcmtlcikgPT4gbWFya2VyLnJlbW92ZSgpKQ0KICAgIH0sDQoNCiAgICByZW1vdmVBbGxNYXJrZXIoKSB7DQogICAgICB0aGlzLmV2ZW50TWFya2Vycy5mb3JFYWNoKChtYXJrZXIpID0+IG1hcmtlci5yZW1vdmUoKSkNCiAgICAgIHRoaXMudGFza01hcmtlcnMuZm9yRWFjaCgobWFya2VyKSA9PiBtYXJrZXIucmVtb3ZlKCkpDQogICAgICB0aGlzLmp5UGxhY2VNYXJrZXJzLmZvckVhY2goKG1hcmtlcikgPT4gbWFya2VyLnJlbW92ZSgpKQ0KICAgICAgdGhpcy54Y1BsYWNlTWFya2Vycy5mb3JFYWNoKChtYXJrZXIpID0+IG1hcmtlci5yZW1vdmUoKSkNCiAgICB9LA0KDQogICAgLyoqDQogICAgICogQGRlc2NyaXB0aW9uOg0KICAgICAqIEBwYXJhbSB7QXJyYXl9IG1hcmtlcnMg54K55L2N6ZuG5ZCIDQogICAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGUg57G75Z6LDQogICAgICogQHJldHVybiB7IHZvaWQgfQ0KICAgICAqLw0KICAgIC8vIOWcsOWbvuaJk+eCuQ0KICAgIG1pbmVtYXBNYXJrZXIobWFya2VycywgdHlwZSkgew0KICAgICAgbWFya2Vycy5mb3JFYWNoKChpdGVtKSA9PiB7DQogICAgICAgIGlmIChpdGVtLmxuZyAmJiBpdGVtLmxhdCkgew0KICAgICAgICAgIGl0ZW0ubG5nbGF0ID0gW2l0ZW0ubG5nLCBpdGVtLmxhdF0NCiAgICAgICAgICAvLyDliJvlu7pkaXbkvZzkuLrmoIforrDngrkNCiAgICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKQ0KICAgICAgICAgIGVsLmNsYXNzTmFtZSA9ICdtYXAtcG9pbnQnDQoNCiAgICAgICAgICAvLyBsZXQgcDEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKQ0KICAgICAgICAgIC8vIHAxLmNsYXNzTmFtZSA9ICd0ZXh0LWJveCB0ZXh0LWJveC1iZy0nICsgaXRlbS5zdGF0ZQ0KICAgICAgICAgIC8vIHAxLmlubmVySFRNTCA9IGl0ZW0uYnJpZGdlTmFtZQ0KDQogICAgICAgICAgbGV0IHAyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykNCiAgICAgICAgICBwMi5jbGFzc05hbWUgPSAnaWNvbi1ib3ggaWNvbi1wb2ludC0nICsgdHlwZSArICdQb2ludCcNCg0KICAgICAgICAgIC8vIGxldCBwMyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpDQogICAgICAgICAgLy8gcDMuY2xhc3NOYW1lID0gJ2ljb24tYnJpZGdlIGljb24tYnJpZGdlLScgKyBpdGVtLnR5cGUNCg0KICAgICAgICAgIC8vIHAyLmFwcGVuZENoaWxkKHAzKQ0KICAgICAgICAgIC8vIGVsLmFwcGVuZENoaWxkKHAxKQ0KICAgICAgICAgIGVsLmFwcGVuZENoaWxkKHAyKQ0KDQogICAgICAgICAgLy8g5qCH6K6w54K55L2NDQogICAgICAgICAgbGV0IG1hcmtlciA9IG5ldyBtaW5lbWFwLk1hcmtlcihlbCwge29mZnNldDogWy0zMywgLTMwXX0pDQogICAgICAgICAgICAuc2V0TG5nTGF0KGl0ZW0ubG5nbGF0KQ0KICAgICAgICAgICAgLmFkZFRvKHRoaXMubWFwKQ0KICAgICAgICAgIHRoaXNbYCR7dHlwZX1NYXJrZXJzYF0ucHVzaChtYXJrZXIpDQogICAgICAgICAgLy8g5re75Yqg54K55Ye75LqL5Lu2DQogICAgICAgICAgLy8gZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7DQogICAgICAgICAgLy8gICB0aGlzLiRyZWZzLmluZm9EaWFsb2cub3BlbihpdGVtKQ0KICAgICAgICAgIC8vIH0pDQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgY29uc29sZS5sb2coJ+ivpeeCueS9jeaXoOWumuS9jeaVsOaNricsIGl0ZW0pDQogICAgICAgIH0NCiAgICAgIH0pDQogICAgfSwNCiAgICBhYmMoKSB7DQogICAgICBjb25zb2xlLmxvZygxMjMsICfosIPnlKjlnLDlm77mlrnms5UtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScpDQogICAgfSwNCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KICAgIC8v5rua5Yqo57uE5Lu26L2m6L295biD5o6n55CDDQogICAgYWRkQ2FyVmlkZW9NYXJrZXIodmFsKSB7DQogICAgICB0aGlzLmNsZWFyQ2FyTWFya2VyKCkNCiAgICAgIGlmICh0aGlzLm1hcCkgew0KICAgICAgICBsZXQgY29vcmRpbmF0ZU9iamVjdHMgPSBbXQ0KICAgICAgICBpZiAoIXZhbCkgew0KICAgICAgICAgIGNvb3JkaW5hdGVPYmplY3RzID0gWw0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBsbmc6IDEwNi4wOCwNCiAgICAgICAgICAgICAgbGF0OiAyOS44OCwNCiAgICAgICAgICAgIH0sDQoNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgbG5nOiAxMDYuMSwNCiAgICAgICAgICAgICAgbGF0OiAyOS44NiwNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGxuZzogMTA1LjcxOTAxNywNCiAgICAgICAgICAgICAgbGF0OiAzMC4yNTMwNCwNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgXQ0KICAgICAgICAgIHRoaXMuY291bnQrKw0KICAgICAgICAgIHRoaXMuY2hhbmdlQ2VudGVyKFsxMDYuMDgsIDI5Ljg4XSkNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICBjb29yZGluYXRlT2JqZWN0cy5wdXNoKHtsbmc6IDEwNi4wOCwgbGF0OiAyOS44OH0pDQogICAgICAgICAgdGhpcy5jaGFuZ2VDZW50ZXIoWzEwNi4wOCwgMjkuODhdKQ0KICAgICAgICAgIHRoaXMuY291bnQgPSAwDQogICAgICAgICAgdGhpcy5jbGVhckNhck1hcmtlcigpDQogICAgICAgIH0NCg0KICAgICAgICBpZiAodGhpcy5jb3VudCAhPT0gMCAmJiB0aGlzLmNvdW50ICUgMiA9PSAwKSB7DQogICAgICAgICAgdGhpcy5jbGVhckNhck1hcmtlcigpDQogICAgICAgICAgcmV0dXJuDQogICAgICAgIH0NCiAgICAgICAgLy8g6YGN5Y6G5Z2Q5qCH5a+56LGh5pWw57uE77yM5Li65q+P5Liq5Z2Q5qCH5Yib5bu65LiA5Liq5qCH5rOoDQogICAgICAgIGNvb3JkaW5hdGVPYmplY3RzLmZvckVhY2goKGNvb3JkaW5hdGVPYmosIGluZGV4KSA9PiB7DQogICAgICAgICAgbGV0IGJveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpDQogICAgICAgICAgYm94LnN0eWxlWydwb3NpdGlvbiddID0gJ3JlbGF0aXZlJw0KICAgICAgICAgIGJveC5zdHlsZS53aWR0aCA9ICc3NXB4Jw0KICAgICAgICAgIGJveC5zdHlsZS53aWR0aCA9ICcxMjhweCcNCiAgICAgICAgICAvLyDliJvlu7rmoIfms6jlhYPntKANCiAgICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKQ0KICAgICAgICAgIGxldCBjYXJNYWtlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpDQogICAgICAgICAgbGV0IGNhck51bWJlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpDQogICAgICAgICAgbGV0IHNtYWxsYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykNCiAgICAgICAgICBlbC5pZCA9ICdtYXJrZXInDQogICAgICAgICAgY2FyTWFrZXIuc3R5bGUud2lkdGggPSAnM3B4Jw0KICAgICAgICAgIGNhck1ha2VyLnN0eWxlLmhlaWdodCA9ICc0NnB4Jw0KICAgICAgICAgIGNhck1ha2VyLnN0eWxlLmJhY2tncm91bmQgPQ0KICAgICAgICAgICAgJ2xpbmVhci1ncmFkaWVudCggMTgwZGVnLCAjMUFCM0ZGIDQ0JSwgcmdiYSgyNiwxNzksMjU1LDApIDEwMCUpJw0KICAgICAgICAgIGNhck1ha2VyLnN0eWxlLmJvcmRlclJhZGl1cyA9ICcwIDAgMnB4IDJweCcNCiAgICAgICAgICBjYXJOdW1iZXIudGV4dENvbnRlbnQgPSAn5ridQVlYMjg2Jw0KICAgICAgICAgIGNhck51bWJlci5zdHlsZS53aWR0aCA9ICc3NXB4Jw0KICAgICAgICAgIGNhck51bWJlci5zdHlsZS5oZWlnaHQgPSAnMjJweCcNCiAgICAgICAgICBjYXJOdW1iZXIuc3R5bGUuYmFja2dyb3VuZCA9ICcjMWFiM2ZmJw0KICAgICAgICAgIGNhck51bWJlci5zdHlsZVsnYm9yZGVyJ10gPSAnMXB4IHNvbGlkICNmZmYnDQogICAgICAgICAgY2FyTnVtYmVyLnN0eWxlWydmb250LXNpemUnXSA9ICcxMnB4Jw0KICAgICAgICAgIGNhck51bWJlci5zdHlsZS5jb2xvciA9ICcjZmZmJw0KICAgICAgICAgIGNhck51bWJlci5zdHlsZVsnYm94LXNoYWRvdyddID0gJ2luc2V0IDAgMCA0cHggMCcNCiAgICAgICAgICBjYXJOdW1iZXIuc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcicNCiAgICAgICAgICBlbC5zdHlsZVsnYmFja2dyb3VuZC1pbWFnZSddID0gYHVybCgke3BpY2t1cEljb259KWANCiAgICAgICAgICBlbC5zdHlsZVsnYmFja2dyb3VuZC1zaXplJ10gPSAnY292ZXInDQogICAgICAgICAgZWwuc3R5bGUud2lkdGggPSAnNjBweCcNCiAgICAgICAgICBlbC5zdHlsZS5oZWlnaHQgPSAnNjBweCcNCiAgICAgICAgICBlbC5zdHlsZVsnYm9yZGVyLXJhZGl1cyddID0gJzIwJScNCiAgICAgICAgICBzbWFsbGJveC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZScNCiAgICAgICAgICBzbWFsbGJveC5zdHlsZS50b3AgPSAnLTMycHgnDQogICAgICAgICAgc21hbGxib3guc3R5bGUubGVmdCA9ICcyOHB4Jw0KICAgICAgICAgIHNtYWxsYm94LmFwcGVuZENoaWxkKGNhck51bWJlcikNCiAgICAgICAgICBzbWFsbGJveC5hcHBlbmRDaGlsZChjYXJNYWtlcikNCiAgICAgICAgICBib3guYXBwZW5kQ2hpbGQoc21hbGxib3gpDQogICAgICAgICAgYm94LmFwcGVuZENoaWxkKGVsKQ0KDQogICAgICAgICAgaWYgKCF2YWwpIHsNCiAgICAgICAgICAgIHZhciBfbWFya2VyID0gbmV3IG1pbmVtYXAuTWFya2VyKGJveCwge29mZnNldDogWzAsIDBdfSkNCiAgICAgICAgICAgICAgLnNldExuZ0xhdChjb29yZGluYXRlT2JqKSAvLyDkvb/nlKjlr7nosaHnmoQgbG5nIOWSjCBsYXQg5bGe5oCnDQogICAgICAgICAgICAgIC5hZGRUbyh0aGlzLm1hcCkNCiAgICAgICAgICAgIHRoaXMubWFya2VyT25saW5lQ2FyLnB1c2goX21hcmtlcikNCiAgICAgICAgICAgIGJveC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsNCiAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnb3BlblZpZGVvRGlhbG9nJywgY29vcmRpbmF0ZU9iaikNCiAgICAgICAgICAgIH0pDQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIC8v6L2m6L296KeG6aKR5pi+56S6DQogICAgICAgICAgICB2YXIgX21hcmtlciA9IG5ldyBtaW5lbWFwLk1hcmtlcihib3gsIHtvZmZzZXQ6IFswLCAwXX0pDQogICAgICAgICAgICAgIC5zZXRMbmdMYXQoY29vcmRpbmF0ZU9iaikgLy8g5L2/55So5a+56LGh55qEIGxuZyDlkowgbGF0IOWxnuaApw0KICAgICAgICAgICAgICAuYWRkVG8odGhpcy5tYXApDQogICAgICAgICAgICB0aGlzLm1hcmtlck9ubHlDYXIucHVzaChfbWFya2VyKQ0KICAgICAgICAgICAgdGhpcy4kZW1pdCgnb3BlblZpZGVvRGlhbG9nJywgY29vcmRpbmF0ZU9iaikNCiAgICAgICAgICB9DQogICAgICAgIH0pDQogICAgICB9DQogICAgfSwNCiAgICAvL+i3r+e6v+WbvuWxgg0KICAgIGFkZEN1c3RvbWVyTWFya2VyKHZhbCkgew0KICAgICAgaWYgKHRoaXMubWFwKSB7DQogICAgICAgIC8vIHRoaXMuY2xlYXJMYXlNYXJrZXIoKQ0KICAgICAgICB2YXIgY29vcmRpbmF0ZU9iamVjdHMgPSBbDQogICAgICAgICAgew0KICAgICAgICAgICAgbG5nOiAxMDUuODksDQogICAgICAgICAgICBsYXQ6IDMwLjA3LA0KICAgICAgICAgICAgZGVzY3JpcHRpb246ICfnkqflsbHljJfmlLbotLnnq5knLA0KICAgICAgICAgICAgaWQ6IDEsDQogICAgICAgICAgICBjb29yZGluYXRlczogWw0KICAgICAgICAgICAgICBbMTA1Ljk2LCAyOS45N10sDQogICAgICAgICAgICAgIFsxMDUuODksIDMwLjA3XSwNCiAgICAgICAgICAgIF0sDQogICAgICAgICAgICBTZWN0aW9uczogJ+a4nemBgicsDQogICAgICAgICAgICBTdGF0aW9uOiBbMzkwLCAwXSwNCiAgICAgICAgICAgIHR5cGU6ICfmlLbotLnnq5knLA0KICAgICAgICAgICAgbWFuYWdlbWVudENvbXBhbnk6ICfph43luobnj5Hpkp/mlZHmj7TmnI3liqHmnInpmZDlhazlj7gnLA0KICAgICAgICAgICAgdHJhaWxlck51bTogMywgLy/mi5bovaYNCiAgICAgICAgICAgIGNyYW5lOiAyLCAvL+WQiui9pg0KICAgICAgICAgICAgbGVhZGVyOiAn5rKz5LicJywNCiAgICAgICAgICAgIGxlYWRlclBob25lOiAnMTU4MjU5MjI3MTYnLA0KICAgICAgICAgICAgcGlja3VwOiAyLCAvL+earuWNoQ0KICAgICAgICAgIH0sDQogICAgICAgICAgew0KICAgICAgICAgICAgbG5nOiAxMDYuMSwNCiAgICAgICAgICAgIGxhdDogMjkuODYsDQogICAgICAgICAgICBkZXNjcmlwdGlvbjogJ+mTnOaigeWMl+aUtui0ueermScsDQogICAgICAgICAgICBpZDogMiwNCiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBbDQogICAgICAgICAgICAgIFsxMDYuMSwgMjkuODZdLA0KICAgICAgICAgICAgICBbMTA2LjExLCAyOS44NV0sDQogICAgICAgICAgICBdLA0KICAgICAgICAgICAgU2VjdGlvbnM6ICfmuJ3pgYInLA0KICAgICAgICAgICAgU3RhdGlvbjogWzM2MywgMF0sDQogICAgICAgICAgICB0eXBlOiAn5pS26LS556uZJywNCiAgICAgICAgICAgIG1hbmFnZW1lbnRDb21wYW55OiAn6YeN5bqG54+R6ZKf5pWR5o+05pyN5Yqh5pyJ6ZmQ5YWs5Y+4JywNCiAgICAgICAgICAgIHRyYWlsZXJOdW06IDMsIC8v5ouW6L2mDQogICAgICAgICAgICBjcmFuZTogMiwgLy/lkIrovaYNCiAgICAgICAgICAgIGxlYWRlcjogJ+ays+S4nCcsDQogICAgICAgICAgICBsZWFkZXJQaG9uZTogJzE1ODI1OTIyNzE2JywNCiAgICAgICAgICAgIHBpY2t1cDogMywgLy/nmq7ljaENCiAgICAgICAgICB9LA0KICAgICAgICAgIHsNCiAgICAgICAgICAgIGxuZzogMTA1LjcxOTAxNywNCiAgICAgICAgICAgIGxhdDogMzAuMjUzMDQsDQogICAgICAgICAgICBkZXNjcmlwdGlvbjogJ+mTnOaigeS4nOaUtui0ueermScsDQogICAgICAgICAgICBpZDogMywNCiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBbDQogICAgICAgICAgICAgIFsxMDUuNzE5MDE3LCAzMC4yNTMwNF0sDQogICAgICAgICAgICAgIFsxMDUuNzIxMzY3LCAzMC4yNDY0MDFdLA0KICAgICAgICAgICAgXSwNCiAgICAgICAgICAgIFNlY3Rpb25zOiAn5rid6YGCJywNCiAgICAgICAgICAgIFN0YXRpb246IFszNzIsIDBdLA0KICAgICAgICAgICAgdHlwZTogJ+aUtui0ueermScsDQogICAgICAgICAgICBtYW5hZ2VtZW50Q29tcGFueTogJ+mHjeW6huePkemSn+aVkeaPtOacjeWKoeaciemZkOWFrOWPuCcsDQogICAgICAgICAgICB0cmFpbGVyTnVtOiAzLCAvL+aLlui9pg0KICAgICAgICAgICAgY3JhbmU6IDIsIC8v5ZCK6L2mDQogICAgICAgICAgICBsZWFkZXI6ICfmsrPkuJwnLA0KICAgICAgICAgICAgbGVhZGVyUGhvbmU6ICcxNTgyNTkyMjcxNicsDQogICAgICAgICAgICBwaWNrdXA6IDUsIC8v55qu5Y2hDQogICAgICAgICAgfSwNCiAgICAgICAgICB7DQogICAgICAgICAgICBsbmc6IDEwNS45OCwNCiAgICAgICAgICAgIGxhdDogMjkuOTUsDQogICAgICAgICAgICBkZXNjcmlwdGlvbjogJ+eUsOWutuaUtui0ueermScsDQogICAgICAgICAgICBpZDogNCwNCiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBbDQogICAgICAgICAgICAgIFsxMDUuOTgsIDI5Ljk1XSwNCiAgICAgICAgICAgICAgWzEwNi4wMSwgMjkuOTNdLA0KICAgICAgICAgICAgXSwNCiAgICAgICAgICAgIFNlY3Rpb25zOiAn5rid6YGCJywNCiAgICAgICAgICAgIFN0YXRpb246IFszMzAsIDBdLA0KICAgICAgICAgICAgdHlwZTogJ+aUtui0ueermScsDQogICAgICAgICAgICBtYW5hZ2VtZW50Q29tcGFueTogJ+mHjeW6huePkemSn+aVkeaPtOacjeWKoeaciemZkOWFrOWPuCcsDQogICAgICAgICAgICB0cmFpbGVyTnVtOiAzLCAvL+aLlui9pg0KICAgICAgICAgICAgY3JhbmU6IDIsIC8v5ZCK6L2mDQogICAgICAgICAgICBsZWFkZXI6ICfmsrPkuJwnLA0KICAgICAgICAgICAgbGVhZGVyUGhvbmU6ICcxNTgyNTkyMjcxNicsDQogICAgICAgICAgICBwaWNrdXA6IDIsIC8v55qu5Y2hDQogICAgICAgICAgfSwNCiAgICAgICAgXQ0KICAgICAgICB0aGlzLmNoYW5nZUNlbnRlcihbMTA2LjA4LCAyOS44OF0pDQogICAgICAgIC8v5Yik5pat5piv5ZCm5riF6Zmk5qCH6K6wDQogICAgICAgIGlmICh2YWwgPT0gJ3BhdHJvbCcpIHsNCiAgICAgICAgICB0aGlzLnBhdHJvbENsaWNrID0gIXRoaXMucGF0cm9sQ2xpY2sNCiAgICAgICAgICBpZiAoIXRoaXMucGF0cm9sQ2xpY2spIHsNCiAgICAgICAgICAgIHRoaXMuY2xlYXJMYXlNYXJrZXIoKQ0KICAgICAgICAgICAgcmV0dXJuDQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmICh2YWwgPT0gJ3Jlc2N1ZScpIHsNCiAgICAgICAgICB0aGlzLnJlc2N1ZUNsaWNrID0gIXRoaXMucmVzY3VlQ2xpY2sNCiAgICAgICAgICBpZiAoIXRoaXMucmVzY3VlQ2xpY2spIHsNCiAgICAgICAgICAgIHRoaXMuY2xlYXJMYXlSZXNjdWVNYWtlcigpDQogICAgICAgICAgICByZXR1cm4NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKHZhbCA9PSAnRW1lcmdlbmNpZXMnKSB7DQogICAgICAgICAgdGhpcy5lbWVyZ2VuY2llc0NsaWNrID0gIXRoaXMuZW1lcmdlbmNpZXNDbGljaw0KICAgICAgICAgIGlmICghdGhpcy5lbWVyZ2VuY2llc0NsaWNrKSB7DQogICAgICAgICAgICB0aGlzLm1hcmtlckVtZXJnZW5jaWVzLmZvckVhY2goKG1hcmtlcikgPT4gbWFya2VyLnJlbW92ZSgpKQ0KICAgICAgICAgICAgdGhpcy5tYXJrZXJFbWVyZ2VuY2llcy5sZW5ndGggPSAwDQogICAgICAgICAgICByZXR1cm4NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYgKHZhbCA9PSAncmVzY3VlRXZlbnQnKSB7DQogICAgICAgICAgdGhpcy5yZXNjdWVFdmVudENsaWNrID0gIXRoaXMucmVzY3VlRXZlbnRDbGljaw0KICAgICAgICAgIGlmICghdGhpcy5yZXNjdWVFdmVudENsaWNrKSB7DQogICAgICAgICAgICB0aGlzLm1hcmtlclJlc2N1ZUV2ZW50LmZvckVhY2goKG1hcmtlcikgPT4gbWFya2VyLnJlbW92ZSgpKQ0KICAgICAgICAgICAgdGhpcy5tYXJrZXJSZXNjdWVFdmVudC5sZW5ndGggPSAwDQogICAgICAgICAgICByZXR1cm4NCiAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgLy8g6YGN5Y6G5Z2Q5qCH5a+56LGh5pWw57uE77yM5Li65q+P5Liq5Z2Q5qCH5Yib5bu65LiA5Liq5qCH5rOoDQogICAgICAgIGNvb3JkaW5hdGVPYmplY3RzLmZvckVhY2goKGNvb3JkaW5hdGVPYmosIGluZGV4KSA9PiB7DQogICAgICAgICAgLy/lhazlhbHlrrnlmagNCiAgICAgICAgICBsZXQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpDQogICAgICAgICAgLy8g5Yib5bu65qCH5rOo5YWD57SgDQogICAgICAgICAgbGV0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykNCiAgICAgICAgICBsZXQgdGV4dEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykNCiAgICAgICAgICBlbC5pZCA9ICdtYXJrZXInDQoNCiAgICAgICAgICAvL+W3oeafpempu+eCuQ0KICAgICAgICAgIGlmICh2YWwgPT0gJ3BhdHJvbCcpIHsNCiAgICAgICAgICAgIGVsLnN0eWxlWydiYWNrZ3JvdW5kLWltYWdlJ10gPSBgdXJsKCR7cGF0cm9JY29ufSlgDQogICAgICAgICAgICB0ZXh0RWwuc3R5bGUuYm9yZGVyID0gJzJweCBzb2xpZCAjNTFmZDhhJw0KICAgICAgICAgICAgdGV4dEVsLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjMWVhNjRiJyAvLyDlj6/ku6Xorr7nva7og4zmma/oibINCiAgICAgICAgICB9DQogICAgICAgICAgLy/mlZHmj7TpqbvngrkNCiAgICAgICAgICBpZiAodmFsID09ICdyZXNjdWUnKSB7DQogICAgICAgICAgICBlbC5zdHlsZVsnYmFja2dyb3VuZC1pbWFnZSddID0gYHVybCgke3Jlc2N1ZUljb259KWANCiAgICAgICAgICAgIHRleHRFbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnIzQzYWRhZCcNCiAgICAgICAgICAgIHRleHRFbC5zdHlsZS5ib3JkZXIgPSAnMnB4IHNvbGlkICMwNGZiZmInDQogICAgICAgICAgfQ0KICAgICAgICAgIC8v56qB5Y+R5LqL5Lu2DQogICAgICAgICAgaWYgKHZhbCA9PSAnRW1lcmdlbmNpZXMnKSB7DQogICAgICAgICAgICBlbC5zdHlsZVsnYmFja2dyb3VuZC1pbWFnZSddID0gYHVybCgke2VtZXJnZXJFdmVudEljb259KWANCiAgICAgICAgICAgIHRleHRFbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnIzc4NTAwMCcNCiAgICAgICAgICAgIHRleHRFbC5zdHlsZS5ib3JkZXIgPSAnMnB4IHNvbGlkICNmZmM5NWEnDQogICAgICAgICAgfQ0KICAgICAgICAgIC8v5pWR5o+05LqL5Lu2DQogICAgICAgICAgaWYgKHZhbCA9PSAncmVzY3VlRXZlbnQnKSB7DQogICAgICAgICAgICBlbC5zdHlsZVsnYmFja2dyb3VuZC1pbWFnZSddID0gYHVybCgke3Jlc2N1ZUV2ZW50SWNvbn0pYA0KICAgICAgICAgICAgdGV4dEVsLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjN2MwZDJkJw0KICAgICAgICAgICAgdGV4dEVsLnN0eWxlLmJvcmRlciA9ICcycHggc29saWQgI2JkNDQ2NycNCiAgICAgICAgICB9DQogICAgICAgICAgZWwuc3R5bGVbJ2JhY2tncm91bmQtc2l6ZSddID0gJ2NvdmVyJw0KICAgICAgICAgIGVsLnN0eWxlLndpZHRoID0gJzQwcHgnDQogICAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gJzQwcHgnDQogICAgICAgICAgZWwuc3R5bGVbJ2JvcmRlci1yYWRpdXMnXSA9ICcyMCUnDQogICAgICAgICAgLy8g5Yib5bu65paH5a2X5o+P6L+w5YWD57SgDQogICAgICAgICAgdGV4dEVsLnRleHRDb250ZW50ID0gY29vcmRpbmF0ZU9iai5kZXNjcmlwdGlvbiAvLyDorr7nva7mj4/ov7DmlofmnKwNCiAgICAgICAgICB0ZXh0RWwuc3R5bGUucGFkZGluZyA9ICcycHggNXB4JyAvLyDlhoXovrnot50NCiAgICAgICAgICB0ZXh0RWwuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzNweCcgLy8g5ZyG6KeSDQogICAgICAgICAgdGV4dEVsLnN0eWxlLmZvbnRTaXplID0gJzEycHgnIC8vIOWtl+S9k+Wkp+Wwjw0KICAgICAgICAgIHRleHRFbC5zdHlsZS5jb2xvciA9ICd3aGl0ZScNCiAgICAgICAgICB0ZXh0RWwuc3R5bGUud2hpdGVTcGFjZSA9ICdub3dyYXAnIC8vIOmYsuatouaWh+acrOaNouihjA0KICAgICAgICAgIHAuYXBwZW5kQ2hpbGQodGV4dEVsKQ0KICAgICAgICAgIHAuYXBwZW5kQ2hpbGQoZWwpDQogICAgICAgICAgcC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnDQogICAgICAgICAgcC5zdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbicNCiAgICAgICAgICBwLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ2NlbnRlcicNCiAgICAgICAgICBwLnN0eWxlLmFsaWduSXRlbXMgPSAnY2VudGVyJw0KICAgICAgICAgIC8vIOWIm+W7uuS4gOS4quaWsOeahOagh+azqOWunuS+i++8jOW5tuiuvue9ruWBj+enu+mHjw0KICAgICAgICAgIGlmICh2YWwgPT0gJ3BhdHJvbCcpIHsNCiAgICAgICAgICAgIHZhciBfbWFya2VyID0gbmV3IG1pbmVtYXAuTWFya2VyKHAsIHtvZmZzZXQ6IFswLCAwXX0pDQogICAgICAgICAgICAgIC5zZXRMbmdMYXQoY29vcmRpbmF0ZU9iaikgLy8g5L2/55So5a+56LGh55qEIGxuZyDlkowgbGF0IOWxnuaApw0KICAgICAgICAgICAgICAuYWRkVG8odGhpcy5tYXApDQogICAgICAgICAgICB0aGlzLm1hcmtlcnMucHVzaChfbWFya2VyKQ0KICAgICAgICAgICAgdGhpcy5hZGRTb3VyY2VzKGNvb3JkaW5hdGVPYmouY29vcmRpbmF0ZXMsIGNvb3JkaW5hdGVPYmouaWQpDQogICAgICAgICAgICB0aGlzLmFkZExheWVycyhjb29yZGluYXRlT2JqLmlkKQ0KICAgICAgICAgICAgdGhpcy5pZExpc3QucHVzaChgbGluZUxheWVyLSR7Y29vcmRpbmF0ZU9iai5pZH1gKQ0KICAgICAgICAgICAgdGhpcy5zb3VyY2VJZExpc3QucHVzaChgbGluZVNvdXJjZS0ke2Nvb3JkaW5hdGVPYmouaWR9YCkNCiAgICAgICAgICAgIGlmICh0aGlzLnJlc2N1ZUlkTGlzdC5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgdGhpcy5zdG9wUmVzY3VlU3RhcnRCbGlua2luZygpDQogICAgICAgICAgICB9DQogICAgICAgICAgICBwLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gew0KICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdwYXRyb2xTdGF0aW9uTGlzdCcsIGNvb3JkaW5hdGVPYmopDQogICAgICAgICAgICB9KQ0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAodmFsID09ICdyZXNjdWUnKSB7DQogICAgICAgICAgICB2YXIgX21hcmtlciA9IG5ldyBtaW5lbWFwLk1hcmtlcihwLCB7b2Zmc2V0OiBbMCwgMF19KQ0KICAgICAgICAgICAgICAuc2V0TG5nTGF0KGNvb3JkaW5hdGVPYmopIC8vIOS9v+eUqOWvueixoeeahCBsbmcg5ZKMIGxhdCDlsZ7mgKcNCiAgICAgICAgICAgICAgLmFkZFRvKHRoaXMubWFwKQ0KICAgICAgICAgICAgdGhpcy5tYXJrZXJzUmVzY3VlLnB1c2goX21hcmtlcikNCiAgICAgICAgICAgIHRoaXMuYWRkUmVzY3VlU291cmNlcyhjb29yZGluYXRlT2JqLmNvb3JkaW5hdGVzLCBjb29yZGluYXRlT2JqLmlkKQ0KICAgICAgICAgICAgdGhpcy5hZGRSZXNjdWVMYXllcnMoY29vcmRpbmF0ZU9iai5pZCkNCiAgICAgICAgICAgIHRoaXMucmVzY3VlSWRMaXN0LnB1c2goYGxpbmVSZXNjdWVMYXllci0ke2Nvb3JkaW5hdGVPYmouaWR9YCkNCiAgICAgICAgICAgIHRoaXMucmVzY3VlU291cmNlSWRMaXN0LnB1c2goYGxpbmVSZXNjdWVTb3VyY2UtJHtjb29yZGluYXRlT2JqLmlkfWApDQoNCiAgICAgICAgICAgIHAuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7DQogICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ3N0YXRpb25MaXN0JywgY29vcmRpbmF0ZU9iaikNCiAgICAgICAgICAgIH0pDQogICAgICAgICAgfQ0KICAgICAgICAgIGlmICh2YWwgPT0gJ0VtZXJnZW5jaWVzJykgew0KICAgICAgICAgICAgdmFyIF9tYXJrZXIgPSBuZXcgbWluZW1hcC5NYXJrZXIocCwge29mZnNldDogWzAsIDBdfSkNCiAgICAgICAgICAgICAgLnNldExuZ0xhdChjb29yZGluYXRlT2JqKSAvLyDkvb/nlKjlr7nosaHnmoQgbG5nIOWSjCBsYXQg5bGe5oCnDQogICAgICAgICAgICAgIC5hZGRUbyh0aGlzLm1hcCkNCiAgICAgICAgICAgIHRoaXMubWFya2VyRW1lcmdlbmNpZXMucHVzaChfbWFya2VyKQ0KICAgICAgICAgICAgLy8gaWYgKHRoaXMuaWRMaXN0Lmxlbmd0aCkgew0KICAgICAgICAgICAgLy8gICB0aGlzLnN0b3BCbGluaygpDQogICAgICAgICAgICAvLyB9DQogICAgICAgICAgICBpZiAodGhpcy5yZXNjdWVJZExpc3QubGVuZ3RoKSB7DQogICAgICAgICAgICAgIHRoaXMuc3RvcFJlc2N1ZVN0YXJ0QmxpbmtpbmcoKQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsNCiAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnb3BlbkV2ZW50RGlhbG9nJywgY29vcmRpbmF0ZU9iaikNCiAgICAgICAgICAgIH0pDQogICAgICAgICAgfQ0KICAgICAgICAgIGlmICh2YWwgPT0gJ3Jlc2N1ZUV2ZW50Jykgew0KICAgICAgICAgICAgdmFyIF9tYXJrZXIgPSBuZXcgbWluZW1hcC5NYXJrZXIocCwge29mZnNldDogWzAsIDBdfSkNCiAgICAgICAgICAgICAgLnNldExuZ0xhdChjb29yZGluYXRlT2JqKSAvLyDkvb/nlKjlr7nosaHnmoQgbG5nIOWSjCBsYXQg5bGe5oCnDQogICAgICAgICAgICAgIC5hZGRUbyh0aGlzLm1hcCkNCiAgICAgICAgICAgIHRoaXMubWFya2VyUmVzY3VlRXZlbnQucHVzaChfbWFya2VyKQ0KICAgICAgICAgICAgLy8gaWYgKHRoaXMuaWRMaXN0Lmxlbmd0aCkgew0KICAgICAgICAgICAgLy8gICB0aGlzLnN0b3BCbGluaygpDQogICAgICAgICAgICAvLyB9DQogICAgICAgICAgICBpZiAodGhpcy5yZXNjdWVJZExpc3QubGVuZ3RoKSB7DQogICAgICAgICAgICAgIHRoaXMuc3RvcFJlc2N1ZVN0YXJ0QmxpbmtpbmcoKQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsNCiAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnb3BlbkV2ZW50RGlhbG9nJywgY29vcmRpbmF0ZU9iaikNCiAgICAgICAgICAgIH0pDQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJldHVybg0KICAgICAgICAgIH0NCiAgICAgICAgfSkNCiAgICAgICAgaWYgKHRoaXMucmVzY3VlSWRMaXN0Lmxlbmd0aCAmJiB2YWwgPT0gJ3Jlc2N1ZScpIHsNCiAgICAgICAgICB0aGlzLnN0YXJ0UmVzY3VlU3RhcnRCbGlua2luZygpDQogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7DQogICAgICAgICAgICB0aGlzLnN0b3BSZXNjdWVTdGFydEJsaW5raW5nKCkNCiAgICAgICAgICB9LCA4MDAwKQ0KICAgICAgICB9DQogICAgICB9DQogICAgfSwNCg0KICAgIC8vIOS4uuavj+S4quagh+azqOeCueiuvuiuoea6kC0t5beh5p+l6am754K5DQogICAgYWRkU291cmNlcyhjb29yZGluYXRlcywgaWQpIHsNCiAgICAgIHZhciBqc29uRGF0YSA9IHsNCiAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJywNCiAgICAgICAgZmVhdHVyZXM6IFsNCiAgICAgICAgICB7DQogICAgICAgICAgICB0eXBlOiAnRmVhdHVyZScsDQogICAgICAgICAgICBnZW9tZXRyeTogew0KICAgICAgICAgICAgICB0eXBlOiAnTGluZVN0cmluZycsDQogICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlcywNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICBwcm9wZXJ0aWVzOiB7DQogICAgICAgICAgICAgIHRpdGxlOiAn6Lev57q/5LiAJywNCiAgICAgICAgICAgICAga2luZDogMSwNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgfSwNCiAgICAgICAgXSwNCiAgICAgIH0NCiAgICAgIHRoaXMubWFwLmFkZFNvdXJjZShgbGluZVNvdXJjZS0ke2lkfWAsIHsNCiAgICAgICAgdHlwZTogJ2dlb2pzb24nLA0KICAgICAgICBkYXRhOiBqc29uRGF0YSwNCiAgICAgIH0pDQogICAgfSwNCiAgICAvLyDkuLrmr4/kuKrmoIfms6jngrnmt7vliqDlm77lsYItLeW3oeafpempu+eCuQ0KICAgIGFkZExheWVycyhpZCkgew0KICAgICAgdGhpcy5tYXAuYWRkTGF5ZXIoew0KICAgICAgICBpZDogYGxpbmVMYXllci0ke2lkfWAsDQogICAgICAgIHR5cGU6ICdsaW5lJywNCiAgICAgICAgc291cmNlOiBgbGluZVNvdXJjZS0ke2lkfWAsDQogICAgICAgIGxheW91dDogew0KICAgICAgICAgICdsaW5lLWpvaW4nOiAncm91bmQnLA0KICAgICAgICAgICdsaW5lLWNhcCc6ICdyb3VuZCcsDQogICAgICAgICAgJ2JvcmRlci12aXNpYmlsaXR5JzogJ3Zpc2libGUnLCAvL+aYr+WQpuW8gOWQr+e6v+i+ueahhg0KICAgICAgICB9LA0KICAgICAgICBwYWludDogew0KICAgICAgICAgICdsaW5lLXdpZHRoJzogOCwNCiAgICAgICAgICAnbGluZS1jb2xvcic6IHsNCiAgICAgICAgICAgIHR5cGU6ICdjYXRlZ29yaWNhbCcsDQogICAgICAgICAgICBwcm9wZXJ0eTogJ2tpbmQnLA0KICAgICAgICAgICAgc3RvcHM6IFsNCiAgICAgICAgICAgICAgWzEsICcjRkZENDhBICddLA0KICAgICAgICAgICAgICBbMiwgJyNGRkQ0OEEgJ10sDQogICAgICAgICAgICBdLA0KICAgICAgICAgICAgZGVmYXVsdDogJyNmZjAwMDAnLA0KICAgICAgICAgIH0sDQogICAgICAgICAgJ2xpbmUtYm9yZGVyLXdpZHRoJzogMiwgLy/orr7nva7nur/ovrnmoYblrr3luqYNCiAgICAgICAgICAnbGluZS1ib3JkZXItb3BhY2l0eSc6IDEsIC8v6K6+572u57q/6L655qGG6YCP5piO5bqmDQogICAgICAgICAgJ2xpbmUtYm9yZGVyLWNvbG9yJzogew0KICAgICAgICAgICAgc3RvcHM6IFsNCiAgICAgICAgICAgICAgWzEsICcjMDBGRkZGJ10sDQogICAgICAgICAgICAgIFsyLCAnICNGRkZGRkYnXSwNCiAgICAgICAgICAgIF0sDQogICAgICAgICAgfSwgLy/orr7nva7nur/ovrnmoYbpopzoibINCiAgICAgICAgfSwNCiAgICAgICAgbWluem9vbTogNywNCiAgICAgICAgbWF4em9vbTogMTcuNSwNCiAgICAgIH0pDQogICAgfSwNCiAgICAvLyDkuLrmr4/kuKrmoIfms6jngrnorr7orqHmupAtLeaVkeaPtOmpu+eCuQ0KICAgIGFkZFJlc2N1ZVNvdXJjZXMoY29vcmRpbmF0ZXMsIGlkKSB7DQogICAgICB2YXIganNvbkRhdGEgPSB7DQogICAgICAgIHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsDQogICAgICAgIGZlYXR1cmVzOiBbDQogICAgICAgICAgew0KICAgICAgICAgICAgdHlwZTogJ0ZlYXR1cmUnLA0KICAgICAgICAgICAgZ2VvbWV0cnk6IHsNCiAgICAgICAgICAgICAgdHlwZTogJ0xpbmVTdHJpbmcnLA0KICAgICAgICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXMsDQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgcHJvcGVydGllczogew0KICAgICAgICAgICAgICB0aXRsZTogJ+i3r+e6v+S4gCcsDQogICAgICAgICAgICAgIGtpbmQ6IDEsDQogICAgICAgICAgICB9LA0KICAgICAgICAgIH0sDQogICAgICAgIF0sDQogICAgICB9DQogICAgICB0aGlzLm1hcC5hZGRTb3VyY2UoYGxpbmVSZXNjdWVTb3VyY2UtJHtpZH1gLCB7DQogICAgICAgIHR5cGU6ICdnZW9qc29uJywNCiAgICAgICAgZGF0YToganNvbkRhdGEsDQogICAgICB9KQ0KICAgIH0sDQogICAgLy8g5Li65q+P5Liq5qCH5rOo54K55re75Yqg5Zu+5bGCLS3mlZHmj7TpqbvngrkNCiAgICBhZGRSZXNjdWVMYXllcnMoaWQpIHsNCiAgICAgIHRoaXMubWFwLmFkZExheWVyKHsNCiAgICAgICAgaWQ6IGBsaW5lUmVzY3VlTGF5ZXItJHtpZH1gLA0KICAgICAgICB0eXBlOiAnbGluZScsDQogICAgICAgIHNvdXJjZTogYGxpbmVSZXNjdWVTb3VyY2UtJHtpZH1gLA0KICAgICAgICBsYXlvdXQ6IHsNCiAgICAgICAgICAnbGluZS1qb2luJzogJ3JvdW5kJywNCiAgICAgICAgICAnbGluZS1jYXAnOiAncm91bmQnLA0KICAgICAgICAgICdib3JkZXItdmlzaWJpbGl0eSc6ICd2aXNpYmxlJywgLy/mmK/lkKblvIDlkK/nur/ovrnmoYYNCiAgICAgICAgfSwNCiAgICAgICAgcGFpbnQ6IHsNCiAgICAgICAgICAnbGluZS13aWR0aCc6IDgsDQogICAgICAgICAgJ2xpbmUtY29sb3InOiB7DQogICAgICAgICAgICB0eXBlOiAnY2F0ZWdvcmljYWwnLA0KICAgICAgICAgICAgcHJvcGVydHk6ICdraW5kJywNCiAgICAgICAgICAgIHN0b3BzOiBbDQogICAgICAgICAgICAgIFsxLCAnI0ZGRDQ4QSAnXSwNCiAgICAgICAgICAgICAgWzIsICcjRkZENDhBICddLA0KICAgICAgICAgICAgXSwNCiAgICAgICAgICAgIGRlZmF1bHQ6ICcjZmYwMDAwJywNCiAgICAgICAgICB9LA0KICAgICAgICAgICdsaW5lLWJvcmRlci13aWR0aCc6IDIsIC8v6K6+572u57q/6L655qGG5a695bqmDQogICAgICAgICAgJ2xpbmUtYm9yZGVyLW9wYWNpdHknOiAxLCAvL+iuvue9rue6v+i+ueahhumAj+aYjuW6pg0KICAgICAgICAgICdsaW5lLWJvcmRlci1jb2xvcic6IHsNCiAgICAgICAgICAgIHN0b3BzOiBbDQogICAgICAgICAgICAgIFsxLCAnIzAwRkZGRiddLA0KICAgICAgICAgICAgICBbMiwgJyAjRkZGRkZGJ10sDQogICAgICAgICAgICBdLA0KICAgICAgICAgIH0sIC8v6K6+572u57q/6L655qGG6aKc6ImyDQogICAgICAgIH0sDQogICAgICAgIG1pbnpvb206IDcsDQogICAgICAgIG1heHpvb206IDE3LjUsDQogICAgICB9KQ0KICAgIH0sDQogICAgLy8gLy/lt6Hmn6Xpqbvngrnpl6rng4ENCiAgICAvLyBzdGFydEJsaW5raW5nKCkgew0KICAgIC8vICAgdGhpcy5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4gew0KICAgIC8vICAgICB0aGlzLmlkTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7DQogICAgLy8gICAgICAgLy8gdGhpcy5tYXAuc2V0UGFpbnRQcm9wZXJ0eShpdGVtLCAnbGluZS1vcGFjaXR5JywgMCkNCiAgICAvLyAgICAgICBpZiAodGhpcy5tYXAuZ2V0TGF5ZXIpIHsNCiAgICAvLyAgICAgICAgIHRoaXMubWFwLnNldFBhaW50UHJvcGVydHkoDQogICAgLy8gICAgICAgICAgIGl0ZW0sDQogICAgLy8gICAgICAgICAgICdsaW5lLW9wYWNpdHknLA0KICAgIC8vICAgICAgICAgICB0aGlzLm1hcC5nZXRQYWludFByb3BlcnR5KGl0ZW0sICdsaW5lLW9wYWNpdHknKSA9PSAwID8gMSA6IDANCiAgICAvLyAgICAgICAgICkNCiAgICAvLyAgICAgICB9DQogICAgLy8gICAgIH0pDQogICAgLy8gICB9LCAxMDAwKQ0KICAgIC8vIH0sDQogICAgLy8gLy/lhbPpl63lt6Hmn6Xpqbvngrnpl6rng4ENCiAgICAvLyBzdG9wQmxpbmsoKSB7DQogICAgLy8gICBpZiAodGhpcy5pbnRlcnZhbElkKSB7DQogICAgLy8gICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKQ0KICAgIC8vICAgICB0aGlzLmludGVydmFsSWQgPSBudWxsIC8vIOa4hemZpOW8leeUqO+8jOmBv+WFjeWGheWtmOazhOa8jw0KICAgIC8vICAgICB0aGlzLmlkTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7DQogICAgLy8gICAgICAgdGhpcy5tYXAuc2V0UGFpbnRQcm9wZXJ0eShpdGVtLCAnbGluZS1vcGFjaXR5JywgMSkNCiAgICAvLyAgICAgfSkNCiAgICAvLyAgIH0NCiAgICAvLyB9LA0KDQogICAgLy/lvIDlkK/mlZHmj7Tpqbvngrnpl6rng4ENCiAgICBzdGFydFJlc2N1ZVN0YXJ0QmxpbmtpbmcoKSB7DQogICAgICB0aGlzLnN0YXJ0UmVzY3VlaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHsNCiAgICAgICAgdGhpcy5yZXNjdWVJZExpc3QuZm9yRWFjaCgoaXRlbSkgPT4gew0KICAgICAgICAgIGlmICh0aGlzLm1hcC5nZXRMYXllcikgew0KICAgICAgICAgICAgdGhpcy5tYXAuc2V0UGFpbnRQcm9wZXJ0eSgNCiAgICAgICAgICAgICAgaXRlbSwNCiAgICAgICAgICAgICAgJ2xpbmUtb3BhY2l0eScsDQogICAgICAgICAgICAgIHRoaXMubWFwLmdldFBhaW50UHJvcGVydHkoaXRlbSwgJ2xpbmUtb3BhY2l0eScpID09IDAgPyAxIDogMA0KICAgICAgICAgICAgKQ0KICAgICAgICAgIH0NCiAgICAgICAgfSkNCiAgICAgIH0sIDEwMDApDQogICAgfSwNCiAgICAvL+WFs+mXreW3oeafpeaVkeaPtOmXqueDgQ0KICAgIHN0b3BSZXNjdWVTdGFydEJsaW5raW5nKCkgew0KICAgICAgaWYgKHRoaXMuc3RhcnRSZXNjdWVpbnRlcnZhbElkKSB7DQogICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5zdGFydFJlc2N1ZWludGVydmFsSWQpDQogICAgICAgIHRoaXMuc3RhcnRSZXNjdWVpbnRlcnZhbElkID0gbnVsbA0KICAgICAgICB0aGlzLnJlc2N1ZUlkTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7DQogICAgICAgICAgdGhpcy5tYXAuc2V0UGFpbnRQcm9wZXJ0eShpdGVtLCAnbGluZS1vcGFjaXR5JywgMSkNCiAgICAgICAgfSkNCiAgICAgIH0NCiAgICB9LA0KICB9LA0KICBiZWZvcmVEZXN0cm95KCkgew0KICAgIC8vIOazqOmUgOWcsOWbvuWunuS+iyznp7vpmaTlnLDlm74NCiAgICBpZiAodGhpcy5tYXApIHsNCiAgICAgIHRoaXMubWFwLnJlbW92ZSgpDQogICAgfQ0KICB9LA0KfQ0K"},null]}