(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/sys/jump_controller.js'; var __require = nodeEnv ? function (request) { return cc.require(request); } : function (request) { return __quick_compile_project__.require(request, __filename); }; function __define (exports, require, module) { if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict"; cc._RF.push(module, '8d4f6LDscFE25cnhl6m7rJp', 'jump_controller'); // Scripts/sys/jump_controller.js "use strict"; // -------------------------------------------------------------------- // @author: xxx@syg.com(必填, 创建模块的人员) // @description: // 这里统一处理跳转 //
Create: 2019-04-10 17:31:58 // -------------------------------------------------------------------- var JumpController = cc.Class({ "extends": BaseController, ctor: function ctor() {}, // 初始化配置数据 initConfig: function initConfig() {}, // 注册监听事件 registerEvents: function registerEvents() {}, // 注册协议接受事件 registerProtocals: function registerProtocals() {}, /** * 跳转 * evt_data[0]: 为跳转id * evt_data[1]: 2及之后都为扩展参数 */ jumpViewByEvtData: function jumpViewByEvtData(evt_data) { if (!evt_data || !evt_data[0]) return; var evt_id = Number(evt_data[0]); if (evt_id == 1) { //召唤 var PartnersummonController = require("partnersummon_controller"); PartnersummonController.getInstance().openPartnerSummonWindow(true); } else if (evt_id == 2) { //获取一个x星英雄 var PartnersummonController = require("partnersummon_controller"); if (evt_data && Utils.next(evt_data)) { var extra_type = evt_data[1]; var extra_val = evt_data[2]; if (extra_type == "star") { if (extra_val <= 5) { //小于等于5星打开召唤界面 PartnersummonController.getInstance().openPartnerSummonWindow(true); } else { //大于5星打开融合界面 var HeroController = require("hero_controller"); HeroController.getInstance().openHeroUpgradeStarFuseWindow(true); } } else if (extra_type == "lev") { //跳转到英雄界面 var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.partner); } else { PartnersummonController.getInstance().openPartnerSummonWindow(true); } } else { PartnersummonController.getInstance().openPartnerSummonWindow(true); } } else if (evt_id == 3) { //竞技场 var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.arena_call); } else if (evt_id == 4) { //好友 var FriendController = require("friend_controller"); var FriendConst = require("friend_const"); FriendController.getInstance().openFriendWindow(true, FriendConst.Type.MyFriend); } else if (evt_id == 5) { //剧情副本 var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.drama_scene); } else if (evt_id == 6) { //精灵商店 var MallController = require("mall_controller"); MallController.getInstance().openVarietyStoreWindows(true); } else if (evt_id == 7) { //VIP界面 var tab_type = evt_data[1] || VIPTABCONST.VIP; var sub_type = evt_data[2]; var VipController = require("vip_controller"); VipController.getInstance().openVipMainWindow(true, tab_type, sub_type); } else if (evt_id == 8) { //背包 var sub_type = evt_data[1]; var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.backpack, sub_type); } else if (evt_id == 9) { //聊天界面 var ChatConst = require("chat_const"); var ChatController = require("chat_controller"); var channel = evt_data[1] || ChatConst.Channel.World; ChatController.getInstance().openChatPanel(channel); } else if (evt_id == 10) { //私聊 var ChatController = require("chat_controller"); var ChatConst = require("chat_const"); ChatController.getInstance().openChatPanel(ChatConst.Channel.Friend, "friend"); } else if (evt_id == 11) { //快速作战 var BattleDramaController = require("battle_drama_controller"); BattleDramaController.getInstance().openDramBattleQuickView(true); } else if (evt_id == 12) { //星命塔 var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.startower); } else if (evt_id == 13) { //公会捐献 var RoleController = require("role_controller"); var role_vo = RoleController.getInstance().getRoleVo(); if (role_vo.isHasGuild()) { var GuildController = require("guild_controller"); GuildController.getInstance().openGuildDonateWindow(true); } else { var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.guild); } } else if (evt_id == 14) { //公会 var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.guild); } else if (evt_id == 15) { //商城 var mall_type = evt_data[1]; var bid = evt_data[2]; var MallController = require("mall_controller"); MallController.getInstance().openMallPanel(true, mall_type, bid); } else if (evt_id == 16) { //变强 var StrongerController = require("stronger_controller"); StrongerController.getInstance().openMainWin(true); } else if (evt_id == 17) { //历练 var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.dungeonstone); } else if (evt_id == 18) { //远航 var VoyageController = require("voyage_controller"); VoyageController.getInstance().openVoyageMainWindow(true); } else if (evt_id == 19) { //英雄背包 var sub_type = evt_data[1]; var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.partner, sub_type); } else if (evt_id == 20) { //神器界面 var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.hallows); } else if (evt_id == 21) {//公会战 // var is_open = GuildwarController.getInstance().checkIsCanOpenGuildWarWindow() // if(is_open == true){ // var guildwar_status = GuildwarController.getInstance().getModel().getGuildWarStatus(); // if(guildwar_status == GuildwarConst.status.processing || guildwar_status == GuildwarConst.status.settlement){ // var MainuiController = require("mainui_controller"); // var MainuiConst = require("mainui_const"); // MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.guildwar) // }else{ // message(TI18N("公会战尚未开启")) // } // } } else if (evt_id == 22) { //祭祀小屋 var HeroController = require("hero_controller"); HeroController.getInstance().openHeroResetWindow(true); } else if (evt_id == 23) { //融合祭坛 var HeroController = require("hero_controller"); HeroController.getInstance().openHeroUpgradeStarFuseWindow(true); } else if (evt_id == 24) { //先知殿 var sub_type = evt_data[1]; var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.seerpalace, sub_type); } else if (evt_id == 25) { //远征 var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.expedit_fight); } else if (evt_id == 26) { //锻造屋 var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); var ForgeHouseConst = require("forgehouse_const"); var sub_type = evt_data[1] || ForgeHouseConst.Tab_Index.Equip; MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.forge_house, sub_type); } else if (evt_id == 27) { //星河神殿 var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.primuswar); } else if (evt_id == 28) {//精英大赛 // MainuiController:getInstance():changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.eliteMatchWar) } else if (evt_id == 29) {//跨服天梯 // MainuiController:getInstance():changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.ladderwar) } else if (evt_id == 30) { //布阵阵法 var HeroController = require("hero_controller"); HeroController.getInstance().openFormMainWindow(true); } else if (evt_id == 31) { //公会副本 var RoleController = require("role_controller"); var MainuiController = require("mainui_controller"); var role_vo = RoleController.getInstance().getRoleVo(); if (role_vo.isHasGuild()) { var BattleConst = require("battle_const"); MainuiController.getInstance().requestOpenBattleRelevanceWindow(BattleConst.Fight_Type.GuildDun); } else { var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.guild); } } else if (evt_id == 32) { //公会技能 var RoleController = require("role_controller"); var role_vo = RoleController.getInstance().getRoleVo(); if (role_vo.isHasGuild()) { var GuildskillController = require("guildskill_controller"); GuildskillController.getInstance().openGuildSkillMainWindow(true); } else { var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.guild); } } else if (evt_id == 33) { //公会红包 var RoleController = require("role_controller"); var role_vo = RoleController.getInstance().getRoleVo(); if (role_vo.isHasGuild()) { var RedbagController = require("redbag_controller"); RedbagController.getInstance().openMainView(true); } else { var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.guild); } } else if (evt_id == 34) { //神界冒险 var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.adventure); } else if (evt_id == 35) { //点金 var ExchangeController = require("exchange_controller"); ExchangeController.getInstance().openExchangeMainView(true); } else if (evt_id == 36) { //冠军赛 var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.champion_call); } else if (evt_id == 37) {//天梯商店 // local is_open = LadderController:getInstance():getModel():getLadderOpenStatus() // if is_open then // LadderController:getInstance():requestLadderMyBaseInfo() // LadderController:getInstance():openLadderShopWindow(true) // end } else if (evt_id == 38) { //投资计划 var WelfareController = require("welfare_controller"); var ActionConst = require("action_const"); WelfareController.getInstance().openMainWindow(true, ActionConst.ActionSpecialID.invest); } else if (evt_id == 39) { //成长基金 var WelfareController = require("welfare_controller"); var ActionConst = require("action_const"); WelfareController.getInstance().openMainWindow(true, ActionConst.ActionSpecialID.growfund); } else if (evt_id == 40) { //探宝 var ActionController = require("action_controller"); ActionController.getInstance().openLuckyTreasureWin(true); } else if (evt_id == 41) { //日常(任务或成就) var sub_type = evt_data[1]; var TaskController = require("task_controller"); TaskController.getInstance().openTaskMainWindow(true, sub_type); } else if (evt_id == 42) {//元素圣殿 // MainuiController:getInstance():changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.elementWar) } else if (evt_id == 43) { //无尽试炼 var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.endless); } else if (evt_id == 44) { //至尊月卡 var WelfareController = require("welfare_controller"); var WelfareConst = require("welfare_const"); WelfareController.getInstance().openMainWindow(true, WelfareConst.WelfareIcon.supre_yueka); } else if (evt_id == 45) { //限时召唤 var extend_data = evt_data[1]; var MainuiController = require("mainui_controller"); var MainuiConst = require("mainui_const"); MainuiController.getInstance().changeMainUIStatus(MainuiConst.btn_index.main_scene, MainuiConst.sub_type.wonderful, extend_data); } else if (evt_id == 46) { //剧情副本的通关奖励 var BattleDramaController = require("battle_drama_controller"); BattleDramaController.getInstance().openDramaRewardWindow(true); } }, __delete: function __delete() {} }); module.exports = JumpController; cc._RF.pop(); } if (nodeEnv) { __define(__module.exports, __require, __module); } else { __quick_compile_project__.registerModuleFunc(__filename, function () { __define(__module.exports, __require, __module); }); } })(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcc3lzXFxqdW1wX2NvbnRyb2xsZXIuanMiXSwibmFtZXMiOlsiSnVtcENvbnRyb2xsZXIiLCJjYyIsIkNsYXNzIiwiQmFzZUNvbnRyb2xsZXIiLCJjdG9yIiwiaW5pdENvbmZpZyIsInJlZ2lzdGVyRXZlbnRzIiwicmVnaXN0ZXJQcm90b2NhbHMiLCJqdW1wVmlld0J5RXZ0RGF0YSIsImV2dF9kYXRhIiwiZXZ0X2lkIiwiTnVtYmVyIiwiUGFydG5lcnN1bW1vbkNvbnRyb2xsZXIiLCJyZXF1aXJlIiwiZ2V0SW5zdGFuY2UiLCJvcGVuUGFydG5lclN1bW1vbldpbmRvdyIsIlV0aWxzIiwibmV4dCIsImV4dHJhX3R5cGUiLCJleHRyYV92YWwiLCJIZXJvQ29udHJvbGxlciIsIm9wZW5IZXJvVXBncmFkZVN0YXJGdXNlV2luZG93IiwiTWFpbnVpQ29udHJvbGxlciIsIk1haW51aUNvbnN0IiwiY2hhbmdlTWFpblVJU3RhdHVzIiwiYnRuX2luZGV4IiwicGFydG5lciIsIm1haW5fc2NlbmUiLCJzdWJfdHlwZSIsImFyZW5hX2NhbGwiLCJGcmllbmRDb250cm9sbGVyIiwiRnJpZW5kQ29uc3QiLCJvcGVuRnJpZW5kV2luZG93IiwiVHlwZSIsIk15RnJpZW5kIiwiZHJhbWFfc2NlbmUiLCJNYWxsQ29udHJvbGxlciIsIm9wZW5WYXJpZXR5U3RvcmVXaW5kb3dzIiwidGFiX3R5cGUiLCJWSVBUQUJDT05TVCIsIlZJUCIsIlZpcENvbnRyb2xsZXIiLCJvcGVuVmlwTWFpbldpbmRvdyIsImJhY2twYWNrIiwiQ2hhdENvbnN0IiwiQ2hhdENvbnRyb2xsZXIiLCJjaGFubmVsIiwiQ2hhbm5lbCIsIldvcmxkIiwib3BlbkNoYXRQYW5lbCIsIkZyaWVuZCIsIkJhdHRsZURyYW1hQ29udHJvbGxlciIsIm9wZW5EcmFtQmF0dGxlUXVpY2tWaWV3Iiwic3RhcnRvd2VyIiwiUm9sZUNvbnRyb2xsZXIiLCJyb2xlX3ZvIiwiZ2V0Um9sZVZvIiwiaXNIYXNHdWlsZCIsIkd1aWxkQ29udHJvbGxlciIsIm9wZW5HdWlsZERvbmF0ZVdpbmRvdyIsImd1aWxkIiwibWFsbF90eXBlIiwiYmlkIiwib3Blbk1hbGxQYW5lbCIsIlN0cm9uZ2VyQ29udHJvbGxlciIsIm9wZW5NYWluV2luIiwiZHVuZ2VvbnN0b25lIiwiVm95YWdlQ29udHJvbGxlciIsIm9wZW5Wb3lhZ2VNYWluV2luZG93IiwiaGFsbG93cyIsIm9wZW5IZXJvUmVzZXRXaW5kb3ciLCJzZWVycGFsYWNlIiwiZXhwZWRpdF9maWdodCIsIkZvcmdlSG91c2VDb25zdCIsIlRhYl9JbmRleCIsIkVxdWlwIiwiZm9yZ2VfaG91c2UiLCJwcmltdXN3YXIiLCJvcGVuRm9ybU1haW5XaW5kb3ciLCJCYXR0bGVDb25zdCIsInJlcXVlc3RPcGVuQmF0dGxlUmVsZXZhbmNlV2luZG93IiwiRmlnaHRfVHlwZSIsIkd1aWxkRHVuIiwiR3VpbGRza2lsbENvbnRyb2xsZXIiLCJvcGVuR3VpbGRTa2lsbE1haW5XaW5kb3ciLCJSZWRiYWdDb250cm9sbGVyIiwib3Blbk1haW5WaWV3IiwiYWR2ZW50dXJlIiwiRXhjaGFuZ2VDb250cm9sbGVyIiwib3BlbkV4Y2hhbmdlTWFpblZpZXciLCJjaGFtcGlvbl9jYWxsIiwiV2VsZmFyZUNvbnRyb2xsZXIiLCJBY3Rpb25Db25zdCIsIm9wZW5NYWluV2luZG93IiwiQWN0aW9uU3BlY2lhbElEIiwiaW52ZXN0IiwiZ3Jvd2Z1bmQiLCJBY3Rpb25Db250cm9sbGVyIiwib3Blbkx1Y2t5VHJlYXN1cmVXaW4iLCJUYXNrQ29udHJvbGxlciIsIm9wZW5UYXNrTWFpbldpbmRvdyIsImVuZGxlc3MiLCJXZWxmYXJlQ29uc3QiLCJXZWxmYXJlSWNvbiIsInN1cHJlX3l1ZWthIiwiZXh0ZW5kX2RhdGEiLCJ3b25kZXJmdWwiLCJvcGVuRHJhbWFSZXdhcmRXaW5kb3ciLCJfX2RlbGV0ZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFD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QVcsQ0FBQ0ssUUFBWixDQUFxQjhFLFNBQXpHLEVBQW9IRCxXQUFwSDtBQUNILEtBTEssTUFLQSxJQUFHL0YsTUFBTSxJQUFJLEVBQWIsRUFBZ0I7QUFBQztBQUNuQixVQUFJeUMscUJBQXFCLEdBQUd0QyxPQUFPLENBQUMseUJBQUQsQ0FBbkM7O0FBQ0FzQyxNQUFBQSxxQkFBcUIsQ0FBQ3JDLFdBQXRCLEdBQW9DNkYscUJBQXBDLENBQTBELElBQTFEO0FBQ0g7QUFDSixHQXBReUI7QUF1UTFCQyxFQUFBQSxRQUFRLEVBQUMsb0JBQVUsQ0FFbEI7QUF6UXlCLENBQVQsQ0FBckI7QUE2UUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjlHLGNBQWpCIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQGF1dGhvcjogeHh4QHN5Zy5jb20o5b+F5aGrLCDliJvlu7rmqKHlnZfnmoTkurrlkZgpXG4vLyBAZGVzY3JpcHRpb246XG4vLyAgICAgIOi/memHjOe7n+S4gOWkhOeQhui3s+i9rFxuLy8gPGJyLz5DcmVhdGU6IDIwMTktMDQtMTAgMTc6MzE6NThcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG52YXIgSnVtcENvbnRyb2xsZXIgPSBjYy5DbGFzcyh7XG4gICAgZXh0ZW5kczogQmFzZUNvbnRyb2xsZXIsXG4gICAgY3RvcjogZnVuY3Rpb24gKCkge1xuICAgIH0sXG5cbiAgICAvLyDliJ3lp4vljJbphY3nva7mlbDmja5cbiAgICBpbml0Q29uZmlnOiBmdW5jdGlvbiAoKSB7XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOebkeWQrOS6i+S7tlxuICAgIHJlZ2lzdGVyRXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgfSxcblxuICAgIC8vIOazqOWGjOWNj+iuruaOpeWPl+S6i+S7tlxuICAgIHJlZ2lzdGVyUHJvdG9jYWxzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiAg6Lez6L2sXG4gICAgICogXHRldnRfZGF0YVswXTog5Li66Lez6L2saWRcbiAgICAgKiBcdGV2dF9kYXRhWzFdOiAy5Y+K5LmL5ZCO6YO95Li65omp5bGV5Y+C5pWwXG4gICAgICovXG4gICAganVtcFZpZXdCeUV2dERhdGE6ZnVuY3Rpb24oIGV2dF9kYXRhICl7XG5cbiAgICAgICAgaWYoIWV2dF9kYXRhIHx8ICFldnRfZGF0YVswXSlyZXR1cm47XG4gICAgICAgIHZhciBldnRfaWQgPSBOdW1iZXIoZXZ0X2RhdGFbMF0pO1xuICAgICAgICBpZihldnRfaWQgPT0gMSl7Ly/lj6zllKRcbiAgICAgICAgICAgIHZhciBQYXJ0bmVyc3VtbW9uQ29udHJvbGxlciA9IHJlcXVpcmUoXCJwYXJ0bmVyc3VtbW9uX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICBQYXJ0bmVyc3VtbW9uQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5QYXJ0bmVyU3VtbW9uV2luZG93KHRydWUpO1xuICAgICAgICB9ZWxzZSBpZihldnRfaWQgPT0gMil7Ly/ojrflj5bkuIDkuKp45pif6Iux6ZuEXG4gICAgICAgICAgICB2YXIgUGFydG5lcnN1bW1vbkNvbnRyb2xsZXIgPSByZXF1aXJlKFwicGFydG5lcnN1bW1vbl9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgaWYoZXZ0X2RhdGEgJiYgVXRpbHMubmV4dChldnRfZGF0YSkpe1xuICAgICAgICAgICAgICAgIHZhciBleHRyYV90eXBlID0gZXZ0X2RhdGFbMV1cbiAgICAgICAgICAgICAgICB2YXIgZXh0cmFfdmFsID0gZXZ0X2RhdGFbMl1cbiAgICAgICAgICAgICAgICBpZihleHRyYV90eXBlID09IFwic3RhclwiKXtcbiAgICAgICAgICAgICAgICAgICAgaWYoZXh0cmFfdmFsIDw9IDUpey8v5bCP5LqO562J5LqONeaYn+aJk+W8gOWPrOWUpOeVjOmdolxuICAgICAgICAgICAgICAgICAgICAgICAgUGFydG5lcnN1bW1vbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuUGFydG5lclN1bW1vbldpbmRvdyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7Ly/lpKfkuo415pif5omT5byA6J6N5ZCI55WM6Z2iXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgSGVyb0NvbnRyb2xsZXIgPSByZXF1aXJlKFwiaGVyb19jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgSGVyb0NvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuSGVyb1VwZ3JhZGVTdGFyRnVzZVdpbmRvdyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKGV4dHJhX3R5cGUgPT0gXCJsZXZcIil7Ly/ot7PovazliLDoi7Hpm4TnlYzpnaJcbiAgICAgICAgICAgICAgICAgICAgdmFyIE1haW51aUNvbnRyb2xsZXIgICAgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIik7XG4gICAgICAgICAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGFuZ2VNYWluVUlTdGF0dXMoTWFpbnVpQ29uc3QuYnRuX2luZGV4LnBhcnRuZXIpXG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgIFBhcnRuZXJzdW1tb25Db250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlblBhcnRuZXJTdW1tb25XaW5kb3codHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgUGFydG5lcnN1bW1vbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuUGFydG5lclN1bW1vbldpbmRvdyh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2UgaWYoZXZ0X2lkID09IDMpey8v56ue5oqA5Zy6XG4gICAgICAgICAgICB2YXIgTWFpbnVpQ29udHJvbGxlciAgICA9IHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKTtcbiAgICAgICAgICAgIHZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIik7XG4gICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkuY2hhbmdlTWFpblVJU3RhdHVzKE1haW51aUNvbnN0LmJ0bl9pbmRleC5tYWluX3NjZW5lLCBNYWludWlDb25zdC5zdWJfdHlwZS5hcmVuYV9jYWxsKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X2lkID09IDQpey8v5aW95Y+LXG4gICAgICAgICAgICB2YXIgRnJpZW5kQ29udHJvbGxlciA9IHJlcXVpcmUoXCJmcmllbmRfY29udHJvbGxlclwiKTtcbiAgICAgICAgICAgIHZhciBGcmllbmRDb25zdCA9IHJlcXVpcmUoXCJmcmllbmRfY29uc3RcIik7XG4gICAgICAgICAgICBGcmllbmRDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlbkZyaWVuZFdpbmRvdyh0cnVlLCBGcmllbmRDb25zdC5UeXBlLk15RnJpZW5kKVxuICAgICAgICB9ZWxzZSBpZihldnRfaWQgPT0gNSl7Ly/liafmg4Xlia/mnKxcbiAgICAgICAgICAgIHZhciBNYWludWlDb250cm9sbGVyICAgID0gcmVxdWlyZShcIm1haW51aV9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgdmFyIE1haW51aUNvbnN0ID0gcmVxdWlyZShcIm1haW51aV9jb25zdFwiKTtcbiAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGFuZ2VNYWluVUlTdGF0dXMoTWFpbnVpQ29uc3QuYnRuX2luZGV4LmRyYW1hX3NjZW5lKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X2lkID09IDYpey8v57K+54G15ZWG5bqXXG4gICAgICAgICAgICB2YXIgTWFsbENvbnRyb2xsZXIgPSByZXF1aXJlKFwibWFsbF9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgTWFsbENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuVmFyaWV0eVN0b3JlV2luZG93cyh0cnVlKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X2lkID09IDcpey8vVklQ55WM6Z2iXG4gICAgICAgICAgICB2YXIgdGFiX3R5cGUgPSBldnRfZGF0YVsxXSB8fCBWSVBUQUJDT05TVC5WSVBcbiAgICAgICAgICAgIHZhciBzdWJfdHlwZSA9IGV2dF9kYXRhWzJdXG4gICAgICAgICAgICB2YXIgVmlwQ29udHJvbGxlciA9IHJlcXVpcmUoXCJ2aXBfY29udHJvbGxlclwiKTtcbiAgICAgICAgICAgIFZpcENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuVmlwTWFpbldpbmRvdyh0cnVlLCB0YWJfdHlwZSwgc3ViX3R5cGUpXG4gICAgICAgIH1lbHNlIGlmKGV2dF9pZCA9PSA4KXsvL+iDjOWMhVxuICAgICAgICAgICAgdmFyIHN1Yl90eXBlID0gZXZ0X2RhdGFbMV07XG4gICAgICAgICAgICB2YXIgTWFpbnVpQ29udHJvbGxlciAgICA9IHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKTtcbiAgICAgICAgICAgIHZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIik7XG4gICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkuY2hhbmdlTWFpblVJU3RhdHVzKE1haW51aUNvbnN0LmJ0bl9pbmRleC5iYWNrcGFjaywgc3ViX3R5cGUpXG4gICAgICAgIH1lbHNlIGlmKGV2dF9pZCA9PSA5KXsvL+iBiuWkqeeVjOmdolxuICAgICAgICAgICAgdmFyIENoYXRDb25zdCA9IHJlcXVpcmUoXCJjaGF0X2NvbnN0XCIpO1xuICAgICAgICAgICAgdmFyIENoYXRDb250cm9sbGVyID0gcmVxdWlyZShcImNoYXRfY29udHJvbGxlclwiKTtcbiAgICAgICAgICAgIHZhciBjaGFubmVsID0gZXZ0X2RhdGFbMV0gfHwgQ2hhdENvbnN0LkNoYW5uZWwuV29ybGRcblx0XHQgICAgQ2hhdENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuQ2hhdFBhbmVsKGNoYW5uZWwpO1xuICAgICAgICB9ZWxzZSBpZihldnRfaWQgPT0gMTApey8v56eB6IGKXG4gICAgICAgICAgICB2YXIgQ2hhdENvbnRyb2xsZXIgPSByZXF1aXJlKFwiY2hhdF9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgdmFyIENoYXRDb25zdCA9IHJlcXVpcmUoXCJjaGF0X2NvbnN0XCIpO1xuICAgICAgICAgICAgQ2hhdENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuQ2hhdFBhbmVsKENoYXRDb25zdC5DaGFubmVsLkZyaWVuZCxcImZyaWVuZFwiKVxuICAgICAgICB9ZWxzZSBpZihldnRfaWQgPT0gMTEpey8v5b+r6YCf5L2c5oiYXG4gICAgICAgICAgICB2YXIgQmF0dGxlRHJhbWFDb250cm9sbGVyID0gcmVxdWlyZShcImJhdHRsZV9kcmFtYV9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgQmF0dGxlRHJhbWFDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlbkRyYW1CYXR0bGVRdWlja1ZpZXcodHJ1ZSk7XG4gICAgICAgIH1lbHNlIGlmKGV2dF9pZCA9PSAxMil7Ly/mmJ/lkb3loZRcbiAgICAgICAgICAgIHZhciBNYWludWlDb250cm9sbGVyICAgID0gcmVxdWlyZShcIm1haW51aV9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgdmFyIE1haW51aUNvbnN0ID0gcmVxdWlyZShcIm1haW51aV9jb25zdFwiKTtcbiAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGFuZ2VNYWluVUlTdGF0dXMoTWFpbnVpQ29uc3QuYnRuX2luZGV4Lm1haW5fc2NlbmUsIE1haW51aUNvbnN0LnN1Yl90eXBlLnN0YXJ0b3dlcik7XG4gICAgICAgIH1lbHNlIGlmKGV2dF9pZCA9PSAxMyl7Ly/lhazkvJrmjZDnjK5cbiAgICAgICAgICAgIHZhciBSb2xlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyb2xlX2NvbnRyb2xsZXJcIilcbiAgICAgICAgICAgIHZhciByb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcbiAgICAgICAgICAgIGlmKHJvbGVfdm8uaXNIYXNHdWlsZCgpKXtcbiAgICAgICAgICAgICAgICB2YXIgR3VpbGRDb250cm9sbGVyID0gcmVxdWlyZShcImd1aWxkX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICAgICAgR3VpbGRDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3Blbkd1aWxkRG9uYXRlV2luZG93KHRydWUpO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgdmFyIE1haW51aUNvbnRyb2xsZXIgICAgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICAgICAgdmFyIE1haW51aUNvbnN0ID0gcmVxdWlyZShcIm1haW51aV9jb25zdFwiKTtcbiAgICAgICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkuY2hhbmdlTWFpblVJU3RhdHVzKE1haW51aUNvbnN0LmJ0bl9pbmRleC5ndWlsZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2UgaWYoZXZ0X2lkID09IDE0KXsvL+WFrOS8mlxuICAgICAgICAgICAgdmFyIE1haW51aUNvbnRyb2xsZXIgICAgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICB2YXIgTWFpbnVpQ29uc3QgPSByZXF1aXJlKFwibWFpbnVpX2NvbnN0XCIpO1xuICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmNoYW5nZU1haW5VSVN0YXR1cyhNYWludWlDb25zdC5idG5faW5kZXguZ3VpbGQpO1xuICAgICAgICB9ZWxzZSBpZihldnRfaWQgPT0gMTUpey8v5ZWG5Z+OXG4gICAgICAgICAgICB2YXIgbWFsbF90eXBlID0gZXZ0X2RhdGFbMV07XG4gICAgICAgICAgICB2YXIgYmlkID0gZXZ0X2RhdGFbMl07XG4gICAgICAgICAgICB2YXIgTWFsbENvbnRyb2xsZXIgPSByZXF1aXJlKFwibWFsbF9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgTWFsbENvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuTWFsbFBhbmVsKHRydWUsIG1hbGxfdHlwZSwgYmlkKVxuICAgICAgICB9ZWxzZSBpZihldnRfaWQgPT0gMTYpey8v5Y+Y5by6XG4gICAgICAgICAgICB2YXIgU3Ryb25nZXJDb250cm9sbGVyID0gcmVxdWlyZShcInN0cm9uZ2VyX2NvbnRyb2xsZXJcIilcbiAgICAgICAgICAgIFN0cm9uZ2VyQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5NYWluV2luKHRydWUpO1xuICAgICAgICB9ZWxzZSBpZihldnRfaWQgPT0gMTcpey8v5Y6G57uDXG4gICAgICAgICAgICB2YXIgTWFpbnVpQ29udHJvbGxlciAgICA9IHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKTtcbiAgICAgICAgICAgIHZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIik7XG4gICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkuY2hhbmdlTWFpblVJU3RhdHVzKE1haW51aUNvbnN0LmJ0bl9pbmRleC5tYWluX3NjZW5lLCBNYWludWlDb25zdC5zdWJfdHlwZS5kdW5nZW9uc3RvbmUpO1xuICAgICAgICB9ZWxzZSBpZihldnRfaWQgPT0gMTgpey8v6L+c6IiqXG4gICAgICAgICAgICB2YXIgVm95YWdlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJ2b3lhZ2VfY29udHJvbGxlclwiKVxuICAgICAgICAgICAgVm95YWdlQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5Wb3lhZ2VNYWluV2luZG93KHRydWUpXG4gICAgICAgIH1lbHNlIGlmKGV2dF9pZCA9PSAxOSl7Ly/oi7Hpm4Tog4zljIVcbiAgICAgICAgICAgIHZhciBzdWJfdHlwZSA9IGV2dF9kYXRhWzFdXG4gICAgICAgICAgICB2YXIgTWFpbnVpQ29udHJvbGxlciAgICA9IHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKTtcbiAgICAgICAgICAgIHZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIik7XG4gICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkuY2hhbmdlTWFpblVJU3RhdHVzKE1haW51aUNvbnN0LmJ0bl9pbmRleC5wYXJ0bmVyLCBzdWJfdHlwZSk7XG4gICAgICAgIH1lbHNlIGlmKGV2dF9pZCA9PSAyMCl7Ly/npZ7lmajnlYzpnaJcbiAgICAgICAgICAgIHZhciBNYWludWlDb250cm9sbGVyICAgID0gcmVxdWlyZShcIm1haW51aV9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgdmFyIE1haW51aUNvbnN0ID0gcmVxdWlyZShcIm1haW51aV9jb25zdFwiKTtcbiAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGFuZ2VNYWluVUlTdGF0dXMoTWFpbnVpQ29uc3QuYnRuX2luZGV4LmhhbGxvd3MpO1xuICAgICAgICB9ZWxzZSBpZihldnRfaWQgPT0gMjEpey8v5YWs5Lya5oiYXG4gICAgICAgICAgICAvLyB2YXIgaXNfb3BlbiA9IEd1aWxkd2FyQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmNoZWNrSXNDYW5PcGVuR3VpbGRXYXJXaW5kb3coKVxuICAgICAgICAgICAgLy8gaWYoaXNfb3BlbiA9PSB0cnVlKXtcbiAgICAgICAgICAgIC8vICAgICB2YXIgZ3VpbGR3YXJfc3RhdHVzID0gR3VpbGR3YXJDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0TW9kZWwoKS5nZXRHdWlsZFdhclN0YXR1cygpO1xuICAgICAgICAgICAgLy8gICAgIGlmKGd1aWxkd2FyX3N0YXR1cyA9PSBHdWlsZHdhckNvbnN0LnN0YXR1cy5wcm9jZXNzaW5nIHx8IGd1aWxkd2FyX3N0YXR1cyA9PSBHdWlsZHdhckNvbnN0LnN0YXR1cy5zZXR0bGVtZW50KXtcbiAgICAgICAgICAgIC8vICAgICAgICAgdmFyIE1haW51aUNvbnRyb2xsZXIgICAgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICAvLyAgICAgICAgIHZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIik7XG4gICAgICAgICAgICAvLyAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGFuZ2VNYWluVUlTdGF0dXMoTWFpbnVpQ29uc3QuYnRuX2luZGV4Lm1haW5fc2NlbmUsIE1haW51aUNvbnN0LnN1Yl90eXBlLmd1aWxkd2FyKVxuICAgICAgICAgICAgLy8gICAgIH1lbHNle1xuICAgICAgICAgICAgLy8gICAgICAgICBtZXNzYWdlKFRJMThOKFwi5YWs5Lya5oiY5bCa5pyq5byA5ZCvXCIpKVxuICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgfWVsc2UgaWYoZXZ0X2lkID09IDIyKXsvL+elreelgOWwj+Wxi1xuICAgICAgICAgICAgdmFyIEhlcm9Db250cm9sbGVyID0gcmVxdWlyZShcImhlcm9fY29udHJvbGxlclwiKTtcbiAgICAgICAgICAgIEhlcm9Db250cm9sbGVyLmdldEluc3RhbmNlKCkub3Blbkhlcm9SZXNldFdpbmRvdyh0cnVlKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X2lkID09IDIzKXsvL+iejeWQiOelreWdm1xuICAgICAgICAgICAgdmFyIEhlcm9Db250cm9sbGVyID0gcmVxdWlyZShcImhlcm9fY29udHJvbGxlclwiKTtcbiAgICAgICAgICAgIEhlcm9Db250cm9sbGVyLmdldEluc3RhbmNlKCkub3Blbkhlcm9VcGdyYWRlU3RhckZ1c2VXaW5kb3codHJ1ZSlcbiAgICAgICAgfWVsc2UgaWYoZXZ0X2lkID09IDI0KXsvL+WFiOefpeauv1xuICAgICAgICAgICAgdmFyIHN1Yl90eXBlID0gZXZ0X2RhdGFbMV1cbiAgICAgICAgICAgIHZhciBNYWludWlDb250cm9sbGVyICAgID0gcmVxdWlyZShcIm1haW51aV9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgdmFyIE1haW51aUNvbnN0ID0gcmVxdWlyZShcIm1haW51aV9jb25zdFwiKTtcbiAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGFuZ2VNYWluVUlTdGF0dXMoTWFpbnVpQ29uc3QuYnRuX2luZGV4Lm1haW5fc2NlbmUsIE1haW51aUNvbnN0LnN1Yl90eXBlLnNlZXJwYWxhY2UsIHN1Yl90eXBlKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X2lkID09IDI1KXsvL+i/nOW+gVxuICAgICAgICAgICAgdmFyIE1haW51aUNvbnRyb2xsZXIgICAgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICB2YXIgTWFpbnVpQ29uc3QgPSByZXF1aXJlKFwibWFpbnVpX2NvbnN0XCIpO1xuICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmNoYW5nZU1haW5VSVN0YXR1cyhNYWludWlDb25zdC5idG5faW5kZXgubWFpbl9zY2VuZSwgTWFpbnVpQ29uc3Quc3ViX3R5cGUuZXhwZWRpdF9maWdodCk7XG4gICAgICAgIH1lbHNlIGlmKGV2dF9pZCA9PSAyNil7Ly/plLvpgKDlsYtcbiAgICAgICAgICAgIHZhciBNYWludWlDb250cm9sbGVyICAgID0gcmVxdWlyZShcIm1haW51aV9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgdmFyIE1haW51aUNvbnN0ID0gcmVxdWlyZShcIm1haW51aV9jb25zdFwiKTtcbiAgICAgICAgICAgIHZhciBGb3JnZUhvdXNlQ29uc3QgPSByZXF1aXJlKFwiZm9yZ2Vob3VzZV9jb25zdFwiKTtcbiAgICAgICAgICAgIHZhciBzdWJfdHlwZSA9IGV2dF9kYXRhWzFdIHx8IEZvcmdlSG91c2VDb25zdC5UYWJfSW5kZXguRXF1aXBcbiAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGFuZ2VNYWluVUlTdGF0dXMoTWFpbnVpQ29uc3QuYnRuX2luZGV4Lm1haW5fc2NlbmUsIE1haW51aUNvbnN0LnN1Yl90eXBlLmZvcmdlX2hvdXNlLCBzdWJfdHlwZSlcbiAgICAgICAgfWVsc2UgaWYoZXZ0X2lkID09IDI3KXsvL+aYn+ays+elnuauv1xuICAgICAgICAgICAgdmFyIE1haW51aUNvbnRyb2xsZXIgICAgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICB2YXIgTWFpbnVpQ29uc3QgPSByZXF1aXJlKFwibWFpbnVpX2NvbnN0XCIpO1xuICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmNoYW5nZU1haW5VSVN0YXR1cyhNYWludWlDb25zdC5idG5faW5kZXgubWFpbl9zY2VuZSwgTWFpbnVpQ29uc3Quc3ViX3R5cGUucHJpbXVzd2FyKVxuICAgICAgICB9ZWxzZSBpZihldnRfaWQgPT0gMjgpey8v57K+6Iux5aSn6LWbXG4gICAgICAgICAgICAvLyBNYWludWlDb250cm9sbGVyOmdldEluc3RhbmNlKCk6Y2hhbmdlTWFpblVJU3RhdHVzKE1haW51aUNvbnN0LmJ0bl9pbmRleC5tYWluX3NjZW5lLCBNYWludWlDb25zdC5zdWJfdHlwZS5lbGl0ZU1hdGNoV2FyKVxuICAgICAgICB9ZWxzZSBpZihldnRfaWQgPT0gMjkpey8v6Leo5pyN5aSp5qKvXG4gICAgICAgICAgICAvLyBNYWludWlDb250cm9sbGVyOmdldEluc3RhbmNlKCk6Y2hhbmdlTWFpblVJU3RhdHVzKE1haW51aUNvbnN0LmJ0bl9pbmRleC5tYWluX3NjZW5lLCBNYWludWlDb25zdC5zdWJfdHlwZS5sYWRkZXJ3YXIpXG4gICAgICAgIH1lbHNlIGlmKGV2dF9pZCA9PSAzMCl7Ly/luIPpmLXpmLXms5VcbiAgICAgICAgICAgIHZhciBIZXJvQ29udHJvbGxlciA9IHJlcXVpcmUoXCJoZXJvX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICBIZXJvQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5Gb3JtTWFpbldpbmRvdyh0cnVlKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X2lkID09IDMxKXsvL+WFrOS8muWJr+acrFxuICAgICAgICAgICAgdmFyIFJvbGVDb250cm9sbGVyID0gcmVxdWlyZShcInJvbGVfY29udHJvbGxlclwiKVxuICAgICAgICAgICAgdmFyIE1haW51aUNvbnRyb2xsZXIgICAgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICB2YXIgcm9sZV92byA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCk7XG4gICAgICAgICAgICBpZihyb2xlX3ZvLmlzSGFzR3VpbGQoKSl7XG4gICAgICAgICAgICAgICAgdmFyIEJhdHRsZUNvbnN0ID0gcmVxdWlyZShcImJhdHRsZV9jb25zdFwiKTtcbiAgICAgICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkucmVxdWVzdE9wZW5CYXR0bGVSZWxldmFuY2VXaW5kb3coQmF0dGxlQ29uc3QuRmlnaHRfVHlwZS5HdWlsZER1bilcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHZhciBNYWludWlDb25zdCA9IHJlcXVpcmUoXCJtYWludWlfY29uc3RcIik7XG4gICAgICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmNoYW5nZU1haW5VSVN0YXR1cyhNYWludWlDb25zdC5idG5faW5kZXguZ3VpbGQpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNlIGlmKGV2dF9pZCA9PSAzMil7Ly/lhazkvJrmioDog71cbiAgICAgICAgICAgIHZhciBSb2xlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJyb2xlX2NvbnRyb2xsZXJcIilcbiAgICAgICAgICAgIHZhciByb2xlX3ZvID0gUm9sZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5nZXRSb2xlVm8oKTtcbiAgICAgICAgICAgIGlmKHJvbGVfdm8uaXNIYXNHdWlsZCgpKXtcbiAgICAgICAgICAgICAgICB2YXIgR3VpbGRza2lsbENvbnRyb2xsZXIgPSByZXF1aXJlKFwiZ3VpbGRza2lsbF9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgICAgIEd1aWxkc2tpbGxDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3Blbkd1aWxkU2tpbGxNYWluV2luZG93KHRydWUpXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICB2YXIgTWFpbnVpQ29udHJvbGxlciAgICA9IHJlcXVpcmUoXCJtYWludWlfY29udHJvbGxlclwiKTtcbiAgICAgICAgICAgICAgICB2YXIgTWFpbnVpQ29uc3QgPSByZXF1aXJlKFwibWFpbnVpX2NvbnN0XCIpO1xuICAgICAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGFuZ2VNYWluVUlTdGF0dXMoTWFpbnVpQ29uc3QuYnRuX2luZGV4Lmd1aWxkKVxuICAgICAgICAgICAgfVxuICAgICAgICB9ZWxzZSBpZihldnRfaWQgPT0gMzMpey8v5YWs5Lya57qi5YyFXG4gICAgICAgICAgICB2YXIgUm9sZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwicm9sZV9jb250cm9sbGVyXCIpXG4gICAgICAgICAgICB2YXIgcm9sZV92byA9IFJvbGVDb250cm9sbGVyLmdldEluc3RhbmNlKCkuZ2V0Um9sZVZvKCk7XG4gICAgICAgICAgICBpZihyb2xlX3ZvLmlzSGFzR3VpbGQoKSl7XG4gICAgICAgICAgICAgICAgdmFyIFJlZGJhZ0NvbnRyb2xsZXIgPSByZXF1aXJlKFwicmVkYmFnX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICAgICAgUmVkYmFnQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5NYWluVmlldyh0cnVlKVxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgdmFyIE1haW51aUNvbnRyb2xsZXIgICAgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICAgICAgdmFyIE1haW51aUNvbnN0ID0gcmVxdWlyZShcIm1haW51aV9jb25zdFwiKTtcbiAgICAgICAgICAgICAgICBNYWludWlDb250cm9sbGVyLmdldEluc3RhbmNlKCkuY2hhbmdlTWFpblVJU3RhdHVzKE1haW51aUNvbnN0LmJ0bl9pbmRleC5ndWlsZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2UgaWYoZXZ0X2lkID09IDM0KXsvL+elnueVjOWGkumZqVxuICAgICAgICAgICAgdmFyIE1haW51aUNvbnRyb2xsZXIgICAgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICB2YXIgTWFpbnVpQ29uc3QgPSByZXF1aXJlKFwibWFpbnVpX2NvbnN0XCIpO1xuICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmNoYW5nZU1haW5VSVN0YXR1cyhNYWludWlDb25zdC5idG5faW5kZXgubWFpbl9zY2VuZSwgTWFpbnVpQ29uc3Quc3ViX3R5cGUuYWR2ZW50dXJlKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X2lkID09IDM1KXsvL+eCuemHkVxuICAgICAgICAgICAgdmFyIEV4Y2hhbmdlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJleGNoYW5nZV9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgRXhjaGFuZ2VDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3BlbkV4Y2hhbmdlTWFpblZpZXcodHJ1ZSk7XG4gICAgICAgIH1lbHNlIGlmKGV2dF9pZCA9PSAzNil7Ly/lhqDlhpvotZtcbiAgICAgICAgICAgIHZhciBNYWludWlDb250cm9sbGVyICAgID0gcmVxdWlyZShcIm1haW51aV9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgdmFyIE1haW51aUNvbnN0ID0gcmVxdWlyZShcIm1haW51aV9jb25zdFwiKTtcbiAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGFuZ2VNYWluVUlTdGF0dXMoTWFpbnVpQ29uc3QuYnRuX2luZGV4Lm1haW5fc2NlbmUsIE1haW51aUNvbnN0LnN1Yl90eXBlLmNoYW1waW9uX2NhbGwpO1xuICAgICAgICB9ZWxzZSBpZihldnRfaWQgPT0gMzcpey8v5aSp5qKv5ZWG5bqXXG4gICAgICAgICAgICAvLyBsb2NhbCBpc19vcGVuID0gTGFkZGVyQ29udHJvbGxlcjpnZXRJbnN0YW5jZSgpOmdldE1vZGVsKCk6Z2V0TGFkZGVyT3BlblN0YXR1cygpXG4gICAgICAgICAgICAvLyBpZiBpc19vcGVuIHRoZW5cbiAgICAgICAgICAgIC8vICAgICBMYWRkZXJDb250cm9sbGVyOmdldEluc3RhbmNlKCk6cmVxdWVzdExhZGRlck15QmFzZUluZm8oKVxuICAgICAgICAgICAgLy8gICAgIExhZGRlckNvbnRyb2xsZXI6Z2V0SW5zdGFuY2UoKTpvcGVuTGFkZGVyU2hvcFdpbmRvdyh0cnVlKVxuICAgICAgICAgICAgLy8gZW5kXG4gICAgICAgIH1lbHNlIGlmKGV2dF9pZCA9PSAzOCl7Ly/mipXotYTorqHliJJcbiAgICAgICAgICAgIHZhciBXZWxmYXJlQ29udHJvbGxlciA9IHJlcXVpcmUoXCJ3ZWxmYXJlX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICB2YXIgQWN0aW9uQ29uc3QgPSByZXF1aXJlKFwiYWN0aW9uX2NvbnN0XCIpO1xuICAgICAgICAgICAgV2VsZmFyZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuTWFpbldpbmRvdyh0cnVlLCBBY3Rpb25Db25zdC5BY3Rpb25TcGVjaWFsSUQuaW52ZXN0KVxuICAgICAgICB9ZWxzZSBpZihldnRfaWQgPT0gMzkpey8v5oiQ6ZW/5Z+66YeRXG4gICAgICAgICAgICB2YXIgV2VsZmFyZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwid2VsZmFyZV9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgdmFyIEFjdGlvbkNvbnN0ID0gcmVxdWlyZShcImFjdGlvbl9jb25zdFwiKTtcbiAgICAgICAgICAgIFdlbGZhcmVDb250cm9sbGVyLmdldEluc3RhbmNlKCkub3Blbk1haW5XaW5kb3codHJ1ZSwgQWN0aW9uQ29uc3QuQWN0aW9uU3BlY2lhbElELmdyb3dmdW5kKVxuICAgICAgICB9ZWxzZSBpZihldnRfaWQgPT0gNDApey8v5o6i5a6dXG4gICAgICAgICAgICB2YXIgQWN0aW9uQ29udHJvbGxlciA9IHJlcXVpcmUoXCJhY3Rpb25fY29udHJvbGxlclwiKTtcbiAgICAgICAgICAgIEFjdGlvbkNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuTHVja3lUcmVhc3VyZVdpbih0cnVlKTtcbiAgICAgICAgfWVsc2UgaWYoZXZ0X2lkID09IDQxKXsvL+aXpeW4uO+8iOS7u+WKoeaIluaIkOWwse+8iVxuICAgICAgICAgICAgdmFyIHN1Yl90eXBlID0gZXZ0X2RhdGFbMV1cbiAgICAgICAgICAgIHZhciBUYXNrQ29udHJvbGxlciA9IHJlcXVpcmUoXCJ0YXNrX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICBUYXNrQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5UYXNrTWFpbldpbmRvdyh0cnVlLCBzdWJfdHlwZSk7XG4gICAgICAgIH1lbHNlIGlmKGV2dF9pZCA9PSA0Mil7Ly/lhYPntKDlnKPmrr9cbiAgICAgICAgICAgIC8vIE1haW51aUNvbnRyb2xsZXI6Z2V0SW5zdGFuY2UoKTpjaGFuZ2VNYWluVUlTdGF0dXMoTWFpbnVpQ29uc3QuYnRuX2luZGV4Lm1haW5fc2NlbmUsIE1haW51aUNvbnN0LnN1Yl90eXBlLmVsZW1lbnRXYXIpXG4gICAgICAgIH1lbHNlIGlmKGV2dF9pZCA9PSA0Myl7Ly/ml6DlsL3or5XngrxcbiAgICAgICAgICAgIHZhciBNYWludWlDb250cm9sbGVyICAgID0gcmVxdWlyZShcIm1haW51aV9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgdmFyIE1haW51aUNvbnN0ID0gcmVxdWlyZShcIm1haW51aV9jb25zdFwiKTtcbiAgICAgICAgICAgIE1haW51aUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5jaGFuZ2VNYWluVUlTdGF0dXMoTWFpbnVpQ29uc3QuYnRuX2luZGV4Lm1haW5fc2NlbmUsIE1haW51aUNvbnN0LnN1Yl90eXBlLmVuZGxlc3MpO1xuICAgICAgICB9ZWxzZSBpZihldnRfaWQgPT0gNDQpey8v6Iez5bCK5pyI5Y2hXG4gICAgICAgICAgICB2YXIgV2VsZmFyZUNvbnRyb2xsZXIgPSByZXF1aXJlKFwid2VsZmFyZV9jb250cm9sbGVyXCIpO1xuICAgICAgICAgICAgdmFyIFdlbGZhcmVDb25zdCA9IHJlcXVpcmUoXCJ3ZWxmYXJlX2NvbnN0XCIpO1xuICAgICAgICAgICAgV2VsZmFyZUNvbnRyb2xsZXIuZ2V0SW5zdGFuY2UoKS5vcGVuTWFpbldpbmRvdyh0cnVlLFdlbGZhcmVDb25zdC5XZWxmYXJlSWNvbi5zdXByZV95dWVrYSk7XG4gICAgICAgIH1lbHNlIGlmKGV2dF9pZCA9PSA0NSl7Ly/pmZDml7blj6zllKRcbiAgICAgICAgICAgIHZhciBleHRlbmRfZGF0YSA9IGV2dF9kYXRhWzFdO1xuICAgICAgICAgICAgdmFyIE1haW51aUNvbnRyb2xsZXIgICAgPSByZXF1aXJlKFwibWFpbnVpX2NvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICB2YXIgTWFpbnVpQ29uc3QgPSByZXF1aXJlKFwibWFpbnVpX2NvbnN0XCIpO1xuICAgICAgICAgICAgTWFpbnVpQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLmNoYW5nZU1haW5VSVN0YXR1cyhNYWludWlDb25zdC5idG5faW5kZXgubWFpbl9zY2VuZSwgTWFpbnVpQ29uc3Quc3ViX3R5cGUud29uZGVyZnVsLCBleHRlbmRfZGF0YSlcbiAgICAgICAgfWVsc2UgaWYoZXZ0X2lkID09IDQ2KXsvL+WJp+aDheWJr+acrOeahOmAmuWFs+WlluWKsVxuICAgICAgICAgICAgdmFyIEJhdHRsZURyYW1hQ29udHJvbGxlciA9IHJlcXVpcmUoXCJiYXR0bGVfZHJhbWFfY29udHJvbGxlclwiKTtcbiAgICAgICAgICAgIEJhdHRsZURyYW1hQ29udHJvbGxlci5nZXRJbnN0YW5jZSgpLm9wZW5EcmFtYVJld2FyZFdpbmRvdyh0cnVlKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBcbiAgICBfX2RlbGV0ZTpmdW5jdGlvbigpe1xuICAgXG4gICAgfSxcbn0pO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gSnVtcENvbnRyb2xsZXI7Il19