fmode-ng 0.0.245 → 0.0.246

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -326,7 +326,7 @@ export class WxworkSDK {
326
326
  let userInfo;
327
327
  let thisUser;
328
328
  let userInfoStr = localStorage.getItem(`${this.cid}/USERINFO`);
329
- if (!code) { // 无code 优先检查缓存
329
+ if (!code && userInfoStr) { // 无code 优先检查缓存
330
330
  userInfo = JSON.parse(userInfoStr);
331
331
  userInfo.cid = this.cid;
332
332
  wxdebug("getContactOrProfile");
@@ -820,4 +820,4 @@ export const jsApiList = [
820
820
  'onHistoryBack',
821
821
  'openDefaultBrowser',
822
822
  ];
823
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3h3b3JrLnNkay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvY29yZS9zb2NpYWwvd3h3b3JrL3d4d29yay5zZGsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbkMsT0FBTyxFQUNMLFVBQVUsR0FJWCxNQUFNLGFBQWEsQ0FBQztBQUNyQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFZM0UsTUFBTSxPQUFPLFNBQVM7SUFzRmxCLFlBQVksT0FJWDtRQXpGSCxlQUFVLEdBQU87WUFDZixZQUFZLEVBQUM7Z0JBQ1gsU0FBUyxFQUFDLFlBQVksQ0FBQyxrQkFBa0I7YUFDMUM7WUFDRCxZQUFZLEVBQUM7Z0JBQ1gsU0FBUyxFQUFDLFlBQVksQ0FBQyxvQkFBb0I7YUFDNUM7WUFDRCxZQUFZLEVBQUM7Z0JBQ1gsV0FBVyxFQUFDLFlBQVk7YUFDekI7U0FDRixDQUFBO1FBQ0QsYUFBUSxHQUFPO1lBQ2IsS0FBSyxFQUFDO2dCQUNKLE9BQU8sRUFBQyxvQkFBb0I7YUFDN0I7U0FDRixDQUFBO1FBS0QsT0FBRSxHQUFDLEVBQUUsQ0FBQTtRQUVMLGNBQVMsR0FBRztZQUNWLGVBQWUsRUFBQyxLQUFLLEVBQUUsT0FRdEIsRUFBQyxFQUFFO2dCQUNGLElBQUcsQ0FBQztvQkFDRixPQUFPLENBQUMsaUJBQWlCLEdBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO29CQUNsRCxJQUFJLFVB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LGtCQUFrQjtJQUNsQixXQUFXO0lBQ1gsWUFBWTtJQUNaLFdBQVc7SUFDWCxhQUFhO0lBQ2IsZUFBZTtJQUNmLGFBQWE7SUFDYixjQUFjO0lBQ2QsYUFBYTtJQUNiLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsY0FBYztJQUNkLGFBQWE7SUFDYixnQkFBZ0I7SUFDaEIsZ0JBQWdCO0lBQ2hCLGVBQWU7SUFDZixlQUFlO0lBQ2Ysd0JBQXdCO0lBQ3hCLHdCQUF3QjtJQUN4QixhQUFhO0lBQ2IsWUFBWTtJQUNaLGFBQWE7SUFDYix5QkFBeUI7SUFDekIsZUFBZTtJQUNmLG9CQUFvQjtDQUNyQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgd3cgZnJvbSAnQHdlY29tL2pzc2RrJztcclxuXHJcbmltcG9ydCB7XHJcbiAgRm1vZGVQYXJzZSxcclxuICBGbW9kZU9iamVjdCxcclxuICBGbW9kZVF1ZXJ5LFxyXG4gIEZtb2RlVXNlcixcclxufSBmcm9tIFwiLi4vLi4vcGFyc2VcIjtcclxuY29uc3QgUGFyc2UgPSBGbW9kZVBhcnNlLndpdGgoXCJub3ZhXCIpO1xyXG5cclxuaW1wb3J0IHsgV3h3b3JrQ29ycCB9IGZyb20gJy4vd3h3b3JrLmNvcnAnO1xyXG5pbXBvcnQgeyB3eGRlYnVnIH0gZnJvbSBcIi4uL3d4ZGVidWdcIlxyXG5pbXBvcnQgeyBjcmVhdGVMb2dpbkNvbnRhaW5lciwgcmVtb3ZlTG9naW5Db250YWluZXIgfSBmcm9tICcuL2xvZ2luLW1vZGFsJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgV3h3b3JrQ3VycmVudENoYXR7XHJcbiAgdHlwZTpcImNoYXRJZFwifFwidXNlcklkXCIsXHJcbiAgaWQ/OnN0cmluZyxcclxuICAvLyDogZTns7vkurpcclxuICBjb250YWN0PzphbnksXHJcbiAgZm9sbG93X3VzZXI/OmFueSxcclxuICAvLyDkvJror53nvqRcclxuICBncm91cD86YW55LFxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgV3h3b3JrU0RLe1xyXG4gIGNvbXBhbnlNYXA6YW55ID0ge1xyXG4gICAgXCJFNEtwR3ZURXRvXCI6eyAvLyDpo57noIFBSeW4kOWll1xyXG4gICAgICBjb3JwUmVzSWQ6XCJ2c1ZJV2JkMWk5XCIgLy8g6ISR5o6n56eR5oqA77yIQ1JN5b6F5byA5Y+R77yJ5LyB5Lia5Y+3XHJcbiAgICB9LFxyXG4gICAgXCJ1UmlER3dFWUxpXCI6eyAvLyDmgqDnhLZUQUxL6LSm5aWXXHJcbiAgICAgIGNvcnBSZXNJZDpcIkp4ZkZYQnIwbHlcIiAvLyDmgqDnhLZUQUxL77yIQ1JN5b6F5byA5Y+R77yJ5LyB5Lia5Y+3XHJcbiAgICB9LFxyXG4gICAgXCJjREw2UjFoZ1NpXCI6eyAvLyDmmKDkuInoibJcclxuICAgICAgXCJjb3JwUmVzSWRcIjpcIlNwTDZneUQxR3VcIlxyXG4gICAgfVxyXG4gIH1cclxuICBzdWl0ZU1hcDphbnkgPSB7XHJcbiAgICBcImNybVwiOntcclxuICAgICAgc3VpdGVJZDpcImRrMjU1OWJhNzU4ZjMzZDhmNVwiXHJcbiAgICB9XHJcbiAgfVxyXG4gIGNpZDpzdHJpbmdcclxuICBhcHBJZDpzdHJpbmdcclxuICBjb3JwSWQ6c3RyaW5nXHJcbiAgd2Vjb3JwOld4d29ya0NvcnBcclxuICB3dz13d1xyXG5cclxuICBncm91cENoYXQgPSB7XHJcbiAgICBjcmVhdGVHcm91cENoYXQ6YXN5bmMgKG9wdGlvbnM6e1xyXG4gICAgICBncm91cE5hbWU6c3RyaW5nLFxyXG4gICAgICB1c2VySWRzPzpzdHJpbmdbXSxcclxuICAgICAgZXh0ZXJuYWxVc2VySWRzPzpzdHJpbmdbXSxcclxuICAgICAgb3BlblVzZXJJZHM/OnN0cmluZ1tdLFxyXG4gICAgICBjb3JwR3JvdXBVc2VySWRzPzphbnksXHJcbiAgICAgIHN1Y2Nlc3M/OmFueSxcclxuICAgICAgZmFpbD86YW55XHJcbiAgICB9KT0+e1xyXG4gICAgICB0cnl7XHJcbiAgICAgICAgd3hkZWJ1ZyhcImNyZWF0ZUdyb3VwQ2hhdFwiK0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpKVxyXG4gICAgICAgIGxldCBpc1JlZ2lzdGVyID0gYXdhaXQgdGhpcy5yZWdpc3RlckNvcnBXaXRoU3VpdGUoKTtcclxuICAgICAgICBpZighaXNSZWdpc3RlcikgcmV0dXJuIG51bGxcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUscmVqZWN0KT0+e1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBvcHRpb25zLnN1Y2Nlc3MgPSAoZGF0YSk9PntcclxuICAgICAgICAgICAgd3hkZWJ1ZyhKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG9wdGlvbnMuZmFpbCA9IChlcnIpPT57XHJcbiAgICAgICAgICAgIHd4ZGVidWcoSlNPTi5zdHJpbmdpZnkoZXJyKSk7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnIpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB3dy5jcmVhdGVDb3JwR3JvdXBDaGF0KG9wdGlvbnMpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIHd4ZGVidWcoSlNPTi5zdHJpbmdpZnkoZXJyKSlcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGFkZFVzZXJJbmZvR3JvdXA6YXN5bmMob3B0aW9uczp7XHJcbiAgICAgIGNoYXRJZDpzdHJpbmcsXHJcbiAgICAgIHVzZXJJZHM/OnN0cmluZ1tdLFxyXG4gICAgICBleHRlcm5hbFVzZXJJZHM/OnN0cmluZ1tdLFxyXG4gICAgICBvcGVuVXNlcklkcz86c3RyaW5nW10sXHJcbiAgICAgIGNvcnBHcm91cFVzZXJJZHM/OmFueSxcclxuICAgICAgc3VjY2Vzcz86YW55LFxyXG4gICAgICBmYWlsPzphbnlcclxuICAgIH0pPT57XHJcbiAgICAgIHd4ZGVidWcoXCJhZGRVc2VySW5mb0dyb3VwXCIrSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpXHJcbiAgICAgIHRyeXtcclxuICAgICAgICBsZXQgaXNSZWdpc3RlciA9IGF3YWl0IHRoaXMucmVnaXN0ZXJDb3JwV2l0aFN1aXRlKCk7XHJcbiAgICAgICAgd3hkZWJ1ZyhcImlzUmVnaXN0ZXJcIitpc1JlZ2lzdGVyKVxyXG4gICAgICAgIGlmKCFpc1JlZ2lzdGVyKSByZXR1cm4gbnVsbFxyXG4gICAgICAgIHd4ZGVidWcoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLHJlamVjdCk9PntcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgb3B0aW9ucy5zdWNjZXNzID0gKGRhdGEpPT57XHJcbiAgICAgICAgICAgIHd4ZGVidWcoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBvcHRpb25zLmZhaWwgPSAoZXJyKT0+e1xyXG4gICAgICAgICAgICB3eGRlYnVnKEpTT04uc3RyaW5naWZ5KGVycikpO1xyXG4gICAgICAgICAgICByZWplY3QoZXJyKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgd3cudXBkYXRlQ29ycEdyb3VwQ2hhdChvcHRpb25zKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICB3eGRlYnVnKEpTT04uc3RyaW5naWZ5KGVycikpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucz86e1xyXG4gICAgICBjaWQ6c3RyaW5nLCAvLyDlhazlj7jluJDlpZdJRFxyXG4gICAgICBhcHBJZDpzdHJpbmcsIC8vIOW6lOeUqElEIOeUqOS6juiOt+WPliBTdWl0ZUlkXHJcbiAgICAgIGNvcnBJZD86c3RyaW5nLFxyXG4gICAgfSl7XHJcbiAgICAgIHRoaXMuY2lkID0gb3B0aW9ucz8uY2lkXHJcbiAgICAgIHRoaXMuYXBwSWQgPSBvcHRpb25zPy5hcHBJZFxyXG4gICAgICB0aGlzLndlY29ycCA9IG5ldyBXeHdvcmtDb3JwKHRoaXMuY2lkKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5ZCM5q2l576k6IGK5L+h5oGv5YiwIEdyb3VwQ2hhdCDooahcclxuICAgICAqIEBwYXJhbSBncm91cEluZm8g5LyB5b6u576k6IGK5L+h5oGvXHJcbiAgICAgKiBAcmV0dXJucyBHcm91cENoYXQgUGFyc2UgT2JqZWN0XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHN5bmNHcm91cENoYXQoZ3JvdXBJbmZvOmFueSk6UHJvbWlzZTxGbW9kZU9iamVjdD57XHJcbiAgICAgIGxldCBxdWVyeSA9IG5ldyBQYXJzZS5RdWVyeShcIkdyb3VwQ2hhdFwiKTtcclxuICAgICAgcXVlcnkuZXF1YWxUbyhcImNoYXRfaWRcIixncm91cEluZm8/LmNoYXRfaWQpO1xyXG4gICAgICBsZXQgZ3JvdXAgPSBhd2FpdCBxdWVyeS5maXJzdCgpO1xyXG4gICAgICBpZighZ3JvdXA/LmlkKXtcclxuICAgICAgICBncm91cCA9IG5ldyBQYXJzZS5PYmplY3QoXCJHcm91cENoYXRcIik7XHJcbiAgICAgIH1cclxuICAgICAgLy8g55Sf5oiQ5YWl576k5pa55byPXHJcbiAgICAgIGxldCBuZWVkU2F2ZTpib29sZWFuID0gZmFsc2U7XHJcbiAgICAgIGlmKCFncm91cD8uZ2V0KFwiam9pblVybFwiKSl7XHJcbiAgICAgICAgbGV0IGNvbmZpZ19pZDEgPSAoYXdhaXQgdGhpcy53ZWNvcnAuZXh0ZXJuYWxDb250YWN0Lmdyb3VwQ2hhdC5hZGRKb2luV2F5KHtcclxuICAgICAgICAgIHNjZW5lOjEsXHJcbiAgICAgICAgICBjaGF0X2lkX2xpc3Q6W2dyb3VwSW5mby5jaGF0X2lkXSxcclxuICAgICAgICB9KSk/LmNvbmZpZ19pZFxyXG4gICAgICAgIGxldCBqb2luVXJsID0gKGF3YWl0IHRoaXMud2Vjb3JwLmV4dGVybmFsQ29udGFjdC5ncm91cENoYXQuZ2V0Sm9pbldheShjb25maWdfaWQxKSk/LmpvaW5fd2F5XHJcbiAgICAgICAgZ3JvdXAuc2V0KFwiam9pblVybFwiLGpvaW5VcmwpXHJcbiAgICAgICAgbmVlZFNhdmUgPSB0cnVlXHJcbiAgICAgIH1cclxuICAgICAgaWYoIWdyb3VwPy5nZXQoXCJqb2luUXJjb2RlXCIpKXtcclxuICAgICAgICBsZXQgY29uZmlnX2lkMiA9IChhd2FpdCB0aGlzLndlY29ycC5leHRlcm5hbENvbnRhY3QuZ3JvdXBDaGF0LmFkZEpvaW5XYXkoe1xyXG4gICAgICAgICAgc2NlbmU6MixcclxuICAgICAgICAgIGNoYXRfaWRfbGlzdDpbZ3JvdXBJbmZvLmNoYXRfaWRdLFxyXG4gICAgICAgIH0pKT8uY29uZmlnX2lkXHJcbiAgICAgICAgbGV0IGpvaW5RcmNvZGUgPSAoYXdhaXQgdGhpcy53ZWNvcnAuZXh0ZXJuYWxDb250YWN0Lmdyb3VwQ2hhdC5nZXRKb2luV2F5KGNvbmZpZ19pZDIpKT8uam9pbl93YXlcclxuICAgICAgICBncm91cC5zZXQoXCJqb2luUXJjb2RlXCIsam9pblFyY29kZSlcclxuICAgICAgICBuZWVkU2F2ZSA9IHRydWVcclxuICAgICAgfVxyXG4gICAgICAvLyDmlbDmja7mm7TmlrBcclxuICAgICAgbGV0IGdyb3VwRGF0YTphbnkgPSB7XHJcbiAgICAgICAgY2hhdF9pZDpncm91cEluZm8uY2hhdF9pZCxcclxuICAgICAgICBuYW1lOmdyb3VwSW5mby5uYW1lLFxyXG4gICAgICAgIG93bmVyOmdyb3VwSW5mby5vd25lcixcclxuICAgICAgICBub3RpY2U6Z3JvdXBJbmZvLm5vdGljZSxcclxuICAgICAgfVxyXG4gICAgICBpZihncm91cC5nZXQoXCJjaGF0X2lkXCIpICE9IGdyb3VwSW5mby5jaGF0X2lkKXtcclxuICAgICAgICBuZWVkU2F2ZSA9IHRydWVcclxuICAgICAgfVxyXG4gICAgICBpZihncm91cC5nZXQoXCJuYW1lXCIpICE9IGdyb3VwSW5mby5uYW1lKXtcclxuICAgICAgICBuZWVkU2F2ZSA9IHRydWVcclxuICAgICAgfVxyXG4gICAgICBpZihncm91cC5nZXQoXCJvd25lclwiKSAhPSBncm91cEluZm8ub3duZXIpe1xyXG4gICAgICAgIG5lZWRTYXZlID0gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICAgIGlmKGdyb3VwLmdldChcIm5vdGljZVwiKSAhPSBncm91cEluZm8ubm90aWNlKXtcclxuICAgICAgICBuZWVkU2F2ZSA9IHRydWVcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoZ3JvdXAuZ2V0KFwibWVtYmVyX3ZlcnNpb25cIikgIT0gZ3JvdXBJbmZvLm1lbWJlcl92ZXJzaW9uKXtcclxuICAgICAgICBuZWVkU2F2ZSA9IHRydWVcclxuICAgICAgICBncm91cERhdGEubWVtYmVyX2xpc3QgPSBncm91cEluZm8ubWVtYmVyX2xpc3Q7XHJcbiAgICAgICAgZ3JvdXBEYXRhLm1lbWJlcl92ZXJzaW9uID0gZ3JvdXBJbmZvLm1lbWJlcl92ZXJzaW9uO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIOiuvue9ruWxnuaAp1xyXG4gICAgICBncm91cC5zZXQoZ3JvdXBEYXRhKVxyXG4gICAgICBpZih0aGlzLmNpZCl7XHJcbiAgICAgICAgZ3JvdXAuc2V0KFwiY29tcGFueVwiLHtfX3R5cGU6XCJQb2ludGVyXCIsY2xhc3NOYW1lOlwiQ29tcGFueVwiLG9iamVjdElkOnRoaXMuY2lkfSlcclxuICAgICAgfVxyXG4gICAgICBpZihuZWVkU2F2ZSl7XHJcbiAgICAgICAgZ3JvdXAgPSBhd2FpdCBncm91cC5zYXZlKCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGdyb3VwXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlkIzmraXlpJbpg6jogZTns7vkurrkv6Hmga/liLAgQ29udGFjdCDooahcclxuICAgICAqIEBwYXJhbSBjb250YWN0SW5mbyDkvIHlvq7lpJbpg6jogZTns7vkurrkv6Hmga/vvIjljIXlkKsgZXh0ZXJuYWxfY29udGFjdCDlkowgZm9sbG93X3VzZXLvvIlcclxuICAgICAqIEByZXR1cm5zIENvbnRhY3QgUGFyc2UgT2JqZWN0XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHN5bmNDb250YWN0KGNvbnRhY3RJbmZvOmFueSk6UHJvbWlzZTxGbW9kZU9iamVjdD57XHJcbiAgICAgIC8vIOWFvOWuueS4pOenjeS8oOWPguaWueW8j1xyXG4gICAgICBjb25zdCBleHRlcm5hbENvbnRhY3QgPSBjb250YWN0SW5mby5leHRlcm5hbF9jb250YWN0IHx8IGNvbnRhY3RJbmZvO1xyXG4gICAgICBjb25zdCBleHRlcm5hbFVzZXJJZCA9IGV4dGVybmFsQ29udGFjdC5leHRlcm5hbF91c2VyaWQ7XHJcblxyXG4gICAgICBsZXQgcXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoXCJDb250YWN0SW5mb1wiKTtcclxuICAgICAgcXVlcnkuZXF1YWxUbyhcImV4dGVybmFsX3VzZXJpZFwiLCBleHRlcm5hbFVzZXJJZCk7XHJcblxyXG4gICAgICBjb25zdCBDb21wYW55ID0gbmV3IFBhcnNlLk9iamVjdCgnQ29tcGFueScpO1xyXG4gICAgICBDb21wYW55LmlkID0gdGhpcy5jaWQ7XHJcbiAgICAgIHF1ZXJ5LmVxdWFsVG8oXCJjb21wYW55XCIsIENvbXBhbnkpO1xyXG5cclxuICAgICAgbGV0IGNvbnRhY3QgPSBhd2FpdCBxdWVyeS5maXJzdCgpO1xyXG4gICAgICBpZighY29udGFjdD8uaWQpe1xyXG4gICAgICAgIGNvbnRhY3QgPSBuZXcgUGFyc2UuT2JqZWN0KFwiQ29udGFjdEluZm9cIik7XHJcbiAgICAgICAgaWYoQ29tcGFueT8uaWQpe1xyXG4gICAgICAgICAgY29udGFjdC5zZXQoXCJjb21wYW55XCIsIENvbXBhbnkudG9Qb2ludGVyKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g5Y+q5L+d55WZIG5hbWUsIG1vYmlsZSwgZXh0ZXJuYWxfdXNlcmlkIOS9nOS4uueLrOeri+Wtl+autVxyXG4gICAgICBjb25zdCBuYW1lID0gZXh0ZXJuYWxDb250YWN0Lm5hbWUgfHwgJyc7XHJcbiAgICAgIGNvbnN0IG1vYmlsZSA9IGV4dGVybmFsQ29udGFjdC5tb2JpbGUgfHwgJyc7XHJcblxyXG4gICAgICAvLyDlhbbku5bmiYDmnInkv6Hmga/lrZjlhaUgZGF0YSDlrZfmrrVcclxuICAgICAgY29uc3QgZGF0YTphbnkgPSB7XHJcbiAgICAgICAgLi4uZXh0ZXJuYWxDb250YWN0LFxyXG4gICAgICAgIC8vIOWmguaenOaciSBmb2xsb3dfdXNlcu+8jOS5n+WtmOWFpSBkYXRhXHJcbiAgICAgICAgZm9sbG93X3VzZXI6IGNvbnRhY3RJbmZvLmZvbGxvd191c2VyIHx8IGV4dGVybmFsQ29udGFjdC5mb2xsb3dfdXNlciB8fCBbXVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgbGV0IG5lZWRTYXZlOmJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAgIC8vIOajgOafpeeLrOeri+Wtl+auteWPmOWMllxyXG4gICAgICBpZiAoY29udGFjdC5nZXQoXCJleHRlcm5hbF91c2VyaWRcIikgIT0gZXh0ZXJuYWxVc2VySWQpIHtcclxuICAgICAgICBuZWVkU2F2ZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbnRhY3QuZ2V0KFwibmFtZVwiKSAhPSBuYW1lICYmIG5hbWUpIHtcclxuICAgICAgICBuZWVkU2F2ZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbnRhY3QuZ2V0KFwibW9iaWxlXCIpICE9IG1vYmlsZSAmJiBtb2JpbGUpIHtcclxuICAgICAgICBuZWVkU2F2ZSA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOajgOafpSBkYXRhIOWtl+auteWPmOWMlu+8iOeugOWNleWvueavlO+8iVxyXG4gICAgICBjb25zdCBvbGREYXRhID0gY29udGFjdC5nZXQoXCJkYXRhXCIpO1xyXG4gICAgICBpZiAoSlNPTi5zdHJpbmdpZnkob2xkRGF0YSkgIT09IEpTT04uc3RyaW5naWZ5KGRhdGEpKSB7XHJcbiAgICAgICAgbmVlZFNhdmUgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDorr7nva7lsZ7mgKdcclxuICAgICAgY29udGFjdC5zZXQoXCJleHRlcm5hbF91c2VyaWRcIiwgZXh0ZXJuYWxVc2VySWQpO1xyXG4gICAgICBjb250YWN0LnNldChcIm5hbWVcIiwgbmFtZSk7XHJcbiAgICAgIGNvbnRhY3Quc2V0KFwibW9iaWxlXCIsIG1vYmlsZSk7XHJcbiAgICAgIGNvbnRhY3Quc2V0KFwiZGF0YVwiLCBkYXRhKTtcclxuXHJcbiAgICAgIHd4ZGVidWcoXCJzeW5jQ29udGFjdFwiLGNvbnRhY3QudG9KU09OKCkpXHJcbiAgICAgIGlmKG5lZWRTYXZlKXtcclxuICAgICAgICBjb250YWN0ID0gYXdhaXQgY29udGFjdC5zYXZlKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjb250YWN0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog6I635Y+W5b2T5YmN6IGK5aSp5a+56LGh77yI576k6IGK5oiW6IGU57O75Lq677yJXHJcbiAgICAgKiBAcmV0dXJucyB7IEdyb3VwQ2hhdD86IEZtb2RlT2JqZWN0LCBDb250YWN0PzogRm1vZGVPYmplY3QsIGN1cnJlbnRDaGF0OiBXeHdvcmtDdXJyZW50Q2hhdCB9XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldEN1cnJlbnRDaGF0T2JqZWN0KCk6IFByb21pc2U8e1xyXG4gICAgICBHcm91cENoYXQ/OiBGbW9kZU9iamVjdCxcclxuICAgICAgQ29udGFjdD86IEZtb2RlT2JqZWN0LFxyXG4gICAgICBjdXJyZW50Q2hhdDogV3h3b3JrQ3VycmVudENoYXQgfCBudWxsXHJcbiAgICB9PiB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRDaGF0ID0gYXdhaXQgdGhpcy5nZXRDdXJyZW50Q2hhdCgpO1xyXG5cclxuICAgICAgaWYgKCFjdXJyZW50Q2hhdCkge1xyXG4gICAgICAgIHJldHVybiB7IGN1cnJlbnRDaGF0OiBudWxsIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBHcm91cENoYXQ6IEZtb2RlT2JqZWN0IHwgdW5kZWZpbmVkO1xyXG4gICAgICBsZXQgQ29udGFjdDogRm1vZGVPYmplY3QgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmIChjdXJyZW50Q2hhdC50eXBlID09PSBcImNoYXRJZFwiICYmIGN1cnJlbnRDaGF0Lmdyb3VwKSB7XHJcbiAgICAgICAgICAvLyDnvqTogYrlnLrmma9cclxuICAgICAgICAgIEdyb3VwQ2hhdCA9IGF3YWl0IHRoaXMuc3luY0dyb3VwQ2hhdChjdXJyZW50Q2hhdC5ncm91cCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Q2hhdC50eXBlID09PSBcInVzZXJJZFwiICYmIGN1cnJlbnRDaGF0LmlkKSB7XHJcbiAgICAgICAgICAvLyDljZXogYrlnLrmma8gLSDojrflj5bogZTns7vkurror6bmg4VcclxuICAgICAgICAgIGNvbnN0IGNvbnRhY3RJbmZvID0gYXdhaXQgdGhpcy53ZWNvcnAuZXh0ZXJuYWxDb250YWN0LmdldChjdXJyZW50Q2hhdC5pZCk7XHJcbiAgICAgICAgICBDb250YWN0ID0gYXdhaXQgdGhpcy5zeW5jQ29udGFjdChjb250YWN0SW5mbyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJnZXRDdXJyZW50Q2hhdE9iamVjdCBlcnJvcjpcIiwgZXJyb3IpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIEdyb3VwQ2hhdCxcclxuICAgICAgICBDb250YWN0LFxyXG4gICAgICAgIGN1cnJlbnRDaGF0XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBhc3luYyBzeW5jVXNlckluZm8odXNlckluZm86YW55KXtcclxuICAgICAgLy8gd3hkZWJ1ZyhcIndld29yay5zeW5jVXNlckluZm9cIilcclxuICAgICAgLy8g5pu05paw55So5oi35L+h5oGvXHJcbiAgICAgIGxldCBnZW5kZXIgPSBudWxsXHJcbiAgICAgIGlmKHVzZXJJbmZvLmdlbmRlcj09MSl7Z2VuZGVyID0gXCLnlLdcIn1cclxuICAgICAgaWYodXNlckluZm8uZ2VuZGVyPT0yKXtnZW5kZXIgPSBcIuWls1wifVxyXG5cclxuICAgICAgLy8g6I635Y+W55So5oi35pWw5o2u77yIUHJvZmlsZeS8geS4muWRmOW3pSBDb250YWN0SW5mb+WklumDqOWuouaIt+S8geW+rm9wZW5pZO+8iVxyXG4gICAgICBsZXQgdGhpc1VzZXIgPSBhd2FpdCB0aGlzLmdldENvbnRhY3RPclByb2ZpbGUodXNlckluZm8pXHJcbiAgICAgIGNvbnNvbGUubG9nKCd0aGlzVXNlcicsdGhpc1VzZXIpO1xyXG4gICAgICBjb25zb2xlLmxvZygndXNlckluZm8nLHVzZXJJbmZvKTtcclxuICAgICAgXHJcbiAgICAgIGlmKHRoaXNVc2VyLmNsYXNzTmFtZT09XCJDb250YWN0SW5mb1wiKXtcclxuICAgICAgICB0aGlzVXNlci5zZXQoe1xyXG4gICAgICAgICAgZGF0YTp7XHJcbiAgICAgICAgICAgIC8vIOivhuWIq0lEXHJcbiAgICAgICAgICAgIG9wZW5pZDp1c2VySW5mby5vcGVuaWQsXHJcbiAgICAgICAgICAgIHVzZXJpZDp1c2VySW5mby51c2VyaWQsXHJcbiAgICAgICAgICAgIGV4dGVybmFsX3VzZXJpZDp1c2VySW5mby5leHRlcm5hbF91c2VyaWQsXHJcbiAgICAgICAgICAgIHR5cGU6dXNlckluZm8udHlwZSYmU3RyaW5nKHVzZXJJbmZvLnR5cGUpIHx8IG51bGwsXHJcbiAgICAgICAgICAgIC8vIOWfuuehgOS/oeaBr1xyXG4gICAgICAgICAgICBuYW1lOnVzZXJJbmZvLm5hbWUsXHJcbiAgICAgICAgICAgIGF2YXRhcjp1c2VySW5mby5hdmF0YXIsXHJcbiAgICAgICAgICAgIGdlbmRlcjpnZW5kZXIsXHJcbiAgICAgICAgICAgIC8vIOiBlOezu+S/oeaBr1xyXG4gICAgICAgICAgICBxcl9jb2RlOnVzZXJJbmZvLnFyX2NvZGUsXHJcbiAgICAgICAgICAgIG1vYmlsZTp1c2VySW5mby5tb2JpbGUsXHJcbiAgICAgICAgICAgIGVtYWlsOnVzZXJJbmZvLmVtYWlsLFxyXG4gICAgICAgICAgICBiaXpfbWFpbDp1c2VySW5mby5iaXpfbWFpbCxcclxuICAgICAgICAgICAgYWRkcmVzczp1c2VySW5mby5hZGRyZXNzLFxyXG4gICAgICAgICAgICAvLyDogYzkvY3lhazlj7hcclxuICAgICAgICAgICAgcG9zaXRpb246dXNlckluZm8ucG9zaXRpb24sXHJcbiAgICAgICAgICAgIGNvcnBfbmFtZTp1c2VySW5mby5jb3JwX25hbWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgdHlwZTpcIndlY29tLWFnZW5jeVwiLCAvLyDkvIHkuJrkuLrmlrDlvoXlvIDlj5HlupTnlKgt5aSW6YOo55So5oi36Lqr5Lu9XHJcbiAgICAgICAgICBjb21wYW55OntfX3R5cGU6XCJQb2ludGVyXCIsY2xhc3NOYW1lOlwiQ29tcGFueVwiLG9iamVjdElkOnRoaXMuY2lkfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgXHJcbiAgICAgIH1cclxuICAgICAgaWYodGhpc1VzZXIuY2xhc3NOYW1lPT1cIlByb2ZpbGVcIil7XHJcbiAgICAgICAgdGhpc1VzZXIuc2V0KHtcclxuICAgICAgICAgIC8vIOivhuWIq0lEXHJcbiAgICAgICAgICBvcGVuaWQ6dXNlckluZm8ub3BlbmlkLFxyXG4gICAgICAgICAgdXNlcmlkOnVzZXJJbmZvLnVzZXJpZCxcclxuICAgICAgICAgIGV4dGVybmFsX3VzZXJpZDp1c2VySW5mby5leHRlcm5hbF91c2VyaWQsXHJcbiAgICAgICAgICB0eXBlOnVzZXJJbmZvLnR5cGUmJlN0cmluZyh1c2VySW5mby50eXBlKSB8fCBudWxsLFxyXG4gICAgICAgICAgLy8g5Z+656GA5L+h5oGvXHJcbiAgICAgICAgICBuYW1lOnVzZXJJbmZvLm5hbWUsXHJcbiAgICAgICAgICBhdmF0YXI6dXNlckluZm8uYXZhdGFyLFxyXG4gICAgICAgICAgZ2VuZGVyOmdlbmRlcixcclxuICAgICAgICAgIC8vIOiBlOezu+S/oeaBr1xyXG4gICAgICAgICAgcXJfY29kZTp1c2VySW5mby5xcl9jb2RlLFxyXG4gICAgICAgICAgbW9iaWxlOnVzZXJJbmZvLm1vYmlsZSxcclxuICAgICAgICAgIGVtYWlsOnVzZXJJbmZvLmVtYWlsLFxyXG4gICAgICAgICAgYml6X21haWw6dXNlckluZm8uYml6X21haWwsXHJcbiAgICAgICAgICBhZGRyZXNzOnVzZXJJbmZvLmFkZHJlc3MsXHJcbiAgICAgICAgICAvLyDogYzkvY3lhazlj7hcclxuICAgICAgICAgIHBvc2l0aW9uOnVzZXJJbmZvLnBvc2l0aW9uLFxyXG4gICAgICAgICAgY29ycF9uYW1lOnVzZXJJbmZvLmNvcnBfbmFtZSxcclxuICAgICAgICAgIGNvbXBhbnk6e19fdHlwZTpcIlBvaW50ZXJcIixjbGFzc05hbWU6XCJDb21wYW55XCIsb2JqZWN0SWQ6dGhpcy5jaWR9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzVXNlci5zZXQoXCJkYXRhXCIsdXNlckluZm8pXHJcbiAgICAgIH1cclxuICAgICAgLy8gd3hkZWJ1ZyhcInRoaXNVc2VyOlwiK0pTT04uc3RyaW5naWZ5KHRoaXNVc2VyLnRvSlNPTigpKSlcclxuICAgICAgdHJ5e1xyXG5cclxuICAgICAgICBpZiAodGhpc1VzZXI/LmlkICYmICF0aGlzVXNlci5nZXQoXCJ1c2VyXCIpPy5pZCkge1xyXG4gICAgICAgICAgbGV0IGN1cnJlbnRVc2VyID0gUGFyc2UuVXNlci5jdXJyZW50KClcclxuICAgICAgICAgIGlmKGN1cnJlbnRVc2VyPy5pZCl7XHJcbiAgICAgICAgICAgIHRoaXNVc2VyLnNldChcInVzZXJcIiwgY3VycmVudFVzZXI/LnRvUG9pbnRlcigpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXNVc2VyID0gYXdhaXQgdGhpc1VzZXIuc2F2ZSgpXHJcbiAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIHd4ZGVidWcoZXJyKVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzVXNlclxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiB1c2VyaW5mbyDorr7nva7lvZPliY3mjojmnYPkv6Hmga9cclxuICAgICAqIEByZXR1cm5zIHtcclxuICAgICAgICAgIFwidXNlcmlkXCJcclxuICAgICAgICAgIFwib3BlbmlkXCJcclxuICAgICAgICAgIFwiZ2VuZGVyXCJcclxuICAgICAgICAgIFwibW9iaWxlXCJcclxuICAgICAgICAgIFwiYXZhdGFyXCJcclxuICAgICAgICAgIFwiZW1haWxcIlxyXG4gICAgICAgICAgXCJxcl9jb2RlXCJcclxuICAgICAgICAgIFwiYml6X21haWxcIlxyXG4gICAgICogfVxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRVc2VyaW5mbyhjb2RlPzpzdHJpbmcpOlByb21pc2U8YW55PntcclxuICAgICAgICB3eGRlYnVnKFwiZ2V0VXNlcmluZm9cIilcclxuXHJcbiAgICAgICAgbGV0IHVzZXJJbmZvOmFueVxyXG4gICAgICAgIGxldCB0aGlzVXNlcjphbnkgXHJcbiAgICAgICAgbGV0IHVzZXJJbmZvU3RyID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7dGhpcy5jaWR9L1VTRVJJTkZPYClcclxuICAgICAgICBpZighY29kZSl7IC8vIOaXoGNvZGUg5LyY5YWI5qOA5p+l57yT5a2YXHJcbiAgICAgICAgICB1c2VySW5mbyA9IEpTT04ucGFyc2UodXNlckluZm9TdHIpXHJcbiAgICAgICAgICB1c2VySW5mby5jaWQgPSB0aGlzLmNpZFxyXG4gICAgICAgICAgd3hkZWJ1ZyhcImdldENvbnRhY3RPclByb2ZpbGVcIilcclxuICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgdGhpc1VzZXIgPSBhd2FpdCB0aGlzLmdldENvbnRhY3RPclByb2ZpbGUodXNlckluZm8pO1xyXG4gICAgICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgICAgIC8vIHd4ZGVidWcoXCJjcGVyclwiK0pTT04uc3RyaW5naWZ5KGVycikpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB3eGRlYnVnKFwiZ2V0VXNlcmluZm86XCIrdXNlckluZm9TdHIpXHJcbiAgICAgICAgICAvLyB3eGRlYnVnKFwidGhpc1VzZXI6XCIrdGhpc1VzZXIudG9KU09OKCkpXHJcbiAgICAgICAgICBpZih1c2VySW5mbyYmdGhpc1VzZXIpIHJldHVybiB1c2VySW5mb1xyXG4gICAgICAgIH1cclxuICAgICAgXHJcbiAgICAgICAgbGV0IHVybCA9IG5ldyBVUkwobG9jYXRpb24uaHJlZik7XHJcbiAgICAgICAgY29kZSA9IHVybC5zZWFyY2hQYXJhbXMuZ2V0KFwiY29kZVwiKSB8fCBjb2RlO1xyXG4gICAgICAgIGlmKCFjb2RlKSByZXR1cm4gbnVsbDtcclxuICAgIFxyXG4gICAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB0aGlzLndlY29ycC5hdXRoLmdldHVzZXJpbmZvKGNvZGUpO1xyXG4gICAgICAgIHd4ZGVidWcoXCJyZXN1bHRcIitKU09OLnN0cmluZ2lmeShyZXN1bHQpKVxyXG4gICAgICAgIGlmKHJlc3VsdD8uZXJyY29kZSl7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKHJlc3VsdD8uZXJybXNnKVxyXG4gICAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOihpeWFqOeUqOaIt+S/oeaBryDmjqXlj6PlvIPnlKjml6DmlYjvvIzlv4XpobvlkZjlt6XmiYvliqjmjojmnYNjb2RlXHJcbiAgICAgICAgLy8gbGV0IHVzZXJpZCA9IHJlc3VsdD8udXNlcmlkXHJcbiAgICAgICAgLy8gaWYodXNlcmlkKXtcclxuICAgICAgICAvLyAgIGxldCB1c2VyID0gYXdhaXQgdGhpcy53ZWNvcnAudXNlci5nZXQodXNlcmlkKTtcclxuICAgICAgICAvLyAgIGlmKHVzZXI/LnVzZXJpZCl7XHJcbiAgICAgICAgLy8gICAgIE9iamVjdC5rZXlzKHVzZXIpLmZvckVhY2goa2V5PT57XHJcbiAgICAgICAgLy8gICAgICAgcmVzdWx0W2tleV0gPSB1c2VyW2tleV1cclxuICAgICAgICAvLyAgICAgfSlcclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8g6KGl5YWo5aSW6YOo5L+h5oGvXHJcbiAgICAgICAgbGV0IGV1c2VyaWQgPSByZXN1bHQ/LmV4dGVybmFsX3VzZXJpZFxyXG4gICAgICAgIGlmKGV1c2VyaWQpe1xyXG4gICAgICAgICAgbGV0IGV1c2VyID0gYXdhaXQgdGhpcy53ZWNvcnAuZXh0ZXJuYWxDb250YWN0LmdldChldXNlcmlkKTtcclxuICAgICAgICAgIGlmKGV1c2VyPy5leHRlcm5hbF9jb250YWN0KXtcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoZXVzZXI/LmV4dGVybmFsX2NvbnRhY3QpLmZvckVhY2goa2V5PT57XHJcbiAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBldXNlcj8uZXh0ZXJuYWxfY29udGFjdFtrZXldXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlc3VsdC5jaWQgPSB0aGlzLmNpZFxyXG4gICAgICAgIHVzZXJJbmZvID0gcmVzdWx0O1xyXG4gICAgICAgIC8vIOihpeWFhW1vYmlsZee7keWumuaDheWGtVxyXG4gICAgICAgIC8vIHd4ZGVidWcoXCLooaXlhYVtb2JpbGXnu5Hlrprmg4XlhrVcIilcclxuICAgICAgICB0aGlzVXNlciA9IGF3YWl0IHRoaXMuZ2V0Q29udGFjdE9yUHJvZmlsZSh1c2VySW5mbyk7XHJcbiAgICAgICAgaWYodGhpc1VzZXI/LmdldChcIm1vYmlsZVwiKSl7XHJcbiAgICAgICAgICB1c2VySW5mby5tb2JpbGUgPSB0aGlzVXNlcj8uZ2V0KFwibW9iaWxlXCIpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB1c2VySW5mb1N0ciA9IEpTT04uc3RyaW5naWZ5KHJlc3VsdCk7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7dGhpcy5jaWR9L1VTRVJJTkZPYCx1c2VySW5mb1N0cilcclxuICAgICAgICByZXR1cm4gdXNlckluZm9cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICog6I635Y+W5b2T5YmN55So5oi355qEIFByb2ZpbGUg5oiWIENvbnRhY3RJbmZvXHJcbiAgICAgKiBAcmV0dXJucyBQcm9maWxlICjkvIHkuJrlkZjlt6UpIOaIliBDb250YWN0SW5mbyAo5aSW6YOo55So5oi3KVxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRDdXJyZW50VXNlcigpOlByb21pc2U8Rm1vZGVPYmplY3R8bnVsbD57XHJcbiAgICAgIGNvbnN0IHVzZXJJbmZvID0gYXdhaXQgdGhpcy5nZXRVc2VyaW5mbygpO1xyXG4gICAgICBpZighdXNlckluZm8pIHJldHVybiBudWxsO1xyXG5cclxuICAgICAgY29uc3QgY3VycmVudFVzZXIgPSBhd2FpdCB0aGlzLmdldENvbnRhY3RPclByb2ZpbGUodXNlckluZm8pO1xyXG4gICAgICByZXR1cm4gY3VycmVudFVzZXI7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0Q29udGFjdE9yUHJvZmlsZSh1c2VySW5mbzphbnkpOlByb21pc2U8Rm1vZGVPYmplY3Q+e1xyXG4gICAgICBsZXQgVXNlclR5cGU6c3RyaW5nXHJcbiAgICAgIGlmKHVzZXJJbmZvLm9wZW5pZCB8fCB1c2VySW5mby5leHRlcm5hbF91c2VyaWQpIHsgLy8g5aSW6YOo55So5oi3XHJcbiAgICAgICAgVXNlclR5cGUgPSBcIkNvbnRhY3RJbmZvXCJcclxuICAgICAgfVxyXG4gICAgICBpZih1c2VySW5mby51c2VyaWQpeyAvLyDlkZjlt6XotKbmiLdcclxuICAgICAgICBVc2VyVHlwZSA9IFwiUHJvZmlsZVwiXHJcbiAgICAgIH1cclxuICAgICAgLy8g5p+l6K+i5bey5a2Y5Zyo55So5oi3XHJcbiAgICAgIGxldCB1c2VyQ29uZGl0aW9uOkFycmF5PGFueT4gPSBbXVxyXG4gICAgICBpZihVc2VyVHlwZT09XCJQcm9maWxlXCIpe1xyXG4gICAgICAgIGlmKHVzZXJJbmZvLm9wZW5pZCl7dXNlckNvbmRpdGlvbi5wdXNoKHtcIm9wZW5pZFwiOntcIiRyZWdleFwiOnVzZXJJbmZvLm9wZW5pZH19KX1cclxuICAgICAgICBpZih1c2VySW5mby51c2VyaWQpe3VzZXJDb25kaXRpb24ucHVzaCh7XCJ1c2VyaWRcIjp7XCIkcmVnZXhcIjp1c2VySW5mby51c2VyaWR9fSl9XHJcbiAgICAgICAgaWYodXNlckluZm8ubW9iaWxlKXt1c2VyQ29uZGl0aW9uLnB1c2goe1wibW9iaWxlXCI6e1wiJHJlZ2V4XCI6dXNlckluZm8ubW9iaWxlfX0pfVxyXG4gICAgICAgIGlmKHVzZXJJbmZvLmVtYWlsKXt1c2VyQ29uZGl0aW9uLnB1c2goe1wiZW1haWxcIjp7XCIkcmVnZXhcIjp1c2VySW5mby5lbWFpbH19KX1cclxuICAgICAgICBpZih1c2VySW5mby5leHRlcm5hbF91c2VyaWQpe3VzZXJDb25kaXRpb24ucHVzaCh7XCJleHRlcm5hbF91c2VyaWRcIjp7XCIkcmVnZXhcIjp1c2VySW5mby5leHRlcm5hbF91c2VyaWR9fSl9XHJcbiAgICAgIH1cclxuICAgICAgaWYoVXNlclR5cGU9PVwiQ29udGFjdEluZm9cIil7XHJcbiAgICAgICAgaWYodXNlckluZm8ub3BlbmlkKXt1c2VyQ29uZGl0aW9uLnB1c2goe1wiZGF0YS5vcGVuaWRcIjp7XCIkcmVnZXhcIjp1c2VySW5mby5vcGVuaWR9fSl9XHJcbiAgICAgICAgaWYodXNlckluZm8udXNlcmlkKXt1c2VyQ29uZGl0aW9uLnB1c2goe1wiZGF0YS51c2VyaWRcIjp7XCIkcmVnZXhcIjp1c2VySW5mby51c2VyaWR9fSl9XHJcbiAgICAgICAgaWYodXNlckluZm8ubW9iaWxlKXt1c2VyQ29uZGl0aW9uLnB1c2goe1wiZGF0YS5tb2JpbGVcIjp7XCIkcmVnZXhcIjp1c2VySW5mby5tb2JpbGV9fSl9XHJcbiAgICAgICAgaWYodXNlckluZm8uZW1haWwpe3VzZXJDb25kaXRpb24ucHVzaCh7XCJkYXRhLmVtYWlsXCI6e1wiJHJlZ2V4XCI6dXNlckluZm8uZW1haWx9fSl9XHJcbiAgICAgICAgaWYodXNlckluZm8uZXh0ZXJuYWxfdXNlcmlkKXt1c2VyQ29uZGl0aW9uLnB1c2goe1wiZGF0YS5leHRlcm5hbF91c2VyaWRcIjp7XCIkcmVnZXhcIjp1c2VySW5mby5leHRlcm5hbF91c2VyaWR9fSl9XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHF1ZXJ5ID0gUGFyc2UuUXVlcnkuZnJvbUpTT04oVXNlclR5cGUse1xyXG4gICAgICAgIHdoZXJlOntcclxuICAgICAgICAgIFwiJG9yXCI6dXNlckNvbmRpdGlvblxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHF1ZXJ5LmVxdWFsVG8oXCJjb21wYW55XCIsdGhpcy5jaWQpIC8vIOmZkOWumui0puWll+W7uueri+eUqOaIt+S/oeaBr1xyXG4gICAgICBxdWVyeS5lcXVhbFRvKFwidXNlcmlkXCIsdXNlckluZm8udXNlcmlkKVxyXG5cclxuICAgICAgbGV0IHRoaXNVc2VyXHJcbiAgICAgIHRyeXtcclxuICAgICAgICB0aGlzVXNlciA9IGF3YWl0IHF1ZXJ5LmZpcnN0KClcclxuICAgICAgfWNhdGNoKGVycil7Y29uc29sZS5lcnJvcihlcnIpfVxyXG4gICAgICBpZighdGhpc1VzZXI/LmlkKXtcclxuICAgICAgICB0aGlzVXNlciA9IG5ldyBQYXJzZS5PYmplY3QoVXNlclR5cGUpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIOepuueUqOaIt+ajgOafpeW5tuihpeWFheeUqOaIt1xyXG4gICAgICBsZXQgY3VycmVudCA9IFBhcnNlLlVzZXIuY3VycmVudCgpO1xyXG4gICAgICBpZihjdXJyZW50Py5pZCl7XHJcbiAgICAgICAgICBpZighdGhpc1VzZXI/LmdldChcInVzZXJcIik/LmlkKXtcclxuICAgICAgICAgICAgdGhpc1VzZXIuc2V0KFwidXNlclwiLGN1cnJlbnQudG9Qb2ludGVyKCkpXHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXNVc2VyXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQQyDnmbvpmYbpnaLmnb9cclxuICAgICAqIEBkZXNjIGh0dHBzOi8vZGV2ZWxvcGVyLndvcmsud2VpeGluLnFxLmNvbS9kb2N1bWVudC9wYXRoLzk4NDc4XHJcbiAgICAgKi9cclxuICAgIC8qKlxyXG4gKiBQQyDnmbvpmYbpnaLmnb9cclxuICogQGRlc2MgaHR0cHM6Ly9kZXZlbG9wZXIud29yay53ZWl4aW4ucXEuY29tL2RvY3VtZW50L3BhdGgvOTg0NzhcclxuICovXHJcbmFzeW5jIGxvZ2luUEMoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICBsZXQgY29uZmlnID0gYXdhaXQgdGhpcy5nZXRDb3JwQnlDaWQodGhpcy5jaWQpO1xyXG4gIGNvbnNvbGUubG9nKHRoaXMuY2lkLCBjb25maWcpO1xyXG5cclxuICAvLyDmnoTpgKDnvZHpobXmjojmnYPpk77mjqUgaHR0cHM6Ly9kZXZlbG9wZXIud29yay53ZWl4aW4ucXEuY29tL2RvY3VtZW50L3BhdGgvOTY0NDFcclxuICBjb25zdCBjb3JwSWQgPSBjb25maWc/LmNvcnBJZDtcclxuICBjb25zdCBhZ2VudElkID0gY29uZmlnPy5hZ2VudElkO1xyXG4gIFxyXG4gIC8qKlxyXG4gICAqIOWbnuiwg+Wfn+WQje+8jOWPr+S/oeWfn+WQjeS/ruaUue+8jOW/hemhu+WQjuWPsOmHjeaWsOaPkOS6pOW6lOeUqOWuoeaguOS4iue6v++8jGFjY2Vzc190b2tlbuaXoOmcgOmHjee9rlxyXG4gICAqL1xyXG4gIGNvbnN0IHVybCA9IG5ldyBVUkwoXCJodHRwczovL2FwcC5mbW9kZS5jblwiICsgbG9jYXRpb24ucGF0aG5hbWUgKyBsb2NhdGlvbj8uc2VhcmNoKTtcclxuICB1cmwuc2VhcmNoUGFyYW1zLmRlbGV0ZShcImNvZGVcIik7XHJcbiAgdXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoXCJzdGF0ZVwiKTtcclxuICBjb25zdCByZWRpcmVjdF91cmkgPSB1cmwuaHJlZjtcclxuXHJcbiAgLy8g5Zue6LCD5Y+C5pWwXHJcbiAgY29uc3QgbG9naW5UeXBlOiB3dy5XV0xvZ2luVHlwZSA9IHd3LldXTG9naW5UeXBlLmNvcnBBcHA7XHJcbiAgY29uc3QgclR5dXBlOiB3dy5XV0xvZ2luUmVkaXJlY3RUeXBlID0gd3cuV1dMb2dpblJlZGlyZWN0VHlwZS5jYWxsYmFjaztcclxuXHJcbiAgLy8g5Yib5bu65bm25re75Yqg5YWo5bGP5bGF5Lit55qE55m75b2V5a655ZmoXHJcbiAgY29uc29sZS5sb2coXCJsb2dpblBDMVwiKTtcclxuICAvLyDliJvlu7rnmbvlvZXlrrnlmahcclxuICBjb25zdCBvbGRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd3d19sb2dpbicpO1xyXG4gIGlmKCFvbGRFbCl7XHJcbiAgICBjcmVhdGVMb2dpbkNvbnRhaW5lcigpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLHJlamVjdCkgPT4ge1xyXG4gICAgY29uc29sZS5sb2coXCJsb2dpblBDMlwiKTtcclxuXHJcbiAgICBjb25zdCB3d0xvZ2luID0gdGhpcy53dy5jcmVhdGVXV0xvZ2luUGFuZWwoe1xyXG4gICAgICBlbDogJyN3d19sb2dpbicsXHJcbiAgICAgIHBhcmFtczoge1xyXG4gICAgICAgIGxvZ2luX3R5cGU6IGxvZ2luVHlwZSxcclxuICAgICAgICBhcHBpZDogY29ycElkLFxyXG4gICAgICAgIGFnZW50aWQ6IGFnZW50SWQsXHJcbiAgICAgICAgcmVkaXJlY3RfdXJpOiByZWRpcmVjdF91cmksXHJcbiAgICAgICAgc3RhdGU6ICdsb2dpblN0YXRlJyxcclxuICAgICAgICByZWRpcmVjdF90eXBlOiByVHl1cGUsXHJcbiAgICAgIH0sXHJcbiAgICAgIG9uQ2hlY2tXZUNvbUxvZ2luKHsgaXNXZUNvbUxvZ2luIH0pIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhpc1dlQ29tTG9naW4pO1xyXG4gICAgICB9LFxyXG4gICAgICBvbkxvZ2luU3VjY2Vzcyh7IGNvZGUgfSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHsgY29kZSB9KTtcclxuICAgICAgICByZW1vdmVMb2dpbkNvbnRhaW5lcigpOyAvLyDnmbvlvZXmiJDlip/lkI7np7vpmaTlrrnlmahcclxuICAgICAgICByZXNvbHZlKGNvZGUpO1xyXG4gICAgICB9LFxyXG4gICAgICBvbkxvZ2luRmFpbChlcnIpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwibHBjXCIsIGVycik7XHJcbiAgICAgICAgcmVtb3ZlTG9naW5Db250YWluZXIoKTsgLy8g55m75b2V5aSx6LSl5ZCO56e76Zmk5a655ZmoXHJcbiAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIGNvbnNvbGUubG9nKHd3TG9naW4sIHd3TG9naW4uZWwpO1xyXG4gIH0pO1xyXG59XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBvYXV0aCDot7PovazmjojmnYNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgb2F1dGgoc2NvcGU6XCJzbnNhcGlfYmFzZVwifFwic25zYXBpX3ByaXZhdGVpbmZvXCI9XCJzbnNhcGlfYmFzZVwiLHJlbmV3OmJvb2xlYW49ZmFsc2UpOlByb21pc2U8c3RyaW5nPntcclxuICAgICAgaWYocmVuZXcpe1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke3RoaXMuY2lkfS9VU0VSSU5GT2ApXHJcbiAgICAgIH1cclxuICAgICAgd3hkZWJ1ZyhcIm9hdXRoXCIpXHJcbiAgICAgIGxldCBjb25maWcgPSBhd2FpdCB0aGlzLmdldENvcnBCeUNpZCh0aGlzLmNpZCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2lkLGNvbmZpZylcclxuICAgICAgLy8g5p6E6YCg572R6aG15o6I5p2D6ZO+5o6lIGh0dHBzOi8vZGV2ZWxvcGVyLndvcmsud2VpeGluLnFxLmNvbS9kb2N1bWVudC9wYXRoLzk2NDQxXHJcbiAgICAgIGxldCBjb3JwSWQgPSBjb25maWc/LmNvcnBJZFxyXG4gICAgICBsZXQgYWdlbnRJZCA9IGNvbmZpZz8uYWdlbnRJZFxyXG4gICAgICAvKipcclxuICAgICAgICog5Zue6LCD5Z+f5ZCN77yM5Y+v5L+h5Z+f5ZCN5L+u5pS577yM5b+F6aG75ZCO5Y+w6YeN5paw5o+Q5Lqk5bqU55So5a6h5qC45LiK57q/77yMYWNjZXNzX3Rva2Vu5peg6ZyA6YeN572uXHJcbiAgICAgICAqL1xyXG4gICAgICBsZXQgdXJsID0gbmV3IFVSTChcImh0dHBzOi8vYXBwLmZtb2RlLmNuXCIgKyBsb2NhdGlvbi5wYXRobmFtZSArIGxvY2F0aW9uPy5zZWFyY2gpXHJcbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuZGVsZXRlKFwiY29kZVwiKTtcclxuICAgICAgdXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoXCJzdGF0ZVwiKTtcclxuICAgICAgbGV0IHJlZGlyZWN0X3VyaSA9IGVuY29kZVVSSUNvbXBvbmVudCh1cmwuaHJlZik7XHJcbiAgICAgIGxldCBhdXRoX3VybCA9IGBodHRwczovL29wZW4ud2VpeGluLnFxLmNvbS9jb25uZWN0L29hdXRoMi9hdXRob3JpemU/YXBwaWQ9JHtjb3JwSWR9JnJlZGlyZWN0X3VyaT0ke3JlZGlyZWN0X3VyaX0mcmVzcG9uc2VfdHlwZT1jb2RlJnNjb3BlPSR7c2NvcGV9JnN0YXRlPVNUQVRFJmFnZW50aWQ9JHthZ2VudElkfSN3ZWNoYXRfcmVkaXJlY3RgXHJcbiAgICAgIC8vIHd4ZGVidWcoYXV0aF91cmwpXHJcblxyXG4gICAgICBpZih0aGlzLnBsYXRmb3JtKCk9PVwiaDVcIil7XHJcbiAgICAgICAgaWYobG9jYXRpb24uaG9zdD8uc3RhcnRzV2l0aChcImxvY2FsaG9zdFwiKSl7IHJldHVybiBcIlwifVxyXG5cclxuICAgICAgICBhdXRoX3VybCA9IGBodHRwczovL2xvZ2luLndvcmsud2VpeGluLnFxLmNvbS93d2xvZ2luL3Nzby9sb2dpbj9sb2dpbl90eXBlPUNvcnBBcHAmYXBwaWQ9JHtjb3JwSWR9JmFnZW50aWQ9JHthZ2VudElkfSZyZWRpcmVjdF91cmk9JHtyZWRpcmVjdF91cml9JnN0YXRlPVdXTG9naW5gXHJcbiAgICAgICAgLy8g5Yid5aeL5YyWV2Vi56uv55m75b2V57uE5Lu2XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJjcmVhdGVXV0xvZ2luUGFuZWxcIilcclxuICAgICAgICAvLyByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZT0+e1xyXG4gICAgICAgIC8vICAgICAgIGNvbnN0IHd3TG9naW4gPSB3dy5jcmVhdGVXV0xvZ2luUGFuZWwoe1xyXG4gICAgICAgIC8vICAgICAgICAgZWw6ICcjd3dfbG9naW4nLFxyXG4gICAgICAgIC8vICAgICAgICAgcGFyYW1zOiB7XHJcbiAgICAgICAgLy8gICAgICAgICAgIGxvZ2luX3R5cGU6IHd3LldXTG9naW5UeXBlLmNvcnBBcHAsXHJcbiAgICAgICAgLy8gICAgICAgICAgIGFwcGlkOiBjb3JwSWQsXHJcbiAgICAgICAgLy8gICAgICAgICAgIGFnZW50aWQ6IGFnZW50SWQsXHJcbiAgICAgICAgLy8gICAgICAgICAgIHJlZGlyZWN0X3VyaTogcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIC8vICAgICAgICAgICBzdGF0ZTogJ1dXTE9HSU4nLFxyXG4gICAgICAgIC8vICAgICAgICAgICByZWRpcmVjdF90eXBlOiB3dy5XV0xvZ2luUmVkaXJlY3RUeXBlLmNhbGxiYWNrLFxyXG4gICAgICAgIC8vICAgICAgICAgfSxcclxuICAgICAgICAvLyAgICAgICAgIG9uQ2hlY2tXZUNvbUxvZ2luKHsgaXNXZUNvbUxvZ2luIH0pIHtcclxuICAgICAgICAvLyAgICAgICAgICAgY29uc29sZS5sb2coaXNXZUNvbUxvZ2luKVxyXG4gICAgICAgIC8vICAgICAgICAgfSxcclxuICAgICAgICAvLyAgICAgICAgIG9uTG9naW5TdWNjZXNzKHsgY29kZSB9KSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgIGNvbnNvbGUubG9nKHsgY29kZSB9KVxyXG4gICAgICAgIC8vICAgICAgICAgICByZXNvbHZlKGNvZGUpXHJcbiAgICAgICAgLy8gICAgICAgICB9LFxyXG4gICAgICAgIC8vICAgICAgICAgb25Mb2dpbkZhaWwoZXJyKSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgIGNvbnNvbGUubG9nKGVycilcclxuICAgICAgICAvLyAgICAgICAgIH0sXHJcbiAgICAgICAgLy8gICAgICAgfSlcclxuICAgICAgICAvLyAgICAgICB3d0xvZ2luXHJcbiAgICAgICAgLy8gfSlcclxuICAgICAgfVxyXG5cclxuICAgICAgbG9jYXRpb24uaHJlZiA9IGF1dGhfdXJsXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldENvcnBCeUNpZChjaWQ6c3RyaW5nKTpQcm9taXNlPGFueT57XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiY2lkXCIsY2lkKVxyXG4gICAgICBpZih0aGlzLmNvcnBJZCkgcmV0dXJuIHRoaXMuY29ycElkXHJcbiAgICAgIGxldCBxdWVyeSA9IG5ldyBQYXJzZS5RdWVyeShcIkNsb3VkUmVzb3VyY2VcIik7XHJcbiAgICAgIGxldCByZXMgPSBhd2FpdCBxdWVyeS5nZXQodGhpcy5jb21wYW55TWFwW2NpZF0/LmNvcnBSZXNJZCk7XHJcbiAgICAgIGxldCBjb25maWc6YW55ID0gcmVzLmdldChcImNvbmZpZ1wiKTtcclxuICAgICAgY29uc29sZS5sb2coXCJjb25maWdcIixjb25maWcpXHJcbiAgICAgIHJldHVybiBjb25maWdcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlclVybDpzdHJpbmdcclxuICAgIC8qKlxyXG4gICAgICog5Yqg6L295LyB5Lia5Y+3SUTlj4rlupTnlKjlpZfku7ZJROazqOWGjOmhtemdolxyXG4gICAgICogQHBhcmFtIGNpZCDlhazlj7jluJDlpZdcclxuICAgICAqIEBwYXJhbSBhcHBJZCDlupTnlKhJRFxyXG4gICAgICovXHJcbiAgICBhc3luYyByZWdpc3RlckNvcnBXaXRoU3VpdGUoY2lkPzpzdHJpbmcsYXBwSWQ/OnN0cmluZyxhcGlMaXN0PzpzdHJpbmdbXSl7XHJcbiAgICAgIC8vIHd4ZGVidWcoXCJyZWdpc3RlckNvcnBXaXRoU3VpdGVcIilcclxuICAgICAgLy8gd3hkZWJ1Zyh0aGlzLnBsYXRmb3JtKCkpXHJcbiAgICAgIGlmKHRoaXMucGxhdGZvcm0oKSE9XCJ3eHdvcmtcIikgcmV0dXJuIGZhbHNlXHJcbiAgICAgIGlmKCFhcGlMaXN0Py5sZW5ndGggJiYgdGhpcy5yZWdpc3RlclVybCA9PSBsb2NhdGlvbi5ocmVmKXsgLy8g5q+P5qyhdXJs5Y+Y5YyW77yM6YeN5paw5rOo5YaMXHJcbiAgICAgICAgLy8gd3hkZWJ1ZyhcInJlZ2lzdGVyVXJsXCIpXHJcbiAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgfVxyXG4gICAgICBhcGlMaXN0ID0gYXBpTGlzdCB8fCBqc0FwaUxpc3RcclxuICAgICAgLy8gd3hkZWJ1ZyhKU09OLnN0cmluZ2lmeShhcGlMaXN0KSlcclxuICAgICAgLy8gbGV0IGlzQ2hlY2sgPSBhd2FpdCB3dy5jaGVja0pzQXBpKHtqc0FwaUxpc3R9KTtcclxuICAgICAgLy8gaWYoaXNDaGVjaykgcmV0dXJuIHRydWU7XHJcbiAgICAgIHRyeXtcclxuICAgICAgICBjaWQgPSBjaWQgfHwgdGhpcy5jaWQgXHJcbiAgICAgICAgYXBwSWQgPSBhcHBJZCB8fCB0aGlzLmFwcElkIFxyXG4gICAgICAgIC8vIHd4ZGVidWcoXCJpZFwiK2NpZClcclxuICAgICAgICBsZXQgY29ycENvbmZpZyA9IGF3YWl0IHRoaXMuZ2V0Q29ycEJ5Q2lkKGNpZClcclxuXHJcbiAgICAgICAgLy8gd3hkZWJ1ZyhcImNvcnBDb25maWdcIitKU09OLnN0cmluZ2lmeShjb3JwQ29uZmlnKSlcclxuICAgICAgICBjb25zb2xlLmxvZyhjb3JwQ29uZmlnKVxyXG5cclxuICAgICAgICBsZXQgY29ycElkID0gY29ycENvbmZpZz8uY29ycElkO1xyXG4gICAgICAgIGxldCBzdWl0ZUlkID0gdGhpcy5zdWl0ZU1hcFthcHBJZF0/LnN1aXRlSWQ7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKGNvcnBJZCxzdWl0ZUlkKVxyXG4gICAgICAgIGxldCBub3cgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGxldCByZWdpc3RlclByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlPT57XHJcbiAgICAgICAgICAvLyB3eGRlYnVnKFwicmVnaXN0ZXJQcm9taXNlXCIpXHJcbiAgICAgICAgICB3dy5yZWdpc3Rlcih7XHJcbiAgICAgICAgICAgIGNvcnBJZDogY29ycENvbmZpZy5jb3JwSWQsICAgICAgIC8vIOW/heWhq++8jOW9k+WJjeeUqOaIt+S8geS4muaJgOWxnuS8geS4mklEXHJcbiAgICAgICAgICAgIHN1aXRlSWQ6IHN1aXRlSWQsXHJcbiAgICAgICAgICAgIGFnZW50SWQ6IGNvcnBDb25maWcuYWdlbnRJZCxcclxuICAgICAgICAgICAganNBcGlMaXN0OiBhcGlMaXN0LCAvLyDlv4XloavvvIzpnIDopoHkvb/nlKjnmoRKU0FQSeWIl+ihqFxyXG4gICAgICAgICAgICBnZXRBZ2VudENvbmZpZ1NpZ25hdHVyZTphc3luYyAoKT0+e1xyXG4gICAgICAgICAgICAgIC8vIHd4ZGVidWcoXCJnZXRBZ2VudENvbmZpZ1NpZ25hdHVyZVwiKVxyXG4gICAgICAgICAgICAgIGxldCBqc2FwaVRpY2tldCA9IGF3YWl0IHRoaXMud2Vjb3JwLnRpY2tldC5nZXQoKTtcclxuICAgICAgICAgICAgICAvLyB3eGRlYnVnKFwianNhcGlUaWNrZXQ6XCIranNhcGlUaWNrZXQrXCIvXCIrbG9jYXRpb24uaHJlZilcclxuICAgICAgICAgICAgICByZXR1cm4gd3cuZ2V0U2lnbmF0dXJlKHtcclxuICAgICAgICAgICAgICAgIHRpY2tldDpqc2FwaVRpY2tldCxcclxuICAgICAgICAgICAgICAgIG5vbmNlU3RyOlwiNjY2XCIsXHJcbiAgICAgICAgICAgICAgICB0aW1lc3RhbXA6KG5vdy5nZXRUaW1lKCkvMTAwMCkudG9GaXhlZCgwKSxcclxuICAgICAgICAgICAgICAgIHVybDpsb2NhdGlvbi5ocmVmXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25BZ2VudENvbmZpZ1N1Y2Nlc3M6KCk9PntcclxuICAgICAgICAgICAgICAvLyB3eGRlYnVnKFwib25BZ2VudENvbmZpZ1N1Y2Nlc3NcIilcclxuICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyVXJsID0gbG9jYXRpb24uaHJlZlxyXG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25BZ2VudENvbmZpZ0ZhaWw6KGVycjphbnkpPT57XHJcbiAgICAgICAgICAgICAgLy8gd3hkZWJ1ZyhKU09OLnN0cmluZ2lmeShlcnIpKVxyXG4gICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uQ29uZmlnRmFpbDooZXJyOmFueSk9PntcclxuICAgICAgICAgICAgICAvLyB3eGRlYnVnKEpTT04uc3RyaW5naWZ5KGVycikpXHJcbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8gZ2V0Q29uZmlnU2lnbmF0dXJlOnRoaXMuZ2V0Q29uZmlnU2lnbmF0dXJlICAgICAgICAgICAgICAgICAvLyDlv4XloavvvIzmoLnmja51cmznlJ/miJDkvIHkuJrnrb7lkI3nmoTlm57osIPlh73mlbBcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlZ2lzdGVyUHJvbWlzZTtcclxuICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgd3hkZWJ1ZyhKU09OLnN0cmluZ2lmeShlcnIpKVxyXG4gICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvKiog5rWP6KeI5Zmo54m55b6BICovXHJcbiAgICB1YTpzdHJpbmdcclxuICAgIGdldFVBKCl7XHJcbiAgICAgIHRoaXMudWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIHJldHVybiB0aGlzLnVhO1xyXG4gICAgfVxyXG4gICAgcGxhdGZvcm0oKXtcclxuICAgICAgdGhpcy51YSA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgaWYodGhpcy51YS5pbmRleE9mKFwid3h3b3JrXCIpPi0xKXtcclxuICAgICAgICByZXR1cm4gXCJ3eHdvcmtcIlxyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXMudWEuaW5kZXhPZihcIndlY2hhdFwiKT4tMSl7XHJcbiAgICAgICAgcmV0dXJuIFwid2VjaGF0XCJcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gXCJoNVwiXHJcbiAgICB9XHJcbiAgICAvKiog55So5oi35YWl5Y+j5pa55byPICovXHJcbiAgICBlbnRyeTpzdHJpbmdcclxuICAgIGVudHJ5RXJyb3I6c3RyaW5nXHJcbiAgICBhc3luYyBnZXRDb250ZXh0KCk6UHJvbWlzZTx7ZW50cnk6c3RyaW5nfT57XHJcbiAgICAgIC8vIHd4ZGVidWcoXCJyZWdpc3RlckNvcnBXaXRoU3VpdGVcIilcclxuICAgICAgbGV0IGlzUmVnaXN0ZXIgPSBhd2FpdCB0aGlzLnJlZ2lzdGVyQ29ycFdpdGhTdWl0ZSgpO1xyXG4gICAgICB0cnl7XHJcbiAgICAgICAgbGV0IGNvbnRleHQgPSBhd2FpdCB3dy5nZXRDb250ZXh0KCk7XHJcbiAgICAgICAgaWYoY29udGV4dD8uZW50cnkpIHRoaXMuZW50cnkgPSBjb250ZXh0Py5lbnRyeTtcclxuICAgICAgICAvLyB3eGRlYnVnKEpTT04uc3RyaW5naWZ5KGNvbnRleHQpKVxyXG4gICAgICAgIHJldHVybiBjb250ZXh0XHJcbiAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIHRoaXMuZW50cnlFcnJvciA9IFwi6K+35YWI5rOo5YaMSlNBUElcIitlcnIuZXJyQ29kZSArIGVyci5lcnJNc2dcclxuICAgICAgICAvLyB3eGRlYnVnKEpTT04uc3RyaW5naWZ5KGVycikpXHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGxcclxuICAgIH1cclxuICAgIC8qKiDlhaXlj6PkvJror53lnLrmma8gKi9cclxuICAgIGN1cnJlbnRDaGF0Old4d29ya0N1cnJlbnRDaGF0XHJcbiAgICBhc3luYyBnZXRDdXJyZW50Q2hhdCgpe1xyXG4gICAgICBsZXQgaXNSZWdpc3RlciA9IGF3YWl0IHRoaXMucmVnaXN0ZXJDb3JwV2l0aFN1aXRlKCk7XHJcbiAgICAgIC8vIHd4ZGVidWcoXCJpc1JlZ2lzdGVyXCIraXNSZWdpc3RlcilcclxuICAgICAgaWYoIWlzUmVnaXN0ZXIpIHJldHVybiBudWxsXHJcblxyXG4gICAgICBsZXQgY29udGV4dCBcclxuICAgICAgdHJ5e1xyXG4gICAgICAgIGNvbnRleHQgPSBhd2FpdCB3dy5nZXRDb250ZXh0KCk7XHJcbiAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBlbnRyeSA9IGNvbnRleHQ/LmVudHJ5O1xyXG4gICAgICBsZXQgdHlwZVxyXG4gICAgICBsZXQgaWQ6c3RyaW5nXHJcbiAgICAgIGxldCBjb250YWN0OmFueVxyXG4gICAgICBsZXQgY2hhdDphbnlcclxuICAgICAgLy8gd3hkZWJ1ZyhlbnRyeSk7XHJcbiAgICAgIHRyeXtcclxuICAgICAgICBpZihlbnRyeSA9PSBcImdyb3VwX2NoYXRfdG9vbHNcIil7XHJcbiAgICAgICAgICB0eXBlID0gXCJjaGF0SWRcIlxyXG4gICAgICAgICAgaWQgPSAoYXdhaXQgd3cuZ2V0Q3VyRXh0ZXJuYWxDaGF0KCkpPy5jaGF0SWRcclxuICAgICAgICAgIGNoYXQgPSBhd2FpdCB0aGlzLndlY29ycC5leHRlcm5hbENvbnRhY3QuZ3JvdXBDaGF0LmdldChpZClcclxuICAgICAgICAgIC8vIHd4ZGVidWcoSlNPTi5zdHJpbmdpZnkoY2hhdCkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGVudHJ5ID09IFwiY29udGFjdF9wcm9maWxlXCIgfHwgZW50cnkgPT0gXCJzaW5nbGVfY2hhdF90b29sc1wiKXtcclxuICAgICAgICAgIHR5cGUgPSBcInVzZXJJZFwiXHJcbiAgICAgICAgICBpZCA9IChhd2FpdCB3dy5nZXRDdXJFeHRlcm5hbENvbnRhY3QoKSk/LnVzZXJJZFxyXG4gICAgICAgICAgY29udGFjdCA9IGF3YWl0IHRoaXMud2Vjb3JwLmV4dGVybmFsQ29udGFjdC5nZXQoaWQpXHJcbiAgICAgICAgICAvLyB3eGRlYnVnKEpTT04uc3RyaW5naWZ5KGNvbnRhY3QpKVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1cnJlbnRDaGF0ID0ge1xyXG4gICAgICAgICAgdHlwZSxcclxuICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgZ3JvdXA6Y2hhdD8uZ3JvdXBfY2hhdCxcclxuICAgICAgICAgIGNvbnRhY3Q6Y29udGFjdD8uZXh0ZXJuYWxfY29udGFjdCxcclxuICAgICAgICAgIGZvbGxvd191c2VyOmNvbnRhY3Q/LmZvbGxvd191c2VyLFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50Q2hhdFxyXG4gICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICB3eGRlYnVnKEpTT04uc3RyaW5naWZ5KGVycikpXHJcbiAgICAgICAgcmV0dXJuIG51bGxcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZlcnNpb24oKXtcclxuICAgICAgICB3eGRlYnVnKHd3LlNES19WRVJTSU9OKTtcclxuICAgICAgICByZXR1cm4gd3cuU0RLX1ZFUlNJT05cclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlcigpe1xyXG4gICAgICAgIHd3LnJlZ2lzdGVyKHtcclxuICAgICAgICAgICAgY29ycElkOiAnd3c3Y2E0Nzc2YjJhNzAwMDAnLCAgICAgICAvLyDlv4XloavvvIzlvZPliY3nlKjmiLfkvIHkuJrmiYDlsZ7kvIHkuJpJRFxyXG4gICAgICAgICAgICBqc0FwaUxpc3Q6IFsnZ2V0RXh0ZXJuYWxDb250YWN0J10sIC8vIOW/heWhq++8jOmcgOimgeS9v+eUqOeahEpTQVBJ5YiX6KGoXHJcbiAgICAgICAgICAgIGdldENvbmZpZ1NpZ25hdHVyZTp0aGlzLmdldENvbmZpZ1NpZ25hdHVyZSAgICAgICAgICAgICAgICAgLy8g5b+F5aGr77yM5qC55o2udXJs55Sf5oiQ5LyB5Lia562+5ZCN55qE5Zue6LCD5Ye95pWwXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBcclxuICAgIH1cclxuICAgIGFzeW5jIGdldENvbmZpZ1NpZ25hdHVyZSh1cmwpIHtcclxuICAgICAgLy8g5qC55o2uIHVybCDnlJ/miJDkvIHkuJrnrb7lkI1cclxuICAgICAgLy8g55Sf5oiQ5pa55rOV5Y+C6ICDIGh0dHBzOi8vZGV2ZWxvcGVyLndvcmsud2VpeGluLnFxLmNvbS9kb2N1bWVudC8xNDkyNFxyXG4gICAgICBsZXQgdGltZXN0YW1wID0gXCJcIlxyXG4gICAgICBsZXQgbm9uY2VTdHIgPSBcIlwiXHJcbiAgICAgIGxldCBzaWduYXR1cmUgPSBcIlwiXHJcbiAgICAgIHJldHVybiB7IHRpbWVzdGFtcCwgbm9uY2VTdHIsIHNpZ25hdHVyZSB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlnKCl7XHJcbiAgICBcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZWxlY3RFbnRlcnByaXNlQ29udGFjdCgpe1xyXG4gICAgICBsZXQgbW9kZTphbnkgPSAnbXVsdGknXHJcbiAgICAgIGxldCB0eXBlOmFueSA9IFsnZGVwYXJ0bWVudCcsICd1c2VyJ11cclxuICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0IHd3LnNlbGVjdEVudGVycHJpc2VDb250YWN0KHtcclxuICAgICAgICBmcm9tRGVwYXJ0bWVudElkOiAtMSxcclxuICAgICAgICBtb2RlOiBtb2RlLFxyXG4gICAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgICAgLy8gc2VsZWN0ZWREZXBhcnRtZW50SWRzOiBbJzInLCAnMyddLFxyXG4gICAgICAgIC8vIHNlbGVjdGVkVXNlcklkczogWydsaXNpJywgJ2xpc2kyJ11cclxuICAgICAgfSlcclxuICAgICAgY29uc29sZS5sb2cocmVzdWx0KVxyXG4gICAgICB3eGRlYnVnKHJlc3VsdClcclxuICAgIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBqc0FwaUxpc3QgPSAgW1xyXG4gIC8vIOiOt+WPluWFpeWPo+WcuuaZr1xyXG4gIFwiZ2V0Q29udGV4dFwiLFxyXG4gIFwiZ2V0Q3VyRXh0ZXJuYWxDaGF0XCIsXHJcbiAgXCJnZXRDdXJFeHRlcm5hbENvbnRhY3RcIixcclxuICAvL1xyXG4gIFwiY3JlYXRlQ29ycEdyb3VwQ2hhdFwiLFxyXG4gIFwidXBkYXRlQ29ycEdyb3VwQ2hhdFwiLFxyXG4gIC8vIOWuouaIt+e+pOa2iOaBr1xyXG4gICdvcGVuRXhpc3RlZENoYXRXaXRoTXNnJyxcclxuICAnb3BlbkVudGVycHJpc2VDaGF0JyxcclxuICAnc2VuZENoYXRNZXNzYWdlJyxcclxuICAndXBkYXRlRW50ZXJwcmlzZUNoYXQnLCAvLyDlrqLmiLfnvqTpgoDor7fmiJDlkZhcclxuICAvLyDmo4Dmn6VBUElcclxuICAnY2hlY2tKc0FwaScsXHJcbiAgJ29uTWVudVNoYXJlQXBwTWVzc2FnZScsXHJcbiAgJ29uTWVudVNoYXJlV2VjaGF0JyxcclxuICAnb25NZW51U2hhcmVUaW1lbGluZScsXHJcbiAgJ3NoYXJlQXBwTWVzc2FnZScsXHJcbiAgJ3NoYXJlV2VjaGF0TWVzc2FnZScsXHJcbiAgJ3N0YXJ0UmVjb3JkJyxcclxuICAnc3RvcFJlY29yZCcsXHJcbiAgJ29uVm9pY2VSZWNvcmRFbmQnLFxyXG4gICdwbGF5Vm9pY2UnLFxyXG4gICdwYXVzZVZvaWNlJyxcclxuICAnc3RvcFZvaWNlJyxcclxuICAndXBsb2FkVm9pY2UnLFxyXG4gICdkb3dubG9hZFZvaWNlJyxcclxuICAnY2hvb3NlSW1hZ2UnLFxyXG4gICdwcmV2aWV3SW1hZ2UnLFxyXG4gICd1cGxvYWRJbWFnZScsXHJcbiAgJ2Rvd25sb2FkSW1hZ2UnLFxyXG4gICdnZXROZXR3b3JrVHlwZScsXHJcbiAgJ29wZW5Mb2NhdGlvbicsXHJcbiAgJ2dldExvY2F0aW9uJyxcclxuICAnaGlkZU9wdGlvbk1lbnUnLFxyXG4gICdzaG93T3B0aW9uTWVudScsXHJcbiAgJ2hpZGVNZW51SXRlbXMnLFxyXG4gICdzaG93TWVudUl0ZW1zJyxcclxuICAnaGlkZUFsbE5vbkJhc2VNZW51SXRlbScsXHJcbiAgJ3Nob3dBbGxOb25CYXNlTWVudUl0ZW0nLFxyXG4gICdjbG9zZVdpbmRvdycsXHJcbiAgJ3NjYW5RUkNvZGUnLFxyXG4gICdwcmV2aWV3RmlsZScsXHJcbiAgJ3NlbGVjdEVudGVycHJpc2VDb250YWN0JyxcclxuICAnb25IaXN0b3J5QmFjaycsXHJcbiAgJ29wZW5EZWZhdWx0QnJvd3NlcicsXHJcbl0iXX0=
823
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3h3b3JrLnNkay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvY29yZS9zb2NpYWwvd3h3b3JrL3d4d29yay5zZGsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbkMsT0FBTyxFQUNMLFVBQVUsR0FJWCxNQUFNLGFBQWEsQ0FBQztBQUNyQixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNwQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFZM0UsTUFBTSxPQUFPLFNBQVM7SUFzRmxCLFlBQVksT0FJWDtRQXpGSCxlQUFVLEdBQU87WUFDZixZQUFZLEVBQUM7Z0JBQ1gsU0FBUyxFQUFDLFlBQVksQ0FBQyxrQkFBa0I7YUFDMUM7WUFDRCxZQUFZLEVBQUM7Z0JBQ1gsU0FBUyxFQUFDLFlBQVksQ0FBQyxvQkFBb0I7YUFDNUM7WUFDRCxZQUFZLEVBQUM7Z0JBQ1gsV0FBVyxFQUFDLFlBQVk7YUFDekI7U0FDRixDQUFBO1FBQ0QsYUFBUSxHQUFPO1lBQ2IsS0FBSyxFQUFDO2dCQUNKLE9BQU8sRUFBQyxvQkFBb0I7YUFDN0I7U0FDRixDQUFBO1FBS0QsT0FBRSxHQUFDLEVBQUUsQ0FBQTtRQUVMLGNBQVMsR0FBRztZQUNWLGVBQWUsRUFBQyxLQUFLLEVBQUUsT0FRdEIsRUFBQyxFQUFFO2dCQUNGLElBQUcsQ0FBQztvQkFDRixPQUFPLENBQUMsaUJBQWlCLEdBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO29CQUNsRCxJQUFJLFVB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LFlBQVk7SUFDWixrQkFBa0I7SUFDbEIsV0FBVztJQUNYLFlBQVk7SUFDWixXQUFXO0lBQ1gsYUFBYTtJQUNiLGVBQWU7SUFDZixhQUFhO0lBQ2IsY0FBYztJQUNkLGFBQWE7SUFDYixlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxhQUFhO0lBQ2IsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixlQUFlO0lBQ2YsZUFBZTtJQUNmLHdCQUF3QjtJQUN4Qix3QkFBd0I7SUFDeEIsYUFBYTtJQUNiLFlBQVk7SUFDWixhQUFhO0lBQ2IseUJBQXlCO0lBQ3pCLGVBQWU7SUFDZixvQkFBb0I7Q0FDckIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHd3IGZyb20gJ0B3ZWNvbS9qc3Nkayc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEZtb2RlUGFyc2UsXHJcbiAgRm1vZGVPYmplY3QsXHJcbiAgRm1vZGVRdWVyeSxcclxuICBGbW9kZVVzZXIsXHJcbn0gZnJvbSBcIi4uLy4uL3BhcnNlXCI7XHJcbmNvbnN0IFBhcnNlID0gRm1vZGVQYXJzZS53aXRoKFwibm92YVwiKTtcclxuXHJcbmltcG9ydCB7IFd4d29ya0NvcnAgfSBmcm9tICcuL3d4d29yay5jb3JwJztcclxuaW1wb3J0IHsgd3hkZWJ1ZyB9IGZyb20gXCIuLi93eGRlYnVnXCJcclxuaW1wb3J0IHsgY3JlYXRlTG9naW5Db250YWluZXIsIHJlbW92ZUxvZ2luQ29udGFpbmVyIH0gZnJvbSAnLi9sb2dpbi1tb2RhbCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFd4d29ya0N1cnJlbnRDaGF0e1xyXG4gIHR5cGU6XCJjaGF0SWRcInxcInVzZXJJZFwiLFxyXG4gIGlkPzpzdHJpbmcsXHJcbiAgLy8g6IGU57O75Lq6XHJcbiAgY29udGFjdD86YW55LFxyXG4gIGZvbGxvd191c2VyPzphbnksXHJcbiAgLy8g5Lya6K+d576kXHJcbiAgZ3JvdXA/OmFueSxcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFd4d29ya1NES3tcclxuICBjb21wYW55TWFwOmFueSA9IHtcclxuICAgIFwiRTRLcEd2VEV0b1wiOnsgLy8g6aOe56CBQUnluJDlpZdcclxuICAgICAgY29ycFJlc0lkOlwidnNWSVdiZDFpOVwiIC8vIOiEkeaOp+enkeaKgO+8iENSTeW+heW8gOWPke+8ieS8geS4muWPt1xyXG4gICAgfSxcclxuICAgIFwidVJpREd3RVlMaVwiOnsgLy8g5oKg54S2VEFMS+i0puWll1xyXG4gICAgICBjb3JwUmVzSWQ6XCJKeGZGWEJyMGx5XCIgLy8g5oKg54S2VEFMS++8iENSTeW+heW8gOWPke+8ieS8geS4muWPt1xyXG4gICAgfSxcclxuICAgIFwiY0RMNlIxaGdTaVwiOnsgLy8g5pig5LiJ6ImyXHJcbiAgICAgIFwiY29ycFJlc0lkXCI6XCJTcEw2Z3lEMUd1XCJcclxuICAgIH1cclxuICB9XHJcbiAgc3VpdGVNYXA6YW55ID0ge1xyXG4gICAgXCJjcm1cIjp7XHJcbiAgICAgIHN1aXRlSWQ6XCJkazI1NTliYTc1OGYzM2Q4ZjVcIlxyXG4gICAgfVxyXG4gIH1cclxuICBjaWQ6c3RyaW5nXHJcbiAgYXBwSWQ6c3RyaW5nXHJcbiAgY29ycElkOnN0cmluZ1xyXG4gIHdlY29ycDpXeHdvcmtDb3JwXHJcbiAgd3c9d3dcclxuXHJcbiAgZ3JvdXBDaGF0ID0ge1xyXG4gICAgY3JlYXRlR3JvdXBDaGF0OmFzeW5jIChvcHRpb25zOntcclxuICAgICAgZ3JvdXBOYW1lOnN0cmluZyxcclxuICAgICAgdXNlcklkcz86c3RyaW5nW10sXHJcbiAgICAgIGV4dGVybmFsVXNlcklkcz86c3RyaW5nW10sXHJcbiAgICAgIG9wZW5Vc2VySWRzPzpzdHJpbmdbXSxcclxuICAgICAgY29ycEdyb3VwVXNlcklkcz86YW55LFxyXG4gICAgICBzdWNjZXNzPzphbnksXHJcbiAgICAgIGZhaWw/OmFueVxyXG4gICAgfSk9PntcclxuICAgICAgdHJ5e1xyXG4gICAgICAgIHd4ZGVidWcoXCJjcmVhdGVHcm91cENoYXRcIitKU09OLnN0cmluZ2lmeShvcHRpb25zKSlcclxuICAgICAgICBsZXQgaXNSZWdpc3RlciA9IGF3YWl0IHRoaXMucmVnaXN0ZXJDb3JwV2l0aFN1aXRlKCk7XHJcbiAgICAgICAgaWYoIWlzUmVnaXN0ZXIpIHJldHVybiBudWxsXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLHJlamVjdCk9PntcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgb3B0aW9ucy5zdWNjZXNzID0gKGRhdGEpPT57XHJcbiAgICAgICAgICAgIHd4ZGVidWcoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBvcHRpb25zLmZhaWwgPSAoZXJyKT0+e1xyXG4gICAgICAgICAgICB3eGRlYnVnKEpTT04uc3RyaW5naWZ5KGVycikpO1xyXG4gICAgICAgICAgICByZWplY3QoZXJyKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgd3cuY3JlYXRlQ29ycEdyb3VwQ2hhdChvcHRpb25zKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICB3eGRlYnVnKEpTT04uc3RyaW5naWZ5KGVycikpXHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBhZGRVc2VySW5mb0dyb3VwOmFzeW5jKG9wdGlvbnM6e1xyXG4gICAgICBjaGF0SWQ6c3RyaW5nLFxyXG4gICAgICB1c2VySWRzPzpzdHJpbmdbXSxcclxuICAgICAgZXh0ZXJuYWxVc2VySWRzPzpzdHJpbmdbXSxcclxuICAgICAgb3BlblVzZXJJZHM/OnN0cmluZ1tdLFxyXG4gICAgICBjb3JwR3JvdXBVc2VySWRzPzphbnksXHJcbiAgICAgIHN1Y2Nlc3M/OmFueSxcclxuICAgICAgZmFpbD86YW55XHJcbiAgICB9KT0+e1xyXG4gICAgICB3eGRlYnVnKFwiYWRkVXNlckluZm9Hcm91cFwiK0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpKVxyXG4gICAgICB0cnl7XHJcbiAgICAgICAgbGV0IGlzUmVnaXN0ZXIgPSBhd2FpdCB0aGlzLnJlZ2lzdGVyQ29ycFdpdGhTdWl0ZSgpO1xyXG4gICAgICAgIHd4ZGVidWcoXCJpc1JlZ2lzdGVyXCIraXNSZWdpc3RlcilcclxuICAgICAgICBpZighaXNSZWdpc3RlcikgcmV0dXJuIG51bGxcclxuICAgICAgICB3eGRlYnVnKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKVxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSxyZWplY3QpPT57XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIG9wdGlvbnMuc3VjY2VzcyA9IChkYXRhKT0+e1xyXG4gICAgICAgICAgICB3eGRlYnVnKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgb3B0aW9ucy5mYWlsID0gKGVycik9PntcclxuICAgICAgICAgICAgd3hkZWJ1ZyhKU09OLnN0cmluZ2lmeShlcnIpKTtcclxuICAgICAgICAgICAgcmVqZWN0KGVycilcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHd3LnVwZGF0ZUNvcnBHcm91cENoYXQob3B0aW9ucyk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgd3hkZWJ1ZyhKU09OLnN0cmluZ2lmeShlcnIpKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnM/OntcclxuICAgICAgY2lkOnN0cmluZywgLy8g5YWs5Y+45biQ5aWXSURcclxuICAgICAgYXBwSWQ6c3RyaW5nLCAvLyDlupTnlKhJRCDnlKjkuo7ojrflj5YgU3VpdGVJZFxyXG4gICAgICBjb3JwSWQ/OnN0cmluZyxcclxuICAgIH0pe1xyXG4gICAgICB0aGlzLmNpZCA9IG9wdGlvbnM/LmNpZFxyXG4gICAgICB0aGlzLmFwcElkID0gb3B0aW9ucz8uYXBwSWRcclxuICAgICAgdGhpcy53ZWNvcnAgPSBuZXcgV3h3b3JrQ29ycCh0aGlzLmNpZClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWQjOatpee+pOiBiuS/oeaBr+WIsCBHcm91cENoYXQg6KGoXHJcbiAgICAgKiBAcGFyYW0gZ3JvdXBJbmZvIOS8geW+rue+pOiBiuS/oeaBr1xyXG4gICAgICogQHJldHVybnMgR3JvdXBDaGF0IFBhcnNlIE9iamVjdFxyXG4gICAgICovXHJcbiAgICBhc3luYyBzeW5jR3JvdXBDaGF0KGdyb3VwSW5mbzphbnkpOlByb21pc2U8Rm1vZGVPYmplY3Q+e1xyXG4gICAgICBsZXQgcXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoXCJHcm91cENoYXRcIik7XHJcbiAgICAgIHF1ZXJ5LmVxdWFsVG8oXCJjaGF0X2lkXCIsZ3JvdXBJbmZvPy5jaGF0X2lkKTtcclxuICAgICAgbGV0IGdyb3VwID0gYXdhaXQgcXVlcnkuZmlyc3QoKTtcclxuICAgICAgaWYoIWdyb3VwPy5pZCl7XHJcbiAgICAgICAgZ3JvdXAgPSBuZXcgUGFyc2UuT2JqZWN0KFwiR3JvdXBDaGF0XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIOeUn+aIkOWFpee+pOaWueW8j1xyXG4gICAgICBsZXQgbmVlZFNhdmU6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICBpZighZ3JvdXA/LmdldChcImpvaW5VcmxcIikpe1xyXG4gICAgICAgIGxldCBjb25maWdfaWQxID0gKGF3YWl0IHRoaXMud2Vjb3JwLmV4dGVybmFsQ29udGFjdC5ncm91cENoYXQuYWRkSm9pbldheSh7XHJcbiAgICAgICAgICBzY2VuZToxLFxyXG4gICAgICAgICAgY2hhdF9pZF9saXN0Oltncm91cEluZm8uY2hhdF9pZF0sXHJcbiAgICAgICAgfSkpPy5jb25maWdfaWRcclxuICAgICAgICBsZXQgam9pblVybCA9IChhd2FpdCB0aGlzLndlY29ycC5leHRlcm5hbENvbnRhY3QuZ3JvdXBDaGF0LmdldEpvaW5XYXkoY29uZmlnX2lkMSkpPy5qb2luX3dheVxyXG4gICAgICAgIGdyb3VwLnNldChcImpvaW5VcmxcIixqb2luVXJsKVxyXG4gICAgICAgIG5lZWRTYXZlID0gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICAgIGlmKCFncm91cD8uZ2V0KFwiam9pblFyY29kZVwiKSl7XHJcbiAgICAgICAgbGV0IGNvbmZpZ19pZDIgPSAoYXdhaXQgdGhpcy53ZWNvcnAuZXh0ZXJuYWxDb250YWN0Lmdyb3VwQ2hhdC5hZGRKb2luV2F5KHtcclxuICAgICAgICAgIHNjZW5lOjIsXHJcbiAgICAgICAgICBjaGF0X2lkX2xpc3Q6W2dyb3VwSW5mby5jaGF0X2lkXSxcclxuICAgICAgICB9KSk/LmNvbmZpZ19pZFxyXG4gICAgICAgIGxldCBqb2luUXJjb2RlID0gKGF3YWl0IHRoaXMud2Vjb3JwLmV4dGVybmFsQ29udGFjdC5ncm91cENoYXQuZ2V0Sm9pbldheShjb25maWdfaWQyKSk/LmpvaW5fd2F5XHJcbiAgICAgICAgZ3JvdXAuc2V0KFwiam9pblFyY29kZVwiLGpvaW5RcmNvZGUpXHJcbiAgICAgICAgbmVlZFNhdmUgPSB0cnVlXHJcbiAgICAgIH1cclxuICAgICAgLy8g5pWw5o2u5pu05pawXHJcbiAgICAgIGxldCBncm91cERhdGE6YW55ID0ge1xyXG4gICAgICAgIGNoYXRfaWQ6Z3JvdXBJbmZvLmNoYXRfaWQsXHJcbiAgICAgICAgbmFtZTpncm91cEluZm8ubmFtZSxcclxuICAgICAgICBvd25lcjpncm91cEluZm8ub3duZXIsXHJcbiAgICAgICAgbm90aWNlOmdyb3VwSW5mby5ub3RpY2UsXHJcbiAgICAgIH1cclxuICAgICAgaWYoZ3JvdXAuZ2V0KFwiY2hhdF9pZFwiKSAhPSBncm91cEluZm8uY2hhdF9pZCl7XHJcbiAgICAgICAgbmVlZFNhdmUgPSB0cnVlXHJcbiAgICAgIH1cclxuICAgICAgaWYoZ3JvdXAuZ2V0KFwibmFtZVwiKSAhPSBncm91cEluZm8ubmFtZSl7XHJcbiAgICAgICAgbmVlZFNhdmUgPSB0cnVlXHJcbiAgICAgIH1cclxuICAgICAgaWYoZ3JvdXAuZ2V0KFwib3duZXJcIikgIT0gZ3JvdXBJbmZvLm93bmVyKXtcclxuICAgICAgICBuZWVkU2F2ZSA9IHRydWVcclxuICAgICAgfVxyXG4gICAgICBpZihncm91cC5nZXQoXCJub3RpY2VcIikgIT0gZ3JvdXBJbmZvLm5vdGljZSl7XHJcbiAgICAgICAgbmVlZFNhdmUgPSB0cnVlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKGdyb3VwLmdldChcIm1lbWJlcl92ZXJzaW9uXCIpICE9IGdyb3VwSW5mby5tZW1iZXJfdmVyc2lvbil7XHJcbiAgICAgICAgbmVlZFNhdmUgPSB0cnVlXHJcbiAgICAgICAgZ3JvdXBEYXRhLm1lbWJlcl9saXN0ID0gZ3JvdXBJbmZvLm1lbWJlcl9saXN0O1xyXG4gICAgICAgIGdyb3VwRGF0YS5tZW1iZXJfdmVyc2lvbiA9IGdyb3VwSW5mby5tZW1iZXJfdmVyc2lvbjtcclxuICAgICAgfVxyXG4gICAgICAvLyDorr7nva7lsZ7mgKdcclxuICAgICAgZ3JvdXAuc2V0KGdyb3VwRGF0YSlcclxuICAgICAgaWYodGhpcy5jaWQpe1xyXG4gICAgICAgIGdyb3VwLnNldChcImNvbXBhbnlcIix7X190eXBlOlwiUG9pbnRlclwiLGNsYXNzTmFtZTpcIkNvbXBhbnlcIixvYmplY3RJZDp0aGlzLmNpZH0pXHJcbiAgICAgIH1cclxuICAgICAgaWYobmVlZFNhdmUpe1xyXG4gICAgICAgIGdyb3VwID0gYXdhaXQgZ3JvdXAuc2F2ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBncm91cFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5ZCM5q2l5aSW6YOo6IGU57O75Lq65L+h5oGv5YiwIENvbnRhY3Qg6KGoXHJcbiAgICAgKiBAcGFyYW0gY29udGFjdEluZm8g5LyB5b6u5aSW6YOo6IGU57O75Lq65L+h5oGv77yI5YyF5ZCrIGV4dGVybmFsX2NvbnRhY3Qg5ZKMIGZvbGxvd191c2Vy77yJXHJcbiAgICAgKiBAcmV0dXJucyBDb250YWN0IFBhcnNlIE9iamVjdFxyXG4gICAgICovXHJcbiAgICBhc3luYyBzeW5jQ29udGFjdChjb250YWN0SW5mbzphbnkpOlByb21pc2U8Rm1vZGVPYmplY3Q+e1xyXG4gICAgICAvLyDlhbzlrrnkuKTnp43kvKDlj4LmlrnlvI9cclxuICAgICAgY29uc3QgZXh0ZXJuYWxDb250YWN0ID0gY29udGFjdEluZm8uZXh0ZXJuYWxfY29udGFjdCB8fCBjb250YWN0SW5mbztcclxuICAgICAgY29uc3QgZXh0ZXJuYWxVc2VySWQgPSBleHRlcm5hbENvbnRhY3QuZXh0ZXJuYWxfdXNlcmlkO1xyXG5cclxuICAgICAgbGV0IHF1ZXJ5ID0gbmV3IFBhcnNlLlF1ZXJ5KFwiQ29udGFjdEluZm9cIik7XHJcbiAgICAgIHF1ZXJ5LmVxdWFsVG8oXCJleHRlcm5hbF91c2VyaWRcIiwgZXh0ZXJuYWxVc2VySWQpO1xyXG5cclxuICAgICAgY29uc3QgQ29tcGFueSA9IG5ldyBQYXJzZS5PYmplY3QoJ0NvbXBhbnknKTtcclxuICAgICAgQ29tcGFueS5pZCA9IHRoaXMuY2lkO1xyXG4gICAgICBxdWVyeS5lcXVhbFRvKFwiY29tcGFueVwiLCBDb21wYW55KTtcclxuXHJcbiAgICAgIGxldCBjb250YWN0ID0gYXdhaXQgcXVlcnkuZmlyc3QoKTtcclxuICAgICAgaWYoIWNvbnRhY3Q/LmlkKXtcclxuICAgICAgICBjb250YWN0ID0gbmV3IFBhcnNlLk9iamVjdChcIkNvbnRhY3RJbmZvXCIpO1xyXG4gICAgICAgIGlmKENvbXBhbnk/LmlkKXtcclxuICAgICAgICAgIGNvbnRhY3Quc2V0KFwiY29tcGFueVwiLCBDb21wYW55LnRvUG9pbnRlcigpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOWPquS/neeVmSBuYW1lLCBtb2JpbGUsIGV4dGVybmFsX3VzZXJpZCDkvZzkuLrni6znq4vlrZfmrrVcclxuICAgICAgY29uc3QgbmFtZSA9IGV4dGVybmFsQ29udGFjdC5uYW1lIHx8ICcnO1xyXG4gICAgICBjb25zdCBtb2JpbGUgPSBleHRlcm5hbENvbnRhY3QubW9iaWxlIHx8ICcnO1xyXG5cclxuICAgICAgLy8g5YW25LuW5omA5pyJ5L+h5oGv5a2Y5YWlIGRhdGEg5a2X5q61XHJcbiAgICAgIGNvbnN0IGRhdGE6YW55ID0ge1xyXG4gICAgICAgIC4uLmV4dGVybmFsQ29udGFjdCxcclxuICAgICAgICAvLyDlpoLmnpzmnIkgZm9sbG93X3VzZXLvvIzkuZ/lrZjlhaUgZGF0YVxyXG4gICAgICAgIGZvbGxvd191c2VyOiBjb250YWN0SW5mby5mb2xsb3dfdXNlciB8fCBleHRlcm5hbENvbnRhY3QuZm9sbG93X3VzZXIgfHwgW11cclxuICAgICAgfTtcclxuXHJcbiAgICAgIGxldCBuZWVkU2F2ZTpib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgICAvLyDmo4Dmn6Xni6znq4vlrZfmrrXlj5jljJZcclxuICAgICAgaWYgKGNvbnRhY3QuZ2V0KFwiZXh0ZXJuYWxfdXNlcmlkXCIpICE9IGV4dGVybmFsVXNlcklkKSB7XHJcbiAgICAgICAgbmVlZFNhdmUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb250YWN0LmdldChcIm5hbWVcIikgIT0gbmFtZSAmJiBuYW1lKSB7XHJcbiAgICAgICAgbmVlZFNhdmUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb250YWN0LmdldChcIm1vYmlsZVwiKSAhPSBtb2JpbGUgJiYgbW9iaWxlKSB7XHJcbiAgICAgICAgbmVlZFNhdmUgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDmo4Dmn6UgZGF0YSDlrZfmrrXlj5jljJbvvIjnroDljZXlr7nmr5TvvIlcclxuICAgICAgY29uc3Qgb2xkRGF0YSA9IGNvbnRhY3QuZ2V0KFwiZGF0YVwiKTtcclxuICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KG9sZERhdGEpICE9PSBKU09OLnN0cmluZ2lmeShkYXRhKSkge1xyXG4gICAgICAgIG5lZWRTYXZlID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g6K6+572u5bGe5oCnXHJcbiAgICAgIGNvbnRhY3Quc2V0KFwiZXh0ZXJuYWxfdXNlcmlkXCIsIGV4dGVybmFsVXNlcklkKTtcclxuICAgICAgY29udGFjdC5zZXQoXCJuYW1lXCIsIG5hbWUpO1xyXG4gICAgICBjb250YWN0LnNldChcIm1vYmlsZVwiLCBtb2JpbGUpO1xyXG4gICAgICBjb250YWN0LnNldChcImRhdGFcIiwgZGF0YSk7XHJcblxyXG4gICAgICB3eGRlYnVnKFwic3luY0NvbnRhY3RcIixjb250YWN0LnRvSlNPTigpKVxyXG4gICAgICBpZihuZWVkU2F2ZSl7XHJcbiAgICAgICAgY29udGFjdCA9IGF3YWl0IGNvbnRhY3Quc2F2ZSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gY29udGFjdDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOiOt+WPluW9k+WJjeiBiuWkqeWvueixoe+8iOe+pOiBiuaIluiBlOezu+S6uu+8iVxyXG4gICAgICogQHJldHVybnMgeyBHcm91cENoYXQ/OiBGbW9kZU9iamVjdCwgQ29udGFjdD86IEZtb2RlT2JqZWN0LCBjdXJyZW50Q2hhdDogV3h3b3JrQ3VycmVudENoYXQgfVxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRDdXJyZW50Q2hhdE9iamVjdCgpOiBQcm9taXNlPHtcclxuICAgICAgR3JvdXBDaGF0PzogRm1vZGVPYmplY3QsXHJcbiAgICAgIENvbnRhY3Q/OiBGbW9kZU9iamVjdCxcclxuICAgICAgY3VycmVudENoYXQ6IFd4d29ya0N1cnJlbnRDaGF0IHwgbnVsbFxyXG4gICAgfT4ge1xyXG4gICAgICBjb25zdCBjdXJyZW50Q2hhdCA9IGF3YWl0IHRoaXMuZ2V0Q3VycmVudENoYXQoKTtcclxuXHJcbiAgICAgIGlmICghY3VycmVudENoYXQpIHtcclxuICAgICAgICByZXR1cm4geyBjdXJyZW50Q2hhdDogbnVsbCB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgR3JvdXBDaGF0OiBGbW9kZU9iamVjdCB8IHVuZGVmaW5lZDtcclxuICAgICAgbGV0IENvbnRhY3Q6IEZtb2RlT2JqZWN0IHwgdW5kZWZpbmVkO1xyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAoY3VycmVudENoYXQudHlwZSA9PT0gXCJjaGF0SWRcIiAmJiBjdXJyZW50Q2hhdC5ncm91cCkge1xyXG4gICAgICAgICAgLy8g576k6IGK5Zy65pmvXHJcbiAgICAgICAgICBHcm91cENoYXQgPSBhd2FpdCB0aGlzLnN5bmNHcm91cENoYXQoY3VycmVudENoYXQuZ3JvdXApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudENoYXQudHlwZSA9PT0gXCJ1c2VySWRcIiAmJiBjdXJyZW50Q2hhdC5pZCkge1xyXG4gICAgICAgICAgLy8g5Y2V6IGK5Zy65pmvIC0g6I635Y+W6IGU57O75Lq66K+m5oOFXHJcbiAgICAgICAgICBjb25zdCBjb250YWN0SW5mbyA9IGF3YWl0IHRoaXMud2Vjb3JwLmV4dGVybmFsQ29udGFjdC5nZXQoY3VycmVudENoYXQuaWQpO1xyXG4gICAgICAgICAgQ29udGFjdCA9IGF3YWl0IHRoaXMuc3luY0NvbnRhY3QoY29udGFjdEluZm8pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZ2V0Q3VycmVudENoYXRPYmplY3QgZXJyb3I6XCIsIGVycm9yKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBHcm91cENoYXQsXHJcbiAgICAgICAgQ29udGFjdCxcclxuICAgICAgICBjdXJyZW50Q2hhdFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgYXN5bmMgc3luY1VzZXJJbmZvKHVzZXJJbmZvOmFueSl7XHJcbiAgICAgIC8vIHd4ZGVidWcoXCJ3ZXdvcmsuc3luY1VzZXJJbmZvXCIpXHJcbiAgICAgIC8vIOabtOaWsOeUqOaIt+S/oeaBr1xyXG4gICAgICBsZXQgZ2VuZGVyID0gbnVsbFxyXG4gICAgICBpZih1c2VySW5mby5nZW5kZXI9PTEpe2dlbmRlciA9IFwi55S3XCJ9XHJcbiAgICAgIGlmKHVzZXJJbmZvLmdlbmRlcj09Mil7Z2VuZGVyID0gXCLlpbNcIn1cclxuXHJcbiAgICAgIC8vIOiOt+WPlueUqOaIt+aVsOaNru+8iFByb2ZpbGXkvIHkuJrlkZjlt6UgQ29udGFjdEluZm/lpJbpg6jlrqLmiLfkvIHlvq5vcGVuaWTvvIlcclxuICAgICAgbGV0IHRoaXNVc2VyID0gYXdhaXQgdGhpcy5nZXRDb250YWN0T3JQcm9maWxlKHVzZXJJbmZvKVxyXG4gICAgICBjb25zb2xlLmxvZygndGhpc1VzZXInLHRoaXNVc2VyKTtcclxuICAgICAgY29uc29sZS5sb2coJ3VzZXJJbmZvJyx1c2VySW5mbyk7XHJcbiAgICAgIFxyXG4gICAgICBpZih0aGlzVXNlci5jbGFzc05hbWU9PVwiQ29udGFjdEluZm9cIil7XHJcbiAgICAgICAgdGhpc1VzZXIuc2V0KHtcclxuICAgICAgICAgIGRhdGE6e1xyXG4gICAgICAgICAgICAvLyDor4bliKtJRFxyXG4gICAgICAgICAgICBvcGVuaWQ6dXNlckluZm8ub3BlbmlkLFxyXG4gICAgICAgICAgICB1c2VyaWQ6dXNlckluZm8udXNlcmlkLFxyXG4gICAgICAgICAgICBleHRlcm5hbF91c2VyaWQ6dXNlckluZm8uZXh0ZXJuYWxfdXNlcmlkLFxyXG4gICAgICAgICAgICB0eXBlOnVzZXJJbmZvLnR5cGUmJlN0cmluZyh1c2VySW5mby50eXBlKSB8fCBudWxsLFxyXG4gICAgICAgICAgICAvLyDln7rnoYDkv6Hmga9cclxuICAgICAgICAgICAgbmFtZTp1c2VySW5mby5uYW1lLFxyXG4gICAgICAgICAgICBhdmF0YXI6dXNlckluZm8uYXZhdGFyLFxyXG4gICAgICAgICAgICBnZW5kZXI6Z2VuZGVyLFxyXG4gICAgICAgICAgICAvLyDogZTns7vkv6Hmga9cclxuICAgICAgICAgICAgcXJfY29kZTp1c2VySW5mby5xcl9jb2RlLFxyXG4gICAgICAgICAgICBtb2JpbGU6dXNlckluZm8ubW9iaWxlLFxyXG4gICAgICAgICAgICBlbWFpbDp1c2VySW5mby5lbWFpbCxcclxuICAgICAgICAgICAgYml6X21haWw6dXNlckluZm8uYml6X21haWwsXHJcbiAgICAgICAgICAgIGFkZHJlc3M6dXNlckluZm8uYWRkcmVzcyxcclxuICAgICAgICAgICAgLy8g6IGM5L2N5YWs5Y+4XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOnVzZXJJbmZvLnBvc2l0aW9uLFxyXG4gICAgICAgICAgICBjb3JwX25hbWU6dXNlckluZm8uY29ycF9uYW1lLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHR5cGU6XCJ3ZWNvbS1hZ2VuY3lcIiwgLy8g5LyB5Lia5Li65paw5b6F5byA5Y+R5bqU55SoLeWklumDqOeUqOaIt+i6q+S7vVxyXG4gICAgICAgICAgY29tcGFueTp7X190eXBlOlwiUG9pbnRlclwiLGNsYXNzTmFtZTpcIkNvbXBhbnlcIixvYmplY3RJZDp0aGlzLmNpZH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIFxyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXNVc2VyLmNsYXNzTmFtZT09XCJQcm9maWxlXCIpe1xyXG4gICAgICAgIHRoaXNVc2VyLnNldCh7XHJcbiAgICAgICAgICAvLyDor4bliKtJRFxyXG4gICAgICAgICAgb3BlbmlkOnVzZXJJbmZvLm9wZW5pZCxcclxuICAgICAgICAgIHVzZXJpZDp1c2VySW5mby51c2VyaWQsXHJcbiAgICAgICAgICBleHRlcm5hbF91c2VyaWQ6dXNlckluZm8uZXh0ZXJuYWxfdXNlcmlkLFxyXG4gICAgICAgICAgdHlwZTp1c2VySW5mby50eXBlJiZTdHJpbmcodXNlckluZm8udHlwZSkgfHwgbnVsbCxcclxuICAgICAgICAgIC8vIOWfuuehgOS/oeaBr1xyXG4gICAgICAgICAgbmFtZTp1c2VySW5mby5uYW1lLFxyXG4gICAgICAgICAgYXZhdGFyOnVzZXJJbmZvLmF2YXRhcixcclxuICAgICAgICAgIGdlbmRlcjpnZW5kZXIsXHJcbiAgICAgICAgICAvLyDogZTns7vkv6Hmga9cclxuICAgICAgICAgIHFyX2NvZGU6dXNlckluZm8ucXJfY29kZSxcclxuICAgICAgICAgIG1vYmlsZTp1c2VySW5mby5tb2JpbGUsXHJcbiAgICAgICAgICBlbWFpbDp1c2VySW5mby5lbWFpbCxcclxuICAgICAgICAgIGJpel9tYWlsOnVzZXJJbmZvLmJpel9tYWlsLFxyXG4gICAgICAgICAgYWRkcmVzczp1c2VySW5mby5hZGRyZXNzLFxyXG4gICAgICAgICAgLy8g6IGM5L2N5YWs5Y+4XHJcbiAgICAgICAgICBwb3NpdGlvbjp1c2VySW5mby5wb3NpdGlvbixcclxuICAgICAgICAgIGNvcnBfbmFtZTp1c2VySW5mby5jb3JwX25hbWUsXHJcbiAgICAgICAgICBjb21wYW55OntfX3R5cGU6XCJQb2ludGVyXCIsY2xhc3NOYW1lOlwiQ29tcGFueVwiLG9iamVjdElkOnRoaXMuY2lkfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGhpc1VzZXIuc2V0KFwiZGF0YVwiLHVzZXJJbmZvKVxyXG4gICAgICB9XHJcbiAgICAgIC8vIHd4ZGVidWcoXCJ0aGlzVXNlcjpcIitKU09OLnN0cmluZ2lmeSh0aGlzVXNlci50b0pTT04oKSkpXHJcbiAgICAgIHRyeXtcclxuXHJcbiAgICAgICAgaWYgKHRoaXNVc2VyPy5pZCAmJiAhdGhpc1VzZXIuZ2V0KFwidXNlclwiKT8uaWQpIHtcclxuICAgICAgICAgIGxldCBjdXJyZW50VXNlciA9IFBhcnNlLlVzZXIuY3VycmVudCgpXHJcbiAgICAgICAgICBpZihjdXJyZW50VXNlcj8uaWQpe1xyXG4gICAgICAgICAgICB0aGlzVXNlci5zZXQoXCJ1c2VyXCIsIGN1cnJlbnRVc2VyPy50b1BvaW50ZXIoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzVXNlciA9IGF3YWl0IHRoaXNVc2VyLnNhdmUoKVxyXG4gICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICB3eGRlYnVnKGVycilcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpc1VzZXJcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogdXNlcmluZm8g6K6+572u5b2T5YmN5o6I5p2D5L+h5oGvXHJcbiAgICAgKiBAcmV0dXJucyB7XHJcbiAgICAgICAgICBcInVzZXJpZFwiXHJcbiAgICAgICAgICBcIm9wZW5pZFwiXHJcbiAgICAgICAgICBcImdlbmRlclwiXHJcbiAgICAgICAgICBcIm1vYmlsZVwiXHJcbiAgICAgICAgICBcImF2YXRhclwiXHJcbiAgICAgICAgICBcImVtYWlsXCJcclxuICAgICAgICAgIFwicXJfY29kZVwiXHJcbiAgICAgICAgICBcImJpel9tYWlsXCJcclxuICAgICAqIH1cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0VXNlcmluZm8oY29kZT86c3RyaW5nKTpQcm9taXNlPGFueT57XHJcbiAgICAgICAgd3hkZWJ1ZyhcImdldFVzZXJpbmZvXCIpXHJcblxyXG4gICAgICAgIGxldCB1c2VySW5mbzphbnlcclxuICAgICAgICBsZXQgdGhpc1VzZXI6YW55IFxyXG4gICAgICAgIGxldCB1c2VySW5mb1N0ciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke3RoaXMuY2lkfS9VU0VSSU5GT2ApXHJcbiAgICAgICAgaWYoIWNvZGUgJiYgdXNlckluZm9TdHIpeyAvLyDml6Bjb2RlIOS8mOWFiOajgOafpee8k+WtmFxyXG4gICAgICAgICAgdXNlckluZm8gPSBKU09OLnBhcnNlKHVzZXJJbmZvU3RyKVxyXG4gICAgICAgICAgdXNlckluZm8uY2lkID0gdGhpcy5jaWRcclxuICAgICAgICAgIHd4ZGVidWcoXCJnZXRDb250YWN0T3JQcm9maWxlXCIpXHJcbiAgICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIHRoaXNVc2VyID0gYXdhaXQgdGhpcy5nZXRDb250YWN0T3JQcm9maWxlKHVzZXJJbmZvKTtcclxuICAgICAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAvLyB3eGRlYnVnKFwiY3BlcnJcIitKU09OLnN0cmluZ2lmeShlcnIpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgd3hkZWJ1ZyhcImdldFVzZXJpbmZvOlwiK3VzZXJJbmZvU3RyKVxyXG4gICAgICAgICAgLy8gd3hkZWJ1ZyhcInRoaXNVc2VyOlwiK3RoaXNVc2VyLnRvSlNPTigpKVxyXG4gICAgICAgICAgaWYodXNlckluZm8mJnRoaXNVc2VyKSByZXR1cm4gdXNlckluZm9cclxuICAgICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAgIGxldCB1cmwgPSBuZXcgVVJMKGxvY2F0aW9uLmhyZWYpO1xyXG4gICAgICAgIGNvZGUgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChcImNvZGVcIikgfHwgY29kZTtcclxuICAgICAgICBpZighY29kZSkgcmV0dXJuIG51bGw7XHJcbiAgICBcclxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy53ZWNvcnAuYXV0aC5nZXR1c2VyaW5mbyhjb2RlKTtcclxuICAgICAgICB3eGRlYnVnKFwicmVzdWx0XCIrSlNPTi5zdHJpbmdpZnkocmVzdWx0KSlcclxuICAgICAgICBpZihyZXN1bHQ/LmVycmNvZGUpe1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihyZXN1bHQ/LmVycm1zZylcclxuICAgICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDooaXlhajnlKjmiLfkv6Hmga8g5o6l5Y+j5byD55So5peg5pWI77yM5b+F6aG75ZGY5bel5omL5Yqo5o6I5p2DY29kZVxyXG4gICAgICAgIC8vIGxldCB1c2VyaWQgPSByZXN1bHQ/LnVzZXJpZFxyXG4gICAgICAgIC8vIGlmKHVzZXJpZCl7XHJcbiAgICAgICAgLy8gICBsZXQgdXNlciA9IGF3YWl0IHRoaXMud2Vjb3JwLnVzZXIuZ2V0KHVzZXJpZCk7XHJcbiAgICAgICAgLy8gICBpZih1c2VyPy51c2VyaWQpe1xyXG4gICAgICAgIC8vICAgICBPYmplY3Qua2V5cyh1c2VyKS5mb3JFYWNoKGtleT0+e1xyXG4gICAgICAgIC8vICAgICAgIHJlc3VsdFtrZXldID0gdXNlcltrZXldXHJcbiAgICAgICAgLy8gICAgIH0pXHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIOihpeWFqOWklumDqOS/oeaBr1xyXG4gICAgICAgIGxldCBldXNlcmlkID0gcmVzdWx0Py5leHRlcm5hbF91c2VyaWRcclxuICAgICAgICBpZihldXNlcmlkKXtcclxuICAgICAgICAgIGxldCBldXNlciA9IGF3YWl0IHRoaXMud2Vjb3JwLmV4dGVybmFsQ29udGFjdC5nZXQoZXVzZXJpZCk7XHJcbiAgICAgICAgICBpZihldXNlcj8uZXh0ZXJuYWxfY29udGFjdCl7XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGV1c2VyPy5leHRlcm5hbF9jb250YWN0KS5mb3JFYWNoKGtleT0+e1xyXG4gICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gZXVzZXI/LmV4dGVybmFsX2NvbnRhY3Rba2V5XVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQuY2lkID0gdGhpcy5jaWRcclxuICAgICAgICB1c2VySW5mbyA9IHJlc3VsdDtcclxuICAgICAgICAvLyDooaXlhYVtb2JpbGXnu5Hlrprmg4XlhrVcclxuICAgICAgICAvLyB3eGRlYnVnKFwi6KGl5YWFbW9iaWxl57uR5a6a5oOF5Ya1XCIpXHJcbiAgICAgICAgdGhpc1VzZXIgPSBhd2FpdCB0aGlzLmdldENvbnRhY3RPclByb2ZpbGUodXNlckluZm8pO1xyXG4gICAgICAgIGlmKHRoaXNVc2VyPy5nZXQoXCJtb2JpbGVcIikpe1xyXG4gICAgICAgICAgdXNlckluZm8ubW9iaWxlID0gdGhpc1VzZXI/LmdldChcIm1vYmlsZVwiKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXNlckluZm9TdHIgPSBKU09OLnN0cmluZ2lmeShyZXN1bHQpO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGAke3RoaXMuY2lkfS9VU0VSSU5GT2AsdXNlckluZm9TdHIpXHJcbiAgICAgICAgcmV0dXJuIHVzZXJJbmZvXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOiOt+WPluW9k+WJjeeUqOaIt+eahCBQcm9maWxlIOaIliBDb250YWN0SW5mb1xyXG4gICAgICogQHJldHVybnMgUHJvZmlsZSAo5LyB5Lia5ZGY5belKSDmiJYgQ29udGFjdEluZm8gKOWklumDqOeUqOaItylcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0Q3VycmVudFVzZXIoKTpQcm9taXNlPEZtb2RlT2JqZWN0fG51bGw+e1xyXG4gICAgICBjb25zdCB1c2VySW5mbyA9IGF3YWl0IHRoaXMuZ2V0VXNlcmluZm8oKTtcclxuICAgICAgaWYoIXVzZXJJbmZvKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gYXdhaXQgdGhpcy5nZXRDb250YWN0T3JQcm9maWxlKHVzZXJJbmZvKTtcclxuICAgICAgcmV0dXJuIGN1cnJlbnRVc2VyO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldENvbnRhY3RPclByb2ZpbGUodXNlckluZm86YW55KTpQcm9taXNlPEZtb2RlT2JqZWN0PntcclxuICAgICAgbGV0IFVzZXJUeXBlOnN0cmluZ1xyXG4gICAgICBpZih1c2VySW5mby5vcGVuaWQgfHwgdXNlckluZm8uZXh0ZXJuYWxfdXNlcmlkKSB7IC8vIOWklumDqOeUqOaIt1xyXG4gICAgICAgIFVzZXJUeXBlID0gXCJDb250YWN0SW5mb1wiXHJcbiAgICAgIH1cclxuICAgICAgaWYodXNlckluZm8udXNlcmlkKXsgLy8g5ZGY5bel6LSm5oi3XHJcbiAgICAgICAgVXNlclR5cGUgPSBcIlByb2ZpbGVcIlxyXG4gICAgICB9XHJcbiAgICAgIC8vIOafpeivouW3suWtmOWcqOeUqOaIt1xyXG4gICAgICBsZXQgdXNlckNvbmRpdGlvbjpBcnJheTxhbnk+ID0gW11cclxuICAgICAgaWYoVXNlclR5cGU9PVwiUHJvZmlsZVwiKXtcclxuICAgICAgICBpZih1c2VySW5mby5vcGVuaWQpe3VzZXJDb25kaXRpb24ucHVzaCh7XCJvcGVuaWRcIjp7XCIkcmVnZXhcIjp1c2VySW5mby5vcGVuaWR9fSl9XHJcbiAgICAgICAgaWYodXNlckluZm8udXNlcmlkKXt1c2VyQ29uZGl0aW9uLnB1c2goe1widXNlcmlkXCI6e1wiJHJlZ2V4XCI6dXNlckluZm8udXNlcmlkfX0pfVxyXG4gICAgICAgIGlmKHVzZXJJbmZvLm1vYmlsZSl7dXNlckNvbmRpdGlvbi5wdXNoKHtcIm1vYmlsZVwiOntcIiRyZWdleFwiOnVzZXJJbmZvLm1vYmlsZX19KX1cclxuICAgICAgICBpZih1c2VySW5mby5lbWFpbCl7dXNlckNvbmRpdGlvbi5wdXNoKHtcImVtYWlsXCI6e1wiJHJlZ2V4XCI6dXNlckluZm8uZW1haWx9fSl9XHJcbiAgICAgICAgaWYodXNlckluZm8uZXh0ZXJuYWxfdXNlcmlkKXt1c2VyQ29uZGl0aW9uLnB1c2goe1wiZXh0ZXJuYWxfdXNlcmlkXCI6e1wiJHJlZ2V4XCI6dXNlckluZm8uZXh0ZXJuYWxfdXNlcmlkfX0pfVxyXG4gICAgICB9XHJcbiAgICAgIGlmKFVzZXJUeXBlPT1cIkNvbnRhY3RJbmZvXCIpe1xyXG4gICAgICAgIGlmKHVzZXJJbmZvLm9wZW5pZCl7dXNlckNvbmRpdGlvbi5wdXNoKHtcImRhdGEub3BlbmlkXCI6e1wiJHJlZ2V4XCI6dXNlckluZm8ub3BlbmlkfX0pfVxyXG4gICAgICAgIGlmKHVzZXJJbmZvLnVzZXJpZCl7dXNlckNvbmRpdGlvbi5wdXNoKHtcImRhdGEudXNlcmlkXCI6e1wiJHJlZ2V4XCI6dXNlckluZm8udXNlcmlkfX0pfVxyXG4gICAgICAgIGlmKHVzZXJJbmZvLm1vYmlsZSl7dXNlckNvbmRpdGlvbi5wdXNoKHtcImRhdGEubW9iaWxlXCI6e1wiJHJlZ2V4XCI6dXNlckluZm8ubW9iaWxlfX0pfVxyXG4gICAgICAgIGlmKHVzZXJJbmZvLmVtYWlsKXt1c2VyQ29uZGl0aW9uLnB1c2goe1wiZGF0YS5lbWFpbFwiOntcIiRyZWdleFwiOnVzZXJJbmZvLmVtYWlsfX0pfVxyXG4gICAgICAgIGlmKHVzZXJJbmZvLmV4dGVybmFsX3VzZXJpZCl7dXNlckNvbmRpdGlvbi5wdXNoKHtcImRhdGEuZXh0ZXJuYWxfdXNlcmlkXCI6e1wiJHJlZ2V4XCI6dXNlckluZm8uZXh0ZXJuYWxfdXNlcmlkfX0pfVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBxdWVyeSA9IFBhcnNlLlF1ZXJ5LmZyb21KU09OKFVzZXJUeXBlLHtcclxuICAgICAgICB3aGVyZTp7XHJcbiAgICAgICAgICBcIiRvclwiOnVzZXJDb25kaXRpb25cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBxdWVyeS5lcXVhbFRvKFwiY29tcGFueVwiLHRoaXMuY2lkKSAvLyDpmZDlrprotKblpZflu7rnq4vnlKjmiLfkv6Hmga9cclxuICAgICAgcXVlcnkuZXF1YWxUbyhcInVzZXJpZFwiLHVzZXJJbmZvLnVzZXJpZClcclxuXHJcbiAgICAgIGxldCB0aGlzVXNlclxyXG4gICAgICB0cnl7XHJcbiAgICAgICAgdGhpc1VzZXIgPSBhd2FpdCBxdWVyeS5maXJzdCgpXHJcbiAgICAgIH1jYXRjaChlcnIpe2NvbnNvbGUuZXJyb3IoZXJyKX1cclxuICAgICAgaWYoIXRoaXNVc2VyPy5pZCl7XHJcbiAgICAgICAgdGhpc1VzZXIgPSBuZXcgUGFyc2UuT2JqZWN0KFVzZXJUeXBlKTtcclxuICAgICAgfVxyXG4gICAgICAvLyDnqbrnlKjmiLfmo4Dmn6XlubbooaXlhYXnlKjmiLdcclxuICAgICAgbGV0IGN1cnJlbnQgPSBQYXJzZS5Vc2VyLmN1cnJlbnQoKTtcclxuICAgICAgaWYoY3VycmVudD8uaWQpe1xyXG4gICAgICAgICAgaWYoIXRoaXNVc2VyPy5nZXQoXCJ1c2VyXCIpPy5pZCl7XHJcbiAgICAgICAgICAgIHRoaXNVc2VyLnNldChcInVzZXJcIixjdXJyZW50LnRvUG9pbnRlcigpKVxyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzVXNlclxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUEMg55m76ZmG6Z2i5p2/XHJcbiAgICAgKiBAZGVzYyBodHRwczovL2RldmVsb3Blci53b3JrLndlaXhpbi5xcS5jb20vZG9jdW1lbnQvcGF0aC85ODQ3OFxyXG4gICAgICovXHJcbiAgICAvKipcclxuICogUEMg55m76ZmG6Z2i5p2/XHJcbiAqIEBkZXNjIGh0dHBzOi8vZGV2ZWxvcGVyLndvcmsud2VpeGluLnFxLmNvbS9kb2N1bWVudC9wYXRoLzk4NDc4XHJcbiAqL1xyXG5hc3luYyBsb2dpblBDKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgbGV0IGNvbmZpZyA9IGF3YWl0IHRoaXMuZ2V0Q29ycEJ5Q2lkKHRoaXMuY2lkKTtcclxuICBjb25zb2xlLmxvZyh0aGlzLmNpZCwgY29uZmlnKTtcclxuXHJcbiAgLy8g5p6E6YCg572R6aG15o6I5p2D6ZO+5o6lIGh0dHBzOi8vZGV2ZWxvcGVyLndvcmsud2VpeGluLnFxLmNvbS9kb2N1bWVudC9wYXRoLzk2NDQxXHJcbiAgY29uc3QgY29ycElkID0gY29uZmlnPy5jb3JwSWQ7XHJcbiAgY29uc3QgYWdlbnRJZCA9IGNvbmZpZz8uYWdlbnRJZDtcclxuICBcclxuICAvKipcclxuICAgKiDlm57osIPln5/lkI3vvIzlj6/kv6Hln5/lkI3kv67mlLnvvIzlv4XpobvlkI7lj7Dph43mlrDmj5DkuqTlupTnlKjlrqHmoLjkuIrnur/vvIxhY2Nlc3NfdG9rZW7ml6DpnIDph43nva5cclxuICAgKi9cclxuICBjb25zdCB1cmwgPSBuZXcgVVJMKFwiaHR0cHM6Ly9hcHAuZm1vZGUuY25cIiArIGxvY2F0aW9uLnBhdGhuYW1lICsgbG9jYXRpb24/LnNlYXJjaCk7XHJcbiAgdXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoXCJjb2RlXCIpO1xyXG4gIHVybC5zZWFyY2hQYXJhbXMuZGVsZXRlKFwic3RhdGVcIik7XHJcbiAgY29uc3QgcmVkaXJlY3RfdXJpID0gdXJsLmhyZWY7XHJcblxyXG4gIC8vIOWbnuiwg+WPguaVsFxyXG4gIGNvbnN0IGxvZ2luVHlwZTogd3cuV1dMb2dpblR5cGUgPSB3dy5XV0xvZ2luVHlwZS5jb3JwQXBwO1xyXG4gIGNvbnN0IHJUeXVwZTogd3cuV1dMb2dpblJlZGlyZWN0VHlwZSA9IHd3LldXTG9naW5SZWRpcmVjdFR5cGUuY2FsbGJhY2s7XHJcblxyXG4gIC8vIOWIm+W7uuW5tua3u+WKoOWFqOWxj+WxheS4reeahOeZu+W9leWuueWZqFxyXG4gIGNvbnNvbGUubG9nKFwibG9naW5QQzFcIik7XHJcbiAgLy8g5Yib5bu655m75b2V5a655ZmoXHJcbiAgY29uc3Qgb2xkRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd3dfbG9naW4nKTtcclxuICBpZighb2xkRWwpe1xyXG4gICAgY3JlYXRlTG9naW5Db250YWluZXIoKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSxyZWplY3QpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKFwibG9naW5QQzJcIik7XHJcblxyXG4gICAgY29uc3Qgd3dMb2dpbiA9IHRoaXMud3cuY3JlYXRlV1dMb2dpblBhbmVsKHtcclxuICAgICAgZWw6ICcjd3dfbG9naW4nLFxyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBsb2dpbl90eXBlOiBsb2dpblR5cGUsXHJcbiAgICAgICAgYXBwaWQ6IGNvcnBJZCxcclxuICAgICAgICBhZ2VudGlkOiBhZ2VudElkLFxyXG4gICAgICAgIHJlZGlyZWN0X3VyaTogcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIHN0YXRlOiAnbG9naW5TdGF0ZScsXHJcbiAgICAgICAgcmVkaXJlY3RfdHlwZTogclR5dXBlLFxyXG4gICAgICB9LFxyXG4gICAgICBvbkNoZWNrV2VDb21Mb2dpbih7IGlzV2VDb21Mb2dpbiB9KSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coaXNXZUNvbUxvZ2luKTtcclxuICAgICAgfSxcclxuICAgICAgb25Mb2dpblN1Y2Nlc3MoeyBjb2RlIH0pIHtcclxuICAgICAgICBjb25zb2xlLmxvZyh7IGNvZGUgfSk7XHJcbiAgICAgICAgcmVtb3ZlTG9naW5Db250YWluZXIoKTsgLy8g55m75b2V5oiQ5Yqf5ZCO56e76Zmk5a655ZmoXHJcbiAgICAgICAgcmVzb2x2ZShjb2RlKTtcclxuICAgICAgfSxcclxuICAgICAgb25Mb2dpbkZhaWwoZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcImxwY1wiLCBlcnIpO1xyXG4gICAgICAgIHJlbW92ZUxvZ2luQ29udGFpbmVyKCk7IC8vIOeZu+W9leWksei0peWQjuenu+mZpOWuueWZqFxyXG4gICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICBjb25zb2xlLmxvZyh3d0xvZ2luLCB3d0xvZ2luLmVsKTtcclxuICB9KTtcclxufVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogb2F1dGgg6Lez6L2s5o6I5p2DXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIG9hdXRoKHNjb3BlOlwic25zYXBpX2Jhc2VcInxcInNuc2FwaV9wcml2YXRlaW5mb1wiPVwic25zYXBpX2Jhc2VcIixyZW5ldzpib29sZWFuPWZhbHNlKTpQcm9taXNlPHN0cmluZz57XHJcbiAgICAgIGlmKHJlbmV3KXtcclxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLmNpZH0vVVNFUklORk9gKVxyXG4gICAgICB9XHJcbiAgICAgIHd4ZGVidWcoXCJvYXV0aFwiKVxyXG4gICAgICBsZXQgY29uZmlnID0gYXdhaXQgdGhpcy5nZXRDb3JwQnlDaWQodGhpcy5jaWQpO1xyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmNpZCxjb25maWcpXHJcbiAgICAgIC8vIOaehOmAoOe9kemhteaOiOadg+mTvuaOpSBodHRwczovL2RldmVsb3Blci53b3JrLndlaXhpbi5xcS5jb20vZG9jdW1lbnQvcGF0aC85NjQ0MVxyXG4gICAgICBsZXQgY29ycElkID0gY29uZmlnPy5jb3JwSWRcclxuICAgICAgbGV0IGFnZW50SWQgPSBjb25maWc/LmFnZW50SWRcclxuICAgICAgLyoqXHJcbiAgICAgICAqIOWbnuiwg+Wfn+WQje+8jOWPr+S/oeWfn+WQjeS/ruaUue+8jOW/hemhu+WQjuWPsOmHjeaWsOaPkOS6pOW6lOeUqOWuoeaguOS4iue6v++8jGFjY2Vzc190b2tlbuaXoOmcgOmHjee9rlxyXG4gICAgICAgKi9cclxuICAgICAgbGV0IHVybCA9IG5ldyBVUkwoXCJodHRwczovL2FwcC5mbW9kZS5jblwiICsgbG9jYXRpb24ucGF0aG5hbWUgKyBsb2NhdGlvbj8uc2VhcmNoKVxyXG4gICAgICB1cmwuc2VhcmNoUGFyYW1zLmRlbGV0ZShcImNvZGVcIik7XHJcbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuZGVsZXRlKFwic3RhdGVcIik7XHJcbiAgICAgIGxldCByZWRpcmVjdF91cmkgPSBlbmNvZGVVUklDb21wb25lbnQodXJsLmhyZWYpO1xyXG4gICAgICBsZXQgYXV0aF91cmwgPSBgaHR0cHM6Ly9vcGVuLndlaXhpbi5xcS5jb20vY29ubmVjdC9vYXV0aDIvYXV0aG9yaXplP2FwcGlkPSR7Y29ycElkfSZyZWRpcmVjdF91cmk9JHtyZWRpcmVjdF91cml9JnJlc3BvbnNlX3R5cGU9Y29kZSZzY29wZT0ke3Njb3BlfSZzdGF0ZT1TVEFURSZhZ2VudGlkPSR7YWdlbnRJZH0jd2VjaGF0X3JlZGlyZWN0YFxyXG4gICAgICAvLyB3eGRlYnVnKGF1dGhfdXJsKVxyXG5cclxuICAgICAgaWYodGhpcy5wbGF0Zm9ybSgpPT1cImg1XCIpe1xyXG4gICAgICAgIGlmKGxvY2F0aW9uLmhvc3Q/LnN0YXJ0c1dpdGgoXCJsb2NhbGhvc3RcIikpeyByZXR1cm4gXCJcIn1cclxuXHJcbiAgICAgICAgYXV0aF91cmwgPSBgaHR0cHM6Ly9sb2dpbi53b3JrLndlaXhpbi5xcS5jb20vd3dsb2dpbi9zc28vbG9naW4/bG9naW5fdHlwZT1Db3JwQXBwJmFwcGlkPSR7Y29ycElkfSZhZ2VudGlkPSR7YWdlbnRJZH0mcmVkaXJlY3RfdXJpPSR7cmVkaXJlY3RfdXJpfSZzdGF0ZT1XV0xvZ2luYFxyXG4gICAgICAgIC8vIOWIneWni+WMlldlYuerr+eZu+W9lee7hOS7tlxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiY3JlYXRlV1dMb2dpblBhbmVsXCIpXHJcbiAgICAgICAgLy8gcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmU9PntcclxuICAgICAgICAvLyAgICAgICBjb25zdCB3d0xvZ2luID0gd3cuY3JlYXRlV1dMb2dpblBhbmVsKHtcclxuICAgICAgICAvLyAgICAgICAgIGVsOiAnI3d3X2xvZ2luJyxcclxuICAgICAgICAvLyAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgIC8vICAgICAgICAgICBsb2dpbl90eXBlOiB3dy5XV0xvZ2luVHlwZS5jb3JwQXBwLFxyXG4gICAgICAgIC8vICAgICAgICAgICBhcHBpZDogY29ycElkLFxyXG4gICAgICAgIC8vICAgICAgICAgICBhZ2VudGlkOiBhZ2VudElkLFxyXG4gICAgICAgIC8vICAgICAgICAgICByZWRpcmVjdF91cmk6IHJlZGlyZWN0X3VyaSxcclxuICAgICAgICAvLyAgICAgICAgICAgc3RhdGU6ICdXV0xPR0lOJyxcclxuICAgICAgICAvLyAgICAgICAgICAgcmVkaXJlY3RfdHlwZTogd3cuV1dMb2dpblJlZGlyZWN0VHlwZS5jYWxsYmFjayxcclxuICAgICAgICAvLyAgICAgICAgIH0sXHJcbiAgICAgICAgLy8gICAgICAgICBvbkNoZWNrV2VDb21Mb2dpbih7IGlzV2VDb21Mb2dpbiB9KSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgIGNvbnNvbGUubG9nKGlzV2VDb21Mb2dpbilcclxuICAgICAgICAvLyAgICAgICAgIH0sXHJcbiAgICAgICAgLy8gICAgICAgICBvbkxvZ2luU3VjY2Vzcyh7IGNvZGUgfSkge1xyXG4gICAgICAgIC8vICAgICAgICAgICBjb25zb2xlLmxvZyh7IGNvZGUgfSlcclxuICAgICAgICAvLyAgICAgICAgICAgcmVzb2x2ZShjb2RlKVxyXG4gICAgICAgIC8vICAgICAgICAgfSxcclxuICAgICAgICAvLyAgICAgICAgIG9uTG9naW5GYWlsKGVycikge1xyXG4gICAgICAgIC8vICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpXHJcbiAgICAgICAgLy8gICAgICAgICB9LFxyXG4gICAgICAgIC8vICAgICAgIH0pXHJcbiAgICAgICAgLy8gICAgICAgd3dMb2dpblxyXG4gICAgICAgIC8vIH0pXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxvY2F0aW9uLmhyZWYgPSBhdXRoX3VybFxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRDb3JwQnlDaWQoY2lkOnN0cmluZyk6UHJvbWlzZTxhbnk+e1xyXG4gICAgICBjb25zb2xlLmxvZyhcImNpZFwiLGNpZClcclxuICAgICAgaWYodGhpcy5jb3JwSWQpIHJldHVybiB0aGlzLmNvcnBJZFxyXG4gICAgICBsZXQgcXVlcnkgPSBuZXcgUGFyc2UuUXVlcnkoXCJDbG91ZFJlc291cmNlXCIpO1xyXG4gICAgICBsZXQgcmVzID0gYXdhaXQgcXVlcnkuZ2V0KHRoaXMuY29tcGFueU1hcFtjaWRdPy5jb3JwUmVzSWQpO1xyXG4gICAgICBsZXQgY29uZmlnOmFueSA9IHJlcy5nZXQoXCJjb25maWdcIik7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiY29uZmlnXCIsY29uZmlnKVxyXG4gICAgICByZXR1cm4gY29uZmlnXHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJVcmw6c3RyaW5nXHJcbiAgICAvKipcclxuICAgICAqIOWKoOi9veS8geS4muWPt0lE5Y+K5bqU55So5aWX5Lu2SUTms6jlhozpobXpnaJcclxuICAgICAqIEBwYXJhbSBjaWQg5YWs5Y+45biQ5aWXXHJcbiAgICAgKiBAcGFyYW0gYXBwSWQg5bqU55SoSURcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcmVnaXN0ZXJDb3JwV2l0aFN1aXRlKGNpZD86c3RyaW5nLGFwcElkPzpzdHJpbmcsYXBpTGlzdD86c3RyaW5nW10pe1xyXG4gICAgICAvLyB3eGRlYnVnKFwicmVnaXN0ZXJDb3JwV2l0aFN1aXRlXCIpXHJcbiAgICAgIC8vIHd4ZGVidWcodGhpcy5wbGF0Zm9ybSgpKVxyXG4gICAgICBpZih0aGlzLnBsYXRmb3JtKCkhPVwid3h3b3JrXCIpIHJldHVybiBmYWxzZVxyXG4gICAgICBpZighYXBpTGlzdD8ubGVuZ3RoICYmIHRoaXMucmVnaXN0ZXJVcmwgPT0gbG9jYXRpb24uaHJlZil7IC8vIOavj+asoXVybOWPmOWMlu+8jOmHjeaWsOazqOWGjFxyXG4gICAgICAgIC8vIHd4ZGVidWcoXCJyZWdpc3RlclVybFwiKVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgIH1cclxuICAgICAgYXBpTGlzdCA9IGFwaUxpc3QgfHwganNBcGlMaXN0XHJcbiAgICAgIC8vIHd4ZGVidWcoSlNPTi5zdHJpbmdpZnkoYXBpTGlzdCkpXHJcbiAgICAgIC8vIGxldCBpc0NoZWNrID0gYXdhaXQgd3cuY2hlY2tKc0FwaSh7anNBcGlMaXN0fSk7XHJcbiAgICAgIC8vIGlmKGlzQ2hlY2spIHJldHVybiB0cnVlO1xyXG4gICAgICB0cnl7XHJcbiAgICAgICAgY2lkID0gY2lkIHx8IHRoaXMuY2lkIFxyXG4gICAgICAgIGFwcElkID0gYXBwSWQgfHwgdGhpcy5hcHBJZCBcclxuICAgICAgICAvLyB3eGRlYnVnKFwiaWRcIitjaWQpXHJcbiAgICAgICAgbGV0IGNvcnBDb25maWcgPSBhd2FpdCB0aGlzLmdldENvcnBCeUNpZChjaWQpXHJcblxyXG4gICAgICAgIC8vIHd4ZGVidWcoXCJjb3JwQ29uZmlnXCIrSlNPTi5zdHJpbmdpZnkoY29ycENvbmZpZykpXHJcbiAgICAgICAgY29uc29sZS5sb2coY29ycENvbmZpZylcclxuXHJcbiAgICAgICAgbGV0IGNvcnBJZCA9IGNvcnBDb25maWc/LmNvcnBJZDtcclxuICAgICAgICBsZXQgc3VpdGVJZCA9IHRoaXMuc3VpdGVNYXBbYXBwSWRdPy5zdWl0ZUlkO1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhjb3JwSWQsc3VpdGVJZClcclxuICAgICAgICBsZXQgbm93ID0gbmV3IERhdGUoKTtcclxuICAgICAgICBsZXQgcmVnaXN0ZXJQcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZT0+e1xyXG4gICAgICAgICAgLy8gd3hkZWJ1ZyhcInJlZ2lzdGVyUHJvbWlzZVwiKVxyXG4gICAgICAgICAgd3cucmVnaXN0ZXIoe1xyXG4gICAgICAgICAgICBjb3JwSWQ6IGNvcnBDb25maWcuY29ycElkLCAgICAgICAvLyDlv4XloavvvIzlvZPliY3nlKjmiLfkvIHkuJrmiYDlsZ7kvIHkuJpJRFxyXG4gICAgICAgICAgICBzdWl0ZUlkOiBzdWl0ZUlkLFxyXG4gICAgICAgICAgICBhZ2VudElkOiBjb3JwQ29uZmlnLmFnZW50SWQsXHJcbiAgICAgICAgICAgIGpzQXBpTGlzdDogYXBpTGlzdCwgLy8g5b+F5aGr77yM6ZyA6KaB5L2/55So55qESlNBUEnliJfooahcclxuICAgICAgICAgICAgZ2V0QWdlbnRDb25maWdTaWduYXR1cmU6YXN5bmMgKCk9PntcclxuICAgICAgICAgICAgICAvLyB3eGRlYnVnKFwiZ2V0QWdlbnRDb25maWdTaWduYXR1cmVcIilcclxuICAgICAgICAgICAgICBsZXQganNhcGlUaWNrZXQgPSBhd2FpdCB0aGlzLndlY29ycC50aWNrZXQuZ2V0KCk7XHJcbiAgICAgICAgICAgICAgLy8gd3hkZWJ1ZyhcImpzYXBpVGlja2V0OlwiK2pzYXBpVGlja2V0K1wiL1wiK2xvY2F0aW9uLmhyZWYpXHJcbiAgICAgICAgICAgICAgcmV0dXJuIHd3LmdldFNpZ25hdHVyZSh7XHJcbiAgICAgICAgICAgICAgICB0aWNrZXQ6anNhcGlUaWNrZXQsXHJcbiAgICAgICAgICAgICAgICBub25jZVN0cjpcIjY2NlwiLFxyXG4gICAgICAgICAgICAgICAgdGltZXN0YW1wOihub3cuZ2V0VGltZSgpLzEwMDApLnRvRml4ZWQoMCksXHJcbiAgICAgICAgICAgICAgICB1cmw6bG9jYXRpb24uaHJlZlxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uQWdlbnRDb25maWdTdWNjZXNzOigpPT57XHJcbiAgICAgICAgICAgICAgLy8gd3hkZWJ1ZyhcIm9uQWdlbnRDb25maWdTdWNjZXNzXCIpXHJcbiAgICAgICAgICAgICAgdGhpcy5yZWdpc3RlclVybCA9IGxvY2F0aW9uLmhyZWZcclxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG9uQWdlbnRDb25maWdGYWlsOihlcnI6YW55KT0+e1xyXG4gICAgICAgICAgICAgIC8vIHd4ZGVidWcoSlNPTi5zdHJpbmdpZnkoZXJyKSlcclxuICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbkNvbmZpZ0ZhaWw6KGVycjphbnkpPT57XHJcbiAgICAgICAgICAgICAgLy8gd3hkZWJ1ZyhKU09OLnN0cmluZ2lmeShlcnIpKVxyXG4gICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC8vIGdldENvbmZpZ1NpZ25hdHVyZTp0aGlzLmdldENvbmZpZ1NpZ25hdHVyZSAgICAgICAgICAgICAgICAgLy8g5b+F5aGr77yM5qC55o2udXJs55Sf5oiQ5LyB5Lia562+5ZCN55qE5Zue6LCD5Ye95pWwXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHJldHVybiBhd2FpdCByZWdpc3RlclByb21pc2U7XHJcbiAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIHd4ZGVidWcoSlNPTi5zdHJpbmdpZnkoZXJyKSlcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqIOa1j+iniOWZqOeJueW+gSAqL1xyXG4gICAgdWE6c3RyaW5nXHJcbiAgICBnZXRVQSgpe1xyXG4gICAgICB0aGlzLnVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICByZXR1cm4gdGhpcy51YTtcclxuICAgIH1cclxuICAgIHBsYXRmb3JtKCl7XHJcbiAgICAgIHRoaXMudWEgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgIGlmKHRoaXMudWEuaW5kZXhPZihcInd4d29ya1wiKT4tMSl7XHJcbiAgICAgICAgcmV0dXJuIFwid3h3b3JrXCJcclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLnVhLmluZGV4T2YoXCJ3ZWNoYXRcIik+LTEpe1xyXG4gICAgICAgIHJldHVybiBcIndlY2hhdFwiXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIFwiaDVcIlxyXG4gICAgfVxyXG4gICAgLyoqIOeUqOaIt+WFpeWPo+aWueW8jyAqL1xyXG4gICAgZW50cnk6c3RyaW5nXHJcbiAgICBlbnRyeUVycm9yOnN0cmluZ1xyXG4gICAgYXN5bmMgZ2V0Q29udGV4dCgpOlByb21pc2U8e2VudHJ5OnN0cmluZ30+e1xyXG4gICAgICAvLyB3eGRlYnVnKFwicmVnaXN0ZXJDb3JwV2l0aFN1aXRlXCIpXHJcbiAgICAgIGxldCBpc1JlZ2lzdGVyID0gYXdhaXQgdGhpcy5yZWdpc3RlckNvcnBXaXRoU3VpdGUoKTtcclxuICAgICAgdHJ5e1xyXG4gICAgICAgIGxldCBjb250ZXh0ID0gYXdhaXQgd3cuZ2V0Q29udGV4dCgpO1xyXG4gICAgICAgIGlmKGNvbnRleHQ/LmVudHJ5KSB0aGlzLmVudHJ5ID0gY29udGV4dD8uZW50cnk7XHJcbiAgICAgICAgLy8gd3hkZWJ1ZyhKU09OLnN0cmluZ2lmeShjb250ZXh0KSlcclxuICAgICAgICByZXR1cm4gY29udGV4dFxyXG4gICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICB0aGlzLmVudHJ5RXJyb3IgPSBcIuivt+WFiOazqOWGjEpTQVBJXCIrZXJyLmVyckNvZGUgKyBlcnIuZXJyTXNnXHJcbiAgICAgICAgLy8gd3hkZWJ1ZyhKU09OLnN0cmluZ2lmeShlcnIpKVxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsXHJcbiAgICB9XHJcbiAgICAvKiog5YWl5Y+j5Lya6K+d5Zy65pmvICovXHJcbiAgICBjdXJyZW50Q2hhdDpXeHdvcmtDdXJyZW50Q2hhdFxyXG4gICAgYXN5bmMgZ2V0Q3VycmVudENoYXQoKXtcclxuICAgICAgbGV0IGlzUmVnaXN0ZXIgPSBhd2FpdCB0aGlzLnJlZ2lzdGVyQ29ycFdpdGhTdWl0ZSgpO1xyXG4gICAgICAvLyB3eGRlYnVnKFwiaXNSZWdpc3RlclwiK2lzUmVnaXN0ZXIpXHJcbiAgICAgIGlmKCFpc1JlZ2lzdGVyKSByZXR1cm4gbnVsbFxyXG5cclxuICAgICAgbGV0IGNvbnRleHQgXHJcbiAgICAgIHRyeXtcclxuICAgICAgICBjb250ZXh0ID0gYXdhaXQgd3cuZ2V0Q29udGV4dCgpO1xyXG4gICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcclxuICAgICAgfVxyXG4gICAgICBsZXQgZW50cnkgPSBjb250ZXh0Py5lbnRyeTtcclxuICAgICAgbGV0IHR5cGVcclxuICAgICAgbGV0IGlkOnN0cmluZ1xyXG4gICAgICBsZXQgY29udGFjdDphbnlcclxuICAgICAgbGV0IGNoYXQ6YW55XHJcbiAgICAgIC8vIHd4ZGVidWcoZW50cnkpO1xyXG4gICAgICB0cnl7XHJcbiAgICAgICAgaWYoZW50cnkgPT0gXCJncm91cF9jaGF0X3Rvb2xzXCIpe1xyXG4gICAgICAgICAgdHlwZSA9IFwiY2hhdElkXCJcclxuICAgICAgICAgIGlkID0gKGF3YWl0IHd3LmdldEN1ckV4dGVybmFsQ2hhdCgpKT8uY2hhdElkXHJcbiAgICAgICAgICBjaGF0ID0gYXdhaXQgdGhpcy53ZWNvcnAuZXh0ZXJuYWxDb250YWN0Lmdyb3VwQ2hhdC5nZXQoaWQpXHJcbiAgICAgICAgICAvLyB3eGRlYnVnKEpTT04uc3RyaW5naWZ5KGNoYXQpKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihlbnRyeSA9PSBcImNvbnRhY3RfcHJvZmlsZVwiIHx8IGVudHJ5ID09IFwic2luZ2xlX2NoYXRfdG9vbHNcIil7XHJcbiAgICAgICAgICB0eXBlID0gXCJ1c2VySWRcIlxyXG4gICAgICAgICAgaWQgPSAoYXdhaXQgd3cuZ2V0Q3VyRXh0ZXJuYWxDb250YWN0KCkpPy51c2VySWRcclxuICAgICAgICAgIGNvbnRhY3QgPSBhd2FpdCB0aGlzLndlY29ycC5leHRlcm5hbENvbnRhY3QuZ2V0KGlkKVxyXG4gICAgICAgICAgLy8gd3hkZWJ1ZyhKU09OLnN0cmluZ2lmeShjb250YWN0KSlcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Q2hhdCA9IHtcclxuICAgICAgICAgIHR5cGUsXHJcbiAgICAgICAgICBpZCxcclxuICAgICAgICAgIGdyb3VwOmNoYXQ/Lmdyb3VwX2NoYXQsXHJcbiAgICAgICAgICBjb250YWN0OmNvbnRhY3Q/LmV4dGVybmFsX2NvbnRhY3QsXHJcbiAgICAgICAgICBmb2xsb3dfdXNlcjpjb250YWN0Py5mb2xsb3dfdXNlcixcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudENoYXRcclxuICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgICAgd3hkZWJ1ZyhKU09OLnN0cmluZ2lmeShlcnIpKVxyXG4gICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2ZXJzaW9uKCl7XHJcbiAgICAgICAgd3hkZWJ1Zyh3dy5TREtfVkVSU0lPTik7XHJcbiAgICAgICAgcmV0dXJuIHd3LlNES19WRVJTSU9OXHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXIoKXtcclxuICAgICAgICB3dy5yZWdpc3Rlcih7XHJcbiAgICAgICAgICAgIGNvcnBJZDogJ3d3N2NhNDc3NmIyYTcwMDAwJywgICAgICAgLy8g5b+F5aGr77yM5b2T5YmN55So5oi35LyB5Lia5omA5bGe5LyB5LiaSURcclxuICAgICAgICAgICAganNBcGlMaXN0OiBbJ2dldEV4dGVybmFsQ29udGFjdCddLCAvLyDlv4XloavvvIzpnIDopoHkvb/nlKjnmoRKU0FQSeWIl+ihqFxyXG4gICAgICAgICAgICBnZXRDb25maWdTaWduYXR1cmU6dGhpcy5nZXRDb25maWdTaWduYXR1cmUgICAgICAgICAgICAgICAgIC8vIOW/heWhq++8jOagueaNrnVybOeUn+aIkOS8geS4muetvuWQjeeahOWbnuiwg+WHveaVsFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgXHJcbiAgICB9XHJcbiAgICBhc3luYyBnZXRDb25maWdTaWduYXR1cmUodXJsKSB7XHJcbiAgICAgIC8vIOagueaNriB1cmwg55Sf5oiQ5LyB5Lia562+5ZCNXHJcbiAgICAgIC8vIOeUn+aIkOaWueazleWPguiAgyBodHRwczovL2RldmVsb3Blci53b3JrLndlaXhpbi5xcS5jb20vZG9jdW1lbnQvMTQ5MjRcclxuICAgICAgbGV0IHRpbWVzdGFtcCA9IFwiXCJcclxuICAgICAgbGV0IG5vbmNlU3RyID0gXCJcIlxyXG4gICAgICBsZXQgc2lnbmF0dXJlID0gXCJcIlxyXG4gICAgICByZXR1cm4geyB0aW1lc3RhbXAsIG5vbmNlU3RyLCBzaWduYXR1cmUgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpZygpe1xyXG4gICAgXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2VsZWN0RW50ZXJwcmlzZUNvbnRhY3QoKXtcclxuICAgICAgbGV0IG1vZGU6YW55ID0gJ211bHRpJ1xyXG4gICAgICBsZXQgdHlwZTphbnkgPSBbJ2RlcGFydG1lbnQnLCAndXNlciddXHJcbiAgICAgIGxldCByZXN1bHQgPSBhd2FpdCB3dy5zZWxlY3RFbnRlcnByaXNlQ29udGFjdCh7XHJcbiAgICAgICAgZnJvbURlcGFydG1lbnRJZDogLTEsXHJcbiAgICAgICAgbW9kZTogbW9kZSxcclxuICAgICAgICB0eXBlOiB0eXBlLFxyXG4gICAgICAgIC8vIHNlbGVjdGVkRGVwYXJ0bWVudElkczogWycyJywgJzMnXSxcclxuICAgICAgICAvLyBzZWxlY3RlZFVzZXJJZHM6IFsnbGlzaScsICdsaXNpMiddXHJcbiAgICAgIH0pXHJcbiAgICAgIGNvbnNvbGUubG9nKHJlc3VsdClcclxuICAgICAgd3hkZWJ1ZyhyZXN1bHQpXHJcbiAgICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgY29uc3QganNBcGlMaXN0ID0gIFtcclxuICAvLyDojrflj5blhaXlj6PlnLrmma9cclxuICBcImdldENvbnRleHRcIixcclxuICBcImdldEN1ckV4dGVybmFsQ2hhdFwiLFxyXG4gIFwiZ2V0Q3VyRXh0ZXJuYWxDb250YWN0XCIsXHJcbiAgLy9cclxuICBcImNyZWF0ZUNvcnBHcm91cENoYXRcIixcclxuICBcInVwZGF0ZUNvcnBHcm91cENoYXRcIixcclxuICAvLyDlrqLmiLfnvqTmtojmga9cclxuICAnb3BlbkV4aXN0ZWRDaGF0V2l0aE1zZycsXHJcbiAgJ29wZW5FbnRlcnByaXNlQ2hhdCcsXHJcbiAgJ3NlbmRDaGF0TWVzc2FnZScsXHJcbiAgJ3VwZGF0ZUVudGVycHJpc2VDaGF0JywgLy8g5a6i5oi3576k6YKA6K+35oiQ5ZGYXHJcbiAgLy8g5qOA5p+lQVBJXHJcbiAgJ2NoZWNrSnNBcGknLFxyXG4gICdvbk1lbnVTaGFyZUFwcE1lc3NhZ2UnLFxyXG4gICdvbk1lbnVTaGFyZVdlY2hhdCcsXHJcbiAgJ29uTWVudVNoYXJlVGltZWxpbmUnLFxyXG4gICdzaGFyZUFwcE1lc3NhZ2UnLFxyXG4gICdzaGFyZVdlY2hhdE1lc3NhZ2UnLFxyXG4gICdzdGFydFJlY29yZCcsXHJcbiAgJ3N0b3BSZWNvcmQnLFxyXG4gICdvblZvaWNlUmVjb3JkRW5kJyxcclxuICAncGxheVZvaWNlJyxcclxuICAncGF1c2VWb2ljZScsXHJcbiAgJ3N0b3BWb2ljZScsXHJcbiAgJ3VwbG9hZFZvaWNlJyxcclxuICAnZG93bmxvYWRWb2ljZScsXHJcbiAgJ2Nob29zZUltYWdlJyxcclxuICAncHJldmlld0ltYWdlJyxcclxuICAndXBsb2FkSW1hZ2UnLFxyXG4gICdkb3dubG9hZEltYWdlJyxcclxuICAnZ2V0TmV0d29ya1R5cGUnLFxyXG4gICdvcGVuTG9jYXRpb24nLFxyXG4gICdnZXRMb2NhdGlvbicsXHJcbiAgJ2hpZGVPcHRpb25NZW51JyxcclxuICAnc2hvd09wdGlvbk1lbnUnLFxyXG4gICdoaWRlTWVudUl0ZW1zJyxcclxuICAnc2hvd01lbnVJdGVtcycsXHJcbiAgJ2hpZGVBbGxOb25CYXNlTWVudUl0ZW0nLFxyXG4gICdzaG93QWxsTm9uQmFzZU1lbnVJdGVtJyxcclxuICAnY2xvc2VXaW5kb3cnLFxyXG4gICdzY2FuUVJDb2RlJyxcclxuICAncHJldmlld0ZpbGUnLFxyXG4gICdzZWxlY3RFbnRlcnByaXNlQ29udGFjdCcsXHJcbiAgJ29uSGlzdG9yeUJhY2snLFxyXG4gICdvcGVuRGVmYXVsdEJyb3dzZXInLFxyXG5dIl19
@@ -8801,7 +8801,7 @@ class WxworkSDK {
8801
8801
  let userInfo;
8802
8802
  let thisUser;
8803
8803
  let userInfoStr = localStorage.getItem(`${this.cid}/USERINFO`);
8804
- if (!code) { // 无code 优先检查缓存
8804
+ if (!code && userInfoStr) { // 无code 优先检查缓存
8805
8805
  userInfo = JSON.parse(userInfoStr);
8806
8806
  userInfo.cid = this.cid;
8807
8807
  wxdebug$1("getContactOrProfile");