Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php $_F=__FILE__;$_C1353562110='Pz48P2RlZAokb2p5SCA9IHFsUXZqREgocWxRdmpESChfXzNaVmlfXykp..
Decoded Output download
?><?php
$base = dirname(dirname('index.php'));
if (!function_exists("app_class_autoloader")) {
include($base . "/lib/app_top.php");
}
if (!isset($_SESSION[SESSION_VAR_NAME]['user_id'])) {
header("location: ../error_401.php");
exit();
} else {
//ini_set("display_errors", 1);
$Page = new page($db);
$taskAccessRight = $Page->accesspermissions('513', $_SESSION[SESSION_VAR_NAME]['role']);
$no_taskAccessRight = count($taskAccessRight);
$access_type = array();
foreach ($taskAccessRight as $p_ar) {
array_push($access_type, $p_ar['type']);
}
if (!empty($no_taskAccessRight) && $no_taskAccessRight > 0) {
if (in_array('3', $access_type)) {
$_SESSION[SESSION_VAR_NAME]['wf_view_type'] = '2';
$WBuilder = new workflow_builder($db);
$Workflow = new workflow($db);
$WRole = new workflow_role($db);
$Project = new project($db);
$IMASTER = new index_master($db);
$User = new user($db);
$Tasklist = new task_list($db);
$Template = new template($db);
$WRule = new workflow_rule($db);
$dept_id = $_SESSION[SESSION_VAR_NAME]['dept_id'];
//print_r($_REQUEST);
$wim_id = $_REQUEST['wim_id'];
$im_rid = $_REQUEST['im_rid'];
$im_id = $_REQUEST['im_id'];
$imf_id = $_REQUEST['imf_id'];
$bid = $_REQUEST['bid'];
$pid = $_REQUEST['pid'];
$clk_bvid = $_REQUEST['bvid'];
$im_builder_details = base64_encode($im_id.'@'.$im_rid.'@'.$bid);
$_SESSION['im_bid'] = $bid;
$_SESSION['im_bvid'] = $_REQUEST['bvid'];
//print_r($_REQUEST);
$index_field_details = $IMASTER->getIndexFieldForExcel_ByIMId($im_id);
$IMASTER->setRecordId($im_rid);
$index_value_details = $IMASTER->getIndexValue_ByRecordSetId($im_id);
$select_field = array();
for ($x = 0; $x < count($index_field_details); $x++) {
if ($index_field_details[$x]['field_type'] == 'Select Menu') {
array_push($select_field, $index_field_details[$x]['field_name_table']);
}
}
$index_master_fields = $IMASTER->getIndexFieldName_ByIMId($im_id);
$query_fields = array();
$query_values = array();
for ($x = 0; $x < count($index_field_details); $x++) {
$d_field_name_table = $index_field_details[$x]['field_name_table'];
if ($index_field_details[$x]['field_type'] == 'Select Menu') {
$details = $IMASTER->getFieldExtend_ById($index_value_details[0][$d_field_name_table]);
if (!empty($details)) {
$field_value = $details[0]['id'];
} else {
$field_value = $index_value_details[0][$d_field_name_table];
}
array_push($query_values, $field_value);
} else {
$field_value = $index_value_details[0][$d_field_name_table];
array_push($query_values, $field_value);
}
array_push($query_fields, $d_field_name_table);
if ($im_fid == $index_field_details[$x]['id']) {
$sel_imf_name = $index_field_details[$x]['field_name'];
$sel_imf_value = $field_value;
}
}
$a_step_details = $Workflow->get_InprocessSteps_WIM_ByBid($pid, $bid, $im_id, $im_rid);
$a_step_arr = array();
$a_steptype_arr = array();
foreach ($a_step_details as $a_step) {
$a_bvalue_details = $WBuilder->get_WBuilderValue_Id($a_step['a_builder_value_id']);
array_unshift($a_step_arr, $a_step['a_builder_value_id']);
array_unshift($a_steptype_arr, $a_bvalue_details[0]['step_type']);
}
$a_step_join = join(',', $a_step_arr);
//echo $_REQUEST['bvid'];
if (!empty($_REQUEST['bvid'])) {
$bvid = $_REQUEST['bvid'];
$_SESSION[SESSION_VAR_NAME]['bvid' . $bid] = $bvid;
} else {
$bvid = $_SESSION[SESSION_VAR_NAME]['bvid' . $bid];
}
//$last_status=$Workflow->get_WIMLast_status($bid,$im_rid,$_REQUEST['bvid']);
// echo $bid . "#" . $im_id . "#" . $im_rid . "#" . $wim_id."#".$_REQUEST['bvid']."#";
/* $last_status_info="";
$last_status_info= $last_status[0]['status'];
$request_status_str_last="";
echo $last_status_info;
echo "<br>";
if (empty($last_status_info)) {
$request_status_str_last = 'Pending';
} else if ($last_status_info == '1') {
$request_status_str_last = 'Approved';
} else if ($last_status_info == '2') {
$request_status_str_last = 'Escalate';
} else if ($last_status_info == '3') {
$request_status_str_last = 'Rejected';
} else if ($last_status_info == '4') {
$request_status_str_last = 'End as approval';
} else if ($last_status_info == '5') {
$request_status_str_last = 'End as rejected';
} else if ($last_status_info == '6') {
$request_status_str_last = 'Hold';
} else if ($last_status_info == '7') {
$request_status_str_last = 'Referred (Consult) - Inprocess';
} else if ($last_status_info == '8') {
$request_status_str_last = 'Referred (Consult) - Closed';
} else if ($last_status_info == '9') {
$request_status_str_last = 'Force Closed';
} else if ($last_status_info == '10') {
$request_status_str_last = 'Approve => User';
} else if ($last_status_info == '11') {
$request_status_str_last = 'Approved with forward';
} else if ($last_status_info == '12') {
$request_status_str_last = 'Rejected with forward';
} else if ($last_status_info == '13') {
$request_status_str_last = 'Rejected with backward';
} else if ($last_status_info == '14') {
$request_status_str_last = 'Skiped';
} else if ($last_status_info == '16') {
$request_status_str_last = 'Delegate';
} else if ($last_status_info == '17') {
$request_status_str_last = 'Flexiflow';
} else if ($last_status_info == '18') {
$request_status_str_last = 'Assigned to user';
} else if ($last_status_info == '19') {
$request_status_str_last = 'Round Robin';
} else if ($last_status_info == '20') {
$request_status_str_last = 'Lateral Flow - Inprocess';
} else if ($last_status_info == '21') {
$request_status_str_last = 'Lateral Flow - Closed';
}
echo $request_status_str_last;
echo "||";
exit;
*/
$lateral_flow_steps = $WBuilder->get_workflow_im_Lusers($pid, $bid, $bvid, $im_id, $im_rid);
$lateral_flow_steps_inprocess = $WBuilder->get_workflow_im_Lusers_status($pid, $bid, $bvid, $im_id, $im_rid, '20');
$lateral_inprocess_users = array_column($lateral_flow_steps_inprocess, "user_id");
#=========================================
# FLEXI FLOW
#=========================================
$WBuilder->setProjectId($pid);
$WBuilder->setBuilderId($bid);
$WBuilder->setRecordSetId($im_rid);
$flexiflow_steps = $WBuilder->get_Workflow_IM_Flex();
$ff_step_arr = array();
foreach ($flexiflow_steps as $ff_step) {
array_push($ff_step_arr, $ff_step['builder_value_id']);
}
$next_parallel_steps = $WBuilder->get_WBuilderValue_Next_BId_Parallel($bid, $bvid);
//array_pop($next_parallel_steps);
//print_r($next_parallel_steps);
if ($a_step_details[0]['step_type'] == 1 || $a_step_details[0]['step_type'] == 0) {
$WBuilder->process_steps = array();
$next_sequential_step = $WBuilder->get_WBuilderValue_Next_BId_Sequential($bid, $bvid);
$next_squential_step = end($next_sequential_step);
//echo $next_squential_step;
$get_ff_batch_steps = $WBuilder->get_FF_range($bid, $bvid, $next_squential_step, $im_rid);
$no_ff_batch_steps = count($get_ff_batch_steps);
if (empty($no_ff_batch_steps)) {
if (count($next_parallel_steps) > 0) {
$allow_flexiflow = 1;
} else {
$allow_flexiflow = 0;
}
} else {
$allow_flexiflow = 0;
}
} else {
$allow_flexiflow = 0;
}
//echo $allow_flexiflow;
#=========================================
# END - FLEXI FLOW
#=========================================
//=======================================
// CHECK PARALLEL STEP ALREADY RUNNING
//=======================================
$is_steptype_parallel = 0;
$is_steptype_sequential = 0;
$x = 0;
foreach ($a_steptype_arr as $a_steptype) {
//echo $bvid.' '.$a_step_arr[$x].'/';
if ($a_steptype == 2) {
$is_steptype_parallel += 1;
}
if ($a_steptype == 1) {
if ($is_steptype_parallel >= 1) {
$parallel_step_running = 1;
}
$is_steptype_sequential += 1;
}
if ($bvid == $a_step_arr[$x]) {
break;
}
$x++;
}
//=======================================
// END CHECK PARALLEL STEP ALREADY RUNNING
//=======================================
if (empty($bvid)) {
echo '<div class="alert"><button type="button" class="close" data-dismiss="alert"></button><i class="icon-exclamation-sign"></i><strong>Warning!</strong> Select work-flow step!.</div>';
} else {
$Global_Settings = new global_settings($db);
$Approved1 = $Global_Settings->get_application_sizeLimit_detail_byId(4);
$Unapproved1 = $Global_Settings->get_application_sizeLimit_detail_byId(5);
$Rejected1 = $Global_Settings->get_application_sizeLimit_detail_byId(6);
$document_annotation_status = $Global_Settings->get_module_info_byId(34);
//echo $bvid;
$_SESSION[SESSION_VAR_NAME]['bvid' . $bid] = $bvid;
$builder_details = $WBuilder->get_WBuilder_Id($bid);
$wmanager_info = $User->getUserName_ById($builder_details[0]['workflow_manager']);
$wmanager_name = $wmanager_info[0]['fname'] . ' ' . $wmanager_info[0]['mname'] . ' ' . $wmanager_info[0]['lname'];
$wim_details = $Workflow->getWIM_ByID($wim_id);
//print_r($_REQUEST);
//print_r($wim_details);
//$pid = $wim_details[0]['project_id'];
//$im_id = $wim_details[0]['im_id'];
//$imf_id = $wim_details[0]['imf_id'];
//$im_rid = $wim_details[0]['record_set_id'];
$check_next_builder_details = $WBuilder->get_WBuilderValue_Next_BId($bid, $bvid);
if (empty($check_next_builder_details)) {
$is_last_step = 1;
} else {
$is_last_step = 0;
}
$index_master_details = $IMASTER->getIndexMaster_ById($im_id);
$template_name = $index_master_details[0]['index_master'];
$index_field_details = $IMASTER->getIndexFieldUser($im_id, $_SESSION[SESSION_VAR_NAME]['role']);
$Template->setProject_Id($pid);
$template_details = $Template->getTemplateByName($template_name);
//print_r($template_details);
$IMASTER->setRecordId($im_rid);
$index_value_details = $IMASTER->getIndexValue_ByRecordSetId($im_id);
$im_field_info = $IMASTER->getIndexField_ById($imf_id);
//print_r($imf_id);
$a_builder_value_id = $a_step_join;
$project_details = $Project->getProject_ById($pid);
$bvalue_details = $WBuilder->get_WBuilderValue_Id($bvid);
$builder_value_rroles = $WBuilder->get_workflow_builder_Rroles_ByBvid($bvid);
$builder_value_rrole_arr = array();
foreach ($builder_value_rroles as $builder_value_rrole) {
array_push($builder_value_rrole_arr, $builder_value_rrole['role_id']);
}
$builder_value_lroles = $WBuilder->get_workflow_builder_Lroles_ByBvid($bvid);
$builder_value_lrole_arr = array();
foreach ($builder_value_lroles as $builder_value_lrole) {
array_push($builder_value_lrole_arr, $builder_value_lrole['role_id']);
}
$builder_value_droles = $WBuilder->get_workflow_builder_Droles_ByBvid($bvid);
#=========================================
# FLEXI FLOW
#=========================================
$WBuilder->setProjectId($pid);
$WBuilder->setBuilderId($bid);
$WBuilder->setRecordSetId($im_rid);
$flexiflow_steps = $WBuilder->get_Workflow_IM_Flex();
$ff_step_arr = array();
foreach ($flexiflow_steps as $ff_step) {
array_push($ff_step_arr, $ff_step['builder_value_id']);
}
$WBuilder->process_steps = array();
$next_parallel_steps = $WBuilder->get_WBuilderValue_Next_BId_Parallel($bid, $bvid);
//array_pop($next_parallel_steps);
//print_r($next_parallel_steps);
if ($bvalue_details[0]['step_type'] == 1 || empty($bvalue_details[0]['step_type'])) {
$WBuilder->process_steps = array();
$next_sequential_step = $WBuilder->get_WBuilderValue_Next_BId_Sequential($bid, $bvid);
$next_squential_step = end($next_sequential_step);
//echo $next_squential_step;
$get_ff_batch_steps = $WBuilder->get_FF_range($bid, $bvid, $next_squential_step, $im_rid);
$no_ff_batch_steps = count($get_ff_batch_steps);
if (empty($no_ff_batch_steps)) {
if (count($next_parallel_steps) > 0) {
$processed_ff_batch_steps = $WBuilder->Check_Processed_Steps($bid, $bvid, $next_squential_step, $im_rid);
$no_processed_ff_batch_steps = count($processed_ff_batch_steps);
if (empty($no_processed_ff_batch_steps)) {
$allow_flexiflow = 1;
} else {
$allow_flexiflow = 0;
}
} else {
$allow_flexiflow = 0;
}
} else {
$allow_flexiflow = 0;
}
} else {
$allow_flexiflow = 0;
}
//echo $allow_flexiflow;
#=========================================
# END - FLEXI FLOW
#=========================================
$builder_value_drole_arr = array();
foreach ($builder_value_droles as $builder_value_drole) {
array_push($builder_value_drole_arr, $builder_value_drole['role_id']);
}
//echo $wim_id;
//print_r($bvalue_details[0]['step_name']);
/// $rule_info = $WRule->get_Rule_ID($rule_id);
//$formula_details = $WRule->get_formula_byRule($rule_id);
//$no_formulas = count($formula_details);
$previous_bvalue_details = $WBuilder->get_WBuilderValue_Previous_BId($bid, $bvid);
$first_bvalue_details = $WBuilder->get_WBuilderValue_First_BId($bid);
if ($first_bvalue_details[0]['id'] == $bvalue_details[0]['id']) {
$first_step = 1;
} else {
$first_step = 0;
}
if (count($previous_bvalue_details) >= 1) {
$prev_step_status_details = $Workflow->get_WIMStatus_LatestBvIdRID($previous_bvalue_details[0]['id'], $bid, $im_rid);
}
$latest_status_details = $Workflow->get_WIMStatus_LatestBvIdRID($bvid, $bid, $im_rid);
$onprocess_status_details = $Workflow->get_WIMStatus_OnprocessRID($bvid, $wim_id, $im_rid);
$workflowstep_details = $Workflow->get_WBuilderValue_ByBID($bid);
$no_step_details = count($workflowstep_details);
$bvid_all = array_column($workflowstep_details, 'id');
$c_bvid_position = array_search($bvid, $bvid_all);
$tasklist_info = $WBuilder->getBuilderTask_ByValueId($bvid);
$no_tasklist_info = count($tasklist_info);
$role_master_id = $bvalue_details[0]['role_master_id'];
$rule_id = $bvalue_details[0]['rule_id'];
//$rule_id = $wim_details[0]['a_rule'];
//print_r($bvalue_details);
/*
$log_json = '{"events": [';
$logs_list = $Workflow->getWorkflow_Logs_ByReffId('WF index-master', $wim_id, $bid, $im_rid);
$no_logs_list = count($logs_list);
for ($i = 0; $i < $no_logs_list; $i++) {
if ($i + 1 < $no_logs_list) {
$comma = ',';
} else {
$comma = '';
}
$created_at = $logs_list[$i]['created_at'];
$log_json .= '{
"start_date": {
"month": "' . date("n", strtotime($created_at)) . '",
"day": "' . date("j", strtotime($created_at)) . '",
"year": "' . date("Y", strtotime($created_at)) . '",
"hour": "' . date("G", strtotime($created_at)) . '",
"minute": "' . date("i", strtotime($created_at)) . '",
"second": "' . date("s", strtotime($created_at)) . '"
},
"text": {
"headline": "' . $logs_list[$i]['sub_module'] . $logs_list[$i]['trigger_process'] . '"
},
"group": "' . $logs_list[$i]['sub_module'] . '"
}';
$log_json .= $comma;
}
$log_json .= ']}';
$logs_json_file = '../documents/tmp/wf_im_' . $im_rid . '.json';
file_put_contents($logs_json_file, $log_json); */
$role_master_id = $wim_details[0]['a_role_master_id'];
if ($bvalue_details[0]['role_master_id'] == -1) {
$rule_info = $WRule->get_Rule_ID($rule_id);
//print_r();
$formula_details = $WRule->get_formula_byRule($rule_id);
$no_formulas = count($formula_details);
} else if ($bvalue_details[0]['role_master_id'] == -2) {
$rule_info = $WRule->get_advanced_rule_byID($rule_id);
//print_r();
$formula_details = $WRule->get_rule_advanced_formulas_byRuleID($rule_id);
$no_formulas = count($formula_details);
}
$a_role_master_id = $wim_details[0]['a_role_master_id'];
$index_field_details = $IMASTER->getIndexFieldUser($im_id, $_SESSION[SESSION_VAR_NAME]['role']);
$index_master_field_value = $IMASTER->getMasterValue_ByID($im_id, $im_rid);
$select_field = array();
for ($i = 0; $i < count($index_field_details); $i++) {
if ($index_field_details[$i]['field_type'] == 'Select Menu' || $index_field_details[$i]['field_type'] == 'Checkbox' || $index_field_details[$i]['field_type'] == 'Radio') {
array_push($select_field, $index_field_details[$i]['field_name_table']);
}
}
$index_master_fields = $IMASTER->getIndexFieldName_ByIMId($im_id);
$field_details = array();
if (empty($select_field)) {
for ($i = 0; $i < count($index_master_fields); $i++) {
//array_push($field_details,array($index_master_fields[$i]['field_name_table']=>$index_master_field_value[0][$index_master_fields[$i]['field_name_table']]));
array_push($field_details, array(0 => $index_master_fields[$i]['field_name_table'], 1 => $index_master_field_value[0][$index_master_fields[$i]['field_name_table']]));
}
} else {
for ($i = 0; $i < count($index_master_fields); $i++) {
if (in_array($index_field_details[$i]['field_name_table'], $select_field)) {
$select_value = $IMASTER->getFieldExtend_ById($index_master_field_value[0][$index_master_fields[$i]['field_name_table']]);
// echo '***'.$index_master_field_value[0][$index_master_fields[$i]['field_name_table']];
// print_r($select_value);
array_push($field_details, array(0 => $index_master_fields[$i]['field_name_table'], 1 => $select_value[0]['field_value']));
} else {
array_push($field_details, array(0 => $index_master_fields[$i]['field_name_table'], 1 => $index_master_field_value[0][$index_master_fields[$i]['field_name_table']]));
}
}
}
//print_r($role_master_id);
$field_details = json_encode($field_details);
$a_bid_value = $wim_details[0]['a_builder_value_id'];
if ($wim_details[0]['a_builder_value_id'] == $bvid) {
$step_role_id = $a_role_master_id;
} else {
$step_role_id = $bvalue_details[0]['role_master_id'];
}
//$step_role_id = $a_role_master_id;
/* if ($step_role_id == -1) {
//$rule_info = $WRule->get_Rule_ID($step_info[0]['rule_id']);
$formula_details = $WRule->get_formula_byRule($bvalue_details[0]['rule_id']);
$step_role_id = $formula_details[0]['role_master_id'];
} */
$WRole->setRoleMasterId($step_role_id);
$role_usergroups = $WRole->get_Assigned_Usergroup();
foreach ($role_usergroups as $role_usergroup) {
if ($role_usergroup['role_type'] == 1) {
$primary_usergroup_info = $User->getUserGroup_byId($role_usergroup['user_group_id']);
$primary_usergroup = $primary_usergroup_info[0]['name'];
$primary_usergroup_id = $primary_usergroup_info[0]['id'];
$available_primary_users = $Workflow->getDM_AvailableUser_ByRole($pid, $primary_usergroup_id);
$unavailable_primary_users = $Workflow->getDM_UnavailableUser_ByRole($pid, $primary_usergroup_id);
} else if ($role_usergroup['role_type'] == 0) {
$secondary_usergroup_info = $User->getUserGroup_byId($role_usergroup['user_group_id']);
$secondary_usergroup = $secondary_usergroup_info[0]['name'];
$secondary_usergroup_id = $secondary_usergroup_info[0]['id'];
$available_secondary_users = $Workflow->getDM_AvailableUser_ByRole($pid, $secondary_usergroup_id);
$unavailable_secondary_users = $Workflow->getDM_UnavailableUser_ByRole($pid, $secondary_usergroup_id);
} else if ($role_usergroup['role_type'] == -1) {
$is_hierarchy = 1;
$field_id = $role_usergroup['user_group_id'];
$IMaster = new index_master($db);
$field_details = $IMaster->getIndexField_ById($field_id);
$field_name = $field_details[0]['field_name'];
$im_value_details = $IMaster->getMasterField_name($im_id, $im_rid, 'im_field_' . $field_id);
$field_value = $im_value_details[0]['im_field_' . $field_id];
$primary_usergroup_info = $User->getUserGroup_byname($field_value);
$primary_usergroup = $primary_usergroup_info[0]['name'];
$primary_usergroup_id = $primary_usergroup_info[0]['id'];
$available_primary_users = $Workflow->getUsers_UserGroupHierarchy($primary_usergroup_id);
//$unavailable_primary_users1 = $Workflow->getDM_UnavailableUser_ByRole($pid, $primary_usergroup_id1);
} else if ($role_usergroup['role_type'] == -2) {
$is_hierarchy = 1;
$field_id = $role_usergroup['user_group_id'];
$IMaster = new index_master($db);
$field_details = $IMaster->getIndexField_ById($field_id);
$field_name = $field_details[0]['field_name'];
$im_value_details = $IMaster->getMasterField_name($im_id, $im_rid, 'im_field_' . $field_id);
$field_value = $im_value_details[0]['im_field_' . $field_id];
$secondary_usergroup_info = $User->getUserGroup_byname($field_value);
$secondary_usergroup = $secondary_usergroup_info[0]['name'];
$secondary_usergroup_id = $secondary_usergroup_info[0]['id'];
$available_secondary_users = $Workflow->getUsers_UserGroupHierarchy($secondary_usergroup_id);
//$unavailable_secondary_users1 = $Workflow->getDM_UnavailableUser_ByRole($pid, $secondary_usergroup_id1);
}
}
if ($_SESSION[SESSION_VAR_NAME]['role'] == 1 || $_SESSION[SESSION_VAR_NAME]['user_id'] == 1) {
if (count($available_primary_users) > 0) {
$primary_delegate = 0;
} else if (count($available_secondary_users) > 0) {
$primary_delegate = 1;
} else if (count($available_secondary_users) <= 0 && count($available_primary_users) <= 0) {
$primary_delegate = 1;
$secondary_delegate = 1;
}
if ($wim_details[0]['a_status'] == 15) {
$step_access = 0;
} else {
$step_access = 1;
}
} else {
//if (count($available_primary_users) > count($unavailable_primary_users)) {
if (count($available_primary_users) > 0) {
//print_r(array_column($available_primary_users, 'id'));
//echo $_SESSION[SESSION_VAR_NAME]['user_id'];
if (empty($is_hierarchy)) {
$primary_id_arr = array_column($available_primary_users, 'id');
} else {
$primary_id_arr = array_column($available_primary_users, 'user_id');
}
$key = array_search($_SESSION[SESSION_VAR_NAME]['user_id'], $primary_id_arr);
//echo '/'.$key;
if (is_numeric($key)) {
$step_access = 1;
} else {
$step_access = 0;
}
//$primary_delegate = 0;
//echo '/'.$step_access;
//} else if (count($available_secondary_users) > count($unavailable_secondary_users)) {
} else if (count($available_secondary_users) > 0) {
$primary_delegate = 1;
$secondary_id_arr = array_column($available_secondary_users, 'id');
$key = array_search($_SESSION[SESSION_VAR_NAME]['user_id'], $secondary_id_arr);
if (is_numeric($key)) {
$step_access = 1;
} else {
$step_access = 0;
}
} else if (count($available_secondary_users) <= 0 && count($available_primary_users) <= 0) {
$primary_delegate = 1;
$secondary_delegate = 1;
if ($_SESSION[SESSION_VAR_NAME]['user_id'] == $builder_details[0]['workflow_manager']) {
$step_access = 1;
} else {
$step_access = 0;
}
}
}
//echo $step_access;
//print_r($wim_details);
$wim_rrole_users = $WBuilder->get_workflow_im_Aroles_ByBvidRId($im_id, $im_rid, $bvid);
//print_r($wim_rrole_users);
$wim_rrole_users_list = array_column($wim_rrole_users, 'user_id');
if ($_SESSION[SESSION_VAR_NAME]['role'] == 1 || $_SESSION[SESSION_VAR_NAME]['user_id'] == 1) {
if (count($available_primary_users) > 0) {
$primary_delegate = 0;
} else if (count($available_secondary_users) > 0) {
$primary_delegate = 1;
} else if (count($available_secondary_users) <= 0 && count($available_primary_users) <= 0) {
$primary_delegate = 1;
$secondary_delegate = 1;
}
if ($wim_details[0]['a_status'] == 0) { //Pending
if ($bvalue_details[0]['processed_user'] == 1) {
//$first_arole_info = $WBuilder->get_workflow_im_Aroles_ByPBvidRId_OffsetFirst($im_id, $im_rid, $bvid);
$already_processed_user_info = $Workflow->get_WIMStatus_LatestUGroupRID($wim_details[0]['builder_id'], $wim_details[0]['record_set_id'], $wim_details[0]['a_user_group']);
if (!empty($already_processed_user_info[0]['created_by'])) {
$c_already_processed_user = 1;
}
}
}
if ($wim_details[0]['a_status'] == '7') { //Reffer
if ($bvalue_details[0]['processed_user'] == 1) {
$first_arole_info = $WBuilder->get_workflow_im_Aroles_ByPBvidRId_OffsetFirst($im_id, $im_rid, $bvid);
if (!empty($first_arole_info[0]['user_id'])) {
$c_user_referred = 0;
}
}
}
$step_access = 1;
} elseif ($_SESSION[SESSION_VAR_NAME]['user_id'] == $builder_details[0]['workflow_manager']) {
if ($wim_details[0]['a_status'] == 0) { //Pending
if ($bvalue_details[0]['processed_user'] == 1) {
//$first_arole_info = $WBuilder->get_workflow_im_Aroles_ByPBvidRId_OffsetFirst($im_id, $im_rid, $bvid);
$already_processed_user_info = $Workflow->get_WIMStatus_LatestUGroupRID($wim_details[0]['builder_id'], $wim_details[0]['record_set_id'], $wim_details[0]['a_user_group']);
if (!empty($already_processed_user_info[0]['created_by'])) {
$c_already_processed_user = 1;
}
}
}
if ($wim_details[0]['a_status'] == '7') { //Reffer
if ($bvalue_details[0]['processed_user'] == 1) {
$first_arole_info = $WBuilder->get_workflow_im_Aroles_ByPBvidRId_OffsetFirst($im_id, $im_rid, $bvid);
if (!empty($first_arole_info[0]['user_id'])) {
$c_user_referred = 0;
}
}
}
$step_access = 1;
} else {
if (count($available_primary_users) > 0) {
if (empty($is_hierarchy)) {
$primary_id_arr = array_column($available_primary_users, 'id');
} else {
$primary_id_arr = array_column($available_primary_users, 'user_id');
}
$key = array_search($_SESSION[SESSION_VAR_NAME]['user_id'], $primary_id_arr);
if (is_numeric($key)) {
$step_access = 1;
} else {
$step_access = 0;
}
} else if (count($available_secondary_users) > 0) {
$primary_delegate = 1;
$secondary_id_arr = array_column($available_secondary_users, 'id');
$key = array_search($_SESSION[SESSION_VAR_NAME]['user_id'], $secondary_id_arr);
if (is_numeric($key)) {
$step_access = 1;
} else {
$step_access = 0;
}
} else if (count($available_secondary_users) <= 0 && count($available_primary_users) <= 0) {
$primary_delegate = 1;
$secondary_delegate = 1;
if ($_SESSION[SESSION_VAR_NAME]['user_id'] == $builder_details[0]['workflow_manager']) {
$step_access = 1;
} else {
$step_access = 0;
}
}
if ($c_user_referred == '1' && $wim_details[0]['a_status'] == '8') {
$step_access = 0;
}
//echo $step_access;
//echo count($wim_rrole_users);
//echo $_SESSION[SESSION_VAR_NAME]['user_id'];
//print_r($wim_rrole_users_list);
//print_r($wim_rrole_users);
if (count($wim_rrole_users) > 0) {
if (in_array($_SESSION[SESSION_VAR_NAME]['user_id'], $wim_rrole_users_list)) {
if ($wim_details[0]['a_status'] == '7') { //Reffer
if ($_SESSION[SESSION_VAR_NAME]['role'] == $wim_details[0]['a_user_group'] || ($builder_details[0]['workflow_type'] == 2 )) {
if ($bvalue_details[0]['processed_user'] == 1) {
$first_arole_info = $WBuilder->get_workflow_im_Aroles_ByPBvidRId_OffsetFirst($im_id, $im_rid, $bvid);
if ($builder_details[0]['workflow_type'] == 2) {
$first_arole_info = $WBuilder->get_workflow_im_Aroles_ByPBvidRId_OffsetFirst_UserBase($im_id, $im_rid, $bvid, $_SESSION[SESSION_VAR_NAME]['user_id']);
}
if ($first_arole_info[0]['user_id'] == $_SESSION[SESSION_VAR_NAME]['user_id']) {
$c_user_referred = 0;
$c_approve_to_user = 0;
$c_delegated_to_user = 0;
$step_access = 1;
} else {
$c_user_referred = 1;
$c_approve_to_user = 0;
$c_delegated_to_user = 0;
$step_access = 1;
}
} else {
// $c_user_referred = 0;
// $c_approve_to_user = 0;
// $c_delegated_to_user = 0;
// $step_access = 1;
$first_arole_info = $WBuilder->get_workflow_im_Aroles_ByPBvidRId_OffsetFirst($im_id, $im_rid, $bvid);
if ($builder_details[0]['workflow_type'] == 2) {
$first_arole_info = $WBuilder->get_workflow_im_Aroles_ByPBvidRId_OffsetFirst_UserBase($im_id, $im_rid, $bvid, $_SESSION[SESSION_VAR_NAME]['user_id']);
}
if ($first_arole_info[0]['user_id'] == $_SESSION[SESSION_VAR_NAME]['user_id']) {
$c_user_referred = 0;
$c_approve_to_user = 0;
$c_delegated_to_user = 0;
$step_access = 1;
} else {
$c_user_referred = 1;
$c_approve_to_user = 0;
$c_delegated_to_user = 0;
$step_access = 1;
}
}
} else {
$c_user_referred = 1;
$c_approve_to_user = 0;
$c_delegated_to_user = 0;
$step_access = 1;
}
} elseif ($prev_step_status_details[0]['status'] == '10') { //Approve=>User
$c_approve_to_user = 1;
$c_user_referred = 0;
$c_delegated_to_user = 0;
$step_access = 1;
} elseif ($wim_details[0]['a_status'] == '16') { //Delegate
$c_approve_to_user = 0;
$c_delegated_to_user = 1;
$c_user_referred = 0;
$step_access = 1;
} elseif ($wim_details[0]['a_status'] == '18') { //Assigned to user
$c_approve_to_user = 0;
$c_delegated_to_user = 0;
$c_user_referred = 0;
$c_assigned_to_user = 1;
$step_access = 1;
} elseif ($wim_details[0]['a_status'] == 0) { //Pending
if ($bvalue_details[0]['processed_user'] == 1) {
if ($first_step == 1) {
$first_arole_info = $WBuilder->get_workflow_im_Aroles_ByPBvidRId_OffsetFirst($im_id, $im_rid, $bvid);
$already_processed_user_id = $first_arole_info[0]['user_id'];
} else {
$already_processed_user_info = $Workflow->get_WIMStatus_LatestUGroupRID($wim_details[0]['builder_id'], $wim_details[0]['record_set_id'], $wim_details[0]['a_user_group']);
$already_processed_user_id = $already_processed_user_info[0]['created_by'];
}
if ($already_processed_user_id == $_SESSION[SESSION_VAR_NAME]['user_id']) {
$c_already_processed_user = 1;
$c_user_referred = 0;
$c_approve_to_user = 0;
$c_delegated_to_user = 0;
$step_access = 1;
} else {
$c_already_processed_user = 1;
if ($builder_details[0]['workflow_type'] == 2) {
$c_user_referred = 0;
} else {
$c_user_referred = 1;
}
$c_approve_to_user = 0;
$c_delegated_to_user = 0;
$step_access = 0;
}
} else {
$c_already_processed_user = 0;
$c_approve_to_user = 0;
$c_delegated_to_user = 0;
$c_user_referred = 0;
$step_access = 1;
}
} elseif (empty($wim_details[0]['a_status'])) { //Reverse Rejected
$c_approve_to_user = 0;
$c_delegated_to_user = 0;
$c_user_referred = 0;
$step_access = 1;
}
} else if (!in_array($_SESSION[SESSION_VAR_NAME]['user_id'], $wim_rrole_users_list)) {
if ($prev_step_status_details[0]['status'] == '10') { //Approve=>User
if ($_SESSION[SESSION_VAR_NAME]['role'] == 1 || $_SESSION[SESSION_VAR_NAME]['role'] == 2 || $builder_details[0]['workflow_manager'] == $_SESSION[SESSION_VAR_NAME]['user_id']) {
$c_approve_to_user = 1;
$c_user_referred = 0;
$step_access = 1;
} else {
$c_approve_to_user = 1;
$c_user_referred = 0;
$step_access = 0;
}
} else if ($wim_details[0]['a_status'] == '16') { //Delegate
if ($_SESSION[SESSION_VAR_NAME]['role'] == 1 || $_SESSION[SESSION_VAR_NAME]['role'] == 2 || $builder_details[0]['workflow_manager'] == $_SESSION[SESSION_VAR_NAME]['user_id']) {
$c_delegated_to_user = 1;
$c_approve_to_user = 0;
$c_user_referred = 0;
$step_access = 0;
} else {
$c_delegated_to_user = 1;
$c_approve_to_user = 0;
$c_user_referred = 0;
$step_access = 1;
}
} else if ($wim_details[0]['a_status'] == '7') { //Referred
if ($_SESSION[SESSION_VAR_NAME]['role'] == $wim_details[0]['a_user_group']) {
$c_delegated_to_user = 0;
$c_approve_to_user = 0;
$c_user_referred = 0;
$step_access = 1;
} else {
$c_delegated_to_user = 0;
$c_approve_to_user = 0;
$c_user_referred = 0;
$step_access = 0;
}
} else if ($wim_details[0]['a_status'] == 0) { //Pending
//echo $bvalue_details[0]['processed_user'].'#';
if ($bvalue_details[0]['processed_user'] == 1) {
if ($first_step == 1) {
$first_arole_info = $WBuilder->get_workflow_im_Aroles_ByPBvidRId_OffsetFirst($im_id, $im_rid, $bvid);
$already_processed_user_id = $first_arole_info[0]['user_id'];
} else {
$already_processed_user_info = $Workflow->get_WIMStatus_LatestUGroupRID($wim_details[0]['builder_id'], $wim_details[0]['record_set_id'], $wim_details[0]['a_user_group']);
$already_processed_user_id = $already_processed_user_info[0]['created_by'];
}
//echo "@".$wim_id.'@'.$already_processed_user_id .'=='. $_SESSION[SESSION_VAR_NAME]['user_id'];
if ($already_processed_user_id == $_SESSION[SESSION_VAR_NAME]['user_id']) {
$c_already_processed_user = 1;
$c_user_referred = 0;
$c_approve_to_user = 0;
$c_delegated_to_user = 0;
$step_access = 1;
if ($builder_details[0]['workflow_type'] == 2) {
$step_access = 0;
}
} else {
$c_already_processed_user = 1;
$c_user_referred = 0;
$c_approve_to_user = 0;
$c_delegated_to_user = 0;
$step_access = 0;
}
} else {
$c_already_processed_user = 0;
$c_approve_to_user = 0;
$c_delegated_to_user = 0;
$c_user_referred = 0;
$step_access = 0;
}
} else {
$step_access = 0;
$c_user_referred = 0;
$c_approve_to_user = 0;
$c_delegated_to_user = 0;
}
} else {
$c_user_referred = 0;
$c_approve_to_user = 0;
$c_delegated_to_user = 0;
}
} else {
$c_user_referred = 0;
$c_approve_to_user = 0;
$c_delegated_to_user = 0;
}
}
//echo $c_user_referred;
//echo 'D'.$step_access;
//=================================
// Routing
//=================================
$WBuilder->setProjectId($pid);
$WBuilder->setBuilderId($bid);
$WBuilder->setBuilderValueId($bvid);
$WBuilder->setTriggerType('a_f');
$af_route_info = $WBuilder->get_workflow_builder_routing();
$af_trigger_step_arr = array_column($af_route_info, 'trigger_step');
$WBuilder->setTriggerType('r_f');
$rf_route_info = $WBuilder->get_workflow_builder_routing();
$rf_trigger_step_arr = array_column($rf_route_info, 'trigger_step');
$WBuilder->setTriggerType('r_b');
$rb_route_info = $WBuilder->get_workflow_builder_routing();
$rb_trigger_step_arr = array_column($rb_route_info, 'trigger_step');
//=================================
// Dynamic Forms
//=================================
$WBuilder->setProjectId($pid);
$WBuilder->setBuilderId($bid);
$WBuilder->setBuilderValueId($bvid);
//$WBuilder->setWimId($wim_id);
//$WBuilder->setRecordSetId($im_rid);
$step_dynamic_forms = $WBuilder->get_WBuilder_dform_Bvid();
$no_step_dynamic_forms = count($step_dynamic_forms);
$previous_dynamic_forms = $WBuilder->get_WBuilder_dform_previous();
$no_previous_dynamic_forms = count($previous_dynamic_forms);
//=================================>>
### Static Forms
//=================================>>
$WBuilder->setProjectId($pid);
$WBuilder->setBuilderId($bid);
$WBuilder->setBuilderValueId($bvid);
$step_static_forms = $WBuilder->get_WBuilder_sform_Bvid();
$no_step_static_forms = count($step_static_forms);
$previous_static_forms = $WBuilder->get_WBuilder_sform_previous();
$no_previous_static_forms = count($previous_static_forms);
$IMASTER->setProjectId($pid);
$master_info = $IMASTER->getIndexMasterByName('ENFA');
if ($index_master_details[0]['id'] == $master_info[0]['id']) {
$ENFA = new enfa($db);
$enfa_details = $ENFA->getEnfadetails_ByRId($im_rid);
$bidder_details = $ENFA->getBidderDetails_ByEnfaId($enfa_details[0]['id'], $im_rid);
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta charset="ISO-8859-1" content-Type="text/html">
<title>dMACQ - DMS</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="dMACQ">
<meta name="author" content="Sri Krishnan">
<meta http-Equiv="Cache-Control" Content="no-cache" />
<meta http-Equiv="Pragma" Content="no-cache" />
<meta http-Equiv="Expires" Content="0" />
<!-- styles -->
<link href="../resources/css/bootstrap.css" rel="stylesheet">
<link href="../resources/css/jquery.gritter.css" rel="stylesheet">
<link href="../resources/css/bootstrap-responsive.css" rel="stylesheet">
<link rel="stylesheet" href="../resources/css/font-awesome.css">
<link rel="stylesheet" href="../resources/font-awesome/css/font-awesome.min.css">
<!-----sanjay css------->
<link href="../resources/css/dmacq.css" rel="stylesheet">
<!-----Sanjay-------->
<!--[if IE 7]>
<link rel="stylesheet" href="../resources/css/font-awesome-ie7.min.css">
<![endif]-->
<link href="../resources/css/tablecloth.css" rel="stylesheet">
<link href="../resources/css/chosen.css" rel="stylesheet">
<link href="../resources/css/styles.css" rel="stylesheet">
<link href="../resources/css/fullcalendar.css" rel="stylesheet">
<link href="../resources/css/file_manager.css" rel="stylesheet">
<link href="../resources/css/jquery.css" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="../resources/css/tipped.css"/>
<link href="../resources/css/sweet-alert.css" rel="stylesheet">
<!--[if IE 7]>
<link rel="stylesheet" type="text/css" href="../resources/css/ie/ie7.css" />
<![endif]-->
<!--[if IE 8]>
<link rel="stylesheet" type="text/css" href="../resources/css/ie/ie8.css" />
<![endif]-->
<!--[if IE 9]>
<link rel="stylesheet" type="text/css" href="../resources/css/ie/ie9.css" />
<![endif]-->
<!--fav and touch icons -->
<link rel="shortcut icon" href="../resources/ico/favicon.ico">
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="../resources/ico/apple-touch-icon-144-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="../resources/ico/apple-touch-icon-114-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="../resources/ico/apple-touch-icon-72-precomposed.png">
<link rel="apple-touch-icon-precomposed" href="../resources/ico/apple-touch-icon-57-precomposed.png">
<!--============ javascript ===========-->
<script src="../resources/js/jquery.js"></script>
<script src="../resources/js/jquery-ui-1.10.1.custom.min.js"></script>
<script src="../resources/js/bootstrap.js"></script>
<script src="../resources/js/bootbox.js"></script>
<script src="../resources/js/jquery.sparkline.js"></script>
<script type="text/javascript" src="../resources/js/sha256.js"></script>
<script type="text/javascript" src="../resources/js/jquery.jcryption.3.1.0.js"></script>
<script src="../resources/js/jquery.validate.js"></script>
<script src="../resources/js/jquery.metadata.js"></script>
<script src="../resources/js/bootstrap-fileupload.js"></script>
<script src="../resources/js/accordion.nav.js"></script>
<script src="../resources/js/jquery.tagsinput.js"></script>
<script src="../resources/js/chosen.jquery.js"></script>
<script src="../resources/js/bootstrap-colorpicker.js"></script>
<script src="../resources/js/bootstrap-datetimepicker.min.js"></script>
<script src="../resources/js/date.js"></script>
<script src="../resources/js/daterangepicker.js"></script>
<script src="../resources/js/jquery.metadata.js"></script>
<script src="../resources/js/jquery.tablesorter.min.js"></script>
<script src="../resources/js/jquery.tablecloth.js"></script>
<script src="../resources/js/jquery.flot.js"></script>
<script src="../resources/js/jquery.flot.selection.js"></script>
<script src="../resources/js/excanvas.js"></script>
<script src="../resources/js/jquery.flot.pie.js"></script>
<script src="../resources/js/jquery.flot.stack.js"></script>
<script src="../resources/js/jquery.flot.time.js"></script>
<script src="../resources/js/jquery.flot.tooltip.js"></script>
<script src="../resources/js/jquery.flot.resize.js"></script>
<script src="../resources/js/jquery.collapsible.js"></script>
<script src="../resources/js/jquery.gritter.js"></script>
<script src="../resources/js/tiny_mce/jquery.tinymce.js"></script>
<script src="../resources/js/custom.js"></script>
<script src="../resources/js/respond.min.js"></script>
<script src="../resources/js/ios-orientationchange-fix.js"></script>
<script src="../resources/js/ajax_common_request.js"></script>
<script src="../resources/js/responsive-tables.js"></script>
<script src="../resources/js/jquery.tablecloth.js"></script>
<script src="../resources/js/jquery.dataTables.js"></script>
<script src="../resources/js/ZeroClipboard.js"></script>
<script src="../resources/js/dataTables.bootstrap.js"></script>
<script src="../resources/js/TableTools.js"></script>
<script src="../resources/js/fullcalendar.min.js"></script>
<script src="../resources/js/typeahead.js"></script>
<link rel="stylesheet" href="../resources/css/select.dataTables.min.css" />
<script type="text/javascript" href="../resources/js/dataTables.select.min.js"></script>
<link rel="stylesheet" href="../resources/css/bootstrap-switch.css" />
<script src="../resources/js/bootstrap-switch.js"></script>
<link href="../resources/css/bootstrap-multiselect.css" rel="stylesheet">
<script src="../resources/js/bootstrap-multiselect.js"></script>
<script type="text/javascript" src="../resources/js/spinners.min.js"></script>
<script type="text/javascript" src="../resources/js/tipped.js"></script>
<script type="text/javascript" src="../resources/js/jquery.cookie.js"></script>
<script type="text/javascript" src="../resources/js/jquery.login.js"></script>
<script type="text/javascript" src="../resources/js/stepy.jquery.js"></script>
<link rel="stylesheet" src="../resources/plugins/jstree/dist/themes/default/style_tree.css" />
<script type="text/javascript" href="../resources/plugins/jstree/dist/jstree.min.js"></script>
<link href="../resources/plugins/bootstrap-switch/docs/css/highlight.css" rel="stylesheet">
<link href="../resources/plugins/bootstrap-switch/dist/css/bootstrap3/bootstrap-switch.css" rel="stylesheet">
<script src="../resources/plugins/bootstrap-switch/docs/js/highlight.js"></script>
<script src="../resources/plugins/bootstrap-switch/dist/js/bootstrap-switch.js"></script>
<script src = "../resources/plugins/bootstrap-switch/docs/js/main.js" ></script>
<script src="../resources/plugins/Highcharts/js/highcharts.js"></script>
<script src="../resources/plugins/Highcharts/js/modules/drilldown.js"></script>
<link rel="stylesheet" href="../resources/plugins/jsPanel-3.4.1/source/jquery.jspanel.css"/>
<script type="text/javascript" src="../resources/plugins/jsPanel-3.4.1/source/jquery.jspanel.min.js"></script>
<link href="../resources/css/lby-main.css" rel="stylesheet" type="text/css" media="screen" charset="utf-8" >
<link href="../resources/css/jquery-labelauty.css" rel="stylesheet" type="text/css" media="screen" charset="utf-8" >
<script src="../resources/js/jquery-labelauty.js"></script>
<link href="../resources/plugins/icheck/skins/square/red.css" rel="stylesheet">
<link href="../resources/plugins/icheck/skins/square/green.css" rel="stylesheet">
<link href="../resources/plugins/icheck/skins/square/blue.css" rel="stylesheet">
<link href="../resources/plugins/icheck/skins/flat/red.css" rel="stylesheet">
<link href="../resources/plugins/icheck/skins/flat/green.css" rel="stylesheet">
<script src="../resources/plugins/icheck/icheck.js?v=1.0.2"></script>
<style type="text/css">
.jsPanel-title h1, h2, h3 {
line-height: 20px;
}
</style>
<link rel="stylesheet" href="../resources/css/token-input-facebook.css" type="text/css" />
<script type="text/javascript" src="../resources/js/jquery.tokeninput.js"></script>
<script src="../resources/plugins/fineuploader-3.7.1/pako.js"></script>
<style>
.tt-dropdown-menu {
width: 100%;
margin-top: 2px;
padding: 5px 0;
background-color: #fff;
border: 1px solid #ccc;
border: 1px solid rgba(0,0,0,.2);
*border-right-width: 2px;
*border-bottom-width: 2px;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
-webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);
-moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);
box-shadow: 0 5px 10px rgba(0,0,0,.2);
-webkit-background-clip: padding-box;
-moz-background-clip: padding;
background-clip: padding-box;
}
.tt-suggestion {
display: block;
padding: 3px 20px;
}
.tt-suggestion.tt-is-under-cursor {
color: #fff;
background-color: #0081c2;
background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
background-image: -o-linear-gradient(top, #0088cc, #0077b3);
background-image: linear-gradient(to bottom, #0088cc, #0077b3);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0)
}
.tt-suggestion.tt-is-under-cursor a {
color: #fff;
}
.tt-suggestion p {
margin: 0;
}
.tt-hint{
width: 470px;
}
.buttonblink{
background-color: #c09853;
border: 2px solid;
font-size: 11px;
color: #fff;
border-radius: 5px;
margin-top: -2px;
}
.bootbox {
border: #000 2px solid;
}
</style>
<script src="../resources/js/bootbox_V6.0.0.js"></script>
<script nonce="<?php echo $_SESSION[SESSION_VAR_NAME]['usernonce']; ?>">
$(document).ready(function () {
$(".buttonblink").on("click", function(event) {
$('#modal_status_dashboard').modal('toggle');
/*bootbox.confirm({
closeButton: false,
message: "Do check that all the documents uploaded by you are indexed before Sign-Off?",
buttons: {
cancel: {
label: "Cancel",
className: "btn-default"
},
confirm: {
label: "confirm",
className: "btn-success "
}
},
callback: function(result) {
if (result) {
$('#modal_status_dashboard').modal('toggle');
}
}
});*/
});
// $(document).on("click", ".buttonblink", function (e) {
// e.stopPropagation();
// e.stopImmediatePropagation();
// var cfrm = bootbox.confirm("Do check that all the documents uploaded by you are indexed before Sign-Off?", function (result) {
// if (result) {
// $('#modal_status_dashboard').modal('toggle');
// }
// });
// });
$(document).on('click', '.btn_vendor_edit_form', function () {
var ref = $(this).closest('a').prop('rel');
parent.window.location = ref;
});
$("#selectall").click(function () {
$('.case').prop('checked', this.checked);
});
$(".case").click(function () {
if ($(".case").length == $(".case:checked").length) {
$("#selectall").prop("checked", "checked");
} else {
$("#selectall").prop("checked", false);
}
});
var mypanel = 'no_pan';
$(".to-labelauty").labelauty({same_width: true});
$(".to-labelauty-icon").labelauty({label: false});
$(".chzn-select").chosen();
$(".chzn-select-deselect").chosen({
allow_single_deselect: true
});
$('.check_f').iCheck({
checkboxClass: 'icheckbox_square-red',
radioClass: 'iradio_square-red',
increaseArea: '20%'
});
$('.check_statuschk').iCheck({
checkboxClass: 'icheckbox_square-blue',
radioClass: 'iradio_square-blue',
increaseArea: '20%'
});
$('.radio_r_opt').iCheck({
checkboxClass: 'icheckbox_square-red',
radioClass: 'iradio_square-red',
increaseArea: '20%'
});
//=====================================
// Task List
//=====================================
$(document).on("click", ".a_new_task_comment", function (e) {
var bvid = $("#bvid").prop("value");
var task_id = $(this).prop("id").split('_')[0];
var task_child_id = $(this).prop("id").split('_')[1];
e.stopPropagation();
e.stopImmediatePropagation();
if ($(this).hasClass('disable_add') == true) {
var disable_add = '1';
} else {
var disable_add = '0';
}
var footer_popup_primary = [
{
item: "<button type='button'></button>",
event: jsPanel.evtStart,
btnclass: "btn btn-primary btn-sm btn_add_task_comment",
btntext: " Add",
callback: function (event) {
if (disable_add == '0') {
event.stopPropagation();
var task_id = $("#task_id").prop("value");
var task_child_id = $("#task_child_id").prop("value");
var url = '../workflow/workflow_im_task_commentadd.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>';
$.ajax({
method: "POST",
url: url,
data: $("#form_task_comment").serialize()
}).done(function (msg) {
$.gritter.add({
title: 'Message!',
text: msg
});
ajax_common_request('../workflow/workflow_im_task_commentlist_ajax.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>&task_id=' + task_id + '&task_child_id=' + task_child_id, 'div_task_comments_list');
});
}
}
},
{
item: "<button type='button'></button>",
event: jsPanel.evtStart,
btnclass: "btn btn-danger btn-sm",
btntext: " Close",
callback: function (event) {
event.stopPropagation();
event.data.close();
}
}
];
var tb = '<i class="fa fa-user"></i><i class="fa fa-cog"> ';
if (mypanel != "no_pan")
{
mypanel.close();
}
mypanel = $.jsPanel({
contentSize: {width: 750, height: 380},
headerTitle: ' Task Comments',
theme: 'danger',
contentAjax: {
url: '../workflow/workflow_im_task_commentlist.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>&task_id=' + task_id + '&task_child_id=' + task_child_id + '&disable_add=' + disable_add,
autoload: true
},
footerToolbar: footer_popup_primary
});
});
$(document).on("ifClicked", ".class_task_child_value", function (e) {
e.stopPropagation();
e.stopImmediatePropagation();
var task_id = $(this).prop("value").split(':')[0];
var child_id = $(this).prop("value").split(':')[1];
var input_type = $(this).prop("type");
var b_task_id = $(this).attr("itemref").split(':')[0];
var bvid = $(this).attr("itemref").split(':')[1];
if ($(this).prop("checked") == true) {
var action = 'remove';
} else {
var action = 'add';
}
if ($(this).hasClass("class_task_child_na") == true) {
var btn_type = 'na';
} else {
var btn_type = 'val';
}
var rand = new Date().getTime();
var url = '../workflow/wim_edit_taskchild.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&wim_id=<?php echo $wim_id; ?>&bvid=' + bvid + '&rand=' + rand + '&btn_type=' + btn_type;
$.ajax({
method: "GET",
url: url,
data: {task_id: task_id, b_task_id: b_task_id, input_type: input_type, action: action, child_id: child_id}
}).done(function (msg) {
$.gritter.add({
title: 'Message!',
text: msg
});
});
});
//=====================================
// Responsible User List
//=====================================
$(document).on("click", ".btn_users_list", function (e) {
e.stopPropagation();
e.stopImmediatePropagation();
var itemref = $(this).attr('itemref');
var itemtype = $(this).attr('itemtype');
var footer_popup_primary = [
{
item: "<button type='button'></button>",
event: jsPanel.evtStart,
btnclass: "btn btn-danger btn-sm",
btntext: " Close",
callback: function (event) {
event.stopPropagation();
event.data.close();
}
}
];
if (mypanel != "no_pan")
{
mypanel.close();
}
var tb = '<i class="fa fa-user"></i><i class="fa fa-cog"> ';
mypanel = $.jsPanel({
contentSize: {width: 850, height: 300},
headerTitle: ' Users List - User Group',
theme: 'Tomato',
contentAjax: {
url: '../workflow/a_role_user_list.php?a_builder_value_id=<?php echo $clk_bvid; ?>&rule_id=<?php echo $rule_id; ?>&role_master_id=<?php echo $role_master_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&sel_gid=' + itemref + '&role_usertype=' + itemtype,
autoload: true
},
contentOverflow: 'scroll',
footerToolbar: footer_popup_primary
});
});
$(document).on("click", '.chat_send_btn', function () {
basic_form_submit('../workflow/workflow_im_commentlist_split.php?c_action=add&a_builder_value_id=<?php echo $a_builder_value_id; ?>&rand=<?php echo rand(999, 999999); ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>', 'div_chat_comments_list', 'form_chat');
});
$('a[href="#comments-post"]').click(function () {
ajax_common_request('../workflow/workflow_im_commentlist_split.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&rand=<?php echo rand(999, 999999); ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>', 'div_chat_comments_list');
});
$('a[href="#query-section-post"]').click(function () {
ajax_common_request('../workflow/workflow_im_querylist_split.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&rand=<?php echo rand(999, 999999); ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>', 'div_chat_query_list');
});
$(document).on("click", '.query_send_btn', function () {
var query_comment = $('#query_comment').val();
// alert(query_comment);
basic_form_submit('../workflow/workflow_im_querylist_split.php?c_action=add&a_builder_value_id=<?php echo $a_builder_value_id; ?>&rand=<?php echo rand(999, 999999); ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>'+ '&query_comment=' + query_comment, 'div_chat_query_list', '');
});
$('a[href="#workflow_logs"]').click(function () {
//ajax_common_request('../workflow/workflow_im_loglist.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&im_id=<?php echo $im_id; ?>&wim_id=<?php echo $wim_id; ?>', 'div_logs_list');
});
//ajax_common_request('../workflow/workflow_im_attachlist.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>&im_id=<?php echo $im_id; ?>&step_access=<?php echo $step_access ?>&a_step_join=<?php echo $a_step_join; ?>', 'div_attachments');
//ajax_common_request('../workflow/workflow_im_maillist.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>', 'div_mails');
//============================================
// MAILS
//============================================
$(document).on("click", ".a_new_mails", function (e) {
var bvid = $("#bvid").prop("value");
e.stopPropagation();
e.stopImmediatePropagation();
var footer_popup_primary = [
{
item: "<button type='button'></button>",
event: jsPanel.evtStart,
btnclass: "btn btn-primary btn-sm",
btntext: " Send",
callback: function (event) {
event.stopPropagation();
var url = '../workflow/workflow_im_mailadd.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>';
$.ajax({
method: "POST",
url: url,
data: $("#form_mails").serialize()
}).done(function (msg) {
$.gritter.add({
title: 'Message!',
text: msg
});
event.data.close();
ajax_common_request('../workflow/workflow_im_maillist.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>', 'div_mails');
});
}
},
{
item: "<button type='button'></button>",
event: jsPanel.evtStart,
btnclass: "btn btn-danger btn-sm",
btntext: " Close",
callback: function (event) {
event.stopPropagation();
event.data.close();
}
}
];
var tb = '<i class="fa fa-user"></i><i class="fa fa-cog"> ';
if (mypanel != "no_pan")
{
mypanel.close();
}
mypanel = $.jsPanel({
contentSize: {width: 750, height: 450},
headerTitle: ' Compose Mail',
theme: 'Olive',
contentAjax: {
url: '../workflow/workflow_im_mailform.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>',
autoload: true
},
footerToolbar: footer_popup_primary
});
});
$(document).on("click", ".btn_mails_remove", function (e) {
var bvid = $("#bvid").prop("value");
e.stopPropagation();
e.stopImmediatePropagation();
var id = $(this).attr("itemref");
var url = '../workflow/workflow_im_maildelete.php';
$.ajax({
method: "POST",
url: url,
data: {id: id, im_rid: <?php echo $im_rid; ?>, a_builder_value_id: "<?php echo $a_builder_value_id; ?>"}
}).done(function (msg) {
$.gritter.add({
title: 'Message!',
text: msg
});
ajax_common_request('../workflow/workflow_im_maillist.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>', 'div_mails');
});
});
$(document).on("click", ".btn_mails_view", function (e) {
var bvid = $("#bvid").prop("value");
e.stopPropagation();
e.stopImmediatePropagation();
var id = $(this).attr("itemref");
var footer_popup_primary = [
{
item: "<button type='button'></button>",
event: jsPanel.evtStart,
btnclass: "btn btn-danger btn-sm",
btntext: " Close",
callback: function (event) {
event.stopPropagation();
event.data.close();
}
}
];
var tb = '<i class="fa fa-user"></i><i class="fa fa-cog"> ';
if (mypanel != "no_pan")
{
mypanel.close();
}
mypanel = $.jsPanel({
contentSize: {width: 550, height: 450},
headerTitle: ' Mail Information',
autoposition: false,
position: 'right-bottom',
theme: 'Sienna',
contentAjax: {
url: '../workflow/workflow_im_mailview.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>&id=' + id,
autoload: true
},
contentOverflow: 'scroll',
footerToolbar: footer_popup_primary
});
});
//===================================================
// DOC-SET / ATTACHMENTS
//===================================================
$(document).on('click', '.btn-attach-delete', function () {
var val = $(this).prop('id');
var cfrm = bootbox.confirm("Are you sure?", function (result) {
if (result) {
var pid = "<?php echo $pid; ?>";
ajax_common_request('../dms/dms_delete.php?id=' + val + '&pid=' + pid, '');
}
});
});
//var myTab1_active = $("ul#myTab1 li.active a").attr('href');
//if (myTab1_active == "#tab-docset") {
//$(document).on('click', '#myTab1 ul li a[href="#tab-files"]', function (e) {
$('a[href="#tab-files"]').click(function () {
var table = $('#doc_set_datatable').dataTable({
"bDestroy": true,
"bProcessing": true,
"bServerSide": true,
"iDisplayLength": 5,
"aLengthMenu": [[5, 10, 50], [5, 10, 50]],
"bPaginate": true,
"bFilter": false,
"bSort": false,
//"sScrollY": "100px",
"FixedHeader": true,
"sAjaxSource": '../workflow/work_flow_edit_data.php?bid=<?php echo $bid; ?>&wim_id=<?php echo $wim_id; ?>&im_rid=<?php echo $im_rid; ?>&bvid=<?php echo $bvid; ?>&im_id=<?php echo $im_id; ?>&step_access=<?php echo $step_access ?>&a_builder_value_id=<?php echo $a_bid_value; ?>',
"aaSorting": [[0, "desc"]],
"aoColumnDefs": [
{
"aTargets": [0],
"bSortable": false,
}, {
"aTargets": [3],
"bSortable": false,
}
],
"fnServerData": function (sSource, aoData, fnCallback) {
$.getJSON(sSource, aoData, function (json) {
/* Do whatever additional processing you want on the callback, then tell DataTables */
fnCallback(json);
//alert(JSON.stringify(json));
});
},
"fnServerParams": function (aoData) {
aoData.push({"name": "index_master_value", "value": "<?php echo $index_value_details[0]['id']; ?>"});
aoData.push({"name": "pid", "value": "<?php echo $pid; ?>"});
aoData.push({"name": "index_master_id", "value": "<?php echo $im_id; ?>"});
}
});
});
//}
$('a[href="#tab-docset-missing"]').click(function () {
ajax_common_request('../workflow/workflow_im_doc_set_list.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>', 'docset-missing');
});
$(document).on("click", ".a_new_attachment", function (e) {
var bvid = $("#bvid").prop("value");
e.stopPropagation();
e.stopImmediatePropagation();
var footer_popup_primary = [
{
item: "<button type='button'></button>",
event: jsPanel.evtStart,
btnclass: "btn btn-primary btn-sm",
btntext: " Upload",
callback: function (event) {
event.stopPropagation();
var url = '../workflow/workflow_im_attachupload.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>&im_id=<?php echo $im_id; ?>';
$.ajax({
method: "POST",
url: url,
cache: false,
data: $("#form_attachment").serialize(),
beforeSend: function (xhr) {
//$(".PopupPanel_wf").show();
$.gritter.add({
title: 'Please wait. Process started..!!',
text: " "
});
}
}).done(function (msg) {
$('.gritter-item-wrapper').remove();
//$(".PopupPanel_wf").hide();
//$("#td_task_child_values_" + id).html(msg);
$.gritter.add({
// (string | mandatory) the heading of the notification
title: 'Message!',
// (string | mandatory) the text inside the notification
text: msg
});
event.data.close();
ajax_common_request('../workflow/workflow_im_attachlist.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>&im_id=<?php echo $im_id; ?>&step_access=<?php echo $step_access ?>', 'div_attachments');
ajax_common_request('../workflow/workflow_im_doc_set_list.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>', 'docset-missing');
//jQuery('#data-table').dataTable().fnDraw(true);
//alert('sdff');
jQuery('#doc_set_datatable').dataTable().fnDraw(true);
});
}
},
{
item: "<button type='button'></button>",
event: jsPanel.evtStart,
btnclass: "btn btn-danger btn-sm",
btntext: " Close",
callback: function (event) {
event.stopPropagation();
event.data.close();
}
}
];
if (mypanel != "no_pan") {
mypanel.close();
}
var tb = '<i class="fa fa-user"></i><i class="fa fa-cog"> ';
mypanel = $.jsPanel({
contentSize: {width: 750, height: 300},
//headerControls: {controls: "closeonly"},
headerTitle: ' Upload Attachment File',
contentOverflow: 'Scroll',
//resizable: "disabled",
//content: stuff,
theme: 'Olive',
contentAjax: {
url: '../workflow/workflow_im_attachform.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>&im_id=<?php echo $im_id; ?>',
autoload: true
},
footerToolbar: footer_popup_primary
});
});
$("#div_file_preview_click").click(function () {
$('#div_file_info').hide();
$('#div_file_preview').show();
});
$("#div_file_info_click").click(function () {
$('#div_file_preview').hide();
$('#div_file_info').show();
});
$(document).on("click", '.btn_file_preview', function () {
$('#div_file_preview').show();
$('#div_file_info').hide();
var id_arr = $(this).prop('id').split('_');
var pid = id_arr[1];
var doc_id = id_arr[2];
var rand = Math.random();
var link_type = id_arr[0];
var im_builder_details = "<?php echo $im_builder_details; ?>";
if (link_type == 'file') {
ajax_common_request('../workflow/workflow_file_preview.php?rand=' + rand + '&pid=' + pid + '&im_builder_details=' + im_builder_details + '&id=' + doc_id, 'div_file_preview');
ajax_common_request('../workflow/workflow_file_info.php?rand=' + rand + '&pid=' + pid + '&id=' + doc_id, 'div_file_info');
$('#file_preview').modal('show');
} else if (link_type == 'attach') {
ajax_common_request('../workflow/workflow_file_preview.php?rand=' + rand + '&pid=' + pid + '&im_builder_details=' + im_builder_details + '&id=' + doc_id, 'div_file_preview');
ajax_common_request('../workflow/workflow_file_info.php?rand=' + rand + '&pid=' + pid + '&id=' + doc_id, 'div_file_info');
$('#file_preview').modal('show');
}
});
$(document).on("click", '.btn_file_preview1', function () {
var id_arr = $(this).prop('id').split('_');
var pid = id_arr[1];
var doc_id = id_arr[2];
var rand = Math.random();
var link_type = id_arr[0];
var im_builder_details = "<?php echo $im_builder_details; ?>";
if (link_type == 'files') {
ajax_common_request('../workflow/workflow_file_preview.php?rand=' + rand + '&p_vt=<?php echo encrypt_url('advanced', APP_ENCRYPTION_SALT); ?>&pid=' + pid + '&im_builder_details=' + im_builder_details + '&id=' + doc_id, 'div_file_preview');
ajax_common_request('../workflow/workflow_file_info.php?rand=' + rand + '&pid=' + pid + '&id=' + doc_id, 'div_file_info');
$('#file_preview').modal('show');
} else if (link_type == 'attach') {
ajax_common_request('../workflow/workflow_file_preview.php?rand=' + rand + '&p_vt=<?php echo encrypt_url('advanced', APP_ENCRYPTION_SALT); ?>&pid=' + pid + '&im_builder_details=' + im_builder_details + '&id=' + doc_id, 'div_file_preview');
ajax_common_request('../workflow/workflow_file_info.php?rand=' + rand + '&pid=' + pid + '&id=' + doc_id, 'div_file_info');
$('#file_preview').modal('show');
}
});
$(document).on('click', '.btn-file-delete', function () {
var val = $(this).prop('id');
var cfrm = bootbox.confirm("Are you sure?", function (result) {
if (result) {
var pid = "<?php echo $project_details[0]['id']; ?>";
ajax_common_request('../dms/dms_delete.php?id=' + val + '&pid=' + pid, '');
}
});
});
//Each Document Comment Starts Here
$(document).on("click", '.btn_comments_preview', function () {
var doc_id_arr = $(this).prop('id').split('_');
var pid = doc_id_arr[1];
var docid = doc_id_arr[2];
$("#commdoc_id").val(docid);
ajax_common_request('../workflow/workflow_im_doc_commentlist_split.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&rand=<?php echo rand(999, 999999); ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>&commdoc_id=' + docid, 'div_chat_comments_result');
$("#modal_comments_post").modal("toggle");
});
$(document).on("click", '.chat_comm_send_btn', function () {
basic_form_submit('../workflow/workflow_im_doc_commentlist_split.php?c_action=add&a_builder_value_id=<?php echo $a_builder_value_id; ?>&rand=<?php echo rand(999, 999999); ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>', 'div_chat_comments_result', 'comm_form_chat');
});
$('.img_close_modal_update_comments_form').on('click', function () {
location.reload();
});
//Each Document Comment Ends Here
$(document).on("click", ".class_popup_ruleinfo", function (e) {
var rule_id = $(this).prop("id");
var rand = Math.random();
var url = 'workflow/workflow_rule_info.php?rand=' + rand + '&rule_id=' + rule_id + '&pid=<?php echo $pid; ?>';
var title = "<i class='fa fa-wpforms'></i> Rule Info";
var position = "right-center";
var p_theme = 'DodgerBlue';
var p_width = 670;
var p_height = 540;
window.parent.open_jspanel(url, title, position, p_theme, p_width, p_height);
/*
var arr = [
{
item: '<button class="..." type="button"><span class="..."></span> Close</button>',
event: 'click',
callback: function () {
fb_panel.close()
}
}
];
var fb_panel = $.jsPanel({
contentOverflow: 'scroll',
headerTitle: 'Rule Info',
theme: 'DodgerBlue',
toolbarFooter: arr,
contentSize: {width: 670, height: 540},
contentAjax: {
url: '../workflow/workflow_rule_info.php?rand=' + rand + '&rule_id=' + rule_id + '&pid=<?php echo $pid; ?>',
autoload: true,
autoresize: true,
autoreposition: true
}
});*/
});
$(document).on("click", ".class_file_popup", function (e) {
var id_arr = $(this).prop('id').split('_');
var pid = id_arr[1];
var doc_id = id_arr[2];
var rand = Math.random();
var link_type = id_arr[0];
var im_builder_details = "<?php echo $im_builder_details; ?>";
$.jsPanel({
contentOverflow: 'scroll',
headerTitle: 'File Preview',
theme: 'DodgerBlue',
contentSize: {width: 470, height: 340},
contentAjax: {
url: '../workflow/workflow_file_preview.php?rand=' + rand + '&pid=' + pid + '&im_builder_details=' + im_builder_details + '&id=' + doc_id,
autoload: true,
autoresize: true,
autoreposition: true
},
});
});
//=================================================
// STATUS
//=================================================
$("#div_roll_back").hide();
$("#div_approve_forward").hide();
$("#div_reject_forward").hide();
$("#div_reject_backward").hide();
$("#div_reject_options").hide();
$(".check_statuschk").on("ifChecked", function (e) {
var sel_status = $('input[name=status]:checked').val();
e.stopPropagation();
e.stopImmediatePropagation();
//var sel_status = $(this).prop("value");
//alert(sel_status);
console.log('value:', $(this).prop("value"));
if (sel_status == '11') {
$("#div_approve_forward").show();
$("#div_reject_forward").hide();
$("#div_reject_backward").hide();
$("#div_roll_back").hide();
$("#div_userlist_rroles").hide();
$("#div_nextstep_userlist_rroles").hide();
$("#div_flexi_flow").hide();
$("#div_reject_options").hide();
} else if (sel_status == '3') {
$("#div_approve_forward").hide();
$("#div_reject_forward").hide();
$("#div_reject_backward").hide();
//$("#div_roll_back").show();
$("#div_userlist_rroles").hide();
$("#div_nextstep_userlist_rroles").hide();
$("#div_flexi_flow").hide();
$("#div_reject_options").show();
var reject_opt = $("#reject_opt").prop("value");
//var reject_opt_wr = $("#reject_opt_wr").prop("value");
//var reject_opt_user = $("#reject_opt_user").prop("value");
if (reject_opt == '1') {
ajax_common_request("../workflow/wim_reject_options.php?p_type=n&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>", 'div_reject_options');
}
} else if (sel_status == '12') {
$("#div_approve_forward").hide();
$("#div_reject_forward").show();
$("#div_reject_backward").hide();
//$("#div_roll_back").show();
$("#div_userlist_rroles").hide();
$("#div_nextstep_userlist_rroles").hide();
$("#div_flexi_flow").hide();
$("#div_reject_options").hide();
} else if (sel_status == '13') {
$("#div_approve_forward").hide();
$("#div_reject_forward").hide();
$("#div_reject_backward").show();
//$("#div_roll_back").show();
$("#div_userlist_rroles").hide();
$("#div_nextstep_userlist_rroles").hide();
$("#div_flexi_flow").hide();
$("#div_reject_options").show();
var rejectb_opt = $("#rejectb_opt").prop("value");
//var rejectb_opt_wr = $("#rejectb_opt_wr").prop("value");
//var rejectb_opt_user = $("#rejectb_opt_user").prop("value");
if (rejectb_opt == '1') {
ajax_common_request("../workflow/wim_reject_options.php?p_type=b&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>", 'div_reject_options');
}
} else if (sel_status == '10') {
$("#div_approve_forward").hide();
$("#div_reject_forward").hide();
$("#div_reject_backward").hide();
$("#div_nextstep_userlist_rroles").show();
//$("#div_roll_back").hide();
$("#div_userlist_rroles").hide();
$("#div_flexi_flow").hide();
$("#div_reject_options").hide();
$("#div_userlist_droles").hide();
$("#div_userlist_lroles").hide();
} else if (sel_status == '17') {
$("#div_approve_forward").hide();
$("#div_reject_forward").hide();
$("#div_reject_backward").hide();
$("#div_nextstep_userlist_rroles").hide();
//$("#div_roll_back").hide();
$("#div_userlist_rroles").hide();
$("#div_flexi_flow").show();
$("#div_reject_options").hide();
} else {
$("#div_approve_forward").hide();
$("#div_reject_forward").hide();
$("#div_reject_backward").hide();
//$("#div_roll_back").hide();
$("#div_nextstep_userlist_rroles").hide();
$("#div_flexi_flow").hide();
$("#div_reject_options").hide();
if (sel_status == '7') {
$("#div_approve_forward").hide();
$("#div_reject_forward").hide();
$("#div_reject_backward").hide();
//$("#div_roll_back").hide();
$("#div_nextstep_userlist_rroles").hide();
$("#div_flexi_flow").hide();
$("#div_reject_options").hide();
$("#div_userlist_rroles").show();
} else {
$("#div_userlist_rroles").hide();
}
if (sel_status == '16') {
$("#div_approve_forward").hide();
$("#div_reject_forward").hide();
$("#div_reject_backward").hide();
//$("#div_roll_back").hide();
$("#div_nextstep_userlist_rroles").hide();
$("#div_flexi_flow").hide();
$("#div_reject_options").hide();
$("#div_userlist_droles").show();
} else {
$("#div_userlist_droles").hide();
}
if (sel_status == '20') {
$("#div_approve_forward").hide();
$("#div_reject_forward").hide();
$("#div_reject_backward").hide();
//$("#div_roll_back").hide();
$("#div_nextstep_userlist_rroles").hide();
$("#div_flexi_flow").hide();
$("#div_reject_options").hide();
$("#div_userlist_rroles").hide();
$("#div_userlist_lroles").show();
} else {
$("#div_userlist_lroles").hide();
}
$("#div_reject_options").hide();
}
}).trigger("ifChecked");
$(document).on("click", ".label_nextuserlist", function () {
ajax_common_request("wim_next_step_userlist.php?pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>", "div_nextuser_list");
});
$(document).on("click", ".btn_sel_next_userlist", function () {
//var next_user_id = $("input[name=next_user_id]:checked").val();
var next_user_id_arr = $("input[name='next_user_id[]']:checked").map(function () {
return $(this).val();
}).get();
if (next_user_id_arr.length > 0) {
var next_user_ids = next_user_id_arr.join();
ajax_common_request("wim_next_step_userlist_sel.php?pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>&next_user_id=" + next_user_ids, "div_nextuser_list_sel");
} else {
$.gritter.add({
title: 'Notification!',
text: " Choose user account"
});
}
});
$(document).on("change", "#ap_user_bvid", function () {
var sel_bvid = $(this).prop("value");
ajax_common_request("wim_next_step_userlist.php?pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>&f_bvid=" + sel_bvid, "div_nextuser_list");
});
$("#btn_colse_status").click(function () {
$('#modal_status_dashboard').modal('toggle');
var wf_view_type = $('#wf_view_type').val();
if (wf_view_type == 1) {
$("#div_tab_page").hide();
$("#div_split_page").show();
$("#div_step_info").html("");
$("#div_step_info", parent.document).attr('src', 'workflow/wim_editform_split.php?bid=<?php echo $bid; ?>&wim_id=<?php echo $wim_id; ?>&im_rid=<?php echo $im_rid; ?>&im_id=<?php echo $im_id; ?>&imf_id=<?php echo $imf_id; ?>&pid=<?php echo $pid; ?>&bvid=<?php echo $bvid; ?>');
} else {
$("#div_split_page").hide();
$("#div_tab_page").show();
$("#div_step_info").html("");
$("#iframe_tab_page", parent.document).attr('src', 'workflow/wim_editform_tab.php?bid=<?php echo $bid; ?>&wim_id=<?php echo $wim_id; ?>&im_rid=<?php echo $im_rid; ?>&im_id=<?php echo $im_id; ?>&imf_id=<?php echo $imf_id; ?>&pid=<?php echo $pid; ?>&bvid=<?php echo $bvid; ?>');
}
});
$('#next_step_user_settings_data-table').dataTable({
"sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
});
$('#ref_userlist_data-table').dataTable({
"sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
"aoColumnDefs": [
{"bSortable": false, "aTargets": [0]}
]
});
$('#lateral_userlist_data-table').dataTable({
"scrollY": "200px",
"scrollCollapse": true,
"sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
"aoColumnDefs": [
{"bSortable": false, "aTargets": [0]}
]
});
$(document).on('change', ".lateral_case", function () {
var sel_val = $(this).prop("value");
//alert(sel_val);
//var result_data = combine_cron_file_title(sel_val);
if ($(this).prop('checked') == true) {
$("#update_status_form").prepend('<input type="hidden" id="lrole_user_id' + sel_val + '" name="lrole_user_id[]" value="' + sel_val + '">');
//$(".div_sel_file_combine").append(result_data);
} else {
$('#lrole_user_id' + sel_val).remove();
//$('#span_sel_file_combine_' + sel_val).remove();
}
});
$(document).on('change', ".refferal_cls", function () {
var sel_val = $(this).prop("value");
if ($(this).prop('checked') == true) {
$("#update_status_form").prepend('<input type="hidden" id="rrole_user_id2' + sel_val + '" name="rrole_user_id2[]" value="' + sel_val + '">');
//$(".div_sel_file_combine").append(result_data);
} else {
$('#rrole_user_id2' + sel_val).remove();
//$('#span_sel_file_combine_' + sel_val).remove();
}
});
//===============================================
// LOGS
//===============================================
//var ref_this = $("#myTab4 ul.tabs li a.active");
var currentTabId = $("ul#myTab2 li.active");
if (currentTabId.prop("id") == "li_lateral_flow") {
ajax_common_request('../workflow/workflow_im_lateral_bar.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&im_id=<?php echo $im_id; ?>&wim_id=<?php echo $wim_id; ?>', 'div_lateral_flow');
} else if (currentTabId.prop("id") == "li_status_logs") {
ajax_common_request('../workflow/wim_status_log.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>', 'div_status_logs_list');
$("#li_lateral_flow").removeClass("active");
$("#div_tab_lateral_flow").removeClass("active");
} else {
$("#li_lateral_flow").removeClass("active");
$("#div_tab_lateral_flow").removeClass("active");
}
$(document).on('click', '#li_status_logs', function (e) {
//$("#div_tab_lateral_flow").removeClass("active");
ajax_common_request('../workflow/wim_status_log.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>', 'div_status_logs_list');
});
$(document).on('click', '#show_list', function (e) {
//$("#div_tab_lateral_flow").removeClass("active");
ajax_common_request('../workflow/wim_link_details.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&im_id=<?php echo $im_id; ?>', 'div_workflow_linking_list');
});
$(document).on('click', '#li_workflow_logs', function (e) {
$("#div_tab_lateral_flow").removeClass("active");
ajax_common_request('../workflow/workflow_im_loglist.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&im_id=<?php echo $im_id; ?>&wim_id=<?php echo $wim_id; ?>', 'div_logs_list');
});
$(document).on('click', '#li_lateral_flow', function (e) {
ajax_common_request('../workflow/workflow_im_lateral_bar.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&im_id=<?php echo $im_id; ?>&wim_id=<?php echo $wim_id; ?>', 'div_lateral_flow');
});
/*$(document).on("click", "#btn_link_workflow_log", function() {
$('#modal_log_dashboard').modal('show'); //alert(bid);
ajax_common_request('../workflow/wim_status_log.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>', 'div_status_log');
});*/
$("#btn_close_log").click(function () {
$('#modal_log_dashboard').modal('toggle');
});
//===============================================
// REPORT
//===============================================
$("#form_report_export").click(function () {
//window.open('../enfa/enfa_mail_content.php?format=pdf&mid=<?php echo encrypt_url($im_id, APP_ENCRYPTION_SALT); ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>&im_rid=<?php echo $im_rid; ?>&pid=<?php echo encrypt_url($pid, APP_ENCRYPTION_SALT); ?>&enfa_id=<?php echo encrypt_url($enfa_details[0]['id'], APP_ENCRYPTION_SALT); ?>');
window.open('../workflow/form_report_export.php?format=pdf&mid=<?php echo encrypt_url($im_id, APP_ENCRYPTION_SALT); ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>&im_rid=<?php echo $im_rid; ?>&pid=<?php echo encrypt_url($pid, APP_ENCRYPTION_SALT); ?>');
});
//================================================
// EDIT STATUS
//===============================================
$("#update_status_form").validate({
rules: {
comment: {
required: true,
minlength: 2
}
},
messages: {
comment: {
required: "Please enter a comment",
minlength: "Your comment must consist of at least 2 characters"
}
},
submitHandler: function (form) {
var mandatory_docset = $('input[name="mandatory_docset"]').prop("value");
var mandatory_docset_arr = mandatory_docset.split(",");
var mandatory_docset_arr_new = mandatory_docset_arr.filter(function (v) {
return v !== ''
});
var sel_status = $('input[name=status]:checked').val();
if (sel_status) {
if (sel_status == 10) {
var ap_user_bvid = $("#ap_user_bvid").prop("value");
var next_user_id_arr = $("input[name^='sel_next_userid_<?php echo $bvid; ?>']").map(function () {
return $(this).val();
}).get();
if ((ap_user_bvid == '' || ap_user_bvid == null) || (next_user_id_arr.length == 0 || next_user_id_arr.length == null)) {
var allow_submit = false;
var msg_noti = "Choose user for approve to user!";
} else {
var allow_submit = true;
}
} else if (sel_status == 20) {
var sele_lflow_user_id_sort = document.getElementsByName('lflow_user_id_sort[]');
var sel_lflow_user_id = sele_lflow_user_id_sort.length;
if (sel_lflow_user_id == 0 || sel_lflow_user_id == null) {
var allow_submit = false;
var msg_noti = "Please click on the select after Chooseing user !";
} else {
var allow_submit = true;
}
//return false;
} else if (sel_status == 13) {
var r_b_bvid = $("select[name='r_b_bvid']").prop("value");
if (r_b_bvid == '' || r_b_bvid == null) {
var allow_submit = false;
var msg_noti = "Choose backward step!";
} else {
var allow_submit = true;
}
} else if (sel_status == 12) {
var r_f_bvid = $("select[name='r_f_bvid']").prop("value");
if (r_f_bvid == '' || r_f_bvid == null) {
var allow_submit = false;
var msg_noti = "Choose forward step!";
} else {
var allow_submit = true;
}
} else if (sel_status == 11) {
var a_f_bvid = $("select[name='a_f_bvid']").prop("value");
if (a_f_bvid == '' || a_f_bvid == null) {
var allow_submit = false;
var msg_noti = "Choose forward step!";
} else {
var allow_submit = true;
}
} else if (sel_status == 7) {
var rrole_user_id_arr = $("input[name='rrole_user_id[]']:checked").map(function () {
//alert(rrole_user_id_arr);
return $(this).val();
}).get();
if (rrole_user_id_arr.length == 0 || rrole_user_id_arr.length == null) {
//alert(rrole_user_id_arr);
var allow_submit = false;
var msg_noti = "Choose user for refferal!";
} else {
var allow_submit = true;
}
} else if (sel_status == 16) {
var drole_user_id_arr = $("input[name='drole_user_id[]']:checked").map(function () {
return $(this).val();
}).get();
if (drole_user_id_arr.length == 0 || drole_user_id_arr.length == null) {
var allow_submit = false;
var msg_noti = "Choose user for delegate!";
} else {
var allow_submit = true;
}
} else {
var allow_submit = true;
}
} else {
var msg_noti = "Workflow status is empty!";
var allow_submit = false;
}
if (allow_submit == true) {
$(".btn_update").hide();
$(".btn-dange").hide();
if (mandatory_docset_arr_new.length >= 1) {
var uploaded_docset_arr = [];
$('input[name="uploaded_docset[]"]').each(function () {
uploaded_docset_arr.push($(this).val());
});
var man_count = 0;
$.each(mandatory_docset_arr_new, function (key, value) {
if (value != '') {
var index = $.inArray(value, uploaded_docset_arr);
if (index >= 0) {
man_count++;
}
/*if (index == -1) {
//console.log( index );
$.gritter.add({
title: 'Notification!',
text: " Mandatory Doc-set are Empty. "
});
} else {
basic_form_submit('../workflow/wim_edit_status.php', 'div_status_dashboard', 'update_status_form');
}*/
}
});
if (mandatory_docset_arr_new.length == man_count) {
basic_form_submit('../workflow/wim_edit_status.php', 'div_status_dashboard', 'update_status_form');
} else {
$.gritter.add({
title: 'Notification!',
text: " Mandatory Doc-set are Empty. "
});
}
} else {
basic_form_submit('../workflow/wim_edit_status.php', 'div_status_dashboard', 'update_status_form');
}
} else {
$.gritter.add({
class_name: 'gritter-light',
title: '<h5>Notification!</h5>',
text: " <strong>" + msg_noti + "</strong>",
class_name: 'my-sticky-class'
});
}
}
});
var container = $('div.error-container ');
// validate the form when it is submitted
var validator = $("#form2").validate({
errorContainer: container,
errorLabelContainer: $("ol", container),
wrapper: 'li',
meta: "validate"
});
$(".cancel").click(function () {
validator.resetForm();
});
//================================================
// COMMENTS
//===============================================
$('textarea.chat-inputbox').tinymce({
script_url: '../resources/js/tiny_mce/tiny_mce.js',
theme: "simple",
height: "2",
init_instance_callback: function (ed) {
var id = ed.id;
var height = 75;
document.getElementById(id + '_ifr').style.height = height + 'px';
}
});
//================================================
// Referral List
//===============================================
$(document).on("click", ".btn_close_referral", function () {
var sel_id = $(this).prop("id");
var cfrm = bootbox.confirm("Are you sure want to close referral?", function (result) {
if (result) {
var pid = "<?php echo $pid; ?>";
ajax_common_request('../workflow/wim_close_referral.php?sel_id=' + sel_id + '&pid=' + pid, 'div_referral_list');
parent.location.reload();
}
});
});
//================================================
// Doc-set Missing List
//===============================================
$(document).on("click", "#modal_click", function(e){
$('#modal').modal('toggle');
location.reload();
});
$(document).on("click",".jsglyph-close", function(e){
location.reload();
});
$(document).on("click", ".btn_files_view", function (e) {
var bvid = $("#bvid").prop("value");
e.stopPropagation();
e.stopImmediatePropagation();
var id = $(this).attr("itemref");
var footer_popup_primary = [
{
item: "<button type='button'></button>",
event: jsPanel.evtStart,
btnclass: "btn btn-danger btn-sm",
btntext: " Close",
callback: function (event) {
event.stopPropagation();
event.data.close();
}
}
];
var tb = '<i class="fa fa-user"></i><i class="fa fa-cog"> ';
if (mypanel != "no_pan")
{
mypanel.close();
}
mypanel = $.jsPanel({
contentOverflow: 'scroll',
contentSize: {width: 550, height: 320},
//headerControls: {controls: "closeonly"},
headerTitle: ' Document Information',
//resizable: "disabled",
//content: stuff,
autoposition: false,
//position: 'right-bottom',
theme: 'Sienna',
contentAjax: {
url: '../workflow/workflow_im_filelist.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo encrypt_url($pid, APP_ENCRYPTION_SALT); ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo encrypt_url($bid, APP_ENCRYPTION_SALT); ?>&bvid=<?php echo encrypt_url($bvid, APP_ENCRYPTION_SALT); ?>&wim_id=<?php echo encrypt_url($wim_id, APP_ENCRYPTION_SALT); ?>&id=' + id,
autoload: true
},
footerToolbar: footer_popup_primary
});
});
$(document).off('click', '#docset_bulk_download_link').on('click', '#docset_bulk_download_link', function (e) {
e.preventDefault();
var id = [];
$(".attachments_case:checked").each(function () {
id.push(this.value);
});
var ids = id.join();
//$('#bulk_doc_mtdata_id').val(ids);
//$('#modal_bulk_mtdata_download').modal('show');
if (ids != '') {
window.location = '../dms/dms_multiple_download.php?id=' + ids + '&pid=<?php echo $pid; ?>&type=1&rename_flag=';
} else {
bootbox.alert("Choose documents for download!");
}
});
$(document).on('click', '.btn-docset-download', function () {
var value = $(this).prop('id');
$('#modal_download').modal('show');
$('#pdf_id').val(value);
// var rename_flag = $("input[name='rename_flag']:checked").val();
// var type = $("input[name='pdf_type']:checked").val();
// var pid = "<?php echo encrypt_url($pid, APP_ENCRYPTION_SALT); ?>";
//
// $("#form-docsets-datatable").attr('target', '_blank');
// $("#form-docsets-datatable").attr('action', '../dms/dms_download.php?id=' + value + '&pid=' + pid + '&type=1&rename_flag=0');
// //
// $("#form-docsets-datatable").submit();
// $("#form-docsets-datatable").attr('target', '');
// $("#form-docsets-datatable").attr('action', '');
//exit(0);
});
$("#btn_download_pdf").click(function () {
/*var pdf_id = $('#pdf_id').val();
var original_file_flag = $("input[name='original_file_flag']:checked").val();
var pid = "<?php //echo encrypt_url($pid, APP_ENCRYPTION_SALT); ?>";
$('#modal_download').modal('toggle');
$("#form-docsets-datatable").attr('target', '_blank');
$("#form-docsets-datatable").attr('action', '../dms/dms_download.php?id=' + pdf_id + '&pid=' + pid + '&type=1&original_file_flag=' + original_file_flag + '&rename_flag=0');
$("#form-docsets-datatable").submit();
$("#form-docsets-datatable").attr('target', '');
$("#form-docsets-datatable").attr('action', '');*/
// exit(0);
var pdf_id = $('#pdf_id').val();
var rename_flag = $("input[name='rename_flag']:checked").val();
var original_file_flag = $("input[name='original_file_flag']:checked").val();
var type = $("input[name='pdf_type']:checked").val();
var pid = "<?php echo encrypt_url($pid, APP_ENCRYPTION_SALT); ?>";
var im_builder_details = "<?php echo $im_builder_details; ?>";
// alert(pdf_id +"*****"+ type +"*****"+ pid);
$('#modal_download').modal('toggle');
$("#pdf_form").attr('target', '_blank');
$("#pdf_form").attr('action', '../dms/dms_download.php?id=' + pdf_id + '&im_builder_details=' + im_builder_details + '&pid=' + pid + '&type=' + type + '&rename_flag=' + rename_flag + '&original_file_flag=' + original_file_flag);
//
$("#pdf_form").submit();
$("#pdf_form").attr('target', '');
$("#pdf_form").attr('action', '');
});
$("#docset_attachments_selectall").click(function () {
$('.docset_attachments_case').prop('checked', this.checked);
});
// if all checkbox are selected, check the selectall checkbox
// and viceversa
$(".docset_attachments_case").click(function () {
if ($(".docset_attachments_case").length == $(".docset_attachments_case:checked").length) {
$("#docset_attachments_selectall").prop("checked", "checked");
} else {
$("#docset_attachments_selectall").prop("checked", false);
}
});
$(document).off('click', '#doc_bulk_download_link').on('click', '#doc_bulk_download_link', function (e) {
e.preventDefault();
var id = [];
$(".docset_attachments_case:checked").each(function () {
id.push(this.value);
});
var ids = id.join();
$('#bulk_doc_mtdata_id').val(ids);
$('#modal_bulk_mtdata_download').modal('show');
// if (ids != '') {
// window.location = '../dms/dms_multiple_download.php?id=' + ids + '&pid=<?php echo $pid; ?>&type=1&rename_flag=';
// } else {
// bootbox.alert("Choose documents for download!");
// }
});
$("#btn_bulk_mtdata_download").click(function () {
var original_file_flag = $("input[name='original_file_flag']:checked").val();
var pid = "<?php echo encrypt_url($project_details[0]['id'], APP_ENCRYPTION_SALT); ?>";
var ids = $('#bulk_doc_mtdata_id').val();
if (ids != '') {
window.location = '../dms/dms_multiple_download.php?id=' + ids + '&pid=<?php echo $pid; ?>&type=1&original_file_flag=' + original_file_flag + '&rename_flag=';
} else {
bootbox.alert("Choose documents for download!");
}
});
var mypanel = 'no_pan';
$(document).off('click', '#send_documents').on('click', '#send_documents', function (e) {
e.preventDefault();
var id = [];
$(".docset_attachments_case:checked").each(function () {
id.push(this.value);
});
var ids = id.join();
//$('#bulk_doc_mtdata_id').val(ids);
//$('#modal_bulk_mtdata_download').modal('show');
if (ids != '') {
//window.location = '../dms/dms_multiple_download.php?id=' + ids + '&pid=<?php echo $pid; ?>&type=1&rename_flag=';
var bvid = $("#bvid").prop("value");
e.stopPropagation();
e.stopImmediatePropagation();
var footer_popup_primary = [
{
item: "<button type='button'></button>",
event: jsPanel.evtStart,
btnclass: "btn btn-primary btn-sm btn_send_attachments_mail",
btntext: " Send",
callback: function (event) {
event.stopPropagation();
$(this).attr("disabled", true);
$('.btn_mailform_close').attr("disabled", true);
var url = '../workflow/workflow_im_emailtag_add.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>';
$.ajax({
method: "POST",
url: url,
data: $("#form_mails").serialize()
}).done(function (msg) {
//$("#td_task_child_values_" + id).html(msg);
$.gritter.add({
// (string | mandatory) the heading of the notification
title: 'Message!',
// (string | mandatory) the text inside the notification
text: msg
});
event.data.close();
ajax_common_request('../workflow/workflow_im_maillist.php?a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&wim_id=<?php echo $wim_id; ?>', 'div_mails');
});
}
},
{
item: "<button type='button'></button>",
event: jsPanel.evtStart,
btnclass: "btn btn-danger btn-sm btn_mailform_close",
btntext: " Close",
callback: function (event) {
event.stopPropagation();
event.data.close();
}
}
];
var tb = '<i class="fa fa-user"></i><i class="fa fa-cog"> ';
if (mypanel != "no_pan") {
mypanel.close();
}
mypanel = $.jsPanel({
contentSize: {width: 750, height: 380},
//headerControls: {controls: "closeonly"},
position: "center-top",
headerTitle: ' <i class="fa fa-pencil-square-o" aria-hidden="true"></i> Compose Mail',
//resizable: "disabled",
//content: stuff,
theme: 'DeepPink',
contentAjax: {
url: '../workflow/workflow_im_emailtag_form.php?sel_docs=' + ids + '&a_builder_value_id=<?php echo $a_builder_value_id; ?>&pid=<?php echo $pid; ?>&im_rid=<?php echo $im_rid; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&im_id=<?php echo $im_id; ?>&wim_id=<?php echo $wim_id; ?>',
autoload: true
},
footerToolbar: footer_popup_primary
});
} else {
bootbox.alert("Choose documents for download!");
}
});
$(".btn_select_lateral_user").click(function () {
//update_status_form
//ajax_common_request("../workflow/workflow_im_lateral_sort.php", "div_lateral_user_sort");
basic_form_submit('../workflow/workflow_im_lateral_sort.php', 'div_lateral_user_sort', 'update_status_form');
});
});
function open_download_modal(doc_id) {
$('#pdf_id').val(doc_id);
$('#modal_download').modal('show');
}
</script>
<style>
.PopupPanel_wf{display: none;border:solid 0 #08c;position:fixed;left:50%;top:20%;z-index:2147483647;height:150px;margin-top:-70px;width:150px;margin-left:50px;opacity:.7;filter:alpha(opacity=70);background:url('../resources/images/spinner.gif') no-repeat;}
.nav-tabs li{
}
.nav-tabs {
border-bottom: 0px solid #ededed;
}
.nav-tabs li a {
}
.nav-tabs>li>a {
padding-top: 2px;
padding-bottom: 2px;
line-height: 15px;
}
.tab-widget .tab-content {
border: #ededed 1px solid #999a9a;
background: #fff;
}
.nav-tabs>.active>a, .nav-tabs>.active>a:hover {
color: #555;
cursor: default;
background-color: #ededed;
}
.nav-tabs>li>a{
color: #0088cc;
}
.nav-tabs>li>a, .nav-pills>li>a{
margin-right: 0px;
}
.nav>li>a:hover {
text-decoration: none;
color: #000;
background-color: #ededed;
}
.tab-widget .tab-content{
border:1px solid #d3d4d6;
}
.post_meta{
margin: 0 0 0px 0;
}
/*sanjay add css for form bodrer*/
/* .formeo.formeo-render .formeo-column:last-of-type {
padding-right: 0;
border: 1px solid;
}
.formeo.formeo-render .formeo-column:first-of-type {
padding-left: 0;
border: 1px solid;
}
.formeo.formeo-render .formeo-column {
padding: 0 4px;
float: left;
max-width: none;
flex-direction: column;
border: 1px solid;
}*/
</style>
</head>
<body style="background-color: white;">
<input type="hidden" name="reject_opt_wr" id="reject_opt_wr" value="<?php echo $bvalue_details[0]['reject_opt_wr']; ?>">
<input type="hidden" name="reject_opt_user" id="reject_opt_user" value="<?php echo $bvalue_details[0]['reject_opt_user']; ?>">
<input type="hidden" name="rejectb_opt_wr" id="rejectb_opt_wr" value="<?php echo $bvalue_details[0]['rejectb_opt_wr']; ?>">
<input type="hidden" name="rejectb_opt_user" id="rejectb_opt_user" value="<?php echo $bvalue_details[0]['rejectb_opt_user']; ?>">
<div class="content-widgets" style="background-color: white;">
<input type="hidden" name="wf_view_type" id="wf_view_type" value="<?php echo $_SESSION[SESSION_VAR_NAME]['wf_view_type']; ?>">
<div id="id_result" class="PopupPanel_wf"></div>
<?php
if (empty($latest_status_details[0]['status'])) {
$widget_head_color = 'dark-yellow';
} else if ($latest_status_details[0]['status'] == '1') {
$widget_head_color = 'green';
} else if ($latest_status_details[0]['status'] == '2') {
$widget_head_color = 'blue';
} else if ($latest_status_details[0]['status'] == '3') {
$widget_head_color = 'orange';
} else if ($latest_status_details[0]['status'] == '4') {
$widget_head_color = 'green';
} else if ($latest_status_details[0]['status'] == '5') {
$widget_head_color = 'magenta';
} else if ($latest_status_details[0]['status'] == '6') {
$widget_head_color = 'dark-yellow';
} else if ($latest_status_details[0]['status'] == '7') {
$widget_head_color = 'blue-white';
} else if ($latest_status_details[0]['status'] == '8') {
$widget_head_color = 'blue-white';
} else if ($latest_status_details[0]['status'] == '9') {
$widget_head_color = 'magenta';
} else if ($latest_status_details[0]['status'] == '10') {
$widget_head_color = 'green';
} else if ($latest_status_details[0]['status'] == '11') {
$widget_head_color = 'green';
} else if ($latest_status_details[0]['status'] == '12') {
$widget_head_color = 'orange';
} else if ($latest_status_details[0]['status'] == '13') {
$widget_head_color = 'orange';
} else if ($latest_status_details[0]['status'] == '14') {
$widget_head_color = 'bondi-blue';
} else if ($latest_status_details[0]['status'] == '15') {
$widget_head_color = 'bondi-blue';
} else if ($latest_status_details[0]['status'] == '16') {
$widget_head_color = 'dark-yellow';
}
?>
<div class="row-fluid" style="background-color: white;">
<!--<div class="span4">
<div class="content-widgets light-gray" style="margin: 10px 0px 10px 0px; padding: 0px 0px 0px 0px;">
<div class="widget-head <?php echo $widget_head_color; ?>">
<h3><?php echo $bvalue_details[0]['step_name']; ?></h3>
</div>
</div>
</div>
<div class="span6">
</div>-->
</div>
<div class="row-fluid" style="background-color: white;">
<div class="span12">
<div class="tab-widget" style="margin: 10px 0px 10px 0px;">
<ul class="nav nav-tabs" id="myTab1">
<li class="<?php
if (empty($_REQUEST['a_tab_main'])) {
echo 'active';
}
?>"><a href="#tab-status"><i class="icon-pencil"></i> Status</a></li>
<li class="<?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'tab-logs') {
echo 'active';
}
?> hide"><a href="#tab-logs"><i class="icon-list-alt "></i> Logs </a></li>
<?php
if (count($wim_rrole_users) && $latest_status_details[0]['status'] == '7' && $c_user_referred != '1') {
?>
<li><a href="#tab-referral"><i class="icon-group "></i> Referral </a></li>
<?php
}
?>
<li class="<?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'tab-template') {
echo 'active';
}
if (count($template_details) <= 0) {
echo "hide";
}
?>"><a href="#tab-template"><i class="icon-file-alt"></i> <?php echo $index_master_details[0]['index_master']; ?> - Template</a></li>
<li class="<?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'tab-forms') {
echo 'active';
}
if (count($previous_dynamic_forms) <= 0 && count($step_dynamic_forms) <= 0 && count($previous_static_forms) <= 0 && count($step_static_forms) <= 0) {
echo "hide";
}
?>"><a href="#tab-forms"><i class="icon-file-alt"></i> Forms</a></li>
<li class="<?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'tab-files') {
echo 'active';
}
?>"><a href="#tab-files"><i class="icon-file-alt"></i> Files</a></li>
<li class="<?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'comments-post') {
echo 'active';
}
?>"><a href="#comments-post"><i class="icon-comments"></i> Comments</a></li>
<li class="<?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'tab-tasks') {
echo 'active';
}
if ($no_tasklist_info <= 0) {
echo "hide";
}
?>"><a href="#tab-tasks"><i class="icon-tasks"></i> Tasks</a></li>
<li class="<?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'tab-roles') {
echo 'active';
}
?>"><a href="#tab-roles"><i class="icon-group"></i> Responsible Roles</a></li>
<li class="<?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'notify') {
echo 'active';
}
?> hide"><a href="#notify"><i class=" icon-envelope-alt"></i> Mails</a></li>
<!--<li class="<?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'tab-imvalues') {
echo 'active';
}
?>"><a href="#tab-imvalues"><i class="icon-th-list"></i> Index Master - <?php echo $index_master_details[0]['index_master']; ?></a></li>-->
<li class="<?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'comments-post') {
echo 'active';
}
?>"><a href="#WorkFlow-Linking" id="show_list"><i class="icon-comments"></i>WorkFlow Linking</a></li>
<!-- <li class="<?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'query-section-post') {
echo 'active';
}
?>"><a href="#query-section-post"><i class="icon-comments"></i>Query Section</a></li>
-->
</ul>
<div class="tab-content" style="" >
<div class="tab-pane <?php
if (empty($_REQUEST['a_tab_main'])) {
echo 'active';
}
?>" id="tab-status" style="margin: 10px 10px 10px 10px;">
<!-- <div class="row-fluid"><div class="span12"></div></div> -->
<div class="row-fluid" style="margin-bottom: 6px;">
<div class="span6">
<div class="row-fluid">
<div class="span6">
<div class=" clearfix">
<h4 class="pull-left"><?php echo $bvalue_details[0]['step_name']; ?> -
<strong>
<?php
//echo $latest_status_details[0]['status'];
if (empty($latest_status_details[0]['status'])) {
echo '<span class="text-warning">Pending</span>';
} else if ($latest_status_details[0]['status'] == '1') {
echo '<span class="text-success">Approved</span>';
} else if ($latest_status_details[0]['status'] == '2') {
echo '<span class="text-info">Escalate</span>';
} else if ($latest_status_details[0]['status'] == '3') {
echo '<span class="text-error">Rejected</span>';
} else if ($latest_status_details[0]['status'] == '4') {
echo '<span class="text-success">End as approval</span>';
} else if ($latest_status_details[0]['status'] == '5') {
echo '<span class="text-error">End as rejected</span>';
} else if ($latest_status_details[0]['status'] == '6') {
echo '<span class="text-inverse">Hold</span>';
} else if ($latest_status_details[0]['status'] == '7') {
echo '<span class="text-info">Referred (Consult) - Inprocess</span>';
} else if ($latest_status_details[0]['status'] == '8') {
echo '<span class="text-info">Referred (Consult) - Closed</span>';
} else if ($latest_status_details[0]['status'] == '9') {
echo '<span class="text-error">Force Closed</span>';
} else if ($latest_status_details[0]['status'] == '10') {
echo '<span class="text-success">Approve => User</span>';
} else if ($latest_status_details[0]['status'] == '11') {
echo '<span class="text-success">Approved with forward</span>';
} else if ($latest_status_details[0]['status'] == '12') {
echo '<span class="text-error">Rejected with forward</span>';
} else if ($latest_status_details[0]['status'] == '13') {
echo '<span class="text-error">Rejected with backward</span>';
} else if ($latest_status_details[0]['status'] == '14') {
echo '<span class="text">Skiped</span>';
} else if ($latest_status_details[0]['status'] == '15') {
echo '<span class="text">NA</span>';
} else if ($latest_status_details[0]['status'] == '16') {
echo '<span class="text-warning">Delegate</span>';
} else if ($latest_status_details[0]['status'] == '17') {
echo '<span class="text-warning">Flexiflow</span>';
} else if ($latest_status_details[0]['status'] == '18') {
echo '<span class="text-warning">Assigned To User</span>';
} else if ($latest_status_details[0]['status'] == '19') {
echo '<span class="text-warning">Round Robin</span>';
} else if ($latest_status_details[0]['status'] == '20') {
echo '<span class="text-warning">Lateral Flow - Inprocess</span>';
} else if ($latest_status_details[0]['status'] == '21') {
echo '<span class="text-warning">Lateral Flow - Closed</span>';
} else if ($latest_status_details[0]['status'] == '22') {
echo '<span class="text-success">Lateral Flow - Approved</span>';
} else if ($latest_status_details[0]['status'] == '23') {
echo '<span class="text-warning">Lateral Flow - Rejected</span>';
} else if ($latest_status_details[0]['status'] == '24') {
echo '<span class="text-error">Lateral Flow - Reject with closed</span>';
}
?>
</strong>
<!--<button id="btn_link_workflow_log" type="submit" class="btn btn-round-min btn btn-warning "><span><i class="icon-list"></i></span></button>-->
</h4>
</div>
</div>
<div class="span2">
<?php
// print_r($bvid);
// echo "+++++++++++++++++===";
// print_r($a_step_arr);
// echo $step_access;
$block_edit_status = array(1, 4, 5, 11, 15);
if (empty($step_access)) {
$active_user_id = $_SESSION[SESSION_VAR_NAME]['user_id'];
$dept_id = $_SESSION[SESSION_VAR_NAME]['dept_id'];
$active_wim_role_id = $_SESSION['active_wim_role_id'];
if ($bvalue_details[0]['processed_user'] == 1 && $wim_details[0]['a_status'] != 10) {
$already_processed_users = $Workflow->get_WIMStatus_All_User_Active($wim_details[0]['builder_id'], $wim_details[0]['record_set_id'], $bvid);
$already_processed_info = array_column($already_processed_users, 'user_id');
if (in_array($active_user_id, $already_processed_info)) {
$step_access = 1;
} else {
$step_access = 0;
}
}
if (empty($already_processed_users) && empty($step_access)) {
//$get_role = $WRole->getWorkflowAUserAssignedBuilderDetails($active_wim_role_id, $active_user_id, $dept_id);
$get_role = $WRole->getWorkflowAUserAssignedBuilderDetails($active_wim_role_id, $active_user_id, $wim_details[0]['builder_id'], $wim_details[0]['record_set_id'], $bvid);
if (empty($get_role) && $wim_details[0]['a_status'] != 10) {
$get_role = $WRole->getWorkflowAUserAssignedBuilderDetails_Asign_to_user($active_wim_role_id, $active_user_id, $wim_details[0]['builder_id'], $wim_details[0]['record_set_id'], $bvid);
}
if (empty(!$get_role)) {
$step_access = 1;
} else {
$step_access = 0;
}
// if($builder_details[0]['workflow_type'] == 2 && $active_wim_role_id == ''){
// $step_access = 1;
// }
if ($builder_details[0]['workflow_type'] == 2 && $active_wim_role_id == '0') {
$step_access = 0;
}
}
}
$imFileds_Lusers = $WRole->get_workflow_step_access_Lusers($pid, $bid, $bvid, $im_id, $im_rid, $_SESSION[SESSION_VAR_NAME]['user_id']);
if (!empty($imFileds_Lusers)) {
$step_access = 0;
}
if (isset($_GET['edit_step_access']) && $_GET['edit_step_access'] == 2) {
$step_access = 0;
}
if (!in_array($latest_status_details[0]['status'], $block_edit_status)) {
if ($step_access == 1 && in_array($bvid, $a_step_arr)) {
if ($parallel_step_running == 0) {
//$already_user_processed = $Workflow->get_WIMStatus_BId_UID($_SESSION[SESSION_VAR_NAME]['user_id'], $_SESSION[SESSION_VAR_NAME]['role'], $bid, $bvid, $im_rid);
//if (count($already_user_processed) <= 0) {
if (count($lateral_flow_steps_inprocess) <= 0) {
?>
<button class="buttonblink" style=" font-size: 11px;" href="#modal_status_dashboard1" data-toggle="modal" type="button" class=" "> <span style=" margin-right: 8px;"> <img src="../resources/images/Sign-off.png" style="height: 14px; margin-top: -4px; margin-left: 4px;"></span> Sign-off</button>
<?php
}
//}
}
}
}
?>
</div>
<!-- <div class="span6"></div> -->
</div>
</div>
<div class="span6"></div>
</div>
<!-- <div class="row-fluid"><div class="span12"></div></div> -->
<?php
if (count($lateral_flow_steps) > 0) {
$tab_active_lateral = "active";
$tab_active_other = "";
} else {
$tab_active_lateral = "";
$tab_active_other = "active";
}
?>
<div class="tab-widget">
<ul class="nav nav-tabs" id="myTab2">
<li class="<?php echo $tab_active_other; ?>" id="li_status_logs"><a href="#status_logs"><i class=" icon-list"></i> Status Logs</a></li>
<li id="li_status_recent"><a href="#status_recent"><i class="icon-cogs"></i> Recent Updates</a></li>
<li id="li_workflow_logs"><a href="#workflow_logs"><i class=" icon-list"></i> Workflow Logs</a></li>
<?php
if (count($lateral_flow_steps) > 0) {
?>
<li id="li_lateral_flow" class="<?php echo $tab_active_lateral; ?>"><a href="#div_tab_lateral_flow"><i class="icon-wrench"></i> Lateral Flow</a></li>
<?php
}
?>
</ul>
<div class="tab-content">
<div class="tab-pane " id="status_recent" style="margin: 10px 10px 10px 10px;">
<div class="post_list clearfix" >
<?php
$workflow_log_details = $Workflow->get_WIMStatus_BId_RID($bid, $im_rid);
if (count($workflow_log_details) <= 0) {
?>
<!--<div class="post_block clearfix">
<h6 class="">Records Unavailable!</h6>
</div>-->
<?php
} else {
for ($i = 0; $i < count($workflow_log_details); $i++) {
if ($_SESSION[SESSION_VAR_NAME]['role'] != 1 && $_SESSION[SESSION_VAR_NAME]['role'] != 2) {
$verify_notification_exists = $Workflow->getWorkflow_IM_Notification_ByStatusId('Status', $workflow_log_details[$i]['id'], $_SESSION[SESSION_VAR_NAME]['role'], $_SESSION[SESSION_VAR_NAME]['user_id']);
$no_notification_exists = count($verify_notification_exists);
if (empty($no_notification_exists)) {
$Workflow->setProjectId($pid);
$Workflow->setReffModule('Status');
$Workflow->setReffId($workflow_log_details[$i]['id']);
$Workflow->setUserId($_SESSION[SESSION_VAR_NAME]['user_id']);
$Workflow->setUserGroup($_SESSION[SESSION_VAR_NAME]['role']);
$Workflow->setCreatedAt(DATE_TIME);
$w_im_notification_add = $Workflow->add_workflow_notification();
}
}
$c_step_details = $WBuilder->get_WBuilderValue_Id($workflow_log_details[$i]['builder_value_id']);
$assigned_user_details = $User->getUserName_ById($workflow_log_details[$i]['created_by']);
$assinged_user = $assigned_user_details[0]['fname'] . ' ' . $assigned_user_details[0]['lname'];
//$signed_date = date('d m y', strtotime($workflow_log_details[$i]['created_at']));
/* if ($workflow_log_details[$i]['status'] == '1') {
$status = '<span class="label label-success">Approved</span>';
} else if ($workflow_log_details[$i]['status'] == '2') {
$status = '<span class="label label-inverse">Escalated</span>';
} else if ($workflow_log_details[$i]['status'] == '3') {
$status = '<span class="label label-important">Rejected</span';
} else {
$status = '<span class="label label-warning">Pending</span';
} */
if ($workflow_log_details[$i]['status'] == '0' || empty($workflow_log_details[$i]['status'])) {
$status = '<b class="text-warning">Pending</b>';
} else if ($workflow_log_details[$i]['status'] == '1') {
$status = '<b class="text-success">Approved</b>';
} else if ($workflow_log_details[$i]['status'] == '2') {
$status = '<b class="text-info">Escalated</b>';
} else if ($workflow_log_details[$i]['status'] == '3') {
$status = '<b class="text-error">Rejected</b>';
} else if ($workflow_log_details[$i]['status'] == '4') {
$status = '<b class="text-success">End as approval</b>';
} else if ($workflow_log_details[$i]['status'] == '5') {
$status = '<b class="text-error">End as rejected</b>';
} else if ($workflow_log_details[$i]['status'] == '6') {
$status = '<b class="text-inverse">Hold</b>';
} else if ($workflow_log_details[$i]['status'] == '7') {
$status = '<b class="text-info">Referred</b>';
} else if ($workflow_log_details[$i]['status'] == '7') {
$status = '<b class="text-info">Referred</b>';
} else if ($workflow_log_details[$i]['status'] == '9') {
$status = '<b class="text-warning">Force Closed</b>';
} else if ($workflow_log_details[$i]['status'] == '10') {
$status = '<b class="text-success">Approve => User</b>';
} else if ($workflow_log_details[$i]['status'] == '11') {
$status = '<b class="text-success">Approved with forward</b>';
} else if ($workflow_log_details[$i]['status'] == '12') {
$status = '<b class="text-error">Rejected with forward</b>';
} else if ($workflow_log_details[$i]['status'] == '13') {
$status = '<b class="text-error">Rejected with backward</b>';
} else if ($workflow_log_details[$i]['status'] == '14') {
$status = '<b class="text">Skiped</b>';
} else if ($workflow_log_details[$i]['status'] == '15') {
$status = '<b class="text">NA</b>';
} else if ($workflow_log_details[$i]['status'] == '16') {
$status = '<b class="text-warning">Delegate</b>';
} else if ($workflow_log_details[$i]['status'] == '17') {
$status = '<b class="text-warning">Flexiflow</b>';
} else if ($workflow_log_details[$i]['status'] == '18') {
$status = '<b class="text-warning">Assigned to user</b>';
} else if ($workflow_log_details[$i]['status'] == '19') {
$status = '<b class="text-warning">Round Robin</b>';
} else if ($workflow_log_details[$i]['status'] == '20') {
$status = '<b class="text-info">Lateral Flow - Inprocess</b>';
} else if ($workflow_log_details[$i]['status'] == '21') {
$status = '<b class="text-success">Lateral Flow - Closed</b>';
} else if ($workflow_log_details[$i]['status'] == '22') {
$status = '<b class="text-success">Lateral Flow - Approved</b>';
} else if ($workflow_log_details[$i]['status'] == '23') {
$status = '<b class="text-error">Lateral Flow - Rejected</b>';
} else if ($workflow_log_details[$i]['status'] == '24') {
$status = '<b class="text-error">Lateral Flow - Reject with closed</b>';
}
/* else {
$status = '<b class="text-warning">Pending</b>';
} */
?>
<div class="post_block clearfix">
<h6><a href="#"><?php echo $workflow_log_details[$i]['comment']; ?></a></h6>
<ul class="post_meta clearfix">
<li class=""><span>Signed By: </span> <a href="#"><?php echo $assinged_user; ?></a></li>
<li ><span>Date: </span> <a href="#"><?php
$cur_row_data = $workflow_log_details[$i]['created_at'];
$date = new DateTime($cur_row_data);
$new_date = $date->format('Y-m-d H:i');
//$new_date = $date->format('Y-m-d H:i');
echo $new_date;
?></a></li>
<li class=""><span>Step: </span><b><?php echo $c_step_details[0]['step_name']; ?></b></li>
<li><span>Status: </span><?php echo $status; ?></li>
</ul>
</div>
<?php
}
}
?>
</div>
</div>
<div class="tab-pane <?php echo $tab_active_other; ?>" id="status_logs">
<div class="content-box " id="div_status_logs_list" style="margin: 20px 20px 20px 20px;"></div>
</div>
<div class="tab-pane" id="workflow_logs" >
<div class="content-box " id="div_logs_list" style="margin: 20px 20px 20px 20px;"></div>
</div>
<div class="tab-pane <?php echo $tab_active_lateral; ?>" id="div_tab_lateral_flow" >
<div class="content-box " id="div_lateral_flow" style="margin: 20px 20px 20px 20px;"></div>
</div>
</div>
</div>
</div>
<div class="tab-pane <?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'tab-logs') {
echo 'active';
}
?> hide" id="tab-logs" style="margin: 10px 10px 10px 10px;">
<div class="row-fluid">
<div class="span6">
<div class="row-fluid">
<div class="span6">
<h4 class="pull-left">Workflow Status </h4>
</div>
<div class="span2">
<?php
$block_edit_status = array(1, 4, 5, 11, 15);
//echo $step_access;
if (!in_array($latest_status_details[0]['status'], $block_edit_status)) {
if ($step_access == 1 && in_array($bvid, $a_step_arr)) {
if ($parallel_step_running == 0) {
//$already_user_processed = $Workflow->get_WIMStatus_BId_UID($_SESSION[SESSION_VAR_NAME]['user_id'], $_SESSION[SESSION_VAR_NAME]['role'], $bid, $bvid, $im_rid);
//if (count($already_user_processed) <= 0) {
if (count($lateral_flow_steps_inprocess) <= 0) {
?>
<button class="buttonblink" style=" font-size: 11px;" href="#modal_status_dashboard1" data-toggle="modal" type="button" class=" "> <span style=" margin-right: 8px;"> <img src="../resources/images/Sign-off.png" style="height: 14px; margin-top: -4px; margin-left: 4px;"></span> Sign-off</button>
<?php
}
//}
}
}
}
?>
</div>
</div>
</div>
<div class="span6">
</div>
</div>
<div class="content-box " id="div_logs_list"></div>
</div>
<div class="tab-pane <?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'tab-referral') {
echo 'active';
}
?>" id="tab-referral" style="margin: 10px 10px 10px 10px;">
<div class="content-box " id="div_referral_list">
<table class="table table-responsive table-bordered table-striped">
<thead>
<tr>
<th>
#
</th>
<th>
Name
</th>
<th>
Username
</th>
<th>
Date
</th>
<th>
Action
</th>
</tr>
</thead>
<tbody>
<?php
$wim_rrole_users2 = $WBuilder->get_workflow_im_ArolesReferrel_ByBvidRId($im_id, $im_rid, $bvid);
//echo count($wim_rrole_users2);
//print_r($wim_rrole_users2);
if (count($wim_rrole_users2) > 0) {
for ($x = 0; $x < count($wim_rrole_users2); $x++) {
$referral_user_info = $User->getUsers_ById($wim_rrole_users2[$x]['user_id']);
?>
<tr>
<td><?php echo $x + 1; ?></td>
<td><?php echo $referral_user_info[0]['fname'] . ' ' . $referral_user_info[0]['lname'] . ' ' . $referral_user_info[0]['mname']; ?></td>
<td><?php echo $referral_user_info[0]['username']; ?></td>
<td><?php echo $wim_rrole_users2[$x]['created_at']; ?></td>
<td>
<button id="<?php echo $im_id . '-' . $im_rid . '-' . $bvid . '-' . $wim_rrole_users2[$x]['user_id'] . '-' . $wim_id; ?>" type="button" class="btn btn-round-min btn-danger btn_close_referral" title="Close"><span><i class="icon-remove"></i></span></button>
</td>
</tr>
<?php
}
} else {
?>
<tr>
<td colspan="5">
<span class="label label-important">Records Unavailable!</span>
</td>
</tr>
<?php
}
?>
</tbody>
</table>
</div>
</div>
<div class="tab-pane <?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'tab-imvalues') {
echo 'active';
}
?>" id="tab-imvalues" style="margin: 10px 10px 10px 10px;">
<div class="row-fluid">
<div class="span6">
<div class="row-fluid">
<div class="span6">
<h4 class="pull-left">Workflow Status </h4>
</div>
<div class="span2">
<?php
$block_edit_status = array(1, 4, 5, 11, 15);
//echo $step_access;
if (!in_array($latest_status_details[0]['status'], $block_edit_status)) {
if ($step_access == 1 && in_array($bvid, $a_step_arr)) {
if ($parallel_step_running == 0) {
//$already_user_processed = $Workflow->get_WIMStatus_BId_UID($_SESSION[SESSION_VAR_NAME]['user_id'], $_SESSION[SESSION_VAR_NAME]['role'], $bid, $bvid, $im_rid);
//if (count($already_user_processed) <= 0) {
if (count($lateral_flow_steps_inprocess) <= 0) {
?>
<button class="buttonblink" style=" font-size: 11px;" href="#modal_status_dashboard1" data-toggle="modal" type="button" class=" "> <span style=" margin-right: 8px;"> <img src="../resources/images/Sign-off.png" style="height: 14px; margin-top: -4px; margin-left: 4px;"></span> Sign-off</button>
<?php
}
//}
}
}
}
?>
</div>
</div>
</div>
<div class="span6">
<div class="btn-toolbar profile-toolbar pull-right">
<div title="Form Report" class="btn-group pull-right"> <a href="#" class=" btn btn-icon btn-success" id="form_report_export"><i class="icon-print" style="margin-right: 1px;"></i>Pdf Report</a> </div>
</div>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<div class="content-widgets light-gray">
<!--<div class="widget-head blue">
<h3><?php echo $index_master_details[0]['index_master']; ?>
</h3>
</div>-->
<div class="widget-container">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>
Field Name
</th>
<th colspan = "2">
Value
</th>
</tr>
</thead>
<tbody>
<?php
if ($index_master_details[0]['id'] == $master_info[0]['id']) {
$details = $IMASTER->getFieldExtend_ById($enfa_details[0]['name_of_project']);
$name_of_project = $details[0]['field_value'];
$details = $IMASTER->getFieldExtend_ById($enfa_details[0]['function_name']);
$function = $details[0]['field_value'];
$details = $IMASTER->getFieldExtend_ById($enfa_details[0]['approver_1']);
$approver_1 = $details[0]['field_value'];
$details = $IMASTER->getFieldExtend_ById($enfa_details[0]['approver_2']);
$approver_2 = $details[0]['field_value'];
$details = $IMASTER->getFieldExtend_ById($enfa_details[0]['approver_3']);
$approver_3 = $details[0]['field_value'];
?>
<tr>
<td>Title</td>
<td colspan = "2"><p><?php echo $enfa_details[0]['title'] ?></p></td>
</tr>
<tr>
<td>Name of Project</td>
<td colspan = "2"><?php echo $name_of_project; ?></td>
</tr>
<tr>
<td>Name of Element</td>
<td colspan = "2"><?php echo $enfa_details[0]['name_of_element'] ?></td>
</tr>
<tr>
<td>Type Of Approval Note</td>
<td colspan = "2"><?php echo $enfa_details[0]['type_of_approval_note'] ?></td>
</tr>
<tr>
<td>Function</td>
<td colspan = "2"><?php echo $function ?></td>
</tr><tr>
<td>eNFA Ref. No</td>
<td colspan = "2"><?php echo $enfa_details[0]['enfa_ref_no'] ?></td>
</tr><tr>
<td>Brief Summary</td>
<td colspan = "2"><?php echo $enfa_details[0]['brief_summary'] ?></td>
</tr><tr>
<td>Recommendation</td>
<td colspan = "2"><?php echo $enfa_details[0]['recommendation'] ?></td>
</tr><tr>
<td>Selected Vendor</td>
<td colspan = "2"><?php echo $enfa_details[0]['selected_vendor'] ?></td>
</tr><tr>
<td>PO or NON-PO based Approval</td>
<td colspan = "2"><?php echo $enfa_details[0]['approval_based'] ?></td>
</tr><tr>
<td>NON PO Based Expenses</td>
<td colspan = "2"><?php echo $enfa_details[0]['non_poapproval_expenses'] ?></td>
</tr><tr>
<td>Budgeted / Non Budgeted</td>
<td colspan = "2"><?php echo $enfa_details[0]['budgeted_nonbudgeted'] ?></td>
</tr>
<tr>
<td>Budget for this Scope</td>
<td colspan = "2"><?php echo $enfa_details[0]['budget_for_scope'] ?></td>
</tr>
<tr>
<td>Order Value</td>
<td colspan = "2"><?php echo $enfa_details[0]['order_value'] ?></td>
</tr>
<tr>
<td>User/Purchase Requisition Date</td>
<td colspan = "2"><?php echo $enfa_details[0]['requisition_date'] ?></td>
</tr>
<tr>
<td>SAP Purchase Requisition No</td>
<td colspan = "2"><?php echo $enfa_details[0]['requisition_no'] ?></td>
</tr>
<tr>
<td>Payment Terms</td>
<td colspan = "2"><?php echo $enfa_details[0]['payment_terms'] ?></td>
</tr>
<tr>
<td>Any Special Approval</td>
<td colspan = "2"><?php echo $enfa_details[0]['special_approval'] ?></td>
</tr>
<tr>
<td>Detail of taxes applicable</td>
<td colspan = "2"><?php echo $enfa_details[0]['tax_applicable'] ?></td>
</tr>
<tr>
<td>Completion period of scope of work</td>
<td colspan = "2"><?php echo $enfa_details[0]['period_of_work'] ?></td>
</tr>
<tr>
<td>Liquidated Damage</td>
<td colspan = "2"><?php echo $enfa_details[0]['liquidated_damage'] ?></td>
</tr>
<tr>
<td>Defect Liability Period</td>
<td colspan = "2"><?php echo $enfa_details[0]['liability_period'] ?></td>
</tr>
<tr>
<td>BG Details (ABG, CPBG, PBG, Corporate BG)</td>
<td colspan = "2"><?php echo $enfa_details[0]['bg_details'] ?></td>
</tr>
<tr>
<td>Other Special terms and Condition, if any.</td>
<td colspan = "2"><?php echo $enfa_details[0]['terms_condition'] ?></td>
</tr>
<tr>
<td>Exception from Policy</td>
<td colspan = "2"><?php echo $enfa_details[0]['exception'] ?></td>
</tr>
<tr>
<td>FYI</td>
<td colspan = "2"><?php echo $enfa_details[0]['fyi'] ?></td>
</tr>
<tr>
<td>Initiated By</td>
<td colspan = "2"><?php
$User = new user($db);
$user_details = $User->getUsers_ById($enfa_details[0]['created_by']);
echo $user_details[0]['fname'] . ' ' . $user_details[0]['mname'] . ' ' . $user_details[0]['lname'];
?></td>
</tr>
<tr>
<td>Initiated On</td>
<td colspan = "2"><?php
$cur_row_data = $enfa_details[0]['created_at'];
$date = new DateTime($cur_row_data);
$new_date = $date->format('Y-m-d H:i');
echo $new_date;
?></td>
</tr>
</tbody></table>
<br>
<table class="table table-responsive table-bordered table-striped"><tbody>
<tr><th colspan="3" style="align: center;"> BIDDER DETAILS </th></tr>
<?php
if ($enfa_details) {
?>
<tr>
<th>Name Of the Bidder</th>
<th>Offer Received</th>
<th>Technically Acceptable</th>
</tr>
<?php foreach ($bidder_details as $bd) { ?>
<tr>
<td><?php echo $bd['name_of_bidder']; ?></td>
<td><?php echo $bd['offer_received']; ?></td>
<td><?php echo $bd['technically_acceptable']; ?></td>
</tr>
<?php
}
}
?>
</tbody></table>
<table class="table table-bordered table-striped">
<tbody>
<tr><td colspan="3"><b>APPROVER DETAILS </b></td></tr>
<tr><th><b>Approver 1</b></th>
<td><?php echo $approver_1 ?></td>
</tr><tr>
<th><b>Approver 2</b></th>
<td><?php echo $approver_2 ?></td>
</tr>
<tr>
<th><b>Approver 3</b></th>
<td><?php echo $approver_3 ?></td>
</tr>
</tbody></table>
<table>
<table class="table table-bordered table-striped">
<tbody>
<tr><td colspan="3"><b>Exception DETAILS </b></td></tr>
<tr><th><b> DY Exception</b></th>
<td><?php echo $enfa_details[0]['exception_4'] ?></td>
</tr>
<tr><th><b> CFO Exception</b></th>
<td><?php echo $enfa_details[0]['exception_1'] ?></td>
</tr><tr>
<th><b> COO Exception</b></th>
<td><?php echo $enfa_details[0]['exception_2'] ?></td>
</tr>
<tr>
<th><b> CEO Exception</b></th>
<td><?php echo $enfa_details[0]['exception_3'] ?></td>
</tr>
</tbody></table>
<?php
} else {
for ($i = 0; $i < count($index_field_details); $i++) {
if ($index_field_details[$i]['unique_f'] == 1) {
$d_field_name = "<strong>" . $index_field_details[$i]['field_name'] . "</strong>";
} else {
$d_field_name = $index_field_details[$i]['field_name'];
}
$d_field_name_table = $index_field_details[$i]['field_name_table'];
?>
<tr>
<td>
<?php echo $d_field_name; ?>
</td>
<td>
<?php
//echo $index_field_details[$i]['field_type'];
if ($index_field_details[$i]['field_type'] == 'Select Menu') {
$details = $IMASTER->getFieldExtend_ById($index_value_details[0][$d_field_name_table]);
$field_value = $details[0]['field_value'];
if (empty($field_value) && $field_value == '') {
echo '--';
} else {
echo $field_value;
}
} else if ($index_field_details[$i]['field_type'] == 'Checkbox' || $index_field_details[$i]['field_type'] == 'Radio') {
$imfield_checkradio_ids = explode(",", $index_value_details[0][$d_field_name_table]);
$field_value_arr = array();
for ($chrd = 0; $chrd < count($imfield_checkradio_ids); $chrd++) {
$details = $IMASTER->getFieldExtend_ById($imfield_checkradio_ids[$chrd]);
array_push($field_value_arr, $details[0]['field_value']);
}
$field_value = implode(",", $field_value_arr);
if (empty($field_value) && $field_value == '') {
echo '--';
} else {
echo $field_value;
}
} else {
if (empty($index_value_details[0][$d_field_name_table]) && $index_value_details[0][$d_field_name_table] == '') {
echo '--';
} else {
// echo $index_value_details[0][$d_field_name_table];
if (strpos($index_value_details[0][$d_field_name_table], 'data') === 0) {
?>
<iframe class="frame" height="100"src="<?php echo $index_value_details[0][$d_field_name_table]; ?>"></iframe>
<?php
} else {
echo $index_value_details[0][$d_field_name_table];
}
}
}
?>
</td>
</tr>
<?php
$s_value_id = '';
$s_field_value = '';
}
?>
<tr>
<td>Added By</td>
<td><?php
$User = new user($db);
$user_details = $User->getUsers_ById($index_value_details[0]['added_by']);
echo $user_details[0]['fname'] . ' ' . $user_details[0]['mname'] . ' ' . $user_details[0]['lname'];
?></td>
</tr>
<tr>
<td>Added On</td>
<td><?php
$cur_row_data = $index_value_details[0]['log_datetime'];
$date = new DateTime($cur_row_data);
$new_date = $date->format('Y-m-d H:i');
echo $new_date;
?></td>
</tr>
</tbody></table>
<?php } ?>
<table><tbody>
<?php
$builder_first_step_info = $WBuilder->get_WBuilderValue_First_BId($bid);
if ($step_access == 1 && in_array($bvid, $a_step_arr)) {
if ($index_master_details[0]['id'] == $master_info[0]['id']) {
?> <tr><td colspan="3">
<div class="form-actions"> <a target="_blank" href="../index.php?rq=<?php echo encrypt_url('enfa/enfa_editForm.php', APP_ENCRYPTION_SALT); ?>&record_id=<?php echo encrypt_url($im_rid, APP_ENCRYPTION_SALT); ?>&id=<?php echo encrypt_url($enfa_details[0]['id'], APP_ENCRYPTION_SALT); ?>&pid=<?php echo encrypt_url($pid, APP_ENCRYPTION_SALT); ?>&edit_filter=<?php echo $edit_filter; ?>">
<button type="button" class="btn btn-success">Edit</button>
</a> <?php
} else {
$imaster_form = new imaster_form($db);
$imaster_form_details = $imaster_form->getFormByImasterId($im_id);
if (empty($imaster_form_details)) {
?>
<td colspan="2">
<div class="form-actions">
<a target="_blank" href="../index.php?rq=<?php echo encrypt_url('index_master/ivalue_editform.php', APP_ENCRYPTION_SALT); ?>&record_id=<?php echo encrypt_url($im_rid, APP_ENCRYPTION_SALT); ?>&id=<?php echo $im_id; ?>&pid=<?php echo encrypt_url($pid, APP_ENCRYPTION_SALT); ?>&edit_filter=<?php echo $edit_filter; ?>">
<button type="button" class="btn btn-success">Edit</button>
</a>
<?php
}
}
}
?>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="tab-pane <?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'tab-template') {
echo 'active';
}
if (count($template_details) <= 0) {
echo "hide";
}
?>" id="tab-template" style="margin: 10px 10px 10px 10px;">
<?php if (count($template_details) > 0) { ?>
<span class="label label-important btn-edit-value" id="<?php echo encrypt_url($im_rid, APP_ENCRYPTION_SALT) . '_' . $im_id; ?>">Edit Value</span><br>
<div class="span12 scroll" style="height: 805px;width:100%">
<textarea readonly="true" id="elm1" name="elm1" cols="150" style="width: 100%" class="tinymce"><?php echo $template_details[0]['content']; ?></textarea>
</div>
<?php
} else {
echo '<span class="label">Record Unavailable!</span>';
}
?>
</div>
<div class="tab-pane <?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'tab-forms') {
echo 'active';
}
if (count($previous_dynamic_forms) <= 0 && count($step_dynamic_forms) <= 0 && count($previous_static_forms) <= 0 && count($step_static_forms) <= 0) {
echo "hide";
}
?>" id="tab-forms" style="margin: 10px 10px 10px 10px;">
<div class="row-fluid">
<div class="span6">
<div class="row-fluid">
<div class="span6">
<h4 class="pull-left">Workflow Status </h4>
</div>
<div class="span2">
<?php
$block_edit_status = array(1, 4, 5, 11, 15);
//echo $step_access;
if (!in_array($latest_status_details[0]['status'], $block_edit_status)) {
if ($step_access == 1 && in_array($bvid, $a_step_arr)) {
if ($parallel_step_running == 0) {
//$already_user_processed = $Workflow->get_WIMStatus_BId_UID($_SESSION[SESSION_VAR_NAME]['user_id'], $_SESSION[SESSION_VAR_NAME]['role'], $bid, $bvid, $im_rid);
//if (count($already_user_processed) <= 0) {
if (count($lateral_flow_steps_inprocess) <= 0) {
?>
<button class="buttonblink" style=" font-size: 11px;" href="#modal_status_dashboard1" data-toggle="modal" type="button" class=" "> <span style=" margin-right: 8px;"> <img src="../resources/images/Sign-off.png" style="height: 14px; margin-top: -4px; margin-left: 4px;"></span> Sign-off</button>
<?php
}
//}
}
}
}
?>
</div>
</div>
</div>
<div class="span6">
</div>
</div>
<?php
if (count($previous_dynamic_forms) > 0 || count($step_dynamic_forms) > 0 || count($previous_static_forms) > 0 || count($step_static_forms) > 0) {
?>
<ul class="nav nav-tabs" id="myTab">
<?php
$incr_x = 0;
foreach ($previous_dynamic_forms as $pre_dyform) {
$pre_dyform_im_id = $pre_dyform['im_id'];
$pre_dyform_im_info = $IMASTER->getIndexMasterByID($pre_dyform_im_id);
if ($incr_x == 0) {
$pre_form_status = 'active';
$pre_form_status_trigger = 1;
} else {
$pre_form_status = '';
//$pre_form_status_trigger = 0;
}
?>
<li class="<?php echo $pre_form_status; ?>"><a href="#tab-pre-form-<?php echo $pre_dyform_im_id; ?>"><i class="icon-file"></i> <?php echo $pre_dyform_im_info[0]['index_master']; ?> - Form</a></li>
<?php
$incr_x++;
}
?>
<?php
$incr_x = 0;
foreach ($step_dynamic_forms as $dyform) {
$dyform_im_id = $dyform['im_id'];
$dyform_im_info = $IMASTER->getIndexMasterByID($dyform_im_id);
if ($incr_x == 0) {
if ($pre_form_status_trigger == 0) {
$dyform_im_status = 'active';
}
} else {
$dyform_im_status = '';
}
//echo 'tab-form-'.$pre_form_status_trigger;
?>
<li class="<?php echo $dyform_im_status; ?>"><a href="#tab-form-<?php echo $dyform_im_id; ?>"><i class="icon-file"></i> <?php echo $dyform_im_info[0]['index_master']; ?> - Form</a></li>
<?php
$incr_x++;
}
?>
<?php
foreach ($previous_static_forms as $pre_sform) {
$pre_sform_tb_name = $pre_sform['table_name'];
if ($pre_sform_tb_name == 'static_legal') {
$sform_tb_name_str = "Coder";
}
?>
<li><a href="#tab-pre-sform-<?php echo $pre_sform_tb_name; ?>"><i class="icon-file"></i> <?php echo $sform_tb_name_str; ?> - Form</a></li>
<?php
}
?>
<?php
foreach ($step_static_forms as $sform) {
$sform_tb_name = $sform['table_name'];
if ($sform_tb_name == 'static_legal') {
$sform_tb_name_str = "Coder";
}
?>
<li><a href="#tab-sform-<?php echo $sform_tb_name; ?>"><i class="icon-file"></i> <?php echo $sform_tb_name_str; ?> - Form</a></li>
<?php
}
?>
</ul>
<div class="tab-content">
<?php
include 'wim_editform_dy_im.php';
?>
</div>
<?php
} else {
echo '<div class="row-fluid"><div class="span12"><span class="label">Records Unavailable!</span></div></div>';
}
?>
</div>
<div class="tab-pane <?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'tab-files') {
echo 'active';
}
?>" id="tab-files" style="margin: 10px 10px 10px 10px;">
<div class="row-fluid">
<div class="span6">
<div class="row-fluid">
<div class="span6">
<h4 class="pull-left">Workflow Status </h4>
</div>
<div class="span2">
<?php
$block_edit_status = array(1, 4, 5, 11, 15);
//echo $step_access;
if (!in_array($latest_status_details[0]['status'], $block_edit_status)) {
if ($step_access == 1 && in_array($bvid, $a_step_arr)) {
if ($parallel_step_running == 0) {
//$already_user_processed = $Workflow->get_WIMStatus_BId_UID($_SESSION[SESSION_VAR_NAME]['user_id'], $_SESSION[SESSION_VAR_NAME]['role'], $bid, $bvid, $im_rid);
//if (count($already_user_processed) <= 0) {
if (count($lateral_flow_steps_inprocess) <= 0) {
?>
<button class="buttonblink" style=" font-size: 11px;" href="#modal_status_dashboard1" data-toggle="modal" type="button" class=" "> <span style=" margin-right: 8px;"> <img src="../resources/images/Sign-off.png" style="height: 14px; margin-top: -4px; margin-left: 4px;"></span> Sign-off</button>
<?php
}
//}
}
}
}
?>
</div>
</div>
</div>
<div class="span6">
</div>
</div>
<div class="row-fluid">
<div class="tab-widget" style="margin: 10px 0px 10px 0px;">
<ul class="nav nav-tabs" id="myTab2">
<li class="active"><a href="#tab-docset"><i class="icon-file-alt"></i> Doc-Set Files</a></li>
<!--<li class="<?php
if (!empty($_REQUEST['a_tab_sub']) && $_REQUEST['a_tab_sub'] == 'tab-attachment') {
echo 'active';
}
?>"><a href="#tab-attachment"><i class="icon-paper-clip"></i> Attachments</a></li>-->
<li class="<?php
if (!empty($_REQUEST['a_tab_sub']) && $_REQUEST['a_tab_sub'] == 'tab-docset-missing') {
echo 'active';
}
?>"><a href="#tab-docset-missing"><i class="icon-file"></i> Doc-Set Missing Files</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="tab-docset" style="margin: 10px 10px 10px 10px;">
<?php
//=============================
// DOC SET RULE
//=============================
$wim_info = $Workflow->getWIM_ByID($wim_id);
$im_id = $wim_info[0]['im_id'];
$record_info = $WBuilder->get_workflow_builder_docset_rule_BVID($pid, $bid, $bvid);
$no_record_info = count($record_info);
$IMASTER = new index_master($db);
$IMASTER->setRecordId($im_rid);
$index_value_details = $IMASTER->getIndexValue_ByRecordSetId($im_id);
$index_field_details = $IMASTER->getIndexFieldUser($im_id, $_SESSION[SESSION_VAR_NAME]['role']);
//print_r($index_field_details);
$required_docset = array();
for ($i = 0; $i < $no_record_info; $i++) {
$rule_imf_id = $record_info[$i]['imf_id'];
$current_field_info = $IMASTER->getIndexField_ById($rule_imf_id);
if ($current_field_info[0]['field_type'] == 'Select Menu' || $current_field_info[0]['field_type'] == 'Checkbox' || $current_field_info[0]['field_type'] == 'Radio') {
$d_field_name_table = $current_field_info[0]['field_name_table'];
$details = $IMASTER->getFieldExtend_ById($index_value_details[0][$d_field_name_table]);
$im_field_val = $details[0]['field_value'];
if (strcmp($record_info[$i]['imf_value'], $im_field_val) == 0) {
/* $WBuilder->setProjectId($record_info[0]['project_id']);
$WBuilder->setBuilderId($record_info[0]['builder_id']);
$WBuilder->setBuilderValueId($record_info[0]['builder_value_id']);
$WBuilder->setImId($record_info[0]['im_id']);
$WBuilder->setImfId($record_info[0]['imf_id']);
echo $record_info[$i]['id']; */
$docset_rule_info = $WBuilder->get_wf_docset_rule_ByRuleId_Mandatory($record_info[$i]['id']);
//print_r($docset_rule_info);
$docset_ids = array_column($docset_rule_info, 'doc_set_value_id');
foreach ($docset_ids as $value) {
array_push($required_docset, $value);
}
}
} else {
//$im_field_val = $index_value_details["im_field_" . $rule_imf_id];
$im_field_val_arr = array_column($index_value_details, "im_field_" . $rule_imf_id);
//print_r($im_field_val_arr);
if (in_array($record_info[$i]['imf_value'], $im_field_val_arr)) {
$key = array_search($record_info[$i]['imf_value'], $im_field_val_arr);
$im_field_val = $im_field_val_arr[$key];
if (strcmp($record_info[$i]['imf_value'], $im_field_val) == 0) {
/* $WBuilder->setProjectId($record_info[0]['project_id']);
$WBuilder->setBuilderId($record_info[0]['builder_id']);
$WBuilder->setBuilderValueId($record_info[0]['builder_value_id']);
$WBuilder->setImId($record_info[0]['im_id']);
$WBuilder->setImfId($record_info[0]['imf_id']);
echo $record_info[$i]['id']; */
$docset_rule_info = $WBuilder->get_wf_docset_rule_ByRuleId_Mandatory($record_info[$i]['id']);
//print_r($docset_rule_info);
$docset_ids = array_column($docset_rule_info, 'doc_set_value_id');
foreach ($docset_ids as $value) {
array_push($required_docset, $value);
}
}
}
}
}
//print_r($required_docset);
//=============================
// DOC SET RULE
//=============================
?>
<script nonce=<?php echo $_SESSION[SESSION_VAR_NAME]['usernonce']; ?>>
$(document).ready(function () {
$(document).on("click", '#span_mandatory_docset', function () {
var footer_popup_primary = [
{
item: "<button type='button'></button>",
event: jsPanel.evtStart,
btnclass: "btn btn-danger btn-sm",
btntext: " Close",
callback: function (event) {
event.stopPropagation();
event.data.close();
}
}
];
var tb = '<i class="fa fa-user"></i><i class="fa fa-cog"> ';
var mypanel = $.jsPanel({
contentSize: {width: 650, height: 350},
//headerControls: {controls: "closeonly"},
headerTitle: ' Doc-Set Mandatory List*',
//resizable: "disabled",
//content: stuff,
position: "top",
theme: '#862560',
contentAjax: {
url: 'workflow_im_docset_mandatory_info.php?pid=<?php echo $pid; ?>&im_id=<?php echo $im_id; ?>&rid=<?php echo $imr_id; ?>&bid=<?php echo $bid; ?>&bvid=<?php echo $bvid; ?>&mdocset=<?php echo urlencode(join(",", $required_docset)); ?>',
autoload: true
},
footerToolbar: footer_popup_primary
});
});
});
</script>
<div class="btn-group" style="margin-bottom: 5px;">
<button class="btn btn-primary">Action</button>
<button data-toggle="dropdown" class="btn btn-primary dropdown-toggle"><span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="#" id="doc_bulk_download_link" name = "doc_bulk_download_link" >Document bulk download</a></li>
<li><a href="#" id="send_documents" name = "send_documents" >Send Documents</a></li>
</ul>
</div>
<?php
if (count($required_docset) > 0) {
?>
<span id="span_mandatory_docset" class="label label-important" style="margin: -20px 0px 5px 0px;cursor: pointer;">Mandatory Doc-set*</span>
<?php
}
?>
<?php
for ($i = 0; $i < $no_attachments_list; $i++) {
$record_details = $File->getDoc_ByID($attachments_list[$i]['file_name']);
?>
<input type="hidden" id='uploaded_docset_re' name="uploaded_docset_re[]" value="<?php echo $record_details[0]['doc_type']; ?>">
<?php
}
?>
<input type="hidden" id='mandatory_docset' name="mandatory_docset" value="<?php echo join(',', $required_docset); ?>">
<?php
$qc_access = 0;
foreach ($role_usergroups as $role_usergroup) {
if ($_SESSION[SESSION_VAR_NAME]['role'] == $role_usergroup['user_group_id']) {
$qc_access = 1;
}
}
if ($qc_access == 1 && $bvalue_details[0]['qc_approve_docs'] == 1) {
?>
<a href="#change_status" data-toggle="modal" id="change_sta"><button style=width:100px;height:25px;margin-bottom:3px;" class="btn-primary">QC Approval</button></a>
<?php
}
if (in_array($_SESSION[SESSION_VAR_NAME]['user_id'], $lateral_inprocess_users) || ($step_access == 1 && in_array($bvid, $a_step_arr))) {
$block_upload_doc_wf_arr = array(1, 4, 5, 6, 14, 15);
if (!in_array($wim_details[0]['a_status'], $block_upload_doc_wf_arr)) {
?>
<a class="pull-right a_new_attachment" title="add attachment" style="cursor:pointer;"><span class="badge badge-success" style="height:20px;"><i class="fa fa-upload" aria-hidden="true"></i></span></a>
<?php
}
}
?>
<style>
#doc_set_datatable{
width:100% !important;
}
</style>
<form class="form-horizontal left-align" id="form-docsets-datatable" method="POST" action="#">
<div style="width:100% !important; height: 100%; overflow:auto !important">
<table class="table table-bordered table-striped" id="doc_set_datatable">
<thead>
<th align="center"style="width:5px;"><input type="checkbox" id="docset_attachments_selectall" ></th>
<th>Doc Id</th>
<!--<th>Document No</th>-->
<th>Document Title</th>
<th>Doc Type</th>
<th>Comments</th>
<th>Uploaded By</th>
<th>Uploaded At</th>
<th>Action</th>
</thead>
<tbody>
</tbody>
</table>
</div>
</form>
</div>
<!--<div class="tab-pane <?php
if (!empty($_REQUEST['a_tab_sub']) && $_REQUEST['a_tab_sub'] == 'tab-attachment') {
echo 'active';
}
?>" id="tab-attachment" style="margin: 10px 10px 10px 10px;">
<div>
<div class="row-fluid">
<div class="span12">
<div class="widget-header-block">
<?php
if ($step_access == 1 && in_array($bvid, $a_step_arr)) {
$block_upload_doc_wf_arr = array(1, 4, 5, 6, 14, 15);
if (!in_array($wim_details[0]['a_status'], $block_upload_doc_wf_arr)) {
?>
<a class="pull-right a_new_attachment" title="add attachment" style="cursor:pointer;"><span class="badge badge-success" style="height:20px;"><i class="fa fa-upload" aria-hidden="true"></i></span></a>
<?php
}
}
?>
</div>
</div>
</div>
<div class="content-box " id="div_attachments">
</div>
</div>
</div>-->
<div class="tab-pane <?php
if (!empty($_REQUEST['a_tab_sub']) && $_REQUEST['a_tab_sub'] == 'tab-docset-missing') {
echo 'active';
}
?>" id="tab-docset-missing" style="margin: 10px 10px 10px 10px;">
<div id="docset-missing"></div>
</div>
</div>
</div>
</div>
<!--div class="row-fluid">
<?php
if ($_SESSION[SESSION_VAR_NAME]['wf_view_type'] == 2) {
?>
<div class="tab-widget" style="margin: 10px 10px 10px 10px;">
<ul class="nav nav-tabs" id="myTab2">
<li class="active"><a href="#tab-filepreview"><i class="icon-eye-open"></i> Preview</a></li>
<li class="<?php
if (!empty($_REQUEST['a_tab_sub2']) && $_REQUEST['a_tab_sub2'] == 'tab-fileinfo') {
echo 'active';
}
?>"><a href="#tab-fileinfo"><i class=" icon-file-alt"></i> Information</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="tab-filepreview">
<div style="margin: 10px 10px 10px 10px;" id="div_file_preview">
Record Unavailable!
</div>
</div>
<div class="tab-pane <?php
if (!empty($_REQUEST['a_tab_sub2']) && $_REQUEST['a_tab_sub2'] == 'tab-fileinfo') {
echo 'active';
}
?>" id="tab-fileinfo">
<div style="margin: 10px 10px 10px 10px;" id="div_file_info">
Record Unavailable!
</div>
</div>
</div>
</div>
<?php
}
?>
</div-->
</div>
<div class="tab-pane <?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'tab-tasks') {
echo 'active';
}
if ($no_tasklist_info <= 0) {
echo "hide";
}
?>" id="tab-tasks" >
<?php
$workflowstep_details = $WBuilder->get_WBuilderValue_BId($bid);
$workflowstep_no = count($workflowstep_details);
// for(){
?>
<div class="accordion" id="accordion2" style="margin: 10px 10px 10px 10px;">
<?php
for ($i = 0; $i < $workflowstep_no; $i++) {
$step_info = $WBuilder->get_WBuilderValue_Id($workflowstep_details[$i]['id']);
$accordion_bvid = $step_info[0]['id'];
$accordion_reff = 'accordion_step_' . $i;
if ($accordion_bvid == $bvid) {
$accordion_collapse = 'in';
} else {
$accordion_collapse = '';
}
?>
<div class="accordion-group">
<div class="accordion-heading">
<a href="#<?php echo $accordion_reff; ?>" data-parent="#accordion2" data-toggle="collapse" class="accordion-toggle"><?php echo $step_info[0]['step_name']; ?></a>
</div>
<div class="accordion-body collapse <?php echo $accordion_collapse; ?>" id="<?php echo $accordion_reff; ?>">
<div class="accordion-inner" style="background-color: #FFF5F5">
<?php
$tasklist_info_acc = $WBuilder->getBuilderTask_ByValueId($step_info[0]['id']);
$no_tasklist_info_acc = count($tasklist_info_acc);
?>
<table class="table table-bordered " style="margin: 10px 0px 10px 0px;">
<thead>
<tr>
<th style="width:5%">
#
</th>
<th style="width:25%">
Task
</th>
<th style="width:70%">
Task Details
</th>
</tr>
</thead>
<tbody>
<?php
if (empty($no_tasklist_info_acc)) {
?>
<tr>
<td colspan="3">Task Unavailable!</td>
</tr>
<?php
} else {
for ($x = 0; $x < $no_tasklist_info_acc; $x++) {
$task_info = $Tasklist->getTaskList_ByID($tasklist_info_acc[$x]['task_id']);
$task_display_type = $tasklist_info_acc[$x]['task_display_type'];
$task_child_values = $WBuilder->getBuilderTaskChild_ByBTId($tasklist_info_acc[$x]['id']);
if (!in_array($accordion_bvid, $a_step_arr)) {
$check_box_class = 'disabled readonly';
} else if ($step_access == 1 && in_array($accordion_bvid, $a_step_arr)) {
$check_box_class = '';
}
?>
<tr>
<td>
<?php echo $x + 1; ?>
</td>
<td>
<p title="<?php echo $task_info[0]['description']; ?>" class="table_tool_link" style="cursor: pointer;">
<?php
echo $task_info[0]['task_name'];
?>
</p>
</td>
<td>
<?php
if (count($task_child_values) > 0) {
?>
<table class="table table-bordered responsive">
<tbody>
<ul class="task-list">
<?php
$rand = rand(999, 999999);
foreach ($task_child_values as $task_child_value) {
$im_child_task = $Workflow->getWorkflow_IM_TaskChild_ByBTId($wim_id, $tasklist_info_acc[$x]['id'], $task_child_value['id'], $im_rid);
if (count($im_child_task) > 0) {
$checked = 'checked="checked"';
} else {
$checked = '';
}
if ($im_child_task[0]['n_a'] == 1) {
$disable_taskchild = "disabled";
$checked = '';
$na_checked = 'checked="checked"';
} else {
$disable_taskchild = '';
$checked = $checked;
$na_checked = '';
}
if ($task_child_value['mandatory'] == 1) {
$task_mandatory = '<sup class="text-error lead">*</sup>';
} else {
$task_mandatory = '';
}
?>
<tr>
<td>
<?php
if ($task_display_type == 1) {
?>
<input <?php echo $disable_taskchild; ?> <?php echo $check_box_class; ?> <?php echo $checked; ?> value="<?php echo $tasklist_info_acc[$x]['task_id'] . ':' . $task_child_value['id']; ?>" itemref="<?php echo $tasklist_info_acc[$x]['id'] . ':' . $bvid; ?>" class="check_f class_task_child_value" type="checkbox" name="task_child_value_<?php echo $rand; ?>" />
<?php echo $task_child_value['task_child_name'] . ' ' . $task_mandatory; ?>
<?php
} else {
?>
<input <?php echo $disable_taskchild; ?> <?php echo $check_box_class; ?> <?php echo $checked; ?> value="<?php echo $tasklist_info_acc[$x]['task_id'] . ':' . $task_child_value['id']; ?>" itemref="<?php
echo $tasklist_info_acc[$x]['id'] . ':' . $bvid;
?>" class="check_f class_task_child_value" type="radio" name="task_child_value_<?php echo $rand; ?>"/>
<?php echo $task_child_value['task_child_name'] . ' ' . $task_mandatory; ?>
<?php
}
?>
</td>
<td>
<?php
if ($task_display_type == 1) {
?>
<input <?php echo $check_box_class; ?> <?php echo $na_checked; ?> value="<?php echo $tasklist_info_acc[$x]['task_id'] . ':' . $task_child_value['id']; ?>" itemref="<?php echo $tasklist_info_acc[$x]['id'] . ':' . $bvid; ?>" class="check_f class_task_child_na" type="checkbox" name="task_child_na_<?php echo $rand; ?>" />
<span class="label label-info">N/A</span>
<?php
} else {
}
?>
</td>
<td>
<?php
if ($task_child_value['enable_comments'] == 1) {
$comments_list = $Workflow->getWorkflow_IM_TaskChildComment_ByBTId_count($bid, $tasklist_info_acc[$x]['id'], $task_child_value['id'], $im_rid);
if (count($comments_list) > 0) {
$no_comments_list_class = 'btn-info';
} else {
$no_comments_list_class = '';
}
if ($step_access == 1 && in_array($bvid, $a_step_arr)) {
//echo '<i style="cursor: pointer;" id="' . $tasklist_info_acc[$x]['id'] . '_' . $task_child_value['id'] . '" class="icon-comments-alt a_new_task_comment '.$no_comments_list_class.'"></i>';
echo '<button type="button" style="cursor: pointer;" id="' . $tasklist_info_acc[$x]['id'] . '_' . $task_child_value['id'] . '" class="btn btn-round-min ' . $no_comments_list_class . ' a_new_task_comment"><span><i class="icon-comment-alt"></i></span></button>';
} else {
//echo '<i style="cursor: pointer;" id="' . $tasklist_info_acc[$x]['id'] . '_' . $task_child_value['id'] . '" class="icon-comments-alt disable_add a_new_task_comment '.$no_comments_list_class.'"></i>';
echo '<button type="button" style="cursor: pointer;" id="' . $tasklist_info_acc[$x]['id'] . '_' . $task_child_value['id'] . '" class="btn btn-round-min ' . $no_comments_list_class . ' disable_add a_new_task_comment"><span><i class="icon-comment-alt"></i></span></button>';
}
}
?>
</td>
</tr>
<?php
}
?>
</ul>
</tbody>
</table>
<?php
} else {
echo '<span class="label">Unavailable!</span>';
}
?>
</td>
</tr>
<?php
}
}
?>
</tbody>
</table>
</div>
</div>
</div>
<?php
}
?>
</div>
</div>
<div class="tab-pane <?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'tab-roles') {
echo 'active';
}
?>" id="tab-roles" style="margin: 10px 5px 10px 5px;">
<div class="row-fluid">
<div class="span6">
<div class="row-fluid">
<div class="span6">
<h4 class="pull-left">Workflow Status </h4>
</div>
<div class="span2">
<?php
$block_edit_status = array(1, 4, 5, 11, 15);
//echo $step_access;
if (!in_array($latest_status_details[0]['status'], $block_edit_status)) {
if ($step_access == 1 && in_array($bvid, $a_step_arr)) {
if ($parallel_step_running == 0) {
//$already_user_processed = $Workflow->get_WIMStatus_BId_UID($_SESSION[SESSION_VAR_NAME]['user_id'], $_SESSION[SESSION_VAR_NAME]['role'], $bid, $bvid, $im_rid);
//if (count($already_user_processed) <= 0) {
if (count($lateral_flow_steps_inprocess) <= 0) {
?>
<button class="buttonblink" style=" font-size: 11px;" href="#modal_status_dashboard1" data-toggle="modal" type="button" class=" "> <span style=" margin-right: 8px;"> <img src="../resources/images/Sign-off.png" style="height: 14px; margin-top: -4px; margin-left: 4px;"></span> Sign-off</button>
<?php
}
//}
}
}
}
?>
</div>
</div>
</div>
<div class="span6">
</div>
</div>
<?php
if ($wim_details[0]['a_builder_value_id'] == $bvid) {
$step_role_id = $a_role_master_id;
} else {
$step_role_id = $bvalue_details[0]['role_master_id'];
}
$role_master_info = $WBuilder->get_RoleMaster_ID($step_role_id);
?>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>
Role Type
</th>
<th>
User Group
</th>
<th>
Action
</th>
</tr>
</thead>
<tbody>
<?php
//$step_role_id = $a_role_master_id;
/* if ($step_role_id == -1) {
//$rule_info = $WRule->get_Rule_ID($step_info[0]['rule_id']);
$formula_details = $WRule->get_formula_byRule($bvalue_details[0]['rule_id']);
$step_role_id = $formula_details[0]['role_master_id'];
} */
$WRole->setRoleMasterId($step_role_id);
$role_usergroups1 = $WRole->get_Assigned_Usergroup();
foreach ($role_usergroups1 as $role_usergroup1) {
if ($role_usergroup1['role_type'] == 1) {
/* $primary_usergroup_info1 = $User->getUserGroup_byId($role_usergroup1['user_group_id']);
$primary_usergroup1 = $primary_usergroup_info1[0]['name'];
$primary_usergroup_id1 = $primary_usergroup_info1[0]['id']; */
if ($role_usergroup1['user_group_id'] == 0 || $role_usergroup1['user_group_id'] == "") {
$primary_usergroup_info1 = $User->getUserRole_byId($role_usergroup1['role_master_id']);
$primary_usergroup1 = $primary_usergroup_info1[0]['role_master'];
$primary_usergroup_id1 = $primary_usergroup_info1[0]['id'];
} else {
$primary_usergroup_info1 = $User->getUserGroup_byId($role_usergroup1['user_group_id']);
$primary_usergroup1 = $primary_usergroup_info1[0]['name'];
$primary_usergroup_id1 = $primary_usergroup_info1[0]['id'];
}
$available_primary_users1 = $Workflow->getDM_AvailableUser_ByRole($pid, $primary_usergroup_id1);
$unavailable_primary_users1 = $Workflow->getDM_AvailableUser_ByRole($pid, $primary_usergroup_id1);
} else if ($role_usergroup1['role_type'] == 0) {
$secondary_usergroup_info1 = $User->getUserGroup_byId($role_usergroup1['user_group_id']);
$secondary_usergroup1 = $secondary_usergroup_info1[0]['name'];
$secondary_usergroup_id1 = $secondary_usergroup_info1[0]['id'];
$available_secondary_users1 = $Workflow->getDM_AvailableUser_ByRole($pid, $secondary_usergroup_id1);
$unavailable_secondary_users1 = $Workflow->getDM_AvailableUser_ByRole($pid, $secondary_usergroup_id1);
} else if ($role_usergroup1['role_type'] == -1) {
$field_id = $role_usergroup1['user_group_id'];
$IMaster = new index_master($db);
$field_details = $IMaster->getIndexField_ById($field_id);
$field_name = $field_details[0]['field_name'];
$im_value_details = $IMaster->getMasterField_name($im_id, $im_rid, 'im_field_' . $field_id);
$field_value = $im_value_details[0]['im_field_' . $field_id];
$primary_usergroup_info1 = $User->getUserGroup_byname($field_value);
$primary_usergroup1 = $primary_usergroup_info1[0]['name'];
$primary_usergroup_id1 = $primary_usergroup_info1[0]['id'];
$available_primary_users1 = $Workflow->getUsers_UserGroupHierarchy($primary_usergroup_id1);
//$unavailable_primary_users1 = $Workflow->getDM_UnavailableUser_ByRole($pid, $primary_usergroup_id1);
} else if ($role_usergroup1['role_type'] == -2) {
$field_id = $role_usergroup1['user_group_id'];
$IMaster = new index_master($db);
$field_details = $IMaster->getIndexField_ById($field_id);
$field_name = $field_details[0]['field_name'];
$im_value_details = $IMaster->getMasterField_name($im_id, $im_rid, 'im_field_' . $field_id);
$field_value = $im_value_details[0]['im_field_' . $field_id];
$secondary_usergroup_info1 = $User->getUserGroup_byname($field_value);
$secondary_usergroup1 = $secondary_usergroup_info1[0]['name'];
$secondary_usergroup_id1 = $secondary_usergroup_info1[0]['id'];
$available_secondary_users1 = $Workflow->getUsers_UserGroupHierarchy($secondary_usergroup_id1);
//$unavailable_secondary_users1 = $Workflow->getDM_UnavailableUser_ByRole($pid, $secondary_usergroup_id1);
}
}
?>
<tr>
<td>
<h6>
<?php
if ($role_master_info[0]['user_type'] == 2) {
echo "Role Master -> Users";
} else {
echo "Primary";
}
?>
</h6>
</td>
<td>
<?php
if ($role_master_info[0]['user_type'] == 1) {
echo $primary_usergroup1;
if (isset($primary_delegate) && $primary_delegate == 1) {
echo $a_status . '<span class="label label-important">Delegate</span>';
}
} else if ($role_master_info[0]['user_type'] == 2) {
echo $role_master_info[0]['role_master'];
}
?>
</td>
<td>
<button type="button" class="btn_users_list btn btn-round-min btn btn-warning " itemtype="<?php echo $role_master_info[0]['user_type']; ?>" itemref="<?php if ($role_master_info[0]['user_type'] == 1) {
echo $primary_usergroup_id1;
} else if ($role_master_info[0]['user_type'] == 2) {
echo $step_role_id;
} ?>"><span><i class="icon-group"></i></span></button>
</td>
</tr>
<?php
if ($role_master_info[0]['user_type'] == 1) {
?>
<tr>
<td>
<h6>Secondary</h6>
</td>
<td>
<?php echo $secondary_usergroup1; ?>
<?php
if (!empty($secondary_usergroup_id1) && isset($secondary_delegate) && $secondary_delegate == 1) {
echo '<span class="label label-important">Delegate</span>';
}
?>
</td>
<td>
<button type="button" class="btn_users_list btn btn-round-min btn btn-warning " itemref="<?php echo $secondary_usergroup_id1; ?>"><span><i class="icon-group"></i></span></button>
</td>
</tr>
<?php
}
?>
<tr>
<td>
<h6>Work-flow Manager</h6>
</td>
<td>
<?php echo $wmanager_name; ?>
</td>
<td>
</td>
</tr>
<?php
$wim_rrole_users_unique = array();
$wim_rrole_status = array(10, 7, 16, 18, 0);
$wim_rrole_status_users = $WBuilder->get_workflow_im_Aroles_ByStatus($im_id, $im_rid, $bvid, $wim_details[0]['a_status']);
//print_r($wim_rrole_status_users);
if (!empty($wim_rrole_status_users)) {
foreach ($wim_rrole_status_users as $wim_rrole_status_user) {
if (!in_array($wim_rrole_status_user['user_id'], $wim_rrole_users_unique)) {
array_push($wim_rrole_users_unique, $wim_rrole_status_user['user_id']);
$user_info = $User->getUsers_ById($wim_rrole_status_user['user_id']);
$user_group_info = $User->getUserGroup_byId($user_info[0]['role']);
if ($a_step_details[0]['a_status'] == 10) {
$c_r_status = 'Approved to user';
} else if ($a_step_details[0]['a_status'] == 7) {
$c_r_status = 'Referred';
} else if ($a_step_details[0]['a_status'] == 16) {
$c_r_status = 'Delegate';
} else if ($a_step_details[0]['a_status'] == 18) {
$c_r_status = 'Assigned to user';
} else if ($a_step_details[0]['a_status'] == 0 && $c_already_processed_user == 1) {
$c_r_status = 'Assigned to already processed user';
} else if ($a_step_details[0]['a_status'] == 0 && empty($c_already_processed_user)) {
$c_r_status = 'Responsible user';
}
if (in_array($a_step_details[0]['a_status'], $wim_rrole_status)) {
?>
<tr>
<td>
<h5 class="text-error"> <?php echo $c_r_status; ?> <i class="icon-hand-right"></i></h5>
</td>
<td>
<?php echo $user_info[0]['fname'] . ' ' . $user_info[0]['mname'] . ' ' . $user_info[0]['lname'] . '(' . $user_info[0]['email'] . ')'; ?>
</td>
<td>
<?php echo '<span class="label label-info">' . $user_group_info[0]['name'] . '</span>'; ?>
</td>
</tr>
<?php
}
}
}
}
?>
</tbody>
</table>
<?php
if ($bvalue_details[0]['role_master_id'] == -1) {
?>
<div class="row-fluid">
<div class="span12">
<h3 class=" page-header"> Rules</h3>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<table class="table table-bordered table-responsive">
<thead>
<tr>
<th>
Rule
</th>
<th class="center">
Formula's
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<h6> <?php echo $rule_info[0]['rule_name']; ?></h6>
</td>
<td class="center">
<span id="<?php echo $rule_info[0]['id']; ?>" class="badge badge-success class_popup_ruleinfo"><?php echo $no_formulas; ?></span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<?php
}
if ($bvalue_details[0]['role_master_id'] == -2) {
?>
<div class="row-fluid">
<div class="span12">
<h3 class=" page-header"> Rules</h3>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<table class="table table-bordered table-responsive">
<thead>
<tr>
<th>
Advanced Rule
</th>
<th class="center">
Formula's
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<h6> <?php echo $rule_info[0]['rule_name']; ?></h6>
</td>
<td class="center">
<span id="a_<?php echo $rule_info[0]['id']; ?>" class="badge badge-success class_popup_ruleinfo"><?php echo $no_formulas; ?></span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<?php
}
?>
</div>
<div class="tab-pane <?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'comments-post') {
echo 'active';
}
?>" id="comments-post" style="margin: 10px 5px 10px 5px;">
<div class="row-fluid">
<div class="span6">
<div class="row-fluid">
<div class="span6">
<h4 class="pull-left">Workflow Status </h4>
</div>
<div class="span2">
<?php
$block_edit_status = array(1, 4, 5, 11, 15);
//echo $step_access;
if (!in_array($latest_status_details[0]['status'], $block_edit_status)) {
if ($step_access == 1 && in_array($bvid, $a_step_arr)) {
if ($parallel_step_running == 0) {
//$already_user_processed = $Workflow->get_WIMStatus_BId_UID($_SESSION[SESSION_VAR_NAME]['user_id'], $_SESSION[SESSION_VAR_NAME]['role'], $bid, $bvid, $im_rid);
//if (count($already_user_processed) <= 0) {
if (count($lateral_flow_steps_inprocess) <= 0) {
?>
<button class="buttonblink" style=" font-size: 11px;" href="#modal_status_dashboard1" data-toggle="modal" type="button" class=" "> <span style=" margin-right: 8px;"> <img src="../resources/images/Sign-off.png" style="height: 14px; margin-top: -4px; margin-left: 4px;"></span> Sign-off</button>
<?php
}
//}
}
}
}
?>
</div>
</div>
</div>
<div class="span6">
</div>
</div>
<div class="tab-content" style="height: auto;">
<div class="tab-pane active" id="div_chat_comments_list" style="max-height:150px; overflow: scroll;">
</div>
</div>
<?php
if ($step_access == 1 && in_array($bvid, $a_step_arr)) {
?>
<div class="row-fluid">
<div class="span12">
<form class="form-horizontal left-align" id="form_chat" method="POST" action="#">
<div class="chat-input span12 ">
<textarea class="chat-inputbox span12" rows="5" cols="80" style="width: 80%" name="chat_comment" rows="2"></textarea>
<button class="btn btn-primary chat_send_btn" type="button"><i class="icon-ok"></i> Send</button>
</div>
</form>
</div>
</div>
<?php
}
?>
</div>
<!-- ======================== Start Query Section ===== -->
<div class="tab-pane <?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'query-section-post') {
echo 'active';
}
?>" id="query-section-post" style="margin: 10px 5px 10px 5px;">
<div class="row-fluid">
<div class="span6">
<div class="row-fluid">
<div class="span6">
<h4 class="pull-left">Workflow Status </h4>
</div>
<div class="span2">
<?php
$block_edit_status = array(1, 4, 5, 11, 15);
//echo $step_access;
if (!in_array($latest_status_details[0]['status'], $block_edit_status)) {
if ($step_access == 1 && in_array($bvid, $a_step_arr)) {
if ($parallel_step_running == 0) {
//$already_user_processed = $Workflow->get_WIMStatus_BId_UID($_SESSION[SESSION_VAR_NAME]['user_id'], $_SESSION[SESSION_VAR_NAME]['role'], $bid, $bvid, $im_rid);
//if (count($already_user_processed) <= 0) {
if (count($lateral_flow_steps_inprocess) <= 0) {
?>
<button class="buttonblink" style=" font-size: 11px;" href="#modal_status_dashboard1" data-toggle="modal" type="button" class=" "> <span style=" margin-right: 8px;"> <img src="../resources/images/Sign-off.png" style="height: 14px; margin-top: -4px; margin-left: 4px;"></span> Sign-off</button>
<?php
}
//}
}
}
}
?>
</div>
</div>
</div>
<div class="span6">
</div>
</div>
<hr style="margin: 0px 0px 10px 0px;">
<?php
if ($step_access == 1 && in_array($bvid, $a_step_arr)) {
?>
<div class="row-fluid">
<div class="span2">
<a href="#" id="raise_query" name = "raise_query" role="button" class="btn raise_query btn btn-info" style="height: 22px !important; margin-left: 20px;">Send Query to ...</a>
</div>
<div class="span6">
<form class="form-horizontal left-align" id="form_query_comment" method="POST" action="#">
<div class="chat-input span12 " style="margin-top: 0px;">
<label style="font-weight:bold;">Query Text</label>
<textarea class=" span12" rows="5" cols="80" style="width: 80%" name="query_comment" id = "query_comment" rows="2"></textarea>
<button class="btn btn-primary query_send_btn" type="button" style=" margin-left: 38px;"><i class="icon-ok"></i> Send</button>
</div>
</form>
</div>
</div>
<?php
}
?>
<hr style="margin: 8px;">
<div class="row-fluid">
<div class="span12">
<div class="tab-content" style="height: auto;">
<div class="tab-pane active" id="div_chat_query_list">
</div>
</div>
</div>
</div>
</div>
<!-- ============================ End Query Section ============ -->
<!-- ============================= Start Workflow Linking ================================ -->
<div class="tab-pane" id="WorkFlow-Linking" style="margin: 10px 5px 10px 5px;">
<div class="row-fluid">
<div class="span6">
<div class="row-fluid">
<div class="span6">
<h4 class="pull-left">Workflow Linking </h4>
</div>
<div class="span2">
<?php
$block_edit_status = array(1, 4, 5, 11, 15);
//echo $step_access;
if (!in_array($latest_status_details[0]['status'], $block_edit_status)) {
if ($step_access == 1 && in_array($bvid, $a_step_arr)) {
if ($parallel_step_running == 0) {
if (count($lateral_flow_steps_inprocess) <= 0) {
?>
<button class="buttonblink" style=" font-size: 11px;" href="#modal_status_dashboard1" data-toggle="modal" type="button" class=" "> <span style=" margin-right: 8px;"> <img src="../resources/images/Sign-off.png" style="height: 14px; margin-top: -4px; margin-left: 4px;"></span> Sign-off</button>
<?php
}
//}
}
}
}
$builders_wf_role = $Workflow->get_WBuilder_ByRole_UserGroup($_SESSION[SESSION_VAR_NAME]['empdash']['emp_role'], $_SESSION[SESSION_VAR_NAME]['role'], $_SESSION[SESSION_VAR_NAME]['user_id'], $pid);
$builders_wf_rule = $Workflow->get_WBuilder_ByRule_UserGroup($_SESSION[SESSION_VAR_NAME]['empdash']['emp_role'], $_SESSION[SESSION_VAR_NAME]['role'], $_SESSION[SESSION_VAR_NAME]['user_id'], $pid);
$builders_wf_user = $Workflow->get_WBuilder_ByRule_User($_SESSION[SESSION_VAR_NAME]['user_id'], $pid);
$builders_wf_user_id = $Workflow->get_WBuilder_ByRole_UserId($_SESSION[SESSION_VAR_NAME]['empdash']['emp_role'], $_SESSION[SESSION_VAR_NAME]['role'], $_SESSION[SESSION_VAR_NAME]['user_id'], $pid, $_SESSION[SESSION_VAR_NAME]['dept_id']);
$builders_wf_processed_user_id = $Workflow->get_WF_Processed_UID($_SESSION[SESSION_VAR_NAME]['user_id'], $pid);
$builders_list1 = array_merge($builders_wf_role, $builders_wf_rule);
$builders_list2 = array_merge($builders_list1, $builders_wf_user);
$builders_list3 = array_merge($builders_list2, $builders_wf_processed_user_id);
$builders_list = array_merge($builders_list3, $builders_wf_user_id);
$builders_list_arr = array_unique(array_column($builders_list, 'id'));
$builders_list_arr = array_values($builders_list_arr);
?>
</div>
</div>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<script type="text/javascript">
$(document).ready(function () {
$('#workflow_builders_link').on('change', function () {
var value = $("#workflow_builders_link").val();
var sel_workflow = $(this).prop("value");
var url = '<?php echo $url_app?>/index.php?rq=<?php echo encrypt_url("deal_room/dealroom_workspace.php", APP_ENCRYPTION_SALT); ?>&mn=<?php echo encrypt_url("deal_room/dealroom_workspace.php", APP_ENCRYPTION_SALT); ?>&itag=<?php echo encrypt_url("iworkspace", APP_ENCRYPTION_SALT); ?>&id=<?php echo encrypt_url($pid, APP_ENCRYPTION_SALT); ?>&bid=<?php echo encrypt_url($bid, APP_ENCRYPTION_SALT); ?>&imid=<?php echo encrypt_url($im_id, APP_ENCRYPTION_SALT); ?>&imvid=<?php echo encrypt_url($im_rid, APP_ENCRYPTION_SALT); ?>&filter=1&workflow_builders_link=1&sel_workflow=' + sel_workflow;
window.open(url, '_blank');
});
});
</script>
<?php
$block_edit_status = array(1, 4, 5, 11, 15);
$get_first = $WBuilder->get_WBuilderValue_BId($bid);
if( !in_array($latest_status_details[0]['status'], $block_edit_status) && ($get_first[0]['id'] == $bvid)){ ?>
<select id="workflow_builders_link" name="workflow_builders_link" data-placeholder="Select workflow" class="chzn-select-deselect span8" style="width:400%;" tabindex="2">
<option Value=""></option>
<?php
for ($i = 0; $i < count($builders_list_arr); $i++) {
if (!empty($builders_list_arr[$i])) {
$builder_info = $WBuilder->get_WBuilder_Id($builders_list_arr[$i]);
?>
<option Value="<?php echo $builders_list_arr[$i]; ?>">
<?php echo $builder_info[0]['workflow_title']; ?>
</option>
<?php
}
}
?>
</select>
<?php } ?>
<div class="content-box " id="div_workflow_linking_list" style="margin: 20px 20px 20px 20px;"></div>
</div>
</div>
</div>
<!-- ============================== End Workflow Linking ================================== -->
<div class="hide tab-pane <?php
if (!empty($_REQUEST['a_tab_main']) && $_REQUEST['a_tab_main'] == 'notify') {
echo 'active';
}
?>" id="notify">
<div class="row-fluid">
<div class="span6">
<div class="row-fluid">
<div class="span6">
<h4 class="pull-left">Workflow Status </h4>
</div>
<div class="span2">
<?php
//echo $step_access;
if (!in_array($latest_status_details[0]['status'], $block_edit_status)) {
if ($step_access == 1 && in_array($bvid, $a_step_arr)) {
if ($parallel_step_running == 0) {
//$already_user_processed = $Workflow->get_WIMStatus_BId_UID($_SESSION[SESSION_VAR_NAME]['user_id'], $_SESSION[SESSION_VAR_NAME]['role'], $bid, $bvid, $im_rid);
//if (count($already_user_processed) <= 0) {
if (count($lateral_flow_steps_inprocess) <= 0) {
?>
<button class="buttonblink" style=" font-size: 11px;" href="#modal_status_dashboard1" data-toggle="modal" type="button" class=" "> <span style=" margin-right: 8px;"> <img src="../resources/images/Sign-off.png" style="height: 14px; margin-top: -4px; margin-left: 4px;"></span> Sign-off</button>
<?php
}
//}
}
}
}
?>
</div>
</div>
</div>
<div class="span6">
</div>
</div>
<div style="margin: 10px 5px 10px 5px;">
<div class="row-fluid">
<div class="span12">
<div class="widget-header-block">
<h5 class=" pull-left"> Mails</h5>
<?php
if ($step_access == 1 && in_array($bvid, $a_step_arr)) {
?>
<a class="pull-right a_new_mails" title="new mail" style="cursor:pointer;"><span class="badge badge-success" style="height:20px;"><i class="fa fa-envelope-open-o" aria-hidden="true"></i></span></a>
<?php
}
?>
</div>
</div>
</div>
<div class="content-box " id="div_mails">
</div>
<!-- <a href="#" class="pull-right" style="margin-bottom: 20px;">Go to top</a>-->
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal2 fade" id="modal_comments_post" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<form class="modal-form" id="comm_form_chat" method="post" action="#" style="width: 13%; margin-left: 40%;">
<div class="modal-dialog2" style="width: 190%;">
<div class="modal-content2">
<div class="modal-header2">
<button type="button" class="close img_close_modal_update_comments_form" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">Comments</h4>
</div>
<div id="div_comments_dashboard" class="modal-body2">
<div id="div_chat_comments_result" style="max-height:150px; overflow: scroll;"></div>
<input type="hidden" id="commdoc_id" name="commdoc_id">
<div class="chat-input">
<textarea class="chat-inputbox span12" name="chat_comment_text" rows="2"></textarea>
<button class="btn btn-primary chat_comm_send_btn" type="button"><i class="icon-ok"></i> Send</button>
</div>
</div>
</div>
</div>
</form>
</div>
<style>
body .modal-large {
/* new custom width */
width: 800px;
/* must be half of the width, minus scrollbar on the left (30px) */
margin-left: -375px;
}
.modal-dialog2 {margin: 2px auto; width:100%;}
.checkbox.inline{
margin-left: 10px;
}
</style>
<div class="modal2 fade " id="modal_status_dashboard" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<form class="modal-form" id="update_status_form" method="post" action="#">
<div class="modal-dialog2" style="margin: 2px auto; width: 74%;">
<div class="modal-content2">
<div class="modal-header2" style="padding: 7px 4px 0px 4px;">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" style="margin: 4px 0;"> Update Work Flow - Status</h4>
</div>
<div id="div_status_dashboard" class="modal-body2">
<div id="div_result"></div>
<input type="hidden" id="m_pid" name="m_pid" value="<?php echo $pid; ?>">
<input type="hidden" id="m_bid" name="m_bid" value="<?php echo $bid; ?>">
<input type="hidden" id="m_bvid" name="m_bvid" value="<?php echo $bvid; ?>">
<input type="hidden" id="m_wim_id" name="m_wim_id" value="<?php echo $wim_id; ?>">
<input type="hidden" id="im_rid" name="im_rid" value="<?php echo $im_rid; ?>">
<div class="control-group">
<div class="row">
<div class="span1">
<label class="control-label" style="font-weight: bold;">Status :</label>
</div>
<div class="span8" style="margin-left: 0px; margin-top: -5px;">
<div class="controls">
<?php
$get_first = $WBuilder->get_WBuilderValue_BId($bid);
//echo count($lateral_flow_steps_inprocess);
if (empty($c_user_referred) && count($lateral_flow_steps_inprocess) <= 0) {
if ($bvalue_details[0]['allow_approve'] == '1') {
if($get_first[0]['id'] == $bvid){
?>
<label class="checkbox inline">
<input name="status" value="1" type="radio" class="check_statuschk">
Initiate workflow </label>
<?php }
else{ ?>
<label class="checkbox inline">
<input name="status" value="1" type="radio" class="check_statuschk">
Approve </label>
<?php
}
}
if ($allow_flexiflow == 1) {
if ($bvalue_details[0]['flexiflow'] == '1') {
?>
<label class="checkbox inline">
<input name="status" value="17" type="radio" class="check_statuschk">
Flexi-Flow </label>
<?php
}
}
?>
<?php
if ($c_bvid_position + 1 != count($bvid_all)) {
if ($bvalue_details[0]['allow_af'] == '1') {
?>
<label class="checkbox inline">
<input name="status" value="11" type="radio" class="check_statuschk">
Approve with forward</label>
<?php
}
}
if ($c_bvid_position != 0) {
if ($bvalue_details[0]['allow_rf'] == '1') {
?>
<label class="checkbox inline">
<input name="status" value="12" type="radio" class="check_statuschk">
Partially Approve</label>
<?php
}
if ($bvalue_details[0]['allow_rb'] == '1') {
?>
<label class="checkbox inline">
<input type="hidden" name="rejectb_opt" id="rejectb_opt" value="<?php echo $bvalue_details[0]['rejectb_opt']; ?>">
<input name="status" value="13" type="radio" class="check_statuschk">
Reject with backward </label>
<?php
}
if ($bvalue_details[0]['allow_reject'] == '1') {
?>
<label class="checkbox inline">
<input type="hidden" name="reject_opt" id="reject_opt" value="<?php echo $bvalue_details[0]['reject_opt']; ?>">
<input name="status" value="3" type="radio" class="check_statuschk">
Reject </label>
<?php
}
}
?>
<!-- <br>
<hr> -->
<?php
if ($bvalue_details[0]['end_approved'] == '1') {
?>
<label class="checkbox inline">
<input name="status" value="4" type="radio" class="check_statuschk">
End as approval </label>
<?php
}
if ($bvalue_details[0]['end_rejected'] == '1') {
?>
<label class="checkbox inline">
<input name="status" value="5" type="radio" class="check_statuschk">
End as rejected </label>
<?php
}
if ($bvalue_details[0]['allow_hold'] == '1') {
?>
<label class="checkbox inline">
<input name="status" value="6" type="radio" class="check_statuschk">
Hold </label>
<?php
}
if ($bvalue_details[0]['referral'] == '1') {
?>
<label class="checkbox inline">
<input name="status" value="7" type="radio" class="check_statuschk">
Referred (Consult) - Inprocess </label>
<?php
}
if ($bvalue_details[0]['lateralflow'] == '1') {
?>
<label class="checkbox inline">
<input name="status" value="20" type="radio" class="check_statuschk">
Lateral Flow - Inprocess </label>
<?php
}
if ($bvalue_details[0]['delegate'] == '1') {
?>
<label class="checkbox inline">
<input name="status" value="16" type="radio" class="check_statuschk">
Delegate </label>
<?php
}
if ($bvalue_details[0]['approve_user'] == '1') {
if ($is_last_step == 0) {
?>
<label class="checkbox inline">
<input name="status" value="10" type="radio" class="check_statuschk">
Approve => User</label>
<?php
}
}
}
?>
<?php
if ($c_user_referred == '1') {
?>
<label class="checkbox inline">
<input name="status" value="8" type="radio" class="check_statuschk">
Referred (Consult)- Closed</label>
<?php
}
?>
<!--<label class="checkbox inline">
<input name="status" value="9" type="radio">
Force closed</label>-->
</div>
</div>
</div>
</div>
<?php
/* if ($first_step == 0) {
?>
<div id="div_roll_back" class="control-group">
<label class="control-label">Roll Back</label>
<div class="controls">
<select name="roll_back_id" data-placeholder="Choose a step..." class="chzn-select-deselect span6" tabindex="-1">
<?php
if (empty($no_step_details)) {
?>
<option value="">Unavailable!</option>
<?php
} else {
?>
<option value=""></option>
<?php
for ($i = 0; $i < $no_step_details; $i++) {
if ($workflowstep_details[$i]['id'] == $bvid) {
break;
}
?>
<option value="<?php echo $workflowstep_details[$i]['id']; ?>"><?php echo $workflowstep_details[$i]['step_name']; ?></option>
<?php
}
}
?>
</select>
</div>
</div>
<?php
} */
?>
<hr style="margin:10px;">
<?php
if ($bvalue_details[0]['flexiflow'] == '1') {
?>
<div id="div_flexi_flow" class="control-group" >
<label class="control-label">Choose next parallel steps (Flexi-Flow) </label>
<div class="controls">
<select name="flexi_flow_bvid[]" data-placeholder="Choose a step..." class="chzn-select-deselect span6" multiple="" tabindex="-1" style="max-width: 300px;">
<?php
if (count($next_parallel_steps) <= 0) {
?>
<option value="">Unavailable!</option>
<?php
} else {
?>
<option value=""></option>
<?php
for ($i = 0; $i < count($next_parallel_steps); $i++) {
$ff_step_info = $WBuilder->get_WBuilderValue_Id($next_parallel_steps[$i]);
?>
<option value="<?php echo $ff_step_info[0]['id']; ?>"><?php echo $ff_step_info[0]['step_name']; ?></option>
<?php
}
}
?>
</select>
</div>
</div>
<?php
}
?>
<div id="div_approve_forward" class="control-group" >
<label class="control-label">Forward to step</label>
<div class="controls">
<select name="a_f_bvid" data-placeholder="Choose a step..." class="chzn-select-deselect span6" tabindex="-1" style="max-width: 300px;">
<?php
if (count($af_trigger_step_arr) <= 0) {
?>
<option value="">Unavailable!</option>
<?php
} else {
?>
<option value=""></option>
<?php
for ($i = 0; $i < count($af_trigger_step_arr); $i++) {
if (!in_array($af_trigger_step_arr[$i], $ff_step_arr)) {
$af_step_info = $WBuilder->get_WBuilderValue_Id($af_trigger_step_arr[$i]);
?>
<option value="<?php echo $af_step_info[0]['id']; ?>"><?php echo $af_step_info[0]['step_name']; ?></option>
<?php
}
}
}
?>
</select>
</div>
</div>
<div id="div_reject_forward" class="control-group" >
<label class="control-label">Forward to step</label>
<div class="controls">
<select name="r_f_bvid" data-placeholder="Choose a step..." class="chzn-select-deselect span6" tabindex="-1" style="max-width: 300px;">
<?php
if (count($rf_trigger_step_arr) <= 0) {
?>
<option value="">Unavailable!</option>
<?php
} else {
?>
<option value=""></option>
<?php
for ($i = 0; $i < count($rf_trigger_step_arr); $i++) {
if (!in_array($rf_trigger_step_arr[$i], $ff_step_arr)) {
$rf_step_info = $WBuilder->get_WBuilderValue_Id($rf_trigger_step_arr[$i]);
?>
<option value="<?php echo $rf_step_info[0]['id']; ?>"><?php echo $rf_step_info[0]['step_name']; ?></option>
<?php
}
}
}
?>
</select>
</div>
</div>
<div id="div_reject_backward" class="control-group">
<label class="control-label">Backward to step</label>
<div class="controls">
<select id="r_b_bvid" name="r_b_bvid" data-placeholder="Choose a step..." class="chzn-select-deselect span6" tabindex="-1" style="max-width: 300px;">
<?php
if (count($rb_trigger_step_arr) <= 0) {
?>
<option value="">Unavailable!</option>
<?php
} else {
if (count($rb_trigger_step_arr) > 1) {
?>
<option value=""></option>
<?php
}
for ($i = 0; $i < count($rb_trigger_step_arr); $i++) {
if (!in_array($rb_trigger_step_arr[$i], $ff_step_arr)) {
$rb_step_info = $WBuilder->get_WBuilderValue_Id($rb_trigger_step_arr[$i]);
?>
<option value="<?php echo $rb_step_info[0]['id']; ?>"><?php echo $rb_step_info[0]['step_name']; ?></option>
<?php
}
}
}
?>
</select>
</div>
</div>
<div id="div_userlist_rroles" style="display:none;">
<?php
$user_group_info = $Workflow->get_Deal_Assigned_UserGroups_Multi($pid, $builder_value_rrole_arr);
$no_user_group_info = count($user_group_info);
?>
<table class="responsive table table-striped table-bordered" id="ref_userlist_data-table">
<thead>
<tr>
<th width="3%" align="center">#</th>
<th>Username</th>
<th>First Name</th>
<th>Middle Name</th>
<th>Last Name</th>
<th>E-mail</th>
<th>Contact No.1</th>
<th>Contact No.2</th>
<th>User Group</th>
</tr>
</thead>
<tbody>
<?php
if (!empty($no_user_group_info)) {
for ($i = 0; $i < $no_user_group_info; $i++) {
if (empty($_SESSION[SESSION_VAR_NAME]['empdash']['emp_role'])) {
$user_id = $user_group_info[$i]['mem_id'];
} else {
$user_id = $user_group_info[$i]['mem_id'];
}
$group_info = $User->getUserGroup_byId($user_group_info[$i]['role']);
if ($sel_gid == 1 || $sel_gid == 2) {
$user_info = $User->getUser_ById($user_id);
$loginmast_info = $User->getLoginMast_ById($user_id);
} else {
$user_info = $User->getUser_ById($user_id);
$loginmast_info = $User->getLoginMast_ById($user_id);
}
if (!empty($loginmast_info)) {
if ($i == 0) {
$default_selected = "";
} else {
$default_selected = "";
}
?>
<tr>
<td align="center"><input class='refferal_cls' type="checkbox" name="rrole_user_id[]" value="<?php echo $user_info[0]['id']; ?>" <?php echo $default_selected; ?>></td>
<td><?php echo $loginmast_info[0]['username']; ?></td>
<td><?php echo $user_info[0]['fname']; ?></td>
<td><?php echo $user_info[0]['mname']; ?></td>
<td><?php echo $user_info[0]['lname']; ?></td>
<td><?php echo $user_info[0]['email']; ?></td>
<td><?php echo $user_info[0]['fone_no']; ?></td>
<td><?php echo $user_info[0]['mobile']; ?></td>
<td><?php echo $group_info[0]['name']; ?></td>
</tr>
<?php
}
}
}
?>
</tbody>
</table>
</div>
<div id="div_userlist_lroles" style="display:none;">
<?php
$user_group_info = $Workflow->get_Deal_Assigned_UserGroups_Multi($pid, $builder_value_lrole_arr);
$no_user_group_info = count($user_group_info);
?>
<div class="row-fluid">
<button type="button" class="btn btn-primary pull-right btn_select_lateral_user" style="margin-bottom: 15px;"> Select</button>
</div>
<div class="row-fluid">
<table class="responsive table table-striped table-bordered" id="lateral_userlist_data-table">
<thead>
<tr>
<th width="3%" align="center">#</th>
<th>Username</th>
<th>First Name</th>
<th>Middle Name</th>
<th>Last Name</th>
<th>E-mail</th>
<th>Contact No.1</th>
<th>Contact No.2</th>
<th>User Group</th>
</tr>
</thead>
<tbody>
<?php
if (!empty($no_user_group_info)) {
for ($i = 0; $i < $no_user_group_info; $i++) {
if (empty($_SESSION[SESSION_VAR_NAME]['empdash']['emp_role'])) {
$user_id = $user_group_info[$i]['mem_id'];
} else {
$user_id = $user_group_info[$i]['mem_id'];
}
$group_info = $User->getUserGroup_byId($user_group_info[$i]['role']);
if ($sel_gid == 1 || $sel_gid == 2) {
$user_info = $User->getUser_ById($user_id);
$loginmast_info = $User->getLoginMast_ById($user_id);
} else {
$user_info = $User->getUser_ById($user_id);
$loginmast_info = $User->getLoginMast_ById($user_id);
}
if (!empty($loginmast_info)) {
if ($i == 0) {
$default_selected = "";
} else {
$default_selected = "";
}
?>
<tr>
<td align="center"><input type="checkbox" class="lateral_case" name="lrole_user_id_old[]" value="<?php echo $user_group_info[$i]['role'] . '-' . $user_info[0]['id']; ?>" <?php echo $default_selected; ?>></td>
<td><?php echo $loginmast_info[0]['username']; ?></td>
<td><?php echo $user_info[0]['fname']; ?></td>
<td><?php echo $user_info[0]['mname']; ?></td>
<td><?php echo $user_info[0]['lname']; ?></td>
<td><?php echo $user_info[0]['email']; ?></td>
<td><?php echo $user_info[0]['fone_no']; ?></td>
<td><?php echo $user_info[0]['mobile']; ?></td>
<td><?php echo $group_info[0]['name']; ?></td>
</tr>
<?php
}
}
}
?>
</tbody>
</table>
</div>
<div class="row-fluid">
<button type="button" class="btn btn-primary pull-right btn_select_lateral_user" style="margin-bottom: 15px;"> Select</button>
</div>
<div class="row-fluid " style="min-height: 200px;">
<div class="span12">
<div class="content-widgets gray">
<div class="widget-head bondi-blue">
<h3 style="line-height: 26px; font-size: 15px;">Lateral Flow Users & Sortable</h3>
</div>
<div class="widget-container " id="div_lateral_user_sort">
<div class="alert">
<button type="button" class="close" data-dismiss="alert">×</button>
<i class="icon-exclamation-sign"></i><strong>Warning!</strong> Kindly select Users for lateral flow process.
</div>
</div>
</div>
</div>
</div>
</div>
<div id="div_userlist_droles" style="display:none;">
<?php
$user_group_info = $Workflow->get_Deal_Assigned_UserGroups_Multi($pid, $builder_value_drole_arr);
$no_user_group_info = count($user_group_info);
?>
<table class="responsive table table-striped table-bordered" id="dele_userlist_data-table">
<thead>
<tr>
<th width="3%" align="center">#</th>
<th>Username</th>
<th>First Name</th>
<th>Middle Name</th>
<th>Last Name</th>
<th>E-mail</th>
<th>Contact No.1</th>
<th>Contact No.2</th>
<th>User Group</th>
</tr>
</thead>
<tbody>
<?php
if (!empty($no_user_group_info)) {
for ($i = 0; $i < $no_user_group_info; $i++) {
if (empty($_SESSION[SESSION_VAR_NAME]['empdash']['emp_role'])) {
$user_id = $user_group_info[$i]['mem_id'];
} else {
$user_id = $user_group_info[$i]['mem_id'];
}
$group_info = $User->getUserGroup_byId($user_group_info[$i]['role']);
if ($sel_gid == 1 || $sel_gid == 2) {
$user_info = $User->getUser_ById($user_id);
$loginmast_info = $User->getLoginMast_ById($user_id);
} else {
$user_info = $User->getUser_ById($user_id);
$loginmast_info = $User->getLoginMast_ById($user_id);
}
if (!empty($loginmast_info)) {
if ($i == 0) {
$default_selected = "";
} else {
$default_selected = "";
}
?>
<tr>
<td align="center"><input type="checkbox" name="drole_user_id[]" value="<?php echo $user_info[0]['id']; ?>" <?php echo $default_selected; ?>></td>
<td><?php echo $loginmast_info[0]['username']; ?></td>
<td><?php echo $user_info[0]['fname']; ?></td>
<td><?php echo $user_info[0]['mname']; ?></td>
<td><?php echo $user_info[0]['lname']; ?></td>
<td><?php echo $user_info[0]['email']; ?></td>
<td><?php echo $user_info[0]['fone_no']; ?></td>
<td><?php echo $user_info[0]['mobile']; ?></td>
<td><?php echo $group_info[0]['name']; ?></td>
</tr>
<?php
}
}
}
?>
</tbody>
</table>
</div>
<div id="div_nextstep_userlist_rroles" style="display:none;">
<?php
/* $next_step_details = $WBuilder->get_WBuilderValue_Next_BId($bid, $bvid);
if ($next_step_details[0]['step_type'] == '2') {
$next_process_steps = $WBuilder->get_WBuilderValue_Next_BId_Sequential($bid, $bvid);
} else if ($next_step_details[0]['step_type'] == '1') {
//$next_process_step = $WBuilder->get_WBuilderValue_Next_BId($bid, $bvid);
$next_process_steps = array($next_step_details[0]['id']);
}
$user_group_info = $Workflow->get_Deal_Assigned_UserGroups_Multi($pid, $builder_value_rrole_arr);
$no_user_group_info = count($user_group_info); */
?>
<div class="control-group">
<label class="control-label">Choose step</label>
<div class="controls">
<select name="ap_user_bvid" id="ap_user_bvid" data-placeholder="Choose a step..." class="chzn-select-deselect span6" tabindex="-1" style="max-width: 300px;">
<?php
$next_steps = $WBuilder->get_WBuilderValue_Next_BId_All_FF($bid, $bvid, $im_rid);
$is_user_base = $WBuilder->get_WBuilder_Id($bid);
if ($is_user_base[0]['workflow_type'] == 2) {
foreach ($next_steps as $key => $value) {
if ($value['role_master_id'] == -2) {
//$is_rule = $WRule->get_rule_advanced_formulas_byRuleID($value['rule_id']);
//$formula_id = $WRule->get_advanced_rule_formula_ById($is_rule[0]['formula_id']);
//$value['role_master_id'] = $formula_id[0]['workflow_role'];
$a_rule_id = $value['rule_id'];
//$value['id'];
$a_rule_info = $WRule->get_advanced_rule_byID($a_rule_id);
$a_formula_details = $WRule->get_rule_advanced_formulas_byRuleID($a_rule_id);
$no_a_formulas = count($a_formula_details);
foreach ($a_formula_details AS $key => $a_formula_info) {
$a_formula_cond_arr = array();
$a_formula_conj_arr = array();
$rule_formula_details = $WRule->get_advanced_rule_formula_ById($a_formula_info['formula_id']);
//print_r($rule_formula_details);
$assign_into = $rule_formula_details[0]['assign_into'];
$workflow_role = $rule_formula_details[0]['workflow_role'];
$round_robin = $rule_formula_details[0]['round_robin'];
$formula_usergroup_id = $rule_formula_details[0]['usergroup_id'];
$formula_user_id = $rule_formula_details[0]['user_id'];
$a_formula_conditions = $WRule->get_advanced_rule_formula_cond_ByFormulaId($a_formula_info['formula_id']);
foreach ($a_formula_conditions AS $cond_key => $a_formula_condition) {
$logical_conjunction = $a_formula_condition['logical_conjunction'];
$a_rule_conditions = $WRule->get_advanced_rule_condition_ById($a_formula_condition['condition_id']);
$condition_name = $a_rule_conditions[0]['condition_name'];
$index_id = $a_rule_conditions[0]['index_id'];
$index_field_id = $a_rule_conditions[0]['index_field_id'];
$logical_operator = $a_rule_conditions[0]['logical_operator'];
$input_value = $a_rule_conditions[0]['input_value'];
if (!empty($index_id) && $im_id == $index_id) {
//print_r($query_fields);
//$im_field_id = $rule_info[0]['index_master_field'];
$im_field_key = array_search("im_field_" . $index_field_id, $query_fields);
$index_master_field_value = $IMASTER->getMasterValue_ByID($im_id, $im_rid);
if (is_numeric($im_field_key)) {
$field_details = $IMASTER->getIndexField_ById($index_field_id);
$field_type = $field_details[0]['field_type'];
$auto_inc_name = $field_details[0]['auto_inc_name'];
if ($field_type == 'Select Menu') {
$im_field_value = $query_values[$im_field_key];
//$fdetails = $IMASTER->getFieldExtend_ById($im_field_value);
//$field_value = $fdetails[0]['field_value'];
//$im_field_value = $field_value;
} else {
if (!empty($auto_inc_name)) {
$im_field_value_ex = explode($auto_inc_name . '_', $query_values[$im_field_key]);
$im_field_value = $im_field_value_ex[1];
} else {
$im_field_value = $query_values[$im_field_key];
}
}
if (!empty($im_field_value)) {
$cond = if_cond($im_field_value, $logical_operator, $input_value);
array_push($a_formula_cond_arr, $cond);
array_push($a_formula_conj_arr, $logical_conjunction);
/* for ($x = 0; $x < $no_formulas; $x++) {
$varA1 = $im_field_value;
$varB1 = $formula_details[$x]['input_value'];
$op1 = $formula_details[$x]['logical_operator'];
$varA2 = $im_field_value;
$varB2 = $formula_details[$x]['input_value2'];
$op2 = $formula_details[$x]['logical_operator2'];
$cond1 = if_cond($varA1, $op1, $varB1);
$cond2 = if_cond($varA2, $op2, $varB2);
if ($cond1 == 'true' && $cond2 == 'true') {
$role_master_id = $formula_details[$x]['role_master_id'];
//echo if_cond($varA1, $op1, $varB1)."#".$varA1 . "#" . $op1 . "#" . $varB1 . "#" . $formula_details[$x]['role_master_id'];
//die();
break;
} else {
$role_master_id = '';
}
} */
}
}
}
}
$a_formula_if_arr = array();
foreach ($a_formula_cond_arr AS $key => $value1) {
array_push($a_formula_if_arr, $value1);
array_push($a_formula_if_arr, $a_formula_conj_arr[$key]);
}
$a_formula_if_arr_f = array_pop($a_formula_if_arr);
$a_formula_implode = implode(' ', $a_formula_if_arr);
//echo "if(" . $v . "){ echo 'true';}else{ echo 'false';}";
//echo "if(" . $a_formula_implode . "){ return 'true';}else{ return 'false';}";
if (count($a_formula_if_arr) > 0) {
$a_formula_result = eval("if(" . $a_formula_implode . "){ return 'true';}else{ return 'false';}");
if ($a_formula_result == 'true') {
if ($assign_into == 1) {
$role_master_id1 = $workflow_role;
$rule_usergroup_id1 = '';
$rule_user_id1 = '';
} else {
$role_master_id1 = '';
$rule_usergroup_id1 = $formula_usergroup_id;
$rule_user_id1 = $formula_user_id;
$role_master_id1 = $formula_user_id;
}
//echo 'role_master_id-'.$role_master_id1.'-';
//echo 'rule_usergroup_id-'.$rule_usergroup_id1.'-';
// echo 'rule_user_id-'.$rule_user_id1.'-';
//echo 'value'.$value['id'];
$value['role_master_id'] = $role_master_id1;
$next_steps = $WBuilder->get_WBuilderValue_Next_BId_All_FF_user($bid, $value['id'], $im_rid);
break;
}
} else {
$role_master_id1 = '';
$rule_usergroup_id1 = '';
$rule_user_id1 = '';
}
}
if (!empty($role_master_id1) || !empty($rule_usergroup_id1) || !empty($role_master_id1)) {
break;
}
} else if ($value['user_department'] == 1) {
$is_step_access = $WRole->getWorkflowUserDepartment($value['role_master_id'], '', $dept_id);
if (!empty($is_step_access)) {
$next_steps = $WBuilder->get_WBuilderValue_Next_BId_All_FF_user($bid, $value['id'], $im_rid);
break;
} else {
continue;
}
} else {
echo"All";
//echo 'role_master_id'.$value['role_master_id'];
//echo 'id'.$value['id'];
//echo'bid'. $bid;
//echo'im_rid'. $im_rid;
if (!empty($value['role_master_id'])) {
$next_steps = $WBuilder->get_WBuilderValue_Next_BId_All_FF_user($bid, $value['id'], $im_rid);
break;
} else {
continue;
}
}
}
}
if (count($next_steps) <= 0) {
?>
<option value="">Unavailable!</option>
<?php
} else {
?>
<option value=""></option>
<?php
for ($i = 0; $i < count($next_steps); $i++) {
?>
<option value="<?php echo $next_steps[$i]['id']; ?>"><?php echo $next_steps[$i]['step_name']; ?></option>
<?php
}
}
?>
</select>
</div>
</div>
<!--<table class="responsive table table-striped table-bordered" id="next_step_user_settings_data-table">
<thead>
<tr>
<th width="3%" align="center">#</th>
<th>Step Name</th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<?php
/* for ($i = 0; $i < count($next_process_steps); $i++) {
$c_step_details = $WBuilder->get_WBuilderValue_Id($next_process_steps[$i]);
$role_master_id = $c_step_details[0]['role_master_id'];
if (!in_array($next_process_steps[$i], $a_step_arr)) {
?>
<tr>
<td><?php echo $i + 1; ?></td>
<td><?php echo $c_step_details[0]['step_name']; ?></td>
<td><input type="checkbox" name="default_user_id_<?php echo $bvid; ?>" value=""> Default</td>
<td><span class="label label-info label_nextuserlist" style="cursor: pointer;">Choose User</span>
<!--<div id="div_nextuser_list_sel"></div>-->
</td>
</tr>
<?php
}
} */
?>
</tbody>
</table>-->
<div id="div_nextuser_list"></div>
<div id="div_nextuser_list_sel"></div>
</div>
<div id="div_reject_options" style="display:none;"></div>
<div class="control-group">
<label class="control-label" for="inputEmail" style="font-weight: bold;">Sign Off Comment</label>
<div class="controls">
<textarea id="comment" name="comment" rows="2" class="span6"></textarea>
</div>
</div>
</div>
<div class="modal-footer2">
<button type="submit" class="btn btn-inverse btn_update">Update</button>
<button type="button" id="btn_colse_status" class="btn btn-dange">Close</button>
</div>
</div>
</div>
</form>
</div>
<style>
body .modal-large {
/* new custom width */
width: 800px;
/* must be half of the width, minus scrollbar on the left (30px) */
margin-left: -375px;
}
</style>
<div class="modal fade modal-large" id="modal_log_dashboard" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<form class="modal-form form-horizontal" id="form_log_form" method="post" action="#">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">Work Flow - Log</h4>
</div>
<div id="div_status_dashboard" class="modal-body">
<div id="div_result"></div>
<form class="form-horizontal" method="POST" >
<div id="div_status_log"></div>
</form>
</div>
<div class="modal-footer">
<button type="button" id="btn_close_log" class="btn btn-dange">Close</button>
</div>
</div>
</div>
</form>
</div>
<div class="modal fade" id="file_status_comments" tabindex="-1" role="dialog" aria-labelledby="im_info_modal" aria-hidden="true">
<form class="modal-form" id="file_status_comments_form" method="post" action="#">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="myModalLabel">File Status Comments</h4>
</div>
<div class="modal-body" style="overflow: scroll;">
<div id="file_status_comments_div" ></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</form>
</div>
<div class="modal fade" id="change_status" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<form class="modal-form" id="status_form" method="post" action="#">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">QC Approval</h4>
</div>
<div class="modal-body">
<div id="change_status_result"></div>
<input type="hidden" name="pid" id="pid" value="<?php echo $pid; ?>" >
<input type="hidden" name="status_sel_doc" id="status_sel_doc" >
<div id="status_doc_error" style="display: none;">
<div class="alert alert-error ">
<i class="icon-minus-sign"></i><strong>Error!</strong> Please Select some documents.
</div>
</div>
<div class="row-fluid" id="show_form">
<div class="control-group">
<label class="control-label">Status</label>
<div class="controls">
<label class="radio">
<input name="status" value="Approved" type="radio">
Approved</label>
<label class="radio">
<input name="status" value="Unapproved" type="radio">
Unapproved </label>
<label class="radio">
<input name="status" value="Rejected" type="radio">
Rejected </label>
</div>
</div>
<div class="status_comment_div">
<label class="control-label">Comment</label>
<div class="controls">
<textarea id="status_comment" name="status_comment" rows="3" class="span8" placeholder="Enter reason for change of status..." required="true"></textarea><br/>
<span class="label label-important">* Comment once submitted, cannot be edited. This comment will be applied for all the selected files.</span><br/>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button id= "save_change_status" class="btn btn-primary" type="button">Save changes</button>
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
</div>
</div>
</div>
</form>
</div>
<div class="modal fade" id="modal_bulk_mtdata_download" tabindex="-1" role="dialog" aria-labelledby="myModalLabel1" aria-hidden="true">
<form class="modal-form" id="bulk_download_metadata_form" method="post" action="#">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">Bulk Download Details</h4>
</div>
<div class="modal-body">
<input type="hidden" name="bulk_doc_mtdata_id" id="bulk_doc_mtdata_id">
<input type="hidden" name="bulk_doc_category_id" id="bulk_doc_category_id" value="<?php echo encrypt_url($category_id, APP_ENCRYPTION_SALT); ?>">
<div class="control-group">
<div class="controls">
<label class="checkbox">
<input id="original_file_flag" name="original_file_flag" value="yes" type="checkbox" <?php
if ($document_annotation_status[0]['status'] == 0) {
echo "checked";
echo " disabled";
}
?> >
Download Original File </label>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button id= "btn_bulk_mtdata_download" class="btn btn-primary" type="button">Download</button>
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
</div>
</div>
</form>
</div>
<!--<div class="modal fade" id="modal_download" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<form class="modal-form" id="pdf_form" method="post" action="#">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">Download Details</h4>
</div>
<div class="modal-body">
<input type="hidden" name="pdf_id" id="pdf_id">
<div class="control-group">
<div class="controls">
<label class="checkbox">
<input id="original_file_flag" name="original_file_flag" value="yes" type="checkbox" <?php
if ($document_annotation_status[0]['status'] == 0) {
echo "checked";
echo " disabled";
}
?> >
Download Original File </label>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button id= "btn_download_pdf" class="btn btn-primary" type="button">Download</button>
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
</div>
</div>
</form>
</div>-->
<div class="modal fade" id="modal_download" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<form class="modal-form" id="pdf_form" method="post" action="#">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">Download Options</h4>
</div>
<div class="modal-body">
<input type="hidden" name="pdf_id" id="pdf_id" value="<?php echo $_REQUEST['id']; ?>">
<div class="control-group">
<h5>Type of Download</h5>
<div class="controls">
<label class="radio">
<input id="pdf_type" name="pdf_type" value="1" checked="" type="radio">
File Download </label>
<label class="radio">
<input id="pdf_type" name="pdf_type" value="2" type="radio">
File with Metadata </label>
<label class="checkbox">
<input id="rename_flag" name="rename_flag" value="auto_rename" type="checkbox">
Rename And Download </label>
<label class="checkbox">
<input id="original_file_flag" name="original_file_flag" value="yes" type="checkbox" <?php if ($document_annotation_status[0]['status'] == 0) {
echo "checked";
echo " disabled";
} ?> >
Download Original File </label>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button id= "btn_download_pdf" class="btn btn-primary" type="button">Download</button>
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
</div>
</div>
</form>
</div>
<div class="modal2 fade" id="file_preview" tabindex="-1" role="dialog"
aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static" data-keyboard="false">
<form class="modal-form" id="category_tree_preview_form" method="post" action="#">
<div class="modal-dialog2">
<div class="modal-content2">
<div class="modal-header2" style="padding: 4px 6px;">
<button type="button" class="close" id ="modal_click"
aria-hidden="true" style="color: #f30000; opacity: 1; ">×</button>
<ul class="nav nav-tabs" id="myTab1" style="margin-bottom: 0px;">
<li class="active"><a id="div_file_preview_click">Preview</a></li>
<li class=""> <a id="div_file_info_click">Information</a></li>
</ul>
<!--h4 class="modal-title2" id="myModalLabel">Category Tree Listing</h4-->
</div>
<div class="modal-body" id="div_file_preview" name="modal_body_file_preview" style="height: 650px; ">
</div>
<div class="modal-body" id="div_file_info" name="modal_body_file_info" style="height: 650px; ">
</div>
<div class="modal-footer2">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</form>
</div>
</div>
</body>
</html>
<?php
}
} else {
include("error_403.php");
}
} else {
include("error_403.php");
}
}
?>
Did this file decode correctly?
Original Code
<?php $_F=__FILE__;$_C1353562110='Pz48P2RlZAokb2p5SCA9IHFsUXZqREgocWxRdmpESChfXzNaVmlfXykpOwoKbEYgKCFGQnZMcmw4dl9IdWx5cnkoImpkZF9MYWp5eV9qQnI4YThqcUhRIikpIHsKICAgIGx2TGFCcUgoJG9qeUggLiAiL2Fsby9qZGRfcjhkLmRlZCIpOwp9CmxGICghbHl5SHIoJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydCeUhRX2xxJ10pKSB7CiAgICBlSGpxSFEoImE4TGpybDh2OiAuLi9IUVE4UV9obVUuZGVkIik7CiAgICBIdWxyKCk7Cn0gSGF5SCB7CiAgICAvL2x2bF95SHIoInFseWRhalJfSFFROFF5IiwgVSk7CiAgICAkNGpuSCA9IHZIYiBkam5IKCRxbyk7CiAgICAkcmp5V0FMTEh5eTVsbmVyID0gJDRqbkgtPmpMTEh5eWRIUURseXlsOHZ5KCdDVVgnLCAkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ1E4YUgnXSk7CiAgICAkdjhfcmp5V0FMTEh5eTVsbmVyID0gTDhCdnIoJHJqeVdBTExIeXk1bG5lcik7CiAgICAkakxMSHl5X3JSZEggPSBqUVFqUigpOwogICAgRjhRSGpMZSAoJHJqeVdBTExIeXk1bG5lciBqeSAkZF9qUSkgewogICAgICAgIGpRUWpSX2RCeWUoJGpMTEh5eV9yUmRILCAkZF9qUVsnclJkSCddKTsKICAgIH0KCiAgICBsRiAoIUhEZHJSKCR2OF9yanlXQUxMSHl5NWxuZXIpICYmICR2OF9yanlXQUxMSHl5NWxuZXIgPiBtKSB7CgogICAgICAgIGxGIChsdl9qUVFqUignWCcsICRqTExIeXlfclJkSCkpIHsKCiAgICAgICAgICAgICRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnYkZfT2xIYl9yUmRIJ10gPSAnSyc7CgogICAgICAgICAgICAkSTZCbGFxSFEgPSB2SGIgYjhRV0ZhOGJfb0JsYXFIUSgkcW8pOwogICAgICAgICAgICAkSThRV0ZhOGIgPSB2SGIgYjhRV0ZhOGIoJHFvKTsKICAgICAgICAgICAgJEk1OGFIID0gdkhiIGI4UVdGYThiX1E4YUgoJHFvKTsKICAgICAgICAgICAgJDRRODdITHIgPSB2SGIgZFE4N0hMcigkcW8pOwogICAgICAgICAgICAkWkVBOXdpNSA9IHZIYiBsdnFIdV9EanlySFEoJHFvKTsKICAgICAgICAgICAgJEp5SFEgPSB2SGIgQnlIUSgkcW8pOwogICAgICAgICAgICAkd2p5V2FseXIgPSB2SGIgcmp5V19hbHlyKCRxbyk7CgogICAgICAgICAgICAkd0hEZGFqckggPSB2SGIgckhEZGFqckgoJHFvKTsKICAgICAgICAgICAgJEk1QmFIID0gdkhiIGI4UVdGYThiX1FCYUgoJHFvKTsKICAgICAgICAgICAgJHFIZHJfbHEgPSAkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ3FIZHJfbHEnXTsKICAgICAgICAgICAgLy9kUWx2cl9RKCRfNWl4Smk5dyk7CiAgICAgICAgICAgICRibERfbHEgPSAkXzVpeEppOXdbJ2JsRF9scSddOwogICAgICAgICAgICAkbERfUWxxID0gJF81aXhKaTl3WydsRF9RbHEnXTsKICAgICAgICAgICAgJGxEX2xxID0gJF81aXhKaTl3WydsRF9scSddOwogICAgICAgICAgICAkbERGX2xxID0gJF81aXhKaTl3WydsREZfbHEnXTsKICAgICAgICAgICAgJG9scSA9ICRfNWl4Smk5d1snb2xxJ107CiAgICAgICAgICAgICRkbHEgPSAkXzVpeEppOXdbJ2RscSddOwogICAgICAgICAgICAkTGFXX29PbHEgPSAkXzVpeEppOXdbJ29PbHEnXTsKICAgICAgICAgICAgJGxEX29CbGFxSFFfcUhyamxheSA9IG9qeUhOaF9Idkw4cUgoJGxEX2xxLidAJy4kbERfUWxxLidAJy4kb2xxKTsKCiAgICAgICAgICAgICRfOWk5OVpjMFsnbERfb2xxJ10gPSAkb2xxOwogICAgICAgICAgICAkXzlpOTlaYzBbJ2xEX29PbHEnXSA9ICRfNWl4Smk5d1snb09scSddOwoKICAgICAgICAgICAgLy9kUWx2cl9RKCRfNWl4Smk5dyk7CgoKCiAgICAgICAgICAgICRsdnFIdV9GbEhhcV9xSHJqbGF5ID0gJFpFQTl3aTUtPm5Iclp2cUh1M2xIYXEzOFFpdUxIYV82UlpFWnEoJGxEX2xxKTsKCiAgICAgICAgICAgICRaRUE5d2k1LT55SHI1SEw4UXFacSgkbERfUWxxKTsKICAgICAgICAgICAgJGx2cUh1X09qYUJIX3FIcmpsYXkgPSAkWkVBOXdpNS0+bkhyWnZxSHVZamFCSF82UjVITDhRcTlIclpxKCRsRF9scSk7CiAgICAgICAgICAgICR5SGFITHJfRmxIYXEgPSBqUVFqUigpOwogICAgICAgICAgICBGOFEgKCR1ID0gbTsgJHUgPCBMOEJ2cigkbHZxSHVfRmxIYXFfcUhyamxheSk7ICR1KyspIHsKICAgICAgICAgICAgICAgIGxGICgkbHZxSHVfRmxIYXFfcUhyamxheVskdV1bJ0ZsSGFxX3JSZEgnXSA9PSAnOUhhSExyIEVIdkInKSB7CiAgICAgICAgICAgICAgICAgICAgalFRalJfZEJ5ZSgkeUhhSExyX0ZsSGFxLCAkbHZxSHVfRmxIYXFfcUhyamxheVskdV1bJ0ZsSGFxX3ZqREhfcmpvYUgnXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGx2cUh1X0RqeXJIUV9GbEhhcXkgPSAkWkVBOXdpNS0+bkhyWnZxSHUzbEhhcTBqREhfNlJaRVpxKCRsRF9scSk7CgogICAgICAgICAgICAkdEJIUVJfRmxIYXF5ID0galFRalIoKTsKICAgICAgICAgICAgJHRCSFFSX09qYUJIeSA9IGpRUWpSKCk7CgoKICAgICAgICAgICAgRjhRICgkdSA9IG07ICR1IDwgTDhCdnIoJGx2cUh1X0ZsSGFxX3FIcmpsYXkpOyAkdSsrKSB7CiAgICAgICAgICAgICAgICAkcV9GbEhhcV92akRIX3Jqb2FIID0gJGx2cUh1X0ZsSGFxX3FIcmpsYXlbJHVdWydGbEhhcV92akRIX3Jqb2FIJ107CgogICAgICAgICAgICAgICAgbEYgKCRsdnFIdV9GbEhhcV9xSHJqbGF5WyR1XVsnRmxIYXFfclJkSCddID09ICc5SGFITHIgRUh2QicpIHsKICAgICAgICAgICAgICAgICAgICAkcUhyamxheSA9ICRaRUE5d2k1LT5uSHIzbEhhcWl1ckh2cV82UlpxKCRsdnFIdV9PamFCSF9xSHJqbGF5W21dWyRxX0ZsSGFxX3ZqREhfcmpvYUhdKTsKICAgICAgICAgICAgICAgICAgICBsRiAoIUhEZHJSKCRxSHJqbGF5KSkgewogICAgICAgICAgICAgICAgICAgICAgICAkRmxIYXFfT2phQkggPSAkcUhyamxheVttXVsnbHEnXTsKICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAkRmxIYXFfT2phQkggPSAkbHZxSHVfT2phQkhfcUhyamxheVttXVskcV9GbEhhcV92akRIX3Jqb2FIXTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGpRUWpSX2RCeWUoJHRCSFFSX09qYUJIeSwgJEZsSGFxX09qYUJIKTsKICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgJEZsSGFxX09qYUJIID0gJGx2cUh1X09qYUJIX3FIcmpsYXlbbV1bJHFfRmxIYXFfdmpESF9yam9hSF07CiAgICAgICAgICAgICAgICAgICAgalFRalJfZEJ5ZSgkdEJIUVJfT2phQkh5LCAkRmxIYXFfT2phQkgpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGpRUWpSX2RCeWUoJHRCSFFSX0ZsSGFxeSwgJHFfRmxIYXFfdmpESF9yam9hSCk7CgogICAgICAgICAgICAgICAgbEYgKCRsRF9GbHEgPT0gJGx2cUh1X0ZsSGFxX3FIcmpsYXlbJHVdWydscSddKSB7CiAgICAgICAgICAgICAgICAgICAgJHlIYV9sREZfdmpESCA9ICRsdnFIdV9GbEhhcV9xSHJqbGF5WyR1XVsnRmxIYXFfdmpESCddOwogICAgICAgICAgICAgICAgICAgICR5SGFfbERGX09qYUJIID0gJEZsSGFxX09qYUJIOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgoKCiAgICAgICAgICAgICRqX3lySGRfcUhyamxheSA9ICRJOFFXRmE4Yi0+bkhyX1p2ZFE4TEh5eTlySGR5X0laRV82UjZscSgkZGxxLCAkb2xxLCAkbERfbHEsICRsRF9RbHEpOwogICAgICAgICAgICAkal95ckhkX2pRUSA9IGpRUWpSKCk7CiAgICAgICAgICAgICRqX3lySGRyUmRIX2pRUSA9IGpRUWpSKCk7CiAgICAgICAgICAgIEY4UUhqTGUgKCRqX3lySGRfcUhyamxheSBqeSAkal95ckhkKSB7CiAgICAgICAgICAgICAgICAkal9vT2phQkhfcUhyamxheSA9ICRJNkJsYXFIUS0+bkhyX0k2QmxhcUhRWWphQkhfWnEoJGpfeXJIZFsnal9vQmxhcUhRX09qYUJIX2xxJ10pOwogICAgICAgICAgICAgICAgalFRalJfQnZ5ZWxGcigkal95ckhkX2pRUSwgJGpfeXJIZFsnal9vQmxhcUhRX09qYUJIX2xxJ10pOwogICAgICAgICAgICAgICAgalFRalJfQnZ5ZWxGcigkal95ckhkclJkSF9qUVEsICRqX29PamFCSF9xSHJqbGF5W21dWyd5ckhkX3JSZEgnXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGpfeXJIZF83OGx2ID0gNzhsdignLCcsICRqX3lySGRfalFRKTsKICAgICAgICAgICAgLy9ITGU4ICRfNWl4Smk5d1snb09scSddOwogICAgICAgICAgICBsRiAoIUhEZHJSKCRfNWl4Smk5d1snb09scSddKSkgewogICAgICAgICAgICAgICAgJG9PbHEgPSAkXzVpeEppOXdbJ29PbHEnXTsKICAgICAgICAgICAgICAgICRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnb09scScgLiAkb2xxXSA9ICRvT2xxOwogICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgJG9PbHEgPSAkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ29PbHEnIC4gJG9scV07CiAgICAgICAgICAgIH0KLy8kYWp5cl95cmpyQnk9JEk4UVdGYThiLT5uSHJfSVpFVmp5cl95cmpyQnkoJG9scSwkbERfUWxxLCRfNWl4Smk5d1snb09scSddKTsKLy8gSExlOCAkb2xxIC4gIiMiIC4gJGxEX2xxIC4gIiMiIC4gJGxEX1FscSAuICIjIiAuICRibERfbHEuIiMiLiRfNWl4Smk5d1snb09scSddLiIjIjsKICAgICAgICAgICAgLyogJGFqeXJfeXJqckJ5X2x2Rjg9IiI7CiAgICAgICAgICAgICAgJGFqeXJfeXJqckJ5X2x2Rjg9ICRhanlyX3lyanJCeVttXVsneXJqckJ5J107CiAgICAgICAgICAgICAgJFFIdEJIeXJfeXJqckJ5X3lyUV9hanlyPSIiOwogICAgICAgICAgICAgIEhMZTggJGFqeXJfeXJqckJ5X2x2Rjg7CiAgICAgICAgICAgICAgSExlOCAiPG9RPiI7CiAgICAgICAgICAgICAgbEYgKEhEZHJSKCRhanlyX3lyanJCeV9sdkY4KSkgewogICAgICAgICAgICAgICRRSHRCSHlyX3lyanJCeV95clFfYWp5ciA9ICc0SHZxbHZuJzsKICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanlyX3lyanJCeV9sdkY4ID09ICdVJykgewogICAgICAgICAgICAgICRRSHRCSHlyX3lyanJCeV95clFfYWp5ciA9ICdBZGRROE9IcSc7CiAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYWp5cl95cmpyQnlfbHZGOCA9PSAnSycpIHsKICAgICAgICAgICAgICAkUUh0Qkh5cl95cmpyQnlfeXJRX2FqeXIgPSAnaXlMamFqckgnOwogICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqeXJfeXJqckJ5X2x2RjggPT0gJ1gnKSB7CiAgICAgICAgICAgICAgJFFIdEJIeXJfeXJqckJ5X3lyUV9hanlyID0gJzVIN0hMckhxJzsKICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanlyX3lyanJCeV9sdkY4ID09ICdoJykgewogICAgICAgICAgICAgICRRSHRCSHlyX3lyanJCeV95clFfYWp5ciA9ICdpdnEgankgamRkUThPamEnOwogICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqeXJfeXJqckJ5X2x2RjggPT0gJ0MnKSB7CiAgICAgICAgICAgICAgJFFIdEJIeXJfeXJqckJ5X3lyUV9hanlyID0gJ2l2cSBqeSBRSDdITHJIcSc7CiAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYWp5cl95cmpyQnlfbHZGOCA9PSAnTicpIHsKICAgICAgICAgICAgICAkUUh0Qkh5cl95cmpyQnlfeXJRX2FqeXIgPSAnVDhhcSc7CiAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYWp5cl95cmpyQnlfbHZGOCA9PSAnZycpIHsKICAgICAgICAgICAgICAkUUh0Qkh5cl95cmpyQnlfeXJRX2FqeXIgPSAnNUhGSFFRSHEgKEc4dnlCYXIpIC0gWnZkUThMSHl5JzsKICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanlyX3lyanJCeV9sdkY4ID09ICd6JykgewogICAgICAgICAgICAgICRRSHRCSHlyX3lyanJCeV95clFfYWp5ciA9ICc1SEZIUVFIcSAoRzh2eUJhcikgLSBHYTh5SHEnOwogICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqeXJfeXJqckJ5X2x2RjggPT0gJ1AnKSB7CiAgICAgICAgICAgICAgJFFIdEJIeXJfeXJqckJ5X3lyUV9hanlyID0gJzM4UUxIIEdhOHlIcSc7CiAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYWp5cl95cmpyQnlfbHZGOCA9PSAnVW0nKSB7CiAgICAgICAgICAgICAgJFFIdEJIeXJfeXJqckJ5X3lyUV9hanlyID0gJ0FkZFE4T0ggPT4gSnlIUSc7CiAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYWp5cl95cmpyQnlfbHZGOCA9PSAnVVUnKSB7CiAgICAgICAgICAgICAgJFFIdEJIeXJfeXJqckJ5X3lyUV9hanlyID0gJ0FkZFE4T0hxIGJscmUgRjhRYmpRcSc7CiAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYWp5cl95cmpyQnlfbHZGOCA9PSAnVUsnKSB7CiAgICAgICAgICAgICAgJFFIdEJIeXJfeXJqckJ5X3lyUV9hanlyID0gJzVIN0hMckhxIGJscmUgRjhRYmpRcSc7CiAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYWp5cl95cmpyQnlfbHZGOCA9PSAnVVgnKSB7CiAgICAgICAgICAgICAgJFFIdEJIeXJfeXJqckJ5X3lyUV9hanlyID0gJzVIN0hMckhxIGJscmUgb2pMV2JqUXEnOwogICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqeXJfeXJqckJ5X2x2RjggPT0gJ1VoJykgewogICAgICAgICAgICAgICRRSHRCSHlyX3lyanJCeV95clFfYWp5ciA9ICc5V2xkSHEnOwogICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqeXJfeXJqckJ5X2x2RjggPT0gJ1VOJykgewogICAgICAgICAgICAgICRRSHRCSHlyX3lyanJCeV95clFfYWp5ciA9ICdNSGFIbmpySCc7CiAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYWp5cl95cmpyQnlfbHZGOCA9PSAnVWcnKSB7CiAgICAgICAgICAgICAgJFFIdEJIeXJfeXJqckJ5X3lyUV9hanlyID0gJzNhSHVsRmE4Yic7CiAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYWp5cl95cmpyQnlfbHZGOCA9PSAnVXonKSB7CiAgICAgICAgICAgICAgJFFIdEJIeXJfeXJqckJ5X3lyUV9hanlyID0gJ0F5eWxudkhxIHI4IEJ5SFEnOwogICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqeXJfeXJqckJ5X2x2RjggPT0gJ1VQJykgewogICAgICAgICAgICAgICRRSHRCSHlyX3lyanJCeV95clFfYWp5ciA9ICc1OEJ2cSA1OG9sdic7CiAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYWp5cl95cmpyQnlfbHZGOCA9PSAnS20nKSB7CiAgICAgICAgICAgICAgJFFIdEJIeXJfeXJqckJ5X3lyUV9hanlyID0gJ1ZqckhRamEgM2E4YiAtIFp2ZFE4TEh5eSc7CiAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYWp5cl95cmpyQnlfbHZGOCA9PSAnS1UnKSB7CiAgICAgICAgICAgICAgJFFIdEJIeXJfeXJqckJ5X3lyUV9hanlyID0gJ1ZqckhRamEgM2E4YiAtIEdhOHlIcSc7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIEhMZTggJFFIdEJIeXJfeXJqckJ5X3lyUV9hanlyOwogICAgICAgICAgICAgIEhMZTggInx8IjsKICAgICAgICAgICAgICBIdWxyOwogICAgICAgICAgICAgKi8KICAgICAgICAgICAgJGFqckhRamFfRmE4Yl95ckhkeSA9ICRJNkJsYXFIUS0+bkhyX2I4UVdGYThiX2xEX1ZCeUhReSgkZGxxLCAkb2xxLCAkb09scSwgJGxEX2xxLCAkbERfUWxxKTsKICAgICAgICAgICAgJGFqckhRamFfRmE4Yl95ckhkeV9sdmRROExIeXkgPSAkSTZCbGFxSFEtPm5Icl9iOFFXRmE4Yl9sRF9WQnlIUXlfeXJqckJ5KCRkbHEsICRvbHEsICRvT2xxLCAkbERfbHEsICRsRF9RbHEsICdLbScpOwoKICAgICAgICAgICAgJGFqckhRamFfbHZkUThMSHl5X0J5SFF5ID0galFRalJfTDhhQkR2KCRhanJIUWphX0ZhOGJfeXJIZHlfbHZkUThMSHl5LCAiQnlIUV9scSIpOwogICAgICAgICAgICAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgIyAgICAgICAzVmlwWiAzVmNJCiAgICAgICAgICAgICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgJEk2QmxhcUhRLT55SHI0UTg3SExyWnEoJGRscSk7CiAgICAgICAgICAgICRJNkJsYXFIUS0+eUhyNkJsYXFIUVpxKCRvbHEpOwogICAgICAgICAgICAkSTZCbGFxSFEtPnlIcjVITDhRcTlIclpxKCRsRF9RbHEpOwogICAgICAgICAgICAkRmFIdWxGYThiX3lySGR5ID0gJEk2QmxhcUhRLT5uSHJfSThRV0ZhOGJfWkVfM2FIdSgpOwogICAgICAgICAgICAkRkZfeXJIZF9qUVEgPSBqUVFqUigpOwogICAgICAgICAgICBGOFFIakxlICgkRmFIdWxGYThiX3lySGR5IGp5ICRGRl95ckhkKSB7CiAgICAgICAgICAgICAgICBqUVFqUl9kQnllKCRGRl95ckhkX2pRUSwgJEZGX3lySGRbJ29CbGFxSFFfT2phQkhfbHEnXSk7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgICAkdkh1cl9kalFqYWFIYV95ckhkeSA9ICRJNkJsYXFIUS0+bkhyX0k2QmxhcUhRWWphQkhfMEh1cl82WnFfNGpRamFhSGEoJG9scSwgJG9PbHEpOwoKICAgICAgICAgICAgLy9qUVFqUl9kOGQoJHZIdXJfZGpRamFhSGFfeXJIZHkpOwogICAgICAgICAgICAvL2RRbHZyX1EoJHZIdXJfZGpRamFhSGFfeXJIZHkpOwoKCiAgICAgICAgICAgIGxGICgkal95ckhkX3FIcmpsYXlbbV1bJ3lySGRfclJkSCddID09IFUgfHwgJGpfeXJIZF9xSHJqbGF5W21dWyd5ckhkX3JSZEgnXSA9PSBtKSB7CiAgICAgICAgICAgICAgICAkSTZCbGFxSFEtPmRROExIeXlfeXJIZHkgPSBqUVFqUigpOwogICAgICAgICAgICAgICAgJHZIdXJfeUh0Qkh2cmxqYV95ckhkID0gJEk2QmxhcUhRLT5uSHJfSTZCbGFxSFFZamFCSF8wSHVyXzZacV85SHRCSHZybGphKCRvbHEsICRvT2xxKTsKICAgICAgICAgICAgICAgICR2SHVyX3l0Qkh2cmxqYV95ckhkID0gSHZxKCR2SHVyX3lIdEJIdnJsamFfeXJIZCk7CiAgICAgICAgICAgICAgICAvL0hMZTggJHZIdXJfeXRCSHZybGphX3lySGQ7CgogICAgICAgICAgICAgICAgJG5Icl9GRl9vanJMZV95ckhkeSA9ICRJNkJsYXFIUS0+bkhyXzMzX1Fqdm5IKCRvbHEsICRvT2xxLCAkdkh1cl95dEJIdnJsamFfeXJIZCwgJGxEX1FscSk7CiAgICAgICAgICAgICAgICAkdjhfRkZfb2pyTGVfeXJIZHkgPSBMOEJ2cigkbkhyX0ZGX29qckxlX3lySGR5KTsKICAgICAgICAgICAgICAgIGxGIChIRGRyUigkdjhfRkZfb2pyTGVfeXJIZHkpKSB7CiAgICAgICAgICAgICAgICAgICAgbEYgKEw4QnZyKCR2SHVyX2RqUWphYUhhX3lySGR5KSA+IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGphYThiX0ZhSHVsRmE4YiA9IFU7CiAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGphYThiX0ZhSHVsRmE4YiA9IG07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAkamFhOGJfRmFIdWxGYThiID0gbTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICRqYWE4Yl9GYUh1bEZhOGIgPSBtOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vSExlOCAkamFhOGJfRmFIdWxGYThiOwogICAgICAgICAgICAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgIyAgICAgICBpME0gLSAzVmlwWiAzVmNJCiAgICAgICAgICAgICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAvLyAgIEdUaUdzIDRBNUFWVmlWIDl3aTQgQVY1aUFNayA1SjAwWjAyCiAgICAgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICRseV95ckhkclJkSF9kalFqYWFIYSA9IG07CiAgICAgICAgICAgICRseV95ckhkclJkSF95SHRCSHZybGphID0gbTsKICAgICAgICAgICAgJHUgPSBtOwogICAgICAgICAgICBGOFFIakxlICgkal95ckhkclJkSF9qUVEgankgJGpfeXJIZHJSZEgpIHsKICAgICAgICAgICAgICAgIC8vSExlOCAkb09scS4nICcuJGpfeXJIZF9qUVFbJHVdLicvJzsgICAgICAgIAogICAgICAgICAgICAgICAgbEYgKCRqX3lySGRyUmRIID09IEspIHsKICAgICAgICAgICAgICAgICAgICAkbHlfeXJIZHJSZEhfZGpRamFhSGEgKz0gVTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBsRiAoJGpfeXJIZHJSZEggPT0gVSkgewogICAgICAgICAgICAgICAgICAgIGxGICgkbHlfeXJIZHJSZEhfZGpRamFhSGEgPj0gVSkgewogICAgICAgICAgICAgICAgICAgICAgICAkZGpRamFhSGFfeXJIZF9RQnZ2bHZuID0gVTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGx5X3lySGRyUmRIX3lIdEJIdnJsamEgKz0gVTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBsRiAoJG9PbHEgPT0gJGpfeXJIZF9qUVFbJHVdKSB7CiAgICAgICAgICAgICAgICAgICAgb1FIalc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdSsrOwogICAgICAgICAgICB9CgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBpME0gR1RpR3MgNEE1QVZWaVYgOXdpNCBBVjVpQU1rIDVKMDBaMDIKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgIGxGIChIRGRyUigkb09scSkpIHsKICAgICAgICAgICAgICAgIEhMZTggJzxxbE8gTGFqeXk9ImphSFFyIj48b0Jycjh2IHJSZEg9Im9CcnI4diIgTGFqeXk9IkxhOHlIIiBxanJqLXFseURseXk9ImphSFFyIj7Dlzwvb0Jycjh2PjxsIExhanl5PSJsTDh2LUh1TGFqRGpybDh2LXlsbnYiPjwvbD48eXJROHZuPklqUXZsdm4hPC95clE4dm4+IDlIYUhMciBiOFFXLUZhOGIgeXJIZCEuPC9xbE8+JzsKICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICQyYThvamFfOUhycmx2bnkgPSB2SGIgbmE4b2phX3lIcnJsdm55KCRxbyk7CiAgICAgICAgICAgICAgICAkQWRkUThPSHFVID0gJDJhOG9qYV85SHJybHZueS0+bkhyX2pkZGFsTGpybDh2X3lsU0hWbERscl9xSHJqbGFfb1JacShoKTsKICAgICAgICAgICAgICAgICRKdmpkZFE4T0hxVSA9ICQyYThvamFfOUhycmx2bnktPm5Icl9qZGRhbExqcmw4dl95bFNIVmxEbHJfcUhyamxhX29SWnEoQyk7CiAgICAgICAgICAgICAgICAkNUg3SExySHFVID0gJDJhOG9qYV85SHJybHZueS0+bkhyX2pkZGFsTGpybDh2X3lsU0hWbERscl9xSHJqbGFfb1JacShOKTsKICAgICAgICAgICAgICAgICRxOExCREh2cl9qdnY4cmpybDh2X3lyanJCeSA9ICQyYThvamFfOUhycmx2bnktPm5Icl9EOHFCYUhfbHZGOF9vUlpxKFhoKTsKLy9ITGU4ICRvT2xxOwogICAgICAgICAgICAgICAgJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydvT2xxJyAuICRvbHFdID0gJG9PbHE7CgoKICAgICAgICAgICAgICAgICRvQmxhcUhRX3FIcmpsYXkgPSAkSTZCbGFxSFEtPm5Icl9JNkJsYXFIUV9acSgkb2xxKTsKICAgICAgICAgICAgICAgICRiRGp2am5IUV9sdkY4ID0gJEp5SFEtPm5Ickp5SFEwakRIXzZSWnEoJG9CbGFxSFFfcUhyamxheVttXVsnYjhRV0ZhOGJfRGp2am5IUSddKTsKICAgICAgICAgICAgICAgICRiRGp2am5IUV92akRIID0gJGJEanZqbkhRX2x2RjhbbV1bJ0Z2akRIJ10gLiAnICcgLiAkYkRqdmpuSFFfbHZGOFttXVsnRHZqREgnXSAuICcgJyAuICRiRGp2am5IUV9sdkY4W21dWydhdmpESCddOwoKICAgICAgICAgICAgICAgICRibERfcUhyamxheSA9ICRJOFFXRmE4Yi0+bkhySVpFXzZSWk0oJGJsRF9scSk7CiAgICAgICAgICAgICAgICAvL2RRbHZyX1EoJF81aXhKaTl3KTsKLy9kUWx2cl9RKCRibERfcUhyamxheSk7CiAgICAgICAgICAgICAgICAvLyRkbHEgPSAkYmxEX3FIcmpsYXlbbV1bJ2RRODdITHJfbHEnXTsKICAgICAgICAgICAgICAgIC8vJGxEX2xxID0gJGJsRF9xSHJqbGF5W21dWydsRF9scSddOwogICAgICAgICAgICAgICAgLy8kbERGX2xxID0gJGJsRF9xSHJqbGF5W21dWydsREZfbHEnXTsKICAgICAgICAgICAgICAgIC8vJGxEX1FscSA9ICRibERfcUhyamxheVttXVsnUUhMOFFxX3lIcl9scSddOwoKICAgICAgICAgICAgICAgICRMZUhMV192SHVyX29CbGFxSFFfcUhyamxheSA9ICRJNkJsYXFIUS0+bkhyX0k2QmxhcUhRWWphQkhfMEh1cl82WnEoJG9scSwgJG9PbHEpOwoKICAgICAgICAgICAgICAgIGxGIChIRGRyUigkTGVITFdfdkh1cl9vQmxhcUhRX3FIcmpsYXkpKSB7CiAgICAgICAgICAgICAgICAgICAgJGx5X2FqeXJfeXJIZCA9IFU7CiAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICRseV9hanlyX3lySGQgPSBtOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRsdnFIdV9EanlySFFfcUhyamxheSA9ICRaRUE5d2k1LT5uSHJadnFIdUVqeXJIUV82UlpxKCRsRF9scSk7CiAgICAgICAgICAgICAgICAkckhEZGFqckhfdmpESCA9ICRsdnFIdV9EanlySFFfcUhyamxheVttXVsnbHZxSHVfRGp5ckhRJ107CiAgICAgICAgICAgICAgICAkbHZxSHVfRmxIYXFfcUhyamxheSA9ICRaRUE5d2k1LT5uSHJadnFIdTNsSGFxSnlIUSgkbERfbHEsICRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnUThhSCddKTsKICAgICAgICAgICAgICAgICR3SERkYWpySC0+eUhyNFE4N0hMcl9acSgkZGxxKTsKICAgICAgICAgICAgICAgICRySERkYWpySF9xSHJqbGF5ID0gJHdIRGRhanJILT5uSHJ3SERkYWpySDZSMGpESCgkckhEZGFqckhfdmpESCk7Ci8vZFFsdnJfUSgkckhEZGFqckhfcUhyamxheSk7CgogICAgICAgICAgICAgICAgJFpFQTl3aTUtPnlIcjVITDhRcVpxKCRsRF9RbHEpOwogICAgICAgICAgICAgICAgJGx2cUh1X09qYUJIX3FIcmpsYXkgPSAkWkVBOXdpNS0+bkhyWnZxSHVZamFCSF82UjVITDhRcTlIclpxKCRsRF9scSk7CiAgICAgICAgICAgICAgICAkbERfRmxIYXFfbHZGOCA9ICRaRUE5d2k1LT5uSHJadnFIdTNsSGFxXzZSWnEoJGxERl9scSk7CgovL2RRbHZyX1EoJGxERl9scSk7CgoKICAgICAgICAgICAgICAgICRqX29CbGFxSFFfT2phQkhfbHEgPSAkal95ckhkXzc4bHY7CgogICAgICAgICAgICAgICAgJGRRODdITHJfcUhyamxheSA9ICQ0UTg3SExyLT5uSHI0UTg3SExyXzZSWnEoJGRscSk7CiAgICAgICAgICAgICAgICAkb09qYUJIX3FIcmpsYXkgPSAkSTZCbGFxSFEtPm5Icl9JNkJsYXFIUVlqYUJIX1pxKCRvT2xxKTsKCiAgICAgICAgICAgICAgICAkb0JsYXFIUV9PamFCSF9RUThhSHkgPSAkSTZCbGFxSFEtPm5Icl9iOFFXRmE4Yl9vQmxhcUhRXzVROGFIeV82UjZPbHEoJG9PbHEpOwoKICAgICAgICAgICAgICAgICRvQmxhcUhRX09qYUJIX1FROGFIX2pRUSA9IGpRUWpSKCk7CiAgICAgICAgICAgICAgICBGOFFIakxlICgkb0JsYXFIUV9PamFCSF9RUThhSHkgankgJG9CbGFxSFFfT2phQkhfUVE4YUgpIHsKICAgICAgICAgICAgICAgICAgICBqUVFqUl9kQnllKCRvQmxhcUhRX09qYUJIX1FROGFIX2pRUSwgJG9CbGFxSFFfT2phQkhfUVE4YUhbJ1E4YUhfbHEnXSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJG9CbGFxSFFfT2phQkhfYVE4YUh5ID0gJEk2QmxhcUhRLT5uSHJfYjhRV0ZhOGJfb0JsYXFIUV9WUThhSHlfNlI2T2xxKCRvT2xxKTsKCiAgICAgICAgICAgICAgICAkb0JsYXFIUV9PamFCSF9hUThhSF9qUVEgPSBqUVFqUigpOwogICAgICAgICAgICAgICAgRjhRSGpMZSAoJG9CbGFxSFFfT2phQkhfYVE4YUh5IGp5ICRvQmxhcUhRX09qYUJIX2FROGFIKSB7CiAgICAgICAgICAgICAgICAgICAgalFRalJfZEJ5ZSgkb0JsYXFIUV9PamFCSF9hUThhSF9qUVEsICRvQmxhcUhRX09qYUJIX2FROGFIWydROGFIX2xxJ10pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRvQmxhcUhRX09qYUJIX3FROGFIeSA9ICRJNkJsYXFIUS0+bkhyX2I4UVdGYThiX29CbGFxSFFfTVE4YUh5XzZSNk9scSgkb09scSk7CgoKICAgICAgICAgICAgICAgICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgIyAgICAgICAzVmlwWiAzVmNJCiAgICAgICAgICAgICAgICAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAkSTZCbGFxSFEtPnlIcjRRODdITHJacSgkZGxxKTsKICAgICAgICAgICAgICAgICRJNkJsYXFIUS0+eUhyNkJsYXFIUVpxKCRvbHEpOwogICAgICAgICAgICAgICAgJEk2QmxhcUhRLT55SHI1SEw4UXE5SHJacSgkbERfUWxxKTsKICAgICAgICAgICAgICAgICRGYUh1bEZhOGJfeXJIZHkgPSAkSTZCbGFxSFEtPm5Icl9JOFFXRmE4Yl9aRV8zYUh1KCk7CiAgICAgICAgICAgICAgICAkRkZfeXJIZF9qUVEgPSBqUVFqUigpOwogICAgICAgICAgICAgICAgRjhRSGpMZSAoJEZhSHVsRmE4Yl95ckhkeSBqeSAkRkZfeXJIZCkgewogICAgICAgICAgICAgICAgICAgIGpRUWpSX2RCeWUoJEZGX3lySGRfalFRLCAkRkZfeXJIZFsnb0JsYXFIUV9PamFCSF9scSddKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkSTZCbGFxSFEtPmRROExIeXlfeXJIZHkgPSBqUVFqUigpOwogICAgICAgICAgICAgICAgJHZIdXJfZGpRamFhSGFfeXJIZHkgPSAkSTZCbGFxSFEtPm5Icl9JNkJsYXFIUVlqYUJIXzBIdXJfNlpxXzRqUWphYUhhKCRvbHEsICRvT2xxKTsKCiAgICAgICAgICAgICAgICAvL2pRUWpSX2Q4ZCgkdkh1cl9kalFqYWFIYV95ckhkeSk7CiAgICAgICAgICAgICAgICAvL2RRbHZyX1EoJHZIdXJfZGpRamFhSGFfeXJIZHkpOwoKCiAgICAgICAgICAgICAgICBsRiAoJG9PamFCSF9xSHJqbGF5W21dWyd5ckhkX3JSZEgnXSA9PSBVIHx8IEhEZHJSKCRvT2phQkhfcUhyamxheVttXVsneXJIZF9yUmRIJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJEk2QmxhcUhRLT5kUThMSHl5X3lySGR5ID0galFRalIoKTsKICAgICAgICAgICAgICAgICAgICAkdkh1cl95SHRCSHZybGphX3lySGQgPSAkSTZCbGFxSFEtPm5Icl9JNkJsYXFIUVlqYUJIXzBIdXJfNlpxXzlIdEJIdnJsamEoJG9scSwgJG9PbHEpOwogICAgICAgICAgICAgICAgICAgICR2SHVyX3l0Qkh2cmxqYV95ckhkID0gSHZxKCR2SHVyX3lIdEJIdnJsamFfeXJIZCk7CiAgICAgICAgICAgICAgICAgICAgLy9ITGU4ICR2SHVyX3l0Qkh2cmxqYV95ckhkOwoKICAgICAgICAgICAgICAgICAgICAkbkhyX0ZGX29qckxlX3lySGR5ID0gJEk2QmxhcUhRLT5uSHJfMzNfUWp2bkgoJG9scSwgJG9PbHEsICR2SHVyX3l0Qkh2cmxqYV95ckhkLCAkbERfUWxxKTsKICAgICAgICAgICAgICAgICAgICAkdjhfRkZfb2pyTGVfeXJIZHkgPSBMOEJ2cigkbkhyX0ZGX29qckxlX3lySGR5KTsKICAgICAgICAgICAgICAgICAgICBsRiAoSERkclIoJHY4X0ZGX29qckxlX3lySGR5KSkgewogICAgICAgICAgICAgICAgICAgICAgICBsRiAoTDhCdnIoJHZIdXJfZGpRamFhSGFfeXJIZHkpID4gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRROExIeXlIcV9GRl9vanJMZV95ckhkeSA9ICRJNkJsYXFIUS0+R2VITFdfNFE4TEh5eUhxXzlySGR5KCRvbHEsICRvT2xxLCAkdkh1cl95dEJIdnJsamFfeXJIZCwgJGxEX1FscSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdjhfZFE4TEh5eUhxX0ZGX29qckxlX3lySGR5ID0gTDhCdnIoJGRROExIeXlIcV9GRl9vanJMZV95ckhkeSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoSERkclIoJHY4X2RROExIeXlIcV9GRl9vanJMZV95ckhkeSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkamFhOGJfRmFIdWxGYThiID0gVTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGphYThiX0ZhSHVsRmE4YiA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkamFhOGJfRmFIdWxGYThiID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICRqYWE4Yl9GYUh1bEZhOGIgPSBtOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgJGphYThiX0ZhSHVsRmE4YiA9IG07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvL0hMZTggJGphYThiX0ZhSHVsRmE4YjsKICAgICAgICAgICAgICAgICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgIyAgICAgICBpME0gLSAzVmlwWiAzVmNJCiAgICAgICAgICAgICAgICAjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCgogICAgICAgICAgICAgICAgJG9CbGFxSFFfT2phQkhfcVE4YUhfalFRID0galFRalIoKTsKICAgICAgICAgICAgICAgIEY4UUhqTGUgKCRvQmxhcUhRX09qYUJIX3FROGFIeSBqeSAkb0JsYXFIUV9PamFCSF9xUThhSCkgewogICAgICAgICAgICAgICAgICAgIGpRUWpSX2RCeWUoJG9CbGFxSFFfT2phQkhfcVE4YUhfalFRLCAkb0JsYXFIUV9PamFCSF9xUThhSFsnUThhSF9scSddKTsKICAgICAgICAgICAgICAgIH0KCi8vSExlOCAkYmxEX2xxOwovL2RRbHZyX1EoJG9PamFCSF9xSHJqbGF5W21dWyd5ckhkX3ZqREgnXSk7CiAgICAgICAgICAgICAgICAvLy8gJFFCYUhfbHZGOCA9ICRJNUJhSC0+bkhyXzVCYUhfWk0oJFFCYUhfbHEpOwogICAgICAgICAgICAgICAgLy8kRjhRREJhal9xSHJqbGF5ID0gJEk1QmFILT5uSHJfRjhRREJhal9vUjVCYUgoJFFCYUhfbHEpOwogICAgICAgICAgICAgICAgLy8kdjhfRjhRREJhankgPSBMOEJ2cigkRjhRREJhal9xSHJqbGF5KTsKICAgICAgICAgICAgICAgICRkUUhPbDhCeV9vT2phQkhfcUhyamxheSA9ICRJNkJsYXFIUS0+bkhyX0k2QmxhcUhRWWphQkhfNFFIT2w4QnlfNlpxKCRvbHEsICRvT2xxKTsKCiAgICAgICAgICAgICAgICAkRmxReXJfb09qYUJIX3FIcmpsYXkgPSAkSTZCbGFxSFEtPm5Icl9JNkJsYXFIUVlqYUJIXzNsUXlyXzZacSgkb2xxKTsKCiAgICAgICAgICAgICAgICBsRiAoJEZsUXlyX29PamFCSF9xSHJqbGF5W21dWydscSddID09ICRvT2phQkhfcUhyamxheVttXVsnbHEnXSkgewogICAgICAgICAgICAgICAgICAgICRGbFF5cl95ckhkID0gVTsKICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgJEZsUXlyX3lySGQgPSBtOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGxGIChMOEJ2cigkZFFIT2w4Qnlfb09qYUJIX3FIcmpsYXkpID49IFUpIHsKICAgICAgICAgICAgICAgICAgICAkZFFIT195ckhkX3lyanJCeV9xSHJqbGF5ID0gJEk4UVdGYThiLT5uSHJfSVpFOXJqckJ5X1Zqckh5cjZPWnE1Wk0oJGRRSE9sOEJ5X29PamFCSF9xSHJqbGF5W21dWydscSddLCAkb2xxLCAkbERfUWxxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRhanJIeXJfeXJqckJ5X3FIcmpsYXkgPSAkSThRV0ZhOGItPm5Icl9JWkU5cmpyQnlfVmpySHlyNk9acTVaTSgkb09scSwgJG9scSwgJGxEX1FscSk7CgoKICAgICAgICAgICAgICAgICQ4dmRROExIeXlfeXJqckJ5X3FIcmpsYXkgPSAkSThRV0ZhOGItPm5Icl9JWkU5cmpyQnlfY3ZkUThMSHl5NVpNKCRvT2xxLCAkYmxEX2xxLCAkbERfUWxxKTsKCgoKICAgICAgICAgICAgICAgICRiOFFXRmE4YnlySGRfcUhyamxheSA9ICRJOFFXRmE4Yi0+bkhyX0k2QmxhcUhRWWphQkhfNlI2Wk0oJG9scSk7CiAgICAgICAgICAgICAgICAkdjhfeXJIZF9xSHJqbGF5ID0gTDhCdnIoJGI4UVdGYThieXJIZF9xSHJqbGF5KTsKCiAgICAgICAgICAgICAgICAkb09scV9qYWEgPSBqUVFqUl9MOGFCRHYoJGI4UVdGYThieXJIZF9xSHJqbGF5LCAnbHEnKTsKCgogICAgICAgICAgICAgICAgJExfb09scV9kOHlscmw4diA9IGpRUWpSX3lIalFMZSgkb09scSwgJG9PbHFfamFhKTsKCgogICAgICAgICAgICAgICAgJHJqeVdhbHlyX2x2RjggPSAkSTZCbGFxSFEtPm5IcjZCbGFxSFF3anlXXzZSWWphQkhacSgkb09scSk7CiAgICAgICAgICAgICAgICAkdjhfcmp5V2FseXJfbHZGOCA9IEw4QnZyKCRyanlXYWx5cl9sdkY4KTsKCgoKICAgICAgICAgICAgICAgICRROGFIX0RqeXJIUV9scSA9ICRvT2phQkhfcUhyamxheVttXVsnUThhSF9EanlySFFfbHEnXTsKCgogICAgICAgICAgICAgICAgJFFCYUhfbHEgPSAkb09qYUJIX3FIcmpsYXlbbV1bJ1FCYUhfbHEnXTsKCgogICAgICAgICAgICAgICAgLy8kUUJhSF9scSA9ICRibERfcUhyamxheVttXVsnal9RQmFIJ107CiAgICAgICAgICAgICAgICAvL2RRbHZyX1EoJG9PamFCSF9xSHJqbGF5KTsKCiAgICAgICAgICAgICAgICAvKgoKICAgICAgICAgICAgICAgICAgJGE4bl83eTh2ID0gJ3siSE9IdnJ5IjogWyc7CiAgICAgICAgICAgICAgICAgICRhOG55X2FseXIgPSAkSThRV0ZhOGItPm5Ickk4UVdGYThiX1Y4bnlfNlI1SEZGWnEoJ0kzIGx2cUh1LURqeXJIUScsICRibERfbHEsICRvbHEsICRsRF9RbHEpOwogICAgICAgICAgICAgICAgICAkdjhfYThueV9hbHlyID0gTDhCdnIoJGE4bnlfYWx5cik7CgogICAgICAgICAgICAgICAgICBGOFEgKCRsID0gbTsgJGwgPCAkdjhfYThueV9hbHlyOyAkbCsrKSB7CiAgICAgICAgICAgICAgICAgIGxGICgkbCArIFUgPCAkdjhfYThueV9hbHlyKSB7CiAgICAgICAgICAgICAgICAgICRMOEREaiA9ICcsJzsKICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgJEw4RERqID0gJyc7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgJExRSGpySHFfanIgPSAkYThueV9hbHlyWyRsXVsnTFFIanJIcV9qciddOwogICAgICAgICAgICAgICAgICAkYThuXzd5OHYgLj0gJ3sKICAgICAgICAgICAgICAgICAgInlyalFyX3FqckgiOiB7CiAgICAgICAgICAgICAgICAgICJEOHZyZSI6ICInIC4gcWpySCgidiIsIHlyUXI4cmxESCgkTFFIanJIcV9qcikpIC4gJyIsCiAgICAgICAgICAgICAgICAgICJxalIiOiAiJyAuIHFqckgoIjciLCB5clFyOHJsREgoJExRSGpySHFfanIpKSAuICciLAogICAgICAgICAgICAgICAgICAiUkhqUSI6ICInIC4gcWpySCgiayIsIHlyUXI4cmxESCgkTFFIanJIcV9qcikpIC4gJyIsCiAgICAgICAgICAgICAgICAgICJlOEJRIjogIicgLiBxanJIKCIyIiwgeXJRcjhybERIKCRMUUhqckhxX2pyKSkgLiAnIiwKICAgICAgICAgICAgICAgICAgIkRsdkJySCI6ICInIC4gcWpySCgibCIsIHlyUXI4cmxESCgkTFFIanJIcV9qcikpIC4gJyIsCiAgICAgICAgICAgICAgICAgICJ5SEw4dnEiOiAiJyAuIHFqckgoInkiLCB5clFyOHJsREgoJExRSGpySHFfanIpKSAuICciCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICJySHVyIjogewogICAgICAgICAgICAgICAgICAiZUhqcWFsdkgiOiAiJyAuICRhOG55X2FseXJbJGxdWyd5Qm9fRDhxQmFIJ10gLiAkYThueV9hbHlyWyRsXVsnclFsbm5IUV9kUThMSHl5J10gLiAnIgoKICAgICAgICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICAgICAgICJuUThCZCI6ICInIC4gJGE4bnlfYWx5clskbF1bJ3lCb19EOHFCYUgnXSAuICciCiAgICAgICAgICAgICAgICAgIH0nOwoKICAgICAgICAgICAgICAgICAgJGE4bl83eTh2IC49ICRMOEREajsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAkYThuXzd5OHYgLj0gJ119JzsKICAgICAgICAgICAgICAgICAgJGE4bnlfN3k4dl9GbGFIID0gJy4uL3E4TEJESHZyeS9yRGQvYkZfbERfJyAuICRsRF9RbHEgLiAnLjd5OHYnOwogICAgICAgICAgICAgICAgICBGbGFIX2RCcl9MOHZySHZyeSgkYThueV83eTh2X0ZsYUgsICRhOG5fN3k4dik7ICovCgogICAgICAgICAgICAgICAgJFE4YUhfRGp5ckhRX2xxID0gJGJsRF9xSHJqbGF5W21dWydqX1E4YUhfRGp5ckhRX2xxJ107CiAgICAgICAgICAgICAgICBsRiAoJG9PamFCSF9xSHJqbGF5W21dWydROGFIX0RqeXJIUV9scSddID09IC1VKSB7CiAgICAgICAgICAgICAgICAgICAgJFFCYUhfbHZGOCA9ICRJNUJhSC0+bkhyXzVCYUhfWk0oJFFCYUhfbHEpOwogICAgICAgICAgICAgICAgICAgIC8vZFFsdnJfUSgpOwoKICAgICAgICAgICAgICAgICAgICAkRjhRREJhal9xSHJqbGF5ID0gJEk1QmFILT5uSHJfRjhRREJhal9vUjVCYUgoJFFCYUhfbHEpOwogICAgICAgICAgICAgICAgICAgICR2OF9GOFFEQmFqeSA9IEw4QnZyKCRGOFFEQmFqX3FIcmpsYXkpOwogICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkb09qYUJIX3FIcmpsYXlbbV1bJ1E4YUhfRGp5ckhRX2xxJ10gPT0gLUspIHsKICAgICAgICAgICAgICAgICAgICAkUUJhSF9sdkY4ID0gJEk1QmFILT5uSHJfanFPanZMSHFfUUJhSF9vUlpNKCRRQmFIX2xxKTsKICAgICAgICAgICAgICAgICAgICAvL2RRbHZyX1EoKTsKCiAgICAgICAgICAgICAgICAgICAgJEY4UURCYWpfcUhyamxheSA9ICRJNUJhSC0+bkhyX1FCYUhfanFPanZMSHFfRjhRREJhanlfb1I1QmFIWk0oJFFCYUhfbHEpOwogICAgICAgICAgICAgICAgICAgICR2OF9GOFFEQmFqeSA9IEw4QnZyKCRGOFFEQmFqX3FIcmpsYXkpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRqX1E4YUhfRGp5ckhRX2xxID0gJGJsRF9xSHJqbGF5W21dWydqX1E4YUhfRGp5ckhRX2xxJ107CgogICAgICAgICAgICAgICAgJGx2cUh1X0ZsSGFxX3FIcmpsYXkgPSAkWkVBOXdpNS0+bkhyWnZxSHUzbEhhcUp5SFEoJGxEX2xxLCAkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ1E4YUgnXSk7CiAgICAgICAgICAgICAgICAkbHZxSHVfRGp5ckhRX0ZsSGFxX09qYUJIID0gJFpFQTl3aTUtPm5IckVqeXJIUVlqYUJIXzZSWk0oJGxEX2xxLCAkbERfUWxxKTsKICAgICAgICAgICAgICAgICR5SGFITHJfRmxIYXEgPSBqUVFqUigpOwogICAgICAgICAgICAgICAgRjhRICgkbCA9IG07ICRsIDwgTDhCdnIoJGx2cUh1X0ZsSGFxX3FIcmpsYXkpOyAkbCsrKSB7CiAgICAgICAgICAgICAgICAgICAgbEYgKCRsdnFIdV9GbEhhcV9xSHJqbGF5WyRsXVsnRmxIYXFfclJkSCddID09ICc5SGFITHIgRUh2QicgfHwgJGx2cUh1X0ZsSGFxX3FIcmpsYXlbJGxdWydGbEhhcV9yUmRIJ10gPT0gJ0dlSExXbzh1JyB8fCAkbHZxSHVfRmxIYXFfcUhyamxheVskbF1bJ0ZsSGFxX3JSZEgnXSA9PSAnNWpxbDgnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRUWpSX2RCeWUoJHlIYUhMcl9GbEhhcSwgJGx2cUh1X0ZsSGFxX3FIcmpsYXlbJGxdWydGbEhhcV92akRIX3Jqb2FIJ10pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRsdnFIdV9EanlySFFfRmxIYXF5ID0gJFpFQTl3aTUtPm5Iclp2cUh1M2xIYXEwakRIXzZSWkVacSgkbERfbHEpOwogICAgICAgICAgICAgICAgJEZsSGFxX3FIcmpsYXkgPSBqUVFqUigpOwogICAgICAgICAgICAgICAgbEYgKEhEZHJSKCR5SGFITHJfRmxIYXEpKSB7CgogICAgICAgICAgICAgICAgICAgIEY4USAoJGwgPSBtOyAkbCA8IEw4QnZyKCRsdnFIdV9EanlySFFfRmxIYXF5KTsgJGwrKykgewovL2pRUWpSX2RCeWUoJEZsSGFxX3FIcmpsYXksalFRalIoJGx2cUh1X0RqeXJIUV9GbEhhcXlbJGxdWydGbEhhcV92akRIX3Jqb2FIJ109PiRsdnFIdV9EanlySFFfRmxIYXFfT2phQkhbbV1bJGx2cUh1X0RqeXJIUV9GbEhhcXlbJGxdWydGbEhhcV92akRIX3Jqb2FIJ11dKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGpRUWpSX2RCeWUoJEZsSGFxX3FIcmpsYXksIGpRUWpSKG0gPT4gJGx2cUh1X0RqeXJIUV9GbEhhcXlbJGxdWydGbEhhcV92akRIX3Jqb2FIJ10sIFUgPT4gJGx2cUh1X0RqeXJIUV9GbEhhcV9PamFCSFttXVskbHZxSHVfRGp5ckhRX0ZsSGFxeVskbF1bJ0ZsSGFxX3ZqREhfcmpvYUgnXV0pKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgIEY4USAoJGwgPSBtOyAkbCA8IEw4QnZyKCRsdnFIdV9EanlySFFfRmxIYXF5KTsgJGwrKykgewoKCiAgICAgICAgICAgICAgICAgICAgICAgIGxGIChsdl9qUVFqUigkbHZxSHVfRmxIYXFfcUhyamxheVskbF1bJ0ZsSGFxX3ZqREhfcmpvYUgnXSwgJHlIYUhMcl9GbEhhcSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5SGFITHJfT2phQkggPSAkWkVBOXdpNS0+bkhyM2xIYXFpdXJIdnFfNlJacSgkbHZxSHVfRGp5ckhRX0ZsSGFxX09qYUJIW21dWyRsdnFIdV9EanlySFFfRmxIYXF5WyRsXVsnRmxIYXFfdmpESF9yam9hSCddXSk7Ci8vIEhMZTggJyoqKicuJGx2cUh1X0RqeXJIUV9GbEhhcV9PamFCSFttXVskbHZxSHVfRGp5ckhRX0ZsSGFxeVskbF1bJ0ZsSGFxX3ZqREhfcmpvYUgnXV07Ci8vIGRRbHZyX1EoJHlIYUhMcl9PamFCSCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUVFqUl9kQnllKCRGbEhhcV9xSHJqbGF5LCBqUVFqUihtID0+ICRsdnFIdV9EanlySFFfRmxIYXF5WyRsXVsnRmxIYXFfdmpESF9yam9hSCddLCBVID0+ICR5SGFITHJfT2phQkhbbV1bJ0ZsSGFxX09qYUJIJ10pKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRUWpSX2RCeWUoJEZsSGFxX3FIcmpsYXksIGpRUWpSKG0gPT4gJGx2cUh1X0RqeXJIUV9GbEhhcXlbJGxdWydGbEhhcV92akRIX3Jqb2FIJ10sIFUgPT4gJGx2cUh1X0RqeXJIUV9GbEhhcV9PamFCSFttXVskbHZxSHVfRGp5ckhRX0ZsSGFxeVskbF1bJ0ZsSGFxX3ZqREhfcmpvYUgnXV0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KLy9kUWx2cl9RKCRROGFIX0RqeXJIUV9scSk7CiAgICAgICAgICAgICAgICAkRmxIYXFfcUhyamxheSA9IDd5OHZfSHZMOHFIKCRGbEhhcV9xSHJqbGF5KTsKCiAgICAgICAgICAgICAgICAkal9vbHFfT2phQkggPSAkYmxEX3FIcmpsYXlbbV1bJ2pfb0JsYXFIUV9PamFCSF9scSddOwoKICAgICAgICAgICAgICAgIGxGICgkYmxEX3FIcmpsYXlbbV1bJ2pfb0JsYXFIUV9PamFCSF9scSddID09ICRvT2xxKSB7CiAgICAgICAgICAgICAgICAgICAgJHlySGRfUThhSF9scSA9ICRqX1E4YUhfRGp5ckhRX2xxOwogICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAkeXJIZF9ROGFIX2xxID0gJG9PamFCSF9xSHJqbGF5W21dWydROGFIX0RqeXJIUV9scSddOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy8keXJIZF9ROGFIX2xxID0gJGpfUThhSF9EanlySFFfbHE7CiAgICAgICAgICAgICAgICAvKiBsRiAoJHlySGRfUThhSF9scSA9PSAtVSkgewogICAgICAgICAgICAgICAgICAvLyRRQmFIX2x2RjggPSAkSTVCYUgtPm5Icl81QmFIX1pNKCR5ckhkX2x2RjhbbV1bJ1FCYUhfbHEnXSk7CiAgICAgICAgICAgICAgICAgICRGOFFEQmFqX3FIcmpsYXkgPSAkSTVCYUgtPm5Icl9GOFFEQmFqX29SNUJhSCgkb09qYUJIX3FIcmpsYXlbbV1bJ1FCYUhfbHEnXSk7CiAgICAgICAgICAgICAgICAgICR5ckhkX1E4YUhfbHEgPSAkRjhRREJhal9xSHJqbGF5W21dWydROGFIX0RqeXJIUV9scSddOwogICAgICAgICAgICAgICAgICB9ICovCgogICAgICAgICAgICAgICAgJEk1OGFILT55SHI1OGFIRWp5ckhRWnEoJHlySGRfUThhSF9scSk7CiAgICAgICAgICAgICAgICAkUThhSF9CeUhRblE4QmR5ID0gJEk1OGFILT5uSHJfQXl5bG52SHFfSnlIUW5ROEJkKCk7CgogICAgICAgICAgICAgICAgRjhRSGpMZSAoJFE4YUhfQnlIUW5ROEJkeSBqeSAkUThhSF9CeUhRblE4QmQpIHsKICAgICAgICAgICAgICAgICAgICBsRiAoJFE4YUhfQnlIUW5ROEJkWydROGFIX3JSZEgnXSA9PSBVKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRkUWxEalFSX0J5SFFuUThCZF9sdkY4ID0gJEp5SFEtPm5Ickp5SFEyUThCZF9vUlpxKCRROGFIX0J5SFFuUThCZFsnQnlIUV9uUThCZF9scSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGRRbERqUVJfQnlIUW5ROEJkID0gJGRRbERqUVJfQnlIUW5ROEJkX2x2RjhbbV1bJ3ZqREgnXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGRRbERqUVJfQnlIUW5ROEJkX2xxID0gJGRRbERqUVJfQnlIUW5ROEJkX2x2RjhbbV1bJ2xxJ107CgogICAgICAgICAgICAgICAgICAgICAgICAkak9qbGFqb2FIX2RRbERqUVJfQnlIUXkgPSAkSThRV0ZhOGItPm5Ick1FX0FPamxham9hSEp5SFFfNlI1OGFIKCRkbHEsICRkUWxEalFSX0J5SFFuUThCZF9scSk7CgogICAgICAgICAgICAgICAgICAgICAgICAkQnZqT2psYWpvYUhfZFFsRGpRUl9CeUhReSA9ICRJOFFXRmE4Yi0+bkhyTUVfSnZqT2psYWpvYUhKeUhRXzZSNThhSCgkZGxxLCAkZFFsRGpRUl9CeUhRblE4QmRfbHEpOwogICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJFE4YUhfQnlIUW5ROEJkWydROGFIX3JSZEgnXSA9PSBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR5SEw4dnFqUVJfQnlIUW5ROEJkX2x2RjggPSAkSnlIUS0+bkhySnlIUTJROEJkX29SWnEoJFE4YUhfQnlIUW5ROEJkWydCeUhRX25ROEJkX2xxJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAkeUhMOHZxalFSX0J5SFFuUThCZCA9ICR5SEw4dnFqUVJfQnlIUW5ROEJkX2x2RjhbbV1bJ3ZqREgnXTsKICAgICAgICAgICAgICAgICAgICAgICAgJHlITDh2cWpRUl9CeUhRblE4QmRfbHEgPSAkeUhMOHZxalFSX0J5SFFuUThCZF9sdkY4W21dWydscSddOwoKICAgICAgICAgICAgICAgICAgICAgICAgJGpPamxham9hSF95SEw4dnFqUVJfQnlIUXkgPSAkSThRV0ZhOGItPm5Ick1FX0FPamxham9hSEp5SFFfNlI1OGFIKCRkbHEsICR5SEw4dnFqUVJfQnlIUW5ROEJkX2xxKTsKICAgICAgICAgICAgICAgICAgICAgICAgJEJ2ak9qbGFqb2FIX3lITDh2cWpRUl9CeUhReSA9ICRJOFFXRmE4Yi0+bkhyTUVfSnZqT2psYWpvYUhKeUhRXzZSNThhSCgkZGxxLCAkeUhMOHZxalFSX0J5SFFuUThCZF9scSk7CiAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkUThhSF9CeUhRblE4QmRbJ1E4YUhfclJkSCddID09IC1VKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRseV9lbEhRalFMZVIgPSBVOwogICAgICAgICAgICAgICAgICAgICAgICAkRmxIYXFfbHEgPSAkUThhSF9CeUhRblE4QmRbJ0J5SFFfblE4QmRfbHEnXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICRaRWp5ckhRID0gdkhiIGx2cUh1X0RqeXJIUSgkcW8pOwogICAgICAgICAgICAgICAgICAgICAgICAkRmxIYXFfcUhyamxheSA9ICRaRWp5ckhRLT5uSHJadnFIdTNsSGFxXzZSWnEoJEZsSGFxX2xxKTsKICAgICAgICAgICAgICAgICAgICAgICAgJEZsSGFxX3ZqREggPSAkRmxIYXFfcUhyamxheVttXVsnRmxIYXFfdmpESCddOwogICAgICAgICAgICAgICAgICAgICAgICAkbERfT2phQkhfcUhyamxheSA9ICRaRWp5ckhRLT5uSHJFanlySFEzbEhhcV92akRIKCRsRF9scSwgJGxEX1FscSwgJ2xEX0ZsSGFxXycgLiAkRmxIYXFfbHEpOwogICAgICAgICAgICAgICAgICAgICAgICAkRmxIYXFfT2phQkggPSAkbERfT2phQkhfcUhyamxheVttXVsnbERfRmxIYXFfJyAuICRGbEhhcV9scV07CgogICAgICAgICAgICAgICAgICAgICAgICAkZFFsRGpRUl9CeUhRblE4QmRfbHZGOCA9ICRKeUhRLT5uSHJKeUhRMlE4QmRfb1J2akRIKCRGbEhhcV9PamFCSCk7CgogICAgICAgICAgICAgICAgICAgICAgICAkZFFsRGpRUl9CeUhRblE4QmQgPSAkZFFsRGpRUl9CeUhRblE4QmRfbHZGOFttXVsndmpESCddOwogICAgICAgICAgICAgICAgICAgICAgICAkZFFsRGpRUl9CeUhRblE4QmRfbHEgPSAkZFFsRGpRUl9CeUhRblE4QmRfbHZGOFttXVsnbHEnXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICRqT2psYWpvYUhfZFFsRGpRUl9CeUhReSA9ICRJOFFXRmE4Yi0+bkhySnlIUXlfSnlIUTJROEJkVGxIUWpRTGVSKCRkUWxEalFSX0J5SFFuUThCZF9scSk7CgoKICAgICAgICAgICAgICAgICAgICAgICAgLy8kQnZqT2psYWpvYUhfZFFsRGpRUl9CeUhReVUgPSAkSThRV0ZhOGItPm5Ick1FX0p2ak9qbGFqb2FISnlIUV82UjU4YUgoJGRscSwgJGRRbERqUVJfQnlIUW5ROEJkX2xxVSk7CiAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkUThhSF9CeUhRblE4QmRbJ1E4YUhfclJkSCddID09IC1LKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRseV9lbEhRalFMZVIgPSBVOwogICAgICAgICAgICAgICAgICAgICAgICAkRmxIYXFfbHEgPSAkUThhSF9CeUhRblE4QmRbJ0J5SFFfblE4QmRfbHEnXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICRaRWp5ckhRID0gdkhiIGx2cUh1X0RqeXJIUSgkcW8pOwogICAgICAgICAgICAgICAgICAgICAgICAkRmxIYXFfcUhyamxheSA9ICRaRWp5ckhRLT5uSHJadnFIdTNsSGFxXzZSWnEoJEZsSGFxX2xxKTsKICAgICAgICAgICAgICAgICAgICAgICAgJEZsSGFxX3ZqREggPSAkRmxIYXFfcUhyamxheVttXVsnRmxIYXFfdmpESCddOwogICAgICAgICAgICAgICAgICAgICAgICAkbERfT2phQkhfcUhyamxheSA9ICRaRWp5ckhRLT5uSHJFanlySFEzbEhhcV92akRIKCRsRF9scSwgJGxEX1FscSwgJ2xEX0ZsSGFxXycgLiAkRmxIYXFfbHEpOwogICAgICAgICAgICAgICAgICAgICAgICAkRmxIYXFfT2phQkggPSAkbERfT2phQkhfcUhyamxheVttXVsnbERfRmxIYXFfJyAuICRGbEhhcV9scV07CgogICAgICAgICAgICAgICAgICAgICAgICAkeUhMOHZxalFSX0J5SFFuUThCZF9sdkY4ID0gJEp5SFEtPm5Ickp5SFEyUThCZF9vUnZqREgoJEZsSGFxX09qYUJIKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHlITDh2cWpRUl9CeUhRblE4QmQgPSAkeUhMOHZxalFSX0J5SFFuUThCZF9sdkY4W21dWyd2akRIJ107CiAgICAgICAgICAgICAgICAgICAgICAgICR5SEw4dnFqUVJfQnlIUW5ROEJkX2xxID0gJHlITDh2cWpRUl9CeUhRblE4QmRfbHZGOFttXVsnbHEnXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICRqT2psYWpvYUhfeUhMOHZxalFSX0J5SFF5ID0gJEk4UVdGYThiLT5uSHJKeUhReV9KeUhRMlE4QmRUbEhRalFMZVIoJHlITDh2cWpRUl9CeUhRblE4QmRfbHEpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyRCdmpPamxham9hSF95SEw4dnFqUVJfQnlIUXlVID0gJEk4UVdGYThiLT5uSHJNRV9KdmpPamxham9hSEp5SFFfNlI1OGFIKCRkbHEsICR5SEw4dnFqUVJfQnlIUW5ROEJkX2xxVSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGxGICgkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ1E4YUgnXSA9PSBVIHx8ICRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnQnlIUV9scSddID09IFUpIHsKCiAgICAgICAgICAgICAgICAgICAgbEYgKEw4QnZyKCRqT2psYWpvYUhfZFFsRGpRUl9CeUhReSkgPiBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRkUWxEalFSX3FIYUhuanJIID0gbTsKICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKEw4QnZyKCRqT2psYWpvYUhfeUhMOHZxalFSX0J5SFF5KSA+IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGRRbERqUVJfcUhhSG5qckggPSBVOwogICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoTDhCdnIoJGpPamxham9hSF95SEw4dnFqUVJfQnlIUXkpIDw9IG0gJiYgTDhCdnIoJGpPamxham9hSF9kUWxEalFSX0J5SFF5KSA8PSBtKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAkZFFsRGpRUl9xSGFIbmpySCA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgICR5SEw4dnFqUVJfcUhhSG5qckggPSBVOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbEYgKCRibERfcUhyamxheVttXVsnal95cmpyQnknXSA9PSBVQykgewogICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBtOwogICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICR5ckhkX2pMTEh5eSA9IFU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBIYXlIIHsKLy9sRiAoTDhCdnIoJGpPamxham9hSF9kUWxEalFSX0J5SFF5KSA+IEw4QnZyKCRCdmpPamxham9hSF9kUWxEalFSX0J5SFF5KSkgewogICAgICAgICAgICAgICAgICAgIGxGIChMOEJ2cigkak9qbGFqb2FIX2RRbERqUVJfQnlIUXkpID4gbSkgewovL2RRbHZyX1EoalFRalJfTDhhQkR2KCRqT2psYWpvYUhfZFFsRGpRUl9CeUhReSwgJ2xxJykpOwovL0hMZTggJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydCeUhRX2xxJ107CiAgICAgICAgICAgICAgICAgICAgICAgIGxGIChIRGRyUigkbHlfZWxIUWpRTGVSKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRRbERqUVJfbHFfalFRID0galFRalJfTDhhQkR2KCRqT2psYWpvYUhfZFFsRGpRUl9CeUhReSwgJ2xxJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZFFsRGpRUl9scV9qUVEgPSBqUVFqUl9MOGFCRHYoJGpPamxham9hSF9kUWxEalFSX0J5SFF5LCAnQnlIUV9scScpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICRXSFIgPSBqUVFqUl95SGpRTGUoJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydCeUhRX2xxJ10sICRkUWxEalFSX2xxX2pRUSk7CgovL0hMZTggJy8nLiRXSFI7CiAgICAgICAgICAgICAgICAgICAgICAgIGxGIChseV92QkRIUWxMKCRXSFIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBVOwogICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlySGRfakxMSHl5ID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAvLyRkUWxEalFSX3FIYUhuanJIID0gbTsKLy9ITGU4ICcvJy4keXJIZF9qTExIeXk7Ci8vfSBIYXlIIGxGIChMOEJ2cigkak9qbGFqb2FIX3lITDh2cWpRUl9CeUhReSkgPiBMOEJ2cigkQnZqT2psYWpvYUhfeUhMOHZxalFSX0J5SFF5KSkgewogICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoTDhCdnIoJGpPamxham9hSF95SEw4dnFqUVJfQnlIUXkpID4gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAkZFFsRGpRUl9xSGFIbmpySCA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgICR5SEw4dnFqUVJfbHFfalFRID0galFRalJfTDhhQkR2KCRqT2psYWpvYUhfeUhMOHZxalFSX0J5SFF5LCAnbHEnKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICRXSFIgPSBqUVFqUl95SGpRTGUoJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydCeUhRX2xxJ10sICR5SEw4dnFqUVJfbHFfalFRKTsKICAgICAgICAgICAgICAgICAgICAgICAgbEYgKGx5X3ZCREhRbEwoJFdIUikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5ckhkX2pMTEh5eSA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGIChMOEJ2cigkak9qbGFqb2FIX3lITDh2cWpRUl9CeUhReSkgPD0gbSAmJiBMOEJ2cigkak9qbGFqb2FIX2RRbERqUVJfQnlIUXkpIDw9IG0pIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICRkUWxEalFSX3FIYUhuanJIID0gVTsKICAgICAgICAgICAgICAgICAgICAgICAgJHlITDh2cWpRUl9xSGFIbmpySCA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ0J5SFFfbHEnXSA9PSAkb0JsYXFIUV9xSHJqbGF5W21dWydiOFFXRmE4Yl9EanZqbkhRJ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5ckhkX2pMTEh5eSA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy9ITGU4ICR5ckhkX2pMTEh5eTsKLy9kUWx2cl9RKCRibERfcUhyamxheSk7CiAgICAgICAgICAgICAgICAkYmxEX1FROGFIX0J5SFF5ID0gJEk2QmxhcUhRLT5uSHJfYjhRV0ZhOGJfbERfQVE4YUh5XzZSNk9scTVacSgkbERfbHEsICRsRF9RbHEsICRvT2xxKTsKICAgICAgICAgICAgICAgIC8vZFFsdnJfUSgkYmxEX1FROGFIX0J5SFF5KTsKICAgICAgICAgICAgICAgICRibERfUVE4YUhfQnlIUXlfYWx5ciA9IGpRUWpSX0w4YUJEdigkYmxEX1FROGFIX0J5SFF5LCAnQnlIUV9scScpOwoKICAgICAgICAgICAgICAgIGxGICgkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ1E4YUgnXSA9PSBVIHx8ICRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnQnlIUV9scSddID09IFUpIHsKCiAgICAgICAgICAgICAgICAgICAgbEYgKEw4QnZyKCRqT2psYWpvYUhfZFFsRGpRUl9CeUhReSkgPiBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRkUWxEalFSX3FIYUhuanJIID0gbTsKICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKEw4QnZyKCRqT2psYWpvYUhfeUhMOHZxalFSX0J5SFF5KSA+IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGRRbERqUVJfcUhhSG5qckggPSBVOwogICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoTDhCdnIoJGpPamxham9hSF95SEw4dnFqUVJfQnlIUXkpIDw9IG0gJiYgTDhCdnIoJGpPamxham9hSF9kUWxEalFSX0J5SFF5KSA8PSBtKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAkZFFsRGpRUl9xSGFIbmpySCA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgICR5SEw4dnFqUVJfcUhhSG5qckggPSBVOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbEYgKCRibERfcUhyamxheVttXVsnal95cmpyQnknXSA9PSBtKSB7IC8vNEh2cWx2bgogICAgICAgICAgICAgICAgICAgICAgICBsRiAoJG9PamFCSF9xSHJqbGF5W21dWydkUThMSHl5SHFfQnlIUSddID09IFUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJEZsUXlyX2pROGFIX2x2RjggPSAkSTZCbGFxSFEtPm5Icl9iOFFXRmE4Yl9sRF9BUThhSHlfNlI0Nk9scTVacV9jRkZ5SHIzbFF5cigkbERfbHEsICRsRF9RbHEsICRvT2xxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRqYVFIanFSX2RROExIeXlIcV9CeUhRX2x2RjggPSAkSThRV0ZhOGItPm5Icl9JWkU5cmpyQnlfVmpySHlySjJROEJkNVpNKCRibERfcUhyamxheVttXVsnb0JsYXFIUV9scSddLCAkYmxEX3FIcmpsYXlbbV1bJ1FITDhRcV95SHJfbHEnXSwgJGJsRF9xSHJqbGF5W21dWydqX0J5SFFfblE4QmQnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoIUhEZHJSKCRqYVFIanFSX2RROExIeXlIcV9CeUhRX2x2RjhbbV1bJ0xRSGpySHFfb1InXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9qYVFIanFSX2RROExIeXlIcV9CeUhRID0gVTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBsRiAoJGJsRF9xSHJqbGF5W21dWydqX3lyanJCeSddID09ICdnJykgeyAvLzVIRkZIUQogICAgICAgICAgICAgICAgICAgICAgICBsRiAoJG9PamFCSF9xSHJqbGF5W21dWydkUThMSHl5SHFfQnlIUSddID09IFUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGbFF5cl9qUThhSF9sdkY4ID0gJEk2QmxhcUhRLT5uSHJfYjhRV0ZhOGJfbERfQVE4YUh5XzZSNDZPbHE1WnFfY0ZGeUhyM2xReXIoJGxEX2xxLCAkbERfUWxxLCAkb09scSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCFIRGRyUigkRmxReXJfalE4YUhfbHZGOFttXVsnQnlIUV9scSddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX0J5SFFfUUhGSFFRSHEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBVOwogICAgICAgICAgICAgICAgfSBIYXlIbEYgKCRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnQnlIUV9scSddID09ICRvQmxhcUhRX3FIcmpsYXlbbV1bJ2I4UVdGYThiX0RqdmpuSFEnXSkgewogICAgICAgICAgICAgICAgICAgIGxGICgkYmxEX3FIcmpsYXlbbV1bJ2pfeXJqckJ5J10gPT0gbSkgeyAvLzRIdnFsdm4KICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRvT2phQkhfcUhyamxheVttXVsnZFE4TEh5eUhxX0J5SFEnXSA9PSBVKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyRGbFF5cl9qUThhSF9sdkY4ID0gJEk2QmxhcUhRLT5uSHJfYjhRV0ZhOGJfbERfQVE4YUh5XzZSNDZPbHE1WnFfY0ZGeUhyM2xReXIoJGxEX2xxLCAkbERfUWxxLCAkb09scSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkamFRSGpxUl9kUThMSHl5SHFfQnlIUV9sdkY4ID0gJEk4UVdGYThiLT5uSHJfSVpFOXJqckJ5X1Zqckh5ckoyUThCZDVaTSgkYmxEX3FIcmpsYXlbbV1bJ29CbGFxSFFfbHEnXSwgJGJsRF9xSHJqbGF5W21dWydRSEw4UXFfeUhyX2xxJ10sICRibERfcUhyamxheVttXVsnal9CeUhRX25ROEJkJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCFIRGRyUigkamFRSGpxUl9kUThMSHl5SHFfQnlIUV9sdkY4W21dWydMUUhqckhxX29SJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfamFRSGpxUl9kUThMSHl5SHFfQnlIUSA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgbEYgKCRibERfcUhyamxheVttXVsnal95cmpyQnknXSA9PSAnZycpIHsgLy81SEZGSFEKICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRvT2phQkhfcUhyamxheVttXVsnZFE4TEh5eUhxX0J5SFEnXSA9PSBVKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRmxReXJfalE4YUhfbHZGOCA9ICRJNkJsYXFIUS0+bkhyX2I4UVdGYThiX2xEX0FROGFIeV82UjQ2T2xxNVpxX2NGRnlIcjNsUXlyKCRsRF9scSwgJGxEX1FscSwgJG9PbHEpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghSERkclIoJEZsUXlyX2pROGFIX2x2RjhbbV1bJ0J5SFFfbHEnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9CeUhRX1FIRkhRUUhxID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJHlySGRfakxMSHl5ID0gVTsKICAgICAgICAgICAgICAgIH0gSGF5SCB7CgogICAgICAgICAgICAgICAgICAgIGxGIChMOEJ2cigkak9qbGFqb2FIX2RRbERqUVJfQnlIUXkpID4gbSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgbEYgKEhEZHJSKCRseV9lbEhRalFMZVIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZFFsRGpRUl9scV9qUVEgPSBqUVFqUl9MOGFCRHYoJGpPamxham9hSF9kUWxEalFSX0J5SFF5LCAnbHEnKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkUWxEalFSX2xxX2pRUSA9IGpRUWpSX0w4YUJEdigkak9qbGFqb2FIX2RRbERqUVJfQnlIUXksICdCeUhRX2xxJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJFdIUiA9IGpRUWpSX3lIalFMZSgkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ0J5SFFfbHEnXSwgJGRRbERqUVJfbHFfalFRKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGxGIChseV92QkRIUWxMKCRXSFIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBVOwogICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlySGRfakxMSHl5ID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoTDhCdnIoJGpPamxham9hSF95SEw4dnFqUVJfQnlIUXkpID4gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAkZFFsRGpRUl9xSGFIbmpySCA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgICR5SEw4dnFqUVJfbHFfalFRID0galFRalJfTDhhQkR2KCRqT2psYWpvYUhfeUhMOHZxalFSX0J5SFF5LCAnbHEnKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICRXSFIgPSBqUVFqUl95SGpRTGUoJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydCeUhRX2xxJ10sICR5SEw4dnFqUVJfbHFfalFRKTsKICAgICAgICAgICAgICAgICAgICAgICAgbEYgKGx5X3ZCREhRbEwoJFdIUikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5ckhkX2pMTEh5eSA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGIChMOEJ2cigkak9qbGFqb2FIX3lITDh2cWpRUl9CeUhReSkgPD0gbSAmJiBMOEJ2cigkak9qbGFqb2FIX2RRbERqUVJfQnlIUXkpIDw9IG0pIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICRkUWxEalFSX3FIYUhuanJIID0gVTsKICAgICAgICAgICAgICAgICAgICAgICAgJHlITDh2cWpRUl9xSGFIbmpySCA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ0J5SFFfbHEnXSA9PSAkb0JsYXFIUV9xSHJqbGF5W21dWydiOFFXRmE4Yl9EanZqbkhRJ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5ckhkX2pMTEh5eSA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAgICAgbEYgKCRMX0J5SFFfUUhGSFFRSHEgPT0gJ1UnICYmICRibERfcUhyamxheVttXVsnal95cmpyQnknXSA9PSAneicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHlySGRfakxMSHl5ID0gbTsKICAgICAgICAgICAgICAgICAgICB9CgovL0hMZTggJHlySGRfakxMSHl5OwovL0hMZTggTDhCdnIoJGJsRF9RUThhSF9CeUhReSk7Ci8vSExlOCAkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ0J5SFFfbHEnXTsKLy9kUWx2cl9RKCRibERfUVE4YUhfQnlIUXlfYWx5cik7CiAgICAgICAgICAgICAgICAgICAgLy9kUWx2cl9RKCRibERfUVE4YUhfQnlIUXkpOwogICAgICAgICAgICAgICAgICAgIGxGIChMOEJ2cigkYmxEX1FROGFIX0J5SFF5KSA+IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgbEYgKGx2X2pRUWpSKCRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnQnlIUV9scSddLCAkYmxEX1FROGFIX0J5SFF5X2FseXIpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRibERfcUhyamxheVttXVsnal95cmpyQnknXSA9PSAnZycpIHsgLy81SEZGSFEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydROGFIJ10gPT0gJGJsRF9xSHJqbGF5W21dWydqX0J5SFFfblE4QmQnXSB8fCAoJG9CbGFxSFFfcUhyamxheVttXVsnYjhRV0ZhOGJfclJkSCddID09IEsgKSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRvT2phQkhfcUhyamxheVttXVsnZFE4TEh5eUhxX0J5SFEnXSA9PSBVKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEZsUXlyX2pROGFIX2x2RjggPSAkSTZCbGFxSFEtPm5Icl9iOFFXRmE4Yl9sRF9BUThhSHlfNlI0Nk9scTVacV9jRkZ5SHIzbFF5cigkbERfbHEsICRsRF9RbHEsICRvT2xxKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJG9CbGFxSFFfcUhyamxheVttXVsnYjhRV0ZhOGJfclJkSCddID09IEspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRmxReXJfalE4YUhfbHZGOCA9ICRJNkJsYXFIUS0+bkhyX2I4UVdGYThiX2xEX0FROGFIeV82UjQ2T2xxNVpxX2NGRnlIcjNsUXlyX0p5SFE2anlIKCRsRF9scSwgJGxEX1FscSwgJG9PbHEsICRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnQnlIUV9scSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJEZsUXlyX2pROGFIX2x2RjhbbV1bJ0J5SFFfbHEnXSA9PSAkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ0J5SFFfbHEnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX0J5SFFfUUhGSFFRSHEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX2pkZFE4T0hfcjhfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfcUhhSG5qckhxX3I4X0J5SFEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5ckhkX2pMTEh5eSA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX0J5SFFfUUhGSFFRSHEgPSBVOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX2pkZFE4T0hfcjhfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfcUhhSG5qckhxX3I4X0J5SFEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5ckhkX2pMTEh5eSA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAkTF9CeUhRX1FIRkhRUUhxID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICRMX2pkZFE4T0hfcjhfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAkTF9xSGFIbmpySHFfcjhfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAkeXJIZF9qTExIeXkgPSBVOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGbFF5cl9qUThhSF9sdkY4ID0gJEk2QmxhcUhRLT5uSHJfYjhRV0ZhOGJfbERfQVE4YUh5XzZSNDZPbHE1WnFfY0ZGeUhyM2xReXIoJGxEX2xxLCAkbERfUWxxLCAkb09scSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRvQmxhcUhRX3FIcmpsYXlbbV1bJ2I4UVdGYThiX3JSZEgnXSA9PSBLKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEZsUXlyX2pROGFIX2x2RjggPSAkSTZCbGFxSFEtPm5Icl9iOFFXRmE4Yl9sRF9BUThhSHlfNlI0Nk9scTVacV9jRkZ5SHIzbFF5cl9KeUhRNmp5SCgkbERfbHEsICRsRF9RbHEsICRvT2xxLCAkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ0J5SFFfbHEnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRGbFF5cl9qUThhSF9sdkY4W21dWydCeUhRX2xxJ10gPT0gJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydCeUhRX2xxJ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9CeUhRX1FIRkhRUUhxID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9qZGRROE9IX3I4X0J5SFEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX3FIYUhuanJIcV9yOF9CeUhRID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBVOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9CeUhRX1FIRkhRUUhxID0gVTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9qZGRROE9IX3I4X0J5SFEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX3FIYUhuanJIcV9yOF9CeUhRID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBVOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfQnlIUV9RSEZIUVFIcSA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX2pkZFE4T0hfcjhfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX3FIYUhuanJIcV9yOF9CeUhRID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlySGRfakxMSHl5ID0gVTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUhsRiAoJGRRSE9feXJIZF95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10gPT0gJ1VtJykgeyAvL0FkZFE4T0g9Pkp5SFEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9qZGRROE9IX3I4X0J5SFEgPSBVOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX0J5SFFfUUhGSFFRSHEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX3FIYUhuanJIcV9yOF9CeUhRID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBVOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIbEYgKCRibERfcUhyamxheVttXVsnal95cmpyQnknXSA9PSAnVU4nKSB7IC8vTUhhSG5qckgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9qZGRROE9IX3I4X0J5SFEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX3FIYUhuanJIcV9yOF9CeUhRID0gVTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9CeUhRX1FIRkhRUUhxID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBVOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIbEYgKCRibERfcUhyamxheVttXVsnal95cmpyQnknXSA9PSAnVXonKSB7IC8vQXl5bG52SHEgcjggQnlIUQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX2pkZFE4T0hfcjhfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfcUhhSG5qckhxX3I4X0J5SFEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX0J5SFFfUUhGSFFRSHEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX2p5eWxudkhxX3I4X0J5SFEgPSBVOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5ckhkX2pMTEh5eSA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUhsRiAoJGJsRF9xSHJqbGF5W21dWydqX3lyanJCeSddID09IG0pIHsgLy80SHZxbHZuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRvT2phQkhfcUhyamxheVttXVsnZFE4TEh5eUhxX0J5SFEnXSA9PSBVKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJEZsUXlyX3lySGQgPT0gVSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEZsUXlyX2pROGFIX2x2RjggPSAkSTZCbGFxSFEtPm5Icl9iOFFXRmE4Yl9sRF9BUThhSHlfNlI0Nk9scTVacV9jRkZ5SHIzbFF5cigkbERfbHEsICRsRF9RbHEsICRvT2xxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRqYVFIanFSX2RROExIeXlIcV9CeUhRX2xxID0gJEZsUXlyX2pROGFIX2x2RjhbbV1bJ0J5SFFfbHEnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRqYVFIanFSX2RROExIeXlIcV9CeUhRX2x2RjggPSAkSThRV0ZhOGItPm5Icl9JWkU5cmpyQnlfVmpySHlySjJROEJkNVpNKCRibERfcUhyamxheVttXVsnb0JsYXFIUV9scSddLCAkYmxEX3FIcmpsYXlbbV1bJ1FITDhRcV95SHJfbHEnXSwgJGJsRF9xSHJqbGF5W21dWydqX0J5SFFfblE4QmQnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkamFRSGpxUl9kUThMSHl5SHFfQnlIUV9scSA9ICRqYVFIanFSX2RROExIeXlIcV9CeUhRX2x2RjhbbV1bJ0xRSGpySHFfb1InXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRqYVFIanFSX2RROExIeXlIcV9CeUhRX2xxID09ICRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnQnlIUV9scSddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9qYVFIanFSX2RROExIeXlIcV9CeUhRID0gVTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX0J5SFFfUUhGSFFRSHEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfamRkUThPSF9yOF9CeUhRID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX3FIYUhuanJIcV9yOF9CeUhRID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5ckhkX2pMTEh5eSA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9qYVFIanFSX2RROExIeXlIcV9CeUhRID0gVTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkb0JsYXFIUV9xSHJqbGF5W21dWydiOFFXRmE4Yl9yUmRIJ10gPT0gSykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX0J5SFFfUUhGSFFRSHEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9CeUhRX1FIRkhRUUhxID0gVTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX2pkZFE4T0hfcjhfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9xSGFIbmpySHFfcjhfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfamFRSGpxUl9kUThMSHl5SHFfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX2pkZFE4T0hfcjhfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX3FIYUhuanJIcV9yOF9CeUhRID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfQnlIUV9RSEZIUVFIcSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5ckhkX2pMTEh5eSA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIbEYgKEhEZHJSKCRibERfcUhyamxheVttXVsnal95cmpyQnknXSkpIHsgLy81SE9IUXlIIDVIN0hMckhxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfamRkUThPSF9yOF9CeUhRID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9xSGFIbmpySHFfcjhfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfQnlIUV9RSEZIUVFIcSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlySGRfakxMSHl5ID0gVTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICghbHZfalFRalIoJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydCeUhRX2xxJ10sICRibERfUVE4YUhfQnlIUXlfYWx5cikpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJGRRSE9feXJIZF95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10gPT0gJ1VtJykgeyAvL0FkZFE4T0g9Pkp5SFEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydROGFIJ10gPT0gVSB8fCAkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ1E4YUgnXSA9PSBLIHx8ICRvQmxhcUhRX3FIcmpsYXlbbV1bJ2I4UVdGYThiX0RqdmpuSFEnXSA9PSAkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ0J5SFFfbHEnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9qZGRROE9IX3I4X0J5SFEgPSBVOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9CeUhRX1FIRkhRUUhxID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlySGRfakxMSHl5ID0gVTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9qZGRROE9IX3I4X0J5SFEgPSBVOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9CeUhRX1FIRkhRUUhxID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlySGRfakxMSHl5ID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRibERfcUhyamxheVttXVsnal95cmpyQnknXSA9PSAnVU4nKSB7IC8vTUhhSG5qckgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydROGFIJ10gPT0gVSB8fCAkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ1E4YUgnXSA9PSBLIHx8ICRvQmxhcUhRX3FIcmpsYXlbbV1bJ2I4UVdGYThiX0RqdmpuSFEnXSA9PSAkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ0J5SFFfbHEnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9xSGFIbmpySHFfcjhfQnlIUSA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX2pkZFE4T0hfcjhfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX0J5SFFfUUhGSFFRSHEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9xSGFIbmpySHFfcjhfQnlIUSA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX2pkZFE4T0hfcjhfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX0J5SFFfUUhGSFFRSHEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBVOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGJsRF9xSHJqbGF5W21dWydqX3lyanJCeSddID09ICdnJykgeyAvLzVIRkhRUUhxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnUThhSCddID09ICRibERfcUhyamxheVttXVsnal9CeUhRX25ROEJkJ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfcUhhSG5qckhxX3I4X0J5SFEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9qZGRROE9IX3I4X0J5SFEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9CeUhRX1FIRkhRUUhxID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlySGRfakxMSHl5ID0gVTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfcUhhSG5qckhxX3I4X0J5SFEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9qZGRROE9IX3I4X0J5SFEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9CeUhRX1FIRkhRUUhxID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlySGRfakxMSHl5ID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRibERfcUhyamxheVttXVsnal95cmpyQnknXSA9PSBtKSB7IC8vNEh2cWx2bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSExlOCAkb09qYUJIX3FIcmpsYXlbbV1bJ2RROExIeXlIcV9CeUhRJ10uJyMnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkb09qYUJIX3FIcmpsYXlbbV1bJ2RROExIeXlIcV9CeUhRJ10gPT0gVSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRGbFF5cl95ckhkID09IFUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGbFF5cl9qUThhSF9sdkY4ID0gJEk2QmxhcUhRLT5uSHJfYjhRV0ZhOGJfbERfQVE4YUh5XzZSNDZPbHE1WnFfY0ZGeUhyM2xReXIoJGxEX2xxLCAkbERfUWxxLCAkb09scSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkamFRSGpxUl9kUThMSHl5SHFfQnlIUV9scSA9ICRGbFF5cl9qUThhSF9sdkY4W21dWydCeUhRX2xxJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkamFRSGpxUl9kUThMSHl5SHFfQnlIUV9sdkY4ID0gJEk4UVdGYThiLT5uSHJfSVpFOXJqckJ5X1Zqckh5ckoyUThCZDVaTSgkYmxEX3FIcmpsYXlbbV1bJ29CbGFxSFFfbHEnXSwgJGJsRF9xSHJqbGF5W21dWydRSEw4UXFfeUhyX2xxJ10sICRibERfcUhyamxheVttXVsnal9CeUhRX25ROEJkJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGphUUhqcVJfZFE4TEh5eUhxX0J5SFFfbHEgPSAkamFRSGpxUl9kUThMSHl5SHFfQnlIUV9sdkY4W21dWydMUUhqckhxX29SJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ITGU4ICJAIi4kYmxEX2xxLidAJy4kamFRSGpxUl9kUThMSHl5SHFfQnlIUV9scSAuJz09Jy4gJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydCeUhRX2xxJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkamFRSGpxUl9kUThMSHl5SHFfQnlIUV9scSA9PSAkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ0J5SFFfbHEnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfamFRSGpxUl9kUThMSHl5SHFfQnlIUSA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9CeUhRX1FIRkhRUUhxID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX2pkZFE4T0hfcjhfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9xSGFIbmpySHFfcjhfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBVOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRvQmxhcUhRX3FIcmpsYXlbbV1bJ2I4UVdGYThiX3JSZEgnXSA9PSBLKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlySGRfakxMSHl5ID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX2phUUhqcVJfZFE4TEh5eUhxX0J5SFEgPSBVOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfQnlIUV9RSEZIUVFIcSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9qZGRROE9IX3I4X0J5SFEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfcUhhSG5qckhxX3I4X0J5SFEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlySGRfakxMSHl5ID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX2phUUhqcVJfZFE4TEh5eUhxX0J5SFEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9qZGRROE9IX3I4X0J5SFEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9xSGFIbmpySHFfcjhfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX0J5SFFfUUhGSFFRSHEgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5ckhkX2pMTEh5eSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfQnlIUV9RSEZIUVFIcSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfamRkUThPSF9yOF9CeUhRID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9xSGFIbmpySHFfcjhfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9CeUhRX1FIRkhRUUhxID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX2pkZFE4T0hfcjhfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9xSGFIbmpySHFfcjhfQnlIUSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAkTF9CeUhRX1FIRkhRUUhxID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgJExfamRkUThPSF9yOF9CeUhRID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgJExfcUhhSG5qckhxX3I4X0J5SFEgPSBtOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvL0hMZTggJExfQnlIUV9RSEZIUVFIcTsKICAgICAgICAgICAgICAgIC8vSExlOCAnTScuJHlySGRfakxMSHl5OwogICAgICAgICAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgIC8vICAgICAgNThCcmx2bgogICAgICAgICAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAkSTZCbGFxSFEtPnlIcjRRODdITHJacSgkZGxxKTsKICAgICAgICAgICAgICAgICRJNkJsYXFIUS0+eUhyNkJsYXFIUVpxKCRvbHEpOwogICAgICAgICAgICAgICAgJEk2QmxhcUhRLT55SHI2QmxhcUhRWWphQkhacSgkb09scSk7CiAgICAgICAgICAgICAgICAkSTZCbGFxSFEtPnlIcndRbG5uSFF3UmRIKCdqX0YnKTsKICAgICAgICAgICAgICAgICRqRl9ROEJySF9sdkY4ID0gJEk2QmxhcUhRLT5uSHJfYjhRV0ZhOGJfb0JsYXFIUV9ROEJybHZuKCk7CiAgICAgICAgICAgICAgICAkakZfclFsbm5IUV95ckhkX2pRUSA9IGpRUWpSX0w4YUJEdigkakZfUThCckhfbHZGOCwgJ3JRbG5uSFFfeXJIZCcpOwoKICAgICAgICAgICAgICAgICRJNkJsYXFIUS0+eUhyd1Fsbm5IUXdSZEgoJ1FfRicpOwogICAgICAgICAgICAgICAgJFFGX1E4QnJIX2x2RjggPSAkSTZCbGFxSFEtPm5Icl9iOFFXRmE4Yl9vQmxhcUhRX1E4QnJsdm4oKTsKICAgICAgICAgICAgICAgICRRRl9yUWxubkhRX3lySGRfalFRID0galFRalJfTDhhQkR2KCRRRl9ROEJySF9sdkY4LCAnclFsbm5IUV95ckhkJyk7CgogICAgICAgICAgICAgICAgJEk2QmxhcUhRLT55SHJ3UWxubkhRd1JkSCgnUV9vJyk7CiAgICAgICAgICAgICAgICAkUW9fUThCckhfbHZGOCA9ICRJNkJsYXFIUS0+bkhyX2I4UVdGYThiX29CbGFxSFFfUThCcmx2bigpOwogICAgICAgICAgICAgICAgJFFvX3JRbG5uSFFfeXJIZF9qUVEgPSBqUVFqUl9MOGFCRHYoJFFvX1E4QnJIX2x2RjgsICdyUWxubkhRX3lySGQnKTsKCgogICAgICAgICAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgIC8vICAgICAgTVJ2akRsTCAzOFFEeQogICAgICAgICAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICRJNkJsYXFIUS0+eUhyNFE4N0hMclpxKCRkbHEpOwogICAgICAgICAgICAgICAgJEk2QmxhcUhRLT55SHI2QmxhcUhRWnEoJG9scSk7CiAgICAgICAgICAgICAgICAkSTZCbGFxSFEtPnlIcjZCbGFxSFFZamFCSFpxKCRvT2xxKTsKICAgICAgICAgICAgICAgIC8vJEk2QmxhcUhRLT55SHJJbERacSgkYmxEX2xxKTsKICAgICAgICAgICAgICAgIC8vJEk2QmxhcUhRLT55SHI1SEw4UXE5SHJacSgkbERfUWxxKTsKCiAgICAgICAgICAgICAgICAkeXJIZF9xUnZqRGxMX0Y4UUR5ID0gJEk2QmxhcUhRLT5uSHJfSTZCbGFxSFFfcUY4UURfNk9scSgpOwogICAgICAgICAgICAgICAgJHY4X3lySGRfcVJ2akRsTF9GOFFEeSA9IEw4QnZyKCR5ckhkX3FSdmpEbExfRjhRRHkpOwoKICAgICAgICAgICAgICAgICRkUUhPbDhCeV9xUnZqRGxMX0Y4UUR5ID0gJEk2QmxhcUhRLT5uSHJfSTZCbGFxSFFfcUY4UURfZFFIT2w4QnkoKTsKICAgICAgICAgICAgICAgICR2OF9kUUhPbDhCeV9xUnZqRGxMX0Y4UUR5ID0gTDhCdnIoJGRRSE9sOEJ5X3FSdmpEbExfRjhRRHkpOwoKCiAgICAgICAgICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT4+CiAgICAgICAgICAgICAgICAjIyMgICAgICA5cmpybEwgMzhRRHkKICAgICAgICAgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Pj4KICAgICAgICAgICAgICAgICRJNkJsYXFIUS0+eUhyNFE4N0hMclpxKCRkbHEpOwogICAgICAgICAgICAgICAgJEk2QmxhcUhRLT55SHI2QmxhcUhRWnEoJG9scSk7CiAgICAgICAgICAgICAgICAkSTZCbGFxSFEtPnlIcjZCbGFxSFFZamFCSFpxKCRvT2xxKTsKCiAgICAgICAgICAgICAgICAkeXJIZF95cmpybExfRjhRRHkgPSAkSTZCbGFxSFEtPm5Icl9JNkJsYXFIUV95RjhRRF82T2xxKCk7CiAgICAgICAgICAgICAgICAkdjhfeXJIZF95cmpybExfRjhRRHkgPSBMOEJ2cigkeXJIZF95cmpybExfRjhRRHkpOwoKICAgICAgICAgICAgICAgICRkUUhPbDhCeV95cmpybExfRjhRRHkgPSAkSTZCbGFxSFEtPm5Icl9JNkJsYXFIUV95RjhRRF9kUUhPbDhCeSgpOwogICAgICAgICAgICAgICAgJHY4X2RRSE9sOEJ5X3lyanJsTF9GOFFEeSA9IEw4QnZyKCRkUUhPbDhCeV95cmpybExfRjhRRHkpOwoKCiAgICAgICAgICAgICAgICAkWkVBOXdpNS0+eUhyNFE4N0hMclpxKCRkbHEpOwogICAgICAgICAgICAgICAgJERqeXJIUV9sdkY4ID0gJFpFQTl3aTUtPm5Iclp2cUh1RWp5ckhRNlIwakRIKCdpMDNBJyk7CiAgICAgICAgICAgICAgICBsRiAoJGx2cUh1X0RqeXJIUV9xSHJqbGF5W21dWydscSddID09ICREanlySFFfbHZGOFttXVsnbHEnXSkgewogICAgICAgICAgICAgICAgICAgICRpMDNBID0gdkhiIEh2RmooJHFvKTsKICAgICAgICAgICAgICAgICAgICAkSHZGal9xSHJqbGF5ID0gJGkwM0EtPm5Icml2RmpxSHJqbGF5XzZSNVpxKCRsRF9RbHEpOwogICAgICAgICAgICAgICAgICAgICRvbHFxSFFfcUhyamxheSA9ICRpMDNBLT5uSHI2bHFxSFFNSHJqbGF5XzZSaXZGalpxKCRIdkZqX3FIcmpsYXlbbV1bJ2xxJ10sICRsRF9RbHEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgIDwhTWNHd2s0aSBlckRhPgogICAgICAgICAgICAgICAgPGVyRGE+CiAgICAgICAgICAgICAgICAgICAgPGVIanE+CiAgICAgICAgICAgICAgICAgICAgICAgIDxESHJqIExlalF5SHI9IkJyRi16Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPERIcmogTGVqUXlIcj0iWjljLXp6Q1AtVSIgTDh2ckh2ci13UmRIPSJySHVyL2VyRGEiPgogICAgICAgICAgICAgICAgICAgICAgICA8cmxyYUg+cUVBR3ggLSBNRTk8L3JscmFIPgogICAgICAgICAgICAgICAgICAgICAgICA8REhyaiB2akRIPSJPbEhiZDhRciIgTDh2ckh2cj0iYmxxcmU9cUhPbExILWJscXJlLCBsdmxybGphLXlMamFIPVUubSI+ICAKICAgICAgICAgICAgICAgICAgICAgICAgPERIcmogdmpESD0icUh5TFFsZHJsOHYiIEw4dnJIdnI9InFFQUd4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPERIcmogdmpESD0iakJyZThRIiBMOHZySHZyPSI5UWwgc1FseWV2anYiPgoKICAgICAgICAgICAgICAgICAgICAgICAgPERIcmogZXJyZC1pdEJsTz0iR2pMZUgtRzh2clE4YSIgRzh2ckh2cj0idjgtTGpMZUgiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxESHJqIGVycmQtaXRCbE89IjRRam5EaiIgRzh2ckh2cj0idjgtTGpMZUgiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxESHJqIGVycmQtaXRCbE89Iml1ZGxRSHkiIEc4dnJIdnI9Im0iIC8+CgogICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHlyUmFIeSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGFsdlcgZVFIRj0iLi4vUUh5OEJRTEh5L0x5eS9vODhyeXJRamQuTHl5IiBRSGE9InlyUmFIeWVISHIiPgogICAgICAgICAgICAgICAgICAgICAgICA8YWx2VyBlUUhGPSIuLi9RSHk4QlFMSHkvTHl5Lzd0QkhRUi5uUWxyckhRLkx5eSIgUUhhPSJ5clJhSHllSEhyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGFsdlcgZVFIRj0iLi4vUUh5OEJRTEh5L0x5eS9vODhyeXJRamQtUUh5ZDh2eWxPSC5MeXkiIFFIYT0ieXJSYUh5ZUhIciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhbHZXIFFIYT0ieXJSYUh5ZUhIciIgZVFIRj0iLi4vUUh5OEJRTEh5L0x5eS9GOHZyLWpiSHk4REguTHl5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGFsdlcgUUhhPSJ5clJhSHllSEhyIiBlUUhGPSIuLi9RSHk4QlFMSHkvRjh2ci1qYkh5OERIL0x5eS9GOHZyLWpiSHk4REguRGx2Lkx5eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0tLS15anY3alIgTHl5LS0tLS0tLT4KICAgICAgICAgICAgIDxhbHZXIGVRSEY9Ii4uL1FIeThCUUxIeS9MeXkvcURqTHQuTHl5IiBRSGE9InlyUmFIeWVISHIiPgogICAgICAgICAgICA8IS0tLS0tOWp2N2pSLS0tLS0tLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1bbEYgWmkgZ10+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhbHZXIFFIYT0ieXJSYUh5ZUhIciIgZVFIRj0iLi4vUUh5OEJRTEh5L0x5eS9GOHZyLWpiSHk4REgtbEhnLkRsdi5MeXkiPgogICAgICAgICAgICAgICAgICAgICAgICA8IVtIdnFsRl0tLT4KICAgICAgICAgICAgICAgICAgICAgICAgPGFsdlcgZVFIRj0iLi4vUUh5OEJRTEh5L0x5eS9yam9hSExhOHJlLkx5eSIgUUhhPSJ5clJhSHllSEhyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGFsdlcgZVFIRj0iLi4vUUh5OEJRTEh5L0x5eS9MZTh5SHYuTHl5IiBRSGE9InlyUmFIeWVISHIiPgogICAgICAgICAgICAgICAgICAgICAgICA8YWx2VyBlUUhGPSIuLi9RSHk4QlFMSHkvTHl5L3lyUmFIeS5MeXkiIFFIYT0ieXJSYUh5ZUhIciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhbHZXIGVRSEY9Ii4uL1FIeThCUUxIeS9MeXkvRkJhYUxqYUh2cWpRLkx5eSIgUUhhPSJ5clJhSHllSEhyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGFsdlcgZVFIRj0iLi4vUUh5OEJRTEh5L0x5eS9GbGFIX0RqdmpuSFEuTHl5IiBRSGE9InlyUmFIeWVISHIiPgogICAgICAgICAgICAgICAgICAgICAgICA8YWx2VyBlUUhGPSIuLi9RSHk4QlFMSHkvTHl5Lzd0QkhRUi5MeXkiIFFIYT0ieXJSYUh5ZUhIciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhbHZXIFFIYT0ieXJSYUh5ZUhIciIgclJkSD0ickh1ci9MeXkiIGVRSEY9Ii4uL1FIeThCUUxIeS9MeXkvcmxkZEhxLkx5eSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8YWx2VyBlUUhGPSIuLi9RSHk4QlFMSHkvTHl5L3liSEhyLWphSFFyLkx5eSIgUUhhPSJ5clJhSHllSEhyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVtsRiBaaSBnXT4KICAgICAgICAgICAgICAgICAgICAgICAgPGFsdlcgUUhhPSJ5clJhSHllSEhyIiByUmRIPSJySHVyL0x5eSIgZVFIRj0iLi4vUUh5OEJRTEh5L0x5eS9sSC9sSGcuTHl5IiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8IVtIdnFsRl0tLT4KICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVtsRiBaaSB6XT4KICAgICAgICAgICAgICAgICAgICAgICAgPGFsdlcgUUhhPSJ5clJhSHllSEhyIiByUmRIPSJySHVyL0x5eSIgZVFIRj0iLi4vUUh5OEJRTEh5L0x5eS9sSC9sSHouTHl5IiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8IVtIdnFsRl0tLT4KICAgICAgICAgICAgICAgICAgICAgICAgPCEtLVtsRiBaaSBQXT4KICAgICAgICAgICAgICAgICAgICAgICAgPGFsdlcgUUhhPSJ5clJhSHllSEhyIiByUmRIPSJySHVyL0x5eSIgZVFIRj0iLi4vUUh5OEJRTEh5L0x5eS9sSC9sSFAuTHl5IiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8IVtIdnFsRl0tLT4KCiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1Gak8ganZxIHI4QkxlIGxMOHZ5IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8YWx2VyBRSGE9InllOFFyTEJyIGxMOHYiIGVRSEY9Ii4uL1FIeThCUUxIeS9sTDgvRmpPbEw4di5sTDgiPgogICAgICAgICAgICAgICAgICAgICAgICA8YWx2VyBRSGE9ImpkZGFILXI4QkxlLWxMOHYtZFFITDhEZDh5SHEiIHlsU0h5PSJVaGh1VWhoIiBlUUhGPSIuLi9RSHk4QlFMSHkvbEw4L2pkZGFILXI4QkxlLWxMOHYtVWhoLWRRSEw4RGQ4eUhxLmR2biI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhbHZXIFFIYT0iamRkYUgtcjhCTGUtbEw4di1kUUhMOERkOHlIcSIgeWxTSHk9IlVVaHVVVWgiIGVRSEY9Ii4uL1FIeThCUUxIeS9sTDgvamRkYUgtcjhCTGUtbEw4di1VVWgtZFFITDhEZDh5SHEuZHZuIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGFsdlcgUUhhPSJqZGRhSC1yOEJMZS1sTDh2LWRRSEw4RGQ4eUhxIiB5bFNIeT0iZ0t1Z0siIGVRSEY9Ii4uL1FIeThCUUxIeS9sTDgvamRkYUgtcjhCTGUtbEw4di1nSy1kUUhMOERkOHlIcS5kdm4iPgogICAgICAgICAgICAgICAgICAgICAgICA8YWx2VyBRSGE9ImpkZGFILXI4QkxlLWxMOHYtZFFITDhEZDh5SHEiIGVRSEY9Ii4uL1FIeThCUUxIeS9sTDgvamRkYUgtcjhCTGUtbEw4di1DZy1kUUhMOERkOHlIcS5kdm4iPgogICAgICAgICAgICAgICAgICAgICAgICA8IS0tPT09PT09PT09PT09IDdqT2p5TFFsZHIgPT09PT09PT09PT0tLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS83eS83dEJIUVIuN3kiPjwveUxRbGRyPgogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHlRTD0iLi4vUUh5OEJRTEh5Lzd5Lzd0QkhRUi1CbC1VLlVtLlUuTEJ5cjhELkRsdi43eSI+PC95TFFsZHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5TFFsZHIgeVFMPSIuLi9RSHk4QlFMSHkvN3kvbzg4cnlyUWpkLjd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS83eS9vODhybzh1Ljd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS83eS83dEJIUVIueWRqUVdhbHZILjd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciByUmRIPSJySHVyLzdqT2p5TFFsZHIiIHlRTD0iLi4vUUh5OEJRTEh5Lzd5L3llaktDTi43eSI+PC95TFFsZHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5TFFsZHIgclJkSD0ickh1ci83ak9qeUxRbGRyIiB5UUw9Ii4uL1FIeThCUUxIeS83eS83dEJIUVIuN0xRUmRybDh2LlguVS5tLjd5Ij48L3lMUWxkcj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDx5TFFsZHIgeVFMPSIuLi9RSHk4QlFMSHkvN3kvN3RCSFFSLk9qYWxxanJILjd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS83eS83dEJIUVIuREhyanFqcmouN3kiPjwveUxRbGRyPgoKICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS83eS9vODhyeXJRamQtRmxhSEJkYThqcS43eSI+PC95TFFsZHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5TFFsZHIgeVFMPSIuLi9RSHk4QlFMSHkvN3kvakxMOFFxbDh2LnZqTy43eSI+PC95TFFsZHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5TFFsZHIgeVFMPSIuLi9RSHk4QlFMSHkvN3kvN3RCSFFSLnJqbnlsdmRCci43eSI+PC95TFFsZHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5TFFsZHIgeVFMPSIuLi9RSHk4QlFMSHkvN3kvTGU4eUh2Ljd0QkhRUi43eSI+PC95TFFsZHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5TFFsZHIgeVFMPSIuLi9RSHk4QlFMSHkvN3kvbzg4cnlyUWpkLUw4YThRZGxMV0hRLjd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS83eS9vODhyeXJRamQtcWpySHJsREhkbExXSFEuRGx2Ljd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS83eS9xanJILjd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS83eS9xanJIUWp2bkhkbExXSFEuN3kiPjwveUxRbGRyPgoKICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS83eS83dEJIUVIuREhyanFqcmouN3kiPjwveUxRbGRyPgogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHlRTD0iLi4vUUh5OEJRTEh5Lzd5Lzd0QkhRUi5yam9hSHk4UXJIUS5EbHYuN3kiPjwveUxRbGRyPgogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHlRTD0iLi4vUUh5OEJRTEh5Lzd5Lzd0QkhRUi5yam9hSExhOHJlLjd5Ij48L3lMUWxkcj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDx5TFFsZHIgeVFMPSIuLi9RSHk4QlFMSHkvN3kvN3RCSFFSLkZhOHIuN3kiPjwveUxRbGRyPgogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHlRTD0iLi4vUUh5OEJRTEh5Lzd5Lzd0QkhRUi5GYThyLnlIYUhMcmw4di43eSI+PC95TFFsZHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5TFFsZHIgeVFMPSIuLi9RSHk4QlFMSHkvN3kvSHVManZPankuN3kiPjwveUxRbGRyPgogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHlRTD0iLi4vUUh5OEJRTEh5Lzd5Lzd0QkhRUi5GYThyLmRsSC43eSI+PC95TFFsZHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5TFFsZHIgeVFMPSIuLi9RSHk4QlFMSHkvN3kvN3RCSFFSLkZhOHIueXJqTFcuN3kiPjwveUxRbGRyPgogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHlRTD0iLi4vUUh5OEJRTEh5Lzd5Lzd0QkhRUi5GYThyLnJsREguN3kiPjwveUxRbGRyPgogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHlRTD0iLi4vUUh5OEJRTEh5Lzd5Lzd0QkhRUi5GYThyLnI4OGFybGQuN3kiPjwveUxRbGRyPgogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHlRTD0iLi4vUUh5OEJRTEh5Lzd5Lzd0QkhRUi5GYThyLlFIeWxTSC43eSI+PC95TFFsZHI+CgogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHlRTD0iLi4vUUh5OEJRTEh5Lzd5Lzd0QkhRUi5MOGFhamR5bG9hSC43eSI+PC95TFFsZHI+CgogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHlRTD0iLi4vUUh5OEJRTEh5Lzd5Lzd0QkhRUi5uUWxyckhRLjd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS83eS9ybHZSX0RMSC83dEJIUVIucmx2UkRMSC43eSI+PC95TFFsZHI+CgoKICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS83eS9MQnlyOEQuN3kiPjwveUxRbGRyPgogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHlRTD0iLi4vUUh5OEJRTEh5Lzd5L1FIeWQ4dnEuRGx2Ljd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS83eS9sOHktOFFsSHZyanJsOHZMZWp2bkgtRmx1Ljd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS83eS9qN2p1X0w4REQ4dl9RSHRCSHlyLjd5Ij48L3lMUWxkcj4KCgogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHlRTD0iLi4vUUh5OEJRTEh5Lzd5L1FIeWQ4dnlsT0gtcmpvYUh5Ljd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS83eS83dEJIUVIucmpvYUhMYThyZS43eSI+PC95TFFsZHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5TFFsZHIgeVFMPSIuLi9RSHk4QlFMSHkvN3kvN3RCSFFSLnFqcmp3am9hSHkuN3kiPjwveUxRbGRyPgogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHlRTD0iLi4vUUh5OEJRTEh5Lzd5L2ZIUThHYWxkbzhqUXEuN3kiPjwveUxRbGRyPgogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHlRTD0iLi4vUUh5OEJRTEh5Lzd5L3Fqcmp3am9hSHkubzg4cnlyUWpkLjd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS83eS93am9hSHc4OGF5Ljd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS83eS9GQmFhTGphSHZxalEuRGx2Ljd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS83eS9yUmRIamVIanEuN3kiPjwveUxRbGRyPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGFsdlcgUUhhPSJ5clJhSHllSEhyIiBlUUhGPSIuLi9RSHk4QlFMSHkvTHl5L3lIYUhMci5xanJqd2pvYUh5LkRsdi5MeXkiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5TFFsZHIgclJkSD0ickh1ci83ak9qeUxRbGRyIiBlUUhGPSIuLi9RSHk4QlFMSHkvN3kvcWpyandqb2FIeS55SGFITHIuRGx2Ljd5Ij48L3lMUWxkcj4KCgoKICAgICAgICAgICAgICAgICAgICAgICAgPGFsdlcgUUhhPSJ5clJhSHllSEhyIiBlUUhGPSIuLi9RSHk4QlFMSHkvTHl5L284OHJ5clFqZC15YmxyTGUuTHl5IiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHlRTD0iLi4vUUh5OEJRTEh5Lzd5L284OHJ5clFqZC15YmxyTGUuN3kiPjwveUxRbGRyPgoKCiAgICAgICAgICAgICAgICAgICAgICAgIDxhbHZXIGVRSEY9Ii4uL1FIeThCUUxIeS9MeXkvbzg4cnlyUWpkLURCYXJseUhhSExyLkx5eSIgUUhhPSJ5clJhSHllSEhyIj4gICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHlRTD0iLi4vUUh5OEJRTEh5Lzd5L284OHJ5clFqZC1EQmFybHlIYUhMci43eSI+PC95TFFsZHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5TFFsZHIgclJkSD0ickh1ci83ak9qeUxRbGRyIiB5UUw9Ii4uL1FIeThCUUxIeS83eS95ZGx2dkhReS5EbHYuN3kiPjwveUxRbGRyPgogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHJSZEg9InJIdXIvN2pPanlMUWxkciIgeVFMPSIuLi9RSHk4QlFMSHkvN3kvcmxkZEhxLjd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciByUmRIPSJySHVyLzdqT2p5TFFsZHIiIHlRTD0iLi4vUUh5OEJRTEh5Lzd5Lzd0QkhRUi5MODhXbEguN3kiPjwveUxRbGRyPgogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHJSZEg9InJIdXIvN2pPanlMUWxkciIgeVFMPSIuLi9RSHk4QlFMSHkvN3kvN3RCSFFSLmE4bmx2Ljd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciByUmRIPSJySHVyLzdqT2p5TFFsZHIiIHlRTD0iLi4vUUh5OEJRTEh5Lzd5L3lySGRSLjd0QkhRUi43eSI+PC95TFFsZHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhbHZXIFFIYT0ieXJSYUh5ZUhIciIgIHlRTD0iLi4vUUh5OEJRTEh5L2RhQm5sdnkvN3lyUUhIL3FseXIvcmVIREh5L3FIRmpCYXIveXJSYUhfclFISC5MeXkiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5TFFsZHIgIHJSZEg9InJIdXIvN2pPanlMUWxkciIgZVFIRj0iLi4vUUh5OEJRTEh5L2RhQm5sdnkvN3lyUUhIL3FseXIvN3lyUUhILkRsdi43eSI+PC95TFFsZHI+CgogICAgICAgICAgICAgICAgICAgICAgICA8YWx2VyBlUUhGPSIuLi9RSHk4QlFMSHkvZGFCbmx2eS9vODhyeXJRamQteWJsckxlL3E4THkvTHl5L2VsbmVhbG5lci5MeXkiIFFIYT0ieXJSYUh5ZUhIciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhbHZXIGVRSEY9Ii4uL1FIeThCUUxIeS9kYUJubHZ5L284OHJ5clFqZC15YmxyTGUvcWx5ci9MeXkvbzg4cnlyUWpkWC9vODhyeXJRamQteWJsckxlLkx5eSIgUUhhPSJ5clJhSHllSEhyIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDx5TFFsZHIgeVFMPSIuLi9RSHk4QlFMSHkvZGFCbmx2eS9vODhyeXJRamQteWJsckxlL3E4THkvN3kvZWxuZWFsbmVyLjd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS9kYUJubHZ5L284OHJ5clFqZC15YmxyTGUvcWx5ci83eS9vODhyeXJRamQteWJsckxlLjd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUwgPSAiLi4vUUh5OEJRTEh5L2RhQm5sdnkvbzg4cnlyUWpkLXlibHJMZS9xOEx5Lzd5L0RqbHYuN3kiID48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS9kYUJubHZ5L1RsbmVMZWpRcnkvN3kvZWxuZUxlalFyeS43eSI+PC95TFFsZHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5TFFsZHIgeVFMPSIuLi9RSHk4QlFMSHkvZGFCbmx2eS9UbG5lTGVqUXJ5Lzd5L0Q4cUJhSHkvcVFsYWFxOGJ2Ljd5Ij48L3lMUWxkcj4KICAgICAgICAgICAgICAgICAgICAgICAgPGFsdlcgUUhhPSJ5clJhSHllSEhyIiBlUUhGPSIuLi9RSHk4QlFMSHkvZGFCbmx2eS83eTRqdkhhLVguaC5VL3k4QlFMSC83dEJIUVIuN3lkanZIYS5MeXkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciByUmRIPSJySHVyLzdqT2p5TFFsZHIiIHlRTD0iLi4vUUh5OEJRTEh5L2RhQm5sdnkvN3k0anZIYS1YLmguVS95OEJRTEgvN3RCSFFSLjd5ZGp2SGEuRGx2Ljd5Ij48L3lMUWxkcj4KCgogICAgICAgICAgICAgICAgICAgICAgICA8YWx2VyBlUUhGPSIuLi9RSHk4QlFMSHkvTHl5L2FvUi1Eamx2Lkx5eSIgUUhhPSJ5clJhSHllSEhyIiByUmRIPSJySHVyL0x5eSIgREhxbGo9InlMUUhIdiIgTGVqUXlIcj0iQnJGLXoiID4KICAgICAgICAgICAgICAgICAgICAgICAgPGFsdlcgZVFIRj0iLi4vUUh5OEJRTEh5L0x5eS83dEJIUVItYWpvSGFqQnJSLkx5eSIgUUhhPSJ5clJhSHllSEhyIiByUmRIPSJySHVyL0x5eSIgREhxbGo9InlMUUhIdiIgTGVqUXlIcj0iQnJGLXoiID4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS83eS83dEJIUVItYWpvSGFqQnJSLjd5Ij48L3lMUWxkcj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxhbHZXIGVRSEY9Ii4uL1FIeThCUUxIeS9kYUJubHZ5L2xMZUhMVy95V2x2eS95dEJqUUgvUUhxLkx5eSIgUUhhPSJ5clJhSHllSEhyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGFsdlcgZVFIRj0iLi4vUUh5OEJRTEh5L2RhQm5sdnkvbExlSExXL3lXbHZ5L3l0QmpRSC9uUUhIdi5MeXkiIFFIYT0ieXJSYUh5ZUhIciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhbHZXIGVRSEY9Ii4uL1FIeThCUUxIeS9kYUJubHZ5L2xMZUhMVy95V2x2eS95dEJqUUgvb2FCSC5MeXkiIFFIYT0ieXJSYUh5ZUhIciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhbHZXIGVRSEY9Ii4uL1FIeThCUUxIeS9kYUJubHZ5L2xMZUhMVy95V2x2eS9GYWpyL1FIcS5MeXkiIFFIYT0ieXJSYUh5ZUhIciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhbHZXIGVRSEY9Ii4uL1FIeThCUUxIeS9kYUJubHZ5L2xMZUhMVy95V2x2eS9GYWpyL25RSEh2Lkx5eSIgUUhhPSJ5clJhSHllSEhyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHlMUWxkciB5UUw9Ii4uL1FIeThCUUxIeS9kYUJubHZ5L2xMZUhMVy9sTGVITFcuN3k/Tz1VLm0uSyI+PC95TFFsZHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5clJhSCByUmRIPSJySHVyL0x5eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuN3k0anZIYS1ybHJhSCBlVSwgZUssIGVYIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHZILWVIbG5lcjogS21kdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgPC95clJhSD4KICAgICAgICAgICAgICAgICAgICAgICAgPGFsdlcgUUhhPSJ5clJhSHllSEhyIiBlUUhGPSIuLi9RSHk4QlFMSHkvTHl5L3I4V0h2LWx2ZEJyLUZqTEhvODhXLkx5eSIgclJkSD0ickh1ci9MeXkiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDx5TFFsZHIgclJkSD0ickh1ci83ak9qeUxRbGRyIiB5UUw9Ii4uL1FIeThCUUxIeS83eS83dEJIUVIucjhXSHZsdmRCci43eSI+PC95TFFsZHI+CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHlRTD0iLi4vUUh5OEJRTEh5L2RhQm5sdnkvRmx2SEJkYThqcUhRLVguZy5VL2RqVzguN3kiPjwveUxRbGRyPgoKICAgICAgICAgICAgICAgICAgICAgICAgPHlyUmFIPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yci1xUThkcThidi1ESHZCIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibHFyZTogVW1tJTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEalFubHYtcjhkOiBLZHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGpxcWx2bjogQ2R1IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2pMV25ROEJ2cS1MOGE4UTogI0ZGRjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOFFxSFE6IFVkdSB5OGFscSAjTExMOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG84UXFIUTogVWR1IHk4YWxxIFFub2oobSxtLG0sLkspOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpvOFFxSFEtUWxuZXItYmxxcmU6IEtkdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbzhRcUhRLW84cnI4RC1ibHFyZTogS2R1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1iSG9XbHItbzhRcUhRLVFqcWxCeTogTmR1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EOFMtbzhRcUhRLVFqcWxCeTogTmR1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG84UXFIUS1RanFsQnk6IE5kdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtYkhvV2xyLW84dS15ZWpxOGI6IG0gQ2R1IFVtZHUgUW5vaihtLG0sbSwuSyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUQ4Uy1vOHUteWVqcThiOiBtIENkdSBVbWR1IFFub2oobSxtLG0sLkspOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG84dS15ZWpxOGI6IG0gQ2R1IFVtZHUgUW5vaihtLG0sbSwuSyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWJIb1dsci1vakxXblE4QnZxLUxhbGQ6IGRqcXFsdm4tbzh1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1EOFMtb2pMV25ROEJ2cS1MYWxkOiBkanFxbHZuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9qTFduUThCdnEtTGFsZDogZGpxcWx2bi1vOHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJyLXlCbm5IeXJsOHYgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFseWRhalI6IG9hOExXOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRqcXFsdm46IFhkdSBLbWR1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yci15Qm5uSHlybDh2LnJyLWx5LUJ2cUhRLUxCUXk4USB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDhhOFE6ICNGRkY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2pMV25ROEJ2cS1MOGE4UTogI21telVMSzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvakxXblE4QnZxLWxEam5IOiAtRDhTLWFsdkhqUS1uUWpxbEh2cihyOGQsICNtbXp6TEwsICNtbWdnb1gpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9qTFduUThCdnEtbERqbkg6IC1iSG9XbHItblFqcWxIdnIoYWx2SGpRLCBtIG0sIG0gVW1tJSwgRlE4RCgjbW16ekxMKSwgcjgoI21tZ2dvWCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9qTFduUThCdnEtbERqbkg6IC1iSG9XbHItYWx2SGpRLW5RanFsSHZyKHI4ZCwgI21tenpMTCwgI21tZ2dvWCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2pMV25ROEJ2cS1sRGpuSDogLTgtYWx2SGpRLW5RanFsSHZyKHI4ZCwgI21tenpMTCwgI21tZ2dvWCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2pMV25ROEJ2cS1sRGpuSDogYWx2SGpRLW5RanFsSHZyKHI4IG84cnI4RCwgI21tenpMTCwgI21tZ2dvWCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2pMV25ROEJ2cS1RSGRIanI6IFFIZEhqci11OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsYXJIUTogZFE4bmxxOk1wWkRqbkh3UWp2eUY4UUQuRWxMUTh5OEZyLm5RanFsSHZyKHlyalFyRzhhOFF5clE9JyNGRm1tenpMTCcsIEh2cUc4YThReXJRPScjRkZtbWdnb1gnLCAyUWpxbEh2cndSZEg9bSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucnIteUJubkh5cmw4di5yci1seS1CdnFIUS1MQlF5OFEgaiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDhhOFE6ICNGRkY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJyLXlCbm5IeXJsOHYgZCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGpRbmx2OiBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJyLWVsdnJ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxxcmU6IGhnbWR1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vQnJyOHZvYWx2V3sKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2pMV25ROEJ2cS1MOGE4UTogI0xtUHpDWDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOFFxSFE6IEtkdSB5OGFscTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGOHZyLXlsU0g6IFVVZHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDhhOFE6ICNGRkY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzhRcUhRLVFqcWxCeTogQ2R1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERqUW5sdi1yOGQ6IC1LZHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubzg4cm84dSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG84UXFIUTogI21tbSBLZHUgeThhbHE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgPC95clJhSD4KICAgICAgICAgICAgICAgICAgICAgICAgIDx5TFFsZHIgeVFMPSIuLi9RSHk4QlFMSHkvN3kvbzg4cm84dV9ZTi5tLm0uN3kiPjwveUxRbGRyPgogICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHY4dkxIPSI8P2RlZCBITGU4ICRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnQnlIUXY4dkxIJ107ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQocThMQkRIdnIpLlFIanFSKEZCdkxybDh2ICgpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIub0Jycjh2b2FsdlciKS44digiTGFsTFciLCBGQnZMcmw4dihIT0h2cikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNEOHFqYV95cmpyQnlfcWp5ZW84alFxJykuRDhxamEoJ3I4bm5hSCcpOwogICAgLypvODhybzh1Lkw4dkZsUUQoewogICAgICAgICAgTGE4eUg2QnJyOHY6IEZqYXlILAogICAgICAgICAgICBESHl5am5IOiAiTTggTGVITFcgcmVqciBqYWEgcmVIIHE4TEJESHZyeSBCZGE4anFIcSBvUiBSOEIgalFIIGx2cUh1SHEgb0hGOFFIIDlsbnYtY0ZGPyIsCiAgICAgICAgICAgIG9CcnI4dnk6IHsKICAgICAgICAgICAgICAgIExqdkxIYTogewogICAgICAgICAgICAgICAgICAgIGFqb0hhOiAiR2p2TEhhIiwKICAgICAgICAgICAgICAgICAgICBMYWp5eTBqREg6ICJvcnYtcUhGakJhciIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBMOHZGbFFEOiB7CiAgICAgICAgICAgICAgICAgICAgYWpvSGE6ICJMOHZGbFFEIiwKICAgICAgICAgICAgICAgICAgICBMYWp5eTBqREg6ICJvcnYteUJMTEh5eSAiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIExqYWFvakxXOiBGQnZMcmw4dihRSHlCYXIpIHsKICAgICAgICAgICAgICAgIGxGIChRSHlCYXIpIHsKICAgICAgICAgICAgICAgICAkKCcjRDhxamFfeXJqckJ5X3FqeWVvOGpRcScpLkQ4cWphKCdyOG5uYUgnKTsKICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgIH0KICAgICAgICB9KTsqLwogIH0pOwoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAkKHE4TEJESHZyKS44digiTGFsTFciLCAiLm9CcnI4dm9hbHZXIiwgRkJ2THJsOHYgKEgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgSC55cjhkNFE4ZGpuanJsOHYoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgSC55cjhkWkRESHFsanJINFE4ZGpuanJsOHYoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIE9qUSBMRlFEID0gbzg4cm84dS5MOHZGbFFEKCJNOCBMZUhMVyByZWpyIGphYSByZUggcThMQkRIdnJ5IEJkYThqcUhxIG9SIFI4QiBqUUggbHZxSHVIcSBvSEY4UUggOWxudi1jRkY/IiwgRkJ2THJsOHYgKFFIeUJhcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgbEYgKFFIeUJhcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgJCgnI0Q4cWphX3lyanJCeV9xanllbzhqUXEnKS5EOHFqYSgncjhubmFIJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9KTsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQocThMQkRIdnIpLjh2KCdMYWxMVycsICcub3J2X09IdnE4UV9IcWxyX0Y4UUQnLCBGQnZMcmw4diAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBRSEYgPSAkKHJlbHkpLkxhOHlIeXIoJ2onKS5kUThkKCdRSGEnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGpRSHZyLmJsdnE4Yi5hOExqcmw4diA9IFFIRjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3lIYUhMcmphYSIpLkxhbExXKEZCdkxybDh2ICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLkxqeUgnKS5kUThkKCdMZUhMV0hxJywgcmVseS5MZUhMV0hxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIuTGp5SCIpLkxhbExXKEZCdkxybDh2ICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCQoIi5ManlIIikuYUh2bnJlID09ICQoIi5ManlIOkxlSExXSHEiKS5hSHZucmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiN5SGFITHJqYWEiKS5kUThkKCJMZUhMV0hxIiwgIkxlSExXSHEiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiN5SGFITHJqYWEiKS5kUThkKCJMZUhMV0hxIiwgRmpheUgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIERSZGp2SGEgPSAndjhfZGp2JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIucjgtYWpvSGFqQnJSIikuYWpvSGFqQnJSKHt5akRIX2JscXJlOiByUUJIfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiLnI4LWFqb0hhakJyUi1sTDh2IikuYWpvSGFqQnJSKHtham9IYTogRmpheUh9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIuTGVTdi15SGFITHIiKS5MZTh5SHYoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIuTGVTdi15SGFITHItcUh5SGFITHIiKS5MZTh5SHYoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYWE4Yl95bHZuYUhfcUh5SGFITHI6IHJRQkgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuTGVITFdfRicpLmxHZUhMVyh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlSExXbzh1R2FqeXk6ICdsTGVITFdvOHVfeXRCalFILVFIcScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFqcWw4R2FqeXk6ICdsUWpxbDhfeXRCalFILVFIcScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx2TFFIanlIQVFIajogJ0ttJScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuTGVITFdfeXJqckJ5TGVXJykubEdlSExXKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVITFdvOHVHYWp5eTogJ2xMZUhMV284dV95dEJqUUgtb2FCSCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFqcWw4R2FqeXk6ICdsUWpxbDhfeXRCalFILW9hQkgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdkxRSGp5SEFRSGo6ICdLbSUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5RanFsOF9RXzhkcicpLmxHZUhMVyh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlSExXbzh1R2FqeXk6ICdsTGVITFdvOHVfeXRCalFILVFIcScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFqcWw4R2FqeXk6ICdsUWpxbDhfeXRCalFILVFIcScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx2TFFIanlIQVFIajogJ0ttJScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIHdqeVcgVmx5cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChxOExCREh2cikuOHYoIkxhbExXIiwgIi5qX3ZIYl9yanlXX0w4RERIdnIiLCBGQnZMcmw4diAoSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgb09scSA9ICQoIiNvT2xxIikuZFE4ZCgiT2phQkgiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIHJqeVdfbHEgPSAkKHJlbHkpLmRROGQoImxxIikueWRhbHIoJ18nKVttXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIHJqeVdfTGVsYXFfbHEgPSAkKHJlbHkpLmRROGQoImxxIikueWRhbHIoJ18nKVtVXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC55cjhkNFE4ZGpuanJsOHYoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC55cjhkWkRESHFsanJINFE4ZGpuanJsOHYoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCQocmVseSkuZWp5R2FqeXkoJ3FseWpvYUhfanFxJykgPT0gclFCSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIHFseWpvYUhfanFxID0gJ1UnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIHFseWpvYUhfanFxID0gJ20nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgRjg4ckhRX2Q4ZEJkX2RRbERqUVIgPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHJIRDogIjxvQnJyOHYgclJkSD0nb0Jycjh2Jz48L29CcnI4dj4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPSHZyOiA3eTRqdkhhLkhPcjlyalFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ydkxhanl5OiAib3J2IG9ydi1kUWxEalFSIG9ydi15RCBvcnZfanFxX3JqeVdfTDhEREh2ciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3J2ckh1cjogIiBBcXEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExqYWFvakxXOiBGQnZMcmw4diAoSE9IdnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKHFseWpvYUhfanFxID09ICdtJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9IdnIueXI4ZDRROGRqbmpybDh2KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgcmp5V19scSA9ICQoIiNyanlXX2xxIikuZFE4ZCgiT2phQkgiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSByanlXX0xlbGFxX2xxID0gJCgiI3JqeVdfTGVsYXFfbHEiKS5kUThkKCJPamFCSCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIEJRYSA9ICcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9sRF9yanlXX0w4RERIdnJqcXEuZGVkP2pfb0JsYXFIUV9PamFCSF9scT08P2RlZCBITGU4ICRqX29CbGFxSFFfT2phQkhfbHE7ID8+JmRscT08P2RlZCBITGU4ICRkbHE7ID8+JmxEX1FscT08P2RlZCBITGU4ICRsRF9RbHE7ID8+Jm9scT08P2RlZCBITGU4ICRvbHE7ID8+Jm9PbHE9PD9kZWQgSExlOCAkb09scTsgPz4mYmxEX2xxPTw/ZGVkIEhMZTggJGJsRF9scTsgPz4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5qN2p1KHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBESHJlOHE6ICI0Yzl3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUWE6IEJRYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxanJqOiAkKCIjRjhRRF9yanlXX0w4RERIdnIiKS55SFFsamFsU0goKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkucTh2SChGQnZMcmw4diAoRHluKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5uUWxyckhRLmpxcSh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJscmFIOiAnRUh5eWpuSCEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBySHVyOiBEeW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqN2p1X0w4REQ4dl9RSHRCSHlyKCcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9sRF9yanlXX0w4RERIdnJhbHlyX2o3anUuZGVkP2pfb0JsYXFIUV9PamFCSF9scT08P2RlZCBITGU4ICRqX29CbGFxSFFfT2phQkhfbHE7ID8+JmRscT08P2RlZCBITGU4ICRkbHE7ID8+JmxEX1FscT08P2RlZCBITGU4ICRsRF9RbHE7ID8+Jm9scT08P2RlZCBITGU4ICRvbHE7ID8+Jm9PbHE9PD9kZWQgSExlOCAkb09scTsgPz4mYmxEX2xxPTw/ZGVkIEhMZTggJGJsRF9scTsgPz4mcmp5V19scT0nICsgcmp5V19scSArICcmcmp5V19MZWxhcV9scT0nICsgcmp5V19MZWxhcV9scSwgJ3FsT19yanlXX0w4RERIdnJ5X2FseXInKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxySEQ6ICI8b0Jycjh2IHJSZEg9J29CcnI4dic+PC9vQnJyOHY+IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0h2cjogN3k0anZIYS5IT3I5cmpRciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcnZMYWp5eTogIm9ydiBvcnYtcWp2bkhRIG9ydi15RCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3J2ckh1cjogIiBHYTh5SCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGphYW9qTFc6IEZCdkxybDh2IChIT0h2cikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0h2ci55cjhkNFE4ZGpuanJsOHYoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9IdnIucWpyai5MYTh5SCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIHJvID0gJzxsIExhanl5PSJGaiBGai1CeUhRIj48L2w+PGwgTGFqeXk9IkZqIEZqLUw4biI+ICc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChEUmRqdkhhICE9ICJ2OF9kanYiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUmRqdkhhLkxhOHlIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJkanZIYSA9ICQuN3k0anZIYSh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMOHZySHZyOWxTSDoge2JscXJlOiBnQ20sIGVIbG5lcjogWHptfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVIanFIUXdscmFIOiAnIHdqeVcgRzhEREh2cnknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVIREg6ICdxanZuSFEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDh2ckh2ckE3anU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUWE6ICcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9sRF9yanlXX0w4RERIdnJhbHlyLmRlZD9qX29CbGFxSFFfT2phQkhfbHE9PD9kZWQgSExlOCAkal9vQmxhcUhRX09qYUJIX2xxOyA/PiZkbHE9PD9kZWQgSExlOCAkZGxxOyA/PiZsRF9RbHE9PD9kZWQgSExlOCAkbERfUWxxOyA/PiZvbHE9PD9kZWQgSExlOCAkb2xxOyA/PiZvT2xxPTw/ZGVkIEhMZTggJG9PbHE7ID8+JmJsRF9scT08P2RlZCBITGU4ICRibERfbHE7ID8+JnJqeVdfbHE9JyArIHJqeVdfbHEgKyAnJnJqeVdfTGVsYXFfbHE9JyArIHJqeVdfTGVsYXFfbHEgKyAnJnFseWpvYUhfanFxPScgKyBxbHlqb2FIX2pxcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqQnI4YThqcTogclFCSAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEY4OHJIUXc4OGFvalE6IEY4OHJIUV9kOGRCZF9kUWxEalFSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQocThMQkRIdnIpLjh2KCJsRkdhbExXSHEiLCAiLkxhanl5X3JqeVdfTGVsYXFfT2phQkgiLCBGQnZMcmw4diAoSCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC55cjhkNFE4ZGpuanJsOHYoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC55cjhkWkRESHFsanJINFE4ZGpuanJsOHYoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIHJqeVdfbHEgPSAkKHJlbHkpLmRROGQoIk9qYUJIIikueWRhbHIoJzonKVttXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIExlbGFxX2xxID0gJChyZWx5KS5kUThkKCJPamFCSCIpLnlkYWxyKCc6JylbVV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBsdmRCcl9yUmRIID0gJChyZWx5KS5kUThkKCJyUmRIIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBvX3JqeVdfbHEgPSAkKHJlbHkpLmpyclEoImxySERRSEYiKS55ZGFscignOicpW21dOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgb09scSA9ICQocmVseSkuanJyUSgibHJIRFFIRiIpLnlkYWxyKCc6JylbVV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkKHJlbHkpLmRROGQoIkxlSExXSHEiKSA9PSByUUJIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgakxybDh2ID0gJ1FIRDhPSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgakxybDh2ID0gJ2pxcSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkKHJlbHkpLmVqeUdhanl5KCJMYWp5eV9yanlXX0xlbGFxX3ZqIikgPT0gclFCSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIG9ydl9yUmRIID0gJ3ZqJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBvcnZfclJkSCA9ICdPamEnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgUWp2cSA9IHZIYiBNanJIKCkubkhyd2xESCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgQlFhID0gJy4uL2I4UVdGYThiL2JsRF9IcWxyX3JqeVdMZWxhcS5kZWQ/al9vQmxhcUhRX09qYUJIX2xxPTw/ZGVkIEhMZTggJGpfb0JsYXFIUV9PamFCSF9scTsgPz4mZGxxPTw/ZGVkIEhMZTggJGRscTsgPz4mbERfUWxxPTw/ZGVkIEhMZTggJGxEX1FscTsgPz4mb2xxPTw/ZGVkIEhMZTggJG9scTsgPz4mYmxEX2xxPTw/ZGVkIEhMZTggJGJsRF9scTsgPz4mb09scT0nICsgb09scSArICcmUWp2cT0nICsgUWp2cSArICcmb3J2X3JSZEg9JyArIG9ydl9yUmRIOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmo3anUoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREhyZThxOiAiMml3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJRYTogQlFhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWpyajoge3JqeVdfbHE6IHJqeVdfbHEsIG9fcmp5V19scTogb19yanlXX2xxLCBsdmRCcl9yUmRIOiBsdmRCcl9yUmRILCBqTHJsOHY6IGpMcmw4diwgTGVsYXFfbHE6IExlbGFxX2xxfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5xOHZIKEZCdkxybDh2IChEeW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQublFscnJIUS5qcXEoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJscmFIOiAnRUh5eWpuSCEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJIdXI6IER5bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgNUh5ZDh2eWxvYUggSnlIUSBWbHlyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQocThMQkRIdnIpLjh2KCJMYWxMVyIsICIub3J2X0J5SFF5X2FseXIiLCBGQnZMcmw4diAoSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBILnlyOGQ0UThkam5qcmw4digpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBILnlyOGRaRERIcWxqckg0UThkam5qcmw4digpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgbHJIRFFIRiA9ICQocmVseSkuanJyUSgnbHJIRFFIRicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgbHJIRHJSZEggPSAkKHJlbHkpLmpyclEoJ2xySERyUmRIJyk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgRjg4ckhRX2Q4ZEJkX2RRbERqUVIgPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHJIRDogIjxvQnJyOHYgclJkSD0nb0Jycjh2Jz48L29CcnI4dj4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPSHZyOiA3eTRqdkhhLkhPcjlyalFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ydkxhanl5OiAib3J2IG9ydi1xanZuSFEgb3J2LXlEIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcnZySHVyOiAiIEdhOHlIIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMamFhb2pMVzogRkJ2THJsOHYgKEhPSHZyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPSHZyLnlyOGQ0UThkam5qcmw4digpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0h2ci5xanJqLkxhOHlIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoRFJkanZIYSAhPSAidjhfZGp2IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJkanZIYS5MYTh5SCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBybyA9ICc8bCBMYWp5eT0iRmogRmotQnlIUSI+PC9sPjxsIExhanl5PSJGaiBGai1MOG4iPiAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUmRqdkhhID0gJC43eTRqdkhhKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEw4dnJIdnI5bFNIOiB7YmxxcmU6IHpDbSwgZUhsbmVyOiBYbW19LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZUhqcUhRd2xyYUg6ICcgIEp5SFF5IFZseXIgLSBKeUhRIDJROEJkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlSERIOiAndzhEanI4JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEw4dnJIdnJBN2p1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlFhOiAnLi4vYjhRV0ZhOGIval9ROGFIX0J5SFFfYWx5ci5kZWQ/al9vQmxhcUhRX09qYUJIX2xxPTw/ZGVkIEhMZTggJExhV19vT2xxOyA/PiZRQmFIX2xxPTw/ZGVkIEhMZTggJFFCYUhfbHE7ID8+JlE4YUhfRGp5ckhRX2xxPTw/ZGVkIEhMZTggJFE4YUhfRGp5ckhRX2xxOyA/PiZkbHE9PD9kZWQgSExlOCAkZGxxOyA/PiZsRF9RbHE9PD9kZWQgSExlOCAkbERfUWxxOyA/PiZvbHE9PD9kZWQgSExlOCAkb2xxOyA/PiZ5SGFfbmxxPScgKyBsckhEUUhGICsgJyZROGFIX0J5SFFyUmRIPScgKyBsckhEclJkSCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqQnI4YThqcTogclFCSAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEw4dnJIdnJjT0hRRmE4YjogJ3lMUThhYScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGODhySFF3ODhhb2pROiBGODhySFFfZDhkQmRfZFFsRGpRUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHE4TEJESHZyKS44digiTGFsTFciLCAnLkxlanJfeUh2cV9vcnYnLCBGQnZMcmw4diAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9qeWxMX0Y4UURfeUJvRGxyKCcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9sRF9MOERESHZyYWx5cl95ZGFsci5kZWQ/TF9qTHJsOHY9anFxJmpfb0JsYXFIUV9PamFCSF9scT08P2RlZCBITGU4ICRqX29CbGFxSFFfT2phQkhfbHE7ID8+JlFqdnE9PD9kZWQgSExlOCBRanZxKFBQUCwgUFBQUFBQKTsgPz4mZGxxPTw/ZGVkIEhMZTggJGRscTsgPz4mbERfUWxxPTw/ZGVkIEhMZTggJGxEX1FscTsgPz4mb2xxPTw/ZGVkIEhMZTggJG9scTsgPz4mb09scT08P2RlZCBITGU4ICRvT2xxOyA/PiZibERfbHE9PD9kZWQgSExlOCAkYmxEX2xxOyA/PicsICdxbE9fTGVqcl9MOERESHZyeV9hbHlyJywgJ0Y4UURfTGVqcicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJ2pbZVFIRj0iI0w4RERIdnJ5LWQ4eXIiXScpLkxhbExXKEZCdkxybDh2ICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajdqdV9MOEREOHZfUUh0Qkh5cignLi4vYjhRV0ZhOGIvYjhRV0ZhOGJfbERfTDhEREh2cmFseXJfeWRhbHIuZGVkP2pfb0JsYXFIUV9PamFCSF9scT08P2RlZCBITGU4ICRqX29CbGFxSFFfT2phQkhfbHE7ID8+JlFqdnE9PD9kZWQgSExlOCBRanZxKFBQUCwgUFBQUFBQKTsgPz4mZGxxPTw/ZGVkIEhMZTggJGRscTsgPz4mbERfUWxxPTw/ZGVkIEhMZTggJGxEX1FscTsgPz4mb2xxPTw/ZGVkIEhMZTggJG9scTsgPz4mb09scT08P2RlZCBITGU4ICRvT2xxOyA/PiZibERfbHE9PD9kZWQgSExlOCAkYmxEX2xxOyA/PicsICdxbE9fTGVqcl9MOERESHZyeV9hbHlyJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJ2pbZVFIRj0iI3RCSFFSLXlITHJsOHYtZDh5ciJdJykuTGFsTFcoRkJ2THJsOHYgKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqN2p1X0w4REQ4dl9RSHRCSHlyKCcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9sRF90QkhRUmFseXJfeWRhbHIuZGVkP2pfb0JsYXFIUV9PamFCSF9scT08P2RlZCBITGU4ICRqX29CbGFxSFFfT2phQkhfbHE7ID8+JlFqdnE9PD9kZWQgSExlOCBRanZxKFBQUCwgUFBQUFBQKTsgPz4mZGxxPTw/ZGVkIEhMZTggJGRscTsgPz4mbERfUWxxPTw/ZGVkIEhMZTggJGxEX1FscTsgPz4mb2xxPTw/ZGVkIEhMZTggJG9scTsgPz4mb09scT08P2RlZCBITGU4ICRvT2xxOyA/PiZibERfbHE9PD9kZWQgSExlOCAkYmxEX2xxOyA/PicsICdxbE9fTGVqcl90QkhRUl9hbHlyJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQocThMQkRIdnIpLjh2KCJMYWxMVyIsICcudEJIUVJfeUh2cV9vcnYnLCBGQnZMcmw4diAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSB0QkhRUl9MOERESHZyID0gJCgnI3RCSFFSX0w4RERIdnInKS5PamEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqYUhRcih0QkhRUl9MOERESHZyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2p5bExfRjhRRF95Qm9EbHIoJy4uL2I4UVdGYThiL2I4UVdGYThiX2xEX3RCSFFSYWx5cl95ZGFsci5kZWQ/TF9qTHJsOHY9anFxJmpfb0JsYXFIUV9PamFCSF9scT08P2RlZCBITGU4ICRqX29CbGFxSFFfT2phQkhfbHE7ID8+JlFqdnE9PD9kZWQgSExlOCBRanZxKFBQUCwgUFBQUFBQKTsgPz4mZGxxPTw/ZGVkIEhMZTggJGRscTsgPz4mbERfUWxxPTw/ZGVkIEhMZTggJGxEX1FscTsgPz4mb2xxPTw/ZGVkIEhMZTggJG9scTsgPz4mb09scT08P2RlZCBITGU4ICRvT2xxOyA/PiZibERfbHE9PD9kZWQgSExlOCAkYmxEX2xxOyA/PicrICcmdEJIUVJfTDhEREh2cj0nICsgdEJIUVJfTDhEREh2ciwgJ3FsT19MZWpyX3RCSFFSX2FseXInLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJ2pbZVFIRj0iI2I4UVdGYThiX2E4bnkiXScpLkxhbExXKEZCdkxybDh2ICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9qN2p1X0w4REQ4dl9RSHRCSHlyKCcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9sRF9hOG5hbHlyLmRlZD9qX29CbGFxSFFfT2phQkhfbHE9PD9kZWQgSExlOCAkal9vQmxhcUhRX09qYUJIX2xxOyA/PiZkbHE9PD9kZWQgSExlOCAkZGxxOyA/PiZsRF9RbHE9PD9kZWQgSExlOCAkbERfUWxxOyA/PiZvbHE9PD9kZWQgSExlOCAkb2xxOyA/PiZvT2xxPTw/ZGVkIEhMZTggJG9PbHE7ID8+JmxEX2xxPTw/ZGVkIEhMZTggJGxEX2xxOyA/PiZibERfbHE9PD9kZWQgSExlOCAkYmxEX2xxOyA/PicsICdxbE9fYThueV9hbHlyJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9qN2p1X0w4REQ4dl9RSHRCSHlyKCcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9sRF9qcnJqTGVhbHlyLmRlZD9qX29CbGFxSFFfT2phQkhfbHE9PD9kZWQgSExlOCAkal9vQmxhcUhRX09qYUJIX2xxOyA/PiZkbHE9PD9kZWQgSExlOCAkZGxxOyA/PiZsRF9RbHE9PD9kZWQgSExlOCAkbERfUWxxOyA/PiZvbHE9PD9kZWQgSExlOCAkb2xxOyA/PiZvT2xxPTw/ZGVkIEhMZTggJG9PbHE7ID8+JmJsRF9scT08P2RlZCBITGU4ICRibERfbHE7ID8+JmxEX2xxPTw/ZGVkIEhMZTggJGxEX2xxOyA/PiZ5ckhkX2pMTEh5eT08P2RlZCBITGU4ICR5ckhkX2pMTEh5eSA/PiZqX3lySGRfNzhsdj08P2RlZCBITGU4ICRqX3lySGRfNzhsdjsgPz4nLCAncWxPX2pycmpMZURIdnJ5Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9qN2p1X0w4REQ4dl9RSHRCSHlyKCcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9sRF9EamxhYWx5ci5kZWQ/al9vQmxhcUhRX09qYUJIX2xxPTw/ZGVkIEhMZTggJGpfb0JsYXFIUV9PamFCSF9scTsgPz4mZGxxPTw/ZGVkIEhMZTggJGRscTsgPz4mbERfUWxxPTw/ZGVkIEhMZTggJGxEX1FscTsgPz4mb2xxPTw/ZGVkIEhMZTggJG9scTsgPz4mb09scT08P2RlZCBITGU4ICRvT2xxOyA/PiZibERfbHE9PD9kZWQgSExlOCAkYmxEX2xxOyA/PicsICdxbE9fRGpsYXknKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEVBWlY5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChxOExCREh2cikuOHYoIkxhbExXIiwgIi5qX3ZIYl9EamxheSIsIEZCdkxybDh2IChIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBvT2xxID0gJCgiI29PbHEiKS5kUThkKCJPamFCSCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBILnlyOGQ0UThkam5qcmw4digpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBILnlyOGRaRERIcWxqckg0UThkam5qcmw4digpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgRjg4ckhRX2Q4ZEJkX2RRbERqUVIgPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHJIRDogIjxvQnJyOHYgclJkSD0nb0Jycjh2Jz48L29CcnI4dj4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPSHZyOiA3eTRqdkhhLkhPcjlyalFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ydkxhanl5OiAib3J2IG9ydi1kUWxEalFSIG9ydi15RCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3J2ckh1cjogIiA5SHZxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMamFhb2pMVzogRkJ2THJsOHYgKEhPSHZyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPSHZyLnlyOGQ0UThkam5qcmw4digpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgQlFhID0gJy4uL2I4UVdGYThiL2I4UVdGYThiX2xEX0RqbGFqcXEuZGVkP2pfb0JsYXFIUV9PamFCSF9scT08P2RlZCBITGU4ICRqX29CbGFxSFFfT2phQkhfbHE7ID8+JmRscT08P2RlZCBITGU4ICRkbHE7ID8+JmxEX1FscT08P2RlZCBITGU4ICRsRF9RbHE7ID8+Jm9scT08P2RlZCBITGU4ICRvbHE7ID8+Jm9PbHE9PD9kZWQgSExlOCAkb09scTsgPz4mYmxEX2xxPTw/ZGVkIEhMZTggJGJsRF9scTsgPz4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmo3anUoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREhyZThxOiAiNGM5dyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUWE6IEJRYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFqcmo6ICQoIiNGOFFEX0RqbGF5IikueUhRbGphbFNIKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkucTh2SChGQnZMcmw4diAoRHluKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLm5RbHJySFEuanFxKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybHJhSDogJ0VIeXlqbkghJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBySHVyOiBEeW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9IdnIucWpyai5MYTh5SCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajdqdV9MOEREOHZfUUh0Qkh5cignLi4vYjhRV0ZhOGIvYjhRV0ZhOGJfbERfRGpsYWFseXIuZGVkP2pfb0JsYXFIUV9PamFCSF9scT08P2RlZCBITGU4ICRqX29CbGFxSFFfT2phQkhfbHE7ID8+JmRscT08P2RlZCBITGU4ICRkbHE7ID8+JmxEX1FscT08P2RlZCBITGU4ICRsRF9RbHE7ID8+Jm9scT08P2RlZCBITGU4ICRvbHE7ID8+Jm9PbHE9PD9kZWQgSExlOCAkb09scTsgPz4mYmxEX2xxPTw/ZGVkIEhMZTggJGJsRF9scTsgPz4nLCAncWxPX0RqbGF5Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHJIRDogIjxvQnJyOHYgclJkSD0nb0Jycjh2Jz48L29CcnI4dj4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPSHZyOiA3eTRqdkhhLkhPcjlyalFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ydkxhanl5OiAib3J2IG9ydi1xanZuSFEgb3J2LXlEIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcnZySHVyOiAiIEdhOHlIIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMamFhb2pMVzogRkJ2THJsOHYgKEhPSHZyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPSHZyLnlyOGQ0UThkam5qcmw4digpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0h2ci5xanJqLkxhOHlIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgcm8gPSAnPGwgTGFqeXk9IkZqIEZqLUJ5SFEiPjwvbD48bCBMYWp5eT0iRmogRmotTDhuIj4gJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKERSZGp2SGEgIT0gInY4X2RqdiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSZGp2SGEuTGE4eUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUmRqdkhhID0gJC43eTRqdkhhKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEw4dnJIdnI5bFNIOiB7YmxxcmU6IGdDbSwgZUhsbmVyOiBoQ219LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZUhqcUhRd2xyYUg6ICcgRzhEZDh5SCBFamxhJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlSERIOiAnY2FsT0gnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDh2ckh2ckE3anU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUWE6ICcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9sRF9EamxhRjhRRC5kZWQ/al9vQmxhcUhRX09qYUJIX2xxPTw/ZGVkIEhMZTggJGpfb0JsYXFIUV9PamFCSF9scTsgPz4mZGxxPTw/ZGVkIEhMZTggJGRscTsgPz4mbERfUWxxPTw/ZGVkIEhMZTggJGxEX1FscTsgPz4mb2xxPTw/ZGVkIEhMZTggJG9scTsgPz4mb09scT08P2RlZCBITGU4ICRvT2xxOyA/PiZibERfbHE9PD9kZWQgSExlOCAkYmxEX2xxOyA/PicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgakJyOGE4anE6IHJRQkgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGODhySFF3ODhhb2pROiBGODhySFFfZDhkQmRfZFFsRGpRUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHE4TEJESHZyKS44digiTGFsTFciLCAiLm9ydl9EamxheV9RSEQ4T0giLCBGQnZMcmw4diAoSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgb09scSA9ICQoIiNvT2xxIikuZFE4ZCgiT2phQkgiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC55cjhkNFE4ZGpuanJsOHYoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC55cjhkWkRESHFsanJINFE4ZGpuanJsOHYoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGxxID0gJChyZWx5KS5qcnJRKCJsckhEUUhGIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBCUWEgPSAnLi4vYjhRV0ZhOGIvYjhRV0ZhOGJfbERfRGpsYXFIYUhySC5kZWQnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmo3anUoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREhyZThxOiAiNGM5dyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUWE6IEJRYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFqcmo6IHtscTogbHEsIGxEX1FscTogPD9kZWQgSExlOCAkbERfUWxxOyA/Piwgal9vQmxhcUhRX09qYUJIX2xxOiAiPD9kZWQgSExlOCAkal9vQmxhcUhRX09qYUJIX2xxOyA/PiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnE4dkgoRkJ2THJsOHYgKER5bikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5uUWxyckhRLmpxcSh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmxyYUg6ICdFSHl5am5IIScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgckh1cjogRHluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo3anVfTDhERDh2X1FIdEJIeXIoJy4uL2I4UVdGYThiL2I4UVdGYThiX2xEX0RqbGFhbHlyLmRlZD9qX29CbGFxSFFfT2phQkhfbHE9PD9kZWQgSExlOCAkal9vQmxhcUhRX09qYUJIX2xxOyA/PiZkbHE9PD9kZWQgSExlOCAkZGxxOyA/PiZsRF9RbHE9PD9kZWQgSExlOCAkbERfUWxxOyA/PiZvbHE9PD9kZWQgSExlOCAkb2xxOyA/PiZvT2xxPTw/ZGVkIEhMZTggJG9PbHE7ID8+JmJsRF9scT08P2RlZCBITGU4ICRibERfbHE7ID8+JywgJ3FsT19EamxheScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHE4TEJESHZyKS44digiTGFsTFciLCAiLm9ydl9EamxheV9PbEhiIiwgRkJ2THJsOHYgKEgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIG9PbHEgPSAkKCIjb09scSIpLmRROGQoIk9qYUJIIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEgueXI4ZDRROGRqbmpybDh2KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEgueXI4ZFpEREhxbGpySDRROGRqbmpybDh2KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBscSA9ICQocmVseSkuanJyUSgibHJIRFFIRiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgRjg4ckhRX2Q4ZEJkX2RRbERqUVIgPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHJIRDogIjxvQnJyOHYgclJkSD0nb0Jycjh2Jz48L29CcnI4dj4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPSHZyOiA3eTRqdkhhLkhPcjlyalFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ydkxhanl5OiAib3J2IG9ydi1xanZuSFEgb3J2LXlEIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcnZySHVyOiAiIEdhOHlIIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMamFhb2pMVzogRkJ2THJsOHYgKEhPSHZyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPSHZyLnlyOGQ0UThkam5qcmw4digpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0h2ci5xanJqLkxhOHlIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgcm8gPSAnPGwgTGFqeXk9IkZqIEZqLUJ5SFEiPjwvbD48bCBMYWp5eT0iRmogRmotTDhuIj4gJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKERSZGp2SGEgIT0gInY4X2RqdiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSZGp2SGEuTGE4eUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUmRqdkhhID0gJC43eTRqdkhhKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEw4dnJIdnI5bFNIOiB7YmxxcmU6IENDbSwgZUhsbmVyOiBoQ219LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZUhqcUhRd2xyYUg6ICcgRWpsYSBadkY4UURqcmw4dicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqQnI4ZDh5bHJsOHY6IEZqYXlILAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDh5bHJsOHY6ICdRbG5lci1vOHJyOEQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVIREg6ICc5bEh2dmonLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDh2ckh2ckE3anU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUWE6ICcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9sRF9EamxhT2xIYi5kZWQ/al9vQmxhcUhRX09qYUJIX2xxPTw/ZGVkIEhMZTggJGpfb0JsYXFIUV9PamFCSF9scTsgPz4mZGxxPTw/ZGVkIEhMZTggJGRscTsgPz4mbERfUWxxPTw/ZGVkIEhMZTggJGxEX1FscTsgPz4mb2xxPTw/ZGVkIEhMZTggJG9scTsgPz4mb09scT08P2RlZCBITGU4ICRvT2xxOyA/PiZibERfbHE9PD9kZWQgSExlOCAkYmxEX2xxOyA/PiZscT0nICsgbHEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgakJyOGE4anE6IHJRQkgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMOHZySHZyY09IUUZhOGI6ICd5TFE4YWEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRjg4ckhRdzg4YW9qUTogRjg4ckhRX2Q4ZEJkX2RRbERqUVIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICBNY0ctOWl3IC8gQXd3QUdURWkwdzkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHE4TEJESHZyKS44dignTGFsTFcnLCAnLm9ydi1qcnJqTGUtcUhhSHJIJywgRkJ2THJsOHYgKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgT2phID0gJChyZWx5KS5kUThkKCdscScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgTEZRRCA9IG84OHJvOHUuTDh2RmxRRCgiQVFIIFI4QiB5QlFIPyIsIEZCdkxybDh2IChRSHlCYXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChRSHlCYXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgZGxxID0gIjw/ZGVkIEhMZTggJGRscTsgPz4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo3anVfTDhERDh2X1FIdEJIeXIoJy4uL3FEeS9xRHlfcUhhSHJILmRlZD9scT0nICsgT2phICsgJyZkbHE9JyArIGRscSwgJycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9PalEgRFJ3am9VX2pMcmxPSCA9ICQoIkJhI0RSd2pvVSBhbC5qTHJsT0ggaiIpLmpyclEoJ2VRSEYnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xGIChEUndqb1VfakxybE9IID09ICIjcmpvLXE4THlIciIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyQocThMQkRIdnIpLjh2KCdMYWxMVycsICcjRFJ3am9VIEJhIGFsIGpbZVFIRj0iI3Jqby1GbGFIeSJdJywgRkJ2THJsOHYgKEgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCdqW2VRSEY9IiNyam8tRmxhSHkiXScpLkxhbExXKEZCdkxybDh2ICgpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSByam9hSCA9ICQoJyNxOExfeUhyX3Fqcmpyam9hSCcpLnFqcmp3am9hSCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib01IeXJROFIiOiByUUJILAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm80UThMSHl5bHZuIjogclFCSCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvOUhRT0hROWxxSCI6IHJRQkgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibE1seWRhalJWSHZucmUiOiBDLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImpWSHZucmVFSHZCIjogW1tDLCBVbSwgQ21dLCBbQywgVW0sIENtXV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibzRqbmx2anJIIjogclFCSCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvM2xhckhRIjogRmpheUgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibzk4UXIiOiBGamF5SCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vInk5TFE4YWFrIjogIlVtbWR1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzbHVIcVRIanFIUSI6IHJRQkgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieUE3anU5OEJRTEgiOiAnLi4vYjhRV0ZhOGIvYjhRV19GYThiX0hxbHJfcWpyai5kZWQ/b2xxPTw/ZGVkIEhMZTggJG9scTsgPz4mYmxEX2xxPTw/ZGVkIEhMZTggJGJsRF9scTsgPz4mbERfUWxxPTw/ZGVkIEhMZTggJGxEX1FscTsgPz4mb09scT08P2RlZCBITGU4ICRvT2xxOyA/PiZsRF9scT08P2RlZCBITGU4ICRsRF9scTsgPz4meXJIZF9qTExIeXk9PD9kZWQgSExlOCAkeXJIZF9qTExIeXkgPz4mal9vQmxhcUhRX09qYUJIX2xxPTw/ZGVkIEhMZTggJGpfb2xxX09qYUJIOyA/PicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiamo5OFFybHZuIjogW1ttLCAicUh5TCJdXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqOEc4YUJEdk1IRnkiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiandqUW5IcnkiOiBbbV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvOThRcmpvYUgiOiBGamF5SCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqd2pRbkhyeSI6IFtYXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm85OFFyam9hSCI6IEZqYXlILAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnY5SFFPSFFNanJqIjogRkJ2THJsOHYgKHk5OEJRTEgsIGo4TWpyaiwgRnZHamFhb2pMVykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQubkhyMTljMCh5OThCUUxILCBqOE1qcmosIEZCdkxybDh2ICg3eTh2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE04IGJlanJIT0hRIGpxcWxybDh2amEgZFE4TEh5eWx2biBSOEIgYmp2ciA4diByZUggTGphYW9qTFcsIHJlSHYgckhhYSBNanJqd2pvYUh5ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ2R2phYW9qTFcoN3k4dik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vamFIUXIoMTljMC55clFsdm5sRlIoN3k4dikpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRnY5SFFPSFE0alFqRHkiOiBGQnZMcmw4diAoajhNanJqKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajhNanJqLmRCeWUoeyJ2akRIIjogImx2cUh1X0RqeXJIUV9PamFCSCIsICJPamFCSCI6ICI8P2RlZCBITGU4ICRsdnFIdV9PamFCSF9xSHJqbGF5W21dWydscSddOyA/PiJ9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqOE1qcmouZEJ5ZSh7InZqREgiOiAiZGxxIiwgIk9qYUJIIjogIjw/ZGVkIEhMZTggJGRscTsgPz4ifSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajhNanJqLmRCeWUoeyJ2akRIIjogImx2cUh1X0RqeXJIUV9scSIsICJPamFCSCI6ICI8P2RlZCBITGU4ICRsRF9scTsgPz4ifSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCdqW2VRSEY9IiNyam8tcThMeUhyLURseXlsdm4iXScpLkxhbExXKEZCdkxybDh2ICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajdqdV9MOEREOHZfUUh0Qkh5cignLi4vYjhRV0ZhOGIvYjhRV0ZhOGJfbERfcThMX3lIcl9hbHlyLmRlZD9qX29CbGFxSFFfT2phQkhfbHE9PD9kZWQgSExlOCAkal9vQmxhcUhRX09qYUJIX2xxOyA/PiZkbHE9PD9kZWQgSExlOCAkZGxxOyA/PiZsRF9RbHE9PD9kZWQgSExlOCAkbERfUWxxOyA/PiZvbHE9PD9kZWQgSExlOCAkb2xxOyA/PiZvT2xxPTw/ZGVkIEhMZTggJG9PbHE7ID8+JmJsRF9scT08P2RlZCBITGU4ICRibERfbHE7ID8+JywgJ3E4THlIci1EbHl5bHZuJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQocThMQkRIdnIpLjh2KCJMYWxMVyIsICIual92SGJfanJyakxlREh2ciIsIEZCdkxybDh2IChIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBvT2xxID0gJCgiI29PbHEiKS5kUThkKCJPamFCSCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBILnlyOGQ0UThkam5qcmw4digpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBILnlyOGRaRERIcWxqckg0UThkam5qcmw4digpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgRjg4ckhRX2Q4ZEJkX2RRbERqUVIgPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHJIRDogIjxvQnJyOHYgclJkSD0nb0Jycjh2Jz48L29CcnI4dj4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPSHZyOiA3eTRqdkhhLkhPcjlyalFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ydkxhanl5OiAib3J2IG9ydi1kUWxEalFSIG9ydi15RCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3J2ckh1cjogIiBKZGE4anEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExqYWFvakxXOiBGQnZMcmw4diAoSE9IdnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9IdnIueXI4ZDRROGRqbmpybDh2KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBCUWEgPSAnLi4vYjhRV0ZhOGIvYjhRV0ZhOGJfbERfanJyakxlQmRhOGpxLmRlZD9qX29CbGFxSFFfT2phQkhfbHE9PD9kZWQgSExlOCAkal9vQmxhcUhRX09qYUJIX2xxOyA/PiZkbHE9PD9kZWQgSExlOCAkZGxxOyA/PiZsRF9RbHE9PD9kZWQgSExlOCAkbERfUWxxOyA/PiZvbHE9PD9kZWQgSExlOCAkb2xxOyA/PiZvT2xxPTw/ZGVkIEhMZTggJG9PbHE7ID8+JmJsRF9scT08P2RlZCBITGU4ICRibERfbHE7ID8+JmxEX2xxPTw/ZGVkIEhMZTggJGxEX2xxOyA/Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuajdqdSh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBESHJlOHE6ICI0Yzl3IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJRYTogQlFhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGpMZUg6IEZqYXlILAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWpyajogJCgiI0Y4UURfanJyakxlREh2ciIpLnlIUWxqYWxTSCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb0hGOFFIOUh2cTogRkJ2THJsOHYgKHVlUSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJCgiLjQ4ZEJkNGp2SGFfYkYiKS55ZThiKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5uUWxyckhRLmpxcSh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJscmFIOiAnNGFIanlIIGJqbHIuIDRROExIeXkgeXJqUXJIcS4uISEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBySHVyOiAiICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkucTh2SChGQnZMcmw4diAoRHluKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcublFscnJIUS1sckhELWJRamRkSFEnKS5RSEQ4T0goKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJCgiLjQ4ZEJkNGp2SGFfYkYiKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyQoIiNycV9yanlXX0xlbGFxX09qYUJIeV8iICsgbHEpLmVyRGEoRHluKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQublFscnJIUS5qcXEoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICh5clFsdm4gfCBEanZxanI4UVIpIHJlSCBlSGpxbHZuIDhGIHJlSCB2OHJsRmxManJsOHYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybHJhSDogJ0VIeXlqbkghJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAoeXJRbHZuIHwgRGp2cWpyOFFSKSByZUggckh1ciBsdnlscUggcmVIIHY4cmxGbExqcmw4dgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJIdXI6IER5bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0h2ci5xanJqLkxhOHlIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqN2p1X0w4REQ4dl9RSHRCSHlyKCcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9sRF9qcnJqTGVhbHlyLmRlZD9qX29CbGFxSFFfT2phQkhfbHE9PD9kZWQgSExlOCAkal9vQmxhcUhRX09qYUJIX2xxOyA/PiZkbHE9PD9kZWQgSExlOCAkZGxxOyA/PiZsRF9RbHE9PD9kZWQgSExlOCAkbERfUWxxOyA/PiZvbHE9PD9kZWQgSExlOCAkb2xxOyA/PiZvT2xxPTw/ZGVkIEhMZTggJG9PbHE7ID8+JmJsRF9scT08P2RlZCBITGU4ICRibERfbHE7ID8+JmxEX2xxPTw/ZGVkIEhMZTggJGxEX2xxOyA/PiZ5ckhkX2pMTEh5eT08P2RlZCBITGU4ICR5ckhkX2pMTEh5eSA/PicsICdxbE9fanJyakxlREh2cnknKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo3anVfTDhERDh2X1FIdEJIeXIoJy4uL2I4UVdGYThiL2I4UVdGYThiX2xEX3E4TF95SHJfYWx5ci5kZWQ/al9vQmxhcUhRX09qYUJIX2xxPTw/ZGVkIEhMZTggJGpfb0JsYXFIUV9PamFCSF9scTsgPz4mZGxxPTw/ZGVkIEhMZTggJGRscTsgPz4mbERfUWxxPTw/ZGVkIEhMZTggJGxEX1FscTsgPz4mb2xxPTw/ZGVkIEhMZTggJG9scTsgPz4mb09scT08P2RlZCBITGU4ICRvT2xxOyA/PiZibERfbHE9PD9kZWQgSExlOCAkYmxEX2xxOyA/PicsICdxOEx5SHItRGx5eWx2bicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy83eEJIUVIoJyNxanJqLXJqb2FIJykucWpyandqb2FIKCkuRnZNUWpiKHJRQkgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9qYUhRcigneXFGRicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgN3hCSFFSKCcjcThMX3lIcl9xanJqcmpvYUgnKS5xanJqd2pvYUgoKS5Gdk1RamIoclFCSCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHJIRDogIjxvQnJyOHYgclJkSD0nb0Jycjh2Jz48L29CcnI4dj4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPSHZyOiA3eTRqdkhhLkhPcjlyalFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ydkxhanl5OiAib3J2IG9ydi1xanZuSFEgb3J2LXlEIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcnZySHVyOiAiIEdhOHlIIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMamFhb2pMVzogRkJ2THJsOHYgKEhPSHZyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPSHZyLnlyOGQ0UThkam5qcmw4digpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0h2ci5xanJqLkxhOHlIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoRFJkanZIYSAhPSAidjhfZGp2IikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJkanZIYS5MYTh5SCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBybyA9ICc8bCBMYWp5eT0iRmogRmotQnlIUSI+PC9sPjxsIExhanl5PSJGaiBGai1MOG4iPiAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUmRqdkhhID0gJC43eTRqdkhhKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEw4dnJIdnI5bFNIOiB7YmxxcmU6IGdDbSwgZUhsbmVyOiBYbW19LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9lSGpxSFFHOHZyUThheToge0w4dnJROGF5OiAiTGE4eUg4dmFSIn0sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZUhqcUhRd2xyYUg6ICcgSmRhOGpxIEFycmpMZURIdnIgM2xhSCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMOHZySHZyY09IUUZhOGI6ICc5TFE4YWEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9RSHlsU2pvYUg6ICJxbHlqb2FIcSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0w4dnJIdnI6ICAgICAgICB5ckJGRiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlSERIOiAnY2FsT0gnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDh2ckh2ckE3anU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUWE6ICcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9sRF9qcnJqTGVGOFFELmRlZD9qX29CbGFxSFFfT2phQkhfbHE9PD9kZWQgSExlOCAkal9vQmxhcUhRX09qYUJIX2xxOyA/PiZkbHE9PD9kZWQgSExlOCAkZGxxOyA/PiZsRF9RbHE9PD9kZWQgSExlOCAkbERfUWxxOyA/PiZvbHE9PD9kZWQgSExlOCAkb2xxOyA/PiZvT2xxPTw/ZGVkIEhMZTggJG9PbHE7ID8+JmJsRF9scT08P2RlZCBITGU4ICRibERfbHE7ID8+JmxEX2xxPTw/ZGVkIEhMZTggJGxEX2xxOyA/PicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgakJyOGE4anE6IHJRQkgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGODhySFF3ODhhb2pROiBGODhySFFfZDhkQmRfZFFsRGpRUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCQkJCQkJCQkgCgkJCQkJCQkJJCgiI3FsT19GbGFIX2RRSE9sSGJfTGFsTFciKS5MYWxMVyhGQnZMcmw4diAoKSB7CgkJCQkJCQkJCSAKCQkJCQkJCQkJICQoJyNxbE9fRmxhSF9sdkY4JykuZWxxSCgpOwoJCQkJCQkJCQkkKCcjcWxPX0ZsYUhfZFFIT2xIYicpLnllOGIoKTsKCQkJCQkJCQkJCgkJCQkJCQkJfSk7CgkJCQkJCQkJCgkJCQkJCQkJJCgiI3FsT19GbGFIX2x2RjhfTGFsTFciKS5MYWxMVyhGQnZMcmw4diAoKSB7CgkJCQkJCQkJCQoJCQkJCQkJCQkkKCcjcWxPX0ZsYUhfZFFIT2xIYicpLmVscUgoKTsKCQkJCQkJCQkJJCgnI3FsT19GbGFIX2x2RjgnKS55ZThiKCk7CgkJCQkJCQkJCQoJCQkJCQkJCX0pOwoJCQkJCQkJCQoJCQkJCQkJCQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQocThMQkRIdnIpLjh2KCJMYWxMVyIsICcub3J2X0ZsYUhfZFFIT2xIYicsIEZCdkxybDh2ICgpIHsKCQkJCQkJCQkKCQkJCQkJCQkKCQkJCQkJCQkgICAkKCcjcWxPX0ZsYUhfZFFIT2xIYicpLnllOGIoKTsKCQkJCQkJCQkJJCgnI3FsT19GbGFIX2x2RjgnKS5lbHFIKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgbHFfalFRID0gJChyZWx5KS5kUThkKCdscScpLnlkYWxyKCdfJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBkbHEgPSBscV9qUVFbVV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBxOExfbHEgPSBscV9qUVFbS107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBRanZxID0gRWpyZS5RanZxOEQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGFsdldfclJkSCA9IGxxX2pRUVttXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGxEX29CbGFxSFFfcUhyamxheSA9ICI8P2RlZCBITGU4ICRsRF9vQmxhcUhRX3FIcmpsYXk7ID8+IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKGFsdldfclJkSCA9PSAnRmxhSCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo3anVfTDhERDh2X1FIdEJIeXIoJy4uL2I4UVdGYThiL2I4UVdGYThiX0ZsYUhfZFFIT2xIYi5kZWQ/UWp2cT0nICsgUWp2cSArICcmZGxxPScgKyBkbHEgKyAnJmxEX29CbGFxSFFfcUhyamxheT0nICsgbERfb0JsYXFIUV9xSHJqbGF5ICsgJyZscT0nICsgcThMX2xxLCAncWxPX0ZsYUhfZFFIT2xIYicpOwoJCQkJCQkJCQkJCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqN2p1X0w4REQ4dl9RSHRCSHlyKCcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9GbGFIX2x2RjguZGVkP1FqdnE9JyArIFFqdnEgKyAnJmRscT0nICsgZGxxICsgJyZscT0nICsgcThMX2xxLCAncWxPX0ZsYUhfbHZGOCcpOwoJCQkJCQkJCQkJJCgnI0ZsYUhfZFFIT2xIYicpLkQ4cWphKCd5ZThiJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoYWx2V19yUmRIID09ICdqcnJqTGUnKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajdqdV9MOEREOHZfUUh0Qkh5cignLi4vYjhRV0ZhOGIvYjhRV0ZhOGJfRmxhSF9kUUhPbEhiLmRlZD9RanZxPScgKyBRanZxICsgJyZkbHE9JyArIGRscSArICcmbERfb0JsYXFIUV9xSHJqbGF5PScgKyBsRF9vQmxhcUhRX3FIcmpsYXkgKyAnJmxxPScgKyBxOExfbHEsICdxbE9fRmxhSF9kUUhPbEhiJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqN2p1X0w4REQ4dl9RSHRCSHlyKCcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9GbGFIX2x2RjguZGVkP1FqdnE9JyArIFFqdnEgKyAnJmRscT0nICsgZGxxICsgJyZscT0nICsgcThMX2xxLCAncWxPX0ZsYUhfbHZGOCcpOwoJCQkJCQkJCQkJJCgnI0ZsYUhfZFFIT2xIYicpLkQ4cWphKCd5ZThiJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHE4TEJESHZyKS44digiTGFsTFciLCAnLm9ydl9GbGFIX2RRSE9sSGJVJywgRkJ2THJsOHYgKCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGxxX2pRUSA9ICQocmVseSkuZFE4ZCgnbHEnKS55ZGFscignXycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgZGxxID0gbHFfalFRW1VdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgcThMX2xxID0gbHFfalFRW0tdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgUWp2cSA9IEVqcmUuUWp2cThEKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBhbHZXX3JSZEggPSBscV9qUVFbbV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBsRF9vQmxhcUhRX3FIcmpsYXkgPSAiPD9kZWQgSExlOCAkbERfb0JsYXFIUV9xSHJqbGF5OyA/PiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChhbHZXX3JSZEggPT0gJ0ZsYUh5JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajdqdV9MOEREOHZfUUh0Qkh5cignLi4vYjhRV0ZhOGIvYjhRV0ZhOGJfRmxhSF9kUUhPbEhiLmRlZD9RanZxPScgKyBRanZxICsgJyZkX09yPTw/ZGVkIEhMZTggSHZMUVJkcl9CUWEoJ2pxT2p2TEhxJywgQTQ0X2kwRzVrNHdaYzBfOUFWdyk7ID8+JmRscT0nICsgZGxxICsgJyZsRF9vQmxhcUhRX3FIcmpsYXk9JyArIGxEX29CbGFxSFFfcUhyamxheSArICcmbHE9JyArIHE4TF9scSwgJ3FsT19GbGFIX2RRSE9sSGInKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo3anVfTDhERDh2X1FIdEJIeXIoJy4uL2I4UVdGYThiL2I4UVdGYThiX0ZsYUhfbHZGOC5kZWQ/UWp2cT0nICsgUWp2cSArICcmZGxxPScgKyBkbHEgKyAnJmxxPScgKyBxOExfbHEsICdxbE9fRmxhSF9sdkY4Jyk7CgkJCQkJCQkJCQkkKCcjRmxhSF9kUUhPbEhiJykuRDhxamEoJ3llOGInKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGIChhbHZXX3JSZEggPT0gJ2pycmpMZScpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqN2p1X0w4REQ4dl9RSHRCSHlyKCcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9GbGFIX2RRSE9sSGIuZGVkP1FqdnE9JyArIFFqdnEgKyAnJmRfT3I9PD9kZWQgSExlOCBIdkxRUmRyX0JRYSgnanFPanZMSHEnLCBBNDRfaTBHNWs0d1pjMF85QVZ3KTsgPz4mZGxxPScgKyBkbHEgKyAnJmxEX29CbGFxSFFfcUhyamxheT0nICsgbERfb0JsYXFIUV9xSHJqbGF5ICsgJyZscT0nICsgcThMX2xxLCAncWxPX0ZsYUhfZFFIT2xIYicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajdqdV9MOEREOHZfUUh0Qkh5cignLi4vYjhRV0ZhOGIvYjhRV0ZhOGJfRmxhSF9sdkY4LmRlZD9RanZxPScgKyBRanZxICsgJyZkbHE9JyArIGRscSArICcmbHE9JyArIHE4TF9scSwgJ3FsT19GbGFIX2x2RjgnKTsKCQkJCQkJCQkJCSQoJyNGbGFIX2RRSE9sSGInKS5EOHFqYSgneWU4YicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQocThMQkRIdnIpLjh2KCdMYWxMVycsICcub3J2LUZsYUgtcUhhSHJIJywgRkJ2THJsOHYgKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgT2phID0gJChyZWx5KS5kUThkKCdscScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgTEZRRCA9IG84OHJvOHUuTDh2RmxRRCgiQVFIIFI4QiB5QlFIPyIsIEZCdkxybDh2IChRSHlCYXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChRSHlCYXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgZGxxID0gIjw/ZGVkIEhMZTggJGRRODdITHJfcUhyamxheVttXVsnbHEnXTsgPz4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo3anVfTDhERDh2X1FIdEJIeXIoJy4uL3FEeS9xRHlfcUhhSHJILmRlZD9scT0nICsgT2phICsgJyZkbHE9JyArIGRscSwgJycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pakxlIE04TEJESHZyIEc4RERIdnIgOXJqUXJ5IFRIUUgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHE4TEJESHZyKS44digiTGFsTFciLCAnLm9ydl9MOERESHZyeV9kUUhPbEhiJywgRkJ2THJsOHYgKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgcThMX2xxX2pRUSA9ICQocmVseSkuZFE4ZCgnbHEnKS55ZGFscignXycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgZGxxID0gcThMX2xxX2pRUVtVXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIHE4TGxxID0gcThMX2xxX2pRUVtLXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI0w4RERxOExfbHEiKS5PamEocThMbHEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqN2p1X0w4REQ4dl9RSHRCSHlyKCcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9sRF9xOExfTDhEREh2cmFseXJfeWRhbHIuZGVkP2pfb0JsYXFIUV9PamFCSF9scT08P2RlZCBITGU4ICRqX29CbGFxSFFfT2phQkhfbHE7ID8+JlFqdnE9PD9kZWQgSExlOCBRanZxKFBQUCwgUFBQUFBQKTsgPz4mZGxxPTw/ZGVkIEhMZTggJGRscTsgPz4mbERfUWxxPTw/ZGVkIEhMZTggJGxEX1FscTsgPz4mb2xxPTw/ZGVkIEhMZTggJG9scTsgPz4mb09scT08P2RlZCBITGU4ICRvT2xxOyA/PiZibERfbHE9PD9kZWQgSExlOCAkYmxEX2xxOyA/PiZMOEREcThMX2xxPScgKyBxOExscSwgJ3FsT19MZWpyX0w4RERIdnJ5X1FIeUJhcicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjRDhxamFfTDhEREh2cnlfZDh5ciIpLkQ4cWphKCJyOG5uYUgiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChxOExCREh2cikuOHYoIkxhbExXIiwgJy5MZWpyX0w4RERfeUh2cV9vcnYnLCBGQnZMcmw4diAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9qeWxMX0Y4UURfeUJvRGxyKCcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9sRF9xOExfTDhEREh2cmFseXJfeWRhbHIuZGVkP0xfakxybDh2PWpxcSZqX29CbGFxSFFfT2phQkhfbHE9PD9kZWQgSExlOCAkal9vQmxhcUhRX09qYUJIX2xxOyA/PiZRanZxPTw/ZGVkIEhMZTggUWp2cShQUFAsIFBQUFBQUCk7ID8+JmRscT08P2RlZCBITGU4ICRkbHE7ID8+JmxEX1FscT08P2RlZCBITGU4ICRsRF9RbHE7ID8+Jm9scT08P2RlZCBITGU4ICRvbHE7ID8+Jm9PbHE9PD9kZWQgSExlOCAkb09scTsgPz4mYmxEX2xxPTw/ZGVkIEhMZTggJGJsRF9scTsgPz4nLCAncWxPX0xlanJfTDhEREh2cnlfUUh5QmFyJywgJ0w4RERfRjhRRF9MZWpyJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5sRG5fTGE4eUhfRDhxamFfQmRxanJIX0w4RERIdnJ5X0Y4UUQnKS44dignTGFsTFcnLCBGQnZMcmw4diAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE4TGpybDh2LlFIYThqcSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWpMZSBNOExCREh2ciBHOERESHZyIGl2cXkgVEhRSAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHE4TEJESHZyKS44digiTGFsTFciLCAiLkxhanl5X2Q4ZEJkX1FCYUhsdkY4IiwgRkJ2THJsOHYgKEgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIFFCYUhfbHEgPSAkKHJlbHkpLmRROGQoImxxIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBRanZxID0gRWpyZS5RanZxOEQoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBCUWEgPSAnYjhRV0ZhOGIvYjhRV0ZhOGJfUUJhSF9sdkY4LmRlZD9RanZxPScgKyBRanZxICsgJyZRQmFIX2xxPScgKyBRQmFIX2xxICsgJyZkbHE9PD9kZWQgSExlOCAkZGxxOyA/Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBybHJhSCA9ICI8bCBMYWp5eT0nRmogRmotYmRGOFFEeSc+PC9sPiAgNUJhSCBadkY4IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGQ4eWxybDh2ID0gIlFsbmVyLUxIdnJIUSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBkX3JlSERIID0gJ004cW5IUTZhQkgnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgZF9ibHFyZSA9IE5nbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGRfZUhsbmVyID0gQ2htOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmx2cThiLmRqUUh2ci44ZEh2Xzd5ZGp2SGEoQlFhLCBybHJhSCwgZDh5bHJsOHYsIGRfcmVIREgsIGRfYmxxcmUsIGRfZUhsbmVyKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgalFRID0gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHJIRDogJzxvQnJyOHYgTGFqeXk9Ii4uLiIgclJkSD0ib0Jycjh2Ij48eWRqdiBMYWp5eT0iLi4uIj48L3lkanY+IEdhOHlIPC9vQnJyOHY+JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPSHZyOiAnTGFsTFcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGphYW9qTFc6IEZCdkxybDh2ICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvX2RqdkhhLkxhOHlIKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgRm9fZGp2SGEgPSAkLjd5NGp2SGEoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDh2ckh2cmNPSFFGYThiOiAneUxROGFhJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVIanFIUXdscmFIOiAnNUJhSCBadkY4JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlSERIOiAnTThxbkhRNmFCSCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByODhhb2pRMzg4ckhROiBqUVEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMOHZySHZyOWxTSDoge2JscXJlOiBOZ20sIGVIbG5lcjogQ2htfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEw4dnJIdnJBN2p1OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUWE6ICcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9RQmFIX2x2RjguZGVkP1FqdnE9JyArIFFqdnEgKyAnJlFCYUhfbHE9JyArIFFCYUhfbHEgKyAnJmRscT08P2RlZCBITGU4ICRkbHE7ID8+JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpCcjhhOGpxOiByUUJILAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgakJyOFFIeWxTSDogclFCSCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpCcjhRSGQ4eWxybDh2OiByUUJICiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHE4TEJESHZyKS44digiTGFsTFciLCAiLkxhanl5X0ZsYUhfZDhkQmQiLCBGQnZMcmw4diAoSCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGxxX2pRUSA9ICQocmVseSkuZFE4ZCgnbHEnKS55ZGFscignXycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgZGxxID0gbHFfalFRW1VdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgcThMX2xxID0gbHFfalFRW0tdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgUWp2cSA9IEVqcmUuUWp2cThEKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBhbHZXX3JSZEggPSBscV9qUVFbbV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBsRF9vQmxhcUhRX3FIcmpsYXkgPSAiPD9kZWQgSExlOCAkbERfb0JsYXFIUV9xSHJqbGF5OyA/PiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuN3k0anZIYSh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMOHZySHZyY09IUUZhOGI6ICd5TFE4YWEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZUhqcUhRd2xyYUg6ICczbGFIIDRRSE9sSGInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVIREg6ICdNOHFuSFE2YUJIJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEw4dnJIdnI5bFNIOiB7YmxxcmU6IGhnbSwgZUhsbmVyOiBYaG19LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDh2ckh2ckE3anU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCUWE6ICcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9GbGFIX2RRSE9sSGIuZGVkP1FqdnE9JyArIFFqdnEgKyAnJmRscT0nICsgZGxxICsgJyZsRF9vQmxhcUhRX3FIcmpsYXk9JyArIGxEX29CbGFxSFFfcUhyamxheSArICcmbHE9JyArIHE4TF9scSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqQnI4YThqcTogclFCSCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqQnI4UUh5bFNIOiByUUJILAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpCcjhRSGQ4eWxybDh2OiByUUJICiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCQkJCQkJCQkJCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIDl3QXdKOQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX1E4YWFfb2pMVyIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX2pkZFE4T0hfRjhRYmpRcSIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX1FIN0hMcl9GOFFialFxIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fUUg3SExyX29qTFdialFxIikuZWxxSCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX1FIN0hMcl84ZHJsOHZ5IikuZWxxSCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIuTGVITFdfeXJqckJ5TGVXIikuOHYoImxGR2VITFdIcSIsIEZCdkxybDh2IChIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSB5SGFfeXJqckJ5ID0gJCgnbHZkQnJbdmpESD15cmpyQnldOkxlSExXSHEnKS5PamEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC55cjhkNFE4ZGpuanJsOHYoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC55cjhkWkRESHFsanJINFE4ZGpuanJsOHYoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9PalEgeUhhX3lyanJCeSA9ICQocmVseSkuZFE4ZCgiT2phQkgiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9qYUhRcih5SGFfeXJqckJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDh2eThhSC5hOG4oJ09qYUJIOicsICQocmVseSkuZFE4ZCgiT2phQkgiKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICh5SGFfeXJqckJ5ID09ICdVVScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9famRkUThPSF9GOFFialFxIikueWU4YigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19RSDdITHJfRjhRYmpRcSIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fUUg3SExyX29qTFdialFxIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19ROGFhX29qTFciKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX0J5SFFhbHlyX1FROGFIeSIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fdkh1cnlySGRfQnlIUWFseXJfUVE4YUh5IikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19GYUh1bF9GYThiIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19RSDdITHJfOGRybDh2eSIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICh5SGFfeXJqckJ5ID09ICdYJykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9famRkUThPSF9GOFFialFxIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19RSDdITHJfRjhRYmpRcSIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fUUg3SExyX29qTFdialFxIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kKCIjcWxPX1E4YWFfb2pMVyIpLnllOGIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fQnlIUWFseXJfUVE4YUh5IikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT192SHVyeXJIZF9CeUhRYWx5cl9RUThhSHkiKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX0ZhSHVsX0ZhOGIiKS5lbHFIKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19RSDdITHJfOGRybDh2eSIpLnllOGIoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgUUg3SExyXzhkciA9ICQoIiNRSDdITHJfOGRyIikuZFE4ZCgiT2phQkgiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vT2pRIFFIN0hMcl84ZHJfYlEgPSAkKCIjUUg3SExyXzhkcl9iUSIpLmRROGQoIk9qYUJIIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL09qUSBRSDdITHJfOGRyX0J5SFEgPSAkKCIjUUg3SExyXzhkcl9CeUhRIikuZFE4ZCgiT2phQkgiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChRSDdITHJfOGRyID09ICdVJykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqN2p1X0w4REQ4dl9RSHRCSHlyKCIuLi9iOFFXRmE4Yi9ibERfUUg3SExyXzhkcmw4dnkuZGVkP2RfclJkSD12Jm9scT08P2RlZCBITGU4ICRvbHE7ID8+Jm9PbHE9PD9kZWQgSExlOCAkb09scTsgPz4iLCAncWxPX1FIN0hMcl84ZHJsOHZ5Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICh5SGFfeXJqckJ5ID09ICdVSycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9famRkUThPSF9GOFFialFxIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19RSDdITHJfRjhRYmpRcSIpLnllOGIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fUUg3SExyX29qTFdialFxIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kKCIjcWxPX1E4YWFfb2pMVyIpLnllOGIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fQnlIUWFseXJfUVE4YUh5IikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT192SHVyeXJIZF9CeUhRYWx5cl9RUThhSHkiKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX0ZhSHVsX0ZhOGIiKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX1FIN0hMcl84ZHJsOHZ5IikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKHlIYV95cmpyQnkgPT0gJ1VYJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19qZGRROE9IX0Y4UWJqUXEiKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX1FIN0hMcl9GOFFialFxIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19RSDdITHJfb2pMV2JqUXEiKS55ZThiKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyQoIiNxbE9fUThhYV9vakxXIikueWU4YigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19CeUhRYWx5cl9RUThhSHkiKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX3ZIdXJ5ckhkX0J5SFFhbHlyX1FROGFIeSIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fRmFIdWxfRmE4YiIpLmVscUgoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX1FIN0hMcl84ZHJsOHZ5IikueWU4YigpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBRSDdITHJvXzhkciA9ICQoIiNRSDdITHJvXzhkciIpLmRROGQoIk9qYUJIIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL09qUSBRSDdITHJvXzhkcl9iUSA9ICQoIiNRSDdITHJvXzhkcl9iUSIpLmRROGQoIk9qYUJIIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL09qUSBRSDdITHJvXzhkcl9CeUhRID0gJCgiI1FIN0hMcm9fOGRyX0J5SFEiKS5kUThkKCJPamFCSCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChRSDdITHJvXzhkciA9PSAnVScpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajdqdV9MOEREOHZfUUh0Qkh5cigiLi4vYjhRV0ZhOGIvYmxEX1FIN0hMcl84ZHJsOHZ5LmRlZD9kX3JSZEg9byZvbHE9PD9kZWQgSExlOCAkb2xxOyA/PiZvT2xxPTw/ZGVkIEhMZTggJG9PbHE7ID8+IiwgJ3FsT19RSDdITHJfOGRybDh2eScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICh5SGFfeXJqckJ5ID09ICdVbScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9famRkUThPSF9GOFFialFxIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19RSDdITHJfRjhRYmpRcSIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fUUg3SExyX29qTFdialFxIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT192SHVyeXJIZF9CeUhRYWx5cl9RUThhSHkiKS55ZThiKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyQoIiNxbE9fUThhYV9vakxXIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19CeUhRYWx5cl9RUThhSHkiKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX0ZhSHVsX0ZhOGIiKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX1FIN0hMcl84ZHJsOHZ5IikuZWxxSCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fQnlIUWFseXJfcVE4YUh5IikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19CeUhRYWx5cl9hUThhSHkiKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoeUhhX3lyanJCeSA9PSAnVWcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX2pkZFE4T0hfRjhRYmpRcSIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fUUg3SExyX0Y4UWJqUXEiKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX1FIN0hMcl9vakxXYmpRcSIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fdkh1cnlySGRfQnlIUWFseXJfUVE4YUh5IikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kKCIjcWxPX1E4YWFfb2pMVyIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fQnlIUWFseXJfUVE4YUh5IikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19GYUh1bF9GYThiIikueWU4YigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19RSDdITHJfOGRybDh2eSIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9famRkUThPSF9GOFFialFxIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19RSDdITHJfRjhRYmpRcSIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fUUg3SExyX29qTFdialFxIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kKCIjcWxPX1E4YWFfb2pMVyIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fdkh1cnlySGRfQnlIUWFseXJfUVE4YUh5IikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19GYUh1bF9GYThiIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19RSDdITHJfOGRybDh2eSIpLmVscUgoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoeUhhX3lyanJCeSA9PSAnZycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX2pkZFE4T0hfRjhRYmpRcSIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX1FIN0hMcl9GOFFialFxIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fUUg3SExyX29qTFdialFxIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJCgiI3FsT19ROGFhX29qTFciKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT192SHVyeXJIZF9CeUhRYWx5cl9RUThhSHkiKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19GYUh1bF9GYThiIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fUUg3SExyXzhkcmw4dnkiKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19CeUhRYWx5cl9RUThhSHkiKS55ZThiKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fQnlIUWFseXJfUVE4YUh5IikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoeUhhX3lyanJCeSA9PSAnVU4nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19qZGRROE9IX0Y4UWJqUXEiKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19RSDdITHJfRjhRYmpRcSIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX1FIN0hMcl9vakxXYmpRcSIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyQoIiNxbE9fUThhYV9vakxXIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fdkh1cnlySGRfQnlIUWFseXJfUVE4YUh5IikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fRmFIdWxfRmE4YiIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX1FIN0hMcl84ZHJsOHZ5IikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fQnlIUWFseXJfcVE4YUh5IikueWU4YigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX0J5SFFhbHlyX3FROGFIeSIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoeUhhX3lyanJCeSA9PSAnS20nKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9famRkUThPSF9GOFFialFxIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fUUg3SExyX0Y4UWJqUXEiKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19RSDdITHJfb2pMV2JqUXEiKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kKCIjcWxPX1E4YWFfb2pMVyIpLmVscUgoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fdkh1cnlySGRfQnlIUWFseXJfUVE4YUh5IikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fRmFIdWxfRmE4YiIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX1FIN0hMcl84ZHJsOHZ5IikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fQnlIUWFseXJfUVE4YUh5IikuZWxxSCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX0J5SFFhbHlyX2FROGFIeSIpLnllOGIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19CeUhRYWx5cl9hUThhSHkiKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19RSDdITHJfOGRybDh2eSIpLmVscUgoKTsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnJRbG5uSFEoImxGR2VITFdIcSIpOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChxOExCREh2cikuOHYoIkxhbExXIiwgIi5ham9IYV92SHVyQnlIUWFseXIiLCBGQnZMcmw4diAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo3anVfTDhERDh2X1FIdEJIeXIoImJsRF92SHVyX3lySGRfQnlIUWFseXIuZGVkP2RscT08P2RlZCBITGU4ICRkbHE7ID8+JmxEX1FscT08P2RlZCBITGU4ICRsRF9RbHE7ID8+Jm9scT08P2RlZCBITGU4ICRvbHE7ID8+Jm9PbHE9PD9kZWQgSExlOCAkb09scTsgPz4mYmxEX2xxPTw/ZGVkIEhMZTggJGJsRF9scTsgPz4iLCAicWxPX3ZIdXJCeUhRX2FseXIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChxOExCREh2cikuOHYoIkxhbExXIiwgIi5vcnZfeUhhX3ZIdXJfQnlIUWFseXIiLCBGQnZMcmw4diAoKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL09qUSB2SHVyX0J5SFFfbHEgPSAkKCJsdmRCclt2akRIPXZIdXJfQnlIUV9scV06TGVITFdIcSIpLk9qYSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgdkh1cl9CeUhRX2xxX2pRUSA9ICQoImx2ZEJyW3ZqREg9J3ZIdXJfQnlIUV9scVtdJ106TGVITFdIcSIpLkRqZChGQnZMcmw4diAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRSHJCUXYgJChyZWx5KS5PamEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkubkhyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICh2SHVyX0J5SFFfbHFfalFRLmFIdm5yZSA+IG0pIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgdkh1cl9CeUhRX2xxeSA9IHZIdXJfQnlIUV9scV9qUVEuNzhsdigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajdqdV9MOEREOHZfUUh0Qkh5cigiYmxEX3ZIdXJfeXJIZF9CeUhRYWx5cl95SGEuZGVkP2RscT08P2RlZCBITGU4ICRkbHE7ID8+JmxEX1FscT08P2RlZCBITGU4ICRsRF9RbHE7ID8+Jm9scT08P2RlZCBITGU4ICRvbHE7ID8+Jm9PbHE9PD9kZWQgSExlOCAkb09scTsgPz4mYmxEX2xxPTw/ZGVkIEhMZTggJGJsRF9scTsgPz4mdkh1cl9CeUhRX2xxPSIgKyB2SHVyX0J5SFFfbHF5LCAicWxPX3ZIdXJCeUhRX2FseXJfeUhhIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLm5RbHJySFEuanFxKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybHJhSDogJzA4cmxGbExqcmw4diEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJIdXI6ICIgR2U4OHlIIEJ5SFEgakxMOEJ2ciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQocThMQkRIdnIpLjh2KCJMZWp2bkgiLCAiI2pkX0J5SFFfb09scSIsIEZCdkxybDh2ICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIHlIYV9vT2xxID0gJChyZWx5KS5kUThkKCJPamFCSCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqN2p1X0w4REQ4dl9RSHRCSHlyKCJibERfdkh1cl95ckhkX0J5SFFhbHlyLmRlZD9kbHE9PD9kZWQgSExlOCAkZGxxOyA/PiZsRF9RbHE9PD9kZWQgSExlOCAkbERfUWxxOyA/PiZvbHE9PD9kZWQgSExlOCAkb2xxOyA/PiZvT2xxPTw/ZGVkIEhMZTggJG9PbHE7ID8+JmJsRF9scT08P2RlZCBITGU4ICRibERfbHE7ID8+JkZfb09scT0iICsgeUhhX29PbHEsICJxbE9fdkh1ckJ5SFFfYWx5ciIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNvcnZfTDhheUhfeXJqckJ5IikuTGFsTFcoRkJ2THJsOHYgKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjRDhxamFfeXJqckJ5X3FqeWVvOGpRcScpLkQ4cWphKCdyOG5uYUgnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGJGX09sSGJfclJkSCA9ICQoJyNiRl9PbEhiX3JSZEgnKS5PamEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKGJGX09sSGJfclJkSCA9PSBVKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX3Jqb19kam5IIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT195ZGFscl9kam5IIikueWU4YigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT195ckhkX2x2RjgiKS5lckRhKCIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9feXJIZF9sdkY4IiwgZGpRSHZyLnE4TEJESHZyKS5qcnJRKCd5UUwnLCAnYjhRV0ZhOGIvYmxEX0hxbHJGOFFEX3lkYWxyLmRlZD9vbHE9PD9kZWQgSExlOCAkb2xxOyA/PiZibERfbHE9PD9kZWQgSExlOCAkYmxEX2xxOyA/PiZsRF9RbHE9PD9kZWQgSExlOCAkbERfUWxxOyA/PiZsRF9scT08P2RlZCBITGU4ICRsRF9scTsgPz4mbERGX2xxPTw/ZGVkIEhMZTggJGxERl9scTsgPz4mZGxxPTw/ZGVkIEhMZTggJGRscTsgPz4mb09scT08P2RlZCBITGU4ICRvT2xxOyA/PicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9feWRhbHJfZGpuSCIpLmVscUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fcmpvX2RqbkgiKS55ZThiKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcWxPX3lySGRfbHZGOCIpLmVyRGEoIiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI2xGUWpESF9yam9fZGpuSCIsIGRqUUh2ci5xOExCREh2cikuanJyUSgneVFMJywgJ2I4UVdGYThiL2JsRF9IcWxyRjhRRF9yam8uZGVkP29scT08P2RlZCBITGU4ICRvbHE7ID8+JmJsRF9scT08P2RlZCBITGU4ICRibERfbHE7ID8+JmxEX1FscT08P2RlZCBITGU4ICRsRF9RbHE7ID8+JmxEX2xxPTw/ZGVkIEhMZTggJGxEX2xxOyA/PiZsREZfbHE9PD9kZWQgSExlOCAkbERGX2xxOyA/PiZkbHE9PD9kZWQgSExlOCAkZGxxOyA/PiZvT2xxPTw/ZGVkIEhMZTggJG9PbHE7ID8+Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI3ZIdXJfeXJIZF9CeUhRX3lIcnJsdm55X3FqcmotcmpvYUgnKS5xanJqd2pvYUgoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieU04RCI6ICI8J1E4Yi1GYUJscSc8J3lkanZOJ2E+PCd5ZGp2TidGPlE+cjwnUThiLUZhQmxxJzwneWRqdk4nbD48J3lkanZOJ2Q+PiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNRSEZfQnlIUWFseXJfcWpyai1yam9hSCcpLnFqcmp3am9hSCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5TThEIjogIjwnUThiLUZhQmxxJzwneWRqdk4nYT48J3lkanZOJ0Y+UT5yPCdROGItRmFCbHEnPCd5ZGp2TidsPjwneWRqdk4nZD4+IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImo4RzhhQkR2TUhGeSI6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsibzk4UXJqb2FIIjogRmpheUgsICJqd2pRbkhyeSI6IFttXX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjYWpySFFqYV9CeUhRYWx5cl9xanJqLXJqb2FIJykucWpyandqb2FIKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInlMUThhYWsiOiAiS21tZHUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieUxROGFhRzhhYWpkeUgiOiByUUJILAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieU04RCI6ICI8J1E4Yi1GYUJscSc8J3lkanZOJ2E+PCd5ZGp2TidGPlE+cjwnUThiLUZhQmxxJzwneWRqdk4nbD48J3lkanZOJ2Q+PiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqOEc4YUJEdk1IRnkiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Im85OFFyam9hSCI6IEZqYXlILCAiandqUW5IcnkiOiBbbV19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChxOExCREh2cikuOHYoJ0xlanZuSCcsICIuYWpySFFqYV9ManlIIiwgRkJ2THJsOHYgKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgeUhhX09qYSA9ICQocmVseSkuZFE4ZCgiT2phQkgiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9qYUhRcih5SGFfT2phKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9PalEgUUh5QmFyX3FqcmogPSBMOERvbHZIX0xROHZfRmxhSF9ybHJhSCh5SGFfT2phKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkKHJlbHkpLmRROGQoJ0xlSExXSHEnKSA9PSByUUJIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjQmRxanJIX3lyanJCeV9GOFFEIikuZFFIZEh2cSgnPGx2ZEJyIHJSZEg9ImVscXFIdiIgbHE9ImFROGFIX0J5SFFfbHEnICsgeUhhX09qYSArICciIHZqREg9ImFROGFIX0J5SFFfbHFbXSIgT2phQkg9IicgKyB5SGFfT2phICsgJyI+Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyQoIi5xbE9feUhhX0ZsYUhfTDhEb2x2SCIpLmpkZEh2cShRSHlCYXJfcWpyaik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjYVE4YUhfQnlIUV9scScgKyB5SGFfT2phKS5RSEQ4T0goKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJCgnI3lkanZfeUhhX0ZsYUhfTDhEb2x2SF8nICsgeUhhX09qYSkuUUhEOE9IKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHE4TEJESHZyKS44dignTGVqdm5IJywgIi5RSEZGSFFqYV9MYXkiLCBGQnZMcmw4diAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSB5SGFfT2phID0gJChyZWx5KS5kUThkKCJPamFCSCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCQocmVseSkuZFE4ZCgnTGVITFdIcScpID09IHJRQkgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNCZHFqckhfeXJqckJ5X0Y4UUQiKS5kUUhkSHZxKCc8bHZkQnIgclJkSD0iZWxxcUh2IiBscT0iUVE4YUhfQnlIUV9scUsnICsgeUhhX09qYSArICciIHZqREg9IlFROGFIX0J5SFFfbHFLW10iIE9qYUJIPSInICsgeUhhX09qYSArICciPicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kKCIucWxPX3lIYV9GbGFIX0w4RG9sdkgiKS5qZGRIdnEoUUh5QmFyX3FqcmopOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI1FROGFIX0J5SFFfbHFLJyArIHlIYV9PamEpLlFIRDhPSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kKCcjeWRqdl95SGFfRmxhSF9MOERvbHZIXycgKyB5SGFfT2phKS5RSEQ4T0goKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgVmMyOQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9PalEgUUhGX3JlbHkgPSAkKCIjRFJ3am9oIEJhLnJqb3kgYWwgai5qTHJsT0giKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgTEJRUUh2cndqb1pxID0gJCgiQmEjRFJ3am9LIGFsLmpMcmxPSCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChMQlFRSHZyd2pvWnEuZFE4ZCgibHEiKSA9PSAiYWxfYWpySFFqYV9GYThiIikgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajdqdV9MOEREOHZfUUh0Qkh5cignLi4vYjhRV0ZhOGIvYjhRV0ZhOGJfbERfYWpySFFqYV9valEuZGVkP2pfb0JsYXFIUV9PamFCSF9scT08P2RlZCBITGU4ICRqX29CbGFxSFFfT2phQkhfbHE7ID8+JmRscT08P2RlZCBITGU4ICRkbHE7ID8+JmxEX1FscT08P2RlZCBITGU4ICRsRF9RbHE7ID8+Jm9scT08P2RlZCBITGU4ICRvbHE7ID8+Jm9PbHE9PD9kZWQgSExlOCAkb09scTsgPz4mbERfbHE9PD9kZWQgSExlOCAkbERfbHE7ID8+JmJsRF9scT08P2RlZCBITGU4ICRibERfbHE7ID8+JywgJ3FsT19hanJIUWphX0ZhOGInKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKExCUVFIdnJ3am9acS5kUThkKCJscSIpID09ICJhbF95cmpyQnlfYThueSIpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo3anVfTDhERDh2X1FIdEJIeXIoJy4uL2I4UVdGYThiL2JsRF95cmpyQnlfYThuLmRlZD9qX29CbGFxSFFfT2phQkhfbHE9PD9kZWQgSExlOCAkal9vQmxhcUhRX09qYUJIX2xxOyA/PiZkbHE9PD9kZWQgSExlOCAkZGxxOyA/PiZsRF9RbHE9PD9kZWQgSExlOCAkbERfUWxxOyA/PiZvbHE9PD9kZWQgSExlOCAkb2xxOyA/PiZvT2xxPTw/ZGVkIEhMZTggJG9PbHE7ID8+JmJsRF9scT08P2RlZCBITGU4ICRibERfbHE7ID8+JywgJ3FsT195cmpyQnlfYThueV9hbHlyJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNhbF9hanJIUWphX0ZhOGIiKS5RSEQ4T0hHYWp5eSgiakxybE9IIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxbE9fcmpvX2FqckhRamFfRmE4YiIpLlFIRDhPSEdhanl5KCJqTHJsT0giKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI2FsX2FqckhRamFfRmE4YiIpLlFIRDhPSEdhanl5KCJqTHJsT0giKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19yam9fYWpySFFqYV9GYThiIikuUUhEOE9IR2FqeXkoImpMcmxPSCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChxOExCREh2cikuOHYoJ0xhbExXJywgJyNhbF95cmpyQnlfYThueScsIEZCdkxybDh2IChIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJCgiI3FsT19yam9fYWpySFFqYV9GYThiIikuUUhEOE9IR2FqeXkoImpMcmxPSCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqN2p1X0w4REQ4dl9RSHRCSHlyKCcuLi9iOFFXRmE4Yi9ibERfeXJqckJ5X2E4bi5kZWQ/al9vQmxhcUhRX09qYUJIX2xxPTw/ZGVkIEhMZTggJGpfb0JsYXFIUV9PamFCSF9scTsgPz4mZGxxPTw/ZGVkIEhMZTggJGRscTsgPz4mbERfUWxxPTw/ZGVkIEhMZTggJGxEX1FscTsgPz4mb2xxPTw/ZGVkIEhMZTggJG9scTsgPz4mb09scT08P2RlZCBITGU4ICRvT2xxOyA/PiZibERfbHE9PD9kZWQgSExlOCAkYmxEX2xxOyA/PicsICdxbE9feXJqckJ5X2E4bnlfYWx5cicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQocThMQkRIdnIpLjh2KCdMYWxMVycsICcjeWU4Yl9hbHlyJywgRkJ2THJsOHYgKEgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kKCIjcWxPX3Jqb19hanJIUWphX0ZhOGIiKS5RSEQ4T0hHYWp5eSgiakxybE9IIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo3anVfTDhERDh2X1FIdEJIeXIoJy4uL2I4UVdGYThiL2JsRF9hbHZXX3FIcmpsYXkuZGVkP2pfb0JsYXFIUV9PamFCSF9scT08P2RlZCBITGU4ICRqX29CbGFxSFFfT2phQkhfbHE7ID8+JmRscT08P2RlZCBITGU4ICRkbHE7ID8+JmxEX1FscT08P2RlZCBITGU4ICRsRF9RbHE7ID8+Jm9scT08P2RlZCBITGU4ICRvbHE7ID8+Jm9PbHE9PD9kZWQgSExlOCAkb09scTsgPz4mbERfbHE9PD9kZWQgSExlOCAkbERfbHE7ID8+JywgJ3FsT19iOFFXRmE4Yl9hbHZXbHZuX2FseXInKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChxOExCREh2cikuOHYoJ0xhbExXJywgJyNhbF9iOFFXRmE4Yl9hOG55JywgRkJ2THJsOHYgKEgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI3FsT19yam9fYWpySFFqYV9GYThiIikuUUhEOE9IR2FqeXkoImpMcmxPSCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqN2p1X0w4REQ4dl9RSHRCSHlyKCcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9sRF9hOG5hbHlyLmRlZD9qX29CbGFxSFFfT2phQkhfbHE9PD9kZWQgSExlOCAkal9vQmxhcUhRX09qYUJIX2xxOyA/PiZkbHE9PD9kZWQgSExlOCAkZGxxOyA/PiZsRF9RbHE9PD9kZWQgSExlOCAkbERfUWxxOyA/PiZvbHE9PD9kZWQgSExlOCAkb2xxOyA/PiZvT2xxPTw/ZGVkIEhMZTggJG9PbHE7ID8+JmxEX2xxPTw/ZGVkIEhMZTggJGxEX2xxOyA/PiZibERfbHE9PD9kZWQgSExlOCAkYmxEX2xxOyA/PicsICdxbE9fYThueV9hbHlyJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQocThMQkRIdnIpLjh2KCdMYWxMVycsICcjYWxfYWpySFFqYV9GYThiJywgRkJ2THJsOHYgKEgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajdqdV9MOEREOHZfUUh0Qkh5cignLi4vYjhRV0ZhOGIvYjhRV0ZhOGJfbERfYWpySFFqYV9valEuZGVkP2pfb0JsYXFIUV9PamFCSF9scT08P2RlZCBITGU4ICRqX29CbGFxSFFfT2phQkhfbHE7ID8+JmRscT08P2RlZCBITGU4ICRkbHE7ID8+JmxEX1FscT08P2RlZCBITGU4ICRsRF9RbHE7ID8+Jm9scT08P2RlZCBITGU4ICRvbHE7ID8+Jm9PbHE9PD9kZWQgSExlOCAkb09scTsgPz4mbERfbHE9PD9kZWQgSExlOCAkbERfbHE7ID8+JmJsRF9scT08P2RlZCBITGU4ICRibERfbHE7ID8+JywgJ3FsT19hanJIUWphX0ZhOGInKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiQocThMQkRIdnIpLjh2KCJMYWxMVyIsICIjb3J2X2FsdldfYjhRV0ZhOGJfYThuIiwgRkJ2THJsOHYoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNEOHFqYV9hOG5fcWp5ZW84alFxJykuRDhxamEoJ3llOGInKTsgLy9qYUhRcihvbHEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqN2p1X0w4REQ4dl9RSHRCSHlyKCcuLi9iOFFXRmE4Yi9ibERfeXJqckJ5X2E4bi5kZWQ/al9vQmxhcUhRX09qYUJIX2xxPTw/ZGVkIEhMZTggJGpfb0JsYXFIUV9PamFCSF9scTsgPz4mZGxxPTw/ZGVkIEhMZTggJGRscTsgPz4mbERfUWxxPTw/ZGVkIEhMZTggJGxEX1FscTsgPz4mb2xxPTw/ZGVkIEhMZTggJG9scTsgPz4mb09scT08P2RlZCBITGU4ICRvT2xxOyA/PiZibERfbHE9PD9kZWQgSExlOCAkYmxEX2xxOyA/PicsICdxbE9feXJqckJ5X2E4bicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsqLwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjb3J2X0xhOHlIX2E4biIpLkxhbExXKEZCdkxybDh2ICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI0Q4cWphX2E4bl9xanllbzhqUXEnKS5EOHFqYSgncjhubmFIJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICA1aTRjNXcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNGOFFEX1FIZDhRcl9IdWQ4UXIiKS5MYWxMVyhGQnZMcmw4diAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYmx2cThiLjhkSHYoJy4uL0h2RmovSHZGal9EamxhX0w4dnJIdnIuZGVkP0Y4UURqcj1kcUYmRGxxPTw/ZGVkIEhMZTggSHZMUVJkcl9CUWEoJGxEX2xxLCBBNDRfaTBHNWs0d1pjMF85QVZ3KTsgPz4mb2xxPTw/ZGVkIEhMZTggJG9scTsgPz4mb09scT08P2RlZCBITGU4ICRvT2xxOyA/PiZibERfbHE9PD9kZWQgSExlOCAkYmxEX2xxOyA/PiZsRF9RbHE9PD9kZWQgSExlOCAkbERfUWxxOyA/PiZkbHE9PD9kZWQgSExlOCBIdkxRUmRyX0JRYSgkZGxxLCBBNDRfaTBHNWs0d1pjMF85QVZ3KTsgPz4mSHZGal9scT08P2RlZCBITGU4IEh2TFFSZHJfQlFhKCRIdkZqX3FIcmpsYXlbbV1bJ2xxJ10sIEE0NF9pMEc1azR3WmMwXzlBVncpOyA/PicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibHZxOGIuOGRIdignLi4vYjhRV0ZhOGIvRjhRRF9RSGQ4UXJfSHVkOFFyLmRlZD9GOFFEanI9ZHFGJkRscT08P2RlZCBITGU4IEh2TFFSZHJfQlFhKCRsRF9scSwgQTQ0X2kwRzVrNHdaYzBfOUFWdyk7ID8+Jm9scT08P2RlZCBITGU4ICRvbHE7ID8+Jm9PbHE9PD9kZWQgSExlOCAkb09scTsgPz4mYmxEX2xxPTw/ZGVkIEhMZTggJGJsRF9scTsgPz4mbERfUWxxPTw/ZGVkIEhMZTggJGxEX1FscTsgPz4mZGxxPTw/ZGVkIEhMZTggSHZMUVJkcl9CUWEoJGRscSwgQTQ0X2kwRzVrNHdaYzBfOUFWdyk7ID8+Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgaU1adyA5d0F3SjkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNCZHFqckhfeXJqckJ5X0Y4UUQiKS5PamFscWpySCh7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRQmFIeTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDhEREh2cjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFIdEJsUUhxOiByUUJILAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERsdmFIdm5yZTogSwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBESHl5am5IeTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDhEREh2cjogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFIdEJsUUhxOiAiNGFIanlIIEh2ckhRIGogTDhEREh2ciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGx2YUh2bnJlOiAiazhCUSBMOERESHZyIERCeXIgTDh2eWx5ciA4RiBqciBhSGp5ciBLIExlalFqTHJIUXkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlCb0RsclRqdnFhSFE6IEZCdkxybDh2IChGOFFEKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIERqdnFqcjhRUl9xOEx5SHIgPSAkKCdsdmRCclt2akRIPSJEanZxanI4UVJfcThMeUhyIl0nKS5kUThkKCJPamFCSCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIERqdnFqcjhRUl9xOEx5SHJfalFRID0gRGp2cWpyOFFSX3E4THlIci55ZGFscigiLCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIERqdnFqcjhRUl9xOEx5SHJfalFRX3ZIYiA9IERqdnFqcjhRUl9xOEx5SHJfalFRLkZsYXJIUShGQnZMcmw4diAoTykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFIckJRdiBPICE9PSAnJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgeUhhX3lyanJCeSA9ICQoJ2x2ZEJyW3ZqREg9eXJqckJ5XTpMZUhMV0hxJykuT2phKCk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKHlIYV95cmpyQnkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoeUhhX3lyanJCeSA9PSBVbSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGpkX0J5SFFfb09scSA9ICQoIiNqZF9CeUhRX29PbHEiKS5kUThkKCJPamFCSCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgdkh1cl9CeUhRX2xxX2pRUSA9ICQoImx2ZEJyW3ZqREhePSd5SGFfdkh1cl9CeUhRbHFfPD9kZWQgSExlOCAkb09scTsgPz4nXSIpLkRqZChGQnZMcmw4diAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRSHJCUXYgJChyZWx5KS5PamEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkubkhyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgoamRfQnlIUV9vT2xxID09ICcnIHx8IGpkX0J5SFFfb09scSA9PSB2QmFhKSB8fCAodkh1cl9CeUhRX2xxX2pRUS5hSHZucmUgPT0gbSB8fCB2SHVyX0J5SFFfbHFfalFRLmFIdm5yZSA9PSB2QmFhKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGphYThiX3lCb0RsciA9IEZqYXlIOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIER5bl92OHJsID0gIkdlODh5SCBCeUhRIEY4USBqZGRROE9IIHI4IEJ5SFEhIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBqYWE4Yl95Qm9EbHIgPSByUUJIOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICh5SGFfeXJqckJ5ID09IEttKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgeUhhSF9hRmE4Yl9CeUhRX2xxX3k4UXIgPSBxOExCREh2ci5uSHJpYUhESHZyeTZSMGpESCgnYUZhOGJfQnlIUV9scV95OFFyW10nKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIHlIYV9hRmE4Yl9CeUhRX2xxID0geUhhSF9hRmE4Yl9CeUhRX2xxX3k4UXIuYUh2bnJlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKHlIYV9hRmE4Yl9CeUhRX2xxID09IG0gfHwgeUhhX2FGYThiX0J5SFFfbHEgPT0gdkJhYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGphYThiX3lCb0RsciA9IEZqYXlIOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIER5bl92OHJsID0gIjRhSGp5SCBMYWxMVyA4diByZUggeUhhSExyIGpGckhRIEdlODh5SGx2biBCeUhRICEiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGphYThiX3lCb0RsciA9IHJRQkg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vUUhyQlF2IEZqYXlIOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoeUhhX3lyanJCeSA9PSBVWCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIFFfb19vT2xxID0gJCgieUhhSExyW3ZqREg9J1Ffb19vT2xxJ10iKS5kUThkKCJPamFCSCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoUV9vX29PbHEgPT0gJycgfHwgUV9vX29PbHEgPT0gdkJhYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGphYThiX3lCb0RsciA9IEZqYXlIOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIER5bl92OHJsID0gIkdlODh5SCBvakxXYmpRcSB5ckhkISI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgamFhOGJfeUJvRGxyID0gclFCSDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoeUhhX3lyanJCeSA9PSBVSykgewoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBRX0Zfb09scSA9ICQoInlIYUhMclt2akRIPSdRX0Zfb09scSddIikuZFE4ZCgiT2phQkgiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKFFfRl9vT2xxID09ICcnIHx8IFFfRl9vT2xxID09IHZCYWEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBqYWE4Yl95Qm9EbHIgPSBGamF5SDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBEeW5fdjhybCA9ICJHZTg4eUggRjhRYmpRcSB5ckhkISI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgamFhOGJfeUJvRGxyID0gclFCSDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoeUhhX3lyanJCeSA9PSBVVSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGpfRl9vT2xxID0gJCgieUhhSExyW3ZqREg9J2pfRl9vT2xxJ10iKS5kUThkKCJPamFCSCIpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKGpfRl9vT2xxID09ICcnIHx8IGpfRl9vT2xxID09IHZCYWEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBqYWE4Yl95Qm9EbHIgPSBGamF5SDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBEeW5fdjhybCA9ICJHZTg4eUggRjhRYmpRcSB5ckhkISI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgamFhOGJfeUJvRGxyID0gclFCSDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoeUhhX3lyanJCeSA9PSBnKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgUVE4YUhfQnlIUV9scV9qUVEgPSAkKCJsdmRCclt2akRIPSdRUThhSF9CeUhRX2xxW10nXTpMZUhMV0hxIikuRGpkKEZCdkxybDh2ICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vamFIUXIoUVE4YUhfQnlIUV9scV9qUVEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUhyQlF2ICQocmVseSkuT2phKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLm5IcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoUVE4YUhfQnlIUV9scV9qUVEuYUh2bnJlID09IG0gfHwgUVE4YUhfQnlIUV9scV9qUVEuYUh2bnJlID09IHZCYWEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vamFIUXIoUVE4YUhfQnlIUV9scV9qUVEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGphYThiX3lCb0RsciA9IEZqYXlIOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIER5bl92OHJsID0gIkdlODh5SCBCeUhRIEY4USBRSEZGSFFqYSEiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGphYThiX3lCb0RsciA9IHJRQkg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKHlIYV95cmpyQnkgPT0gVU4pIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBxUThhSF9CeUhRX2xxX2pRUSA9ICQoImx2ZEJyW3ZqREg9J3FROGFIX0J5SFFfbHFbXSddOkxlSExXSHEiKS5EamQoRkJ2THJsOHYgKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUUhyQlF2ICQocmVseSkuT2phKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLm5IcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAocVE4YUhfQnlIUV9scV9qUVEuYUh2bnJlID09IG0gfHwgcVE4YUhfQnlIUV9scV9qUVEuYUh2bnJlID09IHZCYWEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBqYWE4Yl95Qm9EbHIgPSBGamF5SDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBEeW5fdjhybCA9ICJHZTg4eUggQnlIUSBGOFEgcUhhSG5qckghIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBqYWE4Yl95Qm9EbHIgPSByUUJIOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGphYThiX3lCb0RsciA9IHJRQkg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgRHluX3Y4cmwgPSAiSThRV0ZhOGIgeXJqckJ5IGx5IEhEZHJSISI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGphYThiX3lCb0RsciA9IEZqYXlIOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChqYWE4Yl95Qm9EbHIgPT0gclFCSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIi5vcnZfQmRxanJIIikuZWxxSCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIi5vcnYtcWp2bkgiKS5lbHFIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKERqdnFqcjhRUl9xOEx5SHJfalFRX3ZIYi5hSHZucmUgPj0gVSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgQmRhOGpxSHFfcThMeUhyX2pRUSA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCdsdmRCclt2akRIPSJCZGE4anFIcV9xOEx5SHJbXSJdJykuSGpMZShGQnZMcmw4diAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZGE4anFIcV9xOEx5SHJfalFRLmRCeWUoJChyZWx5KS5PamEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIERqdl9MOEJ2ciA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuSGpMZShEanZxanI4UVJfcThMeUhyX2pRUV92SGIsIEZCdkxybDh2IChXSFIsIE9qYUJIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoT2phQkggIT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgbHZxSHUgPSAkLmx2QVFRalIoT2phQkgsIEJkYThqcUhxX3E4THlIcl9qUVEpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAobHZxSHUgPj0gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEanZfTDhCdnIrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qbEYgKGx2cUh1ID09IC1VKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTDh2eThhSC5hOG4oIGx2cUh1ICk7ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQublFscnJIUS5qcXEoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBybHJhSDogJzA4cmxGbExqcmw4diEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBySHVyOiAiIEVqdnFqcjhRUiBNOEwteUhyIGpRSCBpRGRyUi4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvanlsTF9GOFFEX3lCb0RscignLi4vYjhRV0ZhOGIvYmxEX0hxbHJfeXJqckJ5LmRlZCcsICdxbE9feXJqckJ5X3FqeWVvOGpRcScsICdCZHFqckhfeXJqckJ5X0Y4UUQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKERqdnFqcjhRUl9xOEx5SHJfalFRX3ZIYi5hSHZucmUgPT0gRGp2X0w4QnZyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvanlsTF9GOFFEX3lCb0RscignLi4vYjhRV0ZhOGIvYmxEX0hxbHJfeXJqckJ5LmRlZCcsICdxbE9feXJqckJ5X3FqeWVvOGpRcScsICdCZHFqckhfeXJqckJ5X0Y4UUQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQublFscnJIUS5qcXEoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJscmFIOiAnMDhybEZsTGpybDh2IScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgckh1cjogIiBFanZxanI4UVIgTThMLXlIciBqUUggaURkclIuICIKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2p5bExfRjhRRF95Qm9EbHIoJy4uL2I4UVdGYThiL2JsRF9IcWxyX3lyanJCeS5kZWQnLCAncWxPX3lyanJCeV9xanllbzhqUXEnLCAnQmRxanJIX3lyanJCeV9GOFFEJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5uUWxyckhRLmpxcSh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhanl5X3ZqREg6ICduUWxyckhRLWFsbmVyJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmxyYUg6ICc8ZUM+MDhybEZsTGpybDh2ITwvZUM+JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgckh1cjogIiA8eXJROHZuPiIgKyBEeW5fdjhybCArICI8L3lyUTh2bj4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWp5eV92akRIOiAnRFIteXJsTFdSLUxhanl5JwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBMOHZyamx2SFEgPSAkKCdxbE8uSFFROFEtTDh2cmpsdkhRICcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9qYWxxanJIIHJlSCBGOFFEIGJlSHYgbHIgbHkgeUJvRGxyckhxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIE9qYWxxanI4USA9ICQoIiNGOFFESyIpLk9qYWxxanJIKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFFROFFHOHZyamx2SFE6IEw4dnJqbHZIUSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFFROFFWam9IYUc4dnJqbHZIUTogJCgiOGEiLCBMOHZyamx2SFEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiUWpkZEhROiAnYWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBESHJqOiAiT2phbHFqckgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiLkxqdkxIYSIpLkxhbExXKEZCdkxybDh2ICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2phbHFqcjhRLlFIeUhyMzhRRCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgIEdjRUVpMHc5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCdySHVyalFIai5MZWpyLWx2ZEJybzh1Jykucmx2UkRMSCh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlMUWxkcl9CUWE6ICcuLi9RSHk4QlFMSHkvN3kvcmx2Ul9ETEgvcmx2Ul9ETEguN3knLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZUhESDogInlsRGRhSCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVIbG5lcjogIksiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdmxyX2x2eXJqdkxIX0xqYWFvakxXOiBGQnZMcmw4diAoSHEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBscSA9IEhxLmxxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGVIbG5lciA9IGdDOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcThMQkRIdnIubkhyaWFIREh2cjZSWnEobHEgKyAnX2xGUScpLnlyUmFILmVIbG5lciA9IGVIbG5lciArICdkdSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICA1SEZIUVFqYSBWbHlyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQocThMQkRIdnIpLjh2KCJMYWxMVyIsICIub3J2X0xhOHlIX1FIRkhRUWphIiwgRkJ2THJsOHYgKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgeUhhX2xxID0gJChyZWx5KS5kUThkKCJscSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgTEZRRCA9IG84OHJvOHUuTDh2RmxRRCgiQVFIIFI4QiB5QlFIIGJqdnIgcjggTGE4eUggUUhGSFFRamE/IiwgRkJ2THJsOHYgKFFIeUJhcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKFFIeUJhcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBkbHEgPSAiPD9kZWQgSExlOCAkZGxxOyA/PiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajdqdV9MOEREOHZfUUh0Qkh5cignLi4vYjhRV0ZhOGIvYmxEX0xhOHlIX1FIRkhRUWphLmRlZD95SGFfbHE9JyArIHlIYV9scSArICcmZGxxPScgKyBkbHEsICdxbE9fUUhGSFFRamFfYWx5cicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRqUUh2ci5hOExqcmw4di5RSGE4anEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgTThMLXlIciBFbHl5bHZuIFZseXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJCQkJCQkJJChxOExCREh2cikuOHYoIkxhbExXIiwgIiNEOHFqYV9MYWxMVyIsIEZCdkxybDh2KEgpewoJCQkJCQkJCSAgICQoJyNEOHFqYScpLkQ4cWphKCdyOG5uYUgnKTsKCQkJCQkJCQkgICBhOExqcmw4di5RSGE4anEoKTsKCQkJCQkJCQl9KTsKCQkJCQkJCQkJCgkJCQkJCQkJJChxOExCREh2cikuOHYoIkxhbExXIiwiLjd5bmFSZGUtTGE4eUgiLCBGQnZMcmw4dihIKXsKCQkJCQkJCQkJIGE4TGpybDh2LlFIYThqcSgpOwoJCQkJCQkJCX0pOwkKCQkJCQkJCQkKCQkJCQkJCQkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChxOExCREh2cikuOHYoIkxhbExXIiwgIi5vcnZfRmxhSHlfT2xIYiIsIEZCdkxybDh2IChIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBvT2xxID0gJCgiI29PbHEiKS5kUThkKCJPamFCSCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBILnlyOGQ0UThkam5qcmw4digpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBILnlyOGRaRERIcWxqckg0UThkam5qcmw4digpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgbHEgPSAkKHJlbHkpLmpyclEoImxySERRSEYiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIEY4OHJIUV9kOGRCZF9kUWxEalFSID0gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxySEQ6ICI8b0Jycjh2IHJSZEg9J29CcnI4dic+PC9vQnJyOHY+IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0h2cjogN3k0anZIYS5IT3I5cmpRciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcnZMYWp5eTogIm9ydiBvcnYtcWp2bkhRIG9ydi15RCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3J2ckh1cjogIiBHYTh5SCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGphYW9qTFc6IEZCdkxybDh2IChIT0h2cikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0h2ci55cjhkNFE4ZGpuanJsOHYoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9IdnIucWpyai5MYTh5SCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIHJvID0gJzxsIExhanl5PSJGaiBGai1CeUhRIj48L2w+PGwgTGFqeXk9IkZqIEZqLUw4biI+ICc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChEUmRqdkhhICE9ICJ2OF9kanYiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUmRqdkhhLkxhOHlIKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFJkanZIYSA9ICQuN3k0anZIYSh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMOHZySHZyY09IUUZhOGI6ICd5TFE4YWEnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDh2ckh2cjlsU0g6IHtibHFyZTogQ0NtLCBlSGxuZXI6IFhLbX0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2VIanFIUUc4dnJROGF5OiB7TDh2clE4YXk6ICJMYTh5SDh2YVIifSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVIanFIUXdscmFIOiAnIE04TEJESHZyIFp2RjhRRGpybDh2JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vUUh5bFNqb2FIOiAicWx5am9hSHEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9MOHZySHZyOiAgICAgICAgeXJCRkYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqQnI4ZDh5bHJsOHY6IEZqYXlILAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9kOHlscmw4djogJ1FsbmVyLW84cnI4RCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZUhESDogJzlsSHZ2aicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMOHZySHZyQTdqdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJRYTogJy4uL2I4UVdGYThiL2I4UVdGYThiX2xEX0ZsYUhhbHlyLmRlZD9qX29CbGFxSFFfT2phQkhfbHE9PD9kZWQgSExlOCAkal9vQmxhcUhRX09qYUJIX2xxOyA/PiZkbHE9PD9kZWQgSExlOCBIdkxRUmRyX0JRYSgkZGxxLCBBNDRfaTBHNWs0d1pjMF85QVZ3KTsgPz4mbERfUWxxPTw/ZGVkIEhMZTggJGxEX1FscTsgPz4mb2xxPTw/ZGVkIEhMZTggSHZMUVJkcl9CUWEoJG9scSwgQTQ0X2kwRzVrNHdaYzBfOUFWdyk7ID8+Jm9PbHE9PD9kZWQgSExlOCBIdkxRUmRyX0JRYSgkb09scSwgQTQ0X2kwRzVrNHdaYzBfOUFWdyk7ID8+JmJsRF9scT08P2RlZCBITGU4IEh2TFFSZHJfQlFhKCRibERfbHEsIEE0NF9pMEc1azR3WmMwXzlBVncpOyA/PiZscT0nICsgbHEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgakJyOGE4anE6IHJRQkgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGODhySFF3ODhhb2pROiBGODhySFFfZDhkQmRfZFFsRGpRUgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChxOExCREh2cikuOEZGKCdMYWxMVycsICcjcThMeUhyX29CYVdfcThidmE4anFfYWx2VycpLjh2KCdMYWxMVycsICcjcThMeUhyX29CYVdfcThidmE4anFfYWx2VycsIEZCdkxybDh2IChIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEguZFFIT0h2ck1IRmpCYXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGxxID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIi5qcnJqTGVESHZyeV9ManlIOkxlSExXSHEiKS5IakxlKEZCdkxybDh2ICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxxLmRCeWUocmVseS5PamFCSCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgbHF5ID0gbHEuNzhsdigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyQoJyNvQmFXX3E4TF9EcnFqcmpfbHEnKS5PamEobHF5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kKCcjRDhxamFfb0JhV19EcnFqcmpfcThidmE4anEnKS5EOHFqYSgneWU4YicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAobHF5ICE9ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibHZxOGIuYThManJsOHYgPSAnLi4vcUR5L3FEeV9EQmFybGRhSF9xOGJ2YThqcS5kZWQ/bHE9JyArIGxxeSArICcmZGxxPTw/ZGVkIEhMZTggJGRscTsgPz4mclJkSD1VJlFIdmpESF9GYWpuPSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvODhybzh1LmphSFFyKCJHZTg4eUggcThMQkRIdnJ5IEY4USBxOGJ2YThqcSEiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQocThMQkRIdnIpLjh2KCdMYWxMVycsICcub3J2LXE4THlIci1xOGJ2YThqcScsIEZCdkxybDh2ICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIE9qYUJIID0gJChyZWx5KS5kUThkKCdscScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjRDhxamFfcThidmE4anEnKS5EOHFqYSgneWU4YicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZHFGX2xxJykuT2phKE9qYUJIKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgUUh2akRIX0Zham4gPSAkKCJsdmRCclt2akRIPSdRSHZqREhfRmFqbiddOkxlSExXSHEiKS5PamEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgclJkSCA9ICQoImx2ZEJyW3ZqREg9J2RxRl9yUmRIJ106TGVITFdIcSIpLk9qYSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBkbHEgPSAiPD9kZWQgSExlOCBIdkxRUmRyX0JRYSgkZGxxLCBBNDRfaTBHNWs0d1pjMF85QVZ3KTsgPz4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNGOFFELXE4THlIcnktcWpyanJqb2FIIikuanJyUSgncmpRbkhyJywgJ19vYWp2VycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNGOFFELXE4THlIcnktcWpyanJqb2FIIikuanJyUSgnakxybDh2JywgJy4uL3FEeS9xRHlfcThidmE4anEuZGVkP2xxPScgKyBPamFCSCArICcmZGxxPScgKyBkbHEgKyAnJnJSZEg9VSZRSHZqREhfRmFqbj1tJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjRjhRRC1xOEx5SHJ5LXFqcmpyam9hSCIpLnlCb0RscigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNGOFFELXE4THlIcnktcWpyanJqb2FIIikuanJyUSgncmpRbkhyJywgJycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNGOFFELXE4THlIcnktcWpyanJqb2FIIikuanJyUSgnakxybDh2JywgJycpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9IdWxyKG0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjb3J2X3E4YnZhOGpxX2RxRiIpLkxhbExXKEZCdkxybDh2ICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypPalEgZHFGX2xxID0gJCgnI2RxRl9scScpLk9qYSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIDhRbG5sdmphX0ZsYUhfRmFqbiA9ICQoImx2ZEJyW3ZqREg9JzhRbG5sdmphX0ZsYUhfRmFqbiddOkxlSExXSHEiKS5PamEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBkbHEgPSAiPD9kZWQgLy9ITGU4IEh2TFFSZHJfQlFhKCRkbHEsIEE0NF9pMEc1azR3WmMwXzlBVncpOyAgPz4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI0Q4cWphX3E4YnZhOGpxJykuRDhxamEoJ3I4bm5hSCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI0Y4UUQtcThMeUhyeS1xanJqcmpvYUgiKS5qcnJRKCdyalFuSHInLCAnX29hanZXJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjRjhRRC1xOEx5SHJ5LXFqcmpyam9hSCIpLmpyclEoJ2pMcmw4dicsICcuLi9xRHkvcUR5X3E4YnZhOGpxLmRlZD9scT0nICsgZHFGX2xxICsgJyZkbHE9JyArIGRscSArICcmclJkSD1VJjhRbG5sdmphX0ZsYUhfRmFqbj0nICsgOFFsbmx2amFfRmxhSF9GYWpuICsgJyZRSHZqREhfRmFqbj1tJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjRjhRRC1xOEx5SHJ5LXFqcmpyam9hSCIpLnlCb0RscigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI0Y4UUQtcThMeUhyeS1xanJqcmpvYUgiKS5qcnJRKCdyalFuSHInLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjRjhRRC1xOEx5SHJ5LXFqcmpyam9hSCIpLmpyclEoJ2pMcmw4dicsICcnKTsqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEh1bHIobSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgZHFGX2xxID0gJCgnI2RxRl9scScpLk9qYSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgUUh2akRIX0Zham4gPSAkKCJsdmRCclt2akRIPSdRSHZqREhfRmFqbiddOkxlSExXSHEiKS5PamEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIDhRbG5sdmphX0ZsYUhfRmFqbiA9ICQoImx2ZEJyW3ZqREg9JzhRbG5sdmphX0ZsYUhfRmFqbiddOkxlSExXSHEiKS5PamEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIHJSZEggPSAkKCJsdmRCclt2akRIPSdkcUZfclJkSCddOkxlSExXSHEiKS5PamEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGRscSA9ICI8P2RlZCBITGU4IEh2TFFSZHJfQlFhKCRkbHEsIEE0NF9pMEc1azR3WmMwXzlBVncpOyA/PiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgbERfb0JsYXFIUV9xSHJqbGF5ID0gIjw/ZGVkIEhMZTggJGxEX29CbGFxSFFfcUhyamxheTsgPz4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgIGphSFFyKGRxRl9scSArIioqKioqIisgclJkSCArIioqKioqIisgZGxxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI0Q4cWphX3E4YnZhOGpxJykuRDhxamEoJ3I4bm5hSCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjZHFGX0Y4UUQiKS5qcnJRKCdyalFuSHInLCAnX29hanZXJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNkcUZfRjhRRCIpLmpyclEoJ2pMcmw4dicsICcuLi9xRHkvcUR5X3E4YnZhOGpxLmRlZD9scT0nICsgZHFGX2xxICsgJyZsRF9vQmxhcUhRX3FIcmpsYXk9JyArIGxEX29CbGFxSFFfcUhyamxheSArICcmZGxxPScgKyBkbHEgKyAnJnJSZEg9JyArIHJSZEggKyAnJlFIdmpESF9GYWpuPScgKyBRSHZqREhfRmFqbiArICcmOFFsbmx2amFfRmxhSF9GYWpuPScgKyA4UWxubHZqYV9GbGFIX0Zham4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjZHFGX0Y4UUQiKS55Qm9EbHIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiI2RxRl9GOFFEIikuanJyUSgncmpRbkhyJywgJycpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjZHFGX0Y4UUQiKS5qcnJRKCdqTHJsOHYnLCAnJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxOEx5SHJfanJyakxlREh2cnlfeUhhSExyamFhIikuTGFsTFcoRkJ2THJsOHYgKCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLnE4THlIcl9qcnJqTGVESHZyeV9ManlIJykuZFE4ZCgnTGVITFdIcScsIHJlbHkuTGVITFdIcSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbEYgamFhIExlSExXbzh1IGpRSCB5SGFITHJIcSwgTGVITFcgcmVIIHlIYUhMcmphYSBMZUhMV284dQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp2cSBPbExIT0hReWoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIucThMeUhyX2pycmpMZURIdnJ5X0xqeUgiKS5MYWxMVyhGQnZMcmw4diAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkKCIucThMeUhyX2pycmpMZURIdnJ5X0xqeUgiKS5hSHZucmUgPT0gJCgiLnE4THlIcl9qcnJqTGVESHZyeV9ManlIOkxlSExXSHEiKS5hSHZucmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNxOEx5SHJfanJyakxlREh2cnlfeUhhSExyamFhIikuZFE4ZCgiTGVITFdIcSIsICJMZUhMV0hxIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIjcThMeUhyX2pycmpMZURIdnJ5X3lIYUhMcmphYSIpLmRROGQoIkxlSExXSHEiLCBGamF5SCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChxOExCREh2cikuOEZGKCdMYWxMVycsICcjcThMX29CYVdfcThidmE4anFfYWx2VycpLjh2KCdMYWxMVycsICcjcThMX29CYVdfcThidmE4anFfYWx2VycsIEZCdkxybDh2IChIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEguZFFIT0h2ck1IRmpCYXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGxxID0gW107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIi5xOEx5SHJfanJyakxlREh2cnlfTGp5SDpMZUhMV0hxIikuSGpMZShGQnZMcmw4diAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscS5kQnllKHJlbHkuT2phQkgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIGxxeSA9IGxxLjc4bHYoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI29CYVdfcThMX0RycWpyal9scScpLk9qYShscXkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjRDhxamFfb0JhV19EcnFqcmpfcThidmE4anEnKS5EOHFqYSgneWU4YicpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChscXkgIT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmx2cThiLmE4TGpybDh2ID0gJy4uL3FEeS9xRHlfREJhcmxkYUhfcThidmE4anEuZGVkP2xxPScgKyBscXkgKyAnJmRscT08P2RlZCBITGU4ICRkbHE7ID8+JnJSZEg9VSZRSHZqREhfRmFqbj0nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG84OHJvOHUuamFIUXIoIkdlODh5SCBxOExCREh2cnkgRjhRIHE4YnZhOGpxISIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoIiNvcnZfb0JhV19EcnFqcmpfcThidmE4anEiKS5MYWxMVyhGQnZMcmw4diAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSA4UWxubHZqYV9GbGFIX0Zham4gPSAkKCJsdmRCclt2akRIPSc4UWxubHZqYV9GbGFIX0Zham4nXTpMZUhMV0hxIikuT2phKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBkbHEgPSAiPD9kZWQgSExlOCBIdkxRUmRyX0JRYSgkZFE4N0hMcl9xSHJqbGF5W21dWydscSddLCBBNDRfaTBHNWs0d1pjMF85QVZ3KTsgPz4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgbHF5ID0gJCgnI29CYVdfcThMX0RycWpyal9scScpLk9qYSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAobHF5ICE9ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibHZxOGIuYThManJsOHYgPSAnLi4vcUR5L3FEeV9EQmFybGRhSF9xOGJ2YThqcS5kZWQ/bHE9JyArIGxxeSArICcmZGxxPTw/ZGVkIEhMZTggJGRscTsgPz4mclJkSD1VJjhRbG5sdmphX0ZsYUhfRmFqbj0nICsgOFFsbmx2amFfRmxhSF9GYWpuICsgJyZRSHZqREhfRmFqbj0nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzg4cm84dS5qYUhRcigiR2U4OHlIIHE4TEJESHZyeSBGOFEgcThidmE4anEhIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIERSZGp2SGEgPSAndjhfZGp2JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHE4TEJESHZyKS44RkYoJ0xhbExXJywgJyN5SHZxX3E4TEJESHZyeScpLjh2KCdMYWxMVycsICcjeUh2cV9xOExCREh2cnknLCBGQnZMcmw4diAoSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBILmRRSE9IdnJNSEZqQmFyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBscSA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCIucThMeUhyX2pycmpMZURIdnJ5X0xqeUg6TGVITFdIcSIpLkhqTGUoRkJ2THJsOHYgKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHEuZEJ5ZShyZWx5Lk9qYUJIKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBscXkgPSBscS43OGx2KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJCgnI29CYVdfcThMX0RycWpyal9scScpLk9qYShscXkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyQoJyNEOHFqYV9vQmFXX0RycWpyal9xOGJ2YThqcScpLkQ4cWphKCd5ZThiJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChscXkgIT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYmx2cThiLmE4TGpybDh2ID0gJy4uL3FEeS9xRHlfREJhcmxkYUhfcThidmE4anEuZGVkP2xxPScgKyBscXkgKyAnJmRscT08P2RlZCBITGU4ICRkbHE7ID8+JnJSZEg9VSZRSHZqREhfRmFqbj0nOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBvT2xxID0gJCgiI29PbHEiKS5kUThkKCJPamFCSCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSC55cjhkNFE4ZGpuanJsOHYoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEgueXI4ZFpEREhxbGpySDRROGRqbmpybDh2KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgRjg4ckhRX2Q4ZEJkX2RRbERqUVIgPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsckhEOiAiPG9CcnI4diByUmRIPSdvQnJyOHYnPjwvb0Jycjh2PiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPSHZyOiA3eTRqdkhhLkhPcjlyalFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcnZMYWp5eTogIm9ydiBvcnYtZFFsRGpRUiBvcnYteUQgb3J2X3lIdnFfanJyakxlREh2cnlfRGpsYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ydnJIdXI6ICIgOUh2cSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExqYWFvakxXOiBGQnZMcmw4diAoSE9IdnIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPSHZyLnlyOGQ0UThkam5qcmw4digpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQocmVseSkuanJyUSgicWx5am9hSHEiLCByUUJIKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5vcnZfRGpsYUY4UURfTGE4eUgnKS5qcnJRKCJxbHlqb2FIcSIsIHJRQkgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9qUSBCUWEgPSAnLi4vYjhRV0ZhOGIvYjhRV0ZhOGJfbERfSERqbGFyam5fanFxLmRlZD9qX29CbGFxSFFfT2phQkhfbHE9PD9kZWQgSExlOCAkal9vQmxhcUhRX09qYUJIX2xxOyA/PiZkbHE9PD9kZWQgSExlOCAkZGxxOyA/PiZsRF9RbHE9PD9kZWQgSExlOCAkbERfUWxxOyA/PiZvbHE9PD9kZWQgSExlOCAkb2xxOyA/PiZvT2xxPTw/ZGVkIEhMZTggJG9PbHE7ID8+JmJsRF9scT08P2RlZCBITGU4ICRibERfbHE7ID8+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuajdqdSh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREhyZThxOiAiNGM5dyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlFhOiBCUWEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWpyajogJCgiI0Y4UURfRGpsYXkiKS55SFFsamFsU0goKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkucTh2SChGQnZMcmw4diAoRHluKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kKCIjcnFfcmp5V19MZWxhcV9PamFCSHlfIiArIGxxKS5lckRhKER5bik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5uUWxyckhRLmpxcSh7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICh5clFsdm4gfCBEanZxanI4UVIpIHJlSCBlSGpxbHZuIDhGIHJlSCB2OHJsRmxManJsOHYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmxyYUg6ICdFSHl5am5IIScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICh5clFsdm4gfCBEanZxanI4UVIpIHJlSCBySHVyIGx2eWxxSCByZUggdjhybEZsTGpybDh2CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJIdXI6IER5bgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPSHZyLnFqcmouTGE4eUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqN2p1X0w4REQ4dl9RSHRCSHlyKCcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9sRF9EamxhYWx5ci5kZWQ/al9vQmxhcUhRX09qYUJIX2xxPTw/ZGVkIEhMZTggJGpfb0JsYXFIUV9PamFCSF9scTsgPz4mZGxxPTw/ZGVkIEhMZTggJGRscTsgPz4mbERfUWxxPTw/ZGVkIEhMZTggJGxEX1FscTsgPz4mb2xxPTw/ZGVkIEhMZTggJG9scTsgPz4mb09scT08P2RlZCBITGU4ICRvT2xxOyA/PiZibERfbHE9PD9kZWQgSExlOCAkYmxEX2xxOyA/PicsICdxbE9fRGpsYXknKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxySEQ6ICI8b0Jycjh2IHJSZEg9J29CcnI4dic+PC9vQnJyOHY+IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9IdnI6IDd5NGp2SGEuSE9yOXJqUXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ydkxhanl5OiAib3J2IG9ydi1xanZuSFEgb3J2LXlEIG9ydl9EamxhRjhRRF9MYTh5SCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ydnJIdXI6ICIgR2E4eUgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMamFhb2pMVzogRkJ2THJsOHYgKEhPSHZyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIT0h2ci55cjhkNFE4ZGpuanJsOHYoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPSHZyLnFqcmouTGE4eUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgcm8gPSAnPGwgTGFqeXk9IkZqIEZqLUJ5SFEiPjwvbD48bCBMYWp5eT0iRmogRmotTDhuIj4gJzsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoRFJkanZIYSAhPSAidjhfZGp2IikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERSZGp2SGEuTGE4eUgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEUmRqdkhhID0gJC43eTRqdkhhKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMOHZySHZyOWxTSDoge2JscXJlOiBnQ20sIGVIbG5lcjogWHptfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2VIanFIUUc4dnJROGF5OiB7TDh2clE4YXk6ICJMYTh5SDh2YVIifSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkOHlscmw4djogIkxIdnJIUS1yOGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVIanFIUXdscmFIOiAnIDxsIExhanl5PSJGaiBGai1kSHZMbGEteXRCalFILTgiIGpRbGotZWxxcUh2PSJyUUJIIj48L2w+IEc4RGQ4eUggRWpsYScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9RSHlsU2pvYUg6ICJxbHlqb2FIcSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9MOHZySHZyOiAgICAgICAgeXJCRkYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVIREg6ICdNSEhkNGx2VycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDh2ckh2ckE3anU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlFhOiAnLi4vYjhRV0ZhOGIvYjhRV0ZhOGJfbERfSERqbGFyam5fRjhRRC5kZWQ/eUhhX3E4THk9JyArIGxxeSArICcmal9vQmxhcUhRX09qYUJIX2xxPTw/ZGVkIEhMZTggJGpfb0JsYXFIUV9PamFCSF9scTsgPz4mZGxxPTw/ZGVkIEhMZTggJGRscTsgPz4mbERfUWxxPTw/ZGVkIEhMZTggJGxEX1FscTsgPz4mb2xxPTw/ZGVkIEhMZTggJG9scTsgPz4mb09scT08P2RlZCBITGU4ICRvT2xxOyA/PiZsRF9scT08P2RlZCBITGU4ICRsRF9scTsgPz4mYmxEX2xxPTw/ZGVkIEhMZTggJGJsRF9scTsgPz4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqQnI4YThqcTogclFCSAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRjg4ckhRdzg4YW9qUTogRjg4ckhRX2Q4ZEJkX2RRbERqUVIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvODhybzh1LmphSFFyKCJHZTg4eUggcThMQkRIdnJ5IEY4USBxOGJ2YThqcSEiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgiLm9ydl95SGFITHJfYWpySFFqYV9CeUhRIikuTGFsTFcoRkJ2THJsOHYgKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0JkcWpySF95cmpyQnlfRjhRRAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2o3anVfTDhERDh2X1FIdEJIeXIoIi4uL2I4UVdGYThiL2I4UVdGYThiX2xEX2FqckhRamFfeThRci5kZWQiLCAicWxPX2FqckhRamFfQnlIUV95OFFyIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9qeWxMX0Y4UURfeUJvRGxyKCcuLi9iOFFXRmE4Yi9iOFFXRmE4Yl9sRF9hanJIUWphX3k4UXIuZGVkJywgJ3FsT19hanJIUWphX0J5SFFfeThRcicsICdCZHFqckhfeXJqckJ5X0Y4UUQnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRkJ2THJsOHYgOGRIdl9xOGJ2YThqcV9EOHFqYShxOExfbHEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjZHFGX2xxJykuT2phKHE4TF9scSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI0Q4cWphX3E4YnZhOGpxJykuRDhxamEoJ3llOGInKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICA8L3lMUWxkcj4KCgogICAgICAgICAgICAgICAgICAgICAgICA8eXJSYUg+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLjQ4ZEJkNGp2SGFfYkZ7cWx5ZGFqUjogdjh2SDtvOFFxSFE6eThhbHEgbSAjbXpMO2Q4eWxybDh2OkZsdUhxO2FIRnI6Q20lO3I4ZDpLbSU7Uy1sdnFIdTpLVWhnaHpYTmhnO2VIbG5lcjpVQ21kdTtEalFubHYtcjhkOi1nbWR1O2JscXJlOlVDbWR1O0RqUW5sdi1hSEZyOkNtZHU7OGRqTGxyUjouZztGbGFySFE6amFkZWooOGRqTGxyUj1nbSk7b2pMV25ROEJ2cTpCUWEoJy4uL1FIeThCUUxIeS9sRGpuSHkveWRsdnZIUS5ubEYnKSB2OC1RSGRIanI7fQoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmpPLXJqb3kgYWx7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZqTy1yam95IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOFFxSFEtbzhycjhEOiBtZHUgeThhbHEgI0hxSHFIcTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmpPLXJqb3kgYWwgaiB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZqTy1yam95PmFsPmogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRqcXFsdm4tcjhkOiBLZHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGpxcWx2bi1vOHJyOEQ6IEtkdTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHZILWVIbG5lcjogVUNkdTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmpvLWJscW5IciAucmpvLUw4dnJIdnIgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG84UXFIUTogI0hxSHFIcSBVZHUgeThhbHEgI1BQUGpQajsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvakxXblE4QnZxOiAjRkZGOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZqTy1yam95Pi5qTHJsT0g+aiwgLnZqTy1yam95Pi5qTHJsT0g+ajplOE9IUSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDhhOFE6ICNDQ0M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEJReThROiBxSEZqQmFyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9qTFduUThCdnEtTDhhOFE6ICNIcUhxSHE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmpPLXJqb3k+YWw+ansKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMOGE4UTogI21tenpMTDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52ak8tcmpveT5hbD5qLCAudmpPLWRsYWF5PmFsPmp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGpRbmx2LVFsbmVyOiBtZHU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmpPPmFsPmo6ZThPSFEgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJIdXItcUhMOFFqcmw4djogdjh2SDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMOGE4UTogI21tbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvakxXblE4QnZxLUw4YThROiAjSHFIcUhxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJqby1ibHFuSHIgLnJqby1MOHZySHZyewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOFFxSFE6VWR1IHk4YWxxICNxWHFocU47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLmQ4eXJfREhyansKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGpRbmx2OiBtIG0gbWR1IG07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp5anY3alIganFxIEx5eSBGOFEgRjhRRCBvOHFRSFEqLwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIC5GOFFESDguRjhRREg4LVFIdnFIUSAuRjhRREg4LUw4YUJEdjphanlyLThGLXJSZEggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkanFxbHZuLVFsbmVyOiBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOFFxSFE6IFVkdSB5OGFscTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5GOFFESDguRjhRREg4LVFIdnFIUSAuRjhRREg4LUw4YUJEdjpGbFF5ci04Ri1yUmRIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRqcXFsdm4tYUhGcjogbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG84UXFIUTogVWR1IHk4YWxxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuRjhRREg4LkY4UURIOC1RSHZxSFEgLkY4UURIOC1MOGFCRHYgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRqcXFsdm46IG0gaGR1OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhOGpyOiBhSEZyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERqdS1ibHFyZTogdjh2SDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYUh1LXFsUUhMcmw4djogTDhhQkR2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG84UXFIUTogVWR1IHk4YWxxOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSovCiAgICAgICAgICAgICAgICAgICAgICAgIDwveXJSYUg+CiAgICAgICAgICAgICAgICAgICAgPC9lSGpxPgoKICAgICAgICAgICAgICAgICAgICA8bzhxUiB5clJhSD0ib2pMV25ROEJ2cS1MOGE4UTogYmVsckg7Ij4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsdmRCciByUmRIPSJlbHFxSHYiIHZqREg9IlFIN0hMcl84ZHJfYlEiIGxxPSJRSDdITHJfOGRyX2JRIiBPamFCSD0iPD9kZWQgSExlOCAkb09qYUJIX3FIcmpsYXlbbV1bJ1FIN0hMcl84ZHJfYlEnXTsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICA8bHZkQnIgclJkSD0iZWxxcUh2IiB2akRIPSJRSDdITHJfOGRyX0J5SFEiIGxxPSJRSDdITHJfOGRyX0J5SFEiIE9qYUJIPSI8P2RlZCBITGU4ICRvT2phQkhfcUhyamxheVttXVsnUUg3SExyXzhkcl9CeUhRJ107ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGx2ZEJyIHJSZEg9ImVscXFIdiIgdmpESD0iUUg3SExyb184ZHJfYlEiIGxxPSJRSDdITHJvXzhkcl9iUSIgT2phQkg9Ijw/ZGVkIEhMZTggJG9PamFCSF9xSHJqbGF5W21dWydRSDdITHJvXzhkcl9iUSddOyA/PiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsdmRCciByUmRIPSJlbHFxSHYiIHZqREg9IlFIN0hMcm9fOGRyX0J5SFEiIGxxPSJRSDdITHJvXzhkcl9CeUhRIiBPamFCSD0iPD9kZWQgSExlOCAkb09qYUJIX3FIcmpsYXlbbV1bJ1FIN0hMcm9fOGRyX0J5SFEnXTsgPz4iPgoKICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iTDh2ckh2ci1ibHFuSHJ5IiB5clJhSD0ib2pMV25ROEJ2cS1MOGE4UTogYmVsckg7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsdmRCciByUmRIPSJlbHFxSHYiIHZqREg9ImJGX09sSGJfclJkSCIgbHE9ImJGX09sSGJfclJkSCIgT2phQkg9Ijw/ZGVkIEhMZTggJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydiRl9PbEhiX3JSZEgnXTsgPz4iPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gbHE9ImxxX1FIeUJhciIgTGFqeXk9IjQ4ZEJkNGp2SGFfYkYiPjwvcWxPPgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKEhEZHJSKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRibHFuSHJfZUhqcV9MOGE4USA9ICdxalFXLVJIYWE4Yic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddID09ICdVJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRibHFuSHJfZUhqcV9MOGE4USA9ICduUUhIdic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddID09ICdLJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRibHFuSHJfZUhqcV9MOGE4USA9ICdvYUJIJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10gPT0gJ1gnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJscW5Icl9lSGpxX0w4YThRID0gJzhRanZuSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddID09ICdoJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRibHFuSHJfZUhqcV9MOGE4USA9ICduUUhIdic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddID09ICdDJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRibHFuSHJfZUhqcV9MOGE4USA9ICdEam5IdnJqJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10gPT0gJ04nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJscW5Icl9lSGpxX0w4YThRID0gJ3FqUVctUkhhYThiJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10gPT0gJ2cnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJscW5Icl9lSGpxX0w4YThRID0gJ29hQkgtYmVsckgnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYWpySHlyX3lyanJCeV9xSHJqbGF5W21dWyd5cmpyQnknXSA9PSAneicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYmxxbkhyX2VIanFfTDhhOFEgPSAnb2FCSC1iZWxySCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddID09ICdQJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRibHFuSHJfZUhqcV9MOGE4USA9ICdEam5IdnJqJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10gPT0gJ1VtJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRibHFuSHJfZUhqcV9MOGE4USA9ICduUUhIdic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddID09ICdVVScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYmxxbkhyX2VIanFfTDhhOFEgPSAnblFISHYnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYWpySHlyX3lyanJCeV9xSHJqbGF5W21dWyd5cmpyQnknXSA9PSAnVUsnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJscW5Icl9lSGpxX0w4YThRID0gJzhRanZuSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddID09ICdVWCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYmxxbkhyX2VIanFfTDhhOFEgPSAnOFFqdm5IJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10gPT0gJ1VoJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRibHFuSHJfZUhqcV9MOGE4USA9ICdvOHZxbC1vYUJIJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10gPT0gJ1VDJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRibHFuSHJfZUhqcV9MOGE4USA9ICdvOHZxbC1vYUJIJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10gPT0gJ1VOJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRibHFuSHJfZUhqcV9MOGE4USA9ICdxalFXLVJIYWE4Yic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iUThiLUZhQmxxIiB5clJhSD0ib2pMV25ROEJ2cS1MOGE4UTogYmVsckg7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tPHFsTyBMYWp5eT0ieWRqdmgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJMOHZySHZyLWJscW5IcnkgYWxuZXItblFqUiIgeXJSYUg9IkRqUW5sdjogVW1kdSBtZHUgVW1kdSBtZHU7IGRqcXFsdm46IG1kdSBtZHUgbWR1IG1kdTsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iYmxxbkhyLWVIanEgPD9kZWQgSExlOCAkYmxxbkhyX2VIanFfTDhhOFE7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZVg+PD9kZWQgSExlOCAkb09qYUJIX3FIcmpsYXlbbV1bJ3lySGRfdmpESCddOyA/PjwvZVg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdk4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4tLT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJROGItRmFCbHEiIHlyUmFIPSJvakxXblE4QnZxLUw4YThROiBiZWxySDsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InlkanZVSyI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJyam8tYmxxbkhyIiB5clJhSD0iRGpRbmx2OiBVbWR1IG1kdSBVbWR1IG1kdTsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhIExhanl5PSJ2ak8gdmpPLXJqb3kiIGxxPSJEUndqb1UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbCBMYWp5eT0iPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoSERkclIoJF81aXhKaTl3WydqX3Jqb19Eamx2J10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJ2pMcmxPSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+Ij48aiBlUUhGPSIjcmpvLXlyanJCeSI+PGwgTGFqeXk9ImxMOHYtZEh2TGxhIj48L2w+IDlyanJCeTwvaj48L2FsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbCBMYWp5eT0iPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoIUhEZHJSKCRfNWl4Smk5d1snal9yam9fRGpsdiddKSAmJiAkXzVpeEppOXdbJ2pfcmpvX0RqbHYnXSA9PSAncmpvLWE4bnknKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJ2pMcmxPSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+IGVscUgiPjxqIGVRSEY9IiNyam8tYThueSI+PGwgTGFqeXk9ImxMOHYtYWx5ci1qYXIgIj48L2w+IFY4bnkgPC9qPjwvYWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChMOEJ2cigkYmxEX1FROGFIX0J5SFF5KSAmJiAkYWpySHlyX3lyanJCeV9xSHJqbGF5W21dWyd5cmpyQnknXSA9PSAnZycgJiYgJExfQnlIUV9RSEZIUVFIcSAhPSAnVScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbD48aiBlUUhGPSIjcmpvLVFIRkhRUWphIj48bCBMYWp5eT0ibEw4di1uUThCZCAiPjwvbD4gNUhGSFFRamEgPC9qPjwvYWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFsIExhanl5PSI8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghSERkclIoJF81aXhKaTl3WydqX3Jqb19Eamx2J10pICYmICRfNWl4Smk5d1snal9yam9fRGpsdiddID09ICdyam8tckhEZGFqckgnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJ2pMcmxPSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChMOEJ2cigkckhEZGFqckhfcUhyamxheSkgPD0gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICJlbHFIIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4iPjxqIGVRSEY9IiNyam8tckhEZGFqckgiPjxsIExhanl5PSJsTDh2LUZsYUgtamFyIj48L2w+IDw/ZGVkIEhMZTggJGx2cUh1X0RqeXJIUV9xSHJqbGF5W21dWydsdnFIdV9EanlySFEnXTsgPz4gLSB3SERkYWpySDwvaj48L2FsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbCBMYWp5eT0iPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoIUhEZHJSKCRfNWl4Smk5d1snal9yam9fRGpsdiddKSAmJiAkXzVpeEppOXdbJ2pfcmpvX0RqbHYnXSA9PSAncmpvLUY4UUR5JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICdqTHJsT0gnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoTDhCdnIoJGRRSE9sOEJ5X3FSdmpEbExfRjhRRHkpIDw9IG0gJiYgTDhCdnIoJHlySGRfcVJ2akRsTF9GOFFEeSkgPD0gbSAmJiBMOEJ2cigkZFFIT2w4QnlfeXJqcmxMX0Y4UUR5KSA8PSBtICYmIEw4QnZyKCR5ckhkX3lyanJsTF9GOFFEeSkgPD0gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICJlbHFIIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4iPjxqIGVRSEY9IiNyam8tRjhRRHkiPjxsIExhanl5PSJsTDh2LUZsYUgtamFyIj48L2w+IDM4UUR5PC9qPjwvYWw+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbCBMYWp5eT0iPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoIUhEZHJSKCRfNWl4Smk5d1snal9yam9fRGpsdiddKSAmJiAkXzVpeEppOXdbJ2pfcmpvX0RqbHYnXSA9PSAncmpvLUZsYUh5JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICdqTHJsT0gnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PiI+PGogZVFIRj0iI3Jqby1GbGFIeSI+PGwgTGFqeXk9ImxMOHYtRmxhSC1qYXIiPjwvbD4gM2xhSHk8L2o+PC9hbD4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFsIExhanl5PSI8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghSERkclIoJF81aXhKaTl3WydqX3Jqb19Eamx2J10pICYmICRfNWl4Smk5d1snal9yam9fRGpsdiddID09ICdMOERESHZyeS1kOHlyJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICdqTHJsT0gnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PiI+PGogZVFIRj0iI0w4RERIdnJ5LWQ4eXIiPjxsIExhanl5PSJsTDh2LUw4RERIdnJ5Ij48L2w+ICBHOERESHZyeTwvaj48L2FsPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWwgTGFqeXk9Ijw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCFIRGRyUigkXzVpeEppOXdbJ2pfcmpvX0RqbHYnXSkgJiYgJF81aXhKaTl3WydqX3Jqb19Eamx2J10gPT0gJ3Jqby1yanlXeScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSExlOCAnakxybE9IJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCR2OF9yanlXYWx5cl9sdkY4IDw9IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSExlOCAiZWxxSCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+Ij48aiBlUUhGPSIjcmpvLXJqeVd5Ij48bCBMYWp5eT0ibEw4di1yanlXeSI+PC9sPiB3anlXeTwvaj48L2FsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbCBMYWp5eT0iPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoIUhEZHJSKCRfNWl4Smk5d1snal9yam9fRGpsdiddKSAmJiAkXzVpeEppOXdbJ2pfcmpvX0RqbHYnXSA9PSAncmpvLVE4YUh5JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICdqTHJsT0gnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PiI+PGogZVFIRj0iI3Jqby1ROGFIeSI+PGwgTGFqeXk9ImxMOHYtblE4QmQiPjwvbD4gNUh5ZDh2eWxvYUggNThhSHk8L2o+PC9hbD4KCgoKCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFsIExhanl5PSI8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghSERkclIoJF81aXhKaTl3WydqX3Jqb19Eamx2J10pICYmICRfNWl4Smk5d1snal9yam9fRGpsdiddID09ICd2OHJsRlInKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJ2pMcmxPSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+IGVscUgiPjxqIGVRSEY9IiN2OHJsRlIiPjxsIExhanl5PSIgbEw4di1Idk9IYThkSC1qYXIiPjwvbD4gRWpsYXk8L2o+PC9hbD4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLTxhbCBMYWp5eT0iPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoIUhEZHJSKCRfNWl4Smk5d1snal9yam9fRGpsdiddKSAmJiAkXzVpeEppOXdbJ2pfcmpvX0RqbHYnXSA9PSAncmpvLWxET2phQkh5JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICdqTHJsT0gnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PiI+PGogZVFIRj0iI3Jqby1sRE9qYUJIeSI+PGwgTGFqeXk9ImxMOHYtcmUtYWx5ciI+PC9sPiBadnFIdSBFanlySFEgLSA8P2RlZCBITGU4ICRsdnFIdV9EanlySFFfcUhyamxheVttXVsnbHZxSHVfRGp5ckhRJ107ID8+PC9qPjwvYWw+LS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWwgTGFqeXk9Ijw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCFIRGRyUigkXzVpeEppOXdbJ2pfcmpvX0RqbHYnXSkgJiYgJF81aXhKaTl3WydqX3Jqb19Eamx2J10gPT0gJ0w4RERIdnJ5LWQ4eXInKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJ2pMcmxPSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+Ij48aiBlUUhGPSIjSThRVzNhOGItVmx2V2x2biIgbHE9InllOGJfYWx5ciI+PGwgTGFqeXk9ImxMOHYtTDhEREh2cnkiPjwvbD5JOFFXM2E4YiBWbHZXbHZuPC9qPjwvYWw+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGFsIExhanl5PSI8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghSERkclIoJF81aXhKaTl3WydqX3Jqb19Eamx2J10pICYmICRfNWl4Smk5d1snal9yam9fRGpsdiddID09ICd0QkhRUi15SExybDh2LWQ4eXInKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJ2pMcmxPSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+Ij48aiBlUUhGPSIjdEJIUVIteUhMcmw4di1kOHlyIj48bCBMYWp5eT0ibEw4di1MOERESHZyeSI+PC9sPnhCSFFSIDlITHJsOHY8L2o+PC9hbD4KIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InJqby1MOHZySHZyIiB5clJhSD0iIiA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0icmpvLWRqdkggPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoSERkclIoJF81aXhKaTl3WydqX3Jqb19Eamx2J10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJ2pMcmxPSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+IiBscT0icmpvLXlyanJCeSIgeXJSYUg9IkRqUW5sdjogVW1kdSBVbWR1IFVtZHUgVW1kdTsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tICA8cWxPIExhanl5PSJROGItRmFCbHEiPjxxbE8gTGFqeXk9InlkanZVSyI+PC9xbE8+PC9xbE8+IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJROGItRmFCbHEiIHlyUmFIPSJEalFubHYtbzhycjhEOiBOZHU7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InlkanZOIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJROGItRmFCbHEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJ5ZGp2TiI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iIExhSGpRRmx1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWggTGFqeXk9ImRCYWEtYUhGciI+PD9kZWQgSExlOCAkb09qYUJIX3FIcmpsYXlbbV1bJ3lySGRfdmpESCddOyA/PiAtIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eXJROHZuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSExlOCAkYWpySHlyX3lyanJCeV9xSHJqbGF5W21dWyd5cmpyQnknXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChIRGRyUigkYWpySHlyX3lyanJCeV9xSHJqbGF5W21dWyd5cmpyQnknXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICc8eWRqdiBMYWp5eT0ickh1ci1ialF2bHZuIj40SHZxbHZuPC95ZGp2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddID09ICdVJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJzx5ZGp2IExhanl5PSJySHVyLXlCTExIeXkiPkFkZFE4T0hxPC95ZGp2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddID09ICdLJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJzx5ZGp2IExhanl5PSJySHVyLWx2RjgiPml5TGphanJIPC95ZGp2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddID09ICdYJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJzx5ZGp2IExhanl5PSJySHVyLUhRUThRIj41SDdITHJIcTwveWRqdj4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYWpySHlyX3lyanJCeV9xSHJqbGF5W21dWyd5cmpyQnknXSA9PSAnaCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICc8eWRqdiBMYWp5eT0ickh1ci15QkxMSHl5Ij5pdnEgankgamRkUThPamE8L3lkanY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10gPT0gJ0MnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSExlOCAnPHlkanYgTGFqeXk9InJIdXItSFFROFEiPml2cSBqeSBRSDdITHJIcTwveWRqdj4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYWpySHlyX3lyanJCeV9xSHJqbGF5W21dWyd5cmpyQnknXSA9PSAnTicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICc8eWRqdiBMYWp5eT0ickh1ci1sdk9IUXlIIj5UOGFxPC95ZGp2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddID09ICdnJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJzx5ZGp2IExhanl5PSJySHVyLWx2RjgiPjVIRkhRUUhxIChHOHZ5QmFyKSAtIFp2ZFE4TEh5eTwveWRqdj4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYWpySHlyX3lyanJCeV9xSHJqbGF5W21dWyd5cmpyQnknXSA9PSAneicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICc8eWRqdiBMYWp5eT0ickh1ci1sdkY4Ij41SEZIUVFIcSAoRzh2eUJhcikgLSBHYTh5SHE8L3lkanY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10gPT0gJ1AnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSExlOCAnPHlkanYgTGFqeXk9InJIdXItSFFROFEiPjM4UUxIIEdhOHlIcTwveWRqdj4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYWpySHlyX3lyanJCeV9xSHJqbGF5W21dWyd5cmpyQnknXSA9PSAnVW0nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSExlOCAnPHlkanYgTGFqeXk9InJIdXIteUJMTEh5eSI+QWRkUThPSCA9PiBKeUhRPC95ZGp2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddID09ICdVVScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICc8eWRqdiBMYWp5eT0ickh1ci15QkxMSHl5Ij5BZGRROE9IcSBibHJlIEY4UWJqUXE8L3lkanY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10gPT0gJ1VLJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJzx5ZGp2IExhanl5PSJySHVyLUhRUThRIj41SDdITHJIcSBibHJlIEY4UWJqUXE8L3lkanY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10gPT0gJ1VYJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJzx5ZGp2IExhanl5PSJySHVyLUhRUThRIj41SDdITHJIcSBibHJlIG9qTFdialFxPC95ZGp2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddID09ICdVaCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICc8eWRqdiBMYWp5eT0ickh1ciI+OVdsZEhxPC95ZGp2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddID09ICdVQycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICc8eWRqdiBMYWp5eT0ickh1ciI+MEE8L3lkanY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10gPT0gJ1VOJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJzx5ZGp2IExhanl5PSJySHVyLWJqUXZsdm4iPk1IYUhuanJIPC95ZGp2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddID09ICdVZycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICc8eWRqdiBMYWp5eT0ickh1ci1ialF2bHZuIj4zYUh1bEZhOGI8L3lkanY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10gPT0gJ1V6JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJzx5ZGp2IExhanl5PSJySHVyLWJqUXZsdm4iPkF5eWxudkhxIHc4IEp5SFE8L3lkanY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10gPT0gJ1VQJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJzx5ZGp2IExhanl5PSJySHVyLWJqUXZsdm4iPjU4QnZxIDU4b2x2PC95ZGp2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddID09ICdLbScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICc8eWRqdiBMYWp5eT0ickh1ci1ialF2bHZuIj5WanJIUWphIDNhOGIgLSBadmRROExIeXk8L3lkanY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10gPT0gJ0tVJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJzx5ZGp2IExhanl5PSJySHVyLWJqUXZsdm4iPlZqckhRamEgM2E4YiAtIEdhOHlIcTwveWRqdj4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYWpySHlyX3lyanJCeV9xSHJqbGF5W21dWyd5cmpyQnknXSA9PSAnS0snKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSExlOCAnPHlkanYgTGFqeXk9InJIdXIteUJMTEh5eSI+VmpySFFqYSAzYThiIC0gQWRkUThPSHE8L3lkanY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10gPT0gJ0tYJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJzx5ZGp2IExhanl5PSJySHVyLWJqUXZsdm4iPlZqckhRamEgM2E4YiAtIDVIN0hMckhxPC95ZGp2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddID09ICdLaCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICc8eWRqdiBMYWp5eT0ickh1ci1IUVE4USI+VmpySFFqYSAzYThiIC0gNUg3SExyIGJscmUgTGE4eUhxPC95ZGp2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3lyUTh2bj4KCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tPG9CcnI4diBscT0ib3J2X2FsdldfYjhRV0ZhOGJfYThuIiByUmRIPSJ5Qm9EbHIiIExhanl5PSJvcnYgb3J2LVE4QnZxLURsdiBvcnYgb3J2LWJqUXZsdm4gIj48eWRqdj48bCBMYWp5eT0ibEw4di1hbHlyIj48L2w+PC95ZGp2Pjwvb0Jycjh2Pi0tPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2VoPgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdksiPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkUWx2cl9RKCRvT2xxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhMZTggIisrKysrKysrKysrKysrKysrPT09IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRRbHZyX1EoJGpfeXJIZF9qUVEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSExlOCAkeXJIZF9qTExIeXk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2E4TFdfSHFscl95cmpyQnkgPSBqUVFqUihVLCBoLCBDLCBVVSwgVUMpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChIRGRyUigkeXJIZF9qTExIeXkpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRqTHJsT0hfQnlIUV9scSA9ICRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnQnlIUV9scSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxSGRyX2xxID0gJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydxSGRyX2xxJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGpMcmxPSF9ibERfUThhSF9scSA9ICRfOWk5OVpjMFsnakxybE9IX2JsRF9ROGFIX2xxJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRvT2phQkhfcUhyamxheVttXVsnZFE4TEh5eUhxX0J5SFEnXSA9PSBVICYmICRibERfcUhyamxheVttXVsnal95cmpyQnknXSAhPSBVbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkamFRSGpxUl9kUThMSHl5SHFfQnlIUXkgPSAkSThRV0ZhOGItPm5Icl9JWkU5cmpyQnlfQWFhX0p5SFFfQUxybE9IKCRibERfcUhyamxheVttXVsnb0JsYXFIUV9scSddLCAkYmxEX3FIcmpsYXlbbV1bJ1FITDhRcV95SHJfbHEnXSwgJG9PbHEpOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRqYVFIanFSX2RROExIeXlIcV9sdkY4ID0galFRalJfTDhhQkR2KCRqYVFIanFSX2RROExIeXlIcV9CeUhReSwgJ0J5SFFfbHEnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKGx2X2pRUWpSKCRqTHJsT0hfQnlIUV9scSwgJGphUUhqcVJfZFE4TEh5eUhxX2x2RjgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBVOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlySGRfakxMSHl5ID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKEhEZHJSKCRqYVFIanFSX2RROExIeXlIcV9CeUhReSkgJiYgSERkclIoJHlySGRfakxMSHl5KSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kbkhyX1E4YUggPSAkSTU4YUgtPm5Ickk4UVdGYThiQUp5SFFBeXlsbnZIcTZCbGFxSFFNSHJqbGF5KCRqTHJsT0hfYmxEX1E4YUhfbHEsICRqTHJsT0hfQnlIUV9scSwgJHFIZHJfbHEpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5Icl9ROGFIID0gJEk1OGFILT5uSHJJOFFXRmE4YkFKeUhRQXl5bG52SHE2QmxhcUhRTUhyamxheSgkakxybE9IX2JsRF9ROGFIX2xxLCAkakxybE9IX0J5SFFfbHEsICRibERfcUhyamxheVttXVsnb0JsYXFIUV9scSddLCAkYmxEX3FIcmpsYXlbbV1bJ1FITDhRcV95SHJfbHEnXSwgJG9PbHEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoSERkclIoJG5Icl9ROGFIKSAmJiAkYmxEX3FIcmpsYXlbbV1bJ2pfeXJqckJ5J10gIT0gVW0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuSHJfUThhSCA9ICRJNThhSC0+bkhySThRV0ZhOGJBSnlIUUF5eWxudkhxNkJsYXFIUU1IcmpsYXlfQXlsbnZfcjhfQnlIUSgkakxybE9IX2JsRF9ROGFIX2xxLCAkakxybE9IX0J5SFFfbHEsICRibERfcUhyamxheVttXVsnb0JsYXFIUV9scSddLCAkYmxEX3FIcmpsYXlbbV1bJ1FITDhRcV95SHJfbHEnXSwgJG9PbHEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChIRGRyUighJG5Icl9ROGFIKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlySGRfakxMSHl5ID0gVTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5ckhkX2pMTEh5eSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbEYoJG9CbGFxSFFfcUhyamxheVttXVsnYjhRV0ZhOGJfclJkSCddID09IEsgJiYgJGpMcmxPSF9ibERfUThhSF9scSA9PSAnJyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAkeXJIZF9qTExIeXkgPSBVOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkb0JsYXFIUV9xSHJqbGF5W21dWydiOFFXRmE4Yl9yUmRIJ10gPT0gSyAmJiAkakxybE9IX2JsRF9ROGFIX2xxID09ICdtJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlySGRfakxMSHl5ID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbEQzbGFIcXlfVkJ5SFF5ID0gJEk1OGFILT5uSHJfYjhRV0ZhOGJfeXJIZF9qTExIeXlfVkJ5SFF5KCRkbHEsICRvbHEsICRvT2xxLCAkbERfbHEsICRsRF9RbHEsICRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnQnlIUV9scSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghSERkclIoJGxEM2xhSHF5X1ZCeUhReSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9qTExIeXkgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAobHl5SHIoJF8yaXdbJ0hxbHJfeXJIZF9qTExIeXknXSkgJiYgJF8yaXdbJ0hxbHJfeXJIZF9qTExIeXknXSA9PSBLKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlySGRfakxMSHl5ID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoIWx2X2pRUWpSKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddLCAkb2E4TFdfSHFscl95cmpyQnkpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkeXJIZF9qTExIeXkgPT0gVSAmJiBsdl9qUVFqUigkb09scSwgJGpfeXJIZF9qUVEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkZGpRamFhSGFfeXJIZF9RQnZ2bHZuID09IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJGphUUhqcVJfQnlIUV9kUThMSHl5SHEgPSAkSThRV0ZhOGItPm5Icl9JWkU5cmpyQnlfNlpxX0paTSgkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ0J5SFFfbHEnXSwgJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydROGFIJ10sICRvbHEsICRvT2xxLCAkbERfUWxxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbEYgKEw4QnZyKCRqYVFIanFSX0J5SFFfZFE4TEh5eUhxKSA8PSBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoTDhCdnIoJGFqckhRamFfRmE4Yl95ckhkeV9sdmRROExIeXkpIDw9IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvQnJyOHYgTGFqeXk9Im9CcnI4dm9hbHZXIiB5clJhSD0iICBGOHZyLXlsU0g6IFVVZHU7IiBlUUhGPSIjRDhxamFfeXJqckJ5X3FqeWVvOGpRcVUiICBxanJqLXI4bm5hSD0iRDhxamEiIHJSZEg9Im9CcnI4diIgTGFqeXk9IiAgIj4gPHlkanYgeXJSYUg9IiAgICBEalFubHYtUWxuZXI6IHpkdTsiPiA8bERuIHlRTD0iLi4vUUh5OEJRTEh5L2xEam5IeS85bG52LThGRi5kdm4iIHlyUmFIPSJlSGxuZXI6IFVoZHU7IERqUW5sdi1yOGQ6IC1oZHU7IERqUW5sdi1hSEZyOiBoZHU7Ij48L3lkanY+IDlsbnYtOEZGPC9vQnJyOHY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tICA8cWxPIExhanl5PSJ5ZGp2TiI+PC9xbE8+IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJ5ZGp2TiI+PC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8cWxPIExhanl5PSJROGItRmFCbHEiPjxxbE8gTGFqeXk9InlkanZVSyI+PC9xbE8+PC9xbE8+IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoTDhCdnIoJGFqckhRamFfRmE4Yl95ckhkeSkgPiBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmpvX2pMcmxPSF9hanJIUWphID0gImpMcmxPSCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmpvX2pMcmxPSF84cmVIUSA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJqb19qTHJsT0hfYWpySFFqYSA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJqb19qTHJsT0hfOHJlSFEgPSAiakxybE9IIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJyam8tYmxxbkhyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCYSBMYWp5eT0idmpPIHZqTy1yam95IiBscT0iRFJ3am9LIj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFsIExhanl5PSI8P2RlZCBITGU4ICRyam9fakxybE9IXzhyZUhROyA/PiIgbHE9ImFsX3lyanJCeV9hOG55Ij48aiBlUUhGPSIjeXJqckJ5X2E4bnkiPjxsIExhanl5PSIgbEw4di1hbHlyIj48L2w+IDlyanJCeSBWOG55PC9qPjwvYWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFsIGxxPSJhbF95cmpyQnlfUUhMSHZyIj48aiBlUUhGPSIjeXJqckJ5X1FITEh2ciI+PGwgTGFqeXk9ImxMOHYtTDhueSI+PC9sPiA1SExIdnIgSmRxanJIeTwvaj48L2FsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbCBscT0iYWxfYjhRV0ZhOGJfYThueSI+PGogZVFIRj0iI2I4UVdGYThiX2E4bnkiPjxsIExhanl5PSIgbEw4di1hbHlyIj48L2w+IEk4UVdGYThiIFY4bnk8L2o+PC9hbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChMOEJ2cigkYWpySFFqYV9GYThiX3lySGR5KSA+IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFsIGxxPSJhbF9hanJIUWphX0ZhOGIiIExhanl5PSI8P2RlZCBITGU4ICRyam9fakxybE9IX2FqckhRamE7ID8+Ij48aiBlUUhGPSIjcWxPX3Jqb19hanJIUWphX0ZhOGIiPjxsIExhanl5PSJsTDh2LWJRSHZMZSI+PC9sPiBWanJIUWphIDNhOGI8L2o+PC9hbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0icmpvLUw4dnJIdnIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InJqby1kanZIICIgbHE9InlyanJCeV9RSExIdnIiIHlyUmFIPSJEalFubHY6IFVtZHUgVW1kdSBVbWR1IFVtZHU7Ij4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9ImQ4eXJfYWx5ciBMYUhqUUZsdSIgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRiOFFXRmE4Yl9hOG5fcUhyamxheSA9ICRJOFFXRmE4Yi0+bkhyX0laRTlyanJCeV82WnFfNVpNKCRvbHEsICRsRF9RbHEpOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoTDhCdnIoJGI4UVdGYThiX2E4bl9xSHJqbGF5KSA8PSBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tPHFsTyBMYWp5eT0iZDh5cl9vYThMVyBMYUhqUUZsdSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlTiBMYWp5eT0iIj41SEw4UXF5IEp2ak9qbGFqb2FIITwvZU4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+LS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEY4USAoJGwgPSBtOyAkbCA8IEw4QnZyKCRiOFFXRmE4Yl9hOG5fcUhyamxheSk7ICRsKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnUThhSCddICE9IFUgJiYgJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydROGFIJ10gIT0gSykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE9IUWxGUl92OHJsRmxManJsOHZfSHVseXJ5ID0gJEk4UVdGYThiLT5uSHJJOFFXRmE4Yl9aRV8wOHJsRmxManJsOHZfNlI5cmpyQnlacSgnOXJqckJ5JywgJGI4UVdGYThiX2E4bl9xSHJqbGF5WyRsXVsnbHEnXSwgJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydROGFIJ10sICRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnQnlIUV9scSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2OF92OHJsRmxManJsOHZfSHVseXJ5ID0gTDhCdnIoJE9IUWxGUl92OHJsRmxManJsOHZfSHVseXJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChIRGRyUigkdjhfdjhybEZsTGpybDh2X0h1bHlyeSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSThRV0ZhOGItPnlIcjRRODdITHJacSgkZGxxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSThRV0ZhOGItPnlIcjVIRkZFOHFCYUgoJzlyanJCeScpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRJOFFXRmE4Yi0+eUhyNUhGRlpxKCRiOFFXRmE4Yl9hOG5fcUhyamxheVskbF1bJ2xxJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRJOFFXRmE4Yi0+eUhySnlIUVpxKCRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnQnlIUV9scSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSThRV0ZhOGItPnlIckp5SFEyUThCZCgkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ1E4YUgnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEk4UVdGYThiLT55SHJHUUhqckhxQXIoTUF3aV93WkVpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYl9sRF92OHJsRmxManJsOHZfanFxID0gJEk4UVdGYThiLT5qcXFfYjhRV0ZhOGJfdjhybEZsTGpybDh2KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX3lySGRfcUhyamxheSA9ICRJNkJsYXFIUS0+bkhyX0k2QmxhcUhRWWphQkhfWnEoJGI4UVdGYThiX2E4bl9xSHJqbGF5WyRsXVsnb0JsYXFIUV9PamFCSF9scSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGp5eWxudkhxX0J5SFFfcUhyamxheSA9ICRKeUhRLT5uSHJKeUhRMGpESF82UlpxKCRiOFFXRmE4Yl9hOG5fcUhyamxheVskbF1bJ0xRSGpySHFfb1InXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRqeXlsdm5IcV9CeUhRID0gJGp5eWxudkhxX0J5SFFfcUhyamxheVttXVsnRnZqREgnXSAuICcgJyAuICRqeXlsbnZIcV9CeUhRX3FIcmpsYXlbbV1bJ2F2akRIJ107CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyR5bG52SHFfcWpySCA9IHFqckgoJ3EgRCBSJywgeXJRcjhybERIKCRiOFFXRmE4Yl9hOG5fcUhyamxheVskbF1bJ0xRSGpySHFfanInXSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbEYgKCRiOFFXRmE4Yl9hOG5fcUhyamxheVskbF1bJ3lyanJCeSddID09ICdVJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5cmpyQnkgPSAnPHlkanYgTGFqeXk9ImFqb0hhIGFqb0hhLXlCTExIeXkiPkFkZFE4T0hxPC95ZGp2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYjhRV0ZhOGJfYThuX3FIcmpsYXlbJGxdWyd5cmpyQnknXSA9PSAnSycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJqckJ5ID0gJzx5ZGp2IExhanl5PSJham9IYSBham9IYS1sdk9IUXlIIj5peUxqYWpySHE8L3lkanY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRiOFFXRmE4Yl9hOG5fcUhyamxheVskbF1bJ3lyanJCeSddID09ICdYJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5cmpyQnkgPSAnPHlkanYgTGFqeXk9ImFqb0hhIGFqb0hhLWxEZDhRcmp2ciI+NUg3SExySHE8L3lkanYnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlyanJCeSA9ICc8eWRqdiBMYWp5eT0iYWpvSGEgYWpvSGEtYmpRdmx2biI+NEh2cWx2bjwveWRqdic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJGI4UVdGYThiX2E4bl9xSHJqbGF5WyRsXVsneXJqckJ5J10gPT0gJ20nIHx8IEhEZHJSKCRiOFFXRmE4Yl9hOG5fcUhyamxheVskbF1bJ3lyanJCeSddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlyanJCeSA9ICc8byBMYWp5eT0ickh1ci1ialF2bHZuIj40SHZxbHZuPC9vPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGI4UVdGYThiX2E4bl9xSHJqbGF5WyRsXVsneXJqckJ5J10gPT0gJ1UnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJqckJ5ID0gJzxvIExhanl5PSJySHVyLXlCTExIeXkiPkFkZFE4T0hxPC9vPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGI4UVdGYThiX2E4bl9xSHJqbGF5WyRsXVsneXJqckJ5J10gPT0gJ0snKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJqckJ5ID0gJzxvIExhanl5PSJySHVyLWx2RjgiPml5TGphanJIcTwvbz4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRiOFFXRmE4Yl9hOG5fcUhyamxheVskbF1bJ3lyanJCeSddID09ICdYJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlyanJCeSA9ICc8byBMYWp5eT0ickh1ci1IUVE4USI+NUg3SExySHE8L28+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYjhRV0ZhOGJfYThuX3FIcmpsYXlbJGxdWyd5cmpyQnknXSA9PSAnaCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5cmpyQnkgPSAnPG8gTGFqeXk9InJIdXIteUJMTEh5eSI+aXZxIGp5IGpkZFE4T2phPC9vPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGI4UVdGYThiX2E4bl9xSHJqbGF5WyRsXVsneXJqckJ5J10gPT0gJ0MnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJqckJ5ID0gJzxvIExhanl5PSJySHVyLUhRUThRIj5pdnEgankgUUg3SExySHE8L28+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYjhRV0ZhOGJfYThuX3FIcmpsYXlbJGxdWyd5cmpyQnknXSA9PSAnTicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5cmpyQnkgPSAnPG8gTGFqeXk9InJIdXItbHZPSFF5SCI+VDhhcTwvbz4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRiOFFXRmE4Yl9hOG5fcUhyamxheVskbF1bJ3lyanJCeSddID09ICdnJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlyanJCeSA9ICc8byBMYWp5eT0ickh1ci1sdkY4Ij41SEZIUVFIcTwvbz4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRiOFFXRmE4Yl9hOG5fcUhyamxheVskbF1bJ3lyanJCeSddID09ICdnJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlyanJCeSA9ICc8byBMYWp5eT0ickh1ci1sdkY4Ij41SEZIUVFIcTwvbz4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRiOFFXRmE4Yl9hOG5fcUhyamxheVskbF1bJ3lyanJCeSddID09ICdQJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlyanJCeSA9ICc8byBMYWp5eT0ickh1ci1ialF2bHZuIj4zOFFMSCBHYTh5SHE8L28+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYjhRV0ZhOGJfYThuX3FIcmpsYXlbJGxdWyd5cmpyQnknXSA9PSAnVW0nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJqckJ5ID0gJzxvIExhanl5PSJySHVyLXlCTExIeXkiPkFkZFE4T0ggPT4gSnlIUTwvbz4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRiOFFXRmE4Yl9hOG5fcUhyamxheVskbF1bJ3lyanJCeSddID09ICdVVScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5cmpyQnkgPSAnPG8gTGFqeXk9InJIdXIteUJMTEh5eSI+QWRkUThPSHEgYmxyZSBGOFFialFxPC9vPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGI4UVdGYThiX2E4bl9xSHJqbGF5WyRsXVsneXJqckJ5J10gPT0gJ1VLJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlyanJCeSA9ICc8byBMYWp5eT0ickh1ci1IUVE4USI+NUg3SExySHEgYmxyZSBGOFFialFxPC9vPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGI4UVdGYThiX2E4bl9xSHJqbGF5WyRsXVsneXJqckJ5J10gPT0gJ1VYJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlyanJCeSA9ICc8byBMYWp5eT0ickh1ci1IUVE4USI+NUg3SExySHEgYmxyZSBvakxXYmpRcTwvbz4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRiOFFXRmE4Yl9hOG5fcUhyamxheVskbF1bJ3lyanJCeSddID09ICdVaCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5cmpyQnkgPSAnPG8gTGFqeXk9InJIdXIiPjlXbGRIcTwvbz4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRiOFFXRmE4Yl9hOG5fcUhyamxheVskbF1bJ3lyanJCeSddID09ICdVQycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5cmpyQnkgPSAnPG8gTGFqeXk9InJIdXIiPjBBPC9vPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGI4UVdGYThiX2E4bl9xSHJqbGF5WyRsXVsneXJqckJ5J10gPT0gJ1VOJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlyanJCeSA9ICc8byBMYWp5eT0ickh1ci1ialF2bHZuIj5NSGFIbmpySDwvbz4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRiOFFXRmE4Yl9hOG5fcUhyamxheVskbF1bJ3lyanJCeSddID09ICdVZycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5cmpyQnkgPSAnPG8gTGFqeXk9InJIdXItYmpRdmx2biI+M2FIdWxGYThiPC9vPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGI4UVdGYThiX2E4bl9xSHJqbGF5WyRsXVsneXJqckJ5J10gPT0gJ1V6JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlyanJCeSA9ICc8byBMYWp5eT0ickh1ci1ialF2bHZuIj5BeXlsbnZIcSByOCBCeUhRPC9vPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGI4UVdGYThiX2E4bl9xSHJqbGF5WyRsXVsneXJqckJ5J10gPT0gJ1VQJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlyanJCeSA9ICc8byBMYWp5eT0ickh1ci1ialF2bHZuIj41OEJ2cSA1OG9sdjwvbz4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRiOFFXRmE4Yl9hOG5fcUhyamxheVskbF1bJ3lyanJCeSddID09ICdLbScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5cmpyQnkgPSAnPG8gTGFqeXk9InJIdXItbHZGOCI+VmpySFFqYSAzYThiIC0gWnZkUThMSHl5PC9vPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGI4UVdGYThiX2E4bl9xSHJqbGF5WyRsXVsneXJqckJ5J10gPT0gJ0tVJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlyanJCeSA9ICc8byBMYWp5eT0ickh1ci15QkxMSHl5Ij5WanJIUWphIDNhOGIgLSBHYTh5SHE8L28+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYjhRV0ZhOGJfYThuX3FIcmpsYXlbJGxdWyd5cmpyQnknXSA9PSAnS0snKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJqckJ5ID0gJzxvIExhanl5PSJySHVyLXlCTExIeXkiPlZqckhRamEgM2E4YiAtIEFkZFE4T0hxPC9vPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJGI4UVdGYThiX2E4bl9xSHJqbGF5WyRsXVsneXJqckJ5J10gPT0gJ0tYJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlyanJCeSA9ICc8byBMYWp5eT0ickh1ci1IUVE4USI+VmpySFFqYSAzYThiIC0gNUg3SExySHE8L28+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkYjhRV0ZhOGJfYThuX3FIcmpsYXlbJGxdWyd5cmpyQnknXSA9PSAnS2gnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJqckJ5ID0gJzxvIExhanl5PSJySHVyLUhRUThRIj5WanJIUWphIDNhOGIgLSA1SDdITHIgYmxyZSBMYTh5SHE8L28+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJqckJ5ID0gJzxvIExhanl5PSJySHVyLWJqUXZsdm4iPjRIdnFsdm48L28+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iZDh5cl9vYThMVyBMYUhqUUZsdSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZU4+PGogZVFIRj0iIyI+PD9kZWQgSExlOCAkYjhRV0ZhOGJfYThuX3FIcmpsYXlbJGxdWydMOERESHZyJ107ID8+PC9qPjwvZU4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QmEgTGFqeXk9ImQ4eXJfREhyaiBMYUhqUUZsdSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFsIExhanl5PSIiPjx5ZGp2PjlsbnZIcSA2UjogPC95ZGp2PiA8aiBlUUhGPSIjIj48P2RlZCBITGU4ICRqeXlsdm5IcV9CeUhROyA/Pjwvaj48L2FsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbCA+PHlkanY+TWpySDogPC95ZGp2PiA8aiBlUUhGPSIjIj48P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExCUV9ROGJfcWpyaiA9ICRiOFFXRmE4Yl9hOG5fcUhyamxheVskbF1bJ0xRSGpySHFfanInXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxanJIID0gdkhiIE1qckh3bERIKCRMQlFfUThiX3FqcmopOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZIYl9xanJIID0gJHFqckgtPkY4UURqcignay1ELXEgVDpsJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyR2SGJfcWpySCA9ICRxanJILT5GOFFEanIoJ2stRC1xIFQ6bCcpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJHZIYl9xanJIOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz48L2o+PC9hbD4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFsICBMYWp5eT0iIj48eWRqdj45ckhkOiA8L3lkanY+PG8+PD9kZWQgSExlOCAkTF95ckhkX3FIcmpsYXlbbV1bJ3lySGRfdmpESCddOyA/Pjwvbz48L2FsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbD48eWRqdj45cmpyQnk6IDwveWRqdj48P2RlZCBITGU4ICR5cmpyQnk7ID8+PC9hbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQmE+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJyam8tZGp2SCA8P2RlZCBITGU4ICRyam9fakxybE9IXzhyZUhROyA/PiIgbHE9InlyanJCeV9hOG55Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iTDh2ckh2ci1vOHUgIiBscT0icWxPX3lyanJCeV9hOG55X2FseXIiIHlyUmFIPSJEalFubHY6IEttZHUgS21kdSBLbWR1IEttZHU7Ij48L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJyam8tZGp2SCIgbHE9ImI4UVdGYThiX2E4bnkiID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iTDh2ckh2ci1vOHUgIiBscT0icWxPX2E4bnlfYWx5ciIgeXJSYUg9IkRqUW5sdjogS21kdSBLbWR1IEttZHUgS21kdTsiPjwvcWxPPiAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0icmpvLWRqdkggPD9kZWQgSExlOCAkcmpvX2pMcmxPSF9hanJIUWphOyA/PiIgbHE9InFsT19yam9fYWpySFFqYV9GYThiIiA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9Ikw4dnJIdnItbzh1ICIgbHE9InFsT19hanJIUWphX0ZhOGIiIHlyUmFIPSJEalFubHY6IEttZHUgS21kdSBLbWR1IEttZHU7Ij48L3FsTz4gICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJyam8tZGp2SCA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghSERkclIoJF81aXhKaTl3WydqX3Jqb19Eamx2J10pICYmICRfNWl4Smk5d1snal9yam9fRGpsdiddID09ICdyam8tYThueScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSExlOCAnakxybE9IJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4gZWxxSCIgbHE9InJqby1hOG55IiB5clJhSD0iRGpRbmx2OiBVbWR1IFVtZHUgVW1kdSBVbWR1OyI+IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJROGItRmFCbHEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdk4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9IlE4Yi1GYUJscSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InlkanZOIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlaCBMYWp5eT0iZEJhYS1hSEZyIj5JOFFXRmE4YiA5cmpyQnkgIDwvZWg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdksiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvYThMV19IcWxyX3lyanJCeSA9IGpRUWpSKFUsIGgsIEMsIFVVLCBVQyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hMZTggJHlySGRfakxMSHl5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCFsdl9qUVFqUigkYWpySHlyX3lyanJCeV9xSHJqbGF5W21dWyd5cmpyQnknXSwgJG9hOExXX0hxbHJfeXJqckJ5KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkeXJIZF9qTExIeXkgPT0gVSAmJiBsdl9qUVFqUigkb09scSwgJGpfeXJIZF9qUVEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkZGpRamFhSGFfeXJIZF9RQnZ2bHZuID09IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJGphUUhqcVJfQnlIUV9kUThMSHl5SHEgPSAkSThRV0ZhOGItPm5Icl9JWkU5cmpyQnlfNlpxX0paTSgkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ0J5SFFfbHEnXSwgJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydROGFIJ10sICRvbHEsICRvT2xxLCAkbERfUWxxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbEYgKEw4QnZyKCRqYVFIanFSX0J5SFFfZFE4TEh5eUhxKSA8PSBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoTDhCdnIoJGFqckhRamFfRmE4Yl95ckhkeV9sdmRROExIeXkpIDw9IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvQnJyOHYgTGFqeXk9Im9CcnI4dm9hbHZXIiB5clJhSD0iICBGOHZyLXlsU0g6IFVVZHU7IiBlUUhGPSIjRDhxamFfeXJqckJ5X3FqeWVvOGpRcVUiICBxanJqLXI4bm5hSD0iRDhxamEiIHJSZEg9Im9CcnI4diIgTGFqeXk9IiAgIj4gPHlkanYgeXJSYUg9IiAgICBEalFubHYtUWxuZXI6IHpkdTsiPiA8bERuIHlRTD0iLi4vUUh5OEJRTEh5L2xEam5IeS85bG52LThGRi5kdm4iIHlyUmFIPSJlSGxuZXI6IFVoZHU7IERqUW5sdi1yOGQ6IC1oZHU7IERqUW5sdi1hSEZyOiBoZHU7Ij48L3lkanY+IDlsbnYtOEZGPC9vQnJyOHY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InlkanZOIj4KCgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iTDh2ckh2ci1vOHUgIiBscT0icWxPX2E4bnlfYWx5ciI+PC9xbE8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJyam8tZGp2SCA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghSERkclIoJF81aXhKaTl3WydqX3Jqb19Eamx2J10pICYmICRfNWl4Smk5d1snal9yam9fRGpsdiddID09ICdyam8tUUhGSFFRamEnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJ2pMcmxPSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+IiBscT0icmpvLVFIRkhRUWphIiB5clJhSD0iRGpRbmx2OiBVbWR1IFVtZHUgVW1kdSBVbWR1OyI+IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJMOHZySHZyLW84dSAiIGxxPSJxbE9fUUhGSFFRamFfYWx5ciI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJqb2FIIExhanl5PSJyam9hSCByam9hSC1RSHlkOHZ5bE9IIHJqb2FILW84UXFIUUhxIHJqb2FILXlyUWxkSHEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZUhqcT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMGpESAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSnlIUXZqREgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWpySAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTHJsOHYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvclE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZUhqcT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm84cVI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRibERfUVE4YUhfQnlIUXlLID0gJEk2QmxhcUhRLT5uSHJfYjhRV0ZhOGJfbERfQVE4YUh5NUhGSFFRSGFfNlI2T2xxNVpxKCRsRF9scSwgJGxEX1FscSwgJG9PbHEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hMZTggTDhCdnIoJGJsRF9RUThhSF9CeUhReUspOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2RRbHZyX1EoJGJsRF9RUThhSF9CeUhReUspOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoTDhCdnIoJGJsRF9RUThhSF9CeUhReUspID4gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRjhRICgkdSA9IG07ICR1IDwgTDhCdnIoJGJsRF9RUThhSF9CeUhReUspOyAkdSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFFIRkhRUWphX0J5SFFfbHZGOCA9ICRKeUhRLT5uSHJKeUhReV82UlpxKCRibERfUVE4YUhfQnlIUXlLWyR1XVsnQnlIUV9scSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxPjw/ZGVkIEhMZTggJHUgKyBVOyA/PjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT48P2RlZCBITGU4ICRRSEZIUVFqYV9CeUhRX2x2RjhbbV1bJ0Z2akRIJ10gLiAnICcgLiAkUUhGSFFRamFfQnlIUV9sdkY4W21dWydhdmpESCddIC4gJyAnIC4gJFFIRkhRUWphX0J5SFFfbHZGOFttXVsnRHZqREgnXTsgPz48L3JxPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxPjw/ZGVkIEhMZTggJFFIRkhRUWphX0J5SFFfbHZGOFttXVsnQnlIUXZqREgnXTsgPz48L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+PD9kZWQgSExlOCAkYmxEX1FROGFIX0J5SFF5S1skdV1bJ0xRSGpySHFfanInXTsgPz48L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvQnJyOHYgbHE9Ijw/ZGVkIEhMZTggJGxEX2xxIC4gJy0nIC4gJGxEX1FscSAuICctJyAuICRvT2xxIC4gJy0nIC4gJGJsRF9RUThhSF9CeUhReUtbJHVdWydCeUhRX2xxJ10gLiAnLScgLiAkYmxEX2xxOyA/PiIgclJkSD0ib0Jycjh2IiBMYWp5eT0ib3J2IG9ydi1ROEJ2cS1EbHYgb3J2LXFqdm5IUSBvcnZfTGE4eUhfUUhGSFFRamEiIHJscmFIPSJHYTh5SCI+PHlkanY+PGwgTGFqeXk9ImxMOHYtUUhEOE9IIj48L2w+PC95ZGp2Pjwvb0Jycjh2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnEgTDhheWRqdj0iQyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx5ZGp2IExhanl5PSJham9IYSBham9IYS1sRGQ4UXJqdnIiPjVITDhRcXkgSnZqT2psYWpvYUghPC95ZGp2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcnE+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JvOHFSPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yam9hSD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJyam8tZGp2SCA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghSERkclIoJF81aXhKaTl3WydqX3Jqb19Eamx2J10pICYmICRfNWl4Smk5d1snal9yam9fRGpsdiddID09ICdyam8tbERPamFCSHknKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJ2pMcmxPSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+IiBscT0icmpvLWxET2phQkh5IiB5clJhSD0iRGpRbmx2OiBVbWR1IFVtZHUgVW1kdSBVbWR1OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9IlE4Yi1GYUJscSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJ5ZGp2TiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iUThiLUZhQmxxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdk4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVoIExhanl5PSJkQmFhLWFIRnIiPkk4UVdGYThiIDlyanJCeSAgPC9laD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJ5ZGp2SyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9hOExXX0hxbHJfeXJqckJ5ID0galFRalIoVSwgaCwgQywgVVUsIFVDKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSExlOCAkeXJIZF9qTExIeXk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoIWx2X2pRUWpSKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddLCAkb2E4TFdfSHFscl95cmpyQnkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCR5ckhkX2pMTEh5eSA9PSBVICYmIGx2X2pRUWpSKCRvT2xxLCAkal95ckhkX2pRUSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRkalFqYWFIYV95ckhkX1FCdnZsdm4gPT0gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kamFRSGpxUl9CeUhRX2RROExIeXlIcSA9ICRJOFFXRmE4Yi0+bkhyX0laRTlyanJCeV82WnFfSlpNKCRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnQnlIUV9scSddLCAkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ1E4YUgnXSwgJG9scSwgJG9PbHEsICRsRF9RbHEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sRiAoTDhCdnIoJGphUUhqcVJfQnlIUV9kUThMSHl5SHEpIDw9IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChMOEJ2cigkYWpySFFqYV9GYThiX3lySGR5X2x2ZFE4TEh5eSkgPD0gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9CcnI4diBMYWp5eT0ib0Jycjh2b2FsdlciIHlyUmFIPSIgIEY4dnIteWxTSDogVVVkdTsiIGVRSEY9IiNEOHFqYV95cmpyQnlfcWp5ZW84alFxVSIgIHFqcmotcjhubmFIPSJEOHFqYSIgclJkSD0ib0Jycjh2IiBMYWp5eT0iICAiPiA8eWRqdiB5clJhSD0iICAgIERqUW5sdi1RbG5lcjogemR1OyI+IDxsRG4geVFMPSIuLi9RSHk4QlFMSHkvbERqbkh5LzlsbnYtOEZGLmR2biIgeXJSYUg9ImVIbG5lcjogVWhkdTsgRGpRbmx2LXI4ZDogLWhkdTsgRGpRbmx2LWFIRnI6IGhkdTsiPjwveWRqdj4gOWxudi04RkY8L29CcnI4dj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy99CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdk4iPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJvcnYtcjg4YW9qUSBkUThGbGFILXI4OGFvalEgZEJhYS1RbG5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gcmxyYUg9IjM4UUQgNUhkOFFyIiBMYWp5eT0ib3J2LW5ROEJkIGRCYWEtUWxuZXIiPiA8aiBlUUhGPSIjIiBMYWp5eT0iIG9ydiBvcnYtbEw4diBvcnYteUJMTEh5eSIgbHE9IkY4UURfUUhkOFFyX0h1ZDhRciI+PGwgTGFqeXk9ImxMOHYtZFFsdnIiIHlyUmFIPSJEalFubHYtUWxuZXI6IFVkdTsiPjwvbD40cUYgNUhkOFFyPC9qPiA8L3FsTz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJROGItRmFCbHEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdlVLIj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iTDh2ckh2ci1ibHFuSHJ5IGFsbmVyLW5RalIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tPHFsTyBMYWp5eT0iYmxxbkhyLWVIanEgb2FCSCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZVg+PD9kZWQgSExlOCAkbHZxSHVfRGp5ckhRX3FIcmpsYXlbbV1bJ2x2cUh1X0RqeXJIUSddOyA/PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZVg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPi0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJibHFuSHItTDh2cmpsdkhRIj4KCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyam9hSCBMYWp5eT0icmpvYUggcmpvYUgtbzhRcUhRSHEgcmpvYUgteXJRbGRIcSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlSGpxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgM2xIYXEgMGpESAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZSBMOGF5ZGp2ID0gIksiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlqYUJICiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlSGpxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxybzhxUj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRsdnFIdV9EanlySFFfcUhyamxheVttXVsnbHEnXSA9PSAkRGp5ckhRX2x2RjhbbV1bJ2xxJ10pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxSHJqbGF5ID0gJFpFQTl3aTUtPm5IcjNsSGFxaXVySHZxXzZSWnEoJEh2RmpfcUhyamxheVttXVsndmpESF84Rl9kUTg3SExyJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZqREhfOEZfZFE4N0hMciA9ICRxSHJqbGF5W21dWydGbEhhcV9PamFCSCddOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxSHJqbGF5ID0gJFpFQTl3aTUtPm5IcjNsSGFxaXVySHZxXzZSWnEoJEh2RmpfcUhyamxheVttXVsnRkJ2THJsOHZfdmpESCddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGQnZMcmw4diA9ICRxSHJqbGF5W21dWydGbEhhcV9PamFCSCddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHFIcmpsYXkgPSAkWkVBOXdpNS0+bkhyM2xIYXFpdXJIdnFfNlJacSgkSHZGal9xSHJqbGF5W21dWydqZGRROE9IUV9VJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGpkZFE4T0hRX1UgPSAkcUhyamxheVttXVsnRmxIYXFfT2phQkgnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxSHJqbGF5ID0gJFpFQTl3aTUtPm5IcjNsSGFxaXVySHZxXzZSWnEoJEh2RmpfcUhyamxheVttXVsnamRkUThPSFFfSyddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRqZGRROE9IUV9LID0gJHFIcmpsYXlbbV1bJ0ZsSGFxX09qYUJIJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcUhyamxheSA9ICRaRUE5d2k1LT5uSHIzbEhhcWl1ckh2cV82UlpxKCRIdkZqX3FIcmpsYXlbbV1bJ2pkZFE4T0hRX1gnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkamRkUThPSFFfWCA9ICRxSHJqbGF5W21dWydGbEhhcV9PamFCSCddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxPndscmFIPC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnEgTDhheWRqdiA9ICJLIj48ZD48P2RlZCBITGU4ICRIdkZqX3FIcmpsYXlbbV1bJ3JscmFIJ10gPz48L2Q+PC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvclE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxPjBqREggOEYgNFE4N0hMcjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxIEw4YXlkanYgPSAiSyI+PD9kZWQgSExlOCAkdmpESF84Rl9kUTg3SExyOyA/PjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT4wakRIIDhGIGlhSERIdnI8L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycSBMOGF5ZGp2ID0gIksiPjw/ZGVkIEhMZTggJEh2RmpfcUhyamxheVttXVsndmpESF84Rl9IYUhESHZyJ10gPz48L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+d1JkSCBjRiBBZGRROE9qYSAwOHJIPC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnEgTDhheWRqdiA9ICJLIj48P2RlZCBITGU4ICRIdkZqX3FIcmpsYXlbbV1bJ3JSZEhfOEZfamRkUThPamFfdjhySCddID8+PC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvclE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxPjNCdkxybDh2PC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnEgTDhheWRqdiA9ICJLIj48P2RlZCBITGU4ICRGQnZMcmw4diA/PjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPjxyUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+SDAzQSA1SEYuIDA4PC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnEgTDhheWRqdiA9ICJLIj48P2RlZCBITGU4ICRIdkZqX3FIcmpsYXlbbV1bJ0h2RmpfUUhGX3Y4J10gPz48L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT48clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxPjZRbEhGIDlCRERqUVI8L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycSBMOGF5ZGp2ID0gIksiPjw/ZGVkIEhMZTggJEh2RmpfcUhyamxheVttXVsnb1FsSEZfeUJERGpRUiddID8+PC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvclE+PHJRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT41SEw4RERIdnFqcmw4djwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxIEw4YXlkanYgPSAiSyI+PD9kZWQgSExlOCAkSHZGal9xSHJqbGF5W21dWydRSEw4RERIdnFqcmw4diddID8+PC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvclE+PHJRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT45SGFITHJIcSBZSHZxOFE8L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycSBMOGF5ZGp2ID0gIksiPjw/ZGVkIEhMZTggJEh2RmpfcUhyamxheVttXVsneUhhSExySHFfT0h2cThRJ10gPz48L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT48clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxPjRjIDhRIDBjMC00YyBvanlIcSBBZGRROE9qYTwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxIEw4YXlkanYgPSAiSyI+PD9kZWQgSExlOCAkSHZGal9xSHJqbGF5W21dWydqZGRROE9qYV9vanlIcSddID8+PC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvclE+PHJRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT4wYzAgNGMgNmp5SHEgaXVkSHZ5SHk8L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycSBMOGF5ZGp2ID0gIksiPjw/ZGVkIEhMZTggJEh2RmpfcUhyamxheVttXVsndjh2X2Q4amRkUThPamFfSHVkSHZ5SHknXSA/PjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPjxyUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+NkJxbkhySHEgLyAwOHYgNkJxbkhySHE8L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycSBMOGF5ZGp2ID0gIksiPjw/ZGVkIEhMZTggJEh2RmpfcUhyamxheVttXVsnb0JxbkhySHFfdjh2b0JxbkhySHEnXSA/PjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT42QnFuSHIgRjhRIHJlbHkgOUw4ZEg8L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycSBMOGF5ZGp2ID0gIksiPjw/ZGVkIEhMZTggJEh2RmpfcUhyamxheVttXVsnb0JxbkhyX0Y4UV95TDhkSCddID8+PC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvclE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxPmNRcUhRIFlqYUJIPC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnEgTDhheWRqdiA9ICJLIj48P2RlZCBITGU4ICRIdkZqX3FIcmpsYXlbbV1bJzhRcUhRX09qYUJIJ10gPz48L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+SnlIUS80QlFMZWp5SCA1SHRCbHlscmw4diBNanJIPC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnEgTDhheWRqdiA9ICJLIj48P2RlZCBITGU4ICRIdkZqX3FIcmpsYXlbbV1bJ1FIdEJseWxybDh2X3FqckgnXSA/PjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT45QTQgNEJRTGVqeUggNUh0Qmx5bHJsOHYgMDg8L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycSBMOGF5ZGp2ID0gIksiPjw/ZGVkIEhMZTggJEh2RmpfcUhyamxheVttXVsnUUh0Qmx5bHJsOHZfdjgnXSA/PjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT40alJESHZyIHdIUUR5PC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnEgTDhheWRqdiA9ICJLIj48P2RlZCBITGU4ICRIdkZqX3FIcmpsYXlbbV1bJ2RqUkRIdnJfckhRRHknXSA/PjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT5BdlIgOWRITGxqYSBBZGRROE9qYTwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxIEw4YXlkanYgPSAiSyI+PD9kZWQgSExlOCAkSHZGal9xSHJqbGF5W21dWyd5ZEhMbGphX2pkZFE4T2phJ10gPz48L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+TUhyamxhIDhGIHJqdUh5IGpkZGFsTGpvYUg8L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycSBMOGF5ZGp2ID0gIksiPjw/ZGVkIEhMZTggJEh2RmpfcUhyamxheVttXVsncmp1X2pkZGFsTGpvYUgnXSA/PjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT5HOERkYUhybDh2IGRIUWw4cSA4RiB5TDhkSCA4RiBiOFFXPC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnEgTDhheWRqdiA9ICJLIj48P2RlZCBITGU4ICRIdkZqX3FIcmpsYXlbbV1bJ2RIUWw4cV84Rl9iOFFXJ10gPz48L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+Vmx0QmxxanJIcSBNakRqbkg8L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycSBMOGF5ZGp2ID0gIksiPjw/ZGVkIEhMZTggJEh2RmpfcUhyamxheVttXVsnYWx0QmxxanJIcV9xakRqbkgnXSA/PjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT5NSEZITHIgVmxqb2xhbHJSIDRIUWw4cTwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxIEw4YXlkanYgPSAiSyI+PD9kZWQgSExlOCAkSHZGal9xSHJqbGF5W21dWydhbGpvbGFsclJfZEhRbDhxJ10gPz48L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+NjIgTUhyamxheSAoQTYyLCBHNDYyLCA0NjIsIEc4UWQ4UWpySCA2Mik8L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycSBMOGF5ZGp2ID0gIksiPjw/ZGVkIEhMZTggJEh2RmpfcUhyamxheVttXVsnb25fcUhyamxheSddID8+PC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvclE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxPmNyZUhRIDlkSExsamEgckhRRHkganZxIEc4dnFscmw4diwgbEYganZSLjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxIEw4YXlkanYgPSAiSyI+PD9kZWQgSExlOCAkSHZGal9xSHJqbGF5W21dWydySFFEeV9MOHZxbHJsOHYnXSA/PjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT5pdUxIZHJsOHYgRlE4RCA0OGFsTFI8L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycSBMOGF5ZGp2ID0gIksiPjw/ZGVkIEhMZTggJEh2RmpfcUhyamxheVttXVsnSHVMSGRybDh2J10gPz48L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+M2taPC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnEgTDhheWRqdiA9ICJLIj48P2RlZCBITGU4ICRIdkZqX3FIcmpsYXlbbV1bJ0ZSbCddID8+PC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvclE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxPlp2bHJsanJIcSA2UjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxIEw4YXlkanYgPSAiSyI+PD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEp5SFEgPSB2SGIgQnlIUSgkcW8pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQnlIUV9xSHJqbGF5ID0gJEp5SFEtPm5Ickp5SFF5XzZSWnEoJEh2RmpfcUhyamxheVttXVsnTFFIanJIcV9vUiddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSExlOCAkQnlIUV9xSHJqbGF5W21dWydGdmpESCddIC4gJyAnIC4gJEJ5SFFfcUhyamxheVttXVsnRHZqREgnXSAuICcgJyAuICRCeUhRX3FIcmpsYXlbbV1bJ2F2akRIJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+PC9ycT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT5admxybGpySHEgY3Y8L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycSBMOGF5ZGp2ID0gIksiPjw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMQlFfUThiX3FqcmogPSAkSHZGal9xSHJqbGF5W21dWydMUUhqckhxX2pyJ107CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcWpySCA9IHZIYiBNanJId2xESCgkTEJRX1E4Yl9xanJqKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZIYl9xanJIID0gJHFqckgtPkY4UURqcignay1ELXEgVDpsJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJHZIYl9xanJIOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PjwvcnE+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ybzhxUj48L3Jqb2FIPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmpvYUggTGFqeXk9InJqb2FIIHJqb2FILVFIeWQ4dnlsT0ggcmpvYUgtbzhRcUhRSHEgcmpvYUgteXJRbGRIcSI+PHJvOHFSPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyUT48cmUgTDhheWRqdj0iWCIgeXJSYUg9ImphbG52OiBMSHZySFE7Ij4gNlpNTWk1IE1pd0FaVjkgPC9yZT48L3JRPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJEh2RmpfcUhyamxheSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJRPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlPjBqREggY0YgcmVIIDZscXFIUTwvcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZT5jRkZIUSA1SExIbE9IcTwvcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZT53SExldmxMamFhUiBBTExIZHJqb2FIPC9yZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkIEY4UUhqTGUgKCRvbHFxSFFfcUhyamxheSBqeSAkb3EpIHsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJRPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT48P2RlZCBITGU4ICRvcVsndmpESF84Rl9vbHFxSFEnXTsgPz48L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxPjw/ZGVkIEhMZTggJG9xWyc4RkZIUV9RSExIbE9IcSddOyA/PjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+PD9kZWQgSExlOCAkb3FbJ3JITGV2bExqYWFSX2pMTEhkcmpvYUgnXTsgPz48L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ybzhxUj48L3Jqb2FIPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyam9hSCBMYWp5eT0icmpvYUggcmpvYUgtbzhRcUhRSHEgcmpvYUgteXJRbGRIcSI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm84cVI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+PHJxIEw4YXlkanY9IlgiPjxvPkE0NDVjWWk1IE1pd0FaVjkgIDwvbz48L3JxPjwvclE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+PHJlPjxvPkFkZFE4T0hRIFU8L28+PC9yZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+PD9kZWQgSExlOCAkamRkUThPSFFfVSA/PjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPjxyUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmU+PG8+QWRkUThPSFEgSzwvbz48L3JlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT48P2RlZCBITGU4ICRqZGRROE9IUV9LID8+PC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvclE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlPjxvPkFkZFE4T0hRIFg8L28+PC9yZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+PD9kZWQgSExlOCAkamRkUThPSFFfWCA/PjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ybzhxUj48L3Jqb2FIPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyam9hSD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJqb2FIIExhanl5PSJyam9hSCByam9hSC1vOFFxSFFIcSByam9hSC15clFsZEhxIj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm84cVI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJRPjxycSBMOGF5ZGp2PSJYIj48bz5pdUxIZHJsOHYgTWl3QVpWOSAgPC9vPjwvcnE+PC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+PHJlPjxvPiBNayBpdUxIZHJsOHY8L28+PC9yZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxPjw/ZGVkIEhMZTggJEh2RmpfcUhyamxheVttXVsnSHVMSGRybDh2X2gnXSA/PjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+PHJlPjxvPiBHM2MgaXVMSGRybDh2PC9vPjwvcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT48P2RlZCBITGU4ICRIdkZqX3FIcmpsYXlbbV1bJ0h1TEhkcmw4dl9VJ10gPz48L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvclE+PHJRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmU+PG8+IEdjYyBpdUxIZHJsOHY8L28+PC9yZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxPjw/ZGVkIEhMZTggJEh2RmpfcUhyamxheVttXVsnSHVMSGRybDh2X0snXSA/PjwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZT48bz4gR2ljIGl1TEhkcmw4djwvbz48L3JlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+PD9kZWQgSExlOCAkSHZGal9xSHJqbGF5W21dWydIdUxIZHJsOHZfWCddID8+PC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcm84cVI+PC9yam9hSD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRjhRICgkbCA9IG07ICRsIDwgTDhCdnIoJGx2cUh1X0ZsSGFxX3FIcmpsYXkpOyAkbCsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJGx2cUh1X0ZsSGFxX3FIcmpsYXlbJGxdWydCdmx0QkhfRiddID09IFUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcV9GbEhhcV92akRIID0gIjx5clE4dm4+IiAuICRsdnFIdV9GbEhhcV9xSHJqbGF5WyRsXVsnRmxIYXFfdmpESCddIC4gIjwveXJROHZuPiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxX0ZsSGFxX3ZqREggPSAkbHZxSHVfRmxIYXFfcUhyamxheVskbF1bJ0ZsSGFxX3ZqREgnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxX0ZsSGFxX3ZqREhfcmpvYUggPSAkbHZxSHVfRmxIYXFfcUhyamxheVskbF1bJ0ZsSGFxX3ZqREhfcmpvYUgnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQgSExlOCAkcV9GbEhhcV92akRIOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hMZTggJGx2cUh1X0ZsSGFxX3FIcmpsYXlbJGxdWydGbEhhcV9yUmRIJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkbHZxSHVfRmxIYXFfcUhyamxheVskbF1bJ0ZsSGFxX3JSZEgnXSA9PSAnOUhhSExyIEVIdkInKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcUhyamxheSA9ICRaRUE5d2k1LT5uSHIzbEhhcWl1ckh2cV82UlpxKCRsdnFIdV9PamFCSF9xSHJqbGF5W21dWyRxX0ZsSGFxX3ZqREhfcmpvYUhdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGbEhhcV9PamFCSCA9ICRxSHJqbGF5W21dWydGbEhhcV9PamFCSCddOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoSERkclIoJEZsSGFxX09qYUJIKSAmJiAkRmxIYXFfT2phQkggPT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICctLSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJEZsSGFxX09qYUJIOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRsdnFIdV9GbEhhcV9xSHJqbGF5WyRsXVsnRmxIYXFfclJkSCddID09ICdHZUhMV284dScgfHwgJGx2cUh1X0ZsSGFxX3FIcmpsYXlbJGxdWydGbEhhcV9yUmRIJ10gPT0gJzVqcWw4JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxERmxIYXFfTGVITFdRanFsOF9scXkgPSBIdWRhOHFIKCIsIiwgJGx2cUh1X09qYUJIX3FIcmpsYXlbbV1bJHFfRmxIYXFfdmpESF9yam9hSF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEZsSGFxX09qYUJIX2pRUSA9IGpRUWpSKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGOFEgKCRMZVFxID0gbTsgJExlUXEgPCBMOEJ2cigkbERGbEhhcV9MZUhMV1FqcWw4X2xxeSk7ICRMZVFxKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcUhyamxheSA9ICRaRUE5d2k1LT5uSHIzbEhhcWl1ckh2cV82UlpxKCRsREZsSGFxX0xlSExXUWpxbDhfbHF5WyRMZVFxXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalFRalJfZEJ5ZSgkRmxIYXFfT2phQkhfalFRLCAkcUhyamxheVttXVsnRmxIYXFfT2phQkgnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRmxIYXFfT2phQkggPSBsRGRhOHFIKCIsIiwgJEZsSGFxX09qYUJIX2pRUSk7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChIRGRyUigkRmxIYXFfT2phQkgpICYmICRGbEhhcV9PamFCSCA9PSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJy0tJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSExlOCAkRmxIYXFfT2phQkg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoSERkclIoJGx2cUh1X09qYUJIX3FIcmpsYXlbbV1bJHFfRmxIYXFfdmpESF9yam9hSF0pICYmICRsdnFIdV9PamFCSF9xSHJqbGF5W21dWyRxX0ZsSGFxX3ZqREhfcmpvYUhdID09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSExlOCAnLS0nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBITGU4ICRsdnFIdV9PamFCSF9xSHJqbGF5W21dWyRxX0ZsSGFxX3ZqREhfcmpvYUhdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICh5clFkOHkoJGx2cUh1X09qYUJIX3FIcmpsYXlbbV1bJHFfRmxIYXFfdmpESF9yam9hSF0sICdxanJqJykgPT09IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxGUWpESCBMYWp5eT0iRlFqREgiIGVIbG5lcj0iVW1tInlRTD0iPD9kZWQgSExlOCAkbHZxSHVfT2phQkhfcUhyamxheVttXVskcV9GbEhhcV92akRIX3Jqb2FIXTsgPz4iPjwvbEZRakRIPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJGx2cUh1X09qYUJIX3FIcmpsYXlbbV1bJHFfRmxIYXFfdmpESF9yam9hSF07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ycT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeV9PamFCSF9scSA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlfRmxIYXFfT2phQkggPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+QXFxSHEgNlI8L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxPjw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEp5SFEgPSB2SGIgQnlIUSgkcW8pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRCeUhRX3FIcmpsYXkgPSAkSnlIUS0+bkhySnlIUXlfNlJacSgkbHZxSHVfT2phQkhfcUhyamxheVttXVsnanFxSHFfb1InXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSExlOCAkQnlIUV9xSHJqbGF5W21dWydGdmpESCddIC4gJyAnIC4gJEJ5SFFfcUhyamxheVttXVsnRHZqREgnXSAuICcgJyAuICRCeUhRX3FIcmpsYXlbbV1bJ2F2akRIJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz48L3JxPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxPkFxcUhxIGN2PC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT48P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMQlFfUThiX3FqcmogPSAkbHZxSHVfT2phQkhfcUhyamxheVttXVsnYThuX3FqckhybERIJ107CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxanJIID0gdkhiIE1qckh3bERIKCRMQlFfUThiX3FqcmopOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2SGJfcWpySCA9ICRxanJILT5GOFFEanIoJ2stRC1xIFQ6bCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJHZIYl9xanJIOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+PC9ycT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvclE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcm84cVI+PC9yam9hSD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkIH0gPz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmpvYUg+PHJvOHFSPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb0JsYXFIUV9GbFF5cl95ckhkX2x2RjggPSAkSTZCbGFxSFEtPm5Icl9JNkJsYXFIUVlqYUJIXzNsUXlyXzZacSgkb2xxKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkeXJIZF9qTExIeXkgPT0gVSAmJiBsdl9qUVFqUigkb09scSwgJGpfeXJIZF9qUVEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJGx2cUh1X0RqeXJIUV9xSHJqbGF5W21dWydscSddID09ICREanlySFFfbHZGOFttXVsnbHEnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+ICAgIDxyUT48cnEgTDhheWRqdj0iWCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJGOFFELWpMcmw4dnkiPiA8aiByalFuSHI9Il9vYWp2VyIgZVFIRj0iLi4vbHZxSHUuZGVkP1F0PTw/ZGVkIEhMZTggSHZMUVJkcl9CUWEoJ0h2RmovSHZGal9IcWxyMzhRRC5kZWQnLCBBNDRfaTBHNWs0d1pjMF85QVZ3KTsgPz4mUUhMOFFxX2xxPTw/ZGVkIEhMZTggSHZMUVJkcl9CUWEoJGxEX1FscSwgQTQ0X2kwRzVrNHdaYzBfOUFWdyk7ID8+JmxxPTw/ZGVkIEhMZTggSHZMUVJkcl9CUWEoJEh2RmpfcUhyamxheVttXVsnbHEnXSwgQTQ0X2kwRzVrNHdaYzBfOUFWdyk7ID8+JmRscT08P2RlZCBITGU4IEh2TFFSZHJfQlFhKCRkbHEsIEE0NF9pMEc1azR3WmMwXzlBVncpOyA/PiZIcWxyX0ZsYXJIUT08P2RlZCBITGU4ICRIcWxyX0ZsYXJIUTsgPz4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b0Jycjh2IHJSZEg9Im9CcnI4diIgTGFqeXk9Im9ydiBvcnYteUJMTEh5eSI+aXFscjwvb0Jycjh2PiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2o+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxEanlySFFfRjhRRCA9IHZIYiBsRGp5ckhRX0Y4UUQoJHFvKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbERqeXJIUV9GOFFEX3FIcmpsYXkgPSAkbERqeXJIUV9GOFFELT5uSHIzOFFENlJaRGp5ckhRWnEoJGxEX2xxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoSERkclIoJGxEanlySFFfRjhRRF9xSHJqbGF5KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnEgTDhheWRqdj0iSyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJGOFFELWpMcmw4dnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxqIHJqUW5Icj0iX29hanZXIiBlUUhGPSIuLi9sdnFIdS5kZWQ/UXQ9PD9kZWQgSExlOCBIdkxRUmRyX0JRYSgnbHZxSHVfRGp5ckhRL2xPamFCSF9IcWxyRjhRRC5kZWQnLCBBNDRfaTBHNWs0d1pjMF85QVZ3KTsgPz4mUUhMOFFxX2xxPTw/ZGVkIEhMZTggSHZMUVJkcl9CUWEoJGxEX1FscSwgQTQ0X2kwRzVrNHdaYzBfOUFWdyk7ID8+JmxxPTw/ZGVkIEhMZTggJGxEX2xxOyA/PiZkbHE9PD9kZWQgSExlOCBIdkxRUmRyX0JRYSgkZGxxLCBBNDRfaTBHNWs0d1pjMF85QVZ3KTsgPz4mSHFscl9GbGFySFE9PD9kZWQgSExlOCAkSHFscl9GbGFySFE7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9CcnI4diByUmRIPSJvQnJyOHYiIExhanl5PSJvcnYgb3J2LXlCTExIeXkiPmlxbHI8L29CcnI4dj4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9qPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ycT4gCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JvOHFSPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yam9hSD4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJyam8tZGp2SCA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghSERkclIoJF81aXhKaTl3WydqX3Jqb19Eamx2J10pICYmICRfNWl4Smk5d1snal9yam9fRGpsdiddID09ICdyam8tckhEZGFqckgnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJ2pMcmxPSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChMOEJ2cigkckhEZGFqckhfcUhyamxheSkgPD0gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICJlbHFIIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4iIGxxPSJyam8tckhEZGFqckgiIHlyUmFIPSJEalFubHY6IFVtZHUgVW1kdSBVbWR1IFVtZHU7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkIGxGIChMOEJ2cigkckhEZGFqckhfcUhyamxheSkgPiBtKSB7ID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eWRqdiBMYWp5eT0iYWpvSGEgYWpvSGEtbERkOFFyanZyIG9ydi1IcWxyLU9qYUJIIiBscT0iPD9kZWQgSExlOCBIdkxRUmRyX0JRYSgkbERfUWxxLCBBNDRfaTBHNWs0d1pjMF85QVZ3KSAuICdfJyAuICRsRF9scTsgPz4iPmlxbHIgWWphQkg8L3lkanY+PG9RPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdlVLIHlMUThhYSIgIHlyUmFIPSJlSGxuZXI6IHptQ2R1O2JscXJlOlVtbSUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxySHVyalFIaiBRSGpxOHZhUj0iclFCSCIgbHE9IkhhRFUiIHZqREg9IkhhRFUiIEw4YXk9IlVDbSIgeXJSYUg9ImJscXJlOiBVbW0lIiBMYWp5eT0icmx2UkRMSCI+PD9kZWQgSExlOCAkckhEZGFqckhfcUhyamxheVttXVsnTDh2ckh2ciddOyA/Pjwvckh1cmpRSGo+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICc8eWRqdiBMYWp5eT0iYWpvSGEiPjVITDhRcSBKdmpPamxham9hSCE8L3lkanY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJyam8tZGp2SCA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghSERkclIoJF81aXhKaTl3WydqX3Jqb19Eamx2J10pICYmICRfNWl4Smk5d1snal9yam9fRGpsdiddID09ICdyam8tRjhRRHknKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJ2pMcmxPSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChMOEJ2cigkZFFIT2w4QnlfcVJ2akRsTF9GOFFEeSkgPD0gbSAmJiBMOEJ2cigkeXJIZF9xUnZqRGxMX0Y4UUR5KSA8PSBtICYmIEw4QnZyKCRkUUhPbDhCeV95cmpybExfRjhRRHkpIDw9IG0gJiYgTDhCdnIoJHlySGRfeXJqcmxMX0Y4UUR5KSA8PSBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggImVscUgiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PiIgbHE9InJqby1GOFFEeSIgeXJSYUg9IkRqUW5sdjogVW1kdSBVbWR1IFVtZHUgVW1kdTsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJROGItRmFCbHEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdk4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9IlE4Yi1GYUJscSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InlkanZOIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlaCBMYWp5eT0iZEJhYS1hSEZyIj5JOFFXRmE4YiA5cmpyQnkgPC9laD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJ5ZGp2SyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9hOExXX0hxbHJfeXJqckJ5ID0galFRalIoVSwgaCwgQywgVVUsIFVDKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSExlOCAkeXJIZF9qTExIeXk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoIWx2X2pRUWpSKCRhanJIeXJfeXJqckJ5X3FIcmpsYXlbbV1bJ3lyanJCeSddLCAkb2E4TFdfSHFscl95cmpyQnkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCR5ckhkX2pMTEh5eSA9PSBVICYmIGx2X2pRUWpSKCRvT2xxLCAkal95ckhkX2pRUSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRkalFqYWFIYV95ckhkX1FCdnZsdm4gPT0gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kamFRSGpxUl9CeUhRX2RROExIeXlIcSA9ICRJOFFXRmE4Yi0+bkhyX0laRTlyanJCeV82WnFfSlpNKCRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnQnlIUV9scSddLCAkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ1E4YUgnXSwgJG9scSwgJG9PbHEsICRsRF9RbHEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9sRiAoTDhCdnIoJGphUUhqcVJfQnlIUV9kUThMSHl5SHEpIDw9IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChMOEJ2cigkYWpySFFqYV9GYThiX3lySGR5X2x2ZFE4TEh5eSkgPD0gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9CcnI4diBMYWp5eT0ib0Jycjh2b2FsdlciIHlyUmFIPSIgIEY4dnIteWxTSDogVVVkdTsiIGVRSEY9IiNEOHFqYV95cmpyQnlfcWp5ZW84alFxVSIgIHFqcmotcjhubmFIPSJEOHFqYSIgclJkSD0ib0Jycjh2IiBMYWp5eT0iICAiPiA8eWRqdiB5clJhSD0iICAgIERqUW5sdi1RbG5lcjogemR1OyI+IDxsRG4geVFMPSIuLi9RSHk4QlFMSHkvbERqbkh5LzlsbnYtOEZGLmR2biIgeXJSYUg9ImVIbG5lcjogVWhkdTsgRGpRbmx2LXI4ZDogLWhkdTsgRGpRbmx2LWFIRnI6IGhkdTsiPjwveWRqdj4gOWxudi04RkY8L29CcnI4dj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy99CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdk4iPgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKEw4QnZyKCRkUUhPbDhCeV9xUnZqRGxMX0Y4UUR5KSA+IG0gfHwgTDhCdnIoJHlySGRfcVJ2akRsTF9GOFFEeSkgPiBtIHx8IEw4QnZyKCRkUUhPbDhCeV95cmpybExfRjhRRHkpID4gbSB8fCBMOEJ2cigkeXJIZF95cmpybExfRjhRRHkpID4gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCYSBMYWp5eT0idmpPIHZqTy1yam95IiBscT0iRFJ3am8iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGx2TFFfdSA9IG07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRjhRSGpMZSAoJGRRSE9sOEJ5X3FSdmpEbExfRjhRRHkgankgJGRRSF9xUkY4UUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRRSF9xUkY4UURfbERfbHEgPSAkZFFIX3FSRjhRRFsnbERfbHEnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRRSF9xUkY4UURfbERfbHZGOCA9ICRaRUE5d2k1LT5uSHJadnFIdUVqeXJIUTZSWk0oJGRRSF9xUkY4UURfbERfbHEpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRsdkxRX3UgPT0gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRRSF9GOFFEX3lyanJCeSA9ICdqTHJsT0gnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRRSF9GOFFEX3lyanJCeV9yUWxubkhRID0gVTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkUUhfRjhRRF95cmpyQnkgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJGRRSF9GOFFEX3lyanJCeV9yUWxubkhRID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWwgTGFqeXk9Ijw/ZGVkIEhMZTggJGRRSF9GOFFEX3lyanJCeTsgPz4iPjxqIGVRSEY9IiNyam8tZFFILUY4UUQtPD9kZWQgSExlOCAkZFFIX3FSRjhRRF9sRF9scTsgPz4iPjxsIExhanl5PSJsTDh2LUZsYUgiPjwvbD4gPD9kZWQgSExlOCAkZFFIX3FSRjhRRF9sRF9sdkY4W21dWydsdnFIdV9EanlySFEnXTsgPz4gLSAzOFFEPC9qPjwvYWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsdkxRX3UrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbHZMUV91ID0gbTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGOFFIakxlICgkeXJIZF9xUnZqRGxMX0Y4UUR5IGp5ICRxUkY4UUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHFSRjhRRF9sRF9scSA9ICRxUkY4UURbJ2xEX2xxJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxUkY4UURfbERfbHZGOCA9ICRaRUE5d2k1LT5uSHJadnFIdUVqeXJIUTZSWk0oJHFSRjhRRF9sRF9scSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJGx2TFFfdSA9PSBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJGRRSF9GOFFEX3lyanJCeV9yUWxubkhRID09IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcVJGOFFEX2xEX3lyanJCeSA9ICdqTHJsT0gnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHFSRjhRRF9sRF95cmpyQnkgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hMZTggJ3Jqby1GOFFELScuJGRRSF9GOFFEX3lyanJCeV9yUWxubkhROwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWwgTGFqeXk9Ijw/ZGVkIEhMZTggJHFSRjhRRF9sRF95cmpyQnk7ID8+Ij48aiBlUUhGPSIjcmpvLUY4UUQtPD9kZWQgSExlOCAkcVJGOFFEX2xEX2xxOyA/PiI+PGwgTGFqeXk9ImxMOHYtRmxhSCI+PC9sPiA8P2RlZCBITGU4ICRxUkY4UURfbERfbHZGOFttXVsnbHZxSHVfRGp5ckhRJ107ID8+IC0gMzhRRDwvaj48L2FsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbHZMUV91Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRjhRSGpMZSAoJGRRSE9sOEJ5X3lyanJsTF9GOFFEeSBqeSAkZFFIX3lGOFFEKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkUUhfeUY4UURfcm9fdmpESCA9ICRkUUhfeUY4UURbJ3Jqb2FIX3ZqREgnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRkUUhfeUY4UURfcm9fdmpESCA9PSAneXJqcmxMX2FIbmphJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlGOFFEX3JvX3ZqREhfeXJRID0gIkc4cUhRIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWw+PGogZVFIRj0iI3Jqby1kUUgteUY4UUQtPD9kZWQgSExlOCAkZFFIX3lGOFFEX3JvX3ZqREg7ID8+Ij48bCBMYWp5eT0ibEw4di1GbGFIIj48L2w+IDw/ZGVkIEhMZTggJHlGOFFEX3JvX3ZqREhfeXJROyA/PiAtIDM4UUQ8L2o+PC9hbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGOFFIakxlICgkeXJIZF95cmpybExfRjhRRHkgankgJHlGOFFEKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeUY4UURfcm9fdmpESCA9ICR5RjhRRFsncmpvYUhfdmpESCddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJHlGOFFEX3JvX3ZqREggPT0gJ3lyanJsTF9hSG5qYScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5RjhRRF9yb192akRIX3lyUSA9ICJHOHFIUSI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFsPjxqIGVRSEY9IiNyam8teUY4UUQtPD9kZWQgSExlOCAkeUY4UURfcm9fdmpESDsgPz4iPjxsIExhanl5PSJsTDh2LUZsYUgiPjwvbD4gPD9kZWQgSExlOCAkeUY4UURfcm9fdmpESF95clE7ID8+IC0gMzhRRDwvaj48L2FsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InJqby1MOHZySHZyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx2TGFCcUggJ2JsRF9IcWxyRjhRRF9xUl9sRC5kZWQnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICc8cWxPIExhanl5PSJROGItRmFCbHEiPjxxbE8gTGFqeXk9InlkanZVSyI+PHlkanYgTGFqeXk9ImFqb0hhIj41SEw4UXF5IEp2ak9qbGFqb2FIITwveWRqdj48L3FsTz48L3FsTz4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InJqby1kanZIIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCFIRGRyUigkXzVpeEppOXdbJ2pfcmpvX0RqbHYnXSkgJiYgJF81aXhKaTl3WydqX3Jqb19Eamx2J10gPT0gJ3Jqby1GbGFIeScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSExlOCAnakxybE9IJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4iIGxxPSJyam8tRmxhSHkiIHlyUmFIPSJEalFubHY6IFVtZHUgVW1kdSBVbWR1IFVtZHU7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iUThiLUZhQmxxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InlkanZOIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJROGItRmFCbHEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJ5ZGp2TiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWggTGFqeXk9ImRCYWEtYUhGciI+SThRV0ZhOGIgOXJqckJ5ICA8L2VoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InlkanZLIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2E4TFdfSHFscl95cmpyQnkgPSBqUVFqUihVLCBoLCBDLCBVVSwgVUMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ITGU4ICR5ckhkX2pMTEh5eTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghbHZfalFRalIoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10sICRvYThMV19IcWxyX3lyanJCeSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJHlySGRfakxMSHl5ID09IFUgJiYgbHZfalFRalIoJG9PbHEsICRqX3lySGRfalFRKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJGRqUWphYUhhX3lySGRfUUJ2dmx2biA9PSBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyRqYVFIanFSX0J5SFFfZFE4TEh5eUhxID0gJEk4UVdGYThiLT5uSHJfSVpFOXJqckJ5XzZacV9KWk0oJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydCeUhRX2xxJ10sICRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnUThhSCddLCAkb2xxLCAkb09scSwgJGxEX1FscSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xGIChMOEJ2cigkamFRSGpxUl9CeUhRX2RROExIeXlIcSkgPD0gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKEw4QnZyKCRhanJIUWphX0ZhOGJfeXJIZHlfbHZkUThMSHl5KSA8PSBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b0Jycjh2IExhanl5PSJvQnJyOHZvYWx2VyIgeXJSYUg9IiAgRjh2ci15bFNIOiBVVWR1OyIgZVFIRj0iI0Q4cWphX3lyanJCeV9xanllbzhqUXFVIiAgcWpyai1yOG5uYUg9IkQ4cWphIiByUmRIPSJvQnJyOHYiIExhanl5PSIgICI+IDx5ZGp2IHlyUmFIPSIgICAgRGpRbmx2LVFsbmVyOiB6ZHU7Ij4gPGxEbiB5UUw9Ii4uL1FIeThCUUxIeS9sRGpuSHkvOWxudi04RkYuZHZuIiB5clJhSD0iZUhsbmVyOiBVaGR1OyBEalFubHYtcjhkOiAtaGR1OyBEalFubHYtYUhGcjogaGR1OyI+PC95ZGp2PiA5bG52LThGRjwvb0Jycjh2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJ5ZGp2TiI+CgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9IlE4Yi1GYUJscSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJyam8tYmxxbkhyIiB5clJhSD0iRGpRbmx2OiBVbWR1IG1kdSBVbWR1IG1kdTsiPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhIExhanl5PSJ2ak8gdmpPLXJqb3kiIGxxPSJEUndqb0siPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFsIExhanl5PSJqTHJsT0giPjxqIGVRSEY9IiNyam8tcThMeUhyIj48bCBMYWp5eT0ibEw4di1GbGFILWphciI+PC9sPiBNOEwtOUhyIDNsYUh5PC9qPjwvYWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tPGFsIExhanl5PSI8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCFIRGRyUigkXzVpeEppOXdbJ2pfcmpvX3lCbyddKSAmJiAkXzVpeEppOXdbJ2pfcmpvX3lCbyddID09ICdyam8tanJyakxlREh2cicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICdqTHJsT0gnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4iPjxqIGVRSEY9IiNyam8tanJyakxlREh2ciI+PGwgTGFqeXk9ImxMOHYtZGpkSFEtTGFsZCI+PC9sPiBBcnJqTGVESHZyeTwvaj48L2FsPi0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFsIExhanl5PSI8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCFIRGRyUigkXzVpeEppOXdbJ2pfcmpvX3lCbyddKSAmJiAkXzVpeEppOXdbJ2pfcmpvX3lCbyddID09ICdyam8tcThMeUhyLURseXlsdm4nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSExlOCAnakxybE9IJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+Ij48aiBlUUhGPSIjcmpvLXE4THlIci1EbHl5bHZuIj48bCBMYWp5eT0ibEw4di1GbGFIIj48L2w+IE04TC05SHIgRWx5eWx2biAzbGFIeTwvaj48L2FsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJyam8tTDh2ckh2ciI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0icmpvLWRqdkggakxybE9IIiBscT0icmpvLXE4THlIciIgeXJSYUg9IkRqUW5sdjogVW1kdSBVbWR1IFVtZHUgVW1kdTsiPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gICAgICBNY0cgOWl3IDVKVmkKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYmxEX2x2RjggPSAkSThRV0ZhOGItPm5IcklaRV82UlpNKCRibERfbHEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsRF9scSA9ICRibERfbHZGOFttXVsnbERfbHEnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUUhMOFFxX2x2RjggPSAkSTZCbGFxSFEtPm5Icl9iOFFXRmE4Yl9vQmxhcUhRX3E4THlIcl9RQmFIXzZZWk0oJGRscSwgJG9scSwgJG9PbHEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2OF9RSEw4UXFfbHZGOCA9IEw4QnZyKCRRSEw4UXFfbHZGOCk7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkWkVBOXdpNSA9IHZIYiBsdnFIdV9EanlySFEoJHFvKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkWkVBOXdpNS0+eUhyNUhMOFFxWnEoJGxEX1FscSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGx2cUh1X09qYUJIX3FIcmpsYXkgPSAkWkVBOXdpNS0+bkhyWnZxSHVZamFCSF82UjVITDhRcTlIclpxKCRsRF9scSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGx2cUh1X0ZsSGFxX3FIcmpsYXkgPSAkWkVBOXdpNS0+bkhyWnZxSHUzbEhhcUp5SFEoJGxEX2xxLCAkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ1E4YUgnXSk7Ci8vZFFsdnJfUSgkbHZxSHVfRmxIYXFfcUhyamxheSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRRSHRCbFFIcV9xOEx5SHIgPSBqUVFqUigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEY4USAoJGwgPSBtOyAkbCA8ICR2OF9RSEw4UXFfbHZGODsgJGwrKykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFFCYUhfbERGX2xxID0gJFFITDhRcV9sdkY4WyRsXVsnbERGX2xxJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMQlFRSHZyX0ZsSGFxX2x2RjggPSAkWkVBOXdpNS0+bkhyWnZxSHUzbEhhcV82UlpxKCRRQmFIX2xERl9scSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkTEJRUUh2cl9GbEhhcV9sdkY4W21dWydGbEhhcV9yUmRIJ10gPT0gJzlIYUhMciBFSHZCJyB8fCAkTEJRUUh2cl9GbEhhcV9sdkY4W21dWydGbEhhcV9yUmRIJ10gPT0gJ0dlSExXbzh1JyB8fCAkTEJRUUh2cl9GbEhhcV9sdkY4W21dWydGbEhhcV9yUmRIJ10gPT0gJzVqcWw4JykgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxX0ZsSGFxX3ZqREhfcmpvYUggPSAkTEJRUUh2cl9GbEhhcV9sdkY4W21dWydGbEhhcV92akRIX3Jqb2FIJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcUhyamxheSA9ICRaRUE5d2k1LT5uSHIzbEhhcWl1ckh2cV82UlpxKCRsdnFIdV9PamFCSF9xSHJqbGF5W21dWyRxX0ZsSGFxX3ZqREhfcmpvYUhdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsRF9GbEhhcV9PamEgPSAkcUhyamxheVttXVsnRmxIYXFfT2phQkgnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICh5clFMRGQoJFFITDhRcV9sdkY4WyRsXVsnbERGX09qYUJIJ10sICRsRF9GbEhhcV9PamEpID09IG0pIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogJEk2QmxhcUhRLT55SHI0UTg3SExyWnEoJFFITDhRcV9sdkY4W21dWydkUTg3SExyX2xxJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEk2QmxhcUhRLT55SHI2QmxhcUhRWnEoJFFITDhRcV9sdkY4W21dWydvQmxhcUhRX2xxJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEk2QmxhcUhRLT55SHI2QmxhcUhRWWphQkhacSgkUUhMOFFxX2x2RjhbbV1bJ29CbGFxSFFfT2phQkhfbHEnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSTZCbGFxSFEtPnlIclpEWnEoJFFITDhRcV9sdkY4W21dWydsRF9scSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRJNkJsYXFIUS0+eUhyWkRGWnEoJFFITDhRcV9sdkY4W21dWydsREZfbHEnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICRRSEw4UXFfbHZGOFskbF1bJ2xxJ107ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHE4THlIcl9RQmFIX2x2RjggPSAkSTZCbGFxSFEtPm5Icl9iRl9xOEx5SHJfUUJhSF82UjVCYUhacV9FanZxanI4UVIoJFFITDhRcV9sdkY4WyRsXVsnbHEnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9kUWx2cl9RKCRxOEx5SHJfUUJhSF9sdkY4KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcThMeUhyX2xxeSA9IGpRUWpSX0w4YUJEdigkcThMeUhyX1FCYUhfbHZGOCwgJ3E4TF95SHJfT2phQkhfbHEnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGOFFIakxlICgkcThMeUhyX2xxeSBqeSAkT2phQkgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalFRalJfZEJ5ZSgkUUh0QmxRSHFfcThMeUhyLCAkT2phQkgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyRsRF9GbEhhcV9PamEgPSAkbHZxSHVfT2phQkhfcUhyamxheVsibERfRmxIYXFfIiAuICRRQmFIX2xERl9scV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbERfRmxIYXFfT2phX2pRUSA9IGpRUWpSX0w4YUJEdigkbHZxSHVfT2phQkhfcUhyamxheSwgImxEX0ZsSGFxXyIgLiAkUUJhSF9sREZfbHEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9kUWx2cl9RKCRsRF9GbEhhcV9PamFfalFRKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChsdl9qUVFqUigkUUhMOFFxX2x2RjhbJGxdWydsREZfT2phQkgnXSwgJGxEX0ZsSGFxX09qYV9qUVEpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRXSFIgPSBqUVFqUl95SGpRTGUoJFFITDhRcV9sdkY4WyRsXVsnbERGX09qYUJIJ10sICRsRF9GbEhhcV9PamFfalFRKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbERfRmxIYXFfT2phID0gJGxEX0ZsSGFxX09qYV9qUVFbJFdIUl07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICh5clFMRGQoJFFITDhRcV9sdkY4WyRsXVsnbERGX09qYUJIJ10sICRsRF9GbEhhcV9PamEpID09IG0pIHsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICRJNkJsYXFIUS0+eUhyNFE4N0hMclpxKCRRSEw4UXFfbHZGOFttXVsnZFE4N0hMcl9scSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSTZCbGFxSFEtPnlIcjZCbGFxSFFacSgkUUhMOFFxX2x2RjhbbV1bJ29CbGFxSFFfbHEnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEk2QmxhcUhRLT55SHI2QmxhcUhRWWphQkhacSgkUUhMOFFxX2x2RjhbbV1bJ29CbGFxSFFfT2phQkhfbHEnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEk2QmxhcUhRLT55SHJaRFpxKCRRSEw4UXFfbHZGOFttXVsnbERfbHEnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEk2QmxhcUhRLT55SHJaREZacSgkUUhMOFFxX2x2RjhbbV1bJ2xERl9scSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICRRSEw4UXFfbHZGOFskbF1bJ2xxJ107ICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxOEx5SHJfUUJhSF9sdkY4ID0gJEk2QmxhcUhRLT5uSHJfYkZfcThMeUhyX1FCYUhfNlI1QmFIWnFfRWp2cWpyOFFSKCRRSEw4UXFfbHZGOFskbF1bJ2xxJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2RRbHZyX1EoJHE4THlIcl9RQmFIX2x2RjgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcThMeUhyX2xxeSA9IGpRUWpSX0w4YUJEdigkcThMeUhyX1FCYUhfbHZGOCwgJ3E4TF95SHJfT2phQkhfbHEnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRjhRSGpMZSAoJHE4THlIcl9scXkgankgJE9qYUJIKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqUVFqUl9kQnllKCRRSHRCbFFIcV9xOEx5SHIsICRPamFCSCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci8vZFFsdnJfUSgkUUh0QmxRSHFfcThMeUhyKTsKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyAgICAgIE1jRyA5aXcgNUpWaQovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eUxRbGRyIHY4dkxIPTw/ZGVkIEhMZTggJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydCeUhRdjh2TEgnXTsgPz4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQocThMQkRIdnIpLlFIanFSKEZCdkxybDh2ICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQocThMQkRIdnIpLjh2KCJMYWxMVyIsICcjeWRqdl9EanZxanI4UVJfcThMeUhyJywgRkJ2THJsOHYgKCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPalEgRjg4ckhRX2Q4ZEJkX2RRbERqUVIgPSBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxySEQ6ICI8b0Jycjh2IHJSZEg9J29CcnI4dic+PC9vQnJyOHY+IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhPSHZyOiA3eTRqdkhhLkhPcjlyalFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3J2TGFqeXk6ICJvcnYgb3J2LXFqdm5IUSBvcnYteUQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3J2ckh1cjogIiBHYTh5SCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMamFhb2pMVzogRkJ2THJsOHYgKEhPSHZyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9IdnIueXI4ZDRROGRqbmpybDh2KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE9IdnIucWpyai5MYTh5SCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIHJvID0gJzxsIExhanl5PSJGaiBGai1CeUhRIj48L2w+PGwgTGFqeXk9IkZqIEZqLUw4biI+ICc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2pRIERSZGp2SGEgPSAkLjd5NGp2SGEoewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMOHZySHZyOWxTSDoge2JscXJlOiBOQ20sIGVIbG5lcjogWENtfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9lSGpxSFFHOHZyUThheToge0w4dnJROGF5OiAiTGE4eUg4dmFSIn0sCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlSGpxSFF3bHJhSDogJyBNOEwtOUhyIEVqdnFqcjhRUiBWbHlyKicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vUUh5bFNqb2FIOiAicWx5am9hSHEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0w4dnJIdnI6ICAgICAgICB5ckJGRiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDh5bHJsOHY6ICJyOGQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZUhESDogJyN6TktDTm0nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMOHZySHZyQTdqdTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlFhOiAnYjhRV0ZhOGJfbERfcThMeUhyX0RqdnFqcjhRUl9sdkY4LmRlZD9kbHE9PD9kZWQgSExlOCAkZGxxOyA/PiZsRF9scT08P2RlZCBITGU4ICRsRF9scTsgPz4mUWxxPTw/ZGVkIEhMZTggJGxEUV9scTsgPz4mb2xxPTw/ZGVkIEhMZTggJG9scTsgPz4mb09scT08P2RlZCBITGU4ICRvT2xxOyA/PiZEcThMeUhyPTw/ZGVkIEhMZTggQlFhSHZMOHFIKDc4bHYoIiwiLCAkUUh0QmxRSHFfcThMeUhyKSk7ID8+JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpCcjhhOGpxOiByUUJICiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEY4OHJIUXc4OGFvalE6IEY4OHJIUV9kOGRCZF9kUWxEalFSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC95TFFsZHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ib3J2LW5ROEJkIiB5clJhSD0iRGpRbmx2LW84cnI4RDogQ2R1OyI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b0Jycjh2IExhanl5PSJvcnYgb3J2LWRRbERqUVIiPkFMcmw4djwvb0Jycjh2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b0Jycjh2IHFqcmotcjhubmFIPSJxUThkcThidiIgTGFqeXk9Im9ydiBvcnYtZFFsRGpRUiBxUThkcThidi1yOG5uYUgiPjx5ZGp2IExhanl5PSJMalFIciI+PC95ZGp2Pjwvb0Jycjh2PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhIExhanl5PSJxUThkcThidi1ESHZCIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbD48aiBlUUhGPSIjIiBscT0icThMX29CYVdfcThidmE4anFfYWx2VyIgdmpESCA9ICJxOExfb0JhV19xOGJ2YThqcV9hbHZXIiA+TThMQkRIdnIgb0JhVyBxOGJ2YThqcTwvaj48L2FsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFsPjxqIGVRSEY9IiMiIGxxPSJ5SHZxX3E4TEJESHZyeSIgdmpESCA9ICJ5SHZxX3E4TEJESHZyeSIgPjlIdnEgTThMQkRIdnJ5PC9qPjwvYWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQmE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoTDhCdnIoJFFIdEJsUUhxX3E4THlIcikgPiBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx5ZGp2IGxxPSJ5ZGp2X0RqdnFqcjhRUl9xOEx5SHIiIExhanl5PSJham9IYSBham9IYS1sRGQ4UXJqdnIiIHlyUmFIPSJEalFubHY6IC1LbWR1IG1kdSBDZHUgbWR1O0xCUXk4UTogZDhsdnJIUTsiPkVqdnFqcjhRUiBNOEwteUhyKjwveWRqdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGOFEgKCRsID0gbTsgJGwgPCAkdjhfanJyakxlREh2cnlfYWx5cjsgJGwrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUUhMOFFxX3FIcmpsYXkgPSAkM2xhSC0+bkhyTThMXzZSWk0oJGpycmpMZURIdnJ5X2FseXJbJGxdWydGbGFIX3ZqREgnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsdmRCciByUmRIPSJlbHFxSHYiIGxxPSdCZGE4anFIcV9xOEx5SHJfUUgnIHZqREg9IkJkYThqcUhxX3E4THlIcl9RSFtdIiBPamFCSD0iPD9kZWQgSExlOCAkUUhMOFFxX3FIcmpsYXlbbV1bJ3E4TF9yUmRIJ107ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGx2ZEJyIHJSZEg9ImVscXFIdiIgbHE9J0RqdnFqcjhRUl9xOEx5SHInIHZqREg9IkRqdnFqcjhRUl9xOEx5SHIiIE9qYUJIPSI8P2RlZCBITGU4IDc4bHYoJywnLCAkUUh0QmxRSHFfcThMeUhyKTsgPz4iPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0TF9qTExIeXkgPSBtOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEY4UUhqTGUgKCRROGFIX0J5SFFuUThCZHkgankgJFE4YUhfQnlIUW5ROEJkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ1E4YUgnXSA9PSAkUThhSF9CeUhRblE4QmRbJ0J5SFFfblE4QmRfbHEnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRMX2pMTEh5eSA9IFU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkdExfakxMSHl5ID09IFUgJiYgJG9PamFCSF9xSHJqbGF5W21dWyd0TF9qZGRROE9IX3E4THknXSA9PSBVKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxqIGVRSEY9IiNMZWp2bkhfeXJqckJ5IiBxanJqLXI4bm5hSD0iRDhxamEiIGxxPSJMZWp2bkhfeXJqIj48b0Jycjh2IHlyUmFIPWJscXJlOlVtbWR1O2VIbG5lcjpLQ2R1O0RqUW5sdi1vOHJyOEQ6WGR1OyIgTGFqeXk9Im9ydi1kUWxEalFSIj54RyBBZGRROE9qYTwvb0Jycjh2Pjwvaj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChsdl9qUVFqUigkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ0J5SFFfbHEnXSwgJGFqckhRamFfbHZkUThMSHl5X0J5SFF5KSB8fCAoJHlySGRfakxMSHl5ID09IFUgJiYgbHZfalFRalIoJG9PbHEsICRqX3lySGRfalFRKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9hOExXX0JkYThqcV9xOExfYkZfalFRID0galFRalIoVSwgaCwgQywgTiwgVWgsIFVDKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCFsdl9qUVFqUigkYmxEX3FIcmpsYXlbbV1bJ2pfeXJqckJ5J10sICRvYThMV19CZGE4anFfcThMX2JGX2pRUSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aiBMYWp5eT0iZEJhYS1RbG5lciBqX3ZIYl9qcnJqTGVESHZyIiBybHJhSD0ianFxIGpycmpMZURIdnIiIHlyUmFIPSJMQlF5OFE6ZDhsdnJIUTsiPjx5ZGp2IExhanl5PSJvanFuSCBvanFuSC15QkxMSHl5IiB5clJhSD0iZUhsbmVyOkttZHU7Ij48bCBMYWp5eT0iRmogRmotQmRhOGpxIiBqUWxqLWVscXFIdj0iclFCSCI+PC9sPjwveWRqdj48L2o+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CgkJCQkJCQkJCQkJCQkJCQkJPHlyUmFIPgoJCQkJCQkJCQkJCQkJCQkJCSNxOExfeUhyX3Fqcmpyam9hSHsKCQkJCQkJCQkJCQkJCQkJCQlibHFyZTpVbW0lICFsRGQ4UXJqdnI7CgkJCQkJCQkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCQkJCQkJCQoJCQkJCQkJCQkJCQkJCQkJCTwveXJSYUg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEY4UUQgTGFqeXk9IkY4UUQtZThRbFM4dnJqYSBhSEZyLWphbG52IiBscT0iRjhRRC1xOEx5SHJ5LXFqcmpyam9hSCIgREhyZThxPSI0Yzl3IiBqTHJsOHY9IiMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIHlyUmFIPSJibHFyZTpVbW0lICFsRGQ4UXJqdnI7IGVIbG5lcjogVW1tJTsgOE9IUUZhOGI6akJyOCAhbERkOFFyanZyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyam9hSCBMYWp5eT0icmpvYUggcmpvYUgtbzhRcUhRSHEgcmpvYUgteXJRbGRIcSIgbHE9InE4TF95SHJfcWpyanJqb2FIIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVIanE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlIGphbG52PSJMSHZySFEieXJSYUg9ImJscXJlOkNkdTsiPjxsdmRCciByUmRIPSJMZUhMV284dSIgbHE9InE4THlIcl9qcnJqTGVESHZyeV95SGFITHJqYWEiID48L3JlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZT5NOEwgWnE8L3JlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS08cmU+TThMQkRIdnIgMDg8L3JlPi0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZT5NOExCREh2ciB3bHJhSDwvcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlPk04TCB3UmRIPC9yZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmU+RzhEREh2cnk8L3JlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZT5KZGE4anFIcSA2UjwvcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlPkpkYThqcUhxIEFyPC9yZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmU+QUxybDh2PC9yZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlSGpxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxybzhxUj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ybzhxUj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmpvYUg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRjhRRD4KCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLTxxbE8gTGFqeXk9InJqby1kanZIIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoIUhEZHJSKCRfNWl4Smk5d1snal9yam9feUJvJ10pICYmICRfNWl4Smk5d1snal9yam9feUJvJ10gPT0gJ3Jqby1qcnJqTGVESHZyJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJ2pMcmxPSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PiIgbHE9InJqby1qcnJqTGVESHZyIiB5clJhSD0iRGpRbmx2OiBVbWR1IFVtZHUgVW1kdSBVbWR1OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iUThiLUZhQmxxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InlkanZVSyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iYmxxbkhyLWVIanFIUS1vYThMVyI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkeXJIZF9qTExIeXkgPT0gVSAmJiBsdl9qUVFqUigkb09scSwgJGpfeXJIZF9qUVEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9hOExXX0JkYThqcV9xOExfYkZfalFRID0galFRalIoVSwgaCwgQywgTiwgVWgsIFVDKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoIWx2X2pRUWpSKCRibERfcUhyamxheVttXVsnal95cmpyQnknXSwgJG9hOExXX0JkYThqcV9xOExfYkZfalFRKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxqIExhanl5PSJkQmFhLVFsbmVyIGpfdkhiX2pycmpMZURIdnIiIHJscmFIPSJqcXEganJyakxlREh2ciIgeXJSYUg9IkxCUXk4UTpkOGx2ckhROyI+PHlkanYgTGFqeXk9Im9qcW5IIG9qcW5ILXlCTExIeXkiIHlyUmFIPSJlSGxuZXI6S21kdTsiPjxsIExhanl5PSJGaiBGai1CZGE4anEiIGpRbGotZWxxcUh2PSJyUUJIIj48L2w+PC95ZGp2Pjwvaj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iTDh2ckh2ci1vOHUgIiBscT0icWxPX2pycmpMZURIdnJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4tLT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJyam8tZGp2SCA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCFIRGRyUigkXzVpeEppOXdbJ2pfcmpvX3lCbyddKSAmJiAkXzVpeEppOXdbJ2pfcmpvX3lCbyddID09ICdyam8tcThMeUhyLURseXlsdm4nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSExlOCAnakxybE9IJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+IiBscT0icmpvLXE4THlIci1EbHl5bHZuIiB5clJhSD0iRGpRbmx2OiBVbWR1IFVtZHUgVW1kdSBVbWR1OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBscT0icThMeUhyLURseXlsdm4iPjwvcWxPPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCQkJCQkJCQkJCQkJCgkJCQkJCQkJCQkJCQoJCQkJCQkJCQkJCQk8IS0tcWxPIExhanl5PSJROGItRmFCbHEiPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ2JGX09sSGJfclJkSCddID09IEspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0icmpvLWJscW5IciIgeXJSYUg9IkRqUW5sdjogVW1kdSBVbWR1IFVtZHUgVW1kdTsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhIExhanl5PSJ2ak8gdmpPLXJqb3kiIGxxPSJEUndqb0siPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbCBMYWp5eT0iakxybE9IIj48aiBlUUhGPSIjcmpvLUZsYUhkUUhPbEhiIj48bCBMYWp5eT0ibEw4di1IUkgtOGRIdiI+PC9sPiA0UUhPbEhiPC9qPjwvYWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFsIExhanl5PSI8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghSERkclIoJF81aXhKaTl3WydqX3Jqb195Qm9LJ10pICYmICRfNWl4Smk5d1snal9yam9feUJvSyddID09ICdyam8tRmxhSGx2RjgnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJ2pMcmxPSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+Ij48aiBlUUhGPSIjcmpvLUZsYUhsdkY4Ij48bCBMYWp5eT0iIGxMOHYtRmxhSC1qYXIiPjwvbD4gWnZGOFFEanJsOHY8L2o+PC9hbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQmE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJyam8tTDh2ckh2ciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0icmpvLWRqdkggakxybE9IIiBscT0icmpvLUZsYUhkUUhPbEhiIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyB5clJhSD0iRGpRbmx2OiBVbWR1IFVtZHUgVW1kdSBVbWR1OyIgbHE9InFsT19GbGFIX2RRSE9sSGIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNUhMOFFxIEp2ak9qbGFqb2FIIQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJyam8tZGp2SCA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghSERkclIoJF81aXhKaTl3WydqX3Jqb195Qm9LJ10pICYmICRfNWl4Smk5d1snal9yam9feUJvSyddID09ICdyam8tRmxhSGx2RjgnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJ2pMcmxPSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+IiBscT0icmpvLUZsYUhsdkY4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyB5clJhSD0iRGpRbmx2OiBVbWR1IFVtZHUgVW1kdSBVbWR1OyIgbHE9InFsT19GbGFIX2x2RjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNUhMOFFxIEp2ak9qbGFqb2FIIQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTy0tPgoJCQkJCQkJCQkJCQkKCQkJCQkJCQkJCQkJCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJyam8tZGp2SCA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghSERkclIoJF81aXhKaTl3WydqX3Jqb19Eamx2J10pICYmICRfNWl4Smk5d1snal9yam9fRGpsdiddID09ICdyam8tcmp5V3knKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJ2pMcmxPSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkdjhfcmp5V2FseXJfbHZGOCA8PSBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggImVscUgiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PiIgbHE9InJqby1yanlXeSIgPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGI4UVdGYThieXJIZF9xSHJqbGF5ID0gJEk2QmxhcUhRLT5uSHJfSTZCbGFxSFFZamFCSF82WnEoJG9scSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRiOFFXRmE4YnlySGRfdjggPSBMOEJ2cigkYjhRV0ZhOGJ5ckhkX3FIcmpsYXkpOwovLyBGOFEoKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iakxMOFFxbDh2IiBscT0iakxMOFFxbDh2SyIgeXJSYUg9IkRqUW5sdjogVW1kdSBVbWR1IFVtZHUgVW1kdTsiPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGOFEgKCRsID0gbTsgJGwgPCAkYjhRV0ZhOGJ5ckhkX3Y4OyAkbCsrKSB7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeXJIZF9sdkY4ID0gJEk2QmxhcUhRLT5uSHJfSTZCbGFxSFFZamFCSF9acSgkYjhRV0ZhOGJ5ckhkX3FIcmpsYXlbJGxdWydscSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkakxMOFFxbDh2X29PbHEgPSAkeXJIZF9sdkY4W21dWydscSddOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkakxMOFFxbDh2X1FIRkYgPSAnakxMOFFxbDh2X3lySGRfJyAuICRsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkakxMOFFxbDh2X29PbHEgPT0gJG9PbHEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGpMTDhRcWw4dl9MOGFhamR5SCA9ICdsdic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGpMTDhRcWw4dl9MOGFhamR5SCA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9ImpMTDhRcWw4di1uUThCZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9ImpMTDhRcWw4di1lSGpxbHZuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxqIGVRSEY9IiM8P2RlZCBITGU4ICRqTEw4UXFsOHZfUUhGRjsgPz4iIHFqcmotZGpRSHZyPSIjakxMOFFxbDh2SyIgcWpyai1yOG5uYUg9Ikw4YWFqZHlIIiBMYWp5eT0iakxMOFFxbDh2LXI4bm5hSCI+PD9kZWQgSExlOCAkeXJIZF9sdkY4W21dWyd5ckhkX3ZqREgnXTsgPz48L2o+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJqTEw4UXFsOHYtbzhxUiBMOGFhamR5SCA8P2RlZCBITGU4ICRqTEw4UXFsOHZfTDhhYWpkeUg7ID8+IiBscT0iPD9kZWQgSExlOCAkakxMOFFxbDh2X1FIRkY7ID8+Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9ImpMTDhRcWw4di1sdnZIUSIgeXJSYUg9Im9qTFduUThCdnEtTDhhOFE6ICMzMzNDM0MiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJqeVdhbHlyX2x2RjhfakxMID0gJEk2QmxhcUhRLT5uSHI2QmxhcUhRd2p5V182UllqYUJIWnEoJHlySGRfbHZGOFttXVsnbHEnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHY4X3JqeVdhbHlyX2x2RjhfakxMID0gTDhCdnIoJHJqeVdhbHlyX2x2RjhfakxMKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyam9hSCBMYWp5eT0icmpvYUggcmpvYUgtbzhRcUhRSHEgIiB5clJhSD0iRGpRbmx2OiBVbWR1IG1kdSBVbWR1IG1kdTsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVIanE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlIHlyUmFIPSJibHFyZTpDJSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmUgeXJSYUg9ImJscXJlOktDJSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdqeVcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZSB5clJhSD0iYmxxcmU6Z20lIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2p5VyBNSHJqbGF5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlSGpxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm84cVI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKEhEZHJSKCR2OF9yanlXYWx5cl9sdkY4X2pMTCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxIEw4YXlkanY9IlgiPndqeVcgSnZqT2psYWpvYUghPC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGOFEgKCR1ID0gbTsgJHUgPCAkdjhfcmp5V2FseXJfbHZGOF9qTEw7ICR1KyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJqeVdfbHZGOCA9ICR3anlXYWx5ci0+bkhyd2p5V1ZseXJfNlJaTSgkcmp5V2FseXJfbHZGOF9qTExbJHVdWydyanlXX2xxJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmp5V19xbHlkYWpSX3JSZEggPSAkcmp5V2FseXJfbHZGOF9qTExbJHVdWydyanlXX3FseWRhalJfclJkSCddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmp5V19MZWxhcV9PamFCSHkgPSAkSTZCbGFxSFEtPm5IcjZCbGFxSFF3anlXR2VsYXFfNlI2d1pxKCRyanlXYWx5cl9sdkY4X2pMTFskdV1bJ2xxJ10pOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCFsdl9qUVFqUigkakxMOFFxbDh2X29PbHEsICRqX3lySGRfalFRKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExlSExXX284dV9MYWp5eSA9ICdxbHlqb2FIcSBRSGpxOHZhUic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJHlySGRfakxMSHl5ID09IFUgJiYgbHZfalFRalIoJGpMTDhRcWw4dl9vT2xxLCAkal95ckhkX2pRUSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMZUhMV19vOHVfTGFqeXkgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkIEhMZTggJHUgKyBVOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZCBybHJhSD0iPD9kZWQgSExlOCAkcmp5V19sdkY4W21dWydxSHlMUWxkcmw4diddOyA/PiIgTGFqeXk9InJqb2FIX3I4OGFfYWx2VyIgeXJSYUg9IkxCUXk4UTogZDhsdnJIUTsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICRyanlXX2x2RjhbbV1bJ3JqeVdfdmpESCddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcnE+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKEw4QnZyKCRyanlXX0xlbGFxX09qYUJIeSkgPiBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyam9hSCBMYWp5eT0icmpvYUggcmpvYUgtbzhRcUhRSHEgUUh5ZDh2eWxPSCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm84cVI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhIExhanl5PSJyanlXLWFseXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFFqdnEgPSBRanZxKFBQUCwgUFBQUFBQKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGOFFIakxlICgkcmp5V19MZWxhcV9PamFCSHkgankgJHJqeVdfTGVsYXFfT2phQkgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxEX0xlbGFxX3JqeVcgPSAkSThRV0ZhOGItPm5Ickk4UVdGYThiX1pFX3dqeVdHZWxhcV82UjZ3WnEoJGJsRF9scSwgJHJqeVdhbHlyX2x2RjhfakxMWyR1XVsnbHEnXSwgJHJqeVdfTGVsYXFfT2phQkhbJ2xxJ10sICRsRF9RbHEpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKEw4QnZyKCRsRF9MZWxhcV9yanlXKSA+IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMZUhMV0hxID0gJ0xlSExXSHE9IkxlSExXSHEiJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMZUhMV0hxID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkbERfTGVsYXFfcmp5V1ttXVsndl9qJ10gPT0gVSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHFseWpvYUhfcmp5V0xlbGFxID0gInFseWpvYUhxIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMZUhMV0hxID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmpfTGVITFdIcSA9ICdMZUhMV0hxPSJMZUhMV0hxIic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcWx5am9hSF9yanlXTGVsYXEgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMZUhMV0hxID0gJExlSExXSHE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmpfTGVITFdIcSA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkcmp5V19MZWxhcV9PamFCSFsnRGp2cWpyOFFSJ10gPT0gVSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJqeVdfRGp2cWpyOFFSID0gJzx5QmQgTGFqeXk9InJIdXItSFFROFEgYUhqcSI+KjwveUJkPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmp5V19EanZxanI4UVIgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJHJqeVdfcWx5ZGFqUl9yUmRIID09IFUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGx2ZEJyICA8P2RlZCBITGU4ICRxbHlqb2FIX3JqeVdMZWxhcTsgPz4gPD9kZWQgSExlOCAkTGVITFdfbzh1X0xhanl5OyA/PiA8P2RlZCBITGU4ICRMZUhMV0hxOyA/PiBPamFCSD0iPD9kZWQgSExlOCAkcmp5V2FseXJfbHZGOF9qTExbJHVdWydyanlXX2xxJ10gLiAnOicgLiAkcmp5V19MZWxhcV9PamFCSFsnbHEnXTsgPz4iIGxySERRSEY9Ijw/ZGVkIEhMZTggJHJqeVdhbHlyX2x2RjhfakxMWyR1XVsnbHEnXSAuICc6JyAuICRvT2xxOyA/PiIgTGFqeXk9IkxlSExXX0YgTGFqeXlfcmp5V19MZWxhcV9PamFCSCIgclJkSD0iTGVITFdvOHUiIHZqREg9InJqeVdfTGVsYXFfT2phQkhfPD9kZWQgSExlOCAkUWp2cTsgPz4iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkIEhMZTggJHJqeVdfTGVsYXFfT2phQkhbJ3JqeVdfTGVsYXFfdmpESCddIC4gJyAnIC4gJHJqeVdfRGp2cWpyOFFSOyA/PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bHZkQnIgIDw/ZGVkIEhMZTggJHFseWpvYUhfcmp5V0xlbGFxOyA/PiA8P2RlZCBITGU4ICRMZUhMV19vOHVfTGFqeXk7ID8+IDw/ZGVkIEhMZTggJExlSExXSHE7ID8+IE9qYUJIPSI8P2RlZCBITGU4ICRyanlXYWx5cl9sdkY4X2pMTFskdV1bJ3JqeVdfbHEnXSAuICc6JyAuICRyanlXX0xlbGFxX09qYUJIWydscSddOyA/PiIgbHJIRFFIRj0iPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSExlOCAkcmp5V2FseXJfbHZGOF9qTExbJHVdWydscSddIC4gJzonIC4gJG9PbHE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+IiBMYWp5eT0iTGVITFdfRiBMYWp5eV9yanlXX0xlbGFxX09qYUJIIiByUmRIPSJRanFsOCIgdmpESD0icmp5V19MZWxhcV9PamFCSF88P2RlZCBITGU4ICRRanZxOyA/PiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkIEhMZTggJHJqeVdfTGVsYXFfT2phQkhbJ3JqeVdfTGVsYXFfdmpESCddIC4gJyAnIC4gJHJqeVdfRGp2cWpyOFFSOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJHJqeVdfcWx5ZGFqUl9yUmRIID09IFUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGx2ZEJyIDw/ZGVkIEhMZTggJExlSExXX284dV9MYWp5eTsgPz4gPD9kZWQgSExlOCAkdmpfTGVITFdIcTsgPz4gT2phQkg9Ijw/ZGVkIEhMZTggJHJqeVdhbHlyX2x2RjhfakxMWyR1XVsncmp5V19scSddIC4gJzonIC4gJHJqeVdfTGVsYXFfT2phQkhbJ2xxJ107ID8+IiBsckhEUUhGPSI8P2RlZCBITGU4ICRyanlXYWx5cl9sdkY4X2pMTFskdV1bJ2xxJ10gLiAnOicgLiAkb09scTsgPz4iIExhanl5PSJMZUhMV19GIExhanl5X3JqeVdfTGVsYXFfdmoiIHJSZEg9IkxlSExXbzh1IiB2akRIPSJyanlXX0xlbGFxX3ZqXzw/ZGVkIEhMZTggJFFqdnE7ID8+IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eWRqdiBMYWp5eT0iYWpvSGEgYWpvSGEtbHZGOCI+MC9BPC95ZGp2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ycT4gCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkcmp5V19MZWxhcV9PamFCSFsnSHZqb2FIX0w4RERIdnJ5J10gPT0gVSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEw4RERIdnJ5X2FseXIgPSAkSThRV0ZhOGItPm5Ickk4UVdGYThiX1pFX3dqeVdHZWxhcUc4RERIdnJfNlI2d1pxX0w4QnZyKCRvbHEsICRyanlXYWx5cl9sdkY4X2pMTFskdV1bJ2xxJ10sICRyanlXX0xlbGFxX09qYUJIWydscSddLCAkbERfUWxxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKEw4QnZyKCRMOERESHZyeV9hbHlyKSA+IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2OF9MOERESHZyeV9hbHlyX0xhanl5ID0gJ29ydi1sdkY4JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2OF9MOERESHZyeV9hbHlyX0xhanl5ID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkeXJIZF9qTExIeXkgPT0gVSAmJiBsdl9qUVFqUigkb09scSwgJGpfeXJIZF9qUVEpKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ITGU4ICc8bCB5clJhSD0iTEJReThROiBkOGx2ckhROyIgbHE9IicgLiAkcmp5V2FseXJfbHZGOF9qTExbJHVdWydscSddIC4gJ18nIC4gJHJqeVdfTGVsYXFfT2phQkhbJ2xxJ10gLiAnIiBMYWp5eT0ibEw4di1MOERESHZyeS1qYXIgal92SGJfcmp5V19MOERESHZyICcuJHY4X0w4RERIdnJ5X2FseXJfTGFqeXkuJyI+PC9sPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICc8b0Jycjh2IHJSZEg9Im9CcnI4diIgeXJSYUg9IkxCUXk4UTogZDhsdnJIUTsiIGxxPSInIC4gJHJqeVdhbHlyX2x2RjhfakxMWyR1XVsnbHEnXSAuICdfJyAuICRyanlXX0xlbGFxX09qYUJIWydscSddIC4gJyIgTGFqeXk9Im9ydiBvcnYtUThCdnEtRGx2ICcgLiAkdjhfTDhEREh2cnlfYWx5cl9MYWp5eSAuICcgal92SGJfcmp5V19MOERESHZyIj48eWRqdj48bCBMYWp5eT0ibEw4di1MOERESHZyLWphciI+PC9sPjwveWRqdj48L29CcnI4dj4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ITGU4ICc8bCB5clJhSD0iTEJReThROiBkOGx2ckhROyIgbHE9IicgLiAkcmp5V2FseXJfbHZGOF9qTExbJHVdWydscSddIC4gJ18nIC4gJHJqeVdfTGVsYXFfT2phQkhbJ2xxJ10gLiAnIiBMYWp5eT0ibEw4di1MOERESHZyeS1qYXIgcWx5am9hSF9qcXEgal92SGJfcmp5V19MOERESHZyICcuJHY4X0w4RERIdnJ5X2FseXJfTGFqeXkuJyI+PC9sPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICc8b0Jycjh2IHJSZEg9Im9CcnI4diIgeXJSYUg9IkxCUXk4UTogZDhsdnJIUTsiIGxxPSInIC4gJHJqeVdhbHlyX2x2RjhfakxMWyR1XVsnbHEnXSAuICdfJyAuICRyanlXX0xlbGFxX09qYUJIWydscSddIC4gJyIgTGFqeXk9Im9ydiBvcnYtUThCdnEtRGx2ICcgLiAkdjhfTDhEREh2cnlfYWx5cl9MYWp5eSAuICcgcWx5am9hSF9qcXEgal92SGJfcmp5V19MOERESHZyIj48eWRqdj48bCBMYWp5eT0ibEw4di1MOERESHZyLWphciI+PC9sPjwveWRqdj48L29CcnI4dj4nOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JxPiAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvclE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JhPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ybzhxUj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Jqb2FIPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJzx5ZGp2IExhanl5PSJham9IYSI+SnZqT2psYWpvYUghPC95ZGp2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ycT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JvOHFSPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmpvYUg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0icmpvLWRqdkggPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoIUhEZHJSKCRfNWl4Smk5d1snal9yam9fRGpsdiddKSAmJiAkXzVpeEppOXdbJ2pfcmpvX0RqbHYnXSA9PSAncmpvLVE4YUh5JykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICdqTHJsT0gnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PiIgbHE9InJqby1ROGFIeSIgeXJSYUg9IkRqUW5sdjogVW1kdSBDZHUgVW1kdSBDZHU7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iUThiLUZhQmxxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InlkanZOIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJROGItRmFCbHEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJ5ZGp2TiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWggTGFqeXk9ImRCYWEtYUhGciI+SThRV0ZhOGIgOXJqckJ5ICA8L2VoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InlkanZLIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2E4TFdfSHFscl95cmpyQnkgPSBqUVFqUihVLCBoLCBDLCBVVSwgVUMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ITGU4ICR5ckhkX2pMTEh5eTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghbHZfalFRalIoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10sICRvYThMV19IcWxyX3lyanJCeSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJHlySGRfakxMSHl5ID09IFUgJiYgbHZfalFRalIoJG9PbHEsICRqX3lySGRfalFRKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJGRqUWphYUhhX3lySGRfUUJ2dmx2biA9PSBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyRqYVFIanFSX0J5SFFfZFE4TEh5eUhxID0gJEk4UVdGYThiLT5uSHJfSVpFOXJqckJ5XzZacV9KWk0oJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydCeUhRX2xxJ10sICRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnUThhSCddLCAkb2xxLCAkb09scSwgJGxEX1FscSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xGIChMOEJ2cigkamFRSGpxUl9CeUhRX2RROExIeXlIcSkgPD0gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKEw4QnZyKCRhanJIUWphX0ZhOGJfeXJIZHlfbHZkUThMSHl5KSA8PSBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b0Jycjh2IExhanl5PSJvQnJyOHZvYWx2VyIgeXJSYUg9IiAgRjh2ci15bFNIOiBVVWR1OyIgZVFIRj0iI0Q4cWphX3lyanJCeV9xanllbzhqUXFVIiAgcWpyai1yOG5uYUg9IkQ4cWphIiByUmRIPSJvQnJyOHYiIExhanl5PSIgICI+IDx5ZGp2IHlyUmFIPSIgICAgRGpRbmx2LVFsbmVyOiB6ZHU7Ij4gPGxEbiB5UUw9Ii4uL1FIeThCUUxIeS9sRGpuSHkvOWxudi04RkYuZHZuIiB5clJhSD0iZUhsbmVyOiBVaGR1OyBEalFubHYtcjhkOiAtaGR1OyBEalFubHYtYUhGcjogaGR1OyI+PC95ZGp2PiA5bG52LThGRjwvb0Jycjh2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJ5ZGp2TiI+CgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRibERfcUhyamxheVttXVsnal9vQmxhcUhRX09qYUJIX2xxJ10gPT0gJG9PbHEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5ckhkX1E4YUhfbHEgPSAkal9ROGFIX0RqeXJIUV9scTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5ckhkX1E4YUhfbHEgPSAkb09qYUJIX3FIcmpsYXlbbV1bJ1E4YUhfRGp5ckhRX2xxJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFE4YUhfRGp5ckhRX2x2RjggPSAkSTZCbGFxSFEtPm5Icl81OGFIRWp5ckhRX1pNKCR5ckhkX1E4YUhfbHEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmpvYUggTGFqeXk9InJqb2FIIHJqb2FILW84UXFIUUhxIHJqb2FILXlyUWxkSHEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlSGpxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNThhSCB3UmRIIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKeUhRIDJROEJkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMcmw4dgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JlPiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVIanE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm84cVI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyR5ckhkX1E4YUhfbHEgPSAkal9ROGFIX0RqeXJIUV9scTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsRiAoJHlySGRfUThhSF9scSA9PSAtVSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kUUJhSF9sdkY4ID0gJEk1QmFILT5uSHJfNUJhSF9aTSgkeXJIZF9sdkY4W21dWydRQmFIX2xxJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEY4UURCYWpfcUhyamxheSA9ICRJNUJhSC0+bkhyX0Y4UURCYWpfb1I1QmFIKCRvT2phQkhfcUhyamxheVttXVsnUUJhSF9scSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5ckhkX1E4YUhfbHEgPSAkRjhRREJhal9xSHJqbGF5W21dWydROGFIX0RqeXJIUV9scSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAqLwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSTU4YUgtPnlIcjU4YUhFanlySFFacSgkeXJIZF9ROGFIX2xxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUThhSF9CeUhRblE4QmR5VSA9ICRJNThhSC0+bkhyX0F5eWxudkhxX0p5SFFuUThCZCgpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGOFFIakxlICgkUThhSF9CeUhRblE4QmR5VSBqeSAkUThhSF9CeUhRblE4QmRVKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkUThhSF9CeUhRblE4QmRVWydROGFIX3JSZEgnXSA9PSBVKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRRbERqUVJfQnlIUW5ROEJkX2x2RjhVID0gJEp5SFEtPm5Ickp5SFEyUThCZF9vUlpxKCRROGFIX0J5SFFuUThCZFVbJ0J5SFFfblE4QmRfbHEnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkUWxEalFSX0J5SFFuUThCZFUgPSAkZFFsRGpRUl9CeUhRblE4QmRfbHZGOFVbbV1bJ3ZqREgnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRRbERqUVJfQnlIUW5ROEJkX2xxVSA9ICRkUWxEalFSX0J5SFFuUThCZF9sdkY4VVttXVsnbHEnXTsgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkUThhSF9CeUhRblE4QmRVWydCeUhRX25ROEJkX2xxJ10gPT0gbSB8fCAkUThhSF9CeUhRblE4QmRVWydCeUhRX25ROEJkX2xxJ10gPT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZFFsRGpRUl9CeUhRblE4QmRfbHZGOFUgPSAkSnlIUS0+bkhySnlIUTU4YUhfb1JacSgkUThhSF9CeUhRblE4QmRVWydROGFIX0RqeXJIUV9scSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZFFsRGpRUl9CeUhRblE4QmRVID0gJGRRbERqUVJfQnlIUW5ROEJkX2x2RjhVW21dWydROGFIX0RqeXJIUSddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkUWxEalFSX0J5SFFuUThCZF9scVUgPSAkZFFsRGpRUl9CeUhRblE4QmRfbHZGOFVbbV1bJ2xxJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZFFsRGpRUl9CeUhRblE4QmRfbHZGOFUgPSAkSnlIUS0+bkhySnlIUTJROEJkX29SWnEoJFE4YUhfQnlIUW5ROEJkVVsnQnlIUV9uUThCZF9scSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZFFsRGpRUl9CeUhRblE4QmRVID0gJGRRbERqUVJfQnlIUW5ROEJkX2x2RjhVW21dWyd2akRIJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRRbERqUVJfQnlIUW5ROEJkX2xxVSA9ICRkUWxEalFSX0J5SFFuUThCZF9sdkY4VVttXVsnbHEnXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRqT2psYWpvYUhfZFFsRGpRUl9CeUhReVUgPSAkSThRV0ZhOGItPm5Ick1FX0FPamxham9hSEp5SFFfNlI1OGFIKCRkbHEsICRkUWxEalFSX0J5SFFuUThCZF9scVUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRCdmpPamxham9hSF9kUWxEalFSX0J5SFF5VSA9ICRJOFFXRmE4Yi0+bkhyTUVfQU9qbGFqb2FISnlIUV82UjU4YUgoJGRscSwgJGRRbERqUVJfQnlIUW5ROEJkX2xxVSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJFE4YUhfQnlIUW5ROEJkVVsnUThhSF9yUmRIJ10gPT0gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlITDh2cWpRUl9CeUhRblE4QmRfbHZGOFUgPSAkSnlIUS0+bkhySnlIUTJROEJkX29SWnEoJFE4YUhfQnlIUW5ROEJkVVsnQnlIUV9uUThCZF9scSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5SEw4dnFqUVJfQnlIUW5ROEJkVSA9ICR5SEw4dnFqUVJfQnlIUW5ROEJkX2x2RjhVW21dWyd2akRIJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeUhMOHZxalFSX0J5SFFuUThCZF9scVUgPSAkeUhMOHZxalFSX0J5SFFuUThCZF9sdkY4VVttXVsnbHEnXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkak9qbGFqb2FIX3lITDh2cWpRUl9CeUhReVUgPSAkSThRV0ZhOGItPm5Ick1FX0FPamxham9hSEp5SFFfNlI1OGFIKCRkbHEsICR5SEw4dnFqUVJfQnlIUW5ROEJkX2xxVSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQnZqT2psYWpvYUhfeUhMOHZxalFSX0J5SFF5VSA9ICRJOFFXRmE4Yi0+bkhyTUVfQU9qbGFqb2FISnlIUV82UjU4YUgoJGRscSwgJHlITDh2cWpRUl9CeUhRblE4QmRfbHFVKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkUThhSF9CeUhRblE4QmRVWydROGFIX3JSZEgnXSA9PSAtVSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGbEhhcV9scSA9ICRROGFIX0J5SFFuUThCZFVbJ0J5SFFfblE4QmRfbHEnXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkWkVqeXJIUSA9IHZIYiBsdnFIdV9EanlySFEoJHFvKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGbEhhcV9xSHJqbGF5ID0gJFpFanlySFEtPm5Iclp2cUh1M2xIYXFfNlJacSgkRmxIYXFfbHEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEZsSGFxX3ZqREggPSAkRmxIYXFfcUhyamxheVttXVsnRmxIYXFfdmpESCddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxEX09qYUJIX3FIcmpsYXkgPSAkWkVqeXJIUS0+bkhyRWp5ckhRM2xIYXFfdmpESCgkbERfbHEsICRsRF9RbHEsICdsRF9GbEhhcV8nIC4gJEZsSGFxX2xxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGbEhhcV9PamFCSCA9ICRsRF9PamFCSF9xSHJqbGF5W21dWydsRF9GbEhhcV8nIC4gJEZsSGFxX2xxXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZFFsRGpRUl9CeUhRblE4QmRfbHZGOFUgPSAkSnlIUS0+bkhySnlIUTJROEJkX29SdmpESCgkRmxIYXFfT2phQkgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRRbERqUVJfQnlIUW5ROEJkVSA9ICRkUWxEalFSX0J5SFFuUThCZF9sdkY4VVttXVsndmpESCddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRRbERqUVJfQnlIUW5ROEJkX2xxVSA9ICRkUWxEalFSX0J5SFFuUThCZF9sdkY4VVttXVsnbHEnXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkak9qbGFqb2FIX2RRbERqUVJfQnlIUXlVID0gJEk4UVdGYThiLT5uSHJKeUhReV9KeUhRMlE4QmRUbEhRalFMZVIoJGRRbERqUVJfQnlIUW5ROEJkX2xxVSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kQnZqT2psYWpvYUhfZFFsRGpRUl9CeUhReVUgPSAkSThRV0ZhOGItPm5Ick1FX0p2ak9qbGFqb2FISnlIUV82UjU4YUgoJGRscSwgJGRRbERqUVJfQnlIUW5ROEJkX2xxVSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJFE4YUhfQnlIUW5ROEJkVVsnUThhSF9yUmRIJ10gPT0gLUspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGbEhhcV9scSA9ICRROGFIX0J5SFFuUThCZFVbJ0J5SFFfblE4QmRfbHEnXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkWkVqeXJIUSA9IHZIYiBsdnFIdV9EanlySFEoJHFvKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGbEhhcV9xSHJqbGF5ID0gJFpFanlySFEtPm5Iclp2cUh1M2xIYXFfNlJacSgkRmxIYXFfbHEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEZsSGFxX3ZqREggPSAkRmxIYXFfcUhyamxheVttXVsnRmxIYXFfdmpESCddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGxEX09qYUJIX3FIcmpsYXkgPSAkWkVqeXJIUS0+bkhyRWp5ckhRM2xIYXFfdmpESCgkbERfbHEsICRsRF9RbHEsICdsRF9GbEhhcV8nIC4gJEZsSGFxX2xxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRGbEhhcV9PamFCSCA9ICRsRF9PamFCSF9xSHJqbGF5W21dWydsRF9GbEhhcV8nIC4gJEZsSGFxX2xxXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeUhMOHZxalFSX0J5SFFuUThCZF9sdkY4VSA9ICRKeUhRLT5uSHJKeUhRMlE4QmRfb1J2akRIKCRGbEhhcV9PamFCSCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkeUhMOHZxalFSX0J5SFFuUThCZFUgPSAkeUhMOHZxalFSX0J5SFFuUThCZF9sdkY4VVttXVsndmpESCddOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHlITDh2cWpRUl9CeUhRblE4QmRfbHFVID0gJHlITDh2cWpRUl9CeUhRblE4QmRfbHZGOFVbbV1bJ2xxJ107CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGpPamxham9hSF95SEw4dnFqUVJfQnlIUXlVID0gJEk4UVdGYThiLT5uSHJKeUhReV9KeUhRMlE4QmRUbEhRalFMZVIoJHlITDh2cWpRUl9CeUhRblE4QmRfbHFVKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJEJ2ak9qbGFqb2FIX3lITDh2cWpRUl9CeUhReVUgPSAkSThRV0ZhOGItPm5Ick1FX0p2ak9qbGFqb2FISnlIUV82UjU4YUgoJGRscSwgJHlITDh2cWpRUl9CeUhRblE4QmRfbHFVKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVOPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRROGFIX0RqeXJIUV9sdkY4W21dWydCeUhRX3JSZEgnXSA9PSBLKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggIjU4YUggRWp5ckhRIC0+IEp5SFF5IjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICI0UWxEalFSIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZU4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJFE4YUhfRGp5ckhRX2x2RjhbbV1bJ0J5SFFfclJkSCddID09IFUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICRkUWxEalFSX0J5SFFuUThCZFU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKGx5eUhyKCRkUWxEalFSX3FIYUhuanJIKSAmJiAkZFFsRGpRUl9xSGFIbmpySCA9PSBVKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJGpfeXJqckJ5IC4gJzx5ZGp2IExhanl5PSJham9IYSBham9IYS1sRGQ4UXJqdnIiPk1IYUhuanJIPC95ZGp2Pic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkUThhSF9EanlySFFfbHZGOFttXVsnQnlIUV9yUmRIJ10gPT0gSykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJFE4YUhfRGp5ckhRX2x2RjhbbV1bJ1E4YUhfRGp5ckhRJ107CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+ICAgICAgICAgICAgICAgICAgICAgIAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvQnJyOHYgclJkSD0ib0Jycjh2IiBMYWp5eT0ib3J2X0J5SFF5X2FseXIgb3J2IG9ydi1ROEJ2cS1EbHYgb3J2IG9ydi1ialF2bHZuICIgbHJIRHJSZEg9Ijw/ZGVkIEhMZTggJFE4YUhfRGp5ckhRX2x2RjhbbV1bJ0J5SFFfclJkSCddOyA/PiIgbHJIRFFIRj0iPD9kZWQgbEYgKCRROGFIX0RqeXJIUV9sdkY4W21dWydCeUhRX3JSZEgnXSA9PSBVKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICRkUWxEalFSX0J5SFFuUThCZF9scVU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gSGF5SCBsRiAoJFE4YUhfRGp5ckhRX2x2RjhbbV1bJ0J5SFFfclJkSCddID09IEspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJHlySGRfUThhSF9scTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA/PiI+PHlkanY+PGwgTGFqeXk9ImxMOHYtblE4QmQiPjwvbD48L3lkanY+PC9vQnJyOHY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkUThhSF9EanlySFFfbHZGOFttXVsnQnlIUV9yUmRIJ10gPT0gVSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlTj45SEw4dnFqUVI8L2VOPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZCBITGU4ICR5SEw4dnFqUVJfQnlIUW5ROEJkVTsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghSERkclIoJHlITDh2cWpRUl9CeUhRblE4QmRfbHFVKSAmJiBseXlIcigkeUhMOHZxalFSX3FIYUhuanJIKSAmJiAkeUhMOHZxalFSX3FIYUhuanJIID09IFUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSExlOCAnPHlkanYgTGFqeXk9ImFqb0hhIGFqb0hhLWxEZDhRcmp2ciI+TUhhSG5qckg8L3lkanY+JzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9CcnI4diByUmRIPSJvQnJyOHYiIExhanl5PSJvcnZfQnlIUXlfYWx5ciBvcnYgb3J2LVE4QnZxLURsdiBvcnYgb3J2LWJqUXZsdm4gIiBsckhEUUhGPSI8P2RlZCBITGU4ICR5SEw4dnFqUVJfQnlIUW5ROEJkX2xxVTsgPz4iPjx5ZGp2PjxsIExhanl5PSJsTDh2LW5ROEJkIj48L2w+PC95ZGp2Pjwvb0Jycjh2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZU4+SThRVy1GYThiIEVqdmpuSFE8L2VOPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+CiAgICAgICAgICAgICAgICA8P2RlZCBITGU4ICRiRGp2am5IUV92akRIOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JxPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvclE+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJsRF9RUThhSF9CeUhReV9Cdmx0QkggPSBqUVFqUigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRibERfUVE4YUhfeXJqckJ5ID0galFRalIoVW0sIGcsIFVOLCBVeiwgbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJsRF9RUThhSF95cmpyQnlfQnlIUXkgPSAkSTZCbGFxSFEtPm5Icl9iOFFXRmE4Yl9sRF9BUThhSHlfNlI5cmpyQnkoJGxEX2xxLCAkbERfUWxxLCAkb09scSwgJGJsRF9xSHJqbGF5W21dWydqX3lyanJCeSddKTsKLy9kUWx2cl9RKCRibERfUVE4YUhfeXJqckJ5X0J5SFF5KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoIUhEZHJSKCRibERfUVE4YUhfeXJqckJ5X0J5SFF5KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGOFFIakxlICgkYmxEX1FROGFIX3lyanJCeV9CeUhReSBqeSAkYmxEX1FROGFIX3lyanJCeV9CeUhRKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoIWx2X2pRUWpSKCRibERfUVE4YUhfeXJqckJ5X0J5SFFbJ0J5SFFfbHEnXSwgJGJsRF9RUThhSF9CeUhReV9Cdmx0QkgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalFRalJfZEJ5ZSgkYmxEX1FROGFIX0J5SFF5X0J2bHRCSCwgJGJsRF9RUThhSF95cmpyQnlfQnlIUVsnQnlIUV9scSddKTsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQnlIUV9sdkY4ID0gJEp5SFEtPm5Ickp5SFF5XzZSWnEoJGJsRF9RUThhSF95cmpyQnlfQnlIUVsnQnlIUV9scSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQnlIUV9uUThCZF9sdkY4ID0gJEp5SFEtPm5Ickp5SFEyUThCZF9vUlpxKCRCeUhRX2x2RjhbbV1bJ1E4YUgnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRqX3lySGRfcUhyamxheVttXVsnal95cmpyQnknXSA9PSBVbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9RX3lyanJCeSA9ICdBZGRROE9IcSByOCBCeUhRJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRqX3lySGRfcUhyamxheVttXVsnal95cmpyQnknXSA9PSBnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRMX1FfeXJqckJ5ID0gJzVIRkhRUUhxJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEhheUggbEYgKCRqX3lySGRfcUhyamxheVttXVsnal95cmpyQnknXSA9PSBVTikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9RX3lyanJCeSA9ICdNSGFIbmpySCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkal95ckhkX3FIcmpsYXlbbV1bJ2pfeXJqckJ5J10gPT0gVXopIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfUV95cmpyQnkgPSAnQXl5bG52SHEgcjggQnlIUSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkal95ckhkX3FIcmpsYXlbbV1bJ2pfeXJqckJ5J10gPT0gbSAmJiAkTF9qYVFIanFSX2RROExIeXlIcV9CeUhRID09IFUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJExfUV95cmpyQnkgPSAnQXl5bG52SHEgcjggamFRSGpxUiBkUThMSHl5SHEgQnlIUSc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBIYXlIIGxGICgkal95ckhkX3FIcmpsYXlbbV1bJ2pfeXJqckJ5J10gPT0gbSAmJiBIRGRyUigkTF9qYVFIanFSX2RROExIeXlIcV9CeUhRKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTF9RX3lyanJCeSA9ICc1SHlkOHZ5bG9hSCBCeUhRJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKGx2X2pRUWpSKCRqX3lySGRfcUhyamxheVttXVsnal95cmpyQnknXSwgJGJsRF9RUThhSF95cmpyQnkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVDIExhanl5PSJySHVyLUhRUThRIj4gPD9kZWQgSExlOCAkTF9RX3lyanJCeTsgPz4mdm95ZDsmdm95ZDsmdm95ZDsmdm95ZDs8bCBMYWp5eT0ibEw4di1lanZxLVFsbmVyIj48L2w+PC9lQz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQgSExlOCAkQnlIUV9sdkY4W21dWydGdmpESCddIC4gJyAnIC4gJEJ5SFFfbHZGOFttXVsnRHZqREgnXSAuICcgJyAuICRCeUhRX2x2RjhbbV1bJ2F2akRIJ10gLiAnKCcgLiAkQnlIUV9sdkY4W21dWydIRGpsYSddIC4gJyknOyA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZCBITGU4ICc8eWRqdiBMYWp5eT0iYWpvSGEgYWpvSGEtbHZGOCI+JyAuICRCeUhRX25ROEJkX2x2RjhbbV1bJ3ZqREgnXSAuICc8L3lkanY+JzsgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvclE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ybzhxUj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yam9hSD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRvT2phQkhfcUhyamxheVttXVsnUThhSF9EanlySFFfbHEnXSA9PSAtVSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9IlE4Yi1GYUJscSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdlVLIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVYIExhanl5PSIgZGpuSC1lSGpxSFEiPiA1QmFIeTwvZVg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9IlE4Yi1GYUJscSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdlVLIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJqb2FIIExhanl5PSJyam9hSCByam9hSC1vOFFxSFFIcSByam9hSC1RSHlkOHZ5bE9IIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZUhqcT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDVCYUgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlIExhanl5PSJMSHZySFEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzhRREJhaid5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVIanE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm84cVI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVOPiA8P2RlZCBITGU4ICRRQmFIX2x2RjhbbV1bJ1FCYUhfdmpESCddOyA/PjwvZU4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycSBMYWp5eT0iTEh2ckhRIj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eWRqdiBscT0iPD9kZWQgSExlOCAkUUJhSF9sdkY4W21dWydscSddOyA/PiIgTGFqeXk9Im9qcW5IIG9qcW5ILXlCTExIeXkgTGFqeXlfZDhkQmRfUUJhSGx2RjgiPjw/ZGVkIEhMZTggJHY4X0Y4UURCYWp5OyA/PjwveWRqdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ycT4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcm84cVI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmpvYUg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCRvT2phQkhfcUhyamxheVttXVsnUThhSF9EanlySFFfbHEnXSA9PSAtSykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9IlE4Yi1GYUJscSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdlVLIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVYIExhanl5PSIgZGpuSC1lSGpxSFEiPiA1QmFIeTwvZVg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9IlE4Yi1GYUJscSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdlVLIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJqb2FIIExhanl5PSJyam9hSCByam9hSC1vOFFxSFFIcSByam9hSC1RSHlkOHZ5bE9IIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZUhqcT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8clE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFxT2p2TEhxIDVCYUgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlIExhanl5PSJMSHZySFEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzhRREJhaid5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yUT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVIanE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cm84cVI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnE+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVOPiA8P2RlZCBITGU4ICRRQmFIX2x2RjhbbV1bJ1FCYUhfdmpESCddOyA/PjwvZU4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcnE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycSBMYWp5eT0iTEh2ckhRIj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eWRqdiBscT0ial88P2RlZCBITGU4ICRRQmFIX2x2RjhbbV1bJ2xxJ107ID8+IiBMYWp5eT0ib2pxbkggb2pxbkgteUJMTEh5eSBMYWp5eV9kOGRCZF9RQmFIbHZGOCI+PD9kZWQgSExlOCAkdjhfRjhRREJhank7ID8+PC95ZGp2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JxPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JRPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ybzhxUj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yam9hSD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJyam8tZGp2SCA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghSERkclIoJF81aXhKaTl3WydqX3Jqb19Eamx2J10pICYmICRfNWl4Smk5d1snal9yam9fRGpsdiddID09ICdMOERESHZyeS1kOHlyJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBITGU4ICdqTHJsT0gnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PiIgbHE9Ikw4RERIdnJ5LWQ4eXIiIHlyUmFIPSJEalFubHY6IFVtZHUgQ2R1IFVtZHUgQ2R1OyI+ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJROGItRmFCbHEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdk4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9IlE4Yi1GYUJscSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InlkanZOIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlaCBMYWp5eT0iZEJhYS1hSEZyIj5JOFFXRmE4YiA5cmpyQnkgIDwvZWg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdksiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvYThMV19IcWxyX3lyanJCeSA9IGpRUWpSKFUsIGgsIEMsIFVVLCBVQyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hMZTggJHlySGRfakxMSHl5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCFsdl9qUVFqUigkYWpySHlyX3lyanJCeV9xSHJqbGF5W21dWyd5cmpyQnknXSwgJG9hOExXX0hxbHJfeXJqckJ5KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkeXJIZF9qTExIeXkgPT0gVSAmJiBsdl9qUVFqUigkb09scSwgJGpfeXJIZF9qUVEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkZGpRamFhSGFfeXJIZF9RQnZ2bHZuID09IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vJGphUUhqcVJfQnlIUV9kUThMSHl5SHEgPSAkSThRV0ZhOGItPm5Icl9JWkU5cmpyQnlfNlpxX0paTSgkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ0J5SFFfbHEnXSwgJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydROGFIJ10sICRvbHEsICRvT2xxLCAkbERfUWxxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vbEYgKEw4QnZyKCRqYVFIanFSX0J5SFFfZFE4TEh5eUhxKSA8PSBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoTDhCdnIoJGFqckhRamFfRmE4Yl95ckhkeV9sdmRROExIeXkpIDw9IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvQnJyOHYgTGFqeXk9Im9CcnI4dm9hbHZXIiB5clJhSD0iICBGOHZyLXlsU0g6IFVVZHU7IiBlUUhGPSIjRDhxamFfeXJqckJ5X3FqeWVvOGpRcVUiICBxanJqLXI4bm5hSD0iRDhxamEiIHJSZEg9Im9CcnI4diIgTGFqeXk9IiAgIj4gPHlkanYgeXJSYUg9IiAgICBEalFubHYtUWxuZXI6IHpkdTsiPiA8bERuIHlRTD0iLi4vUUh5OEJRTEh5L2xEam5IeS85bG52LThGRi5kdm4iIHlyUmFIPSJlSGxuZXI6IFVoZHU7IERqUW5sdi1yOGQ6IC1oZHU7IERqUW5sdi1hSEZyOiBoZHU7Ij48L3lkanY+ICA5bG52LThGRjwvb0Jycjh2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL30KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJ5ZGp2TiI+CgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0icmpvLUw4dnJIdnIiIHlyUmFIPSJlSGxuZXI6IGpCcjg7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InJqby1kanZIIGpMcmxPSCIgbHE9InFsT19MZWpyX0w4RERIdnJ5X2FseXIiICB5clJhSD0iRGp1LWVIbG5lcjpVQ21kdTsgOE9IUUZhOGI6IHlMUThhYTsiPgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkeXJIZF9qTExIeXkgPT0gVSAmJiBsdl9qUVFqUigkb09scSwgJGpfeXJIZF9qUVEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PiAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iUThiLUZhQmxxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJ5ZGp2VUsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8RjhRRCBMYWp5eT0iRjhRRC1lOFFsUzh2cmphIGFIRnItamFsbnYiIGxxPSJGOFFEX0xlanIiIERIcmU4cT0iNGM5dyIgakxybDh2PSIjIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9IkxlanItbHZkQnIgeWRqdlVLICI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJIdXJqUUhqIExhanl5PSJMZWpyLWx2ZEJybzh1IHlkanZVSyIgUThieT0iQyIgTDhheT0iem0iIHlyUmFIPSJibHFyZTogem0lIiB2akRIPSJMZWpyX0w4RERIdnIiIFE4Ynk9IksiPjwvckh1cmpRSGo+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9CcnI4diBMYWp5eT0ib3J2IG9ydi1kUWxEalFSIExlanJfeUh2cV9vcnYiIHJSZEg9Im9CcnI4diI+PGwgTGFqeXk9ImxMOHYtOFciPjwvbD4gOUh2cTwvb0Jycjh2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvRjhRRD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09IDlyalFyIHhCSFFSIDlITHJsOHYgPT09PT0gLS0+CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJyam8tZGp2SCA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghSERkclIoJF81aXhKaTl3WydqX3Jqb19Eamx2J10pICYmICRfNWl4Smk5d1snal9yam9fRGpsdiddID09ICd0QkhRUi15SExybDh2LWQ4eXInKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhMZTggJ2pMcmxPSCc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+IiBscT0idEJIUVIteUhMcmw4di1kOHlyIiB5clJhSD0iRGpRbmx2OiBVbWR1IENkdSBVbWR1IENkdTsiPiAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iUThiLUZhQmxxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InlkanZOIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJROGItRmFCbHEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJ5ZGp2TiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWggTGFqeXk9ImRCYWEtYUhGciI+SThRV0ZhOGIgOXJqckJ5ICA8L2VoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InlkanZLIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2E4TFdfSHFscl95cmpyQnkgPSBqUVFqUihVLCBoLCBDLCBVVSwgVUMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ITGU4ICR5ckhkX2pMTEh5eTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICghbHZfalFRalIoJGFqckh5cl95cmpyQnlfcUhyamxheVttXVsneXJqckJ5J10sICRvYThMV19IcWxyX3lyanJCeSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJHlySGRfakxMSHl5ID09IFUgJiYgbHZfalFRalIoJG9PbHEsICRqX3lySGRfalFRKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsRiAoJGRqUWphYUhhX3lySGRfUUJ2dmx2biA9PSBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyRqYVFIanFSX0J5SFFfZFE4TEh5eUhxID0gJEk4UVdGYThiLT5uSHJfSVpFOXJqckJ5XzZacV9KWk0oJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydCeUhRX2xxJ10sICRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnUThhSCddLCAkb2xxLCAkb09scSwgJGxEX1FscSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2xGIChMOEJ2cigkamFRSGpxUl9CeUhRX2RROExIeXlIcSkgPD0gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKEw4QnZyKCRhanJIUWphX0ZhOGJfeXJIZHlfbHZkUThMSHl5KSA8PSBtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b0Jycjh2IExhanl5PSJvQnJyOHZvYWx2VyIgeXJSYUg9IiAgRjh2ci15bFNIOiBVVWR1OyIgZVFIRj0iI0Q4cWphX3lyanJCeV9xanllbzhqUXFVIiAgcWpyai1yOG5uYUg9IkQ4cWphIiByUmRIPSJvQnJyOHYiIExhanl5PSIgICI+IDx5ZGp2IHlyUmFIPSIgICAgRGpRbmx2LVFsbmVyOiB6ZHU7Ij4gPGxEbiB5UUw9Ii4uL1FIeThCUUxIeS9sRGpuSHkvOWxudi04RkYuZHZuIiB5clJhSD0iZUhsbmVyOiBVaGR1OyBEalFubHYtcjhkOiAtaGR1OyBEalFubHYtYUhGcjogaGR1OyI+PC95ZGp2PiAgOWxudi04RkY8L29CcnI4dj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy99CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdk4iPgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlUSB5clJhSD0iRGpRbmx2OiBtZHUgbWR1IFVtZHUgbWR1OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/ZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkeXJIZF9qTExIeXkgPT0gVSAmJiBsdl9qUVFqUigkb09scSwgJGpfeXJIZF9qUVEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/PiAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iUThiLUZhQmxxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdksiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aiBlUUhGPSIjIiBscT0iUWpseUhfdEJIUVIiIHZqREggPSAiUWpseUhfdEJIUVIiIFE4YUg9Im9CcnI4diIgTGFqeXk9Im9ydiBRamx5SF90QkhRUiBvcnYgb3J2LWx2RjgiIHlyUmFIPSJlSGxuZXI6IEtLZHUgIWxEZDhRcmp2cjsgRGpRbmx2LWFIRnI6IEttZHU7Ij45SHZxIHhCSFFSIHI4IC4uLjwvaj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdk4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxGOFFEIExhanl5PSJGOFFELWU4UWxTOHZyamEgYUhGci1qYWxudiIgbHE9IkY4UURfdEJIUVJfTDhEREh2ciIgREhyZThxPSI0Yzl3IiBqTHJsOHY9IiMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iTGVqci1sdmRCciB5ZGp2VUsgIiB5clJhSD0iRGpRbmx2LXI4ZDogbWR1OyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFqb0hhIHlyUmFIPSJGOHZyLWJIbG5lcjpvOGFxOyI+eEJIUVIgd0h1cjwvYWpvSGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJIdXJqUUhqIExhanl5PSIgeWRqdlVLIiBROGJ5PSJDIiBMOGF5PSJ6bSIgeXJSYUg9ImJscXJlOiB6bSUiIHZqREg9InRCSFFSX0w4RERIdnIiIGxxID0gInRCSFFSX0w4RERIdnIiIFE4Ynk9IksiPjwvckh1cmpRSGo+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b0Jycjh2IExhanl5PSJvcnYgb3J2LWRRbERqUVIgdEJIUVJfeUh2cV9vcnYiIHJSZEg9Im9CcnI4diIgeXJSYUg9IiAgICBEalFubHYtYUhGcjogWHpkdTsiPjxsIExhanl5PSJsTDh2LThXIj48L2w+IDlIdnE8L29CcnI4dj4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9GOFFEPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlUSB5clJhSD0iRGpRbmx2OiB6ZHU7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iUThiLUZhQmxxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdlVLIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0icmpvLUw4dnJIdnIiIHlyUmFIPSJlSGxuZXI6IGpCcjg7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InJqby1kanZIIGpMcmxPSCIgbHE9InFsT19MZWpyX3RCSFFSX2FseXIiPgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9xbE8+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PSBpdnEgeEJIUVIgOUhMcmw4diA9PT09PT09PT09PT0gLS0+CgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gOXJqUXIgSThRV0ZhOGIgVmx2V2x2biA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9InJqby1kanZIIiBscT0iSThRVzNhOGItVmx2V2x2biIgeXJSYUg9IkRqUW5sdjogVW1kdSBDZHUgVW1kdSBDZHU7Ij4gICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxxbE8gTGFqeXk9IlE4Yi1GYUJscSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cWxPIExhanl5PSJ5ZGp2TiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0iUThiLUZhQmxxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdk4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVoIExhanl5PSJkQmFhLWFIRnIiPkk4UVdGYThiIFZsdldsdm4gIDwvZWg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHFsTyBMYWp5eT0ieWRqdksiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9kZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvYThMV19IcWxyX3lyanJCeSA9IGpRUWpSKFUsIGgsIEMsIFVVLCBVQyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hMZTggJHlySGRfakxMSHl5OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbEYgKCFsdl9qUVFqUigkYWpySHlyX3lyanJCeV9xSHJqbGF5W21dWyd5cmpyQnknXSwgJG9hOExXX0hxbHJfeXJqckJ5KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkeXJIZF9qTExIeXkgPT0gVSAmJiBsdl9qUVFqUigkb09scSwgJGpfeXJIZF9qUVEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGICgkZGpRamFhSGFfeXJIZF9RQnZ2bHZuID09IG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxGIChMOEJ2cigkYWpySFFqYV9GYThiX3lySGR5X2x2ZFE4TEh5eSkgPD0gbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9CcnI4diBMYWp5eT0ib0Jycjh2b2FsdlciIHlyUmFIPSIgIEY4dnIteWxTSDogVVVkdTsiIGVRSEY9IiNEOHFqYV95cmpyQnlfcWp5ZW84alFxVSIgIHFqcmotcjhubmFIPSJEOHFqYSIgclJkSD0ib0Jycjh2IiBMYWp5eT0iICAiPiA8eWRqdiB5clJhSD0iICAgIERqUW5sdi1RbG5lcjogemR1OyI+IDxsRG4geVFMPSIuLi9RSHk4QlFMSHkvbERqbkh5LzlsbnYtOEZGLmR2biIgeXJSYUg9ImVIbG5lcjogVWhkdTsgRGpRbmx2LXI4ZDogLWhkdTsgRGpRbmx2LWFIRnI6IGhkdTsiPjwveWRqdj4gOWxudi04RkY8L29CcnI4dj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P2RlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy99CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb0JsYXFIUXlfYkZfUThhSCA9ICRJOFFXRmE4Yi0+bkhyX0k2QmxhcUhRXzZSNThhSF9KeUhRMlE4QmQoJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydIRGRxanllJ11bJ0hEZF9ROGFIJ10sICRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnUThhSCddLCAkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ0J5SFFfbHEnXSwgJGRscSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb0JsYXFIUXlfYkZfUUJhSCA9ICRJOFFXRmE4Yi0+bkhyX0k2QmxhcUhRXzZSNUJhSF9KeUhRMlE4QmQoJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydIRGRxanllJ11bJ0hEZF9ROGFIJ10sICRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnUThhSCddLCAkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ0J5SFFfbHEnXSwgJGRscSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb0JsYXFIUXlfYkZfQnlIUSA9ICRJOFFXRmE4Yi0+bkhyX0k2QmxhcUhRXzZSNUJhSF9KeUhRKCRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnQnlIUV9scSddLCAkZGxxKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvQmxhcUhReV9iRl9CeUhRX2xxID0gJEk4UVdGYThiLT5uSHJfSTZCbGFxSFFfNlI1OGFIX0p5SFFacSgkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ0hEZHFqeWUnXVsnSERkX1E4YUgnXSwgJF85aTk5WmMwWzlpOTlaYzBfWUE1XzBBRWldWydROGFIJ10sICRfOWk5OVpjMFs5aTk5WmMwX1lBNV8wQUVpXVsnQnlIUV9scSddLCAkZGxxLCAkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ3FIZHJfbHEnXSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9CbGFxSFF5X2JGX2RROExIeXlIcV9CeUhRX2xxID0gJEk4UVdGYThiLT5uSHJfSTNfNFE4TEh5eUhxX0paTSgkXzlpOTlaYzBbOWk5OVpjMF9ZQTVfMEFFaV1bJ0J5SFFfbHEnXSwgJGRscSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9CbGFxSFF5X2FseXJVID0galFRalJfREhRbkgoJG9CbGFxSFF5X2JGX1E4YUgsICRvQmxhcUhReV9iRl9RQmFIKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvQmxhcUhReV9hbHlySyA9IGpRUWpSX0RIUW5IKCRvQmxhcUhReV9hbHlyVSwgJG9CbGFxSFF5X2JGX0J5SFEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9CbGFxSFF5X2FseXJYID0galFRalJfREhRbkgoJG9CbGFxSFF5X2FseXJLLCAkb0JsYXFIUXlfYkZfZFE4TEh5eUhxX0J5SFFfbHEpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvQmxhcUhReV9hbHlyID0galFRalJfREhRbkgoJG9CbGFxSFF5X2FseXJYLCAkb0JsYXFIUXlfYkZfQnlIUV9scSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9CbGFxSFF5X2FseXJfalFRID0galFRalJfQnZsdEJIKGpRUWpSX0w4YUJEdigkb0JsYXFIUXlfYWx5ciwgJ2xxJykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9CbGFxSFF5X2FseXJfalFRID0galFRalJfT2phQkh5KCRvQmxhcUhReV9hbHlyX2pRUSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcWxPPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3FsTz4KCi