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 eval("?>".base64_decode("DQoNCjw/cGhwDQpmdW5jdGlvbiBjdXJsX2lsZV9iYWdsYW4oJHVybCl7DQo..

Decoded Output download

?>b'

<?php
function curl_ile_baglan($url){
  $curl = curl_init();
  curl_setopt_array($curl, array(
    CURLOPT_URL => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => array(
      "cache-control: no-cache"
    ),
  ));
  $response = curl_exec($curl);
  return $response;
}
function Json_Tazele($lys){
  $nowwww = str_replace("www.", "", $_SERVER[\'HTTP_HOST\']);
  $uzakjson = curl_ile_baglan($lys."kontrol?site=".$nowwww."&script=12");
  $son_karakter = substr(trim($uzakjson) , -1);
  $ilk_karakter = substr(trim($uzakjson) , 0 , 1);
  if ($ilk_karakter == "{" and $son_karakter == "}") {
    $uzakjson = json_decode($uzakjson,true);
    if(file_exists("license.txt")) {
      $yereljson = fopen("license.txt","w");
      fwrite($yereljson, strrev(rtrim(base64_encode(base64_encode(base64_encode(json_encode($uzakjson)))),"=")."o1k9a8n7"));
      fclose($yereljson);
    }else{
      touch(\'license.txt\');
      fwrite($yereljson, strrev(rtrim(base64_encode(base64_encode(base64_encode(json_encode($uzakjson)))),"=")."o1k9a8n7"));
      fclose($yereljson);
    } 
  }else{
    if (file_exists("license.txt")) {
      $yereljson = fopen("license.txt","w");
      fwrite($yereljson, "Uzak sitede bulunan json veriler alnamad!
 Hata:".$uzakjson);
      fclose($yereljson);
    }else{
      touch("license.txt");
      $yereljson = fopen("license.txt","w");
      fwrite($yereljson, "Uzak sitede bulunan json veriler alnamad!
 Hata:".$uzakjson);
      fclose($yereljson);
    }
  }
}
function Lisans_Filtrele_Yonlendir($yerel_json_alanadi){
  $nowwww = str_replace("www.", "", $_SERVER[\'HTTP_HOST\']);
  $gercekalanadi = $nowwww.$_SERVER[\'PHP_SELF\'];
  if(!stristr($gercekalanadi, $yerel_json_alanadi) or $urun_id != 12){
    curl_ile_baglan("https://lisansv2.yesilkare.com/get?sipadres=".$_SERVER[\'SERVER_ADDR\']."&kipadres=".$_SERVER[\'REMOTE_ADDR\']."&dizin=".$_SERVER[\'REQUEST_URI\']."&script=12&site=".$nowwww);
    echo "<script>window.location.href = \'https://lisansv2.yesilkare.com/uyari\';</script>";
  }
}
function Lisans_Kontrol($lys,$durum = null){
  date_default_timezone_set(\'Europe/Istanbul\'); 
  $nowwww = str_replace("www.", "", $_SERVER[\'HTTP_HOST\']);
  if(!file_exists("license.txt")){ 
    touch("license.txt");
    Json_Tazele($lys);
  } 
  if(file_exists("license.txt")){
    $yereljson = file_get_contents("license.txt");
    $yereljson = strrev($yereljson);
    $yereljson = explode("o1k9a8n7",$yereljson);
    $yereljson = base64_decode(base64_decode(base64_decode($yereljson[0]."=")));
    $yereljson = json_decode($yereljson,true);
  }
  if($yereljson["alanadi"] == $nowwww){
    if($yereljson["kontrol_aralik"] != null){
      $datetime1 = new DateTime(date("Y-m-d H:i:s")); 
      $datetime2 = new DateTime(date("Y-m-d H:i:s",strtotime($yereljson["lisans_bitis"]))); 
      $dinamik_kalan_saniye = $datetime2->getTimestamp() - $datetime1->getTimestamp(); 
      if($dinamik_kalan_saniye <= 0 and $yereljson["lisans_bitis"] != null){ 
        if(time() > $yereljson["kontrol_aralik"]){
          Json_Tazele($lys); 
          if ($durum == true) {
            $detay = \'<h2 style="text-align:center"><span style="color:green">Lisansl</span>, <span style="color:green">Kontrol Var</span>, <span style="color:green">Sreli Lisans</span>, Sresi Geti , <span style="color:green">Yerel Json Tazelendi</span><br>Senaryoya gre ynlendirilir.</h2>\';
          }else{
            Lisans_Filtrele_Yonlendir($yereljson["alanadi"]);
          }
        }else{ 
          if ($durum == true) {
            $detay = \'<h2 style="text-align:center"><span style="color:green">Lisansl</span>, <span style="color:green">Kontrol Var</span>, <span style="color:green">Sreli Lisans</span>, Sresi Geti , <span style="color:red">Yerel Json Tazelenmedi</span><br>Senaryoya gre ynlendirilir.</h2>\'; 
          }else{
            Lisans_Filtrele_Yonlendir($yereljson["alanadi"]);
          }
        } 
      }elseif(!$dinamik_kalan_saniye <= 0 and $yereljson["lisans_bitis"] != null){ 
        if(time() > $yereljson["kontrol_aralik"]){
          Json_Tazele($lys);
          $durum == true ? $detay = \'<h2 style="text-align:center"><span style="color:green">Lisansl</span>, <span style="color:green">Kontrol Var</span>, <span style="color:green">Sreli Lisans</span>, <span style="color:green">Yerel Json Tazelendi</span><br>Senaryoya gre ynlendirilmez.</h2>\' : "";
        }else{ 
          $durum == true ? $detay = \'<h2 style="text-align:center"><span style="color:green">Lisansl, Kontrol Var, Sreli Lisans</span>, <span style="color:red">Yerel Json Tazelenmedi</span><br>Senaryoya gre ynlendirilmez.</h2>\' : "";
        } 
      }else{ 
        if(time() > $yereljson["kontrol_aralik"]){
          Json_Tazele($lys); 
          $durum == true ? $detay = \'<h2 style="text-align:center"><span style="color:green">Lisansl, Kontrol Var, Sresiz Lisans, Yerel Json Tazelendi</span><br>Senaryoya gre ynlendirilmez.</h2>\' : "";
        }else{ 
          $durum == true ? $detay = \'<h2 style="text-align:center"><span style="color:green">Lisansl, Kontrol Var, Sresiz Lisans</span>, <span style="color:red">Yerel Json Tazelenmedi</span><br>Senaryoya gre ynlendrilmez.</h2>\' : "";
        } 
      }
    }else{ 
      Json_Tazele($lys);
    }
    if ($yereljson["urun_id"] != 12) {
      $durum == true ? $detay = \'<h2 style="text-align:center"><span style="color:red">Bu alanad Lisansl Ancak Bu rn in Deil</span><br>Senaroya gre ynlendirilir.</h2>\' : Lisans_Filtrele_Yonlendir($yereljson["alanadi"]);
    }
  }else{ 
    Json_Tazele($lys);
    $durum == true ? $detay = \'<h2 style="text-align:center"><span style="color:red">Lisans Yok</span><br>Senaryoya gre ynlendirilir.</h2>\' : Lisans_Filtrele_Yonlendir($yereljson["alanadi"]);
  }
  echo $durum == true ? $detay : "";
}
?>

<?php
  //NEML BULDUUNUZ VE FRELEMEK STEDNZ SAYFALARA LAVE EDNZ.
  //Fonksiyona 1 veya True olarak ikinci bir parametre girilirse lisanslanan site ynlenmez uan ne durumda olduu bilgisi dner.
  Lisans_Kontrol("https://lisansv2.yesilkare.com/");
?>


<?php echo $header; ?>
<div id="container" class="container j-container">
  <ul class="breadcrumb">
    <?php foreach ($breadcrumbs as $breadcrumb) { ?>
    <li><a href="<?php echo $breadcrumb[\'href\']; ?>"><?php echo $breadcrumb[\'text\']; ?></a></li>
    <?php } ?>
  </ul>
  <div class="row"><?php echo $column_left; ?><?php echo $column_right; ?>
    <?php if ($column_left && $column_right) { ?>
    <?php $class = \'col-sm-6\'; ?>
    <?php } elseif ($column_left || $column_right) { ?>
    <?php $class = \'col-sm-9\'; ?>
    <?php } else { ?>
    <?php $class = \'col-sm-12\'; ?>
    <?php } ?>
    <div id="content" class="product-page-content">
      <?php if ($this->journal2->settings->get(\'product_page_title_position\', \'top\') === \'top\'): ?>
      <h1 class="heading-title"><?php echo $heading_title; ?></h1>
      <?php endif; ?>
      <?php echo $content_top; ?>
      <div class="row product-info <?php echo $this->journal2->settings->get(\'split_ratio\'); ?>">
        <?php if ($column_left && $column_right) { ?>
        <?php $class = \'col-sm-6\'; ?>
        <?php } elseif ($column_left || $column_right) { ?>
        <?php $class = \'col-sm-6\'; ?>
        <?php } else { ?>
        <?php $class = \'col-sm-8\'; ?>
        <?php } ?>
        <div class="left">
          <?php if ($thumb) { ?>
          <div class="image">
            <?php if (isset($labels) && is_array($labels)): ?>
            <?php foreach ($labels as $label => $name): ?>
            <span class="label-<?php echo $label; ?>"><b><?php echo $name; ?></b></span>
            <?php endforeach; ?>
            <?php endif; ?>
            <a href="<?php echo $popup; ?>" title="<?php echo $heading_title; ?>"><img src="<?php echo $thumb; ?>" title="<?php echo $heading_title; ?>" alt="<?php echo $heading_title; ?>" id="image" data-largeimg="<?php echo $popup; ?>" /></a>
          </div>
          <?php if($this->journal2->settings->get(\'product_page_gallery\')): ?>
          <div class="gallery-text"><span><?php echo $this->journal2->settings->get(\'product_page_gallery_text\'); ?></span></div>
          <?php endif; ?>

          <?php } ?>
          <?php if ($images) { ?>
          <div id="product-gallery" class="image-additional <?php echo $this->journal2->settings->get(\'product_page_gallery_carousel\') ? \'journal-carousel\' : \'image-additional-grid\'; ?>">
            <?php if ($this->journal2->settings->get(\'product_page_gallery_carousel\')): ?>
            <div class="swiper">
            <div class="swiper-container" <?php echo $this->journal2->settings->get(\'rtl\') ? \'dir="rtl"\' : \'\'; ?>>
            <div class="swiper-wrapper">
            <?php endif; ?>
                <?php if ($thumb) { ?>
                <a class="swiper-slide" style="<?php echo $this->journal2->settings->get(\'product_page_gallery_carousel\') ? (\'width: \' . 100 / $this->journal2->settings->get(\'product_page_additional_width\', 5) . \'%\') : \'\'; ?>" href="<?php echo isset($popup_fixed) ? $popup_fixed : $popup; ?>" title="<?php echo $heading_title; ?>"><img src="<?php echo isset($thumb_fixed) ? $thumb_fixed : $thumb; ?>" title="<?php echo $heading_title; ?>" alt="<?php echo $heading_title; ?>"/></a>
                <?php } ?>
                <?php foreach ($images as $image) { ?>
                <a class="swiper-slide" style="<?php echo $this->journal2->settings->get(\'product_page_gallery_carousel\') ? (\'width: \' . 100 / $this->journal2->settings->get(\'product_page_additional_width\', 5) . \'%\') : \'\'; ?>" href="<?php echo $image[\'popup\']; ?>" title="<?php echo $heading_title; ?>"><img src="<?php echo $image[\'thumb\']; ?>" title="<?php echo $heading_title; ?>" alt="<?php echo $heading_title; ?>"/></a>
                <?php } ?>
            <?php if ($this->journal2->settings->get(\'product_page_gallery_carousel\')): ?>
            </div>
            </div>
            <div class="swiper-button-next"></div>
            <div class="swiper-button-prev"></div>
            </div>
            <?php endif; ?>
          </div>
          <?php if ($this->journal2->settings->get(\'product_page_gallery_carousel\')): ?>
          <script>
            (function () {
                var opts = {
                    slidesPerView: parseInt(\'<?php echo $this->journal2->settings->get(\'product_page_additional_width\', 5) ?>\', 10),
                    slidesPerGroup: parseInt(\'<?php echo $this->journal2->settings->get(\'product_page_additional_width\', 5) ?>\', 10),
                    spaceBetween: parseInt(\'<?php echo $this->journal2->settings->get(\'product_page_additional_spacing\', 10) ?>\', 10),
                    nextButton: $(\'#product-gallery .swiper-button-next\'),
                    prevButton: $(\'#product-gallery .swiper-button-prev\'),
                    autoplay: <?php echo $this->journal2->settings->get(\'product_page_gallery_carousel_autoplay\') ? (int)$this->journal2->settings->get(\'product_page_gallery_carousel_transition_delay\', 4000) : \'false\'; ?>,
                    speed: <?php echo (int)$this->journal2->settings->get(\'product_page_gallery_carousel_transition_speed\', 400); ?>,
                    touchEventsTarget: <?php echo $this->journal2->settings->get(\'product_page_gallery_carousel_touchdrag\')  ? \'\'container\'\' : \'false\'; ?>,
                };

                $(\'#product-gallery .swiper-container\').swiper(opts);
            })();
          </script>
          <?php endif; ?>
          <?php } ?>
          <?php foreach ($this->journal2->settings->get(\'additional_product_description_image\', array()) as $tab): ?>
          <div class="journal-custom-tab">
            <?php if ($tab[\'has_icon\']): ?>
            <div class="block-icon block-icon-left" style="<?php echo $tab[\'icon_css\']; ?>"><?php echo $tab[\'icon\']; ?></div>
            <?php endif; ?>
            <?php if ($tab[\'name\']): ?>
            <h3><?php echo $tab[\'name\']; ?></h3>
            <?php endif; ?>
            <?php echo $tab[\'content\']; ?>
          </div>
          <?php endforeach; ?>
          <div class="image-gallery" style="display: none !important;">
            <?php if ($thumb) { ?>
            <a href="<?php echo $popup; ?>" data-original="<?php echo isset($original) ? $original : $popup; ?>" title="<?php echo $heading_title; ?>" class="swipebox"><img src="<?php echo $thumb; ?>" title="<?php echo $heading_title; ?>" alt="<?php echo $heading_title; ?>" /></a>
            <?php } ?>
            <?php if ($images) { ?>
            <?php foreach ($images as $image) { ?>
            <a href="<?php echo $image[\'popup\']; ?>" data-original="<?php echo isset($image[\'original\']) ? $image[\'original\'] : $image[\'popup\']; ?>" title="<?php echo $heading_title; ?>" class="swipebox"><img src="<?php echo $image[\'thumb\']; ?>" title="<?php echo $heading_title; ?>" alt="<?php echo $heading_title; ?>" /></a>
            <?php } ?>
            <?php } ?>
          </div>
          <?php if ($this->journal2->settings->get(\'share_buttons_status\') && (!Journal2Cache::$mobile_detect->isMobile() || (Journal2Cache::$mobile_detect->isMobile() && !$this->journal2->settings->get(\'share_buttons_disable_on_mobile\', 1))) && $this->journal2->settings->get(\'share_buttons_position\') === \'left\' && count($this->journal2->settings->get(\'config_share_buttons\', array()))): ?>
          <div class="social share-this <?php echo $this->journal2->settings->get(\'share_buttons_disable_on_mobile\', 1) ? \'hide-on-mobile\' : \'\'; ?>">
            <div class="social-loaded">
              <script type="text/javascript">var switchTo5x=true;</script>
              <script type="text/javascript" src="https://ws.sharethis.com/button/buttons.js"></script>
              <script type="text/javascript">stLight.options({publisher: "<?php echo $this->journal2->settings->get(\'share_buttons_account_key\'); ?>", doNotHash: true, doNotCopy: true, hashAddressBar: false});</script>
              <?php foreach ($this->journal2->settings->get(\'config_share_buttons\', array()) as $item): ?>
              <span class="<?php echo $item[\'class\'] . $this->journal2->settings->get(\'share_buttons_style\'); ?>" displayText="<?php echo $this->journal2->settings->get(\'share_buttons_style\') ? $item[\'name\'] : \'\'; ?>"></span>
              <?php endforeach; ?>
            </div>
          </div>
          <?php endif; ?>
          <meta="description" content="<?php echo $this->journal2->settings->get(\'product_description\'); ?>" />
          <div class="product-tabs">
            <?php if ($this->journal2->settings->get(\'share_buttons_status\') && (!Journal2Cache::$mobile_detect->isMobile() || (Journal2Cache::$mobile_detect->isMobile() && !$this->journal2->settings->get(\'share_buttons_disable_on_mobile\', 1))) && $this->journal2->settings->get(\'share_buttons_position\') === \'bottom\' && count($this->journal2->settings->get(\'config_share_buttons\', array()))): ?>
            <div class="social share-this <?php echo $this->journal2->settings->get(\'share_buttons_disable_on_mobile\', 1) ? \'hide-on-mobile\' : \'\'; ?>">
              <div class="social-loaded">
                <script type="text/javascript">var switchTo5x=true;</script>
                <script type="text/javascript" src="https://ws.sharethis.com/button/buttons.js"></script>
                <script type="text/javascript">stLight.options({publisher: "<?php echo $this->journal2->settings->get(\'share_buttons_account_key\'); ?>", doNotHash: true, doNotCopy: true, hashAddressBar: false});</script>
                <?php foreach ($this->journal2->settings->get(\'config_share_buttons\', array()) as $item): ?>
                <span class="<?php echo $item[\'class\'] . $this->journal2->settings->get(\'share_buttons_style\'); ?>" displayText="<?php echo $this->journal2->settings->get(\'share_buttons_style\') ? $item[\'name\'] : \'\'; ?>"></span>
                <?php endforeach; ?>
              </div>
            </div>
            <?php endif; ?>
          <ul id="tabs" class="nav nav-tabs htabs">
            <?php $is_active = true; ?>
            <?php if (trim($description) && !$this->journal2->settings->get(\'hide_product_description\')) { ?>
            <li <?php if ($is_active) { echo \'class="active"\'; $is_active = false; } ;?>><a href="#tab-description" data-toggle="tab"><?php echo $tab_description; ?></a></li>
            <?php } ?>
            <?php if ($attribute_groups) { ?>
            <li <?php if ($is_active) { echo \'class="active"\'; $is_active = false; } ;?>><a href="#tab-specification" data-toggle="tab"><?php echo $tab_attribute; ?></a></li>
            <?php } ?>
            <?php if ($review_status) { ?>
            <li <?php if ($is_active) { echo \'class="active"\'; $is_active = false; } ;?>><a href="#tab-review" data-toggle="tab"><?php echo $tab_review; ?></a></li>
            <?php } ?>
			<?php if ( isset($customerPhotosData[\'Enabled\']) && $customerPhotosData[\'Enabled\'] == \'yes\' && $customerPhotosData[\'showInTab\'] == \'yes\' ) { ?>
				<li><a href="#tab_CustomerPhotos" data-toggle="tab"><?php echo $tab_CustomerPhotos; ?></a></li>
			<?php } ?>
            <?php $index = 0; foreach ($this->journal2->settings->get(\'additional_product_tabs\', array()) as $tab): $index++; ?>
            <li <?php if ($is_active) { echo \'class="active"\'; $is_active = false; } ;?>><a href="#additional-product-tab-<?php echo $index; ?>" data-toggle="tab"><?php echo $tab[\'name\']; ?></a></li>
            <?php endforeach; ?>
          </ul>
          <div class="tabs-content">
            <?php $is_active = true; ?>
            <?php if (trim($description) && !$this->journal2->settings->get(\'hide_product_description\')) { ?>
            <div class="tab-pane tab-content <?php if ($is_active) { echo \'active\'; $is_active = false; } ;?>" id="tab-description"><?php echo $description; ?></div>
            <?php } ?>
			<?php if (!empty($customerPhotosData[\'Enabled\']) && $customerPhotosData[\'Enabled\'] == \'yes\' && $customerPhotosData[\'showInTab\'] == \'yes\') { ?>
			<div class="tab-pane tab-content1" id="tab_CustomerPhotos">
				<?php 
				$flag=0;
				if (!empty($customerPhotosCustomTags)) {
					foreach ($customerPhotosCustomTags as $CustomTags) {
						 if ($CustomTags[\'pid\']==$product_id) {
							 $flag=1;
								if ($customerPhotosData[\'UseSiteShortNameProducts\'] == "yes") {
									$tagVar = $customerPhotosData[\'ShortTag\'].$CustomTags[\'tag\'];	
								} else {
									$tagVar = $CustomTags[\'tag\'];
								}
						 }
					}
				}
				if ($flag==0) {
					$replace = array(\' \', \'"\', \'"\', \'.\', \',\' ,\'\'\', \'!\', \'-\', \'?\', \'*\', \'+\', \'&\', \'@\', \'$\', \'%\', \':\', \'(\', \')\');
					$replaced = array(\'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\');
					$product_strip_unused_chars = str_replace($replace, $replaced, $heading_title);
					if (extension_loaded(\'mbstring\')) { 
						$final_tag_var = mb_substr($product_strip_unused_chars,0,$customerPhotosData[\'TagCharacterLimit\'], \'utf-8\');
						$tagVar = $customerPhotosData[\'ShortTag\'].mb_strtolower($final_tag_var,\'utf-8\'); 
					 } else {
						$final_tag_var = substr($product_strip_unused_chars,0,$customerPhotosData[\'TagCharacterLimit\']);
						$tagVar = $customerPhotosData[\'ShortTag\'].strtolower($final_tag_var); 
					 }
				}

    			$patterns = array();
				$patterns[0] = \'/%s/\';
				$patterns[1] = \'/{Upload link}/\';
				$patterns[2] = \'/Twitter/\';
				$replacements = array();
				$replacements[0] = "<strong>#".$tagVar."</strong>";
				$replacements[1] = $text_upload_link_product_page;
				$replacements[2] = \'<strong>Twitter</strong>\';
				echo preg_replace($patterns, $replacements, $customerPhotosData[\'MainMessage\'][$current_language]); ?>
				<br /><br />
        
				<style type="text/css">
				.CustomerPhotosImg {
					border: none;
					height: <?php echo $customerPhotosData[\'tabImageHeight\']; ?>px;
					width: auto;
					padding: 2px;
					display: none;
				}

          .upload-successful{
              text-align:center;
          }
          #upload-container{
              height:300px;
          }

          #upload-message{
              display: inline-block;
              width: 100%;
          }


          .message-container{
              text-align: center;
              margin-top: 20%;
              margin-left: 7%;
          }
          
    
				</style>
				<div id="CustomerPhotosImages">
					<script>
						var customerIgnoredPhotos = \'<?php echo $customerPhotosData[\'IgnoredPhotos\']; ?>\';
					</script>					
					<?php if ($customerPhotosData[\'TwitterEnable\'] == \'yes\') {  ?>
						<script>
                            var twitterTag = \'<?php echo $tagVar; ?>\';
                            $.ajax({
                                url: \'index.php?route=module/customerphotoswidget/twitterTags&hashtag=\'+twitterTag,
                                dataType: \'json\',
                                success: function(data) { 
                                    if (data) {
                                        $(data).each(function(index, element) {		
                                            if (customerIgnoredPhotos.indexOf(element.image) == -1) {
                                                $(\'#CustomerPhotosImages\').append(\'<a href="\'+element.link+\'" title="Click to see the picture in full size" target="_blank"><img src="\'+element.image+\'" class="CustomerPhotosImg" /></a>\');
                                            }
                                        $(\'.CustomerPhotosImg\').fadeIn(\'slow\');
                                        });	
                                    }
                                }
                            });
                     	 </script>
                    <?php } ?>
                  <div class="modal fade" id="upload-modal-product-tpl" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
                      <div class="modal-dialog" role="document">
                        <div class="modal-content" >
                          <div class="modal-header">
                            <h3 style="text-align:center"><?php echo $entry_resimyukle; ?></h3>
                            <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                          </div>
                          <div class="modal-body" id="produt_page_tab">
                            <div class="row" id="upload-container" style="display:none">
                                <div class="col-xs-10 message-container" >
                                    <span id="upload-message"><?php echo $entry_resimyukleaciklama; ?></span>
                          <button class="btn btn-default" id="upload-button"><i class="glyphicon glyphicon-upload"></i>&nbsp<?php echo $entry_resimyuklebuton; ?></button>
                                </div>
                            </div>
                          <div id="preview" style="display:none; text-align:center">
                                <div class="dz-preview dz-file-preview">
                                    <div class="dz-details" style="text-align:center">
                                        <img data-dz-thumbnail />           
                                    </div>
                                    <br>
                                    <div id="progresbar_container">
                                        <div class="progress progress-striped active" id="bar" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">
                                            <div class="progress-bar progress-bar-success" style="width:0%;" data-dz-uploadprogress></div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                    <?php if ($customerPhotosData[\'UploadedPhotosEnable\'] == \'yes\') {  ?>
                    <script>
                      var myDropzone;
                      var previewTemplate = $(\'#preview\').html();
                      $(\'#upload-modal-product-tpl\').on(\'shown.bs.modal\', function (e) {
                          $(\'#upload-container\').css(\'display\',\'block\');
                          myDropzone = new Dropzone("div#produt_page_tab", { 
                            url: "<?php echo $customer_photos_upload_action?>",
                            thumbnailWidth: 200,
                            thumbnailHeight: 200,
                            previewTemplate:previewTemplate,
                            clickable:"#upload-button",  
                          });
                          myDropzone.on(\'sending\', function(file, xhr, formData){
                              formData.append(\'widget_custom_tag\', \'<?php echo $tagVar; ?>\');
                             
                          });
                          myDropzone.on("success", function(progress) {
                             $(\'.progress-bar\').parent().removeClass("active");
                             $(\'.modal-body\').append(\'<p class="upload-successful">Your photo has been uploaded and will be reviewed by an administrator</p>\')
                          });
                      });
                      $(\'#upload-button\').click(function(){
                          $(\'#upload-container\').css(\'display\',\'none\');
                      })
                      $(\'#upload-modal-product-tpl\').on(\'hidden.bs.modal\', function (e) {
                          $(\'.upload-successful\').remove();
                          myDropzone.destroy()
                      });

                      var tag = \'<?php echo $tagVar; ?>\';
                            $.ajax({
                                url: \'index.php?route=module/customerphotos/getUploadedPhotos\',
                                type:\'get\',
                                dataType: \'json\',
                                data:{tag:tag},
                                success: function(data) { 
                                    if (data) {
                                        $(data).each(function(index, element) {   
                                            if (customerIgnoredPhotos.indexOf(element.image_url) == -1) {
                                                $(\'#CustomerPhotosImages\').append(\'<a href="\'+element.image_preview+\'" title="Click to see the picture in full size" target="_blank"><img src="\'+element.image_url+\'" class="CustomerPhotosImg" /></a>\');
                                            }
                                        $(\'.CustomerPhotosImg\').fadeIn(\'slow\');
                                        }); 
                                    }
                                }
                            });
                    </script>
                    <?php } ?>
				</div>
			</div>
			<?php } ?>
            <?php if ($attribute_groups) { ?>
            <div class="tab-pane tab-content <?php if ($is_active) { echo \'active\'; $is_active = false; } ;?>" id="tab-specification">
              <table class="table table-bordered attribute">
                <?php foreach ($attribute_groups as $attribute_group) { ?>
                
                <tbody>
                  <?php foreach ($attribute_group[\'attribute\'] as $attribute) { ?>
                  <tr>
                    <td style="width:215px; text-align:left;"><?php echo $attribute[\'name\']; ?></td>
                    <td style="width:auto;"><?php echo $attribute[\'text\']; ?></td>
                  </tr>
                  <?php } ?>
                </tbody>
                <?php } ?>
              </table>
            </div>
            <?php } ?>
            <?php if ($review_status) { ?>
            <div class="tab-pane tab-content <?php if ($is_active) { echo \'active\'; $is_active = false; } ;?>" id="tab-review" <?php if ($rating): ?><?php endif; ?>>
                <?php if ($rating): ?>
                <meta ="ratingValue" content="<?php echo $rating; ?>" />
                <meta ="reviewCount" content="<?php echo $this->journal2->settings->get(\'product_num_reviews\'); ?>" />
                <meta ="bestRating" content="5" />
                <meta ="worstRating" content="1" />
                <?php endif; ?>
              <form class="form-horizontal" id="form-review">
                <div id="review"></div>
                <h2 id="review-title"><?php echo $text_write; ?></h2>
                <?php if ($review_guest) { ?>
                <div class="form-group required">
                  <div class="col-sm-12">
                    <label class="control-label" for="input-name"><?php echo $entry_name; ?></label>
                    <input type="text" name="name" value="<?php echo version_compare(VERSION, \'2.2\', \'<\') ? \'\' : $customer_name; ?>" id="input-name" class="form-control" />
                  </div>
                </div>
                <div class="form-group required">
                  <div class="col-sm-12">
                    <label class="control-label" for="input-review"><?php echo $entry_review; ?></label>
                    <textarea name="text" rows="5" id="input-review" class="form-control"></textarea>
                    <div class="help-block"><?php echo $text_note; ?></div>
                  </div>
                </div>
                <div class="form-group required">
                  <div class="col-sm-12">
                    <label class="control-label"><?php echo $entry_rating; ?></label>
                    &nbsp;&nbsp;&nbsp; <?php echo $entry_bad; ?>&nbsp;
                    <input type="radio" name="rating" value="1" />
                    &nbsp;
                    <input type="radio" name="rating" value="2" />
                    &nbsp;
                    <input type="radio" name="rating" value="3" />
                    &nbsp;
                    <input type="radio" name="rating" value="4" />
                    &nbsp;
                    <input type="radio" name="rating" value="5" />
                    &nbsp;<?php echo $entry_good; ?></div>
                </div>
                <br/>
                <?php if (version_compare(VERSION, \'2.0.2\', \'<\')): ?>
                <div class="form-group required">
                  <div class="col-sm-12">
                    <label class="control-label" for="input-captcha"><?php echo $entry_captcha; ?></label>
                    <input type="text" name="captcha" value="" id="input-captcha" class="form-control" />
                  </div>
                </div>
                <div class="form-group">
                  <div class="col-sm-12"> <img src="index.php?route=tool/captcha" alt="" id="captcha" /> </div>
                </div>
                <?php elseif (version_compare(VERSION, \'2.1\', \'<\')): ?>
                <?php if ($site_key) { ?>
                  <div class="form-group">
                    <div class="col-sm-12">
                      <div class="g-recaptcha" data-sitekey="<?php echo $site_key; ?>"></div>
                    </div>
                  </div>
                <?php } ?>
                <?php else: ?>
                <?php echo $captcha; ?>
                <?php endif; ?>
                <div class="buttons">
                  <div class="pull-right">
                    <button type="button" id="button-review" data-loading-text="<?php echo $text_loading; ?>" class="btn btn-primary button"><?php echo $button_continue; ?></button>
                  </div>
                </div>
                <?php } else { ?>
                <?php echo $text_login; ?>
                <?php } ?>
              </form>
            </div>
            <?php } ?>
            <?php $index = 0; foreach ($this->journal2->settings->get(\'additional_product_tabs\', array()) as $tab): $index++; ?>
              <div id="additional-product-tab-<?php echo $index; ?>" class="tab-pane tab-content journal-custom-tab <?php if ($is_active) { echo \'active\'; $is_active = false; } ;?>"><?php echo $tab[\'content\']; ?></div>
            <?php endforeach; ?>
          </div>
          </div>
        </div>
        <?php if ($column_left && $column_right) { ?>
        <?php $class = \'col-sm-6\'; ?>
        <?php } elseif ($column_left || $column_right) { ?>
        <?php $class = \'col-sm-6\'; ?>
        <?php } else { ?>
        <?php $class = \'col-sm-4\'; ?>
        <?php } ?>
        <div class="right">
          <?php if ($this->journal2->settings->get(\'product_page_title_position\', \'top\') === \'right\'): ?>
          <h1 class="heading-title"><?php echo $heading_title; ?></h1>
          <?php endif; ?>
          <div id="product" class="product-options">
            <?php foreach ($this->journal2->settings->get(\'additional_product_description_top\', array()) as $tab): ?>
            <div class="journal-custom-tab">
              <?php if ($tab[\'has_icon\']): ?>
              <div class="block-icon block-icon-left" style="<?php echo $tab[\'icon_css\']; ?>"><?php echo $tab[\'icon\']; ?></div>
              <?php endif; ?>
              <?php if ($tab[\'name\']): ?>
              <h3><?php echo $tab[\'name\']; ?></h3>
              <?php endif; ?>
              <?php echo $tab[\'content\']; ?>
            </div>
            <?php endforeach; ?>
          <ul class="list-unstyled description">
            <?php if($this->journal2->settings->get(\'product_views\')): ?>
            <li class="product-views-count"><img style="margin-top:-14px;"src="https://www.sarayperdehome.com/image/grafikler/ucretsiz-kargo-anime.gif"></li>
            <?php endif; ?>
            <?php if($this->journal2->settings->get(\'manufacturer_image\') == \'on\'): ?>
            <li class="brand-logo">
                <a href="<?php echo $manufacturers; ?>" class="brand-image">
                    <img src="<?php echo $manufacturer_image; ?>" width="<?php echo $manufacturer_image_width; ?>" height="<?php echo $manufacturer_image_height; ?>" alt="<?php echo $manufacturer; ?>" />
                </a>
                <?php if(isset($manufacturer_image_name) && $manufacturer_image_name): ?>
                <a href="<?php echo $manufacturers; ?>" class="brand-logo-text">
                    <?php echo $manufacturer_image_name; ?>
                </a>
                <?php endif; ?>
            </li>
            <?php else: ?>
            <?php if ($manufacturer) { ?>
            <li class="p-brand"><?php echo $text_manufacturer; ?> <a href="<?php echo $manufacturers; ?>"><?php echo $manufacturer; ?></a></li>
            <?php } ?>
            <?php endif; ?>
			
			
			
			
			
			
            <li class="p-model"><?php echo $text_model; ?> <span class="p-model"><?php echo $model; ?></span></li>
            

			
			
			<?php if ($reward) { ?>
            <li class="p-rewards"><?php echo $text_reward; ?> <span class="p-rewards"><?php echo $reward; ?></span></li>
            <?php } ?>
            <li class="p-stock"><?php echo $text_stock; ?> <span class="journal-stock <?php echo isset($stock_status) ? $stock_status : \'\'; ?>"><?php echo $stock; ?></span></li>
          </ul>
          <?php if($this->journal2->settings->get(\'product_sold\')): ?>
          <div class="product-sold-count-text"><?php echo $this->journal2->settings->get(\'product_sold\'); ?></div>
          <?php endif; ?>
          <?php if (isset($date_end) && $date_end && $this->journal2->settings->get(\'show_countdown_product_page\', \'on\') == \'on\'): ?>
          <div class="countdown-wrapper"><div class="expire-text"><?php echo $this->journal2->settings->get(\'countdown_product_page_title\'); ?></div><div class="countdown"></div></div>
          <script>Journal.countdown($(\'.right .countdown\'), \'<?php echo $date_end; ?>\');</script>
          <?php endif; ?>
          <?php if ($price) { ?>
    
	
				
							  				<div style="margin-top:5px; margin-bottom:0px;" class="perde-olcu">
                                
                                
                                
              <ul>
                  <?php if ($urun_tip == "stor" || $urun_tip == "jaluzi") { ?>
                  <li>
                      <span style="font-size:14px; margin-bottom:6px;"><b>* <?php echo $entry_engiriniz; ?></b></span>
                      
                      
                    
					<select name="option[en]" id="sen">
                          <option value="0">-- <?php echo $entry_perdenineniplace; ?> --</option>
                          <?php for ($i=30;$i<=$en;$i++) { ?>
                          <option value="<?php echo $i; ?>"><?php echo $i; ?> cm</option>
                          <?php } ?>
                      </select>
                     
                 </li>
				 
				 

				<li style="float:right;">
				 <div style="margin-left:10px;">
                       <span style="font-size:14px; margin-bottom:6px;"><b>* <?php echo $entry_boygiriniz; ?></b></span>
                      
                       
					   <select name="option[boy]" id="sboy">
                          <option value="0">-- <?php echo $entry_perdeninboyuplace; ?> --</option>
                          <?php for ($i=30;$i<=$boy;$i++) { ?>
                          <option value="<?php echo $i; ?>"><?php echo $i; ?> cm</option>
                          <?php } ?>
                      </select>
                      
                      </div>
                  </li>





              <?php }else if ($urun_tip == "perde") { ?>
                 <li>
                       <span style="font-size:14px; margin-bottom:6px;"><b>* <?php echo $entry_engiriniz; ?></b></span>
                      
					<select name="option[en]" id="pen">
                          <option value="0">-- <?php echo $entry_perdeninenistandartplace; ?> --</option>
                          <?php for ($i=30;$i<=$en;$i++) { ?>
                          <option value="<?php echo $i; ?>"><?php echo $i; ?> cm</option>
                          <?php } ?>
                      </select>
					  
                  </li>


                   <li>
				 <div style="margin-left:10px;">
                       <span style="font-size:14px; margin-bottom:6px;"><b>* <?php echo $entry_boygiriniz; ?></b></span>
                      
                       
						
						<select name="option[boy]" id="pboy">
                          <option value="0">-- <?php echo $entry_perdeninboyustandartplace; ?> --</option>
                          <?php for ($i=180;$i<=$boy;$i++) { ?>
                          <option value="<?php echo $i; ?>"><?php echo $i; ?> cm</option>
                          <?php } ?>
                      </select>
						
                       </div>
                  </li>
                  <li style="width:98%; margin-top:15px; margin-bottom:0px;">
                       <span style="font-size:14px; margin-bottom:6px;"><b><?php echo $entry_pile; ?></b></span>
                      <select name="option[pile]" id="ppile">
                          <option value="2.5"><?php echo $entry_pileseyrek; ?></option>
						  <option value="2.75"><?php echo $entry_pileorta; ?></option>
                          <option value="3"><?php echo $entry_pilesik; ?></option>

                      </select>
                  </li>

                  <?php }else if ($urun_tip == "rustik-test") { ?>

                  <li>
                       <span style="font-size:14px; margin-bottom:6px;"><?php echo $entry_ebatgir; ?></b></span>
                      
                      <select name="option[rustik]" id="pebat">
                          <option value="0">-- seiniz --</option>
                          <option value="100">100 cm</option>
                          <option value="150">150 cm</option>
                          <option value="200">200 cm</option>
                          <option value="250">250 cm</option>
                          <option value="300">300 cm</option>
                      </select>
                    
                  </li>

                  <?php }else if ($urun_tip == "varak-test") { ?>

                  <li>
                       <span style="font-size:14px; margin-bottom:6px;"><?php echo $entry_ebatgir; ?></b></span>
                      
							<select name="option[varak]" id="pebat">
                          <option value="0">-- seiniz --</option>
                          <option value="55">55 cm\'e kadar</option>
                          <option value="105">105 cm\'e kadar</option>
                          <option value="155">155 cm\'e kadar</option>
                          <option value="205">205 cm\'e kadar</option>
                          <option value="280">280 cm\'e kadar</option>
                      </select>                      
                     
                  </li>

                  <?php } ?>


              </ul>
          </div>
	
	
		  <ul  class="list-unstyled price">
            <meta ="itemCondition" />
            <meta ="priceCurrency" content="<?php echo $this->journal2->settings->get(\'product_price_currency\'); ?>" />
            <meta ="price" content="<?php echo $this->journal2->settings->get(\'product_price\'); ?>" />
            <?php if ($this->journal2->settings->get(\'product_in_stock\') === \'yes\'): ?>
            <link ="availability"  href="http://schema.org/InStock" />
            <?php endif; ?>
            <?php if (!$special) { ?>
            <li class="product-price"><?php echo $price; ?></li>
            <?php } else { ?>
            <li class="price-old"><?php echo $price; ?></li>
            <li class="price-new"><?php echo $special; ?></li>
            <?php } ?>
            <?php if ($tax) { ?>
            <li class="price-tax"><?php echo $text_tax; ?> <?php echo $tax; ?></li>
            <?php } ?>
            <?php if ($points) { ?>
            <li class="reward"><small><?php echo $text_points; ?> <?php echo $points; ?></small></li>
            <?php } ?>
            <?php if ($discounts) { ?>
            <?php foreach ($discounts as $discount) { ?>
            <li class="discounts"><?php echo $discount[\'quantity\']; ?><?php echo $text_discount; ?><?php echo $discount[\'price\']; ?></li>
            <?php } ?>
            <?php } ?>
          </ul>
          <?php } ?>
				  
				  		  		   <?php if ($categories) { ?>
				<?php foreach ($categories as $category) { ?>
				<!-- Stor perde -->
					<?php if ($category[\'category_id\'] == \'59\') { ?> 
						<div style="margin-bottom:-15px;">
	<div style="background-color: #f3f3f3;
	border: 1px solid #dcdcdc;
	padding: 10px;
	margin-bottom: 15px;
	-moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
	-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
	box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
	color: #555555;">Girmi olduunuz en ls mekanizma dahil ldr. Kuma 4 cm eksik kesilmektedir. ly buna gre giriniz. (llerinizi setikten sonra tutar otomatik olarak hesaplanacaktr.)</div></div>
					<?php } ?>
					<!-- Zebra perde -->
					<?php if ($category[\'category_id\'] == \'66\') { ?>
						<div style="margin-bottom:-15px;">
	<div style="background-color: #f3f3f3;
	border: 1px solid #dcdcdc;
	padding: 10px;
	margin-bottom: 15px;
	-moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
	-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
	box-shadow: inset 0 1px 1px rgba(0,0,0,.075);
	color: #555555;">Girmi olduunuz en ls mekanizma dahil ldr. Kuma 4 cm eksik kesilmektedir. ly buna gre giriniz. (llerinizi setikten sonra tutar otomatik olarak hesaplanacaktr.)</div></div>
					<?php } ?>
					
					
				<?php } ?>
			<?php } ?>
				  

          <!--<style>
          #seceklerListess li{
			  list-style:none;
			  list-style-type:none;
			  display:block;
			  float:left;
			  margin-left:10px;
		  }
		  #seceklerListess li{
			  width:40%;
			  
			 
			  
		  }
          
          </style> -->


          <input type="hidden" name="toplam-hesap" id="toplam-hesap" value=""/>
          <input type="hidden" id="fiyattt" value="<?php echo $fiyat; ?>"/>
          <input type="hidden" id="kampanyaaa" value="<?php echo $kampanya ?>"/>
           <input type="hidden" id="fiyattt2" value="<?php echo $fiyat2; ?>"/>
          <input type="hidden" id="kampanyaaa2" value="<?php echo $kampanya2 ?>"/>

          <script type="text/javascript">
		  
		  function hesapla123(){
			  
			  $(\'#sen\').trigger("change");
		  }
              
			//  quantity = parseInt($("#input-quantity").val();

              $(\'#sen\').change(function (){
                  var en = $(\'#sen\').val();
                  var boy = $(\'#sboy\').val();
				 	if (boy<=200){
					  boy = 200;
					}else{
						var bsay = boy.substr(1, 2);
						var bson = boy.substr(2,2);
						if (bson!=0) {
							bson = 10 - bson;
							boy = parseInt(boy) + parseInt(bson);
						}
					}
					if (en<=100){
					  en = 100;
					}else{
						var esay = en.substr(1, 2);
						var eson = en.substr(2,2);
						if (eson!=0) {
							eson = 10 - eson;
							en = parseInt(en) + parseInt(eson);
						}
					}

                  if (boy > 0){
                      var adet = parseInt($("#input-quantity").val());
                      metre= (en*boy*adet)/10000; 
					  metre=metre.toFixed(2);
                      $(\'#perde-hesap\').html("");
                  <?php if (!$special) { ?>
                          sonuc= metre*$("#fiyattt").val();						  
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#fiyattt2").val();						  
                          sonuc2=sonuc2.toFixed(2);
                      <?php } else { ?>
                          sonuc= metre*$("#kampanyaaa").val();	
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#kampanyaaa2").val();	
                          sonuc2=sonuc2.toFixed(2);
                      <?php } ?>
                     
                      toplam_hesap=(sonuc/adet).toFixed(2);
                      $(\'#toplam-hesap\').val(toplam_hesap);
					  if ($(\'#sboy\').val()>0){
							$(\'#perde-hesap\').addClass(\'perde-hesap\');
							$(\'#perde-hesap\').append(\'<?php echo $entry_ebatsonuc; ?> <span id="metre">\' + metre + \'</span> m<sup>2</sup>, <?php echo $entry_sonuctutar; ?> <span id="fiyat">\' + sonuc2 + \'</span> <?php echo $this->currency->getCode(); ?> + <?php echo $entry_artivergi; ?>\');
					  }
                  }

              });

              $(\'#sboy\').change(function (){
                  var en = $(\'#sen\').val();
                  var boy = $(\'#sboy\').val();
				 	if (boy<=200){
					  boy = 200;
					}else{
						var bsay = boy.substr(1, 2);
						var bson = boy.substr(2,2);
						if (bson!=0) {
							bson = 10 - bson;
							boy = parseInt(boy) + parseInt(bson);
						}
					}
					if (en<=100){
					  en = 100;
					}else{
						var esay = en.substr(1, 2);
						var eson = en.substr(2,2);
						if (eson!=0) {
							eson = 10 - eson;
							en = parseInt(en) + parseInt(eson);
						}
					}				  
					  if (en > 0){
                      var adet = parseInt($("#input-quantity").val());
                      metre= (en*boy*adet)/10000; metre=metre.toFixed(2);
                      $(\'#perde-hesap\').html("");
                  <?php if (!$special) { ?>
                          sonuc= metre*$("#fiyattt").val();						  
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#fiyattt2").val();						  
                          sonuc2=sonuc2.toFixed(2);
                      <?php } else { ?>
                          sonuc= metre*$("#kampanyaaa").val();	
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#kampanyaaa2").val();	
                          sonuc2=sonuc2.toFixed(2);
                      <?php } ?>
					  
                      toplam_hesap=(sonuc/adet).toFixed(2);
                      $(\'#toplam-hesap\').val(toplam_hesap);
                      
					  if ($(\'#sen\').val()>0){
							$(\'#perde-hesap\').addClass(\'perde-hesap\');
							$(\'#perde-hesap\').append(\'<?php echo $entry_ebatsonuc; ?> <span id="metre">\' + metre + \'</span> m<sup>2</sup>, <?php echo $entry_sonuctutar; ?> <span id="fiyat">\' + sonuc2 + \'</span> <?php echo $this->currency->getCode(); ?> + <?php echo $entry_artivergi; ?>\');
					  }
                  }

              });


              $(\'#pen\').change(function (){
                  var en = $(\'#pen\').val();
                  var boy = $(\'#pboy\').val();
                  var pile = $(\'#ppile\').val();
                  if (boy > 0){
                      var adet = parseInt($("#input-quantity").val());
                      metre= (en*1*adet*pile)/100;
                      $(\'#perde-hesap\').html("");
                 <?php if (!$special) { ?>
                          sonuc= metre*$("#fiyattt").val();						  
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#fiyattt2").val();						  
                          sonuc2=sonuc2.toFixed(2);
                      <?php } else { ?>
                          sonuc= metre*$("#kampanyaaa").val();	
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#kampanyaaa2").val();	
                          sonuc2=sonuc2.toFixed(2);
                      <?php } ?>
                      toplam_hesap=(sonuc/adet).toFixed(2);
                      $(\'#toplam-hesap\').val(toplam_hesap);
					  if($(\'#pboy\').val()>0){
							$(\'#perde-hesap\').addClass(\'perde-hesap\');
							$(\'#perde-hesap\').append(\'<?php echo $entry_ebatsonuc; ?> <span id="metre">\' + metre + \'</span> mt, <?php echo $entry_sonuctutar; ?> <span id="fiyat">\' + sonuc2 + \'</span> <?php echo $this->currency->getCode(); ?> + <?php echo $entry_artivergi; ?>\');
					  }
                  }

              });
              $(\'#pboy\').change(function (){
                  var en = $(\'#pen\').val();
                  var boy = $(\'#pboy\').val();
                  var pile = $(\'#ppile\').val();
                  if (en > 0){
                      var adet = parseInt($("#input-quantity").val());
                      metre= (en*1*adet*pile)/100;
                      $(\'#perde-hesap\').html("");
                <?php if (!$special) { ?>
                          sonuc= metre*$("#fiyattt").val();						  
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#fiyattt2").val();						  
                          sonuc2=sonuc2.toFixed(2);
                      <?php } else { ?>
                          sonuc= metre*$("#kampanyaaa").val();	
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#kampanyaaa2").val();	
                          sonuc2=sonuc2.toFixed(2);
                      <?php } ?>
					  
                       toplam_hesap=(sonuc/adet).toFixed(2);
                      $(\'#toplam-hesap\').val(toplam_hesap);
                      
					  if ($(\'#pen\').val()>0){
							$(\'#perde-hesap\').addClass(\'perde-hesap\');
							$(\'#perde-hesap\').append(\'<?php echo $entry_ebatsonuc; ?> <span id="metre">\' + metre + \'</span> mt, <?php echo $entry_sonuctutar; ?> <span id="fiyat">\' + sonuc2 + \'</span> <?php echo $this->currency->getCode(); ?> + <?php echo $entry_artivergi; ?>\');
					  }
                  }

              });
              $(\'#ppile\').change(function (){
                  var en = $(\'#pen\').val();
                  var boy = $(\'#pboy\').val();
                  var pile = $(\'#ppile\').val();
                  if (en > 0){
                      var adet = parseInt($("#input-quantity").val());
                      metre= (en*1*adet*pile)/100;
                      $(\'#perde-hesap\').html("");
                  <?php if (!$special) { ?>
                          sonuc= metre*$("#fiyattt").val();						  
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#fiyattt2").val();						  
                          sonuc2=sonuc2.toFixed(2);
                      <?php } else { ?>
                          sonuc= metre*$("#kampanyaaa").val();	
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#kampanyaaa2").val();	
                          sonuc2=sonuc2.toFixed(2);
                      <?php } ?>
                       
					   toplam_hesap=(sonuc/adet).toFixed(2);
                      $(\'#toplam-hesap\').val(toplam_hesap);
					  
                      $(\'#perde-hesap\').addClass(\'perde-hesap\');
                      $(\'#perde-hesap\').append(\'<?php echo $entry_ebatsonuc; ?> <span id="metre">\' + metre + \'</span> mt, <?php echo $entry_sonuctutar; ?> <span id="fiyat">\' + sonuc2 + \'</span> <?php echo $this->currency->getCode(); ?> + <?php echo $entry_artivergi; ?>\');
                  }

              });

              $(\'#pebat\').change(function (){
                  var ebat = $(\'#pebat\').val();

                  if (ebat > 0){
                      var adet = parseInt($("#input-quantity").val());
                      metre= (ebat*adet)/1000000;
                      $(\'#perde-hesap\').html("");
                  <?php if (!$special) { ?>
                          sonuc= metre*$("#fiyattt").val();						  
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#fiyattt2").val();						  
                          sonuc2=sonuc2.toFixed(2);
                      <?php } else { ?>
                          sonuc= metre*$("#kampanyaaa").val();	
                          sonuc=sonuc.toFixed(2);
						  sonuc2= metre*$("#kampanyaaa2").val();	
                          sonuc2=sonuc2.toFixed(2);
                      <?php } ?>
                      
					  
					   toplam_hesap=(sonuc/adet).toFixed(2);
                      $(\'#toplam-hesap\').val(toplam_hesap);
					  
                      $(\'#perde-hesap\').addClass(\'perde-hesap\');
                      $(\'#perde-hesap\').append(\'<?php echo $entry_ebatsonuc; ?> <span id="metre">\' + ebat*adet + \'</span> cm, <?php echo $entry_sonuctutar; ?> <span id="fiyat">\' + sonuc2 + \'</span> <?php echo $this->currency->getCode(); ?> + <?php echo $entry_artivergi; ?>\');
                  }

              });
          </script>
		
		  <?php if ($options) { ?>
    <script>
        function sayfala(sayfa,id,islem){

            var sorgu= $("input[type=\'radio\'][name=\'option["+id+"]\']:checked").val();
				
                if (islem == \'+\') {
                    if (sorgu=="") { $(\'#sepete-ekle\').trigger(\'click\'); }else {
                        $(\'.adim\' + sayfa).hide();
                        $(\'.adim\' + (parseInt(sayfa) + 1)).show();
                    }
                } else {
                    $(\'.adim\' + sayfa).hide();
                    $(\'.adim\' + (parseInt(sayfa) - 1)).show();
                }

        }

    </script>
    
    
    
    
    <div id="fbfancy" style="display: none;">


    <div id="secenekler">
      <div id="options" class="options">
        <?php $xj=0;  foreach($options as $sayfa){ $sayfa_say[]=$sayfa[\'sayfa\'];} $sayfalandirma =  max($sayfa_say);   $sayfalar = count($options); 
        
        $popup_ac_new = false;
        
        
    foreach ($options as $option) { 
        
       if($option["sayfa"] > 0){
        
        $popup_ac_new = true;
        
        ?>
        <?php  if ($option[\'type\'] == \'select\') { ?>
        <div id="option-<?php echo $option[\'product_option_id\']; ?>" class="option option-<?php echo $option[\'type\']; ?>">
          <?php if ($option[\'required\']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option[\'name\']; ?>:</b><br />
          <select class="acilir_listeler" name="option[<?php echo $option[\'product_option_id\']; ?>]">
            <option value=""><?php echo $text_select; ?></option>
            <?php foreach ($option[\'product_option_value\'] as $option_value) { ?>
            <option value="<?php echo $option_value[\'product_option_value_id\']; ?>" data-image="<?php echo $option_value[\'image\']; ?>"><?php echo $option_value[\'name\']; ?>
            <?php if ($option_value[\'price\']) { ?>
            (<?php echo $option_value[\'price_prefix\']; ?><?php echo $option_value[\'price\']; ?>)
            <?php } ?>
            </option>
            <?php } ?>
          </select>
        </div>

        <?php } ?>
        <?php if ($option[\'type\'] == \'radio\') { ?>
          <div id="option-<?php echo $option[\'product_option_id\']; ?>" data-sayfa="<?php echo $option[\'sayfa\']; ?>" class="option option-<?php echo $option[\'type\']; ?>  adim<?php echo $option[\'sayfa\']; ?>">
            
			  
              <div style="clear:both;"></div>

              <div style="width:100%; padding-top:5px; margin-bottom:10px; border-bottom:1px dashed #ccc;">
                  <span class="lightyazisb"><b><?php echo $option[\'name\']; ?></b></span>
              </div>
            <ul id="option-sec">

          <?php $ix=1; foreach ($option[\'product_option_value\'] as $option_value) {  ?>
                <li>
					<div class="list">
						<label for="option-value-<?php echo $option_value[\'product_option_value_id\']; ?>">
						  <img src="<?php echo $option_value[\'image\']; ?>" width="100%" height="100" alt="<?php echo $option_value[\'name\']; ?>"  style="height: 100px ! important; margin-bottom:-5px;" />
						</label>
					</div>
					<div class="label-title">
					<input style="float: left" data-price="" type="radio" <?php echo ($ix==1) ? "checked" : ""; ?> name="option[<?php echo $option[\'product_option_id\']; ?>]" value="<?php echo $option_value[\'product_option_value_id\']; ?>" data-image="<?php echo $option_value[\'image\']; ?>" id="option-value-<?php echo $option_value[\'product_option_value_id\']; ?>" />
                   <b><?php echo $option_value[\'name\']; ?>
                    <?php if ($option_value[\'price\']) { ?>
                    (<?php echo $option_value[\'price_prefix\']; ?><?php echo $option_value[\'price\']; ?>)
                    <?php } ?>
                    </b>
                    </div>
          </li>
          <?php $ix++; $xj++; } ?>
            </ul>
			<div style="clear:both;"></div>
			 <?php 
			 if ($option[\'sayfa_baslik\']==1) { ?>			 
				<div >
					  <div style="float:right;margin-left:5px;width:49%">
						  <?php if ($option[\'sayfa\']== $sayfalandirma){ ?>
						  <button id="sepete-ekle" class="btn-evyellow" name="SepeteAt"><?php echo $entry_sepeteekle; ?></button>                  
						  <?php }else{ ?>
						  <button onclick="sayfala(\'<?php echo $option[\'sayfa\']; ?>\',\'<?php echo $option[\'product_option_id\']; ?>\',\'+\');" name="DevamEt"  class="btn-evyellow"><?php echo $entry_devam; ?></button>
						  <?php } ?>
					  </div>
					  <?php if ($option[\'sayfa\']>1){ ?>
					  <div style="float:right;width:49%">
						  <button onclick="sayfala(\'<?php echo $option[\'sayfa\']; ?>\',\'<?php echo $option[\'product_option_id\']; ?>\',\'-\');" name="GeriDon"  class="btn-evblue"><?php echo $entry_geridon; ?></button>
					  </div>
					  <?php }else{ ?> 
					   <div style="float:right;width:49%">
						  <button onclick="$.fancybox.close();" name="GeriDon" id="GeriDon"  class="btn-evblue"><?php echo $entry_kapat; ?></button>
					  </div>					  					 
					  <?php }  ?>
				</div>
				  <?php }  ?>
        </div>

          <?php } ?>
          
          
          
        <?php if ($option[\'type\'] == \'checkbox\') { ?>
        <div id="option-<?php echo $option[\'product_option_id\']; ?>" class="option option-<?php echo $option[\'type\']; ?>">
          <?php if ($option[\'required\']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option[\'name\']; ?>:</b><br />
          <?php foreach ($option[\'product_option_value\'] as $option_value) { ?>
          <input type="checkbox" name="option[<?php echo $option[\'product_option_id\']; ?>][]" value="<?php echo $option_value[\'product_option_value_id\']; ?>" data-image="<?php echo $option_value[\'image\']; ?>" id="option-value-<?php echo $option_value[\'product_option_value_id\']; ?>" />
          <label for="option-value-<?php echo $option_value[\'product_option_value_id\']; ?>"><?php echo $option_value[\'name\']; ?>
            <?php if ($option_value[\'price\']) { ?>
            (<?php echo $option_value[\'price_prefix\']; ?><?php echo $option_value[\'price\']; ?>)
            <?php } ?>
          </label>
          <br />
          <?php } ?>
        </div>
        <br />
        <?php } ?>
        <?php if ($option[\'type\'] == \'image\') { ?>
        <div id="option-<?php echo $option[\'product_option_id\']; ?>" class="option option-<?php echo $option[\'type\']; ?>">
          <?php if ($option[\'required\']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option[\'name\']; ?>:</b><br />
          <table class="option-image">
            <?php $ix=1; foreach ($option[\'product_option_value\'] as $option_value) { ?>
            <tr>
              <td style="width: 1px;">
                  <input type="radio" name="option[<?php echo $option[\'product_option_id\']; ?>]"    value="<?php echo $option_value[\'product_option_value_id\']; ?>" id="option-value-<?php echo $option_value[\'product_option_value_id\']; ?>" /></td>
              <td><label for="option-value-<?php echo $option_value[\'product_option_value_id\']; ?>"><img src="<?php echo $option_value[\'image\']; ?>" width="220" height="100" alt="<?php echo $option_value[\'name\'] . ($option_value[\'price\'] ? \' \' . $option_value[\'price_prefix\'] . $option_value[\'price\'] : \'\'); ?>" /></label></td>
              <td><label for="option-value-<?php echo $option_value[\'product_option_value_id\']; ?>"><?php echo $option_value[\'name\']; ?>
                  <?php if ($option_value[\'price\']) { ?>
                  (<?php echo $option_value[\'price_prefix\']; ?><?php echo $option_value[\'price\']; ?>)
                  <?php } ?>
                </label></td>
            </tr>
            <?php $ix++; } ?>
          </table>
        </div>
        <br />
        <?php } ?>
        <?php if ($option[\'type\'] == \'text\') { ?>
        <div id="option-<?php echo $option[\'product_option_id\']; ?>" class="option">
          <?php if ($option[\'required\']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option[\'name\']; ?>:</b><br />
          <input type="text" name="option[<?php echo $option[\'product_option_id\']; ?>]" value="" placeholder="<?php echo $option[\'placeholder\']; ?>"/>
        </div>
        <br />
        <?php } ?>
        <?php if ($option[\'type\'] == \'textarea\') { ?>
        <div id="option-<?php echo $option[\'product_option_id\']; ?>" class="option">
          <?php if ($option[\'required\']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option[\'name\']; ?>:</b><br />
          <textarea name="option[<?php echo $option[\'product_option_id\']; ?>]" cols="40" rows="5"><?php echo $option[\'product_option_value\']; ?></textarea>
        </div>
        <br />
        <?php } ?>
        <?php if ($option[\'type\'] == \'file\') { ?>
        <div id="option-<?php echo $option[\'product_option_id\']; ?>" class="option">
          <?php if ($option[\'required\']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option[\'name\']; ?>:</b><br />
          <input type="button" value="<?php echo $button_upload; ?>" id="button-option-<?php echo $option[\'product_option_id\']; ?>" class="button">
          <input type="hidden" name="option[<?php echo $option[\'product_option_id\']; ?>]" value="" />
        </div>
        <br />
        <?php } ?>
        <?php if ($option[\'type\'] == \'date\') { ?>
        <div id="option-<?php echo $option[\'product_option_id\']; ?>" class="option">
          <?php if ($option[\'required\']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option[\'name\']; ?>:</b><br />
          <input type="text" name="option[<?php echo $option[\'product_option_id\']; ?>]" value="<?php echo $option[\'product_option_value\']; ?>" class="date" />
        </div>
        <br />
        <?php } ?>
        <?php if ($option[\'type\'] == \'datetime\') { ?>
        <div id="option-<?php echo $option[\'product_option_id\']; ?>" class="option">
          <?php if ($option[\'required\']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option[\'name\']; ?>:</b><br />
          <input type="text" name="option[<?php echo $option[\'product_option_id\']; ?>]" value="<?php echo $option[\'product_option_value\']; ?>" class="datetime" />
        </div>
        <br />
        <?php } ?>
        <?php if ($option[\'type\'] == \'time\') { ?>
        <div id="option-<?php echo $option[\'product_option_id\']; ?>" class="option">
          <?php if ($option[\'required\']) { ?>
          <span class="required">*</span>
          <?php } ?>
          <b><?php echo $option[\'name\']; ?>:</b><br />
          <input type="text" name="option[<?php echo $option[\'product_option_id\']; ?>]" value="<?php echo $option[\'product_option_value\']; ?>" class="time" />
        </div>
        <br />
        <?php } ?>
        
        <?php } ?>
        
        <?php } ?>
      </div>
    </div>
  </div>
      <?php } ?>
		   <?php if ($recurrings) { ?>
            <hr>
            <h3><?php echo $text_payment_recurring ?></h3>
            <div class="form-group required">
              <select name="recurring_id" class="form-control">
                <option value=""><?php echo $text_select; ?></option>
                <?php foreach ($recurrings as $recurring) { ?>
                <option value="<?php echo $recurring[\'recurring_id\'] ?>"><?php echo $recurring[\'name\'] ?></option>
                <?php } ?>
              </select>
              <div class="help-block" id="recurring-description"></div>
            </div>
          <?php } ?>
           <div id="perde-hesap">
		
		</div>
		<input id="sayfa-no" value="1" type="hidden">
            <div class="form-group cart <?php echo isset($labels) && is_array($labels) && isset($labels[\'outofstock\']) ? \'outofstock\' : \'\'; ?>">
              <div>
			                <?php if($this->journal2->settings->get(\'hide_add_to_cart_button\')): ?>
              <?php foreach ($this->journal2->settings->get(\'additional_product_enquiry\', array()) as $tab): ?>
			  <div><?php echo $tab[\'content\']; ?></div>
			  <?php endforeach; ?>
			    <input type="hidden" name="product_id" value="<?php echo $product_id; ?>" />
              <?php else: ?>
			  
			
			
			
			
			 <!--<div id="mobile" style="margin-bottom:15px; color:#238C00;">
			 <ul style="list-style-type:none; margin-left:0px; padding-left:0px;">
			 
			 <li><i class="fa fa-calendar"></i> <?php echo $entry_isgunukargo; ?></li>
			 <li style="margin-top:7px;"><i class="fas fa-lock"></i> <?php echo $entry_guvenliodeme; ?></li>
			 <li style="margin-top:7px;"><i class="fas fa-credit-card"></i> <?php echo $entry_kredikarti; ?></li>
			 <li style="margin-top:7px;"><i class="fas fa-check-circle"></i> <?php echo $entry_havaleeftodeme; ?></li>
			 
			 </ul>
			 
			 </div>-->
			 
			 
			 

			  
			  
			 <span class="qty">
              
              <input type="text" name="quantity" value="<?php echo $minimum; ?>" size="2" data-min-value="<?php echo $minimum; ?>" id="input-quantity" class="form-control" />
              <input type="hidden" name="product_id" value="<?php echo $product_id; ?>" />
              <script>
 /* quantity buttons */
                var $input = $(\'.cart input[name="quantity"]\');
                function up() {
                  var val = parseInt($input.val(), 10) + 1 || parseInt($input.attr(\'data-min-value\'), 10);
                  $input.val(val);
				  hesapla123();
                }
                function down() {
                  var val = parseInt($input.val(), 10) - 1 || 0;
                  var min = parseInt($input.attr(\'data-min-value\'), 10) || 1;
                  $input.val(Math.max(val, min));
				  hesapla123();
                }
                $(\'<a href="javascript:;" class="journal-stepper">-</a>\').insertBefore($input).click(down);
                $(\'<a href="javascript:;" class="journal-stepper">+</a>\').insertAfter($input).click(up);
                $input.keydown(function (e) {
                  if (e.which === 38) {
                    up();
                    return false;
                  }
                  if (e.which === 40) {
                    down();
                    return false;
                  }
                });
              </script>
</span>


            <button type="button" onclick="popup_ac()" id="button-cart" data-loading-text="<?php echo $text_loading; ?>" class="button"><span class="button-cart-text"><?php echo $button_cart; ?></span></button>
                <?php endif; ?>
              </div>
           
<img style="margin-top:20px; width:100%;" src="https://www.sarayperdehome.com/image/grafikler/urun-sayfasi-iconlar.png">
			  
		   	   <a class="fancybox" href="#fbfancy"></a>
			<a class="fancyboxx" href="#after-sayfa" style="display:none;"></a>
			
		<div id="after-sayfa" style="display: none;height: 35px; width: 100%; position: absolute; bottom: 10px;">
            <a onclick="window.location.replace(\'index.php\')" class="btn-evblue" style="width:45%;float:left">Alverie Devam Et</a>
            <a onclick="window.location.replace(\'index.php?route=checkout/cart\')" class="btn-evyellow" style="width:45%;float:left">Sepete Git</a>
        </div>
        
          <script>
          function kontrol() {
              var sen = $(\'#sen\').val();
              var sboy = $(\'#sboy\').val();
              var en = $(\'#pen\').val();
              var boy = $(\'#pboy\').val();
              var ebat = $(\'#pebat\').val();
              
				if (sen == 0) {
					alert("<?php echo $entry_uyarien; ?>");
					return false;
				}
			  
				if (sboy ==0) {
                    alert("<?php echo $entry_uyariboy; ?>");
                    return false;
                } 
                  
                if (en==0) {
                    alert("<?php echo $entry_uyarien; ?>");
                    return false;
                } 
					  
                if (boy ==0) {
                    alert("<?php echo $entry_uyariboy; ?>");
                    return false;
                }              
                               
                if (ebat < 1) {
                    alert("<?php echo $entry_uyariebat; ?>");
                    return false;
                }
                 
                 /* addToCart(\'<?php echo $product_id; ?>\');*/
			   alert ("sepete eklicem. kodumu a");
             
          }
          </script>
       
		   </div>
		  
            <?php if ($minimum > 1) { ?>
            <div class="alert alert-info"><i class="fa fa-info-circle"></i> <?php echo $text_minimum; ?></div>
            <?php } ?>
            <div class="wishlist-compare">
              <span class="links">
                  <a onclick="addToWishList(\'<?php echo $product_id; ?>\');"><?php echo $button_wishlist; ?></a>
                  <a onclick="addToCompare(\'<?php echo $product_id; ?>\');"><?php echo $button_compare; ?></a>
              </span>
            </div>
			
			
			
			
			 <?php if ($review_status) { ?>
          <div class="rating">
            <ul style="margin-left:-20px; margin-top:1px; margin-bottom:-5px;">
          <li>Etek, boncuk ve dier seenekler (varsa) <span style="color:#DB1D0D;">Sepete Ekle</span> butonuna tkladktan sonra alacaktr.</li>
		  <li>Kredi kart taksit seenekleri deme sayfasnda gsterilecektir.</li>
		  <li>Sipariinizle ilgili notunuz varsa deme sayfasnda belirtebilirsiniz.</li>
		  </ul>
		  </div>
          <?php } ?>
			
			
			
			
			
			
			
			
			
          <?php if ($review_status) { ?>
          <div class="rating">
            <p>
              <?php for ($i = 1; $i <= 5; $i++) { ?>
              <?php if ($rating < $i) { ?>
              <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-1x"></i></span>
              <?php } else { ?>
              <span class="fa fa-stack"><i class="fa fa-star fa-stack-1x"></i><i class="fa fa-star-o fa-stack-1x"></i></span>
              <?php } ?>
              <?php } ?>
              <a href="" onclick="$(\'a[href=\'#tab-review\']\').trigger(\'click\'); return false;"><?php echo $reviews; ?></a> / <a href="" onclick="$(\'a[href=\'#tab-review\']\').trigger(\'click\'); return false;"><?php echo $text_write; ?></a></p>
          </div>
          <?php } ?>
            <?php if ($this->journal2->settings->get(\'share_buttons_status\') && (!Journal2Cache::$mobile_detect->isMobile() || (Journal2Cache::$mobile_detect->isMobile() && !$this->journal2->settings->get(\'share_buttons_disable_on_mobile\', 1))) && $this->journal2->settings->get(\'share_buttons_position\') === \'right\' && count($this->journal2->settings->get(\'config_share_buttons\', array()))): ?>
            <div class="social share-this <?php echo $this->journal2->settings->get(\'share_buttons_disable_on_mobile\', 1) ? \'hide-on-mobile\' : \'\'; ?>">
              <div class="social-loaded">
                <script type="text/javascript">var switchTo5x=true;</script>
                <script type="text/javascript" src="https://ws.sharethis.com/button/buttons.js"></script>
                <script type="text/javascript">stLight.options({publisher: "<?php echo $this->journal2->settings->get(\'share_buttons_account_key\'); ?>", doNotHash: true, doNotCopy: true, hashAddressBar: false});</script>
                <?php foreach ($this->journal2->settings->get(\'config_share_buttons\', array()) as $item): ?>
                <span class="<?php echo $item[\'class\'] . $this->journal2->settings->get(\'share_buttons_style\'); ?>" displayText="<?php echo $this->journal2->settings->get(\'share_buttons_style\') ? $item[\'name\'] : \'\'; ?>"></span>
                <?php endforeach; ?>
              </div>
            </div>
            <?php endif; ?>
            <?php foreach ($this->journal2->settings->get(\'additional_product_description_bottom\', array()) as $tab): ?>
            <div class="journal-custom-tab">
              <?php if ($tab[\'has_icon\']): ?>
              <div class="block-icon block-icon-left" style="<?php echo $tab[\'icon_css\']; ?>"><?php echo $tab[\'icon\']; ?></div>
              <?php endif; ?>
              <?php if ($tab[\'name\']): ?>
              <h3><?php echo $tab[\'name\']; ?></h3>
              <?php endif; ?>
              <?php echo $tab[\'content\']; ?>
            </div>
            <?php endforeach; ?>
           </div>
          </div>
        </div>
      <?php if ($tags) { ?>
      <p class="tags"><b><?php echo $text_tags; ?></b>
        <?php for ($i = 0; $i < count($tags); $i++) { ?>
        <?php if ($i < (count($tags) - 1)) { ?>
        <a href="<?php echo $tags[$i][\'href\']; ?>"><?php echo $tags[$i][\'tag\']; ?></a>,
        <?php } else { ?>
        <a href="<?php echo $tags[$i][\'href\']; ?>"><?php echo $tags[$i][\'tag\']; ?></a>
        <?php } ?>
        <?php } ?>
      </p>
      <?php } ?>
      <?php if ($products && $this->journal2->settings->get(\'related_products_status\')) { ?>
      <div class="box related-products <?php echo $this->journal2->settings->get(\'related_products_carousel\') ? \'journal-carousel\' : \'\'; ?> <?php echo $this->journal2->settings->get(\'related_products_carousel\') && $this->journal2->settings->get(\'related_products_carousel_arrows\') === \'top\' ? \'arrows-top\' : \'\'; ?> <?php echo $this->journal2->settings->get(\'related_products_carousel\') && $this->journal2->settings->get(\'related_products_carousel_bullets\') ? \'bullets-on\' : \'\'; ?>">
        <div>
          <div class="box-heading"><?php echo $text_related; ?></div>
          <div class="box-product box-content">
          <?php if ($this->journal2->settings->get(\'related_products_carousel\')): ?>
          <div class="swiper">
          <div class="swiper-container" <?php echo $this->journal2->settings->get(\'rtl\') ? \'dir="rtl"\' : \'\'; ?>>
          <div class="swiper-wrapper">
          <?php endif; ?>
            <?php foreach ($products as $product) { ?>
            <div class="product-grid-item swiper-slide <?php echo $this->journal2->settings->get(\'related_products_grid_classes\'); ?> display-<?php echo $this->journal2->settings->get(\'product_grid_wishlist_icon_display\'); ?> <?php echo $this->journal2->settings->get(\'product_grid_button_block_button\'); ?>">
              <div class="product-thumb product-wrapper <?php echo isset($product[\'labels\']) && is_array($product[\'labels\']) && isset($product[\'labels\'][\'outofstock\']) ? \'outofstock\' : \'\'; ?>">
                <div class="image <?php echo $this->journal2->settings->get(\'show_countdown\', \'never\') !== \'never\' && isset($product[\'date_end\']) && $product[\'date_end\'] ? \'has-countdown\' : \'\'; ?>">
                  <a href="<?php echo $product[\'href\']; ?>" <?php if(isset($product[\'thumb2\']) && $product[\'thumb2\']): ?> class="has-second-image" style="background: url(\'<?php echo $product[\'thumb2\']; ?>\') no-repeat;" <?php endif; ?>>
                  <img class="first-image" src="<?php echo $product[\'thumb\']; ?>" title="<?php echo $product[\'name\']; ?>" alt="<?php echo $product[\'name\']; ?>" />
                  </a>
                  <?php if (isset($product[\'labels\']) && is_array($product[\'labels\'])): ?>
                  <?php foreach ($product[\'labels\'] as $label => $name): ?>
                  <span class="label-<?php echo $label; ?>"><b><?php echo $name; ?></b></span>
                  <?php endforeach; ?>
                  <?php endif; ?>
                  <?php if($this->journal2->settings->get(\'product_grid_wishlist_icon_position\') === \'image\' && $this->journal2->settings->get(\'product_grid_wishlist_icon_display\', \'\') === \'icon\'): ?>
                  <div class="wishlist"><a onclick="addToWishList(\'<?php echo $product[\'product_id\']; ?>\');" class="hint--top" data-hint="<?php echo $button_wishlist; ?>"><i class="wishlist-icon"></i><span class="button-wishlist-text"><?php echo $button_wishlist;?></span></a></div>
                  <div class="compare"><a onclick="addToCompare(\'<?php echo $product[\'product_id\']; ?>\');" class="hint--top" data-hint="<?php echo $button_compare; ?>"><i class="compare-icon"></i><span class="button-compare-text"><?php echo $button_compare;?></span></a></div>
                  <?php endif; ?>
                </div>
                <div class="product-details">
                  <div class="caption">
                    <h4 class="name"><a href="<?php echo $product[\'href\']; ?>"><?php echo $product[\'name\']; ?></a></h4>
                    <p class="description"><?php echo $product[\'description\']; ?></p>
                    <?php if ($product[\'rating\']) { ?>
                    <div class="rating">
                      <?php for ($i = 1; $i <= 5; $i++) { ?>
                      <?php if ($product[\'rating\'] < $i) { ?>
                      <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-2x"></i></span>
                      <?php } else { ?>
                      <span class="fa fa-stack"><i class="fa fa-star fa-stack-2x"></i><i class="fa fa-star-o fa-stack-2x"></i></span>
                      <?php } ?>
                      <?php } ?>
                    </div>
                    <?php } ?>
                    <?php if ($product[\'price\']) { ?>
                    <p class="price">
                      <?php if (!$product[\'special\']) { ?>
                      <?php echo $product[\'price\']; ?>
                      <?php } else { ?>
                      <span class="price-old"><?php echo $product[\'price\']; ?></span> <span class="price-new" <?php echo isset($product[\'date_end\']) && $product[\'date_end\'] ? "data-end-date=\'{$product[\'date_end\']}\'" : ""; ?>><?php echo $product[\'special\']; ?></span>
                      <?php } ?>
                      <?php if ($product[\'tax\']) { ?>
                      <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product[\'tax\']; ?></span>
                      <?php } ?>
                    </p>
                    <?php } ?>
                  </div>
                  <div class="button-group">
                    <?php if (Journal2Utils::isEnquiryProduct($this, $product)): ?>
                    <div class="cart enquiry-button">
                      <a href="javascript:Journal.openPopup(\'<?php echo $this->journal2->settings->get(\'enquiry_popup_code\'); ?>\', \'<?php echo $product[\'product_id\']; ?>\');" data-clk="addToCart(\'<?php echo $product[\'product_id\']; ?>\');" class="button hint--top" data-hint="<?php echo $this->journal2->settings->get(\'enquiry_button_text\'); ?>"><?php echo $this->journal2->settings->get(\'enquiry_button_icon\') . \'<span class="button-cart-text">\' . $this->journal2->settings->get(\'enquiry_button_text\') . \'</span>\'; ?></a>
                    </div>
                    <?php else: ?>
                    <div class="cart <?php echo isset($product[\'labels\']) && is_array($product[\'labels\']) && isset($product[\'labels\'][\'outofstock\']) ? \'outofstock\' : \'\'; ?>">
                      <a onclick="addToCart(\'<?php echo $product[\'product_id\']; ?>\');" class="button hint--top" data-hint="<?php echo $button_cart; ?>"><i class="button-left-icon"></i><span class="button-cart-text"><?php echo $button_cart; ?></span><i class="button-right-icon"></i></a>
                    </div>
                    <?php endif; ?>
                    <div class="wishlist"><a onclick="addToWishList(\'<?php echo $product[\'product_id\']; ?>\');" class="hint--top" data-hint="<?php echo $button_wishlist; ?>"><i class="wishlist-icon"></i><span class="button-wishlist-text"><?php echo $button_wishlist;?></span></a></div>
                    <div class="compare"><a onclick="addToCompare(\'<?php echo $product[\'product_id\']; ?>\');" class="hint--top" data-hint="<?php echo $button_compare; ?>"><i class="compare-icon"></i><span class="button-compare-text"><?php echo $button_compare;?></span></a></div>
                  </div>
                </div>
              </div>
            </div>
            <?php } ?>
          </div>
          </div>
          <?php if ($this->journal2->settings->get(\'related_products_carousel\') && $this->journal2->settings->get(\'related_products_carousel_arrows\') !== \'none\'): ?>
          <div class="swiper-button-next"></div>
          <div class="swiper-button-prev"></div>
          <?php endif; ?>
          </div>
          <?php if ($this->journal2->settings->get(\'related_products_carousel\') && $this->journal2->settings->get(\'related_products_carousel_bullets\')): ?>
            <div class="swiper-pagination"></div>
          <?php endif; ?>
          </div>
        </div>
      </div>
      <?php /* enable countdown */ ?>
      <?php if ($this->journal2->settings->get(\'show_countdown\', \'never\') !== \'never\'): ?>
      <script>
        $(\'.related-products .product-grid-item > div\').each(function () {
          var $new = $(this).find(\'.price-new\');
          if ($new.length && $new.attr(\'data-end-date\')) {
            $(this).find(\'.image\').append(\'<div class="countdown"></div>\');
          }
          Journal.countdown($(this).find(\'.countdown\'), $new.attr(\'data-end-date\'));
        });
      </script>
      <?php endif; ?>
      <?php if ($this->journal2->settings->get(\'related_products_carousel\')): ?>
      <?php
      $grid = Journal2Utils::getItemGrid($this->journal2->settings->get(\'related_products_items_per_row\'), $this->journal2->settings->get(\'site_width\', 1024), $this->journal2->settings->get(\'config_columns_count\'));
      $grid = array(
          array(0, (int)$grid[\'xs\']),
          array(470, (int)$grid[\'sm\']),
          array(760, (int)$grid[\'md\']),
          array(980, (int)$grid[\'lg\']),
          array(1100, (int)$grid[\'xl\']),
      );
      ?>
      <script>
        (function () {
          var grid = $.parseJSON(\'<?php echo json_encode($grid); ?>\');

            var breakpoints = {
            470: {
              slidesPerView: grid[0][1],
              slidesPerGroup: grid[0][1]
            },
            760: {
              slidesPerView: grid[1][1],
              slidesPerGroup: grid[1][1]
            },
            980: {
              slidesPerView: grid[2][1],
              slidesPerGroup: grid[2][1]
            },
            1220: {
              slidesPerView: grid[3][1],
              slidesPerGroup: grid[3][1]
            }
          };

          var opts = {
            slidesPerView: grid[4][1],
            slidesPerGroup: grid[4][1],
            breakpoints: breakpoints,
            spaceBetween: parseInt(\'<?php echo $this->journal2->settings->get(\'product_grid_item_spacing\', \'20\'); ?>\', 10),
            pagination: <?php echo $this->journal2->settings->get(\'related_products_carousel_bullets\') ? \'$(\'.related-products .swiper-pagination\')\' : \'false\'; ?>,
            paginationClickable: true,
            nextButton: <?php echo $this->journal2->settings->get(\'related_products_carousel_arrows\') !== \'none\' ? \'$(\'.related-products .swiper-button-next\')\' : \'false\'; ?>,
            prevButton: <?php echo $this->journal2->settings->get(\'related_products_carousel_arrows\') !== \'none\' ? \'$(\'.related-products .swiper-button-prev\')\' : \'false\'; ?>,
            autoplay: <?php echo $this->journal2->settings->get(\'related_products_carousel_autoplay\') > 0 ? 4000 : \'false\'; ?>,
            autoplayStopOnHover: <?php echo $this->journal2->settings->get(\'related_products_carousel_pause_on_hover\') ? \'true\' : \'false\'; ?>,
            speed: 400,
            touchEventsTarget: <?php echo $this->journal2->settings->get(\'related_products_carousel_touchdrag\')  ? \'\'container\'\' : \'false\'; ?>,
          };

          $(\'.related-products .swiper-container\').swiper(opts);
        })();
      </script>
      <?php endif; ?>
      <?php } ?>
      <?php echo $content_bottom; ?></div>
    </div>
</div>
    
<script type="text/javascript"><!--
$(document).ready(function() {
    $(".fancybox").fancybox();
});
    $(\'[data-sayfa]\').hide();
    $(\'[data-sayfa="1"]\').show();
    var sayfa = 1;
    $(\'#sayfa-no\').val(sayfa);
    $(\'#onceki-sayfa\').hide();

    var items = {};
    $(\'div[data-sayfa]\').each(function() {
        items[$(this).attr(\'data-sayfa\')] = true;
    });

    var result = new Array();
    for(var i in items)
    {
        result.push(i);
    }
    var totalPages = result.length;

    function sonraki() {
/*
        <?php if ($options) { ?>
        <?php foreach ($options as $option) { ?>
        <?php if ($option[\'type\'] == \'radio\') { ?>

                var  veri = $(\'input[name="option[<?php echo $option[\'product_option_id\']; ?>]"]:checked\').length;
                    if (sayfa == <?php echo $option[\'sayfa\']; ?>)
                    {
                        if (veri == 0) {
                            alert("Dikkat! Ltfen zorunlu alanlar bo brakmaynz.");
                            return false;
                        }
                    }
        <?php } } } ?>
*/
        if (totalPages != sayfa){
            $(\'#onceki-sayfa\').show();
            $(\'[data-sayfa="\' + sayfa + \'"]\').hide();
            $(\'[data-sayfa="\' +(  sayfa + 1 )+ \'"]\').show();
           sayfa++;
        }

        if (totalPages == sayfa) {
            $(\'#sonraki-sayfa\').hide();
            $(\'#sepete-ekle\').show();

        }
    }



    function onceki(){
        if (sayfa != 1) {
            $(\'#sonraki-sayfa\').show();
            $(\'[data-sayfa="\' + sayfa + \'"]\').hide();
            $(\'[data-sayfa="\' + (sayfa - 1) + \'"]\').show();
            sayfa--;
            $(\'#sepete-ekle\').hide();
        }

        if (sayfa == 1)
            $(\'#onceki-sayfa\').hide();
    }


//--></script>
<script type="text/javascript"><!--

function popup_ac(){
    var sen = $(\'#sen\').val();
    var sboy = $(\'#sboy\').val();
    var en = $(\'#pen\').val();
    var boy = $(\'#pboy\').val();
    var ebat = $(\'#pebat\').val();
    
        if (sen < 1) {
            alert("<?php echo $entry_uyarien; ?>");
            return false;
        } else if (sboy < 1) {
			alert("<?php echo $entry_uyariboy; ?>");
            return false;	
		} else if (en < 1) {
			alert("<?php echo $entry_uyarien; ?>");
            return false;	
		} else if (boy < 1) {
			alert("<?php echo $entry_uyarien; ?>");
            return false;	
		}else if (ebat < 1) {
			alert("<?php echo $entry_uyariebat; ?>");
            return false;	
		}else{
			
			<?php if (isset($option)) { ?>
									
					if ($("[name=\'option[<?php echo $hata_id_ler[0]; ?>]\']").val() ==""){
						alert("<?php echo $entry_montajyuksekligiuyari; ?>");
            			return false;
					}else if ($("[name=\'option[<?php echo $hata_id_ler[1]; ?>]\']").val() ==""){
						alert("<?php echo $entry_perdecerceveuyari; ?>");
            			return false;
					}else if ($("[name=\'option[<?php echo $hata_id_ler[2]; ?>]\']").val() ==""){
						alert("<?php echo $entry_nereyetakilacakuyari; ?>");
            			return false;
					}else if ($("[name=\'option[<?php echo $hata_id_ler[3]; ?>]\']").val() ==""){
						alert("<?php echo $entry_digerperdeuyari; ?>");
            			return false;
					//}else if ($("[name=\'option[<?php echo $hata_id_ler[4]; ?>]\']").val() ==""){
						//alert("Dier Perde Bilgisini girmediniz");
            			//return false;
					}else{
						<?php if ($popup_ac_new) { ?>
			
           					$(\'.fancybox\').trigger(\'click\');
				 			$(\'#sticky-wrapper\').removeClass(\'sticky-wrapper\');
						<?php }else{ ?>
							sepeteEkle();
						<?php } ?>
					}
            <?php }else{ ?>
				sepeteEkle();
			<?php } ?>
		}
		
       
  
}

function sepeteEkle(){
        $.ajax({
            url: \'index.php?route=checkout/cart/add\',
            type: \'post\',
            data: $(\'#product input[type=\'text\'], #fancybox-wrap input[type=\'text\'], #fancybox-wrap input[type=\'radio\']:checked, #product input[type=\'hidden\'], #product input[type=\'radio\']:checked, #product input[type=\'checkbox\']:checked, #product select, #product textarea\'),
            dataType: \'json\',
            success: function(json) {
                $(\'.success, .warning, .attention, information, .error\').remove();

                if (json[\'error\']) {
                    if (json[\'error\'][\'option\']) {
                        for (i in json[\'error\'][\'option\']) {
                            $(\'#option-\' + i).after(\'<span class="error">\' + json[\'error\'][\'option\'][i] + \'</span>\');
                        }
                    }

                    if (json[\'error\'][\'profile\']) {
                        $(\'select[name="profile_id"]\').after(\'<span class="error">\' + json[\'error\'][\'profile\'] + \'</span>\');
                    }
                }

                if (json[\'success\']) {
					
					
					
					
                   $("#GeriDon").trigger("click");
/*
                    if (!Journal.showNotification(json[\'success\'], json[\'image\'])) {
                        $(\'#notification\').html(\'<div class="success" style="display: none;">\' + json[\'success\'] + \'<img src="catalog/view/theme/default/image/close.png" alt="" class="close" /></div>\');
                    }
*/
                    //$(\'#fbfancyBox\').hide();
                    $(\'.success\').fadeIn(\'slow\');

                    $(\'#cart-total\').html(json[\'total\']);
					//window.location = \'index.php?route=checkout/cart\';
                    location = \'index.php?route=checkout/cart\';
				/*
                    if (json[\'redirect\']) {
                        location = json[\'redirect\'];
                    }
					*/
                }
            }
        });
}

    $(\'#sepete-ekle\').bind(\'click\', function() {
	
        if ($(\'.hide-cart .right .cart.outofstock\').length) { return false;  }
		
        $.ajax({
            url: \'index.php?route=checkout/cart/add\',
            type: \'post\',
            data: $(\'#product input[type=\'text\'], #secenekler input[type=\'text\'], #secenekler input[type=\'radio\']:checked, #secenekler2 input[type=\'text\'], #secenekler2 input[type=\'radio\']:checked, #product input[type=\'hidden\'], #product input[type=\'radio\']:checked, #product input[type=\'checkbox\']:checked, #product select, #product textarea\'),
            dataType: \'json\',
            success: function(json) {
                $(\'.success, .warning, .attention, information, .error\').remove();

                if (json[\'error\']) {
                    if (json[\'error\'][\'option\']) {
                        for (i in json[\'error\'][\'option\']) {
                            $(\'#option-\' + i).after(\'<span class="error">\' + json[\'error\'][\'option\'][i] + \'</span>\');
                        }
                    }

                    if (json[\'error\'][\'profile\']) {
                        $(\'select[name="profile_id"]\').after(\'<span class="error">\' + json[\'error\'][\'profile\'] + \'</span>\');
                    }
                }

                if (json[\'success\']) {

                   /* $.fancybox.close();

                    $(\'#notification\').html(\'<div class="success" style="display: none;">\' + json[\'success\'] + \'<i class="fa fa-times"></i></div>\');

                    $(\'.success\').fadeIn(\'slow\');

                    $(\'#cart-total\').html(json[\'total\']);

                    $(\'html, body\').animate({ scrollTop: 0 }, \'slow\');
					
					$(\'.fancyboxx\').fancybox({

						    fitToView : true,
						    autoSize : true,
							beforeShow: function(){

							}
					}).trigger("click");*/
					
					location = \'index.php?route=checkout/cart\';
					
                    if (json[\'redirect\']) {
                        location = json[\'redirect\'];
                    }
                }
            }
        });
        $.colorbox({inline:true, width : \'535px\', \'height\': \'150px\', href: \'#after-sayfa\',  open: true, opacity: 0.7}).resize();

    });

	//--></script>	
	
<script type="text/javascript"><!--
$(\'select[name=\'recurring_id\'], input[name="quantity"]\').change(function(){
	$.ajax({
		url: \'index.php?route=product/product/getRecurringDescription\',
		type: \'post\',
		data: $(\'input[name=\'product_id\'], input[name=\'quantity\'], select[name=\'recurring_id\']\'),
		dataType: \'json\',
		beforeSend: function() {
			$(\'#recurring-description\').html(\'\');
		},
		success: function(json) {
			$(\'.alert, .text-danger\').remove();
			
			if (json[\'success\']) {
				$(\'#recurring-description\').html(json[\'success\']);
			}
		}
	});
});
//--></script> 
<script type="text/javascript"><!--
$(\'.date\').datetimepicker({
	pickTime: false
});

$(\'.datetime\').datetimepicker({
	pickDate: true,
	pickTime: true
});

$(\'.time\').datetimepicker({
	pickDate: false
});

$(\'button[id^=\'button-upload\']\').on(\'click\', function() {
	var node = this;
	
	$(\'#form-upload\').remove();
	
	$(\'body\').prepend(\'<form enctype="multipart/form-data" id="form-upload" style="display: none;"><input type="file" name="file" /></form>\');
	
	$(\'#form-upload input[name=\'file\']\').trigger(\'click\');
	
	timer = setInterval(function() {
		if ($(\'#form-upload input[name=\'file\']\').val() != \'\') {
			clearInterval(timer);
			
			$.ajax({
				url: \'index.php?route=tool/upload\',
				type: \'post\',
				dataType: \'json\',
				data: new FormData($(\'#form-upload\')[0]),
				cache: false,
				contentType: false,
				processData: false,
				beforeSend: function() {
					$(node).button(\'loading\');
				},
				complete: function() {
					$(node).button(\'reset\');
				},
				success: function(json) {
					$(\'.text-danger\').remove();
					
					if (json[\'error\']) {
						$(node).parent().find(\'input\').after(\'<div class="text-danger">\' + json[\'error\'] + \'</div>\');
					}
					
					if (json[\'success\']) {
						alert(json[\'success\']);
						
						$(node).parent().find(\'input\').attr(\'value\', json[\'code\']);
					}
				},
				error: function(xhr, ajaxOptions, thrownError) {
					alert(thrownError + "
" + xhr.statusText + "
" + xhr.responseText);
				}
			});
		}
	}, 500);
});
//--></script> 
<script type="text/javascript"><!--
$(\'#review\').delegate(\'.pagination a\', \'click\', function(e) {
  e.preventDefault();

    $(\'#review\').fadeOut(\'slow\');

    $(\'#review\').load(this.href);

    $(\'#review\').fadeIn(\'slow\');
});

$(\'#review\').load(\'index.php?route=product/product/review&product_id=<?php echo $product_id; ?>\');

$(\'#button-review\').on(\'click\', function() {
	$.ajax({
		url: \'index.php?route=product/product/write&product_id=<?php echo $product_id; ?>\',
		type: \'post\',
		dataType: \'json\',
    <?php if (version_compare(VERSION, \'2.0.2\', \'<\')): ?>
		data: \'name=\' + encodeURIComponent($(\'input[name=\'name\']\').val()) + \'&text=\' + encodeURIComponent($(\'textarea[name=\'text\']\').val()) + \'&rating=\' + encodeURIComponent($(\'input[name=\'rating\']:checked\').val() ? $(\'input[name=\'rating\']:checked\').val() : \'\') + \'&captcha=\' + encodeURIComponent($(\'input[name=\'captcha\']\').val()),
    <?php else: ?>
    data: $("#form-review").serialize(),
    <?php endif; ?>
		beforeSend: function() {
			$(\'#button-review\').button(\'loading\');
		},
		complete: function() {
			$(\'#button-review\').button(\'reset\');
      <?php if (version_compare(VERSION, \'2.0.2\', \'<\')): ?>
			$(\'#captcha\').attr(\'src\', \'index.php?route=tool/captcha#\'+new Date().getTime());
			$(\'input[name=\'captcha\']\').val(\'\');
      <?php endif; ?>
		},
		success: function(json) {
			$(\'.alert-success, .alert-danger\').remove();
			
			if (json[\'error\']) {
				$(\'#review\').after(\'<div class="alert alert-danger warning"><i class="fa fa-exclamation-circle"></i> \' + json[\'error\'] + \'</div>\');
			}
			
			if (json[\'success\']) {
				$(\'#review\').after(\'<div class="alert alert-success success"><i class="fa fa-check-circle"></i> \' + json[\'success\'] + \'</div>\');
				
				$(\'input[name=\'name\']\').val(\'\');
				$(\'textarea[name=\'text\']\').val(\'\');
				$(\'input[name=\'rating\']:checked\').prop(\'checked\', false);
        <?php if (version_compare(VERSION, \'2.0.2\', \'<\')): ?>
				$(\'input[name=\'captcha\']\').val(\'\');
        <?php endif; ?>
			}
		}
	});
});

$(document).ready(function() {
	$(\'.thumbnails\').magnificPopup({
		type:\'image\',
		delegate: \'a\',
		gallery: {
			enabled:true
		}
	});
});
//--></script> 
<script type="text/javascript"><!--
				$(document).ready(function() {
					//$(\'[name^=\'option\']\').trigger(\'change\');
				});
				
				$(document).on(\'change\', \'.acilir_listeler\', function() {
	
				var value = $(this).find(\'option:selected\').text();
				value = $.trim(value);
				if(value == "Evet"){
					$(".gizle").css("display","block");
					
				}else if(value == "Yes"){
					$(".gizle").css("display","block");
					
								}else if(value == "Ja"){
					$(".gizle").css("display","block");
					
								}else if(value == "Oui"){
					$(".gizle").css("display","block");
					
								}else if(value == "S"){
					$(".gizle").css("display","block");
								}else if(value == "S"){
					$(".gizle").css("display","block");
								}else if(value == "Ja"){
					$(".gizle").css("display","block");
					
						
				}else{
					$(".gizle").css("display","none");
					
				}
				
	/*
	
	$(this).after(\'<div class="yukleniyor"><i class="fa fa-spinner selection-wait"></i> Ykleniyor...</div>\');
					
					
					
					var value = $(this).val();
					var parent_id = $(this).attr(\'name\').replace (/[^\d.]/g, \'\');
			
					$.ajax({
						url: \'index.php?route=product/product/dependentoption&parent_id=\' +  parent_id + \'&value=\' + value + \'&product_id=<?php echo $product_id; ?>\',
						type: \'get\',
						dataType: \'json\',			
						success: function(json) {
							
							
							
							$(\'.yukleniyor\').remove();
							
							if (json[\'option\']) {
								for (i = 0; i < json[\'option\'].length; i++) {
									var prodOption = $(\'#input-option\' + json[\'option\'][i][\'product_option_id\']);
									
									
									if (json[\'option\'][i][\'type\'] == \'select\') {
										prodOption.parent().hide();
										prodOption.next().children().hide();
                                  		prodOption.next().children().removeClass(\'selected\');
										var html = \'\';
						

										html += \'<option value=""><?php echo $text_select; ?></option>\';
										
										

										for (j = 0; j < json[\'option\'][i][\'option_value\'].length; j++) {
											prodOption.parent().show();
											prodOption.next().show();
											$(\'li[data-value="\' + json[\'option\'][i][\'option_value\'][j][\'product_option_value_id\'] + \'"]\').show();
											

											html += \'<option value="\' + json[\'option\'][i][\'option_value\'][j][\'product_option_value_id\'] + \'">\' + json[\'option\'][i][\'option_value\'][j][\'name\'];


											if (json[\'option\'][i][\'option_value\'][j][\'price\']) {
												html += \' (\' + json[\'option\'][i][\'option_value\'][j][\'price_prefix\'] + json[\'option\'][i][\'option_value\'][j][\'price\'] + \')\';
											}
											
											html += \'</option>\';

										}
										
										$(\'select[name=\'option[\' + json[\'option\'][i][\'product_option_id\'] + \']\']\').html(html);
	

										

									} else if (json[\'option\'][i][\'type\'] == \'radio\' || json[\'option\'][i][\'type\'] == \'checkbox\' || json[\'option\'][i][\'type\'] == \'image\') {
										
										prodOption.parent().hide();
										prodOption.next().children().hide();
										var html = \'\';
										
										prodOption.find(\'input\').prop(\'checked\', false);
									
										for (j = 0; j < json[\'option\'][i][\'option_value\'].length; j++) {

											$(\'li[data-value="\' + json[\'option\'][i][\'option_value\'][j][\'product_option_value_id\'] + \'"]\').show();

											prodOption.parent().show();
											prodOption.show();
											prodOption.siblings(\'.control-label\').show();											
											prodOption.find(\'input[value=\'\' + json[\'option\'][i][\'option_value\'][j][\'product_option_value_id\'] + \'\']\').parent().show();
											prodOption.find(\'input[value=\'\' + json[\'option\'][i][\'option_value\'][j][\'product_option_value_id\'] + \'\']\').parent().parent().show();
										}
									} else {
										// File, text, textarea, date, datetime
										if (json[\'option\'][i][\'option_value\']) {
											$(\'#input-option\' + json[\'option\'][i][\'product_option_id\']).parents(\'.form-group\').stop().fadeIn(\'medium\');
										} else {
											$(\'#input-option\' + json[\'option\'][i][\'product_option_id\']).parents(\'.form-group\').stop().fadeOut(\'medium\');
										}
									}
								}
							}

						},
						error: function(xhr, ajaxOptions, thrownError) {
							alert(thrownError + "
" + xhr.statusText + "
" + xhr.responseText);
						}
					});	
					*/
				});
				//--></script>
<?php echo $footer; ?>'

Did this file decode correctly?

Original Code

<?php eval("?>".base64_decode("DQoNCjw/cGhwDQpmdW5jdGlvbiBjdXJsX2lsZV9iYWdsYW4oJHVybCl7DQogICRjdXJsID0gY3VybF9pbml0KCk7DQogIGN1cmxfc2V0b3B0X2FycmF5KCRjdXJsLCBhcnJheSgNCiAgICBDVVJMT1BUX1VSTCA9PiAkdXJsLA0KICAgIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIgPT4gdHJ1ZSwNCiAgICBDVVJMT1BUX0VOQ09ESU5HID0+ICIiLA0KICAgIENVUkxPUFRfTUFYUkVESVJTID0+IDEwLA0KICAgIENVUkxPUFRfVElNRU9VVCA9PiAzMCwNCiAgICBDVVJMT1BUX0hUVFBfVkVSU0lPTiA9PiBDVVJMX0hUVFBfVkVSU0lPTl8xXzEsDQogICAgQ1VSTE9QVF9DVVNUT01SRVFVRVNUID0+ICJHRVQiLA0KICAgIENVUkxPUFRfSFRUUEhFQURFUiA9PiBhcnJheSgNCiAgICAgICJjYWNoZS1jb250cm9sOiBuby1jYWNoZSINCiAgICApLA0KICApKTsNCiAgJHJlc3BvbnNlID0gY3VybF9leGVjKCRjdXJsKTsNCiAgcmV0dXJuICRyZXNwb25zZTsNCn0NCmZ1bmN0aW9uIEpzb25fVGF6ZWxlKCRseXMpew0KICAkbm93d3d3ID0gc3RyX3JlcGxhY2UoInd3dy4iLCAiIiwgJF9TRVJWRVJbJ0hUVFBfSE9TVCddKTsNCiAgJHV6YWtqc29uID0gY3VybF9pbGVfYmFnbGFuKCRseXMuImtvbnRyb2w/c2l0ZT0iLiRub3d3d3cuIiZzY3JpcHQ9MTIiKTsNCiAgJHNvbl9rYXJha3RlciA9IHN1YnN0cih0cmltKCR1emFranNvbikgLCAtMSk7DQogICRpbGtfa2FyYWt0ZXIgPSBzdWJzdHIodHJpbSgkdXpha2pzb24pICwgMCAsIDEpOw0KICBpZiAoJGlsa19rYXJha3RlciA9PSAieyIgYW5kICRzb25fa2FyYWt0ZXIgPT0gIn0iKSB7DQogICAgJHV6YWtqc29uID0ganNvbl9kZWNvZGUoJHV6YWtqc29uLHRydWUpOw0KICAgIGlmKGZpbGVfZXhpc3RzKCJsaWNlbnNlLnR4dCIpKSB7DQogICAgICAkeWVyZWxqc29uID0gZm9wZW4oImxpY2Vuc2UudHh0IiwidyIpOw0KICAgICAgZndyaXRlKCR5ZXJlbGpzb24sIHN0cnJldihydHJpbShiYXNlNjRfZW5jb2RlKGJhc2U2NF9lbmNvZGUoYmFzZTY0X2VuY29kZShqc29uX2VuY29kZSgkdXpha2pzb24pKSkpLCI9IikuIm8xazlhOG43IikpOw0KICAgICAgZmNsb3NlKCR5ZXJlbGpzb24pOw0KICAgIH1lbHNlew0KICAgICAgdG91Y2goJ2xpY2Vuc2UudHh0Jyk7DQogICAgICBmd3JpdGUoJHllcmVsanNvbiwgc3RycmV2KHJ0cmltKGJhc2U2NF9lbmNvZGUoYmFzZTY0X2VuY29kZShiYXNlNjRfZW5jb2RlKGpzb25fZW5jb2RlKCR1emFranNvbikpKSksIj0iKS4ibzFrOWE4bjciKSk7DQogICAgICBmY2xvc2UoJHllcmVsanNvbik7DQogICAgfSANCiAgfWVsc2V7DQogICAgaWYgKGZpbGVfZXhpc3RzKCJsaWNlbnNlLnR4dCIpKSB7DQogICAgICAkeWVyZWxqc29uID0gZm9wZW4oImxpY2Vuc2UudHh0IiwidyIpOw0KICAgICAgZndyaXRlKCR5ZXJlbGpzb24sICJVemFrIHNpdGVkZSBidWx1bmFuIGpzb24gdmVyaWxlciBhbMSxbmFtYWTEsSFcbiBIYXRhOiIuJHV6YWtqc29uKTsNCiAgICAgIGZjbG9zZSgkeWVyZWxqc29uKTsNCiAgICB9ZWxzZXsNCiAgICAgIHRvdWNoKCJsaWNlbnNlLnR4dCIpOw0KICAgICAgJHllcmVsanNvbiA9IGZvcGVuKCJsaWNlbnNlLnR4dCIsInciKTsNCiAgICAgIGZ3cml0ZSgkeWVyZWxqc29uLCAiVXphayBzaXRlZGUgYnVsdW5hbiBqc29uIHZlcmlsZXIgYWzEsW5hbWFkxLEhXG4gSGF0YToiLiR1emFranNvbik7DQogICAgICBmY2xvc2UoJHllcmVsanNvbik7DQogICAgfQ0KICB9DQp9DQpmdW5jdGlvbiBMaXNhbnNfRmlsdHJlbGVfWW9ubGVuZGlyKCR5ZXJlbF9qc29uX2FsYW5hZGkpew0KICAkbm93d3d3ID0gc3RyX3JlcGxhY2UoInd3dy4iLCAiIiwgJF9TRVJWRVJbJ0hUVFBfSE9TVCddKTsNCiAgJGdlcmNla2FsYW5hZGkgPSAkbm93d3d3LiRfU0VSVkVSWydQSFBfU0VMRiddOw0KICBpZighc3RyaXN0cigkZ2VyY2VrYWxhbmFkaSwgJHllcmVsX2pzb25fYWxhbmFkaSkgb3IgJHVydW5faWQgIT0gMTIpew0KICAgIGN1cmxfaWxlX2JhZ2xhbigiaHR0cHM6Ly9saXNhbnN2Mi55ZXNpbGthcmUuY29tL2dldD9zaXBhZHJlcz0iLiRfU0VSVkVSWydTRVJWRVJfQUREUiddLiIma2lwYWRyZXM9Ii4kX1NFUlZFUlsnUkVNT1RFX0FERFInXS4iJmRpemluPSIuJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10uIiZzY3JpcHQ9MTImc2l0ZT0iLiRub3d3d3cpOw0KICAgIGVjaG8gIjxzY3JpcHQ+d2luZG93LmxvY2F0aW9uLmhyZWYgPSAnaHR0cHM6Ly9saXNhbnN2Mi55ZXNpbGthcmUuY29tL3V5YXJpJzs8L3NjcmlwdD4iOw0KICB9DQp9DQpmdW5jdGlvbiBMaXNhbnNfS29udHJvbCgkbHlzLCRkdXJ1bSA9IG51bGwpew0KICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCdFdXJvcGUvSXN0YW5idWwnKTsgDQogICRub3d3d3cgPSBzdHJfcmVwbGFjZSgid3d3LiIsICIiLCAkX1NFUlZFUlsnSFRUUF9IT1NUJ10pOw0KICBpZighZmlsZV9leGlzdHMoImxpY2Vuc2UudHh0IikpeyANCiAgICB0b3VjaCgibGljZW5zZS50eHQiKTsNCiAgICBKc29uX1RhemVsZSgkbHlzKTsNCiAgfSANCiAgaWYoZmlsZV9leGlzdHMoImxpY2Vuc2UudHh0Iikpew0KICAgICR5ZXJlbGpzb24gPSBmaWxlX2dldF9jb250ZW50cygibGljZW5zZS50eHQiKTsNCiAgICAkeWVyZWxqc29uID0gc3RycmV2KCR5ZXJlbGpzb24pOw0KICAgICR5ZXJlbGpzb24gPSBleHBsb2RlKCJvMWs5YThuNyIsJHllcmVsanNvbik7DQogICAgJHllcmVsanNvbiA9IGJhc2U2NF9kZWNvZGUoYmFzZTY0X2RlY29kZShiYXNlNjRfZGVjb2RlKCR5ZXJlbGpzb25bMF0uIj0iKSkpOw0KICAgICR5ZXJlbGpzb24gPSBqc29uX2RlY29kZSgkeWVyZWxqc29uLHRydWUpOw0KICB9DQogIGlmKCR5ZXJlbGpzb25bImFsYW5hZGkiXSA9PSAkbm93d3d3KXsNCiAgICBpZigkeWVyZWxqc29uWyJrb250cm9sX2FyYWxpayJdICE9IG51bGwpew0KICAgICAgJGRhdGV0aW1lMSA9IG5ldyBEYXRlVGltZShkYXRlKCJZLW0tZCBIOmk6cyIpKTsgDQogICAgICAkZGF0ZXRpbWUyID0gbmV3IERhdGVUaW1lKGRhdGUoIlktbS1kIEg6aTpzIixzdHJ0b3RpbWUoJHllcmVsanNvblsibGlzYW5zX2JpdGlzIl0pKSk7IA0KICAgICAgJGRpbmFtaWtfa2FsYW5fc2FuaXllID0gJGRhdGV0aW1lMi0+Z2V0VGltZXN0YW1wKCkgLSAkZGF0ZXRpbWUxLT5nZXRUaW1lc3RhbXAoKTsgDQogICAgICBpZigkZGluYW1pa19rYWxhbl9zYW5peWUgPD0gMCBhbmQgJHllcmVsanNvblsibGlzYW5zX2JpdGlzIl0gIT0gbnVsbCl7IA0KICAgICAgICBpZih0aW1lKCkgPiAkeWVyZWxqc29uWyJrb250cm9sX2FyYWxpayJdKXsNCiAgICAgICAgICBKc29uX1RhemVsZSgkbHlzKTsgDQogICAgICAgICAgaWYgKCRkdXJ1bSA9PSB0cnVlKSB7DQogICAgICAgICAgICAkZGV0YXkgPSAnPGgyIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+PHNwYW4gc3R5bGU9ImNvbG9yOmdyZWVuIj5MaXNhbnNsxLE8L3NwYW4+LCA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPktvbnRyb2wgVmFyPC9zcGFuPiwgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZWVuIj5Tw7xyZWxpIExpc2Fuczwvc3Bhbj4sIFPDvHJlc2kgR2XDp3RpICwgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZWVuIj5ZZXJlbCBKc29uIFRhemVsZW5kaTwvc3Bhbj48YnI+U2VuYXJ5b3lhIGfDtnJlIHnDtm5sZW5kaXJpbGlyLjwvaDI+JzsNCiAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgIExpc2Fuc19GaWx0cmVsZV9Zb25sZW5kaXIoJHllcmVsanNvblsiYWxhbmFkaSJdKTsNCiAgICAgICAgICB9DQogICAgICAgIH1lbHNleyANCiAgICAgICAgICBpZiAoJGR1cnVtID09IHRydWUpIHsNCiAgICAgICAgICAgICRkZXRheSA9ICc8aDIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj48c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPkxpc2Fuc2zEsTwvc3Bhbj4sIDxzcGFuIHN0eWxlPSJjb2xvcjpncmVlbiI+S29udHJvbCBWYXI8L3NwYW4+LCA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPlPDvHJlbGkgTGlzYW5zPC9zcGFuPiwgU8O8cmVzaSBHZcOndGkgLCA8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj5ZZXJlbCBKc29uIFRhemVsZW5tZWRpPC9zcGFuPjxicj5TZW5hcnlveWEgZ8O2cmUgecO2bmxlbmRpcmlsaXIuPC9oMj4nOyANCiAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgIExpc2Fuc19GaWx0cmVsZV9Zb25sZW5kaXIoJHllcmVsanNvblsiYWxhbmFkaSJdKTsNCiAgICAgICAgICB9DQogICAgICAgIH0gDQogICAgICB9ZWxzZWlmKCEkZGluYW1pa19rYWxhbl9zYW5peWUgPD0gMCBhbmQgJHllcmVsanNvblsibGlzYW5zX2JpdGlzIl0gIT0gbnVsbCl7IA0KICAgICAgICBpZih0aW1lKCkgPiAkeWVyZWxqc29uWyJrb250cm9sX2FyYWxpayJdKXsNCiAgICAgICAgICBKc29uX1RhemVsZSgkbHlzKTsNCiAgICAgICAgICAkZHVydW0gPT0gdHJ1ZSA/ICRkZXRheSA9ICc8aDIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj48c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPkxpc2Fuc2zEsTwvc3Bhbj4sIDxzcGFuIHN0eWxlPSJjb2xvcjpncmVlbiI+S29udHJvbCBWYXI8L3NwYW4+LCA8c3BhbiBzdHlsZT0iY29sb3I6Z3JlZW4iPlPDvHJlbGkgTGlzYW5zPC9zcGFuPiwgPHNwYW4gc3R5bGU9ImNvbG9yOmdyZWVuIj5ZZXJlbCBKc29uIFRhemVsZW5kaTwvc3Bhbj48YnI+U2VuYXJ5b3lhIGfDtnJlIHnDtm5sZW5kaXJpbG1lei48L2gyPicgOiAiIjsNCiAgICAgICAgfWVsc2V7IA0KICAgICAgICAgICRkdXJ1bSA9PSB0cnVlID8gJGRldGF5ID0gJzxoMiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPjxzcGFuIHN0eWxlPSJjb2xvcjpncmVlbiI+TGlzYW5zbMSxLCBLb250cm9sIFZhciwgU8O8cmVsaSBMaXNhbnM8L3NwYW4+LCA8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj5ZZXJlbCBKc29uIFRhemVsZW5tZWRpPC9zcGFuPjxicj5TZW5hcnlveWEgZ8O2cmUgecO2bmxlbmRpcmlsbWV6LjwvaDI+JyA6ICIiOw0KICAgICAgICB9IA0KICAgICAgfWVsc2V7IA0KICAgICAgICBpZih0aW1lKCkgPiAkeWVyZWxqc29uWyJrb250cm9sX2FyYWxpayJdKXsNCiAgICAgICAgICBKc29uX1RhemVsZSgkbHlzKTsgDQogICAgICAgICAgJGR1cnVtID09IHRydWUgPyAkZGV0YXkgPSAnPGgyIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+PHNwYW4gc3R5bGU9ImNvbG9yOmdyZWVuIj5MaXNhbnNsxLEsIEtvbnRyb2wgVmFyLCBTw7xyZXNpeiBMaXNhbnMsIFllcmVsIEpzb24gVGF6ZWxlbmRpPC9zcGFuPjxicj5TZW5hcnlveWEgZ8O2cmUgecO2bmxlbmRpcmlsbWV6LjwvaDI+JyA6ICIiOw0KICAgICAgICB9ZWxzZXsgDQogICAgICAgICAgJGR1cnVtID09IHRydWUgPyAkZGV0YXkgPSAnPGgyIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+PHNwYW4gc3R5bGU9ImNvbG9yOmdyZWVuIj5MaXNhbnNsxLEsIEtvbnRyb2wgVmFyLCBTw7xyZXNpeiBMaXNhbnM8L3NwYW4+LCA8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj5ZZXJlbCBKc29uIFRhemVsZW5tZWRpPC9zcGFuPjxicj5TZW5hcnlveWEgZ8O2cmUgecO2bmxlbmRyaWxtZXouPC9oMj4nIDogIiI7DQogICAgICAgIH0gDQogICAgICB9DQogICAgfWVsc2V7IA0KICAgICAgSnNvbl9UYXplbGUoJGx5cyk7DQogICAgfQ0KICAgIGlmICgkeWVyZWxqc29uWyJ1cnVuX2lkIl0gIT0gMTIpIHsNCiAgICAgICRkdXJ1bSA9PSB0cnVlID8gJGRldGF5ID0gJzxoMiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPjxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPkJ1IGFsYW5hZMSxIExpc2Fuc2zEsSBBbmNhayBCdSDDnHLDvG4gxLDDp2luIERlxJ9pbDwvc3Bhbj48YnI+U2VuYXJveWEgZ8O2cmUgecO2bmxlbmRpcmlsaXIuPC9oMj4nIDogTGlzYW5zX0ZpbHRyZWxlX1lvbmxlbmRpcigkeWVyZWxqc29uWyJhbGFuYWRpIl0pOw0KICAgIH0NCiAgfWVsc2V7IA0KICAgIEpzb25fVGF6ZWxlKCRseXMpOw0KICAgICRkdXJ1bSA9PSB0cnVlID8gJGRldGF5ID0gJzxoMiBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXIiPjxzcGFuIHN0eWxlPSJjb2xvcjpyZWQiPkxpc2FucyBZb2s8L3NwYW4+PGJyPlNlbmFyeW95YSBnw7ZyZSB5w7ZubGVuZGlyaWxpci48L2gyPicgOiBMaXNhbnNfRmlsdHJlbGVfWW9ubGVuZGlyKCR5ZXJlbGpzb25bImFsYW5hZGkiXSk7DQogIH0NCiAgZWNobyAkZHVydW0gPT0gdHJ1ZSA/ICRkZXRheSA6ICIiOw0KfQ0KPz4NCg0KPD9waHANCiAgLy/Dlk5FTUzEsCBCVUxEVcSeVU5VWiBWRSDFnsSwRlJFTEVNRUsgxLBTVEVExLDEnsSwTsSwWiBTQVlGQUxBUkEgxLBMQVZFIEVExLBOxLBaLg0KICAvL0ZvbmtzaXlvbmEgMSB2ZXlhIFRydWUgb2xhcmFrIGlraW5jaSBiaXIgcGFyYW1ldHJlIGdpcmlsaXJzZSBsaXNhbnNsYW5hbiBzaXRlIHnDtm5sZW5tZXogxZ91YW4gbmUgZHVydW1kYSBvbGR1xJ91IGJpbGdpc2kgZMO2bmVyLg0KICBMaXNhbnNfS29udHJvbCgiaHR0cHM6Ly9saXNhbnN2Mi55ZXNpbGthcmUuY29tLyIpOw0KPz4NCg0KDQo8P3BocCBlY2hvICRoZWFkZXI7ID8+DQo8ZGl2IGlkPSJjb250YWluZXIiIGNsYXNzPSJjb250YWluZXIgai1jb250YWluZXIiPg0KICA8dWwgY2xhc3M9ImJyZWFkY3J1bWIiPg0KICAgIDw/cGhwIGZvcmVhY2ggKCRicmVhZGNydW1icyBhcyAkYnJlYWRjcnVtYikgeyA/Pg0KICAgIDxsaT48YSBocmVmPSI8P3BocCBlY2hvICRicmVhZGNydW1iWydocmVmJ107ID8+Ij48P3BocCBlY2hvICRicmVhZGNydW1iWyd0ZXh0J107ID8+PC9hPjwvbGk+DQogICAgPD9waHAgfSA/Pg0KICA8L3VsPg0KICA8ZGl2IGNsYXNzPSJyb3ciPjw/cGhwIGVjaG8gJGNvbHVtbl9sZWZ0OyA/Pjw/cGhwIGVjaG8gJGNvbHVtbl9yaWdodDsgPz4NCiAgICA8P3BocCBpZiAoJGNvbHVtbl9sZWZ0ICYmICRjb2x1bW5fcmlnaHQpIHsgPz4NCiAgICA8P3BocCAkY2xhc3MgPSAnY29sLXNtLTYnOyA/Pg0KICAgIDw/cGhwIH0gZWxzZWlmICgkY29sdW1uX2xlZnQgfHwgJGNvbHVtbl9yaWdodCkgeyA/Pg0KICAgIDw/cGhwICRjbGFzcyA9ICdjb2wtc20tOSc7ID8+DQogICAgPD9waHAgfSBlbHNlIHsgPz4NCiAgICA8P3BocCAkY2xhc3MgPSAnY29sLXNtLTEyJzsgPz4NCiAgICA8P3BocCB9ID8+DQogICAgPGRpdiBpZD0iY29udGVudCIgY2xhc3M9InByb2R1Y3QtcGFnZS1jb250ZW50Ij4NCiAgICAgIDw/cGhwIGlmICgkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfcGFnZV90aXRsZV9wb3NpdGlvbicsICd0b3AnKSA9PT0gJ3RvcCcpOiA/Pg0KICAgICAgPGgxIGNsYXNzPSJoZWFkaW5nLXRpdGxlIj48P3BocCBlY2hvICRoZWFkaW5nX3RpdGxlOyA/PjwvaDE+DQogICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgIDw/cGhwIGVjaG8gJGNvbnRlbnRfdG9wOyA/Pg0KICAgICAgPGRpdiBjbGFzcz0icm93IHByb2R1Y3QtaW5mbyA8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnc3BsaXRfcmF0aW8nKTsgPz4iPg0KICAgICAgICA8P3BocCBpZiAoJGNvbHVtbl9sZWZ0ICYmICRjb2x1bW5fcmlnaHQpIHsgPz4NCiAgICAgICAgPD9waHAgJGNsYXNzID0gJ2NvbC1zbS02JzsgPz4NCiAgICAgICAgPD9waHAgfSBlbHNlaWYgKCRjb2x1bW5fbGVmdCB8fCAkY29sdW1uX3JpZ2h0KSB7ID8+DQogICAgICAgIDw/cGhwICRjbGFzcyA9ICdjb2wtc20tNic7ID8+DQogICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+DQogICAgICAgIDw/cGhwICRjbGFzcyA9ICdjb2wtc20tOCc7ID8+DQogICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgPGRpdiBjbGFzcz0ibGVmdCI+DQogICAgICAgICAgPD9waHAgaWYgKCR0aHVtYikgeyA/Pg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImltYWdlIj4NCiAgICAgICAgICAgIDw/cGhwIGlmIChpc3NldCgkbGFiZWxzKSAmJiBpc19hcnJheSgkbGFiZWxzKSk6ID8+DQogICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkbGFiZWxzIGFzICRsYWJlbCA9PiAkbmFtZSk6ID8+DQogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwtPD9waHAgZWNobyAkbGFiZWw7ID8+Ij48Yj48P3BocCBlY2hvICRuYW1lOyA/PjwvYj48L3NwYW4+DQogICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/Pg0KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvICRwb3B1cDsgPz4iIHRpdGxlPSI8P3BocCBlY2hvICRoZWFkaW5nX3RpdGxlOyA/PiI+PGltZyBzcmM9Ijw/cGhwIGVjaG8gJHRodW1iOyA/PiIgdGl0bGU9Ijw/cGhwIGVjaG8gJGhlYWRpbmdfdGl0bGU7ID8+IiBhbHQ9Ijw/cGhwIGVjaG8gJGhlYWRpbmdfdGl0bGU7ID8+IiBpZD0iaW1hZ2UiIGRhdGEtbGFyZ2VpbWc9Ijw/cGhwIGVjaG8gJHBvcHVwOyA/PiIgLz48L2E+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgICAgPD9waHAgaWYoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3BhZ2VfZ2FsbGVyeScpKTogPz4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJnYWxsZXJ5LXRleHQiPjxzcGFuPjw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3BhZ2VfZ2FsbGVyeV90ZXh0Jyk7ID8+PC9zcGFuPjwvZGl2Pg0KICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KDQogICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgIDw/cGhwIGlmICgkaW1hZ2VzKSB7ID8+DQogICAgICAgICAgPGRpdiBpZD0icHJvZHVjdC1nYWxsZXJ5IiBjbGFzcz0iaW1hZ2UtYWRkaXRpb25hbCA8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncHJvZHVjdF9wYWdlX2dhbGxlcnlfY2Fyb3VzZWwnKSA/ICdqb3VybmFsLWNhcm91c2VsJyA6ICdpbWFnZS1hZGRpdGlvbmFsLWdyaWQnOyA/PiI+DQogICAgICAgICAgICA8P3BocCBpZiAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3BhZ2VfZ2FsbGVyeV9jYXJvdXNlbCcpKTogPz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN3aXBlciI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXItY29udGFpbmVyIiA8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncnRsJykgPyAnZGlyPSJydGwiJyA6ICcnOyA/Pj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN3aXBlci13cmFwcGVyIj4NCiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkdGh1bWIpIHsgPz4NCiAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic3dpcGVyLXNsaWRlIiBzdHlsZT0iPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfcGFnZV9nYWxsZXJ5X2Nhcm91c2VsJykgPyAoJ3dpZHRoOiAnIC4gMTAwIC8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3BhZ2VfYWRkaXRpb25hbF93aWR0aCcsIDUpIC4gJyUnKSA6ICcnOyA/PiIgaHJlZj0iPD9waHAgZWNobyBpc3NldCgkcG9wdXBfZml4ZWQpID8gJHBvcHVwX2ZpeGVkIDogJHBvcHVwOyA/PiIgdGl0bGU9Ijw/cGhwIGVjaG8gJGhlYWRpbmdfdGl0bGU7ID8+Ij48aW1nIHNyYz0iPD9waHAgZWNobyBpc3NldCgkdGh1bWJfZml4ZWQpID8gJHRodW1iX2ZpeGVkIDogJHRodW1iOyA/PiIgdGl0bGU9Ijw/cGhwIGVjaG8gJGhlYWRpbmdfdGl0bGU7ID8+IiBhbHQ9Ijw/cGhwIGVjaG8gJGhlYWRpbmdfdGl0bGU7ID8+Ii8+PC9hPg0KICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkaW1hZ2VzIGFzICRpbWFnZSkgeyA/Pg0KICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzd2lwZXItc2xpZGUiIHN0eWxlPSI8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncHJvZHVjdF9wYWdlX2dhbGxlcnlfY2Fyb3VzZWwnKSA/ICgnd2lkdGg6ICcgLiAxMDAgLyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfcGFnZV9hZGRpdGlvbmFsX3dpZHRoJywgNSkgLiAnJScpIDogJyc7ID8+IiBocmVmPSI8P3BocCBlY2hvICRpbWFnZVsncG9wdXAnXTsgPz4iIHRpdGxlPSI8P3BocCBlY2hvICRoZWFkaW5nX3RpdGxlOyA/PiI+PGltZyBzcmM9Ijw/cGhwIGVjaG8gJGltYWdlWyd0aHVtYiddOyA/PiIgdGl0bGU9Ijw/cGhwIGVjaG8gJGhlYWRpbmdfdGl0bGU7ID8+IiBhbHQ9Ijw/cGhwIGVjaG8gJGhlYWRpbmdfdGl0bGU7ID8+Ii8+PC9hPg0KICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgIDw/cGhwIGlmICgkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfcGFnZV9nYWxsZXJ5X2Nhcm91c2VsJykpOiA/Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN3aXBlci1idXR0b24tbmV4dCI+PC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXItYnV0dG9uLXByZXYiPjwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8P3BocCBpZiAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3BhZ2VfZ2FsbGVyeV9jYXJvdXNlbCcpKTogPz4NCiAgICAgICAgICA8c2NyaXB0Pg0KICAgICAgICAgICAgKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICB2YXIgb3B0cyA9IHsNCiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogcGFyc2VJbnQoJzw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3BhZ2VfYWRkaXRpb25hbF93aWR0aCcsIDUpID8+JywgMTApLA0KICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJHcm91cDogcGFyc2VJbnQoJzw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3BhZ2VfYWRkaXRpb25hbF93aWR0aCcsIDUpID8+JywgMTApLA0KICAgICAgICAgICAgICAgICAgICBzcGFjZUJldHdlZW46IHBhcnNlSW50KCc8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncHJvZHVjdF9wYWdlX2FkZGl0aW9uYWxfc3BhY2luZycsIDEwKSA/PicsIDEwKSwNCiAgICAgICAgICAgICAgICAgICAgbmV4dEJ1dHRvbjogJCgnI3Byb2R1Y3QtZ2FsbGVyeSAuc3dpcGVyLWJ1dHRvbi1uZXh0JyksDQogICAgICAgICAgICAgICAgICAgIHByZXZCdXR0b246ICQoJyNwcm9kdWN0LWdhbGxlcnkgLnN3aXBlci1idXR0b24tcHJldicpLA0KICAgICAgICAgICAgICAgICAgICBhdXRvcGxheTogPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfcGFnZV9nYWxsZXJ5X2Nhcm91c2VsX2F1dG9wbGF5JykgPyAoaW50KSR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncHJvZHVjdF9wYWdlX2dhbGxlcnlfY2Fyb3VzZWxfdHJhbnNpdGlvbl9kZWxheScsIDQwMDApIDogJ2ZhbHNlJzsgPz4sDQogICAgICAgICAgICAgICAgICAgIHNwZWVkOiA8P3BocCBlY2hvIChpbnQpJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3BhZ2VfZ2FsbGVyeV9jYXJvdXNlbF90cmFuc2l0aW9uX3NwZWVkJywgNDAwKTsgPz4sDQogICAgICAgICAgICAgICAgICAgIHRvdWNoRXZlbnRzVGFyZ2V0OiA8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncHJvZHVjdF9wYWdlX2dhbGxlcnlfY2Fyb3VzZWxfdG91Y2hkcmFnJykgID8gJ1wnY29udGFpbmVyXCcnIDogJ2ZhbHNlJzsgPz4sDQogICAgICAgICAgICAgICAgfTsNCg0KICAgICAgICAgICAgICAgICQoJyNwcm9kdWN0LWdhbGxlcnkgLnN3aXBlci1jb250YWluZXInKS5zd2lwZXIob3B0cyk7DQogICAgICAgICAgICB9KSgpOw0KICAgICAgICAgIDwvc2NyaXB0Pg0KICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICA8P3BocCBmb3JlYWNoICgkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ2FkZGl0aW9uYWxfcHJvZHVjdF9kZXNjcmlwdGlvbl9pbWFnZScsIGFycmF5KCkpIGFzICR0YWIpOiA/Pg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImpvdXJuYWwtY3VzdG9tLXRhYiI+DQogICAgICAgICAgICA8P3BocCBpZiAoJHRhYlsnaGFzX2ljb24nXSk6ID8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJibG9jay1pY29uIGJsb2NrLWljb24tbGVmdCIgc3R5bGU9Ijw/cGhwIGVjaG8gJHRhYlsnaWNvbl9jc3MnXTsgPz4iPjw/cGhwIGVjaG8gJHRhYlsnaWNvbiddOyA/PjwvZGl2Pg0KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICA8P3BocCBpZiAoJHRhYlsnbmFtZSddKTogPz4NCiAgICAgICAgICAgIDxoMz48P3BocCBlY2hvICR0YWJbJ25hbWUnXTsgPz48L2gzPg0KICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICA8P3BocCBlY2hvICR0YWJbJ2NvbnRlbnQnXTsgPz4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/Pg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImltYWdlLWdhbGxlcnkiIHN0eWxlPSJkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7Ij4NCiAgICAgICAgICAgIDw/cGhwIGlmICgkdGh1bWIpIHsgPz4NCiAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gJHBvcHVwOyA/PiIgZGF0YS1vcmlnaW5hbD0iPD9waHAgZWNobyBpc3NldCgkb3JpZ2luYWwpID8gJG9yaWdpbmFsIDogJHBvcHVwOyA/PiIgdGl0bGU9Ijw/cGhwIGVjaG8gJGhlYWRpbmdfdGl0bGU7ID8+IiBjbGFzcz0ic3dpcGVib3giPjxpbWcgc3JjPSI8P3BocCBlY2hvICR0aHVtYjsgPz4iIHRpdGxlPSI8P3BocCBlY2hvICRoZWFkaW5nX3RpdGxlOyA/PiIgYWx0PSI8P3BocCBlY2hvICRoZWFkaW5nX3RpdGxlOyA/PiIgLz48L2E+DQogICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICA8P3BocCBpZiAoJGltYWdlcykgeyA/Pg0KICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJGltYWdlcyBhcyAkaW1hZ2UpIHsgPz4NCiAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gJGltYWdlWydwb3B1cCddOyA/PiIgZGF0YS1vcmlnaW5hbD0iPD9waHAgZWNobyBpc3NldCgkaW1hZ2VbJ29yaWdpbmFsJ10pID8gJGltYWdlWydvcmlnaW5hbCddIDogJGltYWdlWydwb3B1cCddOyA/PiIgdGl0bGU9Ijw/cGhwIGVjaG8gJGhlYWRpbmdfdGl0bGU7ID8+IiBjbGFzcz0ic3dpcGVib3giPjxpbWcgc3JjPSI8P3BocCBlY2hvICRpbWFnZVsndGh1bWInXTsgPz4iIHRpdGxlPSI8P3BocCBlY2hvICRoZWFkaW5nX3RpdGxlOyA/PiIgYWx0PSI8P3BocCBlY2hvICRoZWFkaW5nX3RpdGxlOyA/PiIgLz48L2E+DQogICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgICAgPD9waHAgaWYgKCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnc2hhcmVfYnV0dG9uc19zdGF0dXMnKSAmJiAoIUpvdXJuYWwyQ2FjaGU6OiRtb2JpbGVfZGV0ZWN0LT5pc01vYmlsZSgpIHx8IChKb3VybmFsMkNhY2hlOjokbW9iaWxlX2RldGVjdC0+aXNNb2JpbGUoKSAmJiAhJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaGFyZV9idXR0b25zX2Rpc2FibGVfb25fbW9iaWxlJywgMSkpKSAmJiAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3NoYXJlX2J1dHRvbnNfcG9zaXRpb24nKSA9PT0gJ2xlZnQnICYmIGNvdW50KCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnY29uZmlnX3NoYXJlX2J1dHRvbnMnLCBhcnJheSgpKSkpOiA/Pg0KICAgICAgICAgIDxkaXYgY2xhc3M9InNvY2lhbCBzaGFyZS10aGlzIDw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaGFyZV9idXR0b25zX2Rpc2FibGVfb25fbW9iaWxlJywgMSkgPyAnaGlkZS1vbi1tb2JpbGUnIDogJyc7ID8+Ij4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNvY2lhbC1sb2FkZWQiPg0KICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+dmFyIHN3aXRjaFRvNXg9dHJ1ZTs8L3NjcmlwdD4NCiAgICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93cy5zaGFyZXRoaXMuY29tL2J1dHRvbi9idXR0b25zLmpzIj48L3NjcmlwdD4NCiAgICAgICAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPnN0TGlnaHQub3B0aW9ucyh7cHVibGlzaGVyOiAiPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3NoYXJlX2J1dHRvbnNfYWNjb3VudF9rZXknKTsgPz4iLCBkb05vdEhhc2g6IHRydWUsIGRvTm90Q29weTogdHJ1ZSwgaGFzaEFkZHJlc3NCYXI6IGZhbHNlfSk7PC9zY3JpcHQ+DQogICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnY29uZmlnX3NoYXJlX2J1dHRvbnMnLCBhcnJheSgpKSBhcyAkaXRlbSk6ID8+DQogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSI8P3BocCBlY2hvICRpdGVtWydjbGFzcyddIC4gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaGFyZV9idXR0b25zX3N0eWxlJyk7ID8+IiBkaXNwbGF5VGV4dD0iPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3NoYXJlX2J1dHRvbnNfc3R5bGUnKSA/ICRpdGVtWyduYW1lJ10gOiAnJzsgPz4iPjwvc3Bhbj4NCiAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgIDxtZXRhPSJkZXNjcmlwdGlvbiIgY29udGVudD0iPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfZGVzY3JpcHRpb24nKTsgPz4iIC8+DQogICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC10YWJzIj4NCiAgICAgICAgICAgIDw/cGhwIGlmICgkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3NoYXJlX2J1dHRvbnNfc3RhdHVzJykgJiYgKCFKb3VybmFsMkNhY2hlOjokbW9iaWxlX2RldGVjdC0+aXNNb2JpbGUoKSB8fCAoSm91cm5hbDJDYWNoZTo6JG1vYmlsZV9kZXRlY3QtPmlzTW9iaWxlKCkgJiYgISR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnc2hhcmVfYnV0dG9uc19kaXNhYmxlX29uX21vYmlsZScsIDEpKSkgJiYgJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaGFyZV9idXR0b25zX3Bvc2l0aW9uJykgPT09ICdib3R0b20nICYmIGNvdW50KCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnY29uZmlnX3NoYXJlX2J1dHRvbnMnLCBhcnJheSgpKSkpOiA/Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic29jaWFsIHNoYXJlLXRoaXMgPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3NoYXJlX2J1dHRvbnNfZGlzYWJsZV9vbl9tb2JpbGUnLCAxKSA/ICdoaWRlLW9uLW1vYmlsZScgOiAnJzsgPz4iPg0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzb2NpYWwtbG9hZGVkIj4NCiAgICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+dmFyIHN3aXRjaFRvNXg9dHJ1ZTs8L3NjcmlwdD4NCiAgICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3dzLnNoYXJldGhpcy5jb20vYnV0dG9uL2J1dHRvbnMuanMiPjwvc2NyaXB0Pg0KICAgICAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5zdExpZ2h0Lm9wdGlvbnMoe3B1Ymxpc2hlcjogIjw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaGFyZV9idXR0b25zX2FjY291bnRfa2V5Jyk7ID8+IiwgZG9Ob3RIYXNoOiB0cnVlLCBkb05vdENvcHk6IHRydWUsIGhhc2hBZGRyZXNzQmFyOiBmYWxzZX0pOzwvc2NyaXB0Pg0KICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnY29uZmlnX3NoYXJlX2J1dHRvbnMnLCBhcnJheSgpKSBhcyAkaXRlbSk6ID8+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Ijw/cGhwIGVjaG8gJGl0ZW1bJ2NsYXNzJ10gLiAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3NoYXJlX2J1dHRvbnNfc3R5bGUnKTsgPz4iIGRpc3BsYXlUZXh0PSI8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnc2hhcmVfYnV0dG9uc19zdHlsZScpID8gJGl0ZW1bJ25hbWUnXSA6ICcnOyA/PiI+PC9zcGFuPg0KICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+DQogICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICA8dWwgaWQ9InRhYnMiIGNsYXNzPSJuYXYgbmF2LXRhYnMgaHRhYnMiPg0KICAgICAgICAgICAgPD9waHAgJGlzX2FjdGl2ZSA9IHRydWU7ID8+DQogICAgICAgICAgICA8P3BocCBpZiAodHJpbSgkZGVzY3JpcHRpb24pICYmICEkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ2hpZGVfcHJvZHVjdF9kZXNjcmlwdGlvbicpKSB7ID8+DQogICAgICAgICAgICA8bGkgPD9waHAgaWYgKCRpc19hY3RpdmUpIHsgZWNobyAnY2xhc3M9ImFjdGl2ZSInOyAkaXNfYWN0aXZlID0gZmFsc2U7IH0gOz8+PjxhIGhyZWY9IiN0YWItZGVzY3JpcHRpb24iIGRhdGEtdG9nZ2xlPSJ0YWIiPjw/cGhwIGVjaG8gJHRhYl9kZXNjcmlwdGlvbjsgPz48L2E+PC9saT4NCiAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgIDw/cGhwIGlmICgkYXR0cmlidXRlX2dyb3VwcykgeyA/Pg0KICAgICAgICAgICAgPGxpIDw/cGhwIGlmICgkaXNfYWN0aXZlKSB7IGVjaG8gJ2NsYXNzPSJhY3RpdmUiJzsgJGlzX2FjdGl2ZSA9IGZhbHNlOyB9IDs/Pj48YSBocmVmPSIjdGFiLXNwZWNpZmljYXRpb24iIGRhdGEtdG9nZ2xlPSJ0YWIiPjw/cGhwIGVjaG8gJHRhYl9hdHRyaWJ1dGU7ID8+PC9hPjwvbGk+DQogICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICA8P3BocCBpZiAoJHJldmlld19zdGF0dXMpIHsgPz4NCiAgICAgICAgICAgIDxsaSA8P3BocCBpZiAoJGlzX2FjdGl2ZSkgeyBlY2hvICdjbGFzcz0iYWN0aXZlIic7ICRpc19hY3RpdmUgPSBmYWxzZTsgfSA7Pz4+PGEgaHJlZj0iI3RhYi1yZXZpZXciIGRhdGEtdG9nZ2xlPSJ0YWIiPjw/cGhwIGVjaG8gJHRhYl9yZXZpZXc7ID8+PC9hPjwvbGk+DQogICAgICAgICAgICA8P3BocCB9ID8+DQoJCQk8P3BocCBpZiAoIGlzc2V0KCRjdXN0b21lclBob3Rvc0RhdGFbJ0VuYWJsZWQnXSkgJiYgJGN1c3RvbWVyUGhvdG9zRGF0YVsnRW5hYmxlZCddID09ICd5ZXMnICYmICRjdXN0b21lclBob3Rvc0RhdGFbJ3Nob3dJblRhYiddID09ICd5ZXMnICkgeyA/Pg0KCQkJCTxsaT48YSBocmVmPSIjdGFiX0N1c3RvbWVyUGhvdG9zIiBkYXRhLXRvZ2dsZT0idGFiIj48P3BocCBlY2hvICR0YWJfQ3VzdG9tZXJQaG90b3M7ID8+PC9hPjwvbGk+DQoJCQk8P3BocCB9ID8+DQogICAgICAgICAgICA8P3BocCAkaW5kZXggPSAwOyBmb3JlYWNoICgkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ2FkZGl0aW9uYWxfcHJvZHVjdF90YWJzJywgYXJyYXkoKSkgYXMgJHRhYik6ICRpbmRleCsrOyA/Pg0KICAgICAgICAgICAgPGxpIDw/cGhwIGlmICgkaXNfYWN0aXZlKSB7IGVjaG8gJ2NsYXNzPSJhY3RpdmUiJzsgJGlzX2FjdGl2ZSA9IGZhbHNlOyB9IDs/Pj48YSBocmVmPSIjYWRkaXRpb25hbC1wcm9kdWN0LXRhYi08P3BocCBlY2hvICRpbmRleDsgPz4iIGRhdGEtdG9nZ2xlPSJ0YWIiPjw/cGhwIGVjaG8gJHRhYlsnbmFtZSddOyA/PjwvYT48L2xpPg0KICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4NCiAgICAgICAgICA8L3VsPg0KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYnMtY29udGVudCI+DQogICAgICAgICAgICA8P3BocCAkaXNfYWN0aXZlID0gdHJ1ZTsgPz4NCiAgICAgICAgICAgIDw/cGhwIGlmICh0cmltKCRkZXNjcmlwdGlvbikgJiYgISR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnaGlkZV9wcm9kdWN0X2Rlc2NyaXB0aW9uJykpIHsgPz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1wYW5lIHRhYi1jb250ZW50IDw/cGhwIGlmICgkaXNfYWN0aXZlKSB7IGVjaG8gJ2FjdGl2ZSc7ICRpc19hY3RpdmUgPSBmYWxzZTsgfSA7Pz4iIGlkPSJ0YWItZGVzY3JpcHRpb24iPjw/cGhwIGVjaG8gJGRlc2NyaXB0aW9uOyA/PjwvZGl2Pg0KICAgICAgICAgICAgPD9waHAgfSA/Pg0KCQkJPD9waHAgaWYgKCFlbXB0eSgkY3VzdG9tZXJQaG90b3NEYXRhWydFbmFibGVkJ10pICYmICRjdXN0b21lclBob3Rvc0RhdGFbJ0VuYWJsZWQnXSA9PSAneWVzJyAmJiAkY3VzdG9tZXJQaG90b3NEYXRhWydzaG93SW5UYWInXSA9PSAneWVzJykgeyA/Pg0KCQkJPGRpdiBjbGFzcz0idGFiLXBhbmUgdGFiLWNvbnRlbnQxIiBpZD0idGFiX0N1c3RvbWVyUGhvdG9zIj4NCgkJCQk8P3BocCANCgkJCQkkZmxhZz0wOw0KCQkJCWlmICghZW1wdHkoJGN1c3RvbWVyUGhvdG9zQ3VzdG9tVGFncykpIHsNCgkJCQkJZm9yZWFjaCAoJGN1c3RvbWVyUGhvdG9zQ3VzdG9tVGFncyBhcyAkQ3VzdG9tVGFncykgew0KCQkJCQkJIGlmICgkQ3VzdG9tVGFnc1sncGlkJ109PSRwcm9kdWN0X2lkKSB7DQoJCQkJCQkJICRmbGFnPTE7DQoJCQkJCQkJCWlmICgkY3VzdG9tZXJQaG90b3NEYXRhWydVc2VTaXRlU2hvcnROYW1lUHJvZHVjdHMnXSA9PSAieWVzIikgew0KCQkJCQkJCQkJJHRhZ1ZhciA9ICRjdXN0b21lclBob3Rvc0RhdGFbJ1Nob3J0VGFnJ10uJEN1c3RvbVRhZ3NbJ3RhZyddOwkNCgkJCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkJCSR0YWdWYXIgPSAkQ3VzdG9tVGFnc1sndGFnJ107DQoJCQkJCQkJCX0NCgkJCQkJCSB9DQoJCQkJCX0NCgkJCQl9DQoJCQkJaWYgKCRmbGFnPT0wKSB7DQoJCQkJCSRyZXBsYWNlID0gYXJyYXkoJyAnLCAnIicsICciJywgJy4nLCAnLCcgLCdcJycsICchJywgJy0nLCAnPycsICcqJywgJysnLCAnJicsICdAJywgJyQnLCAnJScsICc6JywgJygnLCAnKScpOw0KCQkJCQkkcmVwbGFjZWQgPSBhcnJheSgnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnKTsNCgkJCQkJJHByb2R1Y3Rfc3RyaXBfdW51c2VkX2NoYXJzID0gc3RyX3JlcGxhY2UoJHJlcGxhY2UsICRyZXBsYWNlZCwgJGhlYWRpbmdfdGl0bGUpOw0KCQkJCQlpZiAoZXh0ZW5zaW9uX2xvYWRlZCgnbWJzdHJpbmcnKSkgeyANCgkJCQkJCSRmaW5hbF90YWdfdmFyID0gbWJfc3Vic3RyKCRwcm9kdWN0X3N0cmlwX3VudXNlZF9jaGFycywwLCRjdXN0b21lclBob3Rvc0RhdGFbJ1RhZ0NoYXJhY3RlckxpbWl0J10sICd1dGYtOCcpOw0KCQkJCQkJJHRhZ1ZhciA9ICRjdXN0b21lclBob3Rvc0RhdGFbJ1Nob3J0VGFnJ10ubWJfc3RydG9sb3dlcigkZmluYWxfdGFnX3ZhciwndXRmLTgnKTsgDQoJCQkJCSB9IGVsc2Ugew0KCQkJCQkJJGZpbmFsX3RhZ192YXIgPSBzdWJzdHIoJHByb2R1Y3Rfc3RyaXBfdW51c2VkX2NoYXJzLDAsJGN1c3RvbWVyUGhvdG9zRGF0YVsnVGFnQ2hhcmFjdGVyTGltaXQnXSk7DQoJCQkJCQkkdGFnVmFyID0gJGN1c3RvbWVyUGhvdG9zRGF0YVsnU2hvcnRUYWcnXS5zdHJ0b2xvd2VyKCRmaW5hbF90YWdfdmFyKTsgDQoJCQkJCSB9DQoJCQkJfQ0KDQogICAgCQkJJHBhdHRlcm5zID0gYXJyYXkoKTsNCgkJCQkkcGF0dGVybnNbMF0gPSAnLyVzLyc7DQoJCQkJJHBhdHRlcm5zWzFdID0gJy97VXBsb2FkIGxpbmt9Lyc7DQoJCQkJJHBhdHRlcm5zWzJdID0gJy9Ud2l0dGVyLyc7DQoJCQkJJHJlcGxhY2VtZW50cyA9IGFycmF5KCk7DQoJCQkJJHJlcGxhY2VtZW50c1swXSA9ICI8c3Ryb25nPiMiLiR0YWdWYXIuIjwvc3Ryb25nPiI7DQoJCQkJJHJlcGxhY2VtZW50c1sxXSA9ICR0ZXh0X3VwbG9hZF9saW5rX3Byb2R1Y3RfcGFnZTsNCgkJCQkkcmVwbGFjZW1lbnRzWzJdID0gJzxzdHJvbmc+VHdpdHRlcjwvc3Ryb25nPic7DQoJCQkJZWNobyBwcmVnX3JlcGxhY2UoJHBhdHRlcm5zLCAkcmVwbGFjZW1lbnRzLCAkY3VzdG9tZXJQaG90b3NEYXRhWydNYWluTWVzc2FnZSddWyRjdXJyZW50X2xhbmd1YWdlXSk7ID8+DQoJCQkJPGJyIC8+PGJyIC8+DQogICAgICAgIA0KCQkJCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJCQkJLkN1c3RvbWVyUGhvdG9zSW1nIHsNCgkJCQkJYm9yZGVyOiBub25lOw0KCQkJCQloZWlnaHQ6IDw/cGhwIGVjaG8gJGN1c3RvbWVyUGhvdG9zRGF0YVsndGFiSW1hZ2VIZWlnaHQnXTsgPz5weDsNCgkJCQkJd2lkdGg6IGF1dG87DQoJCQkJCXBhZGRpbmc6IDJweDsNCgkJCQkJZGlzcGxheTogbm9uZTsNCgkJCQl9DQoNCiAgICAgICAgICAudXBsb2FkLXN1Y2Nlc3NmdWx7DQogICAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyOw0KICAgICAgICAgIH0NCiAgICAgICAgICAjdXBsb2FkLWNvbnRhaW5lcnsNCiAgICAgICAgICAgICAgaGVpZ2h0OjMwMHB4Ow0KICAgICAgICAgIH0NCg0KICAgICAgICAgICN1cGxvYWQtbWVzc2FnZXsNCiAgICAgICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICAgICAgICB3aWR0aDogMTAwJTsNCiAgICAgICAgICB9DQoNCg0KICAgICAgICAgIC5tZXNzYWdlLWNvbnRhaW5lcnsNCiAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgICAgICAgICAgICBtYXJnaW4tdG9wOiAyMCU7DQogICAgICAgICAgICAgIG1hcmdpbi1sZWZ0OiA3JTsNCiAgICAgICAgICB9DQogICAgICAgICAgDQogICAgDQoJCQkJPC9zdHlsZT4NCgkJCQk8ZGl2IGlkPSJDdXN0b21lclBob3Rvc0ltYWdlcyI+DQoJCQkJCTxzY3JpcHQ+DQoJCQkJCQl2YXIgY3VzdG9tZXJJZ25vcmVkUGhvdG9zID0gJzw/cGhwIGVjaG8gJGN1c3RvbWVyUGhvdG9zRGF0YVsnSWdub3JlZFBob3RvcyddOyA/Pic7DQoJCQkJCTwvc2NyaXB0PgkJCQkJDQoJCQkJCTw/cGhwIGlmICgkY3VzdG9tZXJQaG90b3NEYXRhWydUd2l0dGVyRW5hYmxlJ10gPT0gJ3llcycpIHsgID8+DQoJCQkJCQk8c2NyaXB0Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0d2l0dGVyVGFnID0gJzw/cGhwIGVjaG8gJHRhZ1ZhcjsgPz4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2luZGV4LnBocD9yb3V0ZT1tb2R1bGUvY3VzdG9tZXJwaG90b3N3aWRnZXQvdHdpdHRlclRhZ3MmaGFzaHRhZz0nK3R3aXR0ZXJUYWcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZGF0YSkuZWFjaChmdW5jdGlvbihpbmRleCwgZWxlbWVudCkgewkJDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXN0b21lcklnbm9yZWRQaG90b3MuaW5kZXhPZihlbGVtZW50LmltYWdlKSA9PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI0N1c3RvbWVyUGhvdG9zSW1hZ2VzJykuYXBwZW5kKCc8YSBocmVmPSInK2VsZW1lbnQubGluaysnIiB0aXRsZT0iQ2xpY2sgdG8gc2VlIHRoZSBwaWN0dXJlIGluIGZ1bGwgc2l6ZSIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgc3JjPSInK2VsZW1lbnQuaW1hZ2UrJyIgY2xhc3M9IkN1c3RvbWVyUGhvdG9zSW1nIiAvPjwvYT4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5DdXN0b21lclBob3Rvc0ltZycpLmZhZGVJbignc2xvdycpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgICAgICAgCSA8L3NjcmlwdD4NCiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9InVwbG9hZC1tb2RhbC1wcm9kdWN0LXRwbCIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0ibXlNb2RhbExhYmVsIj4NCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2ciIHJvbGU9ImRvY3VtZW50Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiID4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDMgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj48P3BocCBlY2hvICRlbnRyeV9yZXNpbXl1a2xlOyA/PjwvaDM+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPjxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPjwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSIgaWQ9InByb2R1dF9wYWdlX3RhYiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icm93IiBpZD0idXBsb2FkLWNvbnRhaW5lciIgc3R5bGU9ImRpc3BsYXk6bm9uZSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC14cy0xMCBtZXNzYWdlLWNvbnRhaW5lciIgPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9InVwbG9hZC1tZXNzYWdlIj48P3BocCBlY2hvICRlbnRyeV9yZXNpbXl1a2xlYWNpa2xhbWE7ID8+PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIGlkPSJ1cGxvYWQtYnV0dG9uIj48aSBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi11cGxvYWQiPjwvaT4mbmJzcDw/cGhwIGVjaG8gJGVudHJ5X3Jlc2lteXVrbGVidXRvbjsgPz48L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InByZXZpZXciIHN0eWxlPSJkaXNwbGF5Om5vbmU7IHRleHQtYWxpZ246Y2VudGVyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZHotcHJldmlldyBkei1maWxlLXByZXZpZXciPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZHotZGV0YWlscyIgc3R5bGU9InRleHQtYWxpZ246Y2VudGVyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGRhdGEtZHotdGh1bWJuYWlsIC8+ICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0icHJvZ3Jlc2Jhcl9jb250YWluZXIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzIHByb2dyZXNzLXN0cmlwZWQgYWN0aXZlIiBpZD0iYmFyIiByb2xlPSJwcm9ncmVzc2JhciIgYXJpYS12YWx1ZW1pbj0iMCIgYXJpYS12YWx1ZW1heD0iMTAwIiBhcmlhLXZhbHVlbm93PSIwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1zdWNjZXNzIiBzdHlsZT0id2lkdGg6MCU7IiBkYXRhLWR6LXVwbG9hZHByb2dyZXNzPjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRjdXN0b21lclBob3Rvc0RhdGFbJ1VwbG9hZGVkUGhvdG9zRW5hYmxlJ10gPT0gJ3llcycpIHsgID8+DQogICAgICAgICAgICAgICAgICAgIDxzY3JpcHQ+DQogICAgICAgICAgICAgICAgICAgICAgdmFyIG15RHJvcHpvbmU7DQogICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZpZXdUZW1wbGF0ZSA9ICQoJyNwcmV2aWV3JykuaHRtbCgpOw0KICAgICAgICAgICAgICAgICAgICAgICQoJyN1cGxvYWQtbW9kYWwtcHJvZHVjdC10cGwnKS5vbignc2hvd24uYnMubW9kYWwnLCBmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjdXBsb2FkLWNvbnRhaW5lcicpLmNzcygnZGlzcGxheScsJ2Jsb2NrJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIG15RHJvcHpvbmUgPSBuZXcgRHJvcHpvbmUoImRpdiNwcm9kdXRfcGFnZV90YWIiLCB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogIjw/cGhwIGVjaG8gJGN1c3RvbWVyX3Bob3Rvc191cGxvYWRfYWN0aW9uPz4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRodW1ibmFpbFdpZHRoOiAyMDAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGh1bWJuYWlsSGVpZ2h0OiAyMDAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlld1RlbXBsYXRlOnByZXZpZXdUZW1wbGF0ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlja2FibGU6IiN1cGxvYWQtYnV0dG9uIiwgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgbXlEcm9wem9uZS5vbignc2VuZGluZycsIGZ1bmN0aW9uKGZpbGUsIHhociwgZm9ybURhdGEpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKCd3aWRnZXRfY3VzdG9tX3RhZycsICc8P3BocCBlY2hvICR0YWdWYXI7ID8+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgbXlEcm9wem9uZS5vbigic3VjY2VzcyIsIGZ1bmN0aW9uKHByb2dyZXNzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5wcm9ncmVzcy1iYXInKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygiYWN0aXZlIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5tb2RhbC1ib2R5JykuYXBwZW5kKCc8cCBjbGFzcz0idXBsb2FkLXN1Y2Nlc3NmdWwiPllvdXIgcGhvdG8gaGFzIGJlZW4gdXBsb2FkZWQgYW5kIHdpbGwgYmUgcmV2aWV3ZWQgYnkgYW4gYWRtaW5pc3RyYXRvcjwvcD4nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgICAkKCcjdXBsb2FkLWJ1dHRvbicpLmNsaWNrKGZ1bmN0aW9uKCl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICQoJyN1cGxvYWQtY29udGFpbmVyJykuY3NzKCdkaXNwbGF5Jywnbm9uZScpOw0KICAgICAgICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICAgICAgICAgICAgJCgnI3VwbG9hZC1tb2RhbC1wcm9kdWN0LXRwbCcpLm9uKCdoaWRkZW4uYnMubW9kYWwnLCBmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcudXBsb2FkLXN1Y2Nlc3NmdWwnKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgbXlEcm9wem9uZS5kZXN0cm95KCkNCiAgICAgICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSAnPD9waHAgZWNobyAkdGFnVmFyOyA/Pic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnaW5kZXgucGhwP3JvdXRlPW1vZHVsZS9jdXN0b21lcnBob3Rvcy9nZXRVcGxvYWRlZFBob3RvcycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6J2dldCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6e3RhZzp0YWd9LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7IA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRhdGEpLmVhY2goZnVuY3Rpb24oaW5kZXgsIGVsZW1lbnQpIHsgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1c3RvbWVySWdub3JlZFBob3Rvcy5pbmRleE9mKGVsZW1lbnQuaW1hZ2VfdXJsKSA9PSAtMSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI0N1c3RvbWVyUGhvdG9zSW1hZ2VzJykuYXBwZW5kKCc8YSBocmVmPSInK2VsZW1lbnQuaW1hZ2VfcHJldmlldysnIiB0aXRsZT0iQ2xpY2sgdG8gc2VlIHRoZSBwaWN0dXJlIGluIGZ1bGwgc2l6ZSIgdGFyZ2V0PSJfYmxhbmsiPjxpbWcgc3JjPSInK2VsZW1lbnQuaW1hZ2VfdXJsKyciIGNsYXNzPSJDdXN0b21lclBob3Rvc0ltZyIgLz48L2E+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuQ3VzdG9tZXJQaG90b3NJbWcnKS5mYWRlSW4oJ3Nsb3cnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICAgICAgPC9zY3JpcHQ+DQogICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCgkJCQk8L2Rpdj4NCgkJCTwvZGl2Pg0KCQkJPD9waHAgfSA/Pg0KICAgICAgICAgICAgPD9waHAgaWYgKCRhdHRyaWJ1dGVfZ3JvdXBzKSB7ID8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSB0YWItY29udGVudCA8P3BocCBpZiAoJGlzX2FjdGl2ZSkgeyBlY2hvICdhY3RpdmUnOyAkaXNfYWN0aXZlID0gZmFsc2U7IH0gOz8+IiBpZD0idGFiLXNwZWNpZmljYXRpb24iPg0KICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIGF0dHJpYnV0ZSI+DQogICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJGF0dHJpYnV0ZV9ncm91cHMgYXMgJGF0dHJpYnV0ZV9ncm91cCkgeyA/Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDx0Ym9keT4NCiAgICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCRhdHRyaWJ1dGVfZ3JvdXBbJ2F0dHJpYnV0ZSddIGFzICRhdHRyaWJ1dGUpIHsgPz4NCiAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ3aWR0aDoyMTVweDsgdGV4dC1hbGlnbjpsZWZ0OyI+PD9waHAgZWNobyAkYXR0cmlidXRlWyduYW1lJ107ID8+PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ3aWR0aDphdXRvOyI+PD9waHAgZWNobyAkYXR0cmlidXRlWyd0ZXh0J107ID8+PC90ZD4NCiAgICAgICAgICAgICAgICAgIDwvdHI+DQogICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgPC90Ym9keT4NCiAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgIDwvdGFibGU+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgIDw/cGhwIGlmICgkcmV2aWV3X3N0YXR1cykgeyA/Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFiLXBhbmUgdGFiLWNvbnRlbnQgPD9waHAgaWYgKCRpc19hY3RpdmUpIHsgZWNobyAnYWN0aXZlJzsgJGlzX2FjdGl2ZSA9IGZhbHNlOyB9IDs/PiIgaWQ9InRhYi1yZXZpZXciIDw/cGhwIGlmICgkcmF0aW5nKTogPz48P3BocCBlbmRpZjsgPz4+DQogICAgICAgICAgICAgICAgPD9waHAgaWYgKCRyYXRpbmcpOiA/Pg0KICAgICAgICAgICAgICAgIDxtZXRhID0icmF0aW5nVmFsdWUiIGNvbnRlbnQ9Ijw/cGhwIGVjaG8gJHJhdGluZzsgPz4iIC8+DQogICAgICAgICAgICAgICAgPG1ldGEgPSJyZXZpZXdDb3VudCIgY29udGVudD0iPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfbnVtX3Jldmlld3MnKTsgPz4iIC8+DQogICAgICAgICAgICAgICAgPG1ldGEgPSJiZXN0UmF0aW5nIiBjb250ZW50PSI1IiAvPg0KICAgICAgICAgICAgICAgIDxtZXRhID0id29yc3RSYXRpbmciIGNvbnRlbnQ9IjEiIC8+DQogICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgIDxmb3JtIGNsYXNzPSJmb3JtLWhvcml6b250YWwiIGlkPSJmb3JtLXJldmlldyI+DQogICAgICAgICAgICAgICAgPGRpdiBpZD0icmV2aWV3Ij48L2Rpdj4NCiAgICAgICAgICAgICAgICA8aDIgaWQ9InJldmlldy10aXRsZSI+PD9waHAgZWNobyAkdGV4dF93cml0ZTsgPz48L2gyPg0KICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkcmV2aWV3X2d1ZXN0KSB7ID8+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCByZXF1aXJlZCI+DQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tMTIiPg0KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImNvbnRyb2wtbGFiZWwiIGZvcj0iaW5wdXQtbmFtZSI+PD9waHAgZWNobyAkZW50cnlfbmFtZTsgPz48L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibmFtZSIgdmFsdWU9Ijw/cGhwIGVjaG8gdmVyc2lvbl9jb21wYXJlKFZFUlNJT04sICcyLjInLCAnPCcpID8gJycgOiAkY3VzdG9tZXJfbmFtZTsgPz4iIGlkPSJpbnB1dC1uYW1lIiBjbGFzcz0iZm9ybS1jb250cm9sIiAvPg0KICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCByZXF1aXJlZCI+DQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tMTIiPg0KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImNvbnRyb2wtbGFiZWwiIGZvcj0iaW5wdXQtcmV2aWV3Ij48P3BocCBlY2hvICRlbnRyeV9yZXZpZXc7ID8+PC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9InRleHQiIHJvd3M9IjUiIGlkPSJpbnB1dC1yZXZpZXciIGNsYXNzPSJmb3JtLWNvbnRyb2wiPjwvdGV4dGFyZWE+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlbHAtYmxvY2siPjw/cGhwIGVjaG8gJHRleHRfbm90ZTsgPz48L2Rpdj4NCiAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgcmVxdWlyZWQiPg0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTEyIj4NCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJjb250cm9sLWxhYmVsIj48P3BocCBlY2hvICRlbnRyeV9yYXRpbmc7ID8+PC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7IDw/cGhwIGVjaG8gJGVudHJ5X2JhZDsgPz4mbmJzcDsNCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJyYXRpbmciIHZhbHVlPSIxIiAvPg0KICAgICAgICAgICAgICAgICAgICAmbmJzcDsNCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJyYXRpbmciIHZhbHVlPSIyIiAvPg0KICAgICAgICAgICAgICAgICAgICAmbmJzcDsNCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJyYXRpbmciIHZhbHVlPSIzIiAvPg0KICAgICAgICAgICAgICAgICAgICAmbmJzcDsNCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJyYXRpbmciIHZhbHVlPSI0IiAvPg0KICAgICAgICAgICAgICAgICAgICAmbmJzcDsNCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJyYXRpbmciIHZhbHVlPSI1IiAvPg0KICAgICAgICAgICAgICAgICAgICAmbmJzcDs8P3BocCBlY2hvICRlbnRyeV9nb29kOyA/PjwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxici8+DQogICAgICAgICAgICAgICAgPD9waHAgaWYgKHZlcnNpb25fY29tcGFyZShWRVJTSU9OLCAnMi4wLjInLCAnPCcpKTogPz4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIHJlcXVpcmVkIj4NCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zbS0xMiI+DQogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iY29udHJvbC1sYWJlbCIgZm9yPSJpbnB1dC1jYXB0Y2hhIj48P3BocCBlY2hvICRlbnRyeV9jYXB0Y2hhOyA/PjwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJjYXB0Y2hhIiB2YWx1ZT0iIiBpZD0iaW5wdXQtY2FwdGNoYSIgY2xhc3M9ImZvcm0tY29udHJvbCIgLz4NCiAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTEyIj4gPGltZyBzcmM9ImluZGV4LnBocD9yb3V0ZT10b29sL2NhcHRjaGEiIGFsdD0iIiBpZD0iY2FwdGNoYSIgLz4gPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPD9waHAgZWxzZWlmICh2ZXJzaW9uX2NvbXBhcmUoVkVSU0lPTiwgJzIuMScsICc8JykpOiA/Pg0KICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkc2l0ZV9rZXkpIHsgPz4NCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tMTIiPg0KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImctcmVjYXB0Y2hhIiBkYXRhLXNpdGVrZXk9Ijw/cGhwIGVjaG8gJHNpdGVfa2V5OyA/PiI+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+DQogICAgICAgICAgICAgICAgPD9waHAgZWNobyAkY2FwdGNoYTsgPz4NCiAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b25zIj4NCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InB1bGwtcmlnaHQiPg0KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9ImJ1dHRvbi1yZXZpZXciIGRhdGEtbG9hZGluZy10ZXh0PSI8P3BocCBlY2hvICR0ZXh0X2xvYWRpbmc7ID8+IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IGJ1dHRvbiI+PD9waHAgZWNobyAkYnV0dG9uX2NvbnRpbnVlOyA/PjwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPD9waHAgfSBlbHNlIHsgPz4NCiAgICAgICAgICAgICAgICA8P3BocCBlY2hvICR0ZXh0X2xvZ2luOyA/Pg0KICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgICAgPC9mb3JtPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICA8P3BocCAkaW5kZXggPSAwOyBmb3JlYWNoICgkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ2FkZGl0aW9uYWxfcHJvZHVjdF90YWJzJywgYXJyYXkoKSkgYXMgJHRhYik6ICRpbmRleCsrOyA/Pg0KICAgICAgICAgICAgICA8ZGl2IGlkPSJhZGRpdGlvbmFsLXByb2R1Y3QtdGFiLTw/cGhwIGVjaG8gJGluZGV4OyA/PiIgY2xhc3M9InRhYi1wYW5lIHRhYi1jb250ZW50IGpvdXJuYWwtY3VzdG9tLXRhYiA8P3BocCBpZiAoJGlzX2FjdGl2ZSkgeyBlY2hvICdhY3RpdmUnOyAkaXNfYWN0aXZlID0gZmFsc2U7IH0gOz8+Ij48P3BocCBlY2hvICR0YWJbJ2NvbnRlbnQnXTsgPz48L2Rpdj4NCiAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8P3BocCBpZiAoJGNvbHVtbl9sZWZ0ICYmICRjb2x1bW5fcmlnaHQpIHsgPz4NCiAgICAgICAgPD9waHAgJGNsYXNzID0gJ2NvbC1zbS02JzsgPz4NCiAgICAgICAgPD9waHAgfSBlbHNlaWYgKCRjb2x1bW5fbGVmdCB8fCAkY29sdW1uX3JpZ2h0KSB7ID8+DQogICAgICAgIDw/cGhwICRjbGFzcyA9ICdjb2wtc20tNic7ID8+DQogICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+DQogICAgICAgIDw/cGhwICRjbGFzcyA9ICdjb2wtc20tNCc7ID8+DQogICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgPGRpdiBjbGFzcz0icmlnaHQiPg0KICAgICAgICAgIDw/cGhwIGlmICgkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfcGFnZV90aXRsZV9wb3NpdGlvbicsICd0b3AnKSA9PT0gJ3JpZ2h0Jyk6ID8+DQogICAgICAgICAgPGgxIGNsYXNzPSJoZWFkaW5nLXRpdGxlIj48P3BocCBlY2hvICRoZWFkaW5nX3RpdGxlOyA/PjwvaDE+DQogICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgPGRpdiBpZD0icHJvZHVjdCIgY2xhc3M9InByb2R1Y3Qtb3B0aW9ucyI+DQogICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ2FkZGl0aW9uYWxfcHJvZHVjdF9kZXNjcmlwdGlvbl90b3AnLCBhcnJheSgpKSBhcyAkdGFiKTogPz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImpvdXJuYWwtY3VzdG9tLXRhYiI+DQogICAgICAgICAgICAgIDw/cGhwIGlmICgkdGFiWydoYXNfaWNvbiddKTogPz4NCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYmxvY2staWNvbiBibG9jay1pY29uLWxlZnQiIHN0eWxlPSI8P3BocCBlY2hvICR0YWJbJ2ljb25fY3NzJ107ID8+Ij48P3BocCBlY2hvICR0YWJbJ2ljb24nXTsgPz48L2Rpdj4NCiAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgIDw/cGhwIGlmICgkdGFiWyduYW1lJ10pOiA/Pg0KICAgICAgICAgICAgICA8aDM+PD9waHAgZWNobyAkdGFiWyduYW1lJ107ID8+PC9oMz4NCiAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgIDw/cGhwIGVjaG8gJHRhYlsnY29udGVudCddOyA/Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8P3BocCBlbmRmb3JlYWNoOyA/Pg0KICAgICAgICAgIDx1bCBjbGFzcz0ibGlzdC11bnN0eWxlZCBkZXNjcmlwdGlvbiI+DQogICAgICAgICAgICA8P3BocCBpZigkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3Rfdmlld3MnKSk6ID8+DQogICAgICAgICAgICA8bGkgY2xhc3M9InByb2R1Y3Qtdmlld3MtY291bnQiPjxpbWcgc3R5bGU9Im1hcmdpbi10b3A6LTE0cHg7InNyYz0iaHR0cHM6Ly93d3cuc2FyYXlwZXJkZWhvbWUuY29tL2ltYWdlL2dyYWZpa2xlci91Y3JldHNpei1rYXJnby1hbmltZS5naWYiPjwvbGk+DQogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICAgIDw/cGhwIGlmKCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnbWFudWZhY3R1cmVyX2ltYWdlJykgPT0gJ29uJyk6ID8+DQogICAgICAgICAgICA8bGkgY2xhc3M9ImJyYW5kLWxvZ28iPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gJG1hbnVmYWN0dXJlcnM7ID8+IiBjbGFzcz0iYnJhbmQtaW1hZ2UiPg0KICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iPD9waHAgZWNobyAkbWFudWZhY3R1cmVyX2ltYWdlOyA/PiIgd2lkdGg9Ijw/cGhwIGVjaG8gJG1hbnVmYWN0dXJlcl9pbWFnZV93aWR0aDsgPz4iIGhlaWdodD0iPD9waHAgZWNobyAkbWFudWZhY3R1cmVyX2ltYWdlX2hlaWdodDsgPz4iIGFsdD0iPD9waHAgZWNobyAkbWFudWZhY3R1cmVyOyA/PiIgLz4NCiAgICAgICAgICAgICAgICA8L2E+DQogICAgICAgICAgICAgICAgPD9waHAgaWYoaXNzZXQoJG1hbnVmYWN0dXJlcl9pbWFnZV9uYW1lKSAmJiAkbWFudWZhY3R1cmVyX2ltYWdlX25hbWUpOiA/Pg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Ijw/cGhwIGVjaG8gJG1hbnVmYWN0dXJlcnM7ID8+IiBjbGFzcz0iYnJhbmQtbG9nby10ZXh0Ij4NCiAgICAgICAgICAgICAgICAgICAgPD9waHAgZWNobyAkbWFudWZhY3R1cmVyX2ltYWdlX25hbWU7ID8+DQogICAgICAgICAgICAgICAgPC9hPg0KICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+DQogICAgICAgICAgICA8P3BocCBpZiAoJG1hbnVmYWN0dXJlcikgeyA/Pg0KICAgICAgICAgICAgPGxpIGNsYXNzPSJwLWJyYW5kIj48P3BocCBlY2hvICR0ZXh0X21hbnVmYWN0dXJlcjsgPz4gPGEgaHJlZj0iPD9waHAgZWNobyAkbWFudWZhY3R1cmVyczsgPz4iPjw/cGhwIGVjaG8gJG1hbnVmYWN0dXJlcjsgPz48L2E+PC9saT4NCiAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KCQkJDQoJCQkNCgkJCQ0KCQkJDQoJCQkNCgkJCQ0KICAgICAgICAgICAgPGxpIGNsYXNzPSJwLW1vZGVsIj48P3BocCBlY2hvICR0ZXh0X21vZGVsOyA/PiA8c3BhbiBjbGFzcz0icC1tb2RlbCI+PD9waHAgZWNobyAkbW9kZWw7ID8+PC9zcGFuPjwvbGk+DQogICAgICAgICAgICANCg0KCQkJDQoJCQkNCgkJCTw/cGhwIGlmICgkcmV3YXJkKSB7ID8+DQogICAgICAgICAgICA8bGkgY2xhc3M9InAtcmV3YXJkcyI+PD9waHAgZWNobyAkdGV4dF9yZXdhcmQ7ID8+IDxzcGFuIGNsYXNzPSJwLXJld2FyZHMiPjw/cGhwIGVjaG8gJHJld2FyZDsgPz48L3NwYW4+PC9saT4NCiAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgIDxsaSBjbGFzcz0icC1zdG9jayI+PD9waHAgZWNobyAkdGV4dF9zdG9jazsgPz4gPHNwYW4gY2xhc3M9ImpvdXJuYWwtc3RvY2sgPD9waHAgZWNobyBpc3NldCgkc3RvY2tfc3RhdHVzKSA/ICRzdG9ja19zdGF0dXMgOiAnJzsgPz4iPjw/cGhwIGVjaG8gJHN0b2NrOyA/Pjwvc3Bhbj48L2xpPg0KICAgICAgICAgIDwvdWw+DQogICAgICAgICAgPD9waHAgaWYoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3NvbGQnKSk6ID8+DQogICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1zb2xkLWNvdW50LXRleHQiPjw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3NvbGQnKTsgPz48L2Rpdj4NCiAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICA8P3BocCBpZiAoaXNzZXQoJGRhdGVfZW5kKSAmJiAkZGF0ZV9lbmQgJiYgJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaG93X2NvdW50ZG93bl9wcm9kdWN0X3BhZ2UnLCAnb24nKSA9PSAnb24nKTogPz4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb3VudGRvd24td3JhcHBlciI+PGRpdiBjbGFzcz0iZXhwaXJlLXRleHQiPjw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdjb3VudGRvd25fcHJvZHVjdF9wYWdlX3RpdGxlJyk7ID8+PC9kaXY+PGRpdiBjbGFzcz0iY291bnRkb3duIj48L2Rpdj48L2Rpdj4NCiAgICAgICAgICA8c2NyaXB0PkpvdXJuYWwuY291bnRkb3duKCQoJy5yaWdodCAuY291bnRkb3duJyksICc8P3BocCBlY2hvICRkYXRlX2VuZDsgPz4nKTs8L3NjcmlwdD4NCiAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICA8P3BocCBpZiAoJHByaWNlKSB7ID8+DQogICAgDQoJDQoJCQkJDQoJCQkJCQkJICAJCQkJPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDo1cHg7IG1hcmdpbi1ib3R0b206MHB4OyIgY2xhc3M9InBlcmRlLW9sY3UiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICA8dWw+DQogICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHVydW5fdGlwID09ICJzdG9yIiB8fCAkdXJ1bl90aXAgPT0gImphbHV6aSIpIHsgPz4NCiAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC1zaXplOjE0cHg7IG1hcmdpbi1ib3R0b206NnB4OyI+PGI+KiA8P3BocCBlY2hvICRlbnRyeV9lbmdpcmluaXo7ID8+PC9iPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgDQoJCQkJCTxzZWxlY3QgbmFtZT0ib3B0aW9uW2VuXSIgaWQ9InNlbiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPi0tIDw/cGhwIGVjaG8gJGVudHJ5X3BlcmRlbmluZW5pcGxhY2U7ID8+IC0tPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZvciAoJGk9MzA7JGk8PSRlbjskaSsrKSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8gJGk7ID8+Ij48P3BocCBlY2hvICRpOyA/PiBjbTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgPC9saT4NCgkJCQkgDQoJCQkJIA0KDQoJCQkJPGxpIHN0eWxlPSJmbG9hdDpyaWdodDsiPg0KCQkJCSA8ZGl2IHN0eWxlPSJtYXJnaW4tbGVmdDoxMHB4OyI+DQogICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTRweDsgbWFyZ2luLWJvdHRvbTo2cHg7Ij48Yj4qIDw/cGhwIGVjaG8gJGVudHJ5X2JveWdpcmluaXo7ID8+PC9iPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgDQoJCQkJCSAgIDxzZWxlY3QgbmFtZT0ib3B0aW9uW2JveV0iIGlkPSJzYm95Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMCI+LS0gPD9waHAgZWNobyAkZW50cnlfcGVyZGVuaW5ib3l1cGxhY2U7ID8+IC0tPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZvciAoJGk9MzA7JGk8PSRib3k7JGkrKykgeyA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8P3BocCBlY2hvICRpOyA/PiI+PD9waHAgZWNobyAkaTsgPz4gY208L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPC9saT4NCg0KDQoNCg0KDQogICAgICAgICAgICAgIDw/cGhwIH1lbHNlIGlmICgkdXJ1bl90aXAgPT0gInBlcmRlIikgeyA/Pg0KICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXNpemU6MTRweDsgbWFyZ2luLWJvdHRvbTo2cHg7Ij48Yj4qIDw/cGhwIGVjaG8gJGVudHJ5X2VuZ2lyaW5pejsgPz48L2I+PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgIA0KCQkJCQk8c2VsZWN0IG5hbWU9Im9wdGlvbltlbl0iIGlkPSJwZW4iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj4tLSA8P3BocCBlY2hvICRlbnRyeV9wZXJkZW5pbmVuaXN0YW5kYXJ0cGxhY2U7ID8+IC0tPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGZvciAoJGk9MzA7JGk8PSRlbjskaSsrKSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8gJGk7ID8+Ij48P3BocCBlY2hvICRpOyA/PiBjbTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+DQoJCQkJCSAgDQogICAgICAgICAgICAgICAgICA8L2xpPg0KDQoNCiAgICAgICAgICAgICAgICAgICA8bGk+DQoJCQkJIDxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OjEwcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNHB4OyBtYXJnaW4tYm90dG9tOjZweDsiPjxiPiogPD9waHAgZWNobyAkZW50cnlfYm95Z2lyaW5pejsgPz48L2I+PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICANCgkJCQkJCQ0KCQkJCQkJPHNlbGVjdCBuYW1lPSJvcHRpb25bYm95XSIgaWQ9InBib3kiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj4tLSA8P3BocCBlY2hvICRlbnRyeV9wZXJkZW5pbmJveXVzdGFuZGFydHBsYWNlOyA/PiAtLTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBmb3IgKCRpPTE4MDskaTw9JGJveTskaSsrKSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8gJGk7ID8+Ij48P3BocCBlY2hvICRpOyA/PiBjbTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+DQoJCQkJCQkNCiAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgICAgPGxpIHN0eWxlPSJ3aWR0aDo5OCU7IG1hcmdpbi10b3A6MTVweDsgbWFyZ2luLWJvdHRvbTowcHg7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNHB4OyBtYXJnaW4tYm90dG9tOjZweDsiPjxiPjw/cGhwIGVjaG8gJGVudHJ5X3BpbGU7ID8+PC9iPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9Im9wdGlvbltwaWxlXSIgaWQ9InBwaWxlIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMi41Ij48P3BocCBlY2hvICRlbnRyeV9waWxlc2V5cmVrOyA/Pjwvb3B0aW9uPg0KCQkJCQkJICA8b3B0aW9uIHZhbHVlPSIyLjc1Ij48P3BocCBlY2hvICRlbnRyeV9waWxlb3J0YTsgPz48L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMyI+PD9waHAgZWNobyAkZW50cnlfcGlsZXNpazsgPz48L29wdGlvbj4NCg0KICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICAgICAgICAgICAgPC9saT4NCg0KICAgICAgICAgICAgICAgICAgPD9waHAgfWVsc2UgaWYgKCR1cnVuX3RpcCA9PSAicnVzdGlrLXRlc3QiKSB7ID8+DQoNCiAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNHB4OyBtYXJnaW4tYm90dG9tOjZweDsiPjw/cGhwIGVjaG8gJGVudHJ5X2ViYXRnaXI7ID8+PC9iPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9Im9wdGlvbltydXN0aWtdIiBpZD0icGViYXQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIwIj4tLSBzZcOnaW5peiAtLTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxMDAiPjEwMCBjbTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIxNTAiPjE1MCBjbTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyMDAiPjIwMCBjbTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyNTAiPjI1MCBjbTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIzMDAiPjMwMCBjbTwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIDwvbGk+DQoNCiAgICAgICAgICAgICAgICAgIDw/cGhwIH1lbHNlIGlmICgkdXJ1bl90aXAgPT0gInZhcmFrLXRlc3QiKSB7ID8+DQoNCiAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNHB4OyBtYXJnaW4tYm90dG9tOjZweDsiPjw/cGhwIGVjaG8gJGVudHJ5X2ViYXRnaXI7ID8+PC9iPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICANCgkJCQkJCQk8c2VsZWN0IG5hbWU9Im9wdGlvblt2YXJha10iIGlkPSJwZWJhdCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjAiPi0tIHNlw6dpbml6IC0tPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjU1Ij41NSBjbSdlIGthZGFyPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjEwNSI+MTA1IGNtJ2Uga2FkYXI8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iMTU1Ij4xNTUgY20nZSBrYWRhcjwvb3B0aW9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIyMDUiPjIwNSBjbSdlIGthZGFyPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IjI4MCI+MjgwIGNtJ2Uga2FkYXI8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4gICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgIDwvbGk+DQoNCiAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCg0KDQogICAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgPC9kaXY+DQoJDQoJDQoJCSAgPHVsICBjbGFzcz0ibGlzdC11bnN0eWxlZCBwcmljZSI+DQogICAgICAgICAgICA8bWV0YSA9Iml0ZW1Db25kaXRpb24iIC8+DQogICAgICAgICAgICA8bWV0YSA9InByaWNlQ3VycmVuY3kiIGNvbnRlbnQ9Ijw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X3ByaWNlX2N1cnJlbmN5Jyk7ID8+IiAvPg0KICAgICAgICAgICAgPG1ldGEgPSJwcmljZSIgY29udGVudD0iPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfcHJpY2UnKTsgPz4iIC8+DQogICAgICAgICAgICA8P3BocCBpZiAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X2luX3N0b2NrJykgPT09ICd5ZXMnKTogPz4NCiAgICAgICAgICAgIDxsaW5rID0iYXZhaWxhYmlsaXR5IiAgaHJlZj0iaHR0cDovL3NjaGVtYS5vcmcvSW5TdG9jayIgLz4NCiAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgPD9waHAgaWYgKCEkc3BlY2lhbCkgeyA/Pg0KICAgICAgICAgICAgPGxpIGNsYXNzPSJwcm9kdWN0LXByaWNlIj48P3BocCBlY2hvICRwcmljZTsgPz48L2xpPg0KICAgICAgICAgICAgPD9waHAgfSBlbHNlIHsgPz4NCiAgICAgICAgICAgIDxsaSBjbGFzcz0icHJpY2Utb2xkIj48P3BocCBlY2hvICRwcmljZTsgPz48L2xpPg0KICAgICAgICAgICAgPGxpIGNsYXNzPSJwcmljZS1uZXciPjw/cGhwIGVjaG8gJHNwZWNpYWw7ID8+PC9saT4NCiAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgIDw/cGhwIGlmICgkdGF4KSB7ID8+DQogICAgICAgICAgICA8bGkgY2xhc3M9InByaWNlLXRheCI+PD9waHAgZWNobyAkdGV4dF90YXg7ID8+IDw/cGhwIGVjaG8gJHRheDsgPz48L2xpPg0KICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgPD9waHAgaWYgKCRwb2ludHMpIHsgPz4NCiAgICAgICAgICAgIDxsaSBjbGFzcz0icmV3YXJkIj48c21hbGw+PD9waHAgZWNobyAkdGV4dF9wb2ludHM7ID8+IDw/cGhwIGVjaG8gJHBvaW50czsgPz48L3NtYWxsPjwvbGk+DQogICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICA8P3BocCBpZiAoJGRpc2NvdW50cykgeyA/Pg0KICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJGRpc2NvdW50cyBhcyAkZGlzY291bnQpIHsgPz4NCiAgICAgICAgICAgIDxsaSBjbGFzcz0iZGlzY291bnRzIj48P3BocCBlY2hvICRkaXNjb3VudFsncXVhbnRpdHknXTsgPz48P3BocCBlY2hvICR0ZXh0X2Rpc2NvdW50OyA/Pjw/cGhwIGVjaG8gJGRpc2NvdW50WydwcmljZSddOyA/PjwvbGk+DQogICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgPC91bD4NCiAgICAgICAgICA8P3BocCB9ID8+DQoJCQkJICANCgkJCQkgIAkJICAJCSAgIDw/cGhwIGlmICgkY2F0ZWdvcmllcykgeyA/Pg0KCQkJCTw/cGhwIGZvcmVhY2ggKCRjYXRlZ29yaWVzIGFzICRjYXRlZ29yeSkgeyA/Pg0KCQkJCTwhLS0gU3RvciBwZXJkZSAtLT4NCgkJCQkJPD9waHAgaWYgKCRjYXRlZ29yeVsnY2F0ZWdvcnlfaWQnXSA9PSAnNTknKSB7ID8+IA0KCQkJCQkJPGRpdiBzdHlsZT0ibWFyZ2luLWJvdHRvbTotMTVweDsiPg0KCTxkaXYgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmM2YzZjM7DQoJYm9yZGVyOiAxcHggc29saWQgI2RjZGNkYzsNCglwYWRkaW5nOiAxMHB4Ow0KCW1hcmdpbi1ib3R0b206IDE1cHg7DQoJLW1vei1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KTsNCgktd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpOw0KCWJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDFweCByZ2JhKDAsMCwwLC4wNzUpOw0KCWNvbG9yOiAjNTU1NTU1OyI+R2lybWnFnyBvbGR1xJ91bnV6IGVuIMO2bMOnw7xzw7wgbWVrYW5pem1hIGRhaGlsIMO2bMOnw7xkw7xyLiBLdW1hxZ8gNCBjbSBla3NpayBrZXNpbG1la3RlZGlyLiDDlmzDp8O8ecO8IGJ1bmEgZ8O2cmUgZ2lyaW5pei4gKMOWbMOnw7xsZXJpbml6aSBzZcOndGlrdGVuIHNvbnJhIHR1dGFyIG90b21hdGlrIG9sYXJhayBoZXNhcGxhbmFjYWt0xLFyLik8L2Rpdj48L2Rpdj4NCgkJCQkJPD9waHAgfSA/Pg0KCQkJCQk8IS0tIFplYnJhIHBlcmRlIC0tPg0KCQkJCQk8P3BocCBpZiAoJGNhdGVnb3J5WydjYXRlZ29yeV9pZCddID09ICc2NicpIHsgPz4NCgkJCQkJCTxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206LTE1cHg7Ij4NCgk8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZjNmM2YzOw0KCWJvcmRlcjogMXB4IHNvbGlkICNkY2RjZGM7DQoJcGFkZGluZzogMTBweDsNCgltYXJnaW4tYm90dG9tOiAxNXB4Ow0KCS1tb3otYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMXB4IHJnYmEoMCwwLDAsLjA3NSk7DQoJLXdlYmtpdC1ib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KTsNCglib3gtc2hhZG93OiBpbnNldCAwIDFweCAxcHggcmdiYSgwLDAsMCwuMDc1KTsNCgljb2xvcjogIzU1NTU1NTsiPkdpcm1pxZ8gb2xkdcSfdW51eiBlbiDDtmzDp8O8c8O8IG1la2FuaXptYSBkYWhpbCDDtmzDp8O8ZMO8ci4gS3VtYcWfIDQgY20gZWtzaWsga2VzaWxtZWt0ZWRpci4gw5Zsw6fDvHnDvCBidW5hIGfDtnJlIGdpcmluaXouICjDlmzDp8O8bGVyaW5pemkgc2XDp3Rpa3RlbiBzb25yYSB0dXRhciBvdG9tYXRpayBvbGFyYWsgaGVzYXBsYW5hY2FrdMSxci4pPC9kaXY+PC9kaXY+DQoJCQkJCTw/cGhwIH0gPz4NCgkJCQkJDQoJCQkJCQ0KCQkJCTw/cGhwIH0gPz4NCgkJCTw/cGhwIH0gPz4NCgkJCQkgIA0KDQogICAgICAgICAgPCEtLTxzdHlsZT4NCiAgICAgICAgICAjc2VjZWtsZXJMaXN0ZXNzIGxpew0KCQkJICBsaXN0LXN0eWxlOm5vbmU7DQoJCQkgIGxpc3Qtc3R5bGUtdHlwZTpub25lOw0KCQkJICBkaXNwbGF5OmJsb2NrOw0KCQkJICBmbG9hdDpsZWZ0Ow0KCQkJICBtYXJnaW4tbGVmdDoxMHB4Ow0KCQkgIH0NCgkJICAjc2VjZWtsZXJMaXN0ZXNzIGxpew0KCQkJICB3aWR0aDo0MCU7DQoJCQkgIA0KCQkJIA0KCQkJICANCgkJICB9DQogICAgICAgICAgDQogICAgICAgICAgPC9zdHlsZT4gLS0+DQoNCg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InRvcGxhbS1oZXNhcCIgaWQ9InRvcGxhbS1oZXNhcCIgdmFsdWU9IiIvPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJmaXlhdHR0IiB2YWx1ZT0iPD9waHAgZWNobyAkZml5YXQ7ID8+Ii8+DQogICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9ImthbXBhbnlhYWEiIHZhbHVlPSI8P3BocCBlY2hvICRrYW1wYW55YSA/PiIvPg0KICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iZml5YXR0dDIiIHZhbHVlPSI8P3BocCBlY2hvICRmaXlhdDI7ID8+Ii8+DQogICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9ImthbXBhbnlhYWEyIiB2YWx1ZT0iPD9waHAgZWNobyAka2FtcGFueWEyID8+Ii8+DQoNCiAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQoJCSAgDQoJCSAgZnVuY3Rpb24gaGVzYXBsYTEyMygpew0KCQkJICANCgkJCSAgJCgnI3NlbicpLnRyaWdnZXIoImNoYW5nZSIpOw0KCQkgIH0NCiAgICAgICAgICAgICAgDQoJCQkvLyAgcXVhbnRpdHkgPSBwYXJzZUludCgkKCIjaW5wdXQtcXVhbnRpdHkiKS52YWwoKTsNCg0KICAgICAgICAgICAgICAkKCcjc2VuJykuY2hhbmdlKGZ1bmN0aW9uICgpew0KICAgICAgICAgICAgICAgICAgdmFyIGVuID0gJCgnI3NlbicpLnZhbCgpOw0KICAgICAgICAgICAgICAgICAgdmFyIGJveSA9ICQoJyNzYm95JykudmFsKCk7DQoJCQkJIAlpZiAoYm95PD0yMDApew0KCQkJCQkgIGJveSA9IDIwMDsNCgkJCQkJfWVsc2V7DQoJCQkJCQl2YXIgYnNheSA9IGJveS5zdWJzdHIoMSwgMik7DQoJCQkJCQl2YXIgYnNvbiA9IGJveS5zdWJzdHIoMiwyKTsNCgkJCQkJCWlmIChic29uIT0wKSB7DQoJCQkJCQkJYnNvbiA9IDEwIC0gYnNvbjsNCgkJCQkJCQlib3kgPSBwYXJzZUludChib3kpICsgcGFyc2VJbnQoYnNvbik7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJaWYgKGVuPD0xMDApew0KCQkJCQkgIGVuID0gMTAwOw0KCQkJCQl9ZWxzZXsNCgkJCQkJCXZhciBlc2F5ID0gZW4uc3Vic3RyKDEsIDIpOw0KCQkJCQkJdmFyIGVzb24gPSBlbi5zdWJzdHIoMiwyKTsNCgkJCQkJCWlmIChlc29uIT0wKSB7DQoJCQkJCQkJZXNvbiA9IDEwIC0gZXNvbjsNCgkJCQkJCQllbiA9IHBhcnNlSW50KGVuKSArIHBhcnNlSW50KGVzb24pOw0KCQkJCQkJfQ0KCQkJCQl9DQoNCiAgICAgICAgICAgICAgICAgIGlmIChib3kgPiAwKXsNCiAgICAgICAgICAgICAgICAgICAgICB2YXIgYWRldCA9IHBhcnNlSW50KCQoIiNpbnB1dC1xdWFudGl0eSIpLnZhbCgpKTsNCiAgICAgICAgICAgICAgICAgICAgICBtZXRyZT0gKGVuKmJveSphZGV0KS8xMDAwMDsgDQoJCQkJCSAgbWV0cmU9bWV0cmUudG9GaXhlZCgyKTsNCiAgICAgICAgICAgICAgICAgICAgICAkKCcjcGVyZGUtaGVzYXAnKS5odG1sKCIiKTsNCiAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghJHNwZWNpYWwpIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9IG1ldHJlKiQoIiNmaXlhdHR0IikudmFsKCk7CQkJCQkJICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9c29udWMudG9GaXhlZCgyKTsNCgkJCQkJCSAgc29udWMyPSBtZXRyZSokKCIjZml5YXR0dDIiKS52YWwoKTsJCQkJCQkgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBzb251YzI9c29udWMyLnRvRml4ZWQoMik7DQogICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSBlbHNlIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9IG1ldHJlKiQoIiNrYW1wYW55YWFhIikudmFsKCk7CQ0KICAgICAgICAgICAgICAgICAgICAgICAgICBzb251Yz1zb251Yy50b0ZpeGVkKDIpOw0KCQkJCQkJICBzb251YzI9IG1ldHJlKiQoIiNrYW1wYW55YWFhMiIpLnZhbCgpOwkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWMyPXNvbnVjMi50b0ZpeGVkKDIpOw0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgIHRvcGxhbV9oZXNhcD0oc29udWMvYWRldCkudG9GaXhlZCgyKTsNCiAgICAgICAgICAgICAgICAgICAgICAkKCcjdG9wbGFtLWhlc2FwJykudmFsKHRvcGxhbV9oZXNhcCk7DQoJCQkJCSAgaWYgKCQoJyNzYm95JykudmFsKCk+MCl7DQoJCQkJCQkJJCgnI3BlcmRlLWhlc2FwJykuYWRkQ2xhc3MoJ3BlcmRlLWhlc2FwJyk7DQoJCQkJCQkJJCgnI3BlcmRlLWhlc2FwJykuYXBwZW5kKCc8P3BocCBlY2hvICRlbnRyeV9lYmF0c29udWM7ID8+IDxzcGFuIGlkPSJtZXRyZSI+JyArIG1ldHJlICsgJzwvc3Bhbj4gbTxzdXA+Mjwvc3VwPiwgPD9waHAgZWNobyAkZW50cnlfc29udWN0dXRhcjsgPz4gPHNwYW4gaWQ9ImZpeWF0Ij4nICsgc29udWMyICsgJzwvc3Bhbj4gPD9waHAgZWNobyAkdGhpcy0+Y3VycmVuY3ktPmdldENvZGUoKTsgPz4gKyA8P3BocCBlY2hvICRlbnRyeV9hcnRpdmVyZ2k7ID8+Jyk7DQoJCQkJCSAgfQ0KICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICQoJyNzYm95JykuY2hhbmdlKGZ1bmN0aW9uICgpew0KICAgICAgICAgICAgICAgICAgdmFyIGVuID0gJCgnI3NlbicpLnZhbCgpOw0KICAgICAgICAgICAgICAgICAgdmFyIGJveSA9ICQoJyNzYm95JykudmFsKCk7DQoJCQkJIAlpZiAoYm95PD0yMDApew0KCQkJCQkgIGJveSA9IDIwMDsNCgkJCQkJfWVsc2V7DQoJCQkJCQl2YXIgYnNheSA9IGJveS5zdWJzdHIoMSwgMik7DQoJCQkJCQl2YXIgYnNvbiA9IGJveS5zdWJzdHIoMiwyKTsNCgkJCQkJCWlmIChic29uIT0wKSB7DQoJCQkJCQkJYnNvbiA9IDEwIC0gYnNvbjsNCgkJCQkJCQlib3kgPSBwYXJzZUludChib3kpICsgcGFyc2VJbnQoYnNvbik7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQkJaWYgKGVuPD0xMDApew0KCQkJCQkgIGVuID0gMTAwOw0KCQkJCQl9ZWxzZXsNCgkJCQkJCXZhciBlc2F5ID0gZW4uc3Vic3RyKDEsIDIpOw0KCQkJCQkJdmFyIGVzb24gPSBlbi5zdWJzdHIoMiwyKTsNCgkJCQkJCWlmIChlc29uIT0wKSB7DQoJCQkJCQkJZXNvbiA9IDEwIC0gZXNvbjsNCgkJCQkJCQllbiA9IHBhcnNlSW50KGVuKSArIHBhcnNlSW50KGVzb24pOw0KCQkJCQkJfQ0KCQkJCQl9CQkJCSAgDQoJCQkJCSAgaWYgKGVuID4gMCl7DQogICAgICAgICAgICAgICAgICAgICAgdmFyIGFkZXQgPSBwYXJzZUludCgkKCIjaW5wdXQtcXVhbnRpdHkiKS52YWwoKSk7DQogICAgICAgICAgICAgICAgICAgICAgbWV0cmU9IChlbipib3kqYWRldCkvMTAwMDA7IG1ldHJlPW1ldHJlLnRvRml4ZWQoMik7DQogICAgICAgICAgICAgICAgICAgICAgJCgnI3BlcmRlLWhlc2FwJykuaHRtbCgiIik7DQogICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRzcGVjaWFsKSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjPSBtZXRyZSokKCIjZml5YXR0dCIpLnZhbCgpOwkJCQkJCSAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjPXNvbnVjLnRvRml4ZWQoMik7DQoJCQkJCQkgIHNvbnVjMj0gbWV0cmUqJCgiI2ZpeWF0dHQyIikudmFsKCk7CQkJCQkJICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWMyPXNvbnVjMi50b0ZpeGVkKDIpOw0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjPSBtZXRyZSokKCIja2FtcGFueWFhYSIpLnZhbCgpOwkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9c29udWMudG9GaXhlZCgyKTsNCgkJCQkJCSAgc29udWMyPSBtZXRyZSokKCIja2FtcGFueWFhYTIiKS52YWwoKTsJDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjMj1zb251YzIudG9GaXhlZCgyKTsNCiAgICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQoJCQkJCSAgDQogICAgICAgICAgICAgICAgICAgICAgdG9wbGFtX2hlc2FwPShzb251Yy9hZGV0KS50b0ZpeGVkKDIpOw0KICAgICAgICAgICAgICAgICAgICAgICQoJyN0b3BsYW0taGVzYXAnKS52YWwodG9wbGFtX2hlc2FwKTsNCiAgICAgICAgICAgICAgICAgICAgICANCgkJCQkJICBpZiAoJCgnI3NlbicpLnZhbCgpPjApew0KCQkJCQkJCSQoJyNwZXJkZS1oZXNhcCcpLmFkZENsYXNzKCdwZXJkZS1oZXNhcCcpOw0KCQkJCQkJCSQoJyNwZXJkZS1oZXNhcCcpLmFwcGVuZCgnPD9waHAgZWNobyAkZW50cnlfZWJhdHNvbnVjOyA/PiA8c3BhbiBpZD0ibWV0cmUiPicgKyBtZXRyZSArICc8L3NwYW4+IG08c3VwPjI8L3N1cD4sIDw/cGhwIGVjaG8gJGVudHJ5X3NvbnVjdHV0YXI7ID8+IDxzcGFuIGlkPSJmaXlhdCI+JyArIHNvbnVjMiArICc8L3NwYW4+IDw/cGhwIGVjaG8gJHRoaXMtPmN1cnJlbmN5LT5nZXRDb2RlKCk7ID8+ICsgPD9waHAgZWNobyAkZW50cnlfYXJ0aXZlcmdpOyA/PicpOw0KCQkJCQkgIH0NCiAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICB9KTsNCg0KDQogICAgICAgICAgICAgICQoJyNwZW4nKS5jaGFuZ2UoZnVuY3Rpb24gKCl7DQogICAgICAgICAgICAgICAgICB2YXIgZW4gPSAkKCcjcGVuJykudmFsKCk7DQogICAgICAgICAgICAgICAgICB2YXIgYm95ID0gJCgnI3Bib3knKS52YWwoKTsNCiAgICAgICAgICAgICAgICAgIHZhciBwaWxlID0gJCgnI3BwaWxlJykudmFsKCk7DQogICAgICAgICAgICAgICAgICBpZiAoYm95ID4gMCl7DQogICAgICAgICAgICAgICAgICAgICAgdmFyIGFkZXQgPSBwYXJzZUludCgkKCIjaW5wdXQtcXVhbnRpdHkiKS52YWwoKSk7DQogICAgICAgICAgICAgICAgICAgICAgbWV0cmU9IChlbioxKmFkZXQqcGlsZSkvMTAwOw0KICAgICAgICAgICAgICAgICAgICAgICQoJyNwZXJkZS1oZXNhcCcpLmh0bWwoIiIpOw0KICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRzcGVjaWFsKSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjPSBtZXRyZSokKCIjZml5YXR0dCIpLnZhbCgpOwkJCQkJCSAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjPXNvbnVjLnRvRml4ZWQoMik7DQoJCQkJCQkgIHNvbnVjMj0gbWV0cmUqJCgiI2ZpeWF0dHQyIikudmFsKCk7CQkJCQkJICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWMyPXNvbnVjMi50b0ZpeGVkKDIpOw0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjPSBtZXRyZSokKCIja2FtcGFueWFhYSIpLnZhbCgpOwkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9c29udWMudG9GaXhlZCgyKTsNCgkJCQkJCSAgc29udWMyPSBtZXRyZSokKCIja2FtcGFueWFhYTIiKS52YWwoKTsJDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjMj1zb251YzIudG9GaXhlZCgyKTsNCiAgICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgICAgICAgdG9wbGFtX2hlc2FwPShzb251Yy9hZGV0KS50b0ZpeGVkKDIpOw0KICAgICAgICAgICAgICAgICAgICAgICQoJyN0b3BsYW0taGVzYXAnKS52YWwodG9wbGFtX2hlc2FwKTsNCgkJCQkJICBpZigkKCcjcGJveScpLnZhbCgpPjApew0KCQkJCQkJCSQoJyNwZXJkZS1oZXNhcCcpLmFkZENsYXNzKCdwZXJkZS1oZXNhcCcpOw0KCQkJCQkJCSQoJyNwZXJkZS1oZXNhcCcpLmFwcGVuZCgnPD9waHAgZWNobyAkZW50cnlfZWJhdHNvbnVjOyA/PiA8c3BhbiBpZD0ibWV0cmUiPicgKyBtZXRyZSArICc8L3NwYW4+IG10LCA8P3BocCBlY2hvICRlbnRyeV9zb251Y3R1dGFyOyA/PiA8c3BhbiBpZD0iZml5YXQiPicgKyBzb251YzIgKyAnPC9zcGFuPiA8P3BocCBlY2hvICR0aGlzLT5jdXJyZW5jeS0+Z2V0Q29kZSgpOyA/PiArIDw/cGhwIGVjaG8gJGVudHJ5X2FydGl2ZXJnaTsgPz4nKTsNCgkJCQkJICB9DQogICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICQoJyNwYm95JykuY2hhbmdlKGZ1bmN0aW9uICgpew0KICAgICAgICAgICAgICAgICAgdmFyIGVuID0gJCgnI3BlbicpLnZhbCgpOw0KICAgICAgICAgICAgICAgICAgdmFyIGJveSA9ICQoJyNwYm95JykudmFsKCk7DQogICAgICAgICAgICAgICAgICB2YXIgcGlsZSA9ICQoJyNwcGlsZScpLnZhbCgpOw0KICAgICAgICAgICAgICAgICAgaWYgKGVuID4gMCl7DQogICAgICAgICAgICAgICAgICAgICAgdmFyIGFkZXQgPSBwYXJzZUludCgkKCIjaW5wdXQtcXVhbnRpdHkiKS52YWwoKSk7DQogICAgICAgICAgICAgICAgICAgICAgbWV0cmU9IChlbioxKmFkZXQqcGlsZSkvMTAwOw0KICAgICAgICAgICAgICAgICAgICAgICQoJyNwZXJkZS1oZXNhcCcpLmh0bWwoIiIpOw0KICAgICAgICAgICAgICAgIDw/cGhwIGlmICghJHNwZWNpYWwpIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9IG1ldHJlKiQoIiNmaXlhdHR0IikudmFsKCk7CQkJCQkJICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9c29udWMudG9GaXhlZCgyKTsNCgkJCQkJCSAgc29udWMyPSBtZXRyZSokKCIjZml5YXR0dDIiKS52YWwoKTsJCQkJCQkgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBzb251YzI9c29udWMyLnRvRml4ZWQoMik7DQogICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSBlbHNlIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9IG1ldHJlKiQoIiNrYW1wYW55YWFhIikudmFsKCk7CQ0KICAgICAgICAgICAgICAgICAgICAgICAgICBzb251Yz1zb251Yy50b0ZpeGVkKDIpOw0KCQkJCQkJICBzb251YzI9IG1ldHJlKiQoIiNrYW1wYW55YWFhMiIpLnZhbCgpOwkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWMyPXNvbnVjMi50b0ZpeGVkKDIpOw0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCgkJCQkJICANCiAgICAgICAgICAgICAgICAgICAgICAgdG9wbGFtX2hlc2FwPShzb251Yy9hZGV0KS50b0ZpeGVkKDIpOw0KICAgICAgICAgICAgICAgICAgICAgICQoJyN0b3BsYW0taGVzYXAnKS52YWwodG9wbGFtX2hlc2FwKTsNCiAgICAgICAgICAgICAgICAgICAgICANCgkJCQkJICBpZiAoJCgnI3BlbicpLnZhbCgpPjApew0KCQkJCQkJCSQoJyNwZXJkZS1oZXNhcCcpLmFkZENsYXNzKCdwZXJkZS1oZXNhcCcpOw0KCQkJCQkJCSQoJyNwZXJkZS1oZXNhcCcpLmFwcGVuZCgnPD9waHAgZWNobyAkZW50cnlfZWJhdHNvbnVjOyA/PiA8c3BhbiBpZD0ibWV0cmUiPicgKyBtZXRyZSArICc8L3NwYW4+IG10LCA8P3BocCBlY2hvICRlbnRyeV9zb251Y3R1dGFyOyA/PiA8c3BhbiBpZD0iZml5YXQiPicgKyBzb251YzIgKyAnPC9zcGFuPiA8P3BocCBlY2hvICR0aGlzLT5jdXJyZW5jeS0+Z2V0Q29kZSgpOyA/PiArIDw/cGhwIGVjaG8gJGVudHJ5X2FydGl2ZXJnaTsgPz4nKTsNCgkJCQkJICB9DQogICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICQoJyNwcGlsZScpLmNoYW5nZShmdW5jdGlvbiAoKXsNCiAgICAgICAgICAgICAgICAgIHZhciBlbiA9ICQoJyNwZW4nKS52YWwoKTsNCiAgICAgICAgICAgICAgICAgIHZhciBib3kgPSAkKCcjcGJveScpLnZhbCgpOw0KICAgICAgICAgICAgICAgICAgdmFyIHBpbGUgPSAkKCcjcHBpbGUnKS52YWwoKTsNCiAgICAgICAgICAgICAgICAgIGlmIChlbiA+IDApew0KICAgICAgICAgICAgICAgICAgICAgIHZhciBhZGV0ID0gcGFyc2VJbnQoJCgiI2lucHV0LXF1YW50aXR5IikudmFsKCkpOw0KICAgICAgICAgICAgICAgICAgICAgIG1ldHJlPSAoZW4qMSphZGV0KnBpbGUpLzEwMDsNCiAgICAgICAgICAgICAgICAgICAgICAkKCcjcGVyZGUtaGVzYXAnKS5odG1sKCIiKTsNCiAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICghJHNwZWNpYWwpIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9IG1ldHJlKiQoIiNmaXlhdHR0IikudmFsKCk7CQkJCQkJICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9c29udWMudG9GaXhlZCgyKTsNCgkJCQkJCSAgc29udWMyPSBtZXRyZSokKCIjZml5YXR0dDIiKS52YWwoKTsJCQkJCQkgIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBzb251YzI9c29udWMyLnRvRml4ZWQoMik7DQogICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSBlbHNlIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9IG1ldHJlKiQoIiNrYW1wYW55YWFhIikudmFsKCk7CQ0KICAgICAgICAgICAgICAgICAgICAgICAgICBzb251Yz1zb251Yy50b0ZpeGVkKDIpOw0KCQkJCQkJICBzb251YzI9IG1ldHJlKiQoIiNrYW1wYW55YWFhMiIpLnZhbCgpOwkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWMyPXNvbnVjMi50b0ZpeGVkKDIpOw0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgICAgICAgICAgICAgDQoJCQkJCSAgIHRvcGxhbV9oZXNhcD0oc29udWMvYWRldCkudG9GaXhlZCgyKTsNCiAgICAgICAgICAgICAgICAgICAgICAkKCcjdG9wbGFtLWhlc2FwJykudmFsKHRvcGxhbV9oZXNhcCk7DQoJCQkJCSAgDQogICAgICAgICAgICAgICAgICAgICAgJCgnI3BlcmRlLWhlc2FwJykuYWRkQ2xhc3MoJ3BlcmRlLWhlc2FwJyk7DQogICAgICAgICAgICAgICAgICAgICAgJCgnI3BlcmRlLWhlc2FwJykuYXBwZW5kKCc8P3BocCBlY2hvICRlbnRyeV9lYmF0c29udWM7ID8+IDxzcGFuIGlkPSJtZXRyZSI+JyArIG1ldHJlICsgJzwvc3Bhbj4gbXQsIDw/cGhwIGVjaG8gJGVudHJ5X3NvbnVjdHV0YXI7ID8+IDxzcGFuIGlkPSJmaXlhdCI+JyArIHNvbnVjMiArICc8L3NwYW4+IDw/cGhwIGVjaG8gJHRoaXMtPmN1cnJlbmN5LT5nZXRDb2RlKCk7ID8+ICsgPD9waHAgZWNobyAkZW50cnlfYXJ0aXZlcmdpOyA/PicpOw0KICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICQoJyNwZWJhdCcpLmNoYW5nZShmdW5jdGlvbiAoKXsNCiAgICAgICAgICAgICAgICAgIHZhciBlYmF0ID0gJCgnI3BlYmF0JykudmFsKCk7DQoNCiAgICAgICAgICAgICAgICAgIGlmIChlYmF0ID4gMCl7DQogICAgICAgICAgICAgICAgICAgICAgdmFyIGFkZXQgPSBwYXJzZUludCgkKCIjaW5wdXQtcXVhbnRpdHkiKS52YWwoKSk7DQogICAgICAgICAgICAgICAgICAgICAgbWV0cmU9IChlYmF0KmFkZXQpLzEwMDAwMDA7DQogICAgICAgICAgICAgICAgICAgICAgJCgnI3BlcmRlLWhlc2FwJykuaHRtbCgiIik7DQogICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRzcGVjaWFsKSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjPSBtZXRyZSokKCIjZml5YXR0dCIpLnZhbCgpOwkJCQkJCSAgDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjPXNvbnVjLnRvRml4ZWQoMik7DQoJCQkJCQkgIHNvbnVjMj0gbWV0cmUqJCgiI2ZpeWF0dHQyIikudmFsKCk7CQkJCQkJICANCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWMyPXNvbnVjMi50b0ZpeGVkKDIpOw0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjPSBtZXRyZSokKCIja2FtcGFueWFhYSIpLnZhbCgpOwkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc29udWM9c29udWMudG9GaXhlZCgyKTsNCgkJCQkJCSAgc29udWMyPSBtZXRyZSokKCIja2FtcGFueWFhYTIiKS52YWwoKTsJDQogICAgICAgICAgICAgICAgICAgICAgICAgIHNvbnVjMj1zb251YzIudG9GaXhlZCgyKTsNCiAgICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgICAgICAgDQoJCQkJCSAgDQoJCQkJCSAgIHRvcGxhbV9oZXNhcD0oc29udWMvYWRldCkudG9GaXhlZCgyKTsNCiAgICAgICAgICAgICAgICAgICAgICAkKCcjdG9wbGFtLWhlc2FwJykudmFsKHRvcGxhbV9oZXNhcCk7DQoJCQkJCSAgDQogICAgICAgICAgICAgICAgICAgICAgJCgnI3BlcmRlLWhlc2FwJykuYWRkQ2xhc3MoJ3BlcmRlLWhlc2FwJyk7DQogICAgICAgICAgICAgICAgICAgICAgJCgnI3BlcmRlLWhlc2FwJykuYXBwZW5kKCc8P3BocCBlY2hvICRlbnRyeV9lYmF0c29udWM7ID8+IDxzcGFuIGlkPSJtZXRyZSI+JyArIGViYXQqYWRldCArICc8L3NwYW4+IGNtLCA8P3BocCBlY2hvICRlbnRyeV9zb251Y3R1dGFyOyA/PiA8c3BhbiBpZD0iZml5YXQiPicgKyBzb251YzIgKyAnPC9zcGFuPiA8P3BocCBlY2hvICR0aGlzLT5jdXJyZW5jeS0+Z2V0Q29kZSgpOyA/PiArIDw/cGhwIGVjaG8gJGVudHJ5X2FydGl2ZXJnaTsgPz4nKTsNCiAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICA8L3NjcmlwdD4NCgkJDQoJCSAgPD9waHAgaWYgKCRvcHRpb25zKSB7ID8+DQogICAgPHNjcmlwdD4NCiAgICAgICAgZnVuY3Rpb24gc2F5ZmFsYShzYXlmYSxpZCxpc2xlbSl7DQoNCiAgICAgICAgICAgIHZhciBzb3JndT0gJCgiaW5wdXRbdHlwZT0ncmFkaW8nXVtuYW1lPSdvcHRpb25bIitpZCsiXSddOmNoZWNrZWQiKS52YWwoKTsNCgkJCQkNCiAgICAgICAgICAgICAgICBpZiAoaXNsZW0gPT0gJysnKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChzb3JndT09IiIpIHsgJCgnI3NlcGV0ZS1la2xlJykudHJpZ2dlcignY2xpY2snKTsgfWVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmFkaW0nICsgc2F5ZmEpLmhpZGUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICQoJy5hZGltJyArIChwYXJzZUludChzYXlmYSkgKyAxKSkuc2hvdygpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJCgnLmFkaW0nICsgc2F5ZmEpLmhpZGUoKTsNCiAgICAgICAgICAgICAgICAgICAgJCgnLmFkaW0nICsgKHBhcnNlSW50KHNheWZhKSAtIDEpKS5zaG93KCk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgIH0NCg0KICAgIDwvc2NyaXB0Pg0KICAgIA0KICAgIA0KICAgIA0KICAgIA0KICAgIDxkaXYgaWQ9ImZiZmFuY3kiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+DQoNCg0KICAgIDxkaXYgaWQ9InNlY2VuZWtsZXIiPg0KICAgICAgPGRpdiBpZD0ib3B0aW9ucyIgY2xhc3M9Im9wdGlvbnMiPg0KICAgICAgICA8P3BocCAkeGo9MDsgIGZvcmVhY2goJG9wdGlvbnMgYXMgJHNheWZhKXsgJHNheWZhX3NheVtdPSRzYXlmYVsnc2F5ZmEnXTt9ICRzYXlmYWxhbmRpcm1hID0gIG1heCgkc2F5ZmFfc2F5KTsgICAkc2F5ZmFsYXIgPSBjb3VudCgkb3B0aW9ucyk7IA0KICAgICAgICANCiAgICAgICAgJHBvcHVwX2FjX25ldyA9IGZhbHNlOw0KICAgICAgICANCiAgICAgICAgDQogICAgZm9yZWFjaCAoJG9wdGlvbnMgYXMgJG9wdGlvbikgeyANCiAgICAgICAgDQogICAgICAgaWYoJG9wdGlvblsic2F5ZmEiXSA+IDApew0KICAgICAgICANCiAgICAgICAgJHBvcHVwX2FjX25ldyA9IHRydWU7DQogICAgICAgIA0KICAgICAgICA/Pg0KICAgICAgICA8P3BocCAgaWYgKCRvcHRpb25bJ3R5cGUnXSA9PSAnc2VsZWN0JykgeyA/Pg0KICAgICAgICA8ZGl2IGlkPSJvcHRpb24tPD9waHAgZWNobyAkb3B0aW9uWydwcm9kdWN0X29wdGlvbl9pZCddOyA/PiIgY2xhc3M9Im9wdGlvbiBvcHRpb24tPD9waHAgZWNobyAkb3B0aW9uWyd0eXBlJ107ID8+Ij4NCiAgICAgICAgICA8P3BocCBpZiAoJG9wdGlvblsncmVxdWlyZWQnXSkgeyA/Pg0KICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+Kjwvc3Bhbj4NCiAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgPGI+PD9waHAgZWNobyAkb3B0aW9uWyduYW1lJ107ID8+OjwvYj48YnIgLz4NCiAgICAgICAgICA8c2VsZWN0IGNsYXNzPSJhY2lsaXJfbGlzdGVsZXIiIG5hbWU9Im9wdGlvbls8P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ107ID8+XSI+DQogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPjw/cGhwIGVjaG8gJHRleHRfc2VsZWN0OyA/Pjwvb3B0aW9uPg0KICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJG9wdGlvblsncHJvZHVjdF9vcHRpb25fdmFsdWUnXSBhcyAkb3B0aW9uX3ZhbHVlKSB7ID8+DQogICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSI8P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlX2lkJ107ID8+IiBkYXRhLWltYWdlPSI8P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ2ltYWdlJ107ID8+Ij48P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ25hbWUnXTsgPz4NCiAgICAgICAgICAgIDw/cGhwIGlmICgkb3B0aW9uX3ZhbHVlWydwcmljZSddKSB7ID8+DQogICAgICAgICAgICAoPD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydwcmljZV9wcmVmaXgnXTsgPz48P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ3ByaWNlJ107ID8+KQ0KICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgPC9vcHRpb24+DQogICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgPC9zZWxlY3Q+DQogICAgICAgIDwvZGl2Pg0KDQogICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgPD9waHAgaWYgKCRvcHRpb25bJ3R5cGUnXSA9PSAncmFkaW8nKSB7ID8+DQogICAgICAgICAgPGRpdiBpZD0ib3B0aW9uLTw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25faWQnXTsgPz4iIGRhdGEtc2F5ZmE9Ijw/cGhwIGVjaG8gJG9wdGlvblsnc2F5ZmEnXTsgPz4iIGNsYXNzPSJvcHRpb24gb3B0aW9uLTw/cGhwIGVjaG8gJG9wdGlvblsndHlwZSddOyA/PiAgYWRpbTw/cGhwIGVjaG8gJG9wdGlvblsnc2F5ZmEnXTsgPz4iPg0KICAgICAgICAgICAgDQoJCQkgIA0KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJjbGVhcjpib3RoOyI+PC9kaXY+DQoNCiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0id2lkdGg6MTAwJTsgcGFkZGluZy10b3A6NXB4OyBtYXJnaW4tYm90dG9tOjEwcHg7IGJvcmRlci1ib3R0b206MXB4IGRhc2hlZCAjY2NjOyI+DQogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlnaHR5YXppc2IiPjxiPjw/cGhwIGVjaG8gJG9wdGlvblsnbmFtZSddOyA/PjwvYj48L3NwYW4+DQogICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPHVsIGlkPSJvcHRpb24tc2VjIj4NCg0KICAgICAgICAgIDw/cGhwICRpeD0xOyBmb3JlYWNoICgkb3B0aW9uWydwcm9kdWN0X29wdGlvbl92YWx1ZSddIGFzICRvcHRpb25fdmFsdWUpIHsgID8+DQogICAgICAgICAgICAgICAgPGxpPg0KCQkJCQk8ZGl2IGNsYXNzPSJsaXN0Ij4NCgkJCQkJCTxsYWJlbCBmb3I9Im9wdGlvbi12YWx1ZS08P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlX2lkJ107ID8+Ij4NCgkJCQkJCSAgPGltZyBzcmM9Ijw/cGhwIGVjaG8gJG9wdGlvbl92YWx1ZVsnaW1hZ2UnXTsgPz4iIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCIgYWx0PSI8P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ25hbWUnXTsgPz4iICBzdHlsZT0iaGVpZ2h0OiAxMDBweCAhIGltcG9ydGFudDsgbWFyZ2luLWJvdHRvbTotNXB4OyIgLz4NCgkJCQkJCTwvbGFiZWw+DQoJCQkJCTwvZGl2Pg0KCQkJCQk8ZGl2IGNsYXNzPSJsYWJlbC10aXRsZSI+DQoJCQkJCTxpbnB1dCBzdHlsZT0iZmxvYXQ6IGxlZnQiIGRhdGEtcHJpY2U9IiIgdHlwZT0icmFkaW8iIDw/cGhwIGVjaG8gKCRpeD09MSkgPyAiY2hlY2tlZCIgOiAiIjsgPz4gbmFtZT0ib3B0aW9uWzw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25faWQnXTsgPz5dIiB2YWx1ZT0iPD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydwcm9kdWN0X29wdGlvbl92YWx1ZV9pZCddOyA/PiIgZGF0YS1pbWFnZT0iPD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydpbWFnZSddOyA/PiIgaWQ9Im9wdGlvbi12YWx1ZS08P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlX2lkJ107ID8+IiAvPg0KICAgICAgICAgICAgICAgICAgIDxiPjw/cGhwIGVjaG8gJG9wdGlvbl92YWx1ZVsnbmFtZSddOyA/Pg0KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJG9wdGlvbl92YWx1ZVsncHJpY2UnXSkgeyA/Pg0KICAgICAgICAgICAgICAgICAgICAoPD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydwcmljZV9wcmVmaXgnXTsgPz48P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ3ByaWNlJ107ID8+KQ0KICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgICAgIDwvYj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgPC9saT4NCiAgICAgICAgICA8P3BocCAkaXgrKzsgJHhqKys7IH0gPz4NCiAgICAgICAgICAgIDwvdWw+DQoJCQk8ZGl2IHN0eWxlPSJjbGVhcjpib3RoOyI+PC9kaXY+DQoJCQkgPD9waHAgDQoJCQkgaWYgKCRvcHRpb25bJ3NheWZhX2Jhc2xpayddPT0xKSB7ID8+CQkJIA0KCQkJCTxkaXYgPg0KCQkJCQkgIDxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0O21hcmdpbi1sZWZ0OjVweDt3aWR0aDo0OSUiPg0KCQkJCQkJICA8P3BocCBpZiAoJG9wdGlvblsnc2F5ZmEnXT09ICRzYXlmYWxhbmRpcm1hKXsgPz4NCgkJCQkJCSAgPGJ1dHRvbiBpZD0ic2VwZXRlLWVrbGUiIGNsYXNzPSJidG4tZXZ5ZWxsb3ciIG5hbWU9IlNlcGV0ZUF0Ij48P3BocCBlY2hvICRlbnRyeV9zZXBldGVla2xlOyA/PjwvYnV0dG9uPiAgICAgICAgICAgICAgICAgIA0KCQkJCQkJICA8P3BocCB9ZWxzZXsgPz4NCgkJCQkJCSAgPGJ1dHRvbiBvbmNsaWNrPSJzYXlmYWxhKCc8P3BocCBlY2hvICRvcHRpb25bJ3NheWZhJ107ID8+JywnPD9waHAgZWNobyAkb3B0aW9uWydwcm9kdWN0X29wdGlvbl9pZCddOyA/PicsJysnKTsiIG5hbWU9IkRldmFtRXQiICBjbGFzcz0iYnRuLWV2eWVsbG93Ij48P3BocCBlY2hvICRlbnRyeV9kZXZhbTsgPz48L2J1dHRvbj4NCgkJCQkJCSAgPD9waHAgfSA/Pg0KCQkJCQkgIDwvZGl2Pg0KCQkJCQkgIDw/cGhwIGlmICgkb3B0aW9uWydzYXlmYSddPjEpeyA/Pg0KCQkJCQkgIDxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0O3dpZHRoOjQ5JSI+DQoJCQkJCQkgIDxidXR0b24gb25jbGljaz0ic2F5ZmFsYSgnPD9waHAgZWNobyAkb3B0aW9uWydzYXlmYSddOyA/PicsJzw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25faWQnXTsgPz4nLCctJyk7IiBuYW1lPSJHZXJpRG9uIiAgY2xhc3M9ImJ0bi1ldmJsdWUiPjw/cGhwIGVjaG8gJGVudHJ5X2dlcmlkb247ID8+PC9idXR0b24+DQoJCQkJCSAgPC9kaXY+DQoJCQkJCSAgPD9waHAgfWVsc2V7ID8+IA0KCQkJCQkgICA8ZGl2IHN0eWxlPSJmbG9hdDpyaWdodDt3aWR0aDo0OSUiPg0KCQkJCQkJICA8YnV0dG9uIG9uY2xpY2s9IiQuZmFuY3lib3guY2xvc2UoKTsiIG5hbWU9IkdlcmlEb24iIGlkPSJHZXJpRG9uIiAgY2xhc3M9ImJ0bi1ldmJsdWUiPjw/cGhwIGVjaG8gJGVudHJ5X2thcGF0OyA/PjwvYnV0dG9uPg0KCQkJCQkgIDwvZGl2PgkJCQkJICAJCQkJCSANCgkJCQkJICA8P3BocCB9ICA/Pg0KCQkJCTwvZGl2Pg0KCQkJCSAgPD9waHAgfSAgPz4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgDQogICAgICAgICAgDQogICAgICAgICAgDQogICAgICAgIDw/cGhwIGlmICgkb3B0aW9uWyd0eXBlJ10gPT0gJ2NoZWNrYm94JykgeyA/Pg0KICAgICAgICA8ZGl2IGlkPSJvcHRpb24tPD9waHAgZWNobyAkb3B0aW9uWydwcm9kdWN0X29wdGlvbl9pZCddOyA/PiIgY2xhc3M9Im9wdGlvbiBvcHRpb24tPD9waHAgZWNobyAkb3B0aW9uWyd0eXBlJ107ID8+Ij4NCiAgICAgICAgICA8P3BocCBpZiAoJG9wdGlvblsncmVxdWlyZWQnXSkgeyA/Pg0KICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+Kjwvc3Bhbj4NCiAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgPGI+PD9waHAgZWNobyAkb3B0aW9uWyduYW1lJ107ID8+OjwvYj48YnIgLz4NCiAgICAgICAgICA8P3BocCBmb3JlYWNoICgkb3B0aW9uWydwcm9kdWN0X29wdGlvbl92YWx1ZSddIGFzICRvcHRpb25fdmFsdWUpIHsgPz4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Im9wdGlvbls8P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ107ID8+XVtdIiB2YWx1ZT0iPD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydwcm9kdWN0X29wdGlvbl92YWx1ZV9pZCddOyA/PiIgZGF0YS1pbWFnZT0iPD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydpbWFnZSddOyA/PiIgaWQ9Im9wdGlvbi12YWx1ZS08P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlX2lkJ107ID8+IiAvPg0KICAgICAgICAgIDxsYWJlbCBmb3I9Im9wdGlvbi12YWx1ZS08P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlX2lkJ107ID8+Ij48P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ25hbWUnXTsgPz4NCiAgICAgICAgICAgIDw/cGhwIGlmICgkb3B0aW9uX3ZhbHVlWydwcmljZSddKSB7ID8+DQogICAgICAgICAgICAoPD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydwcmljZV9wcmVmaXgnXTsgPz48P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ3ByaWNlJ107ID8+KQ0KICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgIDwvbGFiZWw+DQogICAgICAgICAgPGJyIC8+DQogICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGJyIC8+DQogICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgPD9waHAgaWYgKCRvcHRpb25bJ3R5cGUnXSA9PSAnaW1hZ2UnKSB7ID8+DQogICAgICAgIDxkaXYgaWQ9Im9wdGlvbi08P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ107ID8+IiBjbGFzcz0ib3B0aW9uIG9wdGlvbi08P3BocCBlY2hvICRvcHRpb25bJ3R5cGUnXTsgPz4iPg0KICAgICAgICAgIDw/cGhwIGlmICgkb3B0aW9uWydyZXF1aXJlZCddKSB7ID8+DQogICAgICAgICAgPHNwYW4gY2xhc3M9InJlcXVpcmVkIj4qPC9zcGFuPg0KICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICA8Yj48P3BocCBlY2hvICRvcHRpb25bJ25hbWUnXTsgPz46PC9iPjxiciAvPg0KICAgICAgICAgIDx0YWJsZSBjbGFzcz0ib3B0aW9uLWltYWdlIj4NCiAgICAgICAgICAgIDw/cGhwICRpeD0xOyBmb3JlYWNoICgkb3B0aW9uWydwcm9kdWN0X29wdGlvbl92YWx1ZSddIGFzICRvcHRpb25fdmFsdWUpIHsgPz4NCiAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ3aWR0aDogMXB4OyI+DQogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Im9wdGlvbls8P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ107ID8+XSIgICAgdmFsdWU9Ijw/cGhwIGVjaG8gJG9wdGlvbl92YWx1ZVsncHJvZHVjdF9vcHRpb25fdmFsdWVfaWQnXTsgPz4iIGlkPSJvcHRpb24tdmFsdWUtPD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydwcm9kdWN0X29wdGlvbl92YWx1ZV9pZCddOyA/PiIgLz48L3RkPg0KICAgICAgICAgICAgICA8dGQ+PGxhYmVsIGZvcj0ib3B0aW9uLXZhbHVlLTw/cGhwIGVjaG8gJG9wdGlvbl92YWx1ZVsncHJvZHVjdF9vcHRpb25fdmFsdWVfaWQnXTsgPz4iPjxpbWcgc3JjPSI8P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ2ltYWdlJ107ID8+IiB3aWR0aD0iMjIwIiBoZWlnaHQ9IjEwMCIgYWx0PSI8P3BocCBlY2hvICRvcHRpb25fdmFsdWVbJ25hbWUnXSAuICgkb3B0aW9uX3ZhbHVlWydwcmljZSddID8gJyAnIC4gJG9wdGlvbl92YWx1ZVsncHJpY2VfcHJlZml4J10gLiAkb3B0aW9uX3ZhbHVlWydwcmljZSddIDogJycpOyA/PiIgLz48L2xhYmVsPjwvdGQ+DQogICAgICAgICAgICAgIDx0ZD48bGFiZWwgZm9yPSJvcHRpb24tdmFsdWUtPD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydwcm9kdWN0X29wdGlvbl92YWx1ZV9pZCddOyA/PiI+PD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWyduYW1lJ107ID8+DQogICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJG9wdGlvbl92YWx1ZVsncHJpY2UnXSkgeyA/Pg0KICAgICAgICAgICAgICAgICAgKDw/cGhwIGVjaG8gJG9wdGlvbl92YWx1ZVsncHJpY2VfcHJlZml4J107ID8+PD9waHAgZWNobyAkb3B0aW9uX3ZhbHVlWydwcmljZSddOyA/PikNCiAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgICAgICA8L2xhYmVsPjwvdGQ+DQogICAgICAgICAgICA8L3RyPg0KICAgICAgICAgICAgPD9waHAgJGl4Kys7IH0gPz4NCiAgICAgICAgICA8L3RhYmxlPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGJyIC8+DQogICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgPD9waHAgaWYgKCRvcHRpb25bJ3R5cGUnXSA9PSAndGV4dCcpIHsgPz4NCiAgICAgICAgPGRpdiBpZD0ib3B0aW9uLTw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25faWQnXTsgPz4iIGNsYXNzPSJvcHRpb24iPg0KICAgICAgICAgIDw/cGhwIGlmICgkb3B0aW9uWydyZXF1aXJlZCddKSB7ID8+DQogICAgICAgICAgPHNwYW4gY2xhc3M9InJlcXVpcmVkIj4qPC9zcGFuPg0KICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICA8Yj48P3BocCBlY2hvICRvcHRpb25bJ25hbWUnXTsgPz46PC9iPjxiciAvPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJvcHRpb25bPD9waHAgZWNobyAkb3B0aW9uWydwcm9kdWN0X29wdGlvbl9pZCddOyA/Pl0iIHZhbHVlPSIiIHBsYWNlaG9sZGVyPSI8P3BocCBlY2hvICRvcHRpb25bJ3BsYWNlaG9sZGVyJ107ID8+Ii8+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8YnIgLz4NCiAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICA8P3BocCBpZiAoJG9wdGlvblsndHlwZSddID09ICd0ZXh0YXJlYScpIHsgPz4NCiAgICAgICAgPGRpdiBpZD0ib3B0aW9uLTw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25faWQnXTsgPz4iIGNsYXNzPSJvcHRpb24iPg0KICAgICAgICAgIDw/cGhwIGlmICgkb3B0aW9uWydyZXF1aXJlZCddKSB7ID8+DQogICAgICAgICAgPHNwYW4gY2xhc3M9InJlcXVpcmVkIj4qPC9zcGFuPg0KICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICA8Yj48P3BocCBlY2hvICRvcHRpb25bJ25hbWUnXTsgPz46PC9iPjxiciAvPg0KICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJvcHRpb25bPD9waHAgZWNobyAkb3B0aW9uWydwcm9kdWN0X29wdGlvbl9pZCddOyA/Pl0iIGNvbHM9IjQwIiByb3dzPSI1Ij48P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlJ107ID8+PC90ZXh0YXJlYT4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxiciAvPg0KICAgICAgICA8P3BocCB9ID8+DQogICAgICAgIDw/cGhwIGlmICgkb3B0aW9uWyd0eXBlJ10gPT0gJ2ZpbGUnKSB7ID8+DQogICAgICAgIDxkaXYgaWQ9Im9wdGlvbi08P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ107ID8+IiBjbGFzcz0ib3B0aW9uIj4NCiAgICAgICAgICA8P3BocCBpZiAoJG9wdGlvblsncmVxdWlyZWQnXSkgeyA/Pg0KICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+Kjwvc3Bhbj4NCiAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgPGI+PD9waHAgZWNobyAkb3B0aW9uWyduYW1lJ107ID8+OjwvYj48YnIgLz4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPD9waHAgZWNobyAkYnV0dG9uX3VwbG9hZDsgPz4iIGlkPSJidXR0b24tb3B0aW9uLTw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25faWQnXTsgPz4iIGNsYXNzPSJidXR0b24iPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im9wdGlvbls8P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ107ID8+XSIgdmFsdWU9IiIgLz4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxiciAvPg0KICAgICAgICA8P3BocCB9ID8+DQogICAgICAgIDw/cGhwIGlmICgkb3B0aW9uWyd0eXBlJ10gPT0gJ2RhdGUnKSB7ID8+DQogICAgICAgIDxkaXYgaWQ9Im9wdGlvbi08P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ107ID8+IiBjbGFzcz0ib3B0aW9uIj4NCiAgICAgICAgICA8P3BocCBpZiAoJG9wdGlvblsncmVxdWlyZWQnXSkgeyA/Pg0KICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZXF1aXJlZCI+Kjwvc3Bhbj4NCiAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgPGI+PD9waHAgZWNobyAkb3B0aW9uWyduYW1lJ107ID8+OjwvYj48YnIgLz4NCiAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ib3B0aW9uWzw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25faWQnXTsgPz5dIiB2YWx1ZT0iPD9waHAgZWNobyAkb3B0aW9uWydwcm9kdWN0X29wdGlvbl92YWx1ZSddOyA/PiIgY2xhc3M9ImRhdGUiIC8+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8YnIgLz4NCiAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICA8P3BocCBpZiAoJG9wdGlvblsndHlwZSddID09ICdkYXRldGltZScpIHsgPz4NCiAgICAgICAgPGRpdiBpZD0ib3B0aW9uLTw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25faWQnXTsgPz4iIGNsYXNzPSJvcHRpb24iPg0KICAgICAgICAgIDw/cGhwIGlmICgkb3B0aW9uWydyZXF1aXJlZCddKSB7ID8+DQogICAgICAgICAgPHNwYW4gY2xhc3M9InJlcXVpcmVkIj4qPC9zcGFuPg0KICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICA8Yj48P3BocCBlY2hvICRvcHRpb25bJ25hbWUnXTsgPz46PC9iPjxiciAvPg0KICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJvcHRpb25bPD9waHAgZWNobyAkb3B0aW9uWydwcm9kdWN0X29wdGlvbl9pZCddOyA/Pl0iIHZhbHVlPSI8P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlJ107ID8+IiBjbGFzcz0iZGF0ZXRpbWUiIC8+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8YnIgLz4NCiAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICA8P3BocCBpZiAoJG9wdGlvblsndHlwZSddID09ICd0aW1lJykgeyA/Pg0KICAgICAgICA8ZGl2IGlkPSJvcHRpb24tPD9waHAgZWNobyAkb3B0aW9uWydwcm9kdWN0X29wdGlvbl9pZCddOyA/PiIgY2xhc3M9Im9wdGlvbiI+DQogICAgICAgICAgPD9waHAgaWYgKCRvcHRpb25bJ3JlcXVpcmVkJ10pIHsgPz4NCiAgICAgICAgICA8c3BhbiBjbGFzcz0icmVxdWlyZWQiPio8L3NwYW4+DQogICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgIDxiPjw/cGhwIGVjaG8gJG9wdGlvblsnbmFtZSddOyA/Pjo8L2I+PGJyIC8+DQogICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im9wdGlvbls8P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ107ID8+XSIgdmFsdWU9Ijw/cGhwIGVjaG8gJG9wdGlvblsncHJvZHVjdF9vcHRpb25fdmFsdWUnXTsgPz4iIGNsYXNzPSJ0aW1lIiAvPg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPGJyIC8+DQogICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgDQogICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgDQogICAgICAgIDw/cGhwIH0gPz4NCiAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCiAgICAgIDw/cGhwIH0gPz4NCgkJICAgPD9waHAgaWYgKCRyZWN1cnJpbmdzKSB7ID8+DQogICAgICAgICAgICA8aHI+DQogICAgICAgICAgICA8aDM+PD9waHAgZWNobyAkdGV4dF9wYXltZW50X3JlY3VycmluZyA/PjwvaDM+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIHJlcXVpcmVkIj4NCiAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJyZWN1cnJpbmdfaWQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiPg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+PD9waHAgZWNobyAkdGV4dF9zZWxlY3Q7ID8+PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJHJlY3VycmluZ3MgYXMgJHJlY3VycmluZykgeyA/Pg0KICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9Ijw/cGhwIGVjaG8gJHJlY3VycmluZ1sncmVjdXJyaW5nX2lkJ10gPz4iPjw/cGhwIGVjaG8gJHJlY3VycmluZ1snbmFtZSddID8+PC9vcHRpb24+DQogICAgICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgICA8L3NlbGVjdD4NCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVscC1ibG9jayIgaWQ9InJlY3VycmluZy1kZXNjcmlwdGlvbiI+PC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgIDxkaXYgaWQ9InBlcmRlLWhlc2FwIj4NCgkJDQoJCTwvZGl2Pg0KCQk8aW5wdXQgaWQ9InNheWZhLW5vIiB2YWx1ZT0iMSIgdHlwZT0iaGlkZGVuIj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgY2FydCA8P3BocCBlY2hvIGlzc2V0KCRsYWJlbHMpICYmIGlzX2FycmF5KCRsYWJlbHMpICYmIGlzc2V0KCRsYWJlbHNbJ291dG9mc3RvY2snXSkgPyAnb3V0b2ZzdG9jaycgOiAnJzsgPz4iPg0KICAgICAgICAgICAgICA8ZGl2Pg0KCQkJICAgICAgICAgICAgICAgIDw/cGhwIGlmKCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnaGlkZV9hZGRfdG9fY2FydF9idXR0b24nKSk6ID8+DQogICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnYWRkaXRpb25hbF9wcm9kdWN0X2VucXVpcnknLCBhcnJheSgpKSBhcyAkdGFiKTogPz4NCgkJCSAgPGRpdj48P3BocCBlY2hvICR0YWJbJ2NvbnRlbnQnXTsgPz48L2Rpdj4NCgkJCSAgPD9waHAgZW5kZm9yZWFjaDsgPz4NCgkJCSAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwcm9kdWN0X2lkIiB2YWx1ZT0iPD9waHAgZWNobyAkcHJvZHVjdF9pZDsgPz4iIC8+DQogICAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+DQoJCQkgIA0KCQkJDQoJCQkNCgkJCQ0KCQkJDQoJCQkgPCEtLTxkaXYgaWQ9Im1vYmlsZSIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTVweDsgY29sb3I6IzIzOEMwMDsiPg0KCQkJIDx1bCBzdHlsZT0ibGlzdC1zdHlsZS10eXBlOm5vbmU7IG1hcmdpbi1sZWZ0OjBweDsgcGFkZGluZy1sZWZ0OjBweDsiPg0KCQkJIA0KCQkJIDxsaT48aSBjbGFzcz0iZmEgZmEtY2FsZW5kYXIiPjwvaT4gPD9waHAgZWNobyAkZW50cnlfaXNndW51a2FyZ287ID8+PC9saT4NCgkJCSA8bGkgc3R5bGU9Im1hcmdpbi10b3A6N3B4OyI+PGkgY2xhc3M9ImZhcyBmYS1sb2NrIj48L2k+IDw/cGhwIGVjaG8gJGVudHJ5X2d1dmVubGlvZGVtZTsgPz48L2xpPg0KCQkJIDxsaSBzdHlsZT0ibWFyZ2luLXRvcDo3cHg7Ij48aSBjbGFzcz0iZmFzIGZhLWNyZWRpdC1jYXJkIj48L2k+IDw/cGhwIGVjaG8gJGVudHJ5X2tyZWRpa2FydGk7ID8+PC9saT4NCgkJCSA8bGkgc3R5bGU9Im1hcmdpbi10b3A6N3B4OyI+PGkgY2xhc3M9ImZhcyBmYS1jaGVjay1jaXJjbGUiPjwvaT4gPD9waHAgZWNobyAkZW50cnlfaGF2YWxlZWZ0b2RlbWU7ID8+PC9saT4NCgkJCSANCgkJCSA8L3VsPg0KCQkJIA0KCQkJIDwvZGl2Pi0tPg0KCQkJIA0KCQkJIA0KCQkJIA0KDQoJCQkgIA0KCQkJICANCgkJCSA8c3BhbiBjbGFzcz0icXR5Ij4NCiAgICAgICAgICAgICAgDQogICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJxdWFudGl0eSIgdmFsdWU9Ijw/cGhwIGVjaG8gJG1pbmltdW07ID8+IiBzaXplPSIyIiBkYXRhLW1pbi12YWx1ZT0iPD9waHAgZWNobyAkbWluaW11bTsgPz4iIGlkPSJpbnB1dC1xdWFudGl0eSIgY2xhc3M9ImZvcm0tY29udHJvbCIgLz4NCiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icHJvZHVjdF9pZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJHByb2R1Y3RfaWQ7ID8+IiAvPg0KICAgICAgICAgICAgICA8c2NyaXB0Pg0KIC8qIHF1YW50aXR5IGJ1dHRvbnMgKi8NCiAgICAgICAgICAgICAgICB2YXIgJGlucHV0ID0gJCgnLmNhcnQgaW5wdXRbbmFtZT0icXVhbnRpdHkiXScpOw0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHVwKCkgew0KICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IHBhcnNlSW50KCRpbnB1dC52YWwoKSwgMTApICsgMSB8fCBwYXJzZUludCgkaW5wdXQuYXR0cignZGF0YS1taW4tdmFsdWUnKSwgMTApOw0KICAgICAgICAgICAgICAgICAgJGlucHV0LnZhbCh2YWwpOw0KCQkJCSAgaGVzYXBsYTEyMygpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkb3duKCkgew0KICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IHBhcnNlSW50KCRpbnB1dC52YWwoKSwgMTApIC0gMSB8fCAwOw0KICAgICAgICAgICAgICAgICAgdmFyIG1pbiA9IHBhcnNlSW50KCRpbnB1dC5hdHRyKCdkYXRhLW1pbi12YWx1ZScpLCAxMCkgfHwgMTsNCiAgICAgICAgICAgICAgICAgICRpbnB1dC52YWwoTWF0aC5tYXgodmFsLCBtaW4pKTsNCgkJCQkgIGhlc2FwbGExMjMoKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJCgnPGEgaHJlZj0iamF2YXNjcmlwdDo7IiBjbGFzcz0iam91cm5hbC1zdGVwcGVyIj4tPC9hPicpLmluc2VydEJlZm9yZSgkaW5wdXQpLmNsaWNrKGRvd24pOw0KICAgICAgICAgICAgICAgICQoJzxhIGhyZWY9ImphdmFzY3JpcHQ6OyIgY2xhc3M9ImpvdXJuYWwtc3RlcHBlciI+KzwvYT4nKS5pbnNlcnRBZnRlcigkaW5wdXQpLmNsaWNrKHVwKTsNCiAgICAgICAgICAgICAgICAkaW5wdXQua2V5ZG93bihmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgICAgICAgaWYgKGUud2hpY2ggPT09IDM4KSB7DQogICAgICAgICAgICAgICAgICAgIHVwKCk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIGlmIChlLndoaWNoID09PSA0MCkgew0KICAgICAgICAgICAgICAgICAgICBkb3duKCk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgPC9zY3JpcHQ+DQo8L3NwYW4+DQoNCg0KICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG9uY2xpY2s9InBvcHVwX2FjKCkiIGlkPSJidXR0b24tY2FydCIgZGF0YS1sb2FkaW5nLXRleHQ9Ijw/cGhwIGVjaG8gJHRleHRfbG9hZGluZzsgPz4iIGNsYXNzPSJidXR0b24iPjxzcGFuIGNsYXNzPSJidXR0b24tY2FydC10ZXh0Ij48P3BocCBlY2hvICRidXR0b25fY2FydDsgPz48L3NwYW4+PC9idXR0b24+DQogICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICANCjxpbWcgc3R5bGU9Im1hcmdpbi10b3A6MjBweDsgd2lkdGg6MTAwJTsiIHNyYz0iaHR0cHM6Ly93d3cuc2FyYXlwZXJkZWhvbWUuY29tL2ltYWdlL2dyYWZpa2xlci91cnVuLXNheWZhc2ktaWNvbmxhci5wbmciPg0KCQkJICANCgkJICAgCSAgIDxhIGNsYXNzPSJmYW5jeWJveCIgaHJlZj0iI2ZiZmFuY3kiPjwvYT4NCgkJCTxhIGNsYXNzPSJmYW5jeWJveHgiIGhyZWY9IiNhZnRlci1zYXlmYSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPjwvYT4NCgkJCQ0KCQk8ZGl2IGlkPSJhZnRlci1zYXlmYSIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7aGVpZ2h0OiAzNXB4OyB3aWR0aDogMTAwJTsgcG9zaXRpb246IGFic29sdXRlOyBib3R0b206IDEwcHg7Ij4NCiAgICAgICAgICAgIDxhIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKCdpbmRleC5waHAnKSIgY2xhc3M9ImJ0bi1ldmJsdWUiIHN0eWxlPSJ3aWR0aDo0NSU7ZmxvYXQ6bGVmdCI+QWzEscWfdmVyacWfZSBEZXZhbSBFdDwvYT4NCiAgICAgICAgICAgIDxhIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKCdpbmRleC5waHA/cm91dGU9Y2hlY2tvdXQvY2FydCcpIiBjbGFzcz0iYnRuLWV2eWVsbG93IiBzdHlsZT0id2lkdGg6NDUlO2Zsb2F0OmxlZnQiPlNlcGV0ZSBHaXQ8L2E+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICANCiAgICAgICAgICA8c2NyaXB0Pg0KICAgICAgICAgIGZ1bmN0aW9uIGtvbnRyb2woKSB7DQogICAgICAgICAgICAgIHZhciBzZW4gPSAkKCcjc2VuJykudmFsKCk7DQogICAgICAgICAgICAgIHZhciBzYm95ID0gJCgnI3Nib3knKS52YWwoKTsNCiAgICAgICAgICAgICAgdmFyIGVuID0gJCgnI3BlbicpLnZhbCgpOw0KICAgICAgICAgICAgICB2YXIgYm95ID0gJCgnI3Bib3knKS52YWwoKTsNCiAgICAgICAgICAgICAgdmFyIGViYXQgPSAkKCcjcGViYXQnKS52YWwoKTsNCiAgICAgICAgICAgICAgDQoJCQkJaWYgKHNlbiA9PSAwKSB7DQoJCQkJCWFsZXJ0KCI8P3BocCBlY2hvICRlbnRyeV91eWFyaWVuOyA/PiIpOw0KCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJfQ0KCQkJICANCgkJCQlpZiAoc2JveSA9PTApIHsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIjw/cGhwIGVjaG8gJGVudHJ5X3V5YXJpYm95OyA/PiIpOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfSANCiAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmIChlbj09MCkgew0KICAgICAgICAgICAgICAgICAgICBhbGVydCgiPD9waHAgZWNobyAkZW50cnlfdXlhcmllbjsgPz4iKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0gDQoJCQkJCSAgDQogICAgICAgICAgICAgICAgaWYgKGJveSA9PTApIHsNCiAgICAgICAgICAgICAgICAgICAgYWxlcnQoIjw/cGhwIGVjaG8gJGVudHJ5X3V5YXJpYm95OyA/PiIpOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgaWYgKGViYXQgPCAxKSB7DQogICAgICAgICAgICAgICAgICAgIGFsZXJ0KCI8P3BocCBlY2hvICRlbnRyeV91eWFyaWViYXQ7ID8+Iik7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAvKiBhZGRUb0NhcnQoJzw/cGhwIGVjaG8gJHByb2R1Y3RfaWQ7ID8+Jyk7Ki8NCgkJCSAgIGFsZXJ0ICgic2VwZXRlIGVrbGljZW0uIGtvZHVtdSBhw6ciKTsNCiAgICAgICAgICAgICANCiAgICAgICAgICB9DQogICAgICAgICAgPC9zY3JpcHQ+DQogICAgICAgDQoJCSAgIDwvZGl2Pg0KCQkgIA0KICAgICAgICAgICAgPD9waHAgaWYgKCRtaW5pbXVtID4gMSkgeyA/Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtaW5mbyI+PGkgY2xhc3M9ImZhIGZhLWluZm8tY2lyY2xlIj48L2k+IDw/cGhwIGVjaG8gJHRleHRfbWluaW11bTsgPz48L2Rpdj4NCiAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Indpc2hsaXN0LWNvbXBhcmUiPg0KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlua3MiPg0KICAgICAgICAgICAgICAgICAgPGEgb25jbGljaz0iYWRkVG9XaXNoTGlzdCgnPD9waHAgZWNobyAkcHJvZHVjdF9pZDsgPz4nKTsiPjw/cGhwIGVjaG8gJGJ1dHRvbl93aXNobGlzdDsgPz48L2E+DQogICAgICAgICAgICAgICAgICA8YSBvbmNsaWNrPSJhZGRUb0NvbXBhcmUoJzw/cGhwIGVjaG8gJHByb2R1Y3RfaWQ7ID8+Jyk7Ij48P3BocCBlY2hvICRidXR0b25fY29tcGFyZTsgPz48L2E+DQogICAgICAgICAgICAgIDwvc3Bhbj4NCiAgICAgICAgICAgIDwvZGl2Pg0KCQkJDQoJCQkNCgkJCQ0KCQkJDQoJCQkgPD9waHAgaWYgKCRyZXZpZXdfc3RhdHVzKSB7ID8+DQogICAgICAgICAgPGRpdiBjbGFzcz0icmF0aW5nIj4NCiAgICAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luLWxlZnQ6LTIwcHg7IG1hcmdpbi10b3A6MXB4OyBtYXJnaW4tYm90dG9tOi01cHg7Ij4NCiAgICAgICAgICA8bGk+RXRlaywgYm9uY3VrIHZlIGRpxJ9lciBzZcOnZW5la2xlciAodmFyc2EpIDxzcGFuIHN0eWxlPSJjb2xvcjojREIxRDBEOyI+U2VwZXRlIEVrbGU8L3NwYW4+IGJ1dG9udW5hIHTEsWtsYWTEsWt0YW4gc29ucmEgYcOnxLFsYWNha3TEsXIuPC9saT4NCgkJICA8bGk+S3JlZGkga2FydMSxIHRha3NpdCBzZcOnZW5la2xlcmkgw7ZkZW1lIHNheWZhc8SxbmRhIGfDtnN0ZXJpbGVjZWt0aXIuPC9saT4NCgkJICA8bGk+U2lwYXJpxZ9pbml6bGUgaWxnaWxpIG5vdHVudXogdmFyc2Egw7ZkZW1lIHNheWZhc8SxbmRhIGJlbGlydGViaWxpcnNpbml6LjwvbGk+DQoJCSAgPC91bD4NCgkJICA8L2Rpdj4NCiAgICAgICAgICA8P3BocCB9ID8+DQoJCQkNCgkJCQ0KCQkJDQoJCQkNCgkJCQ0KCQkJDQoJCQkNCgkJCQ0KCQkJDQogICAgICAgICAgPD9waHAgaWYgKCRyZXZpZXdfc3RhdHVzKSB7ID8+DQogICAgICAgICAgPGRpdiBjbGFzcz0icmF0aW5nIj4NCiAgICAgICAgICAgIDxwPg0KICAgICAgICAgICAgICA8P3BocCBmb3IgKCRpID0gMTsgJGkgPD0gNTsgJGkrKykgeyA/Pg0KICAgICAgICAgICAgICA8P3BocCBpZiAoJHJhdGluZyA8ICRpKSB7ID8+DQogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmYSBmYS1zdGFjayI+PGkgY2xhc3M9ImZhIGZhLXN0YXItbyBmYS1zdGFjay0xeCI+PC9pPjwvc3Bhbj4NCiAgICAgICAgICAgICAgPD9waHAgfSBlbHNlIHsgPz4NCiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZhIGZhLXN0YWNrIj48aSBjbGFzcz0iZmEgZmEtc3RhciBmYS1zdGFjay0xeCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1zdGFyLW8gZmEtc3RhY2stMXgiPjwvaT48L3NwYW4+DQogICAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgICA8YSBocmVmPSIiIG9uY2xpY2s9IiQoJ2FbaHJlZj1cJyN0YWItcmV2aWV3XCddJykudHJpZ2dlcignY2xpY2snKTsgcmV0dXJuIGZhbHNlOyI+PD9waHAgZWNobyAkcmV2aWV3czsgPz48L2E+IC8gPGEgaHJlZj0iIiBvbmNsaWNrPSIkKCdhW2hyZWY9XCcjdGFiLXJldmlld1wnXScpLnRyaWdnZXIoJ2NsaWNrJyk7IHJldHVybiBmYWxzZTsiPjw/cGhwIGVjaG8gJHRleHRfd3JpdGU7ID8+PC9hPjwvcD4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICA8P3BocCBpZiAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaGFyZV9idXR0b25zX3N0YXR1cycpICYmICghSm91cm5hbDJDYWNoZTo6JG1vYmlsZV9kZXRlY3QtPmlzTW9iaWxlKCkgfHwgKEpvdXJuYWwyQ2FjaGU6OiRtb2JpbGVfZGV0ZWN0LT5pc01vYmlsZSgpICYmICEkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3NoYXJlX2J1dHRvbnNfZGlzYWJsZV9vbl9tb2JpbGUnLCAxKSkpICYmICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnc2hhcmVfYnV0dG9uc19wb3NpdGlvbicpID09PSAncmlnaHQnICYmIGNvdW50KCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnY29uZmlnX3NoYXJlX2J1dHRvbnMnLCBhcnJheSgpKSkpOiA/Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic29jaWFsIHNoYXJlLXRoaXMgPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3NoYXJlX2J1dHRvbnNfZGlzYWJsZV9vbl9tb2JpbGUnLCAxKSA/ICdoaWRlLW9uLW1vYmlsZScgOiAnJzsgPz4iPg0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzb2NpYWwtbG9hZGVkIj4NCiAgICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+dmFyIHN3aXRjaFRvNXg9dHJ1ZTs8L3NjcmlwdD4NCiAgICAgICAgICAgICAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3dzLnNoYXJldGhpcy5jb20vYnV0dG9uL2J1dHRvbnMuanMiPjwvc2NyaXB0Pg0KICAgICAgICAgICAgICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5zdExpZ2h0Lm9wdGlvbnMoe3B1Ymxpc2hlcjogIjw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaGFyZV9idXR0b25zX2FjY291bnRfa2V5Jyk7ID8+IiwgZG9Ob3RIYXNoOiB0cnVlLCBkb05vdENvcHk6IHRydWUsIGhhc2hBZGRyZXNzQmFyOiBmYWxzZX0pOzwvc2NyaXB0Pg0KICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnY29uZmlnX3NoYXJlX2J1dHRvbnMnLCBhcnJheSgpKSBhcyAkaXRlbSk6ID8+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Ijw/cGhwIGVjaG8gJGl0ZW1bJ2NsYXNzJ10gLiAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3NoYXJlX2J1dHRvbnNfc3R5bGUnKTsgPz4iIGRpc3BsYXlUZXh0PSI8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnc2hhcmVfYnV0dG9uc19zdHlsZScpID8gJGl0ZW1bJ25hbWUnXSA6ICcnOyA/PiI+PC9zcGFuPg0KICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+DQogICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnYWRkaXRpb25hbF9wcm9kdWN0X2Rlc2NyaXB0aW9uX2JvdHRvbScsIGFycmF5KCkpIGFzICR0YWIpOiA/Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iam91cm5hbC1jdXN0b20tdGFiIj4NCiAgICAgICAgICAgICAgPD9waHAgaWYgKCR0YWJbJ2hhc19pY29uJ10pOiA/Pg0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJibG9jay1pY29uIGJsb2NrLWljb24tbGVmdCIgc3R5bGU9Ijw/cGhwIGVjaG8gJHRhYlsnaWNvbl9jc3MnXTsgPz4iPjw/cGhwIGVjaG8gJHRhYlsnaWNvbiddOyA/PjwvZGl2Pg0KICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICAgICAgPD9waHAgaWYgKCR0YWJbJ25hbWUnXSk6ID8+DQogICAgICAgICAgICAgIDxoMz48P3BocCBlY2hvICR0YWJbJ25hbWUnXTsgPz48L2gzPg0KICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICAgICAgPD9waHAgZWNobyAkdGFiWydjb250ZW50J107ID8+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+DQogICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgIDw/cGhwIGlmICgkdGFncykgeyA/Pg0KICAgICAgPHAgY2xhc3M9InRhZ3MiPjxiPjw/cGhwIGVjaG8gJHRleHRfdGFnczsgPz48L2I+DQogICAgICAgIDw/cGhwIGZvciAoJGkgPSAwOyAkaSA8IGNvdW50KCR0YWdzKTsgJGkrKykgeyA/Pg0KICAgICAgICA8P3BocCBpZiAoJGkgPCAoY291bnQoJHRhZ3MpIC0gMSkpIHsgPz4NCiAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyAkdGFnc1skaV1bJ2hyZWYnXTsgPz4iPjw/cGhwIGVjaG8gJHRhZ3NbJGldWyd0YWcnXTsgPz48L2E+LA0KICAgICAgICA8P3BocCB9IGVsc2UgeyA/Pg0KICAgICAgICA8YSBocmVmPSI8P3BocCBlY2hvICR0YWdzWyRpXVsnaHJlZiddOyA/PiI+PD9waHAgZWNobyAkdGFnc1skaV1bJ3RhZyddOyA/PjwvYT4NCiAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICA8P3BocCB9ID8+DQogICAgICA8L3A+DQogICAgICA8P3BocCB9ID8+DQogICAgICA8P3BocCBpZiAoJHByb2R1Y3RzICYmICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncmVsYXRlZF9wcm9kdWN0c19zdGF0dXMnKSkgeyA/Pg0KICAgICAgPGRpdiBjbGFzcz0iYm94IHJlbGF0ZWQtcHJvZHVjdHMgPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3JlbGF0ZWRfcHJvZHVjdHNfY2Fyb3VzZWwnKSA/ICdqb3VybmFsLWNhcm91c2VsJyA6ICcnOyA/PiA8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncmVsYXRlZF9wcm9kdWN0c19jYXJvdXNlbCcpICYmICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncmVsYXRlZF9wcm9kdWN0c19jYXJvdXNlbF9hcnJvd3MnKSA9PT0gJ3RvcCcgPyAnYXJyb3dzLXRvcCcgOiAnJzsgPz4gPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3JlbGF0ZWRfcHJvZHVjdHNfY2Fyb3VzZWwnKSAmJiAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3JlbGF0ZWRfcHJvZHVjdHNfY2Fyb3VzZWxfYnVsbGV0cycpID8gJ2J1bGxldHMtb24nIDogJyc7ID8+Ij4NCiAgICAgICAgPGRpdj4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3gtaGVhZGluZyI+PD9waHAgZWNobyAkdGV4dF9yZWxhdGVkOyA/PjwvZGl2Pg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImJveC1wcm9kdWN0IGJveC1jb250ZW50Ij4NCiAgICAgICAgICA8P3BocCBpZiAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdyZWxhdGVkX3Byb2R1Y3RzX2Nhcm91c2VsJykpOiA/Pg0KICAgICAgICAgIDxkaXYgY2xhc3M9InN3aXBlciI+DQogICAgICAgICAgPGRpdiBjbGFzcz0ic3dpcGVyLWNvbnRhaW5lciIgPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3J0bCcpID8gJ2Rpcj0icnRsIicgOiAnJzsgPz4+DQogICAgICAgICAgPGRpdiBjbGFzcz0ic3dpcGVyLXdyYXBwZXIiPg0KICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJHByb2R1Y3RzIGFzICRwcm9kdWN0KSB7ID8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWdyaWQtaXRlbSBzd2lwZXItc2xpZGUgPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3JlbGF0ZWRfcHJvZHVjdHNfZ3JpZF9jbGFzc2VzJyk7ID8+IGRpc3BsYXktPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfZ3JpZF93aXNobGlzdF9pY29uX2Rpc3BsYXknKTsgPz4gPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3Byb2R1Y3RfZ3JpZF9idXR0b25fYmxvY2tfYnV0dG9uJyk7ID8+Ij4NCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC10aHVtYiBwcm9kdWN0LXdyYXBwZXIgPD9waHAgZWNobyBpc3NldCgkcHJvZHVjdFsnbGFiZWxzJ10pICYmIGlzX2FycmF5KCRwcm9kdWN0WydsYWJlbHMnXSkgJiYgaXNzZXQoJHByb2R1Y3RbJ2xhYmVscyddWydvdXRvZnN0b2NrJ10pID8gJ291dG9mc3RvY2snIDogJyc7ID8+Ij4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbWFnZSA8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnc2hvd19jb3VudGRvd24nLCAnbmV2ZXInKSAhPT0gJ25ldmVyJyAmJiBpc3NldCgkcHJvZHVjdFsnZGF0ZV9lbmQnXSkgJiYgJHByb2R1Y3RbJ2RhdGVfZW5kJ10gPyAnaGFzLWNvdW50ZG93bicgOiAnJzsgPz4iPg0KICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyAkcHJvZHVjdFsnaHJlZiddOyA/PiIgPD9waHAgaWYoaXNzZXQoJHByb2R1Y3RbJ3RodW1iMiddKSAmJiAkcHJvZHVjdFsndGh1bWIyJ10pOiA/PiBjbGFzcz0iaGFzLXNlY29uZC1pbWFnZSIgc3R5bGU9ImJhY2tncm91bmQ6IHVybCgnPD9waHAgZWNobyAkcHJvZHVjdFsndGh1bWIyJ107ID8+Jykgbm8tcmVwZWF0OyIgPD9waHAgZW5kaWY7ID8+Pg0KICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz0iZmlyc3QtaW1hZ2UiIHNyYz0iPD9waHAgZWNobyAkcHJvZHVjdFsndGh1bWInXTsgPz4iIHRpdGxlPSI8P3BocCBlY2hvICRwcm9kdWN0WyduYW1lJ107ID8+IiBhbHQ9Ijw/cGhwIGVjaG8gJHByb2R1Y3RbJ25hbWUnXTsgPz4iIC8+DQogICAgICAgICAgICAgICAgICA8L2E+DQogICAgICAgICAgICAgICAgICA8P3BocCBpZiAoaXNzZXQoJHByb2R1Y3RbJ2xhYmVscyddKSAmJiBpc19hcnJheSgkcHJvZHVjdFsnbGFiZWxzJ10pKTogPz4NCiAgICAgICAgICAgICAgICAgIDw/cGhwIGZvcmVhY2ggKCRwcm9kdWN0WydsYWJlbHMnXSBhcyAkbGFiZWwgPT4gJG5hbWUpOiA/Pg0KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsLTw/cGhwIGVjaG8gJGxhYmVsOyA/PiI+PGI+PD9waHAgZWNobyAkbmFtZTsgPz48L2I+PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4NCiAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgICAgICAgPD9waHAgaWYoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X2dyaWRfd2lzaGxpc3RfaWNvbl9wb3NpdGlvbicpID09PSAnaW1hZ2UnICYmICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncHJvZHVjdF9ncmlkX3dpc2hsaXN0X2ljb25fZGlzcGxheScsICcnKSA9PT0gJ2ljb24nKTogPz4NCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Indpc2hsaXN0Ij48YSBvbmNsaWNrPSJhZGRUb1dpc2hMaXN0KCc8P3BocCBlY2hvICRwcm9kdWN0Wydwcm9kdWN0X2lkJ107ID8+Jyk7IiBjbGFzcz0iaGludC0tdG9wIiBkYXRhLWhpbnQ9Ijw/cGhwIGVjaG8gJGJ1dHRvbl93aXNobGlzdDsgPz4iPjxpIGNsYXNzPSJ3aXNobGlzdC1pY29uIj48L2k+PHNwYW4gY2xhc3M9ImJ1dHRvbi13aXNobGlzdC10ZXh0Ij48P3BocCBlY2hvICRidXR0b25fd2lzaGxpc3Q7Pz48L3NwYW4+PC9hPjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29tcGFyZSI+PGEgb25jbGljaz0iYWRkVG9Db21wYXJlKCc8P3BocCBlY2hvICRwcm9kdWN0Wydwcm9kdWN0X2lkJ107ID8+Jyk7IiBjbGFzcz0iaGludC0tdG9wIiBkYXRhLWhpbnQ9Ijw/cGhwIGVjaG8gJGJ1dHRvbl9jb21wYXJlOyA/PiI+PGkgY2xhc3M9ImNvbXBhcmUtaWNvbiI+PC9pPjxzcGFuIGNsYXNzPSJidXR0b24tY29tcGFyZS10ZXh0Ij48P3BocCBlY2hvICRidXR0b25fY29tcGFyZTs/Pjwvc3Bhbj48L2E+PC9kaXY+DQogICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWRldGFpbHMiPg0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FwdGlvbiI+DQogICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0ibmFtZSI+PGEgaHJlZj0iPD9waHAgZWNobyAkcHJvZHVjdFsnaHJlZiddOyA/PiI+PD9waHAgZWNobyAkcHJvZHVjdFsnbmFtZSddOyA/PjwvYT48L2g0Pg0KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZGVzY3JpcHRpb24iPjw/cGhwIGVjaG8gJHByb2R1Y3RbJ2Rlc2NyaXB0aW9uJ107ID8+PC9wPg0KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHByb2R1Y3RbJ3JhdGluZyddKSB7ID8+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhdGluZyI+DQogICAgICAgICAgICAgICAgICAgICAgPD9waHAgZm9yICgkaSA9IDE7ICRpIDw9IDU7ICRpKyspIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHByb2R1Y3RbJ3JhdGluZyddIDwgJGkpIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmEgZmEtc3RhY2siPjxpIGNsYXNzPSJmYSBmYS1zdGFyLW8gZmEtc3RhY2stMngiPjwvaT48L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSBlbHNlIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmEgZmEtc3RhY2siPjxpIGNsYXNzPSJmYSBmYS1zdGFyIGZhLXN0YWNrLTJ4Ij48L2k+PGkgY2xhc3M9ImZhIGZhLXN0YXItbyBmYS1zdGFjay0yeCI+PC9pPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHByb2R1Y3RbJ3ByaWNlJ10pIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9InByaWNlIj4NCiAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoISRwcm9kdWN0WydzcGVjaWFsJ10pIHsgPz4NCiAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvICRwcm9kdWN0WydwcmljZSddOyA/Pg0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gZWxzZSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByaWNlLW9sZCI+PD9waHAgZWNobyAkcHJvZHVjdFsncHJpY2UnXTsgPz48L3NwYW4+IDxzcGFuIGNsYXNzPSJwcmljZS1uZXciIDw/cGhwIGVjaG8gaXNzZXQoJHByb2R1Y3RbJ2RhdGVfZW5kJ10pICYmICRwcm9kdWN0WydkYXRlX2VuZCddID8gImRhdGEtZW5kLWRhdGU9J3skcHJvZHVjdFsnZGF0ZV9lbmQnXX0nIiA6ICIiOyA/Pj48P3BocCBlY2hvICRwcm9kdWN0WydzcGVjaWFsJ107ID8+PC9zcGFuPg0KICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHByb2R1Y3RbJ3RheCddKSB7ID8+DQogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByaWNlLXRheCI+PD9waHAgZWNobyAkdGV4dF90YXg7ID8+IDw/cGhwIGVjaG8gJHByb2R1Y3RbJ3RheCddOyA/Pjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICA8P3BocCB9ID8+DQogICAgICAgICAgICAgICAgICAgIDwvcD4NCiAgICAgICAgICAgICAgICAgICAgPD9waHAgfSA/Pg0KICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoSm91cm5hbDJVdGlsczo6aXNFbnF1aXJ5UHJvZHVjdCgkdGhpcywgJHByb2R1Y3QpKTogPz4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FydCBlbnF1aXJ5LWJ1dHRvbiI+DQogICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpKb3VybmFsLm9wZW5Qb3B1cCgnPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ2VucXVpcnlfcG9wdXBfY29kZScpOyA/PicsICc8P3BocCBlY2hvICRwcm9kdWN0Wydwcm9kdWN0X2lkJ107ID8+Jyk7IiBkYXRhLWNsaz0iYWRkVG9DYXJ0KCc8P3BocCBlY2hvICRwcm9kdWN0Wydwcm9kdWN0X2lkJ107ID8+Jyk7IiBjbGFzcz0iYnV0dG9uIGhpbnQtLXRvcCIgZGF0YS1oaW50PSI8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnZW5xdWlyeV9idXR0b25fdGV4dCcpOyA/PiI+PD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ2VucXVpcnlfYnV0dG9uX2ljb24nKSAuICc8c3BhbiBjbGFzcz0iYnV0dG9uLWNhcnQtdGV4dCI+JyAuICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnZW5xdWlyeV9idXR0b25fdGV4dCcpIC4gJzwvc3Bhbj4nOyA/PjwvYT4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcnQgPD9waHAgZWNobyBpc3NldCgkcHJvZHVjdFsnbGFiZWxzJ10pICYmIGlzX2FycmF5KCRwcm9kdWN0WydsYWJlbHMnXSkgJiYgaXNzZXQoJHByb2R1Y3RbJ2xhYmVscyddWydvdXRvZnN0b2NrJ10pID8gJ291dG9mc3RvY2snIDogJyc7ID8+Ij4NCiAgICAgICAgICAgICAgICAgICAgICA8YSBvbmNsaWNrPSJhZGRUb0NhcnQoJzw/cGhwIGVjaG8gJHByb2R1Y3RbJ3Byb2R1Y3RfaWQnXTsgPz4nKTsiIGNsYXNzPSJidXR0b24gaGludC0tdG9wIiBkYXRhLWhpbnQ9Ijw/cGhwIGVjaG8gJGJ1dHRvbl9jYXJ0OyA/PiI+PGkgY2xhc3M9ImJ1dHRvbi1sZWZ0LWljb24iPjwvaT48c3BhbiBjbGFzcz0iYnV0dG9uLWNhcnQtdGV4dCI+PD9waHAgZWNobyAkYnV0dG9uX2NhcnQ7ID8+PC9zcGFuPjxpIGNsYXNzPSJidXR0b24tcmlnaHQtaWNvbiI+PC9pPjwvYT4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ3aXNobGlzdCI+PGEgb25jbGljaz0iYWRkVG9XaXNoTGlzdCgnPD9waHAgZWNobyAkcHJvZHVjdFsncHJvZHVjdF9pZCddOyA/PicpOyIgY2xhc3M9ImhpbnQtLXRvcCIgZGF0YS1oaW50PSI8P3BocCBlY2hvICRidXR0b25fd2lzaGxpc3Q7ID8+Ij48aSBjbGFzcz0id2lzaGxpc3QtaWNvbiI+PC9pPjxzcGFuIGNsYXNzPSJidXR0b24td2lzaGxpc3QtdGV4dCI+PD9waHAgZWNobyAkYnV0dG9uX3dpc2hsaXN0Oz8+PC9zcGFuPjwvYT48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29tcGFyZSI+PGEgb25jbGljaz0iYWRkVG9Db21wYXJlKCc8P3BocCBlY2hvICRwcm9kdWN0Wydwcm9kdWN0X2lkJ107ID8+Jyk7IiBjbGFzcz0iaGludC0tdG9wIiBkYXRhLWhpbnQ9Ijw/cGhwIGVjaG8gJGJ1dHRvbl9jb21wYXJlOyA/PiI+PGkgY2xhc3M9ImNvbXBhcmUtaWNvbiI+PC9pPjxzcGFuIGNsYXNzPSJidXR0b24tY29tcGFyZS10ZXh0Ij48P3BocCBlY2hvICRidXR0b25fY29tcGFyZTs/Pjwvc3Bhbj48L2E+PC9kaXY+DQogICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDw/cGhwIH0gPz4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8P3BocCBpZiAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdyZWxhdGVkX3Byb2R1Y3RzX2Nhcm91c2VsJykgJiYgJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdyZWxhdGVkX3Byb2R1Y3RzX2Nhcm91c2VsX2Fycm93cycpICE9PSAnbm9uZScpOiA/Pg0KICAgICAgICAgIDxkaXYgY2xhc3M9InN3aXBlci1idXR0b24tbmV4dCI+PC9kaXY+DQogICAgICAgICAgPGRpdiBjbGFzcz0ic3dpcGVyLWJ1dHRvbi1wcmV2Ij48L2Rpdj4NCiAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICA8P3BocCBpZiAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdyZWxhdGVkX3Byb2R1Y3RzX2Nhcm91c2VsJykgJiYgJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdyZWxhdGVkX3Byb2R1Y3RzX2Nhcm91c2VsX2J1bGxldHMnKSk6ID8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzd2lwZXItcGFnaW5hdGlvbiI+PC9kaXY+DQogICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgPC9kaXY+DQogICAgICA8P3BocCAvKiBlbmFibGUgY291bnRkb3duICovID8+DQogICAgICA8P3BocCBpZiAoJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdzaG93X2NvdW50ZG93bicsICduZXZlcicpICE9PSAnbmV2ZXInKTogPz4NCiAgICAgIDxzY3JpcHQ+DQogICAgICAgICQoJy5yZWxhdGVkLXByb2R1Y3RzIC5wcm9kdWN0LWdyaWQtaXRlbSA+IGRpdicpLmVhY2goZnVuY3Rpb24gKCkgew0KICAgICAgICAgIHZhciAkbmV3ID0gJCh0aGlzKS5maW5kKCcucHJpY2UtbmV3Jyk7DQogICAgICAgICAgaWYgKCRuZXcubGVuZ3RoICYmICRuZXcuYXR0cignZGF0YS1lbmQtZGF0ZScpKSB7DQogICAgICAgICAgICAkKHRoaXMpLmZpbmQoJy5pbWFnZScpLmFwcGVuZCgnPGRpdiBjbGFzcz0iY291bnRkb3duIj48L2Rpdj4nKTsNCiAgICAgICAgICB9DQogICAgICAgICAgSm91cm5hbC5jb3VudGRvd24oJCh0aGlzKS5maW5kKCcuY291bnRkb3duJyksICRuZXcuYXR0cignZGF0YS1lbmQtZGF0ZScpKTsNCiAgICAgICAgfSk7DQogICAgICA8L3NjcmlwdD4NCiAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgPD9waHAgaWYgKCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncmVsYXRlZF9wcm9kdWN0c19jYXJvdXNlbCcpKTogPz4NCiAgICAgIDw/cGhwDQogICAgICAkZ3JpZCA9IEpvdXJuYWwyVXRpbHM6OmdldEl0ZW1HcmlkKCR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncmVsYXRlZF9wcm9kdWN0c19pdGVtc19wZXJfcm93JyksICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgnc2l0ZV93aWR0aCcsIDEwMjQpLCAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ2NvbmZpZ19jb2x1bW5zX2NvdW50JykpOw0KICAgICAgJGdyaWQgPSBhcnJheSgNCiAgICAgICAgICBhcnJheSgwLCAoaW50KSRncmlkWyd4cyddKSwNCiAgICAgICAgICBhcnJheSg0NzAsIChpbnQpJGdyaWRbJ3NtJ10pLA0KICAgICAgICAgIGFycmF5KDc2MCwgKGludCkkZ3JpZFsnbWQnXSksDQogICAgICAgICAgYXJyYXkoOTgwLCAoaW50KSRncmlkWydsZyddKSwNCiAgICAgICAgICBhcnJheSgxMTAwLCAoaW50KSRncmlkWyd4bCddKSwNCiAgICAgICk7DQogICAgICA/Pg0KICAgICAgPHNjcmlwdD4NCiAgICAgICAgKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICB2YXIgZ3JpZCA9ICQucGFyc2VKU09OKCc8P3BocCBlY2hvIGpzb25fZW5jb2RlKCRncmlkKTsgPz4nKTsNCg0KICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gew0KICAgICAgICAgICAgNDcwOiB7DQogICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IGdyaWRbMF1bMV0sDQogICAgICAgICAgICAgIHNsaWRlc1Blckdyb3VwOiBncmlkWzBdWzFdDQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgNzYwOiB7DQogICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IGdyaWRbMV1bMV0sDQogICAgICAgICAgICAgIHNsaWRlc1Blckdyb3VwOiBncmlkWzFdWzFdDQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgOTgwOiB7DQogICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IGdyaWRbMl1bMV0sDQogICAgICAgICAgICAgIHNsaWRlc1Blckdyb3VwOiBncmlkWzJdWzFdDQogICAgICAgICAgICB9LA0KICAgICAgICAgICAgMTIyMDogew0KICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiBncmlkWzNdWzFdLA0KICAgICAgICAgICAgICBzbGlkZXNQZXJHcm91cDogZ3JpZFszXVsxXQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH07DQoNCiAgICAgICAgICB2YXIgb3B0cyA9IHsNCiAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IGdyaWRbNF1bMV0sDQogICAgICAgICAgICBzbGlkZXNQZXJHcm91cDogZ3JpZFs0XVsxXSwNCiAgICAgICAgICAgIGJyZWFrcG9pbnRzOiBicmVha3BvaW50cywNCiAgICAgICAgICAgIHNwYWNlQmV0d2VlbjogcGFyc2VJbnQoJzw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdwcm9kdWN0X2dyaWRfaXRlbV9zcGFjaW5nJywgJzIwJyk7ID8+JywgMTApLA0KICAgICAgICAgICAgcGFnaW5hdGlvbjogPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3JlbGF0ZWRfcHJvZHVjdHNfY2Fyb3VzZWxfYnVsbGV0cycpID8gJyQoXCcucmVsYXRlZC1wcm9kdWN0cyAuc3dpcGVyLXBhZ2luYXRpb25cJyknIDogJ2ZhbHNlJzsgPz4sDQogICAgICAgICAgICBwYWdpbmF0aW9uQ2xpY2thYmxlOiB0cnVlLA0KICAgICAgICAgICAgbmV4dEJ1dHRvbjogPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3JlbGF0ZWRfcHJvZHVjdHNfY2Fyb3VzZWxfYXJyb3dzJykgIT09ICdub25lJyA/ICckKFwnLnJlbGF0ZWQtcHJvZHVjdHMgLnN3aXBlci1idXR0b24tbmV4dFwnKScgOiAnZmFsc2UnOyA/PiwNCiAgICAgICAgICAgIHByZXZCdXR0b246IDw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdyZWxhdGVkX3Byb2R1Y3RzX2Nhcm91c2VsX2Fycm93cycpICE9PSAnbm9uZScgPyAnJChcJy5yZWxhdGVkLXByb2R1Y3RzIC5zd2lwZXItYnV0dG9uLXByZXZcJyknIDogJ2ZhbHNlJzsgPz4sDQogICAgICAgICAgICBhdXRvcGxheTogPD9waHAgZWNobyAkdGhpcy0+am91cm5hbDItPnNldHRpbmdzLT5nZXQoJ3JlbGF0ZWRfcHJvZHVjdHNfY2Fyb3VzZWxfYXV0b3BsYXknKSA+IDAgPyA0MDAwIDogJ2ZhbHNlJzsgPz4sDQogICAgICAgICAgICBhdXRvcGxheVN0b3BPbkhvdmVyOiA8P3BocCBlY2hvICR0aGlzLT5qb3VybmFsMi0+c2V0dGluZ3MtPmdldCgncmVsYXRlZF9wcm9kdWN0c19jYXJvdXNlbF9wYXVzZV9vbl9ob3ZlcicpID8gJ3RydWUnIDogJ2ZhbHNlJzsgPz4sDQogICAgICAgICAgICBzcGVlZDogNDAwLA0KICAgICAgICAgICAgdG91Y2hFdmVudHNUYXJnZXQ6IDw/cGhwIGVjaG8gJHRoaXMtPmpvdXJuYWwyLT5zZXR0aW5ncy0+Z2V0KCdyZWxhdGVkX3Byb2R1Y3RzX2Nhcm91c2VsX3RvdWNoZHJhZycpICA/ICdcJ2NvbnRhaW5lclwnJyA6ICdmYWxzZSc7ID8+LA0KICAgICAgICAgIH07DQoNCiAgICAgICAgICAkKCcucmVsYXRlZC1wcm9kdWN0cyAuc3dpcGVyLWNvbnRhaW5lcicpLnN3aXBlcihvcHRzKTsNCiAgICAgICAgfSkoKTsNCiAgICAgIDwvc2NyaXB0Pg0KICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICA8P3BocCB9ID8+DQogICAgICA8P3BocCBlY2hvICRjb250ZW50X2JvdHRvbTsgPz48L2Rpdj4NCiAgICA8L2Rpdj4NCjwvZGl2Pg0KICAgIA0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0NCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgew0KICAgICQoIi5mYW5jeWJveCIpLmZhbmN5Ym94KCk7DQp9KTsNCiAgICAkKCdbZGF0YS1zYXlmYV0nKS5oaWRlKCk7DQogICAgJCgnW2RhdGEtc2F5ZmE9IjEiXScpLnNob3coKTsNCiAgICB2YXIgc2F5ZmEgPSAxOw0KICAgICQoJyNzYXlmYS1ubycpLnZhbChzYXlmYSk7DQogICAgJCgnI29uY2VraS1zYXlmYScpLmhpZGUoKTsNCg0KICAgIHZhciBpdGVtcyA9IHt9Ow0KICAgICQoJ2RpdltkYXRhLXNheWZhXScpLmVhY2goZnVuY3Rpb24oKSB7DQogICAgICAgIGl0ZW1zWyQodGhpcykuYXR0cignZGF0YS1zYXlmYScpXSA9IHRydWU7DQogICAgfSk7DQoNCiAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KCk7DQogICAgZm9yKHZhciBpIGluIGl0ZW1zKQ0KICAgIHsNCiAgICAgICAgcmVzdWx0LnB1c2goaSk7DQogICAgfQ0KICAgIHZhciB0b3RhbFBhZ2VzID0gcmVzdWx0Lmxlbmd0aDsNCg0KICAgIGZ1bmN0aW9uIHNvbnJha2koKSB7DQovKg0KICAgICAgICA8P3BocCBpZiAoJG9wdGlvbnMpIHsgPz4NCiAgICAgICAgPD9waHAgZm9yZWFjaCAoJG9wdGlvbnMgYXMgJG9wdGlvbikgeyA/Pg0KICAgICAgICA8P3BocCBpZiAoJG9wdGlvblsndHlwZSddID09ICdyYWRpbycpIHsgPz4NCg0KICAgICAgICAgICAgICAgIHZhciAgdmVyaSA9ICQoJ2lucHV0W25hbWU9Im9wdGlvbls8P3BocCBlY2hvICRvcHRpb25bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ107ID8+XSJdOmNoZWNrZWQnKS5sZW5ndGg7DQogICAgICAgICAgICAgICAgICAgIGlmIChzYXlmYSA9PSA8P3BocCBlY2hvICRvcHRpb25bJ3NheWZhJ107ID8+KQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyaSA9PSAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoIkRpa2thdCEgTMO8dGZlbiB6b3J1bmx1IGFsYW5sYXLEsSBib8WfIGLEsXJha21hecSxbsSxei4iKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgPD9waHAgfSB9IH0gPz4NCiovDQogICAgICAgIGlmICh0b3RhbFBhZ2VzICE9IHNheWZhKXsNCiAgICAgICAgICAgICQoJyNvbmNla2ktc2F5ZmEnKS5zaG93KCk7DQogICAgICAgICAgICAkKCdbZGF0YS1zYXlmYT0iJyArIHNheWZhICsgJyJdJykuaGlkZSgpOw0KICAgICAgICAgICAgJCgnW2RhdGEtc2F5ZmE9IicgKyggIHNheWZhICsgMSApKyAnIl0nKS5zaG93KCk7DQogICAgICAgICAgIHNheWZhKys7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAodG90YWxQYWdlcyA9PSBzYXlmYSkgew0KICAgICAgICAgICAgJCgnI3NvbnJha2ktc2F5ZmEnKS5oaWRlKCk7DQogICAgICAgICAgICAkKCcjc2VwZXRlLWVrbGUnKS5zaG93KCk7DQoNCiAgICAgICAgfQ0KICAgIH0NCg0KDQoNCiAgICBmdW5jdGlvbiBvbmNla2koKXsNCiAgICAgICAgaWYgKHNheWZhICE9IDEpIHsNCiAgICAgICAgICAgICQoJyNzb25yYWtpLXNheWZhJykuc2hvdygpOw0KICAgICAgICAgICAgJCgnW2RhdGEtc2F5ZmE9IicgKyBzYXlmYSArICciXScpLmhpZGUoKTsNCiAgICAgICAgICAgICQoJ1tkYXRhLXNheWZhPSInICsgKHNheWZhIC0gMSkgKyAnIl0nKS5zaG93KCk7DQogICAgICAgICAgICBzYXlmYS0tOw0KICAgICAgICAgICAgJCgnI3NlcGV0ZS1la2xlJykuaGlkZSgpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHNheWZhID09IDEpDQogICAgICAgICAgICAkKCcjb25jZWtpLXNheWZhJykuaGlkZSgpOw0KICAgIH0NCg0KDQovLy0tPjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0NCg0KZnVuY3Rpb24gcG9wdXBfYWMoKXsNCiAgICB2YXIgc2VuID0gJCgnI3NlbicpLnZhbCgpOw0KICAgIHZhciBzYm95ID0gJCgnI3Nib3knKS52YWwoKTsNCiAgICB2YXIgZW4gPSAkKCcjcGVuJykudmFsKCk7DQogICAgdmFyIGJveSA9ICQoJyNwYm95JykudmFsKCk7DQogICAgdmFyIGViYXQgPSAkKCcjcGViYXQnKS52YWwoKTsNCiAgICANCiAgICAgICAgaWYgKHNlbiA8IDEpIHsNCiAgICAgICAgICAgIGFsZXJ0KCI8P3BocCBlY2hvICRlbnRyeV91eWFyaWVuOyA/PiIpOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9IGVsc2UgaWYgKHNib3kgPCAxKSB7DQoJCQlhbGVydCgiPD9waHAgZWNobyAkZW50cnlfdXlhcmlib3k7ID8+Iik7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CQ0KCQl9IGVsc2UgaWYgKGVuIDwgMSkgew0KCQkJYWxlcnQoIjw/cGhwIGVjaG8gJGVudHJ5X3V5YXJpZW47ID8+Iik7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CQ0KCQl9IGVsc2UgaWYgKGJveSA8IDEpIHsNCgkJCWFsZXJ0KCI8P3BocCBlY2hvICRlbnRyeV91eWFyaWVuOyA/PiIpOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwkNCgkJfWVsc2UgaWYgKGViYXQgPCAxKSB7DQoJCQlhbGVydCgiPD9waHAgZWNobyAkZW50cnlfdXlhcmllYmF0OyA/PiIpOw0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwkNCgkJfWVsc2V7DQoJCQkNCgkJCTw/cGhwIGlmIChpc3NldCgkb3B0aW9uKSkgeyA/Pg0KCQkJCQkJCQkJDQoJCQkJCWlmICgkKCJbbmFtZT0nb3B0aW9uWzw/cGhwIGVjaG8gJGhhdGFfaWRfbGVyWzBdOyA/Pl0nXSIpLnZhbCgpID09IiIpew0KCQkJCQkJYWxlcnQoIjw/cGhwIGVjaG8gJGVudHJ5X21vbnRhanl1a3Nla2xpZ2l1eWFyaTsgPz4iKTsNCiAgICAgICAgICAgIAkJCXJldHVybiBmYWxzZTsNCgkJCQkJfWVsc2UgaWYgKCQoIltuYW1lPSdvcHRpb25bPD9waHAgZWNobyAkaGF0YV9pZF9sZXJbMV07ID8+XSddIikudmFsKCkgPT0iIil7DQoJCQkJCQlhbGVydCgiPD9waHAgZWNobyAkZW50cnlfcGVyZGVjZXJjZXZldXlhcmk7ID8+Iik7DQogICAgICAgICAgICAJCQlyZXR1cm4gZmFsc2U7DQoJCQkJCX1lbHNlIGlmICgkKCJbbmFtZT0nb3B0aW9uWzw/cGhwIGVjaG8gJGhhdGFfaWRfbGVyWzJdOyA/Pl0nXSIpLnZhbCgpID09IiIpew0KCQkJCQkJYWxlcnQoIjw/cGhwIGVjaG8gJGVudHJ5X25lcmV5ZXRha2lsYWNha3V5YXJpOyA/PiIpOw0KICAgICAgICAgICAgCQkJcmV0dXJuIGZhbHNlOw0KCQkJCQl9ZWxzZSBpZiAoJCgiW25hbWU9J29wdGlvbls8P3BocCBlY2hvICRoYXRhX2lkX2xlclszXTsgPz5dJ10iKS52YWwoKSA9PSIiKXsNCgkJCQkJCWFsZXJ0KCI8P3BocCBlY2hvICRlbnRyeV9kaWdlcnBlcmRldXlhcmk7ID8+Iik7DQogICAgICAgICAgICAJCQlyZXR1cm4gZmFsc2U7DQoJCQkJCS8vfWVsc2UgaWYgKCQoIltuYW1lPSdvcHRpb25bPD9waHAgZWNobyAkaGF0YV9pZF9sZXJbNF07ID8+XSddIikudmFsKCkgPT0iIil7DQoJCQkJCQkvL2FsZXJ0KCJEacSfZXIgUGVyZGUgQmlsZ2lzaW5pIGdpcm1lZGluaXoiKTsNCiAgICAgICAgICAgIAkJCS8vcmV0dXJuIGZhbHNlOw0KCQkJCQl9ZWxzZXsNCgkJCQkJCTw/cGhwIGlmICgkcG9wdXBfYWNfbmV3KSB7ID8+DQoJCQkNCiAgICAgICAgICAgCQkJCQkkKCcuZmFuY3lib3gnKS50cmlnZ2VyKCdjbGljaycpOw0KCQkJCSAJCQkkKCcjc3RpY2t5LXdyYXBwZXInKS5yZW1vdmVDbGFzcygnc3RpY2t5LXdyYXBwZXInKTsNCgkJCQkJCTw/cGhwIH1lbHNleyA/Pg0KCQkJCQkJCXNlcGV0ZUVrbGUoKTsNCgkJCQkJCTw/cGhwIH0gPz4NCgkJCQkJfQ0KICAgICAgICAgICAgPD9waHAgfWVsc2V7ID8+DQoJCQkJc2VwZXRlRWtsZSgpOw0KCQkJPD9waHAgfSA/Pg0KCQl9DQoJCQ0KICAgICAgIA0KICANCn0NCg0KZnVuY3Rpb24gc2VwZXRlRWtsZSgpew0KICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgdXJsOiAnaW5kZXgucGhwP3JvdXRlPWNoZWNrb3V0L2NhcnQvYWRkJywNCiAgICAgICAgICAgIHR5cGU6ICdwb3N0JywNCiAgICAgICAgICAgIGRhdGE6ICQoJyNwcm9kdWN0IGlucHV0W3R5cGU9XCd0ZXh0XCddLCAjZmFuY3lib3gtd3JhcCBpbnB1dFt0eXBlPVwndGV4dFwnXSwgI2ZhbmN5Ym94LXdyYXAgaW5wdXRbdHlwZT1cJ3JhZGlvXCddOmNoZWNrZWQsICNwcm9kdWN0IGlucHV0W3R5cGU9XCdoaWRkZW5cJ10sICNwcm9kdWN0IGlucHV0W3R5cGU9XCdyYWRpb1wnXTpjaGVja2VkLCAjcHJvZHVjdCBpbnB1dFt0eXBlPVwnY2hlY2tib3hcJ106Y2hlY2tlZCwgI3Byb2R1Y3Qgc2VsZWN0LCAjcHJvZHVjdCB0ZXh0YXJlYScpLA0KICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJywNCiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGpzb24pIHsNCiAgICAgICAgICAgICAgICAkKCcuc3VjY2VzcywgLndhcm5pbmcsIC5hdHRlbnRpb24sIGluZm9ybWF0aW9uLCAuZXJyb3InKS5yZW1vdmUoKTsNCg0KICAgICAgICAgICAgICAgIGlmIChqc29uWydlcnJvciddKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChqc29uWydlcnJvciddWydvcHRpb24nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpIGluIGpzb25bJ2Vycm9yJ11bJ29wdGlvbiddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI29wdGlvbi0nICsgaSkuYWZ0ZXIoJzxzcGFuIGNsYXNzPSJlcnJvciI+JyArIGpzb25bJ2Vycm9yJ11bJ29wdGlvbiddW2ldICsgJzwvc3Bhbj4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIGlmIChqc29uWydlcnJvciddWydwcm9maWxlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICQoJ3NlbGVjdFtuYW1lPSJwcm9maWxlX2lkIl0nKS5hZnRlcignPHNwYW4gY2xhc3M9ImVycm9yIj4nICsganNvblsnZXJyb3InXVsncHJvZmlsZSddICsgJzwvc3Bhbj4nKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmIChqc29uWydzdWNjZXNzJ10pIHsNCgkJCQkJDQoJCQkJCQ0KCQkJCQkNCgkJCQkJDQogICAgICAgICAgICAgICAgICAgJCgiI0dlcmlEb24iKS50cmlnZ2VyKCJjbGljayIpOw0KLyoNCiAgICAgICAgICAgICAgICAgICAgaWYgKCFKb3VybmFsLnNob3dOb3RpZmljYXRpb24oanNvblsnc3VjY2VzcyddLCBqc29uWydpbWFnZSddKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJCgnI25vdGlmaWNhdGlvbicpLmh0bWwoJzxkaXYgY2xhc3M9InN1Y2Nlc3MiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+JyArIGpzb25bJ3N1Y2Nlc3MnXSArICc8aW1nIHNyYz0iY2F0YWxvZy92aWV3L3RoZW1lL2RlZmF1bHQvaW1hZ2UvY2xvc2UucG5nIiBhbHQ9IiIgY2xhc3M9ImNsb3NlIiAvPjwvZGl2PicpOw0KICAgICAgICAgICAgICAgICAgICB9DQoqLw0KICAgICAgICAgICAgICAgICAgICAvLyQoJyNmYmZhbmN5Qm94JykuaGlkZSgpOw0KICAgICAgICAgICAgICAgICAgICAkKCcuc3VjY2VzcycpLmZhZGVJbignc2xvdycpOw0KDQogICAgICAgICAgICAgICAgICAgICQoJyNjYXJ0LXRvdGFsJykuaHRtbChqc29uWyd0b3RhbCddKTsNCgkJCQkJLy93aW5kb3cubG9jYXRpb24gPSAnaW5kZXgucGhwP3JvdXRlPWNoZWNrb3V0L2NhcnQnOw0KICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9ICdpbmRleC5waHA/cm91dGU9Y2hlY2tvdXQvY2FydCc7DQoJCQkJLyoNCiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb25bJ3JlZGlyZWN0J10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uID0ganNvblsncmVkaXJlY3QnXTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KCQkJCQkqLw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQp9DQoNCiAgICAkKCcjc2VwZXRlLWVrbGUnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KCQ0KICAgICAgICBpZiAoJCgnLmhpZGUtY2FydCAucmlnaHQgLmNhcnQub3V0b2ZzdG9jaycpLmxlbmd0aCkgeyByZXR1cm4gZmFsc2U7ICB9DQoJCQ0KICAgICAgICAkLmFqYXgoew0KICAgICAgICAgICAgdXJsOiAnaW5kZXgucGhwP3JvdXRlPWNoZWNrb3V0L2NhcnQvYWRkJywNCiAgICAgICAgICAgIHR5cGU6ICdwb3N0JywNCiAgICAgICAgICAgIGRhdGE6ICQoJyNwcm9kdWN0IGlucHV0W3R5cGU9XCd0ZXh0XCddLCAjc2VjZW5la2xlciBpbnB1dFt0eXBlPVwndGV4dFwnXSwgI3NlY2VuZWtsZXIgaW5wdXRbdHlwZT1cJ3JhZGlvXCddOmNoZWNrZWQsICNzZWNlbmVrbGVyMiBpbnB1dFt0eXBlPVwndGV4dFwnXSwgI3NlY2VuZWtsZXIyIGlucHV0W3R5cGU9XCdyYWRpb1wnXTpjaGVja2VkLCAjcHJvZHVjdCBpbnB1dFt0eXBlPVwnaGlkZGVuXCddLCAjcHJvZHVjdCBpbnB1dFt0eXBlPVwncmFkaW9cJ106Y2hlY2tlZCwgI3Byb2R1Y3QgaW5wdXRbdHlwZT1cJ2NoZWNrYm94XCddOmNoZWNrZWQsICNwcm9kdWN0IHNlbGVjdCwgI3Byb2R1Y3QgdGV4dGFyZWEnKSwNCiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsDQogICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihqc29uKSB7DQogICAgICAgICAgICAgICAgJCgnLnN1Y2Nlc3MsIC53YXJuaW5nLCAuYXR0ZW50aW9uLCBpbmZvcm1hdGlvbiwgLmVycm9yJykucmVtb3ZlKCk7DQoNCiAgICAgICAgICAgICAgICBpZiAoanNvblsnZXJyb3InXSkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoanNvblsnZXJyb3InXVsnb3B0aW9uJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSBpbiBqc29uWydlcnJvciddWydvcHRpb24nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNvcHRpb24tJyArIGkpLmFmdGVyKCc8c3BhbiBjbGFzcz0iZXJyb3IiPicgKyBqc29uWydlcnJvciddWydvcHRpb24nXVtpXSArICc8L3NwYW4+Jyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICBpZiAoanNvblsnZXJyb3InXVsncHJvZmlsZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkKCdzZWxlY3RbbmFtZT0icHJvZmlsZV9pZCJdJykuYWZ0ZXIoJzxzcGFuIGNsYXNzPSJlcnJvciI+JyArIGpzb25bJ2Vycm9yJ11bJ3Byb2ZpbGUnXSArICc8L3NwYW4+Jyk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAoanNvblsnc3VjY2VzcyddKSB7DQoNCiAgICAgICAgICAgICAgICAgICAvKiAkLmZhbmN5Ym94LmNsb3NlKCk7DQoNCiAgICAgICAgICAgICAgICAgICAgJCgnI25vdGlmaWNhdGlvbicpLmh0bWwoJzxkaXYgY2xhc3M9InN1Y2Nlc3MiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+JyArIGpzb25bJ3N1Y2Nlc3MnXSArICc8aSBjbGFzcz0iZmEgZmEtdGltZXMiPjwvaT48L2Rpdj4nKTsNCg0KICAgICAgICAgICAgICAgICAgICAkKCcuc3VjY2VzcycpLmZhZGVJbignc2xvdycpOw0KDQogICAgICAgICAgICAgICAgICAgICQoJyNjYXJ0LXRvdGFsJykuaHRtbChqc29uWyd0b3RhbCddKTsNCg0KICAgICAgICAgICAgICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7IHNjcm9sbFRvcDogMCB9LCAnc2xvdycpOw0KCQkJCQkNCgkJCQkJJCgnLmZhbmN5Ym94eCcpLmZhbmN5Ym94KHsNCg0KCQkJCQkJICAgIGZpdFRvVmlldyA6IHRydWUsDQoJCQkJCQkgICAgYXV0b1NpemUgOiB0cnVlLA0KCQkJCQkJCWJlZm9yZVNob3c6IGZ1bmN0aW9uKCl7DQoNCgkJCQkJCQl9DQoJCQkJCX0pLnRyaWdnZXIoImNsaWNrIik7Ki8NCgkJCQkJDQoJCQkJCWxvY2F0aW9uID0gJ2luZGV4LnBocD9yb3V0ZT1jaGVja291dC9jYXJ0JzsNCgkJCQkJDQogICAgICAgICAgICAgICAgICAgIGlmIChqc29uWydyZWRpcmVjdCddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IGpzb25bJ3JlZGlyZWN0J107DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICAkLmNvbG9yYm94KHtpbmxpbmU6dHJ1ZSwgd2lkdGggOiAnNTM1cHgnLCAnaGVpZ2h0JzogJzE1MHB4JywgaHJlZjogJyNhZnRlci1zYXlmYScsICBvcGVuOiB0cnVlLCBvcGFjaXR5OiAwLjd9KS5yZXNpemUoKTsNCg0KICAgIH0pOw0KDQoJLy8tLT48L3NjcmlwdD4JDQoJDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQ0KJCgnc2VsZWN0W25hbWU9XCdyZWN1cnJpbmdfaWRcJ10sIGlucHV0W25hbWU9InF1YW50aXR5Il0nKS5jaGFuZ2UoZnVuY3Rpb24oKXsNCgkkLmFqYXgoew0KCQl1cmw6ICdpbmRleC5waHA/cm91dGU9cHJvZHVjdC9wcm9kdWN0L2dldFJlY3VycmluZ0Rlc2NyaXB0aW9uJywNCgkJdHlwZTogJ3Bvc3QnLA0KCQlkYXRhOiAkKCdpbnB1dFtuYW1lPVwncHJvZHVjdF9pZFwnXSwgaW5wdXRbbmFtZT1cJ3F1YW50aXR5XCddLCBzZWxlY3RbbmFtZT1cJ3JlY3VycmluZ19pZFwnXScpLA0KCQlkYXRhVHlwZTogJ2pzb24nLA0KCQliZWZvcmVTZW5kOiBmdW5jdGlvbigpIHsNCgkJCSQoJyNyZWN1cnJpbmctZGVzY3JpcHRpb24nKS5odG1sKCcnKTsNCgkJfSwNCgkJc3VjY2VzczogZnVuY3Rpb24oanNvbikgew0KCQkJJCgnLmFsZXJ0LCAudGV4dC1kYW5nZXInKS5yZW1vdmUoKTsNCgkJCQ0KCQkJaWYgKGpzb25bJ3N1Y2Nlc3MnXSkgew0KCQkJCSQoJyNyZWN1cnJpbmctZGVzY3JpcHRpb24nKS5odG1sKGpzb25bJ3N1Y2Nlc3MnXSk7DQoJCQl9DQoJCX0NCgl9KTsNCn0pOw0KLy8tLT48L3NjcmlwdD4gDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQ0KJCgnLmRhdGUnKS5kYXRldGltZXBpY2tlcih7DQoJcGlja1RpbWU6IGZhbHNlDQp9KTsNCg0KJCgnLmRhdGV0aW1lJykuZGF0ZXRpbWVwaWNrZXIoew0KCXBpY2tEYXRlOiB0cnVlLA0KCXBpY2tUaW1lOiB0cnVlDQp9KTsNCg0KJCgnLnRpbWUnKS5kYXRldGltZXBpY2tlcih7DQoJcGlja0RhdGU6IGZhbHNlDQp9KTsNCg0KJCgnYnV0dG9uW2lkXj1cJ2J1dHRvbi11cGxvYWRcJ10nKS5vbignY2xpY2snLCBmdW5jdGlvbigpIHsNCgl2YXIgbm9kZSA9IHRoaXM7DQoJDQoJJCgnI2Zvcm0tdXBsb2FkJykucmVtb3ZlKCk7DQoJDQoJJCgnYm9keScpLnByZXBlbmQoJzxmb3JtIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGlkPSJmb3JtLXVwbG9hZCIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij48aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0iZmlsZSIgLz48L2Zvcm0+Jyk7DQoJDQoJJCgnI2Zvcm0tdXBsb2FkIGlucHV0W25hbWU9XCdmaWxlXCddJykudHJpZ2dlcignY2xpY2snKTsNCgkNCgl0aW1lciA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgew0KCQlpZiAoJCgnI2Zvcm0tdXBsb2FkIGlucHV0W25hbWU9XCdmaWxlXCddJykudmFsKCkgIT0gJycpIHsNCgkJCWNsZWFySW50ZXJ2YWwodGltZXIpOw0KCQkJDQoJCQkkLmFqYXgoew0KCQkJCXVybDogJ2luZGV4LnBocD9yb3V0ZT10b29sL3VwbG9hZCcsDQoJCQkJdHlwZTogJ3Bvc3QnLA0KCQkJCWRhdGFUeXBlOiAnanNvbicsDQoJCQkJZGF0YTogbmV3IEZvcm1EYXRhKCQoJyNmb3JtLXVwbG9hZCcpWzBdKSwNCgkJCQljYWNoZTogZmFsc2UsDQoJCQkJY29udGVudFR5cGU6IGZhbHNlLA0KCQkJCXByb2Nlc3NEYXRhOiBmYWxzZSwNCgkJCQliZWZvcmVTZW5kOiBmdW5jdGlvbigpIHsNCgkJCQkJJChub2RlKS5idXR0b24oJ2xvYWRpbmcnKTsNCgkJCQl9LA0KCQkJCWNvbXBsZXRlOiBmdW5jdGlvbigpIHsNCgkJCQkJJChub2RlKS5idXR0b24oJ3Jlc2V0Jyk7DQoJCQkJfSwNCgkJCQlzdWNjZXNzOiBmdW5jdGlvbihqc29uKSB7DQoJCQkJCSQoJy50ZXh0LWRhbmdlcicpLnJlbW92ZSgpOw0KCQkJCQkNCgkJCQkJaWYgKGpzb25bJ2Vycm9yJ10pIHsNCgkJCQkJCSQobm9kZSkucGFyZW50KCkuZmluZCgnaW5wdXQnKS5hZnRlcignPGRpdiBjbGFzcz0idGV4dC1kYW5nZXIiPicgKyBqc29uWydlcnJvciddICsgJzwvZGl2PicpOw0KCQkJCQl9DQoJCQkJCQ0KCQkJCQlpZiAoanNvblsnc3VjY2VzcyddKSB7DQoJCQkJCQlhbGVydChqc29uWydzdWNjZXNzJ10pOw0KCQkJCQkJDQoJCQkJCQkkKG5vZGUpLnBhcmVudCgpLmZpbmQoJ2lucHV0JykuYXR0cigndmFsdWUnLCBqc29uWydjb2RlJ10pOw0KCQkJCQl9DQoJCQkJfSwNCgkJCQllcnJvcjogZnVuY3Rpb24oeGhyLCBhamF4T3B0aW9ucywgdGhyb3duRXJyb3IpIHsNCgkJCQkJYWxlcnQodGhyb3duRXJyb3IgKyAiXHJcbiIgKyB4aHIuc3RhdHVzVGV4dCArICJcclxuIiArIHhoci5yZXNwb25zZVRleHQpOw0KCQkJCX0NCgkJCX0pOw0KCQl9DQoJfSwgNTAwKTsNCn0pOw0KLy8tLT48L3NjcmlwdD4gDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQ0KJCgnI3JldmlldycpLmRlbGVnYXRlKCcucGFnaW5hdGlvbiBhJywgJ2NsaWNrJywgZnVuY3Rpb24oZSkgew0KICBlLnByZXZlbnREZWZhdWx0KCk7DQoNCiAgICAkKCcjcmV2aWV3JykuZmFkZU91dCgnc2xvdycpOw0KDQogICAgJCgnI3JldmlldycpLmxvYWQodGhpcy5ocmVmKTsNCg0KICAgICQoJyNyZXZpZXcnKS5mYWRlSW4oJ3Nsb3cnKTsNCn0pOw0KDQokKCcjcmV2aWV3JykubG9hZCgnaW5kZXgucGhwP3JvdXRlPXByb2R1Y3QvcHJvZHVjdC9yZXZpZXcmcHJvZHVjdF9pZD08P3BocCBlY2hvICRwcm9kdWN0X2lkOyA/PicpOw0KDQokKCcjYnV0dG9uLXJldmlldycpLm9uKCdjbGljaycsIGZ1bmN0aW9uKCkgew0KCSQuYWpheCh7DQoJCXVybDogJ2luZGV4LnBocD9yb3V0ZT1wcm9kdWN0L3Byb2R1Y3Qvd3JpdGUmcHJvZHVjdF9pZD08P3BocCBlY2hvICRwcm9kdWN0X2lkOyA/PicsDQoJCXR5cGU6ICdwb3N0JywNCgkJZGF0YVR5cGU6ICdqc29uJywNCiAgICA8P3BocCBpZiAodmVyc2lvbl9jb21wYXJlKFZFUlNJT04sICcyLjAuMicsICc8JykpOiA/Pg0KCQlkYXRhOiAnbmFtZT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KCQoJ2lucHV0W25hbWU9XCduYW1lXCddJykudmFsKCkpICsgJyZ0ZXh0PScgKyBlbmNvZGVVUklDb21wb25lbnQoJCgndGV4dGFyZWFbbmFtZT1cJ3RleHRcJ10nKS52YWwoKSkgKyAnJnJhdGluZz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KCQoJ2lucHV0W25hbWU9XCdyYXRpbmdcJ106Y2hlY2tlZCcpLnZhbCgpID8gJCgnaW5wdXRbbmFtZT1cJ3JhdGluZ1wnXTpjaGVja2VkJykudmFsKCkgOiAnJykgKyAnJmNhcHRjaGE9JyArIGVuY29kZVVSSUNvbXBvbmVudCgkKCdpbnB1dFtuYW1lPVwnY2FwdGNoYVwnXScpLnZhbCgpKSwNCiAgICA8P3BocCBlbHNlOiA/Pg0KICAgIGRhdGE6ICQoIiNmb3JtLXJldmlldyIpLnNlcmlhbGl6ZSgpLA0KICAgIDw/cGhwIGVuZGlmOyA/Pg0KCQliZWZvcmVTZW5kOiBmdW5jdGlvbigpIHsNCgkJCSQoJyNidXR0b24tcmV2aWV3JykuYnV0dG9uKCdsb2FkaW5nJyk7DQoJCX0sDQoJCWNvbXBsZXRlOiBmdW5jdGlvbigpIHsNCgkJCSQoJyNidXR0b24tcmV2aWV3JykuYnV0dG9uKCdyZXNldCcpOw0KICAgICAgPD9waHAgaWYgKHZlcnNpb25fY29tcGFyZShWRVJTSU9OLCAnMi4wLjInLCAnPCcpKTogPz4NCgkJCSQoJyNjYXB0Y2hhJykuYXR0cignc3JjJywgJ2luZGV4LnBocD9yb3V0ZT10b29sL2NhcHRjaGEjJytuZXcgRGF0ZSgpLmdldFRpbWUoKSk7DQoJCQkkKCdpbnB1dFtuYW1lPVwnY2FwdGNoYVwnXScpLnZhbCgnJyk7DQogICAgICA8P3BocCBlbmRpZjsgPz4NCgkJfSwNCgkJc3VjY2VzczogZnVuY3Rpb24oanNvbikgew0KCQkJJCgnLmFsZXJ0LXN1Y2Nlc3MsIC5hbGVydC1kYW5nZXInKS5yZW1vdmUoKTsNCgkJCQ0KCQkJaWYgKGpzb25bJ2Vycm9yJ10pIHsNCgkJCQkkKCcjcmV2aWV3JykuYWZ0ZXIoJzxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWRhbmdlciB3YXJuaW5nIj48aSBjbGFzcz0iZmEgZmEtZXhjbGFtYXRpb24tY2lyY2xlIj48L2k+ICcgKyBqc29uWydlcnJvciddICsgJzwvZGl2PicpOw0KCQkJfQ0KCQkJDQoJCQlpZiAoanNvblsnc3VjY2VzcyddKSB7DQoJCQkJJCgnI3JldmlldycpLmFmdGVyKCc8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1zdWNjZXNzIHN1Y2Nlc3MiPjxpIGNsYXNzPSJmYSBmYS1jaGVjay1jaXJjbGUiPjwvaT4gJyArIGpzb25bJ3N1Y2Nlc3MnXSArICc8L2Rpdj4nKTsNCgkJCQkNCgkJCQkkKCdpbnB1dFtuYW1lPVwnbmFtZVwnXScpLnZhbCgnJyk7DQoJCQkJJCgndGV4dGFyZWFbbmFtZT1cJ3RleHRcJ10nKS52YWwoJycpOw0KCQkJCSQoJ2lucHV0W25hbWU9XCdyYXRpbmdcJ106Y2hlY2tlZCcpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7DQogICAgICAgIDw/cGhwIGlmICh2ZXJzaW9uX2NvbXBhcmUoVkVSU0lPTiwgJzIuMC4yJywgJzwnKSk6ID8+DQoJCQkJJCgnaW5wdXRbbmFtZT1cJ2NhcHRjaGFcJ10nKS52YWwoJycpOw0KICAgICAgICA8P3BocCBlbmRpZjsgPz4NCgkJCX0NCgkJfQ0KCX0pOw0KfSk7DQoNCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgew0KCSQoJy50aHVtYm5haWxzJykubWFnbmlmaWNQb3B1cCh7DQoJCXR5cGU6J2ltYWdlJywNCgkJZGVsZWdhdGU6ICdhJywNCgkJZ2FsbGVyeTogew0KCQkJZW5hYmxlZDp0cnVlDQoJCX0NCgl9KTsNCn0pOw0KLy8tLT48L3NjcmlwdD4gDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLQ0KCQkJCSQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgew0KCQkJCQkvLyQoJ1tuYW1lXj1cJ29wdGlvblwnXScpLnRyaWdnZXIoJ2NoYW5nZScpOw0KCQkJCX0pOw0KCQkJCQ0KCQkJCSQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UnLCAnLmFjaWxpcl9saXN0ZWxlcicsIGZ1bmN0aW9uKCkgew0KCQ0KCQkJCXZhciB2YWx1ZSA9ICQodGhpcykuZmluZCgnb3B0aW9uOnNlbGVjdGVkJykudGV4dCgpOw0KCQkJCXZhbHVlID0gJC50cmltKHZhbHVlKTsNCgkJCQlpZih2YWx1ZSA9PSAiRXZldCIpew0KCQkJCQkkKCIuZ2l6bGUiKS5jc3MoImRpc3BsYXkiLCJibG9jayIpOw0KCQkJCQkNCgkJCQl9ZWxzZSBpZih2YWx1ZSA9PSAiWWVzIil7DQoJCQkJCSQoIi5naXpsZSIpLmNzcygiZGlzcGxheSIsImJsb2NrIik7DQoJCQkJCQ0KCQkJCQkJCQl9ZWxzZSBpZih2YWx1ZSA9PSAiSmEiKXsNCgkJCQkJJCgiLmdpemxlIikuY3NzKCJkaXNwbGF5IiwiYmxvY2siKTsNCgkJCQkJDQoJCQkJCQkJCX1lbHNlIGlmKHZhbHVlID09ICJPdWkiKXsNCgkJCQkJJCgiLmdpemxlIikuY3NzKCJkaXNwbGF5IiwiYmxvY2siKTsNCgkJCQkJDQoJCQkJCQkJCX1lbHNlIGlmKHZhbHVlID09ICJTw6wiKXsNCgkJCQkJJCgiLmdpemxlIikuY3NzKCJkaXNwbGF5IiwiYmxvY2siKTsNCgkJCQkJCQkJfWVsc2UgaWYodmFsdWUgPT0gIlPDrSIpew0KCQkJCQkkKCIuZ2l6bGUiKS5jc3MoImRpc3BsYXkiLCJibG9jayIpOw0KCQkJCQkJCQl9ZWxzZSBpZih2YWx1ZSA9PSAiSmEiKXsNCgkJCQkJJCgiLmdpemxlIikuY3NzKCJkaXNwbGF5IiwiYmxvY2siKTsNCgkJCQkJDQoJCQkJCQkNCgkJCQl9ZWxzZXsNCgkJCQkJJCgiLmdpemxlIikuY3NzKCJkaXNwbGF5Iiwibm9uZSIpOw0KCQkJCQkNCgkJCQl9DQoJCQkJDQoJLyoNCgkNCgkkKHRoaXMpLmFmdGVyKCc8ZGl2IGNsYXNzPSJ5dWtsZW5peW9yIj48aSBjbGFzcz0iZmEgZmEtc3Bpbm5lciBzZWxlY3Rpb24td2FpdCI+PC9pPiBZw7xrbGVuaXlvci4uLjwvZGl2PicpOw0KCQkJCQkNCgkJCQkJDQoJCQkJCQ0KCQkJCQl2YXIgdmFsdWUgPSAkKHRoaXMpLnZhbCgpOw0KCQkJCQl2YXIgcGFyZW50X2lkID0gJCh0aGlzKS5hdHRyKCduYW1lJykucmVwbGFjZSAoL1teXGQuXS9nLCAnJyk7DQoJCQkNCgkJCQkJJC5hamF4KHsNCgkJCQkJCXVybDogJ2luZGV4LnBocD9yb3V0ZT1wcm9kdWN0L3Byb2R1Y3QvZGVwZW5kZW50b3B0aW9uJnBhcmVudF9pZD0nICsgIHBhcmVudF9pZCArICcmdmFsdWU9JyArIHZhbHVlICsgJyZwcm9kdWN0X2lkPTw/cGhwIGVjaG8gJHByb2R1Y3RfaWQ7ID8+JywNCgkJCQkJCXR5cGU6ICdnZXQnLA0KCQkJCQkJZGF0YVR5cGU6ICdqc29uJywJCQkNCgkJCQkJCXN1Y2Nlc3M6IGZ1bmN0aW9uKGpzb24pIHsNCgkJCQkJCQkNCgkJCQkJCQkNCgkJCQkJCQkNCgkJCQkJCQkkKCcueXVrbGVuaXlvcicpLnJlbW92ZSgpOw0KCQkJCQkJCQ0KCQkJCQkJCWlmIChqc29uWydvcHRpb24nXSkgew0KCQkJCQkJCQlmb3IgKGkgPSAwOyBpIDwganNvblsnb3B0aW9uJ10ubGVuZ3RoOyBpKyspIHsNCgkJCQkJCQkJCXZhciBwcm9kT3B0aW9uID0gJCgnI2lucHV0LW9wdGlvbicgKyBqc29uWydvcHRpb24nXVtpXVsncHJvZHVjdF9vcHRpb25faWQnXSk7DQoJCQkJCQkJCQkNCgkJCQkJCQkJCQ0KCQkJCQkJCQkJaWYgKGpzb25bJ29wdGlvbiddW2ldWyd0eXBlJ10gPT0gJ3NlbGVjdCcpIHsNCgkJCQkJCQkJCQlwcm9kT3B0aW9uLnBhcmVudCgpLmhpZGUoKTsNCgkJCQkJCQkJCQlwcm9kT3B0aW9uLm5leHQoKS5jaGlsZHJlbigpLmhpZGUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCXByb2RPcHRpb24ubmV4dCgpLmNoaWxkcmVuKCkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7DQoJCQkJCQkJCQkJdmFyIGh0bWwgPSAnJzsNCgkJCQkJCQ0KDQoJCQkJCQkJCQkJaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT0iIj48P3BocCBlY2hvICR0ZXh0X3NlbGVjdDsgPz48L29wdGlvbj4nOw0KCQkJCQkJCQkJCQ0KCQkJCQkJCQkJCQ0KDQoJCQkJCQkJCQkJZm9yIChqID0gMDsgaiA8IGpzb25bJ29wdGlvbiddW2ldWydvcHRpb25fdmFsdWUnXS5sZW5ndGg7IGorKykgew0KCQkJCQkJCQkJCQlwcm9kT3B0aW9uLnBhcmVudCgpLnNob3coKTsNCgkJCQkJCQkJCQkJcHJvZE9wdGlvbi5uZXh0KCkuc2hvdygpOw0KCQkJCQkJCQkJCQkkKCdsaVtkYXRhLXZhbHVlPSInICsganNvblsnb3B0aW9uJ11baV1bJ29wdGlvbl92YWx1ZSddW2pdWydwcm9kdWN0X29wdGlvbl92YWx1ZV9pZCddICsgJyJdJykuc2hvdygpOw0KCQkJCQkJCQkJCQkNCg0KCQkJCQkJCQkJCQlodG1sICs9ICc8b3B0aW9uIHZhbHVlPSInICsganNvblsnb3B0aW9uJ11baV1bJ29wdGlvbl92YWx1ZSddW2pdWydwcm9kdWN0X29wdGlvbl92YWx1ZV9pZCddICsgJyI+JyArIGpzb25bJ29wdGlvbiddW2ldWydvcHRpb25fdmFsdWUnXVtqXVsnbmFtZSddOw0KDQoNCgkJCQkJCQkJCQkJaWYgKGpzb25bJ29wdGlvbiddW2ldWydvcHRpb25fdmFsdWUnXVtqXVsncHJpY2UnXSkgew0KCQkJCQkJCQkJCQkJaHRtbCArPSAnICgnICsganNvblsnb3B0aW9uJ11baV1bJ29wdGlvbl92YWx1ZSddW2pdWydwcmljZV9wcmVmaXgnXSArIGpzb25bJ29wdGlvbiddW2ldWydvcHRpb25fdmFsdWUnXVtqXVsncHJpY2UnXSArICcpJzsNCgkJCQkJCQkJCQkJfQ0KCQkJCQkJCQkJCQkNCgkJCQkJCQkJCQkJaHRtbCArPSAnPC9vcHRpb24+JzsNCg0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCQkNCgkJCQkJCQkJCQkkKCdzZWxlY3RbbmFtZT1cJ29wdGlvblsnICsganNvblsnb3B0aW9uJ11baV1bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ10gKyAnXVwnXScpLmh0bWwoaHRtbCk7DQoJDQoNCgkJCQkJCQkJCQkNCg0KCQkJCQkJCQkJfSBlbHNlIGlmIChqc29uWydvcHRpb24nXVtpXVsndHlwZSddID09ICdyYWRpbycgfHwganNvblsnb3B0aW9uJ11baV1bJ3R5cGUnXSA9PSAnY2hlY2tib3gnIHx8IGpzb25bJ29wdGlvbiddW2ldWyd0eXBlJ10gPT0gJ2ltYWdlJykgew0KCQkJCQkJCQkJCQ0KCQkJCQkJCQkJCXByb2RPcHRpb24ucGFyZW50KCkuaGlkZSgpOw0KCQkJCQkJCQkJCXByb2RPcHRpb24ubmV4dCgpLmNoaWxkcmVuKCkuaGlkZSgpOw0KCQkJCQkJCQkJCXZhciBodG1sID0gJyc7DQoJCQkJCQkJCQkJDQoJCQkJCQkJCQkJcHJvZE9wdGlvbi5maW5kKCdpbnB1dCcpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7DQoJCQkJCQkJCQkNCgkJCQkJCQkJCQlmb3IgKGogPSAwOyBqIDwganNvblsnb3B0aW9uJ11baV1bJ29wdGlvbl92YWx1ZSddLmxlbmd0aDsgaisrKSB7DQoNCgkJCQkJCQkJCQkJJCgnbGlbZGF0YS12YWx1ZT0iJyArIGpzb25bJ29wdGlvbiddW2ldWydvcHRpb25fdmFsdWUnXVtqXVsncHJvZHVjdF9vcHRpb25fdmFsdWVfaWQnXSArICciXScpLnNob3coKTsNCg0KCQkJCQkJCQkJCQlwcm9kT3B0aW9uLnBhcmVudCgpLnNob3coKTsNCgkJCQkJCQkJCQkJcHJvZE9wdGlvbi5zaG93KCk7DQoJCQkJCQkJCQkJCXByb2RPcHRpb24uc2libGluZ3MoJy5jb250cm9sLWxhYmVsJykuc2hvdygpOwkJCQkJCQkJCQkJDQoJCQkJCQkJCQkJCXByb2RPcHRpb24uZmluZCgnaW5wdXRbdmFsdWU9XCcnICsganNvblsnb3B0aW9uJ11baV1bJ29wdGlvbl92YWx1ZSddW2pdWydwcm9kdWN0X29wdGlvbl92YWx1ZV9pZCddICsgJ1wnXScpLnBhcmVudCgpLnNob3coKTsNCgkJCQkJCQkJCQkJcHJvZE9wdGlvbi5maW5kKCdpbnB1dFt2YWx1ZT1cJycgKyBqc29uWydvcHRpb24nXVtpXVsnb3B0aW9uX3ZhbHVlJ11bal1bJ3Byb2R1Y3Rfb3B0aW9uX3ZhbHVlX2lkJ10gKyAnXCddJykucGFyZW50KCkucGFyZW50KCkuc2hvdygpOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCQkJLy8gRmlsZSwgdGV4dCwgdGV4dGFyZWEsIGRhdGUsIGRhdGV0aW1lDQoJCQkJCQkJCQkJaWYgKGpzb25bJ29wdGlvbiddW2ldWydvcHRpb25fdmFsdWUnXSkgew0KCQkJCQkJCQkJCQkkKCcjaW5wdXQtb3B0aW9uJyArIGpzb25bJ29wdGlvbiddW2ldWydwcm9kdWN0X29wdGlvbl9pZCddKS5wYXJlbnRzKCcuZm9ybS1ncm91cCcpLnN0b3AoKS5mYWRlSW4oJ21lZGl1bScpOw0KCQkJCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCQkJCSQoJyNpbnB1dC1vcHRpb24nICsganNvblsnb3B0aW9uJ11baV1bJ3Byb2R1Y3Rfb3B0aW9uX2lkJ10pLnBhcmVudHMoJy5mb3JtLWdyb3VwJykuc3RvcCgpLmZhZGVPdXQoJ21lZGl1bScpOw0KCQkJCQkJCQkJCX0NCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCg0KCQkJCQkJfSwNCgkJCQkJCWVycm9yOiBmdW5jdGlvbih4aHIsIGFqYXhPcHRpb25zLCB0aHJvd25FcnJvcikgew0KCQkJCQkJCWFsZXJ0KHRocm93bkVycm9yICsgIlxyXG4iICsgeGhyLnN0YXR1c1RleHQgKyAiXHJcbiIgKyB4aHIucmVzcG9uc2VUZXh0KTsNCgkJCQkJCX0NCgkJCQkJfSk7CQ0KCQkJCQkqLw0KCQkJCX0pOw0KCQkJCS8vLS0+PC9zY3JpcHQ+DQo8P3BocCBlY2hvICRmb290ZXI7ID8+")); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 47e4edfbaceb9fe75d9dc6259dacdeb6
Eval Count 1
Decode Time 377 ms