Difference between revisions of "Team:Sydney Australia/Design"

 
(25 intermediate revisions by 5 users not shown)
Line 2: Line 2:
 
<html>
 
<html>
 
<head>
 
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.6/angular.min.js"></script>
+
<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>
 
<link href="https://fonts.googleapis.com/css?family=Quicksand:300,400|Roboto:400,400i" rel="stylesheet">
 
<link href="https://fonts.googleapis.com/css?family=Quicksand:300,400|Roboto:400,400i" rel="stylesheet">
  
Line 11: Line 11:
  
 
<script>
 
<script>
 +
$(document).ready(function() {
 +
    $('.link1').on('click', function() {
 +
$( this ).toggleClass( "selected" );
 +
$('.link2').removeClass('selected');
 +
$('.link3').removeClass('selected');
 +
        $('.link4').removeClass('selected');     
 +
        $('.link5').removeClass('selected'); 
 +
        $(".box1").fadeToggle('slow');
 +
        $(".box1_arrow").fadeToggle('slow');
 +
        $(".box2").hide();
 +
        $(".box3").hide();
 +
        $(".box4").hide(); 
 +
        $(".box5").hide();
 +
        $(".box2_arrow").hide();       
 +
        $(".box3_arrow").hide();         
 +
        $(".box4_arrow").hide();         
 +
        $(".box5_arrow").hide();   
 +
});
 +
    $('.link2').on('click', function() {
 +
$( this ).toggleClass( "selected" );
 +
$('.link1').removeClass('selected');
 +
$('.link3').removeClass('selected');
 +
        $('.link4').removeClass('selected');     
 +
        $('.link5').removeClass('selected'); 
 +
        $(".box2").fadeToggle('slow');
 +
        $(".box2_arrow").fadeToggle('slow');
 +
        $(".box1").hide();
 +
        $(".box3").hide();
 +
        $(".box4").hide(); 
 +
        $(".box5").hide();   
 +
        $(".box1_arrow").hide();       
 +
        $(".box3_arrow").hide();         
 +
        $(".box4_arrow").hide();         
 +
        $(".box5_arrow").hide();
 +
});
 +
    $('.link3').on('click', function() {
 +
$( this ).toggleClass( "selected" );
 +
$('.link2').removeClass('selected');
 +
$('.link1').removeClass('selected');
 +
        $('.link4').removeClass('selected');     
 +
        $('.link5').removeClass('selected'); 
 +
        $(".box3").fadeToggle('slow');
 +
        $(".box3_arrow").fadeToggle('slow');
 +
        $(".box2").hide();
 +
        $(".box1").hide();
 +
        $(".box4").hide(); 
 +
        $(".box5").hide(); 
 +
        $(".box1_arrow").hide(); 
 +
        $(".box2_arrow").hide();                 
 +
        $(".box4_arrow").hide();         
 +
        $(".box5_arrow").hide();         
 +
 
 +
});
 +
    $('.link4').on('click', function() {
 +
$( this ).toggleClass( "selected" );
 +
$('.link2').removeClass('selected');
 +
$('.link3').removeClass('selected');
 +
        $('.link1').removeClass('selected');     
 +
        $('.link5').removeClass('selected'); 
 +
        $(".box4").fadeToggle('slow');
 +
        $(".box4_arrow").fadeToggle('slow');
 +
        $(".box2").hide();
 +
        $(".box3").hide();
 +
        $(".box1").hide(); 
 +
        $(".box5").hide();
 +
        $(".box1_arrow").hide(); 
 +
        $(".box2_arrow").hide();       
 +
        $(".box3_arrow").hide();                     
 +
        $(".box5_arrow").hide();   
 +
});
 +
    $('.link5').on('click', function() {
 +
$( this ).toggleClass( "selected" );
 +
$('.link2').removeClass('selected');
 +
$('.link3').removeClass('selected');
 +
        $('.link4').removeClass('selected');     
 +
        $('.link1').removeClass('selected'); 
 +
        $(".box5").fadeToggle('slow');
 +
        $(".box5_arrow").fadeToggle('slow');
 +
        $(".box2").hide();
 +
        $(".box3").hide();
 +
        $(".box4").hide(); 
 +
        $(".box1").hide();
 +
        $(".box1_arrow").hide(); 
 +
        $(".box2_arrow").hide();       
 +
        $(".box3_arrow").hide();         
 +
        $(".box4_arrow").hide();           
 +
});
 +
    $('.BB-prefix').on('click', function() {
 +
$('.BB-prefix' ).toggleClass( "selected" );
 +
$('.BB-suffix').removeClass('selected');
 +
$('.rbs').removeClass('selected');
 +
        $('.yncm').removeClass('selected');     
 +
        $('.his').removeClass('selected');
 +
$('.tev').removeClass('selected');
 +
        $('.winsulin').removeClass('selected');     
 +
        $('.proinsulin').removeClass('selected');
 +
        $('.arg').removeClass('selected'); 
 +
        $('.ecotin').removeClass('selected');             
 +
        $(".BBprefix_info").fadeToggle('slow');
 +
        $(".RBS_info").hide(); 
 +
        $(".YNCM_info").hide();       
 +
        $(".HIS_info").hide();         
 +
        $(".TEV_info").hide();
 +
        $(".ARG_info").hide();         
 +
        $(".BBsuffix_info").hide(); 
 +
        $(".ecotin_info").hide(); 
 +
        $(".proinsulin_info").hide(); 
 +
        $(".winsulin_info").hide();                                         
 +
});
 +
    $('.BB-suffix').on('click', function() {
 +
$('.BB-suffix' ).toggleClass( "selected" );
 +
$('.BB-prefix').removeClass('selected');
 +
$('.rbs').removeClass('selected');
 +
        $('.yncm').removeClass('selected');     
 +
        $('.his').removeClass('selected');
 +
$('.tev').removeClass('selected');
 +
        $('.winsulin').removeClass('selected');     
 +
        $('.proinsulin').removeClass('selected');
 +
        $('.arg').removeClass('selected'); 
 +
        $('.ecotin').removeClass('selected');             
 +
        $(".BBsuffix_info").fadeToggle('slow');
 +
        $(".RBS_info").hide(); 
 +
        $(".YNCM_info").hide();       
 +
        $(".HIS_info").hide();         
 +
        $(".TEV_info").hide();
 +
        $(".ARG_info").hide();         
 +
        $(".BBprefix_info").hide(); 
 +
        $(".ecotin_info").hide();
 +
        $(".proinsulin_info").hide(); 
 +
        $(".winsulin_info").hide();                               
 +
});
 +
    $('.rbs').on('click', function() {
 +
$('.rbs' ).toggleClass( "selected" );
 +
$('.BB-suffix').removeClass('selected');
 +
$('.BB-prefix').removeClass('selected');
 +
        $('.yncm').removeClass('selected');     
 +
        $('.his').removeClass('selected');
 +
$('.tev').removeClass('selected');
 +
        $('.winsulin').removeClass('selected');     
 +
        $('.proinsulin').removeClass('selected');
 +
        $('.arg').removeClass('selected'); 
 +
        $('.ecotin').removeClass('selected');             
 +
        $(".RBS_info").fadeToggle('slow');
 +
        $(".BBprefix_info").hide(); 
 +
        $(".YNCM_info").hide();       
 +
        $(".HIS_info").hide();         
 +
        $(".TEV_info").hide();
 +
        $(".ARG_info").hide();         
 +
        $(".BBsuffix_info").hide(); 
 +
        $(".ecotin_info").hide();
 +
        $(".proinsulin_info").hide(); 
 +
        $(".winsulin_info").hide();                               
 +
});
 +
    $('.yncm').on('click', function() {
 +
$('.yncm' ).toggleClass( "selected" );
 +
$('.BB-suffix').removeClass('selected');
 +
$('.rbs').removeClass('selected');
 +
        $('.BB-prefix').removeClass('selected');     
 +
        $('.his').removeClass('selected');
 +
$('.tev').removeClass('selected');
 +
        $('.winsulin').removeClass('selected');     
 +
        $('.proinsulin').removeClass('selected');
 +
        $('.arg').removeClass('selected'); 
 +
        $('.ecotin').removeClass('selected');             
 +
        $(".YNCM_info").fadeToggle('slow');
 +
        $(".RBS_info").hide(); 
 +
        $(".BBprefix_info").hide();       
 +
        $(".HIS_info").hide();         
 +
        $(".TEV_info").hide();
 +
        $(".ARG_info").hide(); 
 +
        $(".box2_arrow").hide();       
 +
        $(".BBsuffix_info").hide(); 
 +
        $(".ecotin_info").hide();
 +
        $(".proinsulin_info").hide(); 
 +
        $(".winsulin_info").hide();                                 
 +
});
 +
    $('.his').on('click', function() {
 +
$('.his' ).toggleClass( "selected" );
 +
$('.BB-suffix').removeClass('selected');
 +
$('.rbs').removeClass('selected');
 +
        $('.yncm').removeClass('selected');     
 +
        $('.BB-prefix').removeClass('selected');
 +
$('.tev').removeClass('selected');
 +
        $('.winsulin').removeClass('selected');     
 +
        $('.proinsulin').removeClass('selected');
 +
        $('.arg').removeClass('selected'); 
 +
        $('.ecotin').removeClass('selected');             
 +
        $(".HIS_info").fadeToggle('slow');
 +
        $(".RBS_info").hide(); 
 +
        $(".YNCM_info").hide();       
 +
        $(".BBprefix_info").hide();         
 +
        $(".TEV_info").hide();
 +
        $(".ARG_info").hide(); 
 +
        $(".box2_arrow").hide();       
 +
        $(".BBsuffix_info").hide();
 +
        $(".ecotin_info").hide();
 +
        $(".proinsulin_info").hide(); 
 +
        $(".winsulin_info").hide();                                 
 +
});
 +
    $('.tev').on('click', function() {
 +
$('.tev' ).toggleClass( "selected" );
 +
$('.BB-suffix').removeClass('selected');
 +
$('.rbs').removeClass('selected');
 +
        $('.yncm').removeClass('selected');     
 +
        $('.his').removeClass('selected');
 +
$('.BB-prefix').removeClass('selected');
 +
        $('.winsulin').removeClass('selected');     
 +
        $('.proinsulin').removeClass('selected');
 +
        $('.arg').removeClass('selected'); 
 +
        $('.ecotin').removeClass('selected');             
 +
        $(".TEV_info").fadeToggle('slow');
 +
        $(".RBS_info").hide(); 
 +
        $(".YNCM_info").hide();       
 +
        $(".HIS_info").hide();         
 +
        $(".BBprefix_info").hide();
 +
        $(".ARG_info").hide(); 
 +
        $(".box2_arrow").hide();       
 +
        $(".BBsuffix_info").hide(); 
 +
        $(".ecotin_info").hide();
 +
        $(".proinsulin_info").hide(); 
 +
        $(".winsulin_info").hide();                               
 +
});
 +
    $('.arg').on('click', function() {
 +
$('.arg' ).toggleClass( "selected" );
 +
$('.BB-suffix').removeClass('selected');
 +
$('.rbs').removeClass('selected');
 +
        $('.yncm').removeClass('selected');     
 +
        $('.his').removeClass('selected');
 +
$('.tev').removeClass('selected');
 +
        $('.BB-prefix').removeClass('selected');     
 +
        $('.proinsulin').removeClass('selected');
 +
        $('.BB-suffix').removeClass('selected'); 
 +
        $('.ecotin').removeClass('selected');             
 +
        $(".ARG_info").fadeToggle('slow');
 +
        $(".RBS_info").hide(); 
 +
        $(".YNCM_info").hide();       
 +
        $(".HIS_info").hide();         
 +
        $(".TEV_info").hide();
 +
        $(".BBprefix_info").hide(); 
 +
        $(".box2_arrow").hide();       
 +
        $(".BBsuffix_info").hide();
 +
        $(".ecotin_info").hide();
 +
        $(".proinsulin_info").hide(); 
 +
        $(".winsulin_info").hide();                               
 +
});
 +
    $('.ecotin').on('click', function() {
 +
$('.ecotin' ).toggleClass( "selected" );
 +
$('.BB-suffix').removeClass('selected');
 +
$('.rbs').removeClass('selected');
 +
        $('.yncm').removeClass('selected');     
 +
        $('.his').removeClass('selected');
 +
$('.tev').removeClass('selected');
 +
        $('.winsulin').removeClass('selected');     
 +
        $('.proinsulin').removeClass('selected');
 +
        $('.arg').removeClass('selected'); 
 +
        $('.BB-prefix').removeClass('selected');             
 +
        $(".ecotin_info").fadeToggle('slow');
 +
        $(".RBS_info").hide(); 
 +
        $(".YNCM_info").hide();       
 +
        $(".HIS_info").hide();         
 +
        $(".TEV_info").hide();
 +
        $(".ARG_info").hide(); 
 +
        $(".box2_arrow").hide();       
 +
        $(".BBsuffix_info").hide(); 
 +
        $(".BBprefix_info").hide();
 +
        $(".proinsulin_info").hide(); 
 +
        $(".winsulin_info").hide();                               
 +
});
 +
    $('.proinsulin').on('click', function() {
 +
$('.ecotin' ).removeClass( "selected" );
 +
$('.BB-suffix').removeClass('selected');
 +
$('.rbs').removeClass('selected');
 +
        $('.yncm').removeClass('selected');     
 +
        $('.his').removeClass('selected');
 +
$('.tev').removeClass('selected');
 +
        $('.winsulin').removeClass('selected');     
 +
        $('.proinsulin').toggleClass('selected');
 +
        $('.arg').removeClass('selected'); 
 +
        $('.BB-prefix').removeClass('selected');             
 +
        $(".proinsulin_info").fadeToggle('slow');
 +
        $(".RBS_info").hide(); 
 +
        $(".YNCM_info").hide();       
 +
        $(".HIS_info").hide();         
 +
        $(".TEV_info").hide();
 +
        $(".ARG_info").hide(); 
 +
        $(".box2_arrow").hide();       
 +
        $(".BBsuffix_info").hide(); 
 +
        $(".BBprefix_info").hide();
 +
        $(".ecotin_info").hide();   
 +
        $(".winsulin_info").hide();                               
 +
});
 +
    $('.winsulin').on('click', function() {
 +
$('.ecotin' ).removeClass( "selected" );
 +
$('.BB-suffix').removeClass('selected');
 +
$('.rbs').removeClass('selected');
 +
        $('.yncm').removeClass('selected');     
 +
        $('.his').removeClass('selected');
 +
$('.tev').removeClass('selected');
 +
        $('.winsulin').toggleClass('selected');     
 +
        $('.proinsulin').removeClass('selected');
 +
        $('.arg').removeClass('selected'); 
 +
        $('.BB-prefix').removeClass('selected');             
 +
        $(".winsulin_info").fadeToggle('slow');
 +
        $(".RBS_info").hide(); 
 +
        $(".YNCM_info").hide();       
 +
        $(".HIS_info").hide();         
 +
        $(".TEV_info").hide();
 +
        $(".ARG_info").hide(); 
 +
        $(".box2_arrow").hide();       
 +
        $(".BBsuffix_info").hide(); 
 +
        $(".BBprefix_info").hide();
 +
        $(".ecotin_info").hide(); 
 +
        $(".proinsulin_info").hide();                                 
 +
});
 +
});
 +
 +
 
$(document).ready(function() {
 
$(document).ready(function() {
 
   $(function() {
 
   $(function() {
Line 136: Line 453:
 
height:10px;
 
height:10px;
 
background-color: #fad990;
 
background-color: #fad990;
margin-left:15%;
 
 
}
 
}
 
.divider2 {
 
.divider2 {
Line 142: Line 458:
 
height:10px;
 
height:10px;
 
background-color: #c1808e;
 
background-color: #c1808e;
margin-left:15%;
 
 
}
 
}
 
.divider3 {
 
.divider3 {
Line 148: Line 463:
 
height:10px;
 
height:10px;
 
background-color: #88bec2;
 
background-color: #88bec2;
margin-left:15%;
 
 
}
 
}
 
.divider4 {
 
.divider4 {
Line 154: Line 468:
 
height:10px;
 
height:10px;
 
background-color: #9fe6b0;
 
background-color: #9fe6b0;
margin-left:25%;
 
 
}
 
}
 
h4{
 
h4{
Line 160: Line 473:
 
color: #3e3f3f;
 
color: #3e3f3f;
 
font-size: 20px;
 
font-size: 20px;
 +
line-height: 30px
 
text-align:center;
 
text-align:center;
 
}
 
}
Line 180: Line 494:
 
text-align:center;
 
text-align:center;
 
}
 
}
 +
h7 {
 +
font-family: "Quicksand", sans-serif;
 +
color: #3e3f3f;
 +
font-size: 16px;
 +
text-align:center;
 +
line-height:20px;
 +
}
 +
 +
h10 {
 +
  font-family: "Quicksand", sans-serif;
 +
  color: #93bcc1;
 +
  font-size: 30px;
 +
  text-align:center;
 +
}
 +
 
.para_container {
 
.para_container {
 
padding: 0 10% 2% 10%;
 
padding: 0 10% 2% 10%;
Line 232: Line 561:
 
.box4 {width:80%;min-height:10vh;padding:2%; background-color:#afe0b2;margin-left:10%;border-radius:5px;}
 
.box4 {width:80%;min-height:10vh;padding:2%; background-color:#afe0b2;margin-left:10%;border-radius:5px;}
 
.box5 {width:80%;min-height:10vh;padding:2%; background-color:#a696ea;margin-left:10%;border-radius:5px;}
 
.box5 {width:80%;min-height:10vh;padding:2%; background-color:#a696ea;margin-left:10%;border-radius:5px;}
 
+
.panel-group {
 +
margin-top:20px;
 +
width:90%;
 +
margin:auto;
 +
padding:10px;
 +
 +
}
 +
.panel-heading {
 +
 +
  border:0px!important;
 +
  background-image:none;
 +
  color:#3e3f3f;
 +
  padding:20px 20px 20px 20px;
 +
  font-family: 'Quicksand', sans-serif;
 +
}
 
.box1_arrow {
 
.box1_arrow {
 
   width: 0;  
 
   width: 0;  
Line 283: Line 626:
 
.winsulin {width:220px;background-color:#b0dfb3;}
 
.winsulin {width:220px;background-color:#b0dfb3;}
 
.divider {width:20px;}
 
.divider {width:20px;}
.proinsulin {width:260px;background-color:#96c6ca;}
+
.proinsulin {width:260px;background-color:#c1faff;}
.arg {width:30px;background-color:#c1faff;}
+
.arg {width:30px;background-color:#96c6ca;}
 
.ecotin {width:220px; background-color:#ffae7b;}
 
.ecotin {width:220px; background-color:#ffae7b;}
 
.element {
 
.element {
Line 382: Line 725:
 
.tev-arrow {border-left: 22.5px solid #f1ccf0;}
 
.tev-arrow {border-left: 22.5px solid #f1ccf0;}
 
.winsulin-arrow {border-left: 22.5px solid #b0dfb3;}
 
.winsulin-arrow {border-left: 22.5px solid #b0dfb3;}
.arg-arrow {border-left: 22.5px solid #c1faff;}
+
.arg-arrow {border-left: 22.5px solid #96c6ca;}
.proinsulin-arrow {border-left: 22.5px solid #96c6ca;}
+
.proinsulin-arrow {border-left: 22.5px solid #c1faff;}
 
.ecotin-arrow {border-left: 22.5px solid #ffae7b;}
 
.ecotin-arrow {border-left: 22.5px solid #ffae7b;}
 
.element_text:hover {
 
.element_text:hover {
Line 393: Line 736:
 
.element_info_box_container {
 
.element_info_box_container {
 
width:95%;
 
width:95%;
height:550px;
+
height:650px;
 
overflow:scroll;
 
overflow:scroll;
 
background-color:#e2e2e2;
 
background-color:#e2e2e2;
Line 419: Line 762:
 
   border-radius: 10px 10px 0 0;
 
   border-radius: 10px 10px 0 0;
 
}
 
}
 +
 
label:first-of-type {
 
label:first-of-type {
 
   margin-left: 0;
 
   margin-left: 0;
 
   border-radius: 10px 10px 0 0;
 
   border-radius: 10px 10px 0 0;
 
}
 
}
 
 
.bish {
 
.bish {
 
   width: 100%;
 
   width: 100%;
Line 452: Line 795:
 
-ms-interpolation-mode: nearest-neighbor;
 
-ms-interpolation-mode: nearest-neighbor;
 
}
 
}
figcaption {font-family:'Quicksand';font-size:14px;text-align:center}
+
figcaption {font-family:'Quicksand';font-size:16px;line-height:30px;text-align:center;}
 
.ecoliexp {display:inline-block}
 
.ecoliexp {display:inline-block}
 
figure img {vertical-align:top;}
 
figure img {vertical-align:top;}
 
.tabheading:hover {text-decoration:underline;}
 
.tabheading:hover {text-decoration:underline;}
.purification_box {width:80%;margin-left:10%;-moz-box-shadow: 0 0 3px #ccc;
+
.purification_box {width:80%;-moz-box-shadow: 0 0 3px #ccc;
 
-webkit-box-shadow: 0 0 3px #ccc;
 
-webkit-box-shadow: 0 0 3px #ccc;
 
box-shadow: 0 0 3px #ccc;}
 
box-shadow: 0 0 3px #ccc;}
 +
  
 
   .plasmid .markerhover:hover {
 
   .plasmid .markerhover:hover {
Line 524: Line 868:
 
}
 
}
  
.element_info_box_container {
+
 
width:95%;
+
height:460px;
+
overflow:scroll;
+
background-color:#e2e2e2;
+
border-radius:20px;
+
}
+
 
.pus270_container {
 
.pus270_container {
 
display:flex;
 
display:flex;
Line 547: Line 885:
 
</head>
 
</head>
 
<body>
 
<body>
 +
 
<div class="container-fluid">
 
<div class="container-fluid">
 
<div class= "row" style="background-color:#e2e2e2;margin-top:60px;">
 
<div class= "row" style="background-color:#e2e2e2;margin-top:60px;">
Line 552: Line 891:
 
</div>
 
</div>
  
<div class = "row" >
+
<div class = "row"  align = "center">
 
<div class="para_container">
 
<div class="para_container">
 
<h2>Our Key Goals</h2>
 
<h2>Our Key Goals</h2>
Line 633: Line 972:
 
</div>
 
</div>
  
<div class = "row" id="analogue-intro">
+
<div class = "row" id="analogue-intro" align = "center">
 
<div class="para_container">
 
<div class="para_container">
 
<h2>Our Insulin Analogue</h2>
 
<h2>Our Insulin Analogue</h2>
 
<div class = "divider2"></div>
 
<div class = "divider2"></div>
 
<br>
 
<br>
<h4>Winsulin stuff</h4>
+
<center><h10>Proinsulin</h10></center>
 +
<h4>We began working on expressing proinsulin as it is a reliable, unpatented, and well characterised therapeutic. Proinsulin itself is inactive, and to become active it requires additional processing to form insulin. This processing is performed by the protease trypsin, which cleaves the C chain from proinsulin. After trypsin activity, the A and B chains are left over to form active insulin. Proinsulin processing is demonstrated in Figure 1. with the cleavage of the C chain.</h4><br>
 +
<img class="crispy" src="https://static.igem.org/mediawiki/2017/6/61/T--Sydney_Australia--design_cleavage.png" width="100%"/>
 +
<div><h7><center><br> Figure 1. Cleavage of proinsulin results in active insulin</h7></center></div>
 +
<br>
 +
<h4>Due to the additional processing steps required to produce purified active insulin from proinsulin, increasing the cost of insulin synthesis, we looked for way to diminish this cost by reducing the steps required to obtain active insulin.</h4>
 +
<br>
 +
<center><h10>Winsulin</h10></center>
 +
<h4>Our team decided to design a single-chain insulin, as single-chain insulins have been demonstrated to have <i>higher stability</i> and <i>activity</i> than human proinsulin. Stability in particular was important to our design due to the need to synthesise an insulin that could be transported over long distances without requiring cold temperatures. Crucially, single-chain insulins do <i>not</i> need to be cleaved to be active, requiring less processing than proinsulin.</h4>
 +
<br>
 +
<img class="crispy" src="https://static.igem.org/mediawiki/2017/d/d0/T--Sydney_Australia--design_alignment.png" width ="100%" /><br>
 +
<h7><center><br>Figure 2. Sequence comparison of proinsulin, active insulin and Winsulin.</center></h7>
 +
<br>
 +
<h4> We based the linker peptide of Winsulin (shown above) on sequences and principles tested in Rajpal et al., 2009. This paper found that peptides with a length of 5 to 12 amino acids had the highest receptor binding activity. Importantly, the composition of the sequence is identified as integral in determining whether the single chain construct has activity.</h4><br>
 +
 
 +
<h4>With the above considerations in mind, we designed the linker peptide sequence for Winsulin with the following characteristics:</h4>
 +
<img class="crispy" src="https://static.igem.org/mediawiki/2017/8/8b/T--Sydney_Australia--winsulin.png" width="90%"/>
 +
<br>
 +
<h4><br>A further consideration was in ensuring that this single chain construct woudl not infringe any potential <a href="https://2017.igem.org/Team:Sydney_Australia/Patent_Law">patents</a>. With this in mind - we designed our construct to also have 12 amino acids.<br>
 +
<h4>Additionally, the C-terminal residue of proinsulin is an asparagine. In Winsulin we substituted this for a glycine to increase the pI of Winsulin to approximately 7.8. This pI is somewhat high, but it leads to the aggregation of Winsulin monomers to form hexamers. This substitution is present in many long-acting insulins currently on the market. Yet, <i>interestingly</i>, our <a href="https://2017.igem.org/Team:Sydney_Australia/Model">modelling</a> indicates our Winsulin is still a rapid-acting insulin, and dissociates from hexamers more readily than human insulin.</h4>
 
</div>
 
</div>
 
</div>
 
</div>
  
<div class = "row" id="constructs-intro">
+
<div class = "row" id="constructs-intro" align = "center">
 
<div class="para_container">
 
<div class="para_container">
 
<h2>Our Constructs</h2>
 
<h2>Our Constructs</h2>
Line 651: Line 1,009:
 
</div>
 
</div>
  
<div class = "row" id="constructs">
+
<div class = "row" id="constructs" align = "center">
 
<div class="col-xs-8">
 
<div class="col-xs-8">
 
<div class="construct_container">
 
<div class="construct_container">
Line 802: Line 1,160:
 
<div class="info_box YNCM_info">
 
<div class="info_box YNCM_info">
 
<h6>YncM Tag</h6>
 
<h6>YncM Tag</h6>
<br></br>
 
 
<h4>The YNCM tag is a 12 amino acid sequence whose presence on the N-terminus of the protein targets it for secretion out of the cell into the surrounding media via the Sec pathway in Bacillus subtilis. YNCM was chosen because it was recently shown to be massively successful in targeting recombinant protein for secretion compared to a library of other signal peptides. Additionally, this was shown in B. subtilis strain WB600, which is the bacteria that our WB800 strain was derived from. So we expect that it should give us similar success in secretion of our constructs. (Guan et. al. 2016)</h4>
 
<h4>The YNCM tag is a 12 amino acid sequence whose presence on the N-terminus of the protein targets it for secretion out of the cell into the surrounding media via the Sec pathway in Bacillus subtilis. YNCM was chosen because it was recently shown to be massively successful in targeting recombinant protein for secretion compared to a library of other signal peptides. Additionally, this was shown in B. subtilis strain WB600, which is the bacteria that our WB800 strain was derived from. So we expect that it should give us similar success in secretion of our constructs. (Guan et. al. 2016)</h4>
  
Line 820: Line 1,177:
 
<div class="info_box ARG_info">
 
<div class="info_box ARG_info">
 
<h6>“R” Arginine Cleavage Site</h6>
 
<h6>“R” Arginine Cleavage Site</h6>
<br></br>
 
 
<h4>Arginine acts as a recognition site for Trypsin Protease which we will use to specifically remove Proinsulin from the his tag and YNCM/Ecotin tag in a similar way to TEV. We have chosen to use Trypsin in these constructs because it allows us to further simplify the processing of proinsulin. Trypsin naturally cleaves the C-peptide from proinsulin which, following disulfide bond formation, leaves the active form of insulin. This is the way it works in our body, so we are confident that it will work here too. </h4>
 
<h4>Arginine acts as a recognition site for Trypsin Protease which we will use to specifically remove Proinsulin from the his tag and YNCM/Ecotin tag in a similar way to TEV. We have chosen to use Trypsin in these constructs because it allows us to further simplify the processing of proinsulin. Trypsin naturally cleaves the C-peptide from proinsulin which, following disulfide bond formation, leaves the active form of insulin. This is the way it works in our body, so we are confident that it will work here too. </h4>
  
Line 832: Line 1,188:
 
<div class="info_box ecotin_info">
 
<div class="info_box ecotin_info">
 
<h6>Ecotin Tag</h6>
 
<h6>Ecotin Tag</h6>
<br></br>
 
 
<h4>Ecotin acts as a signal sequence to target the translated protein to the periplasm of the cell. There are a number of advantages that make it a good choice over other tags.
 
<h4>Ecotin acts as a signal sequence to target the translated protein to the periplasm of the cell. There are a number of advantages that make it a good choice over other tags.
 
</h4>
 
</h4>
Line 862: Line 1,217:
 
</div>
 
</div>
  
<div class="row" style="height:10vh;"></div>
 
  
<div class = "row" id="vector-intro">
+
 
 +
<div class="row" style="height:10vh;" align = "center"></div>
 +
 
 +
<div class = "row" id="vector-intro" align = "center">
 
<div class="para_container">
 
<div class="para_container">
 
<h2>Our Vectors</h2>
 
<h2>Our Vectors</h2>
 
<div class = "divider1"></div>
 
<div class = "divider1"></div>
 
<br>
 
<br>
<h4>Vector intro </h4>
 
 
</div>
 
</div>
 
</div>
 
</div>
  
<div class="row" id="vector_box">
+
<div class="row" id="vector_box" align = "center">
 
<div class="col-xs-1"></div>
 
<div class="col-xs-1"></div>
 
<div class="col-xs-10">
 
<div class="col-xs-10">
Line 881: Line 1,237:
 
<label for="tab-one1"><h3 class="tabheading">E. Coli</h3></label>
 
<label for="tab-one1"><h3 class="tabheading">E. Coli</h3></label>
 
<div class="bish">
 
<div class="bish">
<h4>pet16b justification</h4>
+
<h4>We have chosen to use the pET-15b expression system paired with BL21 strain E. coli to express our periplasmic and cytoplasmic constructs. It is a well characterised vector that uses the T7 induction system to prevent expression without the presence of IPTG, providing a convenient level of control over production.<br><br></h4>
 
<div class="row">
 
<div class="row">
 
<figure>
 
<figure>
<img style="margin-left:12.5%" class="img-center center-block crispy ecoliexp" align="left" src="https://static.igem.org/mediawiki/2017/8/80/T--Sydney_Australia--design_pet15b.png" width="75%"></img>
+
<img style="margin-left:12.5%" class="img-center center-block crispy ecoliexp" align="center" src="https://static.igem.org/mediawiki/2017/8/80/T--Sydney_Australia--design_pet15b.png" width="60%"></img>
 
</figure></div>
 
</figure></div>
 
<div class="row">
 
<div class="row">
<figcaption>Figure 1. pET-15b was used for cytoplasmic and periplasmic expression of proinsulin and winsulin.</figcaption>
+
<h7><br>Figure 3. pET-15b was used for cytoplasmic and periplasmic expression of proinsulin and winsulin.</h7>
 
</div>
 
</div>
 
</div>
 
</div>
Line 896: Line 1,252:
 
<h4>
 
<h4>
 
pUS258 is an integrative expression vector which undergoes homologous recombination to insert into the amyE gene of the Bacillus subtilis chromosome. It’s a relatively simple plasmid using the same IPTG induction system that we use across all of our expression systems.  
 
pUS258 is an integrative expression vector which undergoes homologous recombination to insert into the amyE gene of the Bacillus subtilis chromosome. It’s a relatively simple plasmid using the same IPTG induction system that we use across all of our expression systems.  
 
+
<br><br>
 
</h4>
 
</h4>
<div class="row">
+
<div class="row" align = "center">
 
<figure>
 
<figure>
 
<img style="margin-left:32.5%" class="img-center center-block crispy ecoliexp" align="left" src="https://static.igem.org/mediawiki/2017/1/11/T--Sydney_Australia--design_pus258.png" width="45%"></img>
 
<img style="margin-left:32.5%" class="img-center center-block crispy ecoliexp" align="left" src="https://static.igem.org/mediawiki/2017/1/11/T--Sydney_Australia--design_pus258.png" width="45%"></img>
 
</figure></div>
 
</figure></div>
<div class="row">
+
<div class="row" align = "center">
<figcaption>Figure 2. pus258 was used for cytoplasmic and periplasmic expression of proinsulin and winsulin.</figcaption>
+
<figcaption><br>Figure 4. pus258 was used for cytoplasmic and periplasmic expression of proinsulin and winsulin.</figcaption>
 
</div>
 
</div>
  
Line 912: Line 1,268:
 
</div>
 
</div>
  
<div class="row" id="expression-systems-intro">
+
<div class="row" id="expression-systems-intro" align = "center">
 
<div class="para_container">
 
<div class="para_container">
 
<h2> Our Expression Systems</h2>
 
<h2> Our Expression Systems</h2>
Line 921: Line 1,277:
 
</div>
 
</div>
  
<div class="row" id="expression_box">
+
<div class="row" id="expression_box" align = "center">
 
<div class="col-xs-1"></div>
 
<div class="col-xs-1"></div>
 
<div class="col-xs-10">
 
<div class="col-xs-10">
Line 932: Line 1,288:
 
<h3> Cytoplasmic Expression</h3>
 
<h3> Cytoplasmic Expression</h3>
 
<h4>Cytoplasmic expression is our recombinant protein production in its raw and simple form. With no tags attached to the fusion protein, both Winsulin and Proinsulin will accumulate within the cytoplasm to form aggregated inclusion bodies. Extraction will involve complete lysis of the cell and purification will require separating them from DNA,  membranes and other proteins.
 
<h4>Cytoplasmic expression is our recombinant protein production in its raw and simple form. With no tags attached to the fusion protein, both Winsulin and Proinsulin will accumulate within the cytoplasm to form aggregated inclusion bodies. Extraction will involve complete lysis of the cell and purification will require separating them from DNA,  membranes and other proteins.
<br><br>
+
<br></br>
 
The reason to express in the cytoplasm is mainly to compare our other expression systems to where we will be able to see whether they are a viable means of production.
 
The reason to express in the cytoplasm is mainly to compare our other expression systems to where we will be able to see whether they are a viable means of production.
 
+
<br></br>
 +
We are using the E. Coli shuffle strain as alternative to BL21 because it is associated with a higher capacity to fold recombinant protein within the cytoplasm This should promote the formation of disulfide bonds and reduce the formation of inclusion bodies
 
</h4>
 
</h4>
  
 
</div>
 
</div>
<div class="row">
+
<div class="row" align = "center">
 
<figure>
 
<figure>
<img class="crispy ecoliexp" style="margin-left:22.5%" src="https://static.igem.org/mediawiki/2017/1/1a/T--Sydney_Australia--design_ecolicytexp.png" width="55%"></img>
+
<img class="crispy ecoliexp" src="https://static.igem.org/mediawiki/2017/1/1a/T--Sydney_Australia--design_ecolicytexp.png" width="90%"></img>
 
</figure>
 
</figure>
 
</div>
 
</div>
<div class="row">
+
<div class="row" align = "center">
<figcaption>Figure 1. Details of E. Coli cytoplasmic expression of pro/winsulin</figcaption>
+
<figcaption><br>Figure 5. Details of E. Coli cytoplasmic expression of pro/winsulin</figcaption>
 
</div>
 
</div>
 
</div>
 
</div>
Line 955: Line 1,312:
 
<h3> Periplasmic Expression</h3>
 
<h3> Periplasmic Expression</h3>
 
<h4>Potentially the biggest hurdle to overcome in efficiently producing recombinant insulin is having the three disulfide bonds in proinsulin and active insulin form correctly. This is because they require an oxidative environment that isn’t usually found in the cytoplasm of common protein factories like E. coli where proteins are naturally expressed.
 
<h4>Potentially the biggest hurdle to overcome in efficiently producing recombinant insulin is having the three disulfide bonds in proinsulin and active insulin form correctly. This is because they require an oxidative environment that isn’t usually found in the cytoplasm of common protein factories like E. coli where proteins are naturally expressed.
<br>
+
<br><br>
 
Fortunately, the periplasmic compartment of gram negative bacteria, including E. coli is more oxidative than the cytoplasm and will therefore improve disulfide bond formation. So we are using the Ecotin tag to target proinsulin and Winsulin to the periplasm in the hope that they will fold correctly and form the correct disulfides.
 
Fortunately, the periplasmic compartment of gram negative bacteria, including E. coli is more oxidative than the cytoplasm and will therefore improve disulfide bond formation. So we are using the Ecotin tag to target proinsulin and Winsulin to the periplasm in the hope that they will fold correctly and form the correct disulfides.
<br>
+
<br><br>
This method also has the additional advantage that the periplasmic fraction can be extracted without lysing the entire cell, separating our insulin from cells DNA and the rest of the cytoplasmic “junk”.
+
This method also has the additional advantage that the periplasmic fraction can be extracted without lysing the entire cell, separating our insulin from cells DNA and the rest of the cytoplasmic “junk”.<br><br>
 
</h4>
 
</h4>
 
</div>
 
</div>
<div class="row">
+
<div class="row" align = "center">
 
<figure>
 
<figure>
<img class="crispy ecoliexp" style="margin-left:22.5%" src="https://static.igem.org/mediawiki/2017/f/f3/T--Sydney_Australia--design_ecoliperiexp.png" width="55%"></img>
+
<img class="crispy ecoliexp" src="https://static.igem.org/mediawiki/2017/f/f3/T--Sydney_Australia--design_ecoliperiexp.png" width="90%"></img>
 
</figure>
 
</figure>
 
</div>
 
</div>
<div class="row">
+
<div class="row" align = "center">
<figcaption>Figure 2. Details of E. Coli periplasmic expression of pro/winsulin</figcaption>
+
<figcaption><br>Figure 6. Details of E. Coli periplasmic expression of pro/winsulin</figcaption>
 
</div>
 
</div>
 
</div>
 
</div>
Line 975: Line 1,332:
 
<div class="bish">
 
<div class="bish">
 
<h3> Secretory Expression</h3>
 
<h3> Secretory Expression</h3>
<h4> Current methods of insulin production grow bacteria in huge vats. But bacteria like E. coli that only express the protein in the cytoplasm need to be lysed to extract it. Which means they need to drain hundreds of thousands of liters of culture to separate the cells from the media before lysing the cells and then purifying insulin from the DNA and other cellular proteins. Although we will be testing cytoplasmic E. coli expression similar to these methods, we wanted to come up with a way to efficiently separate our insulin from the cells and decided the best way would be have it secreted directly into the media. This is where Bacillus subtilis comes in!
+
<h4> Current methods of insulin production grow bacteria in huge vats. But bacteria like E. coli that only express the protein in the cytoplasm need to be lysed to extract it. Which means they need to drain hundreds of thousands of liters of culture to separate the cells from the media before lysing the cells and then purifying insulin from the DNA and other cellular proteins. Although we will be testing cytoplasmic E. coli expression similar to these methods, we wanted to come up with a way to efficiently separate our insulin from the cells and decided the best way would be have it secreted directly into the media.  
Bacillus has been a common tool for recombinant protein production for years and has been proven again and again that they are highly efficient secretion factories. The hope is that having the insulin separated from the cells in the media would mean that scaled up production could use a system where the media is constantly cycled out and the cells can continuously produce our insulin. As can be seen in Figure 3, expression using B. Subtilis can be very simple contributing to our goal to create an easily purifiable product.
+
<br><br><center>This is where Bacillus subtilis comes in!</center><br><br>
 +
Bacillus has been a common tool for recombinant protein production for years and has been proven again and again that they are highly efficient secretion factories. The hope is that having the insulin separated from the cells in the media would mean that scaled up production could use a system where the media is constantly cycled out and the cells can continuously produce our insulin. As can be seen in Figure 7, expression using B. Subtilis can be very simple contributing to our goal to create an easily purifiable product.
 
  </h4>
 
  </h4>
<div class="row">
+
<div class="row" align = "center">
 
<figure>
 
<figure>
 
<img style="margin-left:12.5%" class="img-center center-block crispy ecoliexp" align="left" src="https://static.igem.org/mediawiki/2017/a/ab/T--Sydney_Australia--design_bacexp.png" width="75%"></img>
 
<img style="margin-left:12.5%" class="img-center center-block crispy ecoliexp" align="left" src="https://static.igem.org/mediawiki/2017/a/ab/T--Sydney_Australia--design_bacexp.png" width="75%"></img>
Line 984: Line 1,342:
 
</div>
 
</div>
  
<figcaption>Figure 3. Details of expression of pro/winsulin in B. Subtilis</figcaption>
+
<figcaption><br>Figure 7. Details of expression of pro/winsulin in B. Subtilis</figcaption>
  
 
</div>
 
</div>
Line 992: Line 1,350:
 
</div>
 
</div>
  
<div class="row" id="purification-intro">
+
<div class="row" id="purification-intro" align = "center">
 
<div class="para_container">
 
<div class="para_container">
 
<h2> Our Purification Process</h2>
 
<h2> Our Purification Process</h2>
Line 998: Line 1,356:
 
<br>
 
<br>
 
<h4> Our insulins were designed with a 6x His sequence at the N-terminus of the insulin. This sequence, comprised of 6 histidine residues, binds to nickel. When cell lysates or media containing insulin are added to nickel beads, all of the cellular components should wash off from the beads. This separates them from insulin which remains bound to the nickel beads. As such, the 6x His tag sequence's affinity to nickel can be used to purify insulin from cells or media.
 
<h4> Our insulins were designed with a 6x His sequence at the N-terminus of the insulin. This sequence, comprised of 6 histidine residues, binds to nickel. When cell lysates or media containing insulin are added to nickel beads, all of the cellular components should wash off from the beads. This separates them from insulin which remains bound to the nickel beads. As such, the 6x His tag sequence's affinity to nickel can be used to purify insulin from cells or media.
 
 
<br></br> We considered two methods for the purification of our insulins: nickel columns, and nickel agarose resin. The nickel column method is simpler, as insulin can be purified in a single step, yet it is more expensive. On the other hand, the nickel agarose resin method involves more steps but is more cost-effective.
 
<br></br> We considered two methods for the purification of our insulins: nickel columns, and nickel agarose resin. The nickel column method is simpler, as insulin can be purified in a single step, yet it is more expensive. On the other hand, the nickel agarose resin method involves more steps but is more cost-effective.
 
<br></br> An additional factor in the purification of our insulins is the need to remove the 6x His sequence and the expression tags from the insulin. We designed our Winsulin constructs so that both could be cleaved off in a single step by TEV protease. Our Proinsulin constructs take this further - in a single step using the protease trypsin, the His-tag, expression tag and C chain are removed, simultaneously removing the tags and allowing the proinsulin to fold into active insulin.  
 
<br></br> An additional factor in the purification of our insulins is the need to remove the 6x His sequence and the expression tags from the insulin. We designed our Winsulin constructs so that both could be cleaved off in a single step by TEV protease. Our Proinsulin constructs take this further - in a single step using the protease trypsin, the His-tag, expression tag and C chain are removed, simultaneously removing the tags and allowing the proinsulin to fold into active insulin.  
+
</h4>
<br></br>In the nickel column method, the protease step also releases the insulin from the nickel column for collection. However, it also reduces the amount of insulin released from the nickel column. Taking this into consideration, along with the increased expense of the nickel column method, our team decided to use the nickel agarose resin method for insulin purification. </h4>
+
 
</div>
 
</div>
 
</div>
 
</div>
  
<div class="row" id="purification_box_row">
+
<div class="row" id="purification_box_row" align = "center">
 
<div class="purification_box">
 
<div class="purification_box">
 
<figure>  
 
<figure>  
 
<img class="crispy purification" align="left" src="https://static.igem.org/mediawiki/2017/2/29/T--Sydney_Australia--design_purification.png" width="100%"></img>
 
<img class="crispy purification" align="left" src="https://static.igem.org/mediawiki/2017/2/29/T--Sydney_Australia--design_purification.png" width="100%"></img>
<figcaption>Figure 4. Purification process</figcaption>
+
<figcaption><br>Figure 8. Schematic demonstrating the purification methods</figcaption>
 
+
 
</figure>
 
</figure>
 
</div>
 
</div>
 
</div>
 
</div>
  
<div class="row" id="Assays Intro-intro">
+
<div class="row" align = "center">
 +
<div class="para_container">
 +
<br></br><h4>In the nickel column method, the protease step also releases the insulin from the nickel column for collection. However, it also reduces the amount of insulin released from the nickel column. Taking this into consideration, along with the increased expense of the nickel column method, our team decided to use the nickel agarose resin method for insulin purification.</h4>
 +
</div>
 +
</div>
 +
 
 +
<div class="row" id="Assays Intro-intro" align = "center">
 
<div class="para_container">
 
<div class="para_container">
 
<h2> Assays</h2>
 
<h2> Assays</h2>
 
<div class = "divider1"></div>
 
<div class = "divider1"></div>
 
<br></br>
 
<br></br>
<h4> ??</h4>
+
<center><h10>ELISA Assay</h10></center>
 +
<h4> As an initial test to determine protein folding and accurately quantify expression yield, we will be using an ELISA. This test uses antibodies that bind to the folded structure of insulin with extremely high specificity. In this regard, it gives an initial indication as to whether the protein is in a conformation that could potentially bind to the insulin receptor. Additionally, the antibodies are tagged with fluorescent protein, so the relative fluorescence will correlate to the amount of insulin in the sample, also with great accuracy.<br><br>
  
 
<figure>  
 
<figure>  
<img class="crispy" align="left" src="https://static.igem.org/mediawiki/2017/9/95/T--Sydney_Australia--design_assay.png" width="100%"></img>
+
<img class="crispy" align="left" src="https://static.igem.org/mediawiki/2017/2/29/T--Sydney_Australia--design_elisaassay.png" width="100%"></img>
<figcaption>Figure ?. Schematic for ELISA and glucose uptake assays for insulin assay</figcaption>
+
<figcaption><br><br>Figure 9. Schematic for ELISA insulin assay</figcaption>
 +
</figure>
 +
<br><br>
 +
<center><h10>Glucose Uptake Assay</h10></center>
 +
<br></br>Following the ELISA, we will test the function of our expressed recombinant Winsulin, and Proinsulin (with trypsin removal of the C-peptide) using an in vitro glucose uptake assay. Here, we measure the changes in glycogen synthesis and glucose oxidation in response to activation of the insulin receptor in cell cultures. C14 radioalabelled glucose will be taken up into the cell at a faster rate upon stimulation and result in incorporation of the carbon into glycogen and CO2, which is measured by a scintillation counter. This assay is a great alternative to an in vivo assay that uses involves assessing the convulsions of mice in response to injections of increasing concentrations of insulin.</h4>
 +
<br></br>
 +
<figure>
 +
<img class="crispy" align="left" src="https://static.igem.org/mediawiki/2017/4/4a/T--Sydney_Australia--design_glucoseuptake.png" width="100%"></img>
 +
<figcaption><br><br>Figure 10. Schematic for glucose uptake assays for insulin assay</figcaption>
 
</figure>
 
</figure>
 
</div>
 
</div>
 
</div>
 
</div>
  
<div class="row" id="additional-intro">
+
<div class="row" id="additional-intro" align = "center">
 
<div class="para_container">
 
<div class="para_container">
<h2> Additional Solutions</h2>
+
<h2> Additional Design Considerations</h2>
 
<div class = "divider2"></div>
 
<div class = "divider2"></div>
<br></br>
 
<h4> ??</h4>
 
 
<br></br>
 
<br></br>
 
<h3> WB800 Bacillus Strain</h3>
 
<h3> WB800 Bacillus Strain</h3>
Line 1,047: Line 1,415:
 
Our actual solution: find one that already exists.  
 
Our actual solution: find one that already exists.  
 
<br></br>
 
<br></br>
And hence we discovered B. subtilis WB800. It is one of the more recent of a long line of protease deficient strains of Bacillus subtilis that have been optimised for recombinant protein secretion (Figure 5).
+
And hence we discovered B. subtilis WB800. It is one of the more recent of a long line of protease deficient strains of Bacillus subtilis that have been optimised for recombinant protein secretion (Figure 11).
 
<br></br>
 
<br></br>
 
WB800 specifically has 8 proteases knocked that include both intracellular and membrane bound. The strain was kindly provided to us for experimental use by Professor Sui-Lam Wong of the University of Calgary, Canada.
 
WB800 specifically has 8 proteases knocked that include both intracellular and membrane bound. The strain was kindly provided to us for experimental use by Professor Sui-Lam Wong of the University of Calgary, Canada.
Line 1,053: Line 1,421:
 
<figure>  
 
<figure>  
 
<img class="crispy" align="left" src="https://static.igem.org/mediawiki/2017/9/93/T--Sydney_Australia--modelling_wb800.png" width="100%"></img>
 
<img class="crispy" align="left" src="https://static.igem.org/mediawiki/2017/9/93/T--Sydney_Australia--modelling_wb800.png" width="100%"></img>
<figcaption>Figure 5. WB800 protease knockout strain</figcaption>
+
<figcaption>Figure 11. WB800 protease knockout strain</figcaption>
 
</figure>
 
</figure>
  
 +
</div>
 +
</div>
 +
 +
<div class="row" id="pus270" align = "center">
 +
<br></br>
 
<div class="para_container">
 
<div class="para_container">
<h2> pUS270</h2>
+
<h3> pUS270 </h3>
<div class = "divider3"></div>
+
<div class = "divider4"></div>
 
<br></br>
 
<br></br>
<h4>Although pUS258 appeared to work quite well as an expression vector, we noticed that it wasn't the most streamline process of cloning in our constructs nor transforming into Bacillus subtilis because of an MCS that was incompatible with the BioBrick cloning system, and the extra steps needed to ensure the correct integration of the plasmid into the chromosome.
+
<h4>Although pUS258 appeared to work quite well as an expression vector, we noticed that it wasn't the most streamlined process of cloning in our constructs nor transforming into Bacillus subtilis because of an MCS that was incompatible with the BioBrick cloning system, and the extra steps needed to ensure the correct integration of the plasmid into the chromosome.
 
<br></br>
 
<br></br>
 
So we decided to design a new compact, highly efficient replicative expression vector that would serve not just our own future experiments, but the whole iGEM community. Thus, pUS270 was born!
 
So we decided to design a new compact, highly efficient replicative expression vector that would serve not just our own future experiments, but the whole iGEM community. Thus, pUS270 was born!
Line 1,066: Line 1,439:
 
While we were too short on time to construct it ourselves, we are holding onto it for a future project that can be tested and eventually submitted to the registry.
 
While we were too short on time to construct it ourselves, we are holding onto it for a future project that can be tested and eventually submitted to the registry.
 
<br></br>
 
<br></br>
Click on each feature for more information
+
Select each dropdown for more information
 
</h4>
 
</h4>
 
</div>
 
</div>
 
</div>
 
</div>
</div>
+
 
</div>
+
<div class="row" style="padding:20px;" align = "center">
 +
<div class="col-xs-5">
 +
<img class="crispy img-responsive" style="margin-top:50px;" src="https://static.igem.org/mediawiki/2017/c/c2/T--Sydney_Australia--pus270.png" width="100%"/>
 
</div>
 
</div>
  
<div class="pus270_container">
+
<div class="col-xs-7">
<div class="pus_270">
+
<div class="pus_270_info element_info_box_container" style="padding:5%;background:white;border:3px solid #e2e2e2;">
<plasmid id="pdemo" class="plasmid" plasmidheight="450" plasmidwidth="600" sequencelength="1240">
+
    <plasmidtrack style="fill:#e2e2e2;stroke:none;" trackclass="track" radius="200" width="5">
+
    <!-- plasmid title -->
+
        <tracklabel text="pUS270" labelstyle="font-size:30px;font-weight:700;font-family:'Quicksand';"></tracklabel>
+
        <tracklabel text="5707 bp" labelstyle="font-size:18px;font-weight:400;font-family:'Quicksand';" vadjust="25"></tracklabel>
+
  
 +
<div class="panel-group" id="anti_info" >
 +
  <div class="panel panel-default">
 +
    <div class="panel-heading" style="background-color:#f2cbf1">
 +
      <h4 class="panel-title">
 +
        <a data-toggle="collapse" href="#collapse4" style="font-size:30px;">Antibiotic Resistance</a>
 +
      </h4>
 +
    </div>
 +
    <div id="collapse4" class="panel-collapse collapse">
 +
<div class="panel-body">
 +
<h4>Codes for Neomycin Phosphotransferase II that gives transformants resistance to both Neomycin and Kanamycin. Allows selective screening of transformants</h4>
  
        <!-- NeoR/KanR -->  
+
</div>
  <trackmarker markerclass="markerhover" start="0" end="200" style="fill:#f2cbf1"  arrowendlength="15" arrowendwidth="10" vadjust="-10" wadjust="20">
+
</div>
                <svgelement type="a" xlink:href="" id="anti" target="_blank">
+
</div>
            <markerlabel labelclass="markerlabel" text="NeoR/KanR" style="fill:#3e3f3f;font-weight:700;font-family:'Quicksand';font-size:16px;" ></markerlabel>
+
</div>
            </svgelement>
+
  
  </trackmarker>
+
<div class="panel-group" id="pip_info" >
        <!-- pIP501 Rep -->   
+
  <div class="panel panel-default">
  <trackmarker markerclass="markerhover" start="220" end="420" style="fill:#b1d7dd" arrowendlength="15" arrowendwidth="10" vadjust="-10" wadjust="20">
+
    <div class="panel-heading" style="background-color:#b1d7dd">
                <svgelement type="a" xlink:href="" id="pip" target="_blank">
+
      <h4 class="panel-title">
          <markerlabel labelclass="markerlabel" text="pIP501 Rep" style="fill:#3e3f3f;font-weight:700;font-family:'Quicksand';font-size:16px;" ></markerlabel>
+
         <a data-toggle="collapse" href="#collapse1" style="font-size:30px;">pIP501 Rep</a>
            </svgelement>
+
      </h4>
            </trackmarker>
+
    </div>
      <!-- B. Subtilis OriV -->   
+
    <div id="collapse1" class="panel-collapse collapse">
  <trackmarker markerclass="markerhover" start="440" end="540" style="fill:#eca0a7" vadjust="-10" wadjust="20">
+
<div class="panel-body">
                    <svgelement type="a" xlink:href="" id="boriv" target="_blank">
+
<h4>This gene codes for the Replicator protein that pairs with the Bacillus OriV and is essential to promote the independent replication of pUS270 in Bacillus. </h4>
          <markerlabel labelclass="markerlabel" text="B. Subtilis OriV" style="fill:#3e3f3f;font-weight:700;font-family:'Quicksand';font-size:16px;" ></markerlabel>
+
            </svgelement>
+
            </trackmarker>
+
 
+
         <!-- E. Coli OriV -->   
+
  <trackmarker markerclass="markerhover" start="560" end="660" style="fill:#fbde9e" vadjust="-10" wadjust="20">
+
                    <svgelement type="a" xlink:href="" id="eoriv" target="_blank">
+
          <markerlabel labelclass="markerlabel" text="E. Coli OriV" style="fill:#3e3f3f;font-weight:700;font-family:'Quicksand';font-size:16px;" ></markerlabel>
+
            </svgelement>
+
            </trackmarker>
+
+
        <!-- Lac Operator -->   
+
  <trackmarker markerclass="markerhover" start="680" end="780" style="fill:#cdf8ff" vadjust="-10" wadjust="20">
+
                    <svgelement type="a" xlink:href="" id="laco" target="_blank">
+
          <markerlabel labelclass="markerlabel" text="Lac Operator" style="fill:#3e3f3f;font-weight:700;font-family:'Quicksand';font-size:16px;" ></markerlabel>
+
            </svgelement>
+
            </trackmarker>
+
  
        <!-- MCS -->   
+
</div>
  <trackmarker markerclass="markerhover" start="800" end="840" style="fill:#d0cece" vadjust="-10" wadjust="20">
+
</div>
                  <svgelement type="a" xlink:href="" id="mcs1" target="_blank">
+
</div>
          <markerlabel labelclass="markerlabel" text="MCS" style="fill:#3e3f3f;font-weight:700;font-family:'Quicksand';font-size:16px;" ></markerlabel>
+
</div>
            </svgelement>
+
            </trackmarker>
+
      <!-- Sf-AmilCP-6 -->   
+
  <trackmarker markerclass="markerhover" start="860" end="1000" style="fill:#a395c8" arrowendlength="15" arrowendwidth="10" vadjust="-10" wadjust="20">
+
                  <svgelement type="a" xlink:href="" id="super" target="_blank">
+
          <markerlabel labelclass="markerlabel" text="Sf-AmilCP-6" style="fill:#3e3f3f;font-weight:700;font-family:'Quicksand';font-size:16px;" ></markerlabel>
+
            </svgelement>
+
            </trackmarker>
+
+
  
      <!-- MCS -->  
+
<div class="panel-group" id="boriv_info" >
  <trackmarker markerclass="markerhover" start="1020" end="1060" style="fill:#d0cece" vadjust="-10" wadjust="20">
+
  <div class="panel panel-default">
                  <svgelement type="a" xlink:href="" id="mcs2" target="_blank">
+
    <div class="panel-heading" style="background-color:#eca0a7">
          <markerlabel labelclass="markerlabel" text="MCS" style="fill:#3e3f3f;font-weight:700;font-family:'Quicksand';font-size:16px;" ></markerlabel>
+
      <h4 class="panel-title">
            </svgelement>
+
        <a data-toggle="collapse" href="#collapse5" style="font-size:30px;">B. Subtilis origin of replication</a>
            </trackmarker>
+
      </h4>
 +
    </div>
 +
    <div id="collapse5" class="panel-collapse collapse">
 +
<div class="panel-body">
 +
<h4>This region allows independent replication of the vector within Bacillus at a high copy number to provide more copies of the recombinant gene to maximise expression.</h4>
  
      <!-- LacI-->   
 
  <trackmarker markerclass="markerhover" start="1080" end="1220" style="fill:#afe0b2" arrowendlength="15" arrowendwidth="10" vadjust="-10" wadjust="20">
 
                    <svgelement type="a" xlink:href="" id="lacr" target="_blank">
 
          <markerlabel labelclass="markerlabel" text="LacI" style="fill:#3e3f3f;font-weight:700;font-family:'Quicksand';font-size:16px;" ></markerlabel>
 
            </svgelement>
 
            </trackmarker>
 
 
    </plasmidtrack>
 
</plasmid>
 
 
</div>
 
</div>
<div class="pus_270_info element_info_box_container" style="padding:5%;">
 
<div class="lacr_info">
 
<h6>Lac Operon Repressor</h6>
 
 
<h4>Codes for the production of the repressor protein that binds to the Lac Operator to prevent expression until induction of the media with IPTG. We have designed pUS270 to have the LacI under the pVeg promoter for strong constitutive expression in Bacillus.</h4>
 
 
</div>
 
</div>
 
+
</div>
<div class="pip_info">
+
<h6>pIP501 Rep</h6>
+
<h4>This gene codes for the Replicator protein that pairs with the Bacillus OriV and is essential to promote the independent replication of pUS270 in Bacillus. </h4>
+
 
</div>
 
</div>
  
<div class="eoriv_info">
+
<div class="panel-group" id="eoriv_info" >
<h6>E. coli OriV</h6>
+
  <div class="panel panel-default">
 +
    <div class="panel-heading" style="background-color:#fbde9e">
 +
      <h4 class="panel-title">
 +
        <a data-toggle="collapse" href="#collapse2" style="font-size:30px;">E. coli OriV</a>
 +
      </h4>
 +
    </div>
 +
    <div id="collapse2" class="panel-collapse collapse">
 +
<div class="panel-body">
 
<h4>Taken from pSB1C3, having this origin of replication will make it easier to construct the plasmid using E. coli as well as improve cloning efficiency downstream. Chosen because of the high copy number of pSB1C3.</h4>
 
<h4>Taken from pSB1C3, having this origin of replication will make it easier to construct the plasmid using E. coli as well as improve cloning efficiency downstream. Chosen because of the high copy number of pSB1C3.</h4>
</div>
 
  
<div class="mcs_info">
 
<h6>Multiple Cloning Site</h6>
 
<h4>The multiple cloning site of pUS258 and other expression plasmids that we considered using either had too few restriction sites or sites that were incompatible for the efficient cloning with the BB Prefix and Suffix. So we have designed two highly diverse MCS’ that have 27 unique sites amongst them on either side of SF AmylCP-6 to promote simple cloning of parts from the Bio Brick Registry.</h4>
 
 
</div>
 
</div>
 
<div class="anti_info">
 
<h6>Antibiotic Resistance</h6>
 
 
<h4>Codes for Neomycin Phosphotransferase II that gives transformants resistance to both Neomycin and Kanamycin. Allows selective screening of transformants</h4>
 
 
</div>
 
</div>
 
+
</div>
<div class="boriv_info">
+
<h6> Antibiotic Resistance </h6>
+
<h4>This region allows independent replication of the vector within Bacillus at a high copy number to provide more copies of the recombinant gene to maximise expression.</h4>
+
 
</div>
 
</div>
  
<div class="laco_info">
+
<div class="panel-group" id="laco_info" >
<h6>Lac Operator </h6>
+
  <div class="panel panel-default">
 +
    <div class="panel-heading" style="background-color:#cdf8ff">
 +
      <h4 class="panel-title">
 +
        <a data-toggle="collapse" href="#collapse6" style="font-size:30px;">Lac Operator</a>
 +
      </h4>
 +
    </div>
 +
    <div id="collapse6" class="panel-collapse collapse">
 +
<div class="panel-body">
 
<h4>Consists of the target sequence for the lac repressor protein to contribute to the IPTG induction system.</h4>
 
<h4>Consists of the target sequence for the lac repressor protein to contribute to the IPTG induction system.</h4>
</div>
 
  
<div class="super_info">
+
</div>
<h6>SuperFold AmilCP-6</h6>
+
</div>
<h4>SuperFold AmilCP-6 is a variant of amilCP which was used by the 2016 Sydney IGEM team and originally submitted to the registry by Team Uppsala Sweden in 2011. This variant has undergone site directed mutagenesis to increase the folding rate of the chromoprotein and enhance the blue colour. We are taking advantage of this protein to enable blue-white screening without the need for adding X-gal to the plates. Cloning with the two multiple cloning sites that flank SF AmilCP-6 essentially swaps it with the insert to leave the recombinant bacteria white rather than blue. </h4>
+
</div>
 
</div>
 
</div>
  
 
+
<div class="panel-group" id="lacr_infolacr_info" >
 +
  <div class="panel panel-default">
 +
    <div class="panel-heading" style="background-color:#d0cece">
 +
      <h4 class="panel-title">
 +
        <a data-toggle="collapse" href="#collapse3" style="font-size:30px;">Multiple Cloning Site</a>
 +
      </h4>
 +
    </div>
 +
    <div id="collapse3" class="panel-collapse collapse">
 +
<div class="panel-body">
 +
<h4>The multiple cloning site of pUS258 and other expression plasmids that we considered using either had too few restriction sites or sites that were incompatible for the efficient cloning with the BB Prefix and Suffix. So we have designed two highly diverse MCS’ that have 27 unique sites amongst them on either side of SF AmylCP-6 to promote simple cloning of parts from the Bio Brick Registry.</h4>
  
 
</div>
 
</div>
 
</div>
 
</div>
 
<div class="row" style="height:10vh;"></div>
 
 
</div>
 
</div>
</body>
+
</div>
</html>
+
<script>
+
! function(t, e, n) {
+
    "use strict";
+
  
    function r(t, e) {
+
<div class="panel-group" id="super_info" >
        return e = e || Error,
+
  <div class="panel panel-default">
            function() {
+
    <div class="panel-heading" style="background-color:#a395c8">
                var n, r, i = arguments[0],
+
      <h4 class="panel-title">
                    a = "[" + (t ? t + ":" : "") + i + "] ",
+
        <a data-toggle="collapse" href="#collapse7" style="font-size:30px;">SuperFold AmilCP-6</a>
                    o = arguments[1],
+
      </h4>
                    s = arguments;
+
    </div>
                for (n = a + o.replace(/\{\d+\}/g, function(t) {
+
    <div id="collapse7" class="panel-collapse collapse">
                        var e = +t.slice(1, -1);
+
<div class="panel-body">
                        return e + 2 < s.length ? de(s[e + 2]) : t
+
<h4>SuperFold AmilCP-6 is a variant of amilCP which was used by the 2016 Sydney IGEM team and originally submitted to the registry by Team Uppsala Sweden in 2011. This variant has undergone site directed mutagenesis to increase the folding rate of the chromoprotein and enhance the blue colour. We are taking advantage of this protein to enable blue-white screening without the need for adding X-gal to the plates. Cloning with the two multiple cloning sites that flank SF AmilCP-6 essentially swaps it with the insert to leave the recombinant bacteria white rather than blue. </h4>
                    }), n = n + "\nhttp://errors.angularjs.org/1.3.13/" + (t ? t + "/" : "") + i, r = 2; r < arguments.length; r++) n = n + (2 == r ? "?" : "&") + "p" + (r - 2) + "=" + encodeURIComponent(de(arguments[r]));
+
                return new e(n)
+
            }
+
    }
+
  
    function i(t) {
+
</div>
        if (null == t || C(t)) return !1;
+
</div>
        var e = t.length;
+
</div>
        return t.nodeType === gi && e ? !0 : b(t) || ci(t) || 0 === e || "number" == typeof e && e > 0 && e - 1 in t
+
</div>
     }
+
<div class="panel-group" id="lacr_infolacr_info" >
 +
  <div class="panel panel-default">
 +
    <div class="panel-heading" style="background-color:#afe0b2">
 +
      <h4 class="panel-title">
 +
        <a data-toggle="collapse" href="#collapse0" style="font-size:30px;">Lac Operon Repressor</a>
 +
      </h4>
 +
     </div>
 +
    <div id="collapse0" class="panel-collapse collapse">
 +
<div class="panel-body">
  
    function a(t, e, n) {
+
<h4>Codes for the production of the repressor protein that binds to the Lac Operator to prevent expression until induction of the media with IPTG. We have designed pUS270 to have the LacI under the pVeg promoter for strong constitutive expression in Bacillus.</h4>
        var r, o;
+
        if (t)
+
            if (k(t))
+
                for (r in t) "prototype" == r || "length" == r || "name" == r || t.hasOwnProperty && !t.hasOwnProperty(r) || e.call(n, t[r], r, t);
+
            else if (ci(t) || i(t)) {
+
            var s = "object" != typeof t;
+
            for (r = 0, o = t.length; o > r; r++)(s || r in t) && e.call(n, t[r], r, t)
+
        } else if (t.forEach && t.forEach !== a) t.forEach(e, n, t);
+
        else
+
            for (r in t) t.hasOwnProperty(r) && e.call(n, t[r], r, t);
+
        return t
+
    }
+
  
    function o(t) {
+
</div>
        return Object.keys(t).sort()
+
</div>
    }
+
</div>
 +
</div>
  
    function s(t, e, n) {
 
        for (var r = o(t), i = 0; i < r.length; i++) e.call(n, t[r[i]], r[i]);
 
        return r
 
    }
 
  
    function u(t) {
 
        return function(e, n) {
 
            t(n, e)
 
        }
 
    }
 
  
    function l() {
 
        return ++ui
 
    }
 
  
    function c(t, e) {
 
        e ? t.$$hashKey = e : delete t.$$hashKey
 
    }
 
  
    function f(t) {
 
        for (var e = t.$$hashKey, n = 1, r = arguments.length; r > n; n++) {
 
            var i = arguments[n];
 
            if (i)
 
                for (var a = Object.keys(i), o = 0, s = a.length; s > o; o++) {
 
                    var u = a[o];
 
                    t[u] = i[u]
 
                }
 
        }
 
        return c(t, e), t
 
    }
 
  
    function d(t) {
 
        return parseInt(t, 10)
 
    }
 
  
    function h(t, e) {
 
        return f(Object.create(t), e)
 
    }
 
  
    function p() {}
 
  
    function $(t) {
 
        return t
 
    }
 
  
    function m(t) {
 
        return function() {
 
            return t
 
        }
 
    }
 
  
    function g(t) {
 
        return "undefined" == typeof t
 
    }
 
  
    function v(t) {
 
        return "undefined" != typeof t
 
    }
 
  
    function y(t) {
 
        return null !== t && "object" == typeof t
 
    }
 
  
    function b(t) {
 
        return "string" == typeof t
 
    }
 
  
    function w(t) {
 
        return "number" == typeof t
 
    }
 
  
    function x(t) {
 
        return "[object Date]" === ai.call(t)
 
    }
 
  
    function k(t) {
 
        return "function" == typeof t
 
    }
 
  
    function S(t) {
 
        return "[object RegExp]" === ai.call(t)
 
    }
 
  
    function C(t) {
+
</div>
        return t && t.window === t
+
</div>
    }
+
</div>
  
    function A(t) {
 
        return t && t.$evalAsync && t.$watch
 
    }
 
  
    function O(t) {
 
        return "[object File]" === ai.call(t)
 
    }
 
  
    function E(t) {
+
</div>
        return "[object FormData]" === ai.call(t)
+
    }
+
  
    function j(t) {
+
<div class="row" align = "center">
        return "[object Blob]" === ai.call(t)
+
<h4>References<h4>
    }
+
<ol>
 
+
<li style="font-family:'Quicksand';color:#3e3f3f;font-size:16px;">Rajpal, G., Liu, M., Zhang, Yi, Arvan, P. (2009). Single-Chain Insulins as Receptor Agonists. Mol Endocrinol 23(5):679-688</li>
    function N(t) {
+
</ol>
        return "boolean" == typeof t
+
</div>
    }
+
<div class="row" style="height:10vh;"></div>
 
+
</div>
    function T(t) {
+
</body>
        return t && k(t.then)
+
</html>
    }
+
 
+
    function M(t) {
+
        return !(!t || !(t.nodeName || t.prop && t.attr && t.find))
+
    }
+
 
+
    function P(t) {
+
        var e, n = {},
+
            r = t.split(",");
+
        for (e = 0; e < r.length; e++) n[r[e]] = !0;
+
        return n
+
    }
+
 
+
    function V(t) {
+
        return Wr(t.nodeName || t[0] && t[0].nodeName)
+
    }
+
 
+
    function q(t, e) {
+
        var n = t.indexOf(e);
+
        return n >= 0 && t.splice(n, 1), e
+
    }
+
 
+
    function D(t, e, n, r) {
+
        if (C(t) || A(t)) throw oi("cpws", "Can't copy! Making copies of Window or Scope instances is not supported.");
+
        if (e) {
+
            if (t === e) throw oi("cpi", "Can't copy! Source and destination are identical.");
+
            if (n = n || [], r = r || [], y(t)) {
+
                var i = n.indexOf(t);
+
                if (-1 !== i) return r[i];
+
                n.push(t), r.push(e)
+
            }
+
            var o;
+
            if (ci(t)) {
+
                e.length = 0;
+
                for (var s = 0; s < t.length; s++) o = D(t[s], null, n, r), y(t[s]) && (n.push(t[s]), r.push(o)), e.push(o)
+
            } else {
+
                var u = e.$$hashKey;
+
                ci(e) ? e.length = 0 : a(e, function(t, n) {
+
                    delete e[n]
+
                });
+
                for (var l in t) t.hasOwnProperty(l) && (o = D(t[l], null, n, r), y(t[l]) && (n.push(t[l]), r.push(o)), e[l] = o);
+
                c(e, u)
+
            }
+
        } else if (e = t, t)
+
            if (ci(t)) e = D(t, [], n, r);
+
            else if (x(t)) e = new Date(t.getTime());
+
        else if (S(t)) e = new RegExp(t.source, t.toString().match(/[^\/]*$/)[0]), e.lastIndex = t.lastIndex;
+
        else if (y(t)) {
+
            var f = Object.create(Object.getPrototypeOf(t));
+
            e = D(t, f, n, r)
+
        }
+
        return e
+
    }
+
 
+
    function R(t, e) {
+
        if (ci(t)) {
+
            e = e || [];
+
            for (var n = 0, r = t.length; r > n; n++) e[n] = t[n]
+
        } else if (y(t)) {
+
            e = e || {};
+
            for (var i in t)("$" !== i.charAt(0) || "$" !== i.charAt(1)) && (e[i] = t[i])
+
        }
+
        return e || t
+
    }
+
 
+
    function I(t, e) {
+
        if (t === e) return !0;
+
        if (null === t || null === e) return !1;
+
        if (t !== t && e !== e) return !0;
+
        var r, i, a, o = typeof t,
+
            s = typeof e;
+
        if (o == s && "object" == o) {
+
            if (!ci(t)) {
+
                if (x(t)) return x(e) ? I(t.getTime(), e.getTime()) : !1;
+
                if (S(t) && S(e)) return t.toString() == e.toString();
+
                if (A(t) || A(e) || C(t) || C(e) || ci(e)) return !1;
+
                a = {};
+
                for (i in t)
+
                    if ("$" !== i.charAt(0) && !k(t[i])) {
+
                        if (!I(t[i], e[i])) return !1;
+
                        a[i] = !0
+
                    }
+
                for (i in e)
+
                    if (!a.hasOwnProperty(i) && "$" !== i.charAt(0) && e[i] !== n && !k(e[i])) return !1;
+
                return !0
+
            }
+
            if (!ci(e)) return !1;
+
            if ((r = t.length) == e.length) {
+
                for (i = 0; r > i; i++)
+
                    if (!I(t[i], e[i])) return !1;
+
                return !0
+
            }
+
        }
+
        return !1
+
    }
+
 
+
    function _(t, e, n) {
+
        return t.concat(ni.call(e, n))
+
    }
+
 
+
    function U(t, e) {
+
        return ni.call(t, e || 0)
+
    }
+
 
+
    function L(t, e) {
+
        var n = arguments.length > 2 ? U(arguments, 2) : [];
+
        return !k(e) || e instanceof RegExp ? e : n.length ? function() {
+
            return arguments.length ? e.apply(t, _(n, arguments, 0)) : e.apply(t, n)
+
        } : function() {
+
            return arguments.length ? e.apply(t, arguments) : e.call(t)
+
        }
+
    }
+
 
+
    function F(t, r) {
+
        var i = r;
+
        return "string" == typeof t && "$" === t.charAt(0) && "$" === t.charAt(1) ? i = n : C(r) ? i = "$WINDOW" : r && e === r ? i = "$DOCUMENT" : A(r) && (i = "$SCOPE"), i
+
    }
+
 
+
    function H(t, e) {
+
        return "undefined" == typeof t ? n : (w(e) || (e = e ? 2 : null), JSON.stringify(t, F, e))
+
    }
+
 
+
    function B(t) {
+
        return b(t) ? JSON.parse(t) : t
+
    }
+
 
+
    function z(t) {
+
        t = Qr(t).clone();
+
        try {
+
            t.empty()
+
        } catch (e) {}
+
        var n = Qr("<div>").append(t).html();
+
        try {
+
            return t[0].nodeType === vi ? Wr(n) : n.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/, function(t, e) {
+
                return "<" + Wr(e)
+
            })
+
        } catch (e) {
+
            return Wr(n)
+
        }
+
    }
+
 
+
    function G(t) {
+
        try {
+
            return decodeURIComponent(t)
+
        } catch (e) {}
+
    }
+
 
+
    function W(t) {
+
        var e, n, r = {};
+
        return a((t || "").split("&"), function(t) {
+
            if (t && (e = t.replace(/\+/g, "%20").split("="), n = G(e[0]), v(n))) {
+
                var i = v(e[1]) ? G(e[1]) : !0;
+
                Jr.call(r, n) ? ci(r[n]) ? r[n].push(i) : r[n] = [r[n], i] : r[n] = i
+
            }
+
        }), r
+
    }
+
 
+
    function J(t) {
+
        var e = [];
+
        return a(t, function(t, n) {
+
            ci(t) ? a(t, function(t) {
+
                e.push(Z(n, !0) + (t === !0 ? "" : "=" + Z(t, !0)))
+
            }) : e.push(Z(n, !0) + (t === !0 ? "" : "=" + Z(t, !0)))
+
        }), e.length ? e.join("&") : ""
+
    }
+
 
+
    function Y(t) {
+
        return Z(t, !0).replace(/%26/gi, "&").replace(/%3D/gi, "=").replace(/%2B/gi, "+")
+
    }
+
 
+
    function Z(t, e) {
+
        return encodeURIComponent(t).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%3B/gi, ";").replace(/%20/g, e ? "%20" : "+")
+
    }
+
 
+
    function K(t, e) {
+
        var n, r, i = pi.length;
+
        for (t = Qr(t), r = 0; i > r; ++r)
+
            if (n = pi[r] + e, b(n = t.attr(n))) return n;
+
        return null
+
    }
+
 
+
    function X(t, e) {
+
        var n, r, i = {};
+
        a(pi, function(e) {
+
            var i = e + "app";
+
            !n && t.hasAttribute && t.hasAttribute(i) && (n = t, r = t.getAttribute(i))
+
        }), a(pi, function(e) {
+
            var i, a = e + "app";
+
            !n && (i = t.querySelector("[" + a.replace(":", "\\:") + "]")) && (n = i, r = i.getAttribute(a))
+
        }), n && (i.strictDi = null !== K(n, "strict-di"), e(n, r ? [r] : [], i))
+
    }
+
 
+
    function Q(n, r, i) {
+
        y(i) || (i = {});
+
        var o = {
+
            strictDi: !1
+
        };
+
        i = f(o, i);
+
        var s = function() {
+
                if (n = Qr(n), n.injector()) {
+
                    var t = n[0] === e ? "document" : z(n);
+
                    throw oi("btstrpd", "App Already Bootstrapped with this Element '{0}'", t.replace(/</, "&lt;").replace(/>/, "&gt;"))
+
                }
+
                r = r || [], r.unshift(["$provide", function(t) {
+
                    t.value("$rootElement", n)
+
                }]), i.debugInfoEnabled && r.push(["$compileProvider", function(t) {
+
                    t.debugInfoEnabled(!0)
+
                }]), r.unshift("ng");
+
                var a = Be(r, i.strictDi);
+
                return a.invoke(["$rootScope", "$rootElement", "$compile", "$injector", function(t, e, n, r) {
+
                    t.$apply(function() {
+
                        e.data("$injector", r), n(e)(t)
+
                    })
+
                }]), a
+
            },
+
            u = /^NG_ENABLE_DEBUG_INFO!/,
+
            l = /^NG_DEFER_BOOTSTRAP!/;
+
        return t && u.test(t.name) && (i.debugInfoEnabled = !0, t.name = t.name.replace(u, "")), t && !l.test(t.name) ? s() : (t.name = t.name.replace(l, ""), si.resumeBootstrap = function(t) {
+
            return a(t, function(t) {
+
                r.push(t)
+
            }), s()
+
        }, k(si.resumeDeferredBootstrap) && si.resumeDeferredBootstrap(), void 0)
+
    }
+
 
+
    function te() {
+
        t.name = "NG_ENABLE_DEBUG_INFO!" + t.name, t.location.reload()
+
    }
+
 
+
    function ee(t) {
+
        var e = si.element(t).injector();
+
        if (!e) throw oi("test", "no injector found for element argument to getTestability");
+
        return e.get("$$testability")
+
    }
+
 
+
    function ne(t, e) {
+
        return e = e || "_", t.replace($i, function(t, n) {
+
            return (n ? e : "") + t.toLowerCase()
+
        })
+
    }
+
 
+
    function re() {
+
        var e;
+
        mi || (ti = t.jQuery, ti && ti.fn.on ? (Qr = ti, f(ti.fn, {
+
            scope: Di.scope,
+
            isolateScope: Di.isolateScope,
+
            controller: Di.controller,
+
            injector: Di.injector,
+
            inheritedData: Di.inheritedData
+
        }), e = ti.cleanData, ti.cleanData = function(t) {
+
            var n;
+
            if (li) li = !1;
+
            else
+
                for (var r, i = 0; null != (r = t[i]); i++) n = ti._data(r, "events"), n && n.$destroy && ti(r).triggerHandler("$destroy");
+
            e(t)
+
        }) : Qr = be, si.element = Qr, mi = !0)
+
    }
+
 
+
    function ie(t, e, n) {
+
        if (!t) throw oi("areq", "Argument '{0}' is {1}", e || "?", n || "required");
+
        return t
+
    }
+
 
+
    function ae(t, e, n) {
+
        return n && ci(t) && (t = t[t.length - 1]), ie(k(t), e, "not a function, got " + (t && "object" == typeof t ? t.constructor.name || "Object" : typeof t)), t
+
    }
+
 
+
    function oe(t, e) {
+
        if ("hasOwnProperty" === t) throw oi("badname", "hasOwnProperty is not a valid {0} name", e)
+
    }
+
 
+
    function se(t, e, n) {
+
        if (!e) return t;
+
        for (var r, i = e.split("."), a = t, o = i.length, s = 0; o > s; s++) r = i[s], t && (t = (a = t)[r]);
+
        return !n && k(t) ? L(a, t) : t
+
    }
+
 
+
    function ue(t) {
+
        var e = t[0],
+
            n = t[t.length - 1],
+
            r = [e];
+
        do {
+
            if (e = e.nextSibling, !e) break;
+
            r.push(e)
+
        } while (e !== n);
+
        return Qr(r)
+
    }
+
 
+
    function le() {
+
        return Object.create(null)
+
    }
+
 
+
    function ce(t) {
+
        function e(t, e, n) {
+
            return t[e] || (t[e] = n())
+
        }
+
        var n = r("$injector"),
+
            i = r("ng"),
+
            a = e(t, "angular", Object);
+
        return a.$$minErr = a.$$minErr || r, e(a, "module", function() {
+
            var t = {};
+
            return function(r, a, o) {
+
                var s = function(t, e) {
+
                    if ("hasOwnProperty" === t) throw i("badname", "hasOwnProperty is not a valid {0} name", e)
+
                };
+
                return s(r, "module"), a && t.hasOwnProperty(r) && (t[r] = null), e(t, r, function() {
+
                    function t(t, n, r, i) {
+
                        return i || (i = e),
+
                            function() {
+
                                return i[r || "push"]([t, n, arguments]), l
+
                            }
+
                    }
+
                    if (!a) throw n("nomod", "Module '{0}' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.", r);
+
                    var e = [],
+
                        i = [],
+
                        s = [],
+
                        u = t("$injector", "invoke", "push", i),
+
                        l = {
+
                            _invokeQueue: e,
+
                            _configBlocks: i,
+
                            _runBlocks: s,
+
                            requires: a,
+
                            name: r,
+
                            provider: t("$provide", "provider"),
+
                            factory: t("$provide", "factory"),
+
                            service: t("$provide", "service"),
+
                            value: t("$provide", "value"),
+
                            constant: t("$provide", "constant", "unshift"),
+
                            animation: t("$animateProvider", "register"),
+
                            filter: t("$filterProvider", "register"),
+
                            controller: t("$controllerProvider", "register"),
+
                            directive: t("$compileProvider", "directive"),
+
                            config: u,
+
                            run: function(t) {
+
                                return s.push(t), this
+
                            }
+
                        };
+
                    return o && u(o), l
+
                })
+
            }
+
        })
+
    }
+
 
+
    function fe(t) {
+
        var e = [];
+
        return JSON.stringify(t, function(t, n) {
+
            if (n = F(t, n), y(n)) {
+
                if (e.indexOf(n) >= 0) return "<<already seen>>";
+
                e.push(n)
+
            }
+
            return n
+
        })
+
    }
+
 
+
    function de(t) {
+
        return "function" == typeof t ? t.toString().replace(/ \{[\s\S]*$/, "") : "undefined" == typeof t ? "undefined" : "string" != typeof t ? fe(t) : t
+
    }
+
 
+
    function he(e) {
+
        f(e, {
+
            bootstrap: Q,
+
            copy: D,
+
            extend: f,
+
            equals: I,
+
            element: Qr,
+
            forEach: a,
+
            injector: Be,
+
            noop: p,
+
            bind: L,
+
            toJson: H,
+
            fromJson: B,
+
            identity: $,
+
            isUndefined: g,
+
            isDefined: v,
+
            isString: b,
+
            isFunction: k,
+
            isObject: y,
+
            isNumber: w,
+
            isElement: M,
+
            isArray: ci,
+
            version: xi,
+
            isDate: x,
+
            lowercase: Wr,
+
            uppercase: Yr,
+
            callbacks: {
+
                counter: 0
+
            },
+
            getTestability: ee,
+
            $$minErr: r,
+
            $$csp: hi,
+
            reloadWithDebugInfo: te
+
        }), ei = ce(t);
+
        try {
+
            ei("ngLocale")
+
        } catch (n) {
+
            ei("ngLocale", []).provider("$locale", gn)
+
        }
+
        ei("ng", ["ngLocale"], ["$provide", function(t) {
+
            t.provider({
+
                $$sanitizeUri: Yn
+
            }), t.provider("$compile", Ke).directive({
+
                a: Ea,
+
                input: za,
+
                textarea: za,
+
                form: Pa,
+
                script: qo,
+
                select: Io,
+
                style: Uo,
+
                option: _o,
+
                ngBind: Ja,
+
                ngBindHtml: Za,
+
                ngBindTemplate: Ya,
+
                ngClass: Xa,
+
                ngClassEven: to,
+
                ngClassOdd: Qa,
+
                ngCloak: eo,
+
                ngController: no,
+
                ngForm: Va,
+
                ngHide: jo,
+
                ngIf: ao,
+
                ngInclude: oo,
+
                ngInit: uo,
+
                ngNonBindable: ko,
+
                ngPluralize: So,
+
                ngRepeat: Co,
+
                ngShow: Eo,
+
                ngStyle: No,
+
                ngSwitch: To,
+
                ngSwitchWhen: Mo,
+
                ngSwitchDefault: Po,
+
                ngOptions: Ro,
+
                ngTransclude: Vo,
+
                ngModel: bo,
+
                ngList: lo,
+
                ngChange: Ka,
+
                pattern: Fo,
+
                ngPattern: Fo,
+
                required: Lo,
+
                ngRequired: Lo,
+
                minlength: Bo,
+
                ngMinlength: Bo,
+
                maxlength: Ho,
+
                ngMaxlength: Ho,
+
                ngValue: Wa,
+
                ngModelOptions: xo
+
            }).directive({
+
                ngInclude: so
+
            }).directive(ja).directive(ro), t.provider({
+
                $anchorScroll: ze,
+
                $animate: Gi,
+
                $browser: Je,
+
                $cacheFactory: Ye,
+
                $controller: en,
+
                $document: nn,
+
                $exceptionHandler: rn,
+
                $filter: sr,
+
                $interpolate: $n,
+
                $interval: mn,
+
                $http: fn,
+
                $httpBackend: hn,
+
                $location: Tn,
+
                $log: Mn,
+
                $parse: Hn,
+
                $rootScope: Jn,
+
                $q: Bn,
+
                $$q: zn,
+
                $sce: Qn,
+
                $sceDelegate: Xn,
+
                $sniffer: tr,
+
                $templateCache: Ze,
+
                $templateRequest: er,
+
                $$testability: nr,
+
                $timeout: rr,
+
                $window: or,
+
                $$rAF: Wn,
+
                $$asyncCallback: Ge,
+
                $$jqLite: _e
+
            })
+
        }])
+
    }
+
 
+
    function pe() {
+
        return ++Si
+
    }
+
 
+
    function $e(t) {
+
        return t.replace(Oi, function(t, e, n, r) {
+
            return r ? n.toUpperCase() : n
+
        }).replace(Ei, "Moz$1")
+
    }
+
 
+
    function me(t) {
+
        return !Mi.test(t)
+
    }
+
 
+
    function ge(t) {
+
        var e = t.nodeType;
+
        return e === gi || !e || e === bi
+
    }
+
 
+
    function ve(t, e) {
+
        var n, r, i, o, s = e.createDocumentFragment(),
+
            u = [];
+
        if (me(t)) u.push(e.createTextNode(t));
+
        else {
+
            for (n = n || s.appendChild(e.createElement("div")), r = (Pi.exec(t) || ["", ""])[1].toLowerCase(), i = qi[r] || qi._default, n.innerHTML = i[1] + t.replace(Vi, "<$1></$2>") + i[2], o = i[0]; o--;) n = n.lastChild;
+
            u = _(u, n.childNodes), n = s.firstChild, n.textContent = ""
+
        }
+
        return s.textContent = "", s.innerHTML = "", a(u, function(t) {
+
            s.appendChild(t)
+
        }), s
+
    }
+
 
+
    function ye(t, n) {
+
        n = n || e;
+
        var r;
+
        return (r = Ti.exec(t)) ? [n.createElement(r[1])] : (r = ve(t, n)) ? r.childNodes : []
+
    }
+
 
+
    function be(t) {
+
        if (t instanceof be) return t;
+
        var e;
+
        if (b(t) && (t = fi(t), e = !0), !(this instanceof be)) {
+
            if (e && "<" != t.charAt(0)) throw Ni("nosel", "Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element");
+
            return new be(t)
+
        }
+
        e ? Ne(this, ye(t)) : Ne(this, t)
+
    }
+
 
+
    function we(t) {
+
        return t.cloneNode(!0)
+
    }
+
 
+
    function xe(t, e) {
+
        if (e || Se(t), t.querySelectorAll)
+
            for (var n = t.querySelectorAll("*"), r = 0, i = n.length; i > r; r++) Se(n[r])
+
    }
+
 
+
    function ke(t, e, n, r) {
+
        if (v(r)) throw Ni("offargs", "jqLite#off() does not support the `selector` argument");
+
        var i = Ce(t),
+
            o = i && i.events,
+
            s = i && i.handle;
+
        if (s)
+
            if (e) a(e.split(" "), function(e) {
+
                if (v(n)) {
+
                    var r = o[e];
+
                    if (q(r || [], n), r && r.length > 0) return
+
                }
+
                Ai(t, e, s), delete o[e]
+
            });
+
            else
+
                for (e in o) "$destroy" !== e && Ai(t, e, s), delete o[e]
+
    }
+
 
+
    function Se(t, e) {
+
        var r = t.ng339,
+
            i = r && ki[r];
+
        if (i) {
+
            if (e) return delete i.data[e], void 0;
+
            i.handle && (i.events.$destroy && i.handle({}, "$destroy"), ke(t)), delete ki[r], t.ng339 = n
+
        }
+
    }
+
 
+
    function Ce(t, e) {
+
        var r = t.ng339,
+
            i = r && ki[r];
+
        return e && !i && (t.ng339 = r = pe(), i = ki[r] = {
+
            events: {},
+
            data: {},
+
            handle: n
+
        }), i
+
    }
+
 
+
    function Ae(t, e, n) {
+
        if (ge(t)) {
+
            var r = v(n),
+
                i = !r && e && !y(e),
+
                a = !e,
+
                o = Ce(t, !i),
+
                s = o && o.data;
+
            if (r) s[e] = n;
+
            else {
+
                if (a) return s;
+
                if (i) return s && s[e];
+
                f(s, e)
+
            }
+
        }
+
    }
+
 
+
    function Oe(t, e) {
+
        return t.getAttribute ? (" " + (t.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").indexOf(" " + e + " ") > -1 : !1
+
    }
+
 
+
    function Ee(t, e) {
+
        e && t.setAttribute && a(e.split(" "), function(e) {
+
            t.setAttribute("class", fi((" " + (t.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ").replace(" " + fi(e) + " ", " ")))
+
        })
+
    }
+
 
+
    function je(t, e) {
+
        if (e && t.setAttribute) {
+
            var n = (" " + (t.getAttribute("class") || "") + " ").replace(/[\n\t]/g, " ");
+
            a(e.split(" "), function(t) {
+
                t = fi(t), -1 === n.indexOf(" " + t + " ") && (n += t + " ")
+
            }), t.setAttribute("class", fi(n))
+
        }
+
    }
+
 
+
    function Ne(t, e) {
+
        if (e)
+
            if (e.nodeType) t[t.length++] = e;
+
            else {
+
                var n = e.length;
+
                if ("number" == typeof n && e.window !== e) {
+
                    if (n)
+
                        for (var r = 0; n > r; r++) t[t.length++] = e[r]
+
                } else t[t.length++] = e
+
            }
+
    }
+
 
+
    function Te(t, e) {
+
        return Me(t, "$" + (e || "ngController") + "Controller")
+
    }
+
 
+
    function Me(t, e, r) {
+
        t.nodeType == bi && (t = t.documentElement);
+
        for (var i = ci(e) ? e : [e]; t;) {
+
            for (var a = 0, o = i.length; o > a; a++)
+
                if ((r = Qr.data(t, i[a])) !== n) return r;
+
            t = t.parentNode || t.nodeType === wi && t.host
+
        }
+
    }
+
 
+
    function Pe(t) {
+
        for (xe(t, !0); t.firstChild;) t.removeChild(t.firstChild)
+
    }
+
 
+
    function Ve(t, e) {
+
        e || xe(t);
+
        var n = t.parentNode;
+
        n && n.removeChild(t)
+
    }
+
 
+
    function qe(e, n) {
+
        n = n || t, "complete" === n.document.readyState ? n.setTimeout(e) : Qr(n).on("load", e)
+
    }
+
 
+
    function De(t, e) {
+
        var n = Ri[e.toLowerCase()];
+
        return n && Ii[V(t)] && n
+
    }
+
 
+
    function Re(t, e) {
+
        var n = t.nodeName;
+
        return ("INPUT" === n || "TEXTAREA" === n) && _i[e]
+
    }
+
 
+
    function Ie(t, e) {
+
        var n = function(n, r) {
+
            n.isDefaultPrevented = function() {
+
                return n.defaultPrevented
+
            };
+
            var i = e[r || n.type],
+
                a = i ? i.length : 0;
+
            if (a) {
+
                if (g(n.immediatePropagationStopped)) {
+
                    var o = n.stopImmediatePropagation;
+
                    n.stopImmediatePropagation = function() {
+
                        n.immediatePropagationStopped = !0, n.stopPropagation && n.stopPropagation(), o && o.call(n)
+
                    }
+
                }
+
                n.isImmediatePropagationStopped = function() {
+
                    return n.immediatePropagationStopped === !0
+
                }, a > 1 && (i = R(i));
+
                for (var s = 0; a > s; s++) n.isImmediatePropagationStopped() || i[s].call(t, n)
+
            }
+
        };
+
        return n.elem = t, n
+
    }
+
 
+
    function _e() {
+
        this.$get = function() {
+
            return f(be, {
+
                hasClass: function(t, e) {
+
                    return t.attr && (t = t[0]), Oe(t, e)
+
                },
+
                addClass: function(t, e) {
+
                    return t.attr && (t = t[0]), je(t, e)
+
                },
+
                removeClass: function(t, e) {
+
                    return t.attr && (t = t[0]), Ee(t, e)
+
                }
+
            })
+
        }
+
    }
+
 
+
    function Ue(t, e) {
+
        var n = t && t.$$hashKey;
+
        if (n) return "function" == typeof n && (n = t.$$hashKey()), n;
+
        var r = typeof t;
+
        return n = "function" == r || "object" == r && null !== t ? t.$$hashKey = r + ":" + (e || l)() : r + ":" + t
+
    }
+
 
+
    function Le(t, e) {
+
        if (e) {
+
            var n = 0;
+
            this.nextUid = function() {
+
                return ++n
+
            }
+
        }
+
        a(t, this.put, this)
+
    }
+
 
+
    function Fe(t) {
+
        var e = t.toString().replace(Hi, ""),
+
            n = e.match(Ui);
+
        return n ? "function(" + (n[1] || "").replace(/[\s\r\n]+/, " ") + ")" : "fn"
+
    }
+
 
+
    function He(t, e, n) {
+
        var r, i, o, s;
+
        if ("function" == typeof t) {
+
            if (!(r = t.$inject)) {
+
                if (r = [], t.length) {
+
                    if (e) throw b(n) && n || (n = t.name || Fe(t)), Bi("strictdi", "{0} is not using explicit annotation and cannot be invoked in strict mode", n);
+
                    i = t.toString().replace(Hi, ""), o = i.match(Ui), a(o[1].split(Li), function(t) {
+
                        t.replace(Fi, function(t, e, n) {
+
                            r.push(n)
+
                        })
+
                    })
+
                }
+
                t.$inject = r
+
            }
+
        } else ci(t) ? (s = t.length - 1, ae(t[s], "fn"), r = t.slice(0, s)) : ae(t, "fn", !0);
+
        return r
+
    }
+
 
+
    function Be(t, e) {
+
        function r(t) {
+
            return function(e, n) {
+
                return y(e) ? (a(e, u(t)), void 0) : t(e, n)
+
            }
+
        }
+
 
+
        function i(t, e) {
+
            if (oe(t, "service"), (k(e) || ci(e)) && (e = A.instantiate(e)), !e.$get) throw Bi("pget", "Provider '{0}' must define $get factory method.", t);
+
            return C[t + w] = e
+
        }
+
 
+
        function o(t, e) {
+
            return function() {
+
                var n = E.invoke(e, this);
+
                if (g(n)) throw Bi("undef", "Provider '{0}' must return a value from $get factory method.", t);
+
                return n
+
            }
+
        }
+
 
+
        function s(t, e, n) {
+
            return i(t, {
+
                $get: n !== !1 ? o(t, e) : e
+
            })
+
        }
+
 
+
        function l(t, e) {
+
            return s(t, ["$injector", function(t) {
+
                return t.instantiate(e)
+
            }])
+
        }
+
 
+
        function c(t, e) {
+
            return s(t, m(e), !1)
+
        }
+
 
+
        function f(t, e) {
+
            oe(t, "constant"), C[t] = e, O[t] = e
+
        }
+
 
+
        function d(t, e) {
+
            var n = A.get(t + w),
+
                r = n.$get;
+
            n.$get = function() {
+
                var t = E.invoke(r, n);
+
                return E.invoke(e, null, {
+
                    $delegate: t
+
                })
+
            }
+
        }
+
 
+
        function h(t) {
+
            var e, n = [];
+
            return a(t, function(t) {
+
                function r(t) {
+
                    var e, n;
+
                    for (e = 0, n = t.length; n > e; e++) {
+
                        var r = t[e],
+
                            i = A.get(r[0]);
+
                        i[r[1]].apply(i, r[2])
+
                    }
+
                }
+
                if (!S.get(t)) {
+
                    S.put(t, !0);
+
                    try {
+
                        b(t) ? (e = ei(t), n = n.concat(h(e.requires)).concat(e._runBlocks), r(e._invokeQueue), r(e._configBlocks)) : k(t) ? n.push(A.invoke(t)) : ci(t) ? n.push(A.invoke(t)) : ae(t, "module")
+
                    } catch (i) {
+
                        throw ci(t) && (t = t[t.length - 1]), i.message && i.stack && -1 == i.stack.indexOf(i.message) && (i = i.message + "\n" + i.stack), Bi("modulerr", "Failed to instantiate module {0} due to:\n{1}", t, i.stack || i.message || i)
+
                    }
+
                }
+
            }), n
+
        }
+
 
+
        function $(t, n) {
+
            function r(e, r) {
+
                if (t.hasOwnProperty(e)) {
+
                    if (t[e] === v) throw Bi("cdep", "Circular dependency found: {0}", e + " <- " + x.join(" <- "));
+
                    return t[e]
+
                }
+
                try {
+
                    return x.unshift(e), t[e] = v, t[e] = n(e, r)
+
                } catch (i) {
+
                    throw t[e] === v && delete t[e], i
+
                } finally {
+
                    x.shift()
+
                }
+
            }
+
 
+
            function i(t, n, i, a) {
+
                "string" == typeof i && (a = i, i = null);
+
                var o, s, u, l = [],
+
                    c = Be.$$annotate(t, e, a);
+
                for (s = 0, o = c.length; o > s; s++) {
+
                    if (u = c[s], "string" != typeof u) throw Bi("itkn", "Incorrect injection token! Expected service name as string, got {0}", u);
+
                    l.push(i && i.hasOwnProperty(u) ? i[u] : r(u, a))
+
                }
+
                return ci(t) && (t = t[o]), t.apply(n, l)
+
            }
+
 
+
            function a(t, e, n) {
+
                var r = Object.create((ci(t) ? t[t.length - 1] : t).prototype || null),
+
                    a = i(t, r, e, n);
+
                return y(a) || k(a) ? a : r
+
            }
+
            return {
+
                invoke: i,
+
                instantiate: a,
+
                get: r,
+
                annotate: Be.$$annotate,
+
                has: function(e) {
+
                    return C.hasOwnProperty(e + w) || t.hasOwnProperty(e)
+
                }
+
            }
+
        }
+
        e = e === !0;
+
        var v = {},
+
            w = "Provider",
+
            x = [],
+
            S = new Le([], !0),
+
            C = {
+
                $provide: {
+
                    provider: r(i),
+
                    factory: r(s),
+
                    service: r(l),
+
                    value: r(c),
+
                    constant: r(f),
+
                    decorator: d
+
                }
+
            },
+
            A = C.$injector = $(C, function(t, e) {
+
                throw si.isString(e) && x.push(e), Bi("unpr", "Unknown provider: {0}", x.join(" <- "))
+
            }),
+
            O = {},
+
            E = O.$injector = $(O, function(t, e) {
+
                var r = A.get(t + w, e);
+
                return E.invoke(r.$get, r, n, t)
+
            });
+
        return a(h(t), function(t) {
+
            E.invoke(t || p)
+
        }), E
+
    }
+
 
+
    function ze() {
+
        var t = !0;
+
        this.disableAutoScrolling = function() {
+
            t = !1
+
        }, this.$get = ["$window", "$location", "$rootScope", function(e, n, r) {
+
            function i(t) {
+
                var e = null;
+
                return Array.prototype.some.call(t, function(t) {
+
                    return "a" === V(t) ? (e = t, !0) : void 0
+
                }), e
+
            }
+
 
+
            function a() {
+
                var t = s.yOffset;
+
                if (k(t)) t = t();
+
                else if (M(t)) {
+
                    var n = t[0],
+
                        r = e.getComputedStyle(n);
+
                    t = "fixed" !== r.position ? 0 : n.getBoundingClientRect().bottom
+
                } else w(t) || (t = 0);
+
                return t
+
            }
+
 
+
            function o(t) {
+
                if (t) {
+
                    t.scrollIntoView();
+
                    var n = a();
+
                    if (n) {
+
                        var r = t.getBoundingClientRect().top;
+
                        e.scrollBy(0, r - n)
+
                    }
+
                } else e.scrollTo(0, 0)
+
            }
+
 
+
            function s() {
+
                var t, e = n.hash();
+
                e ? (t = u.getElementById(e)) ? o(t) : (t = i(u.getElementsByName(e))) ? o(t) : "top" === e && o(null) : o(null)
+
            }
+
            var u = e.document;
+
            return t && r.$watch(function() {
+
                return n.hash()
+
            }, function(t, e) {
+
                (t !== e || "" !== t) && qe(function() {
+
                    r.$evalAsync(s)
+
                })
+
            }), s
+
        }]
+
    }
+
 
+
    function Ge() {
+
        this.$get = ["$$rAF", "$timeout", function(t, e) {
+
            return t.supported ? function(e) {
+
                return t(e)
+
            } : function(t) {
+
                return e(t, 0, !1)
+
            }
+
        }]
+
    }
+
 
+
    function We(t, e, r, i) {
+
        function o(t) {
+
            try {
+
                t.apply(null, U(arguments, 1))
+
            } finally {
+
                if (k--, 0 === k)
+
                    for (; S.length;) try {
+
                        S.pop()()
+
                    } catch (e) {
+
                        r.error(e)
+
                    }
+
            }
+
        }
+
 
+
        function s(t) {
+
            var e = t.indexOf("#");
+
            return -1 === e ? "" : t.substr(e + 1)
+
        }
+
 
+
        function u(t, e) {
+
            ! function n() {
+
                a(A, function(t) {
+
                    t()
+
                }), C = e(n, t)
+
            }()
+
        }
+
 
+
        function l() {
+
            c(), f()
+
        }
+
 
+
        function c() {
+
            O = t.history.state, O = g(O) ? null : O, I(O, V) && (O = V), V = O
+
        }
+
 
+
        function f() {
+
            (j !== h.url() || E !== O) && (j = h.url(), E = O, a(M, function(t) {
+
                t(h.url(), O)
+
            }))
+
        }
+
 
+
        function d(t) {
+
            try {
+
                return decodeURIComponent(t)
+
            } catch (e) {
+
                return t
+
            }
+
        }
+
        var h = this,
+
            $ = e[0],
+
            m = t.location,
+
            v = t.history,
+
            y = t.setTimeout,
+
            w = t.clearTimeout,
+
            x = {};
+
        h.isMock = !1;
+
        var k = 0,
+
            S = [];
+
        h.$$completeOutstandingRequest = o, h.$$incOutstandingRequestCount = function() {
+
            k++
+
        }, h.notifyWhenNoOutstandingRequests = function(t) {
+
            a(A, function(t) {
+
                t()
+
            }), 0 === k ? t() : S.push(t)
+
        };
+
        var C, A = [];
+
        h.addPollFn = function(t) {
+
            return g(C) && u(100, y), A.push(t), t
+
        };
+
        var O, E, j = m.href,
+
            N = e.find("base"),
+
            T = null;
+
        c(), E = O, h.url = function(e, n, r) {
+
            if (g(r) && (r = null), m !== t.location && (m = t.location), v !== t.history && (v = t.history), e) {
+
                var a = E === r;
+
                if (j === e && (!i.history || a)) return h;
+
                var o = j && xn(j) === xn(e);
+
                return j = e, E = r, !i.history || o && a ? (o || (T = e), n ? m.replace(e) : o ? m.hash = s(e) : m.href = e) : (v[n ? "replaceState" : "pushState"](r, "", e), c(), E = O), h
+
            }
+
            return T || m.href.replace(/%27/g, "'")
+
        }, h.state = function() {
+
            return O
+
        };
+
        var M = [],
+
            P = !1,
+
            V = null;
+
        h.onUrlChange = function(e) {
+
            return P || (i.history && Qr(t).on("popstate", l), Qr(t).on("hashchange", l), P = !0), M.push(e), e
+
        }, h.$$checkUrlChange = f, h.baseHref = function() {
+
            var t = N.attr("href");
+
            return t ? t.replace(/^(https?\:)?\/\/[^\/]*/, "") : ""
+
        };
+
        var q = {},
+
            D = "",
+
            R = h.baseHref();
+
        h.cookies = function(t, e) {
+
            var i, a, o, s, u;
+
            if (!t) {
+
                if ($.cookie !== D)
+
                    for (D = $.cookie, a = D.split("; "), q = {}, s = 0; s < a.length; s++) o = a[s], u = o.indexOf("="), u > 0 && (t = d(o.substring(0, u)), q[t] === n && (q[t] = d(o.substring(u + 1))));
+
                return q
+
            }
+
            e === n ? $.cookie = encodeURIComponent(t) + "=;path=" + R + ";expires=Thu, 01 Jan 1970 00:00:00 GMT" : b(e) && (i = ($.cookie = encodeURIComponent(t) + "=" + encodeURIComponent(e) + ";path=" + R).length + 1, i > 4096 && r.warn("Cookie '" + t + "' possibly not set or overflowed because it was too large (" + i + " > 4096 bytes)!"))
+
        }, h.defer = function(t, e) {
+
            var n;
+
            return k++, n = y(function() {
+
                delete x[n], o(t)
+
            }, e || 0), x[n] = !0, n
+
        }, h.defer.cancel = function(t) {
+
            return x[t] ? (delete x[t], w(t), o(p), !0) : !1
+
        }
+
    }
+
 
+
    function Je() {
+
        this.$get = ["$window", "$log", "$sniffer", "$document", function(t, e, n, r) {
+
            return new We(t, r, e, n)
+
        }]
+
    }
+
 
+
    function Ye() {
+
        this.$get = function() {
+
            function t(t, n) {
+
                function i(t) {
+
                    t != d && (h ? h == t && (h = t.n) : h = t, a(t.n, t.p), a(t, d), d = t, d.n = null)
+
                }
+
 
+
                function a(t, e) {
+
                    t != e && (t && (t.p = e), e && (e.n = t))
+
                }
+
                if (t in e) throw r("$cacheFactory")("iid", "CacheId '{0}' is already taken!", t);
+
                var o = 0,
+
                    s = f({}, n, {
+
                        id: t
+
                    }),
+
                    u = {},
+
                    l = n && n.capacity || Number.MAX_VALUE,
+
                    c = {},
+
                    d = null,
+
                    h = null;
+
                return e[t] = {
+
                    put: function(t, e) {
+
                        if (l < Number.MAX_VALUE) {
+
                            var n = c[t] || (c[t] = {
+
                                key: t
+
                            });
+
                            i(n)
+
                        }
+
                        if (!g(e)) return t in u || o++, u[t] = e, o > l && this.remove(h.key), e
+
                    },
+
                    get: function(t) {
+
                        if (l < Number.MAX_VALUE) {
+
                            var e = c[t];
+
                            if (!e) return;
+
                            i(e)
+
                        }
+
                        return u[t]
+
                    },
+
                    remove: function(t) {
+
                        if (l < Number.MAX_VALUE) {
+
                            var e = c[t];
+
                            if (!e) return;
+
                            e == d && (d = e.p), e == h && (h = e.n), a(e.n, e.p), delete c[t]
+
                        }
+
                        delete u[t], o--
+
                    },
+
                    removeAll: function() {
+
                        u = {}, o = 0, c = {}, d = h = null
+
                    },
+
                    destroy: function() {
+
                        u = null, s = null, c = null, delete e[t]
+
                    },
+
                    info: function() {
+
                        return f({}, s, {
+
                            size: o
+
                        })
+
                    }
+
                }
+
            }
+
            var e = {};
+
            return t.info = function() {
+
                var t = {};
+
                return a(e, function(e, n) {
+
                    t[n] = e.info()
+
                }), t
+
            }, t.get = function(t) {
+
                return e[t]
+
            }, t
+
        }
+
    }
+
 
+
    function Ze() {
+
        this.$get = ["$cacheFactory", function(t) {
+
            return t("templates")
+
        }]
+
    }
+
 
+
    function Ke(t, r) {
+
        function i(t, e) {
+
            var n = /^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/,
+
                r = {};
+
            return a(t, function(t, i) {
+
                var a = t.match(n);
+
                if (!a) throw Wi("iscp", "Invalid isolate scope definition for directive '{0}'. Definition: {... {1}: '{2}' ...}", e, i, t);
+
                r[i] = {
+
                    mode: a[1][0],
+
                    collection: "*" === a[2],
+
                    optional: "?" === a[3],
+
                    attrName: a[4] || i
+
                }
+
            }), r
+
        }
+
        var o = {},
+
            s = "Directive",
+
            l = /^\s*directive\:\s*([\w\-]+)\s+(.*)$/,
+
            c = /(([\w\-]+)(?:\:([^;]+))?;?)/,
+
            d = P("ngSrc,ngSrcset,src,srcset"),
+
            g = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/,
+
            w = /^(on[a-z]+|formaction)$/;
+
        this.directive = function S(e, n) {
+
            return oe(e, "directive"), b(e) ? (ie(n, "directiveFactory"), o.hasOwnProperty(e) || (o[e] = [], t.factory(e + s, ["$injector", "$exceptionHandler", function(t, n) {
+
                var r = [];
+
                return a(o[e], function(a, o) {
+
                    try {
+
                        var s = t.invoke(a);
+
                        k(s) ? s = {
+
                            compile: m(s)
+
                        } : !s.compile && s.link && (s.compile = m(s.link)), s.priority = s.priority || 0, s.index = o, s.name = s.name || e, s.require = s.require || s.controller && s.name, s.restrict = s.restrict || "EA", y(s.scope) && (s.$$isolateBindings = i(s.scope, s.name)), r.push(s)
+
                    } catch (u) {
+
                        n(u)
+
                    }
+
                }), r
+
            }])), o[e].push(n)) : a(e, u(S)), this
+
        }, this.aHrefSanitizationWhitelist = function(t) {
+
            return v(t) ? (r.aHrefSanitizationWhitelist(t), this) : r.aHrefSanitizationWhitelist()
+
        }, this.imgSrcSanitizationWhitelist = function(t) {
+
            return v(t) ? (r.imgSrcSanitizationWhitelist(t), this) : r.imgSrcSanitizationWhitelist()
+
        };
+
        var x = !0;
+
        this.debugInfoEnabled = function(t) {
+
            return v(t) ? (x = t, this) : x
+
        }, this.$get = ["$injector", "$interpolate", "$exceptionHandler", "$templateRequest", "$parse", "$controller", "$rootScope", "$document", "$sce", "$animate", "$$sanitizeUri", function(t, r, i, u, m, v, S, C, O, E, j) {
+
            function N(t, e) {
+
                try {
+
                    t.addClass(e)
+
                } catch (n) {}
+
            }
+
 
+
            function T(t, e, n, r, i) {
+
                t instanceof Qr || (t = Qr(t)), a(t, function(e, n) {
+
                    e.nodeType == vi && e.nodeValue.match(/\S+/) && (t[n] = Qr(e).wrap("<span></span>").parent()[0])
+
                });
+
                var o = P(t, e, t, n, r, i);
+
                T.$$addScopeClass(t);
+
                var s = null;
+
                return function(e, n, r) {
+
                    ie(e, "scope"), r = r || {};
+
                    var i = r.parentBoundTranscludeFn,
+
                        a = r.transcludeControllers,
+
                        u = r.futureParentElement;
+
                    i && i.$$boundTransclude && (i = i.$$boundTransclude), s || (s = M(u));
+
                    var l;
+
                    if (l = "html" !== s ? Qr(X(s, Qr("<div>").append(t).html())) : n ? Di.clone.call(t) : t, a)
+
                        for (var c in a) l.data("$" + c + "Controller", a[c].instance);
+
                    return T.$$addScopeInfo(l, e), n && n(l, e), o && o(e, l, l, i), l
+
                }
+
            }
+
 
+
            function M(t) {
+
                var e = t && t[0];
+
                return e ? "foreignobject" !== V(e) && e.toString().match(/SVG/) ? "svg" : "html" : "html"
+
            }
+
 
+
            function P(t, e, r, i, a, o) {
+
                function s(t, r, i, a) {
+
                    var o, s, u, l, c, f, d, h, m;
+
                    if (p) {
+
                        var g = r.length;
+
                        for (m = new Array(g), c = 0; c < $.length; c += 3) d = $[c], m[d] = r[d]
+
                    } else m = r;
+
                    for (c = 0, f = $.length; f > c;) u = m[$[c++]], o = $[c++], s = $[c++], o ? (o.scope ? (l = t.$new(), T.$$addScopeInfo(Qr(u), l)) : l = t, h = o.transcludeOnThisElement ? D(t, o.transclude, a, o.elementTranscludeOnThisElement) : !o.templateOnThisElement && a ? a : !a && e ? D(t, e) : null, o(s, l, u, i, h)) : s && s(t, u.childNodes, n, a)
+
                }
+
                for (var u, l, c, f, d, h, p, $ = [], m = 0; m < t.length; m++) u = new oe, l = R(t[m], [], u, 0 === m ? i : n, a), c = l.length ? F(l, t[m], u, e, r, null, [], [], o) : null, c && c.scope && T.$$addScopeClass(u.$$element), d = c && c.terminal || !(f = t[m].childNodes) || !f.length ? null : P(f, c ? (c.transcludeOnThisElement || !c.templateOnThisElement) && c.transclude : e), (c || d) && ($.push(m, c, d), h = !0, p = p || c), o = null;
+
                return h ? s : null
+
            }
+
 
+
            function D(t, e, n) {
+
                var r = function(r, i, a, o, s) {
+
                    return r || (r = t.$new(!1, s), r.$$transcluded = !0), e(r, i, {
+
                        parentBoundTranscludeFn: n,
+
                        transcludeControllers: a,
+
                        futureParentElement: o
+
                    })
+
                };
+
                return r
+
            }
+
 
+
            function R(t, e, n, r, i) {
+
                var a, o, s = t.nodeType,
+
                    u = n.$attr;
+
                switch (s) {
+
                    case gi:
+
                        B(e, Xe(V(t)), "E", r, i);
+
                        for (var f, d, h, p, $, m, g = t.attributes, v = 0, w = g && g.length; w > v; v++) {
+
                            var x = !1,
+
                                k = !1;
+
                            f = g[v], d = f.name, $ = fi(f.value), p = Xe(d), (m = fe.test(p)) && (d = d.replace(Ji, "").substr(8).replace(/_(.)/g, function(t, e) {
+
                                return e.toUpperCase()
+
                            }));
+
                            var S = p.replace(/(Start|End)$/, "");
+
                            G(S) && p === S + "Start" && (x = d, k = d.substr(0, d.length - 5) + "end", d = d.substr(0, d.length - 6)), h = Xe(d.toLowerCase()), u[h] = d, (m || !n.hasOwnProperty(h)) && (n[h] = $, De(t, h) && (n[h] = !0)), te(t, e, $, h, m), B(e, h, "A", r, i, x, k)
+
                        }
+
                        if (o = t.className, y(o) && (o = o.animVal), b(o) && "" !== o)
+
                            for (; a = c.exec(o);) h = Xe(a[2]), B(e, h, "C", r, i) && (n[h] = fi(a[3])), o = o.substr(a.index + a[0].length);
+
                        break;
+
                    case vi:
+
                        K(e, t.nodeValue);
+
                        break;
+
                    case yi:
+
                        try {
+
                            a = l.exec(t.nodeValue), a && (h = Xe(a[1]), B(e, h, "M", r, i) && (n[h] = fi(a[2])))
+
                        } catch (C) {}
+
                }
+
                return e.sort(Y), e
+
            }
+
 
+
            function _(t, e, n) {
+
                var r = [],
+
                    i = 0;
+
                if (e && t.hasAttribute && t.hasAttribute(e)) {
+
                    do {
+
                        if (!t) throw Wi("uterdir", "Unterminated attribute, found '{0}' but no matching '{1}' found.", e, n);
+
                        t.nodeType == gi && (t.hasAttribute(e) && i++, t.hasAttribute(n) && i--), r.push(t), t = t.nextSibling
+
                    } while (i > 0)
+
                } else r.push(t);
+
                return Qr(r)
+
            }
+
 
+
            function L(t, e, n) {
+
                return function(r, i, a, o, s) {
+
                    return i = _(i[0], e, n), t(r, i, a, o, s)
+
                }
+
            }
+
 
+
            function F(t, o, s, u, l, c, f, d, h) {
+
                function p(t, e, n, r) {
+
                    t && (n && (t = L(t, n, r)), t.require = C.require, t.directiveName = O, (V === C || C.$$isolateScope) && (t = re(t, {
+
                        isolateScope: !0
+
                    })), f.push(t)), e && (n && (e = L(e, n, r)), e.require = C.require, e.directiveName = O, (V === C || C.$$isolateScope) && (e = re(e, {
+
                        isolateScope: !0
+
                    })), d.push(e))
+
                }
+
 
+
                function $(t, e, n, r) {
+
                    var i, o, s = "data",
+
                        u = !1,
+
                        l = n;
+
                    if (b(e)) {
+
                        if (o = e.match(g), e = e.substring(o[0].length), o[3] && (o[1] ? o[3] = null : o[1] = o[3]), "^" === o[1] ? s = "inheritedData" : "^^" === o[1] && (s = "inheritedData", l = n.parent()), "?" === o[2] && (u = !0), i = null, r && "data" === s && (i = r[e]) && (i = i.instance), i = i || l[s]("$" + e + "Controller"), !i && !u) throw Wi("ctreq", "Controller '{0}', required by directive '{1}', can't be found!", e, t);
+
                        return i || null
+
                    }
+
                    return ci(e) && (i = [], a(e, function(e) {
+
                        i.push($(t, e, n, r))
+
                    })), i
+
                }
+
 
+
                function w(t, e, i, u, l) {
+
                    function c(t, e, r) {
+
                        var i;
+
                        return A(t) || (r = e, e = t, t = n), G && (i = w), r || (r = G ? k.parent() : k), l(t, e, i, r, j)
+
                    }
+
                    var h, p, g, y, b, w, x, k, C;
+
                    if (o === i ? (C = s, k = s.$$element) : (k = Qr(i), C = new oe(k, s)), V && (b = e.$new(!0)), l && (x = c, x.$$boundTransclude = l), P && (S = {}, w = {}, a(P, function(t) {
+
                            var n, r = {
+
                                $scope: t === V || t.$$isolateScope ? b : e,
+
                                $element: k,
+
                                $attrs: C,
+
                                $transclude: x
+
                            };
+
                            y = t.controller, "@" == y && (y = C[t.name]), n = v(y, r, !0, t.controllerAs), w[t.name] = n, G || k.data("$" + t.name + "Controller", n.instance), S[t.name] = n
+
                        })), V) {
+
                        T.$$addScopeInfo(k, b, !0, !(q && (q === V || q === V.$$originalDirective))), T.$$addScopeClass(k, !0);
+
                        var O = S && S[V.name],
+
                            E = b;
+
                        O && O.identifier && V.bindToController === !0 && (E = O.instance), a(b.$$isolateBindings = V.$$isolateBindings, function(t, n) {
+
                            var i, a, o, s, u = t.attrName,
+
                                l = t.optional,
+
                                c = t.mode;
+
                            switch (c) {
+
                                case "@":
+
                                    C.$observe(u, function(t) {
+
                                        E[n] = t
+
                                    }), C.$$observers[u].$$scope = e, C[u] && (E[n] = r(C[u])(e));
+
                                    break;
+
                                case "=":
+
                                    if (l && !C[u]) return;
+
                                    a = m(C[u]), s = a.literal ? I : function(t, e) {
+
                                        return t === e || t !== t && e !== e
+
                                    }, o = a.assign || function() {
+
                                        throw i = E[n] = a(e), Wi("nonassign", "Expression '{0}' used with directive '{1}' is non-assignable!", C[u], V.name)
+
                                    }, i = E[n] = a(e);
+
                                    var f = function(t) {
+
                                        return s(t, E[n]) || (s(t, i) ? o(e, t = E[n]) : E[n] = t), i = t
+
                                    };
+
                                    f.$stateful = !0;
+
                                    var d;
+
                                    d = t.collection ? e.$watchCollection(C[u], f) : e.$watch(m(C[u], f), null, a.literal), b.$on("$destroy", d);
+
                                    break;
+
                                case "&":
+
                                    a = m(C[u]), E[n] = function(t) {
+
                                        return a(e, t)
+
                                    }
+
                            }
+
                        })
+
                    }
+
                    for (S && (a(S, function(t) {
+
                            t()
+
                        }), S = null), h = 0, p = f.length; p > h; h++) g = f[h], ae(g, g.isolateScope ? b : e, k, C, g.require && $(g.directiveName, g.require, k, w), x);
+
                    var j = e;
+
                    for (V && (V.template || null === V.templateUrl) && (j = b), t && t(j, i.childNodes, n, l), h = d.length - 1; h >= 0; h--) g = d[h], ae(g, g.isolateScope ? b : e, k, C, g.require && $(g.directiveName, g.require, k, w), x)
+
                }
+
                h = h || {};
+
                for (var x, S, C, O, E, j, N, M = -Number.MAX_VALUE, P = h.controllerDirectives, V = h.newIsolateScopeDirective, q = h.templateDirective, D = h.nonTlbTranscludeDirective, F = !1, B = !1, G = h.hasElementTranscludeDirective, Y = s.$$element = Qr(o), K = c, Q = u, te = 0, ne = t.length; ne > te; te++) {
+
                    C = t[te];
+
                    var ie = C.$$start,
+
                        se = C.$$end;
+
                    if (ie && (Y = _(o, ie, se)), E = n, M > C.priority) break;
+
                    if ((N = C.scope) && (C.templateUrl || (y(N) ? (Z("new/isolated scope", V || x, C, Y), V = C) : Z("new/isolated scope", V, C, Y)), x = x || C), O = C.name, !C.templateUrl && C.controller && (N = C.controller, P = P || {}, Z("'" + O + "' controller", P[O], C, Y), P[O] = C), (N = C.transclude) && (F = !0, C.$$tlb || (Z("transclusion", D, C, Y), D = C), "element" == N ? (G = !0, M = C.priority, E = Y, Y = s.$$element = Qr(e.createComment(" " + O + ": " + s[O] + " ")), o = Y[0], ee(l, U(E), o), Q = T(E, u, M, K && K.name, {
+
                            nonTlbTranscludeDirective: D
+
                        })) : (E = Qr(we(o)).contents(), Y.empty(), Q = T(E, u))), C.template)
+
                        if (B = !0, Z("template", q, C, Y), q = C, N = k(C.template) ? C.template(Y, s) : C.template, N = ce(N), C.replace) {
+
                            if (K = C, E = me(N) ? [] : tn(X(C.templateNamespace, fi(N))), o = E[0], 1 != E.length || o.nodeType !== gi) throw Wi("tplrt", "Template for directive '{0}' must have exactly one root element. {1}", O, "");
+
                            ee(l, Y, o);
+
                            var ue = {
+
                                    $attr: {}
+
                                },
+
                                le = R(o, [], ue),
+
                                fe = t.splice(te + 1, t.length - (te + 1));
+
                            V && H(le), t = t.concat(le).concat(fe), W(s, ue), ne = t.length
+
                        } else Y.html(N);
+
                    if (C.templateUrl) B = !0, Z("template", q, C, Y), q = C, C.replace && (K = C), w = J(t.splice(te, t.length - te), Y, s, l, F && Q, f, d, {
+
                        controllerDirectives: P,
+
                        newIsolateScopeDirective: V,
+
                        templateDirective: q,
+
                        nonTlbTranscludeDirective: D
+
                    }), ne = t.length;
+
                    else if (C.compile) try {
+
                        j = C.compile(Y, s, Q), k(j) ? p(null, j, ie, se) : j && p(j.pre, j.post, ie, se)
+
                    } catch (de) {
+
                        i(de, z(Y))
+
                    }
+
                    C.terminal && (w.terminal = !0, M = Math.max(M, C.priority))
+
                }
+
                return w.scope = x && x.scope === !0, w.transcludeOnThisElement = F, w.elementTranscludeOnThisElement = G, w.templateOnThisElement = B, w.transclude = Q, h.hasElementTranscludeDirective = G, w
+
            }
+
 
+
            function H(t) {
+
                for (var e = 0, n = t.length; n > e; e++) t[e] = h(t[e], {
+
                    $$isolateScope: !0
+
                })
+
            }
+
 
+
            function B(e, r, a, u, l, c, f) {
+
                if (r === l) return null;
+
                var d = null;
+
                if (o.hasOwnProperty(r))
+
                    for (var p, $ = t.get(r + s), m = 0, g = $.length; g > m; m++) try {
+
                        p = $[m], (u === n || u > p.priority) && -1 != p.restrict.indexOf(a) && (c && (p = h(p, {
+
                            $$start: c,
+
                            $$end: f
+
                        })), e.push(p), d = p)
+
                    } catch (v) {
+
                        i(v)
+
                    }
+
                return d
+
            }
+
 
+
            function G(e) {
+
                if (o.hasOwnProperty(e))
+
                    for (var n, r = t.get(e + s), i = 0, a = r.length; a > i; i++)
+
                        if (n = r[i], n.multiElement) return !0;
+
                return !1
+
            }
+
 
+
            function W(t, e) {
+
                var n = e.$attr,
+
                    r = t.$attr,
+
                    i = t.$$element;
+
                a(t, function(r, i) {
+
                    "$" != i.charAt(0) && (e[i] && e[i] !== r && (r += ("style" === i ? ";" : " ") + e[i]), t.$set(i, r, !0, n[i]))
+
                }), a(e, function(e, a) {
+
                    "class" == a ? (N(i, e), t["class"] = (t["class"] ? t["class"] + " " : "") + e) : "style" == a ? (i.attr("style", i.attr("style") + ";" + e), t.style = (t.style ? t.style + ";" : "") + e) : "$" == a.charAt(0) || t.hasOwnProperty(a) || (t[a] = e, r[a] = n[a])
+
                })
+
            }
+
 
+
            function J(t, e, n, r, i, o, s, l) {
+
                var c, f, d = [],
+
                    p = e[0],
+
                    $ = t.shift(),
+
                    m = h($, {
+
                        templateUrl: null,
+
                        transclude: null,
+
                        replace: null,
+
                        $$originalDirective: $
+
                    }),
+
                    g = k($.templateUrl) ? $.templateUrl(e, n) : $.templateUrl,
+
                    v = $.templateNamespace;
+
                return e.empty(), u(O.getTrustedResourceUrl(g)).then(function(u) {
+
                        var h, b, w, x;
+
                        if (u = ce(u), $.replace) {
+
                            if (w = me(u) ? [] : tn(X(v, fi(u))), h = w[0], 1 != w.length || h.nodeType !== gi) throw Wi("tplrt", "Template for directive '{0}' must have exactly one root element. {1}", $.name, g);
+
                            b = {
+
                                $attr: {}
+
                            }, ee(r, e, h);
+
                            var k = R(h, [], b);
+
                            y($.scope) && H(k), t = k.concat(t), W(n, b)
+
                        } else h = p, e.html(u);
+
                        for (t.unshift(m), c = F(t, h, n, i, e, $, o, s, l), a(r, function(t, n) {
+
                                t == h && (r[n] = e[0])
+
                            }), f = P(e[0].childNodes, i); d.length;) {
+
                            var S = d.shift(),
+
                                C = d.shift(),
+
                                A = d.shift(),
+
                                O = d.shift(),
+
                                E = e[0];
+
                            if (!S.$$destroyed) {
+
                                if (C !== p) {
+
                                    var j = C.className;
+
                                    l.hasElementTranscludeDirective && $.replace || (E = we(h)), ee(A, Qr(C), E), N(Qr(E), j)
+
                                }
+
                                x = c.transcludeOnThisElement ? D(S, c.transclude, O) : O, c(f, S, E, r, x)
+
                            }
+
                        }
+
                        d = null
+
                    }),
+
                    function(t, e, n, r, i) {
+
                        var a = i;
+
                        e.$$destroyed || (d ? d.push(e, n, r, a) : (c.transcludeOnThisElement && (a = D(e, c.transclude, i)), c(f, e, n, r, a)))
+
                    }
+
            }
+
 
+
            function Y(t, e) {
+
                var n = e.priority - t.priority;
+
                return 0 !== n ? n : t.name !== e.name ? t.name < e.name ? -1 : 1 : t.index - e.index
+
            }
+
 
+
            function Z(t, e, n, r) {
+
                if (e) throw Wi("multidir", "Multiple directives [{0}, {1}] asking for {2} on: {3}", e.name, n.name, t, z(r))
+
            }
+
 
+
            function K(t, e) {
+
                var n = r(e, !0);
+
                n && t.push({
+
                    priority: 0,
+
                    compile: function(t) {
+
                        var e = t.parent(),
+
                            r = !!e.length;
+
                        return r && T.$$addBindingClass(e),
+
                            function(t, e) {
+
                                var i = e.parent();
+
                                r || T.$$addBindingClass(i), T.$$addBindingInfo(i, n.expressions), t.$watch(n, function(t) {
+
                                    e[0].nodeValue = t
+
                                })
+
                            }
+
                    }
+
                })
+
            }
+
 
+
            function X(t, n) {
+
                switch (t = Wr(t || "html")) {
+
                    case "svg":
+
                    case "math":
+
                        var r = e.createElement("div");
+
                        return r.innerHTML = "<" + t + ">" + n + "</" + t + ">", r.childNodes[0].childNodes;
+
                    default:
+
                        return n
+
                }
+
            }
+
 
+
            function Q(t, e) {
+
                if ("srcdoc" == e) return O.HTML;
+
                var n = V(t);
+
                return "xlinkHref" == e || "form" == n && "action" == e || "img" != n && ("src" == e || "ngSrc" == e) ? O.RESOURCE_URL : void 0
+
            }
+
 
+
            function te(t, e, n, i, a) {
+
                var o = Q(t, i);
+
                a = d[i] || a;
+
                var s = r(n, !0, o, a);
+
                if (s) {
+
                    if ("multiple" === i && "select" === V(t)) throw Wi("selmulti", "Binding to the 'multiple' attribute is not supported. Element: {0}", z(t));
+
                    e.push({
+
                        priority: 100,
+
                        compile: function() {
+
                            return {
+
                                pre: function(t, e, u) {
+
                                    var l = u.$$observers || (u.$$observers = {});
+
                                    if (w.test(i)) throw Wi("nodomevents", "Interpolations for HTML DOM event attributes are disallowed.  Please use the ng- versions (such as ng-click instead of onclick) instead.");
+
                                    var c = u[i];
+
                                    c !== n && (s = c && r(c, !0, o, a), n = c), s && (u[i] = s(t), (l[i] || (l[i] = [])).$$inter = !0, (u.$$observers && u.$$observers[i].$$scope || t).$watch(s, function(t, e) {
+
                                        "class" === i && t != e ? u.$updateClass(t, e) : u.$set(i, t)
+
                                    }))
+
                                }
+
                            }
+
                        }
+
                    })
+
                }
+
            }
+
 
+
            function ee(t, n, r) {
+
                var i, a, o = n[0],
+
                    s = n.length,
+
                    u = o.parentNode;
+
                if (t)
+
                    for (i = 0, a = t.length; a > i; i++)
+
                        if (t[i] == o) {
+
                            t[i++] = r;
+
                            for (var l = i, c = l + s - 1, f = t.length; f > l; l++, c++) f > c ? t[l] = t[c] : delete t[l];
+
                            t.length -= s - 1, t.context === o && (t.context = r);
+
                            break
+
                        }
+
                u && u.replaceChild(r, o);
+
                var d = e.createDocumentFragment();
+
                d.appendChild(o), Qr(r).data(Qr(o).data()), ti ? (li = !0, ti.cleanData([o])) : delete Qr.cache[o[Qr.expando]];
+
                for (var h = 1, p = n.length; p > h; h++) {
+
                    var $ = n[h];
+
                    Qr($).remove(), d.appendChild($), delete n[h]
+
                }
+
                n[0] = r, n.length = 1
+
            }
+
 
+
            function re(t, e) {
+
                return f(function() {
+
                    return t.apply(null, arguments)
+
                }, t, e)
+
            }
+
 
+
            function ae(t, e, n, r, a, o) {
+
                try {
+
                    t(e, n, r, a, o)
+
                } catch (s) {
+
                    i(s, z(n))
+
                }
+
            }
+
            var oe = function(t, e) {
+
                if (e) {
+
                    var n, r, i, a = Object.keys(e);
+
                    for (n = 0, r = a.length; r > n; n++) i = a[n], this[i] = e[i]
+
                } else this.$attr = {};
+
                this.$$element = t
+
            };
+
            oe.prototype = {
+
                $normalize: Xe,
+
                $addClass: function(t) {
+
                    t && t.length > 0 && E.addClass(this.$$element, t)
+
                },
+
                $removeClass: function(t) {
+
                    t && t.length > 0 && E.removeClass(this.$$element, t)
+
                },
+
                $updateClass: function(t, e) {
+
                    var n = Qe(t, e);
+
                    n && n.length && E.addClass(this.$$element, n);
+
                    var r = Qe(e, t);
+
                    r && r.length && E.removeClass(this.$$element, r)
+
                },
+
                $set: function(t, e, r, o) {
+
                    var s, u = this.$$element[0],
+
                        l = De(u, t),
+
                        c = Re(u, t),
+
                        f = t;
+
                    if (l ? (this.$$element.prop(t, e), o = l) : c && (this[c] = e, f = c), this[t] = e, o ? this.$attr[t] = o : (o = this.$attr[t], o || (this.$attr[t] = o = ne(t, "-"))), s = V(this.$$element), "a" === s && "href" === t || "img" === s && "src" === t) this[t] = e = j(e, "src" === t);
+
                    else if ("img" === s && "srcset" === t) {
+
                        for (var d = "", h = fi(e), p = /(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/, $ = /\s/.test(h) ? p : /(,)/, m = h.split($), g = Math.floor(m.length / 2), v = 0; g > v; v++) {
+
                            var y = 2 * v;
+
                            d += j(fi(m[y]), !0), d += " " + fi(m[y + 1])
+
                        }
+
                        var b = fi(m[2 * v]).split(/\s/);
+
                        d += j(fi(b[0]), !0), 2 === b.length && (d += " " + fi(b[1])), this[t] = e = d
+
                    }
+
                    r !== !1 && (null === e || e === n ? this.$$element.removeAttr(o) : this.$$element.attr(o, e));
+
                    var w = this.$$observers;
+
                    w && a(w[f], function(t) {
+
                        try {
+
                            t(e)
+
                        } catch (n) {
+
                            i(n)
+
                        }
+
                    })
+
                },
+
                $observe: function(t, e) {
+
                    var n = this,
+
                        r = n.$$observers || (n.$$observers = le()),
+
                        i = r[t] || (r[t] = []);
+
                    return i.push(e), S.$evalAsync(function() {
+
                            !i.$$inter && n.hasOwnProperty(t) && e(n[t])
+
                        }),
+
                        function() {
+
                            q(i, e)
+
                        }
+
                }
+
            };
+
            var se = r.startSymbol(),
+
                ue = r.endSymbol(),
+
                ce = "{{" == se || "}}" == ue ? $ : function(t) {
+
                    return t.replace(/\{\{/g, se).replace(/}}/g, ue)
+
                },
+
                fe = /^ngAttr[A-Z]/;
+
            return T.$$addBindingInfo = x ? function(t, e) {
+
                var n = t.data("$binding") || [];
+
                ci(e) ? n = n.concat(e) : n.push(e), t.data("$binding", n)
+
            } : p, T.$$addBindingClass = x ? function(t) {
+
                N(t, "ng-binding")
+
            } : p, T.$$addScopeInfo = x ? function(t, e, n, r) {
+
                var i = n ? r ? "$isolateScopeNoTemplate" : "$isolateScope" : "$scope";
+
                t.data(i, e)
+
            } : p, T.$$addScopeClass = x ? function(t, e) {
+
                N(t, e ? "ng-isolate-scope" : "ng-scope")
+
            } : p, T
+
        }]
+
    }
+
 
+
    function Xe(t) {
+
        return $e(t.replace(Ji, ""))
+
    }
+
 
+
    function Qe(t, e) {
+
        var n = "",
+
            r = t.split(/\s+/),
+
            i = e.split(/\s+/);
+
        t: for (var a = 0; a < r.length; a++) {
+
            for (var o = r[a], s = 0; s < i.length; s++)
+
                if (o == i[s]) continue t;
+
            n += (n.length > 0 ? " " : "") + o
+
        }
+
        return n
+
    }
+
 
+
    function tn(t) {
+
        t = Qr(t);
+
        var e = t.length;
+
        if (1 >= e) return t;
+
        for (; e--;) {
+
            var n = t[e];
+
            n.nodeType === yi && ri.call(t, e, 1)
+
        }
+
        return t
+
    }
+
 
+
    function en() {
+
        var t = {},
+
            e = !1,
+
            i = /^(\S+)(\s+as\s+(\w+))?$/;
+
        this.register = function(e, n) {
+
            oe(e, "controller"), y(e) ? f(t, e) : t[e] = n
+
        }, this.allowGlobals = function() {
+
            e = !0
+
        }, this.$get = ["$injector", "$window", function(a, o) {
+
            function s(t, e, n, i) {
+
                if (!t || !y(t.$scope)) throw r("$controller")("noscp", "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.", i, e);
+
                t.$scope[e] = n
+
            }
+
            return function(r, u, l, c) {
+
                var d, h, p, $;
+
                if (l = l === !0, c && b(c) && ($ = c), b(r)) {
+
                    if (h = r.match(i), !h) throw Yi("ctrlfmt", "Badly formed controller string '{0}'. Must match `__name__ as __id__` or `__name__`.", r);
+
                    p = h[1], $ = $ || h[3], r = t.hasOwnProperty(p) ? t[p] : se(u.$scope, p, !0) || (e ? se(o, p, !0) : n), ae(r, p, !0)
+
                }
+
                if (l) {
+
                    var m = (ci(r) ? r[r.length - 1] : r).prototype;
+
                    return d = Object.create(m || null), $ && s(u, $, d, p || r.name), f(function() {
+
                        return a.invoke(r, d, u, p), d
+
                    }, {
+
                        instance: d,
+
                        identifier: $
+
                    })
+
                }
+
                return d = a.instantiate(r, u, p), $ && s(u, $, d, p || r.name), d
+
            }
+
        }]
+
    }
+
 
+
    function nn() {
+
        this.$get = ["$window", function(t) {
+
            return Qr(t.document)
+
        }]
+
    }
+
 
+
    function rn() {
+
        this.$get = ["$log", function(t) {
+
            return function() {
+
                t.error.apply(t, arguments)
+
            }
+
        }]
+
    }
+
 
+
    function an(t, e) {
+
        if (b(t)) {
+
            var n = t.replace(ta, "").trim();
+
            if (n) {
+
                var r = e("Content-Type");
+
                (r && 0 === r.indexOf(Zi) || on(n)) && (t = B(n))
+
            }
+
        }
+
        return t
+
    }
+
 
+
    function on(t) {
+
        var e = t.match(Xi);
+
        return e && Qi[e[0]].test(t)
+
    }
+
 
+
    function sn(t) {
+
        var e, n, r, i = le();
+
        return t ? (a(t.split("\n"), function(t) {
+
            r = t.indexOf(":"), e = Wr(fi(t.substr(0, r))), n = fi(t.substr(r + 1)), e && (i[e] = i[e] ? i[e] + ", " + n : n)
+
        }), i) : i
+
    }
+
 
+
    function un(t) {
+
        var e = y(t) ? t : n;
+
        return function(n) {
+
            if (e || (e = sn(t)), n) {
+
                var r = e[Wr(n)];
+
                return void 0 === r && (r = null), r
+
            }
+
            return e
+
        }
+
    }
+
 
+
    function ln(t, e, n, r) {
+
        return k(r) ? r(t, e, n) : (a(r, function(r) {
+
            t = r(t, e, n)
+
        }), t)
+
    }
+
 
+
    function cn(t) {
+
        return t >= 200 && 300 > t
+
    }
+
 
+
    function fn() {
+
        var t = this.defaults = {
+
                transformResponse: [an],
+
                transformRequest: [function(t) {
+
                    return !y(t) || O(t) || j(t) || E(t) ? t : H(t)
+
                }],
+
                headers: {
+
                    common: {
+
                        Accept: "application/json, text/plain, */*"
+
                    },
+
                    post: R(Ki),
+
                    put: R(Ki),
+
                    patch: R(Ki)
+
                },
+
                xsrfCookieName: "XSRF-TOKEN",
+
                xsrfHeaderName: "X-XSRF-TOKEN"
+
            },
+
            e = !1;
+
        this.useApplyAsync = function(t) {
+
            return v(t) ? (e = !!t, this) : e
+
        };
+
        var i = this.interceptors = [];
+
        this.$get = ["$httpBackend", "$browser", "$cacheFactory", "$rootScope", "$q", "$injector", function(o, u, l, c, d, h) {
+
            function p(e) {
+
                function i(t) {
+
                    var e = f({}, t);
+
                    return e.data = t.data ? ln(t.data, t.headers, t.status, u.transformResponse) : t.data, cn(t.status) ? e : d.reject(e)
+
                }
+
 
+
                function o(t) {
+
                    var e, n = {};
+
                    return a(t, function(t, r) {
+
                        k(t) ? (e = t(), null != e && (n[r] = e)) : n[r] = t
+
                    }), n
+
                }
+
 
+
                function s(e) {
+
                    var n, r, i, a = t.headers,
+
                        s = f({}, e.headers);
+
                    a = f({}, a.common, a[Wr(e.method)]);
+
                    t: for (n in a) {
+
                        r = Wr(n);
+
                        for (i in s)
+
                            if (Wr(i) === r) continue t;
+
                        s[n] = a[n]
+
                    }
+
                    return o(s)
+
                }
+
                if (!si.isObject(e)) throw r("$http")("badreq", "Http request configuration must be an object.  Received: {0}", e);
+
                var u = f({
+
                    method: "get",
+
                    transformRequest: t.transformRequest,
+
                    transformResponse: t.transformResponse
+
                }, e);
+
                u.headers = s(e), u.method = Yr(u.method);
+
                var l = function(e) {
+
                        var r = e.headers,
+
                            o = ln(e.data, un(r), n, e.transformRequest);
+
                        return g(o) && a(r, function(t, e) {
+
                            "content-type" === Wr(e) && delete r[e]
+
                        }), g(e.withCredentials) && !g(t.withCredentials) && (e.withCredentials = t.withCredentials), w(e, o).then(i, i)
+
                    },
+
                    c = [l, n],
+
                    h = d.when(u);
+
                for (a(A, function(t) {
+
                        (t.request || t.requestError) && c.unshift(t.request, t.requestError), (t.response || t.responseError) && c.push(t.response, t.responseError)
+
                    }); c.length;) {
+
                    var p = c.shift(),
+
                        $ = c.shift();
+
                    h = h.then(p, $)
+
                }
+
                return h.success = function(t) {
+
                    return h.then(function(e) {
+
                        t(e.data, e.status, e.headers, u)
+
                    }), h
+
                }, h.error = function(t) {
+
                    return h.then(null, function(e) {
+
                        t(e.data, e.status, e.headers, u)
+
                    }), h
+
                }, h
+
            }
+
 
+
            function $() {
+
                a(arguments, function(t) {
+
                    p[t] = function(e, n) {
+
                        return p(f(n || {}, {
+
                            method: t,
+
                            url: e
+
                        }))
+
                    }
+
                })
+
            }
+
 
+
            function m() {
+
                a(arguments, function(t) {
+
                    p[t] = function(e, n, r) {
+
                        return p(f(r || {}, {
+
                            method: t,
+
                            url: e,
+
                            data: n
+
                        }))
+
                    }
+
                })
+
            }
+
 
+
            function w(r, i) {
+
                function a(t, n, r, i) {
+
                    function a() {
+
                        s(n, t, r, i)
+
                    }
+
                    h && (cn(t) ? h.put(x, [t, n, sn(r), i]) : h.remove(x)), e ? c.$applyAsync(a) : (a(), c.$$phase || c.$apply())
+
                }
+
 
+
                function s(t, e, n, i) {
+
                    e = Math.max(e, 0), (cn(e) ? m.resolve : m.reject)({
+
                        data: t,
+
                        status: e,
+
                        headers: un(n),
+
                        config: r,
+
                        statusText: i
+
                    })
+
                }
+
 
+
                function l(t) {
+
                    s(t.data, t.status, R(t.headers()), t.statusText)
+
                }
+
 
+
                function f() {
+
                    var t = p.pendingRequests.indexOf(r); - 1 !== t && p.pendingRequests.splice(t, 1)
+
                }
+
                var h, $, m = d.defer(),
+
                    b = m.promise,
+
                    w = r.headers,
+
                    x = S(r.url, r.params);
+
                if (p.pendingRequests.push(r), b.then(f, f), !r.cache && !t.cache || r.cache === !1 || "GET" !== r.method && "JSONP" !== r.method || (h = y(r.cache) ? r.cache : y(t.cache) ? t.cache : C), h && ($ = h.get(x), v($) ? T($) ? $.then(l, l) : ci($) ? s($[1], $[0], R($[2]), $[3]) : s($, 200, {}, "OK") : h.put(x, b)), g($)) {
+
                    var k = ar(r.url) ? u.cookies()[r.xsrfCookieName || t.xsrfCookieName] : n;
+
                    k && (w[r.xsrfHeaderName || t.xsrfHeaderName] = k), o(r.method, x, i, a, w, r.timeout, r.withCredentials, r.responseType)
+
                }
+
                return b
+
            }
+
 
+
            function S(t, e) {
+
                if (!e) return t;
+
                var n = [];
+
                return s(e, function(t, e) {
+
                    null === t || g(t) || (ci(t) || (t = [t]), a(t, function(t) {
+
                        y(t) && (t = x(t) ? t.toISOString() : H(t)), n.push(Z(e) + "=" + Z(t))
+
                    }))
+
                }), n.length > 0 && (t += (-1 == t.indexOf("?") ? "?" : "&") + n.join("&")), t
+
            }
+
            var C = l("$http"),
+
                A = [];
+
            return a(i, function(t) {
+
                A.unshift(b(t) ? h.get(t) : h.invoke(t))
+
            }), p.pendingRequests = [], $("get", "delete", "head", "jsonp"), m("post", "put", "patch"), p.defaults = t, p
+
        }]
+
    }
+
 
+
    function dn() {
+
        return new t.XMLHttpRequest
+
    }
+
 
+
    function hn() {
+
        this.$get = ["$browser", "$window", "$document", function(t, e, n) {
+
            return pn(t, dn, t.defer, e.angular.callbacks, n[0])
+
        }]
+
    }
+
 
+
    function pn(t, e, r, i, o) {
+
        function s(t, e, n) {
+
            var r = o.createElement("script"),
+
                a = null;
+
            return r.type = "text/javascript", r.src = t, r.async = !0, a = function(t) {
+
                Ai(r, "load", a), Ai(r, "error", a), o.body.removeChild(r), r = null;
+
                var s = -1,
+
                    u = "unknown";
+
                t && ("load" !== t.type || i[e].called || (t = {
+
                    type: "error"
+
                }), u = t.type, s = "error" === t.type ? 404 : 200), n && n(s, u)
+
            }, Ci(r, "load", a), Ci(r, "error", a), o.body.appendChild(r), a
+
        }
+
        return function(o, u, l, c, f, d, h, $) {
+
            function m() {
+
                b && b(), w && w.abort()
+
            }
+
 
+
            function g(e, i, a, o, s) {
+
                S !== n && r.cancel(S), b = w = null, e(i, a, o, s), t.$$completeOutstandingRequest(p)
+
            }
+
            if (t.$$incOutstandingRequestCount(), u = u || t.url(), "jsonp" == Wr(o)) {
+
                var y = "_" + (i.counter++).toString(36);
+
                i[y] = function(t) {
+
                    i[y].data = t, i[y].called = !0
+
                };
+
                var b = s(u.replace("JSON_CALLBACK", "angular.callbacks." + y), y, function(t, e) {
+
                    g(c, t, i[y].data, "", e), i[y] = p
+
                })
+
            } else {
+
                var w = e();
+
                w.open(o, u, !0), a(f, function(t, e) {
+
                    v(t) && w.setRequestHeader(e, t)
+
                }), w.onload = function() {
+
                    var t = w.statusText || "",
+
                        e = "response" in w ? w.response : w.responseText,
+
                        n = 1223 === w.status ? 204 : w.status;
+
                    0 === n && (n = e ? 200 : "file" == ir(u).protocol ? 404 : 0), g(c, n, e, w.getAllResponseHeaders(), t)
+
                };
+
                var x = function() {
+
                    g(c, -1, null, null, "")
+
                };
+
                if (w.onerror = x, w.onabort = x, h && (w.withCredentials = !0), $) try {
+
                    w.responseType = $
+
                } catch (k) {
+
                    if ("json" !== $) throw k
+
                }
+
                w.send(l || null)
+
            }
+
            if (d > 0) var S = r(m, d);
+
            else T(d) && d.then(m)
+
        }
+
    }
+
 
+
    function $n() {
+
        var t = "{{",
+
            e = "}}";
+
        this.startSymbol = function(e) {
+
            return e ? (t = e, this) : t
+
        }, this.endSymbol = function(t) {
+
            return t ? (e = t, this) : e
+
        }, this.$get = ["$parse", "$exceptionHandler", "$sce", function(n, r, i) {
+
            function a(t) {
+
                return "\\\\\\" + t
+
            }
+
 
+
            function o(a, o, d, h) {
+
                function p(n) {
+
                    return n.replace(l, t).replace(c, e)
+
                }
+
 
+
                function $(t) {
+
                    try {
+
                        return t = j(t), h && !v(t) ? t : N(t)
+
                    } catch (e) {
+
                        var n = ea("interr", "Can't interpolate: {0}\n{1}", a, e.toString());
+
                        r(n)
+
                    }
+
                }
+
                h = !!h;
+
                for (var m, y, b, w = 0, x = [], S = [], C = a.length, A = [], O = []; C > w;) {
+
                    if (-1 == (m = a.indexOf(t, w)) || -1 == (y = a.indexOf(e, m + s))) {
+
                        w !== C && A.push(p(a.substring(w)));
+
                        break
+
                    }
+
                    w !== m && A.push(p(a.substring(w, m))), b = a.substring(m + s, y), x.push(b), S.push(n(b, $)), w = y + u, O.push(A.length), A.push("")
+
                }
+
                if (d && A.length > 1) throw ea("noconcat", "Error while interpolating: {0}\nStrict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required.  See http://docs.angularjs.org/api/ng.$sce", a);
+
                if (!o || x.length) {
+
                    var E = function(t) {
+
                            for (var e = 0, n = x.length; n > e; e++) {
+
                                if (h && g(t[e])) return;
+
                                A[O[e]] = t[e]
+
                            }
+
                            return A.join("")
+
                        },
+
                        j = function(t) {
+
                            return d ? i.getTrusted(d, t) : i.valueOf(t)
+
                        },
+
                        N = function(t) {
+
                            if (null == t) return "";
+
                            switch (typeof t) {
+
                                case "string":
+
                                    break;
+
                                case "number":
+
                                    t = "" + t;
+
                                    break;
+
                                default:
+
                                    t = H(t)
+
                            }
+
                            return t
+
                        };
+
                    return f(function(t) {
+
                        var e = 0,
+
                            n = x.length,
+
                            i = new Array(n);
+
                        try {
+
                            for (; n > e; e++) i[e] = S[e](t);
+
                            return E(i)
+
                        } catch (o) {
+
                            var s = ea("interr", "Can't interpolate: {0}\n{1}", a, o.toString());
+
                            r(s)
+
                        }
+
                    }, {
+
                        exp: a,
+
                        expressions: x,
+
                        $$watchDelegate: function(t, e, n) {
+
                            var r;
+
                            return t.$watchGroup(S, function(n, i) {
+
                                var a = E(n);
+
                                k(e) && e.call(this, a, n !== i ? r : a, t), r = a
+
                            }, n)
+
                        }
+
                    })
+
                }
+
            }
+
            var s = t.length,
+
                u = e.length,
+
                l = new RegExp(t.replace(/./g, a), "g"),
+
                c = new RegExp(e.replace(/./g, a), "g");
+
            return o.startSymbol = function() {
+
                return t
+
            }, o.endSymbol = function() {
+
                return e
+
            }, o
+
        }]
+
    }
+
 
+
    function mn() {
+
        this.$get = ["$rootScope", "$window", "$q", "$$q", function(t, e, n, r) {
+
            function i(i, o, s, u) {
+
                var l = e.setInterval,
+
                    c = e.clearInterval,
+
                    f = 0,
+
                    d = v(u) && !u,
+
                    h = (d ? r : n).defer(),
+
                    p = h.promise;
+
                return s = v(s) ? s : 0, p.then(null, null, i), p.$$intervalId = l(function() {
+
                    h.notify(f++), s > 0 && f >= s && (h.resolve(f), c(p.$$intervalId), delete a[p.$$intervalId]), d || t.$apply()
+
                }, o), a[p.$$intervalId] = h, p
+
            }
+
            var a = {};
+
            return i.cancel = function(t) {
+
                return t && t.$$intervalId in a ? (a[t.$$intervalId].reject("canceled"), e.clearInterval(t.$$intervalId), delete a[t.$$intervalId], !0) : !1
+
            }, i
+
        }]
+
    }
+
 
+
    function gn() {
+
        this.$get = function() {
+
            return {
+
                id: "en-us",
+
                NUMBER_FORMATS: {
+
                    DECIMAL_SEP: ".",
+
                    GROUP_SEP: ",",
+
                    PATTERNS: [{
+
                        minInt: 1,
+
                        minFrac: 0,
+
                        maxFrac: 3,
+
                        posPre: "",
+
                        posSuf: "",
+
                        negPre: "-",
+
                        negSuf: "",
+
                        gSize: 3,
+
                        lgSize: 3
+
                    }, {
+
                        minInt: 1,
+
                        minFrac: 2,
+
                        maxFrac: 2,
+
                        posPre: "¤",
+
                        posSuf: "",
+
                        negPre: "(¤",
+
                        negSuf: ")",
+
                        gSize: 3,
+
                        lgSize: 3
+
                    }],
+
                    CURRENCY_SYM: "$"
+
                },
+
                DATETIME_FORMATS: {
+
                    MONTH: "January,February,March,April,May,June,July,August,September,October,November,December".split(","),
+
                    SHORTMONTH: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),
+
                    DAY: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),
+
                    SHORTDAY: "Sun,Mon,Tue,Wed,Thu,Fri,Sat".split(","),
+
                    AMPMS: ["AM", "PM"],
+
                    medium: "MMM d, y h:mm:ss a",
+
                    "short": "M/d/yy h:mm a",
+
                    fullDate: "EEEE, MMMM d, y",
+
                    longDate: "MMMM d, y",
+
                    mediumDate: "MMM d, y",
+
                    shortDate: "M/d/yy",
+
                    mediumTime: "h:mm:ss a",
+
                    shortTime: "h:mm a"
+
                },
+
                pluralCat: function(t) {
+
                    return 1 === t ? "one" : "other"
+
                }
+
            }
+
        }
+
    }
+
 
+
    function vn(t) {
+
        for (var e = t.split("/"), n = e.length; n--;) e[n] = Y(e[n]);
+
        return e.join("/")
+
    }
+
 
+
    function yn(t, e) {
+
        var n = ir(t);
+
        e.$$protocol = n.protocol, e.$$host = n.hostname, e.$$port = d(n.port) || ra[n.protocol] || null
+
    }
+
 
+
    function bn(t, e) {
+
        var n = "/" !== t.charAt(0);
+
        n && (t = "/" + t);
+
        var r = ir(t);
+
        e.$$path = decodeURIComponent(n && "/" === r.pathname.charAt(0) ? r.pathname.substring(1) : r.pathname), e.$$search = W(r.search), e.$$hash = decodeURIComponent(r.hash), e.$$path && "/" != e.$$path.charAt(0) && (e.$$path = "/" + e.$$path)
+
    }
+
 
+
    function wn(t, e) {
+
        return 0 === e.indexOf(t) ? e.substr(t.length) : void 0
+
    }
+
 
+
    function xn(t) {
+
        var e = t.indexOf("#");
+
        return -1 == e ? t : t.substr(0, e)
+
    }
+
 
+
    function kn(t) {
+
        return t.replace(/(#.+)|#$/, "$1")
+
    }
+
 
+
    function Sn(t) {
+
        return t.substr(0, xn(t).lastIndexOf("/") + 1)
+
    }
+
 
+
    function Cn(t) {
+
        return t.substring(0, t.indexOf("/", t.indexOf("//") + 2))
+
    }
+
 
+
    function An(t, e) {
+
        this.$$html5 = !0, e = e || "";
+
        var r = Sn(t);
+
        yn(t, this), this.$$parse = function(t) {
+
            var e = wn(r, t);
+
            if (!b(e)) throw ia("ipthprfx", 'Invalid url "{0}", missing path prefix "{1}".', t, r);
+
            bn(e, this), this.$$path || (this.$$path = "/"), this.$$compose()
+
        }, this.$$compose = function() {
+
            var t = J(this.$$search),
+
                e = this.$$hash ? "#" + Y(this.$$hash) : "";
+
            this.$$url = vn(this.$$path) + (t ? "?" + t : "") + e, this.$$absUrl = r + this.$$url.substr(1)
+
        }, this.$$parseLinkUrl = function(i, a) {
+
            if (a && "#" === a[0]) return this.hash(a.slice(1)), !0;
+
            var o, s, u;
+
            return (o = wn(t, i)) !== n ? (s = o, u = (o = wn(e, o)) !== n ? r + (wn("/", o) || o) : t + s) : (o = wn(r, i)) !== n ? u = r + o : r == i + "/" && (u = r), u && this.$$parse(u), !!u
+
        }
+
    }
+
 
+
    function On(t, e) {
+
        var n = Sn(t);
+
        yn(t, this), this.$$parse = function(r) {
+
            function i(t, e, n) {
+
                var r, i = /^\/[A-Z]:(\/.*)/;
+
                return 0 === e.indexOf(n) && (e = e.replace(n, "")), i.exec(e) ? t : (r = i.exec(t), r ? r[1] : t)
+
            }
+
            var a, o = wn(t, r) || wn(n, r);
+
            "#" === o.charAt(0) ? (a = wn(e, o), g(a) && (a = o)) : a = this.$$html5 ? o : "", bn(a, this), this.$$path = i(this.$$path, a, t), this.$$compose()
+
        }, this.$$compose = function() {
+
            var n = J(this.$$search),
+
                r = this.$$hash ? "#" + Y(this.$$hash) : "";
+
            this.$$url = vn(this.$$path) + (n ? "?" + n : "") + r, this.$$absUrl = t + (this.$$url ? e + this.$$url : "")
+
        }, this.$$parseLinkUrl = function(e) {
+
            return xn(t) == xn(e) ? (this.$$parse(e), !0) : !1
+
        }
+
    }
+
 
+
    function En(t, e) {
+
        this.$$html5 = !0, On.apply(this, arguments);
+
        var n = Sn(t);
+
        this.$$parseLinkUrl = function(r, i) {
+
            if (i && "#" === i[0]) return this.hash(i.slice(1)), !0;
+
            var a, o;
+
            return t == xn(r) ? a = r : (o = wn(n, r)) ? a = t + e + o : n === r + "/" && (a = n), a && this.$$parse(a), !!a
+
        }, this.$$compose = function() {
+
            var n = J(this.$$search),
+
                r = this.$$hash ? "#" + Y(this.$$hash) : "";
+
            this.$$url = vn(this.$$path) + (n ? "?" + n : "") + r, this.$$absUrl = t + e + this.$$url
+
        }
+
    }
+
 
+
    function jn(t) {
+
        return function() {
+
            return this[t]
+
        }
+
    }
+
 
+
    function Nn(t, e) {
+
        return function(n) {
+
            return g(n) ? this[t] : (this[t] = e(n), this.$$compose(), this)
+
        }
+
    }
+
 
+
    function Tn() {
+
        var t = "",
+
            e = {
+
                enabled: !1,
+
                requireBase: !0,
+
                rewriteLinks: !0
+
            };
+
        this.hashPrefix = function(e) {
+
            return v(e) ? (t = e, this) : t
+
        }, this.html5Mode = function(t) {
+
            return N(t) ? (e.enabled = t, this) : y(t) ? (N(t.enabled) && (e.enabled = t.enabled), N(t.requireBase) && (e.requireBase = t.requireBase), N(t.rewriteLinks) && (e.rewriteLinks = t.rewriteLinks), this) : e
+
        }, this.$get = ["$rootScope", "$browser", "$sniffer", "$rootElement", "$window", function(n, r, i, a, o) {
+
            function s(t, e, n) {
+
                var i = l.url(),
+
                    a = l.$$state;
+
                try {
+
                    r.url(t, e, n), l.$$state = r.state()
+
                } catch (o) {
+
                    throw l.url(i), l.$$state = a, o
+
                }
+
            }
+
 
+
            function u(t, e) {
+
                n.$broadcast("$locationChangeSuccess", l.absUrl(), t, l.$$state, e)
+
            }
+
            var l, c, f, d = r.baseHref(),
+
                h = r.url();
+
            if (e.enabled) {
+
                if (!d && e.requireBase) throw ia("nobase", "$location in HTML5 mode requires a <base> tag to be present!");
+
                f = Cn(h) + (d || "/"), c = i.history ? An : En
+
            } else f = xn(h), c = On;
+
            l = new c(f, "#" + t), l.$$parseLinkUrl(h, h), l.$$state = r.state();
+
            var p = /^\s*(javascript|mailto):/i;
+
            a.on("click", function(t) {
+
                if (e.rewriteLinks && !t.ctrlKey && !t.metaKey && !t.shiftKey && 2 != t.which && 2 != t.button) {
+
                    for (var i = Qr(t.target);
+
                        "a" !== V(i[0]);)
+
                        if (i[0] === a[0] || !(i = i.parent())[0]) return;
+
                    var s = i.prop("href"),
+
                        u = i.attr("href") || i.attr("xlink:href");
+
                    y(s) && "[object SVGAnimatedString]" === s.toString() && (s = ir(s.animVal).href), p.test(s) || !s || i.attr("target") || t.isDefaultPrevented() || l.$$parseLinkUrl(s, u) && (t.preventDefault(), l.absUrl() != r.url() && (n.$apply(), o.angular["ff-684208-preventDefault"] = !0))
+
                }
+
            }), kn(l.absUrl()) != kn(h) && r.url(l.absUrl(), !0);
+
            var $ = !0;
+
            return r.onUrlChange(function(t, e) {
+
                n.$evalAsync(function() {
+
                    var r, i = l.absUrl(),
+
                        a = l.$$state;
+
                    l.$$parse(t), l.$$state = e, r = n.$broadcast("$locationChangeStart", t, i, e, a).defaultPrevented, l.absUrl() === t && (r ? (l.$$parse(i), l.$$state = a, s(i, !1, a)) : ($ = !1, u(i, a)))
+
                }), n.$$phase || n.$digest()
+
            }), n.$watch(function() {
+
                var t = kn(r.url()),
+
                    e = kn(l.absUrl()),
+
                    a = r.state(),
+
                    o = l.$$replace,
+
                    c = t !== e || l.$$html5 && i.history && a !== l.$$state;
+
                ($ || c) && ($ = !1, n.$evalAsync(function() {
+
                    var e = l.absUrl(),
+
                        r = n.$broadcast("$locationChangeStart", e, t, l.$$state, a).defaultPrevented;
+
                    l.absUrl() === e && (r ? (l.$$parse(t), l.$$state = a) : (c && s(e, o, a === l.$$state ? null : l.$$state), u(t, a)))
+
                })), l.$$replace = !1
+
            }), l
+
        }]
+
    }
+
 
+
    function Mn() {
+
        var t = !0,
+
            e = this;
+
        this.debugEnabled = function(e) {
+
            return v(e) ? (t = e, this) : t
+
        }, this.$get = ["$window", function(n) {
+
            function r(t) {
+
                return t instanceof Error && (t.stack ? t = t.message && -1 === t.stack.indexOf(t.message) ? "Error: " + t.message + "\n" + t.stack : t.stack : t.sourceURL && (t = t.message + "\n" + t.sourceURL + ":" + t.line)), t
+
            }
+
 
+
            function i(t) {
+
                var e = n.console || {},
+
                    i = e[t] || e.log || p,
+
                    o = !1;
+
                try {
+
                    o = !!i.apply
+
                } catch (s) {}
+
                return o ? function() {
+
                    var t = [];
+
                    return a(arguments, function(e) {
+
                        t.push(r(e))
+
                    }), i.apply(e, t)
+
                } : function(t, e) {
+
                    i(t, null == e ? "" : e)
+
                }
+
            }
+
            return {
+
                log: i("log"),
+
                info: i("info"),
+
                warn: i("warn"),
+
                error: i("error"),
+
                debug: function() {
+
                    var n = i("debug");
+
                    return function() {
+
                        t && n.apply(e, arguments)
+
                    }
+
                }()
+
            }
+
        }]
+
    }
+
 
+
    function Pn(t, e) {
+
        if ("__defineGetter__" === t || "__defineSetter__" === t || "__lookupGetter__" === t || "__lookupSetter__" === t || "__proto__" === t) throw oa("isecfld", "Attempting to access a disallowed field in Angular expressions! Expression: {0}", e);
+
        return t
+
    }
+
 
+
    function Vn(t, e) {
+
        if (t) {
+
            if (t.constructor === t) throw oa("isecfn", "Referencing Function in Angular expressions is disallowed! Expression: {0}", e);
+
            if (t.window === t) throw oa("isecwindow", "Referencing the Window in Angular expressions is disallowed! Expression: {0}", e);
+
            if (t.children && (t.nodeName || t.prop && t.attr && t.find)) throw oa("isecdom", "Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}", e);
+
            if (t === Object) throw oa("isecobj", "Referencing Object in Angular expressions is disallowed! Expression: {0}", e)
+
        }
+
        return t
+
    }
+
 
+
    function qn(t, e) {
+
        if (t) {
+
            if (t.constructor === t) throw oa("isecfn", "Referencing Function in Angular expressions is disallowed! Expression: {0}", e);
+
            if (t === sa || t === ua || t === la) throw oa("isecff", "Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}", e)
+
        }
+
    }
+
 
+
    function Dn(t) {
+
        return t.constant
+
    }
+
 
+
    function Rn(t, e, n, r, i) {
+
        Vn(t, i), Vn(e, i);
+
        for (var a, o = n.split("."), s = 0; o.length > 1; s++) {
+
            a = Pn(o.shift(), i);
+
            var u = 0 === s && e && e[a] || t[a];
+
            u || (u = {}, t[a] = u), t = Vn(u, i)
+
        }
+
        return a = Pn(o.shift(), i), Vn(t[a], i), t[a] = r, r
+
    }
+
 
+
    function In(t) {
+
        return "constructor" == t
+
    }
+
 
+
    function _n(t, e, r, i, a, o, s) {
+
        Pn(t, o), Pn(e, o), Pn(r, o), Pn(i, o), Pn(a, o);
+
        var u = function(t) {
+
                return Vn(t, o)
+
            },
+
            l = s || In(t) ? u : $,
+
            c = s || In(e) ? u : $,
+
            f = s || In(r) ? u : $,
+
            d = s || In(i) ? u : $,
+
            h = s || In(a) ? u : $;
+
        return function(o, s) {
+
            var u = s && s.hasOwnProperty(t) ? s : o;
+
            return null == u ? u : (u = l(u[t]), e ? null == u ? n : (u = c(u[e]), r ? null == u ? n : (u = f(u[r]), i ? null == u ? n : (u = d(u[i]), a ? null == u ? n : u = h(u[a]) : u) : u) : u) : u)
+
        }
+
    }
+
 
+
    function Un(t, e) {
+
        return function(n, r) {
+
            return t(n, r, Vn, e)
+
        }
+
    }
+
 
+
    function Ln(t, e, r) {
+
        var i = e.expensiveChecks,
+
            o = i ? ma : $a,
+
            s = o[t];
+
        if (s) return s;
+
        var u = t.split("."),
+
            l = u.length;
+
        if (e.csp) s = 6 > l ? _n(u[0], u[1], u[2], u[3], u[4], r, i) : function(t, e) {
+
            var a, o = 0;
+
            do a = _n(u[o++], u[o++], u[o++], u[o++], u[o++], r, i)(t, e), e = n, t = a; while (l > o);
+
            return a
+
        };
+
        else {
+
            var c = "";
+
            i && (c += "s = eso(s, fe);\nl = eso(l, fe);\n");
+
            var f = i;
+
            a(u, function(t, e) {
+
                Pn(t, r);
+
                var n = (e ? "s" : '((l&&l.hasOwnProperty("' + t + '"))?l:s)') + "." + t;
+
                (i || In(t)) && (n = "eso(" + n + ", fe)", f = !0), c += "if(s == null) return undefined;\ns=" + n + ";\n"
+
            }), c += "return s;";
+
            var d = new Function("s", "l", "eso", "fe", c);
+
            d.toString = m(c), f && (d = Un(d, r)), s = d
+
        }
+
        return s.sharedGetter = !0, s.assign = function(e, n, r) {
+
            return Rn(e, r, t, n, t)
+
        }, o[t] = s, s
+
    }
+
 
+
    function Fn(t) {
+
        return k(t.valueOf) ? t.valueOf() : ga.call(t)
+
    }
+
 
+
    function Hn() {
+
        var t = le(),
+
            e = le();
+
        this.$get = ["$filter", "$sniffer", function(n, r) {
+
            function i(t) {
+
                var e = t;
+
                return t.sharedGetter && (e = function(e, n) {
+
                    return t(e, n)
+
                }, e.literal = t.literal, e.constant = t.constant, e.assign = t.assign), e
+
            }
+
 
+
            function o(t, e) {
+
                for (var n = 0, r = t.length; r > n; n++) {
+
                    var i = t[n];
+
                    i.constant || (i.inputs ? o(i.inputs, e) : -1 === e.indexOf(i) && e.push(i))
+
                }
+
                return e
+
            }
+
 
+
            function s(t, e) {
+
                return null == t || null == e ? t === e : "object" == typeof t && (t = Fn(t), "object" == typeof t) ? !1 : t === e || t !== t && e !== e
+
            }
+
 
+
            function u(t, e, n, r) {
+
                var i, a = r.$$inputs || (r.$$inputs = o(r.inputs, []));
+
                if (1 === a.length) {
+
                    var u = s;
+
                    return a = a[0], t.$watch(function(t) {
+
                        var e = a(t);
+
                        return s(e, u) || (i = r(t), u = e && Fn(e)), i
+
                    }, e, n)
+
                }
+
                for (var l = [], c = 0, f = a.length; f > c; c++) l[c] = s;
+
                return t.$watch(function(t) {
+
                    for (var e = !1, n = 0, o = a.length; o > n; n++) {
+
                        var u = a[n](t);
+
                        (e || (e = !s(u, l[n]))) && (l[n] = u && Fn(u))
+
                    }
+
                    return e && (i = r(t)), i
+
                }, e, n)
+
            }
+
 
+
            function l(t, e, n, r) {
+
                var i, a;
+
                return i = t.$watch(function(t) {
+
                    return r(t)
+
                }, function(t, n, r) {
+
                    a = t, k(e) && e.apply(this, arguments), v(t) && r.$$postDigest(function() {
+
                        v(a) && i()
+
                    })
+
                }, n)
+
            }
+
 
+
            function c(t, e, n, r) {
+
                function i(t) {
+
                    var e = !0;
+
                    return a(t, function(t) {
+
                        v(t) || (e = !1)
+
                    }), e
+
                }
+
                var o, s;
+
                return o = t.$watch(function(t) {
+
                    return r(t)
+
                }, function(t, n, r) {
+
                    s = t, k(e) && e.call(this, t, n, r), i(t) && r.$$postDigest(function() {
+
                        i(s) && o()
+
                    })
+
                }, n)
+
            }
+
 
+
            function f(t, e, n, r) {
+
                var i;
+
                return i = t.$watch(function(t) {
+
                    return r(t)
+
                }, function() {
+
                    k(e) && e.apply(this, arguments), i()
+
                }, n)
+
            }
+
 
+
            function d(t, e) {
+
                if (!e) return t;
+
                var n = t.$$watchDelegate,
+
                    r = n !== c && n !== l,
+
                    i = r ? function(n, r) {
+
                        var i = t(n, r);
+
                        return e(i, n, r)
+
                    } : function(n, r) {
+
                        var i = t(n, r),
+
                            a = e(i, n, r);
+
                        return v(i) ? a : i
+
                    };
+
                return t.$$watchDelegate && t.$$watchDelegate !== u ? i.$$watchDelegate = t.$$watchDelegate : e.$stateful || (i.$$watchDelegate = u, i.inputs = [t]), i
+
            }
+
            var h = {
+
                    csp: r.csp,
+
                    expensiveChecks: !1
+
                },
+
                $ = {
+
                    csp: r.csp,
+
                    expensiveChecks: !0
+
                };
+
            return function(r, a, o) {
+
                var s, m, g;
+
                switch (typeof r) {
+
                    case "string":
+
                        g = r = r.trim();
+
                        var v = o ? e : t;
+
                        if (s = v[g], !s) {
+
                            ":" === r.charAt(0) && ":" === r.charAt(1) && (m = !0, r = r.substring(2));
+
                            var y = o ? $ : h,
+
                                b = new ha(y),
+
                                w = new pa(b, n, y);
+
                            s = w.parse(r), s.constant ? s.$$watchDelegate = f : m ? (s = i(s), s.$$watchDelegate = s.literal ? c : l) : s.inputs && (s.$$watchDelegate = u), v[g] = s
+
                        }
+
                        return d(s, a);
+
                    case "function":
+
                        return d(r, a);
+
                    default:
+
                        return d(p, a)
+
                }
+
            }
+
        }]
+
    }
+
 
+
    function Bn() {
+
        this.$get = ["$rootScope", "$exceptionHandler", function(t, e) {
+
            return Gn(function(e) {
+
                t.$evalAsync(e)
+
            }, e)
+
        }]
+
    }
+
 
+
    function zn() {
+
        this.$get = ["$browser", "$exceptionHandler", function(t, e) {
+
            return Gn(function(e) {
+
                t.defer(e)
+
            }, e)
+
        }]
+
    }
+
 
+
    function Gn(t, e) {
+
        function i(t, e, n) {
+
            function r(e) {
+
                return function(n) {
+
                    i || (i = !0, e.call(t, n))
+
                }
+
            }
+
            var i = !1;
+
            return [r(e), r(n)]
+
        }
+
 
+
        function o() {
+
            this.$$state = {
+
                status: 0
+
            }
+
        }
+
 
+
        function s(t, e) {
+
            return function(n) {
+
                e.call(t, n)
+
            }
+
        }
+
 
+
        function u(t) {
+
            var r, i, a;
+
            a = t.pending, t.processScheduled = !1, t.pending = n;
+
            for (var o = 0, s = a.length; s > o; ++o) {
+
                i = a[o][0], r = a[o][t.status];
+
                try {
+
                    k(r) ? i.resolve(r(t.value)) : 1 === t.status ? i.resolve(t.value) : i.reject(t.value)
+
                } catch (u) {
+
                    i.reject(u), e(u)
+
                }
+
            }
+
        }
+
 
+
        function l(e) {
+
            !e.processScheduled && e.pending && (e.processScheduled = !0, t(function() {
+
                u(e)
+
            }))
+
        }
+
 
+
        function c() {
+
            this.promise = new o, this.resolve = s(this, this.resolve), this.reject = s(this, this.reject), this.notify = s(this, this.notify)
+
        }
+
 
+
        function f(t) {
+
            var e = new c,
+
                n = 0,
+
                r = ci(t) ? [] : {};
+
            return a(t, function(t, i) {
+
                n++, g(t).then(function(t) {
+
                    r.hasOwnProperty(i) || (r[i] = t, --n || e.resolve(r))
+
                }, function(t) {
+
                    r.hasOwnProperty(i) || e.reject(t)
+
                })
+
            }), 0 === n && e.resolve(r), e.promise
+
        }
+
        var d = r("$q", TypeError),
+
            h = function() {
+
                return new c
+
            };
+
        o.prototype = {
+
            then: function(t, e, n) {
+
                var r = new c;
+
                return this.$$state.pending = this.$$state.pending || [], this.$$state.pending.push([r, t, e, n]), this.$$state.status > 0 && l(this.$$state), r.promise
+
            },
+
            "catch": function(t) {
+
                return this.then(null, t)
+
            },
+
            "finally": function(t, e) {
+
                return this.then(function(e) {
+
                    return m(e, !0, t)
+
                }, function(e) {
+
                    return m(e, !1, t)
+
                }, e)
+
            }
+
        }, c.prototype = {
+
            resolve: function(t) {
+
                this.promise.$$state.status || (t === this.promise ? this.$$reject(d("qcycle", "Expected promise to be resolved with value other than itself '{0}'", t)) : this.$$resolve(t))
+
            },
+
            $$resolve: function(t) {
+
                var n, r;
+
                r = i(this, this.$$resolve, this.$$reject);
+
                try {
+
                    (y(t) || k(t)) && (n = t && t.then), k(n) ? (this.promise.$$state.status = -1, n.call(t, r[0], r[1], this.notify)) : (this.promise.$$state.value = t, this.promise.$$state.status = 1, l(this.promise.$$state))
+
                } catch (a) {
+
                    r[1](a), e(a)
+
                }
+
            },
+
            reject: function(t) {
+
                this.promise.$$state.status || this.$$reject(t)
+
            },
+
            $$reject: function(t) {
+
                this.promise.$$state.value = t, this.promise.$$state.status = 2, l(this.promise.$$state)
+
            },
+
            notify: function(n) {
+
                var r = this.promise.$$state.pending;
+
                this.promise.$$state.status <= 0 && r && r.length && t(function() {
+
                    for (var t, i, a = 0, o = r.length; o > a; a++) {
+
                        i = r[a][0], t = r[a][3];
+
                        try {
+
                            i.notify(k(t) ? t(n) : n)
+
                        } catch (s) {
+
                            e(s)
+
                        }
+
                    }
+
                })
+
            }
+
        };
+
        var p = function(t) {
+
                var e = new c;
+
                return e.reject(t), e.promise
+
            },
+
            $ = function(t, e) {
+
                var n = new c;
+
                return e ? n.resolve(t) : n.reject(t), n.promise
+
            },
+
            m = function(t, e, n) {
+
                var r = null;
+
                try {
+
                    k(n) && (r = n())
+
                } catch (i) {
+
                    return $(i, !1)
+
                }
+
                return T(r) ? r.then(function() {
+
                    return $(t, e)
+
                }, function(t) {
+
                    return $(t, !1)
+
                }) : $(t, e)
+
            },
+
            g = function(t, e, n, r) {
+
                var i = new c;
+
                return i.resolve(t), i.promise.then(e, n, r)
+
            },
+
            v = function b(t) {
+
                function e(t) {
+
                    r.resolve(t)
+
                }
+
 
+
                function n(t) {
+
                    r.reject(t)
+
                }
+
                if (!k(t)) throw d("norslvr", "Expected resolverFn, got '{0}'", t);
+
                if (!(this instanceof b)) return new b(t);
+
                var r = new c;
+
                return t(e, n), r.promise
+
            };
+
        return v.defer = h, v.reject = p, v.when = g, v.all = f, v
+
    }
+
 
+
    function Wn() {
+
        this.$get = ["$window", "$timeout", function(t, e) {
+
            var n = t.requestAnimationFrame || t.webkitRequestAnimationFrame,
+
                r = t.cancelAnimationFrame || t.webkitCancelAnimationFrame || t.webkitCancelRequestAnimationFrame,
+
                i = !!n,
+
                a = i ? function(t) {
+
                    var e = n(t);
+
                    return function() {
+
                        r(e)
+
                    }
+
                } : function(t) {
+
                    var n = e(t, 16.66, !1);
+
                    return function() {
+
                        e.cancel(n)
+
                    }
+
                };
+
            return a.supported = i, a
+
        }]
+
    }
+
 
+
    function Jn() {
+
        var t = 10,
+
            e = r("$rootScope"),
+
            n = null,
+
            o = null;
+
        this.digestTtl = function(e) {
+
            return arguments.length && (t = e), t
+
        }, this.$get = ["$injector", "$exceptionHandler", "$parse", "$browser", function(r, s, u, c) {
+
            function f() {
+
                this.$id = l(), this.$$phase = this.$parent = this.$$watchers = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = null, this.$root = this, this.$$destroyed = !1, this.$$listeners = {}, this.$$listenerCount = {}, this.$$isolateBindings = null
+
            }
+
 
+
            function d(t) {
+
                if (w.$$phase) throw e("inprog", "{0} already in progress", w.$$phase);
+
                w.$$phase = t
+
            }
+
 
+
            function h() {
+
                w.$$phase = null
+
            }
+
 
+
            function $(t, e, n) {
+
                do t.$$listenerCount[n] -= e, 0 === t.$$listenerCount[n] && delete t.$$listenerCount[n]; while (t = t.$parent)
+
            }
+
 
+
            function m() {}
+
 
+
            function v() {
+
                for (; C.length;) try {
+
                    C.shift()()
+
                } catch (t) {
+
                    s(t)
+
                }
+
                o = null
+
            }
+
 
+
            function b() {
+
                null === o && (o = c.defer(function() {
+
                    w.$apply(v)
+
                }))
+
            }
+
            f.prototype = {
+
                constructor: f,
+
                $new: function(t, e) {
+
                    function n() {
+
                        r.$$destroyed = !0
+
                    }
+
                    var r;
+
                    return e = e || this, t ? (r = new f, r.$root = this.$root) : (this.$$ChildScope || (this.$$ChildScope = function() {
+
                        this.$$watchers = this.$$nextSibling = this.$$childHead = this.$$childTail = null, this.$$listeners = {}, this.$$listenerCount = {}, this.$id = l(), this.$$ChildScope = null
+
                    }, this.$$ChildScope.prototype = this), r = new this.$$ChildScope), r.$parent = e, r.$$prevSibling = e.$$childTail, e.$$childHead ? (e.$$childTail.$$nextSibling = r, e.$$childTail = r) : e.$$childHead = e.$$childTail = r, (t || e != this) && r.$on("$destroy", n), r
+
                },
+
                $watch: function(t, e, r) {
+
                    var i = u(t);
+
                    if (i.$$watchDelegate) return i.$$watchDelegate(this, e, r, i);
+
                    var a = this,
+
                        o = a.$$watchers,
+
                        s = {
+
                            fn: e,
+
                            last: m,
+
                            get: i,
+
                            exp: t,
+
                            eq: !!r
+
                        };
+
                    return n = null, k(e) || (s.fn = p), o || (o = a.$$watchers = []), o.unshift(s),
+
                        function() {
+
                            q(o, s), n = null
+
                        }
+
                },
+
                $watchGroup: function(t, e) {
+
                    function n() {
+
                        u = !1, l ? (l = !1, e(i, i, s)) : e(i, r, s)
+
                    }
+
                    var r = new Array(t.length),
+
                        i = new Array(t.length),
+
                        o = [],
+
                        s = this,
+
                        u = !1,
+
                        l = !0;
+
                    if (!t.length) {
+
                        var c = !0;
+
                        return s.$evalAsync(function() {
+
                                c && e(i, i, s)
+
                            }),
+
                            function() {
+
                                c = !1
+
                            }
+
                    }
+
                    return 1 === t.length ? this.$watch(t[0], function(t, n, a) {
+
                        i[0] = t, r[0] = n, e(i, t === n ? i : r, a)
+
                    }) : (a(t, function(t, e) {
+
                        var a = s.$watch(t, function(t, a) {
+
                            i[e] = t, r[e] = a, u || (u = !0, s.$evalAsync(n))
+
                        });
+
                        o.push(a)
+
                    }), function() {
+
                        for (; o.length;) o.shift()()
+
                    })
+
                },
+
                $watchCollection: function(t, e) {
+
                    function n(t) {
+
                        a = t;
+
                        var e, n, r, s, u;
+
                        if (!g(a)) {
+
                            if (y(a))
+
                                if (i(a)) {
+
                                    o !== h && (o = h, m = o.length = 0, f++), e = a.length, m !== e && (f++, o.length = m = e);
+
                                    for (var l = 0; e > l; l++) u = o[l], s = a[l], r = u !== u && s !== s, r || u === s || (f++, o[l] = s)
+
                                } else {
+
                                    o !== p && (o = p = {}, m = 0, f++), e = 0;
+
                                    for (n in a) a.hasOwnProperty(n) && (e++, s = a[n], u = o[n], n in o ? (r = u !== u && s !== s, r || u === s || (f++, o[n] = s)) : (m++, o[n] = s, f++));
+
                                    if (m > e) {
+
                                        f++;
+
                                        for (n in o) a.hasOwnProperty(n) || (m--, delete o[n])
+
                                    }
+
                                }
+
                            else o !== a && (o = a, f++);
+
                            return f
+
                        }
+
                    }
+
 
+
                    function r() {
+
                        if ($ ? ($ = !1, e(a, a, l)) : e(a, s, l), c)
+
                            if (y(a))
+
                                if (i(a)) {
+
                                    s = new Array(a.length);
+
                                    for (var t = 0; t < a.length; t++) s[t] = a[t]
+
                                } else {
+
                                    s = {};
+
                                    for (var n in a) Jr.call(a, n) && (s[n] = a[n])
+
                                }
+
                        else s = a
+
                    }
+
                    n.$stateful = !0;
+
                    var a, o, s, l = this,
+
                        c = e.length > 1,
+
                        f = 0,
+
                        d = u(t, n),
+
                        h = [],
+
                        p = {},
+
                        $ = !0,
+
                        m = 0;
+
                    return this.$watch(d, r)
+
                },
+
                $digest: function() {
+
                    var r, i, a, u, l, f, p, $, g, y, b = t,
+
                        C = this,
+
                        A = [];
+
                    d("$digest"), c.$$checkUrlChange(), this === w && null !== o && (c.defer.cancel(o), v()), n = null;
+
                    do {
+
                        for (f = !1, $ = C; x.length;) {
+
                            try {
+
                                y = x.shift(), y.scope.$eval(y.expression, y.locals)
+
                            } catch (O) {
+
                                s(O)
+
                            }
+
                            n = null
+
                        }
+
                        t: do {
+
                            if (u = $.$$watchers)
+
                                for (l = u.length; l--;) try {
+
                                    if (r = u[l])
+
                                        if ((i = r.get($)) === (a = r.last) || (r.eq ? I(i, a) : "number" == typeof i && "number" == typeof a && isNaN(i) && isNaN(a))) {
+
                                            if (r === n) {
+
                                                f = !1;
+
                                                break t
+
                                            }
+
                                        } else f = !0, n = r, r.last = r.eq ? D(i, null) : i, r.fn(i, a === m ? i : a, $), 5 > b && (g = 4 - b, A[g] || (A[g] = []), A[g].push({
+
                                            msg: k(r.exp) ? "fn: " + (r.exp.name || r.exp.toString()) : r.exp,
+
                                            newVal: i,
+
                                            oldVal: a
+
                                        }))
+
                                } catch (O) {
+
                                    s(O)
+
                                }
+
                            if (!(p = $.$$childHead || $ !== C && $.$$nextSibling))
+
                                for (; $ !== C && !(p = $.$$nextSibling);) $ = $.$parent
+
                        } while ($ = p);
+
                        if ((f || x.length) && !b--) throw h(), e("infdig", "{0} $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: {1}", t, A)
+
                    } while (f || x.length);
+
                    for (h(); S.length;) try {
+
                        S.shift()()
+
                    } catch (O) {
+
                        s(O)
+
                    }
+
                },
+
                $destroy: function() {
+
                    if (!this.$$destroyed) {
+
                        var t = this.$parent;
+
                        if (this.$broadcast("$destroy"), this.$$destroyed = !0, this !== w) {
+
                            for (var e in this.$$listenerCount) $(this, this.$$listenerCount[e], e);
+
                            t.$$childHead == this && (t.$$childHead = this.$$nextSibling), t.$$childTail == this && (t.$$childTail = this.$$prevSibling), this.$$prevSibling && (this.$$prevSibling.$$nextSibling = this.$$nextSibling), this.$$nextSibling && (this.$$nextSibling.$$prevSibling = this.$$prevSibling), this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = p, this.$on = this.$watch = this.$watchGroup = function() {
+
                                return p
+
                            }, this.$$listeners = {}, this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = this.$root = this.$$watchers = null
+
                        }
+
                    }
+
                },
+
                $eval: function(t, e) {
+
                    return u(t)(this, e)
+
                },
+
                $evalAsync: function(t, e) {
+
                    w.$$phase || x.length || c.defer(function() {
+
                        x.length && w.$digest()
+
                    }), x.push({
+
                        scope: this,
+
                        expression: t,
+
                        locals: e
+
                    })
+
                },
+
                $$postDigest: function(t) {
+
                    S.push(t)
+
                },
+
                $apply: function(t) {
+
                    try {
+
                        return d("$apply"), this.$eval(t)
+
                    } catch (e) {
+
                        s(e)
+
                    } finally {
+
                        h();
+
                        try {
+
                            w.$digest()
+
                        } catch (e) {
+
                            throw s(e), e
+
                        }
+
                    }
+
                },
+
                $applyAsync: function(t) {
+
                    function e() {
+
                        n.$eval(t)
+
                    }
+
                    var n = this;
+
                    t && C.push(e), b()
+
                },
+
                $on: function(t, e) {
+
                    var n = this.$$listeners[t];
+
                    n || (this.$$listeners[t] = n = []), n.push(e);
+
                    var r = this;
+
                    do r.$$listenerCount[t] || (r.$$listenerCount[t] = 0), r.$$listenerCount[t]++; while (r = r.$parent);
+
                    var i = this;
+
                    return function() {
+
                        var r = n.indexOf(e); - 1 !== r && (n[r] = null, $(i, 1, t))
+
                    }
+
                },
+
                $emit: function(t) {
+
                    var e, n, r, i = [],
+
                        a = this,
+
                        o = !1,
+
                        u = {
+
                            name: t,
+
                            targetScope: a,
+
                            stopPropagation: function() {
+
                                o = !0
+
                            },
+
                            preventDefault: function() {
+
                                u.defaultPrevented = !0
+
                            },
+
                            defaultPrevented: !1
+
                        },
+
                        l = _([u], arguments, 1);
+
                    do {
+
                        for (e = a.$$listeners[t] || i, u.currentScope = a, n = 0, r = e.length; r > n; n++)
+
                            if (e[n]) try {
+
                                e[n].apply(null, l)
+
                            } catch (c) {
+
                                s(c)
+
                            } else e.splice(n, 1), n--, r--;
+
                        if (o) return u.currentScope = null, u;
+
                        a = a.$parent
+
                    } while (a);
+
                    return u.currentScope = null, u
+
                },
+
                $broadcast: function(t) {
+
                    var e = this,
+
                        n = e,
+
                        r = e,
+
                        i = {
+
                            name: t,
+
                            targetScope: e,
+
                            preventDefault: function() {
+
                                i.defaultPrevented = !0
+
                            },
+
                            defaultPrevented: !1
+
                        };
+
                    if (!e.$$listenerCount[t]) return i;
+
                    for (var a, o, u, l = _([i], arguments, 1); n = r;) {
+
                        for (i.currentScope = n, a = n.$$listeners[t] || [], o = 0, u = a.length; u > o; o++)
+
                            if (a[o]) try {
+
                                a[o].apply(null, l)
+
                            } catch (c) {
+
                                s(c)
+
                            } else a.splice(o, 1), o--, u--;
+
                        if (!(r = n.$$listenerCount[t] && n.$$childHead || n !== e && n.$$nextSibling))
+
                            for (; n !== e && !(r = n.$$nextSibling);) n = n.$parent
+
                    }
+
                    return i.currentScope = null, i
+
                }
+
            };
+
            var w = new f,
+
                x = w.$$asyncQueue = [],
+
                S = w.$$postDigestQueue = [],
+
                C = w.$$applyAsyncQueue = [];
+
            return w
+
        }]
+
    }
+
 
+
    function Yn() {
+
        var t = /^\s*(https?|ftp|mailto|tel|file):/,
+
            e = /^\s*((https?|ftp|file|blob):|data:image\/)/;
+
        this.aHrefSanitizationWhitelist = function(e) {
+
            return v(e) ? (t = e, this) : t
+
        }, this.imgSrcSanitizationWhitelist = function(t) {
+
            return v(t) ? (e = t, this) : e
+
        }, this.$get = function() {
+
            return function(n, r) {
+
                var i, a = r ? e : t;
+
                return i = ir(n).href, "" === i || i.match(a) ? n : "unsafe:" + i
+
            }
+
        }
+
    }
+
 
+
    function Zn(t) {
+
        if ("self" === t) return t;
+
        if (b(t)) {
+
            if (t.indexOf("***") > -1) throw va("iwcard", "Illegal sequence *** in string matcher.  String: {0}", t);
+
            return t = di(t).replace("\\*\\*", ".*").replace("\\*", "[^:/.?&;]*"), new RegExp("^" + t + "$")
+
        }
+
        if (S(t)) return new RegExp("^" + t.source + "$");
+
        throw va("imatcher", 'Matchers may only be "self", string patterns or RegExp objects')
+
    }
+
 
+
    function Kn(t) {
+
        var e = [];
+
        return v(t) && a(t, function(t) {
+
            e.push(Zn(t))
+
        }), e
+
    }
+
 
+
    function Xn() {
+
        this.SCE_CONTEXTS = ya;
+
        var t = ["self"],
+
            e = [];
+
        this.resourceUrlWhitelist = function(e) {
+
            return arguments.length && (t = Kn(e)), t
+
        }, this.resourceUrlBlacklist = function(t) {
+
            return arguments.length && (e = Kn(t)), e
+
        }, this.$get = ["$injector", function(r) {
+
            function i(t, e) {
+
                return "self" === t ? ar(e) : !!t.exec(e.href)
+
            }
+
 
+
            function a(n) {
+
                var r, a, o = ir(n.toString()),
+
                    s = !1;
+
                for (r = 0, a = t.length; a > r; r++)
+
                    if (i(t[r], o)) {
+
                        s = !0;
+
                        break
+
                    }
+
                if (s)
+
                    for (r = 0, a = e.length; a > r; r++)
+
                        if (i(e[r], o)) {
+
                            s = !1;
+
                            break
+
                        }
+
                return s
+
            }
+
 
+
            function o(t) {
+
                var e = function(t) {
+
                    this.$$unwrapTrustedValue = function() {
+
                        return t
+
                    }
+
                };
+
                return t && (e.prototype = new t), e.prototype.valueOf = function() {
+
                    return this.$$unwrapTrustedValue()
+
                }, e.prototype.toString = function() {
+
                    return this.$$unwrapTrustedValue().toString()
+
                }, e
+
            }
+
 
+
            function s(t, e) {
+
                var r = d.hasOwnProperty(t) ? d[t] : null;
+
                if (!r) throw va("icontext", "Attempted to trust a value in invalid context. Context: {0}; Value: {1}", t, e);
+
                if (null === e || e === n || "" === e) return e;
+
                if ("string" != typeof e) throw va("itype", "Attempted to trust a non-string value in a content requiring a string: Context: {0}", t);
+
                return new r(e)
+
            }
+
 
+
            function u(t) {
+
                return t instanceof f ? t.$$unwrapTrustedValue() : t
+
            }
+
 
+
            function l(t, e) {
+
                if (null === e || e === n || "" === e) return e;
+
                var r = d.hasOwnProperty(t) ? d[t] : null;
+
                if (r && e instanceof r) return e.$$unwrapTrustedValue();
+
                if (t === ya.RESOURCE_URL) {
+
                    if (a(e)) return e;
+
                    throw va("insecurl", "Blocked loading resource from url not allowed by $sceDelegate policy.  URL: {0}", e.toString())
+
                }
+
                if (t === ya.HTML) return c(e);
+
                throw va("unsafe", "Attempting to use an unsafe value in a safe context.")
+
            }
+
            var c = function() {
+
                throw va("unsafe", "Attempting to use an unsafe value in a safe context.")
+
            };
+
            r.has("$sanitize") && (c = r.get("$sanitize"));
+
            var f = o(),
+
                d = {};
+
            return d[ya.HTML] = o(f), d[ya.CSS] = o(f), d[ya.URL] = o(f), d[ya.JS] = o(f), d[ya.RESOURCE_URL] = o(d[ya.URL]), {
+
                trustAs: s,
+
                getTrusted: l,
+
                valueOf: u
+
            }
+
        }]
+
    }
+
 
+
    function Qn() {
+
        var t = !0;
+
        this.enabled = function(e) {
+
            return arguments.length && (t = !!e), t
+
        }, this.$get = ["$parse", "$sceDelegate", function(e, n) {
+
            if (t && 8 > Xr) throw va("iequirks", "Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks mode.  You can fix this by adding the text <!doctype html> to the top of your HTML document.  See http://docs.angularjs.org/api/ng.$sce for more information.");
+
            var r = R(ya);
+
            r.isEnabled = function() {
+
                return t
+
            }, r.trustAs = n.trustAs, r.getTrusted = n.getTrusted, r.valueOf = n.valueOf, t || (r.trustAs = r.getTrusted = function(t, e) {
+
                return e
+
            }, r.valueOf = $), r.parseAs = function(t, n) {
+
                var i = e(n);
+
                return i.literal && i.constant ? i : e(n, function(e) {
+
                    return r.getTrusted(t, e)
+
                })
+
            };
+
            var i = r.parseAs,
+
                o = r.getTrusted,
+
                s = r.trustAs;
+
            return a(ya, function(t, e) {
+
                var n = Wr(e);
+
                r[$e("parse_as_" + n)] = function(e) {
+
                    return i(t, e)
+
                }, r[$e("get_trusted_" + n)] = function(e) {
+
                    return o(t, e)
+
                }, r[$e("trust_as_" + n)] = function(e) {
+
                    return s(t, e)
+
                }
+
            }), r
+
        }]
+
    }
+
 
+
    function tr() {
+
        this.$get = ["$window", "$document", function(t, e) {
+
            var n, r, i = {},
+
                a = d((/android (\d+)/.exec(Wr((t.navigator || {}).userAgent)) || [])[1]),
+
                o = /Boxee/i.test((t.navigator || {}).userAgent),
+
                s = e[0] || {},
+
                u = /^(Moz|webkit|ms)(?=[A-Z])/,
+
                l = s.body && s.body.style,
+
                c = !1,
+
                f = !1;
+
            if (l) {
+
                for (var h in l)
+
                    if (r = u.exec(h)) {
+
                        n = r[0], n = n.substr(0, 1).toUpperCase() + n.substr(1);
+
                        break
+
                    }
+
                n || (n = "WebkitOpacity" in l && "webkit"), c = !!("transition" in l || n + "Transition" in l), f = !!("animation" in l || n + "Animation" in l), !a || c && f || (c = b(s.body.style.webkitTransition), f = b(s.body.style.webkitAnimation))
+
            }
+
            return {
+
                history: !(!t.history || !t.history.pushState || 4 > a || o),
+
                hasEvent: function(t) {
+
                    if ("input" === t && 11 >= Xr) return !1;
+
                    if (g(i[t])) {
+
                        var e = s.createElement("div");
+
                        i[t] = "on" + t in e
+
                    }
+
                    return i[t]
+
                },
+
                csp: hi(),
+
                vendorPrefix: n,
+
                transitions: c,
+
                animations: f,
+
                android: a
+
            }
+
        }]
+
    }
+
 
+
    function er() {
+
        this.$get = ["$templateCache", "$http", "$q", function(t, e, n) {
+
            function r(i, a) {
+
                function o(t) {
+
                    if (!a) throw Wi("tpload", "Failed to load template: {0}", i);
+
                    return n.reject(t)
+
                }
+
                r.totalPendingRequests++;
+
                var s = e.defaults && e.defaults.transformResponse;
+
                ci(s) ? s = s.filter(function(t) {
+
                    return t !== an
+
                }) : s === an && (s = null);
+
                var u = {
+
                    cache: t,
+
                    transformResponse: s
+
                };
+
                return e.get(i, u).finally(function() {
+
                    r.totalPendingRequests--
+
                }).then(function(t) {
+
                    return t.data
+
                }, o)
+
            }
+
            return r.totalPendingRequests = 0, r
+
        }]
+
    }
+
 
+
    function nr() {
+
        this.$get = ["$rootScope", "$browser", "$location", function(t, e, n) {
+
            var r = {};
+
            return r.findBindings = function(t, e, n) {
+
                var r = t.getElementsByClassName("ng-binding"),
+
                    i = [];
+
                return a(r, function(t) {
+
                    var r = si.element(t).data("$binding");
+
                    r && a(r, function(r) {
+
                        if (n) {
+
                            var a = new RegExp("(^|\\s)" + di(e) + "(\\s|\\||$)");
+
                            a.test(r) && i.push(t)
+
                        } else -1 != r.indexOf(e) && i.push(t)
+
                    })
+
                }), i
+
            }, r.findModels = function(t, e, n) {
+
                for (var r = ["ng-", "data-ng-", "ng\\:"], i = 0; i < r.length; ++i) {
+
                    var a = n ? "=" : "*=",
+
                        o = "[" + r[i] + "model" + a + '"' + e + '"]',
+
                        s = t.querySelectorAll(o);
+
                    if (s.length) return s
+
                }
+
            }, r.getLocation = function() {
+
                return n.url()
+
            }, r.setLocation = function(e) {
+
                e !== n.url() && (n.url(e), t.$digest())
+
            }, r.whenStable = function(t) {
+
                e.notifyWhenNoOutstandingRequests(t)
+
            }, r
+
        }]
+
    }
+
 
+
    function rr() {
+
        this.$get = ["$rootScope", "$browser", "$q", "$$q", "$exceptionHandler", function(t, e, n, r, i) {
+
            function a(a, s, u) {
+
                var l, c = v(u) && !u,
+
                    f = (c ? r : n).defer(),
+
                    d = f.promise;
+
                return l = e.defer(function() {
+
                    try {
+
                        f.resolve(a())
+
                    } catch (e) {
+
                        f.reject(e), i(e)
+
                    } finally {
+
                        delete o[d.$$timeoutId]
+
                    }
+
                    c || t.$apply()
+
                }, s), d.$$timeoutId = l, o[l] = f, d
+
            }
+
            var o = {};
+
            return a.cancel = function(t) {
+
                return t && t.$$timeoutId in o ? (o[t.$$timeoutId].reject("canceled"), delete o[t.$$timeoutId], e.defer.cancel(t.$$timeoutId)) : !1
+
            }, a
+
        }]
+
    }
+
 
+
    function ir(t) {
+
        var e = t;
+
        return Xr && (ba.setAttribute("href", e), e = ba.href), ba.setAttribute("href", e), {
+
            href: ba.href,
+
            protocol: ba.protocol ? ba.protocol.replace(/:$/, "") : "",
+
            host: ba.host,
+
            search: ba.search ? ba.search.replace(/^\?/, "") : "",
+
            hash: ba.hash ? ba.hash.replace(/^#/, "") : "",
+
            hostname: ba.hostname,
+
            port: ba.port,
+
            pathname: "/" === ba.pathname.charAt(0) ? ba.pathname : "/" + ba.pathname
+
        }
+
    }
+
 
+
    function ar(t) {
+
        var e = b(t) ? ir(t) : t;
+
        return e.protocol === wa.protocol && e.host === wa.host
+
    }
+
 
+
    function or() {
+
        this.$get = m(t)
+
    }
+
 
+
    function sr(t) {
+
        function e(r, i) {
+
            if (y(r)) {
+
                var o = {};
+
                return a(r, function(t, n) {
+
                    o[n] = e(n, t)
+
                }), o
+
            }
+
            return t.factory(r + n, i)
+
        }
+
        var n = "Filter";
+
        this.register = e, this.$get = ["$injector", function(t) {
+
            return function(e) {
+
                return t.get(e + n)
+
            }
+
        }], e("currency", fr), e("date", xr), e("filter", ur), e("json", kr), e("limitTo", Sr), e("lowercase", Aa), e("number", dr), e("orderBy", Cr), e("uppercase", Oa)
+
    }
+
 
+
    function ur() {
+
        return function(t, e, n) {
+
            if (!ci(t)) return t;
+
            var r, i;
+
            switch (typeof e) {
+
                case "function":
+
                    r = e;
+
                    break;
+
                case "boolean":
+
                case "number":
+
                case "string":
+
                    i = !0;
+
                case "object":
+
                    r = lr(e, n, i);
+
                    break;
+
                default:
+
                    return t
+
            }
+
            return t.filter(r)
+
        }
+
    }
+
 
+
    function lr(t, e, n) {
+
        var r, i = y(t) && "$" in t;
+
        return e === !0 ? e = I : k(e) || (e = function(t, e) {
+
            return y(t) || y(e) ? !1 : (t = Wr("" + t), e = Wr("" + e), -1 !== t.indexOf(e))
+
        }), r = function(r) {
+
            return i && !y(r) ? cr(r, t.$, e, !1) : cr(r, t, e, n)
+
        }
+
    }
+
 
+
    function cr(t, e, n, r, i) {
+
        var a = typeof t,
+
            o = typeof e;
+
        if ("string" === o && "!" === e.charAt(0)) return !cr(t, e.substring(1), n, r);
+
        if (ci(t)) return t.some(function(t) {
+
            return cr(t, e, n, r)
+
        });
+
        switch (a) {
+
            case "object":
+
                var s;
+
                if (r) {
+
                    for (s in t)
+
                        if ("$" !== s.charAt(0) && cr(t[s], e, n, !0)) return !0;
+
                    return i ? !1 : cr(t, e, n, !1)
+
                }
+
                if ("object" === o) {
+
                    for (s in e) {
+
                        var u = e[s];
+
                        if (!k(u)) {
+
                            var l = "$" === s,
+
                                c = l ? t : t[s];
+
                            if (!cr(c, u, n, l, l)) return !1
+
                        }
+
                    }
+
                    return !0
+
                }
+
                return n(t, e);
+
            case "function":
+
                return !1;
+
            default:
+
                return n(t, e)
+
        }
+
    }
+
 
+
    function fr(t) {
+
        var e = t.NUMBER_FORMATS;
+
        return function(t, n, r) {
+
            return g(n) && (n = e.CURRENCY_SYM), g(r) && (r = e.PATTERNS[1].maxFrac), null == t ? t : hr(t, e.PATTERNS[1], e.GROUP_SEP, e.DECIMAL_SEP, r).replace(/\u00A4/g, n)
+
        }
+
    }
+
 
+
    function dr(t) {
+
        var e = t.NUMBER_FORMATS;
+
        return function(t, n) {
+
            return null == t ? t : hr(t, e.PATTERNS[0], e.GROUP_SEP, e.DECIMAL_SEP, n)
+
        }
+
    }
+
 
+
    function hr(t, e, n, r, i) {
+
        if (!isFinite(t) || y(t)) return "";
+
        var a = 0 > t;
+
        t = Math.abs(t);
+
        var o = t + "",
+
            s = "",
+
            u = [],
+
            l = !1;
+
        if (-1 !== o.indexOf("e")) {
+
            var c = o.match(/([\d\.]+)e(-?)(\d+)/);
+
            c && "-" == c[2] && c[3] > i + 1 ? t = 0 : (s = o, l = !0)
+
        }
+
        if (l) i > 0 && 1 > t && (s = t.toFixed(i), t = parseFloat(s));
+
        else {
+
            var f = (o.split(xa)[1] || "").length;
+
            g(i) && (i = Math.min(Math.max(e.minFrac, f), e.maxFrac)), t = +(Math.round(+(t.toString() + "e" + i)).toString() + "e" + -i);
+
            var d = ("" + t).split(xa),
+
                h = d[0];
+
            d = d[1] || "";
+
            var p, $ = 0,
+
                m = e.lgSize,
+
                v = e.gSize;
+
            if (h.length >= m + v)
+
                for ($ = h.length - m, p = 0; $ > p; p++)($ - p) % v === 0 && 0 !== p && (s += n), s += h.charAt(p);
+
            for (p = $; p < h.length; p++)(h.length - p) % m === 0 && 0 !== p && (s += n), s += h.charAt(p);
+
            for (; d.length < i;) d += "0";
+
            i && "0" !== i && (s += r + d.substr(0, i))
+
        }
+
        return 0 === t && (a = !1), u.push(a ? e.negPre : e.posPre, s, a ? e.negSuf : e.posSuf), u.join("")
+
    }
+
 
+
    function pr(t, e, n) {
+
        var r = "";
+
        for (0 > t && (r = "-", t = -t), t = "" + t; t.length < e;) t = "0" + t;
+
        return n && (t = t.substr(t.length - e)), r + t
+
    }
+
 
+
    function $r(t, e, n, r) {
+
        return n = n || 0,
+
            function(i) {
+
                var a = i["get" + t]();
+
                return (n > 0 || a > -n) && (a += n), 0 === a && -12 == n && (a = 12), pr(a, e, r)
+
            }
+
    }
+
 
+
    function mr(t, e) {
+
        return function(n, r) {
+
            var i = n["get" + t](),
+
                a = Yr(e ? "SHORT" + t : t);
+
            return r[a][i]
+
        }
+
    }
+
 
+
    function gr(t) {
+
        var e = -1 * t.getTimezoneOffset(),
+
            n = e >= 0 ? "+" : "";
+
        return n += pr(Math[e > 0 ? "floor" : "ceil"](e / 60), 2) + pr(Math.abs(e % 60), 2)
+
    }
+
 
+
    function vr(t) {
+
        var e = new Date(t, 0, 1).getDay();
+
        return new Date(t, 0, (4 >= e ? 5 : 12) - e)
+
    }
+
 
+
    function yr(t) {
+
        return new Date(t.getFullYear(), t.getMonth(), t.getDate() + (4 - t.getDay()))
+
    }
+
 
+
    function br(t) {
+
        return function(e) {
+
            var n = vr(e.getFullYear()),
+
                r = yr(e),
+
                i = +r - +n,
+
                a = 1 + Math.round(i / 6048e5);
+
            return pr(a, t)
+
        }
+
    }
+
 
+
    function wr(t, e) {
+
        return t.getHours() < 12 ? e.AMPMS[0] : e.AMPMS[1]
+
    }
+
 
+
    function xr(t) {
+
        function e(t) {
+
            var e;
+
            if (e = t.match(n)) {
+
                var r = new Date(0),
+
                    i = 0,
+
                    a = 0,
+
                    o = e[8] ? r.setUTCFullYear : r.setFullYear,
+
                    s = e[8] ? r.setUTCHours : r.setHours;
+
                e[9] && (i = d(e[9] + e[10]), a = d(e[9] + e[11])), o.call(r, d(e[1]), d(e[2]) - 1, d(e[3]));
+
                var u = d(e[4] || 0) - i,
+
                    l = d(e[5] || 0) - a,
+
                    c = d(e[6] || 0),
+
                    f = Math.round(1e3 * parseFloat("0." + (e[7] || 0)));
+
                return s.call(r, u, l, c, f), r
+
            }
+
            return t
+
        }
+
        var n = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;
+
        return function(n, r, i) {
+
            var o, s, u = "",
+
                l = [];
+
            if (r = r || "mediumDate", r = t.DATETIME_FORMATS[r] || r, b(n) && (n = Ca.test(n) ? d(n) : e(n)), w(n) && (n = new Date(n)), !x(n)) return n;
+
            for (; r;) s = Sa.exec(r), s ? (l = _(l, s, 1), r = l.pop()) : (l.push(r), r = null);
+
            return i && "UTC" === i && (n = new Date(n.getTime()), n.setMinutes(n.getMinutes() + n.getTimezoneOffset())), a(l, function(e) {
+
                o = ka[e], u += o ? o(n, t.DATETIME_FORMATS) : e.replace(/(^'|'$)/g, "").replace(/''/g, "'")
+
            }), u
+
        }
+
    }
+
 
+
    function kr() {
+
        return function(t, e) {
+
            return g(e) && (e = 2), H(t, e)
+
        }
+
    }
+
 
+
    function Sr() {
+
        return function(t, e) {
+
            return w(t) && (t = t.toString()), ci(t) || b(t) ? (e = 1 / 0 === Math.abs(Number(e)) ? Number(e) : d(e), e ? e > 0 ? t.slice(0, e) : t.slice(e) : b(t) ? "" : []) : t
+
        }
+
    }
+
 
+
    function Cr(t) {
+
        return function(e, n, r) {
+
            function a(t, e) {
+
                for (var r = 0; r < n.length; r++) {
+
                    var i = n[r](t, e);
+
                    if (0 !== i) return i
+
                }
+
                return 0
+
            }
+
 
+
            function o(t, e) {
+
                return e ? function(e, n) {
+
                    return t(n, e)
+
                } : t
+
            }
+
 
+
            function s(t) {
+
                switch (typeof t) {
+
                    case "number":
+
                    case "boolean":
+
                    case "string":
+
                        return !0;
+
                    default:
+
                        return !1
+
                }
+
            }
+
 
+
            function u(t) {
+
                return null === t ? "null" : "function" == typeof t.valueOf && (t = t.valueOf(), s(t)) ? t : "function" == typeof t.toString && (t = t.toString(), s(t)) ? t : ""
+
            }
+
 
+
            function l(t, e) {
+
                var n = typeof t,
+
                    r = typeof e;
+
                return n === r && "object" === n && (t = u(t), e = u(e)), n === r ? ("string" === n && (t = t.toLowerCase(), e = e.toLowerCase()), t === e ? 0 : e > t ? -1 : 1) : r > n ? -1 : 1
+
            }
+
            return i(e) ? (n = ci(n) ? n : [n], 0 === n.length && (n = ["+"]), n = n.map(function(e) {
+
                var n = !1,
+
                    r = e || $;
+
                if (b(e)) {
+
                    if (("+" == e.charAt(0) || "-" == e.charAt(0)) && (n = "-" == e.charAt(0), e = e.substring(1)), "" === e) return o(l, n);
+
                    if (r = t(e), r.constant) {
+
                        var i = r();
+
                        return o(function(t, e) {
+
                            return l(t[i], e[i])
+
                        }, n)
+
                    }
+
                }
+
                return o(function(t, e) {
+
                    return l(r(t), r(e))
+
                }, n)
+
            }), ni.call(e).sort(o(a, r))) : e
+
        }
+
    }
+
 
+
    function Ar(t) {
+
        return k(t) && (t = {
+
            link: t
+
        }), t.restrict = t.restrict || "AC", m(t)
+
    }
+
 
+
    function Or(t, e) {
+
        t.$name = e
+
    }
+
 
+
    function Er(t, e, r, i, o) {
+
        var s = this,
+
            u = [],
+
            l = s.$$parentForm = t.parent().controller("form") || Na;
+
        s.$error = {}, s.$$success = {}, s.$pending = n, s.$name = o(e.name || e.ngForm || "")(r), s.$dirty = !1, s.$pristine = !0, s.$valid = !0, s.$invalid = !1, s.$submitted = !1, l.$addControl(s), s.$rollbackViewValue = function() {
+
            a(u, function(t) {
+
                t.$rollbackViewValue()
+
            })
+
        }, s.$commitViewValue = function() {
+
            a(u, function(t) {
+
                t.$commitViewValue()
+
            })
+
        }, s.$addControl = function(t) {
+
            oe(t.$name, "input"), u.push(t), t.$name && (s[t.$name] = t)
+
        }, s.$$renameControl = function(t, e) {
+
            var n = t.$name;
+
            s[n] === t && delete s[n], s[e] = t, t.$name = e
+
        }, s.$removeControl = function(t) {
+
            t.$name && s[t.$name] === t && delete s[t.$name], a(s.$pending, function(e, n) {
+
                s.$setValidity(n, null, t)
+
            }), a(s.$error, function(e, n) {
+
                s.$setValidity(n, null, t)
+
            }), a(s.$$success, function(e, n) {
+
                s.$setValidity(n, null, t)
+
            }), q(u, t)
+
        }, Hr({
+
            ctrl: this,
+
            $element: t,
+
            set: function(t, e, n) {
+
                var r = t[e];
+
                if (r) {
+
                    var i = r.indexOf(n); - 1 === i && r.push(n)
+
                } else t[e] = [n]
+
            },
+
            unset: function(t, e, n) {
+
                var r = t[e];
+
                r && (q(r, n), 0 === r.length && delete t[e])
+
            },
+
            parentForm: l,
+
            $animate: i
+
        }), s.$setDirty = function() {
+
            i.removeClass(t, ho), i.addClass(t, po), s.$dirty = !0, s.$pristine = !1, l.$setDirty()
+
        }, s.$setPristine = function() {
+
            i.setClass(t, ho, po + " " + Ta), s.$dirty = !1, s.$pristine = !0, s.$submitted = !1, a(u, function(t) {
+
                t.$setPristine()
+
            })
+
        }, s.$setUntouched = function() {
+
            a(u, function(t) {
+
                t.$setUntouched()
+
            })
+
        }, s.$setSubmitted = function() {
+
            i.addClass(t, Ta), s.$submitted = !0, l.$setSubmitted()
+
        }
+
    }
+
 
+
    function jr(t) {
+
        t.$formatters.push(function(e) {
+
            return t.$isEmpty(e) ? e : e.toString()
+
        })
+
    }
+
 
+
    function Nr(t, e, n, r, i, a) {
+
        Tr(t, e, n, r, i, a), jr(r)
+
    }
+
 
+
    function Tr(t, e, n, r, i, a) {
+
        var o = Wr(e[0].type);
+
        if (!i.android) {
+
            var s = !1;
+
            e.on("compositionstart", function() {
+
                s = !0
+
            }), e.on("compositionend", function() {
+
                s = !1, u()
+
            })
+
        }
+
        var u = function(t) {
+
            if (l && (a.defer.cancel(l), l = null), !s) {
+
                var i = e.val(),
+
                    u = t && t.type;
+
                "password" === o || n.ngTrim && "false" === n.ngTrim || (i = fi(i)), (r.$viewValue !== i || "" === i && r.$$hasNativeValidators) && r.$setViewValue(i, u)
+
            }
+
        };
+
        if (i.hasEvent("input")) e.on("input", u);
+
        else {
+
            var l, c = function(t, e, n) {
+
                l || (l = a.defer(function() {
+
                    l = null, e && e.value === n || u(t)
+
                }))
+
            };
+
            e.on("keydown", function(t) {
+
                var e = t.keyCode;
+
                91 === e || e > 15 && 19 > e || e >= 37 && 40 >= e || c(t, this, this.value)
+
            }), i.hasEvent("paste") && e.on("paste cut", c)
+
        }
+
        e.on("change", u), r.$render = function() {
+
            e.val(r.$isEmpty(r.$viewValue) ? "" : r.$viewValue)
+
        }
+
    }
+
 
+
    function Mr(t, e) {
+
        if (x(t)) return t;
+
        if (b(t)) {
+
            La.lastIndex = 0;
+
            var n = La.exec(t);
+
            if (n) {
+
                var r = +n[1],
+
                    i = +n[2],
+
                    a = 0,
+
                    o = 0,
+
                    s = 0,
+
                    u = 0,
+
                    l = vr(r),
+
                    c = 7 * (i - 1);
+
                return e && (a = e.getHours(), o = e.getMinutes(), s = e.getSeconds(), u = e.getMilliseconds()), new Date(r, 0, l.getDate() + c, a, o, s, u)
+
            }
+
        }
+
        return 0 / 0
+
    }
+
 
+
    function Pr(t, e) {
+
        return function(n, r) {
+
            var i, o;
+
            if (x(n)) return n;
+
            if (b(n)) {
+
                if ('"' == n.charAt(0) && '"' == n.charAt(n.length - 1) && (n = n.substring(1, n.length - 1)), qa.test(n)) return new Date(n);
+
                if (t.lastIndex = 0, i = t.exec(n)) return i.shift(), o = r ? {
+
                    yyyy: r.getFullYear(),
+
                    MM: r.getMonth() + 1,
+
                    dd: r.getDate(),
+
                    HH: r.getHours(),
+
                    mm: r.getMinutes(),
+
                    ss: r.getSeconds(),
+
                    sss: r.getMilliseconds() / 1e3
+
                } : {
+
                    yyyy: 1970,
+
                    MM: 1,
+
                    dd: 1,
+
                    HH: 0,
+
                    mm: 0,
+
                    ss: 0,
+
                    sss: 0
+
                }, a(i, function(t, n) {
+
                    n < e.length && (o[e[n]] = +t)
+
                }), new Date(o.yyyy, o.MM - 1, o.dd, o.HH, o.mm, o.ss || 0, 1e3 * o.sss || 0)
+
            }
+
            return 0 / 0
+
        }
+
    }
+
 
+
    function Vr(t, e, r, i) {
+
        return function(a, o, s, u, l, c, f) {
+
            function d(t) {
+
                return t && !(t.getTime && t.getTime() !== t.getTime())
+
            }
+
 
+
            function h(t) {
+
                return v(t) ? x(t) ? t : r(t) : n
+
            }
+
            qr(a, o, s, u), Tr(a, o, s, u, l, c);
+
            var p, $ = u && u.$options && u.$options.timezone;
+
            if (u.$$parserName = t, u.$parsers.push(function(t) {
+
                    if (u.$isEmpty(t)) return null;
+
                    if (e.test(t)) {
+
                        var i = r(t, p);
+
                        return "UTC" === $ && i.setMinutes(i.getMinutes() - i.getTimezoneOffset()), i
+
                    }
+
                    return n
+
                }), u.$formatters.push(function(t) {
+
                    if (t && !x(t)) throw vo("datefmt", "Expected `{0}` to be a date", t);
+
                    if (d(t)) {
+
                        if (p = t, p && "UTC" === $) {
+
                            var e = 6e4 * p.getTimezoneOffset();
+
                            p = new Date(p.getTime() + e)
+
                        }
+
                        return f("date")(t, i, $)
+
                    }
+
                    return p = null, ""
+
                }), v(s.min) || s.ngMin) {
+
                var m;
+
                u.$validators.min = function(t) {
+
                    return !d(t) || g(m) || r(t) >= m
+
                }, s.$observe("min", function(t) {
+
                    m = h(t), u.$validate()
+
                })
+
            }
+
            if (v(s.max) || s.ngMax) {
+
                var y;
+
                u.$validators.max = function(t) {
+
                    return !d(t) || g(y) || r(t) <= y
+
                }, s.$observe("max", function(t) {
+
                    y = h(t), u.$validate()
+
                })
+
            }
+
        }
+
    }
+
 
+
    function qr(t, e, r, i) {
+
        var a = e[0],
+
            o = i.$$hasNativeValidators = y(a.validity);
+
        o && i.$parsers.push(function(t) {
+
            var r = e.prop(Gr) || {};
+
            return r.badInput && !r.typeMismatch ? n : t
+
        })
+
    }
+
 
+
    function Dr(t, e, r, i, a, o) {
+
        if (qr(t, e, r, i), Tr(t, e, r, i, a, o), i.$$parserName = "number", i.$parsers.push(function(t) {
+
                return i.$isEmpty(t) ? null : Ia.test(t) ? parseFloat(t) : n
+
            }), i.$formatters.push(function(t) {
+
                if (!i.$isEmpty(t)) {
+
                    if (!w(t)) throw vo("numfmt", "Expected `{0}` to be a number", t);
+
                    t = t.toString()
+
                }
+
                return t
+
            }), r.min || r.ngMin) {
+
            var s;
+
            i.$validators.min = function(t) {
+
                return i.$isEmpty(t) || g(s) || t >= s
+
            }, r.$observe("min", function(t) {
+
                v(t) && !w(t) && (t = parseFloat(t, 10)), s = w(t) && !isNaN(t) ? t : n, i.$validate()
+
            })
+
        }
+
        if (r.max || r.ngMax) {
+
            var u;
+
            i.$validators.max = function(t) {
+
                return i.$isEmpty(t) || g(u) || u >= t
+
            }, r.$observe("max", function(t) {
+
                v(t) && !w(t) && (t = parseFloat(t, 10)), u = w(t) && !isNaN(t) ? t : n, i.$validate()
+
            })
+
        }
+
    }
+
 
+
    function Rr(t, e, n, r, i, a) {
+
        Tr(t, e, n, r, i, a), jr(r), r.$$parserName = "url", r.$validators.url = function(t, e) {
+
            var n = t || e;
+
            return r.$isEmpty(n) || Da.test(n)
+
        }
+
    }
+
 
+
    function Ir(t, e, n, r, i, a) {
+
        Tr(t, e, n, r, i, a), jr(r), r.$$parserName = "email", r.$validators.email = function(t, e) {
+
            var n = t || e;
+
            return r.$isEmpty(n) || Ra.test(n)
+
        }
+
    }
+
 
+
    function _r(t, e, n, r) {
+
        g(n.name) && e.attr("name", l());
+
        var i = function(t) {
+
            e[0].checked && r.$setViewValue(n.value, t && t.type)
+
        };
+
        e.on("click", i), r.$render = function() {
+
            var t = n.value;
+
            e[0].checked = t == r.$viewValue
+
        }, n.$observe("value", r.$render)
+
    }
+
 
+
    function Ur(t, e, n, i, a) {
+
        var o;
+
        if (v(i)) {
+
            if (o = t(i), !o.constant) throw r("ngModel")("constexpr", "Expected constant expression for `{0}`, but saw `{1}`.", n, i);
+
            return o(e)
+
        }
+
        return a
+
    }
+
 
+
    function Lr(t, e, n, r, i, a, o, s) {
+
        var u = Ur(s, t, "ngTrueValue", n.ngTrueValue, !0),
+
            l = Ur(s, t, "ngFalseValue", n.ngFalseValue, !1),
+
            c = function(t) {
+
                r.$setViewValue(e[0].checked, t && t.type)
+
            };
+
        e.on("click", c), r.$render = function() {
+
            e[0].checked = r.$viewValue
+
        }, r.$isEmpty = function(t) {
+
            return t === !1
+
        }, r.$formatters.push(function(t) {
+
            return I(t, u)
+
        }), r.$parsers.push(function(t) {
+
            return t ? u : l
+
        })
+
    }
+
 
+
    function Fr(t, e) {
+
        return t = "ngClass" + t, ["$animate", function(n) {
+
            function r(t, e) {
+
                var n = [];
+
                t: for (var r = 0; r < t.length; r++) {
+
                    for (var i = t[r], a = 0; a < e.length; a++)
+
                        if (i == e[a]) continue t;
+
                    n.push(i)
+
                }
+
                return n
+
            }
+
 
+
            function i(t) {
+
                if (ci(t)) return t;
+
                if (b(t)) return t.split(" ");
+
                if (y(t)) {
+
                    var e = [];
+
                    return a(t, function(t, n) {
+
                        t && (e = e.concat(n.split(" ")))
+
                    }), e
+
                }
+
                return t
+
            }
+
            return {
+
                restrict: "AC",
+
                link: function(o, s, u) {
+
                    function l(t) {
+
                        var e = f(t, 1);
+
                        u.$addClass(e)
+
                    }
+
 
+
                    function c(t) {
+
                        var e = f(t, -1);
+
                        u.$removeClass(e)
+
                    }
+
 
+
                    function f(t, e) {
+
                        var n = s.data("$classCounts") || {},
+
                            r = [];
+
                        return a(t, function(t) {
+
                            (e > 0 || n[t]) && (n[t] = (n[t] || 0) + e, n[t] === +(e > 0) && r.push(t))
+
                        }), s.data("$classCounts", n), r.join(" ")
+
                    }
+
 
+
                    function d(t, e) {
+
                        var i = r(e, t),
+
                            a = r(t, e);
+
                        i = f(i, 1), a = f(a, -1), i && i.length && n.addClass(s, i), a && a.length && n.removeClass(s, a)
+
                    }
+
 
+
                    function h(t) {
+
                        if (e === !0 || o.$index % 2 === e) {
+
                            var n = i(t || []);
+
                            if (p) {
+
                                if (!I(t, p)) {
+
                                    var r = i(p);
+
                                    d(r, n)
+
                                }
+
                            } else l(n)
+
                        }
+
                        p = R(t)
+
                    }
+
                    var p;
+
                    o.$watch(u[t], h, !0), u.$observe("class", function() {
+
                        h(o.$eval(u[t]))
+
                    }), "ngClass" !== t && o.$watch("$index", function(n, r) {
+
                        var a = 1 & n;
+
                        if (a !== (1 & r)) {
+
                            var s = i(o.$eval(u[t]));
+
                            a === e ? l(s) : c(s)
+
                        }
+
                    })
+
                }
+
            }
+
        }]
+
    }
+
 
+
    function Hr(t) {
+
        function e(t, e, u) {
+
            e === n ? r("$pending", t, u) : i("$pending", t, u), N(e) ? e ? (f(s.$error, t, u), c(s.$$success, t, u)) : (c(s.$error, t, u), f(s.$$success, t, u)) : (f(s.$error, t, u), f(s.$$success, t, u)), s.$pending ? (a(go, !0), s.$valid = s.$invalid = n, o("", null)) : (a(go, !1), s.$valid = Br(s.$error), s.$invalid = !s.$valid, o("", s.$valid));
+
            var l;
+
            l = s.$pending && s.$pending[t] ? n : s.$error[t] ? !1 : s.$$success[t] ? !0 : null, o(t, l), d.$setValidity(t, l, s)
+
        }
+
 
+
        function r(t, e, n) {
+
            s[t] || (s[t] = {}), c(s[t], e, n)
+
        }
+
 
+
        function i(t, e, r) {
+
            s[t] && f(s[t], e, r), Br(s[t]) && (s[t] = n)
+
        }
+
 
+
        function a(t, e) {
+
            e && !l[t] ? (h.addClass(u, t), l[t] = !0) : !e && l[t] && (h.removeClass(u, t), l[t] = !1)
+
        }
+
 
+
        function o(t, e) {
+
            t = t ? "-" + ne(t, "-") : "", a(co + t, e === !0), a(fo + t, e === !1)
+
        }
+
        var s = t.ctrl,
+
            u = t.$element,
+
            l = {},
+
            c = t.set,
+
            f = t.unset,
+
            d = t.parentForm,
+
            h = t.$animate;
+
        l[fo] = !(l[co] = u.hasClass(co)), s.$setValidity = e
+
    }
+
 
+
    function Br(t) {
+
        if (t)
+
            for (var e in t) return !1;
+
        return !0
+
    }
+
    var zr = /^\/(.+)\/([a-z]*)$/,
+
        Gr = "validity",
+
        Wr = function(t) {
+
            return b(t) ? t.toLowerCase() : t
+
        },
+
        Jr = Object.prototype.hasOwnProperty,
+
        Yr = function(t) {
+
            return b(t) ? t.toUpperCase() : t
+
        },
+
        Zr = function(t) {
+
            return b(t) ? t.replace(/[A-Z]/g, function(t) {
+
                return String.fromCharCode(32 | t.charCodeAt(0))
+
            }) : t
+
        },
+
        Kr = function(t) {
+
            return b(t) ? t.replace(/[a-z]/g, function(t) {
+
                return String.fromCharCode(-33 & t.charCodeAt(0))
+
            }) : t
+
        };
+
    "i" !== "I".toLowerCase() && (Wr = Zr, Yr = Kr);
+
    var Xr, Qr, ti, ei, ni = [].slice,
+
        ri = [].splice,
+
        ii = [].push,
+
        ai = Object.prototype.toString,
+
        oi = r("ng"),
+
        si = t.angular || (t.angular = {}),
+
        ui = 0;
+
    Xr = e.documentMode, p.$inject = [], $.$inject = [];
+
    var li, ci = Array.isArray,
+
        fi = function(t) {
+
            return b(t) ? t.trim() : t
+
        },
+
        di = function(t) {
+
            return t.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08")
+
        },
+
        hi = function() {
+
            if (v(hi.isActive_)) return hi.isActive_;
+
            var t = !(!e.querySelector("[ng-csp]") && !e.querySelector("[data-ng-csp]"));
+
            if (!t) try {
+
                new Function("")
+
            } catch (n) {
+
                t = !0
+
            }
+
            return hi.isActive_ = t
+
        },
+
        pi = ["ng-", "data-ng-", "ng:", "x-ng-"],
+
        $i = /[A-Z]/g,
+
        mi = !1,
+
        gi = 1,
+
        vi = 3,
+
        yi = 8,
+
        bi = 9,
+
        wi = 11,
+
        xi = {
+
            full: "1.3.13",
+
            major: 1,
+
            minor: 3,
+
            dot: 13,
+
            codeName: "meticulous-riffleshuffle"
+
        };
+
    be.expando = "ng339";
+
    var ki = be.cache = {},
+
        Si = 1,
+
        Ci = function(t, e, n) {
+
            t.addEventListener(e, n, !1)
+
        },
+
        Ai = function(t, e, n) {
+
            t.removeEventListener(e, n, !1)
+
        };
+
    be._data = function(t) {
+
        return this.cache[t[this.expando]] || {}
+
    };
+
    var Oi = /([\:\-\_]+(.))/g,
+
        Ei = /^moz([A-Z])/,
+
        ji = {
+
            mouseleave: "mouseout",
+
            mouseenter: "mouseover"
+
        },
+
        Ni = r("jqLite"),
+
        Ti = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
+
        Mi = /<|&#?\w+;/,
+
        Pi = /<([\w:]+)/,
+
        Vi = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+
        qi = {
+
            option: [1, '<select multiple="multiple">', "</select>"],
+
            thead: [1, "<table>", "</table>"],
+
            col: [2, "<table><colgroup>", "</colgroup></table>"],
+
            tr: [2, "<table><tbody>", "</tbody></table>"],
+
            td: [3, "<table><tbody><tr>", "</tr></tbody></table>"],
+
            _default: [0, "", ""]
+
        };
+
    qi.optgroup = qi.option, qi.tbody = qi.tfoot = qi.colgroup = qi.caption = qi.thead, qi.th = qi.td;
+
    var Di = be.prototype = {
+
            ready: function(n) {
+
                function r() {
+
                    i || (i = !0, n())
+
                }
+
                var i = !1;
+
                "complete" === e.readyState ? setTimeout(r) : (this.on("DOMContentLoaded", r), be(t).on("load", r))
+
            },
+
            toString: function() {
+
                var t = [];
+
                return a(this, function(e) {
+
                    t.push("" + e)
+
                }), "[" + t.join(", ") + "]"
+
            },
+
            eq: function(t) {
+
                return t >= 0 ? Qr(this[t]) : Qr(this[this.length + t])
+
            },
+
            length: 0,
+
            push: ii,
+
            sort: [].sort,
+
            splice: [].splice
+
        },
+
        Ri = {};
+
    a("multiple,selected,checked,disabled,readOnly,required,open".split(","), function(t) {
+
        Ri[Wr(t)] = t
+
    });
+
    var Ii = {};
+
    a("input,select,option,textarea,button,form,details".split(","), function(t) {
+
        Ii[t] = !0
+
    });
+
    var _i = {
+
        ngMinlength: "minlength",
+
        ngMaxlength: "maxlength",
+
        ngMin: "min",
+
        ngMax: "max",
+
        ngPattern: "pattern"
+
    };
+
    a({
+
        data: Ae,
+
        removeData: Se
+
    }, function(t, e) {
+
        be[e] = t
+
    }), a({
+
        data: Ae,
+
        inheritedData: Me,
+
        scope: function(t) {
+
            return Qr.data(t, "$scope") || Me(t.parentNode || t, ["$isolateScope", "$scope"])
+
        },
+
        isolateScope: function(t) {
+
            return Qr.data(t, "$isolateScope") || Qr.data(t, "$isolateScopeNoTemplate")
+
        },
+
        controller: Te,
+
        injector: function(t) {
+
            return Me(t, "$injector")
+
        },
+
        removeAttr: function(t, e) {
+
            t.removeAttribute(e)
+
        },
+
        hasClass: Oe,
+
        css: function(t, e, n) {
+
            return e = $e(e), v(n) ? (t.style[e] = n, void 0) : t.style[e]
+
        },
+
        attr: function(t, e, r) {
+
            var i = Wr(e);
+
            if (Ri[i]) {
+
                if (!v(r)) return t[e] || (t.attributes.getNamedItem(e) || p).specified ? i : n;
+
                r ? (t[e] = !0, t.setAttribute(e, i)) : (t[e] = !1, t.removeAttribute(i))
+
            } else if (v(r)) t.setAttribute(e, r);
+
            else if (t.getAttribute) {
+
                var a = t.getAttribute(e, 2);
+
                return null === a ? n : a
+
            }
+
        },
+
        prop: function(t, e, n) {
+
            return v(n) ? (t[e] = n, void 0) : t[e]
+
        },
+
        text: function() {
+
            function t(t, e) {
+
                if (g(e)) {
+
                    var n = t.nodeType;
+
                    return n === gi || n === vi ? t.textContent : ""
+
                }
+
                t.textContent = e
+
            }
+
            return t.$dv = "", t
+
        }(),
+
        val: function(t, e) {
+
            if (g(e)) {
+
                if (t.multiple && "select" === V(t)) {
+
                    var n = [];
+
                    return a(t.options, function(t) {
+
                        t.selected && n.push(t.value || t.text)
+
                    }), 0 === n.length ? null : n
+
                }
+
                return t.value
+
            }
+
            t.value = e
+
        },
+
        html: function(t, e) {
+
            return g(e) ? t.innerHTML : (xe(t, !0), t.innerHTML = e, void 0)
+
        },
+
        empty: Pe
+
    }, function(t, e) {
+
        be.prototype[e] = function(e, r) {
+
            var i, a, o = this.length;
+
            if (t !== Pe && (2 == t.length && t !== Oe && t !== Te ? e : r) === n) {
+
                if (y(e)) {
+
                    for (i = 0; o > i; i++)
+
                        if (t === Ae) t(this[i], e);
+
                        else
+
                            for (a in e) t(this[i], a, e[a]);
+
                    return this
+
                }
+
                for (var s = t.$dv, u = s === n ? Math.min(o, 1) : o, l = 0; u > l; l++) {
+
                    var c = t(this[l], e, r);
+
                    s = s ? s + c : c
+
                }
+
                return s
+
            }
+
            for (i = 0; o > i; i++) t(this[i], e, r);
+
            return this
+
        }
+
    }), a({
+
        removeData: Se,
+
        on: function zo(t, e, n, r) {
+
            if (v(r)) throw Ni("onargs", "jqLite#on() does not support the `selector` or `eventData` parameters");
+
            if (ge(t)) {
+
                var i = Ce(t, !0),
+
                    a = i.events,
+
                    o = i.handle;
+
                o || (o = i.handle = Ie(t, a));
+
                for (var s = e.indexOf(" ") >= 0 ? e.split(" ") : [e], u = s.length; u--;) {
+
                    e = s[u];
+
                    var l = a[e];
+
                    l || (a[e] = [], "mouseenter" === e || "mouseleave" === e ? zo(t, ji[e], function(t) {
+
                        var n = this,
+
                            r = t.relatedTarget;
+
                        (!r || r !== n && !n.contains(r)) && o(t, e)
+
                    }) : "$destroy" !== e && Ci(t, e, o), l = a[e]), l.push(n)
+
                }
+
            }
+
        },
+
        off: ke,
+
        one: function(t, e, n) {
+
            t = Qr(t), t.on(e, function r() {
+
                t.off(e, n), t.off(e, r)
+
            }), t.on(e, n)
+
        },
+
        replaceWith: function(t, e) {
+
            var n, r = t.parentNode;
+
            xe(t), a(new be(e), function(e) {
+
                n ? r.insertBefore(e, n.nextSibling) : r.replaceChild(e, t), n = e
+
            })
+
        },
+
        children: function(t) {
+
            var e = [];
+
            return a(t.childNodes, function(t) {
+
                t.nodeType === gi && e.push(t)
+
            }), e
+
        },
+
        contents: function(t) {
+
            return t.contentDocument || t.childNodes || []
+
        },
+
        append: function(t, e) {
+
            var n = t.nodeType;
+
            if (n === gi || n === wi) {
+
                e = new be(e);
+
                for (var r = 0, i = e.length; i > r; r++) {
+
                    var a = e[r];
+
                    t.appendChild(a)
+
                }
+
            }
+
        },
+
        prepend: function(t, e) {
+
            if (t.nodeType === gi) {
+
                var n = t.firstChild;
+
                a(new be(e), function(e) {
+
                    t.insertBefore(e, n)
+
                })
+
            }
+
        },
+
        wrap: function(t, e) {
+
            e = Qr(e).eq(0).clone()[0];
+
            var n = t.parentNode;
+
            n && n.replaceChild(e, t), e.appendChild(t)
+
        },
+
        remove: Ve,
+
        detach: function(t) {
+
            Ve(t, !0)
+
        },
+
        after: function(t, e) {
+
            var n = t,
+
                r = t.parentNode;
+
            e = new be(e);
+
            for (var i = 0, a = e.length; a > i; i++) {
+
                var o = e[i];
+
                r.insertBefore(o, n.nextSibling), n = o
+
            }
+
        },
+
        addClass: je,
+
        removeClass: Ee,
+
        toggleClass: function(t, e, n) {
+
            e && a(e.split(" "), function(e) {
+
                var r = n;
+
                g(r) && (r = !Oe(t, e)), (r ? je : Ee)(t, e)
+
            })
+
        },
+
        parent: function(t) {
+
            var e = t.parentNode;
+
            return e && e.nodeType !== wi ? e : null
+
        },
+
        next: function(t) {
+
            return t.nextElementSibling
+
        },
+
        find: function(t, e) {
+
            return t.getElementsByTagName ? t.getElementsByTagName(e) : []
+
        },
+
        clone: we,
+
        triggerHandler: function(t, e, n) {
+
            var r, i, o, s = e.type || e,
+
                u = Ce(t),
+
                l = u && u.events,
+
                c = l && l[s];
+
            c && (r = {
+
                preventDefault: function() {
+
                    this.defaultPrevented = !0
+
                },
+
                isDefaultPrevented: function() {
+
                    return this.defaultPrevented === !0
+
                },
+
                stopImmediatePropagation: function() {
+
                    this.immediatePropagationStopped = !0
+
                },
+
                isImmediatePropagationStopped: function() {
+
                    return this.immediatePropagationStopped === !0
+
                },
+
                stopPropagation: p,
+
                type: s,
+
                target: t
+
            }, e.type && (r = f(r, e)), i = R(c), o = n ? [r].concat(n) : [r], a(i, function(e) {
+
                r.isImmediatePropagationStopped() || e.apply(t, o)
+
            }))
+
        }
+
    }, function(t, e) {
+
        be.prototype[e] = function(e, n, r) {
+
            for (var i, a = 0, o = this.length; o > a; a++) g(i) ? (i = t(this[a], e, n, r), v(i) && (i = Qr(i))) : Ne(i, t(this[a], e, n, r));
+
            return v(i) ? i : this
+
        }, be.prototype.bind = be.prototype.on, be.prototype.unbind = be.prototype.off
+
    }), Le.prototype = {
+
        put: function(t, e) {
+
            this[Ue(t, this.nextUid)] = e
+
        },
+
        get: function(t) {
+
            return this[Ue(t, this.nextUid)]
+
        },
+
        remove: function(t) {
+
            var e = this[t = Ue(t, this.nextUid)];
+
            return delete this[t], e
+
        }
+
    };
+
    var Ui = /^function\s*[^\(]*\(\s*([^\)]*)\)/m,
+
        Li = /,/,
+
        Fi = /^\s*(_?)(\S+?)\1\s*$/,
+
        Hi = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,
+
        Bi = r("$injector");
+
    Be.$$annotate = He;
+
    var zi = r("$animate"),
+
        Gi = ["$provide", function(t) {
+
            this.$$selectors = {}, this.register = function(e, n) {
+
                var r = e + "-animation";
+
                if (e && "." != e.charAt(0)) throw zi("notcsel", "Expecting class selector starting with '.' got '{0}'.", e);
+
                this.$$selectors[e.substr(1)] = r, t.factory(r, n)
+
            }, this.classNameFilter = function(t) {
+
                return 1 === arguments.length && (this.$$classNameFilter = t instanceof RegExp ? t : null), this.$$classNameFilter
+
            }, this.$get = ["$$q", "$$asyncCallback", "$rootScope", function(t, e, n) {
+
                function r(e) {
+
                    var r, i = t.defer();
+
                    return i.promise.$$cancelFn = function() {
+
                        r && r()
+
                    }, n.$$postDigest(function() {
+
                        r = e(function() {
+
                            i.resolve()
+
                        })
+
                    }), i.promise
+
                }
+
 
+
                function i(t, e) {
+
                    var n = [],
+
                        r = [],
+
                        i = le();
+
                    return a((t.attr("class") || "").split(/\s+/), function(t) {
+
                        i[t] = !0
+
                    }), a(e, function(t, e) {
+
                        var a = i[e];
+
                        t === !1 && a ? r.push(e) : t !== !0 || a || n.push(e)
+
                    }), n.length + r.length > 0 && [n.length ? n : null, r.length ? r : null]
+
                }
+
 
+
                function o(t, e, n) {
+
                    for (var r = 0, i = e.length; i > r; ++r) {
+
                        var a = e[r];
+
                        t[a] = n
+
                    }
+
                }
+
 
+
                function s() {
+
                    return l || (l = t.defer(), e(function() {
+
                        l.resolve(), l = null
+
                    })), l.promise
+
                }
+
 
+
                function u(t, e) {
+
                    if (si.isObject(e)) {
+
                        var n = f(e.from || {}, e.to || {});
+
                        t.css(n)
+
                    }
+
                }
+
                var l;
+
                return {
+
                    animate: function(t, e, n) {
+
                        return u(t, {
+
                            from: e,
+
                            to: n
+
                        }), s()
+
                    },
+
                    enter: function(t, e, n, r) {
+
                        return u(t, r), n ? n.after(t) : e.prepend(t), s()
+
                    },
+
                    leave: function(t) {
+
                        return t.remove(), s()
+
                    },
+
                    move: function(t, e, n, r) {
+
                        return this.enter(t, e, n, r)
+
                    },
+
                    addClass: function(t, e, n) {
+
                        return this.setClass(t, e, [], n)
+
                    },
+
                    $$addClassImmediately: function(t, e, n) {
+
                        return t = Qr(t), e = b(e) ? e : ci(e) ? e.join(" ") : "", a(t, function(t) {
+
                            je(t, e)
+
                        }), u(t, n), s()
+
                    },
+
                    removeClass: function(t, e, n) {
+
                        return this.setClass(t, [], e, n)
+
                    },
+
                    $$removeClassImmediately: function(t, e, n) {
+
                        return t = Qr(t), e = b(e) ? e : ci(e) ? e.join(" ") : "", a(t, function(t) {
+
                            Ee(t, e)
+
                        }), u(t, n), s()
+
                    },
+
                    setClass: function(t, e, n, a) {
+
                        var s = this,
+
                            u = "$$animateClasses",
+
                            l = !1;
+
                        t = Qr(t);
+
                        var c = t.data(u);
+
                        c ? a && c.options && (c.options = si.extend(c.options || {}, a)) : (c = {
+
                            classes: {},
+
                            options: a
+
                        }, l = !0);
+
                        var f = c.classes;
+
                        return e = ci(e) ? e : e.split(" "), n = ci(n) ? n : n.split(" "), o(f, e, !0), o(f, n, !1), l && (c.promise = r(function(e) {
+
                            var n = t.data(u);
+
                            if (t.removeData(u), n) {
+
                                var r = i(t, n.classes);
+
                                r && s.$$setClassImmediately(t, r[0], r[1], n.options)
+
                            }
+
                            e()
+
                        }), t.data(u, c)), c.promise
+
                    },
+
                    $$setClassImmediately: function(t, e, n, r) {
+
                        return e && this.$$addClassImmediately(t, e), n && this.$$removeClassImmediately(t, n), u(t, r), s()
+
                    },
+
                    enabled: p,
+
                    cancel: p
+
                }
+
            }]
+
        }],
+
        Wi = r("$compile");
+
    Ke.$inject = ["$provide", "$$sanitizeUriProvider"];
+
    var Ji = /^((?:x|data)[\:\-_])/i,
+
        Yi = r("$controller"),
+
        Zi = "application/json",
+
        Ki = {
+
            "Content-Type": Zi + ";charset=utf-8"
+
        },
+
        Xi = /^\[|^\{(?!\{)/,
+
        Qi = {
+
            "[": /]$/,
+
            "{": /}$/
+
        },
+
        ta = /^\)\]\}',?\n/,
+
        ea = r("$interpolate"),
+
        na = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/,
+
        ra = {
+
            http: 80,
+
            https: 443,
+
            ftp: 21
+
        },
+
        ia = r("$location"),
+
        aa = {
+
            $$html5: !1,
+
            $$replace: !1,
+
            absUrl: jn("$$absUrl"),
+
            url: function(t) {
+
                if (g(t)) return this.$$url;
+
                var e = na.exec(t);
+
                return (e[1] || "" === t) && this.path(decodeURIComponent(e[1])), (e[2] || e[1] || "" === t) && this.search(e[3] || ""), this.hash(e[5] || ""), this
+
            },
+
            protocol: jn("$$protocol"),
+
            host: jn("$$host"),
+
            port: jn("$$port"),
+
            path: Nn("$$path", function(t) {
+
                return t = null !== t ? t.toString() : "", "/" == t.charAt(0) ? t : "/" + t
+
            }),
+
            search: function(t, e) {
+
                switch (arguments.length) {
+
                    case 0:
+
                        return this.$$search;
+
                    case 1:
+
                        if (b(t) || w(t)) t = t.toString(), this.$$search = W(t);
+
                        else {
+
                            if (!y(t)) throw ia("isrcharg", "The first argument of the `$location#search()` call must be a string or an object.");
+
                            t = D(t, {}), a(t, function(e, n) {
+
                                null == e && delete t[n]
+
                            }), this.$$search = t
+
                        }
+
                        break;
+
                    default:
+
                        g(e) || null === e ? delete this.$$search[t] : this.$$search[t] = e
+
                }
+
                return this.$$compose(), this
+
            },
+
            hash: Nn("$$hash", function(t) {
+
                return null !== t ? t.toString() : ""
+
            }),
+
            replace: function() {
+
                return this.$$replace = !0, this
+
            }
+
        };
+
    a([En, On, An], function(t) {
+
        t.prototype = Object.create(aa), t.prototype.state = function(e) {
+
            if (!arguments.length) return this.$$state;
+
            if (t !== An || !this.$$html5) throw ia("nostate", "History API state support is available only in HTML5 mode and only in browsers supporting HTML5 History API");
+
            return this.$$state = g(e) ? null : e, this
+
        }
+
    });
+
    var oa = r("$parse"),
+
        sa = Function.prototype.call,
+
        ua = Function.prototype.apply,
+
        la = Function.prototype.bind,
+
        ca = le();
+
    a({
+
        "null": function() {
+
            return null
+
        },
+
        "true": function() {
+
            return !0
+
        },
+
        "false": function() {
+
            return !1
+
        },
+
        undefined: function() {}
+
    }, function(t, e) {
+
        t.constant = t.literal = t.sharedGetter = !0, ca[e] = t
+
    }), ca["this"] = function(t) {
+
        return t
+
    }, ca["this"].sharedGetter = !0;
+
    var fa = f(le(), {
+
            "+": function(t, e, r, i) {
+
                return r = r(t, e), i = i(t, e), v(r) ? v(i) ? r + i : r : v(i) ? i : n
+
            },
+
            "-": function(t, e, n, r) {
+
                return n = n(t, e), r = r(t, e), (v(n) ? n : 0) - (v(r) ? r : 0)
+
            },
+
            "*": function(t, e, n, r) {
+
                return n(t, e) * r(t, e)
+
            },
+
            "/": function(t, e, n, r) {
+
                return n(t, e) / r(t, e)
+
            },
+
            "%": function(t, e, n, r) {
+
                return n(t, e) % r(t, e)
+
            },
+
            "===": function(t, e, n, r) {
+
                return n(t, e) === r(t, e)
+
            },
+
            "!==": function(t, e, n, r) {
+
                return n(t, e) !== r(t, e)
+
            },
+
            "==": function(t, e, n, r) {
+
                return n(t, e) == r(t, e)
+
            },
+
            "!=": function(t, e, n, r) {
+
                return n(t, e) != r(t, e)
+
            },
+
            "<": function(t, e, n, r) {
+
                return n(t, e) < r(t, e)
+
            },
+
            ">": function(t, e, n, r) {
+
                return n(t, e) > r(t, e)
+
            },
+
            "<=": function(t, e, n, r) {
+
                return n(t, e) <= r(t, e)
+
            },
+
            ">=": function(t, e, n, r) {
+
                return n(t, e) >= r(t, e)
+
            },
+
            "&&": function(t, e, n, r) {
+
                return n(t, e) && r(t, e)
+
            },
+
            "||": function(t, e, n, r) {
+
                return n(t, e) || r(t, e)
+
            },
+
            "!": function(t, e, n) {
+
                return !n(t, e)
+
            },
+
            "=": !0,
+
            "|": !0
+
        }),
+
        da = {
+
            n: "\n",
+
            f: "\f",
+
            r: "\r",
+
            t: " ",
+
            v: "�",
+
            "'": "'",
+
            '"': '"'
+
        },
+
        ha = function(t) {
+
            this.options = t
+
        };
+
    ha.prototype = {
+
        constructor: ha,
+
        lex: function(t) {
+
            for (this.text = t, this.index = 0, this.tokens = []; this.index < this.text.length;) {
+
                var e = this.text.charAt(this.index);
+
                if ('"' === e || "'" === e) this.readString(e);
+
                else if (this.isNumber(e) || "." === e && this.isNumber(this.peek())) this.readNumber();
+
                else if (this.isIdent(e)) this.readIdent();
+
                else if (this.is(e, "(){}[].,;:?")) this.tokens.push({
+
                    index: this.index,
+
                    text: e
+
                }), this.index++;
+
                else if (this.isWhitespace(e)) this.index++;
+
                else {
+
                    var n = e + this.peek(),
+
                        r = n + this.peek(2),
+
                        i = fa[e],
+
                        a = fa[n],
+
                        o = fa[r];
+
                    if (i || a || o) {
+
                        var s = o ? r : a ? n : e;
+
                        this.tokens.push({
+
                            index: this.index,
+
                            text: s,
+
                            operator: !0
+
                        }), this.index += s.length
+
                    } else this.throwError("Unexpected next character ", this.index, this.index + 1)
+
                }
+
            }
+
            return this.tokens
+
        },
+
        is: function(t, e) {
+
            return -1 !== e.indexOf(t)
+
        },
+
        peek: function(t) {
+
            var e = t || 1;
+
            return this.index + e < this.text.length ? this.text.charAt(this.index + e) : !1
+
        },
+
        isNumber: function(t) {
+
            return t >= "0" && "9" >= t && "string" == typeof t
+
        },
+
        isWhitespace: function(t) {
+
            return " " === t || "\r" === t || " " === t || "\n" === t || "�" === t || " " === t
+
        },
+
        isIdent: function(t) {
+
            return t >= "a" && "z" >= t || t >= "A" && "Z" >= t || "_" === t || "$" === t
+
        },
+
        isExpOperator: function(t) {
+
            return "-" === t || "+" === t || this.isNumber(t)
+
        },
+
        throwError: function(t, e, n) {
+
            n = n || this.index;
+
            var r = v(e) ? "s " + e + "-" + this.index + " [" + this.text.substring(e, n) + "]" : " " + n;
+
            throw oa("lexerr", "Lexer Error: {0} at column{1} in expression [{2}].", t, r, this.text)
+
        },
+
        readNumber: function() {
+
            for (var t = "", e = this.index; this.index < this.text.length;) {
+
                var n = Wr(this.text.charAt(this.index));
+
                if ("." == n || this.isNumber(n)) t += n;
+
                else {
+
                    var r = this.peek();
+
                    if ("e" == n && this.isExpOperator(r)) t += n;
+
                    else if (this.isExpOperator(n) && r && this.isNumber(r) && "e" == t.charAt(t.length - 1)) t += n;
+
                    else {
+
                        if (!this.isExpOperator(n) || r && this.isNumber(r) || "e" != t.charAt(t.length - 1)) break;
+
                        this.throwError("Invalid exponent")
+
                    }
+
                }
+
                this.index++
+
            }
+
            this.tokens.push({
+
                index: e,
+
                text: t,
+
                constant: !0,
+
                value: Number(t)
+
            })
+
        },
+
        readIdent: function() {
+
            for (var t = this.index; this.index < this.text.length;) {
+
                var e = this.text.charAt(this.index);
+
                if (!this.isIdent(e) && !this.isNumber(e)) break;
+
                this.index++
+
            }
+
            this.tokens.push({
+
                index: t,
+
                text: this.text.slice(t, this.index),
+
                identifier: !0
+
            })
+
        },
+
        readString: function(t) {
+
            var e = this.index;
+
            this.index++;
+
            for (var n = "", r = t, i = !1; this.index < this.text.length;) {
+
                var a = this.text.charAt(this.index);
+
                if (r += a, i) {
+
                    if ("u" === a) {
+
                        var o = this.text.substring(this.index + 1, this.index + 5);
+
                        o.match(/[\da-f]{4}/i) || this.throwError("Invalid unicode escape [\\u" + o + "]"), this.index += 4, n += String.fromCharCode(parseInt(o, 16))
+
                    } else {
+
                        var s = da[a];
+
                        n += s || a
+
                    }
+
                    i = !1
+
                } else if ("\\" === a) i = !0;
+
                else {
+
                    if (a === t) return this.index++, this.tokens.push({
+
                        index: e,
+
                        text: r,
+
                        constant: !0,
+
                        value: n
+
                    }), void 0;
+
                    n += a
+
                }
+
                this.index++
+
            }
+
            this.throwError("Unterminated quote", e)
+
        }
+
    };
+
    var pa = function(t, e, n) {
+
        this.lexer = t, this.$filter = e, this.options = n
+
    };
+
    pa.ZERO = f(function() {
+
        return 0
+
    }, {
+
        sharedGetter: !0,
+
        constant: !0
+
    }), pa.prototype = {
+
        constructor: pa,
+
        parse: function(t) {
+
            this.text = t, this.tokens = this.lexer.lex(t);
+
            var e = this.statements();
+
            return 0 !== this.tokens.length && this.throwError("is an unexpected token", this.tokens[0]), e.literal = !!e.literal, e.constant = !!e.constant, e
+
        },
+
        primary: function() {
+
            var t;
+
            this.expect("(") ? (t = this.filterChain(), this.consume(")")) : this.expect("[") ? t = this.arrayDeclaration() : this.expect("{") ? t = this.object() : this.peek().identifier && this.peek().text in ca ? t = ca[this.consume().text] : this.peek().identifier ? t = this.identifier() : this.peek().constant ? t = this.constant() : this.throwError("not a primary expression", this.peek());
+
            for (var e, n; e = this.expect("(", "[", ".");) "(" === e.text ? (t = this.functionCall(t, n), n = null) : "[" === e.text ? (n = t, t = this.objectIndex(t)) : "." === e.text ? (n = t, t = this.fieldAccess(t)) : this.throwError("IMPOSSIBLE");
+
            return t
+
        },
+
        throwError: function(t, e) {
+
            throw oa("syntax", "Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].", e.text, t, e.index + 1, this.text, this.text.substring(e.index))
+
        },
+
        peekToken: function() {
+
            if (0 === this.tokens.length) throw oa("ueoe", "Unexpected end of expression: {0}", this.text);
+
            return this.tokens[0]
+
        },
+
        peek: function(t, e, n, r) {
+
            return this.peekAhead(0, t, e, n, r)
+
        },
+
        peekAhead: function(t, e, n, r, i) {
+
            if (this.tokens.length > t) {
+
                var a = this.tokens[t],
+
                    o = a.text;
+
                if (o === e || o === n || o === r || o === i || !e && !n && !r && !i) return a
+
            }
+
            return !1
+
        },
+
        expect: function(t, e, n, r) {
+
            var i = this.peek(t, e, n, r);
+
            return i ? (this.tokens.shift(), i) : !1
+
        },
+
        consume: function(t) {
+
            if (0 === this.tokens.length) throw oa("ueoe", "Unexpected end of expression: {0}", this.text);
+
            var e = this.expect(t);
+
            return e || this.throwError("is unexpected, expecting [" + t + "]", this.peek()), e
+
        },
+
        unaryFn: function(t, e) {
+
            var n = fa[t];
+
            return f(function(t, r) {
+
                return n(t, r, e)
+
            }, {
+
                constant: e.constant,
+
                inputs: [e]
+
            })
+
        },
+
        binaryFn: function(t, e, n, r) {
+
            var i = fa[e];
+
            return f(function(e, r) {
+
                return i(e, r, t, n)
+
            }, {
+
                constant: t.constant && n.constant,
+
                inputs: !r && [t, n]
+
            })
+
        },
+
        identifier: function() {
+
            for (var t = this.consume().text; this.peek(".") && this.peekAhead(1).identifier && !this.peekAhead(2, "(");) t += this.consume().text + this.consume().text;
+
            return Ln(t, this.options, this.text)
+
        },
+
        constant: function() {
+
            var t = this.consume().value;
+
            return f(function() {
+
                return t
+
            }, {
+
                constant: !0,
+
                literal: !0
+
            })
+
        },
+
        statements: function() {
+
            for (var t = [];;)
+
                if (this.tokens.length > 0 && !this.peek("}", ")", ";", "]") && t.push(this.filterChain()), !this.expect(";")) return 1 === t.length ? t[0] : function(e, n) {
+
                    for (var r, i = 0, a = t.length; a > i; i++) r = t[i](e, n);
+
                    return r
+
                }
+
        },
+
        filterChain: function() {
+
            for (var t, e = this.expression(); t = this.expect("|");) e = this.filter(e);
+
            return e
+
        },
+
        filter: function(t) {
+
            var e, r, i = this.$filter(this.consume().text);
+
            if (this.peek(":"))
+
                for (e = [], r = []; this.expect(":");) e.push(this.expression());
+
            var a = [t].concat(e || []);
+
            return f(function(a, o) {
+
                var s = t(a, o);
+
                if (r) {
+
                    r[0] = s;
+
                    for (var u = e.length; u--;) r[u + 1] = e[u](a, o);
+
                    return i.apply(n, r)
+
                }
+
                return i(s)
+
            }, {
+
                constant: !i.$stateful && a.every(Dn),
+
                inputs: !i.$stateful && a
+
            })
+
        },
+
        expression: function() {
+
            return this.assignment()
+
        },
+
        assignment: function() {
+
            var t, e, n = this.ternary();
+
            return (e = this.expect("=")) ? (n.assign || this.throwError("implies assignment but [" + this.text.substring(0, e.index) + "] can not be assigned to", e), t = this.ternary(), f(function(e, r) {
+
                return n.assign(e, t(e, r), r)
+
            }, {
+
                inputs: [n, t]
+
            })) : n
+
        },
+
        ternary: function() {
+
            var t, e, n = this.logicalOR();
+
            if ((e = this.expect("?")) && (t = this.assignment(), this.consume(":"))) {
+
                var r = this.assignment();
+
                return f(function(e, i) {
+
                    return n(e, i) ? t(e, i) : r(e, i)
+
                }, {
+
                    constant: n.constant && t.constant && r.constant
+
                })
+
            }
+
            return n
+
        },
+
        logicalOR: function() {
+
            for (var t, e = this.logicalAND(); t = this.expect("||");) e = this.binaryFn(e, t.text, this.logicalAND(), !0);
+
            return e
+
        },
+
        logicalAND: function() {
+
            for (var t, e = this.equality(); t = this.expect("&&");) e = this.binaryFn(e, t.text, this.equality(), !0);
+
            return e
+
        },
+
        equality: function() {
+
            for (var t, e = this.relational(); t = this.expect("==", "!=", "===", "!==");) e = this.binaryFn(e, t.text, this.relational());
+
            return e
+
        },
+
        relational: function() {
+
            for (var t, e = this.additive(); t = this.expect("<", ">", "<=", ">=");) e = this.binaryFn(e, t.text, this.additive());
+
            return e
+
        },
+
        additive: function() {
+
            for (var t, e = this.multiplicative(); t = this.expect("+", "-");) e = this.binaryFn(e, t.text, this.multiplicative());
+
            return e
+
        },
+
        multiplicative: function() {
+
            for (var t, e = this.unary(); t = this.expect("*", "/", "%");) e = this.binaryFn(e, t.text, this.unary());
+
            return e
+
        },
+
        unary: function() {
+
            var t;
+
            return this.expect("+") ? this.primary() : (t = this.expect("-")) ? this.binaryFn(pa.ZERO, t.text, this.unary()) : (t = this.expect("!")) ? this.unaryFn(t.text, this.unary()) : this.primary()
+
        },
+
        fieldAccess: function(t) {
+
            var e = this.identifier();
+
            return f(function(r, i, a) {
+
                var o = a || t(r, i);
+
                return null == o ? n : e(o)
+
            }, {
+
                assign: function(n, r, i) {
+
                    var a = t(n, i);
+
                    return a || t.assign(n, a = {}, i), e.assign(a, r)
+
                }
+
            })
+
        },
+
        objectIndex: function(t) {
+
            var e = this.text,
+
                r = this.expression();
+
            return this.consume("]"), f(function(i, a) {
+
                var o, s = t(i, a),
+
                    u = r(i, a);
+
                return Pn(u, e), s ? o = Vn(s[u], e) : n
+
            }, {
+
                assign: function(n, i, a) {
+
                    var o = Pn(r(n, a), e),
+
                        s = Vn(t(n, a), e);
+
                    return s || t.assign(n, s = {}, a), s[o] = i
+
                }
+
            })
+
        },
+
        functionCall: function(t, e) {
+
            var r = [];
+
            if (")" !== this.peekToken().text)
+
                do r.push(this.expression()); while (this.expect(","));
+
            this.consume(")");
+
            var i = this.text,
+
                a = r.length ? [] : null;
+
            return function(o, s) {
+
                var u = e ? e(o, s) : v(e) ? n : o,
+
                    l = t(o, s, u) || p;
+
                if (a)
+
                    for (var c = r.length; c--;) a[c] = Vn(r[c](o, s), i);
+
                Vn(u, i), qn(l, i);
+
                var f = l.apply ? l.apply(u, a) : l(a[0], a[1], a[2], a[3], a[4]);
+
                return a && (a.length = 0), Vn(f, i)
+
            }
+
        },
+
        arrayDeclaration: function() {
+
            var t = [];
+
            if ("]" !== this.peekToken().text)
+
                do {
+
                    if (this.peek("]")) break;
+
                    t.push(this.expression())
+
                } while (this.expect(","));
+
            return this.consume("]"), f(function(e, n) {
+
                for (var r = [], i = 0, a = t.length; a > i; i++) r.push(t[i](e, n));
+
                return r
+
            }, {
+
                literal: !0,
+
                constant: t.every(Dn),
+
                inputs: t
+
            })
+
        },
+
        object: function() {
+
            var t = [],
+
                e = [];
+
            if ("}" !== this.peekToken().text)
+
                do {
+
                    if (this.peek("}")) break;
+
                    var n = this.consume();
+
                    n.constant ? t.push(n.value) : n.identifier ? t.push(n.text) : this.throwError("invalid key", n), this.consume(":"), e.push(this.expression())
+
                } while (this.expect(","));
+
            return this.consume("}"), f(function(n, r) {
+
                for (var i = {}, a = 0, o = e.length; o > a; a++) i[t[a]] = e[a](n, r);
+
                return i
+
            }, {
+
                literal: !0,
+
                constant: e.every(Dn),
+
                inputs: e
+
            })
+
        }
+
    };
+
    var $a = le(),
+
        ma = le(),
+
        ga = Object.prototype.valueOf,
+
        va = r("$sce"),
+
        ya = {
+
            HTML: "html",
+
            CSS: "css",
+
            URL: "url",
+
            RESOURCE_URL: "resourceUrl",
+
            JS: "js"
+
        },
+
        Wi = r("$compile"),
+
        ba = e.createElement("a"),
+
        wa = ir(t.location.href);
+
    sr.$inject = ["$provide"], fr.$inject = ["$locale"], dr.$inject = ["$locale"];
+
    var xa = ".",
+
        ka = {
+
            yyyy: $r("FullYear", 4),
+
            yy: $r("FullYear", 2, 0, !0),
+
            y: $r("FullYear", 1),
+
            MMMM: mr("Month"),
+
            MMM: mr("Month", !0),
+
            MM: $r("Month", 2, 1),
+
            M: $r("Month", 1, 1),
+
            dd: $r("Date", 2),
+
            d: $r("Date", 1),
+
            HH: $r("Hours", 2),
+
            H: $r("Hours", 1),
+
            hh: $r("Hours", 2, -12),
+
            h: $r("Hours", 1, -12),
+
            mm: $r("Minutes", 2),
+
            m: $r("Minutes", 1),
+
            ss: $r("Seconds", 2),
+
            s: $r("Seconds", 1),
+
            sss: $r("Milliseconds", 3),
+
            EEEE: mr("Day"),
+
            EEE: mr("Day", !0),
+
            a: wr,
+
            Z: gr,
+
            ww: br(2),
+
            w: br(1)
+
        },
+
        Sa = /((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/,
+
        Ca = /^\-?\d+$/;
+
    xr.$inject = ["$locale"];
+
    var Aa = m(Wr),
+
        Oa = m(Yr);
+
    Cr.$inject = ["$parse"];
+
    var Ea = m({
+
            restrict: "E",
+
            compile: function(t, e) {
+
                return e.href || e.xlinkHref || e.name ? void 0 : function(t, e) {
+
                    if ("a" === e[0].nodeName.toLowerCase()) {
+
                        var n = "[object SVGAnimatedString]" === ai.call(e.prop("href")) ? "xlink:href" : "href";
+
                        e.on("click", function(t) {
+
                            e.attr(n) || t.preventDefault()
+
                        })
+
                    }
+
                }
+
            }
+
        }),
+
        ja = {};
+
    a(Ri, function(t, e) {
+
        if ("multiple" != t) {
+
            var n = Xe("ng-" + e);
+
            ja[n] = function() {
+
                return {
+
                    restrict: "A",
+
                    priority: 100,
+
                    link: function(t, r, i) {
+
                        t.$watch(i[n], function(t) {
+
                            i.$set(e, !!t)
+
                        })
+
                    }
+
                }
+
            }
+
        }
+
    }), a(_i, function(t, e) {
+
        ja[e] = function() {
+
            return {
+
                priority: 100,
+
                link: function(t, n, r) {
+
                    if ("ngPattern" === e && "/" == r.ngPattern.charAt(0)) {
+
                        var i = r.ngPattern.match(zr);
+
                        if (i) return r.$set("ngPattern", new RegExp(i[1], i[2])), void 0
+
                    }
+
                    t.$watch(r[e], function(t) {
+
                        r.$set(e, t)
+
                    })
+
                }
+
            }
+
        }
+
    }), a(["src", "srcset", "href"], function(t) {
+
        var e = Xe("ng-" + t);
+
        ja[e] = function() {
+
            return {
+
                priority: 99,
+
                link: function(n, r, i) {
+
                    var a = t,
+
                        o = t;
+
                    "href" === t && "[object SVGAnimatedString]" === ai.call(r.prop("href")) && (o = "xlinkHref", i.$attr[o] = "xlink:href", a = null), i.$observe(e, function(e) {
+
                        return e ? (i.$set(o, e), Xr && a && r.prop(a, i[o]), void 0) : ("href" === t && i.$set(o, null), void 0)
+
                    })
+
                }
+
            }
+
        }
+
    });
+
    var Na = {
+
            $addControl: p,
+
            $$renameControl: Or,
+
            $removeControl: p,
+
            $setValidity: p,
+
            $setDirty: p,
+
            $setPristine: p,
+
            $setSubmitted: p
+
        },
+
        Ta = "ng-submitted";
+
    Er.$inject = ["$element", "$attrs", "$scope", "$animate", "$interpolate"];
+
    var Ma = function(t) {
+
            return ["$timeout", function(e) {
+
                var r = {
+
                    name: "form",
+
                    restrict: t ? "EAC" : "E",
+
                    controller: Er,
+
                    compile: function(t) {
+
                        return t.addClass(ho).addClass(co), {
+
                            pre: function(t, r, i, a) {
+
                                if (!("action" in i)) {
+
                                    var o = function(e) {
+
                                        t.$apply(function() {
+
                                            a.$commitViewValue(), a.$setSubmitted()
+
                                        }), e.preventDefault()
+
                                    };
+
                                    Ci(r[0], "submit", o), r.on("$destroy", function() {
+
                                        e(function() {
+
                                            Ai(r[0], "submit", o)
+
                                        }, 0, !1)
+
                                    })
+
                                }
+
                                var s = a.$$parentForm,
+
                                    u = a.$name;
+
                                u && (Rn(t, null, u, a, u), i.$observe(i.name ? "name" : "ngForm", function(e) {
+
                                    u !== e && (Rn(t, null, u, n, u), u = e, Rn(t, null, u, a, u), s.$$renameControl(a, u))
+
                                })), r.on("$destroy", function() {
+
                                    s.$removeControl(a), u && Rn(t, null, u, n, u), f(a, Na)
+
                                })
+
                            }
+
                        }
+
                    }
+
                };
+
                return r
+
            }]
+
        },
+
        Pa = Ma(),
+
        Va = Ma(!0),
+
        qa = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,
+
        Da = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,
+
        Ra = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,
+
        Ia = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,
+
        _a = /^(\d{4})-(\d{2})-(\d{2})$/,
+
        Ua = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,
+
        La = /^(\d{4})-W(\d\d)$/,
+
        Fa = /^(\d{4})-(\d\d)$/,
+
        Ha = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,
+
        Ba = {
+
            text: Nr,
+
            date: Vr("date", _a, Pr(_a, ["yyyy", "MM", "dd"]), "yyyy-MM-dd"),
+
            "datetime-local": Vr("datetimelocal", Ua, Pr(Ua, ["yyyy", "MM", "dd", "HH", "mm", "ss", "sss"]), "yyyy-MM-ddTHH:mm:ss.sss"),
+
            time: Vr("time", Ha, Pr(Ha, ["HH", "mm", "ss", "sss"]), "HH:mm:ss.sss"),
+
            week: Vr("week", La, Mr, "yyyy-Www"),
+
            month: Vr("month", Fa, Pr(Fa, ["yyyy", "MM"]), "yyyy-MM"),
+
            number: Dr,
+
            url: Rr,
+
            email: Ir,
+
            radio: _r,
+
            checkbox: Lr,
+
            hidden: p,
+
            button: p,
+
            submit: p,
+
            reset: p,
+
            file: p
+
        },
+
        za = ["$browser", "$sniffer", "$filter", "$parse", function(t, e, n, r) {
+
            return {
+
                restrict: "E",
+
                require: ["?ngModel"],
+
                link: {
+
                    pre: function(i, a, o, s) {
+
                        s[0] && (Ba[Wr(o.type)] || Ba.text)(i, a, o, s[0], e, t, n, r)
+
                    }
+
                }
+
            }
+
        }],
+
        Ga = /^(true|false|\d+)$/,
+
        Wa = function() {
+
            return {
+
                restrict: "A",
+
                priority: 100,
+
                compile: function(t, e) {
+
                    return Ga.test(e.ngValue) ? function(t, e, n) {
+
                        n.$set("value", t.$eval(n.ngValue))
+
                    } : function(t, e, n) {
+
                        t.$watch(n.ngValue, function(t) {
+
                            n.$set("value", t)
+
                        })
+
                    }
+
                }
+
            }
+
        },
+
        Ja = ["$compile", function(t) {
+
            return {
+
                restrict: "AC",
+
                compile: function(e) {
+
                    return t.$$addBindingClass(e),
+
                        function(e, r, i) {
+
                            t.$$addBindingInfo(r, i.ngBind), r = r[0], e.$watch(i.ngBind, function(t) {
+
                                r.textContent = t === n ? "" : t
+
                            })
+
                        }
+
                }
+
            }
+
        }],
+
        Ya = ["$interpolate", "$compile", function(t, e) {
+
            return {
+
                compile: function(r) {
+
                    return e.$$addBindingClass(r),
+
                        function(r, i, a) {
+
                            var o = t(i.attr(a.$attr.ngBindTemplate));
+
                            e.$$addBindingInfo(i, o.expressions), i = i[0], a.$observe("ngBindTemplate", function(t) {
+
                                i.textContent = t === n ? "" : t
+
                            })
+
                        }
+
                }
+
            }
+
        }],
+
        Za = ["$sce", "$parse", "$compile", function(t, e, n) {
+
            return {
+
                restrict: "A",
+
                compile: function(r, i) {
+
                    var a = e(i.ngBindHtml),
+
                        o = e(i.ngBindHtml, function(t) {
+
                            return (t || "").toString()
+
                        });
+
                    return n.$$addBindingClass(r),
+
                        function(e, r, i) {
+
                            n.$$addBindingInfo(r, i.ngBindHtml), e.$watch(o, function() {
+
                                r.html(t.getTrustedHtml(a(e)) || "")
+
                            })
+
                        }
+
                }
+
            }
+
        }],
+
        Ka = m({
+
            restrict: "A",
+
            require: "ngModel",
+
            link: function(t, e, n, r) {
+
                r.$viewChangeListeners.push(function() {
+
                    t.$eval(n.ngChange)
+
                })
+
            }
+
        }),
+
        Xa = Fr("", !0),
+
        Qa = Fr("Odd", 0),
+
        to = Fr("Even", 1),
+
        eo = Ar({
+
            compile: function(t, e) {
+
                e.$set("ngCloak", n), t.removeClass("ng-cloak")
+
            }
+
        }),
+
        no = [function() {
+
            return {
+
                restrict: "A",
+
                scope: !0,
+
                controller: "@",
+
                priority: 500
+
            }
+
        }],
+
        ro = {},
+
        io = {
+
            blur: !0,
+
            focus: !0
+
        };
+
    a("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "), function(t) {
+
        var e = Xe("ng-" + t);
+
        ro[e] = ["$parse", "$rootScope", function(n, r) {
+
            return {
+
                restrict: "A",
+
                compile: function(i, a) {
+
                    var o = n(a[e], null, !0);
+
                    return function(e, n) {
+
                        n.on(t, function(n) {
+
                            var i = function() {
+
                                o(e, {
+
                                    $event: n
+
                                })
+
                            };
+
                            io[t] && r.$$phase ? e.$evalAsync(i) : e.$apply(i)
+
                        })
+
                    }
+
                }
+
            }
+
        }]
+
    });
+
    var ao = ["$animate", function(t) {
+
            return {
+
                multiElement: !0,
+
                transclude: "element",
+
                priority: 600,
+
                terminal: !0,
+
                restrict: "A",
+
                $$tlb: !0,
+
                link: function(n, r, i, a, o) {
+
                    var s, u, l;
+
                    n.$watch(i.ngIf, function(n) {
+
                        n ? u || o(function(n, a) {
+
                            u = a, n[n.length++] = e.createComment(" end ngIf: " + i.ngIf + " "), s = {
+
                                clone: n
+
                            }, t.enter(n, r.parent(), r)
+
                        }) : (l && (l.remove(), l = null), u && (u.$destroy(), u = null), s && (l = ue(s.clone), t.leave(l).then(function() {
+
                            l = null
+
                        }), s = null))
+
                    })
+
                }
+
            }
+
        }],
+
        oo = ["$templateRequest", "$anchorScroll", "$animate", "$sce", function(t, e, n, r) {
+
            return {
+
                restrict: "ECA",
+
                priority: 400,
+
                terminal: !0,
+
                transclude: "element",
+
                controller: si.noop,
+
                compile: function(i, a) {
+
                    var o = a.ngInclude || a.src,
+
                        s = a.onload || "",
+
                        u = a.autoscroll;
+
                    return function(i, a, l, c, f) {
+
                        var d, h, p, $ = 0,
+
                            m = function() {
+
                                h && (h.remove(), h = null), d && (d.$destroy(), d = null), p && (n.leave(p).then(function() {
+
                                    h = null
+
                                }), h = p, p = null)
+
                            };
+
                        i.$watch(r.parseAsResourceUrl(o), function(r) {
+
                            var o = function() {
+
                                    !v(u) || u && !i.$eval(u) || e()
+
                                },
+
                                l = ++$;
+
                            r ? (t(r, !0).then(function(t) {
+
                                if (l === $) {
+
                                    var e = i.$new();
+
                                    c.template = t;
+
                                    var u = f(e, function(t) {
+
                                        m(), n.enter(t, null, a).then(o)
+
                                    });
+
                                    d = e, p = u, d.$emit("$includeContentLoaded", r), i.$eval(s)
+
                                }
+
                            }, function() {
+
                                l === $ && (m(), i.$emit("$includeContentError", r))
+
                            }), i.$emit("$includeContentRequested", r)) : (m(), c.template = null)
+
                        })
+
                    }
+
                }
+
            }
+
        }],
+
        so = ["$compile", function(t) {
+
            return {
+
                restrict: "ECA",
+
                priority: -400,
+
                require: "ngInclude",
+
                link: function(n, r, i, a) {
+
                    return /SVG/.test(r[0].toString()) ? (r.empty(), t(ve(a.template, e).childNodes)(n, function(t) {
+
                        r.append(t)
+
                    }, {
+
                        futureParentElement: r
+
                    }), void 0) : (r.html(a.template), t(r.contents())(n), void 0)
+
                }
+
            }
+
        }],
+
        uo = Ar({
+
            priority: 450,
+
            compile: function() {
+
                return {
+
                    pre: function(t, e, n) {
+
                        t.$eval(n.ngInit)
+
                    }
+
                }
+
            }
+
        }),
+
        lo = function() {
+
            return {
+
                restrict: "A",
+
                priority: 100,
+
                require: "ngModel",
+
                link: function(t, e, r, i) {
+
                    var o = e.attr(r.$attr.ngList) || ", ",
+
                        s = "false" !== r.ngTrim,
+
                        u = s ? fi(o) : o,
+
                        l = function(t) {
+
                            if (!g(t)) {
+
                                var e = [];
+
                                return t && a(t.split(u), function(t) {
+
                                    t && e.push(s ? fi(t) : t)
+
                                }), e
+
                            }
+
                        };
+
                    i.$parsers.push(l), i.$formatters.push(function(t) {
+
                        return ci(t) ? t.join(o) : n
+
                    }), i.$isEmpty = function(t) {
+
                        return !t || !t.length
+
                    }
+
                }
+
            }
+
        },
+
        co = "ng-valid",
+
        fo = "ng-invalid",
+
        ho = "ng-pristine",
+
        po = "ng-dirty",
+
        $o = "ng-untouched",
+
        mo = "ng-touched",
+
        go = "ng-pending",
+
        vo = new r("ngModel"),
+
        yo = ["$scope", "$exceptionHandler", "$attrs", "$element", "$parse", "$animate", "$timeout", "$rootScope", "$q", "$interpolate", function(t, e, r, i, o, s, u, l, c, f) {
+
            this.$viewValue = Number.NaN, this.$modelValue = Number.NaN, this.$$rawModelValue = n, this.$validators = {}, this.$asyncValidators = {}, this.$parsers = [], this.$formatters = [], this.$viewChangeListeners = [], this.$untouched = !0, this.$touched = !1, this.$pristine = !0, this.$dirty = !1, this.$valid = !0, this.$invalid = !1, this.$error = {}, this.$$success = {}, this.$pending = n, this.$name = f(r.name || "", !1)(t);
+
            var d = o(r.ngModel),
+
                h = d.assign,
+
                $ = d,
+
                m = h,
+
                y = null,
+
                b = this;
+
            this.$$setOptions = function(t) {
+
                if (b.$options = t, t && t.getterSetter) {
+
                    var e = o(r.ngModel + "()"),
+
                        n = o(r.ngModel + "($$$p)");
+
                    $ = function(t) {
+
                        var n = d(t);
+
                        return k(n) && (n = e(t)), n
+
                    }, m = function(t) {
+
                        k(d(t)) ? n(t, {
+
                            $$$p: b.$modelValue
+
                        }) : h(t, b.$modelValue)
+
                    }
+
                } else if (!d.assign) throw vo("nonassign", "Expression '{0}' is non-assignable. Element: {1}", r.ngModel, z(i))
+
            }, this.$render = p, this.$isEmpty = function(t) {
+
                return g(t) || "" === t || null === t || t !== t
+
            };
+
            var x = i.inheritedData("$formController") || Na,
+
                S = 0;
+
            Hr({
+
                ctrl: this,
+
                $element: i,
+
                set: function(t, e) {
+
                    t[e] = !0
+
                },
+
                unset: function(t, e) {
+
                    delete t[e]
+
                },
+
                parentForm: x,
+
                $animate: s
+
            }), this.$setPristine = function() {
+
                b.$dirty = !1, b.$pristine = !0, s.removeClass(i, po), s.addClass(i, ho)
+
            }, this.$setDirty = function() {
+
                b.$dirty = !0, b.$pristine = !1, s.removeClass(i, ho), s.addClass(i, po), x.$setDirty()
+
            }, this.$setUntouched = function() {
+
                b.$touched = !1, b.$untouched = !0, s.setClass(i, $o, mo)
+
            }, this.$setTouched = function() {
+
                b.$touched = !0, b.$untouched = !1, s.setClass(i, mo, $o)
+
            }, this.$rollbackViewValue = function() {
+
                u.cancel(y), b.$viewValue = b.$$lastCommittedViewValue, b.$render()
+
            }, this.$validate = function() {
+
                if (!w(b.$modelValue) || !isNaN(b.$modelValue)) {
+
                    var t = b.$$lastCommittedViewValue,
+
                        e = b.$$rawModelValue,
+
                        r = b.$$parserName || "parse",
+
                        i = b.$error[r] ? !1 : n,
+
                        a = b.$valid,
+
                        o = b.$modelValue,
+
                        s = b.$options && b.$options.allowInvalid;
+
                    b.$$runValidators(i, e, t, function(t) {
+
                        s || a === t || (b.$modelValue = t ? e : n, b.$modelValue !== o && b.$$writeModelToScope())
+
                    })
+
                }
+
            }, this.$$runValidators = function(t, e, r, i) {
+
                function o(t) {
+
                    var e = b.$$parserName || "parse";
+
                    if (t === n) l(e, null);
+
                    else if (l(e, t), !t) return a(b.$validators, function(t, e) {
+
                        l(e, null)
+
                    }), a(b.$asyncValidators, function(t, e) {
+
                        l(e, null)
+
                    }), !1;
+
                    return !0
+
                }
+
 
+
                function s() {
+
                    var t = !0;
+
                    return a(b.$validators, function(n, i) {
+
                        var a = n(e, r);
+
                        t = t && a, l(i, a)
+
                    }), t ? !0 : (a(b.$asyncValidators, function(t, e) {
+
                        l(e, null)
+
                    }), !1)
+
                }
+
 
+
                function u() {
+
                    var t = [],
+
                        i = !0;
+
                    a(b.$asyncValidators, function(a, o) {
+
                        var s = a(e, r);
+
                        if (!T(s)) throw vo("$asyncValidators", "Expected asynchronous validator to return a promise but got '{0}' instead.", s);
+
                        l(o, n), t.push(s.then(function() {
+
                            l(o, !0)
+
                        }, function() {
+
                            i = !1, l(o, !1)
+
                        }))
+
                    }), t.length ? c.all(t).then(function() {
+
                        f(i)
+
                    }, p) : f(!0)
+
                }
+
 
+
                function l(t, e) {
+
                    d === S && b.$setValidity(t, e)
+
                }
+
 
+
                function f(t) {
+
                    d === S && i(t)
+
                }
+
                S++;
+
                var d = S;
+
                return o(t) ? s() ? (u(), void 0) : (f(!1), void 0) : (f(!1), void 0)
+
            }, this.$commitViewValue = function() {
+
                var t = b.$viewValue;
+
                u.cancel(y), (b.$$lastCommittedViewValue !== t || "" === t && b.$$hasNativeValidators) && (b.$$lastCommittedViewValue = t, b.$pristine && this.$setDirty(), this.$$parseAndValidate())
+
            }, this.$$parseAndValidate = function() {
+
                function e() {
+
                    b.$modelValue !== s && b.$$writeModelToScope()
+
                }
+
                var r = b.$$lastCommittedViewValue,
+
                    i = r,
+
                    a = g(i) ? n : !0;
+
                if (a)
+
                    for (var o = 0; o < b.$parsers.length; o++)
+
                        if (i = b.$parsers[o](i), g(i)) {
+
                            a = !1;
+
                            break
+
                        }
+
                w(b.$modelValue) && isNaN(b.$modelValue) && (b.$modelValue = $(t));
+
                var s = b.$modelValue,
+
                    u = b.$options && b.$options.allowInvalid;
+
                b.$$rawModelValue = i, u && (b.$modelValue = i, e()), b.$$runValidators(a, i, b.$$lastCommittedViewValue, function(t) {
+
                    u || (b.$modelValue = t ? i : n, e())
+
                })
+
            }, this.$$writeModelToScope = function() {
+
                m(t, b.$modelValue), a(b.$viewChangeListeners, function(t) {
+
                    try {
+
                        t()
+
                    } catch (n) {
+
                        e(n)
+
                    }
+
                })
+
            }, this.$setViewValue = function(t, e) {
+
                b.$viewValue = t, (!b.$options || b.$options.updateOnDefault) && b.$$debounceViewValueCommit(e)
+
            }, this.$$debounceViewValueCommit = function(e) {
+
                var n, r = 0,
+
                    i = b.$options;
+
                i && v(i.debounce) && (n = i.debounce, w(n) ? r = n : w(n[e]) ? r = n[e] : w(n["default"]) && (r = n["default"])), u.cancel(y), r ? y = u(function() {
+
                    b.$commitViewValue()
+
                }, r) : l.$$phase ? b.$commitViewValue() : t.$apply(function() {
+
                    b.$commitViewValue()
+
                })
+
            }, t.$watch(function() {
+
                var e = $(t);
+
                if (e !== b.$modelValue) {
+
                    b.$modelValue = b.$$rawModelValue = e;
+
                    for (var r = b.$formatters, i = r.length, a = e; i--;) a = r[i](a);
+
                    b.$viewValue !== a && (b.$viewValue = b.$$lastCommittedViewValue = a, b.$render(), b.$$runValidators(n, e, a, p))
+
                }
+
                return e
+
            })
+
        }],
+
        bo = ["$rootScope", function(t) {
+
            return {
+
                restrict: "A",
+
                require: ["ngModel", "^?form", "^?ngModelOptions"],
+
                controller: yo,
+
                priority: 1,
+
                compile: function(e) {
+
                    return e.addClass(ho).addClass($o).addClass(co), {
+
                        pre: function(t, e, n, r) {
+
                            var i = r[0],
+
                                a = r[1] || Na;
+
                            i.$$setOptions(r[2] && r[2].$options), a.$addControl(i), n.$observe("name", function(t) {
+
                                i.$name !== t && a.$$renameControl(i, t)
+
                            }), t.$on("$destroy", function() {
+
                                a.$removeControl(i)
+
                            })
+
                        },
+
                        post: function(e, n, r, i) {
+
                            var a = i[0];
+
                            a.$options && a.$options.updateOn && n.on(a.$options.updateOn, function(t) {
+
                                a.$$debounceViewValueCommit(t && t.type)
+
                            }), n.on("blur", function() {
+
                                a.$touched || (t.$$phase ? e.$evalAsync(a.$setTouched) : e.$apply(a.$setTouched))
+
                            })
+
                        }
+
                    }
+
                }
+
            }
+
        }],
+
        wo = /(\s+|^)default(\s+|$)/,
+
        xo = function() {
+
            return {
+
                restrict: "A",
+
                controller: ["$scope", "$attrs", function(t, e) {
+
                    var r = this;
+
                    this.$options = t.$eval(e.ngModelOptions), this.$options.updateOn !== n ? (this.$options.updateOnDefault = !1, this.$options.updateOn = fi(this.$options.updateOn.replace(wo, function() {
+
                        return r.$options.updateOnDefault = !0, " "
+
                    }))) : this.$options.updateOnDefault = !0
+
                }]
+
            }
+
        },
+
        ko = Ar({
+
            terminal: !0,
+
            priority: 1e3
+
        }),
+
        So = ["$locale", "$interpolate", function(t, e) {
+
            var n = /{}/g,
+
                r = /^when(Minus)?(.+)$/;
+
            return {
+
                restrict: "EA",
+
                link: function(i, o, s) {
+
                    function u(t) {
+
                        o.text(t || "")
+
                    }
+
                    var l, c = s.count,
+
                        f = s.$attr.when && o.attr(s.$attr.when),
+
                        d = s.offset || 0,
+
                        h = i.$eval(f) || {},
+
                        p = {},
+
                        $ = e.startSymbol(),
+
                        m = e.endSymbol(),
+
                        g = $ + c + "-" + d + m,
+
                        v = si.noop;
+
                    a(s, function(t, e) {
+
                        var n = r.exec(e);
+
                        if (n) {
+
                            var i = (n[1] ? "-" : "") + Wr(n[2]);
+
                            h[i] = o.attr(s.$attr[e])
+
                        }
+
                    }), a(h, function(t, r) {
+
                        p[r] = e(t.replace(n, g))
+
                    }), i.$watch(c, function(e) {
+
                        var n = parseFloat(e),
+
                            r = isNaN(n);
+
                        r || n in h || (n = t.pluralCat(n - d)), n === l || r && isNaN(l) || (v(), v = i.$watch(p[n], u), l = n)
+
                    })
+
                }
+
            }
+
        }],
+
        Co = ["$parse", "$animate", function(t, o) {
+
            var s = "$$NG_REMOVED",
+
                u = r("ngRepeat"),
+
                l = function(t, e, n, r, i, a, o) {
+
                    t[n] = r, i && (t[i] = a), t.$index = e, t.$first = 0 === e, t.$last = e === o - 1, t.$middle = !(t.$first || t.$last), t.$odd = !(t.$even = 0 === (1 & e))
+
                },
+
                c = function(t) {
+
                    return t.clone[0]
+
                },
+
                f = function(t) {
+
                    return t.clone[t.clone.length - 1]
+
                };
+
            return {
+
                restrict: "A",
+
                multiElement: !0,
+
                transclude: "element",
+
                priority: 1e3,
+
                terminal: !0,
+
                $$tlb: !0,
+
                compile: function(r, d) {
+
                    var h = d.ngRepeat,
+
                        p = e.createComment(" end ngRepeat: " + h + " "),
+
                        $ = h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);
+
                    if (!$) throw u("iexp", "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.", h);
+
                    var m = $[1],
+
                        g = $[2],
+
                        v = $[3],
+
                        y = $[4];
+
                    if ($ = m.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/), !$) throw u("iidexp", "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.", m);
+
                    var b = $[3] || $[1],
+
                        w = $[2];
+
                    if (v && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(v) || /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(v))) throw u("badident", "alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.", v);
+
                    var x, k, S, C, A = {
+
                        $id: Ue
+
                    };
+
                    return y ? x = t(y) : (S = function(t, e) {
+
                            return Ue(e)
+
                        }, C = function(t) {
+
                            return t
+
                        }),
+
                        function(t, e, r, d, $) {
+
                            x && (k = function(e, n, r) {
+
                                return w && (A[w] = e), A[b] = n, A.$index = r, x(t, A)
+
                            });
+
                            var m = le();
+
                            t.$watchCollection(g, function(r) {
+
                                var d, g, y, x, A, O, E, j, N, T, M, P, V = e[0],
+
                                    q = le();
+
                                if (v && (t[v] = r), i(r)) N = r, j = k || S;
+
                                else {
+
                                    j = k || C, N = [];
+
                                    for (var D in r) r.hasOwnProperty(D) && "$" != D.charAt(0) && N.push(D);
+
                                    N.sort()
+
                                }
+
                                for (x = N.length, M = new Array(x), d = 0; x > d; d++)
+
                                    if (A = r === N ? d : N[d], O = r[A], E = j(A, O, d), m[E]) T = m[E], delete m[E], q[E] = T, M[d] = T;
+
                                    else {
+
                                        if (q[E]) throw a(M, function(t) {
+
                                            t && t.scope && (m[t.id] = t)
+
                                        }), u("dupes", "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}", h, E, O);
+
                                        M[d] = {
+
                                            id: E,
+
                                            scope: n,
+
                                            clone: n
+
                                        }, q[E] = !0
+
                                    }
+
                                for (var R in m) {
+
                                    if (T = m[R], P = ue(T.clone), o.leave(P), P[0].parentNode)
+
                                        for (d = 0, g = P.length; g > d; d++) P[d][s] = !0;
+
                                    T.scope.$destroy()
+
                                }
+
                                for (d = 0; x > d; d++)
+
                                    if (A = r === N ? d : N[d], O = r[A], T = M[d], T.scope) {
+
                                        y = V;
+
                                        do y = y.nextSibling; while (y && y[s]);
+
                                        c(T) != y && o.move(ue(T.clone), null, Qr(V)), V = f(T), l(T.scope, d, b, O, w, A, x)
+
                                    } else $(function(t, e) {
+
                                        T.scope = e;
+
                                        var n = p.cloneNode(!1);
+
                                        t[t.length++] = n, o.enter(t, null, Qr(V)), V = n, T.clone = t, q[T.id] = T, l(T.scope, d, b, O, w, A, x)
+
                                    });
+
                                m = q
+
                            })
+
                        }
+
                }
+
            }
+
        }],
+
        Ao = "ng-hide",
+
        Oo = "ng-hide-animate",
+
        Eo = ["$animate", function(t) {
+
            return {
+
                restrict: "A",
+
                multiElement: !0,
+
                link: function(e, n, r) {
+
                    e.$watch(r.ngShow, function(e) {
+
                        t[e ? "removeClass" : "addClass"](n, Ao, {
+
                            tempClasses: Oo
+
                        })
+
                    })
+
                }
+
            }
+
        }],
+
        jo = ["$animate", function(t) {
+
            return {
+
                restrict: "A",
+
                multiElement: !0,
+
                link: function(e, n, r) {
+
                    e.$watch(r.ngHide, function(e) {
+
                        t[e ? "addClass" : "removeClass"](n, Ao, {
+
                            tempClasses: Oo
+
                        })
+
                    })
+
                }
+
            }
+
        }],
+
        No = Ar(function(t, e, n) {
+
            t.$watchCollection(n.ngStyle, function(t, n) {
+
                n && t !== n && a(n, function(t, n) {
+
                    e.css(n, "")
+
                }), t && e.css(t)
+
            })
+
        }),
+
        To = ["$animate", function(t) {
+
            return {
+
                restrict: "EA",
+
                require: "ngSwitch",
+
                controller: ["$scope", function() {
+
                    this.cases = {}
+
                }],
+
                link: function(n, r, i, o) {
+
                    var s = i.ngSwitch || i.on,
+
                        u = [],
+
                        l = [],
+
                        c = [],
+
                        f = [],
+
                        d = function(t, e) {
+
                            return function() {
+
                                t.splice(e, 1)
+
                            }
+
                        };
+
                    n.$watch(s, function(n) {
+
                        var r, i;
+
                        for (r = 0, i = c.length; i > r; ++r) t.cancel(c[r]);
+
                        for (c.length = 0, r = 0, i = f.length; i > r; ++r) {
+
                            var s = ue(l[r].clone);
+
                            f[r].$destroy();
+
                            var h = c[r] = t.leave(s);
+
                            h.then(d(c, r))
+
                        }
+
                        l.length = 0, f.length = 0, (u = o.cases["!" + n] || o.cases["?"]) && a(u, function(n) {
+
                            n.transclude(function(r, i) {
+
                                f.push(i);
+
                                var a = n.element;
+
                                r[r.length++] = e.createComment(" end ngSwitchWhen: ");
+
                                var o = {
+
                                    clone: r
+
                                };
+
                                l.push(o), t.enter(r, a.parent(), a)
+
                            })
+
                        })
+
                    })
+
                }
+
            }
+
        }],
+
        Mo = Ar({
+
            transclude: "element",
+
            priority: 1200,
+
            require: "^ngSwitch",
+
            multiElement: !0,
+
            link: function(t, e, n, r, i) {
+
                r.cases["!" + n.ngSwitchWhen] = r.cases["!" + n.ngSwitchWhen] || [], r.cases["!" + n.ngSwitchWhen].push({
+
                    transclude: i,
+
                    element: e
+
                })
+
            }
+
        }),
+
        Po = Ar({
+
            transclude: "element",
+
            priority: 1200,
+
            require: "^ngSwitch",
+
            multiElement: !0,
+
            link: function(t, e, n, r, i) {
+
                r.cases["?"] = r.cases["?"] || [], r.cases["?"].push({
+
                    transclude: i,
+
                    element: e
+
                })
+
            }
+
        }),
+
        Vo = Ar({
+
            restrict: "EAC",
+
            link: function(t, e, n, i, a) {
+
                if (!a) throw r("ngTransclude")("orphan", "Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: {0}", z(e));
+
                a(function(t) {
+
                    e.empty(), e.append(t)
+
                })
+
            }
+
        }),
+
        qo = ["$templateCache", function(t) {
+
            return {
+
                restrict: "E",
+
                terminal: !0,
+
                compile: function(e, n) {
+
                    if ("text/ng-template" == n.type) {
+
                        var r = n.id,
+
                            i = e[0].text;
+
                        t.put(r, i)
+
                    }
+
                }
+
            }
+
        }],
+
        Do = r("ngOptions"),
+
        Ro = m({
+
            restrict: "A",
+
            terminal: !0
+
        }),
+
        Io = ["$compile", "$parse", function(t, r) {
+
            var i = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,
+
                s = {
+
                    $setViewValue: p
+
                };
+
            return {
+
                restrict: "E",
+
                require: ["select", "?ngModel"],
+
                controller: ["$element", "$scope", "$attrs", function(t, e, n) {
+
                    var r, i, a = this,
+
                        o = {},
+
                        u = s;
+
                    a.databound = n.ngModel, a.init = function(t, e, n) {
+
                        u = t, r = e, i = n
+
                    }, a.addOption = function(e, n) {
+
                        oe(e, '"option value"'), o[e] = !0, u.$viewValue == e && (t.val(e), i.parent() && i.remove()), n && n[0].hasAttribute("selected") && (n[0].selected = !0)
+
                    }, a.removeOption = function(t) {
+
                        this.hasOption(t) && (delete o[t], u.$viewValue === t && this.renderUnknownOption(t))
+
                    }, a.renderUnknownOption = function(e) {
+
                        var n = "? " + Ue(e) + " ?";
+
                        i.val(n), t.prepend(i), t.val(n), i.prop("selected", !0)
+
                    }, a.hasOption = function(t) {
+
                        return o.hasOwnProperty(t)
+
                    }, e.$on("$destroy", function() {
+
                        a.renderUnknownOption = p
+
                    })
+
                }],
+
                link: function(s, u, l, c) {
+
                    function f(t, e, n, r) {
+
                        n.$render = function() {
+
                            var t = n.$viewValue;
+
                            r.hasOption(t) ? (C.parent() && C.remove(), e.val(t), "" === t && p.prop("selected", !0)) : g(t) && p ? e.val("") : r.renderUnknownOption(t)
+
                        }, e.on("change", function() {
+
                            t.$apply(function() {
+
                                C.parent() && C.remove(), n.$setViewValue(e.val())
+
                            })
+
                        })
+
                    }
+
 
+
                    function d(t, e, n) {
+
                        var r;
+
                        n.$render = function() {
+
                            var t = new Le(n.$viewValue);
+
                            a(e.find("option"), function(e) {
+
                                e.selected = v(t.get(e.value))
+
                            })
+
                        }, t.$watch(function() {
+
                            I(r, n.$viewValue) || (r = R(n.$viewValue), n.$render())
+
                        }), e.on("change", function() {
+
                            t.$apply(function() {
+
                                var t = [];
+
                                a(e.find("option"), function(e) {
+
                                    e.selected && t.push(e.value)
+
                                }), n.$setViewValue(t)
+
                            })
+
                        })
+
                    }
+
 
+
                    function h(e, s, u) {
+
                        function l(t, n, r) {
+
                            return I[O] = r, N && (I[N] = n), t(e, I)
+
                        }
+
 
+
                        function c() {
+
                            e.$apply(function() {
+
                                var t, n = P(e) || [];
+
                                if (y) t = [], a(s.val(), function(e) {
+
                                    e = q ? D[e] : e, t.push(f(e, n[e]))
+
                                });
+
                                else {
+
                                    var r = q ? D[s.val()] : s.val();
+
                                    t = f(r, n[r])
+
                                }
+
                                u.$setViewValue(t), g()
+
                            })
+
                        }
+
 
+
                        function f(t, e) {
+
                            if ("?" === t) return n;
+
                            if ("" === t) return null;
+
                            var r = j ? j : M;
+
                            return l(r, t, e)
+
                        }
+
 
+
                        function d() {
+
                            var t, n = P(e);
+
                            if (n && ci(n)) {
+
                                t = new Array(n.length);
+
                                for (var r = 0, i = n.length; i > r; r++) t[r] = l(A, r, n[r]);
+
                                return t
+
                            }
+
                            if (n) {
+
                                t = {};
+
                                for (var a in n) n.hasOwnProperty(a) && (t[a] = l(A, a, n[a]))
+
                            }
+
                            return t
+
                        }
+
 
+
                        function h(t) {
+
                            var e;
+
                            if (y)
+
                                if (q && ci(t)) {
+
                                    e = new Le([]);
+
                                    for (var n = 0; n < t.length; n++) e.put(l(q, null, t[n]), !0)
+
                                } else e = new Le(t);
+
                            else q && (t = l(q, null, t));
+
                            return function(n, r) {
+
                                var i;
+
                                return i = q ? q : j ? j : M, y ? v(e.remove(l(i, n, r))) : t === l(i, n, r)
+
                            }
+
                        }
+
 
+
                        function p() {
+
                            x || (e.$$postDigest(g), x = !0)
+
                        }
+
 
+
                        function m(t, e, n) {
+
                            t[e] = t[e] || 0, t[e] += n ? 1 : -1
+
                        }
+
 
+
                        function g() {
+
                            x = !1;
+
                            var t, n, r, i, c, f, d, p, g, b, C, O, E, j, M, V, _, U = {
+
                                    "": []
+
                                },
+
                                L = [""],
+
                                F = u.$viewValue,
+
                                H = P(e) || [],
+
                                B = N ? o(H) : H,
+
                                z = {},
+
                                G = h(F),
+
                                W = !1;
+
                            for (D = {}, O = 0; b = B.length, b > O; O++) d = O, N && (d = B[O], "$" === d.charAt(0)) || (p = H[d], t = l(T, d, p) || "", (n = U[t]) || (n = U[t] = [], L.push(t)), E = G(d, p), W = W || E, V = l(A, d, p), V = v(V) ? V : "", _ = q ? q(e, I) : N ? B[O] : O, q && (D[_] = d), n.push({
+
                                id: _,
+
                                label: V,
+
                                selected: E
+
                            }));
+
                            for (y || (w || null === F ? U[""].unshift({
+
                                    id: "",
+
                                    label: "",
+
                                    selected: !W
+
                                }) : W || U[""].unshift({
+
                                    id: "?",
+
                                    label: "",
+
                                    selected: !0
+
                                })), C = 0, g = L.length; g > C; C++) {
+
                                for (t = L[C], n = U[t], R.length <= C ? (i = {
+
                                        element: S.clone().attr("label", t),
+
                                        label: n.label
+
                                    }, c = [i], R.push(c), s.append(i.element)) : (c = R[C], i = c[0], i.label != t && i.element.attr("label", i.label = t)), j = null, O = 0, b = n.length; b > O; O++) r = n[O], (f = c[O + 1]) ? (j = f.element, f.label !== r.label && (m(z, f.label, !1), m(z, r.label, !0), j.text(f.label = r.label), j.prop("label", f.label)), f.id !== r.id && j.val(f.id = r.id), j[0].selected !== r.selected && (j.prop("selected", f.selected = r.selected), Xr && j.prop("selected", f.selected))) : ("" === r.id && w ? M = w : (M = k.clone()).val(r.id).prop("selected", r.selected).attr("selected", r.selected).prop("label", r.label).text(r.label), c.push(f = {
+
                                    element: M,
+
                                    label: r.label,
+
                                    id: r.id,
+
                                    selected: r.selected
+
                                }), m(z, r.label, !0), j ? j.after(M) : i.element.append(M), j = M);
+
                                for (O++; c.length > O;) r = c.pop(), m(z, r.label, !1), r.element.remove()
+
                            }
+
                            for (; R.length > C;) {
+
                                for (n = R.pop(), O = 1; O < n.length; ++O) m(z, n[O].label, !1);
+
                                n[0].element.remove()
+
                            }
+
                            a(z, function(t, e) {
+
                                t > 0 ? $.addOption(e) : 0 > t && $.removeOption(e)
+
                            })
+
                        }
+
                        var C;
+
                        if (!(C = b.match(i))) throw Do("iexp", "Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}", b, z(s));
+
                        var A = r(C[2] || C[1]),
+
                            O = C[4] || C[6],
+
                            E = / as /.test(C[0]) && C[1],
+
                            j = E ? r(E) : null,
+
                            N = C[5],
+
                            T = r(C[3] || ""),
+
                            M = r(C[2] ? C[1] : O),
+
                            P = r(C[7]),
+
                            V = C[8],
+
                            q = V ? r(C[8]) : null,
+
                            D = {},
+
                            R = [
+
                                [{
+
                                    element: s,
+
                                    label: ""
+
                                }]
+
                            ],
+
                            I = {};
+
                        w && (t(w)(e), w.removeClass("ng-scope"), w.remove()), s.empty(), s.on("change", c), u.$render = g, e.$watchCollection(P, p), e.$watchCollection(d, p), y && e.$watchCollection(function() {
+
                            return u.$modelValue
+
                        }, p)
+
                    }
+
                    if (c[1]) {
+
                        for (var p, $ = c[0], m = c[1], y = l.multiple, b = l.ngOptions, w = !1, x = !1, k = Qr(e.createElement("option")), S = Qr(e.createElement("optgroup")), C = k.clone(), A = 0, O = u.children(), E = O.length; E > A; A++)
+
                            if ("" === O[A].value) {
+
                                p = w = O.eq(A);
+
                                break
+
                            }
+
                        $.init(m, w, C), y && (m.$isEmpty = function(t) {
+
                            return !t || 0 === t.length
+
                        }), b ? h(s, u, m) : y ? d(s, u, m) : f(s, u, m, $)
+
                    }
+
                }
+
            }
+
        }],
+
        _o = ["$interpolate", function(t) {
+
            var e = {
+
                addOption: p,
+
                removeOption: p
+
            };
+
            return {
+
                restrict: "E",
+
                priority: 100,
+
                compile: function(n, r) {
+
                    if (g(r.value)) {
+
                        var i = t(n.text(), !0);
+
                        i || r.$set("value", n.text())
+
                    }
+
                    return function(t, n, r) {
+
                        var a = "$selectController",
+
                            o = n.parent(),
+
                            s = o.data(a) || o.parent().data(a);
+
                        s && s.databound || (s = e), i ? t.$watch(i, function(t, e) {
+
                            r.$set("value", t), e !== t && s.removeOption(e), s.addOption(t, n)
+
                        }) : s.addOption(r.value, n), n.on("$destroy", function() {
+
                            s.removeOption(r.value)
+
                        })
+
                    }
+
                }
+
            }
+
        }],
+
        Uo = m({
+
            restrict: "E",
+
            terminal: !1
+
        }),
+
        Lo = function() {
+
            return {
+
                restrict: "A",
+
                require: "?ngModel",
+
                link: function(t, e, n, r) {
+
                    r && (n.required = !0, r.$validators.required = function(t, e) {
+
                        return !n.required || !r.$isEmpty(e)
+
                    }, n.$observe("required", function() {
+
                        r.$validate()
+
                    }))
+
                }
+
            }
+
        },
+
        Fo = function() {
+
            return {
+
                restrict: "A",
+
                require: "?ngModel",
+
                link: function(t, e, i, a) {
+
                    if (a) {
+
                        var o, s = i.ngPattern || i.pattern;
+
                        i.$observe("pattern", function(t) {
+
                            if (b(t) && t.length > 0 && (t = new RegExp("^" + t + "$")), t && !t.test) throw r("ngPattern")("noregexp", "Expected {0} to be a RegExp but was {1}. Element: {2}", s, t, z(e));
+
                            o = t || n, a.$validate()
+
                        }), a.$validators.pattern = function(t) {
+
                            return a.$isEmpty(t) || g(o) || o.test(t)
+
                        }
+
                    }
+
                }
+
            }
+
        },
+
        Ho = function() {
+
            return {
+
                restrict: "A",
+
                require: "?ngModel",
+
                link: function(t, e, n, r) {
+
                    if (r) {
+
                        var i = -1;
+
                        n.$observe("maxlength", function(t) {
+
                            var e = d(t);
+
                            i = isNaN(e) ? -1 : e, r.$validate()
+
                        }), r.$validators.maxlength = function(t, e) {
+
                            return 0 > i || r.$isEmpty(e) || e.length <= i
+
                        }
+
                    }
+
                }
+
            }
+
        },
+
        Bo = function() {
+
            return {
+
                restrict: "A",
+
                require: "?ngModel",
+
                link: function(t, e, n, r) {
+
                    if (r) {
+
                        var i = 0;
+
                        n.$observe("minlength", function(t) {
+
                            i = d(t) || 0, r.$validate()
+
                        }), r.$validators.minlength = function(t, e) {
+
                            return r.$isEmpty(e) || e.length >= i
+
                        }
+
                    }
+
                }
+
            }
+
        };
+
    return t.angular.bootstrap ? (console.log("WARNING: Tried to load angular more than once."), void 0) : (re(), he(si), Qr(e).ready(function() {
+
        X(e, Q)
+
    }), void 0)
+
}(window, document), !window.angular.$$csp() && window.angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}</style>'), angular.module("app", ["angularplasmid"]),
+
    function() {
+
        "use strict";
+
        angular.module("angularplasmid.services", []).factory("SVGUtil", function() {
+
            function t(t, e) {
+
                var n = "round";
+
                return "undefined" == typeof e || 0 === +e ? Math[n](t) : (t = +t, e = +e, isNaN(t) || "number" != typeof e || e % 1 !== 0 ? 0 / 0 : (t = t.toString().split("e"), t = Math[n](+(t[0] + "e" + (t[1] ? +t[1] - e : -e))), t = t.toString().split("e"), +(t[0] + "e" + (t[1] ? +t[1] + e : e))))
+
            }
+
 
+
            function e(t) {
+
                d.push(t)
+
            }
+
 
+
            function n(t) {
+
                var e;
+
                for (e = 0; e < d.length; e += 1)
+
                    if (d[e].id === t) return d[e]
+
            }
+
 
+
            function r(t, e, n, r) {
+
                var i = (r - 90) * Math.PI / 180;
+
                return {
+
                    x: t + n * Math.cos(i),
+
                    y: e + n * Math.sin(i)
+
                }
+
            }
+
 
+
            function i(t, e) {
+
                var n, r, i = ["id", "name", "class", "style", "filter", "ng-attr-style", "ng-attr-class", "ng-class"];
+
                for (r = 0; r < i.length; r += 1) n = i[r], t[0].hasAttribute(n) && (e.attr(n, t.attr(n)), t.removeAttr(n))
+
            }
+
 
+
            function a(t, e, n) {
+
                var r, i = "http://www.w3.org/2000/svg",
+
                    a = document.createElementNS(i, t);
+
                return n = n || [], angular.forEach(e, function(t) {
+
                    n.indexOf(t) < 0 && (r = e[t], null === r || t.match(/\$/) || "string" == typeof r && "" === r || a.setAttribute(t, r))
+
                }), a
+
            }
+
 
+
            function o(t) {
+
                angular.forEach(["id", "class", "style"], function(e) {
+
                    t.removeAttribute(e)
+
                })
+
            }
+
 
+
            function s(t, e, n, i) {
+
                var a, o, s;
+
                return t = Number(t || 0), e = Number(e || 0), n = Number(n || 0), i = Number(i || 0), a = {
+
                    start: r(t, e, n, 359.99),
+
                    end: r(t, e, n, 0)
+
                }, o = {
+
                    start: r(t, e, n + i, 359.99),
+
                    end: r(t, e, n + i, 0)
+
                }, s = ["M", a.start.x, a.start.y, "A", n, n, 0, 1, 0, a.end.x, a.end.y, "M", o.start.x, o.start.y, "A", n + i, n + i, 0, 1, 0, o.end.x, o.end.y].join(" ")
+
            }
+
 
+
            function u(t, e, n, i, a, o, s, u) {
+
                var l, c, f, d, h, p, $, m, g, v, y, b, w;
+
                return t = Number(t), e = Number(e), n = Number(n), i = Number(i), a = Number(a), o = Number(o), s = s || {
+
                    width: 0,
+
                    length: 0,
+
                    angle: 0
+
                }, u = u || {
+
                    width: 0,
+
                    length: 0,
+
                    angle: 0
+
                }, i === a ? (c = r(t, e, n, i), d = r(t, e, n + o, i), l = ["M", c.x, c.y, "L", d.x, d.y].join(" ")) : 1 === o ? (c = r(t, e, n, i), d = r(t, e, n, a), h = a > i ? 180 >= a - i ? "0" : "1" : 180 >= a - i ? "1" : "0", l = ["M", c.x, c.y, "A", n, n, 0, h, 1, d.x, d.y].join(" ")) : (a -= u.length < 0 ? 0 : u.length, i += s.length < 0 ? 0 : s.length, c = r(t, e, n, a), d = r(t, e, n, i), p = r(t, e, n - s.width, i + s.angle), $ = r(t, e, n + o / 2, i - s.length), m = r(t, e, n + o + s.width, i + s.angle), g = r(t, e, n + o, i), v = r(t, e, n + o + u.width, a - u.angle), y = r(t, e, n + o / 2, a + u.length), b = r(t, e, n - u.width, a - u.angle), w = r(t, e, n, a), f = r(t, e, n + o, a), h = 180 >= a - i ? "0" : "1", l = ["M", c.x, c.y, "A", n, n, 0, h, 0, d.x, d.y, "L", p.x, p.y, "L", $.x, $.y, "L", m.x, m.y, "L", g.x, g.y, "A", n + o, n + o, 0, h, 1, f.x, f.y, "L", v.x, v.y, "L", y.x, y.y, "L", b.x, b.y, "L", w.x, w.y, "z"].join(" ")), l
+
            }
+
 
+
            function l(e, n, r, i, a, o) {
+
                e = Number(e || 0), n = Number(n || 0), r = Number(r || 0), i = Number(i || 0), a = Number(a || 0), o = Number(o || 2);
+
                var s, u, l, c, f = Number(i) > 0 ? Number(a) / Number(i) : 0,
+
                    d = 2 * Math.PI / f,
+
                    h = -1,
+
                    p = "";
+
                for (c = 0; f > c; c += 1) s = d * c - Math.PI / 2, l = Math.cos(s), u = Math.sin(s), p += "M" + t(e + r * l, h) + "," + t(n + r * u, h) + " L" + t(e + (r + o) * l, h) + "," + t(n + (r + o) * u, h) + " ";
+
                return p = p || "M 0,0"
+
            }
+
 
+
            function c(e, n, r, i, a) {
+
                e = Number(e), n = Number(n), r = Number(r), i = Number(i), a = Number(a);
+
                var o, s, u, l, c = Number(i) > 0 ? Number(a) / Number(i) : 0,
+
                    f = 2 * Math.PI / c,
+
                    d = -1,
+
                    h = [];
+
                for (l = 0; c > l; l += 1) o = f * l - Math.PI / 2, u = Math.cos(o), s = Math.sin(o), h.push({
+
                    x: t(e + r * u, d),
+
                    y: t(n + r * s, d),
+
                    text: i * l
+
                });
+
                return h
+
            }
+
  
            function f(t, e) {
 
                return isNaN(t) ? e || 0 : Number(t)
 
            }
 
            var d = [],
 
                h = [],
 
                p = [];
 
            return {
 
                api: {
 
                    addPlasmid: e,
 
                    plasmids: d,
 
                    plasmid: n,
 
                    plasmidtracks: h,
 
                    trackmarkers: p
 
                },
 
                util: {
 
                    polarToCartesian: r,
 
                    swapProperties: i,
 
                    Numeric: f
 
                },
 
                svg: {
 
                    createNode: a,
 
                    removeAttributes: o,
 
                    path: {
 
                        donut: s,
 
                        arc: u,
 
                        scale: l
 
                    },
 
                    element: {
 
                        scalelabels: c
 
                    }
 
                }
 
            }
 
        })
 
    }(),
 
    function() {
 
        "use strict";
 
        angular.module("angularplasmid", ["angularplasmid.services"]).directive("plasmidapi", ["SVGUtil", function(t) {
 
            return {
 
                restrict: "AE",
 
                link: function(e, n, r) {
 
                    e[r.name] = t.api
 
                }
 
            }
 
        }]).directive("plasmid", ["SVGUtil", function() {
 
            return {
 
                restrict: "AE",
 
                type: "svg",
 
                template: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"></svg>',
 
                replace: !0,
 
                transclude: !0,
 
                require: "plasmid",
 
                scope: {
 
                    plasmidheight: "@",
 
                    plasmidwidth: "@",
 
                    sequencelength: "@",
 
                    sequence: "@",
 
                    plasmidclass: "@",
 
                    plasmidstyle: "@"
 
                },
 
                link: {
 
                    pre: function(t, e, n, r) {
 
                        r.init(e)
 
                    },
 
                    post: function(t, e, n, r, i) {
 
                        i(t.$parent, function(t) {
 
                            e.append(t)
 
                        }), t.$watchGroup(["plasmidheight", "plasmidwidth", "sequencelength", "sequence", "plasmidclass", "plasmidstyle"], function() {
 
                            r.draw()
 
                        })
 
                    }
 
                },
 
                controller: ["$scope", "SVGUtil", function(t, e) {
 
                    var n, r, i = [];
 
                    r = this, r.elementtype = "plasmid", r.init = function(t) {
 
                        e.api.addPlasmid(r), n = t, r.id = n.attr("id")
 
                    }, r.draw = function() {
 
                        var t = r.dimensions,
 
                            e = n.plasmidclass,
 
                            a = n.plasmidstyle;
 
                        n.attr("height", t.height), n.attr("width", t.width), e && n.attr("class", e), a && n.attr("style", a), angular.forEach(i, function(t) {
 
                            t.draw()
 
                        })
 
                    }, r.addTrack = function(t) {
 
                        i.push(t)
 
                    }, Object.defineProperty(r, "center", {
 
                        get: function() {
 
                            var t = r.dimensions;
 
                            return {
 
                                x: t.width / 2,
 
                                y: t.height / 2
 
                            }
 
                        }
 
                    }), Object.defineProperty(r, "dimensions", {
 
                        get: function() {
 
                            return {
 
                                height: e.util.Numeric(t.plasmidheight, 300),
 
                                width: e.util.Numeric(t.plasmidwidth, 300)
 
                            }
 
                        }
 
                    }), Object.defineProperty(r, "sequencelength", {
 
                        get: function() {
 
                            return r.sequence ? r.sequence.length : e.util.Numeric(t.sequencelength)
 
                        }
 
                    }), Object.defineProperty(r, "sequence", {
 
                        get: function() {
 
                            return t.sequence
 
                        }
 
                    }), Object.defineProperty(r, "plasmidclass", {
 
                        get: function() {
 
                            return t.plasmidclass
 
                        }
 
                    }), Object.defineProperty(r, "plasmidstyle", {
 
                        get: function() {
 
                            return t.plasmidstyle
 
                        }
 
                    }), r.tracks = i
 
                }]
 
            }
 
        }]).directive("plasmidtrack", ["SVGUtil", "$compile", function(t, e) {
 
            return {
 
                restrict: "AE",
 
                type: "svg",
 
                template: "<g><path></path></g>",
 
                replace: !0,
 
                transclude: !0,
 
                require: ["plasmidtrack", "^plasmid"],
 
                scope: {
 
                    radius: "@",
 
                    width: "@",
 
                    trackclass: "@",
 
                    trackstyle: "@",
 
                    trackclick: "&"
 
                },
 
                link: {
 
                    pre: function(t, e, n, r) {
 
                        var i = r[0],
 
                            a = r[1],
 
                            o = angular.element(e.children()[0]);
 
                        i.init(o, a)
 
                    },
 
                    post: function(n, r, i, a, o) {
 
                        o(n.$parent, function(t) {
 
                            r.append(t)
 
                        });
 
                        var s = angular.element(r),
 
                            u = angular.element(r.children()[0]),
 
                            l = a[0];
 
                        t.util.swapProperties(s, u), u.attr("fill-rule", "evenodd"), e(u)(n.$parent), u.on("click", function(t) {
 
                            n.trackclick({
 
                                $event: t,
 
                                $track: l
 
                            })
 
                        }), n.$watchGroup(["radius", "width", "trackstyle", "trackclass"], function() {
 
                            l.draw()
 
                        })
 
                    }
 
                },
 
                controller: ["$scope", function(e) {
 
                    var n, r, i, a = [],
 
                        o = [],
 
                        s = [];
 
                    i = this, i.elementtype = "plasmidtrack", i.init = function(t, e) {
 
                        n = e, n.addTrack(i), i.plasmid = n, r = t
 
                    }, i.draw = function() {
 
                        var e = i.center,
 
                            n = t.svg.path.donut(e.x, e.y, i.radius, i.width),
 
                            u = i.trackclass,
 
                            l = i.trackstyle;
 
                        r.attr("d", n), u && r.attr("class", u), l && r.attr("style", l), angular.forEach(a, function(t) {
 
                            t.draw()
 
                        }), angular.forEach(o, function(t) {
 
                            t.draw()
 
                        }), angular.forEach(s, function(t) {
 
                            t.draw()
 
                        })
 
                    }, i.addMarker = function(t) {
 
                        a.push(t)
 
                    }, i.addScale = function(t) {
 
                        o.push(t)
 
                    }, i.addLabel = function(t) {
 
                        s.push(t)
 
                    }, i.markergroup = function(t) {
 
                        var e = [];
 
                        return angular.forEach(a, function(n) {
 
                            n.markergroup === t && e.push(n)
 
                        }), e
 
                    }, i.getPosition = function(e, r, a) {
 
                        a = Number(a || 0), e = Number(e);
 
                        var o, s, u = 1,
 
                            l = 2,
 
                            c = i.center,
 
                            f = n.sequencelength;
 
                        if (f > 0) {
 
                            switch (s = e / f * 360, r) {
 
                                case u:
 
                                    o = i.radius + a;
 
                                    break;
 
                                case l:
 
                                    o = i.radius + i.width + a;
 
                                    break;
 
                                default:
 
                                    o = i.radius + i.width / 2 + a
 
                            }
 
                            return t.util.polarToCartesian(c.x, c.y, o, s)
 
                        }
 
                    }, Object.defineProperty(i, "center", {
 
                        get: function() {
 
                            return n.center
 
                        }
 
                    }), Object.defineProperty(i, "radius", {
 
                        get: function() {
 
                            return t.util.Numeric(e.radius, 100)
 
                        }
 
                    }), Object.defineProperty(i, "width", {
 
                        get: function() {
 
                            return t.util.Numeric(e.width, 25)
 
                        }
 
                    }), Object.defineProperty(i, "trackclass", {
 
                        get: function() {
 
                            return e.trackclass
 
                        }
 
                    }), Object.defineProperty(i, "trackstyle", {
 
                        get: function() {
 
                            return e.trackstyle
 
                        }
 
                    }), i.markers = a, i.scales = o, i.labels = s
 
                }]
 
            }
 
        }]).directive("trackscale", ["SVGUtil", "$compile", function(t, e) {
 
            return {
 
                restrict: "AE",
 
                type: "svg",
 
                template: "<g><path></path><g></g></g>",
 
                replace: !0,
 
                transclude: !0,
 
                require: ["trackscale", "^plasmidtrack"],
 
                scope: {
 
                    interval: "@",
 
                    vadjust: "@",
 
                    ticksize: "@",
 
                    direction: "@",
 
                    showlabels: "@",
 
                    labelvadjust: "@",
 
                    labelclass: "@",
 
                    labelstyle: "@",
 
                    tickclass: "@",
 
                    tickstyle: "@",
 
                    scaleclick: "&"
 
                },
 
                link: {
 
                    pre: function(t, e, n, r) {
 
                        var i = r[0],
 
                            a = r[1],
 
                            o = angular.element(e.children()[0]),
 
                            s = angular.element(e.children()[1]);
 
                        i.init(o, s, a)
 
                    },
 
                    post: function(n, r, i, a, o) {
 
                        var s, u, l;
 
                        o(n.$parent, function(t) {
 
                            r.append(t)
 
                        }), s = angular.element(r), u = angular.element(r.children()[0]), t.util.swapProperties(s, u), e(u)(n.$parent), u.on("click", function(t) {
 
                            n.scaleclick({
 
                                $event: t,
 
                                $scale: l
 
                            })
 
                        }), l = a[0], n.$watchGroup(["interval", "vadjust", "ticksize", "labelvadjust", "direction", "showlabels", "labelstyle", "labelclass", "tickstyle", "tickclass"], function() {
 
                            l.draw()
 
                        })
 
                    }
 
                },
 
                controller: ["$scope", function(e) {
 
                    var n, r, i, a, o = 15,
 
                        s = 3;
 
                    r = this, r.elementtype = "trackscale", r.init = function(t, e, o) {
 
                        n = o, n.addScale(r), r.track = n, i = t, a = e
 
                    }, r.draw = function() {
 
                        var e = r.tickclass,
 
                            o = r.tickstyle,
 
                            s = n.center,
 
                            u = t.svg.path.scale(s.x, s.y, r.radius, r.interval, r.total, r.ticksize);
 
                        i.attr("d", u), e && i.attr("class", e), o && i.attr("style", o), r.showlabels ? r.drawLabel() : a.empty()
 
                    }, r.drawLabel = function() {
 
                        function i(t) {
 
                            e.scaleclick({
 
                                $event: t,
 
                                $scale: r
 
                            })
 
                        }
 
                        var o, s, u, l = n.center;
 
                        for (u = t.svg.element.scalelabels(l.x, l.y, r.labelradius, r.interval, r.total), a.empty(), o = 0; o <= u.length - 1; o += 1) s = angular.element(t.svg.createNode("text")), r.labelclass && s.attr("class", r.labelclass), r.labelstyle && s.attr("style", r.labelstyle), s.attr("x", u[o].x), s.attr("y", u[o].y), s.attr("text-anchor", "middle"), s.attr("alignment-baseline", "middle"), s.text(u[o].text), s.on("click", i), a.append(s)
 
                    }, Object.defineProperty(r, "radius", {
 
                        get: function() {
 
                            return (r.inwardflg ? n.radius : n.radius + n.width) + (r.inwardflg ? -1 : 1) * r.vadjust + (r.inwardflg ? -r.ticksize : 0)
 
                        }
 
                    }), Object.defineProperty(r, "interval", {
 
                        get: function() {
 
                            return t.util.Numeric(e.interval)
 
                        }
 
                    }), Object.defineProperty(r, "vadjust", {
 
                        get: function() {
 
                            return t.util.Numeric(e.vadjust)
 
                        }
 
                    }), Object.defineProperty(r, "ticksize", {
 
                        get: function() {
 
                            return t.util.Numeric(e.ticksize, s)
 
                        }
 
                    }), Object.defineProperty(r, "inwardflg", {
 
                        get: function() {
 
                            return "in" === e.direction ? !0 : !1
 
                        }
 
                    }), Object.defineProperty(r, "total", {
 
                        get: function() {
 
                            return n.plasmid.sequencelength
 
                        }
 
                    }), Object.defineProperty(r, "showlabels", {
 
                        get: function() {
 
                            return "1" === e.showlabels ? !0 : !1
 
                        }
 
                    }), Object.defineProperty(r, "labelvadjust", {
 
                        get: function() {
 
                            return t.util.Numeric(e.labelvadjust, o)
 
                        }
 
                    }), Object.defineProperty(r, "tickclass", {
 
                        get: function() {
 
                            return e.tickclass
 
                        }
 
                    }), Object.defineProperty(r, "tickstyle", {
 
                        get: function() {
 
                            return e.tickstyle
 
                        }
 
                    }), Object.defineProperty(r, "labelclass", {
 
                        get: function() {
 
                            return e.labelclass
 
                        }
 
                    }), Object.defineProperty(r, "labelstyle", {
 
                        get: function() {
 
                            return e.labelstyle
 
                        }
 
                    }), Object.defineProperty(r, "labelradius", {
 
                        get: function() {
 
                            return r.radius + r.labelvadjust * (r.inwardflg ? -1 : 1)
 
                        }
 
                    })
 
                }]
 
            }
 
        }]).directive("tracklabel", ["SVGUtil", function(t) {
 
            return {
 
                restrict: "AE",
 
                type: "svg",
 
                template: "<text></text>",
 
                replace: !0,
 
                transclude: !0,
 
                require: ["tracklabel", "^plasmidtrack"],
 
                scope: {
 
                    text: "@",
 
                    hadjust: "@",
 
                    vadjust: "@",
 
                    labelclass: "@",
 
                    labelstyle: "@",
 
                    labelclick: "&"
 
                },
 
                link: {
 
                    pre: function(t, e, n, r) {
 
                        var i = r[0],
 
                            a = r[1],
 
                            o = angular.element(e[0]);
 
                        i.init(o, a)
 
                    },
 
                    post: function(t, e, n, r, i) {
 
                        var a;
 
                        i(t.$parent, function(t) {
 
                            e.append(t)
 
                        }), e.attr("text-anchor", "middle"), e.attr("alignment-baseline", "middle"), e.on("click", function(e) {
 
                            t.labelclick({
 
                                $event: e,
 
                                $label: a
 
                            })
 
                        }), a = r[0], t.$watchGroup(["text", "vadjust", "hadjust", "labelstyle", "labelclass"], function() {
 
                            a.draw()
 
                        })
 
                    }
 
                },
 
                controller: ["$scope", function(e) {
 
                    var n, r, i;
 
                    r = this, r.elementtype = "tracklabel", r.init = function(t, e) {
 
                        n = e, n.addLabel(r), r.track = n, i = t
 
                    }, r.draw = function() {
 
                        var t = n.center,
 
                            e = r.labelclass,
 
                            a = r.labelstyle;
 
                        i.attr("x", t.x + r.hadjust), i.attr("y", t.y + r.vadjust), i.text(r.text), e && i.attr("class", e), a && i.attr("style", a)
 
                    }, Object.defineProperty(r, "center", {
 
                        get: function() {
 
                            return n.center
 
                        }
 
                    }), Object.defineProperty(r, "text", {
 
                        get: function() {
 
                            return e.text
 
                        }
 
                    }), Object.defineProperty(r, "labelclass", {
 
                        get: function() {
 
                            return e.labelclass
 
                        }
 
                    }), Object.defineProperty(r, "labelstyle", {
 
                        get: function() {
 
                            return e.labelstyle
 
                        }
 
                    }), Object.defineProperty(r, "hadjust", {
 
                        get: function() {
 
                            return t.util.Numeric(e.hadjust, 0)
 
                        }
 
                    }), Object.defineProperty(r, "vadjust", {
 
                        get: function() {
 
                            return t.util.Numeric(e.vadjust, 0)
 
                        }
 
                    }), Object.defineProperty(r, "dimensions", {
 
                        get: function() {
 
                            return i[0].getBBox()
 
                        }
 
                    })
 
                }]
 
            }
 
        }]).directive("trackmarker", ["SVGUtil", "$compile", function(t, e) {
 
            return {
 
                restrict: "AE",
 
                type: "svg",
 
                template: "<g><path></path></g>",
 
                replace: !0,
 
                transclude: !0,
 
                require: ["trackmarker", "^plasmidtrack"],
 
                scope: {
 
                    start: "@",
 
                    end: "@",
 
                    vadjust: "@",
 
                    wadjust: "@",
 
                    markergroup: "@",
 
                    arrowstartlength: "@",
 
                    arrowstartwidth: "@",
 
                    arrowstartangle: "@",
 
                    arrowendlength: "@",
 
                    arrowendwidth: "@",
 
                    arrowendangle: "@",
 
                    markerclass: "@",
 
                    markerstyle: "@",
 
                    markerclick: "&"
 
                },
 
                link: {
 
                    pre: function(t, e, n, r) {
 
                        var i = r[0],
 
                            a = r[1],
 
                            o = angular.element(e.children()[0]);
 
                        i.init(o, a)
 
                    },
 
                    post: function(n, r, i, a, o) {
 
                        var s, u, l = a[0];
 
                        o(n.$parent, function(t) {
 
                            r.append(t)
 
                        }), s = angular.element(r), u = angular.element(r.children()[0]), t.util.swapProperties(s, u), e(u)(n.$parent), u.on("click", function(t) {
 
                            n.markerclick({
 
                                $event: t,
 
                                $marker: l
 
                            })
 
                        }), n.$watchGroup(["start", "end", "vadjust", "wadjust", "markergroup", "markerclass", "markerstyle", "arrowstartlength", "arrowstartwidth", "arrowstartangle", "arrowendlength", "arrowendwidth", "arrowendangle"], function() {
 
                            l.draw()
 
                        })
 
                    }
 
                },
 
                controller: ["$scope", function(e) {
 
                    var n, r, i, a = [];
 
                    r = this, r.elementtype = "trackmarker", r.init = function(t, e) {
 
                        n = e, n.addMarker(r), i = t, r.track = n
 
                    }, r.draw = function() {
 
                        var t = r.markerclass,
 
                            e = r.markerstyle;
 
                        i.attr("d", r.getPath()), t && i.attr("class", t), e && i.attr("style", e), angular.forEach(a, function(t) {
 
                            t.draw()
 
                        })
 
                    }, r.addMarkerLabel = function(t) {
 
                        a.push(t)
 
                    }, r.getPath = function() {
 
                        var e = n.center,
 
                            i = r.angle,
 
                            a = r.radius;
 
                        return t.svg.path.arc(e.x, e.y, a.inner, i.start, i.end, r.width, r.arrowstart, r.arrowend)
 
                    }, r.getPosition = function(e, i, a, o) {
 
                        var s, u, l, c, f, d = "start",
 
                            h = "end",
 
                            p = "inner",
 
                            $ = "outer";
 
                        if (s = n.center, c = r.radius, f = r.angle, e = t.util.Numeric(e), i = t.util.Numeric(i), void 0 !== o && void 0 !== a) {
 
                            switch (o) {
 
                                case p:
 
                                    u = c.inner + i;
 
                                    break;
 
                                case $:
 
                                    u = c.outer + i;
 
                                    break;
 
                                default:
 
                                    u = c.middle + i
 
                            }
 
                            switch (a) {
 
                                case d:
 
                                    l = f.start + e;
 
                                    break;
 
                                case h:
 
                                    l = f.end + e;
 
                                    break;
 
                                default:
 
                                    l = f.middle + e
 
                            }
 
                            return t.util.polarToCartesian(s.x, s.y, u, l)
 
                        }
 
                        return u = {
 
                            outer: c.outer + i,
 
                            inner: c.inner + i,
 
                            middle: c.middle + i
 
                        }, l = {
 
                            begin: f.start + e,
 
                            end: f.end + e,
 
                            middle: f.middle + e
 
                        }, {
 
                            outer: {
 
                                begin: t.util.polarToCartesian(s.x, s.y, u.outer, l.begin),
 
                                middle: t.util.polarToCartesian(s.x, s.y, u.outer, l.middle),
 
                                end: t.util.polarToCartesian(s.x, s.y, u.outer, l.end)
 
                            },
 
                            middle: {
 
                                begin: t.util.polarToCartesian(s.x, s.y, u.middle, l.begin),
 
                                middle: t.util.polarToCartesian(s.x, s.y, u.middle, l.middle),
 
                                end: t.util.polarToCartesian(s.x, s.y, u.middle, l.end)
 
                            },
 
                            inner: {
 
                                begin: t.util.polarToCartesian(s.x, s.y, u.inner, l.begin),
 
                                middle: t.util.polarToCartesian(s.x, s.y, u.inner, l.middle),
 
                                end: t.util.polarToCartesian(s.x, s.y, u.inner, l.end)
 
                            }
 
                        }
 
                    }, r.fireClick = function(t) {
 
                        e.markerclick({
 
                            $event: t.$event,
 
                            $marker: t.$marker
 
                        })
 
                    }, Object.defineProperty(r, "center", {
 
                        get: function() {
 
                            return n.center
 
                        }
 
                    }), Object.defineProperty(r, "radius", {
 
                        get: function() {
 
                            return {
 
                                inner: n.radius + r.vadjust,
 
                                outer: n.radius + r.vadjust + r.width,
 
                                middle: n.radius + r.vadjust + r.width / 2
 
                            }
 
                        }
 
                    }), Object.defineProperty(r, "angle", {
 
                        get: function() {
 
                            var i, a, o, s;
 
                            return i = r.start / n.plasmid.sequencelength * 360, s = e.end || e.start, a = t.util.Numeric(s) / n.plasmid.sequencelength * 360, a += i > a ? 360 : 0, o = i + (a - i) / 2, {
 
                                start: i,
 
                                middle: o,
 
                                end: a
 
                            }
 
                        }
 
                    }), Object.defineProperty(r, "vadjust", {
 
                        get: function() {
 
                            return t.util.Numeric(e.vadjust)
 
                        }
 
                    }), Object.defineProperty(r, "wadjust", {
 
                        get: function() {
 
                            return t.util.Numeric(e.wadjust)
 
                        }
 
                    }), Object.defineProperty(r, "width", {
 
                        get: function() {
 
                            return n.width + r.wadjust
 
                        }
 
                    }), Object.defineProperty(r, "start", {
 
                        get: function() {
 
                            return t.util.Numeric(e.start)
 
                        }
 
                    }), Object.defineProperty(r, "end", {
 
                        get: function() {
 
                            return t.util.Numeric(e.end)
 
                        }
 
                    }), Object.defineProperty(r, "arrowstart", {
 
                        get: function() {
 
                            return {
 
                                width: t.util.Numeric(e.arrowstartwidth),
 
                                length: t.util.Numeric(e.arrowstartlength),
 
                                angle: t.util.Numeric(e.arrowstartangle)
 
                            }
 
                        }
 
                    }), Object.defineProperty(r, "arrowend", {
 
                        get: function() {
 
                            return {
 
                                width: t.util.Numeric(e.arrowendwidth),
 
                                length: t.util.Numeric(e.arrowendlength),
 
                                angle: t.util.Numeric(e.arrowendangle)
 
                            }
 
                        }
 
                    }), Object.defineProperty(r, "markergroup", {
 
                        get: function() {
 
                            return e.markergroup
 
                        }
 
                    }), Object.defineProperty(r, "markerclass", {
 
                        get: function() {
 
                            return e.markerclass
 
                        }
 
                    }), Object.defineProperty(r, "markerstyle", {
 
                        get: function() {
 
                            return e.markerstyle
 
                        }
 
                    }), Object.defineProperty(r, "sequence", {
 
                        get: function() {
 
                            var t = r.track.plasmid.sequence;
 
                            return r.start > r.end ? t.substring(r.start - 1, t.length - 1) + t.substring(0, r.end - 1) : t.substring(r.start - 1, r.end - 1)
 
                        }
 
                    }), r.labels = a
 
                }]
 
            }
 
        }]).directive("markerlabel", ["SVGUtil", "$compile", function(t, e) {
 
            return {
 
                restrict: "AE",
 
                type: "svg",
 
                transclude: !0,
 
                template: '<g><path></path><path id="" style="fill:none;stroke:none"></path><text></text></g>',
 
                require: ["markerlabel", "^trackmarker"],
 
                replace: !0,
 
                scope: {
 
                    text: "@",
 
                    valign: "@",
 
                    vadjust: "@",
 
                    halign: "@",
 
                    hadjust: "@",
 
                    type: "@",
 
                    showline: "@",
 
                    linestyle: "@",
 
                    lineclass: "@",
 
                    labelstyle: "@",
 
                    labelclass: "@",
 
                    linevadjust: "@",
 
                    labelclick: "&"
 
                },
 
                link: {
 
                    pre: function(t, e, n, r) {
 
                        var i = r[0],
 
                            a = r[1],
 
                            o = angular.element(e[0]),
 
                            s = angular.element(e.children()[0]),
 
                            u = angular.element(e.children()[1]),
 
                            l = angular.element(e.children()[2]);
 
                        i.init(l, o, u, s, a)
 
                    },
 
                    post: function(n, r, i, a, o) {
 
                        o(n.$parent, function(t) {
 
                            r.append(t)
 
                        });
 
                        var s = a[0],
 
                            u = a[1],
 
                            l = angular.element(r),
 
                            c = angular.element(r.children()[2]);
 
                        c.attr("text-anchor", "middle"), c.attr("alignment-baseline", "middle"), t.util.swapProperties(l, c), e(c)(n.$parent), i.labelclick ? c.on("click", function(t) {
 
                            n.labelclick({
 
                                $event: t,
 
                                $label: s
 
                            })
 
                        }) : c.on("click", function(t) {
 
                            u.fireClick({
 
                                $event: t,
 
                                $marker: u
 
                            })
 
                        }), n.$watchGroup(["text", "type", "valign", "vadjust", "halign", "hadjust", "showline", "linevadjust", "linestyle", "labelclass", "labelstyle"], function() {
 
                            s.draw()
 
                        })
 
                    }
 
                },
 
                controller: ["$scope", "$compile", function(e, n) {
 
                    var r, i, a, o, s, u, l, c;
 
                    i = this, i.elementtype = "markerlabel", i.init = function(t, e, n, s, u) {
 
                        var f = "TPATH" + (Math.random() + 1).toString(36).substring(3, 7);
 
                        r = u, r.addMarkerLabel(i), i.marker = r, a = t, o = n, l = s, c = e, o.attr("id", f)
 
                    }, i.draw = function() {
 
                        var t, c, f, d, h, p = "middle",
 
                            $ = "inner",
 
                            m = "outer",
 
                            g = "start",
 
                            v = "end",
 
                            y = 0,
 
                            b = 0,
 
                            w = i.labelclass,
 
                            x = i.labelstyle;
 
                        if (w && a.attr("class", w), x && a.attr("style", x), "path" === i.type) switch (a.attr("x", ""), a.attr("y", ""), s || (u = document.createElementNS("http://www.w3.org/2000/svg", "textPath"), u.setAttributeNS("http://www.w3.org/1999/xlink", "href", "#" + o.attr("id")), s = angular.element(u), n(s)(e), a.empty(), a.append(s)), u.textContent = i.text, y = window.getComputedStyle(a[0]).fontSize.replace("px", ""), b = i.valign === m ? 0 : i.valign === $ ? Number(y || 0) : Number(y || 0) / 2, o.attr("d", i.getPath(i.hadjust, i.vadjust - b, i.halign, i.valign)), i.halign) {
 
                            case g:
 
                                a.attr("text-anchor", "start"), s[0].setAttribute("startOffset", "0%");
 
                                break;
 
                            case v:
 
                                a.attr("text-anchor", "end"), s[0].setAttribute("startOffset", "100%");
 
                                break;
 
                            default:
 
                                a.attr("text-anchor", "middle"), s[0].setAttribute("startOffset", "50%")
 
                        } else s && (s.remove(), s = null), t = r.getPosition(i.hadjust, i.vadjust, i.halign, i.valign), a.attr("x", t.x), a.attr("y", t.y), a.text(i.text);
 
                        i.showlineflg ? (c = r.getPosition(i.hadjust, i.vadjust + i.linevadjust, i.halign, i.valign), d = r.getPosition(), h = i.valign === $ ? d.inner : i.valign === p ? d.middle : d.outer, f = i.halign === g ? h.begin : i.halign === v ? h.end : h.middle, l.attr("d", ["M", c.x, c.y, "L", f.x, f.y].join(" ")), i.linestyle || i.lineclass || l.attr("style", "stroke:#000"), i.linestyle && l.attr("style", i.linestyle), i.lineclass && l.attr("class", i.lineclass)) : l.removeAttr("d")
 
                    }, i.getPath = function(e, n, i, a) {
 
                        var o, s, u, l, c, f = "inner",
 
                            d = "outer",
 
                            h = "start",
 
                            p = "end",
 
                            $ = r.center;
 
                        switch (s = r.radius, a) {
 
                            case f:
 
                                o = s.inner;
 
                                break;
 
                            case d:
 
                                o = s.outer;
 
                                break;
 
                            default:
 
                                o = s.middle
 
                        }
 
                        switch (u = r.angle, i) {
 
                            case h:
 
                                l = u.start, c = u.start + 359.99;
 
                                break;
 
                            case p:
 
                                l = u.end + 1, c = u.end;
 
                                break;
 
                            default:
 
                                l = u.middle + 180.05, c = u.middle + 179.95
 
                        }
 
                        return t.svg.path.arc($.x, $.y, o + Number(n || 0), l + Number(e || 0), c + Number(e || 0), 1)
 
                    }, Object.defineProperty(i, "showlineflg", {
 
                        get: function() {
 
                            return "1" === e.showline ? !0 : !1
 
                        }
 
                    }), Object.defineProperty(i, "halign", {
 
                        get: function() {
 
                            return e.halign || "middle"
 
                        }
 
                    }), Object.defineProperty(i, "valign", {
 
                        get: function() {
 
                            return e.valign || "middle"
 
                        }
 
                    }), Object.defineProperty(i, "hadjust", {
 
                        get: function() {
 
                            return t.util.Numeric(e.hadjust)
 
                        }
 
                    }), Object.defineProperty(i, "vadjust", {
 
                        get: function() {
 
                            return t.util.Numeric(e.vadjust)
 
                        }
 
                    }), Object.defineProperty(i, "type", {
 
                        get: function() {
 
                            return e.type
 
                        }
 
                    }), Object.defineProperty(i, "linevadjust", {
 
                        get: function() {
 
                            return t.util.Numeric(e.linevadjust)
 
                        }
 
                    }), Object.defineProperty(i, "labelclass", {
 
                        get: function() {
 
                            return e.labelclass
 
                        }
 
                    }), Object.defineProperty(i, "labelstyle", {
 
                        get: function() {
 
                            return e.labelstyle
 
                        }
 
                    }), Object.defineProperty(i, "linestyle", {
 
                        get: function() {
 
                            return e.linestyle
 
                        }
 
                    }), Object.defineProperty(i, "lineclass", {
 
                        get: function() {
 
                            return e.lineclass
 
                        }
 
                    }), Object.defineProperty(i, "text", {
 
                        get: function() {
 
                            return e.text
 
                        }
 
                    })
 
                }]
 
            }
 
        }]).directive("svgelement", ["SVGUtil", function() {
 
            return {
 
                restrict: "AE",
 
                template: function(t, e) {
 
                    return "<" + e.type + "></" + e.type + ">"
 
                },
 
                type: "svg",
 
                replace: !0,
 
                transclude: !0,
 
                require: ["^plasmid"],
 
                scope: {},
 
                link: function(t, e, n, r, i) {
 
                    i(t.$parent, function(t) {
 
                        e.append(t)
 
                    })
 
                }
 
            }
 
        }])
 
    }(),
 
    function() {
 
        "use strict";
 
        angular.element(document).ready(function() {
 
            angular.bootstrap(document, ["app"])
 
        })
 
    }();</script>
 
 
{{:Team:Sydney_Australia/templates/Footer}}
 
{{:Team:Sydney_Australia/templates/Footer}}

Latest revision as of 03:14, 2 November 2017

Our Key Goals


The aim of the USYD iGEM 2017 team was to address the problem of insulin inaccessibility. The design of our insulin, and its means of expression, needed to look at five key characteristics:

Stability

For our project to work effectively, we must have a supply chain that’s not a cold chain, so that costs can be reduced. This will ultimately mean that the cost of these cold chains will not be passed onto the consumer. To achieve this, we hope to design an insulin that will not lose efficacy after being exposed to room temperature for long periods of time.

Single Chained

As a result of the difficult purification methods, Single Chain Insulins, or SCIs for short, have been developed with a small, C-peptide chain linker. This linker connects the A and B chains in such a way that the di-sulfide bonds form more favorably. We aim to develop our own single chain insulin to compare it’s simplicity.

Ease of Purification and Affordaility

We must also consider the impact of a difficult, costly manufacturing process on small scale manufacturing companies. This impact is too great to impose on this grass-roots organisations, so we have pursued to find a cheap, simple purification method which is able to produce high yields from a recombinant system.

Intellectual Property Issues

As a result of the way drugs are currently developed, all new inventions for therapies are protected by Intellectual Property Law through patents. These patents surrounding all currently prescribed and newly invented insulins has inspired our team to pursue a completely open source project.

Safety and Efficacy

Our insulin products must be of certifiable medical grade such that it can be approved for human use after stage IV clinical trials, or biosimilar clinical trials. Furthermore, it must also be at least as effective as the other insulins on the market.

Our Insulin Analogue


Proinsulin

We began working on expressing proinsulin as it is a reliable, unpatented, and well characterised therapeutic. Proinsulin itself is inactive, and to become active it requires additional processing to form insulin. This processing is performed by the protease trypsin, which cleaves the C chain from proinsulin. After trypsin activity, the A and B chains are left over to form active insulin. Proinsulin processing is demonstrated in Figure 1. with the cleavage of the C chain.



Figure 1. Cleavage of proinsulin results in active insulin

Due to the additional processing steps required to produce purified active insulin from proinsulin, increasing the cost of insulin synthesis, we looked for way to diminish this cost by reducing the steps required to obtain active insulin.


Winsulin

Our team decided to design a single-chain insulin, as single-chain insulins have been demonstrated to have higher stability and activity than human proinsulin. Stability in particular was important to our design due to the need to synthesise an insulin that could be transported over long distances without requiring cold temperatures. Crucially, single-chain insulins do not need to be cleaved to be active, requiring less processing than proinsulin.




Figure 2. Sequence comparison of proinsulin, active insulin and Winsulin.

We based the linker peptide of Winsulin (shown above) on sequences and principles tested in Rajpal et al., 2009. This paper found that peptides with a length of 5 to 12 amino acids had the highest receptor binding activity. Importantly, the composition of the sequence is identified as integral in determining whether the single chain construct has activity.


With the above considerations in mind, we designed the linker peptide sequence for Winsulin with the following characteristics:



A further consideration was in ensuring that this single chain construct woudl not infringe any potential patents. With this in mind - we designed our construct to also have 12 amino acids.

Additionally, the C-terminal residue of proinsulin is an asparagine. In Winsulin we substituted this for a glycine to increase the pI of Winsulin to approximately 7.8. This pI is somewhat high, but it leads to the aggregation of Winsulin monomers to form hexamers. This substitution is present in many long-acting insulins currently on the market. Yet, interestingly, our modelling indicates our Winsulin is still a rapid-acting insulin, and dissociates from hexamers more readily than human insulin.

Our Constructs


We designed our expression constructs in order to test winsulin and proinsulin with multiple expression systems. Click on each element of the construct to learn more about why we chose it:

Winsulin secreted by B. subtilis

BB prefix

RBS

YNCM Tag

His Tag

TEV

Winsulin

BB suffix

Proinsulin secreted by B. subtilis

BB prefix

RBS

YNCM Tag

His Tag

R

Proinsulin

BB suffix

Winsulin targeted to the periplasm of E. coli

BB prefix

RBS

Ecotin Tag

His Tag

TEV

Winsulin

BB suffix

Proinsulin targeted to the periplasm of E. coli

BB prefix

RBS

Ecotin Tag

His Tag

R

Proinsulin

BB suffix

Winsulin targeted to the cytoplasm of E. coli

BB prefix

RBS

His Tag

TEV

Winsulin

BB suffix

Proinsulin targeted to the cytoplasm of E. coli

BB prefix

RBS

His Tag

R

Proinsulin

BB suffix

iGEM BioBrick Prefix


Contains the restriction sites that are necessary for BioBrick compatibility including EcoRI, NotI & XbaI.

E. coli Extended Ribosome Binding Site


A derivative of the RBS found in gene 10 of the T7 bacteriophage, this 23 base pair sequence rich in A’s & T’s enhances ribosome binding to boost expression.

YncM Tag

The YNCM tag is a 12 amino acid sequence whose presence on the N-terminus of the protein targets it for secretion out of the cell into the surrounding media via the Sec pathway in Bacillus subtilis. YNCM was chosen because it was recently shown to be massively successful in targeting recombinant protein for secretion compared to a library of other signal peptides. Additionally, this was shown in B. subtilis strain WB600, which is the bacteria that our WB800 strain was derived from. So we expect that it should give us similar success in secretion of our constructs. (Guan et. al. 2016)

His Tag


We have included a tag comprised of 6 sequential histidines that form a vital aspect of our purification technique using affinity chromatography. Histidine’s high attraction to metal ions will cause the entire protein, insulin and all, to bind to a nickel column and separate it from the other proteins of the cell.

TEV Protease Cleavage Site


TEV is a sequence-specific cysteine protease derived from Tobacco Etch Virus. Because of its high specificity, it is commonly used for deliberate protein cleavage. In our project, we will use it to exclusively detach Winsulin from the nickel column, leaving the his tag and Ecotin/YNCM tags behind. This should provide us with a pure elution of Winsulin.

“R” Arginine Cleavage Site

Arginine acts as a recognition site for Trypsin Protease which we will use to specifically remove Proinsulin from the his tag and YNCM/Ecotin tag in a similar way to TEV. We have chosen to use Trypsin in these constructs because it allows us to further simplify the processing of proinsulin. Trypsin naturally cleaves the C-peptide from proinsulin which, following disulfide bond formation, leaves the active form of insulin. This is the way it works in our body, so we are confident that it will work here too.

iGEM BioBrick Suffix


Contains the restriction sites that are necessary for BioBrick compatibility including SpeI, NotI & PstI. We have also added an additional BamHI site at the terminus of our E. coli expressed constructs for ligation into pET-15b.

Ecotin Tag

Ecotin acts as a signal sequence to target the translated protein to the periplasm of the cell. There are a number of advantages that make it a good choice over other tags.

  • Relatively low metabolic burden due to its small size
  • No interaction with other proteins within the periplasm
  • Is native in E. coli and contains a disulfide bond meaning it undergoes through an oxidative compartment that may assist in the formation of the disulfides in Proinsulin and Winsulin.
  • It has already been shown to successfully target proinsulin to the periplasm (Malik et. al. 2007)
Proinsulin


See our section above!

Winsulin


See our section above!

Our Vectors


We have chosen to use the pET-15b expression system paired with BL21 strain E. coli to express our periplasmic and cytoplasmic constructs. It is a well characterised vector that uses the T7 induction system to prevent expression without the presence of IPTG, providing a convenient level of control over production.


Figure 3. pET-15b was used for cytoplasmic and periplasmic expression of proinsulin and winsulin.

pUS258 is an integrative expression vector which undergoes homologous recombination to insert into the amyE gene of the Bacillus subtilis chromosome. It’s a relatively simple plasmid using the same IPTG induction system that we use across all of our expression systems.


Figure 4. pus258 was used for cytoplasmic and periplasmic expression of proinsulin and winsulin.

Our Expression Systems


In order to maximise the yield of our insulin, while also reducing the post-expression methods currently undertaken by manufacturers, we tested both of these constructs in three different expression systems. Two of these expression systems were in BL21 E. coli, and the other was in Bacillus subtilis.

Cytoplasmic Expression

Cytoplasmic expression is our recombinant protein production in its raw and simple form. With no tags attached to the fusion protein, both Winsulin and Proinsulin will accumulate within the cytoplasm to form aggregated inclusion bodies. Extraction will involve complete lysis of the cell and purification will require separating them from DNA, membranes and other proteins.

The reason to express in the cytoplasm is mainly to compare our other expression systems to where we will be able to see whether they are a viable means of production.

We are using the E. Coli shuffle strain as alternative to BL21 because it is associated with a higher capacity to fold recombinant protein within the cytoplasm This should promote the formation of disulfide bonds and reduce the formation of inclusion bodies


Figure 5. Details of E. Coli cytoplasmic expression of pro/winsulin

Periplasmic Expression

Potentially the biggest hurdle to overcome in efficiently producing recombinant insulin is having the three disulfide bonds in proinsulin and active insulin form correctly. This is because they require an oxidative environment that isn’t usually found in the cytoplasm of common protein factories like E. coli where proteins are naturally expressed.

Fortunately, the periplasmic compartment of gram negative bacteria, including E. coli is more oxidative than the cytoplasm and will therefore improve disulfide bond formation. So we are using the Ecotin tag to target proinsulin and Winsulin to the periplasm in the hope that they will fold correctly and form the correct disulfides.

This method also has the additional advantage that the periplasmic fraction can be extracted without lysing the entire cell, separating our insulin from cells DNA and the rest of the cytoplasmic “junk”.


Figure 6. Details of E. Coli periplasmic expression of pro/winsulin

Secretory Expression

Current methods of insulin production grow bacteria in huge vats. But bacteria like E. coli that only express the protein in the cytoplasm need to be lysed to extract it. Which means they need to drain hundreds of thousands of liters of culture to separate the cells from the media before lysing the cells and then purifying insulin from the DNA and other cellular proteins. Although we will be testing cytoplasmic E. coli expression similar to these methods, we wanted to come up with a way to efficiently separate our insulin from the cells and decided the best way would be have it secreted directly into the media.

This is where Bacillus subtilis comes in!


Bacillus has been a common tool for recombinant protein production for years and has been proven again and again that they are highly efficient secretion factories. The hope is that having the insulin separated from the cells in the media would mean that scaled up production could use a system where the media is constantly cycled out and the cells can continuously produce our insulin. As can be seen in Figure 7, expression using B. Subtilis can be very simple contributing to our goal to create an easily purifiable product.


Figure 7. Details of expression of pro/winsulin in B. Subtilis

Our Purification Process


Our insulins were designed with a 6x His sequence at the N-terminus of the insulin. This sequence, comprised of 6 histidine residues, binds to nickel. When cell lysates or media containing insulin are added to nickel beads, all of the cellular components should wash off from the beads. This separates them from insulin which remains bound to the nickel beads. As such, the 6x His tag sequence's affinity to nickel can be used to purify insulin from cells or media.

We considered two methods for the purification of our insulins: nickel columns, and nickel agarose resin. The nickel column method is simpler, as insulin can be purified in a single step, yet it is more expensive. On the other hand, the nickel agarose resin method involves more steps but is more cost-effective.

An additional factor in the purification of our insulins is the need to remove the 6x His sequence and the expression tags from the insulin. We designed our Winsulin constructs so that both could be cleaved off in a single step by TEV protease. Our Proinsulin constructs take this further - in a single step using the protease trypsin, the His-tag, expression tag and C chain are removed, simultaneously removing the tags and allowing the proinsulin to fold into active insulin.


Figure 8. Schematic demonstrating the purification methods


In the nickel column method, the protease step also releases the insulin from the nickel column for collection. However, it also reduces the amount of insulin released from the nickel column. Taking this into consideration, along with the increased expense of the nickel column method, our team decided to use the nickel agarose resin method for insulin purification.

Assays



ELISA Assay

As an initial test to determine protein folding and accurately quantify expression yield, we will be using an ELISA. This test uses antibodies that bind to the folded structure of insulin with extremely high specificity. In this regard, it gives an initial indication as to whether the protein is in a conformation that could potentially bind to the insulin receptor. Additionally, the antibodies are tagged with fluorescent protein, so the relative fluorescence will correlate to the amount of insulin in the sample, also with great accuracy.



Figure 9. Schematic for ELISA insulin assay


Glucose Uptake Assay


Following the ELISA, we will test the function of our expressed recombinant Winsulin, and Proinsulin (with trypsin removal of the C-peptide) using an in vitro glucose uptake assay. Here, we measure the changes in glycogen synthesis and glucose oxidation in response to activation of the insulin receptor in cell cultures. C14 radioalabelled glucose will be taken up into the cell at a faster rate upon stimulation and result in incorporation of the carbon into glycogen and CO2, which is measured by a scintillation counter. This assay is a great alternative to an in vivo assay that uses involves assessing the convulsions of mice in response to injections of increasing concentrations of insulin.





Figure 10. Schematic for glucose uptake assays for insulin assay

Additional Design Considerations



WB800 Bacillus Strain



One of the challenges that we found in the literature of producing recombinant insulin was its susceptibility to proteolytic decay. So to continue with the theme of maximising expression, it would make sense to reduce the effect of proteolytic decay.

Our idea: knockout proteases from an existing strain such as B. subtilis 168.

Our actual solution: find one that already exists.

And hence we discovered B. subtilis WB800. It is one of the more recent of a long line of protease deficient strains of Bacillus subtilis that have been optimised for recombinant protein secretion (Figure 11).

WB800 specifically has 8 proteases knocked that include both intracellular and membrane bound. The strain was kindly provided to us for experimental use by Professor Sui-Lam Wong of the University of Calgary, Canada.

Figure 11. WB800 protease knockout strain


pUS270



Although pUS258 appeared to work quite well as an expression vector, we noticed that it wasn't the most streamlined process of cloning in our constructs nor transforming into Bacillus subtilis because of an MCS that was incompatible with the BioBrick cloning system, and the extra steps needed to ensure the correct integration of the plasmid into the chromosome.

So we decided to design a new compact, highly efficient replicative expression vector that would serve not just our own future experiments, but the whole iGEM community. Thus, pUS270 was born!

While we were too short on time to construct it ourselves, we are holding onto it for a future project that can be tested and eventually submitted to the registry.

Select each dropdown for more information

Codes for Neomycin Phosphotransferase II that gives transformants resistance to both Neomycin and Kanamycin. Allows selective screening of transformants

This gene codes for the Replicator protein that pairs with the Bacillus OriV and is essential to promote the independent replication of pUS270 in Bacillus.

This region allows independent replication of the vector within Bacillus at a high copy number to provide more copies of the recombinant gene to maximise expression.

Taken from pSB1C3, having this origin of replication will make it easier to construct the plasmid using E. coli as well as improve cloning efficiency downstream. Chosen because of the high copy number of pSB1C3.

Consists of the target sequence for the lac repressor protein to contribute to the IPTG induction system.

The multiple cloning site of pUS258 and other expression plasmids that we considered using either had too few restriction sites or sites that were incompatible for the efficient cloning with the BB Prefix and Suffix. So we have designed two highly diverse MCS’ that have 27 unique sites amongst them on either side of SF AmylCP-6 to promote simple cloning of parts from the Bio Brick Registry.

SuperFold AmilCP-6 is a variant of amilCP which was used by the 2016 Sydney IGEM team and originally submitted to the registry by Team Uppsala Sweden in 2011. This variant has undergone site directed mutagenesis to increase the folding rate of the chromoprotein and enhance the blue colour. We are taking advantage of this protein to enable blue-white screening without the need for adding X-gal to the plates. Cloning with the two multiple cloning sites that flank SF AmilCP-6 essentially swaps it with the insert to leave the recombinant bacteria white rather than blue.

Codes for the production of the repressor protein that binds to the Lac Operator to prevent expression until induction of the media with IPTG. We have designed pUS270 to have the LacI under the pVeg promoter for strong constitutive expression in Bacillus.

References

  1. Rajpal, G., Liu, M., Zhang, Yi, Arvan, P. (2009). Single-Chain Insulins as Receptor Agonists. Mol Endocrinol 23(5):679-688