Browse Source

few fixes in users lists styles

Rafał Pitoń 9 years ago
parent
commit
6ff46def8c

+ 7 - 3
frontend/src/components/users-list/root.js

@@ -45,12 +45,16 @@ export default class extends React.Component {
       /* jshint ignore:start */
       let row = [];
       for (let i = 0; i < this.props.cols; i ++) {
-        row.push(i);
+        if (i === 0) {
+          row.push(this.getColClassName());
+        } else {
+          row.push(this.getColClassName() + ' hidden-xs hidden-sm');
+        }
       }
 
       return <div className="row">
-        {row.map((i) => {
-          return <div className={this.getColClassName()} key={i}>
+        {row.map((className, i) => {
+          return <div className={className} key={i}>
             <UserPreview showStatus={this.props.showStatus} />
           </div>;
         })}

+ 3 - 12
frontend/src/components/users-list/user-preview.js

@@ -53,22 +53,13 @@ export default class extends React.Component {
 
             <ul className="list-unstyled">
               <li className="user-posts-count">
-                <strong>
-                  <span className="ui-preview-text">&nbsp;</span>
-                </strong>
-                <small>{gettext("posts")}</small>
+                <span className="ui-preview-text" style={{width: random.int(40, 70) + "px"}}>&nbsp;</span>
               </li>
               <li className="user-threads-count">
-                <strong>
-                  <span className="ui-preview-text">&nbsp;</span>
-                </strong>
-                <small>{gettext("threads")}</small>
+                <span className="ui-preview-text" style={{width: random.int(40, 70) + "px"}}>&nbsp;</span>
               </li>
               <li className="user-followers-count">
-                <strong>
-                  <span className="ui-preview-text">&nbsp;</span>
-                </strong>
-                <small>{gettext("followers")}</small>
+                <span className="ui-preview-text" style={{width: random.int(40, 70) + "px"}}>&nbsp;</span>
               </li>
             </ul>
 

+ 1 - 1
frontend/style/index.less

@@ -87,7 +87,7 @@
 // Pages
 @import "misago/message-pages.less";
 @import "misago/threads-lists.less";
-@import "misago/users-lists.less";
+@import "misago/active-posters.less";
 @import "misago/user-profile.less";
 @import "misago/username-history.less";
 

+ 30 - 55
frontend/style/misago/users-lists.less → frontend/style/misago/active-posters.less

@@ -1,9 +1,8 @@
 //
-// Users Lists
+// Active posters list
 // --------------------------------------------------
 
 
-// Active posters list
 .active-posters {
   li {
     display: block;
@@ -14,16 +13,6 @@
     .rank-name, .user-title {
       font-size: @font-size-small;
     }
-
-    .status-icon {
-      width: 16px;
-      height: 16px;
-
-      margin-right: 2px;
-
-      font-size: 16px;
-      line-height: 16px;
-    }
   }
 
   .rank-position, .rank-posts-total, .rank-posts-counted {
@@ -34,6 +23,35 @@
 }
 
 
+// User status
+.active-posters .user-status {
+  font-size: @font-size-small;
+
+  @media screen and (min-width: @screen-md-min) {
+    margin-right: @line-height-computed * .6;
+  }
+
+  .status-icon {
+    margin-right: 3px;
+
+    position: relative;
+    bottom: 2px;
+
+    &.ui-preview {
+      width: @font-size-small;
+    }
+  }
+
+  .ui-preview {
+    height: @font-size-small;
+    position: relative;
+
+    top: 2px;
+    bottom: auto;
+  }
+}
+
+
 // Compact displays
 @media screen and (max-width: @screen-sm-max) {
   .active-posters {
@@ -63,20 +81,6 @@
       .rank-name {
         font-weight: normal;
       }
-
-      .user-status {
-        margin-right: 4px;
-
-        .status-icon {
-          position: relative;
-          top: -1px;
-
-          &.ui-preview {
-            position: relative;
-            top: 1px;
-          }
-        }
-      }
     }
 
     .rank-position, .rank-posts-total, .rank-posts-counted {
@@ -131,17 +135,6 @@
 
 // Full displays
 @media screen and (min-width: @screen-md-min) {
-  .active-posters.ui-preview {
-    .rank-user {
-      .user-status {
-        .status-icon {
-          position: relative;
-          top: 2px;
-        }
-      }
-    }
-  }
-
   .active-posters {
     li>* {
       float: left;
@@ -163,24 +156,6 @@
         font-size: @font-size-large;
       }
 
-      .user-status {
-        margin-right: @line-height-computed * .6;
-
-        .status-icon {
-          position: relative;
-          top: -1px;
-
-          &.ui-preview {
-            top: 2px;
-          }
-        }
-
-        .status-label {
-          font-size: @font-size-small;
-          line-height: @font-size-small;
-        }
-      }
-
       .rank-name {
         margin-right: @line-height-computed * .6;
       }

+ 38 - 20
frontend/style/misago/user-card.less

@@ -41,6 +41,7 @@
 
     .user-subscript {
       margin-left: 76px;
+      margin-bottom: 0px;
       overflow: auto;
 
       color: @text-muted;
@@ -49,32 +50,33 @@
       &>* {
         display: block;
         float: left;
+        height: auto;
 
+        padding: 0px;
+        margin: 0px;
         margin-right: 8px;
 
         .status-icon {
-          width: 14px;
-          height: 14px;
-
-          margin-right: 2px;
+          margin-right: 3px;
 
           position: relative;
-          bottom: 2px;
-
-          font-size: 14px;
-          line-height: 14px;
+          bottom: 1px;
         }
 
-        .status-icon.ui-preview {
+        .ui-preview, .ui-preview-text {
           height: @font-size-base * 0.66;
-          width: @font-size-base * 0.66;
 
           position: relative;
-          bottom: -3px;
+          bottom: 0px;
+
+          font-size: @font-size-base * 0.66;
+          line-height: @font-size-base * 0.66;
         }
 
-        .status-label.ui-preview {
-          height: @font-size-base * 0.66;
+        .status-icon.ui-preview {
+          width: @font-size-base * 0.66;
+          margin-right: 0px;
+          bottom: 0px;
         }
       }
     }
@@ -107,13 +109,6 @@
     height: @font-size-large;
   }
 
-  .user-subscript .ui-preview-text {
-    height: @font-size-base * 0.66;
-
-    position: relative;
-    top: 0px;
-  }
-
   .user-card-stats .ui-preview-text {
     height: @font-size-small;
     width: 14px;
@@ -124,4 +119,27 @@
     font-size: @font-size-small;
     line-height: @font-size-small;
   }
+}
+
+
+// compact down user card on mobile
+@media screen and (max-width: @screen-sm-max) {
+  .user-card {
+    .user-details {
+      .user-avatar img {
+        width: 46px;
+        height: 46px;
+      }
+
+      .user-name {
+        margin-left: 58px;
+        margin-top: @padding-small-vertical;
+        margin-bottom: @padding-base-vertical;
+      }
+
+      .user-subscript {
+        margin-left: 58px;
+      }
+    }
+  }
 }

+ 1 - 1
frontend/style/misago/variables.less

@@ -42,7 +42,7 @@
 //
 @user-status-banned:      @brand-danger;
 @user-status-online:      @brand-success;
-@user-status-offline:     @gray-lighter;
+@user-status-offline:     @gray-light;
 
 
 //== User status colors

+ 6542 - 1
misago/static/misago/css/misago.css

@@ -1 +1,6542 @@
-/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */.btn,.caret,img{vertical-align:middle}hr,img{border:0}body,figure{margin:0}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}.img-thumbnail,.table,label{max-width:100%}.alerts-snackbar,.form-control-feedback,a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.dropdown-toggle.btn-danger,.open>.dropdown-toggle.btn-default,.open>.dropdown-toggle.btn-info,.open>.dropdown-toggle.btn-primary,.open>.dropdown-toggle.btn-warning{background-image:none}.img-thumbnail,body{background-color:#fff}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}dl,ol,ul{margin-top:0}.lead,address,dl{margin-bottom:20px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{font-size:16px;font-weight:300;line-height:1.4}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt,kbd kbd,label{font-weight:700}address,blockquote .small,blockquote footer,blockquote small,dd,dt,pre{line-height:1.42857143}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:9px;border-bottom:1px solid #eee}ol,ul{margin-bottom:10px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;color:#777}legend,pre{display:block;color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}code,kbd{padding:2px 4px;font-size:90%}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{font-style:normal}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;box-shadow:none}pre{padding:9.5px;margin:0 0 10px;font-size:13px;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.container,.container-fluid{padding-left:15px;padding-right:15px}.badge,.btn,.dropdown-header,.material-icon{white-space:nowrap}.pre-scrollable{overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{margin:0;min-width:0}legend{width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px}.media-object.img-thumbnail,.nav>li>a>img{max-width:none}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}.form-control,output{font-size:14px;line-height:1.42857143;color:#555;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:34px;padding:6px 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px\9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.form-group-sm .form-control,.input-sm{padding:5px 10px;border-radius:3px;font-size:12px}.input-sm{height:30px;line-height:1.5}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;line-height:1.5}.form-group-lg .form-control,.input-lg{border-radius:6px;padding:10px 16px;font-size:18px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;line-height:1.3333333}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;line-height:1.3333333}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.collapsing,.dropdown,.dropup{position:relative}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.btn-block,input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;touch-action:manipulation;cursor:pointer;border:1px solid transparent;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle,.btn.active,.btn:active,.dropdown-toggle:focus,.modal,.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus,.modal-content,.navbar-toggle:focus,.open>a{outline:0}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block}.btn-block+.btn-block{margin-top:5px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu-right,.dropdown-menu.pull-right{left:auto;right:0}.nav>li,.nav>li>a,.open>.dropdown-menu{display:block}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-header,.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.nav>li.disabled>a{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.nav>li,.nav>li>a,.navbar{position:relative}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}.modal,.modal-backdrop{bottom:0;right:0;left:0;top:0}@media (min-width:768px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.nav-justified>.dropdown .dropdown-menu,.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px;margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0;border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li{float:none}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{min-height:50px;border:1px solid transparent}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.modal,.modal-open,.progress{overflow:hidden}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:8px -15px}@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.progress-bar{float:left}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#080808;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.progress-bar{width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-striped .progress-bar-info,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.badge,.material-icon{vertical-align:middle}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child:not(:first-child){border-radius:0 0 4px 4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.badge,.pager{text-align:center}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.badge,.close{font-weight:700;line-height:1}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.pager{padding-left:0;margin:20px 0;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.close,.list-group-item>.badge{float:right}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{font-size:21px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;color:#fff;background-color:#777;border-radius:10px}.badge:empty,.modal{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.modal{position:fixed;z-index:1050;-webkit-overflow-scrolling:touch}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.alerts-snackbar,.auth-message{transition:top .3s ease;width:100%}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.affix,.auth-message{position:fixed}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.material-icon,.user-dropdown .dropdown-header strong{font-weight:400}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}.navbar.navbar-misago{min-height:auto}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}.alerts-snackbar p,.navbar .navbar-full .navbar-brand>*{display:inline-block}.auth-message{background-color:#eee;padding:20px 0;top:-100%;left:0;z-index:1070}.auth-message.show{top:0;bottom:auto}.auth-message p{padding:5px 0;color:#222}@media screen and (max-width:991px){.auth-message{text-align:center}.auth-message .btn{padding:10px 16px;font-size:18px}}.alerts-snackbar{position:fixed;top:-100%;z-index:1060;text-align:center;font-size:18px}.nav-side>a>.material-icon,.navbar ul.navbar-compact-nav>li>a>.material-icon{font-size:24px;line-height:24px}.alerts-snackbar.in{top:0;transition:top .2s ease}.alerts-snackbar p{border-radius:0 0 4px 4px;margin:0;pointer-events:all}.loader{width:100%;height:49px;text-align:center}.loader.loader-spaced{margin:40px 0}.loader-spinning-wheel{width:49px;height:49px;margin:0 auto;border:3px solid #777;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:cssload-spin 575ms infinite linear;-o-animation:cssload-spin 575ms infinite linear;-ms-animation:cssload-spin 575ms infinite linear;-webkit-animation:cssload-spin 575ms infinite linear;-moz-animation:cssload-spin 575ms infinite linear}@keyframes cssload-spin{100%{transform:rotate(360deg)}}@-o-keyframes cssload-spin{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes cssload-spin{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes cssload-spin{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes cssload-spin{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}.navbar{margin-bottom:0}.navbar .navbar-full .navbar-brand img{height:16px}.navbar .navbar-full .nav-guest,.navbar .navbar-full .nav-user{float:right}.navbar .navbar-full .nav-guest .navbar-btn,.navbar .navbar-full .nav-user .navbar-btn{margin-left:15px}.navbar .navbar-full .nav-user .dropdown-toggle{padding:8px}.navbar .navbar-full .nav-user .dropdown-toggle img{width:34px;height:34px}.navbar ul.navbar-compact-nav{margin:0;display:table;width:100%}.navbar ul.navbar-compact-nav>li{display:table-cell}.navbar ul.navbar-compact-nav>li>a,.navbar ul.navbar-compact-nav>li>button{background:0 0;border:none;margin:0;padding-top:10px;padding-bottom:10px;width:100%;color:#777;text-align:center}.navbar ul.navbar-compact-nav>li>a:focus,.navbar ul.navbar-compact-nav>li>a:hover,.navbar ul.navbar-compact-nav>li>button:focus,.navbar ul.navbar-compact-nav>li>button:hover{color:#333;background-color:transparent}.navbar ul.navbar-compact-nav>li>a>img,.navbar ul.navbar-compact-nav>li>button>img{width:24px;height:24px}.navbar ul.navbar-compact-nav>li>button{padding-top:10px;padding-bottom:10px}.nav-side>a>.material-icon{margin:-5px 10px -5px -5px;position:relative;bottom:2px;width:24px;height:24px}@font-face{font-family:'Material Icons';font-style:normal;font-weight:400;src:url(../fonts/MaterialIcons-Regular.eot);src:local('Material Icons'),local('MaterialIcons-Regular'),url(../fonts/MaterialIcons-Regular.woff2) format('woff2'),url(../fonts/MaterialIcons-Regular.woff) format('woff'),url(../fonts/MaterialIcons-Regular.ttf) format('truetype')}.material-icon{font-family:'Material Icons';font-style:normal;display:inline-block;width:1em;height:1em;line-height:1;text-align:center;text-transform:none;letter-spacing:normal;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga'}@media screen and (max-width:991px){.modal-message{text-align:center}.modal-message .message-icon{margin:30px}.modal-message .message-icon .material-icon{font-size:160px}}@media screen and (min-width:992px){.modal-message .modal-body{padding-top:20px;padding-bottom:30px}.modal-message .message-icon{float:left;position:relative;left:7px}.modal-message .message-icon .material-icon{font-size:50px}.modal-message .message-body{margin-left:75px;margin-top:10px}.modal-message .message-body p{margin-top:20px}.modal-message .message-body .lead{margin-top:0;margin-bottom:0}}.modal-loader{padding:50px 0}.modal-loader .loader{width:100%;height:80px;text-align:center}.modal-loader .loader-spinning-wheel{width:80px;height:80px}.modal-register .modal-footer a{float:left;margin-top:6.67px}@media screen and (max-width:991px){.modal-register .modal-footer{text-align:center}.modal-register .modal-footer a{display:block}.modal-register .modal-footer .btn{display:block;float:none;margin-top:10px;width:100%}}.has-feedback .material-icon.form-control-feedback{top:6px;right:24px;font-size:1.42857143;line-height:1.42857143}.well.well-form.well-done{font-size:18px;text-align:center}.well.well-form.well-done .message-icon{margin-bottom:10px;font-size:90px;line-height:90px}.well.well-form.well-done .message-body{margin-bottom:6.67px}.well.well-form.well-noscript{font-size:18px;text-align:center}.well.well-form.well-noscript .message-icon{margin-bottom:10px;font-size:90px;line-height:90px}.btn.btn-select,.btn.btn-yes-no{background:0 0;border:1px solid #eee}.btn.btn-select .material-icon,.btn.btn-yes-no .material-icon{margin:-4px 8px -4px 0;position:relative;bottom:1px;width:20px;height:20px;font-size:20px;line-height:20px}input.hidden-file-upload{position:absolute;top:-9999px;left:-9999px}.form-search{position:relative}.form-search .form-control{padding-right:30px}.form-search .material-icon{position:absolute;top:5px;right:5px;color:#777;font-size:24px;line-height:24px;pointer-events:none}.btn.btn-loading,.btn.btn-loading:active,.btn.btn-loading:focus,.btn.btn-loading:hover,.btn.btn-loading:link,.btn.btn-loading:visited{color:transparent}.btn.btn-loading .loader,.btn.btn-loading:active .loader,.btn.btn-loading:focus .loader,.btn.btn-loading:hover .loader,.btn.btn-loading:link .loader,.btn.btn-loading:visited .loader{height:20px;margin-top:-20px}.btn.btn-loading .loader>div,.btn.btn-loading:active .loader>div,.btn.btn-loading:focus .loader>div,.btn.btn-loading:hover .loader>div,.btn.btn-loading:link .loader>div,.btn.btn-loading:visited .loader>div{width:20px;height:20px}.btn.btn-loading.btn-default .loader>div{border-top-color:#333;border-bottom-color:#333}.btn.btn-loading.btn-danger .loader>div,.btn.btn-loading.btn-info .loader>div,.btn.btn-loading.btn-primary .loader>div,.btn.btn-loading.btn-success .loader>div,.btn.btn-loading.btn-warning .loader>div{border-top-color:#fff;border-bottom-color:#fff}.btn .material-icon{margin-right:3px;position:relative;bottom:1px}.dropdown-menu>li>.btn-link,.dropdown-menu>li>a{display:block;border:none;clear:both;float:none;padding:4px 20px;width:100%;color:#333;font-weight:400;line-height:1.42857143;text-align:left;white-space:nowrap}.pager-more,.pager-progress-bar,.panel-body-loading,.toolbar>p,.user-dropdown .guest-preview{text-align:center}.dropdown-menu>li>.btn-link:focus,.dropdown-menu>li>.btn-link:hover,.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#f5f5f5;color:#262626;text-decoration:none}.dropdown-menu>li>.btn-link .material-icon,.dropdown-menu>li>a .material-icon{margin:-2px 7px -2px 0;position:relative;bottom:1px;font-size:18px}.dropdown-menu>li>.btn-link .badge,.dropdown-menu>li>a .badge{float:right}.dropdown-menu{width:210px}.dropdown-menu .dropdown-footer{padding:6px 20px}.dropdown-menu .dropdown-buttons{padding:2px 20px}.dropdown-menu .dropdown-buttons .btn{margin:4px 0}.compact-nav,.mobile-dropdown{position:static;margin:0;overflow:auto}.compact-nav.open,.mobile-dropdown.open{margin-bottom:20px}.compact-nav.open{margin-top:-20px}.compact-nav.open>.dropdown-menu,.mobile-dropdown.open>.dropdown-menu{border:none;border-radius:0;-webkit-box-shadow:none;box-shadow:none;display:block;margin:0;width:100%;position:static}.user-dropdown .guest-preview .row{margin:0}.navbar .user-dropdown{width:240px}.user-dropdown .dropdown-header{padding:6px 20px;font-size:18px}.page-header{margin:0 0 20px}.page-header .btn-aligned{float:right;margin-top:23px;margin-left:8px}@media screen and (max-width:991px){.container h1{font-size:22.5px}.container .btn-aligned{float:right;margin-top:13px}.container .btn-icon .material-icon{width:24px;height:24px;font-size:24px;line-height:24px}}.header-stats .list-inline li{margin-right:8px}.header-stats .list-inline li .status-icon{width:18px;height:18px;margin-right:4px;position:relative;bottom:1px;font-size:18px;line-height:18px}@media screen and (max-width:991px){.header-stats .list-inline{margin-top:10px;margin-bottom:0;font-size:12px}}.page-header .page-tabs .nav>li{margin:0}.page-header .page-tabs .nav>li>a{border-radius:0}@media screen and (max-width:991px){.page-header .page-tabs{margin-top:9px;margin-bottom:-9px}.page-header .page-tabs .container{padding:0;width:100%}.page-header .page-tabs .container .nav-pills li{display:block;float:inherit;width:auto}.panel-message-body{text-align:center}.panel-message-body .message-icon{margin:30px}.panel-message-body .message-icon .material-icon{font-size:160px}}.pager-progress-bar li,.ui-preview-text{display:inline-block}@media screen and (min-width:992px){.page-header.tabbed{padding-bottom:0}.panel-message-body{padding:20px 20px 30px}.panel-message-body .message-icon{float:left}.panel-message-body .message-icon .material-icon{font-size:50px}.panel-message-body .message-body{margin-left:75px;margin-top:10px}.panel-message-body .message-body .lead{margin-bottom:0}.panel-message-body .message-body .help-block{margin-top:13.2px}}.panel-body-loading{padding:0}.misago-footer{margin-top:30px;margin-bottom:50px}.misago-footer .footer-content{border-top:1px solid #eee;padding-top:30px}.misago-footer .noscript-message .material-icon{position:relative;bottom:1px;font-size:18px}.ui-preview,.ui-preview-img,.ui-preview-text{background:#fafafa;border-radius:5px;color:#fafafa;-webkit-animation:ui-preview-animation 1.5s linear infinite;-o-animation:ui-preview-animation 1.5s linear infinite;animation:ui-preview-animation 1.5s linear infinite}@-webkit-keyframes ui-preview-animation{0%,100%{background:#fafafa;color:#fafafa}50%{background:#e0e0e0;color:#e0e0e0}}@keyframes ui-preview-animation{0%,100%{background:#fafafa;color:#fafafa}50%{background:#e0e0e0;color:#e0e0e0}}.user-card,.user-card .user-card-bg-image{background:#fff}.ui-preview-text{border-radius:100px;height:14px;position:relative;top:3px}.ui-preview-paragraph .ui-preview-text{margin-right:6px}.ui-preview-paragraph .ui-preview-text:last-child{margin-right:0}.ui-preview .list-group{padding:1px}.ui-preview .list-group>li{border:none;margin-bottom:1px}.ui-preview .list-group>li:last-child{margin-bottom:0}.pager-undercontent{margin-top:-20px}.pager-progress-bar{list-style:none;margin:-46px 0 0;padding:0;overflow:auto}.pager-progress-bar li a{padding:0 6px}.pager-progress-bar li.active a{font-weight:700}@media screen and (max-width:991px){.pager-more .btn{display:block;text-align:center}}@media screen and (min-width:992px){.pager-more .btn{padding-left:20px;padding-right:20px}}.user-status.user-banned .status-icon{color:#d9534f}.user-status.user-online .status-icon{color:#5cb85c}.user-status.user-offline .status-icon{color:#eee}.user-status>.status-icon.ui-preview{display:inline-block;border-radius:100px;width:20px;height:20px;font-weight:0}.user-status>.status-label.ui-preview{display:inline-block;margin-left:6px;width:40px}.user-card{border:1px solid #eee;border-radius:6px;margin-bottom:20px;overflow:hidden}.user-card .user-card-bg-image>img{display:none}.user-card .user-details{padding:6px 12px;overflow:auto}.user-card .user-details .user-avatar{float:left}.user-card .user-details .user-avatar img{width:60px;height:60px}.user-card .user-details .user-name{margin-left:76px}.user-card .user-details .user-name .item-title{font-size:18px}.user-card .user-details .user-subscript{margin-left:76px;overflow:auto;color:#777;font-size:9.24px}.item-title,a.item-title:active,a.item-title:hover,a.item-title:link,a.item-title:visited{color:#333;font-weight:700}.user-card .user-details .user-subscript>*{display:block;float:left;margin-right:8px}.user-card .user-details .user-subscript>* .status-icon{width:14px;height:14px;margin-right:2px;position:relative;bottom:2px;font-size:14px;line-height:14px}.user-card .user-details .user-subscript>* .status-icon.ui-preview{height:9.24px;width:9.24px;position:relative;bottom:-3px}.user-card .user-details .user-subscript>* .status-label.ui-preview{height:9.24px}.user-card .user-card-stats{border-top:1px solid #eee;display:table;table-layout:fixed;width:100%}.user-card .user-card-stats ul{display:table-row}.user-card .user-card-stats ul li{display:table-cell;overflow:auto;padding:6px 12px;font-size:12px;font-weight:700;text-align:center}.user-card.ui-preview .user-name .ui-preview-text{height:18px}.user-card.ui-preview .user-subscript .ui-preview-text{height:9.24px;position:relative;top:0}.user-card.ui-preview .user-card-stats .ui-preview-text{height:12px;width:14px;position:relative;top:0;font-size:12px;line-height:12px}.toolbar{display:block;overflow:auto;margin-bottom:10px}.toolbar.toolbar-bottom{margin-top:10px;margin-bottom:20px}.toolbar>h3{font-size:18px}.toolbar>p{padding:6px 0}@media screen and (min-width:992px){.toolbar .toolbar-left{float:left}.toolbar .toolbar-right{float:right}.toolbar .toolbar-bottom>.form-control,.toolbar .toolbar-control{margin:0;width:auto}.toolbar>h3,.toolbar>p{min-height:34px;margin:0;padding-top:6px;text-align:left}}.item-title{text-decoration:none}a.item-title:hover{text-decoration:underline}.message-line{text-align:center}.message-line .material-icon{margin-right:6.67px;font-size:20px;line-height:20px;height:20px;width:20px}.modal-change-avatar .modal-avatar-index .avatar-preview{border-radius:6px;margin:0 auto;overflow:hidden;position:relative;width:200px;height:200px}.category-last-activity,.category-last-activity .thread-message,.list-inline.subcategories-list{overflow:auto}.modal-change-avatar .modal-avatar-index .avatar-preview .loader{display:none;position:absolute;top:50px;height:100px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel{border-width:10px;border-color:#fff transparent;width:100px;height:100px}.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading img{opacity:.33;filter:alpha(opacity=33)}.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading .loader{display:block}@media (max-width:767px){.modal-change-avatar .modal-avatar-index .avatar-preview{margin-bottom:20px;width:150px;height:150px}.modal-change-avatar .modal-avatar-index .avatar-preview img{width:150px;height:150px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader{top:25px;height:100px}.modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel{width:100px;height:100px}}.modal-change-avatar .modal-avatar-index .btn{text-align:left}.modal-change-avatar .modal-avatar-upload{text-align:center}.modal-change-avatar .modal-avatar-upload .btn-pick-file{background:0 0;border:2px solid #eee;border-radius:6px;padding:10px 24px;-webkit-box-shadow:none;box-shadow:none;color:#777;font-size:18px;text-align:center}.modal-change-avatar .modal-avatar-upload .btn-pick-file>.material-icon{display:block;margin:0 auto 13.2px;font-size:50px;width:50px;height:50px}.modal-change-avatar .modal-avatar-upload .btn-pick-file:active,.modal-change-avatar .modal-avatar-upload .btn-pick-file:hover{border-color:#777}.modal-change-avatar .modal-avatar-upload .text-muted{margin-top:13.2px}.modal-change-avatar .modal-avatar-upload .upload-progress img{border-radius:4px;margin-bottom:20px;max-height:80px;width:auto}.modal-change-avatar .modal-avatar-upload .upload-progress .progress{width:70%;margin:0 auto}.modal-avatar-crop .crop-form{margin:0 auto}.modal-avatar-crop .crop-form .cropit-image-zoom-input{margin-top:10px;-webkit-appearance:none;border:1px solid #fff;width:100%}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-runnable-track{width:100%;height:8px;background:#eee;border:none;border-radius:3px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-thumb{-webkit-appearance:none;border:none;height:20px;width:20px;border-radius:50%;background:#777;margin-top:-6px}.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-webkit-slider-runnable-track{background:#eee}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-track{width:100%;height:8px;background:#eee;border:none;border-radius:4px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-thumb{border:none;height:20px;width:20px;border-radius:50%;background:#777}.modal-avatar-crop .crop-form .cropit-image-zoom-input:-moz-focusring{outline:#fff solid 1px;outline-offset:-1px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-track{width:100%;height:8px;background:0 0;border-color:transparent;border-width:8px 0;color:transparent}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-lower{background:#eee;border-radius:16px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-upper{background:#eee;border-radius:16px}.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-thumb{border:none;height:20px;width:20px;border-radius:50%;background:#777}.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-lower{background:#eee}.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-upper{background:#eee}.modal-change-avatar .modal-avatar-gallery{padding-bottom:0}.modal-change-avatar .modal-avatar-gallery .avatars-gallery{margin-bottom:20px}.modal-change-avatar .modal-avatar-gallery .avatars-gallery h3{margin-top:0}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .row{margin-bottom:10px}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn{border-radius:6px;border:2px solid #eee;background:0 0;padding:2px}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:focus,.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:hover{border-color:#777}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn.avatar-selected,.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:active{border-color:#337ab7}.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn img{border-radius:4px;width:100%}.list-inline.subcategories-list li{display:block;float:left}.list-inline.subcategories-list li a,.list-inline.subcategories-list li a:active,.list-inline.subcategories-list li a:focus,.list-inline.subcategories-list li a:hover,.list-inline.subcategories-list li a:link,.list-inline.subcategories-list li a:visited{background-color:#eee;border:1px solid #e2e2e2;border-radius:4px;display:inline-block;padding:6px 12px;color:#555}.list-inline.subcategories-list li a:active,.list-inline.subcategories-list li a:hover,.list-inline.subcategories-list li:focus{background-color:#e2e2e2;color:#333;text-decoration:none}.panel-category .panel-heading.heading-alone{border-radius:4px;border-bottom:none}.panel-category .panel-title,.panel-category h4{overflow:auto;margin:0;padding:0;font-size:18px}.panel-category .panel-title a,.panel-category h4 a{display:block;float:left;margin-top:1px}.panel-category .panel-title .read-status,.panel-category h4 .read-status{float:left}.panel-category .panel-title .read-status .material-icon,.panel-category h4 .read-status .material-icon{margin:0 4px 0 0;width:26px;position:relative;bottom:1px;color:#777;font-size:24px;line-height:24px;text-align:center}.panel-category .panel-title .read-status.item-new .material-icon,.panel-category h4 .read-status.item-new .material-icon{color:#5cb85c}.panel-category .category-description p:last-child,.panel-category .subcategory-description p:last-child{margin-bottom:0}.panel-category .subcategory-description{margin-top:10px;font-size:12px}.panel-category .category-subcategories .subcategories-list{margin-top:10px}.panel-category .category-subcategories .subcategories-list a,.panel-category .category-subcategories .subcategories-list a:active,.panel-category .category-subcategories .subcategories-list a:focus,.panel-category .category-subcategories .subcategories-list a:hover,.panel-category .category-subcategories .subcategories-list a:link,.panel-category .category-subcategories .subcategories-list a:visited{padding:5px 10px;font-size:12px}.category-last-activity li{display:block;float:left}.category-last-activity .thread-message .material-icon{display:block;float:left;margin-right:4px;position:relative;top:1px;font-size:18px;line-height:18px}@media screen and (max-width:991px){.panel-category .panel-title,.panel-category h4{margin-top:3px}.panel-category .category-stats{display:none}.panel-category .category-last-activity{margin-bottom:0}.panel-category .category-last-activity .thread-title{float:none;clear:both;overflow:hidden;margin-top:10px;margin-bottom:4px;padding-right:0;white-space:nowrap;text-overflow:ellipsis}.panel-category .category-last-activity .poster-name,.panel-category .category-last-activity .thread-date{font-size:12px}.panel-category .category-last-activity .thread-date{position:relative;top:1px}.panel-category .thread-message{padding-top:4px;font-size:small}.panel-category .thread-message .material-icon{position:relative;top:-1px}}@media screen and (min-width:992px){.panel-category .category-stats{float:right;margin:-23px 0 0;overflow:auto}.panel-category .category-stats li{display:block;float:left}.panel-category .category-last-activity{margin-top:4px;margin-bottom:0}}@media screen and (max-width:991px){.page-error .message-panel,.page-message .message-panel{text-align:center}.page-error .message-icon,.page-message .message-icon{margin:30px}.page-error .message-icon .material-icon,.page-message .message-icon .material-icon{font-size:160px}}@media screen and (min-width:992px){.page-error .message-panel,.page-message .message-panel{margin:60px auto;max-width:779.35px;overflow:auto}.page-error .message-icon,.page-message .message-icon{float:left}.page-error .message-icon .material-icon,.page-message .message-icon .material-icon{font-size:80px}.page-error .message-body,.page-message .message-body{margin-top:4px;margin-left:100px}}.threads-list{margin-bottom:20px}.active-posters li{display:block;overflow:auto}.active-posters .rank-user .rank-name,.active-posters .rank-user .user-title{font-size:12px}.active-posters .rank-user .status-icon{width:16px;height:16px;margin-right:2px;font-size:16px;line-height:16px}.active-posters .rank-position small,.active-posters .rank-posts-counted small,.active-posters .rank-posts-total small{color:#777}@media screen and (max-width:991px){.active-posters .rank-user-avatar{float:left}.active-posters .rank-user-avatar img{width:36px;height:36px;position:relative;top:3px}.active-posters .rank-user{float:left;margin-left:13.2px;width:40%}.active-posters .rank-user .user-name .item-title{margin-top:4px;font-size:14px}.active-posters .rank-user .rank-name{font-weight:400}.active-posters .rank-user .user-status{margin-right:4px}.active-posters .rank-user .user-status .status-icon{position:relative;top:-1px}.active-posters .rank-user .user-status .status-icon.ui-preview{position:relative;top:1px}.active-posters .rank-position,.active-posters .rank-posts-counted,.active-posters .rank-posts-total{float:right;width:40%;position:relative;bottom:2px;line-height:14px}.active-posters .rank-position small,.active-posters .rank-position strong,.active-posters .rank-posts-counted small,.active-posters .rank-posts-counted strong,.active-posters .rank-posts-total small,.active-posters .rank-posts-total strong{display:inline-block;font-size:9.24px;line-height:9.24px}.active-posters .rank-position strong,.active-posters .rank-posts-counted strong,.active-posters .rank-posts-total strong{width:34px;padding-right:4px;text-align:right;font-weight:400}.active-posters.ui-preview .rank-user .rank-name{position:relative;bottom:1px}.active-posters.ui-preview .rank-user .rank-name .ui-preview-text{height:12px}.active-posters.ui-preview .rank-position strong,.active-posters.ui-preview .rank-posts-counted strong,.active-posters.ui-preview .rank-posts-total strong{position:relative;bottom:3px}.active-posters.ui-preview .rank-position strong .ui-preview-text,.active-posters.ui-preview .rank-posts-counted strong .ui-preview-text,.active-posters.ui-preview .rank-posts-total strong .ui-preview-text{height:9.24px}}@media screen and (min-width:992px){.active-posters .rank-user .rank-name,.active-posters .rank-user .user-status{margin-right:12px}.active-posters.ui-preview .rank-user .user-status .status-icon{position:relative;top:2px}.active-posters li>*{float:left;padding-top:4px}.active-posters .rank-user-avatar{padding-top:0}.active-posters .rank-user{padding-top:0;padding-left:16px;width:25%}.active-posters .rank-user .user-name .item-title{margin-top:2px;font-size:18px}.active-posters .rank-user .user-status .status-icon{position:relative;top:-1px}.active-posters .rank-user .user-status .status-icon.ui-preview{top:2px}.active-posters .rank-user .user-status .status-label{font-size:12px;line-height:12px}.active-posters .rank-position,.active-posters .rank-posts-counted,.active-posters .rank-posts-total{width:23%;font-size:18px;font-weight:700;text-align:center}.active-posters .rank-position strong,.active-posters .rank-posts-counted strong,.active-posters .rank-posts-total strong{display:block}.active-posters .rank-position small,.active-posters .rank-posts-counted small,.active-posters .rank-posts-total small{display:block;font-size:12px;font-weight:400}}@media screen and (max-width:991px){.page-user-profile .page-header h1 img{width:40px;height:40px}.page-user-profile .page-header h1.pull-left img{margin-right:6px}.page-user-profile .page-header h1 .user-name{position:relative;top:2px}.page-user-profile .page-header .btn-aligned{position:relative;top:8px}.page-user-profile .page-header .header-stats ul{text-align:center}.page-user-profile .page-header .header-stats ul li{display:inline-block;white-space:nowrap}.page-user-profile .profile-side-avatar{display:none}}@media screen and (min-width:992px){.page-user-profile .page-header h1 img{display:none}.header-stats ul li{display:block;float:left}.page-user-profile .profile-side-avatar img{width:100%;height:auto;margin-top:-110px;margin-bottom:20px}}.username-history .username-change-avatar{float:left}.username-history .username-change-avatar a,.username-history .username-change-avatar span{margin-right:10px}.username-history .username-change-avatar a img,.username-history .username-change-avatar span img{width:42px;height:42px}.username-history .empty-message{text-align:center}.username-history .username-change{overflow:auto}.username-history .username-change span{display:block;float:left}.username-history .username-change .material-icon{margin:0 7px;position:relative;top:4px}.username-history .username-change-date{color:#777;font-size:12px}@media screen and (min-width:992px){.username-history li{display:block;overflow:auto}.username-history .username-change-avatar a img,.username-history .username-change-avatar span img{width:18px;height:18px;position:relative;bottom:1px}.username-history .username-change-author{float:left;width:30%}.username-history .username-change{float:left;width:40%}.username-history .username-change-date{float:left;width:20%}.username-history.ui-ready .username-change-date{position:relative;top:2px}}
+/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
+html {
+  font-family: sans-serif;
+  -ms-text-size-adjust: 100%;
+  -webkit-text-size-adjust: 100%;
+}
+body {
+  margin: 0;
+}
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+  display: block;
+}
+audio,
+canvas,
+progress,
+video {
+  display: inline-block;
+  vertical-align: baseline;
+}
+audio:not([controls]) {
+  display: none;
+  height: 0;
+}
+[hidden],
+template {
+  display: none;
+}
+a {
+  background-color: transparent;
+}
+a:active,
+a:hover {
+  outline: 0;
+}
+abbr[title] {
+  border-bottom: 1px dotted;
+}
+b,
+strong {
+  font-weight: bold;
+}
+dfn {
+  font-style: italic;
+}
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0;
+}
+mark {
+  background: #ff0;
+  color: #000;
+}
+small {
+  font-size: 80%;
+}
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+sup {
+  top: -0.5em;
+}
+sub {
+  bottom: -0.25em;
+}
+img {
+  border: 0;
+}
+svg:not(:root) {
+  overflow: hidden;
+}
+figure {
+  margin: 1em 40px;
+}
+hr {
+  box-sizing: content-box;
+  height: 0;
+}
+pre {
+  overflow: auto;
+}
+code,
+kbd,
+pre,
+samp {
+  font-family: monospace, monospace;
+  font-size: 1em;
+}
+button,
+input,
+optgroup,
+select,
+textarea {
+  color: inherit;
+  font: inherit;
+  margin: 0;
+}
+button {
+  overflow: visible;
+}
+button,
+select {
+  text-transform: none;
+}
+button,
+html input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  -webkit-appearance: button;
+  cursor: pointer;
+}
+button[disabled],
+html input[disabled] {
+  cursor: default;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  border: 0;
+  padding: 0;
+}
+input {
+  line-height: normal;
+}
+input[type="checkbox"],
+input[type="radio"] {
+  box-sizing: border-box;
+  padding: 0;
+}
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+input[type="search"] {
+  -webkit-appearance: textfield;
+  box-sizing: content-box;
+}
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+fieldset {
+  border: 1px solid #c0c0c0;
+  margin: 0 2px;
+  padding: 0.35em 0.625em 0.75em;
+}
+legend {
+  border: 0;
+  padding: 0;
+}
+textarea {
+  overflow: auto;
+}
+optgroup {
+  font-weight: bold;
+}
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+td,
+th {
+  padding: 0;
+}
+/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */
+@media print {
+  *,
+  *:before,
+  *:after {
+    background: transparent !important;
+    color: #000 !important;
+    box-shadow: none !important;
+    text-shadow: none !important;
+  }
+  a,
+  a:visited {
+    text-decoration: underline;
+  }
+  a[href]:after {
+    content: " (" attr(href) ")";
+  }
+  abbr[title]:after {
+    content: " (" attr(title) ")";
+  }
+  a[href^="#"]:after,
+  a[href^="javascript:"]:after {
+    content: "";
+  }
+  pre,
+  blockquote {
+    border: 1px solid #999;
+    page-break-inside: avoid;
+  }
+  thead {
+    display: table-header-group;
+  }
+  tr,
+  img {
+    page-break-inside: avoid;
+  }
+  img {
+    max-width: 100% !important;
+  }
+  p,
+  h2,
+  h3 {
+    orphans: 3;
+    widows: 3;
+  }
+  h2,
+  h3 {
+    page-break-after: avoid;
+  }
+  .navbar {
+    display: none;
+  }
+  .btn > .caret,
+  .dropup > .btn > .caret {
+    border-top-color: #000 !important;
+  }
+  .label {
+    border: 1px solid #000;
+  }
+  .table {
+    border-collapse: collapse !important;
+  }
+  .table td,
+  .table th {
+    background-color: #fff !important;
+  }
+  .table-bordered th,
+  .table-bordered td {
+    border: 1px solid #ddd !important;
+  }
+}
+* {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+*:before,
+*:after {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+html {
+  font-size: 10px;
+  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+body {
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 14px;
+  line-height: 1.42857143;
+  color: #333333;
+  background-color: #fff;
+}
+input,
+button,
+select,
+textarea {
+  font-family: inherit;
+  font-size: inherit;
+  line-height: inherit;
+}
+a {
+  color: #337ab7;
+  text-decoration: none;
+}
+a:hover,
+a:focus {
+  color: #23527c;
+  text-decoration: underline;
+}
+a:focus {
+  outline: thin dotted;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+figure {
+  margin: 0;
+}
+img {
+  vertical-align: middle;
+}
+.img-responsive {
+  display: block;
+  max-width: 100%;
+  height: auto;
+}
+.img-rounded {
+  border-radius: 6px;
+}
+.img-thumbnail {
+  padding: 4px;
+  line-height: 1.42857143;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  border-radius: 4px;
+  -webkit-transition: all 0.2s ease-in-out;
+  -o-transition: all 0.2s ease-in-out;
+  transition: all 0.2s ease-in-out;
+  display: inline-block;
+  max-width: 100%;
+  height: auto;
+}
+.img-circle {
+  border-radius: 50%;
+}
+hr {
+  margin-top: 20px;
+  margin-bottom: 20px;
+  border: 0;
+  border-top: 1px solid #eeeeee;
+}
+.sr-only {
+  position: absolute;
+  width: 1px;
+  height: 1px;
+  margin: -1px;
+  padding: 0;
+  overflow: hidden;
+  clip: rect(0, 0, 0, 0);
+  border: 0;
+}
+.sr-only-focusable:active,
+.sr-only-focusable:focus {
+  position: static;
+  width: auto;
+  height: auto;
+  margin: 0;
+  overflow: visible;
+  clip: auto;
+}
+[role="button"] {
+  cursor: pointer;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+.h1,
+.h2,
+.h3,
+.h4,
+.h5,
+.h6 {
+  font-family: inherit;
+  font-weight: 500;
+  line-height: 1.1;
+  color: inherit;
+}
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small,
+.h1 small,
+.h2 small,
+.h3 small,
+.h4 small,
+.h5 small,
+.h6 small,
+h1 .small,
+h2 .small,
+h3 .small,
+h4 .small,
+h5 .small,
+h6 .small,
+.h1 .small,
+.h2 .small,
+.h3 .small,
+.h4 .small,
+.h5 .small,
+.h6 .small {
+  font-weight: normal;
+  line-height: 1;
+  color: #777777;
+}
+h1,
+.h1,
+h2,
+.h2,
+h3,
+.h3 {
+  margin-top: 20px;
+  margin-bottom: 10px;
+}
+h1 small,
+.h1 small,
+h2 small,
+.h2 small,
+h3 small,
+.h3 small,
+h1 .small,
+.h1 .small,
+h2 .small,
+.h2 .small,
+h3 .small,
+.h3 .small {
+  font-size: 65%;
+}
+h4,
+.h4,
+h5,
+.h5,
+h6,
+.h6 {
+  margin-top: 10px;
+  margin-bottom: 10px;
+}
+h4 small,
+.h4 small,
+h5 small,
+.h5 small,
+h6 small,
+.h6 small,
+h4 .small,
+.h4 .small,
+h5 .small,
+.h5 .small,
+h6 .small,
+.h6 .small {
+  font-size: 75%;
+}
+h1,
+.h1 {
+  font-size: 36px;
+}
+h2,
+.h2 {
+  font-size: 30px;
+}
+h3,
+.h3 {
+  font-size: 24px;
+}
+h4,
+.h4 {
+  font-size: 18px;
+}
+h5,
+.h5 {
+  font-size: 14px;
+}
+h6,
+.h6 {
+  font-size: 12px;
+}
+p {
+  margin: 0 0 10px;
+}
+.lead {
+  margin-bottom: 20px;
+  font-size: 16px;
+  font-weight: 300;
+  line-height: 1.4;
+}
+@media (min-width: 768px) {
+  .lead {
+    font-size: 21px;
+  }
+}
+small,
+.small {
+  font-size: 85%;
+}
+mark,
+.mark {
+  background-color: #fcf8e3;
+  padding: .2em;
+}
+.text-left {
+  text-align: left;
+}
+.text-right {
+  text-align: right;
+}
+.text-center {
+  text-align: center;
+}
+.text-justify {
+  text-align: justify;
+}
+.text-nowrap {
+  white-space: nowrap;
+}
+.text-lowercase {
+  text-transform: lowercase;
+}
+.text-uppercase {
+  text-transform: uppercase;
+}
+.text-capitalize {
+  text-transform: capitalize;
+}
+.text-muted {
+  color: #777777;
+}
+.text-primary {
+  color: #337ab7;
+}
+a.text-primary:hover,
+a.text-primary:focus {
+  color: #286090;
+}
+.text-success {
+  color: #3c763d;
+}
+a.text-success:hover,
+a.text-success:focus {
+  color: #2b542c;
+}
+.text-info {
+  color: #31708f;
+}
+a.text-info:hover,
+a.text-info:focus {
+  color: #245269;
+}
+.text-warning {
+  color: #8a6d3b;
+}
+a.text-warning:hover,
+a.text-warning:focus {
+  color: #66512c;
+}
+.text-danger {
+  color: #a94442;
+}
+a.text-danger:hover,
+a.text-danger:focus {
+  color: #843534;
+}
+.bg-primary {
+  color: #fff;
+  background-color: #337ab7;
+}
+a.bg-primary:hover,
+a.bg-primary:focus {
+  background-color: #286090;
+}
+.bg-success {
+  background-color: #dff0d8;
+}
+a.bg-success:hover,
+a.bg-success:focus {
+  background-color: #c1e2b3;
+}
+.bg-info {
+  background-color: #d9edf7;
+}
+a.bg-info:hover,
+a.bg-info:focus {
+  background-color: #afd9ee;
+}
+.bg-warning {
+  background-color: #fcf8e3;
+}
+a.bg-warning:hover,
+a.bg-warning:focus {
+  background-color: #f7ecb5;
+}
+.bg-danger {
+  background-color: #f2dede;
+}
+a.bg-danger:hover,
+a.bg-danger:focus {
+  background-color: #e4b9b9;
+}
+.page-header {
+  padding-bottom: 9px;
+  margin: 40px 0 20px;
+  border-bottom: 1px solid #eeeeee;
+}
+ul,
+ol {
+  margin-top: 0;
+  margin-bottom: 10px;
+}
+ul ul,
+ol ul,
+ul ol,
+ol ol {
+  margin-bottom: 0;
+}
+.list-unstyled {
+  padding-left: 0;
+  list-style: none;
+}
+.list-inline {
+  padding-left: 0;
+  list-style: none;
+  margin-left: -5px;
+}
+.list-inline > li {
+  display: inline-block;
+  padding-left: 5px;
+  padding-right: 5px;
+}
+dl {
+  margin-top: 0;
+  margin-bottom: 20px;
+}
+dt,
+dd {
+  line-height: 1.42857143;
+}
+dt {
+  font-weight: bold;
+}
+dd {
+  margin-left: 0;
+}
+@media (min-width: 768px) {
+  .dl-horizontal dt {
+    float: left;
+    width: 160px;
+    clear: left;
+    text-align: right;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
+  .dl-horizontal dd {
+    margin-left: 180px;
+  }
+}
+abbr[title],
+abbr[data-original-title] {
+  cursor: help;
+  border-bottom: 1px dotted #777777;
+}
+.initialism {
+  font-size: 90%;
+  text-transform: uppercase;
+}
+blockquote {
+  padding: 10px 20px;
+  margin: 0 0 20px;
+  font-size: 17.5px;
+  border-left: 5px solid #eeeeee;
+}
+blockquote p:last-child,
+blockquote ul:last-child,
+blockquote ol:last-child {
+  margin-bottom: 0;
+}
+blockquote footer,
+blockquote small,
+blockquote .small {
+  display: block;
+  font-size: 80%;
+  line-height: 1.42857143;
+  color: #777777;
+}
+blockquote footer:before,
+blockquote small:before,
+blockquote .small:before {
+  content: '\2014 \00A0';
+}
+.blockquote-reverse,
+blockquote.pull-right {
+  padding-right: 15px;
+  padding-left: 0;
+  border-right: 5px solid #eeeeee;
+  border-left: 0;
+  text-align: right;
+}
+.blockquote-reverse footer:before,
+blockquote.pull-right footer:before,
+.blockquote-reverse small:before,
+blockquote.pull-right small:before,
+.blockquote-reverse .small:before,
+blockquote.pull-right .small:before {
+  content: '';
+}
+.blockquote-reverse footer:after,
+blockquote.pull-right footer:after,
+.blockquote-reverse small:after,
+blockquote.pull-right small:after,
+.blockquote-reverse .small:after,
+blockquote.pull-right .small:after {
+  content: '\00A0 \2014';
+}
+address {
+  margin-bottom: 20px;
+  font-style: normal;
+  line-height: 1.42857143;
+}
+code,
+kbd,
+pre,
+samp {
+  font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
+}
+code {
+  padding: 2px 4px;
+  font-size: 90%;
+  color: #c7254e;
+  background-color: #f9f2f4;
+  border-radius: 4px;
+}
+kbd {
+  padding: 2px 4px;
+  font-size: 90%;
+  color: #fff;
+  background-color: #333;
+  border-radius: 3px;
+  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+kbd kbd {
+  padding: 0;
+  font-size: 100%;
+  font-weight: bold;
+  box-shadow: none;
+}
+pre {
+  display: block;
+  padding: 9.5px;
+  margin: 0 0 10px;
+  font-size: 13px;
+  line-height: 1.42857143;
+  word-break: break-all;
+  word-wrap: break-word;
+  color: #333333;
+  background-color: #f5f5f5;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+}
+pre code {
+  padding: 0;
+  font-size: inherit;
+  color: inherit;
+  white-space: pre-wrap;
+  background-color: transparent;
+  border-radius: 0;
+}
+.pre-scrollable {
+  max-height: 340px;
+  overflow-y: scroll;
+}
+.container {
+  margin-right: auto;
+  margin-left: auto;
+  padding-left: 15px;
+  padding-right: 15px;
+}
+@media (min-width: 768px) {
+  .container {
+    width: 750px;
+  }
+}
+@media (min-width: 992px) {
+  .container {
+    width: 970px;
+  }
+}
+@media (min-width: 1200px) {
+  .container {
+    width: 1170px;
+  }
+}
+.container-fluid {
+  margin-right: auto;
+  margin-left: auto;
+  padding-left: 15px;
+  padding-right: 15px;
+}
+.row {
+  margin-left: -15px;
+  margin-right: -15px;
+}
+.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
+  position: relative;
+  min-height: 1px;
+  padding-left: 15px;
+  padding-right: 15px;
+}
+.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {
+  float: left;
+}
+.col-xs-12 {
+  width: 100%;
+}
+.col-xs-11 {
+  width: 91.66666667%;
+}
+.col-xs-10 {
+  width: 83.33333333%;
+}
+.col-xs-9 {
+  width: 75%;
+}
+.col-xs-8 {
+  width: 66.66666667%;
+}
+.col-xs-7 {
+  width: 58.33333333%;
+}
+.col-xs-6 {
+  width: 50%;
+}
+.col-xs-5 {
+  width: 41.66666667%;
+}
+.col-xs-4 {
+  width: 33.33333333%;
+}
+.col-xs-3 {
+  width: 25%;
+}
+.col-xs-2 {
+  width: 16.66666667%;
+}
+.col-xs-1 {
+  width: 8.33333333%;
+}
+.col-xs-pull-12 {
+  right: 100%;
+}
+.col-xs-pull-11 {
+  right: 91.66666667%;
+}
+.col-xs-pull-10 {
+  right: 83.33333333%;
+}
+.col-xs-pull-9 {
+  right: 75%;
+}
+.col-xs-pull-8 {
+  right: 66.66666667%;
+}
+.col-xs-pull-7 {
+  right: 58.33333333%;
+}
+.col-xs-pull-6 {
+  right: 50%;
+}
+.col-xs-pull-5 {
+  right: 41.66666667%;
+}
+.col-xs-pull-4 {
+  right: 33.33333333%;
+}
+.col-xs-pull-3 {
+  right: 25%;
+}
+.col-xs-pull-2 {
+  right: 16.66666667%;
+}
+.col-xs-pull-1 {
+  right: 8.33333333%;
+}
+.col-xs-pull-0 {
+  right: auto;
+}
+.col-xs-push-12 {
+  left: 100%;
+}
+.col-xs-push-11 {
+  left: 91.66666667%;
+}
+.col-xs-push-10 {
+  left: 83.33333333%;
+}
+.col-xs-push-9 {
+  left: 75%;
+}
+.col-xs-push-8 {
+  left: 66.66666667%;
+}
+.col-xs-push-7 {
+  left: 58.33333333%;
+}
+.col-xs-push-6 {
+  left: 50%;
+}
+.col-xs-push-5 {
+  left: 41.66666667%;
+}
+.col-xs-push-4 {
+  left: 33.33333333%;
+}
+.col-xs-push-3 {
+  left: 25%;
+}
+.col-xs-push-2 {
+  left: 16.66666667%;
+}
+.col-xs-push-1 {
+  left: 8.33333333%;
+}
+.col-xs-push-0 {
+  left: auto;
+}
+.col-xs-offset-12 {
+  margin-left: 100%;
+}
+.col-xs-offset-11 {
+  margin-left: 91.66666667%;
+}
+.col-xs-offset-10 {
+  margin-left: 83.33333333%;
+}
+.col-xs-offset-9 {
+  margin-left: 75%;
+}
+.col-xs-offset-8 {
+  margin-left: 66.66666667%;
+}
+.col-xs-offset-7 {
+  margin-left: 58.33333333%;
+}
+.col-xs-offset-6 {
+  margin-left: 50%;
+}
+.col-xs-offset-5 {
+  margin-left: 41.66666667%;
+}
+.col-xs-offset-4 {
+  margin-left: 33.33333333%;
+}
+.col-xs-offset-3 {
+  margin-left: 25%;
+}
+.col-xs-offset-2 {
+  margin-left: 16.66666667%;
+}
+.col-xs-offset-1 {
+  margin-left: 8.33333333%;
+}
+.col-xs-offset-0 {
+  margin-left: 0%;
+}
+@media (min-width: 768px) {
+  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
+    float: left;
+  }
+  .col-sm-12 {
+    width: 100%;
+  }
+  .col-sm-11 {
+    width: 91.66666667%;
+  }
+  .col-sm-10 {
+    width: 83.33333333%;
+  }
+  .col-sm-9 {
+    width: 75%;
+  }
+  .col-sm-8 {
+    width: 66.66666667%;
+  }
+  .col-sm-7 {
+    width: 58.33333333%;
+  }
+  .col-sm-6 {
+    width: 50%;
+  }
+  .col-sm-5 {
+    width: 41.66666667%;
+  }
+  .col-sm-4 {
+    width: 33.33333333%;
+  }
+  .col-sm-3 {
+    width: 25%;
+  }
+  .col-sm-2 {
+    width: 16.66666667%;
+  }
+  .col-sm-1 {
+    width: 8.33333333%;
+  }
+  .col-sm-pull-12 {
+    right: 100%;
+  }
+  .col-sm-pull-11 {
+    right: 91.66666667%;
+  }
+  .col-sm-pull-10 {
+    right: 83.33333333%;
+  }
+  .col-sm-pull-9 {
+    right: 75%;
+  }
+  .col-sm-pull-8 {
+    right: 66.66666667%;
+  }
+  .col-sm-pull-7 {
+    right: 58.33333333%;
+  }
+  .col-sm-pull-6 {
+    right: 50%;
+  }
+  .col-sm-pull-5 {
+    right: 41.66666667%;
+  }
+  .col-sm-pull-4 {
+    right: 33.33333333%;
+  }
+  .col-sm-pull-3 {
+    right: 25%;
+  }
+  .col-sm-pull-2 {
+    right: 16.66666667%;
+  }
+  .col-sm-pull-1 {
+    right: 8.33333333%;
+  }
+  .col-sm-pull-0 {
+    right: auto;
+  }
+  .col-sm-push-12 {
+    left: 100%;
+  }
+  .col-sm-push-11 {
+    left: 91.66666667%;
+  }
+  .col-sm-push-10 {
+    left: 83.33333333%;
+  }
+  .col-sm-push-9 {
+    left: 75%;
+  }
+  .col-sm-push-8 {
+    left: 66.66666667%;
+  }
+  .col-sm-push-7 {
+    left: 58.33333333%;
+  }
+  .col-sm-push-6 {
+    left: 50%;
+  }
+  .col-sm-push-5 {
+    left: 41.66666667%;
+  }
+  .col-sm-push-4 {
+    left: 33.33333333%;
+  }
+  .col-sm-push-3 {
+    left: 25%;
+  }
+  .col-sm-push-2 {
+    left: 16.66666667%;
+  }
+  .col-sm-push-1 {
+    left: 8.33333333%;
+  }
+  .col-sm-push-0 {
+    left: auto;
+  }
+  .col-sm-offset-12 {
+    margin-left: 100%;
+  }
+  .col-sm-offset-11 {
+    margin-left: 91.66666667%;
+  }
+  .col-sm-offset-10 {
+    margin-left: 83.33333333%;
+  }
+  .col-sm-offset-9 {
+    margin-left: 75%;
+  }
+  .col-sm-offset-8 {
+    margin-left: 66.66666667%;
+  }
+  .col-sm-offset-7 {
+    margin-left: 58.33333333%;
+  }
+  .col-sm-offset-6 {
+    margin-left: 50%;
+  }
+  .col-sm-offset-5 {
+    margin-left: 41.66666667%;
+  }
+  .col-sm-offset-4 {
+    margin-left: 33.33333333%;
+  }
+  .col-sm-offset-3 {
+    margin-left: 25%;
+  }
+  .col-sm-offset-2 {
+    margin-left: 16.66666667%;
+  }
+  .col-sm-offset-1 {
+    margin-left: 8.33333333%;
+  }
+  .col-sm-offset-0 {
+    margin-left: 0%;
+  }
+}
+@media (min-width: 992px) {
+  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {
+    float: left;
+  }
+  .col-md-12 {
+    width: 100%;
+  }
+  .col-md-11 {
+    width: 91.66666667%;
+  }
+  .col-md-10 {
+    width: 83.33333333%;
+  }
+  .col-md-9 {
+    width: 75%;
+  }
+  .col-md-8 {
+    width: 66.66666667%;
+  }
+  .col-md-7 {
+    width: 58.33333333%;
+  }
+  .col-md-6 {
+    width: 50%;
+  }
+  .col-md-5 {
+    width: 41.66666667%;
+  }
+  .col-md-4 {
+    width: 33.33333333%;
+  }
+  .col-md-3 {
+    width: 25%;
+  }
+  .col-md-2 {
+    width: 16.66666667%;
+  }
+  .col-md-1 {
+    width: 8.33333333%;
+  }
+  .col-md-pull-12 {
+    right: 100%;
+  }
+  .col-md-pull-11 {
+    right: 91.66666667%;
+  }
+  .col-md-pull-10 {
+    right: 83.33333333%;
+  }
+  .col-md-pull-9 {
+    right: 75%;
+  }
+  .col-md-pull-8 {
+    right: 66.66666667%;
+  }
+  .col-md-pull-7 {
+    right: 58.33333333%;
+  }
+  .col-md-pull-6 {
+    right: 50%;
+  }
+  .col-md-pull-5 {
+    right: 41.66666667%;
+  }
+  .col-md-pull-4 {
+    right: 33.33333333%;
+  }
+  .col-md-pull-3 {
+    right: 25%;
+  }
+  .col-md-pull-2 {
+    right: 16.66666667%;
+  }
+  .col-md-pull-1 {
+    right: 8.33333333%;
+  }
+  .col-md-pull-0 {
+    right: auto;
+  }
+  .col-md-push-12 {
+    left: 100%;
+  }
+  .col-md-push-11 {
+    left: 91.66666667%;
+  }
+  .col-md-push-10 {
+    left: 83.33333333%;
+  }
+  .col-md-push-9 {
+    left: 75%;
+  }
+  .col-md-push-8 {
+    left: 66.66666667%;
+  }
+  .col-md-push-7 {
+    left: 58.33333333%;
+  }
+  .col-md-push-6 {
+    left: 50%;
+  }
+  .col-md-push-5 {
+    left: 41.66666667%;
+  }
+  .col-md-push-4 {
+    left: 33.33333333%;
+  }
+  .col-md-push-3 {
+    left: 25%;
+  }
+  .col-md-push-2 {
+    left: 16.66666667%;
+  }
+  .col-md-push-1 {
+    left: 8.33333333%;
+  }
+  .col-md-push-0 {
+    left: auto;
+  }
+  .col-md-offset-12 {
+    margin-left: 100%;
+  }
+  .col-md-offset-11 {
+    margin-left: 91.66666667%;
+  }
+  .col-md-offset-10 {
+    margin-left: 83.33333333%;
+  }
+  .col-md-offset-9 {
+    margin-left: 75%;
+  }
+  .col-md-offset-8 {
+    margin-left: 66.66666667%;
+  }
+  .col-md-offset-7 {
+    margin-left: 58.33333333%;
+  }
+  .col-md-offset-6 {
+    margin-left: 50%;
+  }
+  .col-md-offset-5 {
+    margin-left: 41.66666667%;
+  }
+  .col-md-offset-4 {
+    margin-left: 33.33333333%;
+  }
+  .col-md-offset-3 {
+    margin-left: 25%;
+  }
+  .col-md-offset-2 {
+    margin-left: 16.66666667%;
+  }
+  .col-md-offset-1 {
+    margin-left: 8.33333333%;
+  }
+  .col-md-offset-0 {
+    margin-left: 0%;
+  }
+}
+@media (min-width: 1200px) {
+  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {
+    float: left;
+  }
+  .col-lg-12 {
+    width: 100%;
+  }
+  .col-lg-11 {
+    width: 91.66666667%;
+  }
+  .col-lg-10 {
+    width: 83.33333333%;
+  }
+  .col-lg-9 {
+    width: 75%;
+  }
+  .col-lg-8 {
+    width: 66.66666667%;
+  }
+  .col-lg-7 {
+    width: 58.33333333%;
+  }
+  .col-lg-6 {
+    width: 50%;
+  }
+  .col-lg-5 {
+    width: 41.66666667%;
+  }
+  .col-lg-4 {
+    width: 33.33333333%;
+  }
+  .col-lg-3 {
+    width: 25%;
+  }
+  .col-lg-2 {
+    width: 16.66666667%;
+  }
+  .col-lg-1 {
+    width: 8.33333333%;
+  }
+  .col-lg-pull-12 {
+    right: 100%;
+  }
+  .col-lg-pull-11 {
+    right: 91.66666667%;
+  }
+  .col-lg-pull-10 {
+    right: 83.33333333%;
+  }
+  .col-lg-pull-9 {
+    right: 75%;
+  }
+  .col-lg-pull-8 {
+    right: 66.66666667%;
+  }
+  .col-lg-pull-7 {
+    right: 58.33333333%;
+  }
+  .col-lg-pull-6 {
+    right: 50%;
+  }
+  .col-lg-pull-5 {
+    right: 41.66666667%;
+  }
+  .col-lg-pull-4 {
+    right: 33.33333333%;
+  }
+  .col-lg-pull-3 {
+    right: 25%;
+  }
+  .col-lg-pull-2 {
+    right: 16.66666667%;
+  }
+  .col-lg-pull-1 {
+    right: 8.33333333%;
+  }
+  .col-lg-pull-0 {
+    right: auto;
+  }
+  .col-lg-push-12 {
+    left: 100%;
+  }
+  .col-lg-push-11 {
+    left: 91.66666667%;
+  }
+  .col-lg-push-10 {
+    left: 83.33333333%;
+  }
+  .col-lg-push-9 {
+    left: 75%;
+  }
+  .col-lg-push-8 {
+    left: 66.66666667%;
+  }
+  .col-lg-push-7 {
+    left: 58.33333333%;
+  }
+  .col-lg-push-6 {
+    left: 50%;
+  }
+  .col-lg-push-5 {
+    left: 41.66666667%;
+  }
+  .col-lg-push-4 {
+    left: 33.33333333%;
+  }
+  .col-lg-push-3 {
+    left: 25%;
+  }
+  .col-lg-push-2 {
+    left: 16.66666667%;
+  }
+  .col-lg-push-1 {
+    left: 8.33333333%;
+  }
+  .col-lg-push-0 {
+    left: auto;
+  }
+  .col-lg-offset-12 {
+    margin-left: 100%;
+  }
+  .col-lg-offset-11 {
+    margin-left: 91.66666667%;
+  }
+  .col-lg-offset-10 {
+    margin-left: 83.33333333%;
+  }
+  .col-lg-offset-9 {
+    margin-left: 75%;
+  }
+  .col-lg-offset-8 {
+    margin-left: 66.66666667%;
+  }
+  .col-lg-offset-7 {
+    margin-left: 58.33333333%;
+  }
+  .col-lg-offset-6 {
+    margin-left: 50%;
+  }
+  .col-lg-offset-5 {
+    margin-left: 41.66666667%;
+  }
+  .col-lg-offset-4 {
+    margin-left: 33.33333333%;
+  }
+  .col-lg-offset-3 {
+    margin-left: 25%;
+  }
+  .col-lg-offset-2 {
+    margin-left: 16.66666667%;
+  }
+  .col-lg-offset-1 {
+    margin-left: 8.33333333%;
+  }
+  .col-lg-offset-0 {
+    margin-left: 0%;
+  }
+}
+table {
+  background-color: transparent;
+}
+caption {
+  padding-top: 8px;
+  padding-bottom: 8px;
+  color: #777777;
+  text-align: left;
+}
+th {
+  text-align: left;
+}
+.table {
+  width: 100%;
+  max-width: 100%;
+  margin-bottom: 20px;
+}
+.table > thead > tr > th,
+.table > tbody > tr > th,
+.table > tfoot > tr > th,
+.table > thead > tr > td,
+.table > tbody > tr > td,
+.table > tfoot > tr > td {
+  padding: 8px;
+  line-height: 1.42857143;
+  vertical-align: top;
+  border-top: 1px solid #ddd;
+}
+.table > thead > tr > th {
+  vertical-align: bottom;
+  border-bottom: 2px solid #ddd;
+}
+.table > caption + thead > tr:first-child > th,
+.table > colgroup + thead > tr:first-child > th,
+.table > thead:first-child > tr:first-child > th,
+.table > caption + thead > tr:first-child > td,
+.table > colgroup + thead > tr:first-child > td,
+.table > thead:first-child > tr:first-child > td {
+  border-top: 0;
+}
+.table > tbody + tbody {
+  border-top: 2px solid #ddd;
+}
+.table .table {
+  background-color: #fff;
+}
+.table-condensed > thead > tr > th,
+.table-condensed > tbody > tr > th,
+.table-condensed > tfoot > tr > th,
+.table-condensed > thead > tr > td,
+.table-condensed > tbody > tr > td,
+.table-condensed > tfoot > tr > td {
+  padding: 5px;
+}
+.table-bordered {
+  border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > tbody > tr > th,
+.table-bordered > tfoot > tr > th,
+.table-bordered > thead > tr > td,
+.table-bordered > tbody > tr > td,
+.table-bordered > tfoot > tr > td {
+  border: 1px solid #ddd;
+}
+.table-bordered > thead > tr > th,
+.table-bordered > thead > tr > td {
+  border-bottom-width: 2px;
+}
+.table-striped > tbody > tr:nth-of-type(odd) {
+  background-color: #f9f9f9;
+}
+.table-hover > tbody > tr:hover {
+  background-color: #f5f5f5;
+}
+table col[class*="col-"] {
+  position: static;
+  float: none;
+  display: table-column;
+}
+table td[class*="col-"],
+table th[class*="col-"] {
+  position: static;
+  float: none;
+  display: table-cell;
+}
+.table > thead > tr > td.active,
+.table > tbody > tr > td.active,
+.table > tfoot > tr > td.active,
+.table > thead > tr > th.active,
+.table > tbody > tr > th.active,
+.table > tfoot > tr > th.active,
+.table > thead > tr.active > td,
+.table > tbody > tr.active > td,
+.table > tfoot > tr.active > td,
+.table > thead > tr.active > th,
+.table > tbody > tr.active > th,
+.table > tfoot > tr.active > th {
+  background-color: #f5f5f5;
+}
+.table-hover > tbody > tr > td.active:hover,
+.table-hover > tbody > tr > th.active:hover,
+.table-hover > tbody > tr.active:hover > td,
+.table-hover > tbody > tr:hover > .active,
+.table-hover > tbody > tr.active:hover > th {
+  background-color: #e8e8e8;
+}
+.table > thead > tr > td.success,
+.table > tbody > tr > td.success,
+.table > tfoot > tr > td.success,
+.table > thead > tr > th.success,
+.table > tbody > tr > th.success,
+.table > tfoot > tr > th.success,
+.table > thead > tr.success > td,
+.table > tbody > tr.success > td,
+.table > tfoot > tr.success > td,
+.table > thead > tr.success > th,
+.table > tbody > tr.success > th,
+.table > tfoot > tr.success > th {
+  background-color: #dff0d8;
+}
+.table-hover > tbody > tr > td.success:hover,
+.table-hover > tbody > tr > th.success:hover,
+.table-hover > tbody > tr.success:hover > td,
+.table-hover > tbody > tr:hover > .success,
+.table-hover > tbody > tr.success:hover > th {
+  background-color: #d0e9c6;
+}
+.table > thead > tr > td.info,
+.table > tbody > tr > td.info,
+.table > tfoot > tr > td.info,
+.table > thead > tr > th.info,
+.table > tbody > tr > th.info,
+.table > tfoot > tr > th.info,
+.table > thead > tr.info > td,
+.table > tbody > tr.info > td,
+.table > tfoot > tr.info > td,
+.table > thead > tr.info > th,
+.table > tbody > tr.info > th,
+.table > tfoot > tr.info > th {
+  background-color: #d9edf7;
+}
+.table-hover > tbody > tr > td.info:hover,
+.table-hover > tbody > tr > th.info:hover,
+.table-hover > tbody > tr.info:hover > td,
+.table-hover > tbody > tr:hover > .info,
+.table-hover > tbody > tr.info:hover > th {
+  background-color: #c4e3f3;
+}
+.table > thead > tr > td.warning,
+.table > tbody > tr > td.warning,
+.table > tfoot > tr > td.warning,
+.table > thead > tr > th.warning,
+.table > tbody > tr > th.warning,
+.table > tfoot > tr > th.warning,
+.table > thead > tr.warning > td,
+.table > tbody > tr.warning > td,
+.table > tfoot > tr.warning > td,
+.table > thead > tr.warning > th,
+.table > tbody > tr.warning > th,
+.table > tfoot > tr.warning > th {
+  background-color: #fcf8e3;
+}
+.table-hover > tbody > tr > td.warning:hover,
+.table-hover > tbody > tr > th.warning:hover,
+.table-hover > tbody > tr.warning:hover > td,
+.table-hover > tbody > tr:hover > .warning,
+.table-hover > tbody > tr.warning:hover > th {
+  background-color: #faf2cc;
+}
+.table > thead > tr > td.danger,
+.table > tbody > tr > td.danger,
+.table > tfoot > tr > td.danger,
+.table > thead > tr > th.danger,
+.table > tbody > tr > th.danger,
+.table > tfoot > tr > th.danger,
+.table > thead > tr.danger > td,
+.table > tbody > tr.danger > td,
+.table > tfoot > tr.danger > td,
+.table > thead > tr.danger > th,
+.table > tbody > tr.danger > th,
+.table > tfoot > tr.danger > th {
+  background-color: #f2dede;
+}
+.table-hover > tbody > tr > td.danger:hover,
+.table-hover > tbody > tr > th.danger:hover,
+.table-hover > tbody > tr.danger:hover > td,
+.table-hover > tbody > tr:hover > .danger,
+.table-hover > tbody > tr.danger:hover > th {
+  background-color: #ebcccc;
+}
+.table-responsive {
+  overflow-x: auto;
+  min-height: 0.01%;
+}
+@media screen and (max-width: 767px) {
+  .table-responsive {
+    width: 100%;
+    margin-bottom: 15px;
+    overflow-y: hidden;
+    -ms-overflow-style: -ms-autohiding-scrollbar;
+    border: 1px solid #ddd;
+  }
+  .table-responsive > .table {
+    margin-bottom: 0;
+  }
+  .table-responsive > .table > thead > tr > th,
+  .table-responsive > .table > tbody > tr > th,
+  .table-responsive > .table > tfoot > tr > th,
+  .table-responsive > .table > thead > tr > td,
+  .table-responsive > .table > tbody > tr > td,
+  .table-responsive > .table > tfoot > tr > td {
+    white-space: nowrap;
+  }
+  .table-responsive > .table-bordered {
+    border: 0;
+  }
+  .table-responsive > .table-bordered > thead > tr > th:first-child,
+  .table-responsive > .table-bordered > tbody > tr > th:first-child,
+  .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+  .table-responsive > .table-bordered > thead > tr > td:first-child,
+  .table-responsive > .table-bordered > tbody > tr > td:first-child,
+  .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+    border-left: 0;
+  }
+  .table-responsive > .table-bordered > thead > tr > th:last-child,
+  .table-responsive > .table-bordered > tbody > tr > th:last-child,
+  .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+  .table-responsive > .table-bordered > thead > tr > td:last-child,
+  .table-responsive > .table-bordered > tbody > tr > td:last-child,
+  .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+    border-right: 0;
+  }
+  .table-responsive > .table-bordered > tbody > tr:last-child > th,
+  .table-responsive > .table-bordered > tfoot > tr:last-child > th,
+  .table-responsive > .table-bordered > tbody > tr:last-child > td,
+  .table-responsive > .table-bordered > tfoot > tr:last-child > td {
+    border-bottom: 0;
+  }
+}
+fieldset {
+  padding: 0;
+  margin: 0;
+  border: 0;
+  min-width: 0;
+}
+legend {
+  display: block;
+  width: 100%;
+  padding: 0;
+  margin-bottom: 20px;
+  font-size: 21px;
+  line-height: inherit;
+  color: #333333;
+  border: 0;
+  border-bottom: 1px solid #e5e5e5;
+}
+label {
+  display: inline-block;
+  max-width: 100%;
+  margin-bottom: 5px;
+  font-weight: bold;
+}
+input[type="search"] {
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+input[type="radio"],
+input[type="checkbox"] {
+  margin: 4px 0 0;
+  margin-top: 1px \9;
+  line-height: normal;
+}
+input[type="file"] {
+  display: block;
+}
+input[type="range"] {
+  display: block;
+  width: 100%;
+}
+select[multiple],
+select[size] {
+  height: auto;
+}
+input[type="file"]:focus,
+input[type="radio"]:focus,
+input[type="checkbox"]:focus {
+  outline: thin dotted;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+output {
+  display: block;
+  padding-top: 7px;
+  font-size: 14px;
+  line-height: 1.42857143;
+  color: #555555;
+}
+.form-control {
+  display: block;
+  width: 100%;
+  height: 34px;
+  padding: 6px 12px;
+  font-size: 14px;
+  line-height: 1.42857143;
+  color: #555555;
+  background-color: #fff;
+  background-image: none;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+  -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
+}
+.form-control:focus {
+  border-color: #66afe9;
+  outline: 0;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
+  box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);
+}
+.form-control::-moz-placeholder {
+  color: #999;
+  opacity: 1;
+}
+.form-control:-ms-input-placeholder {
+  color: #999;
+}
+.form-control::-webkit-input-placeholder {
+  color: #999;
+}
+.form-control::-ms-expand {
+  border: 0;
+  background-color: transparent;
+}
+.form-control[disabled],
+.form-control[readonly],
+fieldset[disabled] .form-control {
+  background-color: #eeeeee;
+  opacity: 1;
+}
+.form-control[disabled],
+fieldset[disabled] .form-control {
+  cursor: not-allowed;
+}
+textarea.form-control {
+  height: auto;
+}
+input[type="search"] {
+  -webkit-appearance: none;
+}
+@media screen and (-webkit-min-device-pixel-ratio: 0) {
+  input[type="date"].form-control,
+  input[type="time"].form-control,
+  input[type="datetime-local"].form-control,
+  input[type="month"].form-control {
+    line-height: 34px;
+  }
+  input[type="date"].input-sm,
+  input[type="time"].input-sm,
+  input[type="datetime-local"].input-sm,
+  input[type="month"].input-sm,
+  .input-group-sm input[type="date"],
+  .input-group-sm input[type="time"],
+  .input-group-sm input[type="datetime-local"],
+  .input-group-sm input[type="month"] {
+    line-height: 30px;
+  }
+  input[type="date"].input-lg,
+  input[type="time"].input-lg,
+  input[type="datetime-local"].input-lg,
+  input[type="month"].input-lg,
+  .input-group-lg input[type="date"],
+  .input-group-lg input[type="time"],
+  .input-group-lg input[type="datetime-local"],
+  .input-group-lg input[type="month"] {
+    line-height: 46px;
+  }
+}
+.form-group {
+  margin-bottom: 15px;
+}
+.radio,
+.checkbox {
+  position: relative;
+  display: block;
+  margin-top: 10px;
+  margin-bottom: 10px;
+}
+.radio label,
+.checkbox label {
+  min-height: 20px;
+  padding-left: 20px;
+  margin-bottom: 0;
+  font-weight: normal;
+  cursor: pointer;
+}
+.radio input[type="radio"],
+.radio-inline input[type="radio"],
+.checkbox input[type="checkbox"],
+.checkbox-inline input[type="checkbox"] {
+  position: absolute;
+  margin-left: -20px;
+  margin-top: 4px \9;
+}
+.radio + .radio,
+.checkbox + .checkbox {
+  margin-top: -5px;
+}
+.radio-inline,
+.checkbox-inline {
+  position: relative;
+  display: inline-block;
+  padding-left: 20px;
+  margin-bottom: 0;
+  vertical-align: middle;
+  font-weight: normal;
+  cursor: pointer;
+}
+.radio-inline + .radio-inline,
+.checkbox-inline + .checkbox-inline {
+  margin-top: 0;
+  margin-left: 10px;
+}
+input[type="radio"][disabled],
+input[type="checkbox"][disabled],
+input[type="radio"].disabled,
+input[type="checkbox"].disabled,
+fieldset[disabled] input[type="radio"],
+fieldset[disabled] input[type="checkbox"] {
+  cursor: not-allowed;
+}
+.radio-inline.disabled,
+.checkbox-inline.disabled,
+fieldset[disabled] .radio-inline,
+fieldset[disabled] .checkbox-inline {
+  cursor: not-allowed;
+}
+.radio.disabled label,
+.checkbox.disabled label,
+fieldset[disabled] .radio label,
+fieldset[disabled] .checkbox label {
+  cursor: not-allowed;
+}
+.form-control-static {
+  padding-top: 7px;
+  padding-bottom: 7px;
+  margin-bottom: 0;
+  min-height: 34px;
+}
+.form-control-static.input-lg,
+.form-control-static.input-sm {
+  padding-left: 0;
+  padding-right: 0;
+}
+.input-sm {
+  height: 30px;
+  padding: 5px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+select.input-sm {
+  height: 30px;
+  line-height: 30px;
+}
+textarea.input-sm,
+select[multiple].input-sm {
+  height: auto;
+}
+.form-group-sm .form-control {
+  height: 30px;
+  padding: 5px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+.form-group-sm select.form-control {
+  height: 30px;
+  line-height: 30px;
+}
+.form-group-sm textarea.form-control,
+.form-group-sm select[multiple].form-control {
+  height: auto;
+}
+.form-group-sm .form-control-static {
+  height: 30px;
+  min-height: 32px;
+  padding: 6px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+}
+.input-lg {
+  height: 46px;
+  padding: 10px 16px;
+  font-size: 18px;
+  line-height: 1.3333333;
+  border-radius: 6px;
+}
+select.input-lg {
+  height: 46px;
+  line-height: 46px;
+}
+textarea.input-lg,
+select[multiple].input-lg {
+  height: auto;
+}
+.form-group-lg .form-control {
+  height: 46px;
+  padding: 10px 16px;
+  font-size: 18px;
+  line-height: 1.3333333;
+  border-radius: 6px;
+}
+.form-group-lg select.form-control {
+  height: 46px;
+  line-height: 46px;
+}
+.form-group-lg textarea.form-control,
+.form-group-lg select[multiple].form-control {
+  height: auto;
+}
+.form-group-lg .form-control-static {
+  height: 46px;
+  min-height: 38px;
+  padding: 11px 16px;
+  font-size: 18px;
+  line-height: 1.3333333;
+}
+.has-feedback {
+  position: relative;
+}
+.has-feedback .form-control {
+  padding-right: 42.5px;
+}
+.form-control-feedback {
+  position: absolute;
+  top: 0;
+  right: 0;
+  z-index: 2;
+  display: block;
+  width: 34px;
+  height: 34px;
+  line-height: 34px;
+  text-align: center;
+  pointer-events: none;
+}
+.input-lg + .form-control-feedback,
+.input-group-lg + .form-control-feedback,
+.form-group-lg .form-control + .form-control-feedback {
+  width: 46px;
+  height: 46px;
+  line-height: 46px;
+}
+.input-sm + .form-control-feedback,
+.input-group-sm + .form-control-feedback,
+.form-group-sm .form-control + .form-control-feedback {
+  width: 30px;
+  height: 30px;
+  line-height: 30px;
+}
+.has-success .help-block,
+.has-success .control-label,
+.has-success .radio,
+.has-success .checkbox,
+.has-success .radio-inline,
+.has-success .checkbox-inline,
+.has-success.radio label,
+.has-success.checkbox label,
+.has-success.radio-inline label,
+.has-success.checkbox-inline label {
+  color: #3c763d;
+}
+.has-success .form-control {
+  border-color: #3c763d;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+.has-success .form-control:focus {
+  border-color: #2b542c;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;
+}
+.has-success .input-group-addon {
+  color: #3c763d;
+  border-color: #3c763d;
+  background-color: #dff0d8;
+}
+.has-success .form-control-feedback {
+  color: #3c763d;
+}
+.has-warning .help-block,
+.has-warning .control-label,
+.has-warning .radio,
+.has-warning .checkbox,
+.has-warning .radio-inline,
+.has-warning .checkbox-inline,
+.has-warning.radio label,
+.has-warning.checkbox label,
+.has-warning.radio-inline label,
+.has-warning.checkbox-inline label {
+  color: #8a6d3b;
+}
+.has-warning .form-control {
+  border-color: #8a6d3b;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+.has-warning .form-control:focus {
+  border-color: #66512c;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;
+}
+.has-warning .input-group-addon {
+  color: #8a6d3b;
+  border-color: #8a6d3b;
+  background-color: #fcf8e3;
+}
+.has-warning .form-control-feedback {
+  color: #8a6d3b;
+}
+.has-error .help-block,
+.has-error .control-label,
+.has-error .radio,
+.has-error .checkbox,
+.has-error .radio-inline,
+.has-error .checkbox-inline,
+.has-error.radio label,
+.has-error.checkbox label,
+.has-error.radio-inline label,
+.has-error.checkbox-inline label {
+  color: #a94442;
+}
+.has-error .form-control {
+  border-color: #a94442;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+.has-error .form-control:focus {
+  border-color: #843534;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;
+}
+.has-error .input-group-addon {
+  color: #a94442;
+  border-color: #a94442;
+  background-color: #f2dede;
+}
+.has-error .form-control-feedback {
+  color: #a94442;
+}
+.has-feedback label ~ .form-control-feedback {
+  top: 25px;
+}
+.has-feedback label.sr-only ~ .form-control-feedback {
+  top: 0;
+}
+.help-block {
+  display: block;
+  margin-top: 5px;
+  margin-bottom: 10px;
+  color: #737373;
+}
+@media (min-width: 768px) {
+  .form-inline .form-group {
+    display: inline-block;
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .form-inline .form-control {
+    display: inline-block;
+    width: auto;
+    vertical-align: middle;
+  }
+  .form-inline .form-control-static {
+    display: inline-block;
+  }
+  .form-inline .input-group {
+    display: inline-table;
+    vertical-align: middle;
+  }
+  .form-inline .input-group .input-group-addon,
+  .form-inline .input-group .input-group-btn,
+  .form-inline .input-group .form-control {
+    width: auto;
+  }
+  .form-inline .input-group > .form-control {
+    width: 100%;
+  }
+  .form-inline .control-label {
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .form-inline .radio,
+  .form-inline .checkbox {
+    display: inline-block;
+    margin-top: 0;
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .form-inline .radio label,
+  .form-inline .checkbox label {
+    padding-left: 0;
+  }
+  .form-inline .radio input[type="radio"],
+  .form-inline .checkbox input[type="checkbox"] {
+    position: relative;
+    margin-left: 0;
+  }
+  .form-inline .has-feedback .form-control-feedback {
+    top: 0;
+  }
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox,
+.form-horizontal .radio-inline,
+.form-horizontal .checkbox-inline {
+  margin-top: 0;
+  margin-bottom: 0;
+  padding-top: 7px;
+}
+.form-horizontal .radio,
+.form-horizontal .checkbox {
+  min-height: 27px;
+}
+.form-horizontal .form-group {
+  margin-left: -15px;
+  margin-right: -15px;
+}
+@media (min-width: 768px) {
+  .form-horizontal .control-label {
+    text-align: right;
+    margin-bottom: 0;
+    padding-top: 7px;
+  }
+}
+.form-horizontal .has-feedback .form-control-feedback {
+  right: 15px;
+}
+@media (min-width: 768px) {
+  .form-horizontal .form-group-lg .control-label {
+    padding-top: 11px;
+    font-size: 18px;
+  }
+}
+@media (min-width: 768px) {
+  .form-horizontal .form-group-sm .control-label {
+    padding-top: 6px;
+    font-size: 12px;
+  }
+}
+.btn {
+  display: inline-block;
+  margin-bottom: 0;
+  font-weight: normal;
+  text-align: center;
+  vertical-align: middle;
+  touch-action: manipulation;
+  cursor: pointer;
+  background-image: none;
+  border: 1px solid transparent;
+  white-space: nowrap;
+  padding: 6px 12px;
+  font-size: 14px;
+  line-height: 1.42857143;
+  border-radius: 4px;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+.btn:focus,
+.btn:active:focus,
+.btn.active:focus,
+.btn.focus,
+.btn:active.focus,
+.btn.active.focus {
+  outline: thin dotted;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+.btn:hover,
+.btn:focus,
+.btn.focus {
+  color: #333;
+  text-decoration: none;
+}
+.btn:active,
+.btn.active {
+  outline: 0;
+  background-image: none;
+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+}
+.btn.disabled,
+.btn[disabled],
+fieldset[disabled] .btn {
+  cursor: not-allowed;
+  opacity: 0.65;
+  filter: alpha(opacity=65);
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+a.btn.disabled,
+fieldset[disabled] a.btn {
+  pointer-events: none;
+}
+.btn-default {
+  color: #333;
+  background-color: #fff;
+  border-color: #ccc;
+}
+.btn-default:focus,
+.btn-default.focus {
+  color: #333;
+  background-color: #e6e6e6;
+  border-color: #8c8c8c;
+}
+.btn-default:hover {
+  color: #333;
+  background-color: #e6e6e6;
+  border-color: #adadad;
+}
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+  color: #333;
+  background-color: #e6e6e6;
+  border-color: #adadad;
+}
+.btn-default:active:hover,
+.btn-default.active:hover,
+.open > .dropdown-toggle.btn-default:hover,
+.btn-default:active:focus,
+.btn-default.active:focus,
+.open > .dropdown-toggle.btn-default:focus,
+.btn-default:active.focus,
+.btn-default.active.focus,
+.open > .dropdown-toggle.btn-default.focus {
+  color: #333;
+  background-color: #d4d4d4;
+  border-color: #8c8c8c;
+}
+.btn-default:active,
+.btn-default.active,
+.open > .dropdown-toggle.btn-default {
+  background-image: none;
+}
+.btn-default.disabled:hover,
+.btn-default[disabled]:hover,
+fieldset[disabled] .btn-default:hover,
+.btn-default.disabled:focus,
+.btn-default[disabled]:focus,
+fieldset[disabled] .btn-default:focus,
+.btn-default.disabled.focus,
+.btn-default[disabled].focus,
+fieldset[disabled] .btn-default.focus {
+  background-color: #fff;
+  border-color: #ccc;
+}
+.btn-default .badge {
+  color: #fff;
+  background-color: #333;
+}
+.btn-primary {
+  color: #fff;
+  background-color: #337ab7;
+  border-color: #2e6da4;
+}
+.btn-primary:focus,
+.btn-primary.focus {
+  color: #fff;
+  background-color: #286090;
+  border-color: #122b40;
+}
+.btn-primary:hover {
+  color: #fff;
+  background-color: #286090;
+  border-color: #204d74;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+  color: #fff;
+  background-color: #286090;
+  border-color: #204d74;
+}
+.btn-primary:active:hover,
+.btn-primary.active:hover,
+.open > .dropdown-toggle.btn-primary:hover,
+.btn-primary:active:focus,
+.btn-primary.active:focus,
+.open > .dropdown-toggle.btn-primary:focus,
+.btn-primary:active.focus,
+.btn-primary.active.focus,
+.open > .dropdown-toggle.btn-primary.focus {
+  color: #fff;
+  background-color: #204d74;
+  border-color: #122b40;
+}
+.btn-primary:active,
+.btn-primary.active,
+.open > .dropdown-toggle.btn-primary {
+  background-image: none;
+}
+.btn-primary.disabled:hover,
+.btn-primary[disabled]:hover,
+fieldset[disabled] .btn-primary:hover,
+.btn-primary.disabled:focus,
+.btn-primary[disabled]:focus,
+fieldset[disabled] .btn-primary:focus,
+.btn-primary.disabled.focus,
+.btn-primary[disabled].focus,
+fieldset[disabled] .btn-primary.focus {
+  background-color: #337ab7;
+  border-color: #2e6da4;
+}
+.btn-primary .badge {
+  color: #337ab7;
+  background-color: #fff;
+}
+.btn-success {
+  color: #fff;
+  background-color: #5cb85c;
+  border-color: #4cae4c;
+}
+.btn-success:focus,
+.btn-success.focus {
+  color: #fff;
+  background-color: #449d44;
+  border-color: #255625;
+}
+.btn-success:hover {
+  color: #fff;
+  background-color: #449d44;
+  border-color: #398439;
+}
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+  color: #fff;
+  background-color: #449d44;
+  border-color: #398439;
+}
+.btn-success:active:hover,
+.btn-success.active:hover,
+.open > .dropdown-toggle.btn-success:hover,
+.btn-success:active:focus,
+.btn-success.active:focus,
+.open > .dropdown-toggle.btn-success:focus,
+.btn-success:active.focus,
+.btn-success.active.focus,
+.open > .dropdown-toggle.btn-success.focus {
+  color: #fff;
+  background-color: #398439;
+  border-color: #255625;
+}
+.btn-success:active,
+.btn-success.active,
+.open > .dropdown-toggle.btn-success {
+  background-image: none;
+}
+.btn-success.disabled:hover,
+.btn-success[disabled]:hover,
+fieldset[disabled] .btn-success:hover,
+.btn-success.disabled:focus,
+.btn-success[disabled]:focus,
+fieldset[disabled] .btn-success:focus,
+.btn-success.disabled.focus,
+.btn-success[disabled].focus,
+fieldset[disabled] .btn-success.focus {
+  background-color: #5cb85c;
+  border-color: #4cae4c;
+}
+.btn-success .badge {
+  color: #5cb85c;
+  background-color: #fff;
+}
+.btn-info {
+  color: #fff;
+  background-color: #5bc0de;
+  border-color: #46b8da;
+}
+.btn-info:focus,
+.btn-info.focus {
+  color: #fff;
+  background-color: #31b0d5;
+  border-color: #1b6d85;
+}
+.btn-info:hover {
+  color: #fff;
+  background-color: #31b0d5;
+  border-color: #269abc;
+}
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+  color: #fff;
+  background-color: #31b0d5;
+  border-color: #269abc;
+}
+.btn-info:active:hover,
+.btn-info.active:hover,
+.open > .dropdown-toggle.btn-info:hover,
+.btn-info:active:focus,
+.btn-info.active:focus,
+.open > .dropdown-toggle.btn-info:focus,
+.btn-info:active.focus,
+.btn-info.active.focus,
+.open > .dropdown-toggle.btn-info.focus {
+  color: #fff;
+  background-color: #269abc;
+  border-color: #1b6d85;
+}
+.btn-info:active,
+.btn-info.active,
+.open > .dropdown-toggle.btn-info {
+  background-image: none;
+}
+.btn-info.disabled:hover,
+.btn-info[disabled]:hover,
+fieldset[disabled] .btn-info:hover,
+.btn-info.disabled:focus,
+.btn-info[disabled]:focus,
+fieldset[disabled] .btn-info:focus,
+.btn-info.disabled.focus,
+.btn-info[disabled].focus,
+fieldset[disabled] .btn-info.focus {
+  background-color: #5bc0de;
+  border-color: #46b8da;
+}
+.btn-info .badge {
+  color: #5bc0de;
+  background-color: #fff;
+}
+.btn-warning {
+  color: #fff;
+  background-color: #f0ad4e;
+  border-color: #eea236;
+}
+.btn-warning:focus,
+.btn-warning.focus {
+  color: #fff;
+  background-color: #ec971f;
+  border-color: #985f0d;
+}
+.btn-warning:hover {
+  color: #fff;
+  background-color: #ec971f;
+  border-color: #d58512;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+  color: #fff;
+  background-color: #ec971f;
+  border-color: #d58512;
+}
+.btn-warning:active:hover,
+.btn-warning.active:hover,
+.open > .dropdown-toggle.btn-warning:hover,
+.btn-warning:active:focus,
+.btn-warning.active:focus,
+.open > .dropdown-toggle.btn-warning:focus,
+.btn-warning:active.focus,
+.btn-warning.active.focus,
+.open > .dropdown-toggle.btn-warning.focus {
+  color: #fff;
+  background-color: #d58512;
+  border-color: #985f0d;
+}
+.btn-warning:active,
+.btn-warning.active,
+.open > .dropdown-toggle.btn-warning {
+  background-image: none;
+}
+.btn-warning.disabled:hover,
+.btn-warning[disabled]:hover,
+fieldset[disabled] .btn-warning:hover,
+.btn-warning.disabled:focus,
+.btn-warning[disabled]:focus,
+fieldset[disabled] .btn-warning:focus,
+.btn-warning.disabled.focus,
+.btn-warning[disabled].focus,
+fieldset[disabled] .btn-warning.focus {
+  background-color: #f0ad4e;
+  border-color: #eea236;
+}
+.btn-warning .badge {
+  color: #f0ad4e;
+  background-color: #fff;
+}
+.btn-danger {
+  color: #fff;
+  background-color: #d9534f;
+  border-color: #d43f3a;
+}
+.btn-danger:focus,
+.btn-danger.focus {
+  color: #fff;
+  background-color: #c9302c;
+  border-color: #761c19;
+}
+.btn-danger:hover {
+  color: #fff;
+  background-color: #c9302c;
+  border-color: #ac2925;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+  color: #fff;
+  background-color: #c9302c;
+  border-color: #ac2925;
+}
+.btn-danger:active:hover,
+.btn-danger.active:hover,
+.open > .dropdown-toggle.btn-danger:hover,
+.btn-danger:active:focus,
+.btn-danger.active:focus,
+.open > .dropdown-toggle.btn-danger:focus,
+.btn-danger:active.focus,
+.btn-danger.active.focus,
+.open > .dropdown-toggle.btn-danger.focus {
+  color: #fff;
+  background-color: #ac2925;
+  border-color: #761c19;
+}
+.btn-danger:active,
+.btn-danger.active,
+.open > .dropdown-toggle.btn-danger {
+  background-image: none;
+}
+.btn-danger.disabled:hover,
+.btn-danger[disabled]:hover,
+fieldset[disabled] .btn-danger:hover,
+.btn-danger.disabled:focus,
+.btn-danger[disabled]:focus,
+fieldset[disabled] .btn-danger:focus,
+.btn-danger.disabled.focus,
+.btn-danger[disabled].focus,
+fieldset[disabled] .btn-danger.focus {
+  background-color: #d9534f;
+  border-color: #d43f3a;
+}
+.btn-danger .badge {
+  color: #d9534f;
+  background-color: #fff;
+}
+.btn-link {
+  color: #337ab7;
+  font-weight: normal;
+  border-radius: 0;
+}
+.btn-link,
+.btn-link:active,
+.btn-link.active,
+.btn-link[disabled],
+fieldset[disabled] .btn-link {
+  background-color: transparent;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+.btn-link,
+.btn-link:hover,
+.btn-link:focus,
+.btn-link:active {
+  border-color: transparent;
+}
+.btn-link:hover,
+.btn-link:focus {
+  color: #23527c;
+  text-decoration: underline;
+  background-color: transparent;
+}
+.btn-link[disabled]:hover,
+fieldset[disabled] .btn-link:hover,
+.btn-link[disabled]:focus,
+fieldset[disabled] .btn-link:focus {
+  color: #777777;
+  text-decoration: none;
+}
+.btn-lg,
+.btn-group-lg > .btn {
+  padding: 10px 16px;
+  font-size: 18px;
+  line-height: 1.3333333;
+  border-radius: 6px;
+}
+.btn-sm,
+.btn-group-sm > .btn {
+  padding: 5px 10px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+.btn-xs,
+.btn-group-xs > .btn {
+  padding: 1px 5px;
+  font-size: 12px;
+  line-height: 1.5;
+  border-radius: 3px;
+}
+.btn-block {
+  display: block;
+  width: 100%;
+}
+.btn-block + .btn-block {
+  margin-top: 5px;
+}
+input[type="submit"].btn-block,
+input[type="reset"].btn-block,
+input[type="button"].btn-block {
+  width: 100%;
+}
+.fade {
+  opacity: 0;
+  -webkit-transition: opacity 0.15s linear;
+  -o-transition: opacity 0.15s linear;
+  transition: opacity 0.15s linear;
+}
+.fade.in {
+  opacity: 1;
+}
+.collapse {
+  display: none;
+}
+.collapse.in {
+  display: block;
+}
+tr.collapse.in {
+  display: table-row;
+}
+tbody.collapse.in {
+  display: table-row-group;
+}
+.collapsing {
+  position: relative;
+  height: 0;
+  overflow: hidden;
+  -webkit-transition-property: height, visibility;
+  transition-property: height, visibility;
+  -webkit-transition-duration: 0.35s;
+  transition-duration: 0.35s;
+  -webkit-transition-timing-function: ease;
+  transition-timing-function: ease;
+}
+.caret {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  margin-left: 2px;
+  vertical-align: middle;
+  border-top: 4px dashed;
+  border-top: 4px solid \9;
+  border-right: 4px solid transparent;
+  border-left: 4px solid transparent;
+}
+.dropup,
+.dropdown {
+  position: relative;
+}
+.dropdown-toggle:focus {
+  outline: 0;
+}
+.dropdown-menu {
+  position: absolute;
+  top: 100%;
+  left: 0;
+  z-index: 1000;
+  display: none;
+  float: left;
+  min-width: 160px;
+  padding: 5px 0;
+  margin: 2px 0 0;
+  list-style: none;
+  font-size: 14px;
+  text-align: left;
+  background-color: #fff;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, 0.15);
+  border-radius: 4px;
+  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+  background-clip: padding-box;
+}
+.dropdown-menu.pull-right {
+  right: 0;
+  left: auto;
+}
+.dropdown-menu .divider {
+  height: 1px;
+  margin: 9px 0;
+  overflow: hidden;
+  background-color: #e5e5e5;
+}
+.dropdown-menu > li > a {
+  display: block;
+  padding: 3px 20px;
+  clear: both;
+  font-weight: normal;
+  line-height: 1.42857143;
+  color: #333333;
+  white-space: nowrap;
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > a:focus {
+  text-decoration: none;
+  color: #262626;
+  background-color: #f5f5f5;
+}
+.dropdown-menu > .active > a,
+.dropdown-menu > .active > a:hover,
+.dropdown-menu > .active > a:focus {
+  color: #fff;
+  text-decoration: none;
+  outline: 0;
+  background-color: #337ab7;
+}
+.dropdown-menu > .disabled > a,
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+  color: #777777;
+}
+.dropdown-menu > .disabled > a:hover,
+.dropdown-menu > .disabled > a:focus {
+  text-decoration: none;
+  background-color: transparent;
+  background-image: none;
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  cursor: not-allowed;
+}
+.open > .dropdown-menu {
+  display: block;
+}
+.open > a {
+  outline: 0;
+}
+.dropdown-menu-right {
+  left: auto;
+  right: 0;
+}
+.dropdown-menu-left {
+  left: 0;
+  right: auto;
+}
+.dropdown-header {
+  display: block;
+  padding: 3px 20px;
+  font-size: 12px;
+  line-height: 1.42857143;
+  color: #777777;
+  white-space: nowrap;
+}
+.dropdown-backdrop {
+  position: fixed;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  top: 0;
+  z-index: 990;
+}
+.pull-right > .dropdown-menu {
+  right: 0;
+  left: auto;
+}
+.dropup .caret,
+.navbar-fixed-bottom .dropdown .caret {
+  border-top: 0;
+  border-bottom: 4px dashed;
+  border-bottom: 4px solid \9;
+  content: "";
+}
+.dropup .dropdown-menu,
+.navbar-fixed-bottom .dropdown .dropdown-menu {
+  top: auto;
+  bottom: 100%;
+  margin-bottom: 2px;
+}
+@media (min-width: 768px) {
+  .navbar-right .dropdown-menu {
+    left: auto;
+    right: 0;
+  }
+  .navbar-right .dropdown-menu-left {
+    left: 0;
+    right: auto;
+  }
+}
+.nav {
+  margin-bottom: 0;
+  padding-left: 0;
+  list-style: none;
+}
+.nav > li {
+  position: relative;
+  display: block;
+}
+.nav > li > a {
+  position: relative;
+  display: block;
+  padding: 10px 15px;
+}
+.nav > li > a:hover,
+.nav > li > a:focus {
+  text-decoration: none;
+  background-color: #eeeeee;
+}
+.nav > li.disabled > a {
+  color: #777777;
+}
+.nav > li.disabled > a:hover,
+.nav > li.disabled > a:focus {
+  color: #777777;
+  text-decoration: none;
+  background-color: transparent;
+  cursor: not-allowed;
+}
+.nav .open > a,
+.nav .open > a:hover,
+.nav .open > a:focus {
+  background-color: #eeeeee;
+  border-color: #337ab7;
+}
+.nav .nav-divider {
+  height: 1px;
+  margin: 9px 0;
+  overflow: hidden;
+  background-color: #e5e5e5;
+}
+.nav > li > a > img {
+  max-width: none;
+}
+.nav-tabs {
+  border-bottom: 1px solid #ddd;
+}
+.nav-tabs > li {
+  float: left;
+  margin-bottom: -1px;
+}
+.nav-tabs > li > a {
+  margin-right: 2px;
+  line-height: 1.42857143;
+  border: 1px solid transparent;
+  border-radius: 4px 4px 0 0;
+}
+.nav-tabs > li > a:hover {
+  border-color: #eeeeee #eeeeee #ddd;
+}
+.nav-tabs > li.active > a,
+.nav-tabs > li.active > a:hover,
+.nav-tabs > li.active > a:focus {
+  color: #555555;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  border-bottom-color: transparent;
+  cursor: default;
+}
+.nav-tabs.nav-justified {
+  width: 100%;
+  border-bottom: 0;
+}
+.nav-tabs.nav-justified > li {
+  float: none;
+}
+.nav-tabs.nav-justified > li > a {
+  text-align: center;
+  margin-bottom: 5px;
+}
+.nav-tabs.nav-justified > .dropdown .dropdown-menu {
+  top: auto;
+  left: auto;
+}
+@media (min-width: 768px) {
+  .nav-tabs.nav-justified > li {
+    display: table-cell;
+    width: 1%;
+  }
+  .nav-tabs.nav-justified > li > a {
+    margin-bottom: 0;
+  }
+}
+.nav-tabs.nav-justified > li > a {
+  margin-right: 0;
+  border-radius: 4px;
+}
+.nav-tabs.nav-justified > .active > a,
+.nav-tabs.nav-justified > .active > a:hover,
+.nav-tabs.nav-justified > .active > a:focus {
+  border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+  .nav-tabs.nav-justified > li > a {
+    border-bottom: 1px solid #ddd;
+    border-radius: 4px 4px 0 0;
+  }
+  .nav-tabs.nav-justified > .active > a,
+  .nav-tabs.nav-justified > .active > a:hover,
+  .nav-tabs.nav-justified > .active > a:focus {
+    border-bottom-color: #fff;
+  }
+}
+.nav-pills > li {
+  float: left;
+}
+.nav-pills > li > a {
+  border-radius: 4px;
+}
+.nav-pills > li + li {
+  margin-left: 2px;
+}
+.nav-pills > li.active > a,
+.nav-pills > li.active > a:hover,
+.nav-pills > li.active > a:focus {
+  color: #fff;
+  background-color: #337ab7;
+}
+.nav-stacked > li {
+  float: none;
+}
+.nav-stacked > li + li {
+  margin-top: 2px;
+  margin-left: 0;
+}
+.nav-justified {
+  width: 100%;
+}
+.nav-justified > li {
+  float: none;
+}
+.nav-justified > li > a {
+  text-align: center;
+  margin-bottom: 5px;
+}
+.nav-justified > .dropdown .dropdown-menu {
+  top: auto;
+  left: auto;
+}
+@media (min-width: 768px) {
+  .nav-justified > li {
+    display: table-cell;
+    width: 1%;
+  }
+  .nav-justified > li > a {
+    margin-bottom: 0;
+  }
+}
+.nav-tabs-justified {
+  border-bottom: 0;
+}
+.nav-tabs-justified > li > a {
+  margin-right: 0;
+  border-radius: 4px;
+}
+.nav-tabs-justified > .active > a,
+.nav-tabs-justified > .active > a:hover,
+.nav-tabs-justified > .active > a:focus {
+  border: 1px solid #ddd;
+}
+@media (min-width: 768px) {
+  .nav-tabs-justified > li > a {
+    border-bottom: 1px solid #ddd;
+    border-radius: 4px 4px 0 0;
+  }
+  .nav-tabs-justified > .active > a,
+  .nav-tabs-justified > .active > a:hover,
+  .nav-tabs-justified > .active > a:focus {
+    border-bottom-color: #fff;
+  }
+}
+.tab-content > .tab-pane {
+  display: none;
+}
+.tab-content > .active {
+  display: block;
+}
+.nav-tabs .dropdown-menu {
+  margin-top: -1px;
+  border-top-right-radius: 0;
+  border-top-left-radius: 0;
+}
+.navbar {
+  position: relative;
+  min-height: 50px;
+  margin-bottom: 20px;
+  border: 1px solid transparent;
+}
+@media (min-width: 768px) {
+  .navbar {
+    border-radius: 4px;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-header {
+    float: left;
+  }
+}
+.navbar-collapse {
+  overflow-x: visible;
+  padding-right: 15px;
+  padding-left: 15px;
+  border-top: 1px solid transparent;
+  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);
+  -webkit-overflow-scrolling: touch;
+}
+.navbar-collapse.in {
+  overflow-y: auto;
+}
+@media (min-width: 768px) {
+  .navbar-collapse {
+    width: auto;
+    border-top: 0;
+    box-shadow: none;
+  }
+  .navbar-collapse.collapse {
+    display: block !important;
+    height: auto !important;
+    padding-bottom: 0;
+    overflow: visible !important;
+  }
+  .navbar-collapse.in {
+    overflow-y: visible;
+  }
+  .navbar-fixed-top .navbar-collapse,
+  .navbar-static-top .navbar-collapse,
+  .navbar-fixed-bottom .navbar-collapse {
+    padding-left: 0;
+    padding-right: 0;
+  }
+}
+.navbar-fixed-top .navbar-collapse,
+.navbar-fixed-bottom .navbar-collapse {
+  max-height: 340px;
+}
+@media (max-device-width: 480px) and (orientation: landscape) {
+  .navbar-fixed-top .navbar-collapse,
+  .navbar-fixed-bottom .navbar-collapse {
+    max-height: 200px;
+  }
+}
+.container > .navbar-header,
+.container-fluid > .navbar-header,
+.container > .navbar-collapse,
+.container-fluid > .navbar-collapse {
+  margin-right: -15px;
+  margin-left: -15px;
+}
+@media (min-width: 768px) {
+  .container > .navbar-header,
+  .container-fluid > .navbar-header,
+  .container > .navbar-collapse,
+  .container-fluid > .navbar-collapse {
+    margin-right: 0;
+    margin-left: 0;
+  }
+}
+.navbar-static-top {
+  z-index: 1000;
+  border-width: 0 0 1px;
+}
+@media (min-width: 768px) {
+  .navbar-static-top {
+    border-radius: 0;
+  }
+}
+.navbar-fixed-top,
+.navbar-fixed-bottom {
+  position: fixed;
+  right: 0;
+  left: 0;
+  z-index: 1030;
+}
+@media (min-width: 768px) {
+  .navbar-fixed-top,
+  .navbar-fixed-bottom {
+    border-radius: 0;
+  }
+}
+.navbar-fixed-top {
+  top: 0;
+  border-width: 0 0 1px;
+}
+.navbar-fixed-bottom {
+  bottom: 0;
+  margin-bottom: 0;
+  border-width: 1px 0 0;
+}
+.navbar-brand {
+  float: left;
+  padding: 15px 15px;
+  font-size: 18px;
+  line-height: 20px;
+  height: 50px;
+}
+.navbar-brand:hover,
+.navbar-brand:focus {
+  text-decoration: none;
+}
+.navbar-brand > img {
+  display: block;
+}
+@media (min-width: 768px) {
+  .navbar > .container .navbar-brand,
+  .navbar > .container-fluid .navbar-brand {
+    margin-left: -15px;
+  }
+}
+.navbar-toggle {
+  position: relative;
+  float: right;
+  margin-right: 15px;
+  padding: 9px 10px;
+  margin-top: 8px;
+  margin-bottom: 8px;
+  background-color: transparent;
+  background-image: none;
+  border: 1px solid transparent;
+  border-radius: 4px;
+}
+.navbar-toggle:focus {
+  outline: 0;
+}
+.navbar-toggle .icon-bar {
+  display: block;
+  width: 22px;
+  height: 2px;
+  border-radius: 1px;
+}
+.navbar-toggle .icon-bar + .icon-bar {
+  margin-top: 4px;
+}
+@media (min-width: 768px) {
+  .navbar-toggle {
+    display: none;
+  }
+}
+.navbar-nav {
+  margin: 7.5px -15px;
+}
+.navbar-nav > li > a {
+  padding-top: 10px;
+  padding-bottom: 10px;
+  line-height: 20px;
+}
+@media (max-width: 767px) {
+  .navbar-nav .open .dropdown-menu {
+    position: static;
+    float: none;
+    width: auto;
+    margin-top: 0;
+    background-color: transparent;
+    border: 0;
+    box-shadow: none;
+  }
+  .navbar-nav .open .dropdown-menu > li > a,
+  .navbar-nav .open .dropdown-menu .dropdown-header {
+    padding: 5px 15px 5px 25px;
+  }
+  .navbar-nav .open .dropdown-menu > li > a {
+    line-height: 20px;
+  }
+  .navbar-nav .open .dropdown-menu > li > a:hover,
+  .navbar-nav .open .dropdown-menu > li > a:focus {
+    background-image: none;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-nav {
+    float: left;
+    margin: 0;
+  }
+  .navbar-nav > li {
+    float: left;
+  }
+  .navbar-nav > li > a {
+    padding-top: 15px;
+    padding-bottom: 15px;
+  }
+}
+.navbar-form {
+  margin-left: -15px;
+  margin-right: -15px;
+  padding: 10px 15px;
+  border-top: 1px solid transparent;
+  border-bottom: 1px solid transparent;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
+  margin-top: 8px;
+  margin-bottom: 8px;
+}
+@media (min-width: 768px) {
+  .navbar-form .form-group {
+    display: inline-block;
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .navbar-form .form-control {
+    display: inline-block;
+    width: auto;
+    vertical-align: middle;
+  }
+  .navbar-form .form-control-static {
+    display: inline-block;
+  }
+  .navbar-form .input-group {
+    display: inline-table;
+    vertical-align: middle;
+  }
+  .navbar-form .input-group .input-group-addon,
+  .navbar-form .input-group .input-group-btn,
+  .navbar-form .input-group .form-control {
+    width: auto;
+  }
+  .navbar-form .input-group > .form-control {
+    width: 100%;
+  }
+  .navbar-form .control-label {
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .navbar-form .radio,
+  .navbar-form .checkbox {
+    display: inline-block;
+    margin-top: 0;
+    margin-bottom: 0;
+    vertical-align: middle;
+  }
+  .navbar-form .radio label,
+  .navbar-form .checkbox label {
+    padding-left: 0;
+  }
+  .navbar-form .radio input[type="radio"],
+  .navbar-form .checkbox input[type="checkbox"] {
+    position: relative;
+    margin-left: 0;
+  }
+  .navbar-form .has-feedback .form-control-feedback {
+    top: 0;
+  }
+}
+@media (max-width: 767px) {
+  .navbar-form .form-group {
+    margin-bottom: 5px;
+  }
+  .navbar-form .form-group:last-child {
+    margin-bottom: 0;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-form {
+    width: auto;
+    border: 0;
+    margin-left: 0;
+    margin-right: 0;
+    padding-top: 0;
+    padding-bottom: 0;
+    -webkit-box-shadow: none;
+    box-shadow: none;
+  }
+}
+.navbar-nav > li > .dropdown-menu {
+  margin-top: 0;
+  border-top-right-radius: 0;
+  border-top-left-radius: 0;
+}
+.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
+  margin-bottom: 0;
+  border-top-right-radius: 4px;
+  border-top-left-radius: 4px;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.navbar-btn {
+  margin-top: 8px;
+  margin-bottom: 8px;
+}
+.navbar-btn.btn-sm {
+  margin-top: 10px;
+  margin-bottom: 10px;
+}
+.navbar-btn.btn-xs {
+  margin-top: 14px;
+  margin-bottom: 14px;
+}
+.navbar-text {
+  margin-top: 15px;
+  margin-bottom: 15px;
+}
+@media (min-width: 768px) {
+  .navbar-text {
+    float: left;
+    margin-left: 15px;
+    margin-right: 15px;
+  }
+}
+@media (min-width: 768px) {
+  .navbar-left {
+    float: left !important;
+  }
+  .navbar-right {
+    float: right !important;
+    margin-right: -15px;
+  }
+  .navbar-right ~ .navbar-right {
+    margin-right: 0;
+  }
+}
+.navbar-default {
+  background-color: #f8f8f8;
+  border-color: #e7e7e7;
+}
+.navbar-default .navbar-brand {
+  color: #777;
+}
+.navbar-default .navbar-brand:hover,
+.navbar-default .navbar-brand:focus {
+  color: #5e5e5e;
+  background-color: transparent;
+}
+.navbar-default .navbar-text {
+  color: #777;
+}
+.navbar-default .navbar-nav > li > a {
+  color: #777;
+}
+.navbar-default .navbar-nav > li > a:hover,
+.navbar-default .navbar-nav > li > a:focus {
+  color: #333;
+  background-color: transparent;
+}
+.navbar-default .navbar-nav > .active > a,
+.navbar-default .navbar-nav > .active > a:hover,
+.navbar-default .navbar-nav > .active > a:focus {
+  color: #555;
+  background-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .disabled > a,
+.navbar-default .navbar-nav > .disabled > a:hover,
+.navbar-default .navbar-nav > .disabled > a:focus {
+  color: #ccc;
+  background-color: transparent;
+}
+.navbar-default .navbar-toggle {
+  border-color: #ddd;
+}
+.navbar-default .navbar-toggle:hover,
+.navbar-default .navbar-toggle:focus {
+  background-color: #ddd;
+}
+.navbar-default .navbar-toggle .icon-bar {
+  background-color: #888;
+}
+.navbar-default .navbar-collapse,
+.navbar-default .navbar-form {
+  border-color: #e7e7e7;
+}
+.navbar-default .navbar-nav > .open > a,
+.navbar-default .navbar-nav > .open > a:hover,
+.navbar-default .navbar-nav > .open > a:focus {
+  background-color: #e7e7e7;
+  color: #555;
+}
+@media (max-width: 767px) {
+  .navbar-default .navbar-nav .open .dropdown-menu > li > a {
+    color: #777;
+  }
+  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,
+  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
+    color: #333;
+    background-color: transparent;
+  }
+  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,
+  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,
+  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
+    color: #555;
+    background-color: #e7e7e7;
+  }
+  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,
+  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+    color: #ccc;
+    background-color: transparent;
+  }
+}
+.navbar-default .navbar-link {
+  color: #777;
+}
+.navbar-default .navbar-link:hover {
+  color: #333;
+}
+.navbar-default .btn-link {
+  color: #777;
+}
+.navbar-default .btn-link:hover,
+.navbar-default .btn-link:focus {
+  color: #333;
+}
+.navbar-default .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-default .btn-link:hover,
+.navbar-default .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-default .btn-link:focus {
+  color: #ccc;
+}
+.navbar-inverse {
+  background-color: #222;
+  border-color: #080808;
+}
+.navbar-inverse .navbar-brand {
+  color: #9d9d9d;
+}
+.navbar-inverse .navbar-brand:hover,
+.navbar-inverse .navbar-brand:focus {
+  color: #fff;
+  background-color: transparent;
+}
+.navbar-inverse .navbar-text {
+  color: #9d9d9d;
+}
+.navbar-inverse .navbar-nav > li > a {
+  color: #9d9d9d;
+}
+.navbar-inverse .navbar-nav > li > a:hover,
+.navbar-inverse .navbar-nav > li > a:focus {
+  color: #fff;
+  background-color: transparent;
+}
+.navbar-inverse .navbar-nav > .active > a,
+.navbar-inverse .navbar-nav > .active > a:hover,
+.navbar-inverse .navbar-nav > .active > a:focus {
+  color: #fff;
+  background-color: #080808;
+}
+.navbar-inverse .navbar-nav > .disabled > a,
+.navbar-inverse .navbar-nav > .disabled > a:hover,
+.navbar-inverse .navbar-nav > .disabled > a:focus {
+  color: #444;
+  background-color: transparent;
+}
+.navbar-inverse .navbar-toggle {
+  border-color: #333;
+}
+.navbar-inverse .navbar-toggle:hover,
+.navbar-inverse .navbar-toggle:focus {
+  background-color: #333;
+}
+.navbar-inverse .navbar-toggle .icon-bar {
+  background-color: #fff;
+}
+.navbar-inverse .navbar-collapse,
+.navbar-inverse .navbar-form {
+  border-color: #101010;
+}
+.navbar-inverse .navbar-nav > .open > a,
+.navbar-inverse .navbar-nav > .open > a:hover,
+.navbar-inverse .navbar-nav > .open > a:focus {
+  background-color: #080808;
+  color: #fff;
+}
+@media (max-width: 767px) {
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {
+    border-color: #080808;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {
+    background-color: #080808;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
+    color: #9d9d9d;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {
+    color: #fff;
+    background-color: transparent;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {
+    color: #fff;
+    background-color: #080808;
+  }
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,
+  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {
+    color: #444;
+    background-color: transparent;
+  }
+}
+.navbar-inverse .navbar-link {
+  color: #9d9d9d;
+}
+.navbar-inverse .navbar-link:hover {
+  color: #fff;
+}
+.navbar-inverse .btn-link {
+  color: #9d9d9d;
+}
+.navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link:focus {
+  color: #fff;
+}
+.navbar-inverse .btn-link[disabled]:hover,
+fieldset[disabled] .navbar-inverse .btn-link:hover,
+.navbar-inverse .btn-link[disabled]:focus,
+fieldset[disabled] .navbar-inverse .btn-link:focus {
+  color: #444;
+}
+.alert {
+  padding: 15px;
+  margin-bottom: 20px;
+  border: 1px solid transparent;
+  border-radius: 4px;
+}
+.alert h4 {
+  margin-top: 0;
+  color: inherit;
+}
+.alert .alert-link {
+  font-weight: bold;
+}
+.alert > p,
+.alert > ul {
+  margin-bottom: 0;
+}
+.alert > p + p {
+  margin-top: 5px;
+}
+.alert-dismissable,
+.alert-dismissible {
+  padding-right: 35px;
+}
+.alert-dismissable .close,
+.alert-dismissible .close {
+  position: relative;
+  top: -2px;
+  right: -21px;
+  color: inherit;
+}
+.alert-success {
+  background-color: #dff0d8;
+  border-color: #d6e9c6;
+  color: #3c763d;
+}
+.alert-success hr {
+  border-top-color: #c9e2b3;
+}
+.alert-success .alert-link {
+  color: #2b542c;
+}
+.alert-info {
+  background-color: #d9edf7;
+  border-color: #bce8f1;
+  color: #31708f;
+}
+.alert-info hr {
+  border-top-color: #a6e1ec;
+}
+.alert-info .alert-link {
+  color: #245269;
+}
+.alert-warning {
+  background-color: #fcf8e3;
+  border-color: #faebcc;
+  color: #8a6d3b;
+}
+.alert-warning hr {
+  border-top-color: #f7e1b5;
+}
+.alert-warning .alert-link {
+  color: #66512c;
+}
+.alert-danger {
+  background-color: #f2dede;
+  border-color: #ebccd1;
+  color: #a94442;
+}
+.alert-danger hr {
+  border-top-color: #e4b9c0;
+}
+.alert-danger .alert-link {
+  color: #843534;
+}
+@-webkit-keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+@keyframes progress-bar-stripes {
+  from {
+    background-position: 40px 0;
+  }
+  to {
+    background-position: 0 0;
+  }
+}
+.progress {
+  overflow: hidden;
+  height: 20px;
+  margin-bottom: 20px;
+  background-color: #f5f5f5;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+}
+.progress-bar {
+  float: left;
+  width: 0%;
+  height: 100%;
+  font-size: 12px;
+  line-height: 20px;
+  color: #fff;
+  text-align: center;
+  background-color: #337ab7;
+  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+  -webkit-transition: width 0.6s ease;
+  -o-transition: width 0.6s ease;
+  transition: width 0.6s ease;
+}
+.progress-striped .progress-bar,
+.progress-bar-striped {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-size: 40px 40px;
+}
+.progress.active .progress-bar,
+.progress-bar.active {
+  -webkit-animation: progress-bar-stripes 2s linear infinite;
+  -o-animation: progress-bar-stripes 2s linear infinite;
+  animation: progress-bar-stripes 2s linear infinite;
+}
+.progress-bar-success {
+  background-color: #5cb85c;
+}
+.progress-striped .progress-bar-success {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+.progress-bar-info {
+  background-color: #5bc0de;
+}
+.progress-striped .progress-bar-info {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+.progress-bar-warning {
+  background-color: #f0ad4e;
+}
+.progress-striped .progress-bar-warning {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+.progress-bar-danger {
+  background-color: #d9534f;
+}
+.progress-striped .progress-bar-danger {
+  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+.media {
+  margin-top: 15px;
+}
+.media:first-child {
+  margin-top: 0;
+}
+.media,
+.media-body {
+  zoom: 1;
+  overflow: hidden;
+}
+.media-body {
+  width: 10000px;
+}
+.media-object {
+  display: block;
+}
+.media-object.img-thumbnail {
+  max-width: none;
+}
+.media-right,
+.media > .pull-right {
+  padding-left: 10px;
+}
+.media-left,
+.media > .pull-left {
+  padding-right: 10px;
+}
+.media-left,
+.media-right,
+.media-body {
+  display: table-cell;
+  vertical-align: top;
+}
+.media-middle {
+  vertical-align: middle;
+}
+.media-bottom {
+  vertical-align: bottom;
+}
+.media-heading {
+  margin-top: 0;
+  margin-bottom: 5px;
+}
+.media-list {
+  padding-left: 0;
+  list-style: none;
+}
+.btn-group,
+.btn-group-vertical {
+  position: relative;
+  display: inline-block;
+  vertical-align: middle;
+}
+.btn-group > .btn,
+.btn-group-vertical > .btn {
+  position: relative;
+  float: left;
+}
+.btn-group > .btn:hover,
+.btn-group-vertical > .btn:hover,
+.btn-group > .btn:focus,
+.btn-group-vertical > .btn:focus,
+.btn-group > .btn:active,
+.btn-group-vertical > .btn:active,
+.btn-group > .btn.active,
+.btn-group-vertical > .btn.active {
+  z-index: 2;
+}
+.btn-group .btn + .btn,
+.btn-group .btn + .btn-group,
+.btn-group .btn-group + .btn,
+.btn-group .btn-group + .btn-group {
+  margin-left: -1px;
+}
+.btn-toolbar {
+  margin-left: -5px;
+}
+.btn-toolbar .btn,
+.btn-toolbar .btn-group,
+.btn-toolbar .input-group {
+  float: left;
+}
+.btn-toolbar > .btn,
+.btn-toolbar > .btn-group,
+.btn-toolbar > .input-group {
+  margin-left: 5px;
+}
+.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {
+  border-radius: 0;
+}
+.btn-group > .btn:first-child {
+  margin-left: 0;
+}
+.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {
+  border-bottom-right-radius: 0;
+  border-top-right-radius: 0;
+}
+.btn-group > .btn:last-child:not(:first-child),
+.btn-group > .dropdown-toggle:not(:first-child) {
+  border-bottom-left-radius: 0;
+  border-top-left-radius: 0;
+}
+.btn-group > .btn-group {
+  float: left;
+}
+.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {
+  border-radius: 0;
+}
+.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+  border-bottom-right-radius: 0;
+  border-top-right-radius: 0;
+}
+.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {
+  border-bottom-left-radius: 0;
+  border-top-left-radius: 0;
+}
+.btn-group .dropdown-toggle:active,
+.btn-group.open .dropdown-toggle {
+  outline: 0;
+}
+.btn-group > .btn + .dropdown-toggle {
+  padding-left: 8px;
+  padding-right: 8px;
+}
+.btn-group > .btn-lg + .dropdown-toggle {
+  padding-left: 12px;
+  padding-right: 12px;
+}
+.btn-group.open .dropdown-toggle {
+  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+  box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
+}
+.btn-group.open .dropdown-toggle.btn-link {
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+.btn .caret {
+  margin-left: 0;
+}
+.btn-lg .caret {
+  border-width: 5px 5px 0;
+  border-bottom-width: 0;
+}
+.dropup .btn-lg .caret {
+  border-width: 0 5px 5px;
+}
+.btn-group-vertical > .btn,
+.btn-group-vertical > .btn-group,
+.btn-group-vertical > .btn-group > .btn {
+  display: block;
+  float: none;
+  width: 100%;
+  max-width: 100%;
+}
+.btn-group-vertical > .btn-group > .btn {
+  float: none;
+}
+.btn-group-vertical > .btn + .btn,
+.btn-group-vertical > .btn + .btn-group,
+.btn-group-vertical > .btn-group + .btn,
+.btn-group-vertical > .btn-group + .btn-group {
+  margin-top: -1px;
+  margin-left: 0;
+}
+.btn-group-vertical > .btn:not(:first-child):not(:last-child) {
+  border-radius: 0;
+}
+.btn-group-vertical > .btn:first-child:not(:last-child) {
+  border-top-right-radius: 4px;
+  border-top-left-radius: 4px;
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn:last-child:not(:first-child) {
+  border-top-right-radius: 0;
+  border-top-left-radius: 0;
+  border-bottom-right-radius: 4px;
+  border-bottom-left-radius: 4px;
+}
+.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {
+  border-radius: 0;
+}
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,
+.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {
+  border-bottom-right-radius: 0;
+  border-bottom-left-radius: 0;
+}
+.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {
+  border-top-right-radius: 0;
+  border-top-left-radius: 0;
+}
+.btn-group-justified {
+  display: table;
+  width: 100%;
+  table-layout: fixed;
+  border-collapse: separate;
+}
+.btn-group-justified > .btn,
+.btn-group-justified > .btn-group {
+  float: none;
+  display: table-cell;
+  width: 1%;
+}
+.btn-group-justified > .btn-group .btn {
+  width: 100%;
+}
+.btn-group-justified > .btn-group .dropdown-menu {
+  left: auto;
+}
+[data-toggle="buttons"] > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="radio"],
+[data-toggle="buttons"] > .btn input[type="checkbox"],
+[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] {
+  position: absolute;
+  clip: rect(0, 0, 0, 0);
+  pointer-events: none;
+}
+.list-group {
+  margin-bottom: 20px;
+  padding-left: 0;
+}
+.list-group-item {
+  position: relative;
+  display: block;
+  padding: 10px 15px;
+  margin-bottom: -1px;
+  background-color: #fff;
+  border: 1px solid #ddd;
+}
+.list-group-item:first-child {
+  border-top-right-radius: 4px;
+  border-top-left-radius: 4px;
+}
+.list-group-item:last-child {
+  margin-bottom: 0;
+  border-bottom-right-radius: 4px;
+  border-bottom-left-radius: 4px;
+}
+a.list-group-item,
+button.list-group-item {
+  color: #555;
+}
+a.list-group-item .list-group-item-heading,
+button.list-group-item .list-group-item-heading {
+  color: #333;
+}
+a.list-group-item:hover,
+button.list-group-item:hover,
+a.list-group-item:focus,
+button.list-group-item:focus {
+  text-decoration: none;
+  color: #555;
+  background-color: #f5f5f5;
+}
+button.list-group-item {
+  width: 100%;
+  text-align: left;
+}
+.list-group-item.disabled,
+.list-group-item.disabled:hover,
+.list-group-item.disabled:focus {
+  background-color: #eeeeee;
+  color: #777777;
+  cursor: not-allowed;
+}
+.list-group-item.disabled .list-group-item-heading,
+.list-group-item.disabled:hover .list-group-item-heading,
+.list-group-item.disabled:focus .list-group-item-heading {
+  color: inherit;
+}
+.list-group-item.disabled .list-group-item-text,
+.list-group-item.disabled:hover .list-group-item-text,
+.list-group-item.disabled:focus .list-group-item-text {
+  color: #777777;
+}
+.list-group-item.active,
+.list-group-item.active:hover,
+.list-group-item.active:focus {
+  z-index: 2;
+  color: #fff;
+  background-color: #337ab7;
+  border-color: #337ab7;
+}
+.list-group-item.active .list-group-item-heading,
+.list-group-item.active:hover .list-group-item-heading,
+.list-group-item.active:focus .list-group-item-heading,
+.list-group-item.active .list-group-item-heading > small,
+.list-group-item.active:hover .list-group-item-heading > small,
+.list-group-item.active:focus .list-group-item-heading > small,
+.list-group-item.active .list-group-item-heading > .small,
+.list-group-item.active:hover .list-group-item-heading > .small,
+.list-group-item.active:focus .list-group-item-heading > .small {
+  color: inherit;
+}
+.list-group-item.active .list-group-item-text,
+.list-group-item.active:hover .list-group-item-text,
+.list-group-item.active:focus .list-group-item-text {
+  color: #c7ddef;
+}
+.list-group-item-success {
+  color: #3c763d;
+  background-color: #dff0d8;
+}
+a.list-group-item-success,
+button.list-group-item-success {
+  color: #3c763d;
+}
+a.list-group-item-success .list-group-item-heading,
+button.list-group-item-success .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-success:hover,
+button.list-group-item-success:hover,
+a.list-group-item-success:focus,
+button.list-group-item-success:focus {
+  color: #3c763d;
+  background-color: #d0e9c6;
+}
+a.list-group-item-success.active,
+button.list-group-item-success.active,
+a.list-group-item-success.active:hover,
+button.list-group-item-success.active:hover,
+a.list-group-item-success.active:focus,
+button.list-group-item-success.active:focus {
+  color: #fff;
+  background-color: #3c763d;
+  border-color: #3c763d;
+}
+.list-group-item-info {
+  color: #31708f;
+  background-color: #d9edf7;
+}
+a.list-group-item-info,
+button.list-group-item-info {
+  color: #31708f;
+}
+a.list-group-item-info .list-group-item-heading,
+button.list-group-item-info .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-info:hover,
+button.list-group-item-info:hover,
+a.list-group-item-info:focus,
+button.list-group-item-info:focus {
+  color: #31708f;
+  background-color: #c4e3f3;
+}
+a.list-group-item-info.active,
+button.list-group-item-info.active,
+a.list-group-item-info.active:hover,
+button.list-group-item-info.active:hover,
+a.list-group-item-info.active:focus,
+button.list-group-item-info.active:focus {
+  color: #fff;
+  background-color: #31708f;
+  border-color: #31708f;
+}
+.list-group-item-warning {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+}
+a.list-group-item-warning,
+button.list-group-item-warning {
+  color: #8a6d3b;
+}
+a.list-group-item-warning .list-group-item-heading,
+button.list-group-item-warning .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-warning:hover,
+button.list-group-item-warning:hover,
+a.list-group-item-warning:focus,
+button.list-group-item-warning:focus {
+  color: #8a6d3b;
+  background-color: #faf2cc;
+}
+a.list-group-item-warning.active,
+button.list-group-item-warning.active,
+a.list-group-item-warning.active:hover,
+button.list-group-item-warning.active:hover,
+a.list-group-item-warning.active:focus,
+button.list-group-item-warning.active:focus {
+  color: #fff;
+  background-color: #8a6d3b;
+  border-color: #8a6d3b;
+}
+.list-group-item-danger {
+  color: #a94442;
+  background-color: #f2dede;
+}
+a.list-group-item-danger,
+button.list-group-item-danger {
+  color: #a94442;
+}
+a.list-group-item-danger .list-group-item-heading,
+button.list-group-item-danger .list-group-item-heading {
+  color: inherit;
+}
+a.list-group-item-danger:hover,
+button.list-group-item-danger:hover,
+a.list-group-item-danger:focus,
+button.list-group-item-danger:focus {
+  color: #a94442;
+  background-color: #ebcccc;
+}
+a.list-group-item-danger.active,
+button.list-group-item-danger.active,
+a.list-group-item-danger.active:hover,
+button.list-group-item-danger.active:hover,
+a.list-group-item-danger.active:focus,
+button.list-group-item-danger.active:focus {
+  color: #fff;
+  background-color: #a94442;
+  border-color: #a94442;
+}
+.list-group-item-heading {
+  margin-top: 0;
+  margin-bottom: 5px;
+}
+.list-group-item-text {
+  margin-bottom: 0;
+  line-height: 1.3;
+}
+.panel {
+  margin-bottom: 20px;
+  background-color: #fff;
+  border: 1px solid transparent;
+  border-radius: 4px;
+  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
+  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
+}
+.panel-body {
+  padding: 15px;
+}
+.panel-heading {
+  padding: 10px 15px;
+  border-bottom: 1px solid transparent;
+  border-top-right-radius: 3px;
+  border-top-left-radius: 3px;
+}
+.panel-heading > .dropdown .dropdown-toggle {
+  color: inherit;
+}
+.panel-title {
+  margin-top: 0;
+  margin-bottom: 0;
+  font-size: 16px;
+  color: inherit;
+}
+.panel-title > a,
+.panel-title > small,
+.panel-title > .small,
+.panel-title > small > a,
+.panel-title > .small > a {
+  color: inherit;
+}
+.panel-footer {
+  padding: 10px 15px;
+  background-color: #f5f5f5;
+  border-top: 1px solid #ddd;
+  border-bottom-right-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+.panel > .list-group,
+.panel > .panel-collapse > .list-group {
+  margin-bottom: 0;
+}
+.panel > .list-group .list-group-item,
+.panel > .panel-collapse > .list-group .list-group-item {
+  border-width: 1px 0;
+  border-radius: 0;
+}
+.panel > .list-group:first-child .list-group-item:first-child,
+.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {
+  border-top: 0;
+  border-top-right-radius: 3px;
+  border-top-left-radius: 3px;
+}
+.panel > .list-group:last-child .list-group-item:last-child,
+.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {
+  border-bottom: 0;
+  border-bottom-right-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {
+  border-top-right-radius: 0;
+  border-top-left-radius: 0;
+}
+.panel-heading + .list-group .list-group-item:first-child {
+  border-top-width: 0;
+}
+.list-group + .panel-footer {
+  border-top-width: 0;
+}
+.panel > .table,
+.panel > .table-responsive > .table,
+.panel > .panel-collapse > .table {
+  margin-bottom: 0;
+}
+.panel > .table caption,
+.panel > .table-responsive > .table caption,
+.panel > .panel-collapse > .table caption {
+  padding-left: 15px;
+  padding-right: 15px;
+}
+.panel > .table:first-child,
+.panel > .table-responsive:first-child > .table:first-child {
+  border-top-right-radius: 3px;
+  border-top-left-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {
+  border-top-left-radius: 3px;
+  border-top-right-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {
+  border-top-left-radius: 3px;
+}
+.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,
+.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,
+.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,
+.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {
+  border-top-right-radius: 3px;
+}
+.panel > .table:last-child,
+.panel > .table-responsive:last-child > .table:last-child {
+  border-bottom-right-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {
+  border-bottom-left-radius: 3px;
+  border-bottom-right-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {
+  border-bottom-left-radius: 3px;
+}
+.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,
+.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,
+.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,
+.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {
+  border-bottom-right-radius: 3px;
+}
+.panel > .panel-body + .table,
+.panel > .panel-body + .table-responsive,
+.panel > .table + .panel-body,
+.panel > .table-responsive + .panel-body {
+  border-top: 1px solid #ddd;
+}
+.panel > .table > tbody:first-child > tr:first-child th,
+.panel > .table > tbody:first-child > tr:first-child td {
+  border-top: 0;
+}
+.panel > .table-bordered,
+.panel > .table-responsive > .table-bordered {
+  border: 0;
+}
+.panel > .table-bordered > thead > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,
+.panel > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,
+.panel > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,
+.panel > .table-bordered > thead > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,
+.panel > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,
+.panel > .table-bordered > tfoot > tr > td:first-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {
+  border-left: 0;
+}
+.panel > .table-bordered > thead > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,
+.panel > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,
+.panel > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,
+.panel > .table-bordered > thead > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,
+.panel > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,
+.panel > .table-bordered > tfoot > tr > td:last-child,
+.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {
+  border-right: 0;
+}
+.panel > .table-bordered > thead > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,
+.panel > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,
+.panel > .table-bordered > thead > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,
+.panel > .table-bordered > tbody > tr:first-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {
+  border-bottom: 0;
+}
+.panel > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,
+.panel > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,
+.panel > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,
+.panel > .table-bordered > tfoot > tr:last-child > th,
+.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {
+  border-bottom: 0;
+}
+.panel > .table-responsive {
+  border: 0;
+  margin-bottom: 0;
+}
+.panel-group {
+  margin-bottom: 20px;
+}
+.panel-group .panel {
+  margin-bottom: 0;
+  border-radius: 4px;
+}
+.panel-group .panel + .panel {
+  margin-top: 5px;
+}
+.panel-group .panel-heading {
+  border-bottom: 0;
+}
+.panel-group .panel-heading + .panel-collapse > .panel-body,
+.panel-group .panel-heading + .panel-collapse > .list-group {
+  border-top: 1px solid #ddd;
+}
+.panel-group .panel-footer {
+  border-top: 0;
+}
+.panel-group .panel-footer + .panel-collapse .panel-body {
+  border-bottom: 1px solid #ddd;
+}
+.panel-default {
+  border-color: #ddd;
+}
+.panel-default > .panel-heading {
+  color: #333333;
+  background-color: #f5f5f5;
+  border-color: #ddd;
+}
+.panel-default > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #ddd;
+}
+.panel-default > .panel-heading .badge {
+  color: #f5f5f5;
+  background-color: #333333;
+}
+.panel-default > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #ddd;
+}
+.panel-primary {
+  border-color: #337ab7;
+}
+.panel-primary > .panel-heading {
+  color: #fff;
+  background-color: #337ab7;
+  border-color: #337ab7;
+}
+.panel-primary > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #337ab7;
+}
+.panel-primary > .panel-heading .badge {
+  color: #337ab7;
+  background-color: #fff;
+}
+.panel-primary > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #337ab7;
+}
+.panel-success {
+  border-color: #d6e9c6;
+}
+.panel-success > .panel-heading {
+  color: #3c763d;
+  background-color: #dff0d8;
+  border-color: #d6e9c6;
+}
+.panel-success > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #d6e9c6;
+}
+.panel-success > .panel-heading .badge {
+  color: #dff0d8;
+  background-color: #3c763d;
+}
+.panel-success > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #d6e9c6;
+}
+.panel-info {
+  border-color: #bce8f1;
+}
+.panel-info > .panel-heading {
+  color: #31708f;
+  background-color: #d9edf7;
+  border-color: #bce8f1;
+}
+.panel-info > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #bce8f1;
+}
+.panel-info > .panel-heading .badge {
+  color: #d9edf7;
+  background-color: #31708f;
+}
+.panel-info > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #bce8f1;
+}
+.panel-warning {
+  border-color: #faebcc;
+}
+.panel-warning > .panel-heading {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+  border-color: #faebcc;
+}
+.panel-warning > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #faebcc;
+}
+.panel-warning > .panel-heading .badge {
+  color: #fcf8e3;
+  background-color: #8a6d3b;
+}
+.panel-warning > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #faebcc;
+}
+.panel-danger {
+  border-color: #ebccd1;
+}
+.panel-danger > .panel-heading {
+  color: #a94442;
+  background-color: #f2dede;
+  border-color: #ebccd1;
+}
+.panel-danger > .panel-heading + .panel-collapse > .panel-body {
+  border-top-color: #ebccd1;
+}
+.panel-danger > .panel-heading .badge {
+  color: #f2dede;
+  background-color: #a94442;
+}
+.panel-danger > .panel-footer + .panel-collapse > .panel-body {
+  border-bottom-color: #ebccd1;
+}
+.pager {
+  padding-left: 0;
+  margin: 20px 0;
+  list-style: none;
+  text-align: center;
+}
+.pager li {
+  display: inline;
+}
+.pager li > a,
+.pager li > span {
+  display: inline-block;
+  padding: 5px 14px;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  border-radius: 15px;
+}
+.pager li > a:hover,
+.pager li > a:focus {
+  text-decoration: none;
+  background-color: #eeeeee;
+}
+.pager .next > a,
+.pager .next > span {
+  float: right;
+}
+.pager .previous > a,
+.pager .previous > span {
+  float: left;
+}
+.pager .disabled > a,
+.pager .disabled > a:hover,
+.pager .disabled > a:focus,
+.pager .disabled > span {
+  color: #777777;
+  background-color: #fff;
+  cursor: not-allowed;
+}
+.well {
+  min-height: 20px;
+  padding: 19px;
+  margin-bottom: 20px;
+  background-color: #f5f5f5;
+  border: 1px solid #e3e3e3;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+}
+.well blockquote {
+  border-color: #ddd;
+  border-color: rgba(0, 0, 0, 0.15);
+}
+.well-lg {
+  padding: 24px;
+  border-radius: 6px;
+}
+.well-sm {
+  padding: 9px;
+  border-radius: 3px;
+}
+.close {
+  float: right;
+  font-size: 21px;
+  font-weight: bold;
+  line-height: 1;
+  color: #000;
+  text-shadow: 0 1px 0 #fff;
+  opacity: 0.2;
+  filter: alpha(opacity=20);
+}
+.close:hover,
+.close:focus {
+  color: #000;
+  text-decoration: none;
+  cursor: pointer;
+  opacity: 0.5;
+  filter: alpha(opacity=50);
+}
+button.close {
+  padding: 0;
+  cursor: pointer;
+  background: transparent;
+  border: 0;
+  -webkit-appearance: none;
+}
+.badge {
+  display: inline-block;
+  min-width: 10px;
+  padding: 3px 7px;
+  font-size: 12px;
+  font-weight: bold;
+  color: #fff;
+  line-height: 1;
+  vertical-align: middle;
+  white-space: nowrap;
+  text-align: center;
+  background-color: #777777;
+  border-radius: 10px;
+}
+.badge:empty {
+  display: none;
+}
+.btn .badge {
+  position: relative;
+  top: -1px;
+}
+.btn-xs .badge,
+.btn-group-xs > .btn .badge {
+  top: 0;
+  padding: 1px 5px;
+}
+a.badge:hover,
+a.badge:focus {
+  color: #fff;
+  text-decoration: none;
+  cursor: pointer;
+}
+.list-group-item.active > .badge,
+.nav-pills > .active > a > .badge {
+  color: #337ab7;
+  background-color: #fff;
+}
+.list-group-item > .badge {
+  float: right;
+}
+.list-group-item > .badge + .badge {
+  margin-right: 5px;
+}
+.nav-pills > li > a > .badge {
+  margin-left: 3px;
+}
+.modal-open {
+  overflow: hidden;
+}
+.modal {
+  display: none;
+  overflow: hidden;
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1050;
+  -webkit-overflow-scrolling: touch;
+  outline: 0;
+}
+.modal.fade .modal-dialog {
+  -webkit-transform: translate(0, -25%);
+  -ms-transform: translate(0, -25%);
+  -o-transform: translate(0, -25%);
+  transform: translate(0, -25%);
+  -webkit-transition: -webkit-transform 0.3s ease-out;
+  -moz-transition: -moz-transform 0.3s ease-out;
+  -o-transition: -o-transform 0.3s ease-out;
+  transition: transform 0.3s ease-out;
+}
+.modal.in .modal-dialog {
+  -webkit-transform: translate(0, 0);
+  -ms-transform: translate(0, 0);
+  -o-transform: translate(0, 0);
+  transform: translate(0, 0);
+}
+.modal-open .modal {
+  overflow-x: hidden;
+  overflow-y: auto;
+}
+.modal-dialog {
+  position: relative;
+  width: auto;
+  margin: 10px;
+}
+.modal-content {
+  position: relative;
+  background-color: #fff;
+  border: 1px solid #999;
+  border: 1px solid rgba(0, 0, 0, 0.2);
+  border-radius: 6px;
+  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+  box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
+  background-clip: padding-box;
+  outline: 0;
+}
+.modal-backdrop {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1040;
+  background-color: #000;
+}
+.modal-backdrop.fade {
+  opacity: 0;
+  filter: alpha(opacity=0);
+}
+.modal-backdrop.in {
+  opacity: 0.5;
+  filter: alpha(opacity=50);
+}
+.modal-header {
+  padding: 15px;
+  border-bottom: 1px solid #e5e5e5;
+}
+.modal-header .close {
+  margin-top: -2px;
+}
+.modal-title {
+  margin: 0;
+  line-height: 1.42857143;
+}
+.modal-body {
+  position: relative;
+  padding: 15px;
+}
+.modal-footer {
+  padding: 15px;
+  text-align: right;
+  border-top: 1px solid #e5e5e5;
+}
+.modal-footer .btn + .btn {
+  margin-left: 5px;
+  margin-bottom: 0;
+}
+.modal-footer .btn-group .btn + .btn {
+  margin-left: -1px;
+}
+.modal-footer .btn-block + .btn-block {
+  margin-left: 0;
+}
+.modal-scrollbar-measure {
+  position: absolute;
+  top: -9999px;
+  width: 50px;
+  height: 50px;
+  overflow: scroll;
+}
+@media (min-width: 768px) {
+  .modal-dialog {
+    width: 600px;
+    margin: 30px auto;
+  }
+  .modal-content {
+    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
+    box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
+  }
+  .modal-sm {
+    width: 300px;
+  }
+}
+@media (min-width: 992px) {
+  .modal-lg {
+    width: 900px;
+  }
+}
+.clearfix:before,
+.clearfix:after,
+.dl-horizontal dd:before,
+.dl-horizontal dd:after,
+.container:before,
+.container:after,
+.container-fluid:before,
+.container-fluid:after,
+.row:before,
+.row:after,
+.form-horizontal .form-group:before,
+.form-horizontal .form-group:after,
+.nav:before,
+.nav:after,
+.navbar:before,
+.navbar:after,
+.navbar-header:before,
+.navbar-header:after,
+.navbar-collapse:before,
+.navbar-collapse:after,
+.btn-toolbar:before,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:before,
+.btn-group-vertical > .btn-group:after,
+.panel-body:before,
+.panel-body:after,
+.pager:before,
+.pager:after,
+.modal-header:before,
+.modal-header:after,
+.modal-footer:before,
+.modal-footer:after {
+  content: " ";
+  display: table;
+}
+.clearfix:after,
+.dl-horizontal dd:after,
+.container:after,
+.container-fluid:after,
+.row:after,
+.form-horizontal .form-group:after,
+.nav:after,
+.navbar:after,
+.navbar-header:after,
+.navbar-collapse:after,
+.btn-toolbar:after,
+.btn-group-vertical > .btn-group:after,
+.panel-body:after,
+.pager:after,
+.modal-header:after,
+.modal-footer:after {
+  clear: both;
+}
+.center-block {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+.pull-right {
+  float: right !important;
+}
+.pull-left {
+  float: left !important;
+}
+.hide {
+  display: none !important;
+}
+.show {
+  display: block !important;
+}
+.invisible {
+  visibility: hidden;
+}
+.text-hide {
+  font: 0/0 a;
+  color: transparent;
+  text-shadow: none;
+  background-color: transparent;
+  border: 0;
+}
+.hidden {
+  display: none !important;
+}
+.affix {
+  position: fixed;
+}
+@-ms-viewport {
+  width: device-width;
+}
+.visible-xs,
+.visible-sm,
+.visible-md,
+.visible-lg {
+  display: none !important;
+}
+.visible-xs-block,
+.visible-xs-inline,
+.visible-xs-inline-block,
+.visible-sm-block,
+.visible-sm-inline,
+.visible-sm-inline-block,
+.visible-md-block,
+.visible-md-inline,
+.visible-md-inline-block,
+.visible-lg-block,
+.visible-lg-inline,
+.visible-lg-inline-block {
+  display: none !important;
+}
+@media (max-width: 767px) {
+  .visible-xs {
+    display: block !important;
+  }
+  table.visible-xs {
+    display: table !important;
+  }
+  tr.visible-xs {
+    display: table-row !important;
+  }
+  th.visible-xs,
+  td.visible-xs {
+    display: table-cell !important;
+  }
+}
+@media (max-width: 767px) {
+  .visible-xs-block {
+    display: block !important;
+  }
+}
+@media (max-width: 767px) {
+  .visible-xs-inline {
+    display: inline !important;
+  }
+}
+@media (max-width: 767px) {
+  .visible-xs-inline-block {
+    display: inline-block !important;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  .visible-sm {
+    display: block !important;
+  }
+  table.visible-sm {
+    display: table !important;
+  }
+  tr.visible-sm {
+    display: table-row !important;
+  }
+  th.visible-sm,
+  td.visible-sm {
+    display: table-cell !important;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  .visible-sm-block {
+    display: block !important;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  .visible-sm-inline {
+    display: inline !important;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  .visible-sm-inline-block {
+    display: inline-block !important;
+  }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+  .visible-md {
+    display: block !important;
+  }
+  table.visible-md {
+    display: table !important;
+  }
+  tr.visible-md {
+    display: table-row !important;
+  }
+  th.visible-md,
+  td.visible-md {
+    display: table-cell !important;
+  }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+  .visible-md-block {
+    display: block !important;
+  }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+  .visible-md-inline {
+    display: inline !important;
+  }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+  .visible-md-inline-block {
+    display: inline-block !important;
+  }
+}
+@media (min-width: 1200px) {
+  .visible-lg {
+    display: block !important;
+  }
+  table.visible-lg {
+    display: table !important;
+  }
+  tr.visible-lg {
+    display: table-row !important;
+  }
+  th.visible-lg,
+  td.visible-lg {
+    display: table-cell !important;
+  }
+}
+@media (min-width: 1200px) {
+  .visible-lg-block {
+    display: block !important;
+  }
+}
+@media (min-width: 1200px) {
+  .visible-lg-inline {
+    display: inline !important;
+  }
+}
+@media (min-width: 1200px) {
+  .visible-lg-inline-block {
+    display: inline-block !important;
+  }
+}
+@media (max-width: 767px) {
+  .hidden-xs {
+    display: none !important;
+  }
+}
+@media (min-width: 768px) and (max-width: 991px) {
+  .hidden-sm {
+    display: none !important;
+  }
+}
+@media (min-width: 992px) and (max-width: 1199px) {
+  .hidden-md {
+    display: none !important;
+  }
+}
+@media (min-width: 1200px) {
+  .hidden-lg {
+    display: none !important;
+  }
+}
+.visible-print {
+  display: none !important;
+}
+@media print {
+  .visible-print {
+    display: block !important;
+  }
+  table.visible-print {
+    display: table !important;
+  }
+  tr.visible-print {
+    display: table-row !important;
+  }
+  th.visible-print,
+  td.visible-print {
+    display: table-cell !important;
+  }
+}
+.visible-print-block {
+  display: none !important;
+}
+@media print {
+  .visible-print-block {
+    display: block !important;
+  }
+}
+.visible-print-inline {
+  display: none !important;
+}
+@media print {
+  .visible-print-inline {
+    display: inline !important;
+  }
+}
+.visible-print-inline-block {
+  display: none !important;
+}
+@media print {
+  .visible-print-inline-block {
+    display: inline-block !important;
+  }
+}
+@media print {
+  .hidden-print {
+    display: none !important;
+  }
+}
+.auth-message {
+  background-color: #eeeeee;
+  padding: 20px 0px;
+  width: 100%;
+  position: fixed;
+  top: -100%;
+  left: 0px;
+  z-index: 1070;
+  transition: top 300ms ease;
+}
+.auth-message.show {
+  top: 0px;
+  bottom: auto;
+}
+.auth-message p {
+  padding: 5px 0px;
+  color: #222222;
+}
+@media screen and (max-width: 991px) {
+  .auth-message {
+    text-align: center;
+  }
+  .auth-message .btn {
+    padding: 10px 16px;
+    font-size: 18px;
+  }
+}
+.alerts-snackbar {
+  position: fixed;
+  top: -100%;
+  width: 100%;
+  z-index: 1060;
+  text-align: center;
+  font-size: 18px;
+  transition: top 300ms ease;
+  pointer-events: none;
+}
+.alerts-snackbar.in {
+  top: 0px;
+  transition: top 200ms ease;
+}
+.alerts-snackbar p {
+  display: inline-block;
+  border-radius: 0px 0px 4px 4px;
+  margin: 0px;
+  pointer-events: all;
+}
+.loader {
+  width: 100%;
+  height: 49px;
+  text-align: center;
+}
+.loader.loader-spaced {
+  margin: 40px 0px;
+}
+.loader-spinning-wheel {
+  width: 49px;
+  height: 49px;
+  margin: 0 auto;
+  border: 3px solid #777777;
+  border-radius: 50%;
+  border-left-color: transparent;
+  border-right-color: transparent;
+  animation: cssload-spin 575ms infinite linear;
+  -o-animation: cssload-spin 575ms infinite linear;
+  -ms-animation: cssload-spin 575ms infinite linear;
+  -webkit-animation: cssload-spin 575ms infinite linear;
+  -moz-animation: cssload-spin 575ms infinite linear;
+}
+@keyframes cssload-spin {
+  100% {
+    transform: rotate(360deg);
+  }
+}
+@-o-keyframes cssload-spin {
+  100% {
+    -o-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@-ms-keyframes cssload-spin {
+  100% {
+    -ms-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@-webkit-keyframes cssload-spin {
+  100% {
+    -webkit-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+@-moz-keyframes cssload-spin {
+  100% {
+    -moz-transform: rotate(360deg);
+    transform: rotate(360deg);
+  }
+}
+.navbar {
+  margin-bottom: 0px;
+}
+.navbar .navbar-full .navbar-brand > * {
+  display: inline-block;
+}
+.navbar .navbar-full .navbar-brand img {
+  height: 16px;
+}
+.navbar .navbar-full .nav-guest,
+.navbar .navbar-full .nav-user {
+  float: right;
+}
+.navbar .navbar-full .nav-guest .navbar-btn,
+.navbar .navbar-full .nav-user .navbar-btn {
+  margin-left: 15px;
+}
+.navbar .navbar-full .nav-user .dropdown-toggle {
+  padding: 8px;
+}
+.navbar .navbar-full .nav-user .dropdown-toggle img {
+  width: 34px;
+  height: 34px;
+}
+.navbar ul.navbar-compact-nav {
+  margin: 0px;
+  display: table;
+  width: 100%;
+}
+.navbar ul.navbar-compact-nav > li {
+  display: table-cell;
+}
+.navbar ul.navbar-compact-nav > li > a,
+.navbar ul.navbar-compact-nav > li > button {
+  background: none;
+  border: none;
+  margin: 0px;
+  padding-top: 10px;
+  padding-bottom: 10px;
+  width: 100%;
+  color: #777;
+  text-align: center;
+}
+.navbar ul.navbar-compact-nav > li > a:hover,
+.navbar ul.navbar-compact-nav > li > button:hover,
+.navbar ul.navbar-compact-nav > li > a:focus,
+.navbar ul.navbar-compact-nav > li > button:focus {
+  color: #333;
+  background-color: transparent;
+}
+.navbar ul.navbar-compact-nav > li > a > img,
+.navbar ul.navbar-compact-nav > li > button > img {
+  width: 24px;
+  height: 24px;
+}
+.navbar ul.navbar-compact-nav > li > button {
+  padding-top: 10px;
+  padding-bottom: 10px;
+}
+.navbar ul.navbar-compact-nav > li > a > .material-icon {
+  font-size: 24px;
+  line-height: 24px;
+}
+@media (max-width: 767px) {
+  .navbar.navbar-misago {
+    min-height: auto;
+  }
+}
+.nav-side > a > .material-icon {
+  margin: -5px;
+  margin-right: 10px;
+  position: relative;
+  bottom: 2px;
+  width: 24px;
+  height: 24px;
+  font-size: 24px;
+  line-height: 24px;
+}
+@font-face {
+  font-family: 'Material Icons';
+  font-style: normal;
+  font-weight: 400;
+  src: url(../fonts/MaterialIcons-Regular.eot);
+  /* For IE6-8 */
+  src: local('Material Icons'), local('MaterialIcons-Regular'), url(../fonts/MaterialIcons-Regular.woff2) format('woff2'), url(../fonts/MaterialIcons-Regular.woff) format('woff'), url(../fonts/MaterialIcons-Regular.ttf) format('truetype');
+}
+.material-icon {
+  font-family: 'Material Icons';
+  font-weight: normal;
+  font-style: normal;
+  display: inline-block;
+  width: 1em;
+  height: 1em;
+  line-height: 1;
+  text-align: center;
+  text-transform: none;
+  letter-spacing: normal;
+  vertical-align: middle;
+  word-wrap: normal;
+  white-space: nowrap;
+  direction: ltr;
+  /* Support for all WebKit browsers. */
+  -webkit-font-smoothing: antialiased;
+  /* Support for Safari and Chrome. */
+  text-rendering: optimizeLegibility;
+  /* Support for Firefox. */
+  -moz-osx-font-smoothing: grayscale;
+  /* Support for IE. */
+  font-feature-settings: 'liga';
+}
+@media screen and (max-width: 991px) {
+  .modal-message {
+    text-align: center;
+  }
+  .modal-message .message-icon {
+    margin: 30px;
+  }
+  .modal-message .message-icon .material-icon {
+    font-size: 160px;
+  }
+}
+@media screen and (min-width: 992px) {
+  .modal-message .modal-body {
+    padding-top: 20px;
+    padding-bottom: 30px;
+  }
+  .modal-message .message-icon {
+    float: left;
+    position: relative;
+    left: 7px;
+  }
+  .modal-message .message-icon .material-icon {
+    font-size: 50px;
+  }
+  .modal-message .message-body {
+    margin-left: 75px;
+    margin-top: 10px;
+  }
+  .modal-message .message-body p {
+    margin-top: 20px;
+  }
+  .modal-message .message-body .lead {
+    margin-top: 0px;
+    margin-bottom: 0px;
+  }
+}
+.modal-loader {
+  padding: 50px 0px;
+}
+.modal-loader .loader {
+  width: 100%;
+  height: 80px;
+  text-align: center;
+}
+.modal-loader .loader-spinning-wheel {
+  width: 80px;
+  height: 80px;
+}
+.modal-register .modal-footer a {
+  float: left;
+  margin-top: 6.66666667px;
+}
+@media screen and (max-width: 991px) {
+  .modal-register .modal-footer {
+    text-align: center;
+  }
+  .modal-register .modal-footer a {
+    display: block;
+  }
+  .modal-register .modal-footer .btn {
+    display: block;
+    float: none;
+    margin-top: 10px;
+    width: 100%;
+  }
+}
+.has-feedback .material-icon.form-control-feedback {
+  top: 6px;
+  right: 24px;
+  font-size: 1.42857143;
+  line-height: 1.42857143;
+}
+.well.well-form.well-done {
+  font-size: 18px;
+  text-align: center;
+}
+.well.well-form.well-done .message-icon {
+  margin-bottom: 10px;
+  font-size: 90px;
+  line-height: 90px;
+}
+.well.well-form.well-done .message-body {
+  margin-bottom: 6.66666667px;
+}
+.well.well-form.well-noscript {
+  font-size: 18px;
+  text-align: center;
+}
+.well.well-form.well-noscript .message-icon {
+  margin-bottom: 10px;
+  font-size: 90px;
+  line-height: 90px;
+}
+.btn.btn-yes-no,
+.btn.btn-select {
+  background: transparent;
+  border: 1px solid #eeeeee;
+}
+.btn.btn-yes-no .material-icon,
+.btn.btn-select .material-icon {
+  margin: -4px 0px;
+  margin-right: 8px;
+  position: relative;
+  bottom: 1px;
+  width: 20px;
+  height: 20px;
+  font-size: 20px;
+  line-height: 20px;
+}
+input.hidden-file-upload {
+  position: absolute;
+  top: -9999px;
+  left: -9999px;
+}
+.form-search {
+  position: relative;
+}
+.form-search .form-control {
+  padding-right: 30px;
+}
+.form-search .material-icon {
+  position: absolute;
+  top: 5px;
+  right: 5px;
+  color: #777777;
+  font-size: 24px;
+  line-height: 24px;
+  pointer-events: none;
+}
+.btn.btn-loading,
+.btn.btn-loading:link,
+.btn.btn-loading:active,
+.btn.btn-loading:visited,
+.btn.btn-loading:hover,
+.btn.btn-loading:focus {
+  color: transparent;
+}
+.btn.btn-loading .loader,
+.btn.btn-loading:link .loader,
+.btn.btn-loading:active .loader,
+.btn.btn-loading:visited .loader,
+.btn.btn-loading:hover .loader,
+.btn.btn-loading:focus .loader {
+  height: 20px;
+  margin-top: -20px;
+}
+.btn.btn-loading .loader > div,
+.btn.btn-loading:link .loader > div,
+.btn.btn-loading:active .loader > div,
+.btn.btn-loading:visited .loader > div,
+.btn.btn-loading:hover .loader > div,
+.btn.btn-loading:focus .loader > div {
+  width: 20px;
+  height: 20px;
+}
+.btn.btn-loading.btn-default .loader > div {
+  border-top-color: #333;
+  border-bottom-color: #333;
+}
+.btn.btn-loading.btn-primary .loader > div {
+  border-top-color: #fff;
+  border-bottom-color: #fff;
+}
+.btn.btn-loading.btn-success .loader > div {
+  border-top-color: #fff;
+  border-bottom-color: #fff;
+}
+.btn.btn-loading.btn-info .loader > div {
+  border-top-color: #fff;
+  border-bottom-color: #fff;
+}
+.btn.btn-loading.btn-warning .loader > div {
+  border-top-color: #fff;
+  border-bottom-color: #fff;
+}
+.btn.btn-loading.btn-danger .loader > div {
+  border-top-color: #fff;
+  border-bottom-color: #fff;
+}
+.btn .material-icon {
+  margin-right: 3px;
+  position: relative;
+  bottom: 1px;
+}
+.dropdown-menu > li > a,
+.dropdown-menu > li > .btn-link {
+  display: block;
+  border: none;
+  clear: both;
+  float: none;
+  padding: 4px 20px;
+  width: 100%;
+  color: #333333;
+  font-weight: normal;
+  line-height: 1.42857143;
+  text-align: left;
+  white-space: nowrap;
+}
+.dropdown-menu > li > a:hover,
+.dropdown-menu > li > .btn-link:hover,
+.dropdown-menu > li > a:focus,
+.dropdown-menu > li > .btn-link:focus {
+  background-color: #f5f5f5;
+  color: #262626;
+  text-decoration: none;
+}
+.dropdown-menu > li > a .material-icon,
+.dropdown-menu > li > .btn-link .material-icon {
+  margin: -2px 0px;
+  margin-right: 7px;
+  position: relative;
+  bottom: 1px;
+  font-size: 18px;
+}
+.dropdown-menu > li > a .badge,
+.dropdown-menu > li > .btn-link .badge {
+  float: right;
+}
+.dropdown-menu {
+  width: 210px;
+}
+.dropdown-menu .dropdown-footer {
+  padding: 6px 20px;
+}
+.dropdown-menu .dropdown-buttons {
+  padding: 2px 20px;
+}
+.dropdown-menu .dropdown-buttons .btn {
+  margin: 4px 0px;
+}
+.mobile-dropdown,
+.compact-nav {
+  position: static;
+  margin: 0px;
+  overflow: auto;
+}
+.mobile-dropdown.open,
+.compact-nav.open {
+  margin-bottom: 20px;
+}
+.compact-nav.open {
+  margin-top: -20px;
+}
+.mobile-dropdown.open > .dropdown-menu,
+.compact-nav.open > .dropdown-menu {
+  border: none;
+  border-radius: 0;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+  display: block;
+  margin: 0px;
+  width: 100%;
+  position: static;
+}
+.user-dropdown .guest-preview {
+  text-align: center;
+}
+.user-dropdown .guest-preview .row {
+  margin: 0px;
+}
+.navbar .user-dropdown {
+  width: 240px;
+}
+.user-dropdown .dropdown-header {
+  padding: 6px 20px;
+  font-size: 18px;
+}
+.user-dropdown .dropdown-header strong {
+  font-weight: normal;
+}
+.page-header {
+  margin: 0px;
+  margin-bottom: 20px;
+}
+.page-header .btn-aligned {
+  float: right;
+  margin-top: 23px;
+  margin-left: 8px;
+}
+@media screen and (max-width: 991px) {
+  .container h1 {
+    font-size: 22.5px;
+  }
+  .container .btn-aligned {
+    float: right;
+    margin-top: 13px;
+  }
+  .container .btn-icon .material-icon {
+    width: 24px;
+    height: 24px;
+    font-size: 24px;
+    line-height: 24px;
+  }
+}
+.header-stats .list-inline li {
+  margin-right: 8px;
+}
+.header-stats .list-inline li .status-icon {
+  width: 18px;
+  height: 18px;
+  margin-right: 4px;
+  position: relative;
+  bottom: 1px;
+  font-size: 18px;
+  line-height: 18px;
+}
+@media screen and (max-width: 991px) {
+  .header-stats .list-inline {
+    margin-top: 10px;
+    margin-bottom: 0px;
+    font-size: 12px;
+  }
+}
+.page-header .page-tabs .nav > li {
+  margin: 0px;
+}
+.page-header .page-tabs .nav > li > a {
+  border-radius: 0px;
+}
+@media screen and (max-width: 991px) {
+  .page-header .page-tabs {
+    margin-top: 9px;
+    margin-bottom: -9px;
+  }
+  .page-header .page-tabs .container {
+    padding: 0px;
+    width: 100%;
+  }
+  .page-header .page-tabs .container .nav-pills li {
+    display: block;
+    float: inherit;
+    width: auto;
+  }
+}
+@media screen and (min-width: 992px) {
+  .page-header.tabbed {
+    padding-bottom: 0px;
+  }
+}
+@media screen and (max-width: 991px) {
+  .panel-message-body {
+    text-align: center;
+  }
+  .panel-message-body .message-icon {
+    margin: 30px;
+  }
+  .panel-message-body .message-icon .material-icon {
+    font-size: 160px;
+  }
+}
+@media screen and (min-width: 992px) {
+  .panel-message-body {
+    padding: 20px;
+    padding-bottom: 30px;
+  }
+  .panel-message-body .message-icon {
+    float: left;
+  }
+  .panel-message-body .message-icon .material-icon {
+    font-size: 50px;
+  }
+  .panel-message-body .message-body {
+    margin-left: 75px;
+    margin-top: 10px;
+  }
+  .panel-message-body .message-body .lead {
+    margin-bottom: 0px;
+  }
+  .panel-message-body .message-body .help-block {
+    margin-top: 13.2px;
+  }
+}
+.panel-body-loading {
+  padding: 0px;
+  text-align: center;
+}
+.misago-footer {
+  margin-top: 30px;
+  margin-bottom: 50px;
+}
+.misago-footer .footer-content {
+  border-top: 1px solid #eeeeee;
+  padding-top: 30px;
+}
+.misago-footer .noscript-message .material-icon {
+  position: relative;
+  bottom: 1px;
+  font-size: 18px;
+}
+.ui-preview,
+.ui-preview-text,
+.ui-preview-img {
+  background: #fafafa;
+  border-radius: 5px;
+  color: #fafafa;
+  -webkit-animation: ui-preview-animation 1.5s linear infinite;
+  -o-animation: ui-preview-animation 1.5s linear infinite;
+  animation: ui-preview-animation 1.5s linear infinite;
+}
+@-webkit-keyframes ui-preview-animation {
+  0% {
+    background: #fafafa;
+    color: #fafafa;
+  }
+  50% {
+    background: #e0e0e0;
+    color: #e0e0e0;
+  }
+  100% {
+    background: #fafafa;
+    color: #fafafa;
+  }
+}
+@keyframes ui-preview-animation {
+  0% {
+    background: #fafafa;
+    color: #fafafa;
+  }
+  50% {
+    background: #e0e0e0;
+    color: #e0e0e0;
+  }
+  100% {
+    background: #fafafa;
+    color: #fafafa;
+  }
+}
+.ui-preview-text {
+  border-radius: 100px;
+  display: inline-block;
+  height: 14px;
+  position: relative;
+  top: 3px;
+}
+.ui-preview-paragraph .ui-preview-text {
+  margin-right: 6px;
+}
+.ui-preview-paragraph .ui-preview-text:last-child {
+  margin-right: 0px;
+}
+.ui-preview .list-group {
+  padding: 1px;
+}
+.ui-preview .list-group > li {
+  border: none;
+  margin-bottom: 1px;
+}
+.ui-preview .list-group > li:last-child {
+  margin-bottom: 0px;
+}
+.pager-undercontent {
+  margin-top: -20px;
+}
+.pager-progress-bar {
+  list-style: none;
+  margin: 0px;
+  margin-top: -46px;
+  padding: 0px;
+  overflow: auto;
+  text-align: center;
+}
+.pager-progress-bar li {
+  display: inline-block;
+}
+.pager-progress-bar li a {
+  padding: 0px 6px;
+}
+.pager-progress-bar li.active a {
+  font-weight: bold;
+}
+.pager-more {
+  text-align: center;
+}
+@media screen and (max-width: 991px) {
+  .pager-more .btn {
+    display: block;
+    text-align: center;
+  }
+}
+@media screen and (min-width: 992px) {
+  .pager-more .btn {
+    padding-left: 20px;
+    padding-right: 20px;
+  }
+}
+.user-status.user-banned .status-icon {
+  color: #d9534f;
+}
+.user-status.user-online .status-icon {
+  color: #5cb85c;
+}
+.user-status.user-offline .status-icon {
+  color: #777777;
+}
+.user-status > .status-icon.ui-preview {
+  display: inline-block;
+  border-radius: 100px;
+  width: 20px;
+  height: 20px;
+  font-weight: 0px;
+}
+.user-status > .status-label.ui-preview {
+  display: inline-block;
+  margin-left: 6px;
+  width: 40px;
+}
+.user-card {
+  background: #fff;
+  border: 1px solid #eeeeee;
+  border-radius: 6px;
+  margin-bottom: 20px;
+  overflow: hidden;
+}
+.user-card .user-card-bg-image {
+  background: #fff;
+}
+.user-card .user-card-bg-image > img {
+  display: none;
+}
+.user-card .user-details {
+  padding: 6px 12px;
+  overflow: auto;
+}
+.user-card .user-details .user-avatar {
+  float: left;
+}
+.user-card .user-details .user-avatar img {
+  width: 60px;
+  height: 60px;
+}
+.user-card .user-details .user-name {
+  margin-left: 76px;
+}
+.user-card .user-details .user-name .item-title {
+  font-size: 18px;
+}
+.user-card .user-details .user-subscript {
+  margin-left: 76px;
+  margin-bottom: 0px;
+  overflow: auto;
+  color: #777777;
+  font-size: 9.24px;
+}
+.user-card .user-details .user-subscript > * {
+  display: block;
+  float: left;
+  height: auto;
+  padding: 0px;
+  margin: 0px;
+  margin-right: 8px;
+}
+.user-card .user-details .user-subscript > * .status-icon {
+  margin-right: 3px;
+  position: relative;
+  bottom: 1px;
+}
+.user-card .user-details .user-subscript > * .ui-preview,
+.user-card .user-details .user-subscript > * .ui-preview-text {
+  height: 9.24px;
+  position: relative;
+  bottom: 0px;
+  font-size: 9.24px;
+  line-height: 9.24px;
+}
+.user-card .user-details .user-subscript > * .status-icon.ui-preview {
+  width: 9.24px;
+  margin-right: 0px;
+  bottom: 0px;
+}
+.user-card .user-card-stats {
+  border-top: 1px solid #eeeeee;
+  display: table;
+  table-layout: fixed;
+  width: 100%;
+}
+.user-card .user-card-stats ul {
+  display: table-row;
+}
+.user-card .user-card-stats ul li {
+  display: table-cell;
+  overflow: auto;
+  padding: 6px 12px;
+  font-size: 12px;
+  font-weight: bold;
+  text-align: center;
+}
+.user-card.ui-preview .user-name .ui-preview-text {
+  height: 18px;
+}
+.user-card.ui-preview .user-card-stats .ui-preview-text {
+  height: 12px;
+  width: 14px;
+  position: relative;
+  top: 0px;
+  font-size: 12px;
+  line-height: 12px;
+}
+@media screen and (max-width: 991px) {
+  .user-card .user-details .user-avatar img {
+    width: 46px;
+    height: 46px;
+  }
+  .user-card .user-details .user-name {
+    margin-left: 58px;
+    margin-top: 5px;
+    margin-bottom: 6px;
+  }
+  .user-card .user-details .user-subscript {
+    margin-left: 58px;
+  }
+}
+.toolbar {
+  display: block;
+  overflow: auto;
+  margin-bottom: 10px;
+}
+.toolbar.toolbar-bottom {
+  margin-top: 10px;
+  margin-bottom: 20px;
+}
+.toolbar > h3 {
+  font-size: 18px;
+}
+.toolbar > p {
+  padding: 6px 0px;
+  text-align: center;
+}
+@media screen and (min-width: 992px) {
+  .toolbar .toolbar-left {
+    float: left;
+  }
+  .toolbar .toolbar-right {
+    float: right;
+  }
+  .toolbar .toolbar-control,
+  .toolbar .toolbar-bottom > .form-control {
+    margin: 0px;
+    width: auto;
+  }
+  .toolbar > p,
+  .toolbar > h3 {
+    min-height: 34px;
+    margin: 0px;
+    padding-top: 6px;
+    text-align: left;
+  }
+}
+.item-title {
+  color: #333333;
+  font-weight: bold;
+  text-decoration: none;
+}
+a.item-title:link,
+a.item-title:active,
+a.item-title:visited,
+a.item-title:hover {
+  color: #333333;
+  font-weight: bold;
+}
+a.item-title:hover {
+  text-decoration: underline;
+}
+.message-line {
+  text-align: center;
+}
+.message-line .material-icon {
+  margin-right: 6.66666667px;
+  font-size: 20px;
+  line-height: 20px;
+  height: 20px;
+  width: 20px;
+}
+.modal-change-avatar .modal-avatar-index .avatar-preview {
+  border-radius: 6px;
+  margin: 0px auto;
+  overflow: hidden;
+  position: relative;
+  width: 200px;
+  height: 200px;
+}
+.modal-change-avatar .modal-avatar-index .avatar-preview .loader {
+  display: none;
+  position: absolute;
+  top: 50px;
+  height: 100px;
+}
+.modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel {
+  border-width: 10px;
+  border-color: #fff;
+  border-left-color: transparent;
+  border-right-color: transparent;
+  width: 100px;
+  height: 100px;
+}
+.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading img {
+  opacity: 0.33;
+  filter: alpha(opacity=33);
+}
+.modal-change-avatar .modal-avatar-index .avatar-preview.preview-loading .loader {
+  display: block;
+}
+@media (max-width: 767px) {
+  .modal-change-avatar .modal-avatar-index .avatar-preview {
+    margin-bottom: 20px;
+    width: 150px;
+    height: 150px;
+  }
+  .modal-change-avatar .modal-avatar-index .avatar-preview img {
+    width: 150px;
+    height: 150px;
+  }
+  .modal-change-avatar .modal-avatar-index .avatar-preview .loader {
+    top: 25px;
+    height: 100px;
+  }
+  .modal-change-avatar .modal-avatar-index .avatar-preview .loader .loader-spinning-wheel {
+    width: 100px;
+    height: 100px;
+  }
+}
+.modal-change-avatar .modal-avatar-index .btn {
+  text-align: left;
+}
+.modal-change-avatar .modal-avatar-upload {
+  text-align: center;
+}
+.modal-change-avatar .modal-avatar-upload .btn-pick-file {
+  background: transparent;
+  border: 2px solid #eeeeee;
+  border-radius: 6px;
+  padding: 10px 24px;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+  color: #777777;
+  font-size: 18px;
+  text-align: center;
+}
+.modal-change-avatar .modal-avatar-upload .btn-pick-file > .material-icon {
+  display: block;
+  margin: 0px auto;
+  margin-bottom: 13.2px;
+  font-size: 50px;
+  width: 50px;
+  height: 50px;
+}
+.modal-change-avatar .modal-avatar-upload .btn-pick-file:hover,
+.modal-change-avatar .modal-avatar-upload .btn-pick-file:active {
+  border-color: #777777;
+}
+.modal-change-avatar .modal-avatar-upload .text-muted {
+  margin-top: 13.2px;
+}
+.modal-change-avatar .modal-avatar-upload .upload-progress img {
+  border-radius: 4px;
+  margin-bottom: 20px;
+  max-height: 80px;
+  width: auto;
+}
+.modal-change-avatar .modal-avatar-upload .upload-progress .progress {
+  width: 70%;
+  margin: 0px auto;
+}
+.modal-avatar-crop .crop-form {
+  margin: 0px auto;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input {
+  margin-top: 10px;
+  -webkit-appearance: none;
+  border: 1px solid white;
+  width: 100%;
+  /*hide the outline behind the border*/
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-runnable-track {
+  width: 100%;
+  height: 8px;
+  background: #eeeeee;
+  border: none;
+  border-radius: 3px;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input::-webkit-slider-thumb {
+  -webkit-appearance: none;
+  border: none;
+  height: 20px;
+  width: 20px;
+  border-radius: 50%;
+  background: #777777;
+  margin-top: -6px;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus {
+  outline: none;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-webkit-slider-runnable-track {
+  background: #eeeeee;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-track {
+  width: 100%;
+  height: 8px;
+  background: #eeeeee;
+  border: none;
+  border-radius: 4px;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input::-moz-range-thumb {
+  border: none;
+  height: 20px;
+  width: 20px;
+  border-radius: 50%;
+  background: #777777;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input:-moz-focusring {
+  outline: 1px solid white;
+  outline-offset: -1px;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-track {
+  width: 100%;
+  height: 8px;
+  /*remove bg colour from the track, we'll use ms-fill-lower and ms-fill-upper instead */
+  background: transparent;
+  /*leave room for the larger thumb to overflow with a transparent border */
+  border-color: transparent;
+  border-width: 8px 0;
+  /*remove default tick marks*/
+  color: transparent;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-lower {
+  background: #eeeeee;
+  border-radius: 16px;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-fill-upper {
+  background: #eeeeee;
+  border-radius: 16px;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input::-ms-thumb {
+  border: none;
+  height: 20px;
+  width: 20px;
+  border-radius: 50%;
+  background: #777777;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-lower {
+  background: #eeeeee;
+}
+.modal-avatar-crop .crop-form .cropit-image-zoom-input:focus::-ms-fill-upper {
+  background: #eeeeee;
+}
+.modal-change-avatar .modal-avatar-gallery {
+  padding-bottom: 0px;
+}
+.modal-change-avatar .modal-avatar-gallery .avatars-gallery {
+  margin-bottom: 20px;
+}
+.modal-change-avatar .modal-avatar-gallery .avatars-gallery h3 {
+  margin-top: 0px;
+}
+.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .row {
+  margin-bottom: 10px;
+}
+.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn {
+  border-radius: 6px;
+  border: 2px solid #eeeeee;
+  background: none;
+  padding: 2px;
+}
+.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:hover,
+.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:focus {
+  border-color: #777777;
+}
+.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn.avatar-selected,
+.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn:active {
+  border-color: #337ab7;
+}
+.modal-change-avatar .modal-avatar-gallery .avatars-gallery-images .btn img {
+  border-radius: 4px;
+  width: 100%;
+}
+.list-inline.subcategories-list {
+  overflow: auto;
+}
+.list-inline.subcategories-list li {
+  display: block;
+  float: left;
+}
+.list-inline.subcategories-list li a,
+.list-inline.subcategories-list li a:link,
+.list-inline.subcategories-list li a:visited,
+.list-inline.subcategories-list li a:active,
+.list-inline.subcategories-list li a:hover,
+.list-inline.subcategories-list li a:focus {
+  background-color: #eeeeee;
+  border: 1px solid #e2e2e2;
+  border-radius: 4px;
+  display: inline-block;
+  padding: 6px 12px;
+  color: #555555;
+}
+.list-inline.subcategories-list li:focus,
+.list-inline.subcategories-list li a:hover,
+.list-inline.subcategories-list li a:active {
+  background-color: #e2e2e2;
+  color: #333333;
+  text-decoration: none;
+}
+.panel-category .panel-heading.heading-alone {
+  border-radius: 4px;
+  border-bottom: none;
+}
+.panel-category .panel-title,
+.panel-category h4 {
+  overflow: auto;
+  margin: 0px;
+  padding: 0px;
+  font-size: 18px;
+}
+.panel-category .panel-title a,
+.panel-category h4 a {
+  display: block;
+  float: left;
+  margin-top: 1px;
+}
+.panel-category .panel-title .read-status,
+.panel-category h4 .read-status {
+  float: left;
+}
+.panel-category .panel-title .read-status .material-icon,
+.panel-category h4 .read-status .material-icon {
+  margin: 0px;
+  margin-right: 4px;
+  width: 26px;
+  position: relative;
+  bottom: 1px;
+  color: #777777;
+  font-size: 24px;
+  line-height: 24px;
+  text-align: center;
+}
+.panel-category .panel-title .read-status.item-new .material-icon,
+.panel-category h4 .read-status.item-new .material-icon {
+  color: #5cb85c;
+}
+.panel-category .category-description p:last-child,
+.panel-category .subcategory-description p:last-child {
+  margin-bottom: 0px;
+}
+.panel-category .subcategory-description {
+  margin-top: 10px;
+  font-size: 12px;
+}
+.panel-category .category-subcategories .subcategories-list {
+  margin-top: 10px;
+}
+.panel-category .category-subcategories .subcategories-list a,
+.panel-category .category-subcategories .subcategories-list a:link,
+.panel-category .category-subcategories .subcategories-list a:visited,
+.panel-category .category-subcategories .subcategories-list a:active,
+.panel-category .category-subcategories .subcategories-list a:hover,
+.panel-category .category-subcategories .subcategories-list a:focus {
+  padding: 5px 10px;
+  font-size: 12px;
+}
+.category-last-activity {
+  overflow: auto;
+}
+.category-last-activity li {
+  display: block;
+  float: left;
+}
+.category-last-activity .thread-message {
+  overflow: auto;
+}
+.category-last-activity .thread-message .material-icon {
+  display: block;
+  float: left;
+  margin-right: 4px;
+  position: relative;
+  top: 1px;
+  font-size: 18px;
+  line-height: 18px;
+}
+@media screen and (max-width: 991px) {
+  .panel-category .panel-title,
+  .panel-category h4 {
+    margin-top: 3px;
+  }
+  .panel-category .category-stats {
+    display: none;
+  }
+  .panel-category .category-last-activity {
+    margin-bottom: 0px;
+  }
+  .panel-category .category-last-activity .thread-title {
+    float: none;
+    clear: both;
+    overflow: hidden;
+    margin-top: 10px;
+    margin-bottom: 4px;
+    padding-right: 0px;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+  }
+  .panel-category .category-last-activity .poster-name,
+  .panel-category .category-last-activity .thread-date {
+    font-size: 12px;
+  }
+  .panel-category .category-last-activity .thread-date {
+    position: relative;
+    top: 1px;
+  }
+  .panel-category .thread-message {
+    padding-top: 4px;
+    font-size: small;
+  }
+  .panel-category .thread-message .material-icon {
+    position: relative;
+    top: -1px;
+  }
+}
+@media screen and (min-width: 992px) {
+  .panel-category .category-stats {
+    float: right;
+    margin: 0px;
+    margin-top: -23px;
+    overflow: auto;
+  }
+  .panel-category .category-stats li {
+    display: block;
+    float: left;
+  }
+  .panel-category .category-last-activity {
+    margin-top: 4px;
+    margin-bottom: 0px;
+  }
+}
+@media screen and (max-width: 991px) {
+  .page-message .message-panel,
+  .page-error .message-panel {
+    text-align: center;
+  }
+  .page-message .message-icon,
+  .page-error .message-icon {
+    margin: 30px;
+  }
+  .page-message .message-icon .material-icon,
+  .page-error .message-icon .material-icon {
+    font-size: 160px;
+  }
+}
+@media screen and (min-width: 992px) {
+  .page-message .message-panel,
+  .page-error .message-panel {
+    margin: 60px auto;
+    max-width: 779.35px;
+    overflow: auto;
+  }
+  .page-message .message-icon,
+  .page-error .message-icon {
+    float: left;
+  }
+  .page-message .message-icon .material-icon,
+  .page-error .message-icon .material-icon {
+    font-size: 80px;
+  }
+  .page-message .message-body,
+  .page-error .message-body {
+    margin-top: 4px;
+    margin-left: 100px;
+  }
+}
+.threads-list {
+  margin-bottom: 20px;
+}
+.active-posters li {
+  display: block;
+  overflow: auto;
+}
+.active-posters .rank-user .rank-name,
+.active-posters .rank-user .user-title {
+  font-size: 12px;
+}
+.active-posters .rank-position small,
+.active-posters .rank-posts-total small,
+.active-posters .rank-posts-counted small {
+  color: #777777;
+}
+.active-posters .user-status {
+  font-size: 12px;
+}
+@media screen and (min-width: 992px) {
+  .active-posters .user-status {
+    margin-right: 12px;
+  }
+}
+.active-posters .user-status .status-icon {
+  margin-right: 3px;
+  position: relative;
+  bottom: 2px;
+}
+.active-posters .user-status .status-icon.ui-preview {
+  width: 12px;
+}
+.active-posters .user-status .ui-preview {
+  height: 12px;
+  position: relative;
+  top: 2px;
+  bottom: auto;
+}
+@media screen and (max-width: 991px) {
+  .active-posters .rank-user-avatar {
+    float: left;
+  }
+  .active-posters .rank-user-avatar img {
+    width: 36px;
+    height: 36px;
+    position: relative;
+    top: 3px;
+  }
+  .active-posters .rank-user {
+    float: left;
+    margin-left: 13.2px;
+    width: 40%;
+  }
+  .active-posters .rank-user .user-name .item-title {
+    margin-top: 4px;
+    font-size: 14px;
+  }
+  .active-posters .rank-user .rank-name {
+    font-weight: normal;
+  }
+  .active-posters .rank-position,
+  .active-posters .rank-posts-total,
+  .active-posters .rank-posts-counted {
+    float: right;
+    width: 40%;
+    position: relative;
+    bottom: 2px;
+    line-height: 14px;
+  }
+  .active-posters .rank-position strong,
+  .active-posters .rank-posts-total strong,
+  .active-posters .rank-posts-counted strong,
+  .active-posters .rank-position small,
+  .active-posters .rank-posts-total small,
+  .active-posters .rank-posts-counted small {
+    display: inline-block;
+    font-size: 9.24px;
+    line-height: 9.24px;
+  }
+  .active-posters .rank-position strong,
+  .active-posters .rank-posts-total strong,
+  .active-posters .rank-posts-counted strong {
+    width: 34px;
+    padding-right: 4px;
+    text-align: right;
+    font-weight: normal;
+  }
+  .active-posters.ui-preview .rank-user .rank-name {
+    position: relative;
+    bottom: 1px;
+  }
+  .active-posters.ui-preview .rank-user .rank-name .ui-preview-text {
+    height: 12px;
+  }
+  .active-posters.ui-preview .rank-position strong,
+  .active-posters.ui-preview .rank-posts-total strong,
+  .active-posters.ui-preview .rank-posts-counted strong {
+    position: relative;
+    bottom: 3px;
+  }
+  .active-posters.ui-preview .rank-position strong .ui-preview-text,
+  .active-posters.ui-preview .rank-posts-total strong .ui-preview-text,
+  .active-posters.ui-preview .rank-posts-counted strong .ui-preview-text {
+    height: 9.24px;
+  }
+}
+@media screen and (min-width: 992px) {
+  .active-posters li > * {
+    float: left;
+    padding-top: 4px;
+  }
+  .active-posters .rank-user-avatar {
+    padding-top: 0px;
+  }
+  .active-posters .rank-user {
+    padding-top: 0px;
+    padding-left: 16px;
+    width: 25%;
+  }
+  .active-posters .rank-user .user-name .item-title {
+    margin-top: 2px;
+    font-size: 18px;
+  }
+  .active-posters .rank-user .rank-name {
+    margin-right: 12px;
+  }
+  .active-posters .rank-position {
+    width: 23%;
+  }
+  .active-posters .rank-posts-total {
+    width: 23%;
+  }
+  .active-posters .rank-posts-counted {
+    width: 23%;
+  }
+  .active-posters .rank-position,
+  .active-posters .rank-posts-total,
+  .active-posters .rank-posts-counted {
+    font-size: 18px;
+    font-weight: bold;
+    text-align: center;
+  }
+  .active-posters .rank-position strong,
+  .active-posters .rank-posts-total strong,
+  .active-posters .rank-posts-counted strong {
+    display: block;
+  }
+  .active-posters .rank-position small,
+  .active-posters .rank-posts-total small,
+  .active-posters .rank-posts-counted small {
+    display: block;
+    font-size: 12px;
+    font-weight: normal;
+  }
+}
+@media screen and (max-width: 991px) {
+  .page-user-profile .page-header h1 img {
+    width: 40px;
+    height: 40px;
+  }
+  .page-user-profile .page-header h1.pull-left img {
+    margin-right: 6px;
+  }
+  .page-user-profile .page-header h1 .user-name {
+    position: relative;
+    top: 2px;
+  }
+  .page-user-profile .page-header .btn-aligned {
+    position: relative;
+    top: 8px;
+  }
+  .page-user-profile .page-header .header-stats ul {
+    text-align: center;
+  }
+  .page-user-profile .page-header .header-stats ul li {
+    display: inline-block;
+    white-space: nowrap;
+  }
+  .page-user-profile .profile-side-avatar {
+    display: none;
+  }
+}
+@media screen and (min-width: 992px) {
+  .page-user-profile .page-header h1 img {
+    display: none;
+  }
+  .header-stats ul li {
+    display: block;
+    float: left;
+  }
+  .page-user-profile .profile-side-avatar img {
+    width: 100%;
+    height: auto;
+    margin-top: -110px;
+    margin-bottom: 20px;
+  }
+}
+.username-history .username-change-avatar {
+  float: left;
+}
+.username-history .username-change-avatar a,
+.username-history .username-change-avatar span {
+  margin-right: 10px;
+}
+.username-history .username-change-avatar a img,
+.username-history .username-change-avatar span img {
+  width: 42px;
+  height: 42px;
+}
+.username-history .empty-message {
+  text-align: center;
+}
+.username-history .username-change {
+  overflow: auto;
+}
+.username-history .username-change span {
+  display: block;
+  float: left;
+}
+.username-history .username-change .material-icon {
+  margin: 0px 7px;
+  position: relative;
+  top: 4px;
+}
+.username-history .username-change-date {
+  color: #777777;
+  font-size: 12px;
+}
+@media screen and (min-width: 992px) {
+  .username-history li {
+    display: block;
+    overflow: auto;
+  }
+  .username-history .username-change-avatar a img,
+  .username-history .username-change-avatar span img {
+    width: 18px;
+    height: 18px;
+    position: relative;
+    bottom: 1px;
+  }
+  .username-history .username-change-author {
+    float: left;
+    width: 30%;
+  }
+  .username-history .username-change {
+    float: left;
+    width: 40%;
+  }
+  .username-history .username-change-date {
+    float: left;
+    width: 20%;
+  }
+  .username-history.ui-ready .username-change-date {
+    position: relative;
+    top: 2px;
+  }
+}

BIN
misago/static/misago/img/site-icon.png


BIN
misago/static/misago/img/site-logo.png


+ 17965 - 12
misago/static/misago/js/misago.js

@@ -1,12 +1,17965 @@
-!function e(t,n,a){function r(s,i){if(!n[s]){if(!t[s]){var u="function"==typeof require&&require;if(!i&&u)return u(s,!0);if(o)return o(s,!0);var l=new Error("Cannot find module '"+s+"'");throw l.code="MODULE_NOT_FOUND",l}var c=n[s]={exports:{}};t[s][0].call(c.exports,function(e){var n=t[s][1][e];return r(n?n:e)},c,c.exports,e,t,n,a)}return n[s].exports}for(var o="function"==typeof require&&require,s=0;s<a.length;s++)r(a[s]);return r}({1:[function(e,t,n){function a(){c=!1,i.length?l=i.concat(l):f=-1,l.length&&r()}function r(){if(!c){var e=setTimeout(a);c=!0;for(var t=l.length;t;){for(i=l,l=[];++f<t;)i&&i[f].run();f=-1,t=l.length}i=null,c=!1,clearTimeout(e)}}function o(e,t){this.fun=e,this.array=t}function s(){}var i,u=t.exports={},l=[],c=!1,f=-1;u.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];l.push(new o(e,t)),1!==l.length||c||setTimeout(r,0)},o.prototype.run=function(){this.fun.apply(null,this.array)},u.title="browser",u.browser=!0,u.env={},u.argv=[],u.version="",u.versions={},u.on=s,u.addListener=s,u.once=s,u.off=s,u.removeListener=s,u.removeAllListeners=s,u.emit=s,u.binding=function(e){throw new Error("process.binding is not supported")},u.cwd=function(){return"/"},u.chdir=function(e){throw new Error("process.chdir is not supported")},u.umask=function(){return 0}},{}],2:[function(e,t,n){(function(t){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Misago=void 0;var s=e("../../../misago/frontend/src/utils/ordered-list"),i=a(s),u=n.Misago=function(){function e(){r(this,e),this._initializers=[],this._context={}}return o(e,[{key:"addInitializer",value:function(e){this._initializers.push({key:e.name,item:e.initializer,after:e.after,before:e.before})}},{key:"init",value:function(e){var t=this;this._context=e;var n=new i["default"](this._initializers).orderedValues();n.forEach(function(e){e(t)})}},{key:"has",value:function(e){return!!this._context[e]}},{key:"get",value:function(e,t){return this.has(e)?this._context[e]:t||void 0}},{key:"pop",value:function(e){if(this.has(e)){var t=this._context[e];return this._context[e]=null,t}}}]),e}(),l=new u;t.misago=l,n["default"]=l}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"../../../misago/frontend/src/utils/ordered-list":158}],3:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){u["default"].init(s["default"].get("CSRF_COOKIE_NAME"))}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../misago/frontend/src/services/ajax"),u=a(i);s["default"].addInitializer({name:"ajax",initializer:r})},{"../../../../misago/frontend/src/index":135,"../../../../misago/frontend/src/services/ajax":142}],4:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){u["default"].init(d["default"],m["default"],c["default"])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../misago/frontend/src/services/auth"),u=a(i),l=e("../../../../misago/frontend/src/services/modal"),c=a(l),f=e("../../../../misago/frontend/src/services/store"),d=a(f),p=e("../../../../misago/frontend/src/services/local-storage"),m=a(p);s["default"].addInitializer({name:"auth",initializer:r,after:"store"})},{"../../../../misago/frontend/src/index":135,"../../../../misago/frontend/src/services/auth":143,"../../../../misago/frontend/src/services/local-storage":146,"../../../../misago/frontend/src/services/modal":148,"../../../../misago/frontend/src/services/store":152}],5:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){c["default"].init(e,u["default"],d["default"],m["default"])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../misago/frontend/src/services/ajax"),u=a(i),l=e("../../../../misago/frontend/src/services/captcha"),c=a(l),f=e("../../../../misago/frontend/src/services/include"),d=a(f),p=e("../../../../misago/frontend/src/services/snackbar"),m=a(p);s["default"].addInitializer({name:"captcha",initializer:r})},{"../../../../misago/frontend/src/index":135,"../../../../misago/frontend/src/services/ajax":142,"../../../../misago/frontend/src/services/captcha":144,"../../../../misago/frontend/src/services/include":145,"../../../../misago/frontend/src/services/snackbar":151}],6:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){(0,f["default"])((0,o.connect)(u.select)(l["default"]),"auth-message-mount")}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("react-redux"),s=e("../../../../../misago/frontend/src/index"),i=a(s),u=e("../../../../../misago/frontend/src/components/auth-message"),l=a(u),c=e("../../../../../misago/frontend/src/utils/mount-component"),f=a(c);i["default"].addInitializer({name:"component:auth-message",initializer:r,after:"store"})},{"../../../../../misago/frontend/src/components/auth-message":54,"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/utils/mount-component":157,"react-redux":"react-redux"}],7:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){e.has("BAN_MESSAGE")&&(0,u["default"])(e.get("BAN_MESSAGE"),!1)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../../misago/frontend/src/utils/banned-page"),u=a(i);s["default"].addInitializer({name:"component:baned-page",initializer:r,after:"store"})},{"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/utils/banned-page":154}],8:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){document.getElementById("categories-mount")&&(0,f["default"])((0,o.connect)(s.select)(i["default"]),"categories-mount")}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("react-redux"),s=e("../../../../../misago/frontend/src/components/categories/root"),i=a(s),u=e("../../../../../misago/frontend/src/index"),l=a(u),c=e("../../../../../misago/frontend/src/utils/mount-component"),f=a(c);l["default"].addInitializer({name:"component:reset-password-form",initializer:r,after:"store"})},{"../../../../../misago/frontend/src/components/categories/root":61,"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/utils/mount-component":157,"react-redux":"react-redux"}],9:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){e.has("USER_OPTIONS")&&(0,c["default"])({root:u["default"].get("USERCP_URL"),component:s["default"],paths:(0,o.paths)()})}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../misago/frontend/src/components/options/root"),s=a(o),i=e("../../../../../misago/frontend/src/index"),u=a(i),l=e("../../../../../misago/frontend/src/utils/routed-component"),c=a(l);u["default"].addInitializer({name:"component:options",initializer:r,after:"store"})},{"../../../../../misago/frontend/src/components/options/root":81,"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/utils/routed-component":161}],10:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){e.has("PROFILE")&&e.has("PROFILE_PAGES")&&(0,f["default"])({root:l["default"].get("PROFILE").absolute_url,component:(0,o.connect)(s.select)(i["default"]),paths:(0,s.paths)()})}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("react-redux"),s=e("../../../../../misago/frontend/src/components/profile/root"),i=a(s),u=e("../../../../../misago/frontend/src/index"),l=a(u),c=e("../../../../../misago/frontend/src/utils/routed-component"),f=a(c);l["default"].addInitializer({name:"component:profile",initializer:r,after:"reducer:profile-dehydrate"})},{"../../../../../misago/frontend/src/components/profile/root":98,"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/utils/routed-component":161,"react-redux":"react-redux"}],11:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){document.getElementById("request-activation-link-mount")&&(0,c["default"])(u["default"],"request-activation-link-mount",!1)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../../misago/frontend/src/components/request-activation-link"),u=a(i),l=e("../../../../../misago/frontend/src/utils/mount-component"),c=a(l);s["default"].addInitializer({name:"component:request-activation-link",initializer:r,after:"store"})},{"../../../../../misago/frontend/src/components/request-activation-link":102,"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/utils/mount-component":157}],12:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){document.getElementById("request-password-reset-mount")&&(0,c["default"])(u["default"],"request-password-reset-mount",!1)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../../misago/frontend/src/components/request-password-reset"),u=a(i),l=e("../../../../../misago/frontend/src/utils/mount-component"),c=a(l);s["default"].addInitializer({name:"component:request-password-reset",initializer:r,after:"store"})},{"../../../../../misago/frontend/src/components/request-password-reset":103,"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/utils/mount-component":157}],13:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){document.getElementById("reset-password-form-mount")&&(0,c["default"])(u["default"],"reset-password-form-mount",!1)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../../misago/frontend/src/components/reset-password-form"),u=a(i),l=e("../../../../../misago/frontend/src/utils/mount-component"),c=a(l);s["default"].addInitializer({name:"component:reset-password-form",initializer:r,after:"store"})},{"../../../../../misago/frontend/src/components/reset-password-form":104,"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/utils/mount-component":157}],14:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){(0,c["default"])((0,o.connect)(u.select)(u.Snackbar),"snackbar-mount")}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("react-redux"),s=e("../../../../../misago/frontend/src/index"),i=a(s),u=e("../../../../../misago/frontend/src/components/snackbar"),l=e("../../../../../misago/frontend/src/utils/mount-component"),c=a(l);i["default"].addInitializer({name:"component:snackbar",initializer:r,after:"snackbar"})},{"../../../../../misago/frontend/src/components/snackbar":108,"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/utils/mount-component":157,"react-redux":"react-redux"}],15:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){e.has("THREADS")&&e.has("CATEGORIES")&&(0,l["default"])({paths:(0,o.paths)()})}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../misago/frontend/src/components/threads/root"),s=e("../../../../../misago/frontend/src/index"),i=a(s),u=e("../../../../../misago/frontend/src/utils/routed-component"),l=a(u);i["default"].addInitializer({name:"component:threads",initializer:r,after:"store"})},{"../../../../../misago/frontend/src/components/threads/root":111,"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/utils/routed-component":161}],16:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){(0,c["default"])((0,o.connect)(u.select)(u.UserMenu),"user-menu-mount"),(0,c["default"])((0,o.connect)(u.select)(u.CompactUserMenu),"user-menu-compact-mount")}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("react-redux"),s=e("../../../../../misago/frontend/src/index"),i=a(s),u=e("../../../../../misago/frontend/src/components/user-menu/root"),l=e("../../../../../misago/frontend/src/utils/mount-component"),c=a(l);i["default"].addInitializer({name:"component:user-menu",initializer:r,after:"store"})},{"../../../../../misago/frontend/src/components/user-menu/root":115,"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/utils/mount-component":157,"react-redux":"react-redux"}],17:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){e.has("USERS_LISTS")&&(0,c["default"])({root:u["default"].get("USERS_LIST_URL"),component:s["default"],paths:(0,o.paths)()})}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../misago/frontend/src/components/users/root"),s=a(o),i=e("../../../../../misago/frontend/src/index"),u=a(i),l=e("../../../../../misago/frontend/src/utils/routed-component"),c=a(l);u["default"].addInitializer({name:"component:users",initializer:r,after:"store"})},{"../../../../../misago/frontend/src/components/users/root":132,"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/utils/routed-component":161}],18:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){u["default"].init(e.get("STATIC_URL"))}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../misago/frontend/src/services/include"),u=a(i);s["default"].addInitializer({name:"include",initializer:r})},{"../../../../misago/frontend/src/index":135,"../../../../misago/frontend/src/services/include":145}],19:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){u["default"].init("misago_")}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../misago/frontend/src/services/local-storage"),u=a(i);s["default"].addInitializer({name:"local-storage",initializer:r})},{"../../../../misago/frontend/src/index":135,"../../../../misago/frontend/src/services/local-storage":146}],20:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){var e=document.getElementById("mobile-navbar-dropdown-mount");e&&u["default"].init(e)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../misago/frontend/src/services/mobile-navbar-dropdown"),u=a(i);s["default"].addInitializer({name:"dropdown",initializer:r,before:"store"})},{"../../../../misago/frontend/src/index":135,"../../../../misago/frontend/src/services/mobile-navbar-dropdown":147}],21:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){var e=document.getElementById("modal-mount");e&&u["default"].init(e)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../misago/frontend/src/services/modal"),u=a(i);s["default"].addInitializer({name:"modal",initializer:r,before:"store"})},{"../../../../misago/frontend/src/index":135,"../../../../misago/frontend/src/services/modal":148}],22:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){s["default"].locale($("html").attr("lang"))}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("moment"),s=a(o),i=e("../../../../misago/frontend/src/index"),u=a(i);u["default"].addInitializer({name:"moment",initializer:r})},{"../../../../misago/frontend/src/index":135,moment:"moment"}],23:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){u["default"].init(e.get("SETTINGS").forum_index_title,e.get("SETTINGS").forum_name)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../misago/frontend/src/services/page-title"),u=a(i);s["default"].addInitializer({name:"page-title",initializer:r})},{"../../../../misago/frontend/src/index":135,"../../../../misago/frontend/src/services/page-title":149}],24:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){d["default"].init(u["default"],c["default"])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../misago/frontend/src/services/ajax"),u=a(i),l=e("../../../../misago/frontend/src/services/snackbar"),c=a(l),f=e("../../../../misago/frontend/src/services/polls"),d=a(f);s["default"].addInitializer({name:"polls",initializer:r})},{"../../../../misago/frontend/src/index":135,"../../../../misago/frontend/src/services/ajax":142,"../../../../misago/frontend/src/services/polls":150,"../../../../misago/frontend/src/services/snackbar":151}],25:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){c["default"].addReducer("auth",u["default"],Object.assign({isAuthenticated:e.get("isAuthenticated"),isAnonymous:!e.get("isAuthenticated"),user:e.get("user")},i.initialState))}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../../misago/frontend/src/reducers/auth"),u=a(i),l=e("../../../../../misago/frontend/src/services/store"),c=a(l);s["default"].addInitializer({name:"reducer:auth",initializer:r,before:"store"})},{"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/reducers/auth":136,"../../../../../misago/frontend/src/services/store":152}],26:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){s["default"].has("PROFILE")&&l["default"].dispatch((0,i.dehydrate)(s["default"].get("PROFILE")))}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../../misago/frontend/src/reducers/profile"),u=e("../../../../../misago/frontend/src/services/store"),l=a(u);s["default"].addInitializer({name:"reducer:profile-dehydrate",initializer:r,after:"store"})},{"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/reducers/profile":137,"../../../../../misago/frontend/src/services/store":152}],27:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){c["default"].addReducer("profile",u["default"],{})}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../../misago/frontend/src/reducers/profile"),u=a(i),l=e("../../../../../misago/frontend/src/services/store"),c=a(l);s["default"].addInitializer({name:"reducer:profile",initializer:r,before:"store"})},{"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/reducers/profile":137,"../../../../../misago/frontend/src/services/store":152}],28:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){c["default"].addReducer("snackbar",u["default"],i.initialState)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../../misago/frontend/src/reducers/snackbar"),u=a(i),l=e("../../../../../misago/frontend/src/services/store"),c=a(l);s["default"].addInitializer({name:"reducer:snackbar",initializer:r,before:"store"})},{"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/reducers/snackbar":138,"../../../../../misago/frontend/src/services/store":152}],29:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){c["default"].addReducer("tick",u["default"],i.initialState)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../../misago/frontend/src/reducers/tick"),u=a(i),l=e("../../../../../misago/frontend/src/services/store"),c=a(l);s["default"].addInitializer({name:"reducer:tick",initializer:r,before:"store"})},{"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/reducers/tick":139,"../../../../../misago/frontend/src/services/store":152}],30:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){c["default"].addReducer("username-history",u["default"],[])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../../misago/frontend/src/reducers/username-history"),u=a(i),l=e("../../../../../misago/frontend/src/services/store"),c=a(l);s["default"].addInitializer({name:"reducer:username-history",initializer:r,before:"store"})},{"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/reducers/username-history":140,"../../../../../misago/frontend/src/services/store":152}],31:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){c["default"].addReducer("users",u["default"],[])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../../misago/frontend/src/reducers/users"),u=a(i),l=e("../../../../../misago/frontend/src/services/store"),c=a(l);s["default"].addInitializer({name:"reducer:users",initializer:r,before:"store"})},{"../../../../../misago/frontend/src/index":135,"../../../../../misago/frontend/src/reducers/users":141,"../../../../../misago/frontend/src/services/store":152}],32:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){u["default"].init(c["default"])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../misago/frontend/src/services/snackbar"),u=a(i),l=e("../../../../misago/frontend/src/services/store"),c=a(l);s["default"].addInitializer({name:"snackbar",initializer:r,after:"store"})},{"../../../../misago/frontend/src/index":135,"../../../../misago/frontend/src/services/snackbar":151,"../../../../misago/frontend/src/services/store":152}],33:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){u["default"].init()}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../misago/frontend/src/services/store"),u=a(i);s["default"].addInitializer({name:"store",initializer:r,before:"_end"})},{"../../../../misago/frontend/src/index":135,"../../../../misago/frontend/src/services/store":152}],34:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){window.setInterval(function(){l["default"].dispatch((0,i.doTick)())},c)}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../misago/frontend/src/reducers/tick"),u=e("../../../../misago/frontend/src/services/store"),l=a(u),c=5e4;s["default"].addInitializer({name:"tick-start",initializer:r,after:"store"})},{"../../../../misago/frontend/src/index":135,"../../../../misago/frontend/src/reducers/tick":139,"../../../../misago/frontend/src/services/store":152}],35:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){c["default"].init(u["default"])}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=r;var o=e("../../../../misago/frontend/src/index"),s=a(o),i=e("../../../../misago/frontend/src/services/include"),u=a(i),l=e("../../../../misago/frontend/src/services/zxcvbn"),c=a(l);s["default"].addInitializer({name:"zxcvbn",initializer:r})},{"../../../../misago/frontend/src/index":135,"../../../../misago/frontend/src/services/include":145,"../../../../misago/frontend/src/services/zxcvbn":153}],36:[function(e,t,n){function a(e){return null===e||void 0===e}function r(e){return e&&"object"==typeof e&&"number"==typeof e.length?"function"!=typeof e.copy||"function"!=typeof e.slice?!1:e.length>0&&"number"!=typeof e[0]?!1:!0:!1}function o(e,t,n){var o,c;if(a(e)||a(t))return!1;if(e.prototype!==t.prototype)return!1;if(u(e))return u(t)?(e=s.call(e),t=s.call(t),l(e,t,n)):!1;if(r(e)){if(!r(t))return!1;if(e.length!==t.length)return!1;for(o=0;o<e.length;o++)if(e[o]!==t[o])return!1;return!0}try{var f=i(e),d=i(t)}catch(p){return!1}if(f.length!=d.length)return!1;for(f.sort(),d.sort(),o=f.length-1;o>=0;o--)if(f[o]!=d[o])return!1;for(o=f.length-1;o>=0;o--)if(c=f[o],!l(e[c],t[c],n))return!1;return typeof e==typeof t}var s=Array.prototype.slice,i=e("./lib/keys.js"),u=e("./lib/is_arguments.js"),l=t.exports=function(e,t,n){return n||(n={}),e===t?!0:e instanceof Date&&t instanceof Date?e.getTime()===t.getTime():!e||!t||"object"!=typeof e&&"object"!=typeof t?n.strict?e===t:e==t:o(e,t,n)}},{"./lib/is_arguments.js":37,"./lib/keys.js":38}],37:[function(e,t,n){function a(e){return"[object Arguments]"==Object.prototype.toString.call(e)}function r(e){return e&&"object"==typeof e&&"number"==typeof e.length&&Object.prototype.hasOwnProperty.call(e,"callee")&&!Object.prototype.propertyIsEnumerable.call(e,"callee")||!1}var o="[object Arguments]"==function(){return Object.prototype.toString.call(arguments)}();n=t.exports=o?a:r,n.supported=a,n.unsupported=r},{}],38:[function(e,t,n){function a(e){var t=[];for(var n in e)t.push(n);return t}n=t.exports="function"==typeof Object.keys?Object.keys:a,n.shim=a},{}],39:[function(e,t,n){"use strict";n.__esModule=!0;var a="PUSH";n.PUSH=a;var r="REPLACE";n.REPLACE=r;var o="POP";n.POP=o,n["default"]={PUSH:a,REPLACE:r,POP:o}},{}],40:[function(e,t,n){"use strict";function a(e,t,n){function a(){s=!0,n.apply(this,arguments)}function r(){s||(e>o?t.call(this,o++,r,a):a.apply(this,arguments))}var o=0,s=!1;r()}n.__esModule=!0,n.loopAsync=a},{}],41:[function(e,t,n){(function(t){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){return l+e}function o(e,n){try{window.sessionStorage.setItem(r(e),JSON.stringify(n))}catch(a){if(a.name===f)return void("production"!==t.env.NODE_ENV?u["default"](!1,"[history] Unable to save state; sessionStorage is not available due to security settings"):void 0);if(a.name===c&&0===window.sessionStorage.length)return void("production"!==t.env.NODE_ENV?u["default"](!1,"[history] Unable to save state; sessionStorage is not available in Safari private mode"):void 0);throw a}}function s(e){var n=void 0;try{n=window.sessionStorage.getItem(r(e))}catch(a){if(a.name===f)return"production"!==t.env.NODE_ENV?u["default"](!1,"[history] Unable to read state; sessionStorage is not available due to security settings"):void 0,null}if(n)try{return JSON.parse(n)}catch(a){}return null}n.__esModule=!0,n.saveState=o,n.readState=s;var i=e("warning"),u=a(i),l="@@History/",c="QuotaExceededError",f="SecurityError"}).call(this,e("_process"))},{_process:1,warning:53}],42:[function(e,t,n){"use strict";function a(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent("on"+t,n)}function r(e,t,n){e.removeEventListener?e.removeEventListener(t,n,!1):e.detachEvent("on"+t,n)}function o(){return window.location.href.split("#")[1]||""}function s(e){window.location.replace(window.location.pathname+window.location.search+"#"+e)}function i(){return window.location.pathname+window.location.search+window.location.hash}function u(e){e&&window.history.go(e)}function l(e,t){t(window.confirm(e))}function c(){var e=navigator.userAgent;return-1===e.indexOf("Android 2.")&&-1===e.indexOf("Android 4.0")||-1===e.indexOf("Mobile Safari")||-1!==e.indexOf("Chrome")||-1!==e.indexOf("Windows Phone")?-1!==e.indexOf("CriOS")?!1:window.history&&"pushState"in window.history:!1}function f(){var e=navigator.userAgent;return-1===e.indexOf("Firefox")}n.__esModule=!0,n.addEventListener=a,n.removeEventListener=r,n.getHashPath=o,n.replaceHashPath=s,n.getWindowPath=i,n.go=u,n.getUserConfirmation=l,n.supportsHistory=c,n.supportsGoWithoutReloadUsingHash=f},{}],43:[function(e,t,n){"use strict";n.__esModule=!0;var a=!("undefined"==typeof window||!window.document||!window.document.createElement);n.canUseDOM=a},{}],44:[function(e,t,n){(function(a){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(){function e(e){e=e||window.history.state||{};var t=f.getWindowPath(),n=e,a=n.key,r=void 0;a?r=d.readState(a):(r=null,a=_.createKey(),b&&window.history.replaceState(s({},e,{key:a}),null,t));var o=g["default"](t);return _.createLocation(s({},o,{state:r}),void 0,a)}function t(t){function n(t){void 0!==t.state&&a(e(t.state))}var a=t.transitionTo;return f.addEventListener(window,"popstate",n),function(){f.removeEventListener(window,"popstate",n)}}function n(e){var t=e.basename,n=e.pathname,a=e.search,r=e.hash,o=e.state,s=e.action,i=e.key;if(s!==l.POP){d.saveState(i,o);var u=(t||"")+n+a+r,c={key:i};if(s===l.PUSH){if(y)return window.location.href=u,!1;window.history.pushState(c,null,u)}else{if(y)return window.location.replace(u),!1;window.history.replaceState(c,null,u)}}}function r(e){1===++w&&(E=t(_));var n=_.listenBefore(e);return function(){n(),0===--w&&E()}}function o(e){1===++w&&(E=t(_));var n=_.listen(e);return function(){n(),0===--w&&E()}}function i(e){1===++w&&(E=t(_)),_.registerTransitionHook(e)}function p(e){_.unregisterTransitionHook(e),0===--w&&E()}var h=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];c.canUseDOM?void 0:"production"!==a.env.NODE_ENV?u["default"](!1,"Browser history needs a DOM"):u["default"](!1);var v=h.forceRefresh,b=f.supportsHistory(),y=!b||v,_=m["default"](s({},h,{getCurrentLocation:e,finishTransition:n,saveState:d.saveState})),w=0,E=void 0;return s({},_,{listenBefore:r,listen:o,registerTransitionHook:i,unregisterTransitionHook:p})}n.__esModule=!0;var s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},i=e("invariant"),u=r(i),l=e("./Actions"),c=e("./ExecutionEnvironment"),f=e("./DOMUtils"),d=e("./DOMStateStorage"),p=e("./createDOMHistory"),m=r(p),h=e("./parsePath"),g=r(h);n["default"]=o,t.exports=n["default"]}).call(this,e("_process"))},{"./Actions":39,"./DOMStateStorage":41,"./DOMUtils":42,"./ExecutionEnvironment":43,"./createDOMHistory":45,"./parsePath":50,_process:1,invariant:52}],45:[function(e,t,n){(function(a){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e){function t(e){return l.canUseDOM?void 0:"production"!==a.env.NODE_ENV?u["default"](!1,"DOM history needs a DOM"):u["default"](!1),n.listen(e)}var n=d["default"](s({getUserConfirmation:c.getUserConfirmation},e,{go:c.go}));return s({},n,{listen:t})}n.__esModule=!0;var s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},i=e("invariant"),u=r(i),l=e("./ExecutionEnvironment"),c=e("./DOMUtils"),f=e("./createHistory"),d=r(f);
-n["default"]=o,t.exports=n["default"]}).call(this,e("_process"))},{"./DOMUtils":42,"./ExecutionEnvironment":43,"./createHistory":46,_process:1,invariant:52}],46:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){return Math.random().toString(36).substr(2,e)}function o(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.key===t.key&&l["default"](e.state,t.state)}function s(){function e(e){return U.push(e),function(){U=U.filter(function(t){return t!==e})}}function t(){return H&&H.action===f.POP?D.indexOf(H.key):B?D.indexOf(B.key):-1}function n(e){var n=t();B=e,B.action===f.PUSH?D=[].concat(D.slice(0,n+1),[B.key]):B.action===f.REPLACE&&(D[n]=B.key),z.forEach(function(e){e(B)})}function a(e){if(z.push(e),B)e(B);else{var t=T();D=[t.key],n(t)}return function(){z=z.filter(function(t){return t!==e})}}function s(e,t){c.loopAsync(U.length,function(t,n,a){h["default"](U[t],e,function(e){null!=e?a(e):n()})},function(e){A&&"string"==typeof e?A(e,function(e){t(e!==!1)}):t(e!==!1)})}function u(e){B&&o(B,e)||(H=e,s(e,function(t){if(H===e)if(t){if(e.action===f.PUSH){var a=w(B),r=w(e);r===a&&(e.action=f.REPLACE)}M(e)!==!1&&n(e)}else if(B&&e.action===f.POP){var o=D.indexOf(B.key),s=D.indexOf(e.key);-1!==o&&-1!==s&&R(o-s)}}))}function l(e){u(O(e,f.PUSH,b()))}function d(e){u(O(e,f.REPLACE,b()))}function m(){R(-1)}function g(){R(1)}function b(){return r(I)}function w(e){if(null==e||"string"==typeof e)return e;var t=e.pathname,n=e.search,a=e.hash,r=t;return n&&(r+=n),a&&(r+=a),r}function E(e){return w(e)}function O(e,t){var n=arguments.length<=2||void 0===arguments[2]?b():arguments[2];return"object"==typeof t&&("string"==typeof e&&(e=v["default"](e)),e=i({},e,{state:t}),t=n,n=arguments[3]||b()),p["default"](e,t,n)}function k(e){B?(N(B,e),n(B)):N(T(),e)}function N(e,t){e.state=i({},e.state,t),L(e.key,e.state)}function x(e){-1===U.indexOf(e)&&U.push(e)}function j(e){U=U.filter(function(t){return t!==e})}function P(e,t){"string"==typeof t&&(t=v["default"](t)),l(i({state:e},t))}function S(e,t){"string"==typeof t&&(t=v["default"](t)),d(i({state:e},t))}var C=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],T=C.getCurrentLocation,M=C.finishTransition,L=C.saveState,R=C.go,I=C.keyLength,A=C.getUserConfirmation;"number"!=typeof I&&(I=_);var U=[],D=[],z=[],B=void 0,H=void 0;return{listenBefore:e,listen:a,transitionTo:u,push:l,replace:d,go:R,goBack:m,goForward:g,createKey:b,createPath:w,createHref:E,createLocation:O,setState:y["default"](k,"setState is deprecated; use location.key to save state instead"),registerTransitionHook:y["default"](x,"registerTransitionHook is deprecated; use listenBefore instead"),unregisterTransitionHook:y["default"](j,"unregisterTransitionHook is deprecated; use the callback returned from listenBefore instead"),pushState:y["default"](P,"pushState is deprecated; use push instead"),replaceState:y["default"](S,"replaceState is deprecated; use replace instead")}}n.__esModule=!0;var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},u=e("deep-equal"),l=a(u),c=e("./AsyncUtils"),f=e("./Actions"),d=e("./createLocation"),p=a(d),m=e("./runTransitionHook"),h=a(m),g=e("./parsePath"),v=a(g),b=e("./deprecate"),y=a(b),_=6;n["default"]=s,t.exports=n["default"]},{"./Actions":39,"./AsyncUtils":40,"./createLocation":47,"./deprecate":48,"./parsePath":50,"./runTransitionHook":51,"deep-equal":36}],47:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(){var e=arguments.length<=0||void 0===arguments[0]?"/":arguments[0],t=arguments.length<=1||void 0===arguments[1]?s.POP:arguments[1],n=arguments.length<=2||void 0===arguments[2]?null:arguments[2],a=arguments.length<=3||void 0===arguments[3]?null:arguments[3];"string"==typeof e&&(e=u["default"](e)),"object"==typeof t&&(e=o({},e,{state:t}),t=n||s.POP,n=a);var r=e.pathname||"/",i=e.search||"",l=e.hash||"",c=e.state||null;return{pathname:r,search:i,hash:l,state:c,action:t,key:n}}n.__esModule=!0;var o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},s=e("./Actions"),i=e("./parsePath"),u=a(i);n["default"]=r,t.exports=n["default"]},{"./Actions":39,"./parsePath":50}],48:[function(e,t,n){"use strict";function a(e){return e}n.__esModule=!0,n["default"]=a,t.exports=n["default"]},{}],49:[function(e,t,n){"use strict";function a(e){var t=e.match(/^https?:\/\/[^\/]*/);return null==t?e:e.substring(t[0].length)}n.__esModule=!0,n["default"]=a,t.exports=n["default"]},{}],50:[function(e,t,n){(function(a){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e){var t=l["default"](e),n="",r="";"production"!==a.env.NODE_ENV?i["default"](e===t,'A path must be pathname + search + hash only, not a fully qualified URL like "%s"',e):void 0;var o=t.indexOf("#");-1!==o&&(r=t.substring(o),t=t.substring(0,o));var s=t.indexOf("?");return-1!==s&&(n=t.substring(s),t=t.substring(0,s)),""===t&&(t="/"),{pathname:t,search:n,hash:r}}n.__esModule=!0;var s=e("warning"),i=r(s),u=e("./extractPath"),l=r(u);n["default"]=o,t.exports=n["default"]}).call(this,e("_process"))},{"./extractPath":49,_process:1,warning:53}],51:[function(e,t,n){(function(a){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t,n){var r=e(t,n);e.length<2?n(r):"production"!==a.env.NODE_ENV?i["default"](void 0===r,'You should not "return" in a transition hook with a callback argument; call the callback instead'):void 0}n.__esModule=!0;var s=e("warning"),i=r(s);n["default"]=o,t.exports=n["default"]}).call(this,e("_process"))},{_process:1,warning:53}],52:[function(e,t,n){"use strict";var a=function(e,t,n,a,r,o,s,i){if(!e){var u;if(void 0===t)u=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var l=[n,a,r,o,s,i],c=0;u=new Error(t.replace(/%s/g,function(){return l[c++]})),u.name="Invariant Violation"}throw u.framesToPop=1,u}};t.exports=a},{}],53:[function(e,t,n){"use strict";var a=function(){};t.exports=a},{}],54:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return{user:e.auth.user,signedIn:e.auth.signedIn,signedOut:e.auth.signedOut}}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.select=i;var l=e("react"),c=a(l),f=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),u(t,[{key:"refresh",value:function(){window.location.reload()}},{key:"getMessage",value:function(){return this.props.signedIn?interpolate(gettext("You have signed in as %(username)s. Please refresh the page before continuing."),{username:this.props.signedIn.username},!0):this.props.signedOut?interpolate(gettext("%(username)s, you have been signed out. Please refresh the page before continuing."),{username:this.props.user.username},!0):void 0}},{key:"getClassName",value:function(){return this.props.signedIn||this.props.signedOut?"auth-message show":"auth-message"}},{key:"render",value:function(){return c["default"].createElement("div",{className:this.getClassName()},c["default"].createElement("div",{className:"container"},c["default"].createElement("p",{className:"lead"},this.getMessage()),c["default"].createElement("p",null,c["default"].createElement("button",{type:"button",className:"btn btn-default",onClick:this.refresh},gettext("Reload page"))," ",c["default"].createElement("span",{className:"hidden-xs hidden-sm text-muted"},gettext("or press F5 key.")))))}}]),t}(c["default"].Component);n["default"]=f},{react:"react"}],55:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=$("base").attr("href")+"user-avatar/",f=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getSrc",value:function(){var e=this.props.size||100,t=c;return t+=this.props.user&&this.props.user.id?this.props.user.avatar_hash+"/"+e+"/"+this.props.user.id+".png":e+".png"}},{key:"render",value:function(){return l["default"].createElement("img",{src:this.getSrc(),className:this.props.className||"user-avatar",title:gettext("User avatar")})}}]),t}(l["default"].Component);n["default"]=f},{react:"react"}],56:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("moment"),l=a(u),c=e("react"),f=a(c),d=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getReasonMessage",value:function(){return this.props.message.html?f["default"].createElement("div",{className:"lead",dangerouslySetInnerHTML:{__html:this.props.message.html}}):f["default"].createElement("p",{className:"lead"},this.props.message.plain)}},{key:"getExpirationMessage",value:function(){if(this.props.expires){if(this.props.expires.isAfter((0,l["default"])())){var e=interpolate(gettext("This ban expires on %(expires_on)s."),{expires_on:this.props.expires.format("LL, LT")},!0),t=interpolate(gettext("This ban expires %(expires_on)s."),{expires_on:this.props.expires.fromNow()},!0);return f["default"].createElement("abbr",{title:e},t)}return gettext("This ban has expired.")}return gettext("This ban is permanent.")}},{key:"render",value:function(){return f["default"].createElement("div",{className:"page page-error page-error-banned"},f["default"].createElement("div",{className:"container"},f["default"].createElement("div",{className:"message-panel"},f["default"].createElement("div",{className:"message-icon"},f["default"].createElement("span",{className:"material-icon"},"highlight_off")),f["default"].createElement("div",{className:"message-body"},this.getReasonMessage(),f["default"].createElement("p",{className:"message-footnote"},this.getExpirationMessage())))))}}]),t}(f["default"].Component);n["default"]=d},{moment:"moment",react:"react"}],57:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./loader"),f=a(c),d=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){var e="btn "+this.props.className,t=this.props.disabled;return this.props.loading&&(e+=" btn-loading",t=!0),l["default"].createElement("button",{type:this.props.onClick?"button":"submit",className:e,disabled:t,onClick:this.props.onClick},this.props.children,this.props.loading?l["default"].createElement(f["default"],null):null)}}]),t}(l["default"].Component);n["default"]=d,d.defaultProps={className:"btn-default",type:"submit",loading:!1,disabled:!1,onClick:null}},{"./loader":72,react:"react"}],58:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./last-activity"),f=a(c),d=e("./read-icon"),p=a(d),m=e("./stats"),h=a(m),g=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getClassName",value:function(){return this.props.category.css_class?"panel panel-default panel-category panel-category-"+this.props.category.css_class:"panel panel-default panel-category"}},{key:"getHeadingClassName",value:function(){return this.props.category.subcategories.length?"panel-heading":"panel-heading heading-alone"}},{key:"getCategoryDescription",value:function(){return this.props.category.description?l["default"].createElement("div",{className:"panel-body category-description",dangerouslySetInnerHTML:{__html:this.props.category.description.html}}):null}},{key:"getSubcategoryClass",value:function(e){return e.css_class?"list-group-item category-subcategory subcategory-"+e.css_class:"list-group-item category-subcategory"}},{key:"getSubcategoryDescription",value:function(e){return e.description?l["default"].createElement("div",{className:"subcategory-description",dangerouslySetInnerHTML:{__html:e.description.html}}):null}},{key:"getSubcategorySubcategoryClass",value:function(e){return e.css_class?"subcategory subcategory-"+e.css_class:"subcategory"}},{key:"getSubcategorySubcategories",value:function(e){var t=this;return e.subcategories.length?l["default"].createElement("ul",{className:"list-inline subcategories-list"},e.subcategories.map(function(e){return l["default"].createElement("li",{key:e.id},l["default"].createElement("a",{href:e.absolute_url,className:t.getSubcategorySubcategoryClass(e)},e.name))})):null}},{key:"getSubcategories",value:function(){var e=this;return this.props.category.subcategories.length?l["default"].createElement("ul",{className:"list-group category-subcategories"},this.props.category.subcategories.map(function(t){return l["default"].createElement("li",{className:e.getSubcategoryClass(t),key:t.id},l["default"].createElement("div",{className:"title-row"},l["default"].createElement("h4",null,l["default"].createElement(p["default"],{category:t}),l["default"].createElement("a",{href:t.absolute_url,className:"item-title"},t.name)),l["default"].createElement(h["default"],{category:t})),l["default"].createElement(f["default"],{category:t}),e.getSubcategoryDescription(t),e.getSubcategorySubcategories(t))})):null}},{key:"render",value:function(){return l["default"].createElement("div",{id:"panel-category-"+this.props.category.id,className:this.getClassName()},l["default"].createElement("div",{className:this.getHeadingClassName()},l["default"].createElement("div",{className:"panel-heading-inblock"},l["default"].createElement("div",{className:"panel-heading-top-row"},l["default"].createElement("h3",{className:"panel-title"},l["default"].createElement(p["default"],{category:this.props.category}),l["default"].createElement("a",{href:this.props.category.absolute_url,className:"item-title"},this.props.category.name)),l["default"].createElement(h["default"],{category:this.props.category})),l["default"].createElement(f["default"],{category:this.props.category}))),this.getCategoryDescription(),this.getSubcategories())}}]),t}(l["default"].Component);n["default"]=g},{"./last-activity":59,"./read-icon":60,"./stats":62,react:"react"}],59:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getLastPoster",value:function(){return this.props.category.last_poster_url?l["default"].createElement("a",{href:this.props.category.last_poster_url,className:"item-title"},this.props.category.last_poster_name):l["default"].createElement("span",{className:"item-title"},this.props.category.last_poster_name)}},{key:"getThreadDetails",value:function(){return[l["default"].createElement("li",{className:"thread-title",key:"title"},l["default"].createElement("a",{href:this.props.category.last_thread_url,className:"item-title"},this.props.category.last_thread_title)),l["default"].createElement("li",{className:"poster-name",key:"poster"},this.getLastPoster()),l["default"].createElement("li",{className:"thread-date",key:"date"},l["default"].createElement("abbr",{title:this.props.category.last_post_on.format("LL, LT")},this.props.category.last_post_on.fromNow()))]}},{key:"getLastActivity",value:function(){return this.props.category.acl.can_browse?this.props.category.acl.can_see_all_threads?this.props.category.last_thread_title?this.getThreadDetails():l["default"].createElement("li",{className:"thread-message"},l["default"].createElement("span",{className:"material-icon"},"error_outline"),gettext("This category is empty.")):l["default"].createElement("li",{className:"thread-message"},l["default"].createElement("span",{className:"material-icon"},"info_outline"),gettext("This category is private. You can see only your own threads within it.")):l["default"].createElement("li",{className:"thread-message"},l["default"].createElement("span",{className:"material-icon"},"highlight_off"),gettext("This category is protected. You can't browse it's contents."))}},{key:"render",value:function(){return l["default"].createElement("ul",{className:"list-inline category-last-activity"},this.getLastActivity())}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],60:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getClassName",value:function(){return this.props.category.is_read?"read-status item-read":"read-status item-new"}},{key:"getTitle",value:function(){return this.props.category.is_closed?this.props.category.is_read?gettext("This category has no new posts. (closed)"):gettext("This category has new posts. (closed)"):this.props.category.is_read?gettext("This category has no new posts."):gettext("This category has new posts.")}},{key:"getIcon",value:function(){return this.props.category.is_closed?this.props.category.is_read?"lock_outline":"lock":this.props.category.is_read?"chat_bubble_outline":"chat_bubble"}},{key:"render",value:function(){return l["default"].createElement("div",{className:this.getClassName(),title:this.getTitle()},l["default"].createElement("span",{className:"material-icon"},this.getIcon()))}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],61:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return{tick:e.tick.tick}}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.select=i;var l=e("moment"),c=a(l),f=e("react"),d=a(f),p=e("./category"),m=a(p),h=e("../../index"),g=a(h),v=e("../../services/polls"),b=a(v),y=function w(e){return Object.assign({},e,{last_post_on:e.last_post_on?(0,c["default"])(e.last_post_on):null,subcategories:e.subcategories.map(w)})},_=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.update=function(e){n.setState({categories:e.map(y)})},n.state={categories:g["default"].get("CATEGORIES").map(y)},n.startPolling(g["default"].get("CATEGORIES_API")),n}return s(t,e),u(t,[{key:"startPolling",value:function(e){b["default"].start({poll:"categories",url:e,frequency:18e4,update:this.update})}},{key:"render",value:function(){return d["default"].createElement("div",{className:"categories-list"},this.state.categories.map(function(e){return d["default"].createElement(m["default"],{category:e,key:e.id})}))}}]),t}(d["default"].Component);n["default"]=_},{"../../index":135,"../../services/polls":150,"./category":58,moment:"moment",react:"react"}],62:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getThreadsCount",value:function(){var e=ngettext("%(threads)s thread","%(threads)s threads",this.props.category.threads);return interpolate(e,{threads:this.props.category.threads},!0)}},{key:"getPostsCount",value:function(){var e=ngettext("%(posts)s post","%(posts)s posts",this.props.category.posts);return interpolate(e,{posts:this.props.category.posts},!0)}},{key:"render",value:function(){return l["default"].createElement("ul",{className:"list-inline category-stats"},l["default"].createElement("li",{className:"category-threads"},this.getThreadsCount()),l["default"].createElement("li",{className:"category-posts"},this.getPostsCount()))}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],63:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../avatar"),f=(a(c),e("../button")),d=a(f),p=e("../../services/ajax"),m=a(p),h=e("../../services/snackbar"),g=a(h),v=$("base").attr("href")+"user-avatar",b=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.cropAvatar=function(){if(n.state.isLoading)return!1;n.setState({isLoading:!0});var e=n.props.upload?"crop_tmp":"crop_org",t=$(".crop-form");m["default"].post(n.props.user.api_url.avatar,{avatar:e,crop:{offset:t.cropit("offset"),zoom:t.cropit("zoom")}}).then(function(e){n.props.onComplete(e.avatar_hash,e.options),g["default"].success(e.detail)},function(e){400===e.status?(g["default"].error(e.detail),n.setState({isLoading:!1})):n.props.showError(e)})},n.state={isLoading:!1},n}return s(t,e),i(t,[{key:"getAvatarSize",value:function(){return this.props.upload?this.props.options.crop_tmp.size:this.props.options.crop_org.size}},{key:"getAvatarSecret",value:function(){return this.props.upload?this.props.options.crop_tmp.secret:this.props.options.crop_org.secret}},{key:"getAvatarHash",value:function(){return this.props.upload||this.props.user.avatar_hash}},{key:"getImagePath",value:function(){return[v,this.getAvatarSecret()+":"+this.getAvatarHash(),this.props.user.id+".png"].join("/")}},{key:"componentDidMount",value:function(){var e=this,t=$(".crop-form");t.width(this.getAvatarSize()),t.cropit({width:this.getAvatarSize(),height:this.getAvatarSize(),imageState:{src:this.getImagePath()},onImageLoaded:function(){if(e.props.upload){var n=t.cropit("zoom"),a=t.cropit("imageSize");if(a.width>a.height){var r=a.width*n,o=(r-e.getAvatarSize())/-2;t.cropit("offset",{x:o,y:0})}else if(a.width<a.height){var s=a.height*n,i=(s-e.getAvatarSize())/-2;t.cropit("offset",{x:0,y:i})}}else{var u=e.props.options.crop_org.crop;u&&(t.cropit("zoom",u.zoom),t.cropit("offset",{x:u.x,y:u.y}))}}})}},{key:"componentWillUnmount",value:function(){$(".crop-form").cropit("disable")}},{key:"render",value:function(){return l["default"].createElement("div",null,l["default"].createElement("div",{className:"modal-body modal-avatar-crop"},l["default"].createElement("div",{className:"crop-form"},l["default"].createElement("div",{className:"cropit-image-preview"}),l["default"].createElement("input",{type:"range",className:"cropit-image-zoom-input"}))),l["default"].createElement("div",{className:"modal-footer"},l["default"].createElement("div",{className:"col-md-6 col-md-offset-3"},l["default"].createElement(d["default"],{onClick:this.cropAvatar,loading:this.state.isLoading,className:"btn-primary btn-block"},this.props.upload?gettext("Set avatar"):gettext("Crop image")),l["default"].createElement(d["default"],{onClick:this.props.showIndex,disabled:this.state.isLoading,className:"btn-default btn-block"},gettext("Cancel")))))}}]),t}(l["default"].Component);n["default"]=b},{"../../services/ajax":142,"../../services/snackbar":151,"../avatar":55,"../button":57,react:"react"}],64:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];
-a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Gallery=n.GalleryItem=void 0;var u=e("react"),l=a(u),c=e("../button"),f=a(c),d=e("../../index"),p=a(d),m=e("../../services/ajax"),h=a(m),g=e("../../services/snackbar"),v=a(g),b=e("../../utils/batch"),y=a(b),_=n.GalleryItem=function(e){function t(){var e,n,a,s;r(this,t);for(var i=arguments.length,u=Array(i),l=0;i>l;l++)u[l]=arguments[l];return n=a=o(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),a.select=function(){a.props.select(a.props.image)},s=n,o(a,s)}return s(t,e),i(t,[{key:"getClassName",value:function(){return this.props.selection===this.props.image?this.props.disabled?"btn btn-avatar btn-disabled avatar-selected":"btn btn-avatar avatar-selected":this.props.disabled?"btn btn-avatar btn-disabled":"btn btn-avatar"}},{key:"render",value:function(){return l["default"].createElement("button",{type:"button",className:this.getClassName(),disabled:this.props.disabled,onClick:this.select},l["default"].createElement("img",{src:p["default"].get("MEDIA_URL")+this.props.image}))}}]),t}(l["default"].Component),w=n.Gallery=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){var e=this;return l["default"].createElement("div",{className:"avatars-gallery"},l["default"].createElement("h3",null,this.props.name),l["default"].createElement("div",{className:"avatars-gallery-images"},(0,y["default"])(this.props.images,4,null).map(function(t,n){return l["default"].createElement("div",{className:"row",key:n},t.map(function(t,n){return l["default"].createElement("div",{className:"col-xs-3",key:n},t?l["default"].createElement(_,{image:t,disabled:e.props.disabled,select:e.props.select,selection:e.props.selection}):l["default"].createElement("div",{className:"blank-avatar"}))}))})))}}]),t}(l["default"].Component),E=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.select=function(e){n.setState({selection:e})},n.save=function(){return n.state.isLoading?!1:(n.setState({isLoading:!0}),void h["default"].post(n.props.user.api_url.avatar,{avatar:"galleries",image:n.state.selection}).then(function(e){n.setState({isLoading:!1}),v["default"].success(e.detail),n.props.onComplete(e.avatar_hash,e.options)},function(e){400===e.status?(v["default"].error(e.detail),n.setState({isLoading:!1})):n.props.showError(e)}))},n.state={selection:null,isLoading:!1},n}return s(t,e),i(t,[{key:"render",value:function(){var e=this;return l["default"].createElement("div",null,l["default"].createElement("div",{className:"modal-body modal-avatar-gallery"},this.props.options.galleries.map(function(t,n){return l["default"].createElement(w,{name:t.name,images:t.images,selection:e.state.selection,disabled:e.state.isLoading,select:e.select,key:n})})),l["default"].createElement("div",{className:"modal-footer"},l["default"].createElement("div",{className:"row"},l["default"].createElement("div",{className:"col-md-6 col-md-offset-3"},l["default"].createElement(f["default"],{onClick:this.save,loading:this.state.isLoading,disabled:!this.state.selection,className:"btn-primary btn-block"},this.state.selection?gettext("Save choice"):gettext("Select avatar")),l["default"].createElement(f["default"],{onClick:this.props.showIndex,disabled:this.state.isLoading,className:"btn-default btn-block"},gettext("Cancel"))))))}}]),t}(l["default"].Component);n["default"]=E},{"../../index":135,"../../services/ajax":142,"../../services/snackbar":151,"../../utils/batch":155,"../button":57,react:"react"}],65:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../avatar"),f=a(c),d=e("../button"),p=a(d),m=e("../loader"),h=a(m),g=e("../../services/ajax"),v=a(g),b=e("../../services/snackbar"),y=a(b),_=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.setGravatar=function(){n.callApi("gravatar")},n.setGenerated=function(){n.callApi("generated")},n.state={isLoading:!1},n}return s(t,e),i(t,[{key:"callApi",value:function(e){var t=this;return this.state.isLoading?!1:(this.setState({isLoading:!0}),void v["default"].post(this.props.user.api_url.avatar,{avatar:e}).then(function(e){t.setState({isLoading:!1}),y["default"].success(e.detail),t.props.onComplete(e.avatar_hash,e.options)},function(e){400===e.status?(y["default"].error(e.detail),t.setState({isLoading:!1})):t.props.showError(e)}))}},{key:"getGravatarButton",value:function(){return this.props.options.gravatar?l["default"].createElement(p["default"],{onClick:this.setGravatar,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-gravatar"},gettext("Download my Gravatar")):null}},{key:"getCropButton",value:function(){return this.props.options.crop_org?l["default"].createElement(p["default"],{onClick:this.props.showCrop,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-crop"},gettext("Re-crop uploaded image")):null}},{key:"getUploadButton",value:function(){return this.props.options.upload?l["default"].createElement(p["default"],{onClick:this.props.showUpload,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-upload"},gettext("Upload new image")):null}},{key:"getGalleryButton",value:function(){return this.props.options.galleries?l["default"].createElement(p["default"],{onClick:this.props.showGallery,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-gallery"},gettext("Pick avatar from gallery")):null}},{key:"getAvatarPreview",value:function(){var e={id:this.props.user.id,avatar_hash:this.props.options.avatar_hash};return this.state.isLoading?l["default"].createElement("div",{className:"avatar-preview preview-loading"},l["default"].createElement(f["default"],{user:e,size:"200"}),l["default"].createElement(h["default"],null)):l["default"].createElement("div",{className:"avatar-preview"},l["default"].createElement(f["default"],{user:e,size:"200"}))}},{key:"render",value:function(){return l["default"].createElement("div",{className:"modal-body modal-avatar-index"},l["default"].createElement("div",{className:"row"},l["default"].createElement("div",{className:"col-md-5"},this.getAvatarPreview()),l["default"].createElement("div",{className:"col-md-7"},this.getGravatarButton(),l["default"].createElement(p["default"],{onClick:this.setGenerated,disabled:this.state.isLoading,className:"btn-default btn-block btn-avatar-generate"},gettext("Generate my individual avatar")),this.getCropButton(),this.getUploadButton(),this.getGalleryButton())))}}]),t}(l["default"].Component);n["default"]=_},{"../../services/ajax":142,"../../services/snackbar":151,"../avatar":55,"../button":57,"../loader":72,react:"react"}],66:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return{user:e.auth.user}}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.ChangeAvatarError=void 0,n.select=i;var l=e("react"),c=a(l),f=e("./index"),d=a(f),p=e("./crop"),m=a(p),h=e("./upload"),g=a(h),v=e("./gallery"),b=a(v),y=e("../modal-loader"),_=a(y),w=e("../../reducers/users"),E=e("../../services/ajax"),O=a(E),k=e("../../services/store"),N=a(k),x=n.ChangeAvatarError=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),u(t,[{key:"getErrorReason",value:function(){return this.props.reason?c["default"].createElement("p",{dangerouslySetInnerHTML:{__html:this.props.reason}}):null}},{key:"render",value:function(){return c["default"].createElement("div",{className:"modal-body"},c["default"].createElement("div",{className:"message-icon"},c["default"].createElement("span",{className:"material-icon"},"remove_circle_outline")),c["default"].createElement("div",{className:"message-body"},c["default"].createElement("p",{className:"lead"},this.props.message),this.getErrorReason()))}}]),t}(c["default"].Component),j=function(e){function t(){var e,n,a,s;r(this,t);for(var i=arguments.length,u=Array(i),l=0;i>l;l++)u[l]=arguments[l];return n=a=o(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),a.showError=function(e){a.setState({error:e})},a.showIndex=function(){a.setState({component:d["default"]})},a.showUpload=function(){a.setState({component:g["default"]})},a.showCrop=function(){a.setState({component:m["default"]})},a.showGallery=function(){a.setState({component:b["default"]})},a.completeFlow=function(e,t){N["default"].dispatch((0,w.updateAvatar)(a.props.user,e)),a.setState({component:d["default"],options:t})},s=n,o(a,s)}return s(t,e),u(t,[{key:"componentDidMount",value:function(){var e=this;O["default"].get(this.props.user.api_url.avatar).then(function(t){e.setState({component:d["default"],options:t,error:null})},function(t){e.showError(t)})}},{key:"getBody",value:function(){return this.state?this.state.error?c["default"].createElement(x,{message:this.state.error.detail,reason:this.state.error.reason}):c["default"].createElement(this.state.component,{options:this.state.options,user:this.props.user,onComplete:this.completeFlow,showError:this.showError,showIndex:this.showIndex,showCrop:this.showCrop,showUpload:this.showUpload,showGallery:this.showGallery}):c["default"].createElement(_["default"],null)}},{key:"getClassName",value:function(){return this.state&&this.state.error?"modal-dialog modal-message modal-change-avatar":"modal-dialog modal-change-avatar"}},{key:"render",value:function(){return c["default"].createElement("div",{className:this.getClassName(),role:"document"},c["default"].createElement("div",{className:"modal-content"},c["default"].createElement("div",{className:"modal-header"},c["default"].createElement("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},c["default"].createElement("span",{"aria-hidden":"true"},"×")),c["default"].createElement("h4",{className:"modal-title"},gettext("Change your avatar"))),this.getBody()))}}]),t}(c["default"].Component);n["default"]=j},{"../../reducers/users":141,"../../services/ajax":142,"../../services/store":152,"../modal-loader":73,"./crop":63,"./gallery":64,"./index":65,"./upload":67,react:"react"}],67:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./crop"),f=a(c),d=e("../button"),p=a(d),m=e("../../services/ajax"),h=a(m),g=e("../../services/snackbar"),v=a(g),b=e("../../utils/file-size"),y=a(b),_=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.pickFile=function(){document.getElementById("avatar-hidden-upload").click()},n.uploadFile=function(){var e=document.getElementById("avatar-hidden-upload").files[0],t=n.validateFile(e);if(t)return void v["default"].error(t);n.setState({image:e,preview:URL.createObjectURL(e),progress:0});var a=new FormData;a.append("avatar","upload"),a.append("image",e),h["default"].upload(n.props.user.api_url.avatar,a,function(e){n.setState({progress:e})}).then(function(e){n.setState({options:e.options,uploaded:e.detail}),v["default"].info(gettext("Your image has been uploaded and you may now crop it."))},function(e){400===e.status?(v["default"].error(e.detail),n.setState({isLoading:!1,image:null,progress:0})):n.props.showError(e)})},n.state={image:null,preview:null,progress:0,uploaded:null},n}return s(t,e),i(t,[{key:"validateFile",value:function(e){if(e.size>this.props.options.upload.limit)return interpolate(gettext("Selected file is too big. (%(filesize)s)"),{filesize:(0,y["default"])(e.size)},!0);var t=gettext("Selected file type is not supported.");if(-1===this.props.options.upload.allowed_mime_types.indexOf(e.type))return t;var n=!1,a=e.name.toLowerCase();return this.props.options.upload.allowed_extensions.map(function(e){a.substr(-1*e.length)===e&&(n=!0)}),n?!1:t}},{key:"getUploadRequirements",value:function(e){var t=e.allowed_extensions.map(function(e){return e.substr(1)});return interpolate(gettext("%(files)s files smaller than %(limit)s"),{files:t.join(", "),limit:(0,y["default"])(e.limit)},!0)}},{key:"getUploadButton",value:function(){return l["default"].createElement("div",{className:"modal-body modal-avatar-upload"},l["default"].createElement(p["default"],{className:"btn-pick-file",onClick:this.pickFile},l["default"].createElement("div",{className:"material-icon"},"input"),gettext("Select file")),l["default"].createElement("p",{className:"text-muted"},this.getUploadRequirements(this.props.options.upload)))}},{key:"getUploadProgressLabel",value:function(){return interpolate(gettext("%(progress)s % complete"),{progress:this.state.progress},!0)}},{key:"getUploadProgress",value:function(){return l["default"].createElement("div",{className:"modal-body modal-avatar-upload"},l["default"].createElement("div",{className:"upload-progress"},l["default"].createElement("img",{src:this.state.preview}),l["default"].createElement("div",{className:"progress"},l["default"].createElement("div",{className:"progress-bar",role:"progressbar","aria-valuenow":"{this.state.progress}","aria-valuemin":"0","aria-valuemax":"100",style:{width:this.state.progress+"%"}},l["default"].createElement("span",{className:"sr-only"},this.getUploadProgressLabel())))))}},{key:"renderUpload",value:function(){return l["default"].createElement("div",null,l["default"].createElement("input",{type:"file",id:"avatar-hidden-upload",className:"hidden-file-upload",onChange:this.uploadFile}),this.state.image?this.getUploadProgress():this.getUploadButton(),l["default"].createElement("div",{className:"modal-footer"},l["default"].createElement("div",{className:"col-md-6 col-md-offset-3"},l["default"].createElement(p["default"],{onClick:this.props.showIndex,disabled:!!this.state.image,className:"btn-default btn-block"},gettext("Cancel")))))}},{key:"renderCrop",value:function(){return l["default"].createElement(f["default"],{options:this.state.options,user:this.props.user,upload:this.state.uploaded,onComplete:this.props.onComplete,showError:this.props.showError,showIndex:this.props.showIndex})}},{key:"render",value:function(){return this.state.uploaded?this.renderCrop():this.renderUpload()}}]),t}(l["default"].Component);n["default"]=_},{"../../services/ajax":142,"../../services/snackbar":151,"../../utils/file-size":156,"../button":57,"./crop":63,react:"react"}],68:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getClassName",value:function(){return this.props.dropdown?"btn btn-default btn-aligned btn-icon btn-dropdown-toggle open hidden-md hidden-lg":"btn btn-default btn-aligned btn-icon btn-dropdown-toggle hidden-md hidden-lg"}},{key:"render",value:function(){return l["default"].createElement("button",{className:this.getClassName(),type:"button",onClick:this.props.toggleNav,"aria-haspopup":"true","aria-expanded":this.props.dropdown?"true":"false"},l["default"].createElement("i",{className:"material-icon"},"menu"))}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],69:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"isValidated",value:function(){return"undefined"!=typeof this.props.validation}},{key:"getClassName",value:function(){var e="form-group";return this.isValidated()&&(e+=" has-feedback",e+=null===this.props.validation?" has-success":" has-error"),e}},{key:"getFeedback",value:function(){var e=this;return this.props.validation?l["default"].createElement("div",{className:"help-block errors"},this.props.validation.map(function(t,n){return l["default"].createElement("p",{key:e.props["for"]+"FeedbackItem"+n},t)})):null}},{key:"getFeedbackIcon",value:function(){return this.isValidated()?l["default"].createElement("span",{className:"material-icon form-control-feedback","aria-hidden":"true",key:this.props["for"]+"FeedbackIcon"},this.props.validation?"clear":"check"):null}},{key:"getFeedbackDescription",value:function(){return this.isValidated()?l["default"].createElement("span",{id:this.props["for"]+"_status",className:"sr-only"},this.props.validation?gettext("(error)"):gettext("(success)")):null}},{key:"getHelpText",value:function(){return this.props.helpText?l["default"].createElement("p",{className:"help-block"},this.props.helpText):null}},{key:"render",value:function(){return l["default"].createElement("div",{className:this.getClassName()},l["default"].createElement("label",{className:"control-label "+(this.props.labelClass||""),htmlFor:this.props["for"]||""},this.props.label+":"),l["default"].createElement("div",{className:this.props.controlClass||""},this.props.children,this.getFeedbackIcon(),this.getFeedbackDescription(),this.getFeedback(),this.getHelpText(),this.props.extra||null))}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],70:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=a(l),f=e("../utils/validators"),d=e("../services/snackbar"),p=a(d),m=(0,f.required)(),h=function(e){function t(){var e,n,a,i;o(this,t);for(var u=arguments.length,l=Array(u),c=0;u>c;c++)l[c]=arguments[c];return n=a=s(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(l))),a.bindInput=function(e){return function(t){var n=r({},e,t.target.value),o=a.state.errors||{};o[e]=a.validateField(e,n[e]),n.errors=o,a.setState(n)}},a.handleSubmit=function(e){if(e.preventDefault(),!a.state.isLoading&&a.clean()){a.setState({isLoading:!0});var t=a.send();t?t.then(function(e){a.setState({isLoading:!1}),a.handleSuccess(e)},function(e){a.setState({isLoading:!1}),a.handleError(e)}):a.setState({isLoading:!1})}},i=n,s(a,i)}return i(t,e),u(t,[{key:"validate",value:function(){var e={};if(!this.state.validators)return e;var t={required:this.state.validators.required||this.state.validators,optional:this.state.validators.optional||{}},n=[];for(var a in t.required)t.required.hasOwnProperty(a)&&t.required[a]&&n.push(a);for(var a in t.optional)t.optional.hasOwnProperty(a)&&t.optional[a]&&n.push(a);for(var r in n){var a=n[r],o=this.validateField(a,this.state[a]);null===o?e[a]=null:o&&(e[a]=o)}return e}},{key:"isValid",value:function(){var e=this.validate();for(var t in e)if(e.hasOwnProperty(t)&&null!==e[t])return!1;return!0}},{key:"validateField",value:function(e,t){var n=[];if(!this.state.validators)return n;var a={required:(this.state.validators.required||this.state.validators)[e],optional:(this.state.validators.optional||{})[e]},r=m(t)||!1;if(a.required){if(r)n=[r];else for(var o in a.required){var s=a.required[o](t);s&&n.push(s)}return n.length?n:null}if(r===!1&&a.optional){for(var o in a.optional){var s=a.optional[o](t);s&&n.push(s)}return n.length?n:null}return!1}},{key:"clean",value:function(){return!0}},{key:"send",value:function(){return null}},{key:"handleSuccess",value:function(e){}},{key:"handleError",value:function(e){p["default"].apiError(e)}}]),t}(c["default"].Component);n["default"]=h},{"../services/snackbar":151,"../utils/validators":162,react:"react"}],71:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"isActive",value:function(){return this.props.isControlled?this.props.isActive:this.props.path?0===document.location.pathname.indexOf(this.props.path):!1}},{key:"getClassName",value:function(){return this.isActive()?(this.props.className||"")+" "+(this.props.activeClassName||"active"):this.props.className||""}},{key:"render",value:function(){return l["default"].createElement("li",{className:this.getClassName()},this.props.children)}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],72:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("div",{className:this.props.className||"loader"},l["default"].createElement("div",{className:"loader-spinning-wheel"}))}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],73:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./loader"),f=a(c),d=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("div",{className:"modal-body modal-loader"},l["default"].createElement(f["default"],null))}}]),t}(l["default"].Component);n["default"]=d},{"./loader":72,react:"react"}],74:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./panel-message"),f=a(c),d=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getHelpText",value:function(){return this.props.helpText?l["default"].createElement("p",{className:"help-block"},this.props.helpText):null}},{key:"render",value:function(){return l["default"].createElement("div",{className:"modal-body"},l["default"].createElement("div",{className:"message-icon"},l["default"].createElement("span",{className:"material-icon"},this.props.icon||"info_outline")),l["default"].createElement("div",{className:"message-body"},l["default"].createElement("p",{className:"lead"},this.props.message),this.getHelpText()))}}]),t}(f["default"]);n["default"]=d},{"./panel-message":86,react:"react"}],75:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../../panel-loader"),f=a(c),d=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("div",{className:"panel panel-default panel-form"},l["default"].createElement("div",{
-className:"panel-heading"},l["default"].createElement("h3",{className:"panel-title"},gettext("Change username"))),l["default"].createElement(f["default"],null))}}]),t}(l["default"].Component);n["default"]=d},{"../../panel-loader":85,react:"react"}],76:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../../panel-message"),f=a(c),d=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getHelpText",value:function(){return this.props.options.next_on?interpolate(gettext("You will be able to change your username %(next_change)s."),{next_change:this.props.options.next_on.fromNow()},!0):gettext("You have used up available name changes.")}},{key:"render",value:function(){return l["default"].createElement("div",{className:"panel panel-default panel-form"},l["default"].createElement("div",{className:"panel-heading"},l["default"].createElement("h3",{className:"panel-title"},gettext("Change username"))),l["default"].createElement(f["default"],{message:gettext("You can't change your username at the moment."),helpText:this.getHelpText()}))}}]),t}(l["default"].Component);n["default"]=d},{"../../panel-message":86,react:"react"}],77:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=r(l),f=e("../../button"),d=r(f),p=e("../../form"),m=r(p),h=e("../../form-group"),g=r(h),v=e("../../../services/ajax"),b=r(v),y=e("../../../services/snackbar"),_=r(y),w=e("../../../utils/validators"),E=a(w),O=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.state={username:"",validators:{username:[E.usernameContent(),E.usernameMinLength({username_length_min:e.options.length_min}),E.usernameMaxLength({username_length_max:e.options.length_max})]},isLoading:!1},n}return i(t,e),u(t,[{key:"getHelpText",value:function(){var e=[];if(this.props.options.changes_left>0){var t=ngettext("You can change your username %(changes_left)s more time.","You can change your username %(changes_left)s more times.",this.props.options.changes_left);e.push(interpolate(t,{changes_left:this.props.options.changes_left},!0))}if(this.props.user.acl.name_changes_expire>0){var t=ngettext("Used changes redeem after %(name_changes_expire)s day.","Used changes redeem after %(name_changes_expire)s days.",this.props.user.acl.name_changes_expire);e.push(interpolate(t,{name_changes_expire:this.props.user.acl.name_changes_expire},!0))}return e.length?e.join(" "):null}},{key:"clean",value:function(){var e=this.validate();return e.username?(_["default"].error(e.username[0]),!1):this.state.username.trim()===this.props.user.username?(_["default"].info(gettext("Your new username is same as current one.")),!1):!0}},{key:"send",value:function(){return b["default"].post(this.props.user.api_url.username,{username:this.state.username})}},{key:"handleSuccess",value:function(e){this.setState({username:""}),this.props.complete(e.username,e.slug,e.options)}},{key:"handleError",value:function(e){_["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("form",{onSubmit:this.handleSubmit,className:"form-horizontal"},c["default"].createElement("div",{className:"panel panel-default panel-form"},c["default"].createElement("div",{className:"panel-heading"},c["default"].createElement("h3",{className:"panel-title"},gettext("Change username"))),c["default"].createElement("div",{className:"panel-body"},c["default"].createElement(g["default"],{label:gettext("New username"),"for":"id_username",labelClass:"col-sm-4",controlClass:"col-sm-8",helpText:this.getHelpText()},c["default"].createElement("input",{type:"text",id:"id_username",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("username"),value:this.state.username}))),c["default"].createElement("div",{className:"panel-footer"},c["default"].createElement("div",{className:"row"},c["default"].createElement("div",{className:"col-sm-8 col-sm-offset-4"},c["default"].createElement(d["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Change username")))))))}}]),t}(m["default"]);n["default"]=O},{"../../../services/ajax":142,"../../../services/snackbar":151,"../../../utils/validators":162,"../../button":57,"../../form":70,"../../form-group":69,react:"react"}],78:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("moment"),l=a(u),c=e("react"),f=a(c),d=e("./form-loading"),p=a(d),m=e("./form-locked"),h=a(m),g=e("./form"),v=a(g),b=e("../../username-history"),y=a(b),_=e("../../../index"),w=a(_),E=e("../../../reducers/username-history"),O=e("../../../reducers/users"),k=e("../../../services/ajax"),N=a(k),x=e("../../../services/page-title"),j=a(x),P=e("../../../services/snackbar"),S=a(P),C=e("../../../services/store"),T=a(C),M=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.onComplete=function(e,t,a){n.setState({options:a}),T["default"].dispatch((0,E.addNameChange)({username:e,slug:t},n.props.user,n.props.user)),T["default"].dispatch((0,O.updateUsername)(n.props.user,e,t)),S["default"].success(gettext("Your username has been changed successfully."))},n.state={isLoaded:!1,options:null},n}return s(t,e),i(t,[{key:"componentDidMount",value:function(){var e=this;j["default"].set({title:gettext("Change username"),parent:gettext("Change your options")}),Promise.all([N["default"].get(this.props.user.api_url.username),N["default"].get(w["default"].get("USERNAME_CHANGES_API"),{user:this.props.user.id})]).then(function(t){T["default"].dispatch((0,E.dehydrate)(t[1].results)),e.setState({isLoaded:!0,options:{changes_left:t[0].changes_left,length_min:t[0].length_min,length_max:t[0].length_max,next_on:t[0].next_on?(0,l["default"])(t[0].next_on):null}})})}},{key:"getChangeForm",value:function(){return this.state.isLoaded?this.state.options.changes_left>0?f["default"].createElement(v["default"],{user:this.props.user,options:this.state.options,complete:this.onComplete}):f["default"].createElement(h["default"],{options:this.state.options}):f["default"].createElement(p["default"],null)}},{key:"render",value:function(){return f["default"].createElement("div",null,this.getChangeForm(),f["default"].createElement(y["default"],{isLoaded:this.state.isLoaded,changes:this.props["username-history"]}))}}]),t}(f["default"].Component);n["default"]=M},{"../../../index":135,"../../../reducers/username-history":140,"../../../reducers/users":141,"../../../services/ajax":142,"../../../services/page-title":149,"../../../services/snackbar":151,"../../../services/store":152,"../../username-history":118,"./form":77,"./form-loading":75,"./form-locked":76,moment:"moment",react:"react"}],79:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../button"),f=a(c),d=e("../form"),p=a(d),m=e("../form-group"),h=a(m),g=e("../select"),v=a(g),b=e("../yes-no-switch"),y=a(b),_=e("../../reducers/auth"),w=e("../../services/ajax"),E=a(w),O=e("../../services/page-title"),k=a(O),N=e("../../services/snackbar"),x=a(N),j=e("../../services/store"),P=a(j),S=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoading:!1,is_hiding_presence:e.user.is_hiding_presence,limits_private_thread_invites_to:e.user.limits_private_thread_invites_to,subscribe_to_started_threads:e.user.subscribe_to_started_threads,subscribe_to_replied_threads:e.user.subscribe_to_replied_threads,errors:{}},n.privateThreadInvitesChoices=[{value:0,icon:"help_outline",label:gettext("Everybody")},{value:1,icon:"done_all",label:gettext("Users I follow")},{value:2,icon:"highlight_off",label:gettext("Nobody")}],n.subscribeToChoices=[{value:0,icon:"bookmark_border",label:gettext("No")},{value:1,icon:"bookmark",label:gettext("Bookmark")},{value:2,icon:"mail",label:gettext("Bookmark with e-mail notification")}],n}return s(t,e),i(t,[{key:"send",value:function(){return E["default"].post(this.props.user.api_url.options,{is_hiding_presence:this.state.is_hiding_presence,limits_private_thread_invites_to:this.state.limits_private_thread_invites_to,subscribe_to_started_threads:this.state.subscribe_to_started_threads,subscribe_to_replied_threads:this.state.subscribe_to_replied_threads})}},{key:"handleSuccess",value:function(){P["default"].dispatch((0,_.patchUser)({is_hiding_presence:this.state.is_hiding_presence,limits_private_thread_invites_to:this.state.limits_private_thread_invites_to,subscribe_to_started_threads:this.state.subscribe_to_started_threads,subscribe_to_replied_threads:this.state.subscribe_to_replied_threads})),x["default"].success(gettext("Your forum options have been changed."))}},{key:"handleError",value:function(e){400===e.status?x["default"].error(gettext("Please reload page and try again.")):x["default"].apiError(e)}},{key:"componentDidMount",value:function(){k["default"].set({title:gettext("Forum options"),parent:gettext("Change your options")})}},{key:"render",value:function(){return l["default"].createElement("form",{onSubmit:this.handleSubmit,className:"form-horizontal"},l["default"].createElement("div",{className:"panel panel-default panel-form"},l["default"].createElement("div",{className:"panel-heading"},l["default"].createElement("h3",{className:"panel-title"},gettext("Change forum options"))),l["default"].createElement("div",{className:"panel-body"},l["default"].createElement("fieldset",null,l["default"].createElement("legend",null,gettext("Privacy settings")),l["default"].createElement(h["default"],{label:gettext("Hide my presence"),helpText:gettext("If you hide your presence, only members with permission to see hidden users will see when you are online."),"for":"id_is_hiding_presence",labelClass:"col-sm-4",controlClass:"col-sm-8"},l["default"].createElement(y["default"],{id:"id_is_hiding_presence",disabled:this.state.isLoading,iconOn:"visibility_off",iconOff:"visibility",labelOn:gettext("Hide my presence from other users"),labelOff:gettext("Show my presence to other users"),onChange:this.bindInput("is_hiding_presence"),value:this.state.is_hiding_presence})),l["default"].createElement(h["default"],{label:gettext("Private thread invitations"),"for":"id_limits_private_thread_invites_to",labelClass:"col-sm-4",controlClass:"col-sm-8"},l["default"].createElement(v["default"],{id:"id_limits_private_thread_invites_to",disabled:this.state.isLoading,onChange:this.bindInput("limits_private_thread_invites_to"),value:this.state.limits_private_thread_invites_to,choices:this.privateThreadInvitesChoices}))),l["default"].createElement("fieldset",null,l["default"].createElement("legend",null,gettext("Automatic subscriptions")),l["default"].createElement(h["default"],{label:gettext("Threads I start"),"for":"id_subscribe_to_started_threads",labelClass:"col-sm-4",controlClass:"col-sm-8"},l["default"].createElement(v["default"],{id:"id_subscribe_to_started_threads",disabled:this.state.isLoading,onChange:this.bindInput("subscribe_to_started_threads"),value:this.state.subscribe_to_started_threads,choices:this.subscribeToChoices})),l["default"].createElement(h["default"],{label:gettext("Threads I reply to"),"for":"id_subscribe_to_replied_threads",labelClass:"col-sm-4",controlClass:"col-sm-8"},l["default"].createElement(v["default"],{id:"id_subscribe_to_replied_threads",disabled:this.state.isLoading,onChange:this.bindInput("subscribe_to_replied_threads"),value:this.state.subscribe_to_replied_threads,choices:this.subscribeToChoices})))),l["default"].createElement("div",{className:"panel-footer"},l["default"].createElement("div",{className:"row"},l["default"].createElement("div",{className:"col-sm-8 col-sm-offset-4"},l["default"].createElement(f["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Save changes")))))))}}]),t}(p["default"]);n["default"]=S},{"../../reducers/auth":136,"../../services/ajax":142,"../../services/page-title":149,"../../services/snackbar":151,"../../services/store":152,"../button":57,"../form":70,"../form-group":69,"../select":106,"../yes-no-switch":134,react:"react"}],80:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.CompactNav=n.SideNav=void 0;var u=e("react"),l=a(u),c=e("react-router"),f=e("../li"),d=a(f),p=e("../../index");a(p),n.SideNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){var e=this;return l["default"].createElement("div",{className:"list-group nav-side"},this.props.options.map(function(t){return l["default"].createElement(c.Link,{to:e.props.baseUrl+t.component+"/",className:"list-group-item",activeClassName:"active",key:t.component},l["default"].createElement("span",{className:"material-icon"},t.icon),t.name)}))}}]),t}(l["default"].Component),n.CompactNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){var e=this;return l["default"].createElement("ul",{className:"dropdown-menu",role:"menu"},this.props.options.map(function(t){return l["default"].createElement(d["default"],{path:e.props.baseUrl+t.component+"/",key:t.component},l["default"].createElement(c.Link,{to:e.props.baseUrl+t.component+"/",onClick:e.props.hideNav},l["default"].createElement("span",{className:"material-icon"},t.icon),t.name))}))}}]),t}(l["default"].Component)},{"../../index":135,"../li":71,react:"react","react-router":"react-router"}],81:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return{tick:e.tick.tick,user:e.auth.user,"username-history":e["username-history"]}}function u(){return[{path:N["default"].get("USERCP_URL")+"forum-options/",component:(0,d.connect)(i)(v["default"])},{path:N["default"].get("USERCP_URL")+"change-username/",component:(0,d.connect)(i)(y["default"])},{path:N["default"].get("USERCP_URL")+"sign-in-credentials/",component:(0,d.connect)(i)(w["default"])}]}var l=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.select=i,n.paths=u;var c=e("react"),f=a(c),d=e("react-redux"),p=e("../dropdown-toggle"),m=a(p),h=e("./navs"),g=e("./forum-options"),v=a(g),b=e("./change-username/root"),y=a(b),_=e("./sign-in-credentials/root"),w=a(_),E=e("../with-dropdown"),O=a(E),k=e("../../index"),N=a(k),x=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),l(t,[{key:"render",value:function(){return f["default"].createElement("div",{className:"page page-options"},f["default"].createElement("div",{className:"page-header"},f["default"].createElement("div",{className:"container"},f["default"].createElement("h1",{className:"pull-left"},gettext("Change your options")),f["default"].createElement(m["default"],{toggleNav:this.toggleNav,dropdown:this.state.dropdown}))),f["default"].createElement("div",{className:this.getCompactNavClassName()},f["default"].createElement(h.CompactNav,{options:N["default"].get("USER_OPTIONS"),baseUrl:N["default"].get("USERCP_URL"),hideNav:this.hideNav})),f["default"].createElement("div",{className:"container"},f["default"].createElement("div",{className:"row"},f["default"].createElement("div",{className:"col-md-3 hidden-xs hidden-sm"},f["default"].createElement(h.SideNav,{options:N["default"].get("USER_OPTIONS"),baseUrl:N["default"].get("USERCP_URL")})),f["default"].createElement("div",{className:"col-md-9"},this.props.children))))}}]),t}(O["default"]);n["default"]=x},{"../../index":135,"../dropdown-toggle":68,"../with-dropdown":133,"./change-username/root":78,"./forum-options":79,"./navs":80,"./sign-in-credentials/root":84,react:"react","react-redux":"react-redux"}],82:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=r(l),f=e("../../button"),d=r(f),p=e("../../form"),m=r(p),h=e("../../form-group"),g=r(h),v=e("../../../services/ajax"),b=r(v),y=e("../../../services/snackbar"),_=r(y),w=e("../../../utils/validators"),E=a(w),O=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.state={new_email:"",password:"",validators:{new_email:[E.email()],password:[]},isLoading:!1},n}return i(t,e),u(t,[{key:"clean",value:function(){var e=this.validate(),t=[this.state.new_email.trim().length,this.state.password.trim().length];return-1!==t.indexOf(0)?(_["default"].error(gettext("Fill out all fields.")),!1):e.new_email?(_["default"].error(e.new_email[0]),!1):!0}},{key:"send",value:function(){return b["default"].post(this.props.user.api_url.change_email,{new_email:this.state.new_email,password:this.state.password})}},{key:"handleSuccess",value:function(e){this.setState({new_email:"",password:""}),_["default"].success(e.detail)}},{key:"handleError",value:function(e){400===e.status?e.new_email?_["default"].error(e.new_email):_["default"].error(e.password):_["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("form",{onSubmit:this.handleSubmit,className:"form-horizontal"},c["default"].createElement("input",{type:"type",style:{display:"none"}}),c["default"].createElement("input",{type:"password",style:{display:"none"}}),c["default"].createElement("div",{className:"panel panel-default panel-form"},c["default"].createElement("div",{className:"panel-heading"},c["default"].createElement("h3",{className:"panel-title"},gettext("Change e-mail address"))),c["default"].createElement("div",{className:"panel-body"},c["default"].createElement(g["default"],{label:gettext("New e-mail"),"for":"id_new_email",labelClass:"col-sm-4",controlClass:"col-sm-8"},c["default"].createElement("input",{type:"text",id:"id_new_email",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("new_email"),value:this.state.new_email})),c["default"].createElement("hr",null),c["default"].createElement(g["default"],{label:gettext("Your current password"),"for":"id_password",labelClass:"col-sm-4",controlClass:"col-sm-8"},c["default"].createElement("input",{type:"password",id:"id_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),c["default"].createElement("div",{className:"panel-footer"},c["default"].createElement("div",{className:"row"},c["default"].createElement("div",{className:"col-sm-8 col-sm-offset-4"},c["default"].createElement(d["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Change e-mail")))))))}}]),t}(m["default"]);n["default"]=O},{"../../../services/ajax":142,"../../../services/snackbar":151,"../../../utils/validators":162,"../../button":57,"../../form":70,"../../form-group":69,react:"react"}],83:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=r(l),f=e("../../button"),d=r(f),p=e("../../form"),m=r(p),h=e("../../form-group"),g=r(h),v=e("../../../index"),b=r(v),y=e("../../../services/ajax"),_=r(y),w=e("../../../services/snackbar"),E=r(w),O=e("../../../utils/validators"),k=a(O),N=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.state={new_password:"",repeat_password:"",password:"",validators:{new_password:[k.passwordMinLength(b["default"].get("SETTINGS"))],repeat_password:[],password:[]},isLoading:!1},n}return i(t,e),u(t,[{key:"clean",value:function(){var e=this.validate(),t=[this.state.new_password.trim().length,this.state.repeat_password.trim().length,this.state.password.trim().length];return-1!==t.indexOf(0)?(E["default"].error(gettext("Fill out all fields.")),!1):e.new_password?(E["default"].error(e.new_password[0]),!1):this.state.new_password.trim()!==this.state.repeat_password.trim()?(E["default"].error(gettext("New passwords are different.")),!1):!0}},{key:"send",value:function(){return _["default"].post(this.props.user.api_url.change_password,{new_password:this.state.new_password,password:this.state.password})}},{key:"handleSuccess",value:function(e){this.setState({new_password:"",repeat_password:"",password:""}),E["default"].success(e.detail)}},{key:"handleError",value:function(e){400===e.status?e.new_password?E["default"].error(e.new_password):E["default"].error(e.password):E["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("form",{onSubmit:this.handleSubmit,className:"form-horizontal"},c["default"].createElement("input",{type:"type",style:{display:"none"}}),c["default"].createElement("input",{type:"password",style:{display:"none"}}),c["default"].createElement("div",{className:"panel panel-default panel-form"},c["default"].createElement("div",{className:"panel-heading"},c["default"].createElement("h3",{className:"panel-title"},gettext("Change password"))),c["default"].createElement("div",{className:"panel-body"},c["default"].createElement(g["default"],{label:gettext("New password"),"for":"id_new_password",labelClass:"col-sm-4",controlClass:"col-sm-8"},c["default"].createElement("input",{type:"password",id:"id_new_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("new_password"),value:this.state.new_password})),c["default"].createElement(g["default"],{label:gettext("Repeat password"),"for":"id_repeat_password",labelClass:"col-sm-4",controlClass:"col-sm-8"},c["default"].createElement("input",{type:"password",id:"id_repeat_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("repeat_password"),value:this.state.repeat_password})),c["default"].createElement("hr",null),c["default"].createElement(g["default"],{label:gettext("Your current password"),"for":"id_password",labelClass:"col-sm-4",controlClass:"col-sm-8"},c["default"].createElement("input",{type:"password",id:"id_password",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),c["default"].createElement("div",{className:"panel-footer"},c["default"].createElement("div",{className:"row"},c["default"].createElement("div",{className:"col-sm-8 col-sm-offset-4"},c["default"].createElement(d["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Change password")))))))}}]),t}(m["default"]);n["default"]=N},{"../../../index":135,"../../../services/ajax":142,"../../../services/snackbar":151,"../../../utils/validators":162,"../../button":57,"../../form":70,"../../form-group":69,react:"react"}],84:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./change-email"),f=a(c),d=e("./change-password"),p=a(d),m=e("../../../index"),h=a(m),g=e("../../../services/page-title"),v=a(g),b=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"componentDidMount",value:function(){v["default"].set({title:gettext("Change email or password"),parent:gettext("Change your options")})}},{key:"render",value:function(){return l["default"].createElement("div",null,l["default"].createElement(f["default"],{user:this.props.user}),l["default"].createElement(p["default"],{user:this.props.user}),l["default"].createElement("p",{className:"message-line"},l["default"].createElement("span",{className:"material-icon"},"warning"),l["default"].createElement("a",{href:h["default"].get("FORGOTTEN_PASSWORD_URL")},gettext("Change forgotten password"))))}}]),t}(l["default"].Component);n["default"]=b},{"../../../index":135,"../../../services/page-title":149,"./change-email":82,"./change-password":83,react:"react"}],85:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function");
-}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./loader"),f=a(c),d=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("div",{className:"panel-body panel-body-loading"},l["default"].createElement(f["default"],{className:"loader loader-spaced"}))}}]),t}(l["default"].Component);n["default"]=d},{"./loader":72,react:"react"}],86:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getHelpText",value:function(){return this.props.helpText?l["default"].createElement("p",{className:"help-block"},this.props.helpText):null}},{key:"render",value:function(){return l["default"].createElement("div",{className:"panel-body panel-message-body"},l["default"].createElement("div",{className:"message-icon"},l["default"].createElement("span",{className:"material-icon"},this.props.icon||"info_outline")),l["default"].createElement("div",{className:"message-body"},l["default"].createElement("p",{className:"lead"},this.props.message),this.getHelpText()))}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],87:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.LABELS=n.STYLES=void 0;var u=e("react"),l=a(u),c=e("../services/zxcvbn"),f=a(c),d=n.STYLES=["progress-bar-danger","progress-bar-warning","progress-bar-warning","progress-bar-primary","progress-bar-success"],p=n.LABELS=[gettext("Entered password is very weak."),gettext("Entered password is weak."),gettext("Entered password is average."),gettext("Entered password is strong."),gettext("Entered password is very strong.")],m=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n._score=0,n._password=null,n._inputs=[],n}return s(t,e),i(t,[{key:"getScore",value:function(e,t){var n=this,a=!1;return e.trim()!==this._password&&(a=!0),t.length!==this._inputs.length?a=!0:t.map(function(e,t){e.trim()!==n._inputs[t]&&(a=!0)}),a&&(this._score=f["default"].scorePassword(e,t),this._password=e.trim(),this._inputs=t.map(function(e){return e.trim()})),this._score}},{key:"render",value:function(){var e=this.getScore(this.props.password,this.props.inputs);return l["default"].createElement("div",{className:"help-block password-strength"},l["default"].createElement("div",{className:"progress"},l["default"].createElement("div",{className:"progress-bar "+d[e],style:{width:20+20*e+"%"},role:"progress-bar","aria-valuenow":e,"aria-valuemin":"0","aria-valuemax":"4"},l["default"].createElement("span",{className:"sr-only"},p[e]))),l["default"].createElement("p",{className:"text-small"},p[e]))}}]),t}(l["default"].Component);n["default"]=m},{"../services/zxcvbn":153,react:"react"}],88:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../avatar"),f=a(c),d=e("../dropdown-toggle"),p=a(d),m=e("./follow-button"),h=a(m),g=e("./moderation/nav"),v=a(g),b=e("../user-status"),y=a(b),_=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getUserStatus",value:function(){return l["default"].createElement("li",{className:"user-status-display"},l["default"].createElement(y["default"],{user:this.props.profile,status:this.props.profile.status},l["default"].createElement(b.StatusIcon,{user:this.props.profile,status:this.props.profile.status}),l["default"].createElement(b.StatusLabel,{user:this.props.profile,status:this.props.profile.status,className:"status-label"})))}},{key:"getUserRank",value:function(){return this.props.profile.rank.is_tab?l["default"].createElement("li",{className:"user-rank"},l["default"].createElement("a",{href:this.props.profile.rank.absolute_url,className:"item-title"},this.props.profile.rank.name)):l["default"].createElement("li",{className:"user-rank"},l["default"].createElement("span",{className:"item-title"},this.props.profile.rank.name))}},{key:"getUserTitle",value:function(){return this.props.profile.title?l["default"].createElement("li",{className:"user-title"},this.props.profile.title):this.props.profile.rank.title?l["default"].createElement("li",{className:"user-title"},this.props.profile.rank.title):null}},{key:"getJoinedOn",value:function(){var e=interpolate(gettext("Joined on %(joined_on)s"),{joined_on:this.props.profile.joined_on.format("LL, LT")},!0),t=interpolate(gettext("Joined %(joined_on)s"),{joined_on:this.props.profile.joined_on.fromNow()},!0);return l["default"].createElement("li",{className:"user-joined-on"},l["default"].createElement("abbr",{title:e},t))}},{key:"getEmail",value:function(){return this.props.profile.email?l["default"].createElement("li",{className:"user-email"},l["default"].createElement("a",{href:"mailto:"+this.props.profile.email,className:"item-title"},this.props.profile.email)):null}},{key:"getFollowButton",value:function(){return this.props.profile.acl.can_follow?l["default"].createElement(h["default"],{className:"btn btn-aligned hidden-xs hidden-sm",profile:this.props.profile}):null}},{key:"getModerationButton",value:function(){return this.props.profile.acl.can_moderate?l["default"].createElement("div",{className:"btn-group btn-aligned hidden-xs hidden-sm"},l["default"].createElement("button",{className:"btn btn-default btn-moderate dropdown-toggle",type:"button","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},l["default"].createElement("span",{className:"material-icon"},"tonality"),gettext("Moderation")),l["default"].createElement(v["default"],{profile:this.props.profile})):null}},{key:"render",value:function(){return l["default"].createElement("div",{className:"page-header"},l["default"].createElement("div",{className:"container"},l["default"].createElement("div",{className:"row"},l["default"].createElement("div",{className:"col-md-9 col-md-offset-3"},l["default"].createElement("h1",{className:"pull-left"},l["default"].createElement(f["default"],{user:this.props.profile,size:"100"}),l["default"].createElement("span",{className:"user-name"},this.props.profile.username)),this.getFollowButton(),this.getModerationButton(),l["default"].createElement(p["default"],{toggleNav:this.props.toggleNav,dropdown:this.props.dropdown})))),l["default"].createElement("div",{className:"header-stats"},l["default"].createElement("div",{className:"container"},l["default"].createElement("div",{className:"row"},l["default"].createElement("div",{className:"col-md-9 col-md-offset-3"},l["default"].createElement("ul",{className:"list-inline"},this.getUserStatus(),this.getUserRank(),this.getUserTitle(),this.getJoinedOn(),this.getEmail()))))))}}]),t}(l["default"].Component);n["default"]=_},{"../avatar":55,"../dropdown-toggle":68,"../user-status":117,"./follow-button":90,"./moderation/nav":96,react:"react"}],89:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("moment"),l=a(u),c=e("react"),f=a(c),d=e("../panel-loader"),p=a(d),m=e("../panel-message"),h=a(m),g=e("../../index"),v=a(g),b=e("../../services/polls"),y=a(b),_=e("../../services/page-title"),w=a(_),E=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.update=function(e){e.expires_on&&(e.expires_on=(0,l["default"])(e.expires_on)),n.setState({isLoaded:!0,error:null,ban:e})},n.error=function(e){n.setState({isLoaded:!0,error:e.detail,ban:null})},v["default"].has("PROFILE_BAN")?n.initWithPreloadedData(v["default"].pop("PROFILE_BAN")):n.initWithoutPreloadedData(),n.startPolling(e.profile.api_url.ban),n}return s(t,e),i(t,[{key:"initWithPreloadedData",value:function(e){e.expires_on&&(e.expires_on=(0,l["default"])(e.expires_on)),this.state={isLoaded:!0,ban:e}}},{key:"initWithoutPreloadedData",value:function(){this.state={isLoaded:!1}}},{key:"startPolling",value:function(e){y["default"].start({poll:"ban-details",url:e,frequency:9e4,update:this.update,error:this.error})}},{key:"componentDidMount",value:function(){w["default"].set({title:gettext("Ban details"),parent:this.props.profile.username})}},{key:"componentWillUnmount",value:function(){y["default"].stop("ban-details")}},{key:"getUserMessage",value:function(){return this.state.ban.user_message?f["default"].createElement("div",{className:"panel-body ban-message ban-user-message"},f["default"].createElement("h4",null,gettext("User-shown ban message")),f["default"].createElement("div",{className:"lead",dangerouslySetInnerHTML:{__html:this.state.ban.user_message.html}})):null}},{key:"getStaffMessage",value:function(){return this.state.ban.staff_message?f["default"].createElement("div",{className:"panel-body ban-message ban-staff-message"},f["default"].createElement("h4",null,gettext("Team-shown ban message")),f["default"].createElement("div",{className:"lead",dangerouslySetInnerHTML:{__html:this.state.ban.staff_message.html}})):null}},{key:"getExpirationMessage",value:function(){if(this.state.ban.expires_on){if(this.state.ban.expires_on.isAfter((0,l["default"])())){var e=interpolate(gettext("This ban expires on %(expires_on)s."),{expires_on:this.state.ban.expires_on.format("LL, LT")},!0),t=interpolate(gettext("This ban expires %(expires_on)s."),{expires_on:this.state.ban.expires_on.fromNow()},!0);return f["default"].createElement("abbr",{title:e},t)}return gettext("This ban has expired.")}return interpolate(gettext("%(username)s's ban is permanent."),{username:this.props.profile.username},!0)}},{key:"getPanelBody",value:function(){return this.state.ban?Object.keys(this.state.ban).length?f["default"].createElement("div",null,this.getUserMessage(),this.getStaffMessage(),f["default"].createElement("div",{className:"panel-body ban-expires"},f["default"].createElement("h4",null,gettext("Ban expiration")),f["default"].createElement("p",{className:"lead"},this.getExpirationMessage()))):f["default"].createElement("div",null,f["default"].createElement(h["default"],{message:gettext("No ban is active at the moment.")})):this.state.error?f["default"].createElement("div",null,f["default"].createElement(h["default"],{icon:"error_outline",message:this.state.error})):f["default"].createElement("div",null,f["default"].createElement(p["default"],null))}},{key:"render",value:function(){return f["default"].createElement("div",{className:"profile-ban-details"},f["default"].createElement("div",{className:"panel panel-default"},f["default"].createElement("div",{className:"panel-heading"},f["default"].createElement("h3",{className:"panel-title"},gettext("Ban details"))),this.getPanelBody()))}}]),t}(f["default"].Component);n["default"]=E},{"../../index":135,"../../services/page-title":149,"../../services/polls":150,"../panel-loader":85,"../panel-message":86,moment:"moment",react:"react"}],90:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../button"),f=a(c),d=e("../../reducers/profile"),p=e("../../services/ajax"),m=a(p),h=e("../../services/snackbar"),g=a(h),v=e("../../services/store"),b=a(v),y=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.action=function(){n.setState({isLoading:!0}),n.props.profile.is_followed?b["default"].dispatch((0,d.patchProfile)({is_followed:!1,followers:n.props.profile.followers-1})):b["default"].dispatch((0,d.patchProfile)({is_followed:!0,followers:n.props.profile.followers+1})),m["default"].post(n.props.profile.api_url.follow).then(function(e){n.setState({isLoading:!1}),b["default"].dispatch((0,d.patchProfile)(e))},function(e){n.setState({isLoading:!1}),g["default"].apiError(e)})},n.state={isLoading:!1},n}return s(t,e),i(t,[{key:"getClassName",value:function(){return this.props.profile.is_followed?this.props.className+" btn-default btn-following":this.props.className+" btn-default btn-follow"}},{key:"getIcon",value:function(){return this.props.profile.is_followed?"favorite":"favorite_border"}},{key:"getLabel",value:function(){return this.props.profile.is_followed?gettext("Following"):gettext("Follow")}},{key:"render",value:function(){return l["default"].createElement(f["default"],{className:this.getClassName(),disabled:this.state.isLoading,onClick:this.action},l["default"].createElement("span",{className:"material-icon"},this.getIcon()),this.getLabel())}}]),t}(l["default"].Component);n["default"]=y},{"../../reducers/profile":137,"../../services/ajax":142,"../../services/snackbar":151,"../../services/store":152,"../button":57,react:"react"}],91:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=a(l),f=e("../button"),d=a(f),p=e("../search"),m=a(p),h=e("../users-list/root"),g=a(h),v=e("../../index"),b=a(v),y=e("../../reducers/users"),_=e("../../services/ajax"),w=a(_),E=e("../../services/snackbar"),O=a(E),k=e("../../services/store"),N=a(k),x=e("../../services/page-title"),j=a(x),P=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.loadMore=function(){n.setState({isBusy:!0}),n.loadUsers(n.state.page+1,n.state.search)},n.search=function(e){n.setState({isLoaded:!1,isBusy:!0,search:e.target.value,count:0,more:0,page:1,pages:1}),n.loadUsers(1,e.target.value)},n.setSpecialProps(),b["default"].has(n.PRELOADED_DATA_KEY)?n.initWithPreloadedData(b["default"].pop(n.PRELOADED_DATA_KEY)):n.initWithoutPreloadedData(),n}return i(t,e),u(t,[{key:"setSpecialProps",value:function(){this.PRELOADED_DATA_KEY="PROFILE_FOLLOWERS",this.TITLE=gettext("Followers"),this.API_FILTER="followers"}},{key:"initWithPreloadedData",value:function(e){this.state={isLoaded:!0,isBusy:!1,search:"",count:e.count,more:e.more,page:e.page,pages:e.pages},N["default"].dispatch((0,y.dehydrate)(e.results))}},{key:"initWithoutPreloadedData",value:function(){this.state={isLoaded:!1,isBusy:!1,search:"",count:0,more:0,page:1,pages:1},this.loadUsers()}},{key:"loadUsers",value:function(){var e,t=this,n=arguments.length<=0||void 0===arguments[0]?1:arguments[0],a=arguments.length<=1||void 0===arguments[1]?null:arguments[1];w["default"].get(b["default"].get("USERS_API"),(e={},r(e,this.API_FILTER,this.props.profile.id),r(e,"name",a),r(e,"page",n||1),e),"user-"+this.API_FILTER).then(function(e){1===n?N["default"].dispatch((0,y.dehydrate)(e.results)):N["default"].dispatch((0,y.append)(e.results)),t.setState({isLoaded:!0,isBusy:!1,count:e.count,more:e.more,page:e.page,pages:e.pages})},function(e){O["default"].apiError(e)})}},{key:"componentDidMount",value:function(){j["default"].set({title:this.TITLE,parent:this.props.profile.username})}},{key:"getLabel",value:function(){if(this.state.isLoaded){if(this.state.search){var e=ngettext("Found %(users)s user.","Found %(users)s users.",this.state.count);return interpolate(e,{users:this.state.count},!0)}if(this.props.profile.id===this.props.user.id){var e=ngettext("You have %(users)s follower.","You have %(users)s followers.",this.state.count);return interpolate(e,{users:this.state.count},!0)}var e=ngettext("%(username)s has %(users)s follower.","%(username)s has %(users)s followers.",this.state.count);return interpolate(e,{username:this.props.profile.username,users:this.state.count},!0)}return gettext("Loading...")}},{key:"getEmptyMessage",value:function(){return this.state.search?gettext("Search returned no users matching specified criteria."):this.props.user.id===this.props.profile.id?gettext("You have no followers."):interpolate(gettext("%(username)s has no followers."),{username:this.props.profile.username},!0)}},{key:"getMoreButton",value:function(){return this.state.more?c["default"].createElement("div",{className:"pager-more"},c["default"].createElement(d["default"],{loading:this.state.isBusy,onClick:this.loadMore},interpolate(gettext("Show more (%(more)s)"),{more:this.state.more},!0))):null}},{key:"getListBody",value:function(){return this.state.isLoaded&&0===this.state.count?c["default"].createElement("p",{className:"lead"},this.getEmptyMessage()):c["default"].createElement("div",null,c["default"].createElement(g["default"],{isLoaded:this.state.isLoaded,users:this.props.users,showRank:!0,cols:2}),this.getMoreButton())}},{key:"getClassName",value:function(){return"profile-"+this.API_FILTER}},{key:"render",value:function(){return c["default"].createElement("div",{className:this.getClassName()},c["default"].createElement("nav",{className:"toolbar"},c["default"].createElement("h3",{className:"toolbar-left"},this.getLabel()),c["default"].createElement(m["default"],{className:"toolbar-right",value:this.state.search,onChange:this.search,placeholder:gettext("Search history...")})),this.getListBody())}}]),t}(c["default"].Component);n["default"]=P},{"../../index":135,"../../reducers/users":141,"../../services/ajax":142,"../../services/page-title":149,"../../services/snackbar":151,"../../services/store":152,"../button":57,"../search":105,"../users-list/root":119,react:"react"}],92:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=(a(u),e("./followers")),c=a(l),f=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"setSpecialProps",value:function(){this.PRELOADED_DATA_KEY="PROFILE_FOLLOWS",this.TITLE=gettext("Follows"),this.API_FILTER="follows"}},{key:"getLabel",value:function(){if(this.state.isLoaded){if(this.state.search){var e=ngettext("Found %(users)s user.","Found %(users)s users.",this.state.count);return interpolate(e,{users:this.state.count},!0)}if(this.props.profile.id===this.props.user.id){var e=ngettext("You are following %(users)s user.","You are following %(users)s users.",this.state.count);return interpolate(e,{users:this.state.count},!0)}var e=ngettext("%(username)s is following %(users)s user.","%(username)s is following %(users)s users.",this.state.count);return interpolate(e,{username:this.props.profile.username,users:this.state.count},!0)}return gettext("Loading...")}},{key:"getEmptyMessage",value:function(){return this.state.search?gettext("Search returned no users matching specified criteria."):this.props.user.id===this.props.profile.id?gettext("You are not following any users."):interpolate(gettext("%(username)s is not following any users."),{username:this.props.profile.username},!0)}}]),t}(c["default"]);n["default"]=f},{"./followers":91,react:"react"}],93:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../../button"),f=a(c),d=e("../../form"),p=a(d),m=e("../../form-group"),h=a(m),g=e("../../modal-loader"),v=a(g),b=e("../../yes-no-switch"),y=a(b),_=e("../../modal-message"),w=a(_),E=e("../../../reducers/users"),O=e("../../../services/ajax"),k=a(O),N=e("../../../services/snackbar"),x=a(N),j=e("../../../services/store"),P=a(j),S=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoaded:!1,isLoading:!1,error:null,is_avatar_locked:"",avatar_lock_user_message:"",avatar_lock_staff_message:""},n}return s(t,e),i(t,[{key:"componentDidMount",value:function(){var e=this;k["default"].get(this.props.profile.api_url.moderate_avatar).then(function(t){e.setState({isLoaded:!0,is_avatar_locked:t.is_avatar_locked,avatar_lock_user_message:t.avatar_lock_user_message||"",avatar_lock_staff_message:t.avatar_lock_staff_message||""})},function(t){e.setState({isLoaded:!0,error:t.detail})})}},{key:"clean",value:function(){return this.isValid()?!0:(x["default"].error(this.validate().username[0]),!1)}},{key:"send",value:function(){return k["default"].post(this.props.profile.api_url.moderate_avatar,{is_avatar_locked:this.state.is_avatar_locked,avatar_lock_user_message:this.state.avatar_lock_user_message,avatar_lock_staff_message:this.state.avatar_lock_staff_message})}},{key:"handleSuccess",value:function(e){P["default"].dispatch((0,E.updateAvatar)(this.props.profile,e.avatar_hash)),x["default"].success(gettext("Avatar controls have been changed."))}},{key:"getFormBody",value:function(){return l["default"].createElement("form",{onSubmit:this.handleSubmit},l["default"].createElement("div",{className:"modal-body"},l["default"].createElement(h["default"],{label:gettext("Lock avatar"),helpText:gettext("Locking user avatar will prohibit user from changing his avatar and will reset his/her avatar to default one."),"for":"id_is_avatar_locked"},l["default"].createElement(y["default"],{id:"id_is_avatar_locked",disabled:this.state.isLoading,iconOn:"lock_outline",iconOff:"lock_open",labelOn:gettext("Disallow user from changing avatar"),labelOff:gettext("Allow user to change avatar"),onChange:this.bindInput("is_avatar_locked"),value:this.state.is_avatar_locked})),l["default"].createElement(h["default"],{label:gettext("User message"),helpText:gettext("Optional message for user explaining why he/she is prohibited form changing avatar."),"for":"id_avatar_lock_user_message"},l["default"].createElement("textarea",{id:"id_avatar_lock_user_message",className:"form-control",rows:"4",disabled:this.state.isLoading,onChange:this.bindInput("avatar_lock_user_message"),value:this.state.avatar_lock_user_message})),l["default"].createElement(h["default"],{label:gettext("Staff message"),helpText:gettext("Optional message for forum team members explaining why user is prohibited form changing avatar."),"for":"id_avatar_lock_staff_message"},l["default"].createElement("textarea",{id:"id_avatar_lock_staff_message",className:"form-control",rows:"4",disabled:this.state.isLoading,onChange:this.bindInput("avatar_lock_staff_message"),value:this.state.avatar_lock_staff_message}))),l["default"].createElement("div",{className:"modal-footer"},l["default"].createElement("button",{type:"button",className:"btn btn-default","data-dismiss":"modal"},gettext("Close")),l["default"].createElement(f["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Save changes"))))}},{key:"getModalBody",value:function(){return this.state.error?l["default"].createElement(w["default"],{icon:"remove_circle_outline",message:this.state.error}):this.state.isLoaded?this.getFormBody():l["default"].createElement(v["default"],null)}},{key:"getClassName",value:function(){return this.state.error?"modal-dialog modal-message modal-avatar-controls":"modal-dialog modal-avatar-controls"}},{key:"render",value:function(){return l["default"].createElement("div",{className:this.getClassName(),role:"document"},l["default"].createElement("div",{className:"modal-content"},l["default"].createElement("div",{className:"modal-header"},l["default"].createElement("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},l["default"].createElement("span",{"aria-hidden":"true"},"×")),l["default"].createElement("h4",{className:"modal-title"},gettext("Avatar controls"))),this.getModalBody()))}}]),t}(p["default"]);n["default"]=S},{"../../../reducers/users":141,"../../../services/ajax":142,"../../../services/snackbar":151,"../../../services/store":152,"../../button":57,"../../form":70,"../../form-group":69,"../../modal-loader":73,"../../modal-message":74,"../../yes-no-switch":134,react:"react"}],94:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,
-a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=r(l),f=e("../../button"),d=r(f),p=e("../../form"),m=r(p),h=e("../../form-group"),g=r(h),v=e("../../modal-loader"),b=r(v),y=e("../../modal-message"),_=r(y),w=e("../../../index"),E=r(w),O=e("../../../reducers/username-history"),k=e("../../../reducers/users"),N=e("../../../services/ajax"),x=r(N),j=e("../../../services/snackbar"),P=r(j),S=e("../../../services/store"),C=r(S),T=e("../../../utils/validators"),M=a(T),L=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoaded:!1,isLoading:!1,error:null,username:"",validators:{username:[M.usernameContent(),M.usernameMinLength(E["default"].get("SETTINGS")),M.usernameMaxLength(E["default"].get("SETTINGS"))]}},n}return i(t,e),u(t,[{key:"componentDidMount",value:function(){var e=this;x["default"].get(this.props.profile.api_url.moderate_username).then(function(){e.setState({isLoaded:!0})},function(t){e.setState({isLoaded:!0,error:t.detail})})}},{key:"clean",value:function(){return this.isValid()?!0:(P["default"].error(this.validate().username[0]),!1)}},{key:"send",value:function(){return x["default"].post(this.props.profile.api_url.moderate_username,{username:this.state.username})}},{key:"handleSuccess",value:function(e){this.setState({username:""}),C["default"].dispatch((0,O.addNameChange)(e,this.props.profile,this.props.user)),C["default"].dispatch((0,k.updateUsername)(this.props.profile,e.username,e.slug)),P["default"].success(gettext("Username has been changed."))}},{key:"getFormBody",value:function(){return c["default"].createElement("form",{onSubmit:this.handleSubmit},c["default"].createElement("div",{className:"modal-body"},c["default"].createElement(g["default"],{label:gettext("New username"),"for":"id_username"},c["default"].createElement("input",{type:"text",id:"id_username",className:"form-control",disabled:this.state.isLoading,onChange:this.bindInput("username"),value:this.state.username}))),c["default"].createElement("div",{className:"modal-footer"},c["default"].createElement("button",{type:"button",className:"btn btn-default","data-dismiss":"modal"},gettext("Close")),c["default"].createElement(d["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Change username"))))}},{key:"getModalBody",value:function(){return this.state.error?c["default"].createElement(_["default"],{icon:"remove_circle_outline",message:this.state.error}):this.state.isLoaded?this.getFormBody():c["default"].createElement(b["default"],null)}},{key:"getClassName",value:function(){return this.state.error?"modal-dialog modal-message modal-rename-user":"modal-dialog modal-rename-user"}},{key:"render",value:function(){return c["default"].createElement("div",{className:this.getClassName(),role:"document"},c["default"].createElement("div",{className:"modal-content"},c["default"].createElement("div",{className:"modal-header"},c["default"].createElement("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},c["default"].createElement("span",{"aria-hidden":"true"},"×")),c["default"].createElement("h4",{className:"modal-title"},gettext("Change username"))),this.getModalBody()))}}]),t}(m["default"]);n["default"]=L},{"../../../index":135,"../../../reducers/username-history":140,"../../../reducers/users":141,"../../../services/ajax":142,"../../../services/snackbar":151,"../../../services/store":152,"../../../utils/validators":162,"../../button":57,"../../form":70,"../../form-group":69,"../../modal-loader":73,"../../modal-message":74,react:"react"}],95:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../../button"),f=a(c),d=e("../../form"),p=a(d),m=e("../../form-group"),h=a(m),g=e("../../modal-loader"),v=a(g),b=e("../../modal-message"),y=a(b),_=e("../../yes-no-switch"),w=a(_),E=e("../../../index"),O=a(E),k=e("../../../services/ajax"),N=a(k),x=e("../../../services/polls"),j=a(x),P=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.countdown=function(){window.setTimeout(function(){n.state.countdown>1?(n.setState({countdown:n.state.countdown-1}),n.countdown()):n.state.confirm||n.setState({confirm:!0})},1e3)},n.state={isLoaded:!1,isLoading:!1,isDeleted:!1,error:null,countdown:5,confirm:!1,with_content:!1},n}return s(t,e),i(t,[{key:"componentDidMount",value:function(){var e=this;N["default"].get(this.props.profile.api_url["delete"]).then(function(){e.setState({isLoaded:!0}),e.countdown()},function(t){e.setState({isLoaded:!0,error:t.detail})})}},{key:"send",value:function(){return N["default"].post(this.props.profile.api_url["delete"],{with_content:this.state.with_content})}},{key:"handleSuccess",value:function(){j["default"].stop("user-profile"),this.state.with_content?this.setState({isDeleted:interpolate(gettext("%(username)s's account, threads, posts and other content has been deleted."),{username:this.props.profile.username},!0)}):this.setState({isDeleted:interpolate(gettext("%(username)s's account has been deleted and other content has been hidden."),{username:this.props.profile.username},!0)})}},{key:"getButtonLabel",value:function(){return this.state.confirm?interpolate(gettext("Delete %(username)s"),{username:this.props.profile.username},!0):interpolate(gettext("Please wait... (%(countdown)ss)"),{countdown:this.state.countdown},!0)}},{key:"getForm",value:function(){return l["default"].createElement("form",{onSubmit:this.handleSubmit,className:"form-horizontal"},l["default"].createElement("div",{className:"modal-body"},l["default"].createElement(h["default"],{label:gettext("User content"),labelClass:"col-sm-4",controlClass:"col-sm-8","for":"id_with_content"},l["default"].createElement(w["default"],{id:"id_with_content",disabled:this.state.isLoading,labelOn:gettext("Delete together with user's account"),labelOff:gettext("Hide after deleting user's account"),onChange:this.bindInput("with_content"),value:this.state.with_content}))),l["default"].createElement("div",{className:"modal-footer"},l["default"].createElement("button",{type:"button",className:"btn btn-default","data-dismiss":"modal"},gettext("Cancel")),l["default"].createElement(f["default"],{className:"btn-danger",loading:this.state.isLoading,disabled:!this.state.confirm},this.getButtonLabel())))}},{key:"getDeletedBody",value:function(){return l["default"].createElement("div",{className:"modal-body"},l["default"].createElement("div",{className:"message-icon"},l["default"].createElement("span",{className:"material-icon"},"info_outline")),l["default"].createElement("div",{className:"message-body"},l["default"].createElement("p",{className:"lead"},this.state.isDeleted),l["default"].createElement("p",null,l["default"].createElement("a",{href:O["default"].get("USERS_LIST_URL")},gettext("Return to users list")))))}},{key:"getModalBody",value:function(){return this.state.error?l["default"].createElement(y["default"],{icon:"remove_circle_outline",message:this.state.error}):this.state.isLoaded?this.state.isDeleted?this.getDeletedBody():this.getForm():l["default"].createElement(v["default"],null)}},{key:"getClassName",value:function(){return this.state.error||this.state.isDeleted?"modal-dialog modal-message modal-delete-account":"modal-dialog modal-delete-account"}},{key:"render",value:function(){return l["default"].createElement("div",{className:this.getClassName(),role:"document"},l["default"].createElement("div",{className:"modal-content"},l["default"].createElement("div",{className:"modal-header"},l["default"].createElement("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},l["default"].createElement("span",{"aria-hidden":"true"},"×")),l["default"].createElement("h4",{className:"modal-title"},gettext("Delete user account"))),this.getModalBody()))}}]),t}(p["default"]);n["default"]=P},{"../../../index":135,"../../../services/ajax":142,"../../../services/polls":150,"../../button":57,"../../form":70,"../../form-group":69,"../../modal-loader":73,"../../modal-message":74,"../../yes-no-switch":134,react:"react"}],96:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("react-redux"),f=e("./avatar-controls"),d=a(f),p=e("./change-username"),m=a(p),h=e("./delete-account"),g=a(h),v=e("../../../services/modal"),b=a(v),y=function(e){return{tick:e.tick,user:e.auth,profile:e.profile}},_=function(e){function t(){var e,n,a,s;r(this,t);for(var i=arguments.length,u=Array(i),l=0;i>l;l++)u[l]=arguments[l];return n=a=o(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),a.showAvatarDialog=function(){b["default"].show((0,c.connect)(y)(d["default"]))},a.showRenameDialog=function(){b["default"].show((0,c.connect)(y)(m["default"]))},a.showDeleteDialog=function(){b["default"].show((0,c.connect)(y)(g["default"]))},s=n,o(a,s)}return s(t,e),i(t,[{key:"getAvatarButton",value:function(){return this.props.profile.acl.can_moderate_avatar?l["default"].createElement("li",null,l["default"].createElement("button",{type:"button",className:"btn-link",onClick:this.showAvatarDialog},l["default"].createElement("span",{className:"material-icon"},"portrait"),gettext("Avatar controls"))):null}},{key:"getRenameButton",value:function(){return this.props.profile.acl.can_rename?l["default"].createElement("li",null,l["default"].createElement("button",{type:"button",className:"btn-link",onClick:this.showRenameDialog},l["default"].createElement("span",{className:"material-icon"},"credit_card"),gettext("Change username"))):null}},{key:"getDeleteButton",value:function(){return this.props.profile.acl.can_delete?l["default"].createElement("li",null,l["default"].createElement("button",{type:"button",className:"btn-link",onClick:this.showDeleteDialog},l["default"].createElement("span",{className:"material-icon"},"clear"),gettext("Delete account"))):null}},{key:"render",value:function(){return l["default"].createElement("ul",{className:"dropdown-menu dropdown-menu-right",role:"menu"},this.getAvatarButton(),this.getRenameButton(),this.getDeleteButton(),l["default"].createElement("li",{className:"divider hidden-md hidden-lg"}),l["default"].createElement("li",{className:"dropdown-buttons hidden-md hidden-lg"},l["default"].createElement("button",{type:"button",className:"btn btn-default btn-block",onClick:this.props.toggleNav},l["default"].createElement("span",{className:"material-icon"},"menu"),gettext("Menu"))))}}]),t}(l["default"].Component);n["default"]=_},{"../../../services/modal":148,"./avatar-controls":93,"./change-username":94,"./delete-account":95,react:"react","react-redux":"react-redux"}],97:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.CompactNav=n.SideNav=void 0;var u=e("react"),l=a(u),c=e("react-router"),f=e("../li"),d=a(f),p=e("./follow-button"),m=a(p),h=e("../../index"),g=(a(h),n.SideNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getMeta",value:function(e){return e?l["default"].createElement("span",{className:"badge"},this.props.profile[e.attr]):null}},{key:"render",value:function(){var e=this;return l["default"].createElement("div",{className:"list-group nav-side"},this.props.pages.map(function(t){return l["default"].createElement(c.Link,{to:e.props.baseUrl+t.component+"/",className:"list-group-item",activeClassName:"active",key:t.component},l["default"].createElement("span",{className:"material-icon"},t.icon),t.name,e.getMeta(t.meta))}))}}]),t}(l["default"].Component));n.CompactNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"showSpecialOptions",value:function(){return this.props.profile.acl.can_follow||this.props.profile.acl.can_moderate}},{key:"getFollowButton",value:function(){return this.props.profile.acl.can_follow?l["default"].createElement(m["default"],{className:"btn btn-block",profile:this.props.profile}):null}},{key:"getModerationButton",value:function(){return this.props.profile.acl.can_moderate?l["default"].createElement("button",{type:"button",className:"btn btn-default btn-block",onClick:this.props.toggleModeration},l["default"].createElement("span",{className:"material-icon"},"tonality"),gettext("Moderation")):null}},{key:"getSpecialOptions",value:function(){return this.showSpecialOptions()?l["default"].createElement("li",{className:"dropdown-buttons"},this.getFollowButton(),this.getModerationButton()):null}},{key:"render",value:function(){var e=this;return l["default"].createElement("ul",{className:"dropdown-menu",role:"menu"},this.getSpecialOptions(),this.showSpecialOptions()?l["default"].createElement("li",{className:"divider"}):null,this.props.pages.map(function(t){return l["default"].createElement(d["default"],{path:e.props.baseUrl+t.component+"/",key:t.component},l["default"].createElement(c.Link,{to:e.props.baseUrl+t.component+"/",onClick:e.props.hideNav},l["default"].createElement("span",{className:"material-icon"},t.icon),t.name,e.getMeta(t.meta)))}))}}]),t}(g)},{"../../index":135,"../li":71,"./follow-button":90,react:"react","react-router":"react-router"}],98:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return{tick:e.tick.tick,user:e.auth.user,users:e.users,profile:e.profile,"username-history":e["username-history"]}}function u(){var e=[];return T["default"].get("PROFILE_PAGES").forEach(function(t){e.push(Object.assign({},t,{path:T["default"].get("PROFILE").absolute_url+t.component+"/",component:(0,d.connect)(i)(z[t.component])}))}),e}var l=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.select=i,n.paths=u;var c=e("react"),f=a(c),d=e("react-redux"),p=e("../avatar"),m=a(p),h=e("./ban-details"),g=a(h),v=e("./followers"),b=a(v),y=e("./follows"),_=a(y),w=e("./username-history"),E=a(w),O=e("./Header"),k=a(O),N=e("./moderation/nav"),x=a(N),j=e("./navs"),P=e("../with-dropdown"),S=a(P),C=e("../../index"),T=a(C),M=e("../../reducers/profile"),L=e("../../services/polls"),R=a(L),I=e("../../services/store"),A=a(I),U=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.update=function(e){A["default"].dispatch((0,M.dehydrate)(e))},n.toggleNav=function(){"pages"===n.state.dropdown?n.setState({dropdown:!1}):n.setState({dropdown:"pages"})},n.toggleModeration=function(){"moderation"===n.state.dropdown?n.setState({dropdown:!1}):n.setState({dropdown:"moderation"})},n.startPolling(e.profile.api_url.root),n}return s(t,e),l(t,[{key:"startPolling",value:function(e){R["default"].start({poll:"user-profile",url:e,frequency:9e4,update:this.update})}},{key:"getNavDropdown",value:function(){return"pages"===this.state.dropdown?f["default"].createElement(j.CompactNav,{pages:T["default"].get("PROFILE_PAGES"),baseUrl:T["default"].get("PROFILE").absolute_url,profile:this.props.profile,toggleModeration:this.toggleModeration,hideNav:this.hideNav}):"moderation"===this.state.dropdown?f["default"].createElement(x["default"],{profile:this.props.profile,toggleNav:this.toggleNav,hideNav:this.hideNav}):null}},{key:"getClassName",value:function(){var e="page page-user-profile";return e}},{key:"render",value:function(){return f["default"].createElement("div",{className:this.getClassName()},f["default"].createElement(k["default"],{user:this.props.user,profile:this.props.profile,toggleNav:this.toggleNav,toggleModeration:this.toggleModeration}),f["default"].createElement("div",{className:this.getCompactNavClassName()},this.getNavDropdown()),f["default"].createElement("div",{className:"container"},f["default"].createElement("div",{className:"row"},f["default"].createElement("div",{className:"col-md-3 hidden-xs hidden-sm"},f["default"].createElement("div",{className:"profile-side-avatar"},f["default"].createElement(m["default"],{user:this.props.profile,size:"400"})),f["default"].createElement(j.SideNav,{pages:T["default"].get("PROFILE_PAGES"),baseUrl:T["default"].get("PROFILE").absolute_url,profile:this.props.profile})),f["default"].createElement("div",{className:"col-md-9"},this.props.children))))}}]),t}(S["default"]);n["default"]=U;var D=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),l(t,[{key:"render",value:function(){return f["default"].createElement("div",{className:"container"},f["default"].createElement("p",null,"Hello, I'm placeholder for "+this.props.route.name))}}]),t}(f["default"].Component),z={posts:D,threads:D,followers:b["default"],follows:_["default"],"username-history":E["default"],"ban-details":g["default"]}},{"../../index":135,"../../reducers/profile":137,"../../services/polls":150,"../../services/store":152,"../avatar":55,"../with-dropdown":133,"./Header":88,"./ban-details":89,"./followers":91,"./follows":92,"./moderation/nav":96,"./navs":97,"./username-history":99,react:"react","react-redux":"react-redux"}],99:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../button"),f=a(c),d=e("../search"),p=a(d),m=e("../username-history"),h=a(m),g=e("../../index"),v=a(g),b=e("../../reducers/username-history"),y=e("../../services/ajax"),_=a(y),w=e("../../services/snackbar"),E=a(w),O=e("../../services/store"),k=a(O),N=e("../../services/page-title"),x=a(N),j=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.loadMore=function(){n.setState({isBusy:!0}),n.loadChanges(n.state.page+1,n.state.search)},n.search=function(e){n.setState({isLoaded:!1,isBusy:!0,search:e.target.value,count:0,more:0,page:1,pages:1}),n.loadChanges(1,e.target.value)},v["default"].has("PROFILE_NAME_HISTORY")?n.initWithPreloadedData(v["default"].pop("PROFILE_NAME_HISTORY")):n.initWithoutPreloadedData(),n}return s(t,e),i(t,[{key:"initWithPreloadedData",value:function(e){this.state={isLoaded:!0,isBusy:!1,search:"",count:e.count,more:e.more,page:e.page,pages:e.pages},k["default"].dispatch((0,b.dehydrate)(e.results))}},{key:"initWithoutPreloadedData",value:function(){this.state={isLoaded:!1,isBusy:!1,search:"",count:0,more:0,page:1,pages:1},this.loadChanges()}},{key:"loadChanges",value:function(){var e=this,t=arguments.length<=0||void 0===arguments[0]?1:arguments[0],n=arguments.length<=1||void 0===arguments[1]?null:arguments[1];_["default"].get(v["default"].get("USERNAME_CHANGES_API"),{user:this.props.profile.id,search:n,page:t||1},"search-username-history").then(function(n){1===t?k["default"].dispatch((0,b.dehydrate)(n.results)):k["default"].dispatch((0,b.append)(n.results)),e.setState({isLoaded:!0,isBusy:!1,count:n.count,more:n.more,page:n.page,pages:n.pages})},function(e){E["default"].apiError(e)})}},{key:"componentDidMount",value:function(){x["default"].set({title:gettext("Username history"),parent:this.props.profile.username})}},{key:"getLabel",value:function(){if(this.state.isLoaded){if(this.state.search){var e=ngettext("Found %(changes)s username change.","Found %(changes)s username changes.",this.state.count);return interpolate(e,{changes:this.state.count},!0)}if(this.props.profile.id===this.props.user.id){var e=ngettext("Your username was changed %(changes)s time.","Your username was changed %(changes)s times.",this.state.count);return interpolate(e,{changes:this.state.count},!0)}var e=ngettext("%(username)s's username was changed %(changes)s time.","%(username)s's username was changed %(changes)s times.",this.state.count);return interpolate(e,{username:this.props.profile.username,changes:this.state.count},!0)}return gettext("Loading...")}},{key:"getEmptyMessage",value:function(){return this.state.search?gettext("Search returned no username changes matching specified criteria."):this.props.user.id===this.props.profile.id?gettext("No name changes have been recorded for your account."):interpolate(gettext("%(username)s's username was never changed."),{username:this.props.profile.username},!0)}},{key:"getMoreButton",value:function(){return this.state.more?l["default"].createElement("div",{className:"pager-more"},l["default"].createElement(f["default"],{loading:this.state.isBusy,onClick:this.loadMore},interpolate(gettext("Show older (%(more)s)"),{more:this.state.more},!0))):null}},{key:"render",value:function(){return l["default"].createElement("div",{className:"profile-username-history"},l["default"].createElement("nav",{className:"toolbar"},l["default"].createElement("h3",{className:"toolbar-left"},this.getLabel()),l["default"].createElement(p["default"],{className:"toolbar-right",value:this.state.search,onChange:this.search,placeholder:gettext("Search history...")})),l["default"].createElement(h["default"],{isLoaded:this.state.isLoaded,emptyMessage:this.getEmptyMessage(),changes:this.props["username-history"]}),this.getMoreButton())}}]),t}(l["default"].Component);n["default"]=j},{"../../index":135,"../../reducers/username-history":140,"../../services/ajax":142,"../../services/page-title":149,"../../services/snackbar":151,"../../services/store":152,"../button":57,"../search":105,"../username-history":118,react:"react"}],100:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./loader"),f=a(c),d=e("./register.js"),p=a(d),m=e("../services/captcha"),h=a(m),g=e("../services/modal"),v=a(g),b=e("../services/snackbar"),y=a(b),_=e("../services/zxcvbn"),w=a(_),E=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.showRegisterModal=function(){"closed"===misago.get("SETTINGS").account_activation?y["default"].info(gettext("New registrations are currently disabled.")):n.state.isLoaded?v["default"].show(p["default"]):(n.setState({isLoading:!0}),Promise.all([h["default"].load(),w["default"].load()]).then(function(){n.state.isLoaded||n.setState({isLoading:!1,isLoaded:!1}),v["default"].show(p["default"])}))},n.state={isLoading:!1,isLoaded:!1},n}return s(t,e),i(t,[{key:"getClassName",value:function(){return this.props.className+(this.state.isLoading?" btn-loading":"")}},{key:"render",value:function(){return l["default"].createElement("button",{type:"button",onClick:this.showRegisterModal,className:"btn "+this.getClassName(),disabled:this.state.isLoaded},gettext("Register"),this.state.isLoading?l["default"].createElement(f["default"],null):null)}}]),t}(l["default"].Component);n["default"]=E},{"../services/captcha":144,"../services/modal":148,"../services/snackbar":151,"../services/zxcvbn":153,"./loader":72,"./register.js":101,react:"react"}],101:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.RegisterComplete=n.RegisterForm=void 0;var l=e("react"),c=r(l),f=e("./button"),d=r(f),p=e("./form"),m=r(p),h=e("./form-group"),g=r(h),v=e("./password-strength"),b=r(v),y=e("../index"),_=r(y),w=e("../services/ajax"),E=r(w),O=e("../services/auth"),k=r(O),N=e("../services/captcha"),x=r(N),j=e("../services/modal"),P=r(j),S=e("../services/snackbar"),C=r(S),T=e("../utils/banned-page"),M=r(T),L=e("../utils/validators"),R=a(L),I=n.RegisterForm=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoading:!1,username:"",email:"",password:"",captcha:"",validators:{username:[R.usernameContent(),R.usernameMinLength(_["default"].get("SETTINGS")),R.usernameMaxLength(_["default"].get("SETTINGS"))],email:[R.email()],password:[R.passwordMinLength(_["default"].get("SETTINGS"))],captcha:x["default"].validator()},errors:{}},n}return i(t,e),u(t,[{key:"clean",value:function(){return this.isValid()?!0:(C["default"].error(gettext("Form contains errors.")),this.setState({errors:this.validate()}),!1)}},{key:"send",value:function(){return E["default"].post(_["default"].get("USERS_API"),{username:this.state.username,email:this.state.email,password:this.state.password,captcha:this.state.captcha})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){400===e.status?(this.setState({errors:Object.assign({},this.state.errors,e)}),C["default"].error(gettext("Form contains errors."))):403===e.status&&e.ban?((0,M["default"])(e.ban),P["default"].hide()):C["default"].apiError(e)}},{key:"getLegalFootNote",value:function(){return _["default"].get("TERMS_OF_SERVICE_URL")?c["default"].createElement("a",{href:_["default"].get("TERMS_OF_SERVICE_URL"),target:"_blank"},gettext("By registering you agree to site's terms and conditions.")):null}},{key:"render",value:function(){return c["default"].createElement("div",{className:"modal-dialog modal-register",role:"document"},c["default"].createElement("div",{className:"modal-content"},c["default"].createElement("div",{className:"modal-header"},c["default"].createElement("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},c["default"].createElement("span",{"aria-hidden":"true"},"×")),c["default"].createElement("h4",{className:"modal-title"},gettext("Register"))),c["default"].createElement("form",{onSubmit:this.handleSubmit,className:"form-horizontal"},c["default"].createElement("input",{type:"type",style:{display:"none"}}),c["default"].createElement("input",{type:"password",style:{display:"none"}}),c["default"].createElement("div",{className:"modal-body"},c["default"].createElement(g["default"],{label:gettext("Username"),"for":"id_username",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.username},c["default"].createElement("input",{type:"text",id:"id_username",className:"form-control","aria-describedby":"id_username_status",disabled:this.state.isLoading,onChange:this.bindInput("username"),
-value:this.state.username})),c["default"].createElement(g["default"],{label:gettext("E-mail"),"for":"id_email",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.email},c["default"].createElement("input",{type:"text",id:"id_email",className:"form-control","aria-describedby":"id_email_status",disabled:this.state.isLoading,onChange:this.bindInput("email"),value:this.state.email})),c["default"].createElement(g["default"],{label:gettext("Password"),"for":"id_password",labelClass:"col-sm-4",controlClass:"col-sm-8",validation:this.state.errors.password,extra:c["default"].createElement(b["default"],{password:this.state.password,inputs:[this.state.username,this.state.email]})},c["default"].createElement("input",{type:"password",id:"id_password",className:"form-control","aria-describedby":"id_password_status",disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password})),x["default"].component({form:this,labelClass:"col-sm-4",controlClass:"col-sm-8"})),c["default"].createElement("div",{className:"modal-footer"},this.getLegalFootNote(),c["default"].createElement(d["default"],{className:"btn-primary",loading:this.state.isLoading},gettext("Register account"))))))}}]),t}(m["default"]),A=n.RegisterComplete=function(e){function t(){return o(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getLead",value:function(){return"user"===this.props.activation?gettext("%(username)s, your account has been created but you need to activate it before you will be able to sign in."):"admin"===this.props.activation?gettext("%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in."):void 0}},{key:"getSubscript",value:function(){return"user"===this.props.activation?gettext("We have sent an e-mail to %(email)s with link that you have to click to activate your account."):"admin"===this.props.activation?gettext("We will send an e-mail to %(email)s when this takes place."):void 0}},{key:"render",value:function(){return c["default"].createElement("div",{className:"modal-dialog modal-message modal-register",role:"document"},c["default"].createElement("div",{className:"modal-content"},c["default"].createElement("div",{className:"modal-header"},c["default"].createElement("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},c["default"].createElement("span",{"aria-hidden":"true"},"×")),c["default"].createElement("h4",{className:"modal-title"},gettext("Registration complete"))),c["default"].createElement("div",{className:"modal-body"},c["default"].createElement("div",{className:"message-icon"},c["default"].createElement("span",{className:"material-icon"},"info_outline")),c["default"].createElement("div",{className:"message-body"},c["default"].createElement("p",{className:"lead"},interpolate(this.getLead(),{username:this.props.username},!0)),c["default"].createElement("p",null,interpolate(this.getSubscript(),{email:this.props.email},!0))))))}}]),t}(c["default"].Component),U=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.completeRegistration=function(e){"active"===e.activation?(P["default"].hide(),k["default"].signIn(e)):n.setState({complete:e})},n.state={complete:!1},n}return i(t,e),u(t,[{key:"render",value:function(){return this.state.complete?c["default"].createElement(A,{activation:this.state.complete.activation,username:this.state.complete.username,email:this.state.complete.email}):c["default"].createElement(I,{callback:this.completeRegistration})}}]),t}(c["default"].Component);n["default"]=U},{"../index":135,"../services/ajax":142,"../services/auth":143,"../services/captcha":144,"../services/modal":148,"../services/snackbar":151,"../utils/banned-page":154,"../utils/validators":162,"./button":57,"./form":70,"./form-group":69,"./password-strength":87,react:"react"}],102:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.LinkSent=n.RequestLinkForm=void 0;var l=e("react"),c=r(l),f=e("../index"),d=r(f),p=e("./button"),m=r(p),h=e("./form"),g=r(h),v=e("../services/ajax"),b=r(v),y=e("../services/snackbar"),_=r(y),w=e("../utils/validators"),E=a(w),O=e("../utils/banned-page"),k=r(O),N=n.RequestLinkForm=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoading:!1,email:"",validators:{email:[E.email()]}},n}return i(t,e),u(t,[{key:"clean",value:function(){return this.isValid()?!0:(_["default"].error(gettext("Enter a valid email address.")),!1)}},{key:"send",value:function(){return b["default"].post(d["default"].get("SEND_ACTIVATION_API"),{email:this.state.email})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){["already_active","inactive_admin"].indexOf(e.code)>-1?_["default"].info(e.detail):403===e.status&&e.ban?(0,k["default"])(e.ban):_["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("div",{className:"well well-form well-form-request-activation-link"},c["default"].createElement("form",{onSubmit:this.handleSubmit},c["default"].createElement("div",{className:"form-group"},c["default"].createElement("div",{className:"control-input"},c["default"].createElement("input",{type:"text",className:"form-control",placeholder:gettext("Your e-mail address"),disabled:this.state.isLoading,onChange:this.bindInput("email"),value:this.state.email}))),c["default"].createElement(m["default"],{className:"btn-primary btn-block",loading:this.state.isLoading},gettext("Send link"))))}}]),t}(g["default"]),x=n.LinkSent=function(e){function t(){return o(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getMessage",value:function(){return interpolate(gettext("Activation link was sent to %(email)s"),{email:this.props.user.email},!0)}},{key:"render",value:function(){return c["default"].createElement("div",{className:"well well-form well-form-request-activation-link well-done"},c["default"].createElement("div",{className:"done-message"},c["default"].createElement("div",{className:"message-icon"},c["default"].createElement("span",{className:"material-icon"},"check")),c["default"].createElement("div",{className:"message-body"},c["default"].createElement("p",null,this.getMessage())),c["default"].createElement("button",{type:"button",className:"btn btn-primary btn-block",onClick:this.props.callback},gettext("Request another link"))))}}]),t}(c["default"].Component),j=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.complete=function(e){n.setState({complete:e})},n.reset=function(){n.setState({complete:!1})},n.state={complete:!1},n}return i(t,e),u(t,[{key:"render",value:function(){return this.state.complete?c["default"].createElement(x,{user:this.state.complete,callback:this.reset}):c["default"].createElement(N,{callback:this.complete})}}]),t}(c["default"].Component);n["default"]=j},{"../index":135,"../services/ajax":142,"../services/snackbar":151,"../utils/banned-page":154,"../utils/validators":162,"./button":57,"./form":70,react:"react"}],103:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.AccountInactivePage=n.LinkSent=n.RequestResetForm=void 0;var l=e("react"),c=r(l),f=e("react-dom"),d=r(f),p=e("../index"),m=r(p),h=e("./button"),g=r(h),v=e("./form"),b=r(v),y=e("../services/ajax"),_=r(y),w=e("../services/snackbar"),E=r(w),O=e("../utils/validators"),k=a(O),N=e("../utils/banned-page"),x=r(N),j=n.RequestResetForm=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoading:!1,email:"",validators:{email:[k.email()]}},n}return i(t,e),u(t,[{key:"clean",value:function(){return this.isValid()?!0:(E["default"].error(gettext("Enter a valid email address.")),!1)}},{key:"send",value:function(){return _["default"].post(m["default"].get("SEND_PASSWORD_RESET_API"),{email:this.state.email})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){["inactive_user","inactive_admin"].indexOf(e.code)>-1?this.props.showInactivePage(e):403===e.status&&e.ban?(0,x["default"])(e.ban):E["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("div",{className:"well well-form well-form-request-password-reset"},c["default"].createElement("form",{onSubmit:this.handleSubmit},c["default"].createElement("div",{className:"form-group"},c["default"].createElement("div",{className:"control-input"},c["default"].createElement("input",{type:"text",className:"form-control",placeholder:gettext("Your e-mail address"),disabled:this.state.isLoading,onChange:this.bindInput("email"),value:this.state.email}))),c["default"].createElement(g["default"],{className:"btn-primary btn-block",loading:this.state.isLoading},gettext("Send link"))))}}]),t}(b["default"]),P=n.LinkSent=function(e){function t(){return o(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getMessage",value:function(){return interpolate(gettext("Reset password link was sent to %(email)s"),{email:this.props.user.email},!0)}},{key:"render",value:function(){return c["default"].createElement("div",{className:"well well-form well-form-request-password-reset well-done"},c["default"].createElement("div",{className:"done-message"},c["default"].createElement("div",{className:"message-icon"},c["default"].createElement("span",{className:"material-icon"},"check")),c["default"].createElement("div",{className:"message-body"},c["default"].createElement("p",null,this.getMessage())),c["default"].createElement("button",{type:"button",className:"btn btn-primary btn-block",onClick:this.props.callback},gettext("Request another link"))))}}]),t}(c["default"].Component),S=n.AccountInactivePage=function(e){function t(){return o(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getActivateButton",value:function(){return"inactive_user"===this.props.activation?c["default"].createElement("p",null,c["default"].createElement("a",{href:m["default"].get("REQUEST_ACTIVATION_URL")},gettext("Activate your account."))):null}},{key:"render",value:function(){return c["default"].createElement("div",{className:"page page-message page-message-info page-forgotten-password-inactive"},c["default"].createElement("div",{className:"container"},c["default"].createElement("div",{className:"message-panel"},c["default"].createElement("div",{className:"message-icon"},c["default"].createElement("span",{className:"material-icon"},"info_outline")),c["default"].createElement("div",{className:"message-body"},c["default"].createElement("p",{className:"lead"},gettext("Your account is inactive.")),c["default"].createElement("p",null,this.props.message),this.getActivateButton()))))}}]),t}(c["default"].Component),C=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.complete=function(e){n.setState({complete:e})},n.reset=function(){n.setState({complete:!1})},n.state={complete:!1},n}return i(t,e),u(t,[{key:"showInactivePage",value:function(e){d["default"].render(c["default"].createElement(S,{activation:e.code,message:e.detail}),document.getElementById("page-mount"))}},{key:"render",value:function(){return this.state.complete?c["default"].createElement(P,{user:this.state.complete,callback:this.reset}):c["default"].createElement(j,{callback:this.complete,showInactivePage:this.showInactivePage})}}]),t}(c["default"].Component);n["default"]=C},{"../index":135,"../services/ajax":142,"../services/snackbar":151,"../utils/banned-page":154,"../utils/validators":162,"./button":57,"./form":70,react:"react","react-dom":"react-dom"}],104:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.PasswordChangedPage=n.ResetPasswordForm=void 0;var l=e("react"),c=r(l),f=e("react-dom"),d=r(f),p=e("../index"),m=r(p),h=e("./button"),g=r(h),v=e("./form"),b=r(v),y=e("./sign-in.js"),_=r(y),w=e("../services/ajax"),E=r(w),O=e("../services/auth"),k=r(O),N=e("../services/modal"),x=r(N),j=e("../services/snackbar"),P=r(j),S=e("../utils/validators"),C=a(S),T=e("../utils/banned-page"),M=r(T),L=n.ResetPasswordForm=function(e){function t(e){o(this,t);var n=s(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoading:!1,password:"",validators:{password:[C.passwordMinLength(m["default"].get("SETTINGS"))]}},n}return i(t,e),u(t,[{key:"clean",value:function(){return this.isValid()?!0:(this.state.password.trim().length?P["default"].error(this.state.errors.password[0]):P["default"].error(gettext("Enter new password.")),!1)}},{key:"send",value:function(){return E["default"].post(m["default"].get("CHANGE_PASSWORD_API"),{password:this.state.password})}},{key:"handleSuccess",value:function(e){this.props.callback(e)}},{key:"handleError",value:function(e){403===e.status&&e.ban?(0,M["default"])(e.ban):P["default"].apiError(e)}},{key:"render",value:function(){return c["default"].createElement("div",{className:"well well-form well-form-reset-password"},c["default"].createElement("form",{onSubmit:this.handleSubmit},c["default"].createElement("div",{className:"form-group"},c["default"].createElement("div",{className:"control-input"},c["default"].createElement("input",{type:"password",className:"form-control",placeholder:gettext("Enter new password"),disabled:this.state.isLoading,onChange:this.bindInput("password"),value:this.state.password}))),c["default"].createElement(g["default"],{className:"btn-primary btn-block",loading:this.state.isLoading},gettext("Change password"))))}}]),t}(b["default"]),R=n.PasswordChangedPage=function(e){function t(){return o(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getMessage",value:function(){return interpolate(gettext("%(username)s, your password has been changed successfully."),{username:this.props.user.username},!0)}},{key:"showSignIn",value:function(){x["default"].show(_["default"])}},{key:"render",value:function(){return c["default"].createElement("div",{className:"page page-message page-message-success page-forgotten-password-changed"},c["default"].createElement("div",{className:"container"},c["default"].createElement("div",{className:"message-panel"},c["default"].createElement("div",{className:"message-icon"},c["default"].createElement("span",{className:"material-icon"},"check")),c["default"].createElement("div",{className:"message-body"},c["default"].createElement("p",{className:"lead"},this.getMessage()),c["default"].createElement("p",null,gettext("You will have to sign in using new password before continuing.")),c["default"].createElement("p",null,c["default"].createElement("button",{type:"button",className:"btn btn-primary",onClick:this.showSignIn},gettext("Sign in")))))))}}]),t}(c["default"].Component),I=function(e){function t(){var e,n,a,r;o(this,t);for(var i=arguments.length,u=Array(i),l=0;i>l;l++)u[l]=arguments[l];return n=a=s(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),a.complete=function(e){k["default"].softSignOut(),$('#hidden-login-form input[name="redirect_to"]').remove(),d["default"].render(c["default"].createElement(R,{user:e}),document.getElementById("page-mount"))},r=n,s(a,r)}return i(t,e),u(t,[{key:"render",value:function(){return c["default"].createElement(L,{callback:this.complete})}}]),t}(c["default"].Component);n["default"]=I},{"../index":135,"../services/ajax":142,"../services/auth":143,"../services/modal":148,"../services/snackbar":151,"../utils/banned-page":154,"../utils/validators":162,"./button":57,"./form":70,"./sign-in.js":107,react:"react","react-dom":"react-dom"}],105:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getClassName",value:function(){return this.props.className?"form-search "+this.props.className:"form-search"}},{key:"render",value:function(){return l["default"].createElement("div",{className:this.getClassName()},l["default"].createElement("input",{type:"text",className:"form-control",value:this.props.value,onChange:this.props.onChange,placeholder:this.props.placeholder||gettext("Search...")}),l["default"].createElement("span",{className:"material-icon"},"search"))}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],106:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){var e,n,a,s;r(this,t);for(var i=arguments.length,u=Array(i),l=0;i>l;l++)u[l]=arguments[l];return n=a=o(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),a.change=function(e){return function(){a.props.onChange({target:{value:e}})}},s=n,o(a,s)}return s(t,e),i(t,[{key:"getChoice",value:function(){var e=this,t=null;return this.props.choices.map(function(n){n.value===e.props.value&&(t=n)}),t}},{key:"getIcon",value:function(){return this.getChoice().icon}},{key:"getLabel",value:function(){return this.getChoice().label}},{key:"render",value:function(){var e=this;return l["default"].createElement("div",{className:"btn-group btn-select-group"},l["default"].createElement("button",{type:"button",className:"btn btn-select dropdown-toggle",id:this.props.id||null,"data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-describedby":this.props["aria-describedby"]||null,disabled:this.props.disabled||!1},l["default"].createElement("span",{className:"material-icon"},this.getIcon()),this.getLabel()),l["default"].createElement("ul",{className:"dropdown-menu"},this.props.choices.map(function(t,n){return l["default"].createElement("li",{key:n},l["default"].createElement("button",{type:"button",className:"btn-link",onClick:e.change(t.value)},l["default"].createElement("span",{className:"material-icon"},t.icon),t.label))})))}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],107:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../index"),f=a(c),d=e("./button"),p=a(d),m=e("./form"),h=a(m),g=e("../services/ajax"),v=a(g),b=e("../services/modal"),y=a(b),_=e("../services/snackbar"),w=a(_),E=e("../utils/banned-page"),O=a(E),k=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.state={isLoading:!1,showActivation:!1,username:"",password:"",validators:{username:[],password:[]}},n}return s(t,e),i(t,[{key:"clean",value:function(){return this.isValid()?!0:(w["default"].error(gettext("Fill out both fields.")),!1)}},{key:"send",value:function(){return v["default"].post(f["default"].get("AUTH_API"),{username:this.state.username,password:this.state.password})}},{key:"handleSuccess",value:function(){var e=$("#hidden-login-form");e.append('<input type="text" name="username" />'),e.append('<input type="password" name="password" />'),e.find('input[type="hidden"]').val(v["default"].getCsrfToken()),e.find('input[name="redirect_to"]').val(window.location.pathname),e.find('input[name="username"]').val(this.state.username),e.find('input[name="password"]').val(this.state.password),e.submit(),this.setState({isLoading:!0})}},{key:"handleError",value:function(e){400===e.status?"inactive_admin"===e.code?w["default"].info(e.detail):"inactive_user"===e.code?(w["default"].info(e.detail),this.setState({showActivation:!0})):"banned"===e.code?((0,O["default"])(e.detail),y["default"].hide()):w["default"].error(e.detail):403===e.status&&e.ban?((0,O["default"])(e.ban),y["default"].hide()):w["default"].apiError(e)}},{key:"getActivationButton",value:function(){return this.state.showActivation?l["default"].createElement("a",{href:f["default"].get("REQUEST_ACTIVATION_URL"),className:"btn btn-success btn-block"},gettext("Activate account")):null}},{key:"render",value:function(){return l["default"].createElement("div",{className:"modal-dialog modal-sm modal-sign-in",role:"document"},l["default"].createElement("div",{className:"modal-content"},l["default"].createElement("div",{className:"modal-header"},l["default"].createElement("button",{type:"button",className:"close","data-dismiss":"modal","aria-label":gettext("Close")},l["default"].createElement("span",{"aria-hidden":"true"},"×")),l["default"].createElement("h4",{className:"modal-title"},gettext("Sign in"))),l["default"].createElement("form",{onSubmit:this.handleSubmit},l["default"].createElement("div",{className:"modal-body"},l["default"].createElement("div",{className:"form-group"},l["default"].createElement("div",{className:"control-input"},l["default"].createElement("input",{id:"id_username",className:"form-control",type:"text",disabled:this.state.isLoading,placeholder:gettext("Username or e-mail"),onChange:this.bindInput("username"),value:this.state.username}))),l["default"].createElement("div",{className:"form-group"},l["default"].createElement("div",{className:"control-input"},l["default"].createElement("input",{id:"id_password",className:"form-control",type:"password",disabled:this.state.isLoading,placeholder:gettext("Password"),onChange:this.bindInput("password"),value:this.state.password})))),l["default"].createElement("div",{className:"modal-footer"},this.getActivationButton(),l["default"].createElement(p["default"],{className:"btn-primary btn-block",loading:this.state.isLoading},gettext("Sign in")),l["default"].createElement("a",{href:f["default"].get("FORGOTTEN_PASSWORD_URL"),className:"btn btn-default btn-block"},gettext("Forgot password?"))))))}}]),t}(h["default"]);n["default"]=k},{"../index":135,"../services/ajax":142,"../services/modal":148,"../services/snackbar":151,"../utils/banned-page":154,"./button":57,"./form":70,react:"react"}],108:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return e.snackbar}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Snackbar=void 0,n.select=i;var l=e("react"),c=a(l),f={info:"alert-info",success:"alert-success",warning:"alert-warning",error:"alert-danger"};n.Snackbar=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),u(t,[{key:"getSnackbarClass",value:function(){var e="alerts-snackbar";return e+=this.props.isVisible?" in":" out"}},{key:"render",value:function(){return c["default"].createElement("div",{className:this.getSnackbarClass()},c["default"].createElement("p",{className:"alert "+f[this.props.type]},this.props.message))}}]),t}(c["default"].Component)},{react:"react"}],109:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("div",{className:"threads-list ui-ready"},l["default"].createElement("ul",{className:"list-group"},l["default"].createElement("li",{className:"list-group-item empty-message"},"I am threads list placeholder!")))}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],110:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.CompactNav=n.TabsNav=void 0;var u=e("react"),l=a(u),c=e("react-router"),f=e("../li"),d=a(f),p=function(e,t,n,a){return n.map(function(n){return l["default"].createElement(d["default"],{isControlled:!0,isActive:n.path===t.path,key:e+n.path},l["default"].createElement(c.Link,{to:e+n.path,onClick:a},l["default"].createElement("span",{className:"hidden-xs hidden-sm"},n.name),l["default"].createElement("span",{className:"hidden-md hidden-lg"
-},n.longName)))})};n.TabsNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("div",{className:"page-tabs hidden-xs hidden-sm"},l["default"].createElement("div",{className:"container"},l["default"].createElement("ul",{className:"nav nav-pills"},p(this.props.baseUrl,this.props.list,this.props.lists,this.props.hideNav))))}}]),t}(l["default"].Component),n.CompactNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("ul",{className:"dropdown-menu",role:"menu"},p(this.props.baseUrl,this.props.list,this.props.lists,this.props.hideNav))}}]),t}(l["default"].Component)},{"../li":71,react:"react","react-router":"react-router"}],111:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){return{tick:e.tick.tick,user:e.auth.user}}function o(){var e=[{path:"",name:gettext("All"),longName:gettext("All threads")}];return f["default"].get("isAuthenticated")&&(e.push({path:"my/",name:gettext("My"),longName:gettext("My threads")}),e.push({path:"new/",name:gettext("New"),longName:gettext("New threads")}),e.push({path:"unread/",name:gettext("Unread"),longName:gettext("Unread threads")}),e.push({path:"subscribed/",name:gettext("Subscribed"),longName:gettext("Subscribed threads")})),e}function s(){var e=o(),t=[];return f["default"].get("CATEGORIES").forEach(function(n){e.forEach(function(a){t.push({path:n.absolute_url+a.path,component:(0,i.connect)(r)(l["default"]),category:n,lists:e,list:a})})}),t}Object.defineProperty(n,"__esModule",{value:!0}),n.select=r,n.getLists=o,n.paths=s;var i=e("react-redux"),u=e("./route"),l=a(u),c=e("../../index"),f=a(c)},{"../../index":135,"./route":112,"react-redux":"react-redux"}],112:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("react-router"),f=e("../dropdown-toggle"),d=a(f),p=e("./navs"),m=e("./title-utils"),h=e("../threads-list/root"),g=a(h),v=e("../with-dropdown"),b=a(v),y=e("../../services/page-title"),_=a(y),w=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"componentDidMount",value:function(){_["default"].set((0,m.getPageTitle)(this.props.route))}},{key:"getTitle",value:function(){return(0,m.getTitle)(this.props.route)}},{key:"getClassName",value:function(){var e="page page-threads";return e+=" page-threads-"+this.props.route.list,this.props.route.category.css_class&&(e+=" page-"+this.props.route.category.css_class),e}},{key:"getHeaderClassName",value:function(){return this.props.route.lists.length>1?"page-header tabbed":"page-header"}},{key:"getGoBackButton",value:function(){return this.props.route.category.parent?l["default"].createElement(c.Link,{className:"btn btn-default btn-aligned btn-icon btn-go-back pull-left",to:this.props.route.category.parent.absolute_url+this.props.route.list.path},l["default"].createElement("span",{className:"material-icon"},"keyboard_arrow_left")):null}},{key:"getTabsNav",value:function(){return this.props.route.lists.length>1?l["default"].createElement(p.TabsNav,{baseUrl:this.props.route.category.absolute_url,list:this.props.route.list,lists:this.props.route.lists,hideNav:this.hideNav}):null}},{key:"getCompactNavToggle",value:function(){return this.props.route.lists.length>1?l["default"].createElement(d["default"],{toggleNav:this.toggleNav,dropdown:this.state.dropdown}):null}},{key:"getCompactNav",value:function(){return this.props.route.lists.length>1?l["default"].createElement(p.CompactNav,{baseUrl:this.props.route.category.absolute_url,list:this.props.route.list,lists:this.props.route.lists,hideNav:this.hideNav}):null}},{key:"render",value:function(){return l["default"].createElement("div",{className:this.getClassName()},l["default"].createElement("div",{className:this.getHeaderClassName()},l["default"].createElement("div",{className:"container"},this.getGoBackButton(),l["default"].createElement("h1",{className:"pull-left"},this.getTitle()),this.getCompactNavToggle()),this.getTabsNav()),l["default"].createElement("div",{className:this.getCompactNavClassName()},this.getCompactNav()),l["default"].createElement("div",{className:"container"},l["default"].createElement(g["default"],null)))}}]),t}(b["default"]);n["default"]=w},{"../../services/page-title":149,"../dropdown-toggle":68,"../threads-list/root":109,"../with-dropdown":133,"./navs":110,"./title-utils":113,react:"react","react-router":"react-router"}],113:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){return e.category.special_role?i["default"].get("CATEGORIES_ON_INDEX")?e.list.path?{title:e.list.longName,parent:gettext("Threads")}:{title:gettext("Threads")}:e.list.path?{title:e.list.longName}:null:e.list.path?{title:e.list.longName,parent:e.category.name}:{title:e.category.name}}function o(e){return e.category.special_role?i["default"].get("CATEGORIES_ON_INDEX")?gettext("Threads"):i["default"].get("SETTINGS").forum_index_title?i["default"].get("SETTINGS").forum_index_title:i["default"].get("SETTINGS").forum_name:e.category.name}Object.defineProperty(n,"__esModule",{value:!0}),n.getPageTitle=r,n.getTitle=o;var s=e("../../index"),i=a(s)},{"../../index":135}],114:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.CompactGuestNav=n.GuestNav=n.GuestMenu=void 0;var u=e("react"),l=a(u),c=e("../avatar"),f=a(c),d=e("../register-button"),p=a(d),m=e("../sign-in.js"),h=a(m),g=e("../../services/mobile-navbar-dropdown"),v=a(g),b=e("../../services/modal"),y=a(b),_=n.GuestMenu=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"showSignInModal",value:function(){y["default"].show(h["default"])}},{key:"render",value:function(){return l["default"].createElement("ul",{className:"dropdown-menu user-dropdown dropdown-menu-right",role:"menu"},l["default"].createElement("li",{className:"guest-preview"},l["default"].createElement("h4",null,gettext("You are browsing as guest.")),l["default"].createElement("p",null,gettext("Sign in or register to start and participate in discussions.")),l["default"].createElement("div",{className:"row"},l["default"].createElement("div",{className:"col-xs-6"},l["default"].createElement("button",{type:"button",className:"btn btn-default btn-block",onClick:this.showSignInModal},gettext("Sign in"))),l["default"].createElement("div",{className:"col-xs-6"},l["default"].createElement(p["default"],{className:"btn-primary btn-block"},gettext("Register"))))))}}]),t}(l["default"].Component);n.GuestNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("div",{className:"nav nav-guest"},l["default"].createElement("button",{type:"button",className:"btn navbar-btn btn-default",onClick:this.showSignInModal},gettext("Sign in")),l["default"].createElement(p["default"],{className:"navbar-btn btn-primary"},gettext("Register")))}}]),t}(_),n.CompactGuestNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"showGuestMenu",value:function(){v["default"].show(_)}},{key:"render",value:function(){return l["default"].createElement("button",{type:"button",onClick:this.showGuestMenu},l["default"].createElement(f["default"],{size:"64"}))}}]),t}(l["default"].Component)},{"../../services/mobile-navbar-dropdown":147,"../../services/modal":148,"../avatar":55,"../register-button":100,"../sign-in.js":107,react:"react"}],115:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return e.auth}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.CompactUserMenu=n.UserMenu=void 0,n.select=i;var l=e("react"),c=a(l),f=e("./guest-nav"),d=e("./user-nav");n.UserMenu=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),u(t,[{key:"render",value:function(){return this.props.isAuthenticated?c["default"].createElement(d.UserNav,{user:this.props.user}):c["default"].createElement(f.GuestNav,null)}}]),t}(c["default"].Component),n.CompactUserMenu=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),u(t,[{key:"render",value:function(){return this.props.isAuthenticated?c["default"].createElement(d.CompactUserNav,{user:this.props.user}):c["default"].createElement(f.CompactGuestNav,null)}}]),t}(c["default"].Component)},{"./guest-nav":114,"./user-nav":116,react:"react"}],116:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return{user:e.auth.user}}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.CompactUserNav=n.UserNav=n.UserMenu=void 0,n.selectUserMenu=i;var l=e("react"),c=a(l),f=e("react-redux"),d=e("../avatar"),p=a(d),m=e("../change-avatar/root"),h=a(m),g=e("../../index"),v=a(g),b=e("../../services/mobile-navbar-dropdown"),y=a(b),_=e("../../services/modal"),w=a(_),E=n.UserMenu=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),u(t,[{key:"logout",value:function(){var e=confirm(gettext("Are you sure you want to sign out?"));e&&$("#hidden-logout-form").submit()}},{key:"changeAvatar",value:function(){w["default"].show((0,f.connect)(m.select)(h["default"]))}},{key:"render",value:function(){return c["default"].createElement("ul",{className:"dropdown-menu user-dropdown dropdown-menu-right",role:"menu"},c["default"].createElement("li",{className:"dropdown-header"},c["default"].createElement("strong",null,this.props.user.username)),c["default"].createElement("li",{className:"divider"}),c["default"].createElement("li",null,c["default"].createElement("a",{href:this.props.user.absolute_url},c["default"].createElement("span",{className:"material-icon"},"account_circle"),gettext("See your profile"))),c["default"].createElement("li",null,c["default"].createElement("a",{href:v["default"].get("USERCP_URL")},c["default"].createElement("span",{className:"material-icon"},"done_all"),gettext("Change options"))),c["default"].createElement("li",null,c["default"].createElement("button",{type:"button",className:"btn-link",onClick:this.changeAvatar},c["default"].createElement("span",{className:"material-icon"},"portrait"),gettext("Change avatar"))),c["default"].createElement("li",{className:"divider"}),c["default"].createElement("li",{className:"dropdown-buttons"},c["default"].createElement("button",{type:"button",className:"btn btn-default btn-block",onClick:this.logout},gettext("Log out"))))}}]),t}(c["default"].Component);n.UserNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),u(t,[{key:"render",value:function(){return c["default"].createElement("ul",{className:"ul nav navbar-nav nav-user"},c["default"].createElement("li",{className:"dropdown"},c["default"].createElement("a",{href:this.props.user.absolute_url,className:"dropdown-toggle","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",role:"button"},c["default"].createElement(p["default"],{user:this.props.user,size:"64"})),c["default"].createElement(E,{user:this.props.user})))}}]),t}(c["default"].Component),n.CompactUserNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),u(t,[{key:"showUserMenu",value:function(){y["default"].showConnected("user-menu",(0,f.connect)(i)(E))}},{key:"render",value:function(){return c["default"].createElement("button",{type:"button",onClick:this.showUserMenu},c["default"].createElement(p["default"],{user:this.props.user,size:"64"}))}}]),t}(c["default"].Component)},{"../../index":135,"../../services/mobile-navbar-dropdown":147,"../../services/modal":148,"../avatar":55,"../change-avatar/root":66,react:"react","react-redux":"react-redux"}],117:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.StatusLabel=n.StatusIcon=void 0;var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getClass",value:function(){var e="";return this.props.status.is_banned?e="banned":this.props.status.is_hidden?e="offline":this.props.status.is_online_hidden?e="online":this.props.status.is_offline_hidden?e="offline":this.props.status.is_online?e="online":this.props.status.is_offline&&(e="offline"),"user-status user-"+e}},{key:"render",value:function(){return l["default"].createElement("span",{className:this.getClass()},this.props.children)}}]),t}(l["default"].Component);n["default"]=c;n.StatusIcon=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getIcon",value:function(){return this.props.status.is_banned?"remove_circle_outline":this.props.status.is_hidden?"help_outline":this.props.status.is_online_hidden?"label":this.props.status.is_offline_hidden?"label_outline":this.props.status.is_online?"lens":this.props.status.is_offline?"panorama_fish_eye":void 0}},{key:"render",value:function(){return l["default"].createElement("span",{className:"material-icon status-icon"},this.getIcon())}}]),t}(l["default"].Component),n.StatusLabel=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getHelp",value:function(){return this.props.status.is_banned?this.props.status.banned_until?interpolate(gettext("%(username)s is banned until %(ban_expires)s"),{username:this.props.user.username,ban_expires:this.props.status.banned_until.format("LL, LT")},!0):interpolate(gettext("%(username)s is banned"),{username:this.props.user.username},!0):this.props.status.is_hidden?interpolate(gettext("%(username)s is hiding presence"),{username:this.props.user.username},!0):this.props.status.is_online_hidden?interpolate(gettext("%(username)s is online (hidden)"),{username:this.props.user.username},!0):this.props.status.is_offline_hidden?interpolate(gettext("%(username)s was last seen %(last_click)s (hidden)"),{username:this.props.user.username,last_click:this.props.status.last_click.fromNow()},!0):this.props.status.is_online?interpolate(gettext("%(username)s is online"),{username:this.props.user.username},!0):this.props.status.is_offline?interpolate(gettext("%(username)s was last seen %(last_click)s"),{username:this.props.user.username,last_click:this.props.status.last_click.fromNow()},!0):void 0}},{key:"getLabel",value:function(){return this.props.status.is_banned?gettext("Banned"):this.props.status.is_hidden?gettext("Hidden"):this.props.status.is_online_hidden?gettext("Online (hidden)"):this.props.status.is_offline_hidden?gettext("Offline (hidden)"):this.props.status.is_online?gettext("Online"):this.props.status.is_offline?gettext("Offline"):void 0}},{key:"render",value:function(){return l["default"].createElement("span",{className:this.props.className||"status-label",title:this.getHelp()},this.getLabel())}}]),t}(l["default"].Component)},{react:"react"}],118:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=r(l),f=e("./avatar"),d=r(f),p=e("../utils/random"),m=a(p),h=function(e){function t(){return o(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"renderUserAvatar",value:function(e){return e.changed_by?c["default"].createElement("a",{href:e.changed_by.absolute_url,className:"user-avatar-wrapper"},c["default"].createElement(d["default"],{user:e.changed_by,size:"100"})):c["default"].createElement("span",{className:"user-avatar-wrapper"},c["default"].createElement(d["default"],{size:"100"}))}},{key:"renderUsername",value:function(e){return e.changed_by?c["default"].createElement("a",{href:e.changed_by.absolute_url,className:"item-title"},e.changed_by.username):c["default"].createElement("span",{className:"item-title"},e.changed_by_username)}},{key:"renderHistory",value:function(){var e=this;return c["default"].createElement("div",{className:"username-history ui-ready"},c["default"].createElement("ul",{className:"list-group"},this.props.changes.map(function(t){return c["default"].createElement("li",{className:"list-group-item",key:t.id},c["default"].createElement("div",{className:"username-change-avatar"},e.renderUserAvatar(t)),c["default"].createElement("div",{className:"username-change-author"},e.renderUsername(t)),c["default"].createElement("div",{className:"username-change"},c["default"].createElement("span",{className:"change-old-username"},t.old_username),c["default"].createElement("span",{className:"material-icon"},"arrow_forward"),c["default"].createElement("span",{className:"change-new-username"},t.new_username)),c["default"].createElement("div",{className:"username-change-date"},c["default"].createElement("abbr",{title:t.changed_on.format("LLL")},t.changed_on.fromNow())))})))}},{key:"getEmptyMessage",value:function(){return this.props.emptyMessage?this.props.emptyMessage:gettext("No name changes have been recorded for your account.")}},{key:"renderEmptyHistory",value:function(){return c["default"].createElement("div",{className:"username-history ui-ready"},c["default"].createElement("ul",{className:"list-group"},c["default"].createElement("li",{className:"list-group-item empty-message"},this.getEmptyMessage())))}},{key:"renderHistoryPreview",value:function(){return c["default"].createElement("div",{className:"username-history ui-preview"},c["default"].createElement("ul",{className:"list-group"},m.range(3,5).map(function(e){return c["default"].createElement("li",{className:"list-group-item",key:e},c["default"].createElement("div",{className:"username-change-avatar"},c["default"].createElement("span",{className:"user-avatar"},c["default"].createElement(d["default"],{size:"100"}))),c["default"].createElement("div",{className:"username-change-author"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:m["int"](30,100)+"px"}}," ")),c["default"].createElement("div",{className:"username-change"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:m["int"](30,50)+"px"}}," "),c["default"].createElement("span",{className:"material-icon"},"arrow_forward"),c["default"].createElement("span",{className:"ui-preview-text",style:{width:m["int"](30,50)+"px"}}," ")),c["default"].createElement("div",{className:"username-change-date"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:m["int"](50,100)+"px"}}," ")))})))}},{key:"render",value:function(){return this.props.isLoaded?this.props.changes.length?this.renderHistory():this.renderEmptyHistory():this.renderHistoryPreview()}}]),t}(c["default"].Component);n["default"]=h},{"../utils/random":159,"./avatar":55,react:"react"}],119:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./user-card"),f=a(c),d=e("./user-preview"),p=a(d),m=e("../../utils/batch"),h=a(m),g=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getPager",value:function(){return this.props.pages>1?l["default"].createElement(Pager,this.props):null}},{key:"getClassName",value:function(){return this.props.className?"users-cards-list "+this.props.className+" ui-ready":"users-cards-list ui-ready"}},{key:"getColClassName",value:function(){return"col-md-"+12/this.props.cols}},{key:"getBody",value:function(){var e=this;if(this.props.isLoaded)return(0,h["default"])(this.props.users,this.props.cols).map(function(t,n){return l["default"].createElement("div",{className:"row",key:n},t.map(function(t){return l["default"].createElement("div",{className:e.getColClassName(),key:t.id},l["default"].createElement(f["default"],{user:t,showStatus:e.props.showStatus,showRank:e.props.showRank}))}))});for(var t=[],n=0;n<this.props.cols;n++)t.push(n);return l["default"].createElement("div",{className:"row"},t.map(function(t){return l["default"].createElement("div",{className:e.getColClassName(),key:t},l["default"].createElement(p["default"],{showStatus:e.props.showStatus}))}))}},{key:"render",value:function(){return l["default"].createElement("div",{className:"users-cards-list ui-ready"},this.getBody())}}]),t}(l["default"].Component);n["default"]=g},{"../../utils/batch":155,"./user-card":120,"./user-preview":121,react:"react"}],120:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../avatar"),f=a(c),d=e("../user-status"),p=a(d),m=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getClassName",value:function(){return this.props.user.rank.css_class?"user-card user-card-"+this.props.user.rank.css_class+" ui-ready":"user-card ui-ready"}},{key:"getUserStatus",value:function(){return this.props.showStatus?this.props.user.status?l["default"].createElement(p["default"],{user:this.props.user,status:this.props.user.status},l["default"].createElement(d.StatusIcon,{user:this.props.user,status:this.props.user.status}),l["default"].createElement(d.StatusLabel,{user:this.props.user,status:this.props.user.status,className:"status-label"})):l["default"].createElement("span",{className:"user-status"},l["default"].createElement("span",{className:"status-icon ui-preview"}," "),l["default"].createElement("span",{className:"status-label ui-preview"}," ")):null}},{key:"getRankName",value:function(){return this.props.showRank?this.props.user.rank.is_tab?l["default"].createElement("a",{href:this.props.user.rank.absolute_url,className:"item-title rank-name"},this.props.user.rank.name):l["default"].createElement("span",{className:"item-title rank-name"},this.props.user.rank.name):null}},{key:"getUserTitle",value:function(){return this.props.user.title?l["default"].createElement("span",{className:"user-title"},this.props.user.title):null}},{key:"getUserJoinedOn",value:function(){var e=interpolate(gettext("Joined on %(joined_on)s"),{joined_on:this.props.user.joined_on.format("LL, LT")},!0),t=interpolate(gettext("Joined %(joined_on)s"),{joined_on:this.props.user.joined_on.fromNow()},!0);return l["default"].createElement("span",{className:"user-joined-on",title:e},t)}},{key:"getPostsCount",value:function(){var e=ngettext("%(posts)s post","%(posts)s posts",this.props.user.posts);return interpolate(e,{posts:this.props.user.posts},!0)}},{key:"getThreadsCount",value:function(){var e=ngettext("%(threads)s thread","%(threads)s threads",this.props.user.threads);return interpolate(e,{threads:this.props.user.threads},!0)}},{key:"getFollowersCount",value:function(){var e=ngettext("%(followers)s follower","%(followers)s followers",this.props.user.followers);return interpolate(e,{followers:this.props.user.followers},!0)}},{key:"render",value:function(){return l["default"].createElement("div",{className:this.getClassName()},l["default"].createElement("div",{className:"user-card-bg-image"},l["default"].createElement(f["default"],{user:this.props.user,size:"400",className:"bg-image"}),l["default"].createElement("div",{className:"user-card-bg"},l["default"].createElement("div",{className:"user-details"},l["default"].createElement("div",{className:"user-avatar"},l["default"].createElement("a",{href:this.props.user.absolute_url},l["default"].createElement(f["default"],{user:this.props.user,size:"400"}))),l["default"].createElement("h4",{className:"user-name"},l["default"].createElement("a",{href:this.props.user.absolute_url,className:"item-title"},this.props.user.username)),l["default"].createElement("p",{className:"user-subscript"},this.getUserStatus(),this.getRankName(),this.getUserTitle(),this.getUserJoinedOn())),l["default"].createElement("div",{className:"user-card-stats"},l["default"].createElement("ul",{className:"list-unstyled"},l["default"].createElement("li",{className:"user-posts-count"},this.getPostsCount()),l["default"].createElement("li",{className:"user-threads-count"},this.getThreadsCount()),l["default"].createElement("li",{className:"user-followers-count"},this.getFollowersCount()))))))}}]),t}(l["default"].Component);n["default"]=m},{"../avatar":55,"../user-status":117,react:"react"}],121:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t;
-}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=r(l),f=e("../avatar"),d=r(f),p=e("../../utils/random"),m=a(p),h=function(e){function t(){return o(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"getUserStatus",value:function(){return this.props.showStatus?c["default"].createElement("span",{className:"user-status"},c["default"].createElement("span",{className:"status-icon ui-preview"}," "),c["default"].createElement("span",{className:"status-label ui-preview"}," ")):null}},{key:"render",value:function(){return c["default"].createElement("div",{className:"user-card ui-preview"},c["default"].createElement("div",{className:"user-card-bg-image"},c["default"].createElement(d["default"],{size:"400",className:"bg-image"}),c["default"].createElement("div",{className:"user-card-bg"},c["default"].createElement("div",{className:"user-details"},c["default"].createElement("div",{className:"user-avatar"},c["default"].createElement(d["default"],{size:"400"})),c["default"].createElement("h4",{className:"user-name"},c["default"].createElement("span",{className:"item-title"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:m["int"](60,150)+"px"}}," "))),c["default"].createElement("p",{className:"user-subscript"},this.getUserStatus(),c["default"].createElement("span",{className:"user-joined-on"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:m["int"](30,50)+"px"}}," ")))),c["default"].createElement("div",{className:"user-card-stats"},c["default"].createElement("ul",{className:"list-unstyled"},c["default"].createElement("li",{className:"user-posts-count"},c["default"].createElement("strong",null,c["default"].createElement("span",{className:"ui-preview-text"}," ")),c["default"].createElement("small",null,gettext("posts"))),c["default"].createElement("li",{className:"user-threads-count"},c["default"].createElement("strong",null,c["default"].createElement("span",{className:"ui-preview-text"}," ")),c["default"].createElement("small",null,gettext("threads"))),c["default"].createElement("li",{className:"user-followers-count"},c["default"].createElement("strong",null,c["default"].createElement("span",{className:"ui-preview-text"}," ")),c["default"].createElement("small",null,gettext("followers"))))))))}}]),t}(c["default"].Component);n["default"]=h},{"../../utils/random":159,"../avatar":55,react:"react"}],122:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getEmptyMessage",value:function(){return interpolate(gettext("No users have posted any new messages during last %(days)s days."),{days:this.props.trackedPeriod},!0)}},{key:"render",value:function(){return l["default"].createElement("div",{className:"active-posters-list"},l["default"].createElement("div",{className:"container"},l["default"].createElement("p",{className:"lead"},this.getEmptyMessage())))}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],123:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("react-router"),f=e("../../avatar"),d=a(f),p=e("../../user-status"),m=a(p),h=e("../../../index"),g=a(h),v=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getClassName",value:function(){return this.props.rank.css_class?"list-group-item list-group-rank-"+this.props.rank.css_class:"list-group-item"}},{key:"getUserStatus",value:function(){return this.props.user.status?l["default"].createElement(m["default"],{user:this.props.user,status:this.props.user.status},l["default"].createElement(p.StatusIcon,{user:this.props.user,status:this.props.user.status}),l["default"].createElement(p.StatusLabel,{user:this.props.user,status:this.props.user.status,className:"status-label hidden-xs hidden-sm"})):l["default"].createElement("span",{className:"user-status"},l["default"].createElement("span",{className:"status-icon ui-preview"}," "),l["default"].createElement("span",{className:"status-label ui-preview hidden-xs hidden-sm"}," "))}},{key:"getRankName",value:function(){if(this.props.rank.is_tab){var e=g["default"].get("USERS_LIST_URL")+this.props.rank.slug+"/";return l["default"].createElement(c.Link,{to:e,className:"item-title rank-name"},this.props.rank.name)}return l["default"].createElement("span",{className:"item-title rank-name"},this.props.rank.name)}},{key:"getUserTitle",value:function(){return this.props.user.title?l["default"].createElement("span",{className:"user-title hidden-xs hidden-sm"},this.props.user.title):null}},{key:"render",value:function(){return l["default"].createElement("li",{className:this.getClassName()},l["default"].createElement("div",{className:"rank-user-avatar"},l["default"].createElement("a",{href:this.props.user.absolute_url},l["default"].createElement(d["default"],{user:this.props.user,size:"50"}))),l["default"].createElement("div",{className:"rank-user"},l["default"].createElement("div",{className:"user-name"},l["default"].createElement("a",{href:this.props.user.absolute_url,className:"item-title"},this.props.user.username)),this.getUserStatus(),this.getRankName(),this.getUserTitle()),l["default"].createElement("div",{className:"rank-position"},l["default"].createElement("strong",null,"#",this.props.counter),l["default"].createElement("small",null,gettext("Rank"))),l["default"].createElement("div",{className:"rank-posts-counted"},l["default"].createElement("strong",null,this.props.user.meta.score),l["default"].createElement("small",null,gettext("Ranked posts"))),l["default"].createElement("div",{className:"rank-posts-total"},l["default"].createElement("strong",null,this.props.user.posts),l["default"].createElement("small",null,gettext("Total posts"))))}}]),t}(l["default"].Component);n["default"]=v},{"../../../index":135,"../../avatar":55,"../../user-status":117,react:"react","react-router":"react-router"}],124:[function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t["default"]=e,t}function r(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=r(l),f=e("../../avatar"),d=r(f),p=e("../../../utils/random"),m=a(p),h=function(e){function t(){return o(this,t),s(this,Object.getPrototypeOf(t).apply(this,arguments))}return i(t,e),u(t,[{key:"render",value:function(){return c["default"].createElement("div",{className:"active-posters-list"},c["default"].createElement("div",{className:"container"},c["default"].createElement("p",{className:"lead ui-preview-paragraph"},m.range(3,4).map(function(e){return c["default"].createElement("span",{key:e,className:"ui-preview-text",style:{width:m["int"](50,120)+"px"}}," ")})),c["default"].createElement("div",{className:"active-posters ui-preview"},c["default"].createElement("ul",{className:"list-group"},m.range(5,10).map(function(e,t){return c["default"].createElement("li",{key:e,className:"list-group-item"},c["default"].createElement("div",{className:"rank-user-avatar"},c["default"].createElement("span",null,c["default"].createElement(d["default"],{size:"50"}))),c["default"].createElement("div",{className:"rank-user"},c["default"].createElement("div",{className:"user-name"},c["default"].createElement("span",{className:"item-title"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:m["int"](30,80)+"px"}}," "))),c["default"].createElement("span",{className:"user-status"},c["default"].createElement("span",{className:"status-icon ui-preview"}," "),c["default"].createElement("span",{className:"status-label ui-preview hidden-xs hidden-sm"}," ")),c["default"].createElement("span",{className:"rank-name"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:m["int"](30,50)+"px"}}," ")),c["default"].createElement("span",{className:"user-title hidden-xs hidden-sm"},c["default"].createElement("span",{className:"ui-preview-text",style:{width:m["int"](30,50)+"px"}}," "))),c["default"].createElement("div",{className:"rank-position"},c["default"].createElement("strong",null,c["default"].createElement("span",{className:"ui-preview-text",style:{width:"30px"}}," ")),c["default"].createElement("small",null,gettext("Rank"))),c["default"].createElement("div",{className:"rank-posts-counted"},c["default"].createElement("strong",null,c["default"].createElement("span",{className:"ui-preview-text",style:{width:"30px"}}," ")),c["default"].createElement("small",null,gettext("Ranked posts"))),c["default"].createElement("div",{className:"rank-posts-total"},c["default"].createElement("strong",null,c["default"].createElement("span",{className:"ui-preview-text",style:{width:"30px"}}," ")),c["default"].createElement("small",null,gettext("Total posts"))))})))))}}]),t}(c["default"].Component);n["default"]=h},{"../../../utils/random":159,"../../avatar":55,react:"react"}],125:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./list-item"),f=a(c),d=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getLeadMessage",value:function(){var e=ngettext("%(posters)s most active poster from last %(days)s days.","%(posters)s most active posters from last %(days)s days.",this.props.count);return interpolate(e,{posters:this.props.count,days:this.props.trackedPeriod},!0)}},{key:"render",value:function(){return l["default"].createElement("div",{className:"active-posters-list"},l["default"].createElement("div",{className:"container"},l["default"].createElement("p",{className:"lead"},this.getLeadMessage()),l["default"].createElement("div",{className:"active-posters ui-ready"},l["default"].createElement("ul",{className:"list-group"},this.props.users.map(function(e,t){return l["default"].createElement(f["default"],{user:e,rank:e.rank,counter:t+1,key:e.id})})))))}}]),t}(l["default"].Component);n["default"]=d},{"./list-item":123,react:"react"}],126:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./list-empty"),f=a(c),d=e("./list-loading"),p=a(d),m=e("./list"),h=a(m),g=e("../../../index"),v=a(g),b=e("../../../reducers/users"),y=e("../../../services/polls"),_=a(y),w=e("../../../services/store"),E=a(w),O=e("../../../services/page-title"),k=a(O),N=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.update=function(e){E["default"].dispatch((0,b.dehydrate)(e.results)),n.setState({isLoaded:!0,trackedPeriod:e.tracked_period,count:e.count})},v["default"].has("USERS")?n.initWithPreloadedData(v["default"].pop("USERS")):n.initWithoutPreloadedData(),n.startPolling(),n}return s(t,e),i(t,[{key:"initWithPreloadedData",value:function(e){this.state={isLoaded:!0,trackedPeriod:e.tracked_period,count:e.count},E["default"].dispatch((0,b.dehydrate)(e.results))}},{key:"initWithoutPreloadedData",value:function(){this.state={isLoaded:!1}}},{key:"startPolling",value:function(){_["default"].start({poll:"active-posters",url:v["default"].get("USERS_API"),data:{list:"active"},frequency:9e4,update:this.update})}},{key:"componentDidMount",value:function(){k["default"].set({title:this.props.route.extra.name,parent:gettext("Users")})}},{key:"componentWillUnmount",value:function(){_["default"].stop("active-posters")}},{key:"render",value:function(){return this.state.isLoaded?this.state.count>0?l["default"].createElement(h["default"],{users:this.props.users,trackedPeriod:this.state.trackedPeriod,count:this.state.count}):l["default"].createElement(f["default"],{trackedPeriod:this.state.trackedPeriod}):l["default"].createElement(p["default"],null)}}]),t}(l["default"].Component);n["default"]=N},{"../../../index":135,"../../../reducers/users":141,"../../../services/page-title":149,"../../../services/polls":150,"../../../services/store":152,"./list":125,"./list-empty":122,"./list-loading":124,react:"react"}],127:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.CompactNav=n.TabsNav=void 0;var u=e("react"),l=a(u),c=e("react-router"),f=e("../li"),d=a(f),p=e("../../index"),m=(a(p),function(e,t){var n=e;return n+="rank"===t.component?t.slug:t.component,n+"/"}),h=function(e,t,n){return t.map(function(t){var a=m(e,t);return l["default"].createElement(d["default"],{path:a,key:a},l["default"].createElement(c.Link,{to:a,onClick:n},t.name))})};n.TabsNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("ul",{className:"nav nav-pills"},h(this.props.baseUrl,this.props.lists))}}]),t}(l["default"].Component),n.CompactNav=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("ul",{className:"dropdown-menu",role:"menu"},h(this.props.baseUrl,this.props.lists,this.props.hideNav))}}]),t}(l["default"].Component)},{"../../index":135,"../li":71,react:"react","react-router":"react-router"}],128:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("../../users-list/root"),f=a(c),d=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"render",value:function(){return l["default"].createElement("div",null,l["default"].createElement(f["default"],{isLoaded:!1,cols:3,showStatus:!0}))}}]),t}(l["default"].Component);n["default"]=d},{"../../users-list/root":119,react:"react"}],129:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("./pager"),f=a(c),d=e("../../users-list/root"),p=a(d),m=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getPager",value:function(){return this.props.pages>1?l["default"].createElement(f["default"],this.props):null}},{key:"render",value:function(){return l["default"].createElement("div",null,l["default"].createElement(p["default"],{users:this.props.users,showStatus:!0,cols:3,isLoaded:!0}),this.getPager())}}]),t}(l["default"].Component);n["default"]=m},{"../../users-list/root":119,"./pager":130,react:"react"}],130:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=e("react-router"),f=e("../../../utils/reset-scroll"),d=a(f),p=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),i(t,[{key:"getPreviousPage",value:function(){if(this.props.previous||this.props.first){var e=this.props.baseUrl;return this.props.previous&&(e+=this.props.previous+"/"),l["default"].createElement("li",{className:"previous"},l["default"].createElement(c.Link,{to:e,onClick:d["default"]},l["default"].createElement("span",{"aria-hidden":"true",className:"material-icon"},"arrow_back")))}return null}},{key:"getNextPage",value:function(){if(this.props.next){var e=this.props.baseUrl+this.props.next+"/";return l["default"].createElement("li",{className:"next"},l["default"].createElement(c.Link,{to:e,onClick:d["default"]},l["default"].createElement("span",{"aria-hidden":"true",className:"material-icon"},"arrow_forward")))}return null}},{key:"getProgessBar",value:function(){var e=this;return l["default"].createElement("ul",{className:"pager-progress-bar"},this.props.page_range.map(function(t){var n=t===e.props.page?"active":null,a=e.props.baseUrl;return t>1&&(a+=t+"/"),l["default"].createElement("li",{key:t,className:n},l["default"].createElement(c.Link,{to:a,onClick:d["default"]},t))}))}},{key:"render",value:function(){return l["default"].createElement("div",{className:"pager-undercontent"},l["default"].createElement("nav",null,l["default"].createElement("ul",{className:"pager"},this.getPreviousPage(),this.getNextPage()),this.getProgessBar()))}}]),t}(l["default"].Component);n["default"]=p},{"../../../utils/reset-scroll":160,react:"react","react-router":"react-router"}],131:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},u=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var l=e("react"),c=a(l),f=e("./list"),d=a(f),p=e("./list-loading"),m=a(p),h=e("../../../index"),g=a(h),v=e("../../../reducers/users"),b=e("../../../services/polls"),y=a(b),_=e("../../../services/store"),w=a(_),E=e("../../../services/page-title"),O=a(E),k=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.update=function(e){w["default"].dispatch((0,v.dehydrate)(e.results)),e.isLoaded=!0,n.setState(e)},g["default"].has("USERS")?n.initWithPreloadedData(g["default"].pop("USERS")):n.initWithoutPreloadedData(),n.startPolling(e.params.page||1),n}return s(t,e),u(t,[{key:"initWithPreloadedData",value:function(e){this.state=Object.assign(e,{isLoaded:!0}),w["default"].dispatch((0,v.dehydrate)(e.results))}},{key:"initWithoutPreloadedData",value:function(){this.state={isLoaded:!1}}},{key:"startPolling",value:function(e){y["default"].start({poll:"rank-users",url:g["default"].get("USERS_API"),data:{rank:this.props.route.rank.id,page:e},frequency:9e4,update:this.update})}},{key:"componentDidMount",value:function(){O["default"].set({title:this.props.route.rank.name,page:this.props.params.page||null,parent:gettext("Users")})}},{key:"componentWillUnmount",value:function(){y["default"].stop("rank-users")}},{key:"componentWillReceiveProps",value:function(e){this.props.params.page!==e.params.page&&(O["default"].set({title:this.props.route.rank.name,page:e.params.page||null,parent:gettext("Users")}),this.setState({isLoaded:!1}),y["default"].stop("rank-users"),this.startPolling(e.params.page))}},{key:"getClassName",value:function(){return this.props.route.rank.css_class?"rank-users-list rank-users-"+this.props.route.rank.css_class:"rank-users-list"}},{key:"getRankDescription",value:function(){return this.props.route.rank.description?c["default"].createElement("div",{className:"rank-description"},c["default"].createElement("div",{className:"lead",dangerouslySetInnerHTML:{__html:this.props.route.rank.description.html}})):null}},{key:"getComponent",value:function(){if(this.state.isLoaded){if(this.state.count>0){var e=g["default"].get("USERS_LIST_URL")+this.props.route.rank.slug+"/";return c["default"].createElement(d["default"],i({baseUrl:e,users:this.props.users},this.state))}return c["default"].createElement("p",{className:"lead"},gettext("There are no users with this rank at the moment."))}return c["default"].createElement(m["default"],null)}},{key:"render",value:function(){return c["default"].createElement("div",{className:this.getClassName()},c["default"].createElement("div",{className:"container"},this.getRankDescription(),this.getComponent()))}}]),t}(c["default"].Component);n["default"]=k},{"../../../index":135,"../../../reducers/users":141,"../../../services/page-title":149,"../../../services/polls":150,"../../../services/store":152,"./list":129,"./list-loading":128,react:"react"}],132:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e){return{tick:e.tick.tick,user:e.auth.user,users:e.users}}function u(){var e=[];return O["default"].get("USERS_LISTS").forEach(function(t){"rank"===t.component?(e.push({path:O["default"].get("USERS_LIST_URL")+t.slug+"/:page/",component:(0,d.connect)(i)(y["default"]),rank:t}),e.push({path:O["default"].get("USERS_LIST_URL")+t.slug+"/",component:(0,d.connect)(i)(y["default"]),rank:t})):"active-posters"===t.component&&e.push({path:O["default"].get("USERS_LIST_URL")+t.component+"/",component:(0,d.connect)(i)(v["default"]),extra:{name:t.name}})}),e}var l=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.select=i,n.paths=u;var c=e("react"),f=a(c),d=e("react-redux"),p=e("../dropdown-toggle"),m=a(p),h=e("./navs"),g=e("./active-posters/root"),v=a(g),b=e("./rank/root"),y=a(b),_=e("../with-dropdown"),w=a(_),E=e("../../index"),O=a(E),k=function(e){function t(){return r(this,t),o(this,Object.getPrototypeOf(t).apply(this,arguments))}return s(t,e),l(t,[{key:"render",value:function(){return f["default"].createElement("div",{className:"page page-users-lists"},f["default"].createElement("div",{className:"page-header tabbed"},f["default"].createElement("div",{className:"container"},f["default"].createElement("h1",{className:"pull-left"},gettext("Users")),f["default"].createElement(m["default"],{toggleNav:this.toggleNav,dropdown:this.state.dropdown})),f["default"].createElement("div",{className:"page-tabs hidden-xs hidden-sm"},f["default"].createElement("div",{className:"container"},f["default"].createElement(h.TabsNav,{lists:O["default"].get("USERS_LISTS"),baseUrl:O["default"].get("USERS_LIST_URL")})))),f["default"].createElement("div",{className:this.getCompactNavClassName()},f["default"].createElement(h.CompactNav,{lists:O["default"].get("USERS_LISTS"),baseUrl:O["default"].get("USERS_LIST_URL"),hideNav:this.hideNav})),this.props.children)}}]),t}(w["default"]);n["default"]=k},{"../../index":135,"../dropdown-toggle":68,"../with-dropdown":133,"./active-posters/root":126,"./navs":127,"./rank/root":131,react:"react","react-redux":"react-redux"}],133:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){
-if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(e){r(this,t);var n=o(this,Object.getPrototypeOf(t).call(this,e));return n.toggleNav=function(){n.setState({dropdown:!n.state.dropdown})},n.hideNav=function(){n.setState({dropdown:!1})},n.state={dropdown:!1},n}return s(t,e),i(t,[{key:"getCompactNavClassName",value:function(){return this.state.dropdown?"compact-nav open":"compact-nav"}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],134:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var u=e("react"),l=a(u),c=function(e){function t(){var e,n,a,s;r(this,t);for(var i=arguments.length,u=Array(i),l=0;i>l;l++)u[l]=arguments[l];return n=a=o(this,(e=Object.getPrototypeOf(t)).call.apply(e,[this].concat(u))),a.toggle=function(){a.props.onChange({target:{value:!a.props.value}})},s=n,o(a,s)}return s(t,e),i(t,[{key:"getClassName",value:function(){return this.props.value?"btn btn-yes-no btn-yes-no-on":"btn btn-yes-no btn-yes-no-off"}},{key:"getIcon",value:function(){return this.props.value?this.props.iconOn||"check_box":this.props.iconOff||"check_box_outline_blank"}},{key:"getLabel",value:function(){return this.props.value?this.props.labelOn||gettext("yes"):this.props.labelOff||gettext("no")}},{key:"render",value:function(){return l["default"].createElement("button",{type:"button",onClick:this.toggle,className:this.getClassName(),id:this.props.id||null,"aria-describedby":this.props["aria-describedby"]||null,disabled:this.props.disabled||!1},l["default"].createElement("span",{className:"material-icon"},this.getIcon()),this.getLabel())}}]),t}(l["default"].Component);n["default"]=c},{react:"react"}],135:[function(e,t,n){(function(t){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Misago=void 0;var s=e("./utils/ordered-list"),i=a(s),u=n.Misago=function(){function e(){r(this,e),this._initializers=[],this._context={}}return o(e,[{key:"addInitializer",value:function(e){this._initializers.push({key:e.name,item:e.initializer,after:e.after,before:e.before})}},{key:"init",value:function(e){var t=this;this._context=e;var n=new i["default"](this._initializers).orderedValues();n.forEach(function(e){e(t)})}},{key:"has",value:function(e){return!!this._context[e]}},{key:"get",value:function(e,t){return this.has(e)?this._context[e]:t||void 0}},{key:"pop",value:function(e){if(this.has(e)){var t=this._context[e];return this._context[e]=null,t}}}]),e}(),l=new u;t.misago=l,n["default"]=l}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./utils/ordered-list":158}],136:[function(e,t,n){"use strict";function a(e){return{type:l,patch:e}}function r(e){return{type:c,user:e}}function o(){var e=arguments.length<=0||void 0===arguments[0]?!1:arguments[0];return{type:f,soft:e}}function s(){var e=arguments.length<=0||void 0===arguments[0]?u:arguments[0],t=arguments.length<=1||void 0===arguments[1]?null:arguments[1];switch(t.type){case l:var n=Object.assign({},e);return n.user=Object.assign({},e.user,t.patch),n;case c:return Object.assign({},e,{signedIn:t.user});case f:return Object.assign({},e,{isAuthenticated:!1,isAnonymous:!0,signedOut:!t.soft});case i.UPDATE_AVATAR:if(e.isAuthenticated&&e.user.id===t.userId){var a=Object.assign({},e);return a.user=Object.assign({},e.user,{avatar_hash:t.avatarHash}),a}return e;case i.UPDATE_USERNAME:if(e.isAuthenticated&&e.user.id===t.userId){var r=Object.assign({},e);return r.user=Object.assign({},e.user,{username:t.username,slug:t.slug}),r}return e;default:return e}}Object.defineProperty(n,"__esModule",{value:!0}),n.SIGN_OUT=n.SIGN_IN=n.PATCH_USER=n.initialState=void 0,n.patchUser=a,n.signIn=r,n.signOut=o,n["default"]=s;var i=e("./users"),u=n.initialState={signedIn:!1,signedOut:!1},l=n.PATCH_USER="PATCH_USER",c=n.SIGN_IN="SIGN_IN",f=n.SIGN_OUT="SIGN_OUT"},{"./users":141}],137:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){return{type:c,profile:e}}function o(e){return{type:f,patch:e}}function s(){var e=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],t=arguments.length<=1||void 0===arguments[1]?null:arguments[1];switch(t.type){case c:return Object.assign({},t.profile,{joined_on:(0,u["default"])(t.profile.joined_on),status:(0,l.dehydrateStatus)(t.profile.status)});case f:return Object.assign({},e,t.patch);case l.UPDATE_AVATAR:return e.id===t.userId?Object.assign({},e,{avatar_hash:t.avatarHash}):e;case l.UPDATE_USERNAME:return e.id===t.userId?Object.assign({},e,{username:t.username,slug:t.slug}):e;default:return e}}Object.defineProperty(n,"__esModule",{value:!0}),n.PATCH_PROFILE=n.DEHYDRATE_PROFILE=void 0,n.dehydrate=r,n.patchProfile=o,n["default"]=s;var i=e("moment"),u=a(i),l=e("./users"),c=n.DEHYDRATE_PROFILE="DEHYDRATE_PROFILE",f=n.PATCH_PROFILE="PATCH_PROFILE"},{"./users":141,moment:"moment"}],138:[function(e,t,n){"use strict";function a(e,t){return{type:i,message:e,messageType:t}}function r(){return{type:u}}function o(){var e=arguments.length<=0||void 0===arguments[0]?s:arguments[0],t=arguments.length<=1||void 0===arguments[1]?null:arguments[1];return t.type===i?{type:t.messageType,message:t.message,isVisible:!0}:t.type===u?Object.assign({},e,{isVisible:!1}):e}Object.defineProperty(n,"__esModule",{value:!0}),n.showSnackbar=a,n.hideSnackbar=r,n["default"]=o;var s=n.initialState={type:"info",message:"",isVisible:!1},i=n.SHOW_SNACKBAR="SHOW_SNACKBAR",u=n.HIDE_SNACKBAR="HIDE_SNACKBAR"},{}],139:[function(e,t,n){"use strict";function a(){return{type:s}}function r(){var e=arguments.length<=0||void 0===arguments[0]?o:arguments[0],t=arguments.length<=1||void 0===arguments[1]?null:arguments[1];return t.type===s?Object.assign({},e,{tick:e.tick+1}):e}Object.defineProperty(n,"__esModule",{value:!0}),n.doTick=a,n["default"]=r;var o=n.initialState={tick:0},s=n.TICK="TICK"},{}],140:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t,n){return{type:f,change:e,user:t,changedBy:n}}function o(e){return{type:d,items:e}}function s(e){return{type:p,items:e}}function i(){var e=arguments.length<=0||void 0===arguments[0]?[]:arguments[0],t=arguments.length<=1||void 0===arguments[1]?null:arguments[1];switch(t.type){case f:var n=e.slice();return n.unshift({id:Math.floor(Date.now()/1e3),changed_by:t.changedBy,changed_by_username:t.changedBy.username,changed_on:(0,c["default"])(),new_username:t.change.username,old_username:t.user.username}),n;case d:return e.concat(t.items.map(function(e){return Object.assign({},e,{changed_on:(0,c["default"])(e.changed_on)})}));case p:return t.items.map(function(e){return Object.assign({},e,{changed_on:(0,c["default"])(e.changed_on)})});case u.UPDATE_AVATAR:return e.map(function(e){return e=Object.assign({},e),e.changed_by&&e.changed_by.id===t.userId&&(e.changed_by=Object.assign({},e.changed_by,{avatar_hash:t.avatarHash})),e});case u.UPDATE_USERNAME:return e.map(function(e){return e=Object.assign({},e),e.changed_by&&e.changed_by.id===t.userId&&(e.changed_by=Object.assign({},e.changed_by,{username:t.username,slug:t.slug})),Object.assign({},e)});default:return e}}Object.defineProperty(n,"__esModule",{value:!0}),n.DEHYDRATE_HISTORY=n.APPEND_HISTORY=n.ADD_NAME_CHANGE=void 0,n.addNameChange=r,n.append=o,n.dehydrate=s,n["default"]=i;var u=e("./users"),l=e("moment"),c=a(l),f=n.ADD_NAME_CHANGE="ADD_NAME_CHANGE",d=n.APPEND_HISTORY="APPEND_HISTORY",p=n.DEHYDRATE_HISTORY="DEHYDRATE_HISTORY"},{"./users":141,moment:"moment"}],141:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e){return{type:d,items:e}}function o(e){return{type:p,items:e}}function s(e){return e?Object.assign({},e,{last_click:e.last_click?(0,f["default"])(e.last_click):null,banned_until:e.banned_until?(0,f["default"])(e.banned_until):null}):null}function i(e,t){return{type:m,userId:e.id,avatarHash:t}}function u(e,t,n){return{type:h,userId:e.id,username:t,slug:n}}function l(){var e=arguments.length<=0||void 0===arguments[0]?[]:arguments[0],t=arguments.length<=1||void 0===arguments[1]?null:arguments[1];switch(t.type){case d:return e.concat(t.items.map(function(e){return Object.assign({},e,{joined_on:(0,f["default"])(e.joined_on),status:s(e.status)})}));case p:return t.items.map(function(e){return Object.assign({},e,{joined_on:(0,f["default"])(e.joined_on),status:s(e.status)})});case m:return e.map(function(e){return e=Object.assign({},e),e.id===t.userId&&(e.avatar_hash=t.avatarHash),e});default:return e}}Object.defineProperty(n,"__esModule",{value:!0}),n.UPDATE_USERNAME=n.UPDATE_AVATAR=n.DEHYDRATE_USERS=n.APPEND_USERS=void 0,n.append=r,n.dehydrate=o,n.dehydrateStatus=s,n.updateAvatar=i,n.updateUsername=u,n["default"]=l;var c=e("moment"),f=a(c),d=n.APPEND_USERS="APPEND_USERS",p=n.DEHYDRATE_USERS="DEHYDRATE_USERS",m=n.UPDATE_AVATAR="UPDATE_AVATAR",h=n.UPDATE_USERNAME="UPDATE_USERNAME"},{moment:"moment"}],142:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},o=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var s=n.Ajax=function(){function e(){a(this,e),this._cookieName=null,this._csrfToken=null,this._locks={}}return o(e,[{key:"init",value:function(e){this._cookieName=e,this._csrfToken=this.getCsrfToken()}},{key:"getCsrfToken",value:function(){if(-1!==document.cookie.indexOf(this._cookieName)){var e=new RegExp(this._cookieName+"=([^;]*)"),t=document.cookie.match(e)[0];return t?t.split("=")[1]:null}return null}},{key:"request",value:function(e,t,n){var a=this;return new Promise(function(r,o){var s={url:t,method:e,headers:{"X-CSRFToken":a._csrfToken},data:n?JSON.stringify(n):null,contentType:"application/json; charset=utf-8",dataType:"json",success:function(e){r(e)},error:function(e){var t=e.responseJSON||{};t.status=e.status,0===t.status&&(t.detail=gettext("Lost connection with application.")),404===t.status&&(t.detail&&"NOT FOUND"!==t.detail||(t.detail=gettext("Action link is invalid."))),500!==t.status||t.detail||(t.detail=gettext("Unknown error has occured.")),t.statusText=e.statusText,o(t)}};$.ajax(s)})}},{key:"get",value:function(e,t,n){var a=this;if(t&&(e+="?"+$.param(t)),!n)return this.request("GET",e);var o=function(){var t=a;return a._locks[n]&&(a._locks[n].url=e),a._locks[n]&&a._locks[n].waiter?{v:{then:function(){}}}:a._locks[n]&&a._locks[n].wait?(a._locks[n].waiter=!0,{v:new Promise(function(a,r){var o=function s(e){t._locks[n].wait?window.setTimeout(function(){s(e)},300):t._locks[n].url!==e?s(t._locks[n].url):(t._locks[n].waiter=!1,t.request("GET",t._locks[n].url).then(function(r){t._locks[n].url===e?a(r):(t._locks[n].waiter=!0,s(t._locks[n].url))},function(a){t._locks[n].url===e?r(a):(t._locks[n].waiter=!0,s(t._locks[n].url))}))};window.setTimeout(function(){o(e)},300)})}):(a._locks[n]={url:e,wait:!0,waiter:!1},{v:new Promise(function(a,r){t.request("GET",e).then(function(r){t._locks[n].wait=!1,t._locks[n].url===e&&a(r)},function(a){t._locks[n].wait=!1,t._locks[n].url===e&&r(a)})})})}();return"object"===("undefined"==typeof o?"undefined":r(o))?o.v:void 0}},{key:"post",value:function(e,t){return this.request("POST",e,t)}},{key:"patch",value:function(e,t){return this.request("PATCH",e,t)}},{key:"put",value:function(e,t){return this.request("PUT",e,t)}},{key:"delete",value:function(e){return this.request("DELETE",e)}},{key:"upload",value:function(e,t,n){var a=this;return new Promise(function(r,o){var s={url:e,method:"POST",headers:{"X-CSRFToken":a._csrfToken},data:t,contentType:!1,processData:!1,xhr:function i(){var i=new window.XMLHttpRequest;return i.upload.addEventListener("progress",function(e){e.lengthComputable&&n(Math.round(e.loaded/e.total*100))},!1),i},success:function(e){r(e)},error:function(e){var t=e.responseJSON||{};t.status=e.status,0===t.status&&(t.detail=gettext("Lost connection with application.")),404===t.status&&(t.detail&&"NOT FOUND"!==t.detail||(t.detail=gettext("Action link is invalid."))),500!==t.status||t.detail||(t.detail=gettext("Unknown error has occured.")),t.statusText=e.statusText,o(t)}};$.ajax(s)})}}]),e}();n["default"]=new s},{}],143:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Auth=void 0;var o=e("../reducers/auth"),s=n.Auth=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e,t,n){this._store=e,this._local=t,this._modal=n,this.syncSession(),this.watchState()}},{key:"syncSession",value:function(){var e=this._store.getState().auth;e.isAuthenticated?this._local.set("auth",{isAuthenticated:!0,username:e.user.username}):this._local.set("auth",{isAuthenticated:!1})}},{key:"watchState",value:function(){var e=this;this._local.watch("auth",function(t){t.isAuthenticated?e._store.dispatch((0,o.signIn)({username:t.username})):e._store.dispatch((0,o.signOut)())}),this._modal.hide()}},{key:"signIn",value:function(e){this._store.dispatch((0,o.signIn)(e)),this._local.set("auth",{isAuthenticated:!0,username:e.username}),this._modal.hide()}},{key:"signOut",value:function(){this._store.dispatch((0,o.signOut)()),this._local.set("auth",{isAuthenticated:!1}),this._modal.hide()}},{key:"softSignOut",value:function(){this._store.dispatch((0,o.signOut)(!0)),this._local.set("auth",{isAuthenticated:!1}),this._modal.hide()}}]),e}();n["default"]=new s},{"../reducers/auth":136}],144:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Captcha=n.ReCaptcha=n.ReCaptchaComponent=n.QACaptcha=n.NoCaptcha=n.BaseCaptcha=void 0;var u=e("react"),l=a(u),c=e("../components/form-group"),f=a(c),d=n.BaseCaptcha=function(){function e(){s(this,e)}return i(e,[{key:"init",value:function(e,t,n,a){this._context=e,this._ajax=t,this._include=n,this._snackbar=a}}]),e}(),p=n.NoCaptcha=function(e){function t(){return s(this,t),r(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"load",value:function(){return new Promise(function(e){e()})}},{key:"validator",value:function(){return null}},{key:"component",value:function(){return null}}]),t}(d),m=n.QACaptcha=function(e){function t(){return s(this,t),r(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"load",value:function(){var e=this;return new Promise(function(t,n){e._ajax.get(e._context.get("CAPTCHA_API_URL")).then(function(n){e.question=n.question,e.helpText=n.help_text,t()},function(){e._snackbar.error(gettext("Failed to load CAPTCHA.")),n()})})}},{key:"validator",value:function(){return[]}},{key:"component",value:function(e){return l["default"].createElement(f["default"],{label:this.question,"for":"id_captcha",labelClass:e.labelClass||"col-sm-4",controlClass:e.controlClass||"col-sm-8",validation:e.form.state.errors.captcha,helpText:this.helpText||null},l["default"].createElement("input",{type:"text",id:"id_captcha",className:"form-control","aria-describedby":"id_captcha_status",disabled:e.form.state.isLoading,onChange:e.form.bindInput("captcha"),value:e.form.state.captcha}))}}]),t}(d),h=n.ReCaptchaComponent=function(e){function t(){return s(this,t),r(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"componentDidMount",value:function(){var e=this;grecaptcha.render("recaptcha",{sitekey:this.props.siteKey,callback:function(t){e.props.binding({target:{value:t}})}})}},{key:"render",value:function(){return l["default"].createElement("div",{id:"recaptcha"})}}]),t}(l["default"].Component),g=n.ReCaptcha=function(e){function t(){return s(this,t),r(this,Object.getPrototypeOf(t).apply(this,arguments))}return o(t,e),i(t,[{key:"load",value:function(){return this._include.include("https://www.google.com/recaptcha/api.js",!0),new Promise(function(e){var t=function n(){"undefined"==typeof grecaptcha?window.setTimeout(function(){n()},200):e()};t()})}},{key:"validator",value:function(){return[]}},{key:"component",value:function(e){return l["default"].createElement(f["default"],{label:gettext("Captcha"),"for":"id_captcha",labelClass:e.labelClass||"col-sm-4",controlClass:e.controlClass||"col-sm-8",validation:e.form.state.errors.captcha,helpText:gettext("Please solve the quick test.")},l["default"].createElement(h,{siteKey:this._context.get("SETTINGS").recaptcha_site_key,binding:e.form.bindInput("captcha")}))}}]),t}(d),v=n.Captcha=function(){function e(){s(this,e)}return i(e,[{key:"init",value:function(e,t,n,a){switch(e.get("SETTINGS").captcha_type){case"no":this._captcha=new p;break;case"qa":this._captcha=new m;break;case"re":this._captcha=new g}this._captcha.init(e,t,n,a)}},{key:"load",value:function(){return this._captcha.load()}},{key:"validator",value:function(){return this._captcha.validator()}},{key:"component",value:function(e){return this._captcha.component(e)}}]),e}();n["default"]=new v},{"../components/form-group":69,react:"react"}],145:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var o=n.Include=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e){this._staticUrl=e,this._included=[]}},{key:"include",value:function(e){var t=arguments.length<=1||void 0===arguments[1]?!1:arguments[1];-1===this._included.indexOf(e)&&(this._included.push(e),this._include(e,t))}},{key:"_include",value:function(e,t){$.ajax({url:(t?"":this._staticUrl)+e,cache:!0,dataType:"script"})}}]),e}();n["default"]=new o},{}],146:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var o=window.localStorage,s=n.LocalStorage=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e){var t=this;this._prefix=e,this._watchers=[],window.addEventListener("storage",function(e){var n=JSON.parse(e.newValue);t._watchers.forEach(function(t){t.key===e.key&&e.oldValue!==e.newValue&&t.callback(n)})})}},{key:"set",value:function(e,t){o.setItem(this._prefix+e,JSON.stringify(t))}},{key:"get",value:function(e){var t=o.getItem(this._prefix+e);return t?JSON.parse(t):null}},{key:"watch",value:function(e,t){this._watchers.push({key:this._prefix+e,callback:t})}}]),e}();n["default"]=new s},{}],147:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.MobileNavbarDropdown=void 0;var s=e("../utils/mount-component"),i=a(s),u=n.MobileNavbarDropdown=function(){function e(){r(this,e)}return o(e,[{key:"init",value:function(e){this._element=e,this._component=null}},{key:"show",value:function(e){this._component===e?this.hide():(this._component=e,(0,i["default"])(e,this._element.id),$(this._element).addClass("open"))}},{key:"showConnected",value:function(e,t){this._component===e?this.hide():(this._component=e,(0,i["default"])(t,this._element.id,!0),$(this._element).addClass("open"))}},{key:"hide",value:function(){$(this._element).removeClass("open"),this._component=null}}]),e}();n["default"]=new u},{"../utils/mount-component":157}],148:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Modal=void 0;var s=e("react-dom"),i=a(s),u=e("../utils/mount-component"),l=a(u),c=n.Modal=function(){function e(){r(this,e)}return o(e,[{key:"init",value:function(e){var t=this;this._element=e,this._modal=$(e).modal({show:!1}),this._modal.on("hidden.bs.modal",function(){i["default"].unmountComponentAtNode(t._element)})}},{key:"show",value:function(e){(0,l["default"])(e,this._element.id),this._modal.modal("show")}},{key:"hide",value:function(){this._modal.modal("hide")}}]),e}();n["default"]=new c},{"../utils/mount-component":157,"react-dom":"react-dom"}],149:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var o=n.PageTitle=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e,t){this._indexTitle=e,this._forumName=t}},{key:"set",value:function(e){if(!e)return void(document.title=this._indexTitle||this._forumName);"string"==typeof e&&(e={title:e});var t=e.title;if(e.page){var n=interpolate(gettext("page: %(page)s"),{page:e.page},!0);t+=" ("+n+")"}e.parent&&(t+=" | "+e.parent),document.title=t+" | "+this._forumName}}]),e}();n["default"]=new o},{}],150:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var o=n.Polls=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e,t){this._ajax=e,this._snackbar=t,this._polls={}}},{key:"start",value:function(e){var t=this,n=function a(){t._polls[e.poll]=e,t._ajax.get(e.url,e.data||null).then(function(n){t._polls[e.poll]._stopped||(e.update(n),t._polls[e.poll].timeout=window.setTimeout(a,e.frequency))},function(n){t._polls[e.poll]._stopped||(e.error?e.error(n):t._snackbar.apiError(n))})};n()}},{key:"stop",value:function(e){this._polls[e]&&(window.clearTimeout(this._polls[e].timeout),this._polls[e]._stopped=!0)}}]),e}();n["default"]=new o},{}],151:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.Snackbar=void 0;var o=e("../reducers/snackbar"),s=300,i=5e3,u=n.Snackbar=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e){this._store=e,this._timeout=null}},{key:"alert",value:function(e,t){var n=this;this._timeout?(window.clearTimeout(this._timeout),this._store.dispatch((0,o.hideSnackbar)()),this._timeout=window.setTimeout(function(){n._timeout=null,n.alert(e,t)},s)):(this._store.dispatch((0,o.showSnackbar)(e,t)),this._timeout=window.setTimeout(function(){n._store.dispatch((0,o.hideSnackbar)()),n._timeout=null},i))}},{key:"info",value:function(e){this.alert(e,"info")}},{key:"success",value:function(e){this.alert(e,"success")}},{key:"warning",value:function(e){this.alert(e,"warning")}},{key:"error",value:function(e){this.alert(e,"error")}},{key:"apiError",value:function(e){var t=e.detail;t||(t=404===e.status?gettext("Action link is invalid."):gettext("Unknown error has occured.")),403===e.status&&"Permission denied"===t&&(t=gettext("You don't have permission to perform this action.")),this.error(t)}}]),e}();n["default"]=new u},{"../reducers/snackbar":138}],152:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0}),n.StoreWrapper=void 0;var o=e("redux"),s=n.StoreWrapper=function(){function e(){a(this,e),this._store=null,this._reducers={},this._initialState={}}return r(e,[{key:"addReducer",value:function(e,t,n){this._reducers[e]=t,this._initialState[e]=n}},{key:"init",value:function(){this._store=(0,o.createStore)((0,o.combineReducers)(this._reducers),this._initialState)}},{key:"getStore",value:function(){return this._store}},{key:"getState",value:function(){return this._store.getState()}},{key:"dispatch",value:function(e){return this._store.dispatch(e)}}]),e}();n["default"]=new s},{redux:"redux"}],153:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var o=n.Zxcvbn=function(){function e(){a(this,e)}return r(e,[{key:"init",value:function(e){this._include=e}},{key:"scorePassword",value:function(e,t){return zxcvbn(e,t).score}},{key:"load",value:function(){return"undefined"==typeof zxcvbn?(this._include.include("misago/js/zxcvbn.js"),this._loadingPromise()):this._loadedPromise()}},{key:"_loadingPromise",value:function(){return new Promise(function(e){var t=function n(){"undefined"==typeof zxcvbn?window.setTimeout(function(){n()},200):e()};t()})}},{key:"_loadedPromise",value:function(){return new Promise(function(e){e()})}}]),e}();n["default"]=new o},{}],154:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=function(e,t){if(l["default"].render(i["default"].createElement(c.Provider,{store:g["default"].getStore()},i["default"].createElement(b,{message:e.message,expires:e.expires_on?(0,o["default"])(e.expires_on):null})),document.getElementById("page-mount")),"undefined"==typeof t||t){var n=m["default"].get("SETTINGS").forum_name;document.title=gettext("You are banned")+" | "+n,window.history.pushState({},"",m["default"].get("BANNED_URL"))}};var r=e("moment"),o=a(r),s=e("react"),i=a(s),u=e("react-dom"),l=a(u),c=e("react-redux"),f=e("../components/banned-page"),d=a(f),p=e("../index"),m=a(p),h=e("../services/store"),g=a(h),v=function(e){return e.tick},b=(0,c.connect)(v)(d["default"])},{"../components/banned-page":56,"../index":135,"../services/store":152,moment:"moment",react:"react","react-dom":"react-dom","react-redux":"react-redux"}],155:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=function(e,t){var n=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],a=[],r=[];if(e.forEach(function(e){r.push(e),r.length===t&&(a.push(r),r=[])}),n!==!1&&r.length>0&&r.length<t)for(var o=r.length;t>o;o++)r.push(n);return r.length&&a.push(r),a}},{}],156:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=function(e){return e>1e9?Math.round(100*e/1e9)/100+" GB":e>1e6?Math.round(100*e/1e6)/100+" MB":e>1e3?Math.round(100*e/1e3)/100+" KB":Math.round(100*e)/100+" B"}},{}],157:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=function(e,t){var n=arguments.length<=2||void 0===arguments[2]?!0:arguments[2],a=document.getElementById(t),r=e.props?e:o["default"].createElement(e,null);a&&(n?i["default"].render(o["default"].createElement(u.Provider,{store:c["default"].getStore()},r),a):i["default"].render(r,a))};var r=e("react"),o=a(r),s=e("react-dom"),i=a(s),u=e("react-redux"),l=e("../services/store"),c=a(l);
-},{"../services/store":152,react:"react","react-dom":"react-dom","react-redux":"react-redux"}],158:[function(e,t,n){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,a.key,a)}}return function(t,n,a){return n&&e(t.prototype,n),a&&e(t,a),t}}();Object.defineProperty(n,"__esModule",{value:!0});var o=function(){function e(t){a(this,e),this.isOrdered=!1,this._items=t||[]}return r(e,[{key:"add",value:function(e,t,n){this._items.push({key:e,item:t,after:n?n.after||null:null,before:n?n.before||null:null})}},{key:"get",value:function(e,t){for(var n=0;n<this._items.length;n++)if(this._items[n].key===e)return this._items[n].item;return t}},{key:"has",value:function(e){return void 0!==this.get(e)}},{key:"values",value:function t(){for(var t=[],e=0;e<this._items.length;e++)t.push(this._items[e].item);return t}},{key:"order",value:function(e){return this.isOrdered||(this._items=this._order(this._items),this.isOrdered=!0),e||"undefined"==typeof e?this.values():this._items}},{key:"orderedValues",value:function(){return this.order(!0)}},{key:"_order",value:function(e){function t(e){var t=-1;-1===r.indexOf(e.key)&&(e.after?(t=r.indexOf(e.after),-1!==t&&(t+=1)):e.before&&(t=r.indexOf(e.before)),-1!==t&&(a.splice(t,0,e),r.splice(t,0,e.key)))}var n=[];e.forEach(function(e){n.push(e.key)});var a=[],r=[];e.forEach(function(e){e.after||e.before||(a.push(e),r.push(e.key))}),e.forEach(function(e){"_end"===e.before&&(a.push(e),r.push(e.key))});for(var o=200;o>0&&n.length!==r.length;)o-=1,e.forEach(t);return a}}]),e}();n["default"]=o},{}],159:[function(e,t,n){"use strict";function a(e,t){return Math.floor(Math.random()*(t-e+1))+e}function r(e,t){for(var n=new Array(a(e,t)),r=0;r<n.length;r++)n[r]=r;return n}Object.defineProperty(n,"__esModule",{value:!0}),n["int"]=a,n.range=r},{}],160:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=function(){window.scrollTo(0,0)}},{}],161:[function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(n,"__esModule",{value:!0}),n["default"]=function(e){var t={component:e.component||null,childRoutes:[]};e.root?t.childRoutes=[{path:e.root,onEnter:function(t,n){n(null,e.paths[0].path)}}].concat(e.paths):t.childRoutes=e.paths,i["default"].render(o["default"].createElement(u.Provider,{store:p["default"].getStore()},o["default"].createElement(l.Router,{routes:t,history:h})),m)};var r=e("react"),o=a(r),s=e("react-dom"),i=a(s),u=e("react-redux"),l=e("react-router"),c=e("history/lib/createBrowserHistory"),f=a(c),d=e("../services/store"),p=a(d),m=document.getElementById("page-mount"),h=new f["default"]},{"../services/store":152,"history/lib/createBrowserHistory":44,react:"react","react-dom":"react-dom","react-redux":"react-redux","react-router":"react-router"}],162:[function(e,t,n){"use strict";function a(){return function(e){return 0===$.trim(e).length?gettext("This field is required."):void 0}}function r(e){return function(t){return f.test(t)?void 0:e||gettext("Enter a valid email address.")}}function o(e,t){return function(n){var a="",r=$.trim(n).length;return e>r?(a=t?t(e,r):ngettext("Ensure this value has at least %(limit_value)s character (it has %(show_value)s).","Ensure this value has at least %(limit_value)s characters (it has %(show_value)s).",e),interpolate(a,{limit_value:e,show_value:r},!0)):void 0}}function s(e,t){return function(n){var a="",r=$.trim(n).length;return r>e?(a=t?t(e,r):ngettext("Ensure this value has at most %(limit_value)s character (it has %(show_value)s).","Ensure this value has at most %(limit_value)s characters (it has %(show_value)s).",e),interpolate(a,{limit_value:e,show_value:r},!0)):void 0}}function i(e){var t=function(e){return ngettext("Username must be at least %(limit_value)s character long.","Username must be at least %(limit_value)s characters long.",e)};return this.minLength(e.username_length_min,t)}function u(e){var t=function(e){return ngettext("Username cannot be longer than %(limit_value)s character.","Username cannot be longer than %(limit_value)s characters.",e)};return this.maxLength(e.username_length_max,t)}function l(){return function(e){return d.test($.trim(e))?void 0:gettext("Username can only contain latin alphabet letters and digits.")}}function c(e){var t=function(e){return ngettext("Valid password must be at least %(limit_value)s character long.","Valid password must be at least %(limit_value)s characters long.",e)};return this.minLength(e.password_length_min,t)}Object.defineProperty(n,"__esModule",{value:!0}),n.required=a,n.email=r,n.minLength=o,n.maxLength=s,n.usernameMinLength=i,n.usernameMaxLength=u,n.usernameContent=l,n.passwordMinLength=c;var f=/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i,d=new RegExp("^[0-9a-z]+$","i")},{}]},{},[2,3,4,5,18,19,20,21,22,23,24,32,33,34,35,6,7,8,9,10,11,12,13,14,15,16,17,25,26,27,28,29,30,31]);
-//# sourceMappingURL=misago.js.map
+(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+// shim for using process in browser
+
+var process = module.exports = {};
+var queue = [];
+var draining = false;
+var currentQueue;
+var queueIndex = -1;
+
+function cleanUpNextTick() {
+    draining = false;
+    if (currentQueue.length) {
+        queue = currentQueue.concat(queue);
+    } else {
+        queueIndex = -1;
+    }
+    if (queue.length) {
+        drainQueue();
+    }
+}
+
+function drainQueue() {
+    if (draining) {
+        return;
+    }
+    var timeout = setTimeout(cleanUpNextTick);
+    draining = true;
+
+    var len = queue.length;
+    while(len) {
+        currentQueue = queue;
+        queue = [];
+        while (++queueIndex < len) {
+            if (currentQueue) {
+                currentQueue[queueIndex].run();
+            }
+        }
+        queueIndex = -1;
+        len = queue.length;
+    }
+    currentQueue = null;
+    draining = false;
+    clearTimeout(timeout);
+}
+
+process.nextTick = function (fun) {
+    var args = new Array(arguments.length - 1);
+    if (arguments.length > 1) {
+        for (var i = 1; i < arguments.length; i++) {
+            args[i - 1] = arguments[i];
+        }
+    }
+    queue.push(new Item(fun, args));
+    if (queue.length === 1 && !draining) {
+        setTimeout(drainQueue, 0);
+    }
+};
+
+// v8 likes predictible objects
+function Item(fun, array) {
+    this.fun = fun;
+    this.array = array;
+}
+Item.prototype.run = function () {
+    this.fun.apply(null, this.array);
+};
+process.title = 'browser';
+process.browser = true;
+process.env = {};
+process.argv = [];
+process.version = ''; // empty string to avoid regexp issues
+process.versions = {};
+
+function noop() {}
+
+process.on = noop;
+process.addListener = noop;
+process.once = noop;
+process.off = noop;
+process.removeListener = noop;
+process.removeAllListeners = noop;
+process.emit = noop;
+
+process.binding = function (name) {
+    throw new Error('process.binding is not supported');
+};
+
+process.cwd = function () { return '/' };
+process.chdir = function (dir) {
+    throw new Error('process.chdir is not supported');
+};
+process.umask = function() { return 0; };
+
+},{}],2:[function(require,module,exports){
+(function (global){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Misago = undefined;
+
+var _orderedList = require('../../../../documents/misago/frontend/src/utils/ordered-list');
+
+var _orderedList2 = _interopRequireDefault(_orderedList);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Misago = exports.Misago = function () {
+  function Misago() {
+    _classCallCheck(this, Misago);
+
+    this._initializers = [];
+    this._context = {};
+  }
+
+  _createClass(Misago, [{
+    key: 'addInitializer',
+    value: function addInitializer(initializer) {
+      this._initializers.push({
+        key: initializer.name,
+
+        item: initializer.initializer,
+
+        after: initializer.after,
+        before: initializer.before
+      });
+    }
+  }, {
+    key: 'init',
+    value: function init(context) {
+      var _this = this;
+
+      this._context = context;
+
+      var initOrder = new _orderedList2.default(this._initializers).orderedValues();
+      initOrder.forEach(function (initializer) {
+        initializer(_this);
+      });
+    }
+
+    // context accessors
+
+  }, {
+    key: 'has',
+    value: function has(key) {
+      return !!this._context[key];
+    }
+  }, {
+    key: 'get',
+    value: function get(key, fallback) {
+      if (this.has(key)) {
+        return this._context[key];
+      } else {
+        return fallback || undefined;
+      }
+    }
+  }, {
+    key: 'pop',
+    value: function pop(key) {
+      if (this.has(key)) {
+        var value = this._context[key];
+        this._context[key] = null;
+        return value;
+      } else {
+        return undefined;
+      }
+    }
+  }]);
+
+  return Misago;
+}();
+
+// create  singleton
+
+var misago = new Misago();
+
+// expose it globally
+global.misago = misago;
+
+// and export it for tests and stuff
+exports.default = misago;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"../../../../documents/misago/frontend/src/utils/ordered-list":159}],3:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _ajax = require('../../../../../documents/misago/frontend/src/services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _ajax2.default.init(_index2.default.get('CSRF_COOKIE_NAME'));
+}
+
+_index2.default.addInitializer({
+  name: 'ajax',
+  initializer: initializer
+});
+
+},{"../../../../../documents/misago/frontend/src/index":136,"../../../../../documents/misago/frontend/src/services/ajax":143}],4:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _auth = require('../../../../../documents/misago/frontend/src/services/auth');
+
+var _auth2 = _interopRequireDefault(_auth);
+
+var _modal = require('../../../../../documents/misago/frontend/src/services/modal');
+
+var _modal2 = _interopRequireDefault(_modal);
+
+var _store = require('../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+var _localStorage = require('../../../../../documents/misago/frontend/src/services/local-storage');
+
+var _localStorage2 = _interopRequireDefault(_localStorage);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _auth2.default.init(_store2.default, _localStorage2.default, _modal2.default);
+}
+
+_index2.default.addInitializer({
+  name: 'auth',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../documents/misago/frontend/src/index":136,"../../../../../documents/misago/frontend/src/services/auth":144,"../../../../../documents/misago/frontend/src/services/local-storage":147,"../../../../../documents/misago/frontend/src/services/modal":149,"../../../../../documents/misago/frontend/src/services/store":153}],5:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _ajax = require('../../../../../documents/misago/frontend/src/services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _captcha = require('../../../../../documents/misago/frontend/src/services/captcha');
+
+var _captcha2 = _interopRequireDefault(_captcha);
+
+var _include = require('../../../../../documents/misago/frontend/src/services/include');
+
+var _include2 = _interopRequireDefault(_include);
+
+var _snackbar = require('../../../../../documents/misago/frontend/src/services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer(context) {
+  _captcha2.default.init(context, _ajax2.default, _include2.default, _snackbar2.default);
+}
+
+_index2.default.addInitializer({
+  name: 'captcha',
+  initializer: initializer
+});
+
+},{"../../../../../documents/misago/frontend/src/index":136,"../../../../../documents/misago/frontend/src/services/ajax":143,"../../../../../documents/misago/frontend/src/services/captcha":145,"../../../../../documents/misago/frontend/src/services/include":146,"../../../../../documents/misago/frontend/src/services/snackbar":152}],6:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _reactRedux = require('react-redux');
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _authMessage = require('../../../../../../documents/misago/frontend/src/components/auth-message');
+
+var _authMessage2 = _interopRequireDefault(_authMessage);
+
+var _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');
+
+var _mountComponent2 = _interopRequireDefault(_mountComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  (0, _mountComponent2.default)((0, _reactRedux.connect)(_authMessage.select)(_authMessage2.default), 'auth-message-mount');
+}
+
+_index2.default.addInitializer({
+  name: 'component:auth-message',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/auth-message":54,"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/utils/mount-component":158,"react-redux":"react-redux"}],7:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _bannedPage = require('../../../../../../documents/misago/frontend/src/utils/banned-page');
+
+var _bannedPage2 = _interopRequireDefault(_bannedPage);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer(context) {
+  if (context.has('BAN_MESSAGE')) {
+    (0, _bannedPage2.default)(context.get('BAN_MESSAGE'), false);
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'component:baned-page',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/utils/banned-page":155}],8:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _reactRedux = require('react-redux');
+
+var _root = require('../../../../../../documents/misago/frontend/src/components/categories/root');
+
+var _root2 = _interopRequireDefault(_root);
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');
+
+var _mountComponent2 = _interopRequireDefault(_mountComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  if (document.getElementById('categories-mount')) {
+    (0, _mountComponent2.default)((0, _reactRedux.connect)(_root.select)(_root2.default), 'categories-mount');
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'component:reset-password-form',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/categories/root":61,"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/utils/mount-component":158,"react-redux":"react-redux"}],9:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _root = require('../../../../../../documents/misago/frontend/src/components/options/root');
+
+var _root2 = _interopRequireDefault(_root);
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _routedComponent = require('../../../../../../documents/misago/frontend/src/utils/routed-component');
+
+var _routedComponent2 = _interopRequireDefault(_routedComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer(context) {
+  if (context.has('USER_OPTIONS')) {
+    (0, _routedComponent2.default)({
+      root: _index2.default.get('USERCP_URL'),
+      component: _root2.default,
+      paths: (0, _root.paths)()
+    });
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'component:options',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/options/root":81,"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/utils/routed-component":162}],10:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _reactRedux = require('react-redux');
+
+var _root = require('../../../../../../documents/misago/frontend/src/components/profile/root');
+
+var _root2 = _interopRequireDefault(_root);
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _routedComponent = require('../../../../../../documents/misago/frontend/src/utils/routed-component');
+
+var _routedComponent2 = _interopRequireDefault(_routedComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer(context) {
+  if (context.has('PROFILE') && context.has('PROFILE_PAGES')) {
+    (0, _routedComponent2.default)({
+      root: _index2.default.get('PROFILE').absolute_url,
+      component: (0, _reactRedux.connect)(_root.select)(_root2.default),
+      paths: (0, _root.paths)()
+    });
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'component:profile',
+  initializer: initializer,
+  after: 'reducer:profile-dehydrate'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/profile/root":98,"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/utils/routed-component":162,"react-redux":"react-redux"}],11:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _requestActivationLink = require('../../../../../../documents/misago/frontend/src/components/request-activation-link');
+
+var _requestActivationLink2 = _interopRequireDefault(_requestActivationLink);
+
+var _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');
+
+var _mountComponent2 = _interopRequireDefault(_mountComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  if (document.getElementById('request-activation-link-mount')) {
+    (0, _mountComponent2.default)(_requestActivationLink2.default, 'request-activation-link-mount', false);
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'component:request-activation-link',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/request-activation-link":102,"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/utils/mount-component":158}],12:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _requestPasswordReset = require('../../../../../../documents/misago/frontend/src/components/request-password-reset');
+
+var _requestPasswordReset2 = _interopRequireDefault(_requestPasswordReset);
+
+var _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');
+
+var _mountComponent2 = _interopRequireDefault(_mountComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  if (document.getElementById('request-password-reset-mount')) {
+    (0, _mountComponent2.default)(_requestPasswordReset2.default, 'request-password-reset-mount', false);
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'component:request-password-reset',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/request-password-reset":103,"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/utils/mount-component":158}],13:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _resetPasswordForm = require('../../../../../../documents/misago/frontend/src/components/reset-password-form');
+
+var _resetPasswordForm2 = _interopRequireDefault(_resetPasswordForm);
+
+var _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');
+
+var _mountComponent2 = _interopRequireDefault(_mountComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  if (document.getElementById('reset-password-form-mount')) {
+    (0, _mountComponent2.default)(_resetPasswordForm2.default, 'reset-password-form-mount', false);
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'component:reset-password-form',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/reset-password-form":104,"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/utils/mount-component":158}],14:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _reactRedux = require('react-redux');
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _snackbar = require('../../../../../../documents/misago/frontend/src/components/snackbar');
+
+var _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');
+
+var _mountComponent2 = _interopRequireDefault(_mountComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  (0, _mountComponent2.default)((0, _reactRedux.connect)(_snackbar.select)(_snackbar.Snackbar), 'snackbar-mount');
+}
+
+_index2.default.addInitializer({
+  name: 'component:snackbar',
+  initializer: initializer,
+  after: 'snackbar'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/snackbar":108,"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/utils/mount-component":158,"react-redux":"react-redux"}],15:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _root = require('../../../../../../documents/misago/frontend/src/components/threads/root');
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _routedComponent = require('../../../../../../documents/misago/frontend/src/utils/routed-component');
+
+var _routedComponent2 = _interopRequireDefault(_routedComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer(context) {
+  if (context.has('THREADS') && context.has('CATEGORIES')) {
+    (0, _routedComponent2.default)({
+      paths: (0, _root.paths)()
+    });
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'component:threads',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/threads/root":112,"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/utils/routed-component":162}],16:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _reactRedux = require('react-redux');
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _root = require('../../../../../../documents/misago/frontend/src/components/user-menu/root');
+
+var _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');
+
+var _mountComponent2 = _interopRequireDefault(_mountComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  (0, _mountComponent2.default)((0, _reactRedux.connect)(_root.select)(_root.UserMenu), 'user-menu-mount');
+  (0, _mountComponent2.default)((0, _reactRedux.connect)(_root.select)(_root.CompactUserMenu), 'user-menu-compact-mount');
+}
+
+_index2.default.addInitializer({
+  name: 'component:user-menu',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/user-menu/root":116,"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/utils/mount-component":158,"react-redux":"react-redux"}],17:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _root = require('../../../../../../documents/misago/frontend/src/components/users/root');
+
+var _root2 = _interopRequireDefault(_root);
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _routedComponent = require('../../../../../../documents/misago/frontend/src/utils/routed-component');
+
+var _routedComponent2 = _interopRequireDefault(_routedComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer(context) {
+  if (context.has('USERS_LISTS')) {
+    (0, _routedComponent2.default)({
+      root: _index2.default.get('USERS_LIST_URL'),
+      component: _root2.default,
+      paths: (0, _root.paths)()
+    });
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'component:users',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/components/users/root":133,"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/utils/routed-component":162}],18:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _include = require('../../../../../documents/misago/frontend/src/services/include');
+
+var _include2 = _interopRequireDefault(_include);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer(context) {
+  _include2.default.init(context.get('STATIC_URL'));
+}
+
+_index2.default.addInitializer({
+  name: 'include',
+  initializer: initializer
+});
+
+},{"../../../../../documents/misago/frontend/src/index":136,"../../../../../documents/misago/frontend/src/services/include":146}],19:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _localStorage = require('../../../../../documents/misago/frontend/src/services/local-storage');
+
+var _localStorage2 = _interopRequireDefault(_localStorage);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _localStorage2.default.init('misago_');
+}
+
+_index2.default.addInitializer({
+  name: 'local-storage',
+  initializer: initializer
+});
+
+},{"../../../../../documents/misago/frontend/src/index":136,"../../../../../documents/misago/frontend/src/services/local-storage":147}],20:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _mobileNavbarDropdown = require('../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown');
+
+var _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  var element = document.getElementById('mobile-navbar-dropdown-mount');
+  if (element) {
+    _mobileNavbarDropdown2.default.init(element);
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'dropdown',
+  initializer: initializer,
+  before: 'store'
+});
+
+},{"../../../../../documents/misago/frontend/src/index":136,"../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown":148}],21:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _modal = require('../../../../../documents/misago/frontend/src/services/modal');
+
+var _modal2 = _interopRequireDefault(_modal);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  var element = document.getElementById('modal-mount');
+  if (element) {
+    _modal2.default.init(element);
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'modal',
+  initializer: initializer,
+  before: 'store'
+});
+
+},{"../../../../../documents/misago/frontend/src/index":136,"../../../../../documents/misago/frontend/src/services/modal":149}],22:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _moment = require('moment');
+
+var _moment2 = _interopRequireDefault(_moment);
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _moment2.default.locale($('html').attr('lang'));
+}
+
+_index2.default.addInitializer({
+  name: 'moment',
+  initializer: initializer
+});
+
+},{"../../../../../documents/misago/frontend/src/index":136,"moment":"moment"}],23:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _pageTitle = require('../../../../../documents/misago/frontend/src/services/page-title');
+
+var _pageTitle2 = _interopRequireDefault(_pageTitle);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer(context) {
+  _pageTitle2.default.init(context.get('SETTINGS').forum_index_title, context.get('SETTINGS').forum_name);
+}
+
+_index2.default.addInitializer({
+  name: 'page-title',
+  initializer: initializer
+});
+
+},{"../../../../../documents/misago/frontend/src/index":136,"../../../../../documents/misago/frontend/src/services/page-title":150}],24:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _ajax = require('../../../../../documents/misago/frontend/src/services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../../../../documents/misago/frontend/src/services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _polls = require('../../../../../documents/misago/frontend/src/services/polls');
+
+var _polls2 = _interopRequireDefault(_polls);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _polls2.default.init(_ajax2.default, _snackbar2.default);
+}
+
+_index2.default.addInitializer({
+  name: 'polls',
+  initializer: initializer
+});
+
+},{"../../../../../documents/misago/frontend/src/index":136,"../../../../../documents/misago/frontend/src/services/ajax":143,"../../../../../documents/misago/frontend/src/services/polls":151,"../../../../../documents/misago/frontend/src/services/snackbar":152}],25:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _auth = require('../../../../../../documents/misago/frontend/src/reducers/auth');
+
+var _auth2 = _interopRequireDefault(_auth);
+
+var _store = require('../../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer(context) {
+  _store2.default.addReducer('auth', _auth2.default, Object.assign({
+    'isAuthenticated': context.get('isAuthenticated'),
+    'isAnonymous': !context.get('isAuthenticated'),
+
+    'user': context.get('user')
+  }, _auth.initialState));
+}
+
+_index2.default.addInitializer({
+  name: 'reducer:auth',
+  initializer: initializer,
+  before: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/reducers/auth":137,"../../../../../../documents/misago/frontend/src/services/store":153}],26:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _profile = require('../../../../../../documents/misago/frontend/src/reducers/profile');
+
+var _store = require('../../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  if (_index2.default.has('PROFILE')) {
+    _store2.default.dispatch((0, _profile.dehydrate)(_index2.default.get('PROFILE')));
+  }
+}
+
+_index2.default.addInitializer({
+  name: 'reducer:profile-dehydrate',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/reducers/profile":138,"../../../../../../documents/misago/frontend/src/services/store":153}],27:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _profile = require('../../../../../../documents/misago/frontend/src/reducers/profile');
+
+var _profile2 = _interopRequireDefault(_profile);
+
+var _store = require('../../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _store2.default.addReducer('profile', _profile2.default, {});
+}
+
+_index2.default.addInitializer({
+  name: 'reducer:profile',
+  initializer: initializer,
+  before: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/reducers/profile":138,"../../../../../../documents/misago/frontend/src/services/store":153}],28:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _snackbar = require('../../../../../../documents/misago/frontend/src/reducers/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _store = require('../../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _store2.default.addReducer('snackbar', _snackbar2.default, _snackbar.initialState);
+}
+
+_index2.default.addInitializer({
+  name: 'reducer:snackbar',
+  initializer: initializer,
+  before: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/reducers/snackbar":139,"../../../../../../documents/misago/frontend/src/services/store":153}],29:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _tick = require('../../../../../../documents/misago/frontend/src/reducers/tick');
+
+var _tick2 = _interopRequireDefault(_tick);
+
+var _store = require('../../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _store2.default.addReducer('tick', _tick2.default, _tick.initialState);
+}
+
+_index2.default.addInitializer({
+  name: 'reducer:tick',
+  initializer: initializer,
+  before: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/reducers/tick":140,"../../../../../../documents/misago/frontend/src/services/store":153}],30:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _usernameHistory = require('../../../../../../documents/misago/frontend/src/reducers/username-history');
+
+var _usernameHistory2 = _interopRequireDefault(_usernameHistory);
+
+var _store = require('../../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _store2.default.addReducer('username-history', _usernameHistory2.default, []);
+}
+
+_index2.default.addInitializer({
+  name: 'reducer:username-history',
+  initializer: initializer,
+  before: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/reducers/username-history":141,"../../../../../../documents/misago/frontend/src/services/store":153}],31:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _users = require('../../../../../../documents/misago/frontend/src/reducers/users');
+
+var _users2 = _interopRequireDefault(_users);
+
+var _store = require('../../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _store2.default.addReducer('users', _users2.default, []);
+}
+
+_index2.default.addInitializer({
+  name: 'reducer:users',
+  initializer: initializer,
+  before: 'store'
+});
+
+},{"../../../../../../documents/misago/frontend/src/index":136,"../../../../../../documents/misago/frontend/src/reducers/users":142,"../../../../../../documents/misago/frontend/src/services/store":153}],32:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _snackbar = require('../../../../../documents/misago/frontend/src/services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _store = require('../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _snackbar2.default.init(_store2.default);
+}
+
+_index2.default.addInitializer({
+  name: 'snackbar',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../documents/misago/frontend/src/index":136,"../../../../../documents/misago/frontend/src/services/snackbar":152,"../../../../../documents/misago/frontend/src/services/store":153}],33:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _store = require('../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _store2.default.init();
+}
+
+_index2.default.addInitializer({
+  name: 'store',
+  initializer: initializer,
+  before: '_end'
+});
+
+},{"../../../../../documents/misago/frontend/src/index":136,"../../../../../documents/misago/frontend/src/services/store":153}],34:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _tick = require('../../../../../documents/misago/frontend/src/reducers/tick');
+
+var _store = require('../../../../../documents/misago/frontend/src/services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var TICK_PERIOD = 50 * 1000; //do the tick every 50s
+
+function initializer() {
+  window.setInterval(function () {
+    _store2.default.dispatch((0, _tick.doTick)());
+  }, TICK_PERIOD);
+}
+
+_index2.default.addInitializer({
+  name: 'tick-start',
+  initializer: initializer,
+  after: 'store'
+});
+
+},{"../../../../../documents/misago/frontend/src/index":136,"../../../../../documents/misago/frontend/src/reducers/tick":140,"../../../../../documents/misago/frontend/src/services/store":153}],35:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.default = initializer;
+
+var _index = require('../../../../../documents/misago/frontend/src/index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _include = require('../../../../../documents/misago/frontend/src/services/include');
+
+var _include2 = _interopRequireDefault(_include);
+
+var _zxcvbn = require('../../../../../documents/misago/frontend/src/services/zxcvbn');
+
+var _zxcvbn2 = _interopRequireDefault(_zxcvbn);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function initializer() {
+  _zxcvbn2.default.init(_include2.default);
+}
+
+_index2.default.addInitializer({
+  name: 'zxcvbn',
+  initializer: initializer
+});
+
+},{"../../../../../documents/misago/frontend/src/index":136,"../../../../../documents/misago/frontend/src/services/include":146,"../../../../../documents/misago/frontend/src/services/zxcvbn":154}],36:[function(require,module,exports){
+var pSlice = Array.prototype.slice;
+var objectKeys = require('./lib/keys.js');
+var isArguments = require('./lib/is_arguments.js');
+
+var deepEqual = module.exports = function (actual, expected, opts) {
+  if (!opts) opts = {};
+  // 7.1. All identical values are equivalent, as determined by ===.
+  if (actual === expected) {
+    return true;
+
+  } else if (actual instanceof Date && expected instanceof Date) {
+    return actual.getTime() === expected.getTime();
+
+  // 7.3. Other pairs that do not both pass typeof value == 'object',
+  // equivalence is determined by ==.
+  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {
+    return opts.strict ? actual === expected : actual == expected;
+
+  // 7.4. For all other Object pairs, including Array objects, equivalence is
+  // determined by having the same number of owned properties (as verified
+  // with Object.prototype.hasOwnProperty.call), the same set of keys
+  // (although not necessarily the same order), equivalent values for every
+  // corresponding key, and an identical 'prototype' property. Note: this
+  // accounts for both named and indexed properties on Arrays.
+  } else {
+    return objEquiv(actual, expected, opts);
+  }
+}
+
+function isUndefinedOrNull(value) {
+  return value === null || value === undefined;
+}
+
+function isBuffer (x) {
+  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;
+  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {
+    return false;
+  }
+  if (x.length > 0 && typeof x[0] !== 'number') return false;
+  return true;
+}
+
+function objEquiv(a, b, opts) {
+  var i, key;
+  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
+    return false;
+  // an identical 'prototype' property.
+  if (a.prototype !== b.prototype) return false;
+  //~~~I've managed to break Object.keys through screwy arguments passing.
+  //   Converting to array solves the problem.
+  if (isArguments(a)) {
+    if (!isArguments(b)) {
+      return false;
+    }
+    a = pSlice.call(a);
+    b = pSlice.call(b);
+    return deepEqual(a, b, opts);
+  }
+  if (isBuffer(a)) {
+    if (!isBuffer(b)) {
+      return false;
+    }
+    if (a.length !== b.length) return false;
+    for (i = 0; i < a.length; i++) {
+      if (a[i] !== b[i]) return false;
+    }
+    return true;
+  }
+  try {
+    var ka = objectKeys(a),
+        kb = objectKeys(b);
+  } catch (e) {//happens when one is a string literal and the other isn't
+    return false;
+  }
+  // having the same number of owned properties (keys incorporates
+  // hasOwnProperty)
+  if (ka.length != kb.length)
+    return false;
+  //the same set of keys (although not necessarily the same order),
+  ka.sort();
+  kb.sort();
+  //~~~cheap key test
+  for (i = ka.length - 1; i >= 0; i--) {
+    if (ka[i] != kb[i])
+      return false;
+  }
+  //equivalent values for every corresponding key, and
+  //~~~possibly expensive deep test
+  for (i = ka.length - 1; i >= 0; i--) {
+    key = ka[i];
+    if (!deepEqual(a[key], b[key], opts)) return false;
+  }
+  return typeof a === typeof b;
+}
+
+},{"./lib/is_arguments.js":37,"./lib/keys.js":38}],37:[function(require,module,exports){
+var supportsArgumentsClass = (function(){
+  return Object.prototype.toString.call(arguments)
+})() == '[object Arguments]';
+
+exports = module.exports = supportsArgumentsClass ? supported : unsupported;
+
+exports.supported = supported;
+function supported(object) {
+  return Object.prototype.toString.call(object) == '[object Arguments]';
+};
+
+exports.unsupported = unsupported;
+function unsupported(object){
+  return object &&
+    typeof object == 'object' &&
+    typeof object.length == 'number' &&
+    Object.prototype.hasOwnProperty.call(object, 'callee') &&
+    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||
+    false;
+};
+
+},{}],38:[function(require,module,exports){
+exports = module.exports = typeof Object.keys === 'function'
+  ? Object.keys : shim;
+
+exports.shim = shim;
+function shim (obj) {
+  var keys = [];
+  for (var key in obj) keys.push(key);
+  return keys;
+}
+
+},{}],39:[function(require,module,exports){
+/**
+ * Indicates that navigation was caused by a call to history.push.
+ */
+'use strict';
+
+exports.__esModule = true;
+var PUSH = 'PUSH';
+
+exports.PUSH = PUSH;
+/**
+ * Indicates that navigation was caused by a call to history.replace.
+ */
+var REPLACE = 'REPLACE';
+
+exports.REPLACE = REPLACE;
+/**
+ * Indicates that navigation was caused by some other action such
+ * as using a browser's back/forward buttons and/or manually manipulating
+ * the URL in a browser's location bar. This is the default.
+ *
+ * See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate
+ * for more information.
+ */
+var POP = 'POP';
+
+exports.POP = POP;
+exports['default'] = {
+  PUSH: PUSH,
+  REPLACE: REPLACE,
+  POP: POP
+};
+},{}],40:[function(require,module,exports){
+"use strict";
+
+exports.__esModule = true;
+exports.loopAsync = loopAsync;
+
+function loopAsync(turns, work, callback) {
+  var currentTurn = 0;
+  var isDone = false;
+
+  function done() {
+    isDone = true;
+    callback.apply(this, arguments);
+  }
+
+  function next() {
+    if (isDone) return;
+
+    if (currentTurn < turns) {
+      work.call(this, currentTurn++, next, done);
+    } else {
+      done.apply(this, arguments);
+    }
+  }
+
+  next();
+}
+},{}],41:[function(require,module,exports){
+(function (process){
+/*eslint-disable no-empty */
+'use strict';
+
+exports.__esModule = true;
+exports.saveState = saveState;
+exports.readState = readState;
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var _warning = require('warning');
+
+var _warning2 = _interopRequireDefault(_warning);
+
+var KeyPrefix = '@@History/';
+var QuotaExceededError = 'QuotaExceededError';
+var SecurityError = 'SecurityError';
+
+function createKey(key) {
+  return KeyPrefix + key;
+}
+
+function saveState(key, state) {
+  try {
+    window.sessionStorage.setItem(createKey(key), JSON.stringify(state));
+  } catch (error) {
+    if (error.name === SecurityError) {
+      // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any
+      // attempt to access window.sessionStorage.
+      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available due to security settings') : undefined;
+
+      return;
+    }
+
+    if (error.name === QuotaExceededError && window.sessionStorage.length === 0) {
+      // Safari "private mode" throws QuotaExceededError.
+      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available in Safari private mode') : undefined;
+
+      return;
+    }
+
+    throw error;
+  }
+}
+
+function readState(key) {
+  var json = undefined;
+  try {
+    json = window.sessionStorage.getItem(createKey(key));
+  } catch (error) {
+    if (error.name === SecurityError) {
+      // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any
+      // attempt to access window.sessionStorage.
+      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to read state; sessionStorage is not available due to security settings') : undefined;
+
+      return null;
+    }
+  }
+
+  if (json) {
+    try {
+      return JSON.parse(json);
+    } catch (error) {
+      // Ignore invalid JSON.
+    }
+  }
+
+  return null;
+}
+}).call(this,require('_process'))
+
+},{"_process":1,"warning":53}],42:[function(require,module,exports){
+'use strict';
+
+exports.__esModule = true;
+exports.addEventListener = addEventListener;
+exports.removeEventListener = removeEventListener;
+exports.getHashPath = getHashPath;
+exports.replaceHashPath = replaceHashPath;
+exports.getWindowPath = getWindowPath;
+exports.go = go;
+exports.getUserConfirmation = getUserConfirmation;
+exports.supportsHistory = supportsHistory;
+exports.supportsGoWithoutReloadUsingHash = supportsGoWithoutReloadUsingHash;
+
+function addEventListener(node, event, listener) {
+  if (node.addEventListener) {
+    node.addEventListener(event, listener, false);
+  } else {
+    node.attachEvent('on' + event, listener);
+  }
+}
+
+function removeEventListener(node, event, listener) {
+  if (node.removeEventListener) {
+    node.removeEventListener(event, listener, false);
+  } else {
+    node.detachEvent('on' + event, listener);
+  }
+}
+
+function getHashPath() {
+  // We can't use window.location.hash here because it's not
+  // consistent across browsers - Firefox will pre-decode it!
+  return window.location.href.split('#')[1] || '';
+}
+
+function replaceHashPath(path) {
+  window.location.replace(window.location.pathname + window.location.search + '#' + path);
+}
+
+function getWindowPath() {
+  return window.location.pathname + window.location.search + window.location.hash;
+}
+
+function go(n) {
+  if (n) window.history.go(n);
+}
+
+function getUserConfirmation(message, callback) {
+  callback(window.confirm(message));
+}
+
+/**
+ * Returns true if the HTML5 history API is supported. Taken from Modernizr.
+ *
+ * https://github.com/Modernizr/Modernizr/blob/master/LICENSE
+ * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js
+ * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586
+ */
+
+function supportsHistory() {
+  var ua = navigator.userAgent;
+  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) {
+    return false;
+  }
+  // FIXME: Work around our browser history not working correctly on Chrome
+  // iOS: https://github.com/rackt/react-router/issues/2565
+  if (ua.indexOf('CriOS') !== -1) {
+    return false;
+  }
+  return window.history && 'pushState' in window.history;
+}
+
+/**
+ * Returns false if using go(n) with hash history causes a full page reload.
+ */
+
+function supportsGoWithoutReloadUsingHash() {
+  var ua = navigator.userAgent;
+  return ua.indexOf('Firefox') === -1;
+}
+},{}],43:[function(require,module,exports){
+'use strict';
+
+exports.__esModule = true;
+var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);
+exports.canUseDOM = canUseDOM;
+},{}],44:[function(require,module,exports){
+(function (process){
+'use strict';
+
+exports.__esModule = true;
+
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var _invariant = require('invariant');
+
+var _invariant2 = _interopRequireDefault(_invariant);
+
+var _Actions = require('./Actions');
+
+var _ExecutionEnvironment = require('./ExecutionEnvironment');
+
+var _DOMUtils = require('./DOMUtils');
+
+var _DOMStateStorage = require('./DOMStateStorage');
+
+var _createDOMHistory = require('./createDOMHistory');
+
+var _createDOMHistory2 = _interopRequireDefault(_createDOMHistory);
+
+var _parsePath = require('./parsePath');
+
+var _parsePath2 = _interopRequireDefault(_parsePath);
+
+/**
+ * Creates and returns a history object that uses HTML5's history API
+ * (pushState, replaceState, and the popstate event) to manage history.
+ * This is the recommended method of managing history in browsers because
+ * it provides the cleanest URLs.
+ *
+ * Note: In browsers that do not support the HTML5 history API full
+ * page reloads will be used to preserve URLs.
+ */
+function createBrowserHistory() {
+  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+
+  !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Browser history needs a DOM') : _invariant2['default'](false) : undefined;
+
+  var forceRefresh = options.forceRefresh;
+
+  var isSupported = _DOMUtils.supportsHistory();
+  var useRefresh = !isSupported || forceRefresh;
+
+  function getCurrentLocation(historyState) {
+    historyState = historyState || window.history.state || {};
+
+    var path = _DOMUtils.getWindowPath();
+    var _historyState = historyState;
+    var key = _historyState.key;
+
+    var state = undefined;
+    if (key) {
+      state = _DOMStateStorage.readState(key);
+    } else {
+      state = null;
+      key = history.createKey();
+
+      if (isSupported) window.history.replaceState(_extends({}, historyState, { key: key }), null, path);
+    }
+
+    var location = _parsePath2['default'](path);
+
+    return history.createLocation(_extends({}, location, { state: state }), undefined, key);
+  }
+
+  function startPopStateListener(_ref) {
+    var transitionTo = _ref.transitionTo;
+
+    function popStateListener(event) {
+      if (event.state === undefined) return; // Ignore extraneous popstate events in WebKit.
+
+      transitionTo(getCurrentLocation(event.state));
+    }
+
+    _DOMUtils.addEventListener(window, 'popstate', popStateListener);
+
+    return function () {
+      _DOMUtils.removeEventListener(window, 'popstate', popStateListener);
+    };
+  }
+
+  function finishTransition(location) {
+    var basename = location.basename;
+    var pathname = location.pathname;
+    var search = location.search;
+    var hash = location.hash;
+    var state = location.state;
+    var action = location.action;
+    var key = location.key;
+
+    if (action === _Actions.POP) return; // Nothing to do.
+
+    _DOMStateStorage.saveState(key, state);
+
+    var path = (basename || '') + pathname + search + hash;
+    var historyState = {
+      key: key
+    };
+
+    if (action === _Actions.PUSH) {
+      if (useRefresh) {
+        window.location.href = path;
+        return false; // Prevent location update.
+      } else {
+          window.history.pushState(historyState, null, path);
+        }
+    } else {
+      // REPLACE
+      if (useRefresh) {
+        window.location.replace(path);
+        return false; // Prevent location update.
+      } else {
+          window.history.replaceState(historyState, null, path);
+        }
+    }
+  }
+
+  var history = _createDOMHistory2['default'](_extends({}, options, {
+    getCurrentLocation: getCurrentLocation,
+    finishTransition: finishTransition,
+    saveState: _DOMStateStorage.saveState
+  }));
+
+  var listenerCount = 0,
+      stopPopStateListener = undefined;
+
+  function listenBefore(listener) {
+    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);
+
+    var unlisten = history.listenBefore(listener);
+
+    return function () {
+      unlisten();
+
+      if (--listenerCount === 0) stopPopStateListener();
+    };
+  }
+
+  function listen(listener) {
+    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);
+
+    var unlisten = history.listen(listener);
+
+    return function () {
+      unlisten();
+
+      if (--listenerCount === 0) stopPopStateListener();
+    };
+  }
+
+  // deprecated
+  function registerTransitionHook(hook) {
+    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);
+
+    history.registerTransitionHook(hook);
+  }
+
+  // deprecated
+  function unregisterTransitionHook(hook) {
+    history.unregisterTransitionHook(hook);
+
+    if (--listenerCount === 0) stopPopStateListener();
+  }
+
+  return _extends({}, history, {
+    listenBefore: listenBefore,
+    listen: listen,
+    registerTransitionHook: registerTransitionHook,
+    unregisterTransitionHook: unregisterTransitionHook
+  });
+}
+
+exports['default'] = createBrowserHistory;
+module.exports = exports['default'];
+}).call(this,require('_process'))
+
+},{"./Actions":39,"./DOMStateStorage":41,"./DOMUtils":42,"./ExecutionEnvironment":43,"./createDOMHistory":45,"./parsePath":50,"_process":1,"invariant":52}],45:[function(require,module,exports){
+(function (process){
+'use strict';
+
+exports.__esModule = true;
+
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var _invariant = require('invariant');
+
+var _invariant2 = _interopRequireDefault(_invariant);
+
+var _ExecutionEnvironment = require('./ExecutionEnvironment');
+
+var _DOMUtils = require('./DOMUtils');
+
+var _createHistory = require('./createHistory');
+
+var _createHistory2 = _interopRequireDefault(_createHistory);
+
+function createDOMHistory(options) {
+  var history = _createHistory2['default'](_extends({
+    getUserConfirmation: _DOMUtils.getUserConfirmation
+  }, options, {
+    go: _DOMUtils.go
+  }));
+
+  function listen(listener) {
+    !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'DOM history needs a DOM') : _invariant2['default'](false) : undefined;
+
+    return history.listen(listener);
+  }
+
+  return _extends({}, history, {
+    listen: listen
+  });
+}
+
+exports['default'] = createDOMHistory;
+module.exports = exports['default'];
+}).call(this,require('_process'))
+
+},{"./DOMUtils":42,"./ExecutionEnvironment":43,"./createHistory":46,"_process":1,"invariant":52}],46:[function(require,module,exports){
+//import warning from 'warning'
+'use strict';
+
+exports.__esModule = true;
+
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var _deepEqual = require('deep-equal');
+
+var _deepEqual2 = _interopRequireDefault(_deepEqual);
+
+var _AsyncUtils = require('./AsyncUtils');
+
+var _Actions = require('./Actions');
+
+var _createLocation2 = require('./createLocation');
+
+var _createLocation3 = _interopRequireDefault(_createLocation2);
+
+var _runTransitionHook = require('./runTransitionHook');
+
+var _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);
+
+var _parsePath = require('./parsePath');
+
+var _parsePath2 = _interopRequireDefault(_parsePath);
+
+var _deprecate = require('./deprecate');
+
+var _deprecate2 = _interopRequireDefault(_deprecate);
+
+function createRandomKey(length) {
+  return Math.random().toString(36).substr(2, length);
+}
+
+function locationsAreEqual(a, b) {
+  return a.pathname === b.pathname && a.search === b.search &&
+  //a.action === b.action && // Different action !== location change.
+  a.key === b.key && _deepEqual2['default'](a.state, b.state);
+}
+
+var DefaultKeyLength = 6;
+
+function createHistory() {
+  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+  var getCurrentLocation = options.getCurrentLocation;
+  var finishTransition = options.finishTransition;
+  var saveState = options.saveState;
+  var go = options.go;
+  var keyLength = options.keyLength;
+  var getUserConfirmation = options.getUserConfirmation;
+
+  if (typeof keyLength !== 'number') keyLength = DefaultKeyLength;
+
+  var transitionHooks = [];
+
+  function listenBefore(hook) {
+    transitionHooks.push(hook);
+
+    return function () {
+      transitionHooks = transitionHooks.filter(function (item) {
+        return item !== hook;
+      });
+    };
+  }
+
+  var allKeys = [];
+  var changeListeners = [];
+  var location = undefined;
+
+  function getCurrent() {
+    if (pendingLocation && pendingLocation.action === _Actions.POP) {
+      return allKeys.indexOf(pendingLocation.key);
+    } else if (location) {
+      return allKeys.indexOf(location.key);
+    } else {
+      return -1;
+    }
+  }
+
+  function updateLocation(newLocation) {
+    var current = getCurrent();
+
+    location = newLocation;
+
+    if (location.action === _Actions.PUSH) {
+      allKeys = [].concat(allKeys.slice(0, current + 1), [location.key]);
+    } else if (location.action === _Actions.REPLACE) {
+      allKeys[current] = location.key;
+    }
+
+    changeListeners.forEach(function (listener) {
+      listener(location);
+    });
+  }
+
+  function listen(listener) {
+    changeListeners.push(listener);
+
+    if (location) {
+      listener(location);
+    } else {
+      var _location = getCurrentLocation();
+      allKeys = [_location.key];
+      updateLocation(_location);
+    }
+
+    return function () {
+      changeListeners = changeListeners.filter(function (item) {
+        return item !== listener;
+      });
+    };
+  }
+
+  function confirmTransitionTo(location, callback) {
+    _AsyncUtils.loopAsync(transitionHooks.length, function (index, next, done) {
+      _runTransitionHook2['default'](transitionHooks[index], location, function (result) {
+        if (result != null) {
+          done(result);
+        } else {
+          next();
+        }
+      });
+    }, function (message) {
+      if (getUserConfirmation && typeof message === 'string') {
+        getUserConfirmation(message, function (ok) {
+          callback(ok !== false);
+        });
+      } else {
+        callback(message !== false);
+      }
+    });
+  }
+
+  var pendingLocation = undefined;
+
+  function transitionTo(nextLocation) {
+    if (location && locationsAreEqual(location, nextLocation)) return; // Nothing to do.
+
+    pendingLocation = nextLocation;
+
+    confirmTransitionTo(nextLocation, function (ok) {
+      if (pendingLocation !== nextLocation) return; // Transition was interrupted.
+
+      if (ok) {
+        // treat PUSH to current path like REPLACE to be consistent with browsers
+        if (nextLocation.action === _Actions.PUSH) {
+          var prevPath = createPath(location);
+          var nextPath = createPath(nextLocation);
+
+          if (nextPath === prevPath) nextLocation.action = _Actions.REPLACE;
+        }
+
+        if (finishTransition(nextLocation) !== false) updateLocation(nextLocation);
+      } else if (location && nextLocation.action === _Actions.POP) {
+        var prevIndex = allKeys.indexOf(location.key);
+        var nextIndex = allKeys.indexOf(nextLocation.key);
+
+        if (prevIndex !== -1 && nextIndex !== -1) go(prevIndex - nextIndex); // Restore the URL.
+      }
+    });
+  }
+
+  function push(location) {
+    transitionTo(createLocation(location, _Actions.PUSH, createKey()));
+  }
+
+  function replace(location) {
+    transitionTo(createLocation(location, _Actions.REPLACE, createKey()));
+  }
+
+  function goBack() {
+    go(-1);
+  }
+
+  function goForward() {
+    go(1);
+  }
+
+  function createKey() {
+    return createRandomKey(keyLength);
+  }
+
+  function createPath(location) {
+    if (location == null || typeof location === 'string') return location;
+
+    var pathname = location.pathname;
+    var search = location.search;
+    var hash = location.hash;
+
+    var result = pathname;
+
+    if (search) result += search;
+
+    if (hash) result += hash;
+
+    return result;
+  }
+
+  function createHref(location) {
+    return createPath(location);
+  }
+
+  function createLocation(location, action) {
+    var key = arguments.length <= 2 || arguments[2] === undefined ? createKey() : arguments[2];
+
+    if (typeof action === 'object') {
+      //warning(
+      //  false,
+      //  'The state (2nd) argument to history.createLocation is deprecated; use a ' +
+      //  'location descriptor instead'
+      //)
+
+      if (typeof location === 'string') location = _parsePath2['default'](location);
+
+      location = _extends({}, location, { state: action });
+
+      action = key;
+      key = arguments[3] || createKey();
+    }
+
+    return _createLocation3['default'](location, action, key);
+  }
+
+  // deprecated
+  function setState(state) {
+    if (location) {
+      updateLocationState(location, state);
+      updateLocation(location);
+    } else {
+      updateLocationState(getCurrentLocation(), state);
+    }
+  }
+
+  function updateLocationState(location, state) {
+    location.state = _extends({}, location.state, state);
+    saveState(location.key, location.state);
+  }
+
+  // deprecated
+  function registerTransitionHook(hook) {
+    if (transitionHooks.indexOf(hook) === -1) transitionHooks.push(hook);
+  }
+
+  // deprecated
+  function unregisterTransitionHook(hook) {
+    transitionHooks = transitionHooks.filter(function (item) {
+      return item !== hook;
+    });
+  }
+
+  // deprecated
+  function pushState(state, path) {
+    if (typeof path === 'string') path = _parsePath2['default'](path);
+
+    push(_extends({ state: state }, path));
+  }
+
+  // deprecated
+  function replaceState(state, path) {
+    if (typeof path === 'string') path = _parsePath2['default'](path);
+
+    replace(_extends({ state: state }, path));
+  }
+
+  return {
+    listenBefore: listenBefore,
+    listen: listen,
+    transitionTo: transitionTo,
+    push: push,
+    replace: replace,
+    go: go,
+    goBack: goBack,
+    goForward: goForward,
+    createKey: createKey,
+    createPath: createPath,
+    createHref: createHref,
+    createLocation: createLocation,
+
+    setState: _deprecate2['default'](setState, 'setState is deprecated; use location.key to save state instead'),
+    registerTransitionHook: _deprecate2['default'](registerTransitionHook, 'registerTransitionHook is deprecated; use listenBefore instead'),
+    unregisterTransitionHook: _deprecate2['default'](unregisterTransitionHook, 'unregisterTransitionHook is deprecated; use the callback returned from listenBefore instead'),
+    pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'),
+    replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead')
+  };
+}
+
+exports['default'] = createHistory;
+module.exports = exports['default'];
+},{"./Actions":39,"./AsyncUtils":40,"./createLocation":47,"./deprecate":48,"./parsePath":50,"./runTransitionHook":51,"deep-equal":36}],47:[function(require,module,exports){
+//import warning from 'warning'
+'use strict';
+
+exports.__esModule = true;
+
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var _Actions = require('./Actions');
+
+var _parsePath = require('./parsePath');
+
+var _parsePath2 = _interopRequireDefault(_parsePath);
+
+function createLocation() {
+  var location = arguments.length <= 0 || arguments[0] === undefined ? '/' : arguments[0];
+  var action = arguments.length <= 1 || arguments[1] === undefined ? _Actions.POP : arguments[1];
+  var key = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2];
+
+  var _fourthArg = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3];
+
+  if (typeof location === 'string') location = _parsePath2['default'](location);
+
+  if (typeof action === 'object') {
+    //warning(
+    //  false,
+    //  'The state (2nd) argument to createLocation is deprecated; use a ' +
+    //  'location descriptor instead'
+    //)
+
+    location = _extends({}, location, { state: action });
+
+    action = key || _Actions.POP;
+    key = _fourthArg;
+  }
+
+  var pathname = location.pathname || '/';
+  var search = location.search || '';
+  var hash = location.hash || '';
+  var state = location.state || null;
+
+  return {
+    pathname: pathname,
+    search: search,
+    hash: hash,
+    state: state,
+    action: action,
+    key: key
+  };
+}
+
+exports['default'] = createLocation;
+module.exports = exports['default'];
+},{"./Actions":39,"./parsePath":50}],48:[function(require,module,exports){
+//import warning from 'warning'
+
+"use strict";
+
+exports.__esModule = true;
+function deprecate(fn) {
+  return fn;
+  //return function () {
+  //  warning(false, '[history] ' + message)
+  //  return fn.apply(this, arguments)
+  //}
+}
+
+exports["default"] = deprecate;
+module.exports = exports["default"];
+},{}],49:[function(require,module,exports){
+"use strict";
+
+exports.__esModule = true;
+function extractPath(string) {
+  var match = string.match(/^https?:\/\/[^\/]*/);
+
+  if (match == null) return string;
+
+  return string.substring(match[0].length);
+}
+
+exports["default"] = extractPath;
+module.exports = exports["default"];
+},{}],50:[function(require,module,exports){
+(function (process){
+'use strict';
+
+exports.__esModule = true;
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var _warning = require('warning');
+
+var _warning2 = _interopRequireDefault(_warning);
+
+var _extractPath = require('./extractPath');
+
+var _extractPath2 = _interopRequireDefault(_extractPath);
+
+function parsePath(path) {
+  var pathname = _extractPath2['default'](path);
+  var search = '';
+  var hash = '';
+
+  process.env.NODE_ENV !== 'production' ? _warning2['default'](path === pathname, 'A path must be pathname + search + hash only, not a fully qualified URL like "%s"', path) : undefined;
+
+  var hashIndex = pathname.indexOf('#');
+  if (hashIndex !== -1) {
+    hash = pathname.substring(hashIndex);
+    pathname = pathname.substring(0, hashIndex);
+  }
+
+  var searchIndex = pathname.indexOf('?');
+  if (searchIndex !== -1) {
+    search = pathname.substring(searchIndex);
+    pathname = pathname.substring(0, searchIndex);
+  }
+
+  if (pathname === '') pathname = '/';
+
+  return {
+    pathname: pathname,
+    search: search,
+    hash: hash
+  };
+}
+
+exports['default'] = parsePath;
+module.exports = exports['default'];
+}).call(this,require('_process'))
+
+},{"./extractPath":49,"_process":1,"warning":53}],51:[function(require,module,exports){
+(function (process){
+'use strict';
+
+exports.__esModule = true;
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
+
+var _warning = require('warning');
+
+var _warning2 = _interopRequireDefault(_warning);
+
+function runTransitionHook(hook, location, callback) {
+  var result = hook(location, callback);
+
+  if (hook.length < 2) {
+    // Assume the hook runs synchronously and automatically
+    // call the callback with the return value.
+    callback(result);
+  } else {
+    process.env.NODE_ENV !== 'production' ? _warning2['default'](result === undefined, 'You should not "return" in a transition hook with a callback argument; call the callback instead') : undefined;
+  }
+}
+
+exports['default'] = runTransitionHook;
+module.exports = exports['default'];
+}).call(this,require('_process'))
+
+},{"_process":1,"warning":53}],52:[function(require,module,exports){
+(function (process){
+/**
+ * Copyright 2013-2015, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+'use strict';
+
+/**
+ * Use invariant() to assert state which your program assumes to be true.
+ *
+ * Provide sprintf-style format (only %s is supported) and arguments
+ * to provide information about what broke and what you were
+ * expecting.
+ *
+ * The invariant message will be stripped in production, but the invariant
+ * will remain to ensure logic does not differ in production.
+ */
+
+var invariant = function(condition, format, a, b, c, d, e, f) {
+  if (process.env.NODE_ENV !== 'production') {
+    if (format === undefined) {
+      throw new Error('invariant requires an error message argument');
+    }
+  }
+
+  if (!condition) {
+    var error;
+    if (format === undefined) {
+      error = new Error(
+        'Minified exception occurred; use the non-minified dev environment ' +
+        'for the full error message and additional helpful warnings.'
+      );
+    } else {
+      var args = [a, b, c, d, e, f];
+      var argIndex = 0;
+      error = new Error(
+        format.replace(/%s/g, function() { return args[argIndex++]; })
+      );
+      error.name = 'Invariant Violation';
+    }
+
+    error.framesToPop = 1; // we don't care about invariant's own frame
+    throw error;
+  }
+};
+
+module.exports = invariant;
+
+}).call(this,require('_process'))
+
+},{"_process":1}],53:[function(require,module,exports){
+(function (process){
+/**
+ * Copyright 2014-2015, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+'use strict';
+
+/**
+ * Similar to invariant but only logs a warning if the condition is not met.
+ * This can be used to log issues in development environments in critical
+ * paths. Removing the logging code for production environments will keep the
+ * same logic and follow the same code paths.
+ */
+
+var warning = function() {};
+
+if (process.env.NODE_ENV !== 'production') {
+  warning = function(condition, format, args) {
+    var len = arguments.length;
+    args = new Array(len > 2 ? len - 2 : 0);
+    for (var key = 2; key < len; key++) {
+      args[key - 2] = arguments[key];
+    }
+    if (format === undefined) {
+      throw new Error(
+        '`warning(condition, format, ...args)` requires a warning ' +
+        'message argument'
+      );
+    }
+
+    if (format.length < 10 || (/^[s\W]*$/).test(format)) {
+      throw new Error(
+        'The warning format should be able to uniquely identify this ' +
+        'warning. Please, use a more descriptive format than: ' + format
+      );
+    }
+
+    if (!condition) {
+      var argIndex = 0;
+      var message = 'Warning: ' +
+        format.replace(/%s/g, function() {
+          return args[argIndex++];
+        });
+      if (typeof console !== 'undefined') {
+        console.error(message);
+      }
+      try {
+        // This error was thrown as a convenience so that you can use this stack
+        // to find the callsite that caused this warning to fire.
+        throw new Error(message);
+      } catch(x) {}
+    }
+  };
+}
+
+module.exports = warning;
+
+}).call(this,require('_process'))
+
+},{"_process":1}],54:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.select = select;
+
+var _react = require("react");
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: "refresh",
+    value: function refresh() {
+      window.location.reload();
+    }
+  }, {
+    key: "getMessage",
+    value: function getMessage() {
+      if (this.props.signedIn) {
+        return interpolate(gettext("You have signed in as %(username)s. Please refresh the page before continuing."), { username: this.props.signedIn.username }, true);
+      } else if (this.props.signedOut) {
+        return interpolate(gettext("%(username)s, you have been signed out. Please refresh the page before continuing."), { username: this.props.user.username }, true);
+      }
+    }
+  }, {
+    key: "getClassName",
+    value: function getClassName() {
+      if (this.props.signedIn || this.props.signedOut) {
+        return "auth-message show";
+      } else {
+        return "auth-message";
+      }
+    }
+  }, {
+    key: "render",
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        "div",
+        { className: this.getClassName() },
+        _react2.default.createElement(
+          "div",
+          { className: "container" },
+          _react2.default.createElement(
+            "p",
+            { className: "lead" },
+            this.getMessage()
+          ),
+          _react2.default.createElement(
+            "p",
+            null,
+            _react2.default.createElement(
+              "button",
+              { type: "button", className: "btn btn-default",
+                onClick: this.refresh },
+              gettext("Reload page")
+            ),
+            " ",
+            _react2.default.createElement(
+              "span",
+              { className: "hidden-xs hidden-sm text-muted" },
+              gettext("or press F5 key.")
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+function select(state) {
+  return {
+    user: state.auth.user,
+    signedIn: state.auth.signedIn,
+    signedOut: state.auth.signedOut
+  };
+}
+
+},{"react":"react"}],55:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var BASE_URL = $('base').attr('href') + 'user-avatar/';
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getSrc',
+    value: function getSrc() {
+      var size = this.props.size || 100; // jshint ignore:line
+      var url = BASE_URL;
+
+      if (this.props.user && this.props.user.id) {
+        // just avatar hash, size and user id
+        url += this.props.user.avatar_hash + '/' + size + '/' + this.props.user.id + '.png';
+      } else {
+        // just append avatar size to file to produce no-avatar placeholder
+        url += size + '.png';
+      }
+
+      return url;
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement('img', { src: this.getSrc(),
+        className: this.props.className || 'user-avatar',
+        title: gettext("User avatar") });
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],56:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _moment = require('moment');
+
+var _moment2 = _interopRequireDefault(_moment);
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getReasonMessage',
+    value: function getReasonMessage() {
+      /* jshint ignore:start */
+      if (this.props.message.html) {
+        return _react2.default.createElement('div', { className: 'lead', dangerouslySetInnerHTML: {
+            __html: this.props.message.html
+          } });
+      } else {
+        return _react2.default.createElement(
+          'p',
+          { className: 'lead' },
+          this.props.message.plain
+        );
+      }
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'getExpirationMessage',
+    value: function getExpirationMessage() {
+      if (this.props.expires) {
+        if (this.props.expires.isAfter((0, _moment2.default)())) {
+          /* jshint ignore:start */
+          var title = interpolate(gettext("This ban expires on %(expires_on)s."), {
+            'expires_on': this.props.expires.format('LL, LT')
+          }, true);
+
+          var message = interpolate(gettext("This ban expires %(expires_on)s."), {
+            'expires_on': this.props.expires.fromNow()
+          }, true);
+
+          return _react2.default.createElement(
+            'abbr',
+            { title: title },
+            message
+          );
+          /* jshint ignore:end */
+        } else {
+            return gettext("This ban has expired.");
+          }
+      } else {
+        return gettext("This ban is permanent.");
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'page page-error page-error-banned' },
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'div',
+            { className: 'message-panel' },
+            _react2.default.createElement(
+              'div',
+              { className: 'message-icon' },
+              _react2.default.createElement(
+                'span',
+                { className: 'material-icon' },
+                'highlight_off'
+              )
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'message-body' },
+              this.getReasonMessage(),
+              _react2.default.createElement(
+                'p',
+                { className: 'message-footnote' },
+                this.getExpirationMessage()
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"moment":"moment","react":"react"}],57:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _loader = require('./loader');
+
+var _loader2 = _interopRequireDefault(_loader);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+// jshint ignore:line
+
+var Button = function (_React$Component) {
+  _inherits(Button, _React$Component);
+
+  function Button() {
+    _classCallCheck(this, Button);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(Button).apply(this, arguments));
+  }
+
+  _createClass(Button, [{
+    key: 'render',
+    value: function render() {
+      var className = 'btn ' + this.props.className;
+      var disabled = this.props.disabled;
+
+      if (this.props.loading) {
+        className += ' btn-loading';
+        disabled = true;
+      }
+
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'button',
+        { type: this.props.onClick ? 'button' : 'submit',
+          className: className,
+          disabled: disabled,
+          onClick: this.props.onClick },
+        this.props.children,
+        this.props.loading ? _react2.default.createElement(_loader2.default, null) : null
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return Button;
+}(_react2.default.Component);
+
+exports.default = Button;
+
+Button.defaultProps = {
+  className: "btn-default",
+
+  type: "submit",
+
+  loading: false,
+  disabled: false,
+
+  onClick: null
+};
+
+},{"./loader":72,"react":"react"}],58:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _lastActivity = require('./last-activity');
+
+var _lastActivity2 = _interopRequireDefault(_lastActivity);
+
+var _readIcon = require('./read-icon');
+
+var _readIcon2 = _interopRequireDefault(_readIcon);
+
+var _stats = require('./stats');
+
+var _stats2 = _interopRequireDefault(_stats);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.props.category.css_class) {
+        return 'panel panel-default panel-category panel-category-' + this.props.category.css_class;
+      } else {
+        return 'panel panel-default panel-category';
+      }
+    }
+  }, {
+    key: 'getHeadingClassName',
+    value: function getHeadingClassName() {
+      if (this.props.category.subcategories.length) {
+        return 'panel-heading';
+      } else {
+        return 'panel-heading heading-alone';
+      }
+    }
+  }, {
+    key: 'getCategoryDescription',
+    value: function getCategoryDescription() {
+      if (this.props.category.description) {
+        /* jshint ignore:start */
+        return _react2.default.createElement('div', { className: 'panel-body category-description',
+          dangerouslySetInnerHTML: {
+            __html: this.props.category.description.html
+          } });
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getSubcategoryClass',
+    value: function getSubcategoryClass(category) {
+      if (category.css_class) {
+        return 'list-group-item category-subcategory subcategory-' + category.css_class;
+      } else {
+        return 'list-group-item category-subcategory';
+      }
+    }
+  }, {
+    key: 'getSubcategoryDescription',
+    value: function getSubcategoryDescription(category) {
+      if (category.description) {
+        /* jshint ignore:start */
+        return _react2.default.createElement('div', { className: 'subcategory-description',
+          dangerouslySetInnerHTML: {
+            __html: category.description.html
+          } });
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getSubcategorySubcategoryClass',
+    value: function getSubcategorySubcategoryClass(category) {
+      if (category.css_class) {
+        return 'subcategory subcategory-' + category.css_class;
+      } else {
+        return 'subcategory';
+      }
+    }
+  }, {
+    key: 'getSubcategorySubcategories',
+    value: function getSubcategorySubcategories(category) {
+      var _this2 = this;
+
+      if (category.subcategories.length) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'ul',
+          { className: 'list-inline subcategories-list' },
+          category.subcategories.map(function (category) {
+            return _react2.default.createElement(
+              'li',
+              { key: category.id },
+              _react2.default.createElement(
+                'a',
+                { href: category.absolute_url,
+                  className: _this2.getSubcategorySubcategoryClass(category) },
+                category.name
+              )
+            );
+          })
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getSubcategories',
+    value: function getSubcategories() {
+      var _this3 = this;
+
+      if (this.props.category.subcategories.length) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'ul',
+          { className: 'list-group category-subcategories' },
+          this.props.category.subcategories.map(function (category) {
+            return _react2.default.createElement(
+              'li',
+              { className: _this3.getSubcategoryClass(category),
+                key: category.id },
+              _react2.default.createElement(
+                'div',
+                { className: 'title-row' },
+                _react2.default.createElement(
+                  'h4',
+                  null,
+                  _react2.default.createElement(_readIcon2.default, { category: category }),
+                  _react2.default.createElement(
+                    'a',
+                    { href: category.absolute_url, className: 'item-title' },
+                    category.name
+                  )
+                ),
+                _react2.default.createElement(_stats2.default, { category: category })
+              ),
+              _react2.default.createElement(_lastActivity2.default, { category: category }),
+              _this3.getSubcategoryDescription(category),
+              _this3.getSubcategorySubcategories(category)
+            );
+          })
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { id: 'panel-category-' + this.props.category.id,
+          className: this.getClassName() },
+        _react2.default.createElement(
+          'div',
+          { className: this.getHeadingClassName() },
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-heading-inblock' },
+            _react2.default.createElement(
+              'div',
+              { className: 'panel-heading-top-row' },
+              _react2.default.createElement(
+                'h3',
+                { className: 'panel-title' },
+                _react2.default.createElement(_readIcon2.default, { category: this.props.category }),
+                _react2.default.createElement(
+                  'a',
+                  { href: this.props.category.absolute_url, className: 'item-title' },
+                  this.props.category.name
+                )
+              ),
+              _react2.default.createElement(_stats2.default, { category: this.props.category })
+            ),
+            _react2.default.createElement(_lastActivity2.default, { category: this.props.category })
+          )
+        ),
+        this.getCategoryDescription(),
+        this.getSubcategories()
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"./last-activity":59,"./read-icon":60,"./stats":62,"react":"react"}],59:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require("react");
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: "getLastPoster",
+    value: function getLastPoster() {
+      if (this.props.category.last_poster_url) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          "a",
+          { href: this.props.category.last_poster_url,
+            className: "item-title" },
+          this.props.category.last_poster_name
+        );
+        /* jshint ignore:end */
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            "span",
+            { className: "item-title" },
+            this.props.category.last_poster_name
+          );
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: "getThreadDetails",
+    value: function getThreadDetails() {
+      /* jshint ignore:start */
+      return [_react2.default.createElement(
+        "li",
+        { className: "thread-title", key: "title" },
+        _react2.default.createElement(
+          "a",
+          { href: this.props.category.last_thread_url, className: "item-title" },
+          this.props.category.last_thread_title
+        )
+      ), _react2.default.createElement(
+        "li",
+        { className: "poster-name", key: "poster" },
+        this.getLastPoster()
+      ), _react2.default.createElement(
+        "li",
+        { className: "thread-date", key: "date" },
+        _react2.default.createElement(
+          "abbr",
+          { title: this.props.category.last_post_on.format('LL, LT') },
+          this.props.category.last_post_on.fromNow()
+        )
+      )];
+      /* jshint ignore:end */
+    }
+  }, {
+    key: "getLastActivity",
+    value: function getLastActivity() {
+      if (this.props.category.acl.can_browse) {
+        if (!this.props.category.acl.can_see_all_threads) {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            "li",
+            { className: "thread-message" },
+            _react2.default.createElement(
+              "span",
+              { className: "material-icon" },
+              "info_outline"
+            ),
+            gettext("This category is private. You can see only your own threads within it.")
+          );
+          /* jshint ignore:end */
+        } else if (this.props.category.last_thread_title) {
+            return this.getThreadDetails();
+          } else {
+            /* jshint ignore:start */
+            return _react2.default.createElement(
+              "li",
+              { className: "thread-message" },
+              _react2.default.createElement(
+                "span",
+                { className: "material-icon" },
+                "error_outline"
+              ),
+              gettext("This category is empty.")
+            );
+            /* jshint ignore:end */
+          }
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            "li",
+            { className: "thread-message" },
+            _react2.default.createElement(
+              "span",
+              { className: "material-icon" },
+              "highlight_off"
+            ),
+            gettext("This category is protected. You can't browse it's contents.")
+          );
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: "render",
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        "ul",
+        { className: "list-inline category-last-activity" },
+        this.getLastActivity()
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],60:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.props.category.is_read) {
+        return 'read-status item-read';
+      } else {
+        return 'read-status item-new';
+      }
+    }
+  }, {
+    key: 'getTitle',
+    value: function getTitle() {
+      if (this.props.category.is_closed) {
+        if (this.props.category.is_read) {
+          return gettext("This category has no new posts. (closed)");
+        } else {
+          return gettext("This category has new posts. (closed)");
+        }
+      } else {
+        if (this.props.category.is_read) {
+          return gettext("This category has no new posts.");
+        } else {
+          return gettext("This category has new posts.");
+        }
+      }
+    }
+  }, {
+    key: 'getIcon',
+    value: function getIcon() {
+      if (this.props.category.is_closed) {
+        if (this.props.category.is_read) {
+          return 'lock_outline';
+        } else {
+          return 'lock';
+        }
+      } else {
+        if (this.props.category.is_read) {
+          return 'chat_bubble_outline';
+        } else {
+          return 'chat_bubble';
+        }
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getClassName(), title: this.getTitle() },
+        _react2.default.createElement(
+          'span',
+          { className: 'material-icon' },
+          this.getIcon()
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],61:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.select = select;
+
+var _moment = require('moment');
+
+var _moment2 = _interopRequireDefault(_moment);
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _category = require('./category');
+
+var _category2 = _interopRequireDefault(_category);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _polls = require('../../services/polls');
+
+var _polls2 = _interopRequireDefault(_polls);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+
+var dehydrate = function dehydrate(category) {
+  return Object.assign({}, category, {
+    last_post_on: category.last_post_on ? (0, _moment2.default)(category.last_post_on) : null,
+    subcategories: category.subcategories.map(dehydrate)
+  });
+};
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.update = function (data) {
+      _this.setState({
+        categories: data.map(dehydrate)
+      });
+    };
+
+    _this.state = {
+      categories: _index2.default.get('CATEGORIES').map(dehydrate)
+    };
+
+    _this.startPolling(_index2.default.get('CATEGORIES_API'));
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'startPolling',
+    value: function startPolling(api) {
+      _polls2.default.start({
+        poll: 'categories',
+        url: api,
+        frequency: 180 * 1000,
+        update: this.update
+      });
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'render',
+
+    /* jshint ignore:end */
+
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'categories-list' },
+        this.state.categories.map(function (category) {
+          return _react2.default.createElement(_category2.default, { category: category, key: category.id });
+        })
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+function select(store) {
+  return {
+    'tick': store.tick.tick
+  };
+}
+
+},{"../../index":136,"../../services/polls":151,"./category":58,"moment":"moment","react":"react"}],62:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require("react");
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: "getThreadsCount",
+    value: function getThreadsCount() {
+      var string = ngettext("%(threads)s thread", "%(threads)s threads", this.props.category.threads);
+
+      return interpolate(string, {
+        'threads': this.props.category.threads
+      }, true);
+    }
+  }, {
+    key: "getPostsCount",
+    value: function getPostsCount() {
+      var string = ngettext("%(posts)s post", "%(posts)s posts", this.props.category.posts);
+
+      return interpolate(string, {
+        'posts': this.props.category.posts
+      }, true);
+    }
+  }, {
+    key: "render",
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        "ul",
+        { className: "list-inline category-stats" },
+        _react2.default.createElement(
+          "li",
+          { className: "category-threads" },
+          this.getThreadsCount()
+        ),
+        _react2.default.createElement(
+          "li",
+          { className: "category-posts" },
+          this.getPostsCount()
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],63:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _avatar = require('../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _button = require('../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _ajax = require('../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var BASE_URL = $('base').attr('href') + 'user-avatar';
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.cropAvatar = function () {
+      if (_this.state.isLoading) {
+        return false;
+      }
+
+      _this.setState({
+        'isLoading': true
+      });
+
+      var avatarType = _this.props.upload ? 'crop_tmp' : 'crop_org';
+      var cropit = $('.crop-form');
+
+      _ajax2.default.post(_this.props.user.api_url.avatar, {
+        'avatar': avatarType,
+        'crop': {
+          'offset': cropit.cropit('offset'),
+          'zoom': cropit.cropit('zoom')
+        }
+      }).then(function (data) {
+        _this.props.onComplete(data.avatar_hash, data.options);
+        _snackbar2.default.success(data.detail);
+      }, function (rejection) {
+        if (rejection.status === 400) {
+          _snackbar2.default.error(rejection.detail);
+          _this.setState({
+            'isLoading': false
+          });
+        } else {
+          _this.props.showError(rejection);
+        }
+      });
+    };
+
+    _this.state = {
+      'isLoading': false
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'getAvatarSize',
+    value: function getAvatarSize() {
+      if (this.props.upload) {
+        return this.props.options.crop_tmp.size;
+      } else {
+        return this.props.options.crop_org.size;
+      }
+    }
+  }, {
+    key: 'getAvatarSecret',
+    value: function getAvatarSecret() {
+      if (this.props.upload) {
+        return this.props.options.crop_tmp.secret;
+      } else {
+        return this.props.options.crop_org.secret;
+      }
+    }
+  }, {
+    key: 'getAvatarHash',
+    value: function getAvatarHash() {
+      return this.props.upload || this.props.user.avatar_hash;
+    }
+  }, {
+    key: 'getImagePath',
+    value: function getImagePath() {
+      return [BASE_URL, this.getAvatarSecret() + ':' + this.getAvatarHash(), this.props.user.id + '.png'].join('/');
+    }
+  }, {
+    key: 'componentDidMount',
+    value: function componentDidMount() {
+      var _this2 = this;
+
+      var cropit = $('.crop-form');
+      cropit.width(this.getAvatarSize());
+
+      cropit.cropit({
+        'width': this.getAvatarSize(),
+        'height': this.getAvatarSize(),
+        'imageState': {
+          'src': this.getImagePath()
+        },
+        onImageLoaded: function onImageLoaded() {
+          if (_this2.props.upload) {
+            // center uploaded image
+            var zoomLevel = cropit.cropit('zoom');
+            var imageSize = cropit.cropit('imageSize');
+
+            // is it wider than taller?
+            if (imageSize.width > imageSize.height) {
+              var displayedWidth = imageSize.width * zoomLevel;
+              var offsetX = (displayedWidth - _this2.getAvatarSize()) / -2;
+
+              cropit.cropit('offset', {
+                'x': offsetX,
+                'y': 0
+              });
+            } else if (imageSize.width < imageSize.height) {
+              var displayedHeight = imageSize.height * zoomLevel;
+              var offsetY = (displayedHeight - _this2.getAvatarSize()) / -2;
+
+              cropit.cropit('offset', {
+                'x': 0,
+                'y': offsetY
+              });
+            }
+          } else {
+            // use preserved crop
+            var crop = _this2.props.options.crop_org.crop;
+            if (crop) {
+              cropit.cropit('zoom', crop.zoom);
+              cropit.cropit('offset', {
+                'x': crop.x,
+                'y': crop.y
+              });
+            }
+          }
+        }
+      });
+    }
+  }, {
+    key: 'componentWillUnmount',
+    value: function componentWillUnmount() {
+      $('.crop-form').cropit('disable');
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'render',
+
+    /* jshint ignore:end */
+
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        null,
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-body modal-avatar-crop' },
+          _react2.default.createElement(
+            'div',
+            { className: 'crop-form' },
+            _react2.default.createElement('div', { className: 'cropit-image-preview' }),
+            _react2.default.createElement('input', { type: 'range', className: 'cropit-image-zoom-input' })
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-footer' },
+          _react2.default.createElement(
+            'div',
+            { className: 'col-md-6 col-md-offset-3' },
+            _react2.default.createElement(
+              _button2.default,
+              { onClick: this.cropAvatar,
+                loading: this.state.isLoading,
+                className: 'btn-primary btn-block' },
+              this.props.upload ? gettext("Set avatar") : gettext("Crop image")
+            ),
+            _react2.default.createElement(
+              _button2.default,
+              { onClick: this.props.showIndex,
+                disabled: this.state.isLoading,
+                className: 'btn-default btn-block' },
+              gettext("Cancel")
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../services/ajax":143,"../../services/snackbar":152,"../avatar":55,"../button":57,"react":"react"}],64:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Gallery = exports.GalleryItem = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _ajax = require('../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _batch = require('../../utils/batch');
+
+var _batch2 = _interopRequireDefault(_batch);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var GalleryItem = exports.GalleryItem = function (_React$Component) {
+  _inherits(GalleryItem, _React$Component);
+
+  function GalleryItem() {
+    var _Object$getPrototypeO;
+
+    var _temp, _this, _ret;
+
+    _classCallCheck(this, GalleryItem);
+
+    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(GalleryItem)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.select = function () {
+      _this.props.select(_this.props.image);
+    }, _temp), _possibleConstructorReturn(_this, _ret);
+  }
+  /* jshint ignore:start */
+
+  _createClass(GalleryItem, [{
+    key: 'getClassName',
+
+    /* jshint ignore:end */
+
+    value: function getClassName() {
+      if (this.props.selection === this.props.image) {
+        if (this.props.disabled) {
+          return 'btn btn-avatar btn-disabled avatar-selected';
+        } else {
+          return 'btn btn-avatar avatar-selected';
+        }
+      } else if (this.props.disabled) {
+        return 'btn btn-avatar btn-disabled';
+      } else {
+        return 'btn btn-avatar';
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'button',
+        { type: 'button',
+          className: this.getClassName(),
+          disabled: this.props.disabled,
+          onClick: this.select },
+        _react2.default.createElement('img', { src: _index2.default.get('MEDIA_URL') + this.props.image })
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return GalleryItem;
+}(_react2.default.Component);
+
+var Gallery = exports.Gallery = function (_React$Component2) {
+  _inherits(Gallery, _React$Component2);
+
+  function Gallery() {
+    _classCallCheck(this, Gallery);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(Gallery).apply(this, arguments));
+  }
+
+  _createClass(Gallery, [{
+    key: 'render',
+    value: function render() {
+      var _this3 = this;
+
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'avatars-gallery' },
+        _react2.default.createElement(
+          'h3',
+          null,
+          this.props.name
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'avatars-gallery-images' },
+          (0, _batch2.default)(this.props.images, 4, null).map(function (row, i) {
+            return _react2.default.createElement(
+              'div',
+              { className: 'row', key: i },
+              row.map(function (item, i) {
+                return _react2.default.createElement(
+                  'div',
+                  { className: 'col-xs-3', key: i },
+                  item ? _react2.default.createElement(GalleryItem, { image: item,
+                    disabled: _this3.props.disabled,
+                    select: _this3.props.select,
+                    selection: _this3.props.selection }) : _react2.default.createElement('div', { className: 'blank-avatar' })
+                );
+              })
+            );
+          })
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return Gallery;
+}(_react2.default.Component);
+
+var _class = function (_React$Component3) {
+  _inherits(_class, _React$Component3);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this4 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this4.select = function (image) {
+      _this4.setState({
+        selection: image
+      });
+    };
+
+    _this4.save = function () {
+      if (_this4.state.isLoading) {
+        return false;
+      }
+
+      _this4.setState({
+        'isLoading': true
+      });
+
+      _ajax2.default.post(_this4.props.user.api_url.avatar, {
+        avatar: 'galleries',
+        image: _this4.state.selection
+      }).then(function (response) {
+        _this4.setState({
+          'isLoading': false
+        });
+
+        _snackbar2.default.success(response.detail);
+        _this4.props.onComplete(response.avatar_hash, response.options);
+      }, function (rejection) {
+        if (rejection.status === 400) {
+          _snackbar2.default.error(rejection.detail);
+          _this4.setState({
+            'isLoading': false
+          });
+        } else {
+          _this4.props.showError(rejection);
+        }
+      });
+    };
+
+    _this4.state = {
+      'selection': null,
+      'isLoading': false
+    };
+    return _this4;
+  }
+
+  /* jshint ignore:start */
+
+  _createClass(_class, [{
+    key: 'render',
+
+    /* jshint ignore:end */
+
+    value: function render() {
+      var _this5 = this;
+
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        null,
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-body modal-avatar-gallery' },
+          this.props.options.galleries.map(function (item, i) {
+            return _react2.default.createElement(Gallery, { name: item.name,
+              images: item.images,
+              selection: _this5.state.selection,
+              disabled: _this5.state.isLoading,
+              select: _this5.select,
+              key: i });
+          })
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-footer' },
+          _react2.default.createElement(
+            'div',
+            { className: 'row' },
+            _react2.default.createElement(
+              'div',
+              { className: 'col-md-6 col-md-offset-3' },
+              _react2.default.createElement(
+                _button2.default,
+                { onClick: this.save,
+                  loading: this.state.isLoading,
+                  disabled: !this.state.selection,
+                  className: 'btn-primary btn-block' },
+                this.state.selection ? gettext("Save choice") : gettext("Select avatar")
+              ),
+              _react2.default.createElement(
+                _button2.default,
+                { onClick: this.props.showIndex,
+                  disabled: this.state.isLoading,
+                  className: 'btn-default btn-block' },
+                gettext("Cancel")
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../index":136,"../../services/ajax":143,"../../services/snackbar":152,"../../utils/batch":156,"../button":57,"react":"react"}],65:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _avatar = require('../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _button = require('../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _loader = require('../loader');
+
+var _loader2 = _interopRequireDefault(_loader);
+
+var _ajax = require('../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.setGravatar = function () {
+      _this.callApi('gravatar');
+    };
+
+    _this.setGenerated = function () {
+      _this.callApi('generated');
+    };
+
+    _this.state = {
+      'isLoading': false
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'callApi',
+    value: function callApi(avatarType) {
+      var _this2 = this;
+
+      if (this.state.isLoading) {
+        return false;
+      }
+
+      this.setState({
+        'isLoading': true
+      });
+
+      _ajax2.default.post(this.props.user.api_url.avatar, {
+        avatar: avatarType
+      }).then(function (response) {
+        _this2.setState({
+          'isLoading': false
+        });
+
+        _snackbar2.default.success(response.detail);
+        _this2.props.onComplete(response.avatar_hash, response.options);
+      }, function (rejection) {
+        if (rejection.status === 400) {
+          _snackbar2.default.error(rejection.detail);
+          _this2.setState({
+            'isLoading': false
+          });
+        } else {
+          _this2.props.showError(rejection);
+        }
+      });
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'getGravatarButton',
+
+    /* jshint ignore:end */
+
+    value: function getGravatarButton() {
+      if (this.props.options.gravatar) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          _button2.default,
+          { onClick: this.setGravatar,
+            disabled: this.state.isLoading,
+            className: 'btn-default btn-block btn-avatar-gravatar' },
+          gettext("Download my Gravatar")
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getCropButton',
+    value: function getCropButton() {
+      if (this.props.options.crop_org) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          _button2.default,
+          { onClick: this.props.showCrop,
+            disabled: this.state.isLoading,
+            className: 'btn-default btn-block btn-avatar-crop' },
+          gettext("Re-crop uploaded image")
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getUploadButton',
+    value: function getUploadButton() {
+      if (this.props.options.upload) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          _button2.default,
+          { onClick: this.props.showUpload,
+            disabled: this.state.isLoading,
+            className: 'btn-default btn-block btn-avatar-upload' },
+          gettext("Upload new image")
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getGalleryButton',
+    value: function getGalleryButton() {
+      if (this.props.options.galleries) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          _button2.default,
+          { onClick: this.props.showGallery,
+            disabled: this.state.isLoading,
+            className: 'btn-default btn-block btn-avatar-gallery' },
+          gettext("Pick avatar from gallery")
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getAvatarPreview',
+    value: function getAvatarPreview() {
+      /* jshint ignore:start */
+      var userPeview = {
+        id: this.props.user.id,
+        avatar_hash: this.props.options.avatar_hash
+      };
+      /* jshint ignore:end */
+
+      if (this.state.isLoading) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'div',
+          { className: 'avatar-preview preview-loading' },
+          _react2.default.createElement(_avatar2.default, { user: userPeview, size: '200' }),
+          _react2.default.createElement(_loader2.default, null)
+        );
+        /* jshint ignore:end */
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'div',
+            { className: 'avatar-preview' },
+            _react2.default.createElement(_avatar2.default, { user: userPeview, size: '200' })
+          );
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'modal-body modal-avatar-index' },
+        _react2.default.createElement(
+          'div',
+          { className: 'row' },
+          _react2.default.createElement(
+            'div',
+            { className: 'col-md-5' },
+            this.getAvatarPreview()
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'col-md-7' },
+            this.getGravatarButton(),
+            _react2.default.createElement(
+              _button2.default,
+              { onClick: this.setGenerated,
+                disabled: this.state.isLoading,
+                className: 'btn-default btn-block btn-avatar-generate' },
+              gettext("Generate my individual avatar")
+            ),
+            this.getCropButton(),
+            this.getUploadButton(),
+            this.getGalleryButton()
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../services/ajax":143,"../../services/snackbar":152,"../avatar":55,"../button":57,"../loader":72,"react":"react"}],66:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.ChangeAvatarError = undefined;
+exports.select = select;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _index = require('./index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _crop = require('./crop');
+
+var _crop2 = _interopRequireDefault(_crop);
+
+var _upload = require('./upload');
+
+var _upload2 = _interopRequireDefault(_upload);
+
+var _gallery = require('./gallery');
+
+var _gallery2 = _interopRequireDefault(_gallery);
+
+var _modalLoader = require('../modal-loader');
+
+var _modalLoader2 = _interopRequireDefault(_modalLoader);
+
+var _users = require('../../reducers/users');
+
+var _ajax = require('../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _store = require('../../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var ChangeAvatarError = exports.ChangeAvatarError = function (_React$Component) {
+  _inherits(ChangeAvatarError, _React$Component);
+
+  function ChangeAvatarError() {
+    _classCallCheck(this, ChangeAvatarError);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(ChangeAvatarError).apply(this, arguments));
+  }
+
+  _createClass(ChangeAvatarError, [{
+    key: 'getErrorReason',
+    value: function getErrorReason() {
+      if (this.props.reason) {
+        /* jshint ignore:start */
+        return _react2.default.createElement('p', { dangerouslySetInnerHTML: { __html: this.props.reason } });
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'modal-body' },
+        _react2.default.createElement(
+          'div',
+          { className: 'message-icon' },
+          _react2.default.createElement(
+            'span',
+            { className: 'material-icon' },
+            'remove_circle_outline'
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'message-body' },
+          _react2.default.createElement(
+            'p',
+            { className: 'lead' },
+            this.props.message
+          ),
+          this.getErrorReason()
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return ChangeAvatarError;
+}(_react2.default.Component);
+
+var _class = function (_React$Component2) {
+  _inherits(_class, _React$Component2);
+
+  function _class() {
+    var _Object$getPrototypeO;
+
+    var _temp, _this2, _ret;
+
+    _classCallCheck(this, _class);
+
+    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    return _ret = (_temp = (_this2 = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this2), _this2.showError = function (error) {
+      _this2.setState({
+        error: error
+      });
+    }, _this2.showIndex = function () {
+      _this2.setState({
+        'component': _index2.default
+      });
+    }, _this2.showUpload = function () {
+      _this2.setState({
+        'component': _upload2.default
+      });
+    }, _this2.showCrop = function () {
+      _this2.setState({
+        'component': _crop2.default
+      });
+    }, _this2.showGallery = function () {
+      _this2.setState({
+        'component': _gallery2.default
+      });
+    }, _this2.completeFlow = function (avatarHash, options) {
+      _store2.default.dispatch((0, _users.updateAvatar)(_this2.props.user, avatarHash));
+
+      _this2.setState({
+        'component': _index2.default,
+        options: options
+      });
+    }, _temp), _possibleConstructorReturn(_this2, _ret);
+  }
+
+  _createClass(_class, [{
+    key: 'componentDidMount',
+    value: function componentDidMount() {
+      var _this3 = this;
+
+      _ajax2.default.get(this.props.user.api_url.avatar).then(function (options) {
+        _this3.setState({
+          'component': _index2.default,
+          'options': options,
+          'error': null
+        });
+      }, function (rejection) {
+        _this3.showError(rejection);
+      });
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'getBody',
+
+    /* jshint ignore:end */
+
+    value: function getBody() {
+      if (this.state) {
+        if (this.state.error) {
+          /* jshint ignore:start */
+          return _react2.default.createElement(ChangeAvatarError, { message: this.state.error.detail,
+            reason: this.state.error.reason });
+          /* jshint ignore:end */
+        } else {
+            /* jshint ignore:start */
+            return _react2.default.createElement(this.state.component, { options: this.state.options,
+              user: this.props.user,
+              onComplete: this.completeFlow,
+              showError: this.showError,
+              showIndex: this.showIndex,
+              showCrop: this.showCrop,
+              showUpload: this.showUpload,
+              showGallery: this.showGallery });
+            /* jshint ignore:end */
+          }
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(_modalLoader2.default, null);
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.state && this.state.error) {
+        return "modal-dialog modal-message modal-change-avatar";
+      } else {
+        return "modal-dialog modal-change-avatar";
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getClassName(),
+          role: 'document' },
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-content' },
+          _react2.default.createElement(
+            'div',
+            { className: 'modal-header' },
+            _react2.default.createElement(
+              'button',
+              { type: 'button', className: 'close', 'data-dismiss': 'modal',
+                'aria-label': gettext("Close") },
+              _react2.default.createElement(
+                'span',
+                { 'aria-hidden': 'true' },
+                '×'
+              )
+            ),
+            _react2.default.createElement(
+              'h4',
+              { className: 'modal-title' },
+              gettext("Change your avatar")
+            )
+          ),
+          this.getBody()
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+function select(state) {
+  return {
+    'user': state.auth.user
+  };
+}
+
+},{"../../reducers/users":142,"../../services/ajax":143,"../../services/store":153,"../modal-loader":73,"./crop":63,"./gallery":64,"./index":65,"./upload":67,"react":"react"}],67:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _crop = require('./crop');
+
+var _crop2 = _interopRequireDefault(_crop);
+
+var _button = require('../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _ajax = require('../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _fileSize = require('../../utils/file-size');
+
+var _fileSize2 = _interopRequireDefault(_fileSize);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.pickFile = function () {
+      document.getElementById('avatar-hidden-upload').click();
+    };
+
+    _this.uploadFile = function () {
+      var image = document.getElementById('avatar-hidden-upload').files[0];
+
+      var validationError = _this.validateFile(image);
+      if (validationError) {
+        _snackbar2.default.error(validationError);
+        return;
+      }
+
+      _this.setState({
+        image: image,
+        'preview': URL.createObjectURL(image),
+        'progress': 0
+      });
+
+      var data = new FormData();
+      data.append('avatar', 'upload');
+      data.append('image', image);
+
+      _ajax2.default.upload(_this.props.user.api_url.avatar, data, function (progress) {
+        _this.setState({
+          progress: progress
+        });
+      }).then(function (data) {
+        _this.setState({
+          'options': data.options,
+          'uploaded': data.detail
+        });
+        _snackbar2.default.info(gettext("Your image has been uploaded and you may now crop it."));
+      }, function (rejection) {
+        if (rejection.status === 400) {
+          _snackbar2.default.error(rejection.detail);
+          _this.setState({
+            'isLoading': false,
+            'image': null,
+            'progress': 0
+          });
+        } else {
+          _this.props.showError(rejection);
+        }
+      });
+    };
+
+    _this.state = {
+      'image': null,
+      'preview': null,
+      'progress': 0,
+      'uploaded': null
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'validateFile',
+    value: function validateFile(image) {
+      if (image.size > this.props.options.upload.limit) {
+        return interpolate(gettext("Selected file is too big. (%(filesize)s)"), {
+          'filesize': (0, _fileSize2.default)(image.size)
+        }, true);
+      }
+
+      var invalidTypeMsg = gettext("Selected file type is not supported.");
+      if (this.props.options.upload.allowed_mime_types.indexOf(image.type) === -1) {
+        return invalidTypeMsg;
+      }
+
+      var extensionFound = false;
+      var loweredFilename = image.name.toLowerCase();
+      this.props.options.upload.allowed_extensions.map(function (extension) {
+        if (loweredFilename.substr(extension.length * -1) === extension) {
+          extensionFound = true;
+        }
+      });
+
+      if (!extensionFound) {
+        return invalidTypeMsg;
+      }
+
+      return false;
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'getUploadRequirements',
+
+    /* jshint ignore:end */
+
+    value: function getUploadRequirements(options) {
+      var extensions = options.allowed_extensions.map(function (extension) {
+        return extension.substr(1);
+      });
+
+      return interpolate(gettext("%(files)s files smaller than %(limit)s"), {
+        'files': extensions.join(', '),
+        'limit': (0, _fileSize2.default)(options.limit)
+      }, true);
+    }
+  }, {
+    key: 'getUploadButton',
+    value: function getUploadButton() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'modal-body modal-avatar-upload' },
+        _react2.default.createElement(
+          _button2.default,
+          { className: 'btn-pick-file',
+            onClick: this.pickFile },
+          _react2.default.createElement(
+            'div',
+            { className: 'material-icon' },
+            'input'
+          ),
+          gettext("Select file")
+        ),
+        _react2.default.createElement(
+          'p',
+          { className: 'text-muted' },
+          this.getUploadRequirements(this.props.options.upload)
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'getUploadProgressLabel',
+    value: function getUploadProgressLabel() {
+      return interpolate(gettext("%(progress)s % complete"), {
+        'progress': this.state.progress
+      }, true);
+    }
+  }, {
+    key: 'getUploadProgress',
+    value: function getUploadProgress() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'modal-body modal-avatar-upload' },
+        _react2.default.createElement(
+          'div',
+          { className: 'upload-progress' },
+          _react2.default.createElement('img', { src: this.state.preview }),
+          _react2.default.createElement(
+            'div',
+            { className: 'progress' },
+            _react2.default.createElement(
+              'div',
+              { className: 'progress-bar', role: 'progressbar',
+                'aria-valuenow': '{this.state.progress}',
+                'aria-valuemin': '0', 'aria-valuemax': '100',
+                style: { width: this.state.progress + '%' } },
+              _react2.default.createElement(
+                'span',
+                { className: 'sr-only' },
+                this.getUploadProgressLabel()
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'renderUpload',
+    value: function renderUpload() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        null,
+        _react2.default.createElement('input', { type: 'file',
+          id: 'avatar-hidden-upload',
+          className: 'hidden-file-upload',
+          onChange: this.uploadFile }),
+        this.state.image ? this.getUploadProgress() : this.getUploadButton(),
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-footer' },
+          _react2.default.createElement(
+            'div',
+            { className: 'col-md-6 col-md-offset-3' },
+            _react2.default.createElement(
+              _button2.default,
+              { onClick: this.props.showIndex,
+                disabled: !!this.state.image,
+                className: 'btn-default btn-block' },
+              gettext("Cancel")
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'renderCrop',
+    value: function renderCrop() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(_crop2.default, { options: this.state.options,
+        user: this.props.user,
+        upload: this.state.uploaded,
+        onComplete: this.props.onComplete,
+        showError: this.props.showError,
+        showIndex: this.props.showIndex });
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return this.state.uploaded ? this.renderCrop() : this.renderUpload();
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../services/ajax":143,"../../services/snackbar":152,"../../utils/file-size":157,"../button":57,"./crop":63,"react":"react"}],68:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require("react");
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: "getClassName",
+    value: function getClassName() {
+      if (this.props.dropdown) {
+        return "btn btn-default btn-aligned btn-icon btn-dropdown-toggle open hidden-md hidden-lg";
+      } else {
+        return "btn btn-default btn-aligned btn-icon btn-dropdown-toggle hidden-md hidden-lg";
+      }
+    }
+  }, {
+    key: "render",
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        "button",
+        { className: this.getClassName(),
+          type: "button",
+          onClick: this.props.toggleNav,
+          "aria-haspopup": "true",
+          "aria-expanded": this.props.dropdown ? 'true' : 'false' },
+        _react2.default.createElement(
+          "i",
+          { className: "material-icon" },
+          "menu"
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],69:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'isValidated',
+    value: function isValidated() {
+      return typeof this.props.validation !== "undefined";
+    }
+  }, {
+    key: 'getClassName',
+    value: function getClassName() {
+      var className = 'form-group';
+      if (this.isValidated()) {
+        className += ' has-feedback';
+        if (this.props.validation === null) {
+          className += ' has-success';
+        } else {
+          className += ' has-error';
+        }
+      }
+      return className;
+    }
+  }, {
+    key: 'getFeedback',
+    value: function getFeedback() {
+      var _this2 = this;
+
+      if (this.props.validation) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'div',
+          { className: 'help-block errors' },
+          this.props.validation.map(function (error, i) {
+            return _react2.default.createElement(
+              'p',
+              { key: _this2.props.for + 'FeedbackItem' + i },
+              error
+            );
+          })
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getFeedbackIcon',
+    value: function getFeedbackIcon() {
+      if (this.isValidated()) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'span',
+          { className: 'material-icon form-control-feedback',
+            'aria-hidden': 'true', key: this.props.for + 'FeedbackIcon' },
+          this.props.validation ? 'clear' : 'check'
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getFeedbackDescription',
+    value: function getFeedbackDescription() {
+      if (this.isValidated()) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'span',
+          { id: this.props.for + '_status', className: 'sr-only' },
+          this.props.validation ? gettext('(error)') : gettext('(success)')
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getHelpText',
+    value: function getHelpText() {
+      if (this.props.helpText) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'p',
+          { className: 'help-block' },
+          this.props.helpText
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getClassName() },
+        _react2.default.createElement(
+          'label',
+          { className: 'control-label ' + (this.props.labelClass || ''),
+            htmlFor: this.props.for || '' },
+          this.props.label + ':'
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: this.props.controlClass || '' },
+          this.props.children,
+          this.getFeedbackIcon(),
+          this.getFeedbackDescription(),
+          this.getFeedback(),
+          this.getHelpText(),
+          this.props.extra || null
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],70:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _validators = require('../utils/validators');
+
+var _snackbar = require('../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+// jshint ignore:line
+
+var validateRequired = (0, _validators.required)();
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    var _Object$getPrototypeO;
+
+    var _temp, _this, _ret;
+
+    _classCallCheck(this, _class);
+
+    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.bindInput = function (name) {
+      return function (event) {
+        var newState = _defineProperty({}, name, event.target.value);
+
+        var formErrors = _this.state.errors || {};
+        formErrors[name] = _this.validateField(name, newState[name]);
+        newState.errors = formErrors;
+
+        _this.setState(newState);
+      };
+    }, _this.handleSubmit = function (event) {
+      // we don't reload page on submissions
+      event.preventDefault();
+      if (_this.state.isLoading) {
+        return;
+      }
+
+      if (_this.clean()) {
+        _this.setState({ isLoading: true });
+        var promise = _this.send();
+
+        if (promise) {
+          promise.then(function (success) {
+            _this.setState({ isLoading: false });
+            _this.handleSuccess(success);
+          }, function (rejection) {
+            _this.setState({ isLoading: false });
+            _this.handleError(rejection);
+          });
+        } else {
+          _this.setState({ isLoading: false });
+        }
+      }
+    }, _temp), _possibleConstructorReturn(_this, _ret);
+  }
+
+  _createClass(_class, [{
+    key: 'validate',
+    value: function validate() {
+      var errors = {};
+      if (!this.state.validators) {
+        return errors;
+      }
+
+      var validators = {
+        required: this.state.validators.required || this.state.validators,
+        optional: this.state.validators.optional || {}
+      };
+
+      var validatedFields = [];
+
+      // add required fields to validation
+      for (var name in validators.required) {
+        if (validators.required.hasOwnProperty(name) && validators.required[name]) {
+          validatedFields.push(name);
+        }
+      }
+
+      // add optional fields to validation
+      for (var name in validators.optional) {
+        if (validators.optional.hasOwnProperty(name) && validators.optional[name]) {
+          validatedFields.push(name);
+        }
+      }
+
+      // validate fields values
+      for (var i in validatedFields) {
+        var name = validatedFields[i];
+        var fieldErrors = this.validateField(name, this.state[name]);
+
+        if (fieldErrors === null) {
+          errors[name] = null;
+        } else if (fieldErrors) {
+          errors[name] = fieldErrors;
+        }
+      }
+
+      return errors;
+    }
+  }, {
+    key: 'isValid',
+    value: function isValid() {
+      var errors = this.validate();
+      for (var field in errors) {
+        if (errors.hasOwnProperty(field)) {
+          if (errors[field] !== null) {
+            return false;
+          }
+        }
+      }
+
+      return true;
+    }
+  }, {
+    key: 'validateField',
+    value: function validateField(name, value) {
+      var errors = [];
+      if (!this.state.validators) {
+        return errors;
+      }
+
+      var validators = {
+        required: (this.state.validators.required || this.state.validators)[name],
+        optional: (this.state.validators.optional || {})[name]
+      };
+
+      var requiredError = validateRequired(value) || false;
+
+      if (validators.required) {
+        if (requiredError) {
+          errors = [requiredError];
+        } else {
+          for (var i in validators.required) {
+            var validationError = validators.required[i](value);
+            if (validationError) {
+              errors.push(validationError);
+            }
+          }
+        }
+
+        return errors.length ? errors : null;
+      } else if (requiredError === false && validators.optional) {
+        for (var i in validators.optional) {
+          var validationError = validators.optional[i](value);
+          if (validationError) {
+            errors.push(validationError);
+          }
+        }
+
+        return errors.length ? errors : null;
+      }
+
+      return false; // false === field wasn't validated
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'clean',
+    value: function clean() {
+      return true;
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return null;
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess(success) {
+      return;
+    }
+  }, {
+    key: 'handleError',
+
+    /* jshint ignore:end */
+    value: function handleError(rejection) {
+      _snackbar2.default.apiError(rejection);
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../services/snackbar":152,"../utils/validators":163,"react":"react"}],71:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'isActive',
+    value: function isActive() {
+      if (this.props.isControlled) {
+        return this.props.isActive;
+      } else {
+        if (this.props.path) {
+          return document.location.pathname.indexOf(this.props.path) === 0;
+        } else {
+          return false;
+        }
+      }
+    }
+  }, {
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.isActive()) {
+        return (this.props.className || '') + ' ' + (this.props.activeClassName || 'active');
+      } else {
+        return this.props.className || '';
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      // jshint ignore:start
+      return _react2.default.createElement(
+        'li',
+        { className: this.getClassName() },
+        this.props.children
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],72:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require("react");
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: "render",
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        "div",
+        { className: this.props.className || "loader" },
+        _react2.default.createElement("div", { className: "loader-spinning-wheel" })
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],73:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _loader = require('./loader');
+
+var _loader2 = _interopRequireDefault(_loader);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'modal-body modal-loader' },
+        _react2.default.createElement(_loader2.default, null)
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"./loader":72,"react":"react"}],74:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _panelMessage = require('./panel-message');
+
+var _panelMessage2 = _interopRequireDefault(_panelMessage);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+
+var _class = function (_PanelMessage) {
+  _inherits(_class, _PanelMessage);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getHelpText',
+    value: function getHelpText() {
+      if (this.props.helpText) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'p',
+          { className: 'help-block' },
+          this.props.helpText
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'modal-body' },
+        _react2.default.createElement(
+          'div',
+          { className: 'message-icon' },
+          _react2.default.createElement(
+            'span',
+            { className: 'material-icon' },
+            this.props.icon || 'info_outline'
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'message-body' },
+          _react2.default.createElement(
+            'p',
+            { className: 'lead' },
+            this.props.message
+          ),
+          this.getHelpText()
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_panelMessage2.default);
+
+exports.default = _class;
+
+},{"./panel-message":86,"react":"react"}],75:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _panelLoader = require('../../panel-loader');
+
+var _panelLoader2 = _interopRequireDefault(_panelLoader);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'panel panel-default panel-form' },
+        _react2.default.createElement(
+          'div',
+          { className: 'panel-heading' },
+          _react2.default.createElement(
+            'h3',
+            { className: 'panel-title' },
+            gettext("Change username")
+          )
+        ),
+        _react2.default.createElement(_panelLoader2.default, null)
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../panel-loader":85,"react":"react"}],76:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _panelMessage = require('../../panel-message');
+
+var _panelMessage2 = _interopRequireDefault(_panelMessage);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getHelpText',
+    value: function getHelpText() {
+      if (this.props.options.next_on) {
+        return interpolate(gettext("You will be able to change your username %(next_change)s."), { 'next_change': this.props.options.next_on.fromNow() }, true);
+      } else {
+        return gettext("You have used up available name changes.");
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'panel panel-default panel-form' },
+        _react2.default.createElement(
+          'div',
+          { className: 'panel-heading' },
+          _react2.default.createElement(
+            'h3',
+            { className: 'panel-title' },
+            gettext("Change username")
+          )
+        ),
+        _react2.default.createElement(_panelMessage2.default, { message: gettext("You can't change your username at the moment."),
+          helpText: this.getHelpText() })
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../panel-message":86,"react":"react"}],77:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('../../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('../../form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _formGroup = require('../../form-group');
+
+var _formGroup2 = _interopRequireDefault(_formGroup);
+
+var _ajax = require('../../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _validators = require('../../../utils/validators');
+
+var validators = _interopRequireWildcard(_validators);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_Form) {
+  _inherits(_class, _Form);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.state = {
+      username: '',
+
+      validators: {
+        username: [validators.usernameContent(), validators.usernameMinLength({
+          username_length_min: props.options.length_min
+        }), validators.usernameMaxLength({
+          username_length_max: props.options.length_max
+        })]
+      },
+
+      isLoading: false
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'getHelpText',
+    value: function getHelpText() {
+      var phrases = [];
+
+      if (this.props.options.changes_left > 0) {
+        var message = ngettext("You can change your username %(changes_left)s more time.", "You can change your username %(changes_left)s more times.", this.props.options.changes_left);
+
+        phrases.push(interpolate(message, {
+          'changes_left': this.props.options.changes_left
+        }, true));
+      }
+
+      if (this.props.user.acl.name_changes_expire > 0) {
+        var message = ngettext("Used changes redeem after %(name_changes_expire)s day.", "Used changes redeem after %(name_changes_expire)s days.", this.props.user.acl.name_changes_expire);
+
+        phrases.push(interpolate(message, {
+          'name_changes_expire': this.props.user.acl.name_changes_expire
+        }, true));
+      }
+
+      return phrases.length ? phrases.join(' ') : null;
+    }
+  }, {
+    key: 'clean',
+    value: function clean() {
+      var errors = this.validate();
+      if (errors.username) {
+        _snackbar2.default.error(errors.username[0]);
+        return false;
+      }if (this.state.username.trim() === this.props.user.username) {
+        _snackbar2.default.info(gettext("Your new username is same as current one."));
+        return false;
+      } else {
+        return true;
+      }
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(this.props.user.api_url.username, {
+        'username': this.state.username
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess(success) {
+      this.setState({
+        'username': ''
+      });
+
+      this.props.complete(success.username, success.slug, success.options);
+    }
+  }, {
+    key: 'handleError',
+    value: function handleError(rejection) {
+      _snackbar2.default.apiError(rejection);
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'form',
+        { onSubmit: this.handleSubmit, className: 'form-horizontal' },
+        _react2.default.createElement(
+          'div',
+          { className: 'panel panel-default panel-form' },
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-heading' },
+            _react2.default.createElement(
+              'h3',
+              { className: 'panel-title' },
+              gettext("Change username")
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-body' },
+            _react2.default.createElement(
+              _formGroup2.default,
+              { label: gettext("New username"), 'for': 'id_username',
+                labelClass: 'col-sm-4', controlClass: 'col-sm-8',
+                helpText: this.getHelpText() },
+              _react2.default.createElement('input', { type: 'text', id: 'id_username', className: 'form-control',
+                disabled: this.state.isLoading,
+                onChange: this.bindInput('username'),
+                value: this.state.username })
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-footer' },
+            _react2.default.createElement(
+              'div',
+              { className: 'row' },
+              _react2.default.createElement(
+                'div',
+                { className: 'col-sm-8 col-sm-offset-4' },
+                _react2.default.createElement(
+                  _button2.default,
+                  { className: 'btn-primary', loading: this.state.isLoading },
+                  gettext("Change username")
+                )
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_form2.default);
+
+exports.default = _class;
+
+},{"../../../services/ajax":143,"../../../services/snackbar":152,"../../../utils/validators":163,"../../button":57,"../../form":70,"../../form-group":69,"react":"react"}],78:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _moment = require('moment');
+
+var _moment2 = _interopRequireDefault(_moment);
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _formLoading = require('./form-loading');
+
+var _formLoading2 = _interopRequireDefault(_formLoading);
+
+var _formLocked = require('./form-locked');
+
+var _formLocked2 = _interopRequireDefault(_formLocked);
+
+var _form = require('./form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _usernameHistory = require('../../username-history');
+
+var _usernameHistory2 = _interopRequireDefault(_usernameHistory);
+
+var _index = require('../../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _usernameHistory3 = require('../../../reducers/username-history');
+
+var _users = require('../../../reducers/users');
+
+var _ajax = require('../../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _pageTitle = require('../../../services/page-title');
+
+var _pageTitle2 = _interopRequireDefault(_pageTitle);
+
+var _snackbar = require('../../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _store = require('../../../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.onComplete = function (username, slug, options) {
+      _this.setState({
+        options: options
+      });
+
+      _store2.default.dispatch((0, _usernameHistory3.addNameChange)({ username: username, slug: slug }, _this.props.user, _this.props.user));
+      _store2.default.dispatch((0, _users.updateUsername)(_this.props.user, username, slug));
+
+      _snackbar2.default.success(gettext("Your username has been changed successfully."));
+    };
+
+    _this.state = {
+      isLoaded: false,
+      options: null
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'componentDidMount',
+    value: function componentDidMount() {
+      var _this2 = this;
+
+      _pageTitle2.default.set({
+        title: gettext("Change username"),
+        parent: gettext("Change your options")
+      });
+
+      Promise.all([_ajax2.default.get(this.props.user.api_url.username), _ajax2.default.get(_index2.default.get('USERNAME_CHANGES_API'), { user: this.props.user.id })]).then(function (data) {
+        _store2.default.dispatch((0, _usernameHistory3.dehydrate)(data[1].results));
+
+        _this2.setState({
+          isLoaded: true,
+          options: {
+            changes_left: data[0].changes_left,
+            length_min: data[0].length_min,
+            length_max: data[0].length_max,
+            next_on: data[0].next_on ? (0, _moment2.default)(data[0].next_on) : null
+          }
+        });
+      });
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'getChangeForm',
+
+    /* jshint ignore:end */
+
+    value: function getChangeForm() {
+      if (this.state.isLoaded) {
+        if (this.state.options.changes_left > 0) {
+          /* jshint ignore:start */
+          return _react2.default.createElement(_form2.default, { user: this.props.user,
+            options: this.state.options,
+            complete: this.onComplete });
+          /* jshint ignore:end */
+        } else {
+            /* jshint ignore:start */
+            return _react2.default.createElement(_formLocked2.default, { options: this.state.options });
+            /* jshint ignore:end */
+          }
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(_formLoading2.default, null);
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        null,
+        this.getChangeForm(),
+        _react2.default.createElement(_usernameHistory2.default, { isLoaded: this.state.isLoaded,
+          changes: this.props['username-history'] })
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../../index":136,"../../../reducers/username-history":141,"../../../reducers/users":142,"../../../services/ajax":143,"../../../services/page-title":150,"../../../services/snackbar":152,"../../../services/store":153,"../../username-history":119,"./form":77,"./form-loading":75,"./form-locked":76,"moment":"moment","react":"react"}],79:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('../form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _formGroup = require('../form-group');
+
+var _formGroup2 = _interopRequireDefault(_formGroup);
+
+var _select = require('../select');
+
+var _select2 = _interopRequireDefault(_select);
+
+var _yesNoSwitch = require('../yes-no-switch');
+
+var _yesNoSwitch2 = _interopRequireDefault(_yesNoSwitch);
+
+var _auth = require('../../reducers/auth');
+
+var _ajax = require('../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _pageTitle = require('../../services/page-title');
+
+var _pageTitle2 = _interopRequireDefault(_pageTitle);
+
+var _snackbar = require('../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _store = require('../../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_Form) {
+  _inherits(_class, _Form);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.state = {
+      'isLoading': false,
+
+      'is_hiding_presence': props.user.is_hiding_presence,
+      'limits_private_thread_invites_to': props.user.limits_private_thread_invites_to,
+      'subscribe_to_started_threads': props.user.subscribe_to_started_threads,
+      'subscribe_to_replied_threads': props.user.subscribe_to_replied_threads,
+
+      'errors': {}
+    };
+
+    _this.privateThreadInvitesChoices = [{
+      'value': 0,
+      'icon': 'help_outline',
+      'label': gettext('Everybody')
+    }, {
+      'value': 1,
+      'icon': 'done_all',
+      'label': gettext('Users I follow')
+    }, {
+      'value': 2,
+      'icon': 'highlight_off',
+      'label': gettext('Nobody')
+    }];
+
+    _this.subscribeToChoices = [{
+      'value': 0,
+      'icon': 'bookmark_border',
+      'label': gettext('No')
+    }, {
+      'value': 1,
+      'icon': 'bookmark',
+      'label': gettext('Bookmark')
+    }, {
+      'value': 2,
+      'icon': 'mail',
+      'label': gettext('Bookmark with e-mail notification')
+    }];
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(this.props.user.api_url.options, {
+        is_hiding_presence: this.state.is_hiding_presence,
+        limits_private_thread_invites_to: this.state.limits_private_thread_invites_to,
+        subscribe_to_started_threads: this.state.subscribe_to_started_threads,
+        subscribe_to_replied_threads: this.state.subscribe_to_replied_threads
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess() {
+      _store2.default.dispatch((0, _auth.patchUser)({
+        is_hiding_presence: this.state.is_hiding_presence,
+        limits_private_thread_invites_to: this.state.limits_private_thread_invites_to,
+        subscribe_to_started_threads: this.state.subscribe_to_started_threads,
+        subscribe_to_replied_threads: this.state.subscribe_to_replied_threads
+      }));
+      _snackbar2.default.success(gettext("Your forum options have been changed."));
+    }
+  }, {
+    key: 'handleError',
+    value: function handleError(rejection) {
+      if (rejection.status === 400) {
+        _snackbar2.default.error(gettext("Please reload page and try again."));
+      } else {
+        _snackbar2.default.apiError(rejection);
+      }
+    }
+  }, {
+    key: 'componentDidMount',
+    value: function componentDidMount() {
+      _pageTitle2.default.set({
+        title: gettext("Forum options"),
+        parent: gettext("Change your options")
+      });
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'form',
+        { onSubmit: this.handleSubmit, className: 'form-horizontal' },
+        _react2.default.createElement(
+          'div',
+          { className: 'panel panel-default panel-form' },
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-heading' },
+            _react2.default.createElement(
+              'h3',
+              { className: 'panel-title' },
+              gettext("Change forum options")
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-body' },
+            _react2.default.createElement(
+              'fieldset',
+              null,
+              _react2.default.createElement(
+                'legend',
+                null,
+                gettext("Privacy settings")
+              ),
+              _react2.default.createElement(
+                _formGroup2.default,
+                { label: gettext("Hide my presence"),
+                  helpText: gettext("If you hide your presence, only members with permission to see hidden users will see when you are online."),
+                  'for': 'id_is_hiding_presence',
+                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
+                _react2.default.createElement(_yesNoSwitch2.default, { id: 'id_is_hiding_presence',
+                  disabled: this.state.isLoading,
+                  iconOn: 'visibility_off',
+                  iconOff: 'visibility',
+                  labelOn: gettext("Hide my presence from other users"),
+                  labelOff: gettext("Show my presence to other users"),
+                  onChange: this.bindInput('is_hiding_presence'),
+                  value: this.state.is_hiding_presence })
+              ),
+              _react2.default.createElement(
+                _formGroup2.default,
+                { label: gettext("Private thread invitations"),
+                  'for': 'id_limits_private_thread_invites_to',
+                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
+                _react2.default.createElement(_select2.default, { id: 'id_limits_private_thread_invites_to',
+                  disabled: this.state.isLoading,
+                  onChange: this.bindInput('limits_private_thread_invites_to'),
+                  value: this.state.limits_private_thread_invites_to,
+                  choices: this.privateThreadInvitesChoices })
+              )
+            ),
+            _react2.default.createElement(
+              'fieldset',
+              null,
+              _react2.default.createElement(
+                'legend',
+                null,
+                gettext("Automatic subscriptions")
+              ),
+              _react2.default.createElement(
+                _formGroup2.default,
+                { label: gettext("Threads I start"),
+                  'for': 'id_subscribe_to_started_threads',
+                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
+                _react2.default.createElement(_select2.default, { id: 'id_subscribe_to_started_threads',
+                  disabled: this.state.isLoading,
+                  onChange: this.bindInput('subscribe_to_started_threads'),
+                  value: this.state.subscribe_to_started_threads,
+                  choices: this.subscribeToChoices })
+              ),
+              _react2.default.createElement(
+                _formGroup2.default,
+                { label: gettext("Threads I reply to"),
+                  'for': 'id_subscribe_to_replied_threads',
+                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
+                _react2.default.createElement(_select2.default, { id: 'id_subscribe_to_replied_threads',
+                  disabled: this.state.isLoading,
+                  onChange: this.bindInput('subscribe_to_replied_threads'),
+                  value: this.state.subscribe_to_replied_threads,
+                  choices: this.subscribeToChoices })
+              )
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-footer' },
+            _react2.default.createElement(
+              'div',
+              { className: 'row' },
+              _react2.default.createElement(
+                'div',
+                { className: 'col-sm-8 col-sm-offset-4' },
+                _react2.default.createElement(
+                  _button2.default,
+                  { className: 'btn-primary', loading: this.state.isLoading },
+                  gettext("Save changes")
+                )
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_form2.default);
+
+exports.default = _class;
+
+},{"../../reducers/auth":137,"../../services/ajax":143,"../../services/page-title":150,"../../services/snackbar":152,"../../services/store":153,"../button":57,"../form":70,"../form-group":69,"../select":106,"../yes-no-switch":135,"react":"react"}],80:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CompactNav = exports.SideNav = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRouter = require('react-router');
+
+var _li = require('../li');
+
+var _li2 = _interopRequireDefault(_li);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+//jshint ignore:line
+
+//jshint ignore:line
+
+var SideNav = exports.SideNav = function (_React$Component) {
+  _inherits(SideNav, _React$Component);
+
+  function SideNav() {
+    _classCallCheck(this, SideNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(SideNav).apply(this, arguments));
+  }
+
+  _createClass(SideNav, [{
+    key: 'render',
+    value: function render() {
+      var _this2 = this;
+
+      // jshint ignore:start
+      return _react2.default.createElement(
+        'div',
+        { className: 'list-group nav-side' },
+        this.props.options.map(function (option) {
+          return _react2.default.createElement(
+            _reactRouter.Link,
+            { to: _this2.props.baseUrl + option.component + '/',
+              className: 'list-group-item',
+              activeClassName: 'active',
+              key: option.component },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              option.icon
+            ),
+            option.name
+          );
+        })
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return SideNav;
+}(_react2.default.Component);
+
+var CompactNav = exports.CompactNav = function (_React$Component2) {
+  _inherits(CompactNav, _React$Component2);
+
+  function CompactNav() {
+    _classCallCheck(this, CompactNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));
+  }
+
+  _createClass(CompactNav, [{
+    key: 'render',
+    value: function render() {
+      var _this4 = this;
+
+      // jshint ignore:start
+      return _react2.default.createElement(
+        'ul',
+        { className: 'dropdown-menu', role: 'menu' },
+        this.props.options.map(function (option) {
+          return _react2.default.createElement(
+            _li2.default,
+            { path: _this4.props.baseUrl + option.component + '/',
+              key: option.component },
+            _react2.default.createElement(
+              _reactRouter.Link,
+              { to: _this4.props.baseUrl + option.component + '/',
+                onClick: _this4.props.hideNav },
+              _react2.default.createElement(
+                'span',
+                { className: 'material-icon' },
+                option.icon
+              ),
+              option.name
+            )
+          );
+        })
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return CompactNav;
+}(_react2.default.Component);
+
+},{"../../index":136,"../li":71,"react":"react","react-router":"react-router"}],81:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.select = select;
+exports.paths = paths;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRedux = require('react-redux');
+
+var _dropdownToggle = require('../dropdown-toggle');
+
+var _dropdownToggle2 = _interopRequireDefault(_dropdownToggle);
+
+var _navs = require('./navs');
+
+var _forumOptions = require('./forum-options');
+
+var _forumOptions2 = _interopRequireDefault(_forumOptions);
+
+var _root = require('./change-username/root');
+
+var _root2 = _interopRequireDefault(_root);
+
+var _root3 = require('./sign-in-credentials/root');
+
+var _root4 = _interopRequireDefault(_root3);
+
+var _withDropdown = require('../with-dropdown');
+
+var _withDropdown2 = _interopRequireDefault(_withDropdown);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_WithDropdown) {
+  _inherits(_class, _WithDropdown);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'page page-options' },
+        _react2.default.createElement(
+          'div',
+          { className: 'page-header' },
+          _react2.default.createElement(
+            'div',
+            { className: 'container' },
+            _react2.default.createElement(
+              'h1',
+              { className: 'pull-left' },
+              gettext("Change your options")
+            ),
+            _react2.default.createElement(_dropdownToggle2.default, { toggleNav: this.toggleNav,
+              dropdown: this.state.dropdown })
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: this.getCompactNavClassName() },
+          _react2.default.createElement(_navs.CompactNav, { options: _index2.default.get('USER_OPTIONS'),
+            baseUrl: _index2.default.get('USERCP_URL'),
+            hideNav: this.hideNav })
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'div',
+            { className: 'row' },
+            _react2.default.createElement(
+              'div',
+              { className: 'col-md-3 hidden-xs hidden-sm' },
+              _react2.default.createElement(_navs.SideNav, { options: _index2.default.get('USER_OPTIONS'),
+                baseUrl: _index2.default.get('USERCP_URL') })
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'col-md-9' },
+              this.props.children
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_withDropdown2.default);
+
+exports.default = _class;
+function select(store) {
+  return {
+    'tick': store.tick.tick,
+    'user': store.auth.user,
+    'username-history': store['username-history']
+  };
+}
+
+function paths() {
+  return [{
+    path: _index2.default.get('USERCP_URL') + 'forum-options/',
+    component: (0, _reactRedux.connect)(select)(_forumOptions2.default)
+  }, {
+    path: _index2.default.get('USERCP_URL') + 'change-username/',
+    component: (0, _reactRedux.connect)(select)(_root2.default)
+  }, {
+    path: _index2.default.get('USERCP_URL') + 'sign-in-credentials/',
+    component: (0, _reactRedux.connect)(select)(_root4.default)
+  }];
+}
+
+},{"../../index":136,"../dropdown-toggle":68,"../with-dropdown":134,"./change-username/root":78,"./forum-options":79,"./navs":80,"./sign-in-credentials/root":84,"react":"react","react-redux":"react-redux"}],82:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('../../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('../../form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _formGroup = require('../../form-group');
+
+var _formGroup2 = _interopRequireDefault(_formGroup);
+
+var _ajax = require('../../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _validators = require('../../../utils/validators');
+
+var validators = _interopRequireWildcard(_validators);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_Form) {
+  _inherits(_class, _Form);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.state = {
+      new_email: '',
+      password: '',
+
+      validators: {
+        new_email: [validators.email()],
+        password: []
+      },
+
+      isLoading: false
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'clean',
+    value: function clean() {
+      var errors = this.validate();
+      var lengths = [this.state.new_email.trim().length, this.state.password.trim().length];
+
+      if (lengths.indexOf(0) !== -1) {
+        _snackbar2.default.error(gettext("Fill out all fields."));
+        return false;
+      }
+
+      if (errors.new_email) {
+        _snackbar2.default.error(errors.new_email[0]);
+        return false;
+      }
+
+      return true;
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(this.props.user.api_url.change_email, {
+        new_email: this.state.new_email,
+        password: this.state.password
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess(response) {
+      this.setState({
+        new_email: '',
+        password: ''
+      });
+
+      _snackbar2.default.success(response.detail);
+    }
+  }, {
+    key: 'handleError',
+    value: function handleError(rejection) {
+      if (rejection.status === 400) {
+        if (rejection.new_email) {
+          _snackbar2.default.error(rejection.new_email);
+        } else {
+          _snackbar2.default.error(rejection.password);
+        }
+      } else {
+        _snackbar2.default.apiError(rejection);
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'form',
+        { onSubmit: this.handleSubmit, className: 'form-horizontal' },
+        _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),
+        _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),
+        _react2.default.createElement(
+          'div',
+          { className: 'panel panel-default panel-form' },
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-heading' },
+            _react2.default.createElement(
+              'h3',
+              { className: 'panel-title' },
+              gettext("Change e-mail address")
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-body' },
+            _react2.default.createElement(
+              _formGroup2.default,
+              { label: gettext("New e-mail"), 'for': 'id_new_email',
+                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
+              _react2.default.createElement('input', { type: 'text', id: 'id_new_email', className: 'form-control',
+                disabled: this.state.isLoading,
+                onChange: this.bindInput('new_email'),
+                value: this.state.new_email })
+            ),
+            _react2.default.createElement('hr', null),
+            _react2.default.createElement(
+              _formGroup2.default,
+              { label: gettext("Your current password"), 'for': 'id_password',
+                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
+              _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',
+                disabled: this.state.isLoading,
+                onChange: this.bindInput('password'),
+                value: this.state.password })
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-footer' },
+            _react2.default.createElement(
+              'div',
+              { className: 'row' },
+              _react2.default.createElement(
+                'div',
+                { className: 'col-sm-8 col-sm-offset-4' },
+                _react2.default.createElement(
+                  _button2.default,
+                  { className: 'btn-primary', loading: this.state.isLoading },
+                  gettext("Change e-mail")
+                )
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_form2.default);
+
+exports.default = _class;
+
+},{"../../../services/ajax":143,"../../../services/snackbar":152,"../../../utils/validators":163,"../../button":57,"../../form":70,"../../form-group":69,"react":"react"}],83:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('../../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('../../form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _formGroup = require('../../form-group');
+
+var _formGroup2 = _interopRequireDefault(_formGroup);
+
+var _index = require('../../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _ajax = require('../../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _validators = require('../../../utils/validators');
+
+var validators = _interopRequireWildcard(_validators);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_Form) {
+  _inherits(_class, _Form);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.state = {
+      new_password: '',
+      repeat_password: '',
+      password: '',
+
+      validators: {
+        new_password: [validators.passwordMinLength(_index2.default.get('SETTINGS'))],
+        repeat_password: [],
+        password: []
+      },
+
+      isLoading: false
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'clean',
+    value: function clean() {
+      var errors = this.validate();
+      var lengths = [this.state.new_password.trim().length, this.state.repeat_password.trim().length, this.state.password.trim().length];
+
+      if (lengths.indexOf(0) !== -1) {
+        _snackbar2.default.error(gettext("Fill out all fields."));
+        return false;
+      }
+
+      if (errors.new_password) {
+        _snackbar2.default.error(errors.new_password[0]);
+        return false;
+      }
+
+      if (this.state.new_password.trim() !== this.state.repeat_password.trim()) {
+        _snackbar2.default.error(gettext("New passwords are different."));
+        return false;
+      }
+
+      return true;
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(this.props.user.api_url.change_password, {
+        new_password: this.state.new_password,
+        password: this.state.password
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess(response) {
+      this.setState({
+        new_password: '',
+        repeat_password: '',
+        password: ''
+      });
+
+      _snackbar2.default.success(response.detail);
+    }
+  }, {
+    key: 'handleError',
+    value: function handleError(rejection) {
+      if (rejection.status === 400) {
+        if (rejection.new_password) {
+          _snackbar2.default.error(rejection.new_password);
+        } else {
+          _snackbar2.default.error(rejection.password);
+        }
+      } else {
+        _snackbar2.default.apiError(rejection);
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'form',
+        { onSubmit: this.handleSubmit, className: 'form-horizontal' },
+        _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),
+        _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),
+        _react2.default.createElement(
+          'div',
+          { className: 'panel panel-default panel-form' },
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-heading' },
+            _react2.default.createElement(
+              'h3',
+              { className: 'panel-title' },
+              gettext("Change password")
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-body' },
+            _react2.default.createElement(
+              _formGroup2.default,
+              { label: gettext("New password"), 'for': 'id_new_password',
+                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
+              _react2.default.createElement('input', { type: 'password', id: 'id_new_password', className: 'form-control',
+                disabled: this.state.isLoading,
+                onChange: this.bindInput('new_password'),
+                value: this.state.new_password })
+            ),
+            _react2.default.createElement(
+              _formGroup2.default,
+              { label: gettext("Repeat password"), 'for': 'id_repeat_password',
+                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
+              _react2.default.createElement('input', { type: 'password', id: 'id_repeat_password', className: 'form-control',
+                disabled: this.state.isLoading,
+                onChange: this.bindInput('repeat_password'),
+                value: this.state.repeat_password })
+            ),
+            _react2.default.createElement('hr', null),
+            _react2.default.createElement(
+              _formGroup2.default,
+              { label: gettext("Your current password"), 'for': 'id_password',
+                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },
+              _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',
+                disabled: this.state.isLoading,
+                onChange: this.bindInput('password'),
+                value: this.state.password })
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-footer' },
+            _react2.default.createElement(
+              'div',
+              { className: 'row' },
+              _react2.default.createElement(
+                'div',
+                { className: 'col-sm-8 col-sm-offset-4' },
+                _react2.default.createElement(
+                  _button2.default,
+                  { className: 'btn-primary', loading: this.state.isLoading },
+                  gettext("Change password")
+                )
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_form2.default);
+
+exports.default = _class;
+
+},{"../../../index":136,"../../../services/ajax":143,"../../../services/snackbar":152,"../../../utils/validators":163,"../../button":57,"../../form":70,"../../form-group":69,"react":"react"}],84:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _changeEmail = require('./change-email');
+
+var _changeEmail2 = _interopRequireDefault(_changeEmail);
+
+var _changePassword = require('./change-password');
+
+var _changePassword2 = _interopRequireDefault(_changePassword);
+
+var _index = require('../../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _pageTitle = require('../../../services/page-title');
+
+var _pageTitle2 = _interopRequireDefault(_pageTitle);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'componentDidMount',
+    value: function componentDidMount() {
+      _pageTitle2.default.set({
+        title: gettext("Change email or password"),
+        parent: gettext("Change your options")
+      });
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        null,
+        _react2.default.createElement(_changeEmail2.default, { user: this.props.user }),
+        _react2.default.createElement(_changePassword2.default, { user: this.props.user }),
+        _react2.default.createElement(
+          'p',
+          { className: 'message-line' },
+          _react2.default.createElement(
+            'span',
+            { className: 'material-icon' },
+            'warning'
+          ),
+          _react2.default.createElement(
+            'a',
+            { href: _index2.default.get('FORGOTTEN_PASSWORD_URL') },
+            gettext("Change forgotten password")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../../index":136,"../../../services/page-title":150,"./change-email":82,"./change-password":83,"react":"react"}],85:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _loader = require('./loader');
+
+var _loader2 = _interopRequireDefault(_loader);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'panel-body panel-body-loading' },
+        _react2.default.createElement(_loader2.default, { className: 'loader loader-spaced' })
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"./loader":72,"react":"react"}],86:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require("react");
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: "getHelpText",
+    value: function getHelpText() {
+      if (this.props.helpText) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          "p",
+          { className: "help-block" },
+          this.props.helpText
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: "render",
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        "div",
+        { className: "panel-body panel-message-body" },
+        _react2.default.createElement(
+          "div",
+          { className: "message-icon" },
+          _react2.default.createElement(
+            "span",
+            { className: "material-icon" },
+            this.props.icon || 'info_outline'
+          )
+        ),
+        _react2.default.createElement(
+          "div",
+          { className: "message-body" },
+          _react2.default.createElement(
+            "p",
+            { className: "lead" },
+            this.props.message
+          ),
+          this.getHelpText()
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],87:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.LABELS = exports.STYLES = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _zxcvbn = require('../services/zxcvbn');
+
+var _zxcvbn2 = _interopRequireDefault(_zxcvbn);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var STYLES = exports.STYLES = ['progress-bar-danger', 'progress-bar-warning', 'progress-bar-warning', 'progress-bar-primary', 'progress-bar-success'];
+
+var LABELS = exports.LABELS = [gettext("Entered password is very weak."), gettext("Entered password is weak."), gettext("Entered password is average."), gettext("Entered password is strong."), gettext("Entered password is very strong.")];
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this._score = 0;
+    _this._password = null;
+    _this._inputs = [];
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'getScore',
+    value: function getScore(password, inputs) {
+      var _this2 = this;
+
+      var cacheStale = false;
+
+      if (password.trim() !== this._password) {
+        cacheStale = true;
+      }
+
+      if (inputs.length !== this._inputs.length) {
+        cacheStale = true;
+      } else {
+        inputs.map(function (value, i) {
+          if (value.trim() !== _this2._inputs[i]) {
+            cacheStale = true;
+          }
+        });
+      }
+
+      if (cacheStale) {
+        this._score = _zxcvbn2.default.scorePassword(password, inputs);
+        this._password = password.trim();
+        this._inputs = inputs.map(function (value) {
+          return value.trim();
+        });
+      }
+
+      return this._score;
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      var score = this.getScore(this.props.password, this.props.inputs);
+
+      return _react2.default.createElement(
+        'div',
+        { className: 'help-block password-strength' },
+        _react2.default.createElement(
+          'div',
+          { className: 'progress' },
+          _react2.default.createElement(
+            'div',
+            { className: "progress-bar " + STYLES[score],
+              style: { width: 20 + 20 * score + '%' },
+              role: 'progress-bar',
+              'aria-valuenow': score,
+              'aria-valuemin': '0',
+              'aria-valuemax': '4' },
+            _react2.default.createElement(
+              'span',
+              { className: 'sr-only' },
+              LABELS[score]
+            )
+          )
+        ),
+        _react2.default.createElement(
+          'p',
+          { className: 'text-small' },
+          LABELS[score]
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../services/zxcvbn":154,"react":"react"}],88:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _avatar = require('../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _dropdownToggle = require('../dropdown-toggle');
+
+var _dropdownToggle2 = _interopRequireDefault(_dropdownToggle);
+
+var _followButton = require('./follow-button');
+
+var _followButton2 = _interopRequireDefault(_followButton);
+
+var _nav = require('./moderation/nav');
+
+var _nav2 = _interopRequireDefault(_nav);
+
+var _userStatus = require('../user-status');
+
+var _userStatus2 = _interopRequireDefault(_userStatus);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getUserStatus',
+    value: function getUserStatus() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'li',
+        { className: 'user-status-display' },
+        _react2.default.createElement(
+          _userStatus2.default,
+          { user: this.props.profile, status: this.props.profile.status },
+          _react2.default.createElement(_userStatus.StatusIcon, { user: this.props.profile,
+            status: this.props.profile.status }),
+          _react2.default.createElement(_userStatus.StatusLabel, { user: this.props.profile,
+            status: this.props.profile.status,
+            className: 'status-label' })
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'getUserRank',
+    value: function getUserRank() {
+      if (this.props.profile.rank.is_tab) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'li',
+          { className: 'user-rank' },
+          _react2.default.createElement(
+            'a',
+            { href: this.props.profile.rank.absolute_url, className: 'item-title' },
+            this.props.profile.rank.name
+          )
+        );
+        /* jshint ignore:end */
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'li',
+            { className: 'user-rank' },
+            _react2.default.createElement(
+              'span',
+              { className: 'item-title' },
+              this.props.profile.rank.name
+            )
+          );
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'getUserTitle',
+    value: function getUserTitle() {
+      if (this.props.profile.title) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'li',
+          { className: 'user-title' },
+          this.props.profile.title
+        );
+        /* jshint ignore:end */
+      } else if (this.props.profile.rank.title) {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'li',
+            { className: 'user-title' },
+            this.props.profile.rank.title
+          );
+          /* jshint ignore:end */
+        } else {
+            return null;
+          }
+    }
+  }, {
+    key: 'getJoinedOn',
+    value: function getJoinedOn() {
+      /* jshint ignore:start */
+      var title = interpolate(gettext("Joined on %(joined_on)s"), {
+        'joined_on': this.props.profile.joined_on.format('LL, LT')
+      }, true);
+
+      var age = interpolate(gettext("Joined %(joined_on)s"), {
+        'joined_on': this.props.profile.joined_on.fromNow()
+      }, true);
+
+      return _react2.default.createElement(
+        'li',
+        { className: 'user-joined-on' },
+        _react2.default.createElement(
+          'abbr',
+          { title: title },
+          age
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'getEmail',
+    value: function getEmail() {
+      if (this.props.profile.email) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'li',
+          { className: 'user-email' },
+          _react2.default.createElement(
+            'a',
+            { href: 'mailto:' + this.props.profile.email, className: 'item-title' },
+            this.props.profile.email
+          )
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getFollowButton',
+    value: function getFollowButton() {
+      if (this.props.profile.acl.can_follow) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(_followButton2.default, { className: 'btn btn-aligned hidden-xs hidden-sm',
+          profile: this.props.profile });
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getModerationButton',
+    value: function getModerationButton() {
+      if (this.props.profile.acl.can_moderate) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'div',
+          { className: 'btn-group btn-aligned hidden-xs hidden-sm' },
+          _react2.default.createElement(
+            'button',
+            { className: 'btn btn-default btn-moderate dropdown-toggle',
+              type: 'button',
+              'data-toggle': 'dropdown',
+              'aria-haspopup': 'true',
+              'aria-expanded': 'false' },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              'tonality'
+            ),
+            gettext("Moderation")
+          ),
+          _react2.default.createElement(_nav2.default, { profile: this.props.profile })
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'page-header' },
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'div',
+            { className: 'row' },
+            _react2.default.createElement(
+              'div',
+              { className: 'col-md-9 col-md-offset-3' },
+              _react2.default.createElement(
+                'h1',
+                { className: 'pull-left' },
+                _react2.default.createElement(_avatar2.default, { user: this.props.profile, size: '100' }),
+                _react2.default.createElement(
+                  'span',
+                  { className: 'user-name' },
+                  this.props.profile.username
+                )
+              ),
+              this.getFollowButton(),
+              this.getModerationButton(),
+              _react2.default.createElement(_dropdownToggle2.default, { toggleNav: this.props.toggleNav,
+                dropdown: this.props.dropdown })
+            )
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'header-stats' },
+          _react2.default.createElement(
+            'div',
+            { className: 'container' },
+            _react2.default.createElement(
+              'div',
+              { className: 'row' },
+              _react2.default.createElement(
+                'div',
+                { className: 'col-md-9 col-md-offset-3' },
+                _react2.default.createElement(
+                  'ul',
+                  { className: 'list-inline' },
+                  this.getUserStatus(),
+                  this.getUserRank(),
+                  this.getUserTitle(),
+                  this.getJoinedOn(),
+                  this.getEmail()
+                )
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../avatar":55,"../dropdown-toggle":68,"../user-status":118,"./follow-button":90,"./moderation/nav":96,"react":"react"}],89:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _moment = require('moment');
+
+var _moment2 = _interopRequireDefault(_moment);
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _panelLoader = require('../panel-loader');
+
+var _panelLoader2 = _interopRequireDefault(_panelLoader);
+
+var _panelMessage = require('../panel-message');
+
+var _panelMessage2 = _interopRequireDefault(_panelMessage);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _polls = require('../../services/polls');
+
+var _polls2 = _interopRequireDefault(_polls);
+
+var _pageTitle = require('../../services/page-title');
+
+var _pageTitle2 = _interopRequireDefault(_pageTitle);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.update = function (ban) {
+      if (ban.expires_on) {
+        ban.expires_on = (0, _moment2.default)(ban.expires_on);
+      }
+
+      _this.setState({
+        isLoaded: true,
+        error: null,
+
+        ban: ban
+      });
+    };
+
+    _this.error = function (error) {
+      _this.setState({
+        isLoaded: true,
+        error: error.detail,
+        ban: null
+      });
+    };
+
+    if (_index2.default.has('PROFILE_BAN')) {
+      _this.initWithPreloadedData(_index2.default.pop('PROFILE_BAN'));
+    } else {
+      _this.initWithoutPreloadedData();
+    }
+
+    _this.startPolling(props.profile.api_url.ban);
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'initWithPreloadedData',
+    value: function initWithPreloadedData(ban) {
+      if (ban.expires_on) {
+        ban.expires_on = (0, _moment2.default)(ban.expires_on);
+      }
+
+      this.state = {
+        isLoaded: true,
+        ban: ban
+      };
+    }
+  }, {
+    key: 'initWithoutPreloadedData',
+    value: function initWithoutPreloadedData() {
+      this.state = {
+        isLoaded: false
+      };
+    }
+  }, {
+    key: 'startPolling',
+    value: function startPolling(api) {
+      _polls2.default.start({
+        poll: 'ban-details',
+        url: api,
+        frequency: 90 * 1000,
+        update: this.update,
+        error: this.error
+      });
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'componentDidMount',
+
+    /* jshint ignore:end */
+
+    value: function componentDidMount() {
+      _pageTitle2.default.set({
+        title: gettext("Ban details"),
+        parent: this.props.profile.username
+      });
+    }
+  }, {
+    key: 'componentWillUnmount',
+    value: function componentWillUnmount() {
+      _polls2.default.stop('ban-details');
+    }
+  }, {
+    key: 'getUserMessage',
+    value: function getUserMessage() {
+      if (this.state.ban.user_message) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'div',
+          { className: 'panel-body ban-message ban-user-message' },
+          _react2.default.createElement(
+            'h4',
+            null,
+            gettext("User-shown ban message")
+          ),
+          _react2.default.createElement('div', { className: 'lead', dangerouslySetInnerHTML: {
+              __html: this.state.ban.user_message.html
+            } })
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getStaffMessage',
+    value: function getStaffMessage() {
+      if (this.state.ban.staff_message) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'div',
+          { className: 'panel-body ban-message ban-staff-message' },
+          _react2.default.createElement(
+            'h4',
+            null,
+            gettext("Team-shown ban message")
+          ),
+          _react2.default.createElement('div', { className: 'lead', dangerouslySetInnerHTML: {
+              __html: this.state.ban.staff_message.html
+            } })
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getExpirationMessage',
+    value: function getExpirationMessage() {
+      if (this.state.ban.expires_on) {
+        if (this.state.ban.expires_on.isAfter((0, _moment2.default)())) {
+          /* jshint ignore:start */
+          var _title = interpolate(gettext("This ban expires on %(expires_on)s."), {
+            'expires_on': this.state.ban.expires_on.format('LL, LT')
+          }, true);
+
+          var message = interpolate(gettext("This ban expires %(expires_on)s."), {
+            'expires_on': this.state.ban.expires_on.fromNow()
+          }, true);
+
+          return _react2.default.createElement(
+            'abbr',
+            { title: _title },
+            message
+          );
+          /* jshint ignore:end */
+        } else {
+            return gettext("This ban has expired.");
+          }
+      } else {
+        return interpolate(gettext("%(username)s's ban is permanent."), {
+          'username': this.props.profile.username
+        }, true);
+      }
+    }
+  }, {
+    key: 'getPanelBody',
+    value: function getPanelBody() {
+      if (this.state.ban) {
+        if (Object.keys(this.state.ban).length) {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'div',
+            null,
+            this.getUserMessage(),
+            this.getStaffMessage(),
+            _react2.default.createElement(
+              'div',
+              { className: 'panel-body ban-expires' },
+              _react2.default.createElement(
+                'h4',
+                null,
+                gettext("Ban expiration")
+              ),
+              _react2.default.createElement(
+                'p',
+                { className: 'lead' },
+                this.getExpirationMessage()
+              )
+            )
+          );
+          /* jshint ignore:end */
+        } else {
+            /* jshint ignore:start */
+            return _react2.default.createElement(
+              'div',
+              null,
+              _react2.default.createElement(_panelMessage2.default, { message: gettext("No ban is active at the moment.") })
+            );
+            /* jshint ignore:end */
+          }
+      } else if (this.state.error) {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'div',
+            null,
+            _react2.default.createElement(_panelMessage2.default, { icon: 'error_outline',
+              message: this.state.error })
+          );
+          /* jshint ignore:end */
+        } else {
+            /* jshint ignore:start */
+            return _react2.default.createElement(
+              'div',
+              null,
+              _react2.default.createElement(_panelLoader2.default, null)
+            );
+            /* jshint ignore:end */
+          }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'profile-ban-details' },
+        _react2.default.createElement(
+          'div',
+          { className: 'panel panel-default' },
+          _react2.default.createElement(
+            'div',
+            { className: 'panel-heading' },
+            _react2.default.createElement(
+              'h3',
+              { className: 'panel-title' },
+              gettext("Ban details")
+            )
+          ),
+          this.getPanelBody()
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../index":136,"../../services/page-title":150,"../../services/polls":151,"../panel-loader":85,"../panel-message":86,"moment":"moment","react":"react"}],90:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _profile = require('../../reducers/profile');
+
+var _ajax = require('../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _store = require('../../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.action = function () {
+      _this.setState({
+        isLoading: true
+      });
+
+      if (_this.props.profile.is_followed) {
+        _store2.default.dispatch((0, _profile.patchProfile)({
+          is_followed: false,
+          followers: _this.props.profile.followers - 1
+        }));
+      } else {
+        _store2.default.dispatch((0, _profile.patchProfile)({
+          is_followed: true,
+          followers: _this.props.profile.followers + 1
+        }));
+      }
+
+      _ajax2.default.post(_this.props.profile.api_url.follow).then(function (data) {
+        _this.setState({
+          isLoading: false
+        });
+
+        _store2.default.dispatch((0, _profile.patchProfile)(data));
+      }, function (rejection) {
+        _this.setState({
+          isLoading: false
+        });
+        _snackbar2.default.apiError(rejection);
+      });
+    };
+
+    _this.state = {
+      isLoading: false
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.props.profile.is_followed) {
+        return this.props.className + ' btn-default btn-following';
+      } else {
+        return this.props.className + ' btn-default btn-follow';
+      }
+    }
+  }, {
+    key: 'getIcon',
+    value: function getIcon() {
+      if (this.props.profile.is_followed) {
+        return 'favorite';
+      } else {
+        return 'favorite_border';
+      }
+    }
+  }, {
+    key: 'getLabel',
+    value: function getLabel() {
+      if (this.props.profile.is_followed) {
+        return gettext("Following");
+      } else {
+        return gettext("Follow");
+      }
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'render',
+
+    /* jshint ignore:end */
+
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        _button2.default,
+        { className: this.getClassName(),
+          disabled: this.state.isLoading,
+          onClick: this.action },
+        _react2.default.createElement(
+          'span',
+          { className: 'material-icon' },
+          this.getIcon()
+        ),
+        this.getLabel()
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../reducers/profile":138,"../../services/ajax":143,"../../services/snackbar":152,"../../services/store":153,"../button":57,"react":"react"}],91:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _search = require('../search');
+
+var _search2 = _interopRequireDefault(_search);
+
+var _root = require('../users-list/root');
+
+var _root2 = _interopRequireDefault(_root);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _users = require('../../reducers/users');
+
+var _ajax = require('../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _store = require('../../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+var _pageTitle = require('../../services/page-title');
+
+var _pageTitle2 = _interopRequireDefault(_pageTitle);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.loadMore = function () {
+      _this.setState({
+        isBusy: true
+      });
+
+      _this.loadUsers(_this.state.page + 1, _this.state.search);
+    };
+
+    _this.search = function (ev) {
+      _this.setState({
+        isLoaded: false,
+        isBusy: true,
+
+        search: ev.target.value,
+
+        count: 0,
+        more: 0,
+
+        page: 1,
+        pages: 1
+      });
+
+      _this.loadUsers(1, ev.target.value);
+    };
+
+    _this.setSpecialProps();
+
+    if (_index2.default.has(_this.PRELOADED_DATA_KEY)) {
+      _this.initWithPreloadedData(_index2.default.pop(_this.PRELOADED_DATA_KEY));
+    } else {
+      _this.initWithoutPreloadedData();
+    }
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'setSpecialProps',
+    value: function setSpecialProps() {
+      this.PRELOADED_DATA_KEY = 'PROFILE_FOLLOWERS';
+      this.TITLE = gettext('Followers');
+      this.API_FILTER = 'followers';
+    }
+  }, {
+    key: 'initWithPreloadedData',
+    value: function initWithPreloadedData(data) {
+      this.state = {
+        isLoaded: true,
+        isBusy: false,
+
+        search: '',
+
+        count: data.count,
+        more: data.more,
+
+        page: data.page,
+        pages: data.pages
+      };
+
+      _store2.default.dispatch((0, _users.dehydrate)(data.results));
+    }
+  }, {
+    key: 'initWithoutPreloadedData',
+    value: function initWithoutPreloadedData() {
+      this.state = {
+        isLoaded: false,
+        isBusy: false,
+
+        search: '',
+
+        count: 0,
+        more: 0,
+
+        page: 1,
+        pages: 1
+      };
+
+      this.loadUsers();
+    }
+  }, {
+    key: 'loadUsers',
+    value: function loadUsers() {
+      var _ajax$get,
+          _this2 = this;
+
+      var page = arguments.length <= 0 || arguments[0] === undefined ? 1 : arguments[0];
+      var search = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
+
+      _ajax2.default.get(_index2.default.get('USERS_API'), (_ajax$get = {}, _defineProperty(_ajax$get, this.API_FILTER, this.props.profile.id), _defineProperty(_ajax$get, 'name', search), _defineProperty(_ajax$get, 'page', page || 1), _ajax$get), 'user-' + this.API_FILTER).then(function (data) {
+        if (page === 1) {
+          _store2.default.dispatch((0, _users.dehydrate)(data.results));
+        } else {
+          _store2.default.dispatch((0, _users.append)(data.results));
+        }
+
+        _this2.setState({
+          isLoaded: true,
+          isBusy: false,
+
+          count: data.count,
+          more: data.more,
+
+          page: data.page,
+          pages: data.pages
+        });
+      }, function (rejection) {
+        _snackbar2.default.apiError(rejection);
+      });
+    }
+  }, {
+    key: 'componentDidMount',
+    value: function componentDidMount() {
+      _pageTitle2.default.set({
+        title: this.TITLE,
+        parent: this.props.profile.username
+      });
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'getLabel',
+
+    /* jshint ignore:end */
+
+    value: function getLabel() {
+      if (!this.state.isLoaded) {
+        return gettext('Loading...');
+      } else if (this.state.search) {
+        var message = ngettext("Found %(users)s user.", "Found %(users)s users.", this.state.count);
+
+        return interpolate(message, {
+          'users': this.state.count
+        }, true);
+      } else if (this.props.profile.id === this.props.user.id) {
+        var message = ngettext("You have %(users)s follower.", "You have %(users)s followers.", this.state.count);
+
+        return interpolate(message, {
+          'users': this.state.count
+        }, true);
+      } else {
+        var message = ngettext("%(username)s has %(users)s follower.", "%(username)s has %(users)s followers.", this.state.count);
+
+        return interpolate(message, {
+          'username': this.props.profile.username,
+          'users': this.state.count
+        }, true);
+      }
+    }
+  }, {
+    key: 'getEmptyMessage',
+    value: function getEmptyMessage() {
+      if (this.state.search) {
+        return gettext("Search returned no users matching specified criteria.");
+      } else if (this.props.user.id === this.props.profile.id) {
+        return gettext("You have no followers.");
+      } else {
+        return interpolate(gettext("%(username)s has no followers."), {
+          'username': this.props.profile.username
+        }, true);
+      }
+    }
+  }, {
+    key: 'getMoreButton',
+    value: function getMoreButton() {
+      if (this.state.more) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'div',
+          { className: 'pager-more' },
+          _react2.default.createElement(
+            _button2.default,
+            { loading: this.state.isBusy,
+              onClick: this.loadMore },
+            interpolate(gettext("Show more (%(more)s)"), {
+              'more': this.state.more
+            }, true)
+          )
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getListBody',
+    value: function getListBody() {
+      if (this.state.isLoaded && this.state.count === 0) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'p',
+          { className: 'lead' },
+          this.getEmptyMessage()
+        );
+        /* jshint ignore:end */
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'div',
+            null,
+            _react2.default.createElement(_root2.default, { isLoaded: this.state.isLoaded,
+              users: this.props.users,
+              showRank: true,
+              cols: 2 }),
+            this.getMoreButton()
+          );
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'getClassName',
+    value: function getClassName() {
+      return 'profile-' + this.API_FILTER;
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getClassName() },
+        _react2.default.createElement(
+          'nav',
+          { className: 'toolbar' },
+          _react2.default.createElement(
+            'h3',
+            { className: 'toolbar-left' },
+            this.getLabel()
+          ),
+          _react2.default.createElement(_search2.default, { className: 'toolbar-right',
+            value: this.state.search,
+            onChange: this.search,
+            placeholder: gettext("Search history...") })
+        ),
+        this.getListBody()
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../index":136,"../../reducers/users":142,"../../services/ajax":143,"../../services/page-title":150,"../../services/snackbar":152,"../../services/store":153,"../button":57,"../search":105,"../users-list/root":120,"react":"react"}],92:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _followers = require('./followers');
+
+var _followers2 = _interopRequireDefault(_followers);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+
+var _class = function (_Followers) {
+  _inherits(_class, _Followers);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'setSpecialProps',
+    value: function setSpecialProps() {
+      this.PRELOADED_DATA_KEY = 'PROFILE_FOLLOWS';
+      this.TITLE = gettext('Follows');
+      this.API_FILTER = 'follows';
+    }
+  }, {
+    key: 'getLabel',
+    value: function getLabel() {
+      if (!this.state.isLoaded) {
+        return gettext('Loading...');
+      } else if (this.state.search) {
+        var message = ngettext("Found %(users)s user.", "Found %(users)s users.", this.state.count);
+
+        return interpolate(message, {
+          'users': this.state.count
+        }, true);
+      } else if (this.props.profile.id === this.props.user.id) {
+        var message = ngettext("You are following %(users)s user.", "You are following %(users)s users.", this.state.count);
+
+        return interpolate(message, {
+          'users': this.state.count
+        }, true);
+      } else {
+        var message = ngettext("%(username)s is following %(users)s user.", "%(username)s is following %(users)s users.", this.state.count);
+
+        return interpolate(message, {
+          'username': this.props.profile.username,
+          'users': this.state.count
+        }, true);
+      }
+    }
+  }, {
+    key: 'getEmptyMessage',
+    value: function getEmptyMessage() {
+      if (this.state.search) {
+        return gettext("Search returned no users matching specified criteria.");
+      } else if (this.props.user.id === this.props.profile.id) {
+        return gettext("You are not following any users.");
+      } else {
+        return interpolate(gettext("%(username)s is not following any users."), {
+          'username': this.props.profile.username
+        }, true);
+      }
+    }
+  }]);
+
+  return _class;
+}(_followers2.default);
+
+exports.default = _class;
+
+},{"./followers":91,"react":"react"}],93:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('../../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('../../form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _formGroup = require('../../form-group');
+
+var _formGroup2 = _interopRequireDefault(_formGroup);
+
+var _modalLoader = require('../../modal-loader');
+
+var _modalLoader2 = _interopRequireDefault(_modalLoader);
+
+var _yesNoSwitch = require('../../yes-no-switch');
+
+var _yesNoSwitch2 = _interopRequireDefault(_yesNoSwitch);
+
+var _modalMessage = require('../../modal-message');
+
+var _modalMessage2 = _interopRequireDefault(_modalMessage);
+
+var _users = require('../../../reducers/users');
+
+var _ajax = require('../../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _store = require('../../../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_Form) {
+  _inherits(_class, _Form);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.state = {
+      isLoaded: false,
+      isLoading: false,
+      error: null,
+
+      is_avatar_locked: '',
+      avatar_lock_user_message: '',
+      avatar_lock_staff_message: ''
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'componentDidMount',
+    value: function componentDidMount() {
+      var _this2 = this;
+
+      _ajax2.default.get(this.props.profile.api_url.moderate_avatar).then(function (options) {
+        _this2.setState({
+          isLoaded: true,
+
+          is_avatar_locked: options.is_avatar_locked,
+          avatar_lock_user_message: options.avatar_lock_user_message || '',
+          avatar_lock_staff_message: options.avatar_lock_staff_message || ''
+        });
+      }, function (rejection) {
+        _this2.setState({
+          isLoaded: true,
+          error: rejection.detail
+        });
+      });
+    }
+  }, {
+    key: 'clean',
+    value: function clean() {
+      if (this.isValid()) {
+        return true;
+      } else {
+        _snackbar2.default.error(this.validate().username[0]);
+        return false;
+      }
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(this.props.profile.api_url.moderate_avatar, {
+        is_avatar_locked: this.state.is_avatar_locked,
+        avatar_lock_user_message: this.state.avatar_lock_user_message,
+        avatar_lock_staff_message: this.state.avatar_lock_staff_message
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess(apiResponse) {
+      _store2.default.dispatch((0, _users.updateAvatar)(this.props.profile, apiResponse.avatar_hash));
+      _snackbar2.default.success(gettext("Avatar controls have been changed."));
+    }
+  }, {
+    key: 'getFormBody',
+    value: function getFormBody() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'form',
+        { onSubmit: this.handleSubmit },
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-body' },
+          _react2.default.createElement(
+            _formGroup2.default,
+            { label: gettext("Lock avatar"),
+              helpText: gettext("Locking user avatar will prohibit user from changing his avatar and will reset his/her avatar to default one."),
+              'for': 'id_is_avatar_locked' },
+            _react2.default.createElement(_yesNoSwitch2.default, { id: 'id_is_avatar_locked',
+              disabled: this.state.isLoading,
+              iconOn: 'lock_outline',
+              iconOff: 'lock_open',
+              labelOn: gettext("Disallow user from changing avatar"),
+              labelOff: gettext("Allow user to change avatar"),
+              onChange: this.bindInput('is_avatar_locked'),
+              value: this.state.is_avatar_locked })
+          ),
+          _react2.default.createElement(
+            _formGroup2.default,
+            { label: gettext("User message"),
+              helpText: gettext("Optional message for user explaining why he/she is prohibited form changing avatar."),
+              'for': 'id_avatar_lock_user_message' },
+            _react2.default.createElement('textarea', { id: 'id_avatar_lock_user_message',
+              className: 'form-control',
+              rows: '4',
+              disabled: this.state.isLoading,
+              onChange: this.bindInput('avatar_lock_user_message'),
+              value: this.state.avatar_lock_user_message })
+          ),
+          _react2.default.createElement(
+            _formGroup2.default,
+            { label: gettext("Staff message"),
+              helpText: gettext("Optional message for forum team members explaining why user is prohibited form changing avatar."),
+              'for': 'id_avatar_lock_staff_message' },
+            _react2.default.createElement('textarea', { id: 'id_avatar_lock_staff_message',
+              className: 'form-control',
+              rows: '4',
+              disabled: this.state.isLoading,
+              onChange: this.bindInput('avatar_lock_staff_message'),
+              value: this.state.avatar_lock_staff_message })
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-footer' },
+          _react2.default.createElement(
+            'button',
+            { type: 'button', className: 'btn btn-default', 'data-dismiss': 'modal' },
+            gettext("Close")
+          ),
+          _react2.default.createElement(
+            _button2.default,
+            { className: 'btn-primary', loading: this.state.isLoading },
+            gettext("Save changes")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'getModalBody',
+    value: function getModalBody() {
+      if (this.state.error) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(_modalMessage2.default, { icon: 'remove_circle_outline',
+          message: this.state.error });
+        /* jshint ignore:end */
+      } else if (this.state.isLoaded) {
+          return this.getFormBody();
+        } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(_modalLoader2.default, null);
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.state.error) {
+        return "modal-dialog modal-message modal-avatar-controls";
+      } else {
+        return "modal-dialog modal-avatar-controls";
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getClassName(),
+          role: 'document' },
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-content' },
+          _react2.default.createElement(
+            'div',
+            { className: 'modal-header' },
+            _react2.default.createElement(
+              'button',
+              { type: 'button', className: 'close', 'data-dismiss': 'modal',
+                'aria-label': gettext("Close") },
+              _react2.default.createElement(
+                'span',
+                { 'aria-hidden': 'true' },
+                '×'
+              )
+            ),
+            _react2.default.createElement(
+              'h4',
+              { className: 'modal-title' },
+              gettext("Avatar controls")
+            )
+          ),
+          this.getModalBody()
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_form2.default);
+
+exports.default = _class;
+
+},{"../../../reducers/users":142,"../../../services/ajax":143,"../../../services/snackbar":152,"../../../services/store":153,"../../button":57,"../../form":70,"../../form-group":69,"../../modal-loader":73,"../../modal-message":74,"../../yes-no-switch":135,"react":"react"}],94:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('../../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('../../form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _formGroup = require('../../form-group');
+
+var _formGroup2 = _interopRequireDefault(_formGroup);
+
+var _modalLoader = require('../../modal-loader');
+
+var _modalLoader2 = _interopRequireDefault(_modalLoader);
+
+var _modalMessage = require('../../modal-message');
+
+var _modalMessage2 = _interopRequireDefault(_modalMessage);
+
+var _index = require('../../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _usernameHistory = require('../../../reducers/username-history');
+
+var _users = require('../../../reducers/users');
+
+var _ajax = require('../../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _store = require('../../../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+var _validators = require('../../../utils/validators');
+
+var validators = _interopRequireWildcard(_validators);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_Form) {
+  _inherits(_class, _Form);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.state = {
+      isLoaded: false,
+      isLoading: false,
+      error: null,
+
+      username: '',
+      validators: {
+        username: [validators.usernameContent(), validators.usernameMinLength(_index2.default.get('SETTINGS')), validators.usernameMaxLength(_index2.default.get('SETTINGS'))]
+      }
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'componentDidMount',
+    value: function componentDidMount() {
+      var _this2 = this;
+
+      _ajax2.default.get(this.props.profile.api_url.moderate_username).then(function () {
+        _this2.setState({
+          isLoaded: true
+        });
+      }, function (rejection) {
+        _this2.setState({
+          isLoaded: true,
+          error: rejection.detail
+        });
+      });
+    }
+  }, {
+    key: 'clean',
+    value: function clean() {
+      if (this.isValid()) {
+        return true;
+      } else {
+        _snackbar2.default.error(this.validate().username[0]);
+        return false;
+      }
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(this.props.profile.api_url.moderate_username, {
+        username: this.state.username
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess(apiResponse) {
+      this.setState({
+        username: ''
+      });
+
+      _store2.default.dispatch((0, _usernameHistory.addNameChange)(apiResponse, this.props.profile, this.props.user));
+      _store2.default.dispatch((0, _users.updateUsername)(this.props.profile, apiResponse.username, apiResponse.slug));
+
+      _snackbar2.default.success(gettext("Username has been changed."));
+    }
+  }, {
+    key: 'getFormBody',
+    value: function getFormBody() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'form',
+        { onSubmit: this.handleSubmit },
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-body' },
+          _react2.default.createElement(
+            _formGroup2.default,
+            { label: gettext("New username"), 'for': 'id_username' },
+            _react2.default.createElement('input', { type: 'text', id: 'id_username', className: 'form-control',
+              disabled: this.state.isLoading,
+              onChange: this.bindInput('username'),
+              value: this.state.username })
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-footer' },
+          _react2.default.createElement(
+            'button',
+            { type: 'button', className: 'btn btn-default', 'data-dismiss': 'modal' },
+            gettext("Close")
+          ),
+          _react2.default.createElement(
+            _button2.default,
+            { className: 'btn-primary', loading: this.state.isLoading },
+            gettext("Change username")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'getModalBody',
+    value: function getModalBody() {
+      if (this.state.error) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(_modalMessage2.default, { icon: 'remove_circle_outline',
+          message: this.state.error });
+        /* jshint ignore:end */
+      } else if (this.state.isLoaded) {
+          return this.getFormBody();
+        } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(_modalLoader2.default, null);
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.state.error) {
+        return "modal-dialog modal-message modal-rename-user";
+      } else {
+        return "modal-dialog modal-rename-user";
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getClassName(),
+          role: 'document' },
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-content' },
+          _react2.default.createElement(
+            'div',
+            { className: 'modal-header' },
+            _react2.default.createElement(
+              'button',
+              { type: 'button', className: 'close', 'data-dismiss': 'modal',
+                'aria-label': gettext("Close") },
+              _react2.default.createElement(
+                'span',
+                { 'aria-hidden': 'true' },
+                '×'
+              )
+            ),
+            _react2.default.createElement(
+              'h4',
+              { className: 'modal-title' },
+              gettext("Change username")
+            )
+          ),
+          this.getModalBody()
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_form2.default);
+
+exports.default = _class;
+
+},{"../../../index":136,"../../../reducers/username-history":141,"../../../reducers/users":142,"../../../services/ajax":143,"../../../services/snackbar":152,"../../../services/store":153,"../../../utils/validators":163,"../../button":57,"../../form":70,"../../form-group":69,"../../modal-loader":73,"../../modal-message":74,"react":"react"}],95:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('../../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('../../form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _formGroup = require('../../form-group');
+
+var _formGroup2 = _interopRequireDefault(_formGroup);
+
+var _modalLoader = require('../../modal-loader');
+
+var _modalLoader2 = _interopRequireDefault(_modalLoader);
+
+var _modalMessage = require('../../modal-message');
+
+var _modalMessage2 = _interopRequireDefault(_modalMessage);
+
+var _yesNoSwitch = require('../../yes-no-switch');
+
+var _yesNoSwitch2 = _interopRequireDefault(_yesNoSwitch);
+
+var _index = require('../../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _ajax = require('../../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _polls = require('../../../services/polls');
+
+var _polls2 = _interopRequireDefault(_polls);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_Form) {
+  _inherits(_class, _Form);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.countdown = function () {
+      window.setTimeout(function () {
+        if (_this.state.countdown > 1) {
+          _this.setState({
+            countdown: _this.state.countdown - 1
+          });
+          _this.countdown();
+        } else if (!_this.state.confirm) {
+          _this.setState({
+            confirm: true
+          });
+        }
+      }, 1000);
+    };
+
+    _this.state = {
+      isLoaded: false,
+      isLoading: false,
+      isDeleted: false,
+      error: null,
+
+      countdown: 5,
+      confirm: false,
+
+      with_content: false
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'componentDidMount',
+    value: function componentDidMount() {
+      var _this2 = this;
+
+      _ajax2.default.get(this.props.profile.api_url.delete).then(function () {
+        _this2.setState({
+          isLoaded: true
+        });
+
+        _this2.countdown();
+      }, function (rejection) {
+        _this2.setState({
+          isLoaded: true,
+          error: rejection.detail
+        });
+      });
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'send',
+
+    /* jshint ignore:end */
+
+    value: function send() {
+      return _ajax2.default.post(this.props.profile.api_url.delete, {
+        with_content: this.state.with_content
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess() {
+      _polls2.default.stop('user-profile');
+
+      if (this.state.with_content) {
+        this.setState({
+          isDeleted: interpolate(gettext("%(username)s's account, threads, posts and other content has been deleted."), {
+            'username': this.props.profile.username
+          }, true)
+        });
+      } else {
+        this.setState({
+          isDeleted: interpolate(gettext("%(username)s's account has been deleted and other content has been hidden."), {
+            'username': this.props.profile.username
+          }, true)
+        });
+      }
+    }
+  }, {
+    key: 'getButtonLabel',
+    value: function getButtonLabel() {
+      if (this.state.confirm) {
+        return interpolate(gettext("Delete %(username)s"), {
+          'username': this.props.profile.username
+        }, true);
+      } else {
+        return interpolate(gettext("Please wait... (%(countdown)ss)"), {
+          'countdown': this.state.countdown
+        }, true);
+      }
+    }
+  }, {
+    key: 'getForm',
+    value: function getForm() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'form',
+        { onSubmit: this.handleSubmit, className: 'form-horizontal' },
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-body' },
+          _react2.default.createElement(
+            _formGroup2.default,
+            { label: gettext("User content"),
+              labelClass: 'col-sm-4', controlClass: 'col-sm-8',
+              'for': 'id_with_content' },
+            _react2.default.createElement(_yesNoSwitch2.default, { id: 'id_with_content',
+              disabled: this.state.isLoading,
+              labelOn: gettext("Delete together with user's account"),
+              labelOff: gettext("Hide after deleting user's account"),
+              onChange: this.bindInput('with_content'),
+              value: this.state.with_content })
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-footer' },
+          _react2.default.createElement(
+            'button',
+            { type: 'button',
+              className: 'btn btn-default',
+              'data-dismiss': 'modal' },
+            gettext("Cancel")
+          ),
+          _react2.default.createElement(
+            _button2.default,
+            { className: 'btn-danger',
+              loading: this.state.isLoading,
+              disabled: !this.state.confirm },
+            this.getButtonLabel()
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'getDeletedBody',
+    value: function getDeletedBody() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'modal-body' },
+        _react2.default.createElement(
+          'div',
+          { className: 'message-icon' },
+          _react2.default.createElement(
+            'span',
+            { className: 'material-icon' },
+            'info_outline'
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'message-body' },
+          _react2.default.createElement(
+            'p',
+            { className: 'lead' },
+            this.state.isDeleted
+          ),
+          _react2.default.createElement(
+            'p',
+            null,
+            _react2.default.createElement(
+              'a',
+              { href: _index2.default.get('USERS_LIST_URL') },
+              gettext("Return to users list")
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'getModalBody',
+    value: function getModalBody() {
+      if (this.state.error) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(_modalMessage2.default, { icon: 'remove_circle_outline',
+          message: this.state.error });
+        /* jshint ignore:end */
+      } else if (this.state.isLoaded) {
+          if (this.state.isDeleted) {
+            return this.getDeletedBody();
+          } else {
+            return this.getForm();
+          }
+        } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(_modalLoader2.default, null);
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.state.error || this.state.isDeleted) {
+        return "modal-dialog modal-message modal-delete-account";
+      } else {
+        return "modal-dialog modal-delete-account";
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getClassName(),
+          role: 'document' },
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-content' },
+          _react2.default.createElement(
+            'div',
+            { className: 'modal-header' },
+            _react2.default.createElement(
+              'button',
+              { type: 'button', className: 'close', 'data-dismiss': 'modal',
+                'aria-label': gettext("Close") },
+              _react2.default.createElement(
+                'span',
+                { 'aria-hidden': 'true' },
+                '×'
+              )
+            ),
+            _react2.default.createElement(
+              'h4',
+              { className: 'modal-title' },
+              gettext("Delete user account")
+            )
+          ),
+          this.getModalBody()
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_form2.default);
+
+exports.default = _class;
+
+},{"../../../index":136,"../../../services/ajax":143,"../../../services/polls":151,"../../button":57,"../../form":70,"../../form-group":69,"../../modal-loader":73,"../../modal-message":74,"../../yes-no-switch":135,"react":"react"}],96:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRedux = require('react-redux');
+
+var _avatarControls = require('./avatar-controls');
+
+var _avatarControls2 = _interopRequireDefault(_avatarControls);
+
+var _changeUsername = require('./change-username');
+
+var _changeUsername2 = _interopRequireDefault(_changeUsername);
+
+var _deleteAccount = require('./delete-account');
+
+var _deleteAccount2 = _interopRequireDefault(_deleteAccount);
+
+var _modal = require('../../../services/modal');
+
+var _modal2 = _interopRequireDefault(_modal);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+/* jshint ignore:start */
+var select = function select(store) {
+  return {
+    tick: store.tick,
+    user: store.auth,
+    profile: store.profile
+  };
+};
+/* jshint ignore:end */
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    var _Object$getPrototypeO;
+
+    var _temp, _this, _ret;
+
+    _classCallCheck(this, _class);
+
+    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.showAvatarDialog = function () {
+      _modal2.default.show((0, _reactRedux.connect)(select)(_avatarControls2.default));
+    }, _this.showRenameDialog = function () {
+      _modal2.default.show((0, _reactRedux.connect)(select)(_changeUsername2.default));
+    }, _this.showDeleteDialog = function () {
+      _modal2.default.show((0, _reactRedux.connect)(select)(_deleteAccount2.default));
+    }, _temp), _possibleConstructorReturn(_this, _ret);
+  }
+  /* jshint ignore:start */
+
+  _createClass(_class, [{
+    key: 'getAvatarButton',
+
+    /* jshint ignore:end */
+
+    value: function getAvatarButton() {
+      if (this.props.profile.acl.can_moderate_avatar) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'li',
+          null,
+          _react2.default.createElement(
+            'button',
+            { type: 'button', className: 'btn-link',
+              onClick: this.showAvatarDialog },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              'portrait'
+            ),
+            gettext("Avatar controls")
+          )
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'getRenameButton',
+
+    /* jshint ignore:end */
+
+    value: function getRenameButton() {
+      if (this.props.profile.acl.can_rename) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'li',
+          null,
+          _react2.default.createElement(
+            'button',
+            { type: 'button', className: 'btn-link',
+              onClick: this.showRenameDialog },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              'credit_card'
+            ),
+            gettext("Change username")
+          )
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'getDeleteButton',
+
+    /* jshint ignore:end */
+
+    value: function getDeleteButton() {
+      if (this.props.profile.acl.can_delete) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'li',
+          null,
+          _react2.default.createElement(
+            'button',
+            { type: 'button', className: 'btn-link',
+              onClick: this.showDeleteDialog },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              'clear'
+            ),
+            gettext("Delete account")
+          )
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'ul',
+        { className: 'dropdown-menu dropdown-menu-right', role: 'menu' },
+        this.getAvatarButton(),
+        this.getRenameButton(),
+        this.getDeleteButton(),
+        _react2.default.createElement('li', { className: 'divider hidden-md hidden-lg' }),
+        _react2.default.createElement(
+          'li',
+          { className: 'dropdown-buttons hidden-md hidden-lg' },
+          _react2.default.createElement(
+            'button',
+            { type: 'button', className: 'btn btn-default btn-block',
+              onClick: this.props.toggleNav },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              'menu'
+            ),
+            gettext("Menu")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../../services/modal":149,"./avatar-controls":93,"./change-username":94,"./delete-account":95,"react":"react","react-redux":"react-redux"}],97:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CompactNav = exports.SideNav = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRouter = require('react-router');
+
+var _li = require('../li');
+
+var _li2 = _interopRequireDefault(_li);
+
+var _followButton = require('./follow-button');
+
+var _followButton2 = _interopRequireDefault(_followButton);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+//jshint ignore:line
+// jshint ignore:line
+
+//jshint ignore:line
+
+var SideNav = exports.SideNav = function (_React$Component) {
+  _inherits(SideNav, _React$Component);
+
+  function SideNav() {
+    _classCallCheck(this, SideNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(SideNav).apply(this, arguments));
+  }
+
+  _createClass(SideNav, [{
+    key: 'getMeta',
+    value: function getMeta(meta) {
+      if (meta) {
+        // jshint ignore:start
+        return _react2.default.createElement(
+          'span',
+          { className: 'badge' },
+          this.props.profile[meta.attr]
+        );
+        // jshint ignore:end
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      var _this2 = this;
+
+      // jshint ignore:start
+      return _react2.default.createElement(
+        'div',
+        { className: 'list-group nav-side' },
+        this.props.pages.map(function (page) {
+          return _react2.default.createElement(
+            _reactRouter.Link,
+            { to: _this2.props.baseUrl + page.component + '/',
+              className: 'list-group-item',
+              activeClassName: 'active',
+              key: page.component },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              page.icon
+            ),
+            page.name,
+            _this2.getMeta(page.meta)
+          );
+        })
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return SideNav;
+}(_react2.default.Component);
+
+var CompactNav = exports.CompactNav = function (_SideNav) {
+  _inherits(CompactNav, _SideNav);
+
+  function CompactNav() {
+    _classCallCheck(this, CompactNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));
+  }
+
+  _createClass(CompactNav, [{
+    key: 'showSpecialOptions',
+    value: function showSpecialOptions() {
+      return this.props.profile.acl.can_follow || this.props.profile.acl.can_moderate;
+    }
+  }, {
+    key: 'getFollowButton',
+    value: function getFollowButton() {
+      if (this.props.profile.acl.can_follow) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(_followButton2.default, { className: 'btn btn-block',
+          profile: this.props.profile });
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getModerationButton',
+    value: function getModerationButton() {
+      if (this.props.profile.acl.can_moderate) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'button',
+          { type: 'button', className: 'btn btn-default btn-block',
+            onClick: this.props.toggleModeration },
+          _react2.default.createElement(
+            'span',
+            { className: 'material-icon' },
+            'tonality'
+          ),
+          gettext("Moderation")
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getSpecialOptions',
+    value: function getSpecialOptions() {
+      if (this.showSpecialOptions()) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'li',
+          { className: 'dropdown-buttons' },
+          this.getFollowButton(),
+          this.getModerationButton()
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      var _this4 = this;
+
+      // jshint ignore:start
+      return _react2.default.createElement(
+        'ul',
+        { className: 'dropdown-menu', role: 'menu' },
+        this.getSpecialOptions(),
+        this.showSpecialOptions() ? _react2.default.createElement('li', { className: 'divider' }) : null,
+        this.props.pages.map(function (page) {
+          return _react2.default.createElement(
+            _li2.default,
+            { path: _this4.props.baseUrl + page.component + '/',
+              key: page.component },
+            _react2.default.createElement(
+              _reactRouter.Link,
+              { to: _this4.props.baseUrl + page.component + '/',
+                onClick: _this4.props.hideNav },
+              _react2.default.createElement(
+                'span',
+                { className: 'material-icon' },
+                page.icon
+              ),
+              page.name,
+              _this4.getMeta(page.meta)
+            )
+          );
+        })
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return CompactNav;
+}(SideNav);
+
+},{"../../index":136,"../li":71,"./follow-button":90,"react":"react","react-router":"react-router"}],98:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.select = select;
+exports.paths = paths;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRedux = require('react-redux');
+
+var _avatar = require('../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _banDetails = require('./ban-details');
+
+var _banDetails2 = _interopRequireDefault(_banDetails);
+
+var _followers = require('./followers');
+
+var _followers2 = _interopRequireDefault(_followers);
+
+var _follows = require('./follows');
+
+var _follows2 = _interopRequireDefault(_follows);
+
+var _usernameHistory = require('./username-history');
+
+var _usernameHistory2 = _interopRequireDefault(_usernameHistory);
+
+var _Header = require('./Header');
+
+var _Header2 = _interopRequireDefault(_Header);
+
+var _nav = require('./moderation/nav');
+
+var _nav2 = _interopRequireDefault(_nav);
+
+var _navs = require('./navs');
+
+var _withDropdown = require('../with-dropdown');
+
+var _withDropdown2 = _interopRequireDefault(_withDropdown);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _profile = require('../../reducers/profile');
+
+var _polls = require('../../services/polls');
+
+var _polls2 = _interopRequireDefault(_polls);
+
+var _store = require('../../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_WithDropdown) {
+  _inherits(_class, _WithDropdown);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.update = function (data) {
+      _store2.default.dispatch((0, _profile.dehydrate)(data));
+    };
+
+    _this.toggleNav = function () {
+      if (_this.state.dropdown === 'pages') {
+        _this.setState({
+          dropdown: false
+        });
+      } else {
+        _this.setState({
+          dropdown: 'pages'
+        });
+      }
+    };
+
+    _this.toggleModeration = function () {
+      if (_this.state.dropdown === 'moderation') {
+        _this.setState({
+          dropdown: false
+        });
+      } else {
+        _this.setState({
+          dropdown: 'moderation'
+        });
+      }
+    };
+
+    _this.startPolling(props.profile.api_url.root);
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'startPolling',
+    value: function startPolling(api) {
+      _polls2.default.start({
+        poll: 'user-profile',
+        url: api,
+        frequency: 90 * 1000,
+        update: this.update
+      });
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'getNavDropdown',
+
+    /* jshint ignore:end */
+
+    value: function getNavDropdown() {
+      if (this.state.dropdown === 'pages') {
+        /* jshint ignore:start */
+        return _react2.default.createElement(_navs.CompactNav, { pages: _index2.default.get('PROFILE_PAGES'),
+          baseUrl: _index2.default.get('PROFILE').absolute_url,
+          profile: this.props.profile,
+          toggleModeration: this.toggleModeration,
+          hideNav: this.hideNav });
+        /* jshint ignore:end */
+      } else if (this.state.dropdown === 'moderation') {
+          /* jshint ignore:start */
+          return _react2.default.createElement(_nav2.default, { profile: this.props.profile,
+            toggleNav: this.toggleNav,
+            hideNav: this.hideNav });
+          /* jshint ignore:end */
+        } else {
+            return null;
+          }
+    }
+  }, {
+    key: 'getClassName',
+    value: function getClassName() {
+      var baseClass = 'page page-user-profile';
+      if (false && this.props.profile.rank.css_class) {
+        return baseClass + ' page-user-profile-' + this.props.profile.rank.css_class;
+      } else {
+        return baseClass;
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getClassName() },
+        _react2.default.createElement(_Header2.default, { user: this.props.user,
+          profile: this.props.profile,
+          toggleNav: this.toggleNav,
+          toggleModeration: this.toggleModeration }),
+        _react2.default.createElement(
+          'div',
+          { className: this.getCompactNavClassName() },
+          this.getNavDropdown()
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'div',
+            { className: 'row' },
+            _react2.default.createElement(
+              'div',
+              { className: 'col-md-3 hidden-xs hidden-sm' },
+              _react2.default.createElement(
+                'div',
+                { className: 'profile-side-avatar' },
+                _react2.default.createElement(_avatar2.default, { user: this.props.profile, size: '400' })
+              ),
+              _react2.default.createElement(_navs.SideNav, { pages: _index2.default.get('PROFILE_PAGES'),
+                baseUrl: _index2.default.get('PROFILE').absolute_url,
+                profile: this.props.profile })
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'col-md-9' },
+              this.props.children
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_withDropdown2.default);
+
+exports.default = _class;
+function select(store) {
+  return {
+    'tick': store.tick.tick,
+    'user': store.auth.user,
+    'users': store.users,
+    'profile': store.profile,
+    'username-history': store['username-history']
+  };
+}
+
+var Placeholder = function (_React$Component) {
+  _inherits(Placeholder, _React$Component);
+
+  function Placeholder() {
+    _classCallCheck(this, Placeholder);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(Placeholder).apply(this, arguments));
+  }
+
+  _createClass(Placeholder, [{
+    key: 'render',
+    value: function render() {
+      // jshint ignore:start
+      return _react2.default.createElement(
+        'div',
+        { className: 'container' },
+        _react2.default.createElement(
+          'p',
+          null,
+          "Hello, I'm placeholder for " + this.props.route.name
+        )
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return Placeholder;
+}(_react2.default.Component);
+
+var COMPONENTS = {
+  'posts': Placeholder,
+  'threads': Placeholder,
+  'followers': _followers2.default,
+  'follows': _follows2.default,
+  'username-history': _usernameHistory2.default,
+  'ban-details': _banDetails2.default
+};
+
+function paths() {
+  var paths = [];
+
+  _index2.default.get('PROFILE_PAGES').forEach(function (item) {
+    paths.push(Object.assign({}, item, {
+      path: _index2.default.get('PROFILE').absolute_url + item.component + '/',
+      component: (0, _reactRedux.connect)(select)(COMPONENTS[item.component])
+    }));
+  });
+
+  return paths;
+}
+
+},{"../../index":136,"../../reducers/profile":138,"../../services/polls":151,"../../services/store":153,"../avatar":55,"../with-dropdown":134,"./Header":88,"./ban-details":89,"./followers":91,"./follows":92,"./moderation/nav":96,"./navs":97,"./username-history":99,"react":"react","react-redux":"react-redux"}],99:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('../button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _search = require('../search');
+
+var _search2 = _interopRequireDefault(_search);
+
+var _usernameHistory = require('../username-history');
+
+var _usernameHistory2 = _interopRequireDefault(_usernameHistory);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _usernameHistory3 = require('../../reducers/username-history');
+
+var _ajax = require('../../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _store = require('../../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+var _pageTitle = require('../../services/page-title');
+
+var _pageTitle2 = _interopRequireDefault(_pageTitle);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.loadMore = function () {
+      _this.setState({
+        isBusy: true
+      });
+
+      _this.loadChanges(_this.state.page + 1, _this.state.search);
+    };
+
+    _this.search = function (ev) {
+      _this.setState({
+        isLoaded: false,
+        isBusy: true,
+
+        search: ev.target.value,
+
+        count: 0,
+        more: 0,
+
+        page: 1,
+        pages: 1
+      });
+
+      _this.loadChanges(1, ev.target.value);
+    };
+
+    if (_index2.default.has('PROFILE_NAME_HISTORY')) {
+      _this.initWithPreloadedData(_index2.default.pop('PROFILE_NAME_HISTORY'));
+    } else {
+      _this.initWithoutPreloadedData();
+    }
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'initWithPreloadedData',
+    value: function initWithPreloadedData(data) {
+      this.state = {
+        isLoaded: true,
+        isBusy: false,
+
+        search: '',
+
+        count: data.count,
+        more: data.more,
+
+        page: data.page,
+        pages: data.pages
+      };
+
+      _store2.default.dispatch((0, _usernameHistory3.dehydrate)(data.results));
+    }
+  }, {
+    key: 'initWithoutPreloadedData',
+    value: function initWithoutPreloadedData() {
+      this.state = {
+        isLoaded: false,
+        isBusy: false,
+
+        search: '',
+
+        count: 0,
+        more: 0,
+
+        page: 1,
+        pages: 1
+      };
+
+      this.loadChanges();
+    }
+  }, {
+    key: 'loadChanges',
+    value: function loadChanges() {
+      var _this2 = this;
+
+      var page = arguments.length <= 0 || arguments[0] === undefined ? 1 : arguments[0];
+      var search = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
+
+      _ajax2.default.get(_index2.default.get('USERNAME_CHANGES_API'), {
+        user: this.props.profile.id,
+        search: search,
+        page: page || 1
+      }, 'search-username-history').then(function (data) {
+        if (page === 1) {
+          _store2.default.dispatch((0, _usernameHistory3.dehydrate)(data.results));
+        } else {
+          _store2.default.dispatch((0, _usernameHistory3.append)(data.results));
+        }
+
+        _this2.setState({
+          isLoaded: true,
+          isBusy: false,
+
+          count: data.count,
+          more: data.more,
+
+          page: data.page,
+          pages: data.pages
+        });
+      }, function (rejection) {
+        _snackbar2.default.apiError(rejection);
+      });
+    }
+  }, {
+    key: 'componentDidMount',
+    value: function componentDidMount() {
+      _pageTitle2.default.set({
+        title: gettext("Username history"),
+        parent: this.props.profile.username
+      });
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'getLabel',
+
+    /* jshint ignore:end */
+
+    value: function getLabel() {
+      if (!this.state.isLoaded) {
+        return gettext('Loading...');
+      } else if (this.state.search) {
+        var message = ngettext("Found %(changes)s username change.", "Found %(changes)s username changes.", this.state.count);
+
+        return interpolate(message, {
+          'changes': this.state.count
+        }, true);
+      } else if (this.props.profile.id === this.props.user.id) {
+        var message = ngettext("Your username was changed %(changes)s time.", "Your username was changed %(changes)s times.", this.state.count);
+
+        return interpolate(message, {
+          'changes': this.state.count
+        }, true);
+      } else {
+        var message = ngettext("%(username)s's username was changed %(changes)s time.", "%(username)s's username was changed %(changes)s times.", this.state.count);
+
+        return interpolate(message, {
+          'username': this.props.profile.username,
+          'changes': this.state.count
+        }, true);
+      }
+    }
+  }, {
+    key: 'getEmptyMessage',
+    value: function getEmptyMessage() {
+      if (this.state.search) {
+        return gettext("Search returned no username changes matching specified criteria.");
+      } else if (this.props.user.id === this.props.profile.id) {
+        return gettext("No name changes have been recorded for your account.");
+      } else {
+        return interpolate(gettext("%(username)s's username was never changed."), {
+          'username': this.props.profile.username
+        }, true);
+      }
+    }
+  }, {
+    key: 'getMoreButton',
+    value: function getMoreButton() {
+      if (this.state.more) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'div',
+          { className: 'pager-more' },
+          _react2.default.createElement(
+            _button2.default,
+            { loading: this.state.isBusy,
+              onClick: this.loadMore },
+            interpolate(gettext("Show older (%(more)s)"), {
+              'more': this.state.more
+            }, true)
+          )
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'profile-username-history' },
+        _react2.default.createElement(
+          'nav',
+          { className: 'toolbar' },
+          _react2.default.createElement(
+            'h3',
+            { className: 'toolbar-left' },
+            this.getLabel()
+          ),
+          _react2.default.createElement(_search2.default, { className: 'toolbar-right',
+            value: this.state.search,
+            onChange: this.search,
+            placeholder: gettext("Search history...") })
+        ),
+        _react2.default.createElement(_usernameHistory2.default, { isLoaded: this.state.isLoaded,
+          emptyMessage: this.getEmptyMessage(),
+          changes: this.props['username-history'] }),
+        this.getMoreButton()
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../index":136,"../../reducers/username-history":141,"../../services/ajax":143,"../../services/page-title":150,"../../services/snackbar":152,"../../services/store":153,"../button":57,"../search":105,"../username-history":119,"react":"react"}],100:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _loader = require('./loader');
+
+var _loader2 = _interopRequireDefault(_loader);
+
+var _register = require('./register.js');
+
+var _register2 = _interopRequireDefault(_register);
+
+var _captcha = require('../services/captcha');
+
+var _captcha2 = _interopRequireDefault(_captcha);
+
+var _modal = require('../services/modal');
+
+var _modal2 = _interopRequireDefault(_modal);
+
+var _snackbar = require('../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _zxcvbn = require('../services/zxcvbn');
+
+var _zxcvbn2 = _interopRequireDefault(_zxcvbn);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.showRegisterModal = function () {
+      if (misago.get('SETTINGS').account_activation === 'closed') {
+        _snackbar2.default.info(gettext("New registrations are currently disabled."));
+      } else if (_this.state.isLoaded) {
+        _modal2.default.show(_register2.default);
+      } else {
+        _this.setState({
+          'isLoading': true
+        });
+
+        Promise.all([_captcha2.default.load(), _zxcvbn2.default.load()]).then(function () {
+          if (!_this.state.isLoaded) {
+            _this.setState({
+              'isLoading': false,
+              'isLoaded': false
+            });
+          }
+
+          _modal2.default.show(_register2.default);
+        });
+      }
+    };
+
+    _this.state = {
+      'isLoading': false,
+      'isLoaded': false
+    };
+    return _this;
+  }
+
+  /* jshint ignore:start */
+
+  _createClass(_class, [{
+    key: 'getClassName',
+
+    /* jshint ignore:end */
+
+    value: function getClassName() {
+      return this.props.className + (this.state.isLoading ? ' btn-loading' : '');
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'button',
+        { type: 'button', onClick: this.showRegisterModal,
+          className: 'btn ' + this.getClassName(),
+          disabled: this.state.isLoaded },
+        gettext("Register"),
+        this.state.isLoading ? _react2.default.createElement(_loader2.default, null) : null
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../services/captcha":145,"../services/modal":149,"../services/snackbar":152,"../services/zxcvbn":154,"./loader":72,"./register.js":101,"react":"react"}],101:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.RegisterComplete = exports.RegisterForm = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _button = require('./button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('./form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _formGroup = require('./form-group');
+
+var _formGroup2 = _interopRequireDefault(_formGroup);
+
+var _passwordStrength = require('./password-strength');
+
+var _passwordStrength2 = _interopRequireDefault(_passwordStrength);
+
+var _index = require('../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _ajax = require('../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _auth = require('../services/auth');
+
+var _auth2 = _interopRequireDefault(_auth);
+
+var _captcha = require('../services/captcha');
+
+var _captcha2 = _interopRequireDefault(_captcha);
+
+var _modal = require('../services/modal');
+
+var _modal2 = _interopRequireDefault(_modal);
+
+var _snackbar = require('../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _bannedPage = require('../utils/banned-page');
+
+var _bannedPage2 = _interopRequireDefault(_bannedPage);
+
+var _validators = require('../utils/validators');
+
+var validators = _interopRequireWildcard(_validators);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var RegisterForm = exports.RegisterForm = function (_Form) {
+  _inherits(RegisterForm, _Form);
+
+  function RegisterForm(props) {
+    _classCallCheck(this, RegisterForm);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RegisterForm).call(this, props));
+
+    _this.state = {
+      isLoading: false,
+
+      username: '',
+      email: '',
+      password: '',
+      captcha: '',
+
+      validators: {
+        username: [validators.usernameContent(), validators.usernameMinLength(_index2.default.get('SETTINGS')), validators.usernameMaxLength(_index2.default.get('SETTINGS'))],
+        email: [validators.email()],
+        password: [validators.passwordMinLength(_index2.default.get('SETTINGS'))],
+        captcha: _captcha2.default.validator()
+      },
+
+      errors: {}
+    };
+    return _this;
+  }
+
+  _createClass(RegisterForm, [{
+    key: 'clean',
+    value: function clean() {
+      if (this.isValid()) {
+        return true;
+      } else {
+        _snackbar2.default.error(gettext("Form contains errors."));
+        this.setState({
+          errors: this.validate()
+        });
+        return false;
+      }
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(_index2.default.get('USERS_API'), {
+        username: this.state.username,
+        email: this.state.email,
+        password: this.state.password,
+        captcha: this.state.captcha
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess(apiResponse) {
+      this.props.callback(apiResponse);
+    }
+  }, {
+    key: 'handleError',
+    value: function handleError(rejection) {
+      if (rejection.status === 400) {
+        this.setState({
+          'errors': Object.assign({}, this.state.errors, rejection)
+        });
+        _snackbar2.default.error(gettext("Form contains errors."));
+      } else if (rejection.status === 403 && rejection.ban) {
+        (0, _bannedPage2.default)(rejection.ban);
+        _modal2.default.hide();
+      } else {
+        _snackbar2.default.apiError(rejection);
+      }
+    }
+  }, {
+    key: 'getLegalFootNote',
+    value: function getLegalFootNote() {
+      if (_index2.default.get('TERMS_OF_SERVICE_URL')) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'a',
+          { href: _index2.default.get('TERMS_OF_SERVICE_URL'),
+            target: '_blank' },
+          gettext("By registering you agree to site's terms and conditions.")
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'modal-dialog modal-register', role: 'document' },
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-content' },
+          _react2.default.createElement(
+            'div',
+            { className: 'modal-header' },
+            _react2.default.createElement(
+              'button',
+              { type: 'button', className: 'close', 'data-dismiss': 'modal',
+                'aria-label': gettext("Close") },
+              _react2.default.createElement(
+                'span',
+                { 'aria-hidden': 'true' },
+                '×'
+              )
+            ),
+            _react2.default.createElement(
+              'h4',
+              { className: 'modal-title' },
+              gettext("Register")
+            )
+          ),
+          _react2.default.createElement(
+            'form',
+            { onSubmit: this.handleSubmit, className: 'form-horizontal' },
+            _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),
+            _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),
+            _react2.default.createElement(
+              'div',
+              { className: 'modal-body' },
+              _react2.default.createElement(
+                _formGroup2.default,
+                { label: gettext("Username"), 'for': 'id_username',
+                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',
+                  validation: this.state.errors.username },
+                _react2.default.createElement('input', { type: 'text', id: 'id_username', className: 'form-control',
+                  'aria-describedby': 'id_username_status',
+                  disabled: this.state.isLoading,
+                  onChange: this.bindInput('username'),
+                  value: this.state.username })
+              ),
+              _react2.default.createElement(
+                _formGroup2.default,
+                { label: gettext("E-mail"), 'for': 'id_email',
+                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',
+                  validation: this.state.errors.email },
+                _react2.default.createElement('input', { type: 'text', id: 'id_email', className: 'form-control',
+                  'aria-describedby': 'id_email_status',
+                  disabled: this.state.isLoading,
+                  onChange: this.bindInput('email'),
+                  value: this.state.email })
+              ),
+              _react2.default.createElement(
+                _formGroup2.default,
+                { label: gettext("Password"), 'for': 'id_password',
+                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',
+                  validation: this.state.errors.password,
+                  extra: _react2.default.createElement(_passwordStrength2.default, { password: this.state.password,
+                    inputs: [this.state.username, this.state.email] }) },
+                _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',
+                  'aria-describedby': 'id_password_status',
+                  disabled: this.state.isLoading,
+                  onChange: this.bindInput('password'),
+                  value: this.state.password })
+              ),
+              _captcha2.default.component({
+                form: this,
+                labelClass: "col-sm-4",
+                controlClass: "col-sm-8"
+              })
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'modal-footer' },
+              this.getLegalFootNote(),
+              _react2.default.createElement(
+                _button2.default,
+                { className: 'btn-primary', loading: this.state.isLoading },
+                gettext("Register account")
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return RegisterForm;
+}(_form2.default);
+
+var RegisterComplete = exports.RegisterComplete = function (_React$Component) {
+  _inherits(RegisterComplete, _React$Component);
+
+  function RegisterComplete() {
+    _classCallCheck(this, RegisterComplete);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(RegisterComplete).apply(this, arguments));
+  }
+
+  _createClass(RegisterComplete, [{
+    key: 'getLead',
+    value: function getLead() {
+      if (this.props.activation === 'user') {
+        return gettext("%(username)s, your account has been created but you need to activate it before you will be able to sign in.");
+      } else if (this.props.activation === 'admin') {
+        return gettext("%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in.");
+      }
+    }
+  }, {
+    key: 'getSubscript',
+    value: function getSubscript() {
+      if (this.props.activation === 'user') {
+        return gettext("We have sent an e-mail to %(email)s with link that you have to click to activate your account.");
+      } else if (this.props.activation === 'admin') {
+        return gettext("We will send an e-mail to %(email)s when this takes place.");
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'modal-dialog modal-message modal-register',
+          role: 'document' },
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-content' },
+          _react2.default.createElement(
+            'div',
+            { className: 'modal-header' },
+            _react2.default.createElement(
+              'button',
+              { type: 'button', className: 'close', 'data-dismiss': 'modal',
+                'aria-label': gettext("Close") },
+              _react2.default.createElement(
+                'span',
+                { 'aria-hidden': 'true' },
+                '×'
+              )
+            ),
+            _react2.default.createElement(
+              'h4',
+              { className: 'modal-title' },
+              gettext("Registration complete")
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'modal-body' },
+            _react2.default.createElement(
+              'div',
+              { className: 'message-icon' },
+              _react2.default.createElement(
+                'span',
+                { className: 'material-icon' },
+                'info_outline'
+              )
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'message-body' },
+              _react2.default.createElement(
+                'p',
+                { className: 'lead' },
+                interpolate(this.getLead(), { 'username': this.props.username }, true)
+              ),
+              _react2.default.createElement(
+                'p',
+                null,
+                interpolate(this.getSubscript(), { 'email': this.props.email }, true)
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return RegisterComplete;
+}(_react2.default.Component);
+
+var _class = function (_React$Component2) {
+  _inherits(_class, _React$Component2);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this3.completeRegistration = function (apiResponse) {
+      if (apiResponse.activation === 'active') {
+        _modal2.default.hide();
+        _auth2.default.signIn(apiResponse);
+      } else {
+        _this3.setState({
+          complete: apiResponse
+        });
+      }
+    };
+
+    _this3.state = {
+      complete: false
+    };
+    return _this3;
+  }
+
+  /* jshint ignore:start */
+
+  _createClass(_class, [{
+    key: 'render',
+
+    /* jshint ignore:end */
+
+    value: function render() {
+      /* jshint ignore:start */
+      if (this.state.complete) {
+        return _react2.default.createElement(RegisterComplete, { activation: this.state.complete.activation,
+          username: this.state.complete.username,
+          email: this.state.complete.email });
+      } else {
+        return _react2.default.createElement(RegisterForm, { callback: this.completeRegistration });
+      }
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../index":136,"../services/ajax":143,"../services/auth":144,"../services/captcha":145,"../services/modal":149,"../services/snackbar":152,"../utils/banned-page":155,"../utils/validators":163,"./button":57,"./form":70,"./form-group":69,"./password-strength":87,"react":"react"}],102:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.LinkSent = exports.RequestLinkForm = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _index = require('../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _button = require('./button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('./form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _ajax = require('../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _validators = require('../utils/validators');
+
+var validators = _interopRequireWildcard(_validators);
+
+var _bannedPage = require('../utils/banned-page');
+
+var _bannedPage2 = _interopRequireDefault(_bannedPage);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+
+var RequestLinkForm = exports.RequestLinkForm = function (_Form) {
+  _inherits(RequestLinkForm, _Form);
+
+  function RequestLinkForm(props) {
+    _classCallCheck(this, RequestLinkForm);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RequestLinkForm).call(this, props));
+
+    _this.state = {
+      'isLoading': false,
+
+      'email': '',
+
+      'validators': {
+        'email': [validators.email()]
+      }
+    };
+    return _this;
+  }
+
+  _createClass(RequestLinkForm, [{
+    key: 'clean',
+    value: function clean() {
+      if (this.isValid()) {
+        return true;
+      } else {
+        _snackbar2.default.error(gettext("Enter a valid email address."));
+        return false;
+      }
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(_index2.default.get('SEND_ACTIVATION_API'), {
+        'email': this.state.email
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess(apiResponse) {
+      this.props.callback(apiResponse);
+    }
+  }, {
+    key: 'handleError',
+    value: function handleError(rejection) {
+      if (['already_active', 'inactive_admin'].indexOf(rejection.code) > -1) {
+        _snackbar2.default.info(rejection.detail);
+      } else if (rejection.status === 403 && rejection.ban) {
+        (0, _bannedPage2.default)(rejection.ban);
+      } else {
+        _snackbar2.default.apiError(rejection);
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'well well-form well-form-request-activation-link' },
+        _react2.default.createElement(
+          'form',
+          { onSubmit: this.handleSubmit },
+          _react2.default.createElement(
+            'div',
+            { className: 'form-group' },
+            _react2.default.createElement(
+              'div',
+              { className: 'control-input' },
+              _react2.default.createElement('input', { type: 'text', className: 'form-control',
+                placeholder: gettext("Your e-mail address"),
+                disabled: this.state.isLoading,
+                onChange: this.bindInput('email'),
+                value: this.state.email })
+            )
+          ),
+          _react2.default.createElement(
+            _button2.default,
+            { className: 'btn-primary btn-block',
+              loading: this.state.isLoading },
+            gettext("Send link")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return RequestLinkForm;
+}(_form2.default);
+
+var LinkSent = exports.LinkSent = function (_React$Component) {
+  _inherits(LinkSent, _React$Component);
+
+  function LinkSent() {
+    _classCallCheck(this, LinkSent);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(LinkSent).apply(this, arguments));
+  }
+
+  _createClass(LinkSent, [{
+    key: 'getMessage',
+    value: function getMessage() {
+      return interpolate(gettext("Activation link was sent to %(email)s"), {
+        email: this.props.user.email
+      }, true);
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'well well-form well-form-request-activation-link well-done' },
+        _react2.default.createElement(
+          'div',
+          { className: 'done-message' },
+          _react2.default.createElement(
+            'div',
+            { className: 'message-icon' },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              'check'
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'message-body' },
+            _react2.default.createElement(
+              'p',
+              null,
+              this.getMessage()
+            )
+          ),
+          _react2.default.createElement(
+            'button',
+            { type: 'button', className: 'btn btn-primary btn-block',
+              onClick: this.props.callback },
+            gettext("Request another link")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return LinkSent;
+}(_react2.default.Component);
+
+var _class = function (_React$Component2) {
+  _inherits(_class, _React$Component2);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this3.complete = function (apiResponse) {
+      _this3.setState({
+        complete: apiResponse
+      });
+    };
+
+    _this3.reset = function () {
+      _this3.setState({
+        complete: false
+      });
+    };
+
+    _this3.state = {
+      complete: false
+    };
+    return _this3;
+  }
+
+  /* jshint ignore:start */
+
+  _createClass(_class, [{
+    key: 'render',
+
+    /* jshint ignore:end */
+
+    value: function render() {
+      /* jshint ignore:start */
+      if (this.state.complete) {
+        return _react2.default.createElement(LinkSent, { user: this.state.complete, callback: this.reset });
+      } else {
+        return _react2.default.createElement(RequestLinkForm, { callback: this.complete });
+      };
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../index":136,"../services/ajax":143,"../services/snackbar":152,"../utils/banned-page":155,"../utils/validators":163,"./button":57,"./form":70,"react":"react"}],103:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.AccountInactivePage = exports.LinkSent = exports.RequestResetForm = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactDom = require('react-dom');
+
+var _reactDom2 = _interopRequireDefault(_reactDom);
+
+var _index = require('../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _button = require('./button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('./form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _ajax = require('../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _snackbar = require('../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _validators = require('../utils/validators');
+
+var validators = _interopRequireWildcard(_validators);
+
+var _bannedPage = require('../utils/banned-page');
+
+var _bannedPage2 = _interopRequireDefault(_bannedPage);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var RequestResetForm = exports.RequestResetForm = function (_Form) {
+  _inherits(RequestResetForm, _Form);
+
+  function RequestResetForm(props) {
+    _classCallCheck(this, RequestResetForm);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RequestResetForm).call(this, props));
+
+    _this.state = {
+      'isLoading': false,
+
+      'email': '',
+
+      'validators': {
+        'email': [validators.email()]
+      }
+    };
+    return _this;
+  }
+
+  _createClass(RequestResetForm, [{
+    key: 'clean',
+    value: function clean() {
+      if (this.isValid()) {
+        return true;
+      } else {
+        _snackbar2.default.error(gettext("Enter a valid email address."));
+        return false;
+      }
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(_index2.default.get('SEND_PASSWORD_RESET_API'), {
+        'email': this.state.email
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess(apiResponse) {
+      this.props.callback(apiResponse);
+    }
+  }, {
+    key: 'handleError',
+    value: function handleError(rejection) {
+      if (['inactive_user', 'inactive_admin'].indexOf(rejection.code) > -1) {
+        this.props.showInactivePage(rejection);
+      } else if (rejection.status === 403 && rejection.ban) {
+        (0, _bannedPage2.default)(rejection.ban);
+      } else {
+        _snackbar2.default.apiError(rejection);
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'well well-form well-form-request-password-reset' },
+        _react2.default.createElement(
+          'form',
+          { onSubmit: this.handleSubmit },
+          _react2.default.createElement(
+            'div',
+            { className: 'form-group' },
+            _react2.default.createElement(
+              'div',
+              { className: 'control-input' },
+              _react2.default.createElement('input', { type: 'text', className: 'form-control',
+                placeholder: gettext("Your e-mail address"),
+                disabled: this.state.isLoading,
+                onChange: this.bindInput('email'),
+                value: this.state.email })
+            )
+          ),
+          _react2.default.createElement(
+            _button2.default,
+            { className: 'btn-primary btn-block',
+              loading: this.state.isLoading },
+            gettext("Send link")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return RequestResetForm;
+}(_form2.default);
+
+var LinkSent = exports.LinkSent = function (_React$Component) {
+  _inherits(LinkSent, _React$Component);
+
+  function LinkSent() {
+    _classCallCheck(this, LinkSent);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(LinkSent).apply(this, arguments));
+  }
+
+  _createClass(LinkSent, [{
+    key: 'getMessage',
+    value: function getMessage() {
+      return interpolate(gettext("Reset password link was sent to %(email)s"), {
+        email: this.props.user.email
+      }, true);
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'well well-form well-form-request-password-reset well-done' },
+        _react2.default.createElement(
+          'div',
+          { className: 'done-message' },
+          _react2.default.createElement(
+            'div',
+            { className: 'message-icon' },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              'check'
+            )
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'message-body' },
+            _react2.default.createElement(
+              'p',
+              null,
+              this.getMessage()
+            )
+          ),
+          _react2.default.createElement(
+            'button',
+            { type: 'button', className: 'btn btn-primary btn-block',
+              onClick: this.props.callback },
+            gettext("Request another link")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return LinkSent;
+}(_react2.default.Component);
+
+var AccountInactivePage = exports.AccountInactivePage = function (_React$Component2) {
+  _inherits(AccountInactivePage, _React$Component2);
+
+  function AccountInactivePage() {
+    _classCallCheck(this, AccountInactivePage);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(AccountInactivePage).apply(this, arguments));
+  }
+
+  _createClass(AccountInactivePage, [{
+    key: 'getActivateButton',
+    value: function getActivateButton() {
+      if (this.props.activation === 'inactive_user') {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'p',
+          null,
+          _react2.default.createElement(
+            'a',
+            { href: _index2.default.get('REQUEST_ACTIVATION_URL') },
+            gettext("Activate your account.")
+          )
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'page page-message page-message-info page-forgotten-password-inactive' },
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'div',
+            { className: 'message-panel' },
+            _react2.default.createElement(
+              'div',
+              { className: 'message-icon' },
+              _react2.default.createElement(
+                'span',
+                { className: 'material-icon' },
+                'info_outline'
+              )
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'message-body' },
+              _react2.default.createElement(
+                'p',
+                { className: 'lead' },
+                gettext("Your account is inactive.")
+              ),
+              _react2.default.createElement(
+                'p',
+                null,
+                this.props.message
+              ),
+              this.getActivateButton()
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return AccountInactivePage;
+}(_react2.default.Component);
+
+var _class = function (_React$Component3) {
+  _inherits(_class, _React$Component3);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this4 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this4.complete = function (apiResponse) {
+      _this4.setState({
+        complete: apiResponse
+      });
+    };
+
+    _this4.reset = function () {
+      _this4.setState({
+        complete: false
+      });
+    };
+
+    _this4.state = {
+      complete: false
+    };
+    return _this4;
+  }
+
+  /* jshint ignore:start */
+
+  _createClass(_class, [{
+    key: 'showInactivePage',
+    value: function showInactivePage(apiResponse) {
+      _reactDom2.default.render(_react2.default.createElement(AccountInactivePage, { activation: apiResponse.code,
+        message: apiResponse.detail }), document.getElementById('page-mount'));
+    }
+    /* jshint ignore:end */
+
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      if (this.state.complete) {
+        return _react2.default.createElement(LinkSent, { user: this.state.complete, callback: this.reset });
+      } else {
+        return _react2.default.createElement(RequestResetForm, { callback: this.complete,
+          showInactivePage: this.showInactivePage });
+      };
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../index":136,"../services/ajax":143,"../services/snackbar":152,"../utils/banned-page":155,"../utils/validators":163,"./button":57,"./form":70,"react":"react","react-dom":"react-dom"}],104:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.PasswordChangedPage = exports.ResetPasswordForm = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactDom = require('react-dom');
+
+var _reactDom2 = _interopRequireDefault(_reactDom);
+
+var _index = require('../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _button = require('./button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('./form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _signIn = require('./sign-in.js');
+
+var _signIn2 = _interopRequireDefault(_signIn);
+
+var _ajax = require('../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _auth = require('../services/auth');
+
+var _auth2 = _interopRequireDefault(_auth);
+
+var _modal = require('../services/modal');
+
+var _modal2 = _interopRequireDefault(_modal);
+
+var _snackbar = require('../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _validators = require('../utils/validators');
+
+var validators = _interopRequireWildcard(_validators);
+
+var _bannedPage = require('../utils/banned-page');
+
+var _bannedPage2 = _interopRequireDefault(_bannedPage);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var ResetPasswordForm = exports.ResetPasswordForm = function (_Form) {
+  _inherits(ResetPasswordForm, _Form);
+
+  function ResetPasswordForm(props) {
+    _classCallCheck(this, ResetPasswordForm);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ResetPasswordForm).call(this, props));
+
+    _this.state = {
+      'isLoading': false,
+
+      'password': '',
+
+      'validators': {
+        'password': [validators.passwordMinLength(_index2.default.get('SETTINGS'))]
+      }
+    };
+    return _this;
+  }
+
+  _createClass(ResetPasswordForm, [{
+    key: 'clean',
+    value: function clean() {
+      if (this.isValid()) {
+        return true;
+      } else {
+        if (this.state.password.trim().length) {
+          _snackbar2.default.error(this.state.errors.password[0]);
+        } else {
+          _snackbar2.default.error(gettext("Enter new password."));
+        }
+        return false;
+      }
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(_index2.default.get('CHANGE_PASSWORD_API'), {
+        'password': this.state.password
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess(apiResponse) {
+      this.props.callback(apiResponse);
+    }
+  }, {
+    key: 'handleError',
+    value: function handleError(rejection) {
+      if (rejection.status === 403 && rejection.ban) {
+        (0, _bannedPage2.default)(rejection.ban);
+      } else {
+        _snackbar2.default.apiError(rejection);
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'well well-form well-form-reset-password' },
+        _react2.default.createElement(
+          'form',
+          { onSubmit: this.handleSubmit },
+          _react2.default.createElement(
+            'div',
+            { className: 'form-group' },
+            _react2.default.createElement(
+              'div',
+              { className: 'control-input' },
+              _react2.default.createElement('input', { type: 'password', className: 'form-control',
+                placeholder: gettext("Enter new password"),
+                disabled: this.state.isLoading,
+                onChange: this.bindInput('password'),
+                value: this.state.password })
+            )
+          ),
+          _react2.default.createElement(
+            _button2.default,
+            { className: 'btn-primary btn-block',
+              loading: this.state.isLoading },
+            gettext("Change password")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return ResetPasswordForm;
+}(_form2.default);
+
+var PasswordChangedPage = exports.PasswordChangedPage = function (_React$Component) {
+  _inherits(PasswordChangedPage, _React$Component);
+
+  function PasswordChangedPage() {
+    _classCallCheck(this, PasswordChangedPage);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(PasswordChangedPage).apply(this, arguments));
+  }
+
+  _createClass(PasswordChangedPage, [{
+    key: 'getMessage',
+    value: function getMessage() {
+      return interpolate(gettext("%(username)s, your password has been changed successfully."), {
+        username: this.props.user.username
+      }, true);
+    }
+  }, {
+    key: 'showSignIn',
+    value: function showSignIn() {
+      _modal2.default.show(_signIn2.default);
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'page page-message page-message-success page-forgotten-password-changed' },
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'div',
+            { className: 'message-panel' },
+            _react2.default.createElement(
+              'div',
+              { className: 'message-icon' },
+              _react2.default.createElement(
+                'span',
+                { className: 'material-icon' },
+                'check'
+              )
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'message-body' },
+              _react2.default.createElement(
+                'p',
+                { className: 'lead' },
+                this.getMessage()
+              ),
+              _react2.default.createElement(
+                'p',
+                null,
+                gettext("You will have to sign in using new password before continuing.")
+              ),
+              _react2.default.createElement(
+                'p',
+                null,
+                _react2.default.createElement(
+                  'button',
+                  { type: 'button', className: 'btn btn-primary', onClick: this.showSignIn },
+                  gettext("Sign in")
+                )
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return PasswordChangedPage;
+}(_react2.default.Component);
+
+var _class = function (_React$Component2) {
+  _inherits(_class, _React$Component2);
+
+  function _class() {
+    var _Object$getPrototypeO;
+
+    var _temp, _this3, _ret;
+
+    _classCallCheck(this, _class);
+
+    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    return _ret = (_temp = (_this3 = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this3), _this3.complete = function (apiResponse) {
+      _auth2.default.softSignOut();
+
+      // nuke "redirect_to" field so we don't end
+      // coming back to error page after sign in
+      $('#hidden-login-form input[name="redirect_to"]').remove();
+
+      _reactDom2.default.render(_react2.default.createElement(PasswordChangedPage, { user: apiResponse }), document.getElementById('page-mount'));
+    }, _temp), _possibleConstructorReturn(_this3, _ret);
+  }
+  /* jshint ignore:start */
+
+  _createClass(_class, [{
+    key: 'render',
+
+    /* jshint ignore:end */
+
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(ResetPasswordForm, { callback: this.complete });
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../index":136,"../services/ajax":143,"../services/auth":144,"../services/modal":149,"../services/snackbar":152,"../utils/banned-page":155,"../utils/validators":163,"./button":57,"./form":70,"./sign-in.js":107,"react":"react","react-dom":"react-dom"}],105:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require("react");
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: "getClassName",
+    value: function getClassName() {
+      if (this.props.className) {
+        return "form-search " + this.props.className;
+      } else {
+        return "form-search";
+      }
+    }
+  }, {
+    key: "render",
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        "div",
+        { className: this.getClassName() },
+        _react2.default.createElement("input", { type: "text",
+          className: "form-control",
+          value: this.props.value,
+          onChange: this.props.onChange,
+          placeholder: this.props.placeholder || gettext("Search...") }),
+        _react2.default.createElement(
+          "span",
+          { className: "material-icon" },
+          "search"
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],106:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require("react");
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    var _Object$getPrototypeO;
+
+    var _temp, _this, _ret;
+
+    _classCallCheck(this, _class);
+
+    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.change = function (value) {
+      return function () {
+        _this.props.onChange({
+          target: {
+            value: value
+          }
+        });
+      };
+    }, _temp), _possibleConstructorReturn(_this, _ret);
+  }
+
+  _createClass(_class, [{
+    key: "getChoice",
+    value: function getChoice() {
+      var _this2 = this;
+
+      var choice = null;
+      this.props.choices.map(function (item) {
+        if (item.value === _this2.props.value) {
+          choice = item;
+        }
+      });
+      return choice;
+    }
+  }, {
+    key: "getIcon",
+    value: function getIcon() {
+      return this.getChoice().icon;
+    }
+  }, {
+    key: "getLabel",
+    value: function getLabel() {
+      return this.getChoice().label;
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: "render",
+
+    /* jshint ignore:end */
+
+    value: function render() {
+      var _this3 = this;
+
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        "div",
+        { className: "btn-group btn-select-group" },
+        _react2.default.createElement(
+          "button",
+          { type: "button",
+            className: "btn btn-select dropdown-toggle",
+            id: this.props.id || null,
+            "data-toggle": "dropdown",
+            "aria-haspopup": "true",
+            "aria-expanded": "false",
+            "aria-describedby": this.props['aria-describedby'] || null,
+            disabled: this.props.disabled || false },
+          _react2.default.createElement(
+            "span",
+            { className: "material-icon" },
+            this.getIcon()
+          ),
+          this.getLabel()
+        ),
+        _react2.default.createElement(
+          "ul",
+          { className: "dropdown-menu" },
+          this.props.choices.map(function (item, i) {
+            return _react2.default.createElement(
+              "li",
+              { key: i },
+              _react2.default.createElement(
+                "button",
+                { type: "button", className: "btn-link",
+                  onClick: _this3.change(item.value) },
+                _react2.default.createElement(
+                  "span",
+                  { className: "material-icon" },
+                  item.icon
+                ),
+                item.label
+              )
+            );
+          })
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],107:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _index = require('../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _button = require('./button');
+
+var _button2 = _interopRequireDefault(_button);
+
+var _form = require('./form');
+
+var _form2 = _interopRequireDefault(_form);
+
+var _ajax = require('../services/ajax');
+
+var _ajax2 = _interopRequireDefault(_ajax);
+
+var _modal = require('../services/modal');
+
+var _modal2 = _interopRequireDefault(_modal);
+
+var _snackbar = require('../services/snackbar');
+
+var _snackbar2 = _interopRequireDefault(_snackbar);
+
+var _bannedPage = require('../utils/banned-page');
+
+var _bannedPage2 = _interopRequireDefault(_bannedPage);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_Form) {
+  _inherits(_class, _Form);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.state = {
+      'isLoading': false,
+      'showActivation': false,
+
+      'username': '',
+      'password': '',
+
+      'validators': {
+        'username': [],
+        'password': []
+      }
+    };
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'clean',
+    value: function clean() {
+      if (!this.isValid()) {
+        _snackbar2.default.error(gettext("Fill out both fields."));
+        return false;
+      } else {
+        return true;
+      }
+    }
+  }, {
+    key: 'send',
+    value: function send() {
+      return _ajax2.default.post(_index2.default.get('AUTH_API'), {
+        'username': this.state.username,
+        'password': this.state.password
+      });
+    }
+  }, {
+    key: 'handleSuccess',
+    value: function handleSuccess() {
+      var form = $('#hidden-login-form');
+
+      form.append('<input type="text" name="username" />');
+      form.append('<input type="password" name="password" />');
+
+      // fill out form with user credentials and submit it, this will tell
+      // Misago to redirect user back to right page, and will trigger browser's
+      // key ring feature
+      form.find('input[type="hidden"]').val(_ajax2.default.getCsrfToken());
+      form.find('input[name="redirect_to"]').val(window.location.pathname);
+      form.find('input[name="username"]').val(this.state.username);
+      form.find('input[name="password"]').val(this.state.password);
+      form.submit();
+
+      // keep form loading
+      this.setState({
+        'isLoading': true
+      });
+    }
+  }, {
+    key: 'handleError',
+    value: function handleError(rejection) {
+      if (rejection.status === 400) {
+        if (rejection.code === 'inactive_admin') {
+          _snackbar2.default.info(rejection.detail);
+        } else if (rejection.code === 'inactive_user') {
+          _snackbar2.default.info(rejection.detail);
+          this.setState({
+            'showActivation': true
+          });
+        } else if (rejection.code === 'banned') {
+          (0, _bannedPage2.default)(rejection.detail);
+          _modal2.default.hide();
+        } else {
+          _snackbar2.default.error(rejection.detail);
+        }
+      } else if (rejection.status === 403 && rejection.ban) {
+        (0, _bannedPage2.default)(rejection.ban);
+        _modal2.default.hide();
+      } else {
+        _snackbar2.default.apiError(rejection);
+      }
+    }
+  }, {
+    key: 'getActivationButton',
+    value: function getActivationButton() {
+      if (this.state.showActivation) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'a',
+          { href: _index2.default.get('REQUEST_ACTIVATION_URL'),
+            className: 'btn btn-success btn-block' },
+          gettext("Activate account")
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'modal-dialog modal-sm modal-sign-in',
+          role: 'document' },
+        _react2.default.createElement(
+          'div',
+          { className: 'modal-content' },
+          _react2.default.createElement(
+            'div',
+            { className: 'modal-header' },
+            _react2.default.createElement(
+              'button',
+              { type: 'button', className: 'close', 'data-dismiss': 'modal',
+                'aria-label': gettext("Close") },
+              _react2.default.createElement(
+                'span',
+                { 'aria-hidden': 'true' },
+                '×'
+              )
+            ),
+            _react2.default.createElement(
+              'h4',
+              { className: 'modal-title' },
+              gettext("Sign in")
+            )
+          ),
+          _react2.default.createElement(
+            'form',
+            { onSubmit: this.handleSubmit },
+            _react2.default.createElement(
+              'div',
+              { className: 'modal-body' },
+              _react2.default.createElement(
+                'div',
+                { className: 'form-group' },
+                _react2.default.createElement(
+                  'div',
+                  { className: 'control-input' },
+                  _react2.default.createElement('input', { id: 'id_username', className: 'form-control', type: 'text',
+                    disabled: this.state.isLoading,
+                    placeholder: gettext("Username or e-mail"),
+                    onChange: this.bindInput('username'),
+                    value: this.state.username })
+                )
+              ),
+              _react2.default.createElement(
+                'div',
+                { className: 'form-group' },
+                _react2.default.createElement(
+                  'div',
+                  { className: 'control-input' },
+                  _react2.default.createElement('input', { id: 'id_password', className: 'form-control', type: 'password',
+                    disabled: this.state.isLoading,
+                    placeholder: gettext("Password"),
+                    onChange: this.bindInput('password'),
+                    value: this.state.password })
+                )
+              )
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'modal-footer' },
+              this.getActivationButton(),
+              _react2.default.createElement(
+                _button2.default,
+                { className: 'btn-primary btn-block',
+                  loading: this.state.isLoading },
+                gettext("Sign in")
+              ),
+              _react2.default.createElement(
+                'a',
+                { href: _index2.default.get('FORGOTTEN_PASSWORD_URL'),
+                  className: 'btn btn-default btn-block' },
+                gettext("Forgot password?")
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_form2.default);
+
+exports.default = _class;
+
+},{"../index":136,"../services/ajax":143,"../services/modal":149,"../services/snackbar":152,"../utils/banned-page":155,"./button":57,"./form":70,"react":"react"}],108:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Snackbar = undefined;
+exports.select = select;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+/* jshint ignore:start */
+var TYPES_CLASSES = {
+  'info': 'alert-info',
+  'success': 'alert-success',
+  'warning': 'alert-warning',
+  'error': 'alert-danger'
+};
+/* jshint ignore:end */
+
+var Snackbar = exports.Snackbar = function (_React$Component) {
+  _inherits(Snackbar, _React$Component);
+
+  function Snackbar() {
+    _classCallCheck(this, Snackbar);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(Snackbar).apply(this, arguments));
+  }
+
+  _createClass(Snackbar, [{
+    key: 'getSnackbarClass',
+    value: function getSnackbarClass() {
+      var snackbarClass = 'alerts-snackbar';
+      if (this.props.isVisible) {
+        snackbarClass += ' in';
+      } else {
+        snackbarClass += ' out';
+      }
+      return snackbarClass;
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getSnackbarClass() },
+        _react2.default.createElement(
+          'p',
+          { className: 'alert ' + TYPES_CLASSES[this.props.type] },
+          this.props.message
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return Snackbar;
+}(_react2.default.Component);
+
+function select(state) {
+  return state.snackbar;
+}
+
+},{"react":"react"}],109:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require("react");
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: "render",
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        "div",
+        { className: "threads-list ui-ready" },
+        _react2.default.createElement(
+          "ul",
+          { className: "list-group" },
+          _react2.default.createElement(
+            "li",
+            { className: "list-group-item empty-message" },
+            "I am threads list placeholder!"
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],110:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRouter = require('react-router');
+
+var _dropdownToggle = require('../dropdown-toggle');
+
+var _dropdownToggle2 = _interopRequireDefault(_dropdownToggle);
+
+var _navs = require('./navs');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.props.route.lists.length > 1) {
+        return 'page-header tabbed';
+      } else {
+        return 'page-header';
+      }
+    }
+  }, {
+    key: 'getGoBackButton',
+    value: function getGoBackButton() {
+      if (this.props.route.category.parent) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          _reactRouter.Link,
+          { className: 'btn btn-default btn-aligned btn-icon btn-go-back pull-left',
+            to: this.props.route.category.parent.absolute_url + this.props.route.list.path },
+          _react2.default.createElement(
+            'span',
+            { className: 'material-icon' },
+            'keyboard_arrow_left'
+          )
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getCompactNavToggle',
+    value: function getCompactNavToggle() {
+      if (this.props.route.lists.length > 1) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(_dropdownToggle2.default, { toggleNav: this.props.toggleNav,
+          dropdown: this.props.dropdown });
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getTabsNav',
+    value: function getTabsNav() {
+      if (this.props.route.lists.length > 1) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(_navs.TabsNav, { baseUrl: this.props.route.category.absolute_url,
+          list: this.props.route.list,
+          lists: this.props.route.lists,
+          hideNav: this.props.hideNav });
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getClassName() },
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          this.getGoBackButton(),
+          _react2.default.createElement(
+            'h1',
+            { className: 'pull-left' },
+            this.props.title
+          ),
+          this.getCompactNavToggle()
+        ),
+        this.getTabsNav()
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../dropdown-toggle":68,"./navs":111,"react":"react","react-router":"react-router"}],111:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CompactNav = exports.TabsNav = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRouter = require('react-router');
+
+var _li = require('../li');
+
+var _li2 = _interopRequireDefault(_li);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+
+//jshint ignore:line
+
+// jshint ignore:start
+var navLinks = function navLinks(baseUrl, active, lists, hideNav) {
+  return lists.map(function (list) {
+    return _react2.default.createElement(
+      _li2.default,
+      { isControlled: true,
+        isActive: list.path === active.path,
+        key: baseUrl + list.path },
+      _react2.default.createElement(
+        _reactRouter.Link,
+        { to: baseUrl + list.path, onClick: hideNav },
+        _react2.default.createElement(
+          'span',
+          { className: 'hidden-xs hidden-sm' },
+          list.name
+        ),
+        _react2.default.createElement(
+          'span',
+          { className: 'hidden-md hidden-lg' },
+          list.longName
+        )
+      )
+    );
+  });
+};
+// jshint ignore:end
+
+var TabsNav = exports.TabsNav = function (_React$Component) {
+  _inherits(TabsNav, _React$Component);
+
+  function TabsNav() {
+    _classCallCheck(this, TabsNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(TabsNav).apply(this, arguments));
+  }
+
+  _createClass(TabsNav, [{
+    key: 'render',
+    value: function render() {
+      // jshint ignore:start
+      return _react2.default.createElement(
+        'div',
+        { className: 'page-tabs hidden-xs hidden-sm' },
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'ul',
+            { className: 'nav nav-pills' },
+            navLinks(this.props.baseUrl, this.props.list, this.props.lists, this.props.hideNav)
+          )
+        )
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return TabsNav;
+}(_react2.default.Component);
+
+var CompactNav = exports.CompactNav = function (_React$Component2) {
+  _inherits(CompactNav, _React$Component2);
+
+  function CompactNav() {
+    _classCallCheck(this, CompactNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));
+  }
+
+  _createClass(CompactNav, [{
+    key: 'render',
+    value: function render() {
+      // jshint ignore:start
+      return _react2.default.createElement(
+        'ul',
+        { className: 'dropdown-menu', role: 'menu' },
+        navLinks(this.props.baseUrl, this.props.list, this.props.lists, this.props.hideNav)
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return CompactNav;
+}(_react2.default.Component);
+
+},{"../li":71,"react":"react","react-router":"react-router"}],112:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.select = select;
+exports.getLists = getLists;
+exports.paths = paths;
+
+var _reactRedux = require('react-redux');
+
+var _route = require('./route');
+
+var _route2 = _interopRequireDefault(_route);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function select(store) {
+  return {
+    'tick': store.tick.tick,
+    'user': store.auth.user
+  };
+}
+
+function getLists() {
+  var lists = [{
+    path: '',
+    name: gettext("All"),
+    longName: gettext("All threads")
+  }];
+
+  if (_index2.default.get('isAuthenticated')) {
+    lists.push({
+      path: 'my/',
+      name: gettext("My"),
+      longName: gettext("My threads")
+    });
+    lists.push({
+      path: 'new/',
+      name: gettext("New"),
+      longName: gettext("New threads")
+    });
+    lists.push({
+      path: 'unread/',
+      name: gettext("Unread"),
+      longName: gettext("Unread threads")
+    });
+    lists.push({
+      path: 'subscribed/',
+      name: gettext("Subscribed"),
+      longName: gettext("Subscribed threads")
+    });
+  }
+
+  return lists;
+}
+
+function paths() {
+  var lists = getLists();
+  var paths = [];
+  var categoriesMap = {};
+
+  _index2.default.get('CATEGORIES').forEach(function (category) {
+    lists.forEach(function (list) {
+      categoriesMap[category.id] = categoriesMap;
+
+      paths.push({
+        path: category.absolute_url + list.path,
+        component: (0, _reactRedux.connect)(select)(_route2.default),
+
+        categoriesMap: categoriesMap,
+        category: category,
+
+        lists: lists,
+        list: list
+      });
+    });
+  });
+
+  return paths;
+}
+
+},{"../../index":136,"./route":113,"react-redux":"react-redux"}],113:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _header = require('./header');
+
+var _header2 = _interopRequireDefault(_header);
+
+var _navs = require('./navs');
+
+var _titleUtils = require('./title-utils');
+
+var _root = require('../threads-list/root');
+
+var _root2 = _interopRequireDefault(_root);
+
+var _withDropdown = require('../with-dropdown');
+
+var _withDropdown2 = _interopRequireDefault(_withDropdown);
+
+var _pageTitle = require('../../services/page-title');
+
+var _pageTitle2 = _interopRequireDefault(_pageTitle);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_WithDropdown) {
+  _inherits(_class, _WithDropdown);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'componentDidMount',
+    value: function componentDidMount() {
+      _pageTitle2.default.set((0, _titleUtils.getPageTitle)(this.props.route));
+    }
+  }, {
+    key: 'getTitle',
+    value: function getTitle() {
+      return (0, _titleUtils.getTitle)(this.props.route);
+    }
+  }, {
+    key: 'getClassName',
+    value: function getClassName() {
+      var className = 'page page-threads';
+      className += ' page-threads-' + this.props.route.list;
+      if (this.props.route.category.css_class) {
+        className += ' page-' + this.props.route.category.css_class;
+      }
+      return className;
+    }
+  }, {
+    key: 'getCompactNav',
+    value: function getCompactNav() {
+      if (this.props.route.lists.length > 1) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(_navs.CompactNav, { baseUrl: this.props.route.category.absolute_url,
+          list: this.props.route.list,
+          lists: this.props.route.lists,
+          hideNav: this.hideNav });
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getClassName() },
+        _react2.default.createElement(_header2.default, { title: this.getTitle(),
+          route: this.props.route,
+          dropdown: this.state.dropdown,
+          toggleNav: this.toggleNav,
+          hideNav: this.hideNav }),
+        _react2.default.createElement(
+          'div',
+          { className: this.getCompactNavClassName() },
+          this.getCompactNav()
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(_root2.default, null)
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_withDropdown2.default);
+
+exports.default = _class;
+
+},{"../../services/page-title":150,"../threads-list/root":109,"../with-dropdown":134,"./header":110,"./navs":111,"./title-utils":114,"react":"react"}],114:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.getPageTitle = getPageTitle;
+exports.getTitle = getTitle;
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function getPageTitle(route) {
+  if (!route.category.special_role) {
+    if (route.list.path) {
+      return {
+        title: route.list.longName,
+        parent: route.category.name
+      };
+    } else {
+      return {
+        title: route.category.name
+      };
+    }
+  } else if (!_index2.default.get('CATEGORIES_ON_INDEX')) {
+    if (route.list.path) {
+      return {
+        title: route.list.longName
+      };
+    } else {
+      return null;
+    }
+  } else {
+    if (route.list.path) {
+      return {
+        title: route.list.longName,
+        parent: gettext("Threads")
+      };
+    } else {
+      return {
+        title: gettext("Threads")
+      };
+    }
+  }
+}
+
+function getTitle(route) {
+  if (!route.category.special_role) {
+    return route.category.name;
+  } else if (!_index2.default.get('CATEGORIES_ON_INDEX')) {
+    if (_index2.default.get('SETTINGS').forum_index_title) {
+      return _index2.default.get('SETTINGS').forum_index_title;
+    } else {
+      return _index2.default.get('SETTINGS').forum_name;
+    }
+  } else {
+    return gettext("Threads");
+  }
+}
+
+},{"../../index":136}],115:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CompactGuestNav = exports.GuestNav = exports.GuestMenu = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _avatar = require('../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _registerButton = require('../register-button');
+
+var _registerButton2 = _interopRequireDefault(_registerButton);
+
+var _signIn = require('../sign-in.js');
+
+var _signIn2 = _interopRequireDefault(_signIn);
+
+var _mobileNavbarDropdown = require('../../services/mobile-navbar-dropdown');
+
+var _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);
+
+var _modal = require('../../services/modal');
+
+var _modal2 = _interopRequireDefault(_modal);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+
+var GuestMenu = exports.GuestMenu = function (_React$Component) {
+  _inherits(GuestMenu, _React$Component);
+
+  function GuestMenu() {
+    _classCallCheck(this, GuestMenu);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(GuestMenu).apply(this, arguments));
+  }
+
+  _createClass(GuestMenu, [{
+    key: 'showSignInModal',
+    value: function showSignInModal() {
+      _modal2.default.show(_signIn2.default);
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'ul',
+        { className: 'dropdown-menu user-dropdown dropdown-menu-right',
+          role: 'menu' },
+        _react2.default.createElement(
+          'li',
+          { className: 'guest-preview' },
+          _react2.default.createElement(
+            'h4',
+            null,
+            gettext("You are browsing as guest.")
+          ),
+          _react2.default.createElement(
+            'p',
+            null,
+            gettext('Sign in or register to start and participate in discussions.')
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'row' },
+            _react2.default.createElement(
+              'div',
+              { className: 'col-xs-6' },
+              _react2.default.createElement(
+                'button',
+                { type: 'button', className: 'btn btn-default btn-block',
+                  onClick: this.showSignInModal },
+                gettext("Sign in")
+              )
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'col-xs-6' },
+              _react2.default.createElement(
+                _registerButton2.default,
+                { className: 'btn-primary btn-block' },
+                gettext("Register")
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return GuestMenu;
+}(_react2.default.Component);
+
+var GuestNav = exports.GuestNav = function (_GuestMenu) {
+  _inherits(GuestNav, _GuestMenu);
+
+  function GuestNav() {
+    _classCallCheck(this, GuestNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(GuestNav).apply(this, arguments));
+  }
+
+  _createClass(GuestNav, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'nav nav-guest' },
+        _react2.default.createElement(
+          'button',
+          { type: 'button', className: 'btn navbar-btn btn-default',
+            onClick: this.showSignInModal },
+          gettext("Sign in")
+        ),
+        _react2.default.createElement(
+          _registerButton2.default,
+          { className: 'navbar-btn btn-primary' },
+          gettext("Register")
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return GuestNav;
+}(GuestMenu);
+
+var CompactGuestNav = exports.CompactGuestNav = function (_React$Component2) {
+  _inherits(CompactGuestNav, _React$Component2);
+
+  function CompactGuestNav() {
+    _classCallCheck(this, CompactGuestNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactGuestNav).apply(this, arguments));
+  }
+
+  _createClass(CompactGuestNav, [{
+    key: 'showGuestMenu',
+    value: function showGuestMenu() {
+      _mobileNavbarDropdown2.default.show(GuestMenu);
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'button',
+        { type: 'button', onClick: this.showGuestMenu },
+        _react2.default.createElement(_avatar2.default, { size: '64' })
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return CompactGuestNav;
+}(_react2.default.Component);
+
+},{"../../services/mobile-navbar-dropdown":148,"../../services/modal":149,"../avatar":55,"../register-button":100,"../sign-in.js":107,"react":"react"}],116:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CompactUserMenu = exports.UserMenu = undefined;
+exports.select = select;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _guestNav = require('./guest-nav');
+
+var _userNav = require('./user-nav');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+
+// jshint ignore:line
+
+var UserMenu = exports.UserMenu = function (_React$Component) {
+  _inherits(UserMenu, _React$Component);
+
+  function UserMenu() {
+    _classCallCheck(this, UserMenu);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserMenu).apply(this, arguments));
+  }
+
+  _createClass(UserMenu, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      if (this.props.isAuthenticated) {
+        return _react2.default.createElement(_userNav.UserNav, { user: this.props.user });
+      } else {
+        return _react2.default.createElement(_guestNav.GuestNav, null);
+      }
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return UserMenu;
+}(_react2.default.Component);
+
+var CompactUserMenu = exports.CompactUserMenu = function (_React$Component2) {
+  _inherits(CompactUserMenu, _React$Component2);
+
+  function CompactUserMenu() {
+    _classCallCheck(this, CompactUserMenu);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactUserMenu).apply(this, arguments));
+  }
+
+  _createClass(CompactUserMenu, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      if (this.props.isAuthenticated) {
+        return _react2.default.createElement(_userNav.CompactUserNav, { user: this.props.user });
+      } else {
+        return _react2.default.createElement(_guestNav.CompactGuestNav, null);
+      }
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return CompactUserMenu;
+}(_react2.default.Component);
+
+function select(state) {
+  return state.auth;
+}
+
+},{"./guest-nav":115,"./user-nav":117,"react":"react"}],117:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CompactUserNav = exports.UserNav = exports.UserMenu = undefined;
+exports.selectUserMenu = selectUserMenu;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRedux = require('react-redux');
+
+var _avatar = require('../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _root = require('../change-avatar/root');
+
+var _root2 = _interopRequireDefault(_root);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _mobileNavbarDropdown = require('../../services/mobile-navbar-dropdown');
+
+var _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);
+
+var _modal = require('../../services/modal');
+
+var _modal2 = _interopRequireDefault(_modal);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var UserMenu = exports.UserMenu = function (_React$Component) {
+  _inherits(UserMenu, _React$Component);
+
+  function UserMenu() {
+    _classCallCheck(this, UserMenu);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserMenu).apply(this, arguments));
+  }
+
+  _createClass(UserMenu, [{
+    key: 'logout',
+    value: function logout() {
+      var decision = confirm(gettext("Are you sure you want to sign out?"));
+      if (decision) {
+        $('#hidden-logout-form').submit();
+      }
+    }
+  }, {
+    key: 'changeAvatar',
+    value: function changeAvatar() {
+      _modal2.default.show((0, _reactRedux.connect)(_root.select)(_root2.default));
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'ul',
+        { className: 'dropdown-menu user-dropdown dropdown-menu-right',
+          role: 'menu' },
+        _react2.default.createElement(
+          'li',
+          { className: 'dropdown-header' },
+          _react2.default.createElement(
+            'strong',
+            null,
+            this.props.user.username
+          )
+        ),
+        _react2.default.createElement('li', { className: 'divider' }),
+        _react2.default.createElement(
+          'li',
+          null,
+          _react2.default.createElement(
+            'a',
+            { href: this.props.user.absolute_url },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              'account_circle'
+            ),
+            gettext("See your profile")
+          )
+        ),
+        _react2.default.createElement(
+          'li',
+          null,
+          _react2.default.createElement(
+            'a',
+            { href: _index2.default.get('USERCP_URL') },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              'done_all'
+            ),
+            gettext("Change options")
+          )
+        ),
+        _react2.default.createElement(
+          'li',
+          null,
+          _react2.default.createElement(
+            'button',
+            { type: 'button', className: 'btn-link', onClick: this.changeAvatar },
+            _react2.default.createElement(
+              'span',
+              { className: 'material-icon' },
+              'portrait'
+            ),
+            gettext("Change avatar")
+          )
+        ),
+        _react2.default.createElement('li', { className: 'divider' }),
+        _react2.default.createElement(
+          'li',
+          { className: 'dropdown-buttons' },
+          _react2.default.createElement(
+            'button',
+            { type: 'button', className: 'btn btn-default btn-block',
+              onClick: this.logout },
+            gettext("Log out")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return UserMenu;
+}(_react2.default.Component);
+
+var UserNav = exports.UserNav = function (_React$Component2) {
+  _inherits(UserNav, _React$Component2);
+
+  function UserNav() {
+    _classCallCheck(this, UserNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserNav).apply(this, arguments));
+  }
+
+  _createClass(UserNav, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'ul',
+        { className: 'ul nav navbar-nav nav-user' },
+        _react2.default.createElement(
+          'li',
+          { className: 'dropdown' },
+          _react2.default.createElement(
+            'a',
+            { href: this.props.user.absolute_url, className: 'dropdown-toggle',
+              'data-toggle': 'dropdown', 'aria-haspopup': 'true', 'aria-expanded': 'false',
+              role: 'button' },
+            _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '64' })
+          ),
+          _react2.default.createElement(UserMenu, { user: this.props.user })
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return UserNav;
+}(_react2.default.Component);
+
+function selectUserMenu(state) {
+  return { user: state.auth.user };
+}
+
+var CompactUserNav = exports.CompactUserNav = function (_React$Component3) {
+  _inherits(CompactUserNav, _React$Component3);
+
+  function CompactUserNav() {
+    _classCallCheck(this, CompactUserNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactUserNav).apply(this, arguments));
+  }
+
+  _createClass(CompactUserNav, [{
+    key: 'showUserMenu',
+    value: function showUserMenu() {
+      _mobileNavbarDropdown2.default.showConnected('user-menu', (0, _reactRedux.connect)(selectUserMenu)(UserMenu));
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'button',
+        { type: 'button', onClick: this.showUserMenu },
+        _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '64' })
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return CompactUserNav;
+}(_react2.default.Component);
+
+},{"../../index":136,"../../services/mobile-navbar-dropdown":148,"../../services/modal":149,"../avatar":55,"../change-avatar/root":66,"react":"react","react-redux":"react-redux"}],118:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.StatusLabel = exports.StatusIcon = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getClass',
+    value: function getClass() {
+      var status = '';
+      if (this.props.status.is_banned) {
+        status = 'banned';
+      } else if (this.props.status.is_hidden) {
+        status = 'offline';
+      } else if (this.props.status.is_online_hidden) {
+        status = 'online';
+      } else if (this.props.status.is_offline_hidden) {
+        status = 'offline';
+      } else if (this.props.status.is_online) {
+        status = 'online';
+      } else if (this.props.status.is_offline) {
+        status = 'offline';
+      }
+
+      return 'user-status user-' + status;
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'span',
+        { className: this.getClass() },
+        this.props.children
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+var StatusIcon = exports.StatusIcon = function (_React$Component2) {
+  _inherits(StatusIcon, _React$Component2);
+
+  function StatusIcon() {
+    _classCallCheck(this, StatusIcon);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(StatusIcon).apply(this, arguments));
+  }
+
+  _createClass(StatusIcon, [{
+    key: 'getIcon',
+    value: function getIcon() {
+      if (this.props.status.is_banned) {
+        return 'remove_circle_outline';
+      } else if (this.props.status.is_hidden) {
+        return 'help_outline';
+      } else if (this.props.status.is_online_hidden) {
+        return 'label';
+      } else if (this.props.status.is_offline_hidden) {
+        return 'label_outline';
+      } else if (this.props.status.is_online) {
+        return 'lens';
+      } else if (this.props.status.is_offline) {
+        return 'panorama_fish_eye';
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'span',
+        { className: 'material-icon status-icon' },
+        this.getIcon()
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return StatusIcon;
+}(_react2.default.Component);
+
+var StatusLabel = exports.StatusLabel = function (_React$Component3) {
+  _inherits(StatusLabel, _React$Component3);
+
+  function StatusLabel() {
+    _classCallCheck(this, StatusLabel);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(StatusLabel).apply(this, arguments));
+  }
+
+  _createClass(StatusLabel, [{
+    key: 'getHelp',
+    value: function getHelp() {
+      if (this.props.status.is_banned) {
+        if (this.props.status.banned_until) {
+          return interpolate(gettext("%(username)s is banned until %(ban_expires)s"), {
+            username: this.props.user.username,
+            ban_expires: this.props.status.banned_until.format('LL, LT')
+          }, true);
+        } else {
+          return interpolate(gettext("%(username)s is banned"), {
+            username: this.props.user.username
+          }, true);
+        }
+      } else if (this.props.status.is_hidden) {
+        return interpolate(gettext("%(username)s is hiding presence"), {
+          username: this.props.user.username
+        }, true);
+      } else if (this.props.status.is_online_hidden) {
+        return interpolate(gettext("%(username)s is online (hidden)"), {
+          username: this.props.user.username
+        }, true);
+      } else if (this.props.status.is_offline_hidden) {
+        return interpolate(gettext("%(username)s was last seen %(last_click)s (hidden)"), {
+          username: this.props.user.username,
+          last_click: this.props.status.last_click.fromNow()
+        }, true);
+      } else if (this.props.status.is_online) {
+        return interpolate(gettext("%(username)s is online"), {
+          username: this.props.user.username
+        }, true);
+      } else if (this.props.status.is_offline) {
+        return interpolate(gettext("%(username)s was last seen %(last_click)s"), {
+          username: this.props.user.username,
+          last_click: this.props.status.last_click.fromNow()
+        }, true);
+      }
+    }
+  }, {
+    key: 'getLabel',
+    value: function getLabel() {
+      if (this.props.status.is_banned) {
+        return gettext("Banned");
+      } else if (this.props.status.is_hidden) {
+        return gettext("Hidden");
+      } else if (this.props.status.is_online_hidden) {
+        return gettext("Online (hidden)");
+      } else if (this.props.status.is_offline_hidden) {
+        return gettext("Offline (hidden)");
+      } else if (this.props.status.is_online) {
+        return gettext("Online");
+      } else if (this.props.status.is_offline) {
+        return gettext("Offline");
+      }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'span',
+        { className: this.props.className || "status-label",
+          title: this.getHelp() },
+        this.getLabel()
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return StatusLabel;
+}(_react2.default.Component);
+
+},{"react":"react"}],119:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _avatar = require('./avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _random = require('../utils/random');
+
+var random = _interopRequireWildcard(_random);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'renderUserAvatar',
+    value: function renderUserAvatar(item) {
+      if (item.changed_by) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'a',
+          { href: item.changed_by.absolute_url, className: 'user-avatar-wrapper' },
+          _react2.default.createElement(_avatar2.default, { user: item.changed_by, size: '100' })
+        );
+        /* jshint ignore:end */
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'span',
+            { className: 'user-avatar-wrapper' },
+            _react2.default.createElement(_avatar2.default, { size: '100' })
+          );
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'renderUsername',
+    value: function renderUsername(item) {
+      if (item.changed_by) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'a',
+          { href: item.changed_by.absolute_url, className: 'item-title' },
+          item.changed_by.username
+        );
+        /* jshint ignore:end */
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'span',
+            { className: 'item-title' },
+            item.changed_by_username
+          );
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'renderHistory',
+    value: function renderHistory() {
+      var _this2 = this;
+
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'username-history ui-ready' },
+        _react2.default.createElement(
+          'ul',
+          { className: 'list-group' },
+          this.props.changes.map(function (item) {
+            return _react2.default.createElement(
+              'li',
+              { className: 'list-group-item', key: item.id },
+              _react2.default.createElement(
+                'div',
+                { className: 'username-change-avatar' },
+                _this2.renderUserAvatar(item)
+              ),
+              _react2.default.createElement(
+                'div',
+                { className: 'username-change-author' },
+                _this2.renderUsername(item)
+              ),
+              _react2.default.createElement(
+                'div',
+                { className: 'username-change' },
+                _react2.default.createElement(
+                  'span',
+                  { className: 'change-old-username' },
+                  item.old_username
+                ),
+                _react2.default.createElement(
+                  'span',
+                  { className: 'material-icon' },
+                  'arrow_forward'
+                ),
+                _react2.default.createElement(
+                  'span',
+                  { className: 'change-new-username' },
+                  item.new_username
+                )
+              ),
+              _react2.default.createElement(
+                'div',
+                { className: 'username-change-date' },
+                _react2.default.createElement(
+                  'abbr',
+                  { title: item.changed_on.format('LLL') },
+                  item.changed_on.fromNow()
+                )
+              )
+            );
+          })
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'getEmptyMessage',
+    value: function getEmptyMessage() {
+      if (this.props.emptyMessage) {
+        return this.props.emptyMessage;
+      } else {
+        return gettext("No name changes have been recorded for your account.");
+      }
+    }
+  }, {
+    key: 'renderEmptyHistory',
+    value: function renderEmptyHistory() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'username-history ui-ready' },
+        _react2.default.createElement(
+          'ul',
+          { className: 'list-group' },
+          _react2.default.createElement(
+            'li',
+            { className: 'list-group-item empty-message' },
+            this.getEmptyMessage()
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'renderHistoryPreview',
+    value: function renderHistoryPreview() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'username-history ui-preview' },
+        _react2.default.createElement(
+          'ul',
+          { className: 'list-group' },
+          random.range(3, 5).map(function (i) {
+            return _react2.default.createElement(
+              'li',
+              { className: 'list-group-item', key: i },
+              _react2.default.createElement(
+                'div',
+                { className: 'username-change-avatar' },
+                _react2.default.createElement(
+                  'span',
+                  { className: 'user-avatar' },
+                  _react2.default.createElement(_avatar2.default, { size: '100' })
+                )
+              ),
+              _react2.default.createElement(
+                'div',
+                { className: 'username-change-author' },
+                _react2.default.createElement(
+                  'span',
+                  { className: 'ui-preview-text', style: { width: random.int(30, 100) + "px" } },
+                  ' '
+                )
+              ),
+              _react2.default.createElement(
+                'div',
+                { className: 'username-change' },
+                _react2.default.createElement(
+                  'span',
+                  { className: 'ui-preview-text', style: { width: random.int(30, 50) + "px" } },
+                  ' '
+                ),
+                _react2.default.createElement(
+                  'span',
+                  { className: 'material-icon' },
+                  'arrow_forward'
+                ),
+                _react2.default.createElement(
+                  'span',
+                  { className: 'ui-preview-text', style: { width: random.int(30, 50) + "px" } },
+                  ' '
+                )
+              ),
+              _react2.default.createElement(
+                'div',
+                { className: 'username-change-date' },
+                _react2.default.createElement(
+                  'span',
+                  { className: 'ui-preview-text', style: { width: random.int(50, 100) + "px" } },
+                  ' '
+                )
+              )
+            );
+          })
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      if (this.props.isLoaded) {
+        if (this.props.changes.length) {
+          return this.renderHistory();
+        } else {
+          return this.renderEmptyHistory();
+        }
+      } else {
+        return this.renderHistoryPreview();
+      }
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../utils/random":160,"./avatar":55,"react":"react"}],120:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _userCard = require('./user-card');
+
+var _userCard2 = _interopRequireDefault(_userCard);
+
+var _userPreview = require('./user-preview');
+
+var _userPreview2 = _interopRequireDefault(_userPreview);
+
+var _batch = require('../../utils/batch');
+
+var _batch2 = _interopRequireDefault(_batch);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getPager',
+    value: function getPager() {
+      if (this.props.pages > 1) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(Pager, this.props);
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.props.className) {
+        return "users-cards-list " + this.props.className + " ui-ready";
+      } else {
+        return "users-cards-list ui-ready";
+      }
+    }
+  }, {
+    key: 'getColClassName',
+    value: function getColClassName() {
+      return "col-md-" + 12 / this.props.cols;
+    }
+  }, {
+    key: 'getBody',
+    value: function getBody() {
+      var _this2 = this;
+
+      if (this.props.isLoaded) {
+        /* jshint ignore:start */
+        return (0, _batch2.default)(this.props.users, this.props.cols).map(function (row, r) {
+          return _react2.default.createElement(
+            'div',
+            { className: 'row', key: r },
+            row.map(function (user) {
+              return _react2.default.createElement(
+                'div',
+                { className: _this2.getColClassName(), key: user.id },
+                _react2.default.createElement(_userCard2.default, { user: user,
+                  showStatus: _this2.props.showStatus,
+                  showRank: _this2.props.showRank })
+              );
+            })
+          );
+        });
+        /* jshint ignore:end */
+      } else {
+          /* jshint ignore:start */
+          var row = [];
+          for (var i = 0; i < this.props.cols; i++) {
+            if (i === 0) {
+              row.push(this.getColClassName());
+            } else {
+              row.push(this.getColClassName() + ' hidden-xs hidden-sm');
+            }
+          }
+
+          return _react2.default.createElement(
+            'div',
+            { className: 'row' },
+            row.map(function (className, i) {
+              return _react2.default.createElement(
+                'div',
+                { className: className, key: i },
+                _react2.default.createElement(_userPreview2.default, { showStatus: _this2.props.showStatus })
+              );
+            })
+          );
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'users-cards-list ui-ready' },
+        this.getBody()
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../utils/batch":156,"./user-card":121,"./user-preview":122,"react":"react"}],121:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _avatar = require('../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _userStatus = require('../user-status');
+
+var _userStatus2 = _interopRequireDefault(_userStatus);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.props.user.rank.css_class) {
+        return 'user-card user-card-' + this.props.user.rank.css_class + ' ui-ready';
+      } else {
+        return 'user-card ui-ready';
+      }
+    }
+  }, {
+    key: 'getUserStatus',
+    value: function getUserStatus() {
+      if (this.props.showStatus) {
+        if (this.props.user.status) {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            _userStatus2.default,
+            { user: this.props.user, status: this.props.user.status },
+            _react2.default.createElement(_userStatus.StatusIcon, { user: this.props.user,
+              status: this.props.user.status }),
+            _react2.default.createElement(_userStatus.StatusLabel, { user: this.props.user,
+              status: this.props.user.status,
+              className: 'status-label' })
+          );
+          /* jshint ignore:end */
+        } else {
+            /* jshint ignore:start */
+            return _react2.default.createElement(
+              'span',
+              { className: 'user-status' },
+              _react2.default.createElement(
+                'span',
+                { className: 'status-icon ui-preview' },
+                ' '
+              ),
+              _react2.default.createElement(
+                'span',
+                { className: 'status-label ui-preview' },
+                ' '
+              )
+            );
+            /* jshint ignore:end */
+          }
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getRankName',
+    value: function getRankName() {
+      if (this.props.showRank) {
+        if (this.props.user.rank.is_tab) {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'a',
+            { href: this.props.user.rank.absolute_url,
+              className: 'item-title rank-name' },
+            this.props.user.rank.name
+          );
+          /* jshint ignore:end */
+        } else {
+            /* jshint ignore:start */
+            return _react2.default.createElement(
+              'span',
+              { className: 'item-title rank-name' },
+              this.props.user.rank.name
+            );
+            /* jshint ignore:end */
+          }
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getUserTitle',
+    value: function getUserTitle() {
+      if (this.props.user.title) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'span',
+          { className: 'user-title' },
+          this.props.user.title
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getUserJoinedOn',
+    value: function getUserJoinedOn() {
+      /* jshint ignore:start */
+      var title = interpolate(gettext("Joined on %(joined_on)s"), {
+        'joined_on': this.props.user.joined_on.format('LL, LT')
+      }, true);
+
+      var age = interpolate(gettext("Joined %(joined_on)s"), {
+        'joined_on': this.props.user.joined_on.fromNow()
+      }, true);
+
+      return _react2.default.createElement(
+        'span',
+        { className: 'user-joined-on', title: title },
+        age
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'getPostsCount',
+    value: function getPostsCount() {
+      var message = ngettext("%(posts)s post", "%(posts)s posts", this.props.user.posts);
+
+      return interpolate(message, {
+        'posts': this.props.user.posts
+      }, true);
+    }
+  }, {
+    key: 'getThreadsCount',
+    value: function getThreadsCount() {
+      var message = ngettext("%(threads)s thread", "%(threads)s threads", this.props.user.threads);
+
+      return interpolate(message, {
+        'threads': this.props.user.threads
+      }, true);
+    }
+  }, {
+    key: 'getFollowersCount',
+    value: function getFollowersCount() {
+      var message = ngettext("%(followers)s follower", "%(followers)s followers", this.props.user.followers);
+
+      return interpolate(message, {
+        'followers': this.props.user.followers
+      }, true);
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getClassName() },
+        _react2.default.createElement(
+          'div',
+          { className: 'user-card-bg-image' },
+          _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '400', className: 'bg-image' }),
+          _react2.default.createElement(
+            'div',
+            { className: 'user-card-bg' },
+            _react2.default.createElement(
+              'div',
+              { className: 'user-details' },
+              _react2.default.createElement(
+                'div',
+                { className: 'user-avatar' },
+                _react2.default.createElement(
+                  'a',
+                  { href: this.props.user.absolute_url },
+                  _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '400' })
+                )
+              ),
+              _react2.default.createElement(
+                'h4',
+                { className: 'user-name' },
+                _react2.default.createElement(
+                  'a',
+                  { href: this.props.user.absolute_url, className: 'item-title' },
+                  this.props.user.username
+                )
+              ),
+              _react2.default.createElement(
+                'p',
+                { className: 'user-subscript' },
+                this.getUserStatus(),
+                this.getRankName(),
+                this.getUserTitle(),
+                this.getUserJoinedOn()
+              )
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'user-card-stats' },
+              _react2.default.createElement(
+                'ul',
+                { className: 'list-unstyled' },
+                _react2.default.createElement(
+                  'li',
+                  { className: 'user-posts-count' },
+                  this.getPostsCount()
+                ),
+                _react2.default.createElement(
+                  'li',
+                  { className: 'user-threads-count' },
+                  this.getThreadsCount()
+                ),
+                _react2.default.createElement(
+                  'li',
+                  { className: 'user-followers-count' },
+                  this.getFollowersCount()
+                )
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../avatar":55,"../user-status":118,"react":"react"}],122:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _avatar = require('../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _random = require('../../utils/random');
+
+var random = _interopRequireWildcard(_random);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getUserStatus',
+    value: function getUserStatus() {
+      if (this.props.showStatus) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'span',
+          { className: 'user-status' },
+          _react2.default.createElement(
+            'span',
+            { className: 'status-icon ui-preview' },
+            ' '
+          ),
+          _react2.default.createElement(
+            'span',
+            { className: 'status-label ui-preview' },
+            ' '
+          )
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'user-card ui-preview' },
+        _react2.default.createElement(
+          'div',
+          { className: 'user-card-bg-image' },
+          _react2.default.createElement(_avatar2.default, { size: '400', className: 'bg-image' }),
+          _react2.default.createElement(
+            'div',
+            { className: 'user-card-bg' },
+            _react2.default.createElement(
+              'div',
+              { className: 'user-details' },
+              _react2.default.createElement(
+                'div',
+                { className: 'user-avatar' },
+                _react2.default.createElement(_avatar2.default, { size: '400' })
+              ),
+              _react2.default.createElement(
+                'h4',
+                { className: 'user-name' },
+                _react2.default.createElement(
+                  'span',
+                  { className: 'item-title' },
+                  _react2.default.createElement(
+                    'span',
+                    { className: 'ui-preview-text', style: { width: random.int(60, 150) + "px" } },
+                    ' '
+                  )
+                )
+              ),
+              _react2.default.createElement(
+                'p',
+                { className: 'user-subscript' },
+                this.getUserStatus(),
+                _react2.default.createElement(
+                  'span',
+                  { className: 'user-joined-on' },
+                  _react2.default.createElement(
+                    'span',
+                    { className: 'ui-preview-text', style: { width: random.int(30, 50) + "px" } },
+                    ' '
+                  )
+                )
+              )
+            ),
+            _react2.default.createElement(
+              'div',
+              { className: 'user-card-stats' },
+              _react2.default.createElement(
+                'ul',
+                { className: 'list-unstyled' },
+                _react2.default.createElement(
+                  'li',
+                  { className: 'user-posts-count' },
+                  _react2.default.createElement(
+                    'span',
+                    { className: 'ui-preview-text', style: { width: random.int(40, 70) + "px" } },
+                    ' '
+                  )
+                ),
+                _react2.default.createElement(
+                  'li',
+                  { className: 'user-threads-count' },
+                  _react2.default.createElement(
+                    'span',
+                    { className: 'ui-preview-text', style: { width: random.int(40, 70) + "px" } },
+                    ' '
+                  )
+                ),
+                _react2.default.createElement(
+                  'li',
+                  { className: 'user-followers-count' },
+                  _react2.default.createElement(
+                    'span',
+                    { className: 'ui-preview-text', style: { width: random.int(40, 70) + "px" } },
+                    ' '
+                  )
+                )
+              )
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../utils/random":160,"../avatar":55,"react":"react"}],123:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getEmptyMessage',
+    value: function getEmptyMessage() {
+      return interpolate(gettext("No users have posted any new messages during last %(days)s days."), { 'days': this.props.trackedPeriod }, true);
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'active-posters-list' },
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'p',
+            { className: 'lead' },
+            this.getEmptyMessage()
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],124:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRouter = require('react-router');
+
+var _avatar = require('../../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _userStatus = require('../../user-status');
+
+var _userStatus2 = _interopRequireDefault(_userStatus);
+
+var _index = require('../../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.props.rank.css_class) {
+        return "list-group-item list-group-rank-" + this.props.rank.css_class;
+      } else {
+        return "list-group-item";
+      }
+    }
+  }, {
+    key: 'getUserStatus',
+    value: function getUserStatus() {
+      if (this.props.user.status) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          _userStatus2.default,
+          { user: this.props.user, status: this.props.user.status },
+          _react2.default.createElement(_userStatus.StatusIcon, { user: this.props.user,
+            status: this.props.user.status }),
+          _react2.default.createElement(_userStatus.StatusLabel, { user: this.props.user,
+            status: this.props.user.status,
+            className: 'status-label hidden-xs hidden-sm' })
+        );
+        /* jshint ignore:end */
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'span',
+            { className: 'user-status' },
+            _react2.default.createElement(
+              'span',
+              { className: 'status-icon ui-preview' },
+              ' '
+            ),
+            _react2.default.createElement(
+              'span',
+              { className: 'status-label ui-preview hidden-xs hidden-sm' },
+              ' '
+            )
+          );
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'getRankName',
+    value: function getRankName() {
+      if (this.props.rank.is_tab) {
+        /* jshint ignore:start */
+        var rankUrl = _index2.default.get('USERS_LIST_URL') + this.props.rank.slug + '/';
+        return _react2.default.createElement(
+          _reactRouter.Link,
+          { to: rankUrl, className: 'item-title rank-name' },
+          this.props.rank.name
+        );
+        /* jshint ignore:end */
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(
+            'span',
+            { className: 'item-title rank-name' },
+            this.props.rank.name
+          );
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'getUserTitle',
+    value: function getUserTitle() {
+      if (this.props.user.title) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'span',
+          { className: 'user-title hidden-xs hidden-sm' },
+          this.props.user.title
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'li',
+        { className: this.getClassName() },
+        _react2.default.createElement(
+          'div',
+          { className: 'rank-user-avatar' },
+          _react2.default.createElement(
+            'a',
+            { href: this.props.user.absolute_url },
+            _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '50' })
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'rank-user' },
+          _react2.default.createElement(
+            'div',
+            { className: 'user-name' },
+            _react2.default.createElement(
+              'a',
+              { href: this.props.user.absolute_url, className: 'item-title' },
+              this.props.user.username
+            )
+          ),
+          this.getUserStatus(),
+          this.getRankName(),
+          this.getUserTitle()
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'rank-position' },
+          _react2.default.createElement(
+            'strong',
+            null,
+            '#',
+            this.props.counter
+          ),
+          _react2.default.createElement(
+            'small',
+            null,
+            gettext("Rank")
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'rank-posts-counted' },
+          _react2.default.createElement(
+            'strong',
+            null,
+            this.props.user.meta.score
+          ),
+          _react2.default.createElement(
+            'small',
+            null,
+            gettext("Ranked posts")
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: 'rank-posts-total' },
+          _react2.default.createElement(
+            'strong',
+            null,
+            this.props.user.posts
+          ),
+          _react2.default.createElement(
+            'small',
+            null,
+            gettext("Total posts")
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../../index":136,"../../avatar":55,"../../user-status":118,"react":"react","react-router":"react-router"}],125:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _avatar = require('../../avatar');
+
+var _avatar2 = _interopRequireDefault(_avatar);
+
+var _random = require('../../../utils/random');
+
+var random = _interopRequireWildcard(_random);
+
+function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'active-posters-list' },
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'p',
+            { className: 'lead ui-preview-paragraph' },
+            random.range(3, 4).map(function (i) {
+              return _react2.default.createElement(
+                'span',
+                { key: i, className: 'ui-preview-text', style: { width: random.int(50, 120) + "px" } },
+                ' '
+              );
+            })
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'active-posters ui-preview' },
+            _react2.default.createElement(
+              'ul',
+              { className: 'list-group' },
+              random.range(5, 10).map(function (i, counter) {
+                return _react2.default.createElement(
+                  'li',
+                  { key: i, className: 'list-group-item' },
+                  _react2.default.createElement(
+                    'div',
+                    { className: 'rank-user-avatar' },
+                    _react2.default.createElement(
+                      'span',
+                      null,
+                      _react2.default.createElement(_avatar2.default, { size: '50' })
+                    )
+                  ),
+                  _react2.default.createElement(
+                    'div',
+                    { className: 'rank-user' },
+                    _react2.default.createElement(
+                      'div',
+                      { className: 'user-name' },
+                      _react2.default.createElement(
+                        'span',
+                        { className: 'item-title' },
+                        _react2.default.createElement(
+                          'span',
+                          { className: 'ui-preview-text', style: { width: random.int(30, 80) + "px" } },
+                          ' '
+                        )
+                      )
+                    ),
+                    _react2.default.createElement(
+                      'span',
+                      { className: 'user-status' },
+                      _react2.default.createElement(
+                        'span',
+                        { className: 'status-icon ui-preview' },
+                        ' '
+                      ),
+                      _react2.default.createElement(
+                        'span',
+                        { className: 'status-label ui-preview hidden-xs hidden-sm' },
+                        ' '
+                      )
+                    ),
+                    _react2.default.createElement(
+                      'span',
+                      { className: 'rank-name' },
+                      _react2.default.createElement(
+                        'span',
+                        { className: 'ui-preview-text', style: { width: random.int(30, 50) + "px" } },
+                        ' '
+                      )
+                    ),
+                    _react2.default.createElement(
+                      'span',
+                      { className: 'user-title hidden-xs hidden-sm' },
+                      _react2.default.createElement(
+                        'span',
+                        { className: 'ui-preview-text', style: { width: random.int(30, 50) + "px" } },
+                        ' '
+                      )
+                    )
+                  ),
+                  _react2.default.createElement(
+                    'div',
+                    { className: 'rank-position' },
+                    _react2.default.createElement(
+                      'strong',
+                      null,
+                      _react2.default.createElement(
+                        'span',
+                        { className: 'ui-preview-text', style: { width: "30px" } },
+                        ' '
+                      )
+                    ),
+                    _react2.default.createElement(
+                      'small',
+                      null,
+                      gettext("Rank")
+                    )
+                  ),
+                  _react2.default.createElement(
+                    'div',
+                    { className: 'rank-posts-counted' },
+                    _react2.default.createElement(
+                      'strong',
+                      null,
+                      _react2.default.createElement(
+                        'span',
+                        { className: 'ui-preview-text', style: { width: "30px" } },
+                        ' '
+                      )
+                    ),
+                    _react2.default.createElement(
+                      'small',
+                      null,
+                      gettext("Ranked posts")
+                    )
+                  ),
+                  _react2.default.createElement(
+                    'div',
+                    { className: 'rank-posts-total' },
+                    _react2.default.createElement(
+                      'strong',
+                      null,
+                      _react2.default.createElement(
+                        'span',
+                        { className: 'ui-preview-text', style: { width: "30px" } },
+                        ' '
+                      )
+                    ),
+                    _react2.default.createElement(
+                      'small',
+                      null,
+                      gettext("Total posts")
+                    )
+                  )
+                );
+              })
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../../utils/random":160,"../../avatar":55,"react":"react"}],126:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _listItem = require('./list-item');
+
+var _listItem2 = _interopRequireDefault(_listItem);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getLeadMessage',
+    value: function getLeadMessage() {
+      var message = ngettext("%(posters)s most active poster from last %(days)s days.", "%(posters)s most active posters from last %(days)s days.", this.props.count);
+
+      return interpolate(message, {
+        posters: this.props.count,
+        days: this.props.trackedPeriod
+      }, true);
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'active-posters-list' },
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          _react2.default.createElement(
+            'p',
+            { className: 'lead' },
+            this.getLeadMessage()
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'active-posters ui-ready' },
+            _react2.default.createElement(
+              'ul',
+              { className: 'list-group' },
+              this.props.users.map(function (user, i) {
+                return _react2.default.createElement(_listItem2.default, { user: user,
+                  rank: user.rank,
+                  counter: i + 1,
+                  key: user.id });
+              })
+            )
+          )
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"./list-item":124,"react":"react"}],127:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _listEmpty = require('./list-empty');
+
+var _listEmpty2 = _interopRequireDefault(_listEmpty);
+
+var _listLoading = require('./list-loading');
+
+var _listLoading2 = _interopRequireDefault(_listLoading);
+
+var _list = require('./list');
+
+var _list2 = _interopRequireDefault(_list);
+
+var _index = require('../../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _users = require('../../../reducers/users');
+
+var _polls = require('../../../services/polls');
+
+var _polls2 = _interopRequireDefault(_polls);
+
+var _store = require('../../../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+var _pageTitle = require('../../../services/page-title');
+
+var _pageTitle2 = _interopRequireDefault(_pageTitle);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.update = function (data) {
+      _store2.default.dispatch((0, _users.dehydrate)(data.results));
+
+      _this.setState({
+        isLoaded: true,
+
+        trackedPeriod: data.tracked_period,
+        count: data.count
+      });
+    };
+
+    if (_index2.default.has('USERS')) {
+      _this.initWithPreloadedData(_index2.default.pop('USERS'));
+    } else {
+      _this.initWithoutPreloadedData();
+    }
+
+    _this.startPolling();
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'initWithPreloadedData',
+    value: function initWithPreloadedData(data) {
+      this.state = {
+        isLoaded: true,
+
+        trackedPeriod: data.tracked_period,
+        count: data.count
+      };
+
+      _store2.default.dispatch((0, _users.dehydrate)(data.results));
+    }
+  }, {
+    key: 'initWithoutPreloadedData',
+    value: function initWithoutPreloadedData() {
+      this.state = {
+        isLoaded: false
+      };
+    }
+  }, {
+    key: 'startPolling',
+    value: function startPolling() {
+      _polls2.default.start({
+        poll: 'active-posters',
+        url: _index2.default.get('USERS_API'),
+        data: {
+          list: 'active'
+        },
+        frequency: 90 * 1000,
+        update: this.update
+      });
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'componentDidMount',
+
+    /* jshint ignore:end */
+
+    value: function componentDidMount() {
+      _pageTitle2.default.set({
+        title: this.props.route.extra.name,
+        parent: gettext("Users")
+      });
+    }
+  }, {
+    key: 'componentWillUnmount',
+    value: function componentWillUnmount() {
+      _polls2.default.stop('active-posters');
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      if (this.state.isLoaded) {
+        if (this.state.count > 0) {
+          /* jshint ignore:start */
+          return _react2.default.createElement(_list2.default, { users: this.props.users,
+            trackedPeriod: this.state.trackedPeriod,
+            count: this.state.count });
+          /* jshint ignore:end */
+        } else {
+            /* jshint ignore:start */
+            return _react2.default.createElement(_listEmpty2.default, { trackedPeriod: this.state.trackedPeriod });
+            /* jshint ignore:end */
+          }
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(_listLoading2.default, null);
+          /* jshint ignore:end */
+        }
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../../index":136,"../../../reducers/users":142,"../../../services/page-title":150,"../../../services/polls":151,"../../../services/store":153,"./list":126,"./list-empty":123,"./list-loading":125,"react":"react"}],128:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.CompactNav = exports.TabsNav = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRouter = require('react-router');
+
+var _li = require('../li');
+
+var _li2 = _interopRequireDefault(_li);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+//jshint ignore:line
+
+//jshint ignore:line
+
+// jshint ignore:start
+var listUrl = function listUrl(baseUrl, list) {
+  var url = baseUrl;
+  if (list.component === 'rank') {
+    url += list.slug;
+  } else {
+    url += list.component;
+  }
+  return url + '/';
+};
+
+var navLinks = function navLinks(baseUrl, lists, hideNav) {
+  return lists.map(function (list) {
+    var url = listUrl(baseUrl, list);
+    return _react2.default.createElement(
+      _li2.default,
+      { path: url,
+        key: url },
+      _react2.default.createElement(
+        _reactRouter.Link,
+        { to: url, onClick: hideNav },
+        list.name
+      )
+    );
+  });
+};
+// jshint ignore:end
+
+var TabsNav = exports.TabsNav = function (_React$Component) {
+  _inherits(TabsNav, _React$Component);
+
+  function TabsNav() {
+    _classCallCheck(this, TabsNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(TabsNav).apply(this, arguments));
+  }
+
+  _createClass(TabsNav, [{
+    key: 'render',
+    value: function render() {
+      // jshint ignore:start
+      return _react2.default.createElement(
+        'ul',
+        { className: 'nav nav-pills' },
+        navLinks(this.props.baseUrl, this.props.lists)
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return TabsNav;
+}(_react2.default.Component);
+
+var CompactNav = exports.CompactNav = function (_React$Component2) {
+  _inherits(CompactNav, _React$Component2);
+
+  function CompactNav() {
+    _classCallCheck(this, CompactNav);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));
+  }
+
+  _createClass(CompactNav, [{
+    key: 'render',
+    value: function render() {
+      // jshint ignore:start
+      return _react2.default.createElement(
+        'ul',
+        { className: 'dropdown-menu', role: 'menu' },
+        navLinks(this.props.baseUrl, this.props.lists, this.props.hideNav)
+      );
+      // jshint ignore:end
+    }
+  }]);
+
+  return CompactNav;
+}(_react2.default.Component);
+
+},{"../../index":136,"../li":71,"react":"react","react-router":"react-router"}],129:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _root = require('../../users-list/root');
+
+var _root2 = _interopRequireDefault(_root);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        null,
+        _react2.default.createElement(_root2.default, { isLoaded: false, cols: 3, showStatus: true })
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../users-list/root":120,"react":"react"}],130:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _pager = require('./pager');
+
+var _pager2 = _interopRequireDefault(_pager);
+
+var _root = require('../../users-list/root');
+
+var _root2 = _interopRequireDefault(_root);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getPager',
+    value: function getPager() {
+      if (this.props.pages > 1) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(_pager2.default, this.props);
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        null,
+        _react2.default.createElement(_root2.default, { users: this.props.users,
+          showStatus: true,
+          cols: 3,
+          isLoaded: true }),
+        this.getPager()
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../users-list/root":120,"./pager":131,"react":"react"}],131:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRouter = require('react-router');
+
+var _resetScroll = require('../../../utils/reset-scroll');
+
+var _resetScroll2 = _interopRequireDefault(_resetScroll);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'getPreviousPage',
+    value: function getPreviousPage() {
+      if (this.props.previous || this.props.first) {
+        /* jshint ignore:start */
+        var url = this.props.baseUrl;
+        if (this.props.previous) {
+          url += this.props.previous + '/';
+        }
+
+        return _react2.default.createElement(
+          'li',
+          { className: 'previous' },
+          _react2.default.createElement(
+            _reactRouter.Link,
+            { to: url, onClick: _resetScroll2.default },
+            _react2.default.createElement(
+              'span',
+              { 'aria-hidden': 'true', className: 'material-icon' },
+              'arrow_back'
+            )
+          )
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getNextPage',
+    value: function getNextPage() {
+      if (this.props.next) {
+        /* jshint ignore:start */
+        var url = this.props.baseUrl + this.props.next + '/';
+        return _react2.default.createElement(
+          'li',
+          { className: 'next' },
+          _react2.default.createElement(
+            _reactRouter.Link,
+            { to: url, onClick: _resetScroll2.default },
+            _react2.default.createElement(
+              'span',
+              { 'aria-hidden': 'true', className: 'material-icon' },
+              'arrow_forward'
+            )
+          )
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getProgessBar',
+    value: function getProgessBar() {
+      var _this2 = this;
+
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'ul',
+        { className: 'pager-progress-bar' },
+        this.props.page_range.map(function (page) {
+          var className = page === _this2.props.page ? 'active' : null;
+          var url = _this2.props.baseUrl;
+
+          if (page > 1) {
+            url += page + '/';
+          }
+
+          return _react2.default.createElement(
+            'li',
+            { key: page, className: className },
+            _react2.default.createElement(
+              _reactRouter.Link,
+              { to: url, onClick: _resetScroll2.default },
+              page
+            )
+          );
+        })
+      );
+      /* jshint ignore:end */
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'pager-undercontent' },
+        _react2.default.createElement(
+          'nav',
+          null,
+          _react2.default.createElement(
+            'ul',
+            { className: 'pager' },
+            this.getPreviousPage(),
+            this.getNextPage()
+          ),
+          this.getProgessBar()
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../../utils/reset-scroll":161,"react":"react","react-router":"react-router"}],132:[function(require,module,exports){
+'use strict';
+
+var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _list = require('./list');
+
+var _list2 = _interopRequireDefault(_list);
+
+var _listLoading = require('./list-loading');
+
+var _listLoading2 = _interopRequireDefault(_listLoading);
+
+var _index = require('../../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _users = require('../../../reducers/users');
+
+var _polls = require('../../../services/polls');
+
+var _polls2 = _interopRequireDefault(_polls);
+
+var _store = require('../../../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+var _pageTitle = require('../../../services/page-title');
+
+var _pageTitle2 = _interopRequireDefault(_pageTitle);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.update = function (data) {
+      _store2.default.dispatch((0, _users.dehydrate)(data.results));
+
+      data.isLoaded = true;
+      _this.setState(data);
+    };
+
+    if (_index2.default.has('USERS')) {
+      _this.initWithPreloadedData(_index2.default.pop('USERS'));
+    } else {
+      _this.initWithoutPreloadedData();
+    }
+
+    _this.startPolling(props.params.page || 1);
+    return _this;
+  }
+
+  _createClass(_class, [{
+    key: 'initWithPreloadedData',
+    value: function initWithPreloadedData(data) {
+      this.state = Object.assign(data, {
+        isLoaded: true
+      });
+      _store2.default.dispatch((0, _users.dehydrate)(data.results));
+    }
+  }, {
+    key: 'initWithoutPreloadedData',
+    value: function initWithoutPreloadedData() {
+      this.state = {
+        isLoaded: false
+      };
+    }
+  }, {
+    key: 'startPolling',
+    value: function startPolling(page) {
+      _polls2.default.start({
+        poll: 'rank-users',
+        url: _index2.default.get('USERS_API'),
+        data: {
+          rank: this.props.route.rank.id,
+          page: page
+        },
+        frequency: 90 * 1000,
+        update: this.update
+      });
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'componentDidMount',
+
+    /* jshint ignore:end */
+
+    value: function componentDidMount() {
+      _pageTitle2.default.set({
+        title: this.props.route.rank.name,
+        page: this.props.params.page || null,
+        parent: gettext("Users")
+      });
+    }
+  }, {
+    key: 'componentWillUnmount',
+    value: function componentWillUnmount() {
+      _polls2.default.stop('rank-users');
+    }
+  }, {
+    key: 'componentWillReceiveProps',
+    value: function componentWillReceiveProps(nextProps) {
+      if (this.props.params.page !== nextProps.params.page) {
+        _pageTitle2.default.set({
+          title: this.props.route.rank.name,
+          page: nextProps.params.page || null,
+          parent: gettext("Users")
+        });
+
+        this.setState({
+          isLoaded: false
+        });
+
+        _polls2.default.stop('rank-users');
+        this.startPolling(nextProps.params.page);
+      }
+    }
+  }, {
+    key: 'getClassName',
+    value: function getClassName() {
+      if (this.props.route.rank.css_class) {
+        return 'rank-users-list rank-users-' + this.props.route.rank.css_class;
+      } else {
+        return 'rank-users-list';
+      }
+    }
+  }, {
+    key: 'getRankDescription',
+    value: function getRankDescription() {
+      if (this.props.route.rank.description) {
+        /* jshint ignore:start */
+        return _react2.default.createElement(
+          'div',
+          { className: 'rank-description' },
+          _react2.default.createElement('div', { className: 'lead', dangerouslySetInnerHTML: {
+              __html: this.props.route.rank.description.html
+            } })
+        );
+        /* jshint ignore:end */
+      } else {
+          return null;
+        }
+    }
+  }, {
+    key: 'getComponent',
+    value: function getComponent() {
+      if (this.state.isLoaded) {
+        if (this.state.count > 0) {
+          /* jshint ignore:start */
+          var baseUrl = _index2.default.get('USERS_LIST_URL') + this.props.route.rank.slug + '/';
+          return _react2.default.createElement(_list2.default, _extends({ baseUrl: baseUrl,
+            users: this.props.users
+          }, this.state));
+          /* jshint ignore:end */
+        } else {
+            /* jshint ignore:start */
+            return _react2.default.createElement(
+              'p',
+              { className: 'lead' },
+              gettext("There are no users with this rank at the moment.")
+            );
+            /* jshint ignore:end */
+          }
+      } else {
+          /* jshint ignore:start */
+          return _react2.default.createElement(_listLoading2.default, null);
+          /* jshint ignore:end */
+        }
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: this.getClassName() },
+        _react2.default.createElement(
+          'div',
+          { className: 'container' },
+          this.getRankDescription(),
+          this.getComponent()
+        )
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"../../../index":136,"../../../reducers/users":142,"../../../services/page-title":150,"../../../services/polls":151,"../../../services/store":153,"./list":130,"./list-loading":129,"react":"react"}],133:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.select = select;
+exports.paths = paths;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactRedux = require('react-redux');
+
+var _dropdownToggle = require('../dropdown-toggle');
+
+var _dropdownToggle2 = _interopRequireDefault(_dropdownToggle);
+
+var _navs = require('./navs');
+
+var _root = require('./active-posters/root');
+
+var _root2 = _interopRequireDefault(_root);
+
+var _root3 = require('./rank/root');
+
+var _root4 = _interopRequireDefault(_root3);
+
+var _withDropdown = require('../with-dropdown');
+
+var _withDropdown2 = _interopRequireDefault(_withDropdown);
+
+var _index = require('../../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+// jshint ignore:line
+
+var _class = function (_WithDropdown) {
+  _inherits(_class, _WithDropdown);
+
+  function _class() {
+    _classCallCheck(this, _class);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));
+  }
+
+  _createClass(_class, [{
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        'div',
+        { className: 'page page-users-lists' },
+        _react2.default.createElement(
+          'div',
+          { className: 'page-header tabbed' },
+          _react2.default.createElement(
+            'div',
+            { className: 'container' },
+            _react2.default.createElement(
+              'h1',
+              { className: 'pull-left' },
+              gettext("Users")
+            ),
+            _react2.default.createElement(_dropdownToggle2.default, { toggleNav: this.toggleNav,
+              dropdown: this.state.dropdown })
+          ),
+          _react2.default.createElement(
+            'div',
+            { className: 'page-tabs hidden-xs hidden-sm' },
+            _react2.default.createElement(
+              'div',
+              { className: 'container' },
+              _react2.default.createElement(_navs.TabsNav, { lists: _index2.default.get('USERS_LISTS'),
+                baseUrl: _index2.default.get('USERS_LIST_URL') })
+            )
+          )
+        ),
+        _react2.default.createElement(
+          'div',
+          { className: this.getCompactNavClassName() },
+          _react2.default.createElement(_navs.CompactNav, { lists: _index2.default.get('USERS_LISTS'),
+            baseUrl: _index2.default.get('USERS_LIST_URL'),
+            hideNav: this.hideNav })
+        ),
+        this.props.children
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_withDropdown2.default);
+
+exports.default = _class;
+function select(store) {
+  return {
+    'tick': store.tick.tick,
+    'user': store.auth.user,
+    'users': store.users
+  };
+}
+
+function paths() {
+  var paths = [];
+
+  _index2.default.get('USERS_LISTS').forEach(function (item) {
+    if (item.component === 'rank') {
+      paths.push({
+        path: _index2.default.get('USERS_LIST_URL') + item.slug + '/:page/',
+        component: (0, _reactRedux.connect)(select)(_root4.default),
+        rank: item
+      });
+      paths.push({
+        path: _index2.default.get('USERS_LIST_URL') + item.slug + '/',
+        component: (0, _reactRedux.connect)(select)(_root4.default),
+        rank: item
+      });
+    } else if (item.component === 'active-posters') {
+      paths.push({
+        path: _index2.default.get('USERS_LIST_URL') + item.component + '/',
+        component: (0, _reactRedux.connect)(select)(_root2.default),
+        extra: {
+          name: item.name
+        }
+      });
+    }
+  });
+
+  return paths;
+}
+
+},{"../../index":136,"../dropdown-toggle":68,"../with-dropdown":134,"./active-posters/root":127,"./navs":128,"./rank/root":132,"react":"react","react-redux":"react-redux"}],134:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class(props) {
+    _classCallCheck(this, _class);
+
+    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));
+
+    _this.toggleNav = function () {
+      _this.setState({
+        dropdown: !_this.state.dropdown
+      });
+    };
+
+    _this.hideNav = function () {
+      _this.setState({
+        dropdown: false
+      });
+    };
+
+    _this.state = {
+      dropdown: false
+    };
+    return _this;
+  }
+
+  /* jshint ignore:start */
+
+  _createClass(_class, [{
+    key: 'getCompactNavClassName',
+
+    /* jshint ignore:end */
+
+    value: function getCompactNavClassName() {
+      if (this.state.dropdown) {
+        return 'compact-nav open';
+      } else {
+        return 'compact-nav';
+      }
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],135:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+var _react = require("react");
+
+var _react2 = _interopRequireDefault(_react);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+var _class = function (_React$Component) {
+  _inherits(_class, _React$Component);
+
+  function _class() {
+    var _Object$getPrototypeO;
+
+    var _temp, _this, _ret;
+
+    _classCallCheck(this, _class);
+
+    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
+      args[_key] = arguments[_key];
+    }
+
+    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.toggle = function () {
+      _this.props.onChange({
+        target: {
+          value: !_this.props.value
+        }
+      });
+    }, _temp), _possibleConstructorReturn(_this, _ret);
+  }
+
+  _createClass(_class, [{
+    key: "getClassName",
+    value: function getClassName() {
+      if (this.props.value) {
+        return "btn btn-yes-no btn-yes-no-on";
+      } else {
+        return "btn btn-yes-no btn-yes-no-off";
+      }
+    }
+  }, {
+    key: "getIcon",
+    value: function getIcon() {
+      if (this.props.value) {
+        return this.props.iconOn || 'check_box';
+      } else {
+        return this.props.iconOff || 'check_box_outline_blank';
+      }
+    }
+  }, {
+    key: "getLabel",
+    value: function getLabel() {
+      if (this.props.value) {
+        return this.props.labelOn || gettext("yes");
+      } else {
+        return this.props.labelOff || gettext("no");
+      }
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: "render",
+
+    /* jshint ignore:end */
+
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement(
+        "button",
+        { type: "button",
+          onClick: this.toggle,
+          className: this.getClassName(),
+          id: this.props.id || null,
+          "aria-describedby": this.props['aria-describedby'] || null,
+          disabled: this.props.disabled || false },
+        _react2.default.createElement(
+          "span",
+          { className: "material-icon" },
+          this.getIcon()
+        ),
+        this.getLabel()
+      );
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return _class;
+}(_react2.default.Component);
+
+exports.default = _class;
+
+},{"react":"react"}],136:[function(require,module,exports){
+(function (global){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Misago = undefined;
+
+var _orderedList = require('./utils/ordered-list');
+
+var _orderedList2 = _interopRequireDefault(_orderedList);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Misago = exports.Misago = function () {
+  function Misago() {
+    _classCallCheck(this, Misago);
+
+    this._initializers = [];
+    this._context = {};
+  }
+
+  _createClass(Misago, [{
+    key: 'addInitializer',
+    value: function addInitializer(initializer) {
+      this._initializers.push({
+        key: initializer.name,
+
+        item: initializer.initializer,
+
+        after: initializer.after,
+        before: initializer.before
+      });
+    }
+  }, {
+    key: 'init',
+    value: function init(context) {
+      var _this = this;
+
+      this._context = context;
+
+      var initOrder = new _orderedList2.default(this._initializers).orderedValues();
+      initOrder.forEach(function (initializer) {
+        initializer(_this);
+      });
+    }
+
+    // context accessors
+
+  }, {
+    key: 'has',
+    value: function has(key) {
+      return !!this._context[key];
+    }
+  }, {
+    key: 'get',
+    value: function get(key, fallback) {
+      if (this.has(key)) {
+        return this._context[key];
+      } else {
+        return fallback || undefined;
+      }
+    }
+  }, {
+    key: 'pop',
+    value: function pop(key) {
+      if (this.has(key)) {
+        var value = this._context[key];
+        this._context[key] = null;
+        return value;
+      } else {
+        return undefined;
+      }
+    }
+  }]);
+
+  return Misago;
+}();
+
+// create  singleton
+
+var misago = new Misago();
+
+// expose it globally
+global.misago = misago;
+
+// and export it for tests and stuff
+exports.default = misago;
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+
+},{"./utils/ordered-list":159}],137:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.SIGN_OUT = exports.SIGN_IN = exports.PATCH_USER = exports.initialState = undefined;
+exports.patchUser = patchUser;
+exports.signIn = signIn;
+exports.signOut = signOut;
+exports.default = auth;
+
+var _users = require('./users');
+
+var initialState = exports.initialState = {
+  signedIn: false,
+  signedOut: false
+};
+
+var PATCH_USER = exports.PATCH_USER = 'PATCH_USER';
+var SIGN_IN = exports.SIGN_IN = 'SIGN_IN';
+var SIGN_OUT = exports.SIGN_OUT = 'SIGN_OUT';
+
+function patchUser(patch) {
+  return {
+    type: PATCH_USER,
+    patch: patch
+  };
+}
+
+function signIn(user) {
+  return {
+    type: SIGN_IN,
+    user: user
+  };
+}
+
+function signOut() {
+  var soft = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0];
+
+  return {
+    type: SIGN_OUT,
+    soft: soft
+  };
+}
+
+function auth() {
+  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];
+  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
+
+  switch (action.type) {
+    case PATCH_USER:
+      var newState = Object.assign({}, state);
+      newState.user = Object.assign({}, state.user, action.patch);
+      return newState;
+
+    case SIGN_IN:
+      return Object.assign({}, state, {
+        signedIn: action.user
+      });
+
+    case SIGN_OUT:
+      return Object.assign({}, state, {
+        isAuthenticated: false,
+        isAnonymous: true,
+        signedOut: !action.soft
+      });
+
+    case _users.UPDATE_AVATAR:
+      if (state.isAuthenticated && state.user.id === action.userId) {
+        var _newState = Object.assign({}, state);
+        _newState.user = Object.assign({}, state.user, {
+          'avatar_hash': action.avatarHash
+        });
+        return _newState;
+      }
+      return state;
+
+    case _users.UPDATE_USERNAME:
+      if (state.isAuthenticated && state.user.id === action.userId) {
+        var _newState2 = Object.assign({}, state);
+        _newState2.user = Object.assign({}, state.user, {
+          username: action.username,
+          slug: action.slug
+        });
+        return _newState2;
+      }
+      return state;
+
+    default:
+      return state;
+  }
+}
+
+},{"./users":142}],138:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.PATCH_PROFILE = exports.DEHYDRATE_PROFILE = undefined;
+exports.dehydrate = dehydrate;
+exports.patchProfile = patchProfile;
+exports.default = auth;
+
+var _moment = require('moment');
+
+var _moment2 = _interopRequireDefault(_moment);
+
+var _users = require('./users');
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var DEHYDRATE_PROFILE = exports.DEHYDRATE_PROFILE = 'DEHYDRATE_PROFILE';
+var PATCH_PROFILE = exports.PATCH_PROFILE = 'PATCH_PROFILE';
+
+function dehydrate(profile) {
+  return {
+    type: DEHYDRATE_PROFILE,
+    profile: profile
+  };
+}
+
+function patchProfile(patch) {
+  return {
+    type: PATCH_PROFILE,
+    patch: patch
+  };
+}
+
+function auth() {
+  var state = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
+  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
+
+  switch (action.type) {
+    case DEHYDRATE_PROFILE:
+      return Object.assign({}, action.profile, {
+        joined_on: (0, _moment2.default)(action.profile.joined_on),
+        status: (0, _users.dehydrateStatus)(action.profile.status)
+      });
+
+    case PATCH_PROFILE:
+      return Object.assign({}, state, action.patch);
+
+    case _users.UPDATE_AVATAR:
+      if (state.id === action.userId) {
+        return Object.assign({}, state, {
+          avatar_hash: action.avatarHash
+        });
+      }
+      return state;
+
+    case _users.UPDATE_USERNAME:
+      if (state.id === action.userId) {
+        return Object.assign({}, state, {
+          username: action.username,
+          slug: action.slug
+        });
+      }
+      return state;
+
+    default:
+      return state;
+  }
+}
+
+},{"./users":142,"moment":"moment"}],139:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.showSnackbar = showSnackbar;
+exports.hideSnackbar = hideSnackbar;
+exports.default = snackbar;
+var initialState = exports.initialState = {
+  type: 'info',
+  message: '',
+  isVisible: false
+};
+
+var SHOW_SNACKBAR = exports.SHOW_SNACKBAR = 'SHOW_SNACKBAR';
+var HIDE_SNACKBAR = exports.HIDE_SNACKBAR = 'HIDE_SNACKBAR';
+
+function showSnackbar(message, type) {
+  return {
+    type: SHOW_SNACKBAR,
+    message: message,
+    messageType: type
+  };
+}
+
+function hideSnackbar() {
+  return {
+    type: HIDE_SNACKBAR
+  };
+}
+
+function snackbar() {
+  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];
+  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
+
+  if (action.type === SHOW_SNACKBAR) {
+    return {
+      type: action.messageType,
+      message: action.message,
+      isVisible: true
+    };
+  } else if (action.type === HIDE_SNACKBAR) {
+    return Object.assign({}, state, {
+      isVisible: false
+    });
+  } else {
+    return state;
+  }
+}
+
+},{}],140:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.doTick = doTick;
+exports.default = tick;
+var initialState = exports.initialState = {
+  tick: 0
+};
+
+var TICK = exports.TICK = 'TICK';
+
+function doTick() {
+  return {
+    type: TICK
+  };
+}
+
+function tick() {
+  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];
+  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
+
+  if (action.type === TICK) {
+    return Object.assign({}, state, {
+      tick: state.tick + 1
+    });
+  } else {
+    return state;
+  }
+}
+
+},{}],141:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.DEHYDRATE_HISTORY = exports.APPEND_HISTORY = exports.ADD_NAME_CHANGE = undefined;
+exports.addNameChange = addNameChange;
+exports.append = append;
+exports.dehydrate = dehydrate;
+exports.default = username;
+
+var _users = require('./users');
+
+var _moment = require('moment');
+
+var _moment2 = _interopRequireDefault(_moment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var ADD_NAME_CHANGE = exports.ADD_NAME_CHANGE = 'ADD_NAME_CHANGE';
+var APPEND_HISTORY = exports.APPEND_HISTORY = 'APPEND_HISTORY';
+var DEHYDRATE_HISTORY = exports.DEHYDRATE_HISTORY = 'DEHYDRATE_HISTORY';
+
+function addNameChange(change, user, changedBy) {
+  return {
+    type: ADD_NAME_CHANGE,
+    change: change,
+    user: user,
+    changedBy: changedBy
+  };
+}
+
+function append(items) {
+  return {
+    type: APPEND_HISTORY,
+    items: items
+  };
+}
+
+function dehydrate(items) {
+  return {
+    type: DEHYDRATE_HISTORY,
+    items: items
+  };
+}
+
+function username() {
+  var state = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
+  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
+
+  switch (action.type) {
+    case ADD_NAME_CHANGE:
+      var newState = state.slice();
+      newState.unshift({
+        id: Math.floor(Date.now() / 1000), // just small hax for getting id
+        changed_by: action.changedBy,
+        changed_by_username: action.changedBy.username,
+        changed_on: (0, _moment2.default)(),
+        new_username: action.change.username,
+        old_username: action.user.username
+      });
+      return newState;
+
+    case APPEND_HISTORY:
+      return state.concat(action.items.map(function (item) {
+        return Object.assign({}, item, {
+          changed_on: (0, _moment2.default)(item.changed_on)
+        });
+      }));
+
+    case DEHYDRATE_HISTORY:
+      return action.items.map(function (item) {
+        return Object.assign({}, item, {
+          changed_on: (0, _moment2.default)(item.changed_on)
+        });
+      });
+
+    case _users.UPDATE_AVATAR:
+      return state.map(function (item) {
+        item = Object.assign({}, item);
+        if (item.changed_by && item.changed_by.id === action.userId) {
+          item.changed_by = Object.assign({}, item.changed_by, {
+            'avatar_hash': action.avatarHash
+          });
+        }
+
+        return item;
+      });
+
+    case _users.UPDATE_USERNAME:
+      return state.map(function (item) {
+        item = Object.assign({}, item);
+        if (item.changed_by && item.changed_by.id === action.userId) {
+          item.changed_by = Object.assign({}, item.changed_by, {
+            'username': action.username,
+            'slug': action.slug
+          });
+        }
+
+        return Object.assign({}, item);
+      });
+
+    default:
+      return state;
+  }
+}
+
+},{"./users":142,"moment":"moment"}],142:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.UPDATE_USERNAME = exports.UPDATE_AVATAR = exports.DEHYDRATE_USERS = exports.APPEND_USERS = undefined;
+exports.append = append;
+exports.dehydrate = dehydrate;
+exports.dehydrateStatus = dehydrateStatus;
+exports.updateAvatar = updateAvatar;
+exports.updateUsername = updateUsername;
+exports.default = user;
+
+var _moment = require('moment');
+
+var _moment2 = _interopRequireDefault(_moment);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var APPEND_USERS = exports.APPEND_USERS = 'APPEND_USERS';
+var DEHYDRATE_USERS = exports.DEHYDRATE_USERS = 'DEHYDRATE_USERS';
+var UPDATE_AVATAR = exports.UPDATE_AVATAR = 'UPDATE_AVATAR';
+var UPDATE_USERNAME = exports.UPDATE_USERNAME = 'UPDATE_USERNAME';
+
+function append(items) {
+  return {
+    type: APPEND_USERS,
+    items: items
+  };
+}
+
+function dehydrate(items) {
+  return {
+    type: DEHYDRATE_USERS,
+    items: items
+  };
+}
+
+function dehydrateStatus(status) {
+  if (status) {
+    return Object.assign({}, status, {
+      last_click: status.last_click ? (0, _moment2.default)(status.last_click) : null,
+      banned_until: status.banned_until ? (0, _moment2.default)(status.banned_until) : null
+    });
+  } else {
+    return null;
+  }
+}
+
+function updateAvatar(user, avatarHash) {
+  return {
+    type: UPDATE_AVATAR,
+    userId: user.id,
+    avatarHash: avatarHash
+  };
+}
+
+function updateUsername(user, username, slug) {
+  return {
+    type: UPDATE_USERNAME,
+    userId: user.id,
+    username: username,
+    slug: slug
+  };
+}
+
+function user() {
+  var state = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
+  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
+
+  switch (action.type) {
+    case APPEND_USERS:
+      return state.concat(action.items.map(function (item) {
+        return Object.assign({}, item, {
+          joined_on: (0, _moment2.default)(item.joined_on),
+          status: dehydrateStatus(item.status)
+        });
+      }));
+
+    case DEHYDRATE_USERS:
+      return action.items.map(function (item) {
+        return Object.assign({}, item, {
+          joined_on: (0, _moment2.default)(item.joined_on),
+          status: dehydrateStatus(item.status)
+        });
+      });
+
+    case UPDATE_AVATAR:
+      return state.map(function (item) {
+        item = Object.assign({}, item);
+        if (item.id === action.userId) {
+          item.avatar_hash = action.avatarHash;
+        }
+
+        return item;
+      });
+
+    default:
+      return state;
+  }
+}
+
+},{"moment":"moment"}],143:[function(require,module,exports){
+'use strict';
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; };
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Ajax = exports.Ajax = function () {
+  function Ajax() {
+    _classCallCheck(this, Ajax);
+
+    this._cookieName = null;
+    this._csrfToken = null;
+    this._locks = {};
+  }
+
+  _createClass(Ajax, [{
+    key: 'init',
+    value: function init(cookieName) {
+      this._cookieName = cookieName;
+      this._csrfToken = this.getCsrfToken();
+    }
+  }, {
+    key: 'getCsrfToken',
+    value: function getCsrfToken() {
+      if (document.cookie.indexOf(this._cookieName) !== -1) {
+        var cookieRegex = new RegExp(this._cookieName + '\=([^;]*)');
+        var cookie = document.cookie.match(cookieRegex)[0];
+        return cookie ? cookie.split('=')[1] : null;
+      } else {
+        return null;
+      }
+    }
+  }, {
+    key: 'request',
+    value: function request(method, url, data) {
+      var self = this;
+      return new Promise(function (resolve, reject) {
+        var xhr = {
+          url: url,
+          method: method,
+          headers: {
+            'X-CSRFToken': self._csrfToken
+          },
+
+          data: data ? JSON.stringify(data) : null,
+          contentType: "application/json; charset=utf-8",
+          dataType: 'json',
+
+          success: function success(data) {
+            resolve(data);
+          },
+
+          error: function error(jqXHR) {
+            var rejection = jqXHR.responseJSON || {};
+
+            rejection.status = jqXHR.status;
+
+            if (rejection.status === 0) {
+              rejection.detail = gettext("Lost connection with application.");
+            }
+
+            if (rejection.status === 404) {
+              if (!rejection.detail || rejection.detail === 'NOT FOUND') {
+                rejection.detail = gettext("Action link is invalid.");
+              }
+            }
+
+            if (rejection.status === 500 && !rejection.detail) {
+              rejection.detail = gettext("Unknown error has occured.");
+            }
+
+            rejection.statusText = jqXHR.statusText;
+
+            reject(rejection);
+          }
+        };
+
+        $.ajax(xhr);
+      });
+    }
+  }, {
+    key: 'get',
+    value: function get(url, params, lock) {
+      var _this = this;
+
+      if (params) {
+        url += '?' + $.param(params);
+      }
+
+      if (lock) {
+        var _ret = function () {
+          var self = _this;
+
+          // update url in existing lock?
+          if (_this._locks[lock]) {
+            _this._locks[lock].url = url;
+          }
+
+          // immediately dereference promise handlers without doing anything
+          // we are already waiting for existing response to resolve
+          if (_this._locks[lock] && _this._locks[lock].waiter) {
+            return {
+              v: {
+                then: function then() {
+                  return;
+                }
+              }
+            };
+
+            // return promise that will begin when original one resolves
+          } else if (_this._locks[lock] && _this._locks[lock].wait) {
+              _this._locks[lock].waiter = true;
+
+              return {
+                v: new Promise(function (resolve, reject) {
+                  var wait = function wait(url) {
+                    // keep waiting on promise
+                    if (self._locks[lock].wait) {
+                      window.setTimeout(function () {
+                        wait(url);
+                      }, 300);
+
+                      // poll for new url
+                    } else if (self._locks[lock].url !== url) {
+                        wait(self._locks[lock].url);
+
+                        // ajax backend for response
+                      } else {
+                          self._locks[lock].waiter = false;
+                          self.request('GET', self._locks[lock].url).then(function (data) {
+                            if (self._locks[lock].url === url) {
+                              resolve(data);
+                            } else {
+                              self._locks[lock].waiter = true;
+                              wait(self._locks[lock].url);
+                            }
+                          }, function (rejection) {
+                            if (self._locks[lock].url === url) {
+                              reject(rejection);
+                            } else {
+                              self._locks[lock].waiter = true;
+                              wait(self._locks[lock].url);
+                            }
+                          });
+                        }
+                  };
+
+                  window.setTimeout(function () {
+                    wait(url);
+                  }, 300);
+                })
+              };
+
+              // setup new lock without waiter
+            } else {
+                _this._locks[lock] = {
+                  url: url,
+                  wait: true,
+                  waiter: false
+                };
+
+                return {
+                  v: new Promise(function (resolve, reject) {
+                    self.request('GET', url).then(function (data) {
+                      self._locks[lock].wait = false;
+                      if (self._locks[lock].url === url) {
+                        resolve(data);
+                      }
+                    }, function (rejection) {
+                      self._locks[lock].wait = false;
+                      if (self._locks[lock].url === url) {
+                        reject(rejection);
+                      }
+                    });
+                  })
+                };
+              }
+        }();
+
+        if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
+      } else {
+        return this.request('GET', url);
+      }
+    }
+  }, {
+    key: 'post',
+    value: function post(url, data) {
+      return this.request('POST', url, data);
+    }
+  }, {
+    key: 'patch',
+    value: function patch(url, data) {
+      return this.request('PATCH', url, data);
+    }
+  }, {
+    key: 'put',
+    value: function put(url, data) {
+      return this.request('PUT', url, data);
+    }
+  }, {
+    key: 'delete',
+    value: function _delete(url) {
+      return this.request('DELETE', url);
+    }
+  }, {
+    key: 'upload',
+    value: function upload(url, data, progress) {
+      var self = this;
+      return new Promise(function (resolve, reject) {
+        var xhr = {
+          url: url,
+          method: 'POST',
+          headers: {
+            'X-CSRFToken': self._csrfToken
+          },
+
+          data: data,
+          contentType: false,
+          processData: false,
+
+          xhr: function xhr() {
+            var xhr = new window.XMLHttpRequest();
+            xhr.upload.addEventListener("progress", function (evt) {
+              if (evt.lengthComputable) {
+                progress(Math.round(evt.loaded / evt.total * 100));
+              }
+            }, false);
+            return xhr;
+          },
+
+          success: function success(response) {
+            resolve(response);
+          },
+
+          error: function error(jqXHR) {
+            var rejection = jqXHR.responseJSON || {};
+
+            rejection.status = jqXHR.status;
+
+            if (rejection.status === 0) {
+              rejection.detail = gettext("Lost connection with application.");
+            }
+
+            if (rejection.status === 404) {
+              if (!rejection.detail || rejection.detail === 'NOT FOUND') {
+                rejection.detail = gettext("Action link is invalid.");
+              }
+            }
+
+            if (rejection.status === 500 && !rejection.detail) {
+              rejection.detail = gettext("Unknown error has occured.");
+            }
+
+            rejection.statusText = jqXHR.statusText;
+
+            reject(rejection);
+          }
+        };
+
+        $.ajax(xhr);
+      });
+    }
+  }]);
+
+  return Ajax;
+}();
+
+exports.default = new Ajax();
+
+},{}],144:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Auth = undefined;
+
+var _auth = require('../reducers/auth');
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+// jshint ignore:line
+
+var Auth = exports.Auth = function () {
+  function Auth() {
+    _classCallCheck(this, Auth);
+  }
+
+  _createClass(Auth, [{
+    key: 'init',
+    value: function init(store, local, modal) {
+      this._store = store;
+      this._local = local;
+      this._modal = modal;
+
+      // tell other tabs what auth state is because we are most current with it
+      this.syncSession();
+
+      // listen for other tabs to tell us that state changed
+      this.watchState();
+    }
+  }, {
+    key: 'syncSession',
+    value: function syncSession() {
+      var state = this._store.getState().auth;
+      if (state.isAuthenticated) {
+        this._local.set('auth', {
+          isAuthenticated: true,
+          username: state.user.username
+        });
+      } else {
+        this._local.set('auth', {
+          isAuthenticated: false
+        });
+      }
+    }
+  }, {
+    key: 'watchState',
+    value: function watchState() {
+      var _this = this;
+
+      this._local.watch('auth', function (newState) {
+        if (newState.isAuthenticated) {
+          _this._store.dispatch((0, _auth.signIn)({
+            username: newState.username
+          }));
+        } else {
+          _this._store.dispatch((0, _auth.signOut)());
+        }
+      });
+      this._modal.hide();
+    }
+  }, {
+    key: 'signIn',
+    value: function signIn(user) {
+      this._store.dispatch((0, _auth.signIn)(user));
+      this._local.set('auth', {
+        isAuthenticated: true,
+        username: user.username
+      });
+      this._modal.hide();
+    }
+  }, {
+    key: 'signOut',
+    value: function signOut() {
+      this._store.dispatch((0, _auth.signOut)());
+      this._local.set('auth', {
+        isAuthenticated: false
+      });
+      this._modal.hide();
+    }
+  }, {
+    key: 'softSignOut',
+    value: function softSignOut() {
+      this._store.dispatch((0, _auth.signOut)(true));
+      this._local.set('auth', {
+        isAuthenticated: false
+      });
+      this._modal.hide();
+    }
+  }]);
+
+  return Auth;
+}();
+
+exports.default = new Auth();
+
+},{"../reducers/auth":137}],145:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* global grecaptcha */
+// jshint ignore:line
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Captcha = exports.ReCaptcha = exports.ReCaptchaComponent = exports.QACaptcha = exports.NoCaptcha = exports.BaseCaptcha = undefined;
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _formGroup = require('../components/form-group');
+
+var _formGroup2 = _interopRequireDefault(_formGroup);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+// jshint ignore:line
+
+var BaseCaptcha = exports.BaseCaptcha = function () {
+  function BaseCaptcha() {
+    _classCallCheck(this, BaseCaptcha);
+  }
+
+  _createClass(BaseCaptcha, [{
+    key: 'init',
+    value: function init(context, ajax, include, snackbar) {
+      this._context = context;
+      this._ajax = ajax;
+      this._include = include;
+      this._snackbar = snackbar;
+    }
+  }]);
+
+  return BaseCaptcha;
+}();
+
+var NoCaptcha = exports.NoCaptcha = function (_BaseCaptcha) {
+  _inherits(NoCaptcha, _BaseCaptcha);
+
+  function NoCaptcha() {
+    _classCallCheck(this, NoCaptcha);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(NoCaptcha).apply(this, arguments));
+  }
+
+  _createClass(NoCaptcha, [{
+    key: 'load',
+    value: function load() {
+      return new Promise(function (resolve) {
+        // immediately resolve as we don't have anything to validate
+        resolve();
+      });
+    }
+  }, {
+    key: 'validator',
+    value: function validator() {
+      return null;
+    }
+  }, {
+    key: 'component',
+    value: function component() {
+      return null;
+    }
+  }]);
+
+  return NoCaptcha;
+}(BaseCaptcha);
+
+var QACaptcha = exports.QACaptcha = function (_BaseCaptcha2) {
+  _inherits(QACaptcha, _BaseCaptcha2);
+
+  function QACaptcha() {
+    _classCallCheck(this, QACaptcha);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(QACaptcha).apply(this, arguments));
+  }
+
+  _createClass(QACaptcha, [{
+    key: 'load',
+    value: function load() {
+      var self = this;
+      return new Promise(function (resolve, reject) {
+        self._ajax.get(self._context.get('CAPTCHA_API_URL')).then(function (data) {
+          self.question = data.question;
+          self.helpText = data.help_text;
+          resolve();
+        }, function () {
+          self._snackbar.error(gettext("Failed to load CAPTCHA."));
+          reject();
+        });
+      });
+    }
+  }, {
+    key: 'validator',
+    value: function validator() {
+      return [];
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'component',
+    value: function component(kwargs) {
+      return _react2.default.createElement(
+        _formGroup2.default,
+        { label: this.question, 'for': 'id_captcha',
+          labelClass: kwargs.labelClass || "col-sm-4",
+          controlClass: kwargs.controlClass || "col-sm-8",
+          validation: kwargs.form.state.errors.captcha,
+          helpText: this.helpText || null },
+        _react2.default.createElement('input', { type: 'text', id: 'id_captcha', className: 'form-control',
+          'aria-describedby': 'id_captcha_status',
+          disabled: kwargs.form.state.isLoading,
+          onChange: kwargs.form.bindInput('captcha'),
+          value: kwargs.form.state.captcha })
+      );
+    }
+    /* jshint ignore:end */
+
+  }]);
+
+  return QACaptcha;
+}(BaseCaptcha);
+
+var ReCaptchaComponent = exports.ReCaptchaComponent = function (_React$Component) {
+  _inherits(ReCaptchaComponent, _React$Component);
+
+  function ReCaptchaComponent() {
+    _classCallCheck(this, ReCaptchaComponent);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(ReCaptchaComponent).apply(this, arguments));
+  }
+
+  _createClass(ReCaptchaComponent, [{
+    key: 'componentDidMount',
+    value: function componentDidMount() {
+      var _this4 = this;
+
+      grecaptcha.render('recaptcha', {
+        'sitekey': this.props.siteKey,
+        'callback': function callback(response) {
+          // fire fakey event to binding
+          _this4.props.binding({
+            target: {
+              value: response
+            }
+          });
+        }
+      });
+    }
+  }, {
+    key: 'render',
+    value: function render() {
+      /* jshint ignore:start */
+      return _react2.default.createElement('div', { id: 'recaptcha' });
+      /* jshint ignore:end */
+    }
+  }]);
+
+  return ReCaptchaComponent;
+}(_react2.default.Component);
+
+var ReCaptcha = exports.ReCaptcha = function (_BaseCaptcha3) {
+  _inherits(ReCaptcha, _BaseCaptcha3);
+
+  function ReCaptcha() {
+    _classCallCheck(this, ReCaptcha);
+
+    return _possibleConstructorReturn(this, Object.getPrototypeOf(ReCaptcha).apply(this, arguments));
+  }
+
+  _createClass(ReCaptcha, [{
+    key: 'load',
+    value: function load() {
+      this._include.include('https://www.google.com/recaptcha/api.js', true);
+
+      return new Promise(function (resolve) {
+        var wait = function wait() {
+          if (typeof grecaptcha === "undefined") {
+            window.setTimeout(function () {
+              wait();
+            }, 200);
+          } else {
+            resolve();
+          }
+        };
+        wait();
+      });
+    }
+  }, {
+    key: 'validator',
+    value: function validator() {
+      return [];
+    }
+
+    /* jshint ignore:start */
+
+  }, {
+    key: 'component',
+    value: function component(kwargs) {
+      return _react2.default.createElement(
+        _formGroup2.default,
+        { label: gettext("Captcha"), 'for': 'id_captcha',
+          labelClass: kwargs.labelClass || "col-sm-4",
+          controlClass: kwargs.controlClass || "col-sm-8",
+          validation: kwargs.form.state.errors.captcha,
+          helpText: gettext("Please solve the quick test.") },
+        _react2.default.createElement(ReCaptchaComponent, { siteKey: this._context.get('SETTINGS').recaptcha_site_key,
+          binding: kwargs.form.bindInput('captcha') })
+      );
+    }
+    /* jshint ignore:end */
+
+  }]);
+
+  return ReCaptcha;
+}(BaseCaptcha);
+
+var Captcha = exports.Captcha = function () {
+  function Captcha() {
+    _classCallCheck(this, Captcha);
+  }
+
+  _createClass(Captcha, [{
+    key: 'init',
+    value: function init(context, ajax, include, snackbar) {
+      switch (context.get('SETTINGS').captcha_type) {
+        case 'no':
+          this._captcha = new NoCaptcha();
+          break;
+
+        case 'qa':
+          this._captcha = new QACaptcha();
+          break;
+
+        case 're':
+          this._captcha = new ReCaptcha();
+          break;
+      }
+
+      this._captcha.init(context, ajax, include, snackbar);
+    }
+
+    // accessors for underlying strategy
+
+  }, {
+    key: 'load',
+    value: function load() {
+      return this._captcha.load();
+    }
+  }, {
+    key: 'validator',
+    value: function validator() {
+      return this._captcha.validator();
+    }
+  }, {
+    key: 'component',
+    value: function component(kwargs) {
+      return this._captcha.component(kwargs);
+    }
+  }]);
+
+  return Captcha;
+}();
+
+exports.default = new Captcha();
+
+},{"../components/form-group":69,"react":"react"}],146:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Include = exports.Include = function () {
+  function Include() {
+    _classCallCheck(this, Include);
+  }
+
+  _createClass(Include, [{
+    key: 'init',
+    value: function init(staticUrl) {
+      this._staticUrl = staticUrl;
+      this._included = [];
+    }
+  }, {
+    key: 'include',
+    value: function include(script) {
+      var remote = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];
+
+      if (this._included.indexOf(script) === -1) {
+        this._included.push(script);
+        this._include(script, remote);
+      }
+    }
+  }, {
+    key: '_include',
+    value: function _include(script, remote) {
+      $.ajax({
+        url: (!remote ? this._staticUrl : '') + script,
+        cache: true,
+        dataType: 'script'
+      });
+    }
+  }]);
+
+  return Include;
+}();
+
+exports.default = new Include();
+
+},{}],147:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var storage = window.localStorage;
+
+var LocalStorage = exports.LocalStorage = function () {
+  function LocalStorage() {
+    _classCallCheck(this, LocalStorage);
+  }
+
+  _createClass(LocalStorage, [{
+    key: 'init',
+    value: function init(prefix) {
+      var _this = this;
+
+      this._prefix = prefix;
+      this._watchers = [];
+
+      window.addEventListener('storage', function (e) {
+        var newValueJson = JSON.parse(e.newValue);
+        _this._watchers.forEach(function (watcher) {
+          if (watcher.key === e.key && e.oldValue !== e.newValue) {
+            watcher.callback(newValueJson);
+          }
+        });
+      });
+    }
+  }, {
+    key: 'set',
+    value: function set(key, value) {
+      storage.setItem(this._prefix + key, JSON.stringify(value));
+    }
+  }, {
+    key: 'get',
+    value: function get(key) {
+      var itemString = storage.getItem(this._prefix + key);
+      if (itemString) {
+        return JSON.parse(itemString);
+      } else {
+        return null;
+      }
+    }
+  }, {
+    key: 'watch',
+    value: function watch(key, callback) {
+      this._watchers.push({
+        key: this._prefix + key,
+        callback: callback
+      });
+    }
+  }]);
+
+  return LocalStorage;
+}();
+
+exports.default = new LocalStorage();
+
+},{}],148:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.MobileNavbarDropdown = undefined;
+
+var _mountComponent = require('../utils/mount-component');
+
+var _mountComponent2 = _interopRequireDefault(_mountComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var MobileNavbarDropdown = exports.MobileNavbarDropdown = function () {
+  function MobileNavbarDropdown() {
+    _classCallCheck(this, MobileNavbarDropdown);
+  }
+
+  _createClass(MobileNavbarDropdown, [{
+    key: 'init',
+    value: function init(element) {
+      this._element = element;
+      this._component = null;
+    }
+  }, {
+    key: 'show',
+    value: function show(component) {
+      if (this._component === component) {
+        this.hide();
+      } else {
+        this._component = component;
+        (0, _mountComponent2.default)(component, this._element.id);
+        $(this._element).addClass('open');
+      }
+    }
+  }, {
+    key: 'showConnected',
+    value: function showConnected(name, component) {
+      if (this._component === name) {
+        this.hide();
+      } else {
+        this._component = name;
+        (0, _mountComponent2.default)(component, this._element.id, true);
+        $(this._element).addClass('open');
+      }
+    }
+  }, {
+    key: 'hide',
+    value: function hide() {
+      $(this._element).removeClass('open');
+      this._component = null;
+    }
+  }]);
+
+  return MobileNavbarDropdown;
+}();
+
+exports.default = new MobileNavbarDropdown();
+
+},{"../utils/mount-component":158}],149:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Modal = undefined;
+
+var _reactDom = require('react-dom');
+
+var _reactDom2 = _interopRequireDefault(_reactDom);
+
+var _mountComponent = require('../utils/mount-component');
+
+var _mountComponent2 = _interopRequireDefault(_mountComponent);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Modal = exports.Modal = function () {
+  function Modal() {
+    _classCallCheck(this, Modal);
+  }
+
+  _createClass(Modal, [{
+    key: 'init',
+    value: function init(element) {
+      var _this = this;
+
+      this._element = element;
+
+      this._modal = $(element).modal({ show: false });
+
+      this._modal.on('hidden.bs.modal', function () {
+        _reactDom2.default.unmountComponentAtNode(_this._element);
+      });
+    }
+  }, {
+    key: 'show',
+    value: function show(component) {
+      (0, _mountComponent2.default)(component, this._element.id);
+      this._modal.modal('show');
+    }
+  }, {
+    key: 'hide',
+    value: function hide() {
+      this._modal.modal('hide');
+    }
+  }]);
+
+  return Modal;
+}();
+
+exports.default = new Modal();
+
+},{"../utils/mount-component":158,"react-dom":"react-dom"}],150:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var PageTitle = exports.PageTitle = function () {
+  function PageTitle() {
+    _classCallCheck(this, PageTitle);
+  }
+
+  _createClass(PageTitle, [{
+    key: 'init',
+    value: function init(indexTitle, forumName) {
+      this._indexTitle = indexTitle;
+      this._forumName = forumName;
+    }
+  }, {
+    key: 'set',
+    value: function set(title) {
+      if (!title) {
+        document.title = this._indexTitle || this._forumName;
+        return;
+      }
+
+      if (typeof title === 'string') {
+        title = { title: title };
+      }
+
+      var finalTitle = title.title;
+
+      if (title.page) {
+        var pageLabel = interpolate(gettext('page: %(page)s'), {
+          page: title.page
+        }, true);
+
+        finalTitle += ' (' + pageLabel + ')';
+      }
+
+      if (title.parent) {
+        finalTitle += ' | ' + title.parent;
+      }
+
+      document.title = finalTitle + ' | ' + this._forumName;
+    }
+  }]);
+
+  return PageTitle;
+}();
+
+exports.default = new PageTitle();
+
+},{}],151:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Polls = exports.Polls = function () {
+  function Polls() {
+    _classCallCheck(this, Polls);
+  }
+
+  _createClass(Polls, [{
+    key: "init",
+    value: function init(ajax, snackbar) {
+      this._ajax = ajax;
+      this._snackbar = snackbar;
+
+      this._polls = {};
+    }
+  }, {
+    key: "start",
+    value: function start(kwargs) {
+      var _this = this;
+
+      var poolServer = function poolServer() {
+        _this._polls[kwargs.poll] = kwargs;
+
+        _this._ajax.get(kwargs.url, kwargs.data || null).then(function (data) {
+          if (!_this._polls[kwargs.poll]._stopped) {
+            kwargs.update(data);
+
+            _this._polls[kwargs.poll].timeout = window.setTimeout(poolServer, kwargs.frequency);
+          }
+        }, function (rejection) {
+          if (!_this._polls[kwargs.poll]._stopped) {
+            if (kwargs.error) {
+              kwargs.error(rejection);
+            } else {
+              _this._snackbar.apiError(rejection);
+            }
+          }
+        });
+      };
+
+      poolServer();
+    }
+  }, {
+    key: "stop",
+    value: function stop(pollId) {
+      if (this._polls[pollId]) {
+        window.clearTimeout(this._polls[pollId].timeout);
+        this._polls[pollId]._stopped = true;
+      }
+    }
+  }]);
+
+  return Polls;
+}();
+
+exports.default = new Polls();
+
+},{}],152:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.Snackbar = undefined;
+
+var _snackbar = require('../reducers/snackbar');
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var HIDE_ANIMATION_LENGTH = 300;
+var MESSAGE_SHOW_LENGTH = 5000;
+
+var Snackbar = exports.Snackbar = function () {
+  function Snackbar() {
+    _classCallCheck(this, Snackbar);
+  }
+
+  _createClass(Snackbar, [{
+    key: 'init',
+    value: function init(store) {
+      this._store = store;
+      this._timeout = null;
+    }
+  }, {
+    key: 'alert',
+    value: function alert(message, type) {
+      var _this = this;
+
+      if (this._timeout) {
+        window.clearTimeout(this._timeout);
+        this._store.dispatch((0, _snackbar.hideSnackbar)());
+
+        this._timeout = window.setTimeout(function () {
+          _this._timeout = null;
+          _this.alert(message, type);
+        }, HIDE_ANIMATION_LENGTH);
+      } else {
+        this._store.dispatch((0, _snackbar.showSnackbar)(message, type));
+        this._timeout = window.setTimeout(function () {
+          _this._store.dispatch((0, _snackbar.hideSnackbar)());
+          _this._timeout = null;
+        }, MESSAGE_SHOW_LENGTH);
+      }
+    }
+
+    // shorthands for message types
+
+  }, {
+    key: 'info',
+    value: function info(message) {
+      this.alert(message, 'info');
+    }
+  }, {
+    key: 'success',
+    value: function success(message) {
+      this.alert(message, 'success');
+    }
+  }, {
+    key: 'warning',
+    value: function warning(message) {
+      this.alert(message, 'warning');
+    }
+  }, {
+    key: 'error',
+    value: function error(message) {
+      this.alert(message, 'error');
+    }
+
+    // shorthand for api errors
+
+  }, {
+    key: 'apiError',
+    value: function apiError(rejection) {
+      var message = rejection.detail;
+
+      if (!message) {
+        if (rejection.status === 404) {
+          message = gettext("Action link is invalid.");
+        } else {
+          message = gettext("Unknown error has occured.");
+        }
+      }
+
+      if (rejection.status === 403 && message === "Permission denied") {
+        message = gettext("You don't have permission to perform this action.");
+      }
+
+      this.error(message);
+    }
+  }]);
+
+  return Snackbar;
+}();
+
+exports.default = new Snackbar();
+
+},{"../reducers/snackbar":139}],153:[function(require,module,exports){
+'use strict';
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.StoreWrapper = undefined;
+
+var _redux = require('redux');
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var StoreWrapper = exports.StoreWrapper = function () {
+  function StoreWrapper() {
+    _classCallCheck(this, StoreWrapper);
+
+    this._store = null;
+    this._reducers = {};
+    this._initialState = {};
+  }
+
+  _createClass(StoreWrapper, [{
+    key: 'addReducer',
+    value: function addReducer(name, reducer, initialState) {
+      this._reducers[name] = reducer;
+      this._initialState[name] = initialState;
+    }
+  }, {
+    key: 'init',
+    value: function init() {
+      this._store = (0, _redux.createStore)((0, _redux.combineReducers)(this._reducers), this._initialState);
+    }
+  }, {
+    key: 'getStore',
+    value: function getStore() {
+      return this._store;
+    }
+
+    // Store API
+
+  }, {
+    key: 'getState',
+    value: function getState() {
+      return this._store.getState();
+    }
+  }, {
+    key: 'dispatch',
+    value: function dispatch(action) {
+      return this._store.dispatch(action);
+    }
+  }]);
+
+  return StoreWrapper;
+}();
+
+exports.default = new StoreWrapper();
+
+},{"redux":"redux"}],154:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+/* global zxcvbn */
+
+var Zxcvbn = exports.Zxcvbn = function () {
+  function Zxcvbn() {
+    _classCallCheck(this, Zxcvbn);
+  }
+
+  _createClass(Zxcvbn, [{
+    key: "init",
+    value: function init(include) {
+      this._include = include;
+    }
+  }, {
+    key: "scorePassword",
+    value: function scorePassword(password, inputs) {
+      // 0-4 score, the more the stronger password
+      return zxcvbn(password, inputs).score;
+    }
+  }, {
+    key: "load",
+    value: function load() {
+      if (typeof zxcvbn === "undefined") {
+        this._include.include('misago/js/zxcvbn.js');
+        return this._loadingPromise();
+      } else {
+        return this._loadedPromise();
+      }
+    }
+  }, {
+    key: "_loadingPromise",
+    value: function _loadingPromise() {
+      return new Promise(function (resolve) {
+        var wait = function wait() {
+          if (typeof zxcvbn === "undefined") {
+            window.setTimeout(function () {
+              wait();
+            }, 200);
+          } else {
+            resolve();
+          }
+        };
+        wait();
+      });
+    }
+  }, {
+    key: "_loadedPromise",
+    value: function _loadedPromise() {
+      // we have already loaded zxcvbn.js, resolve away!
+      return new Promise(function (resolve) {
+        resolve();
+      });
+    }
+  }]);
+
+  return Zxcvbn;
+}();
+
+exports.default = new Zxcvbn();
+
+},{}],155:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+exports.default = function (ban, changeState) {
+  _reactDom2.default.render(
+  /* jshint ignore:start */
+  _react2.default.createElement(
+    _reactRedux.Provider,
+    { store: _store2.default.getStore() },
+    _react2.default.createElement(RedrawedBannedPage, { message: ban.message,
+      expires: ban.expires_on ? (0, _moment2.default)(ban.expires_on) : null })
+  ),
+  /* jshint ignore:end */
+  document.getElementById('page-mount'));
+
+  if (typeof changeState === 'undefined' || changeState) {
+    var forumName = _index2.default.get('SETTINGS').forum_name;
+    document.title = gettext("You are banned") + ' | ' + forumName;
+    window.history.pushState({}, "", _index2.default.get('BANNED_URL'));
+  }
+};
+
+var _moment = require('moment');
+
+var _moment2 = _interopRequireDefault(_moment);
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactDom = require('react-dom');
+
+var _reactDom2 = _interopRequireDefault(_reactDom);
+
+var _reactRedux = require('react-redux');
+
+var _bannedPage = require('../components/banned-page');
+
+var _bannedPage2 = _interopRequireDefault(_bannedPage);
+
+var _index = require('../index');
+
+var _index2 = _interopRequireDefault(_index);
+
+var _store = require('../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// jshint ignore:line
+
+/* jshint ignore:start */
+// jshint ignore:line
+// jshint ignore:line
+var select = function select(state) {
+  return state.tick;
+}; // jshint ignore:line
+// jshint ignore:line
+
+var RedrawedBannedPage = (0, _reactRedux.connect)(select)(_bannedPage2.default);
+/* jshint ignore:end */
+
+},{"../components/banned-page":56,"../index":136,"../services/store":153,"moment":"moment","react":"react","react-dom":"react-dom","react-redux":"react-redux"}],156:[function(require,module,exports){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+exports.default = function (list, rowWidth) {
+  var padding = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];
+
+  var rows = [];
+  var row = [];
+
+  list.forEach(function (element) {
+    row.push(element);
+    if (row.length === rowWidth) {
+      rows.push(row);
+      row = [];
+    }
+  });
+
+  // pad row to required length?
+  if (padding !== false && row.length > 0 && row.length < rowWidth) {
+    for (var i = row.length; i < rowWidth; i++) {
+      row.push(padding);
+    }
+  }
+
+  if (row.length) {
+    rows.push(row);
+  }
+
+  return rows;
+};
+
+},{}],157:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+exports.default = function (bytes) {
+  if (bytes > 1000 * 1000 * 1000) {
+    return Math.round(bytes * 100 / (1000 * 1000 * 1000)) / 100 + ' GB';
+  } else if (bytes > 1000 * 1000) {
+    return Math.round(bytes * 100 / (1000 * 1000)) / 100 + ' MB';
+  } else if (bytes > 1000) {
+    return Math.round(bytes * 100 / 1000) / 100 + ' KB';
+  } else {
+    return Math.round(bytes * 100) / 100 + ' B';
+  }
+};
+
+},{}],158:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+exports.default = function (Component, rootElementId) {
+  var connected = arguments.length <= 2 || arguments[2] === undefined ? true : arguments[2];
+
+  var rootElement = document.getElementById(rootElementId);
+
+  /* jshint ignore:start */
+  var finalComponent = Component.props ? Component : _react2.default.createElement(Component, null);
+  /* jshint ignore:end */
+
+  if (rootElement) {
+    if (connected) {
+      _reactDom2.default.render(
+      /* jshint ignore:start */
+      _react2.default.createElement(
+        _reactRedux.Provider,
+        { store: _store2.default.getStore() },
+        finalComponent
+      ),
+      /* jshint ignore:end */
+      rootElement);
+    } else {
+      /* jshint ignore:start */
+      _reactDom2.default.render(finalComponent, rootElement);
+      /* jshint ignore:end */
+    }
+  }
+};
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactDom = require('react-dom');
+
+var _reactDom2 = _interopRequireDefault(_reactDom);
+
+var _reactRedux = require('react-redux');
+
+var _store = require('../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+},{"../services/store":153,"react":"react","react-dom":"react-dom","react-redux":"react-redux"}],159:[function(require,module,exports){
+"use strict";
+
+var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var OrderedList = function () {
+  function OrderedList(items) {
+    _classCallCheck(this, OrderedList);
+
+    this.isOrdered = false;
+    this._items = items || [];
+  }
+
+  _createClass(OrderedList, [{
+    key: "add",
+    value: function add(key, item, order) {
+      this._items.push({
+        key: key,
+        item: item,
+
+        after: order ? order.after || null : null,
+        before: order ? order.before || null : null
+      });
+    }
+  }, {
+    key: "get",
+    value: function get(key, value) {
+      for (var i = 0; i < this._items.length; i++) {
+        if (this._items[i].key === key) {
+          return this._items[i].item;
+        }
+      }
+
+      return value;
+    }
+  }, {
+    key: "has",
+    value: function has(key) {
+      return this.get(key) !== undefined;
+    }
+  }, {
+    key: "values",
+    value: function values() {
+      var values = [];
+      for (var i = 0; i < this._items.length; i++) {
+        values.push(this._items[i].item);
+      }
+      return values;
+    }
+  }, {
+    key: "order",
+    value: function order(values_only) {
+      if (!this.isOrdered) {
+        this._items = this._order(this._items);
+        this.isOrdered = true;
+      }
+
+      if (values_only || typeof values_only === 'undefined') {
+        return this.values();
+      } else {
+        return this._items;
+      }
+    }
+  }, {
+    key: "orderedValues",
+    value: function orderedValues() {
+      return this.order(true);
+    }
+  }, {
+    key: "_order",
+    value: function _order(unordered) {
+      // Index of unordered items
+      var index = [];
+      unordered.forEach(function (item) {
+        index.push(item.key);
+      });
+
+      // Ordered items
+      var ordered = [];
+      var ordering = [];
+
+      // First pass: register items that
+      // don't specify their order
+      unordered.forEach(function (item) {
+        if (!item.after && !item.before) {
+          ordered.push(item);
+          ordering.push(item.key);
+        }
+      });
+
+      // Second pass: register items that
+      // specify their before to "_end"
+      unordered.forEach(function (item) {
+        if (item.before === "_end") {
+          ordered.push(item);
+          ordering.push(item.key);
+        }
+      });
+
+      // Third pass: keep iterating items
+      // until we hit iterations limit or finish
+      // ordering list
+      function insertItem(item) {
+        var insertAt = -1;
+        if (ordering.indexOf(item.key) === -1) {
+          if (item.after) {
+            insertAt = ordering.indexOf(item.after);
+            if (insertAt !== -1) {
+              insertAt += 1;
+            }
+          } else if (item.before) {
+            insertAt = ordering.indexOf(item.before);
+          }
+
+          if (insertAt !== -1) {
+            ordered.splice(insertAt, 0, item);
+            ordering.splice(insertAt, 0, item.key);
+          }
+        }
+      }
+
+      var iterations = 200;
+      while (iterations > 0 && index.length !== ordering.length) {
+        iterations -= 1;
+        unordered.forEach(insertItem);
+      }
+
+      return ordered;
+    }
+  }]);
+
+  return OrderedList;
+}();
+
+exports.default = OrderedList;
+
+},{}],160:[function(require,module,exports){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.int = int;
+exports.range = range;
+function int(min, max) {
+  return Math.floor(Math.random() * (max - min + 1)) + min;
+}
+
+function range(min, max) {
+  var array = new Array(int(min, max));
+  for (var i = 0; i < array.length; i++) {
+    array[i] = i;
+  }
+
+  return array;
+}
+
+},{}],161:[function(require,module,exports){
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+exports.default = function () {
+  window.scrollTo(0, 0);
+};
+
+},{}],162:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+
+exports.default = function (options) {
+  var routes = {
+    component: options.component || null,
+    childRoutes: []
+  };
+
+  if (options.root) {
+    routes.childRoutes = [{
+      path: options.root,
+      onEnter: function onEnter(nextState, replaceState) {
+        replaceState(null, options.paths[0].path);
+      }
+    }].concat(options.paths);
+  } else {
+    routes.childRoutes = options.paths;
+  }
+
+  _reactDom2.default.render(_react2.default.createElement(
+    _reactRedux.Provider,
+    { store: _store2.default.getStore() },
+    _react2.default.createElement(_reactRouter.Router, { routes: routes, history: history })
+  ), rootElement);
+};
+
+var _react = require('react');
+
+var _react2 = _interopRequireDefault(_react);
+
+var _reactDom = require('react-dom');
+
+var _reactDom2 = _interopRequireDefault(_reactDom);
+
+var _reactRedux = require('react-redux');
+
+var _reactRouter = require('react-router');
+
+var _createBrowserHistory = require('history/lib/createBrowserHistory');
+
+var _createBrowserHistory2 = _interopRequireDefault(_createBrowserHistory);
+
+var _store = require('../services/store');
+
+var _store2 = _interopRequireDefault(_store);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// jshint ignore:start
+
+var rootElement = document.getElementById('page-mount');
+var history = new _createBrowserHistory2.default();
+
+},{"../services/store":153,"history/lib/createBrowserHistory":44,"react":"react","react-dom":"react-dom","react-redux":"react-redux","react-router":"react-router"}],163:[function(require,module,exports){
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+  value: true
+});
+exports.required = required;
+exports.email = email;
+exports.minLength = minLength;
+exports.maxLength = maxLength;
+exports.usernameMinLength = usernameMinLength;
+exports.usernameMaxLength = usernameMaxLength;
+exports.usernameContent = usernameContent;
+exports.passwordMinLength = passwordMinLength;
+var EMAIL = /^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
+var USERNAME = new RegExp('^[0-9a-z]+$', 'i');
+
+function required() {
+  return function (value) {
+    if ($.trim(value).length === 0) {
+      return gettext("This field is required.");
+    }
+  };
+}
+
+function email(message) {
+  return function (value) {
+    if (!EMAIL.test(value)) {
+      return message || gettext("Enter a valid email address.");
+    }
+  };
+}
+
+function minLength(limitValue, message) {
+  return function (value) {
+    var returnMessage = '';
+    var length = $.trim(value).length;
+
+    if (length < limitValue) {
+      if (message) {
+        returnMessage = message(limitValue, length);
+      } else {
+        returnMessage = ngettext("Ensure this value has at least %(limit_value)s character (it has %(show_value)s).", "Ensure this value has at least %(limit_value)s characters (it has %(show_value)s).", limitValue);
+      }
+      return interpolate(returnMessage, {
+        limit_value: limitValue,
+        show_value: length
+      }, true);
+    }
+  };
+}
+
+function maxLength(limitValue, message) {
+  return function (value) {
+    var returnMessage = '';
+    var length = $.trim(value).length;
+
+    if (length > limitValue) {
+      if (message) {
+        returnMessage = message(limitValue, length);
+      } else {
+        returnMessage = ngettext("Ensure this value has at most %(limit_value)s character (it has %(show_value)s).", "Ensure this value has at most %(limit_value)s characters (it has %(show_value)s).", limitValue);
+      }
+      return interpolate(returnMessage, {
+        limit_value: limitValue,
+        show_value: length
+      }, true);
+    }
+  };
+}
+
+function usernameMinLength(settings) {
+  var message = function message(limitValue) {
+    return ngettext("Username must be at least %(limit_value)s character long.", "Username must be at least %(limit_value)s characters long.", limitValue);
+  };
+  return this.minLength(settings.username_length_min, message);
+}
+
+function usernameMaxLength(settings) {
+  var message = function message(limitValue) {
+    return ngettext("Username cannot be longer than %(limit_value)s character.", "Username cannot be longer than %(limit_value)s characters.", limitValue);
+  };
+  return this.maxLength(settings.username_length_max, message);
+}
+
+function usernameContent() {
+  return function (value) {
+    if (!USERNAME.test($.trim(value))) {
+      return gettext("Username can only contain latin alphabet letters and digits.");
+    }
+  };
+}
+
+function passwordMinLength(settings) {
+  var message = function message(limitValue) {
+    return ngettext("Valid password must be at least %(limit_value)s character long.", "Valid password must be at least %(limit_value)s characters long.", limitValue);
+  };
+  return this.minLength(settings.password_length_min, message);
+}
+
+},{}]},{},[2,3,4,5,18,19,20,21,22,23,24,32,33,34,35,6,7,8,9,10,11,12,13,14,15,16,17,25,26,27,28,29,30,31])
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwic3JjL2luZGV4LmpzIiwic3JjL2luaXRpYWxpemVycy9hamF4LmpzIiwic3JjL2luaXRpYWxpemVycy9hdXRoLmpzIiwic3JjL2luaXRpYWxpemVycy9jYXRjaGEuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL2NvbXBvbmVudHMvYXV0aC1tZXNzYWdlLmpzIiwic3JjL2luaXRpYWxpemVycy9jb21wb25lbnRzL2Jhbm5lZC1wYWdlLmpzIiwic3JjL2luaXRpYWxpemVycy9jb21wb25lbnRzL2NhdGVnb3JpZXMuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL2NvbXBvbmVudHMvb3B0aW9ucy5qcyIsInNyYy9pbml0aWFsaXplcnMvY29tcG9uZW50cy9wcm9maWxlLmpzIiwic3JjL2luaXRpYWxpemVycy9jb21wb25lbnRzL3JlcXVlc3QtYWN0aXZhdGlvbi1saW5rLmpzIiwic3JjL2luaXRpYWxpemVycy9jb21wb25lbnRzL3JlcXVlc3QtcGFzc3dvcmQtcmVzZXQuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL2NvbXBvbmVudHMvcmVzZXQtcGFzc3dvcmQtZm9ybS5qcyIsInNyYy9pbml0aWFsaXplcnMvY29tcG9uZW50cy9zbmFja2Jhci5qcyIsInNyYy9pbml0aWFsaXplcnMvY29tcG9uZW50cy90aHJlYWRzLmpzIiwic3JjL2luaXRpYWxpemVycy9jb21wb25lbnRzL3VzZXItbWVudS5qcyIsInNyYy9pbml0aWFsaXplcnMvY29tcG9uZW50cy91c2Vycy5qcyIsInNyYy9pbml0aWFsaXplcnMvaW5jbHVkZS5qcyIsInNyYy9pbml0aWFsaXplcnMvbG9jYWwtc3RvcmFnZS5qcyIsInNyYy9pbml0aWFsaXplcnMvbW9iaWxlLW5hdmJhci1kcm9wZG93bi5qcyIsInNyYy9pbml0aWFsaXplcnMvbW9kYWwuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL21vbWVudC1sb2NhbGUuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL3BhZ2UtdGl0bGUuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL3BvbGxzLmpzIiwic3JjL2luaXRpYWxpemVycy9yZWR1Y2Vycy9hdXRoLmpzIiwic3JjL2luaXRpYWxpemVycy9yZWR1Y2Vycy9wcm9maWxlLWRlaHlkcmF0ZS5qcyIsInNyYy9pbml0aWFsaXplcnMvcmVkdWNlcnMvcHJvZmlsZS5qcyIsInNyYy9pbml0aWFsaXplcnMvcmVkdWNlcnMvc25hY2tiYXIuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL3JlZHVjZXJzL3RpY2suanMiLCJzcmMvaW5pdGlhbGl6ZXJzL3JlZHVjZXJzL3VzZXJuYW1lLWhpc3RvcnkuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL3JlZHVjZXJzL3VzZXJzLmpzIiwic3JjL2luaXRpYWxpemVycy9zbmFja2Jhci5qcyIsInNyYy9pbml0aWFsaXplcnMvc3RvcmUuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL3RpY2stc3RhcnQuanMiLCJzcmMvaW5pdGlhbGl6ZXJzL3p4Y3Zibi5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvaW5kZXguanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2xpYi9pc19hcmd1bWVudHMuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2xpYi9rZXlzLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9ub2RlX21vZHVsZXMvaGlzdG9yeS9saWIvQWN0aW9ucy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL0FzeW5jVXRpbHMuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9ET01TdGF0ZVN0b3JhZ2UuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9ET01VdGlscy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9ub2RlX21vZHVsZXMvaGlzdG9yeS9saWIvY3JlYXRlQnJvd3Nlckhpc3RvcnkuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9jcmVhdGVET01IaXN0b3J5LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9ub2RlX21vZHVsZXMvaGlzdG9yeS9saWIvY3JlYXRlSGlzdG9yeS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2hpc3RvcnkvbGliL2NyZWF0ZUxvY2F0aW9uLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9ub2RlX21vZHVsZXMvaGlzdG9yeS9saWIvZGVwcmVjYXRlLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9ub2RlX21vZHVsZXMvaGlzdG9yeS9saWIvZXh0cmFjdFBhdGguanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9wYXJzZVBhdGguanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL25vZGVfbW9kdWxlcy9oaXN0b3J5L2xpYi9ydW5UcmFuc2l0aW9uSG9vay5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvbm9kZV9tb2R1bGVzL2ludmFyaWFudC9icm93c2VyLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9ub2RlX21vZHVsZXMvd2FybmluZy9icm93c2VyLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9hdXRoLW1lc3NhZ2UuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL2F2YXRhci5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvYmFubmVkLXBhZ2UuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL2J1dHRvbi5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvY2F0ZWdvcmllcy9jYXRlZ29yeS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvY2F0ZWdvcmllcy9sYXN0LWFjdGl2aXR5LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9jYXRlZ29yaWVzL3JlYWQtaWNvbi5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvY2F0ZWdvcmllcy9yb290LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9jYXRlZ29yaWVzL3N0YXRzLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9jaGFuZ2UtYXZhdGFyL2Nyb3AuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL2NoYW5nZS1hdmF0YXIvZ2FsbGVyeS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvY2hhbmdlLWF2YXRhci9pbmRleC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvY2hhbmdlLWF2YXRhci9yb290LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9jaGFuZ2UtYXZhdGFyL3VwbG9hZC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvZHJvcGRvd24tdG9nZ2xlLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9mb3JtLWdyb3VwLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9mb3JtLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9saS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvbG9hZGVyLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9tb2RhbC1sb2FkZXIuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL21vZGFsLW1lc3NhZ2UuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL29wdGlvbnMvY2hhbmdlLXVzZXJuYW1lL2Zvcm0tbG9hZGluZy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvb3B0aW9ucy9jaGFuZ2UtdXNlcm5hbWUvZm9ybS1sb2NrZWQuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL29wdGlvbnMvY2hhbmdlLXVzZXJuYW1lL2Zvcm0uanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL29wdGlvbnMvY2hhbmdlLXVzZXJuYW1lL3Jvb3QuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL29wdGlvbnMvZm9ydW0tb3B0aW9ucy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvb3B0aW9ucy9uYXZzLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9vcHRpb25zL3Jvb3QuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL29wdGlvbnMvc2lnbi1pbi1jcmVkZW50aWFscy9jaGFuZ2UtZW1haWwuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL29wdGlvbnMvc2lnbi1pbi1jcmVkZW50aWFscy9jaGFuZ2UtcGFzc3dvcmQuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL29wdGlvbnMvc2lnbi1pbi1jcmVkZW50aWFscy9yb290LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9wYW5lbC1sb2FkZXIuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3BhbmVsLW1lc3NhZ2UuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3Bhc3N3b3JkLXN0cmVuZ3RoLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9wcm9maWxlL0hlYWRlci5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvcHJvZmlsZS9iYW4tZGV0YWlscy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvcHJvZmlsZS9mb2xsb3ctYnV0dG9uLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9wcm9maWxlL2ZvbGxvd2Vycy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvcHJvZmlsZS9mb2xsb3dzLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9wcm9maWxlL21vZGVyYXRpb24vYXZhdGFyLWNvbnRyb2xzLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9wcm9maWxlL21vZGVyYXRpb24vY2hhbmdlLXVzZXJuYW1lLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9wcm9maWxlL21vZGVyYXRpb24vZGVsZXRlLWFjY291bnQuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3Byb2ZpbGUvbW9kZXJhdGlvbi9uYXYuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3Byb2ZpbGUvbmF2cy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvcHJvZmlsZS9yb290LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9wcm9maWxlL3VzZXJuYW1lLWhpc3RvcnkuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3JlZ2lzdGVyLWJ1dHRvbi5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvcmVnaXN0ZXIuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3JlcXVlc3QtYWN0aXZhdGlvbi1saW5rLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9yZXF1ZXN0LXBhc3N3b3JkLXJlc2V0LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9yZXNldC1wYXNzd29yZC1mb3JtLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy9zZWFyY2guanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3NlbGVjdC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvc2lnbi1pbi5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvc25hY2tiYXIuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3RocmVhZHMtbGlzdC9yb290LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy90aHJlYWRzL2hlYWRlci5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvdGhyZWFkcy9uYXZzLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy90aHJlYWRzL3Jvb3QuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3RocmVhZHMvcm91dGUuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3RocmVhZHMvdGl0bGUtdXRpbHMuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3VzZXItbWVudS9ndWVzdC1uYXYuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3VzZXItbWVudS9yb290LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy91c2VyLW1lbnUvdXNlci1uYXYuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3VzZXItc3RhdHVzLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy91c2VybmFtZS1oaXN0b3J5LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy91c2Vycy1saXN0L3Jvb3QuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3VzZXJzLWxpc3QvdXNlci1jYXJkLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy91c2Vycy1saXN0L3VzZXItcHJldmlldy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvdXNlcnMvYWN0aXZlLXBvc3RlcnMvbGlzdC1lbXB0eS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvdXNlcnMvYWN0aXZlLXBvc3RlcnMvbGlzdC1pdGVtLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy91c2Vycy9hY3RpdmUtcG9zdGVycy9saXN0LWxvYWRpbmcuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3VzZXJzL2FjdGl2ZS1wb3N0ZXJzL2xpc3QuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3VzZXJzL2FjdGl2ZS1wb3N0ZXJzL3Jvb3QuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3VzZXJzL25hdnMuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3VzZXJzL3JhbmsvbGlzdC1sb2FkaW5nLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvY29tcG9uZW50cy91c2Vycy9yYW5rL2xpc3QuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3VzZXJzL3JhbmsvcGFnZXIuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9jb21wb25lbnRzL3VzZXJzL3Jhbmsvcm9vdC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvdXNlcnMvcm9vdC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMvd2l0aC1kcm9wZG93bi5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2NvbXBvbmVudHMveWVzLW5vLXN3aXRjaC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL2luZGV4LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvcmVkdWNlcnMvYXV0aC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3JlZHVjZXJzL3Byb2ZpbGUuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9yZWR1Y2Vycy9zbmFja2Jhci5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3JlZHVjZXJzL3RpY2suanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9yZWR1Y2Vycy91c2VybmFtZS1oaXN0b3J5LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvcmVkdWNlcnMvdXNlcnMuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9zZXJ2aWNlcy9hamF4LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvc2VydmljZXMvYXV0aC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3NlcnZpY2VzL2NhcHRjaGEuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9zZXJ2aWNlcy9pbmNsdWRlLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvc2VydmljZXMvbG9jYWwtc3RvcmFnZS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3NlcnZpY2VzL21vYmlsZS1uYXZiYXItZHJvcGRvd24uanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9zZXJ2aWNlcy9tb2RhbC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3NlcnZpY2VzL3BhZ2UtdGl0bGUuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9zZXJ2aWNlcy9wb2xscy5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3NlcnZpY2VzL3NuYWNrYmFyLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvc2VydmljZXMvc3RvcmUuanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy9zZXJ2aWNlcy96eGN2Ym4uanMiLCIuLi8uLi8uLi9kb2N1bWVudHMvbWlzYWdvL2Zyb250ZW5kL3NyYy91dGlscy9iYW5uZWQtcGFnZS5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3V0aWxzL2JhdGNoLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvdXRpbHMvZmlsZS1zaXplLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvdXRpbHMvbW91bnQtY29tcG9uZW50LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvdXRpbHMvb3JkZXJlZC1saXN0LmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvdXRpbHMvcmFuZG9tLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvdXRpbHMvcmVzZXQtc2Nyb2xsLmpzIiwiLi4vLi4vLi4vZG9jdW1lbnRzL21pc2Fnby9mcm9udGVuZC9zcmMvdXRpbHMvcm91dGVkLWNvbXBvbmVudC5qcyIsIi4uLy4uLy4uL2RvY3VtZW50cy9taXNhZ28vZnJvbnRlbmQvc3JjL3V0aWxzL3ZhbGlkYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNqTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUN2Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNuREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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LE1BQUksT0FBTyxHQUFHLFNBQVYsT0FBTyxDQUFZLFVBQVUsRUFBRTtBQUNqQyxXQUFPLFFBQVEsQ0FDYiwyREFBMkQsRUFDM0QsNERBQTRELEVBQzVELFVBQVUsQ0FBQyxDQUFDO0dBQ2YsQ0FBQztBQUNGLFNBQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7Q0FDOUQ7O0FBRU0sU0FBUyxlQUFlLEdBQUc7QUFDaEMsU0FBTyxVQUFTLEtBQUssRUFBRTtBQUNyQixRQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDakMsYUFBTyxPQUFPLENBQUMsOERBQThELENBQUMsQ0FBQztLQUNoRjtHQUNGLENBQUM7Q0FDSDs7QUFFTSxTQUFTLGlCQUFpQixDQUFDLFFBQVEsRUFBRTtBQUMxQyxNQUFJLE9BQU8sR0FBRyxTQUFWLE9BQU8sQ0FBWSxVQUFVLEVBQUU7QUFDakMsV0FBTyxRQUFRLENBQ2IsaUVBQWlFLEVBQ2pFLGtFQUFrRSxFQUNsRSxVQUFVLENBQUMsQ0FBQztHQUNmLENBQUM7QUFDRixTQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0NBQzlEIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxuXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBzZXRUaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBzZXRUaW1lb3V0KGRyYWluUXVldWUsIDApO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiaW1wb3J0IE9yZGVyZWRMaXN0IGZyb20gJ21pc2Fnby91dGlscy9vcmRlcmVkLWxpc3QnO1xuXG5leHBvcnQgY2xhc3MgTWlzYWdvIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faW5pdGlhbGl6ZXJzID0gW107XG4gICAgdGhpcy5fY29udGV4dCA9IHt9O1xuICB9XG5cbiAgYWRkSW5pdGlhbGl6ZXIoaW5pdGlhbGl6ZXIpIHtcbiAgICB0aGlzLl9pbml0aWFsaXplcnMucHVzaCh7XG4gICAgICBrZXk6IGluaXRpYWxpemVyLm5hbWUsXG5cbiAgICAgIGl0ZW06IGluaXRpYWxpemVyLmluaXRpYWxpemVyLFxuXG4gICAgICBhZnRlcjogaW5pdGlhbGl6ZXIuYWZ0ZXIsXG4gICAgICBiZWZvcmU6IGluaXRpYWxpemVyLmJlZm9yZVxuICAgIH0pO1xuICB9XG5cbiAgaW5pdChjb250ZXh0KSB7XG4gICAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG5cbiAgICB2YXIgaW5pdE9yZGVyID0gbmV3IE9yZGVyZWRMaXN0KHRoaXMuX2luaXRpYWxpemVycykub3JkZXJlZFZhbHVlcygpO1xuICAgIGluaXRPcmRlci5mb3JFYWNoKGluaXRpYWxpemVyID0+IHtcbiAgICAgIGluaXRpYWxpemVyKHRoaXMpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gY29udGV4dCBhY2Nlc3NvcnNcbiAgaGFzKGtleSkge1xuICAgIHJldHVybiAhIXRoaXMuX2NvbnRleHRba2V5XTtcbiAgfVxuXG4gIGdldChrZXksIGZhbGxiYWNrKSB7XG4gICAgaWYgKHRoaXMuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0W2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxsYmFjayB8fCB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcG9wKGtleSkge1xuICAgIGlmICh0aGlzLmhhcyhrZXkpKSB7XG4gICAgICBsZXQgdmFsdWUgPSB0aGlzLl9jb250ZXh0W2tleV07XG4gICAgICB0aGlzLl9jb250ZXh0W2tleV0gPSBudWxsO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuXG4vLyBjcmVhdGUgIHNpbmdsZXRvblxudmFyIG1pc2FnbyA9IG5ldyBNaXNhZ28oKTtcblxuLy8gZXhwb3NlIGl0IGdsb2JhbGx5XG5nbG9iYWwubWlzYWdvID0gbWlzYWdvO1xuXG4vLyBhbmQgZXhwb3J0IGl0IGZvciB0ZXN0cyBhbmQgc3R1ZmZcbmV4cG9ydCBkZWZhdWx0IG1pc2FnbztcbiIsImltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIGFqYXguaW5pdChtaXNhZ28uZ2V0KCdDU1JGX0NPT0tJRV9OQU1FJykpO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnYWpheCcsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplclxufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgYXV0aCBmcm9tICdtaXNhZ28vc2VydmljZXMvYXV0aCc7XG5pbXBvcnQgbW9kYWwgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL21vZGFsJztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnO1xuaW1wb3J0IHN0b3JhZ2UgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2UnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgYXV0aC5pbml0KHN0b3JlLCBzdG9yYWdlLCBtb2RhbCk7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdhdXRoJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBhZnRlcjogJ3N0b3JlJ1xufSk7IiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IGFqYXggZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2FqYXgnO1xuaW1wb3J0IGNhcHRjaGEgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2NhcHRjaGEnO1xuaW1wb3J0IGluY2x1ZGUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2luY2x1ZGUnO1xuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKGNvbnRleHQpIHtcbiAgY2FwdGNoYS5pbml0KGNvbnRleHQsIGFqYXgsIGluY2x1ZGUsIHNuYWNrYmFyKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ2NhcHRjaGEnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXJcbn0pO1xuIiwiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBBdXRoTWVzc2FnZSwgeyBzZWxlY3QgfSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9hdXRoLW1lc3NhZ2UnO1xuaW1wb3J0IG1vdW50IGZyb20gJ21pc2Fnby91dGlscy9tb3VudC1jb21wb25lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgbW91bnQoY29ubmVjdChzZWxlY3QpKEF1dGhNZXNzYWdlKSwgJ2F1dGgtbWVzc2FnZS1tb3VudCcpO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnY29tcG9uZW50OmF1dGgtbWVzc2FnZScsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYWZ0ZXI6ICdzdG9yZSdcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHNob3dCYW5uZWRQYWdlIGZyb20gJ21pc2Fnby91dGlscy9iYW5uZWQtcGFnZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKGNvbnRleHQpIHtcbiAgaWYgKGNvbnRleHQuaGFzKCdCQU5fTUVTU0FHRScpKSB7XG4gICAgc2hvd0Jhbm5lZFBhZ2UoY29udGV4dC5nZXQoJ0JBTl9NRVNTQUdFJyksIGZhbHNlKTtcbiAgfVxufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnY29tcG9uZW50OmJhbmVkLXBhZ2UnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGFmdGVyOiAnc3RvcmUnXG59KTtcbiIsImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgQ2F0ZWdvcmllcywgeyBzZWxlY3QgfSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9jYXRlZ29yaWVzL3Jvb3QnO1xuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IG1vdW50IGZyb20gJ21pc2Fnby91dGlscy9tb3VudC1jb21wb25lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXRlZ29yaWVzLW1vdW50JykpIHtcbiAgICBtb3VudChjb25uZWN0KHNlbGVjdCkoQ2F0ZWdvcmllcyksICdjYXRlZ29yaWVzLW1vdW50Jyk7XG4gIH1cbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ2NvbXBvbmVudDpyZXNldC1wYXNzd29yZC1mb3JtJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBhZnRlcjogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgT3B0aW9ucywgeyBwYXRocyB9IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL29wdGlvbnMvcm9vdCc7XG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgbW91bnQgZnJvbSAnbWlzYWdvL3V0aWxzL3JvdXRlZC1jb21wb25lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcihjb250ZXh0KSB7XG4gIGlmIChjb250ZXh0LmhhcygnVVNFUl9PUFRJT05TJykpIHtcbiAgICBtb3VudCh7XG4gICAgICByb290OiBtaXNhZ28uZ2V0KCdVU0VSQ1BfVVJMJyksXG4gICAgICBjb21wb25lbnQ6IE9wdGlvbnMsXG4gICAgICBwYXRoczogcGF0aHMoKVxuICAgIH0pO1xuICB9XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdjb21wb25lbnQ6b3B0aW9ucycsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYWZ0ZXI6ICdzdG9yZSdcbn0pO1xuIiwiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBQcm9maWxlLCB7IHBhdGhzLCBzZWxlY3QgfSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9wcm9maWxlL3Jvb3QnO1xuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IG1vdW50IGZyb20gJ21pc2Fnby91dGlscy9yb3V0ZWQtY29tcG9uZW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoY29udGV4dCkge1xuICBpZiAoY29udGV4dC5oYXMoJ1BST0ZJTEUnKSAmJiBjb250ZXh0LmhhcygnUFJPRklMRV9QQUdFUycpKSB7XG4gICAgbW91bnQoe1xuICAgICAgcm9vdDogbWlzYWdvLmdldCgnUFJPRklMRScpLmFic29sdXRlX3VybCxcbiAgICAgIGNvbXBvbmVudDogY29ubmVjdChzZWxlY3QpKFByb2ZpbGUpLFxuICAgICAgcGF0aHM6IHBhdGhzKClcbiAgICB9KTtcbiAgfVxufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnY29tcG9uZW50OnByb2ZpbGUnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGFmdGVyOiAncmVkdWNlcjpwcm9maWxlLWRlaHlkcmF0ZSdcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IFJlcXVlc3RBY3RpdmF0aW9uTGluayBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9yZXF1ZXN0LWFjdGl2YXRpb24tbGluayc7XG5pbXBvcnQgbW91bnQgZnJvbSAnbWlzYWdvL3V0aWxzL21vdW50LWNvbXBvbmVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlcXVlc3QtYWN0aXZhdGlvbi1saW5rLW1vdW50JykpIHtcbiAgICBtb3VudChSZXF1ZXN0QWN0aXZhdGlvbkxpbmssICdyZXF1ZXN0LWFjdGl2YXRpb24tbGluay1tb3VudCcsIGZhbHNlKTtcbiAgfVxufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnY29tcG9uZW50OnJlcXVlc3QtYWN0aXZhdGlvbi1saW5rJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBhZnRlcjogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgUmVxdWVzdFBhc3N3b3JkUmVzZXQgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvcmVxdWVzdC1wYXNzd29yZC1yZXNldCc7XG5pbXBvcnQgbW91bnQgZnJvbSAnbWlzYWdvL3V0aWxzL21vdW50LWNvbXBvbmVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlcXVlc3QtcGFzc3dvcmQtcmVzZXQtbW91bnQnKSkge1xuICAgIG1vdW50KFJlcXVlc3RQYXNzd29yZFJlc2V0LCAncmVxdWVzdC1wYXNzd29yZC1yZXNldC1tb3VudCcsIGZhbHNlKTtcbiAgfVxufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnY29tcG9uZW50OnJlcXVlc3QtcGFzc3dvcmQtcmVzZXQnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGFmdGVyOiAnc3RvcmUnXG59KTtcbiIsImltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBSZXNldFBhc3N3b3JkRm9ybSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9yZXNldC1wYXNzd29yZC1mb3JtJztcbmltcG9ydCBtb3VudCBmcm9tICdtaXNhZ28vdXRpbHMvbW91bnQtY29tcG9uZW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzZXQtcGFzc3dvcmQtZm9ybS1tb3VudCcpKSB7XG4gICAgbW91bnQoUmVzZXRQYXNzd29yZEZvcm0sICdyZXNldC1wYXNzd29yZC1mb3JtLW1vdW50JywgZmFsc2UpO1xuICB9XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdjb21wb25lbnQ6cmVzZXQtcGFzc3dvcmQtZm9ybScsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYWZ0ZXI6ICdzdG9yZSdcbn0pO1xuIiwiaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCB7IFNuYWNrYmFyLCBzZWxlY3QgfSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9zbmFja2Jhcic7XG5pbXBvcnQgbW91bnQgZnJvbSAnbWlzYWdvL3V0aWxzL21vdW50LWNvbXBvbmVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBtb3VudChjb25uZWN0KHNlbGVjdCkoU25hY2tiYXIpLCAnc25hY2tiYXItbW91bnQnKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ2NvbXBvbmVudDpzbmFja2JhcicsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYWZ0ZXI6ICdzbmFja2Jhcidcbn0pO1xuIiwiaW1wb3J0IHsgcGF0aHMgfSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy90aHJlYWRzL3Jvb3QnO1xuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IG1vdW50IGZyb20gJ21pc2Fnby91dGlscy9yb3V0ZWQtY29tcG9uZW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoY29udGV4dCkge1xuICBpZiAoY29udGV4dC5oYXMoJ1RIUkVBRFMnKSAmJiBjb250ZXh0LmhhcygnQ0FURUdPUklFUycpKSB7XG4gICAgbW91bnQoe1xuICAgICAgcGF0aHM6IHBhdGhzKClcbiAgICB9KTtcbiAgfVxufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnY29tcG9uZW50OnRocmVhZHMnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGFmdGVyOiAnc3RvcmUnXG59KTtcbiIsImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgeyBVc2VyTWVudSwgQ29tcGFjdFVzZXJNZW51LCBzZWxlY3QgfSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy91c2VyLW1lbnUvcm9vdCc7XG5pbXBvcnQgbW91bnQgZnJvbSAnbWlzYWdvL3V0aWxzL21vdW50LWNvbXBvbmVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBtb3VudChjb25uZWN0KHNlbGVjdCkoVXNlck1lbnUpLCAndXNlci1tZW51LW1vdW50Jyk7XG4gIG1vdW50KGNvbm5lY3Qoc2VsZWN0KShDb21wYWN0VXNlck1lbnUpLCAndXNlci1tZW51LWNvbXBhY3QtbW91bnQnKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ2NvbXBvbmVudDp1c2VyLW1lbnUnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGFmdGVyOiAnc3RvcmUnXG59KTtcbiIsImltcG9ydCBVc2VycywgeyBwYXRocyB9IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXJzL3Jvb3QnO1xuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IG1vdW50IGZyb20gJ21pc2Fnby91dGlscy9yb3V0ZWQtY29tcG9uZW50JztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoY29udGV4dCkge1xuICBpZiAoY29udGV4dC5oYXMoJ1VTRVJTX0xJU1RTJykpIHtcbiAgICBtb3VudCh7XG4gICAgICByb290OiBtaXNhZ28uZ2V0KCdVU0VSU19MSVNUX1VSTCcpLFxuICAgICAgY29tcG9uZW50OiBVc2VycyxcbiAgICAgIHBhdGhzOiBwYXRocygpXG4gICAgfSk7XG4gIH1cbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ2NvbXBvbmVudDp1c2VycycsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYWZ0ZXI6ICdzdG9yZSdcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IGluY2x1ZGUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2luY2x1ZGUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcihjb250ZXh0KSB7XG4gIGluY2x1ZGUuaW5pdChjb250ZXh0LmdldCgnU1RBVElDX1VSTCcpKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ2luY2x1ZGUnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXJcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHN0b3JhZ2UgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2UnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgc3RvcmFnZS5pbml0KCdtaXNhZ29fJyk7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdsb2NhbC1zdG9yYWdlJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyXG59KTtcbiIsImltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBkcm9wZG93biBmcm9tICdtaXNhZ28vc2VydmljZXMvbW9iaWxlLW5hdmJhci1kcm9wZG93bic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2JpbGUtbmF2YmFyLWRyb3Bkb3duLW1vdW50Jyk7XG4gIGlmIChlbGVtZW50KSB7XG4gICAgZHJvcGRvd24uaW5pdChlbGVtZW50KTtcbiAgfVxufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnZHJvcGRvd24nLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGJlZm9yZTogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgbW9kYWwgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL21vZGFsJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsLW1vdW50Jyk7XG4gIGlmIChlbGVtZW50KSB7XG4gICAgbW9kYWwuaW5pdChlbGVtZW50KTtcbiAgfVxufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnbW9kYWwnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGJlZm9yZTogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBtb21lbnQubG9jYWxlKCQoJ2h0bWwnKS5hdHRyKCdsYW5nJykpO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnbW9tZW50JyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyXG59KTtcbiIsImltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCB0aXRsZSBmcm9tICdtaXNhZ28vc2VydmljZXMvcGFnZS10aXRsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKGNvbnRleHQpIHtcbiAgdGl0bGUuaW5pdChcbiAgICBjb250ZXh0LmdldCgnU0VUVElOR1MnKS5mb3J1bV9pbmRleF90aXRsZSxcbiAgICBjb250ZXh0LmdldCgnU0VUVElOR1MnKS5mb3J1bV9uYW1lKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ3BhZ2UtdGl0bGUnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXJcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IGFqYXggZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2FqYXgnO1xuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7XG5pbXBvcnQgcG9sbHMgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3BvbGxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIHBvbGxzLmluaXQoYWpheCwgc25hY2tiYXIpO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAncG9sbHMnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXJcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHJlZHVjZXIsIHsgaW5pdGlhbFN0YXRlIH0gZnJvbSAnbWlzYWdvL3JlZHVjZXJzL2F1dGgnO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKGNvbnRleHQpIHtcbiAgc3RvcmUuYWRkUmVkdWNlcignYXV0aCcsIHJlZHVjZXIsIE9iamVjdC5hc3NpZ24oe1xuICAgICdpc0F1dGhlbnRpY2F0ZWQnOiBjb250ZXh0LmdldCgnaXNBdXRoZW50aWNhdGVkJyksXG4gICAgJ2lzQW5vbnltb3VzJzogIWNvbnRleHQuZ2V0KCdpc0F1dGhlbnRpY2F0ZWQnKSxcblxuICAgICd1c2VyJzogY29udGV4dC5nZXQoJ3VzZXInKVxuICB9LCBpbml0aWFsU3RhdGUpKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ3JlZHVjZXI6YXV0aCcsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYmVmb3JlOiAnc3RvcmUnXG59KTtcbiIsImltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCB7IGRlaHlkcmF0ZSB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy9wcm9maWxlJztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgaWYgKG1pc2Fnby5oYXMoJ1BST0ZJTEUnKSkge1xuICAgIHN0b3JlLmRpc3BhdGNoKGRlaHlkcmF0ZShtaXNhZ28uZ2V0KCdQUk9GSUxFJykpKTtcbiAgfVxufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAncmVkdWNlcjpwcm9maWxlLWRlaHlkcmF0ZScsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYWZ0ZXI6ICdzdG9yZSdcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHJlZHVjZXIgZnJvbSAnbWlzYWdvL3JlZHVjZXJzL3Byb2ZpbGUnO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBzdG9yZS5hZGRSZWR1Y2VyKCdwcm9maWxlJywgcmVkdWNlciwge30pO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAncmVkdWNlcjpwcm9maWxlJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLFxuICBiZWZvcmU6ICdzdG9yZSdcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHJlZHVjZXIsIHsgaW5pdGlhbFN0YXRlIH0gZnJvbSAnbWlzYWdvL3JlZHVjZXJzL3NuYWNrYmFyJztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgc3RvcmUuYWRkUmVkdWNlcignc25hY2tiYXInLCByZWR1Y2VyLCBpbml0aWFsU3RhdGUpO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAncmVkdWNlcjpzbmFja2JhcicsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYmVmb3JlOiAnc3RvcmUnXG59KTtcbiIsImltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCByZWR1Y2VyLCB7IGluaXRpYWxTdGF0ZSB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy90aWNrJztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgc3RvcmUuYWRkUmVkdWNlcigndGljaycsIHJlZHVjZXIsIGluaXRpYWxTdGF0ZSk7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdyZWR1Y2VyOnRpY2snLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGJlZm9yZTogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgcmVkdWNlciBmcm9tICdtaXNhZ28vcmVkdWNlcnMvdXNlcm5hbWUtaGlzdG9yeSc7XG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIHN0b3JlLmFkZFJlZHVjZXIoJ3VzZXJuYW1lLWhpc3RvcnknLCByZWR1Y2VyLCBbXSk7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdyZWR1Y2VyOnVzZXJuYW1lLWhpc3RvcnknLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGJlZm9yZTogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgcmVkdWNlciBmcm9tICdtaXNhZ28vcmVkdWNlcnMvdXNlcnMnO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBzdG9yZS5hZGRSZWR1Y2VyKCd1c2VycycsIHJlZHVjZXIsIFtdKTtcbn1cblxubWlzYWdvLmFkZEluaXRpYWxpemVyKHtcbiAgbmFtZTogJ3JlZHVjZXI6dXNlcnMnLFxuICBpbml0aWFsaXplcjogaW5pdGlhbGl6ZXIsXG4gIGJlZm9yZTogJ3N0b3JlJ1xufSk7XG4iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgc25hY2tiYXIuaW5pdChzdG9yZSk7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdzbmFja2JhcicsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYWZ0ZXI6ICdzdG9yZSdcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGluaXRpYWxpemVyKCkge1xuICBzdG9yZS5pbml0KCk7XG59XG5cbm1pc2Fnby5hZGRJbml0aWFsaXplcih7XG4gIG5hbWU6ICdzdG9yZScsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYmVmb3JlOiAnX2VuZCdcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHsgZG9UaWNrIH0gZnJvbSAnbWlzYWdvL3JlZHVjZXJzL3RpY2snO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7XG5cbmNvbnN0IFRJQ0tfUEVSSU9EID0gNTAgKiAxMDAwOyAvL2RvIHRoZSB0aWNrIGV2ZXJ5IDUwc1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpbml0aWFsaXplcigpIHtcbiAgd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCkge1xuICAgIHN0b3JlLmRpc3BhdGNoKGRvVGljaygpKTtcbiAgfSwgVElDS19QRVJJT0QpO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAndGljay1zdGFydCcsXG4gIGluaXRpYWxpemVyOiBpbml0aWFsaXplcixcbiAgYWZ0ZXI6ICdzdG9yZSdcbn0pO1xuIiwiaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IGluY2x1ZGUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2luY2x1ZGUnO1xuaW1wb3J0IHp4Y3ZibiBmcm9tICdtaXNhZ28vc2VydmljZXMvenhjdmJuJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaW5pdGlhbGl6ZXIoKSB7XG4gIHp4Y3Zibi5pbml0KGluY2x1ZGUpO1xufVxuXG5taXNhZ28uYWRkSW5pdGlhbGl6ZXIoe1xuICBuYW1lOiAnenhjdmJuJyxcbiAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyXG59KTtcbiIsInZhciBwU2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4vbGliL2tleXMuanMnKTtcbnZhciBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vbGliL2lzX2FyZ3VtZW50cy5qcycpO1xuXG52YXIgZGVlcEVxdWFsID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYWN0dWFsLCBleHBlY3RlZCwgb3B0cykge1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcbiAgLy8gNy4xLiBBbGwgaWRlbnRpY2FsIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfSBlbHNlIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBEYXRlICYmIGV4cGVjdGVkIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBhY3R1YWwuZ2V0VGltZSgpID09PSBleHBlY3RlZC5nZXRUaW1lKCk7XG5cbiAgLy8gNy4zLiBPdGhlciBwYWlycyB0aGF0IGRvIG5vdCBib3RoIHBhc3MgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnLFxuICAvLyBlcXVpdmFsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5ID09LlxuICB9IGVsc2UgaWYgKCFhY3R1YWwgfHwgIWV4cGVjdGVkIHx8IHR5cGVvZiBhY3R1YWwgIT0gJ29iamVjdCcgJiYgdHlwZW9mIGV4cGVjdGVkICE9ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG9wdHMuc3RyaWN0ID8gYWN0dWFsID09PSBleHBlY3RlZCA6IGFjdHVhbCA9PSBleHBlY3RlZDtcblxuICAvLyA3LjQuIEZvciBhbGwgb3RoZXIgT2JqZWN0IHBhaXJzLCBpbmNsdWRpbmcgQXJyYXkgb2JqZWN0cywgZXF1aXZhbGVuY2UgaXNcbiAgLy8gZGV0ZXJtaW5lZCBieSBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGFzIHZlcmlmaWVkXG4gIC8vIHdpdGggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKSwgdGhlIHNhbWUgc2V0IG9mIGtleXNcbiAgLy8gKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksIGVxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeVxuICAvLyBjb3JyZXNwb25kaW5nIGtleSwgYW5kIGFuIGlkZW50aWNhbCAncHJvdG90eXBlJyBwcm9wZXJ0eS4gTm90ZTogdGhpc1xuICAvLyBhY2NvdW50cyBmb3IgYm90aCBuYW1lZCBhbmQgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIEFycmF5cy5cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCwgb3B0cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWRPck51bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyICh4KSB7XG4gIGlmICgheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHgubGVuZ3RoICE9PSAnbnVtYmVyJykgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIHguY29weSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgeC5zbGljZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoeC5sZW5ndGggPiAwICYmIHR5cGVvZiB4WzBdICE9PSAnbnVtYmVyJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYiwgb3B0cykge1xuICB2YXIgaSwga2V5O1xuICBpZiAoaXNVbmRlZmluZWRPck51bGwoYSkgfHwgaXNVbmRlZmluZWRPck51bGwoYikpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvLyBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuXG4gIGlmIChhLnByb3RvdHlwZSAhPT0gYi5wcm90b3R5cGUpIHJldHVybiBmYWxzZTtcbiAgLy9+fn5JJ3ZlIG1hbmFnZWQgdG8gYnJlYWsgT2JqZWN0LmtleXMgdGhyb3VnaCBzY3Jld3kgYXJndW1lbnRzIHBhc3NpbmcuXG4gIC8vICAgQ29udmVydGluZyB0byBhcnJheSBzb2x2ZXMgdGhlIHByb2JsZW0uXG4gIGlmIChpc0FyZ3VtZW50cyhhKSkge1xuICAgIGlmICghaXNBcmd1bWVudHMoYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgYSA9IHBTbGljZS5jYWxsKGEpO1xuICAgIGIgPSBwU2xpY2UuY2FsbChiKTtcbiAgICByZXR1cm4gZGVlcEVxdWFsKGEsIGIsIG9wdHMpO1xuICB9XG4gIGlmIChpc0J1ZmZlcihhKSkge1xuICAgIGlmICghaXNCdWZmZXIoYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYVtpXSAhPT0gYltpXSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB0cnkge1xuICAgIHZhciBrYSA9IG9iamVjdEtleXMoYSksXG4gICAgICAgIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgfSBjYXRjaCAoZSkgey8vaGFwcGVucyB3aGVuIG9uZSBpcyBhIHN0cmluZyBsaXRlcmFsIGFuZCB0aGUgb3RoZXIgaXNuJ3RcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPSBrYi5sZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvL3RoZSBzYW1lIHNldCBvZiBrZXlzIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLFxuICBrYS5zb3J0KCk7XG4gIGtiLnNvcnQoKTtcbiAgLy9+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPSBrYltpXSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvL2VxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeSBjb3JyZXNwb25kaW5nIGtleSwgYW5kXG4gIC8vfn5+cG9zc2libHkgZXhwZW5zaXZlIGRlZXAgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGtleSA9IGthW2ldO1xuICAgIGlmICghZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBvcHRzKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGI7XG59XG4iLCJ2YXIgc3VwcG9ydHNBcmd1bWVudHNDbGFzcyA9IChmdW5jdGlvbigpe1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50cylcbn0pKCkgPT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHN1cHBvcnRzQXJndW1lbnRzQ2xhc3MgPyBzdXBwb3J0ZWQgOiB1bnN1cHBvcnRlZDtcblxuZXhwb3J0cy5zdXBwb3J0ZWQgPSBzdXBwb3J0ZWQ7XG5mdW5jdGlvbiBzdXBwb3J0ZWQob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn07XG5cbmV4cG9ydHMudW5zdXBwb3J0ZWQgPSB1bnN1cHBvcnRlZDtcbmZ1bmN0aW9uIHVuc3VwcG9ydGVkKG9iamVjdCl7XG4gIHJldHVybiBvYmplY3QgJiZcbiAgICB0eXBlb2Ygb2JqZWN0ID09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9iamVjdC5sZW5ndGggPT0gJ251bWJlcicgJiZcbiAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnY2FsbGVlJykgJiZcbiAgICAhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgJ2NhbGxlZScpIHx8XG4gICAgZmFsc2U7XG59O1xuIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIE9iamVjdC5rZXlzID09PSAnZnVuY3Rpb24nXG4gID8gT2JqZWN0LmtleXMgOiBzaGltO1xuXG5leHBvcnRzLnNoaW0gPSBzaGltO1xuZnVuY3Rpb24gc2hpbSAob2JqKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xuICByZXR1cm4ga2V5cztcbn1cbiIsIi8qKlxuICogSW5kaWNhdGVzIHRoYXQgbmF2aWdhdGlvbiB3YXMgY2F1c2VkIGJ5IGEgY2FsbCB0byBoaXN0b3J5LnB1c2guXG4gKi9cbid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBQVVNIID0gJ1BVU0gnO1xuXG5leHBvcnRzLlBVU0ggPSBQVVNIO1xuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCBuYXZpZ2F0aW9uIHdhcyBjYXVzZWQgYnkgYSBjYWxsIHRvIGhpc3RvcnkucmVwbGFjZS5cbiAqL1xudmFyIFJFUExBQ0UgPSAnUkVQTEFDRSc7XG5cbmV4cG9ydHMuUkVQTEFDRSA9IFJFUExBQ0U7XG4vKipcbiAqIEluZGljYXRlcyB0aGF0IG5hdmlnYXRpb24gd2FzIGNhdXNlZCBieSBzb21lIG90aGVyIGFjdGlvbiBzdWNoXG4gKiBhcyB1c2luZyBhIGJyb3dzZXIncyBiYWNrL2ZvcndhcmQgYnV0dG9ucyBhbmQvb3IgbWFudWFsbHkgbWFuaXB1bGF0aW5nXG4gKiB0aGUgVVJMIGluIGEgYnJvd3NlcidzIGxvY2F0aW9uIGJhci4gVGhpcyBpcyB0aGUgZGVmYXVsdC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvd0V2ZW50SGFuZGxlcnMvb25wb3BzdGF0ZVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKi9cbnZhciBQT1AgPSAnUE9QJztcblxuZXhwb3J0cy5QT1AgPSBQT1A7XG5leHBvcnRzWydkZWZhdWx0J10gPSB7XG4gIFBVU0g6IFBVU0gsXG4gIFJFUExBQ0U6IFJFUExBQ0UsXG4gIFBPUDogUE9QXG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5sb29wQXN5bmMgPSBsb29wQXN5bmM7XG5cbmZ1bmN0aW9uIGxvb3BBc3luYyh0dXJucywgd29yaywgY2FsbGJhY2spIHtcbiAgdmFyIGN1cnJlbnRUdXJuID0gMDtcbiAgdmFyIGlzRG9uZSA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgaXNEb25lID0gdHJ1ZTtcbiAgICBjYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICBpZiAoaXNEb25lKSByZXR1cm47XG5cbiAgICBpZiAoY3VycmVudFR1cm4gPCB0dXJucykge1xuICAgICAgd29yay5jYWxsKHRoaXMsIGN1cnJlbnRUdXJuKyssIG5leHQsIGRvbmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb25lLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG5cbiAgbmV4dCgpO1xufSIsIi8qZXNsaW50LWRpc2FibGUgbm8tZW1wdHkgKi9cbid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuc2F2ZVN0YXRlID0gc2F2ZVN0YXRlO1xuZXhwb3J0cy5yZWFkU3RhdGUgPSByZWFkU3RhdGU7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF93YXJuaW5nID0gcmVxdWlyZSgnd2FybmluZycpO1xuXG52YXIgX3dhcm5pbmcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfd2FybmluZyk7XG5cbnZhciBLZXlQcmVmaXggPSAnQEBIaXN0b3J5Lyc7XG52YXIgUXVvdGFFeGNlZWRlZEVycm9yID0gJ1F1b3RhRXhjZWVkZWRFcnJvcic7XG52YXIgU2VjdXJpdHlFcnJvciA9ICdTZWN1cml0eUVycm9yJztcblxuZnVuY3Rpb24gY3JlYXRlS2V5KGtleSkge1xuICByZXR1cm4gS2V5UHJlZml4ICsga2V5O1xufVxuXG5mdW5jdGlvbiBzYXZlU3RhdGUoa2V5LCBzdGF0ZSkge1xuICB0cnkge1xuICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGNyZWF0ZUtleShrZXkpLCBKU09OLnN0cmluZ2lmeShzdGF0ZSkpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvci5uYW1lID09PSBTZWN1cml0eUVycm9yKSB7XG4gICAgICAvLyBCbG9ja2luZyBjb29raWVzIGluIENocm9tZS9GaXJlZm94L1NhZmFyaSB0aHJvd3MgU2VjdXJpdHlFcnJvciBvbiBhbnlcbiAgICAgIC8vIGF0dGVtcHQgdG8gYWNjZXNzIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5cbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBfd2FybmluZzJbJ2RlZmF1bHQnXShmYWxzZSwgJ1toaXN0b3J5XSBVbmFibGUgdG8gc2F2ZSBzdGF0ZTsgc2Vzc2lvblN0b3JhZ2UgaXMgbm90IGF2YWlsYWJsZSBkdWUgdG8gc2VjdXJpdHkgc2V0dGluZ3MnKSA6IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlcnJvci5uYW1lID09PSBRdW90YUV4Y2VlZGVkRXJyb3IgJiYgd2luZG93LnNlc3Npb25TdG9yYWdlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gU2FmYXJpIFwicHJpdmF0ZSBtb2RlXCIgdGhyb3dzIFF1b3RhRXhjZWVkZWRFcnJvci5cbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBfd2FybmluZzJbJ2RlZmF1bHQnXShmYWxzZSwgJ1toaXN0b3J5XSBVbmFibGUgdG8gc2F2ZSBzdGF0ZTsgc2Vzc2lvblN0b3JhZ2UgaXMgbm90IGF2YWlsYWJsZSBpbiBTYWZhcmkgcHJpdmF0ZSBtb2RlJykgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkU3RhdGUoa2V5KSB7XG4gIHZhciBqc29uID0gdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIGpzb24gPSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShjcmVhdGVLZXkoa2V5KSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yLm5hbWUgPT09IFNlY3VyaXR5RXJyb3IpIHtcbiAgICAgIC8vIEJsb2NraW5nIGNvb2tpZXMgaW4gQ2hyb21lL0ZpcmVmb3gvU2FmYXJpIHRocm93cyBTZWN1cml0eUVycm9yIG9uIGFueVxuICAgICAgLy8gYXR0ZW1wdCB0byBhY2Nlc3Mgd2luZG93LnNlc3Npb25TdG9yYWdlLlxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IF93YXJuaW5nMlsnZGVmYXVsdCddKGZhbHNlLCAnW2hpc3RvcnldIFVuYWJsZSB0byByZWFkIHN0YXRlOyBzZXNzaW9uU3RvcmFnZSBpcyBub3QgYXZhaWxhYmxlIGR1ZSB0byBzZWN1cml0eSBzZXR0aW5ncycpIDogdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBpZiAoanNvbikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSWdub3JlIGludmFsaWQgSlNPTi5cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn0iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmFkZEV2ZW50TGlzdGVuZXIgPSBhZGRFdmVudExpc3RlbmVyO1xuZXhwb3J0cy5yZW1vdmVFdmVudExpc3RlbmVyID0gcmVtb3ZlRXZlbnRMaXN0ZW5lcjtcbmV4cG9ydHMuZ2V0SGFzaFBhdGggPSBnZXRIYXNoUGF0aDtcbmV4cG9ydHMucmVwbGFjZUhhc2hQYXRoID0gcmVwbGFjZUhhc2hQYXRoO1xuZXhwb3J0cy5nZXRXaW5kb3dQYXRoID0gZ2V0V2luZG93UGF0aDtcbmV4cG9ydHMuZ28gPSBnbztcbmV4cG9ydHMuZ2V0VXNlckNvbmZpcm1hdGlvbiA9IGdldFVzZXJDb25maXJtYXRpb247XG5leHBvcnRzLnN1cHBvcnRzSGlzdG9yeSA9IHN1cHBvcnRzSGlzdG9yeTtcbmV4cG9ydHMuc3VwcG9ydHNHb1dpdGhvdXRSZWxvYWRVc2luZ0hhc2ggPSBzdXBwb3J0c0dvV2l0aG91dFJlbG9hZFVzaW5nSGFzaDtcblxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcihub2RlLCBldmVudCwgbGlzdGVuZXIpIHtcbiAgaWYgKG5vZGUuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICBub2RlLmF0dGFjaEV2ZW50KCdvbicgKyBldmVudCwgbGlzdGVuZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIobm9kZSwgZXZlbnQsIGxpc3RlbmVyKSB7XG4gIGlmIChub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIpIHtcbiAgICBub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIH0gZWxzZSB7XG4gICAgbm9kZS5kZXRhY2hFdmVudCgnb24nICsgZXZlbnQsIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRIYXNoUGF0aCgpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHdpbmRvdy5sb2NhdGlvbi5oYXNoIGhlcmUgYmVjYXVzZSBpdCdzIG5vdFxuICAvLyBjb25zaXN0ZW50IGFjcm9zcyBicm93c2VycyAtIEZpcmVmb3ggd2lsbCBwcmUtZGVjb2RlIGl0IVxuICByZXR1cm4gd2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoJyMnKVsxXSB8fCAnJztcbn1cblxuZnVuY3Rpb24gcmVwbGFjZUhhc2hQYXRoKHBhdGgpIHtcbiAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2Uod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaCArICcjJyArIHBhdGgpO1xufVxuXG5mdW5jdGlvbiBnZXRXaW5kb3dQYXRoKCkge1xuICByZXR1cm4gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lICsgd2luZG93LmxvY2F0aW9uLnNlYXJjaCArIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xufVxuXG5mdW5jdGlvbiBnbyhuKSB7XG4gIGlmIChuKSB3aW5kb3cuaGlzdG9yeS5nbyhuKTtcbn1cblxuZnVuY3Rpb24gZ2V0VXNlckNvbmZpcm1hdGlvbihtZXNzYWdlLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayh3aW5kb3cuY29uZmlybShtZXNzYWdlKSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBIVE1MNSBoaXN0b3J5IEFQSSBpcyBzdXBwb3J0ZWQuIFRha2VuIGZyb20gTW9kZXJuaXpyLlxuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9Nb2Rlcm5penIvTW9kZXJuaXpyL2Jsb2IvbWFzdGVyL2ZlYXR1cmUtZGV0ZWN0cy9oaXN0b3J5LmpzXG4gKiBjaGFuZ2VkIHRvIGF2b2lkIGZhbHNlIG5lZ2F0aXZlcyBmb3IgV2luZG93cyBQaG9uZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS9yYWNrdC9yZWFjdC1yb3V0ZXIvaXNzdWVzLzU4NlxuICovXG5cbmZ1bmN0aW9uIHN1cHBvcnRzSGlzdG9yeSgpIHtcbiAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgaWYgKCh1YS5pbmRleE9mKCdBbmRyb2lkIDIuJykgIT09IC0xIHx8IHVhLmluZGV4T2YoJ0FuZHJvaWQgNC4wJykgIT09IC0xKSAmJiB1YS5pbmRleE9mKCdNb2JpbGUgU2FmYXJpJykgIT09IC0xICYmIHVhLmluZGV4T2YoJ0Nocm9tZScpID09PSAtMSAmJiB1YS5pbmRleE9mKCdXaW5kb3dzIFBob25lJykgPT09IC0xKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIEZJWE1FOiBXb3JrIGFyb3VuZCBvdXIgYnJvd3NlciBoaXN0b3J5IG5vdCB3b3JraW5nIGNvcnJlY3RseSBvbiBDaHJvbWVcbiAgLy8gaU9TOiBodHRwczovL2dpdGh1Yi5jb20vcmFja3QvcmVhY3Qtcm91dGVyL2lzc3Vlcy8yNTY1XG4gIGlmICh1YS5pbmRleE9mKCdDcmlPUycpICE9PSAtMSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gd2luZG93Lmhpc3RvcnkgJiYgJ3B1c2hTdGF0ZScgaW4gd2luZG93Lmhpc3Rvcnk7XG59XG5cbi8qKlxuICogUmV0dXJucyBmYWxzZSBpZiB1c2luZyBnbyhuKSB3aXRoIGhhc2ggaGlzdG9yeSBjYXVzZXMgYSBmdWxsIHBhZ2UgcmVsb2FkLlxuICovXG5cbmZ1bmN0aW9uIHN1cHBvcnRzR29XaXRob3V0UmVsb2FkVXNpbmdIYXNoKCkge1xuICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICByZXR1cm4gdWEuaW5kZXhPZignRmlyZWZveCcpID09PSAtMTtcbn0iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbmV4cG9ydHMuY2FuVXNlRE9NID0gY2FuVXNlRE9NOyIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG52YXIgX2ludmFyaWFudCA9IHJlcXVpcmUoJ2ludmFyaWFudCcpO1xuXG52YXIgX2ludmFyaWFudDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbnZhcmlhbnQpO1xuXG52YXIgX0FjdGlvbnMgPSByZXF1aXJlKCcuL0FjdGlvbnMnKTtcblxudmFyIF9FeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJy4vRXhlY3V0aW9uRW52aXJvbm1lbnQnKTtcblxudmFyIF9ET01VdGlscyA9IHJlcXVpcmUoJy4vRE9NVXRpbHMnKTtcblxudmFyIF9ET01TdGF0ZVN0b3JhZ2UgPSByZXF1aXJlKCcuL0RPTVN0YXRlU3RvcmFnZScpO1xuXG52YXIgX2NyZWF0ZURPTUhpc3RvcnkgPSByZXF1aXJlKCcuL2NyZWF0ZURPTUhpc3RvcnknKTtcblxudmFyIF9jcmVhdGVET01IaXN0b3J5MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZURPTUhpc3RvcnkpO1xuXG52YXIgX3BhcnNlUGF0aCA9IHJlcXVpcmUoJy4vcGFyc2VQYXRoJyk7XG5cbnZhciBfcGFyc2VQYXRoMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BhcnNlUGF0aCk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbmQgcmV0dXJucyBhIGhpc3Rvcnkgb2JqZWN0IHRoYXQgdXNlcyBIVE1MNSdzIGhpc3RvcnkgQVBJXG4gKiAocHVzaFN0YXRlLCByZXBsYWNlU3RhdGUsIGFuZCB0aGUgcG9wc3RhdGUgZXZlbnQpIHRvIG1hbmFnZSBoaXN0b3J5LlxuICogVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgbWV0aG9kIG9mIG1hbmFnaW5nIGhpc3RvcnkgaW4gYnJvd3NlcnMgYmVjYXVzZVxuICogaXQgcHJvdmlkZXMgdGhlIGNsZWFuZXN0IFVSTHMuXG4gKlxuICogTm90ZTogSW4gYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCB0aGUgSFRNTDUgaGlzdG9yeSBBUEkgZnVsbFxuICogcGFnZSByZWxvYWRzIHdpbGwgYmUgdXNlZCB0byBwcmVzZXJ2ZSBVUkxzLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCcm93c2VySGlzdG9yeSgpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1swXTtcblxuICAhX0V4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBfaW52YXJpYW50MlsnZGVmYXVsdCddKGZhbHNlLCAnQnJvd3NlciBoaXN0b3J5IG5lZWRzIGEgRE9NJykgOiBfaW52YXJpYW50MlsnZGVmYXVsdCddKGZhbHNlKSA6IHVuZGVmaW5lZDtcblxuICB2YXIgZm9yY2VSZWZyZXNoID0gb3B0aW9ucy5mb3JjZVJlZnJlc2g7XG5cbiAgdmFyIGlzU3VwcG9ydGVkID0gX0RPTVV0aWxzLnN1cHBvcnRzSGlzdG9yeSgpO1xuICB2YXIgdXNlUmVmcmVzaCA9ICFpc1N1cHBvcnRlZCB8fCBmb3JjZVJlZnJlc2g7XG5cbiAgZnVuY3Rpb24gZ2V0Q3VycmVudExvY2F0aW9uKGhpc3RvcnlTdGF0ZSkge1xuICAgIGhpc3RvcnlTdGF0ZSA9IGhpc3RvcnlTdGF0ZSB8fCB3aW5kb3cuaGlzdG9yeS5zdGF0ZSB8fCB7fTtcblxuICAgIHZhciBwYXRoID0gX0RPTVV0aWxzLmdldFdpbmRvd1BhdGgoKTtcbiAgICB2YXIgX2hpc3RvcnlTdGF0ZSA9IGhpc3RvcnlTdGF0ZTtcbiAgICB2YXIga2V5ID0gX2hpc3RvcnlTdGF0ZS5rZXk7XG5cbiAgICB2YXIgc3RhdGUgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGtleSkge1xuICAgICAgc3RhdGUgPSBfRE9NU3RhdGVTdG9yYWdlLnJlYWRTdGF0ZShrZXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZSA9IG51bGw7XG4gICAgICBrZXkgPSBoaXN0b3J5LmNyZWF0ZUtleSgpO1xuXG4gICAgICBpZiAoaXNTdXBwb3J0ZWQpIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZShfZXh0ZW5kcyh7fSwgaGlzdG9yeVN0YXRlLCB7IGtleToga2V5IH0pLCBudWxsLCBwYXRoKTtcbiAgICB9XG5cbiAgICB2YXIgbG9jYXRpb24gPSBfcGFyc2VQYXRoMlsnZGVmYXVsdCddKHBhdGgpO1xuXG4gICAgcmV0dXJuIGhpc3RvcnkuY3JlYXRlTG9jYXRpb24oX2V4dGVuZHMoe30sIGxvY2F0aW9uLCB7IHN0YXRlOiBzdGF0ZSB9KSwgdW5kZWZpbmVkLCBrZXkpO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnRQb3BTdGF0ZUxpc3RlbmVyKF9yZWYpIHtcbiAgICB2YXIgdHJhbnNpdGlvblRvID0gX3JlZi50cmFuc2l0aW9uVG87XG5cbiAgICBmdW5jdGlvbiBwb3BTdGF0ZUxpc3RlbmVyKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQuc3RhdGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuOyAvLyBJZ25vcmUgZXh0cmFuZW91cyBwb3BzdGF0ZSBldmVudHMgaW4gV2ViS2l0LlxuXG4gICAgICB0cmFuc2l0aW9uVG8oZ2V0Q3VycmVudExvY2F0aW9uKGV2ZW50LnN0YXRlKSk7XG4gICAgfVxuXG4gICAgX0RPTVV0aWxzLmFkZEV2ZW50TGlzdGVuZXIod2luZG93LCAncG9wc3RhdGUnLCBwb3BTdGF0ZUxpc3RlbmVyKTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBfRE9NVXRpbHMucmVtb3ZlRXZlbnRMaXN0ZW5lcih3aW5kb3csICdwb3BzdGF0ZScsIHBvcFN0YXRlTGlzdGVuZXIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBmaW5pc2hUcmFuc2l0aW9uKGxvY2F0aW9uKSB7XG4gICAgdmFyIGJhc2VuYW1lID0gbG9jYXRpb24uYmFzZW5hbWU7XG4gICAgdmFyIHBhdGhuYW1lID0gbG9jYXRpb24ucGF0aG5hbWU7XG4gICAgdmFyIHNlYXJjaCA9IGxvY2F0aW9uLnNlYXJjaDtcbiAgICB2YXIgaGFzaCA9IGxvY2F0aW9uLmhhc2g7XG4gICAgdmFyIHN0YXRlID0gbG9jYXRpb24uc3RhdGU7XG4gICAgdmFyIGFjdGlvbiA9IGxvY2F0aW9uLmFjdGlvbjtcbiAgICB2YXIga2V5ID0gbG9jYXRpb24ua2V5O1xuXG4gICAgaWYgKGFjdGlvbiA9PT0gX0FjdGlvbnMuUE9QKSByZXR1cm47IC8vIE5vdGhpbmcgdG8gZG8uXG5cbiAgICBfRE9NU3RhdGVTdG9yYWdlLnNhdmVTdGF0ZShrZXksIHN0YXRlKTtcblxuICAgIHZhciBwYXRoID0gKGJhc2VuYW1lIHx8ICcnKSArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbiAgICB2YXIgaGlzdG9yeVN0YXRlID0ge1xuICAgICAga2V5OiBrZXlcbiAgICB9O1xuXG4gICAgaWYgKGFjdGlvbiA9PT0gX0FjdGlvbnMuUFVTSCkge1xuICAgICAgaWYgKHVzZVJlZnJlc2gpIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBwYXRoO1xuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFByZXZlbnQgbG9jYXRpb24gdXBkYXRlLlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoaGlzdG9yeVN0YXRlLCBudWxsLCBwYXRoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSRVBMQUNFXG4gICAgICBpZiAodXNlUmVmcmVzaCkge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShwYXRoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBQcmV2ZW50IGxvY2F0aW9uIHVwZGF0ZS5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKGhpc3RvcnlTdGF0ZSwgbnVsbCwgcGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgaGlzdG9yeSA9IF9jcmVhdGVET01IaXN0b3J5MlsnZGVmYXVsdCddKF9leHRlbmRzKHt9LCBvcHRpb25zLCB7XG4gICAgZ2V0Q3VycmVudExvY2F0aW9uOiBnZXRDdXJyZW50TG9jYXRpb24sXG4gICAgZmluaXNoVHJhbnNpdGlvbjogZmluaXNoVHJhbnNpdGlvbixcbiAgICBzYXZlU3RhdGU6IF9ET01TdGF0ZVN0b3JhZ2Uuc2F2ZVN0YXRlXG4gIH0pKTtcblxuICB2YXIgbGlzdGVuZXJDb3VudCA9IDAsXG4gICAgICBzdG9wUG9wU3RhdGVMaXN0ZW5lciA9IHVuZGVmaW5lZDtcblxuICBmdW5jdGlvbiBsaXN0ZW5CZWZvcmUobGlzdGVuZXIpIHtcbiAgICBpZiAoKytsaXN0ZW5lckNvdW50ID09PSAxKSBzdG9wUG9wU3RhdGVMaXN0ZW5lciA9IHN0YXJ0UG9wU3RhdGVMaXN0ZW5lcihoaXN0b3J5KTtcblxuICAgIHZhciB1bmxpc3RlbiA9IGhpc3RvcnkubGlzdGVuQmVmb3JlKGxpc3RlbmVyKTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB1bmxpc3RlbigpO1xuXG4gICAgICBpZiAoLS1saXN0ZW5lckNvdW50ID09PSAwKSBzdG9wUG9wU3RhdGVMaXN0ZW5lcigpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBsaXN0ZW4obGlzdGVuZXIpIHtcbiAgICBpZiAoKytsaXN0ZW5lckNvdW50ID09PSAxKSBzdG9wUG9wU3RhdGVMaXN0ZW5lciA9IHN0YXJ0UG9wU3RhdGVMaXN0ZW5lcihoaXN0b3J5KTtcblxuICAgIHZhciB1bmxpc3RlbiA9IGhpc3RvcnkubGlzdGVuKGxpc3RlbmVyKTtcblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB1bmxpc3RlbigpO1xuXG4gICAgICBpZiAoLS1saXN0ZW5lckNvdW50ID09PSAwKSBzdG9wUG9wU3RhdGVMaXN0ZW5lcigpO1xuICAgIH07XG4gIH1cblxuICAvLyBkZXByZWNhdGVkXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyVHJhbnNpdGlvbkhvb2soaG9vaykge1xuICAgIGlmICgrK2xpc3RlbmVyQ291bnQgPT09IDEpIHN0b3BQb3BTdGF0ZUxpc3RlbmVyID0gc3RhcnRQb3BTdGF0ZUxpc3RlbmVyKGhpc3RvcnkpO1xuXG4gICAgaGlzdG9yeS5yZWdpc3RlclRyYW5zaXRpb25Ib29rKGhvb2spO1xuICB9XG5cbiAgLy8gZGVwcmVjYXRlZFxuICBmdW5jdGlvbiB1bnJlZ2lzdGVyVHJhbnNpdGlvbkhvb2soaG9vaykge1xuICAgIGhpc3RvcnkudW5yZWdpc3RlclRyYW5zaXRpb25Ib29rKGhvb2spO1xuXG4gICAgaWYgKC0tbGlzdGVuZXJDb3VudCA9PT0gMCkgc3RvcFBvcFN0YXRlTGlzdGVuZXIoKTtcbiAgfVxuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgaGlzdG9yeSwge1xuICAgIGxpc3RlbkJlZm9yZTogbGlzdGVuQmVmb3JlLFxuICAgIGxpc3RlbjogbGlzdGVuLFxuICAgIHJlZ2lzdGVyVHJhbnNpdGlvbkhvb2s6IHJlZ2lzdGVyVHJhbnNpdGlvbkhvb2ssXG4gICAgdW5yZWdpc3RlclRyYW5zaXRpb25Ib29rOiB1bnJlZ2lzdGVyVHJhbnNpdGlvbkhvb2tcbiAgfSk7XG59XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGNyZWF0ZUJyb3dzZXJIaXN0b3J5O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbnZhciBfaW52YXJpYW50ID0gcmVxdWlyZSgnaW52YXJpYW50Jyk7XG5cbnZhciBfaW52YXJpYW50MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2ludmFyaWFudCk7XG5cbnZhciBfRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKCcuL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG5cbnZhciBfRE9NVXRpbHMgPSByZXF1aXJlKCcuL0RPTVV0aWxzJyk7XG5cbnZhciBfY3JlYXRlSGlzdG9yeSA9IHJlcXVpcmUoJy4vY3JlYXRlSGlzdG9yeScpO1xuXG52YXIgX2NyZWF0ZUhpc3RvcnkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlSGlzdG9yeSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZURPTUhpc3Rvcnkob3B0aW9ucykge1xuICB2YXIgaGlzdG9yeSA9IF9jcmVhdGVIaXN0b3J5MlsnZGVmYXVsdCddKF9leHRlbmRzKHtcbiAgICBnZXRVc2VyQ29uZmlybWF0aW9uOiBfRE9NVXRpbHMuZ2V0VXNlckNvbmZpcm1hdGlvblxuICB9LCBvcHRpb25zLCB7XG4gICAgZ286IF9ET01VdGlscy5nb1xuICB9KSk7XG5cbiAgZnVuY3Rpb24gbGlzdGVuKGxpc3RlbmVyKSB7XG4gICAgIV9FeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gX2ludmFyaWFudDJbJ2RlZmF1bHQnXShmYWxzZSwgJ0RPTSBoaXN0b3J5IG5lZWRzIGEgRE9NJykgOiBfaW52YXJpYW50MlsnZGVmYXVsdCddKGZhbHNlKSA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBoaXN0b3J5Lmxpc3RlbihsaXN0ZW5lcik7XG4gIH1cblxuICByZXR1cm4gX2V4dGVuZHMoe30sIGhpc3RvcnksIHtcbiAgICBsaXN0ZW46IGxpc3RlblxuICB9KTtcbn1cblxuZXhwb3J0c1snZGVmYXVsdCddID0gY3JlYXRlRE9NSGlzdG9yeTtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIi8vaW1wb3J0IHdhcm5pbmcgZnJvbSAnd2FybmluZydcbid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG52YXIgX2RlZXBFcXVhbCA9IHJlcXVpcmUoJ2RlZXAtZXF1YWwnKTtcblxudmFyIF9kZWVwRXF1YWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVlcEVxdWFsKTtcblxudmFyIF9Bc3luY1V0aWxzID0gcmVxdWlyZSgnLi9Bc3luY1V0aWxzJyk7XG5cbnZhciBfQWN0aW9ucyA9IHJlcXVpcmUoJy4vQWN0aW9ucycpO1xuXG52YXIgX2NyZWF0ZUxvY2F0aW9uMiA9IHJlcXVpcmUoJy4vY3JlYXRlTG9jYXRpb24nKTtcblxudmFyIF9jcmVhdGVMb2NhdGlvbjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVMb2NhdGlvbjIpO1xuXG52YXIgX3J1blRyYW5zaXRpb25Ib29rID0gcmVxdWlyZSgnLi9ydW5UcmFuc2l0aW9uSG9vaycpO1xuXG52YXIgX3J1blRyYW5zaXRpb25Ib29rMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3J1blRyYW5zaXRpb25Ib29rKTtcblxudmFyIF9wYXJzZVBhdGggPSByZXF1aXJlKCcuL3BhcnNlUGF0aCcpO1xuXG52YXIgX3BhcnNlUGF0aDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wYXJzZVBhdGgpO1xuXG52YXIgX2RlcHJlY2F0ZSA9IHJlcXVpcmUoJy4vZGVwcmVjYXRlJyk7XG5cbnZhciBfZGVwcmVjYXRlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlcHJlY2F0ZSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZVJhbmRvbUtleShsZW5ndGgpIHtcbiAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLCBsZW5ndGgpO1xufVxuXG5mdW5jdGlvbiBsb2NhdGlvbnNBcmVFcXVhbChhLCBiKSB7XG4gIHJldHVybiBhLnBhdGhuYW1lID09PSBiLnBhdGhuYW1lICYmIGEuc2VhcmNoID09PSBiLnNlYXJjaCAmJlxuICAvL2EuYWN0aW9uID09PSBiLmFjdGlvbiAmJiAvLyBEaWZmZXJlbnQgYWN0aW9uICE9PSBsb2NhdGlvbiBjaGFuZ2UuXG4gIGEua2V5ID09PSBiLmtleSAmJiBfZGVlcEVxdWFsMlsnZGVmYXVsdCddKGEuc3RhdGUsIGIuc3RhdGUpO1xufVxuXG52YXIgRGVmYXVsdEtleUxlbmd0aCA9IDY7XG5cbmZ1bmN0aW9uIGNyZWF0ZUhpc3RvcnkoKSB7XG4gIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA8PSAwIHx8IGFyZ3VtZW50c1swXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMF07XG4gIHZhciBnZXRDdXJyZW50TG9jYXRpb24gPSBvcHRpb25zLmdldEN1cnJlbnRMb2NhdGlvbjtcbiAgdmFyIGZpbmlzaFRyYW5zaXRpb24gPSBvcHRpb25zLmZpbmlzaFRyYW5zaXRpb247XG4gIHZhciBzYXZlU3RhdGUgPSBvcHRpb25zLnNhdmVTdGF0ZTtcbiAgdmFyIGdvID0gb3B0aW9ucy5nbztcbiAgdmFyIGtleUxlbmd0aCA9IG9wdGlvbnMua2V5TGVuZ3RoO1xuICB2YXIgZ2V0VXNlckNvbmZpcm1hdGlvbiA9IG9wdGlvbnMuZ2V0VXNlckNvbmZpcm1hdGlvbjtcblxuICBpZiAodHlwZW9mIGtleUxlbmd0aCAhPT0gJ251bWJlcicpIGtleUxlbmd0aCA9IERlZmF1bHRLZXlMZW5ndGg7XG5cbiAgdmFyIHRyYW5zaXRpb25Ib29rcyA9IFtdO1xuXG4gIGZ1bmN0aW9uIGxpc3RlbkJlZm9yZShob29rKSB7XG4gICAgdHJhbnNpdGlvbkhvb2tzLnB1c2goaG9vayk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdHJhbnNpdGlvbkhvb2tzID0gdHJhbnNpdGlvbkhvb2tzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbSAhPT0gaG9vaztcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICB2YXIgYWxsS2V5cyA9IFtdO1xuICB2YXIgY2hhbmdlTGlzdGVuZXJzID0gW107XG4gIHZhciBsb2NhdGlvbiA9IHVuZGVmaW5lZDtcblxuICBmdW5jdGlvbiBnZXRDdXJyZW50KCkge1xuICAgIGlmIChwZW5kaW5nTG9jYXRpb24gJiYgcGVuZGluZ0xvY2F0aW9uLmFjdGlvbiA9PT0gX0FjdGlvbnMuUE9QKSB7XG4gICAgICByZXR1cm4gYWxsS2V5cy5pbmRleE9mKHBlbmRpbmdMb2NhdGlvbi5rZXkpO1xuICAgIH0gZWxzZSBpZiAobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBhbGxLZXlzLmluZGV4T2YobG9jYXRpb24ua2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUxvY2F0aW9uKG5ld0xvY2F0aW9uKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBnZXRDdXJyZW50KCk7XG5cbiAgICBsb2NhdGlvbiA9IG5ld0xvY2F0aW9uO1xuXG4gICAgaWYgKGxvY2F0aW9uLmFjdGlvbiA9PT0gX0FjdGlvbnMuUFVTSCkge1xuICAgICAgYWxsS2V5cyA9IFtdLmNvbmNhdChhbGxLZXlzLnNsaWNlKDAsIGN1cnJlbnQgKyAxKSwgW2xvY2F0aW9uLmtleV0pO1xuICAgIH0gZWxzZSBpZiAobG9jYXRpb24uYWN0aW9uID09PSBfQWN0aW9ucy5SRVBMQUNFKSB7XG4gICAgICBhbGxLZXlzW2N1cnJlbnRdID0gbG9jYXRpb24ua2V5O1xuICAgIH1cblxuICAgIGNoYW5nZUxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgbGlzdGVuZXIobG9jYXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gbGlzdGVuKGxpc3RlbmVyKSB7XG4gICAgY2hhbmdlTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgaWYgKGxvY2F0aW9uKSB7XG4gICAgICBsaXN0ZW5lcihsb2NhdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfbG9jYXRpb24gPSBnZXRDdXJyZW50TG9jYXRpb24oKTtcbiAgICAgIGFsbEtleXMgPSBbX2xvY2F0aW9uLmtleV07XG4gICAgICB1cGRhdGVMb2NhdGlvbihfbG9jYXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGFuZ2VMaXN0ZW5lcnMgPSBjaGFuZ2VMaXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtICE9PSBsaXN0ZW5lcjtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBjb25maXJtVHJhbnNpdGlvblRvKGxvY2F0aW9uLCBjYWxsYmFjaykge1xuICAgIF9Bc3luY1V0aWxzLmxvb3BBc3luYyh0cmFuc2l0aW9uSG9va3MubGVuZ3RoLCBmdW5jdGlvbiAoaW5kZXgsIG5leHQsIGRvbmUpIHtcbiAgICAgIF9ydW5UcmFuc2l0aW9uSG9vazJbJ2RlZmF1bHQnXSh0cmFuc2l0aW9uSG9va3NbaW5kZXhdLCBsb2NhdGlvbiwgZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICBkb25lKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbiAobWVzc2FnZSkge1xuICAgICAgaWYgKGdldFVzZXJDb25maXJtYXRpb24gJiYgdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGdldFVzZXJDb25maXJtYXRpb24obWVzc2FnZSwgZnVuY3Rpb24gKG9rKSB7XG4gICAgICAgICAgY2FsbGJhY2sob2sgIT09IGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhtZXNzYWdlICE9PSBmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB2YXIgcGVuZGluZ0xvY2F0aW9uID0gdW5kZWZpbmVkO1xuXG4gIGZ1bmN0aW9uIHRyYW5zaXRpb25UbyhuZXh0TG9jYXRpb24pIHtcbiAgICBpZiAobG9jYXRpb24gJiYgbG9jYXRpb25zQXJlRXF1YWwobG9jYXRpb24sIG5leHRMb2NhdGlvbikpIHJldHVybjsgLy8gTm90aGluZyB0byBkby5cblxuICAgIHBlbmRpbmdMb2NhdGlvbiA9IG5leHRMb2NhdGlvbjtcblxuICAgIGNvbmZpcm1UcmFuc2l0aW9uVG8obmV4dExvY2F0aW9uLCBmdW5jdGlvbiAob2spIHtcbiAgICAgIGlmIChwZW5kaW5nTG9jYXRpb24gIT09IG5leHRMb2NhdGlvbikgcmV0dXJuOyAvLyBUcmFuc2l0aW9uIHdhcyBpbnRlcnJ1cHRlZC5cblxuICAgICAgaWYgKG9rKSB7XG4gICAgICAgIC8vIHRyZWF0IFBVU0ggdG8gY3VycmVudCBwYXRoIGxpa2UgUkVQTEFDRSB0byBiZSBjb25zaXN0ZW50IHdpdGggYnJvd3NlcnNcbiAgICAgICAgaWYgKG5leHRMb2NhdGlvbi5hY3Rpb24gPT09IF9BY3Rpb25zLlBVU0gpIHtcbiAgICAgICAgICB2YXIgcHJldlBhdGggPSBjcmVhdGVQYXRoKGxvY2F0aW9uKTtcbiAgICAgICAgICB2YXIgbmV4dFBhdGggPSBjcmVhdGVQYXRoKG5leHRMb2NhdGlvbik7XG5cbiAgICAgICAgICBpZiAobmV4dFBhdGggPT09IHByZXZQYXRoKSBuZXh0TG9jYXRpb24uYWN0aW9uID0gX0FjdGlvbnMuUkVQTEFDRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaW5pc2hUcmFuc2l0aW9uKG5leHRMb2NhdGlvbikgIT09IGZhbHNlKSB1cGRhdGVMb2NhdGlvbihuZXh0TG9jYXRpb24pO1xuICAgICAgfSBlbHNlIGlmIChsb2NhdGlvbiAmJiBuZXh0TG9jYXRpb24uYWN0aW9uID09PSBfQWN0aW9ucy5QT1ApIHtcbiAgICAgICAgdmFyIHByZXZJbmRleCA9IGFsbEtleXMuaW5kZXhPZihsb2NhdGlvbi5rZXkpO1xuICAgICAgICB2YXIgbmV4dEluZGV4ID0gYWxsS2V5cy5pbmRleE9mKG5leHRMb2NhdGlvbi5rZXkpO1xuXG4gICAgICAgIGlmIChwcmV2SW5kZXggIT09IC0xICYmIG5leHRJbmRleCAhPT0gLTEpIGdvKHByZXZJbmRleCAtIG5leHRJbmRleCk7IC8vIFJlc3RvcmUgdGhlIFVSTC5cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHB1c2gobG9jYXRpb24pIHtcbiAgICB0cmFuc2l0aW9uVG8oY3JlYXRlTG9jYXRpb24obG9jYXRpb24sIF9BY3Rpb25zLlBVU0gsIGNyZWF0ZUtleSgpKSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXBsYWNlKGxvY2F0aW9uKSB7XG4gICAgdHJhbnNpdGlvblRvKGNyZWF0ZUxvY2F0aW9uKGxvY2F0aW9uLCBfQWN0aW9ucy5SRVBMQUNFLCBjcmVhdGVLZXkoKSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ29CYWNrKCkge1xuICAgIGdvKC0xKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdvRm9yd2FyZCgpIHtcbiAgICBnbygxKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUtleSgpIHtcbiAgICByZXR1cm4gY3JlYXRlUmFuZG9tS2V5KGtleUxlbmd0aCk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQYXRoKGxvY2F0aW9uKSB7XG4gICAgaWYgKGxvY2F0aW9uID09IG51bGwgfHwgdHlwZW9mIGxvY2F0aW9uID09PSAnc3RyaW5nJykgcmV0dXJuIGxvY2F0aW9uO1xuXG4gICAgdmFyIHBhdGhuYW1lID0gbG9jYXRpb24ucGF0aG5hbWU7XG4gICAgdmFyIHNlYXJjaCA9IGxvY2F0aW9uLnNlYXJjaDtcbiAgICB2YXIgaGFzaCA9IGxvY2F0aW9uLmhhc2g7XG5cbiAgICB2YXIgcmVzdWx0ID0gcGF0aG5hbWU7XG5cbiAgICBpZiAoc2VhcmNoKSByZXN1bHQgKz0gc2VhcmNoO1xuXG4gICAgaWYgKGhhc2gpIHJlc3VsdCArPSBoYXNoO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUhyZWYobG9jYXRpb24pIHtcbiAgICByZXR1cm4gY3JlYXRlUGF0aChsb2NhdGlvbik7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVMb2NhdGlvbihsb2NhdGlvbiwgYWN0aW9uKSB7XG4gICAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMiB8fCBhcmd1bWVudHNbMl0gPT09IHVuZGVmaW5lZCA/IGNyZWF0ZUtleSgpIDogYXJndW1lbnRzWzJdO1xuXG4gICAgaWYgKHR5cGVvZiBhY3Rpb24gPT09ICdvYmplY3QnKSB7XG4gICAgICAvL3dhcm5pbmcoXG4gICAgICAvLyAgZmFsc2UsXG4gICAgICAvLyAgJ1RoZSBzdGF0ZSAoMm5kKSBhcmd1bWVudCB0byBoaXN0b3J5LmNyZWF0ZUxvY2F0aW9uIGlzIGRlcHJlY2F0ZWQ7IHVzZSBhICcgK1xuICAgICAgLy8gICdsb2NhdGlvbiBkZXNjcmlwdG9yIGluc3RlYWQnXG4gICAgICAvLylcblxuICAgICAgaWYgKHR5cGVvZiBsb2NhdGlvbiA9PT0gJ3N0cmluZycpIGxvY2F0aW9uID0gX3BhcnNlUGF0aDJbJ2RlZmF1bHQnXShsb2NhdGlvbik7XG5cbiAgICAgIGxvY2F0aW9uID0gX2V4dGVuZHMoe30sIGxvY2F0aW9uLCB7IHN0YXRlOiBhY3Rpb24gfSk7XG5cbiAgICAgIGFjdGlvbiA9IGtleTtcbiAgICAgIGtleSA9IGFyZ3VtZW50c1szXSB8fCBjcmVhdGVLZXkoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2NyZWF0ZUxvY2F0aW9uM1snZGVmYXVsdCddKGxvY2F0aW9uLCBhY3Rpb24sIGtleSk7XG4gIH1cblxuICAvLyBkZXByZWNhdGVkXG4gIGZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlKSB7XG4gICAgaWYgKGxvY2F0aW9uKSB7XG4gICAgICB1cGRhdGVMb2NhdGlvblN0YXRlKGxvY2F0aW9uLCBzdGF0ZSk7XG4gICAgICB1cGRhdGVMb2NhdGlvbihsb2NhdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVwZGF0ZUxvY2F0aW9uU3RhdGUoZ2V0Q3VycmVudExvY2F0aW9uKCksIHN0YXRlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVMb2NhdGlvblN0YXRlKGxvY2F0aW9uLCBzdGF0ZSkge1xuICAgIGxvY2F0aW9uLnN0YXRlID0gX2V4dGVuZHMoe30sIGxvY2F0aW9uLnN0YXRlLCBzdGF0ZSk7XG4gICAgc2F2ZVN0YXRlKGxvY2F0aW9uLmtleSwgbG9jYXRpb24uc3RhdGUpO1xuICB9XG5cbiAgLy8gZGVwcmVjYXRlZFxuICBmdW5jdGlvbiByZWdpc3RlclRyYW5zaXRpb25Ib29rKGhvb2spIHtcbiAgICBpZiAodHJhbnNpdGlvbkhvb2tzLmluZGV4T2YoaG9vaykgPT09IC0xKSB0cmFuc2l0aW9uSG9va3MucHVzaChob29rKTtcbiAgfVxuXG4gIC8vIGRlcHJlY2F0ZWRcbiAgZnVuY3Rpb24gdW5yZWdpc3RlclRyYW5zaXRpb25Ib29rKGhvb2spIHtcbiAgICB0cmFuc2l0aW9uSG9va3MgPSB0cmFuc2l0aW9uSG9va3MuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbSAhPT0gaG9vaztcbiAgICB9KTtcbiAgfVxuXG4gIC8vIGRlcHJlY2F0ZWRcbiAgZnVuY3Rpb24gcHVzaFN0YXRlKHN0YXRlLCBwYXRoKSB7XG4gICAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykgcGF0aCA9IF9wYXJzZVBhdGgyWydkZWZhdWx0J10ocGF0aCk7XG5cbiAgICBwdXNoKF9leHRlbmRzKHsgc3RhdGU6IHN0YXRlIH0sIHBhdGgpKTtcbiAgfVxuXG4gIC8vIGRlcHJlY2F0ZWRcbiAgZnVuY3Rpb24gcmVwbGFjZVN0YXRlKHN0YXRlLCBwYXRoKSB7XG4gICAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykgcGF0aCA9IF9wYXJzZVBhdGgyWydkZWZhdWx0J10ocGF0aCk7XG5cbiAgICByZXBsYWNlKF9leHRlbmRzKHsgc3RhdGU6IHN0YXRlIH0sIHBhdGgpKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbGlzdGVuQmVmb3JlOiBsaXN0ZW5CZWZvcmUsXG4gICAgbGlzdGVuOiBsaXN0ZW4sXG4gICAgdHJhbnNpdGlvblRvOiB0cmFuc2l0aW9uVG8sXG4gICAgcHVzaDogcHVzaCxcbiAgICByZXBsYWNlOiByZXBsYWNlLFxuICAgIGdvOiBnbyxcbiAgICBnb0JhY2s6IGdvQmFjayxcbiAgICBnb0ZvcndhcmQ6IGdvRm9yd2FyZCxcbiAgICBjcmVhdGVLZXk6IGNyZWF0ZUtleSxcbiAgICBjcmVhdGVQYXRoOiBjcmVhdGVQYXRoLFxuICAgIGNyZWF0ZUhyZWY6IGNyZWF0ZUhyZWYsXG4gICAgY3JlYXRlTG9jYXRpb246IGNyZWF0ZUxvY2F0aW9uLFxuXG4gICAgc2V0U3RhdGU6IF9kZXByZWNhdGUyWydkZWZhdWx0J10oc2V0U3RhdGUsICdzZXRTdGF0ZSBpcyBkZXByZWNhdGVkOyB1c2UgbG9jYXRpb24ua2V5IHRvIHNhdmUgc3RhdGUgaW5zdGVhZCcpLFxuICAgIHJlZ2lzdGVyVHJhbnNpdGlvbkhvb2s6IF9kZXByZWNhdGUyWydkZWZhdWx0J10ocmVnaXN0ZXJUcmFuc2l0aW9uSG9vaywgJ3JlZ2lzdGVyVHJhbnNpdGlvbkhvb2sgaXMgZGVwcmVjYXRlZDsgdXNlIGxpc3RlbkJlZm9yZSBpbnN0ZWFkJyksXG4gICAgdW5yZWdpc3RlclRyYW5zaXRpb25Ib29rOiBfZGVwcmVjYXRlMlsnZGVmYXVsdCddKHVucmVnaXN0ZXJUcmFuc2l0aW9uSG9vaywgJ3VucmVnaXN0ZXJUcmFuc2l0aW9uSG9vayBpcyBkZXByZWNhdGVkOyB1c2UgdGhlIGNhbGxiYWNrIHJldHVybmVkIGZyb20gbGlzdGVuQmVmb3JlIGluc3RlYWQnKSxcbiAgICBwdXNoU3RhdGU6IF9kZXByZWNhdGUyWydkZWZhdWx0J10ocHVzaFN0YXRlLCAncHVzaFN0YXRlIGlzIGRlcHJlY2F0ZWQ7IHVzZSBwdXNoIGluc3RlYWQnKSxcbiAgICByZXBsYWNlU3RhdGU6IF9kZXByZWNhdGUyWydkZWZhdWx0J10ocmVwbGFjZVN0YXRlLCAncmVwbGFjZVN0YXRlIGlzIGRlcHJlY2F0ZWQ7IHVzZSByZXBsYWNlIGluc3RlYWQnKVxuICB9O1xufVxuXG5leHBvcnRzWydkZWZhdWx0J10gPSBjcmVhdGVIaXN0b3J5O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiLy9pbXBvcnQgd2FybmluZyBmcm9tICd3YXJuaW5nJ1xuJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbnZhciBfQWN0aW9ucyA9IHJlcXVpcmUoJy4vQWN0aW9ucycpO1xuXG52YXIgX3BhcnNlUGF0aCA9IHJlcXVpcmUoJy4vcGFyc2VQYXRoJyk7XG5cbnZhciBfcGFyc2VQYXRoMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3BhcnNlUGF0aCk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUxvY2F0aW9uKCkge1xuICB2YXIgbG9jYXRpb24gPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyAnLycgOiBhcmd1bWVudHNbMF07XG4gIHZhciBhY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyBfQWN0aW9ucy5QT1AgOiBhcmd1bWVudHNbMV07XG4gIHZhciBrZXkgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDIgfHwgYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQgPyBudWxsIDogYXJndW1lbnRzWzJdO1xuXG4gIHZhciBfZm91cnRoQXJnID0gYXJndW1lbnRzLmxlbmd0aCA8PSAzIHx8IGFyZ3VtZW50c1szXSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGFyZ3VtZW50c1szXTtcblxuICBpZiAodHlwZW9mIGxvY2F0aW9uID09PSAnc3RyaW5nJykgbG9jYXRpb24gPSBfcGFyc2VQYXRoMlsnZGVmYXVsdCddKGxvY2F0aW9uKTtcblxuICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAvL3dhcm5pbmcoXG4gICAgLy8gIGZhbHNlLFxuICAgIC8vICAnVGhlIHN0YXRlICgybmQpIGFyZ3VtZW50IHRvIGNyZWF0ZUxvY2F0aW9uIGlzIGRlcHJlY2F0ZWQ7IHVzZSBhICcgK1xuICAgIC8vICAnbG9jYXRpb24gZGVzY3JpcHRvciBpbnN0ZWFkJ1xuICAgIC8vKVxuXG4gICAgbG9jYXRpb24gPSBfZXh0ZW5kcyh7fSwgbG9jYXRpb24sIHsgc3RhdGU6IGFjdGlvbiB9KTtcblxuICAgIGFjdGlvbiA9IGtleSB8fCBfQWN0aW9ucy5QT1A7XG4gICAga2V5ID0gX2ZvdXJ0aEFyZztcbiAgfVxuXG4gIHZhciBwYXRobmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lIHx8ICcvJztcbiAgdmFyIHNlYXJjaCA9IGxvY2F0aW9uLnNlYXJjaCB8fCAnJztcbiAgdmFyIGhhc2ggPSBsb2NhdGlvbi5oYXNoIHx8ICcnO1xuICB2YXIgc3RhdGUgPSBsb2NhdGlvbi5zdGF0ZSB8fCBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICAgIHNlYXJjaDogc2VhcmNoLFxuICAgIGhhc2g6IGhhc2gsXG4gICAgc3RhdGU6IHN0YXRlLFxuICAgIGFjdGlvbjogYWN0aW9uLFxuICAgIGtleToga2V5XG4gIH07XG59XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGNyZWF0ZUxvY2F0aW9uO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiLy9pbXBvcnQgd2FybmluZyBmcm9tICd3YXJuaW5nJ1xuXG5cInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmZ1bmN0aW9uIGRlcHJlY2F0ZShmbikge1xuICByZXR1cm4gZm47XG4gIC8vcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgLy8gIHdhcm5pbmcoZmFsc2UsICdbaGlzdG9yeV0gJyArIG1lc3NhZ2UpXG4gIC8vICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICAvL31cbn1cblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBkZXByZWNhdGU7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdOyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZnVuY3Rpb24gZXh0cmFjdFBhdGgoc3RyaW5nKSB7XG4gIHZhciBtYXRjaCA9IHN0cmluZy5tYXRjaCgvXmh0dHBzPzpcXC9cXC9bXlxcL10qLyk7XG5cbiAgaWYgKG1hdGNoID09IG51bGwpIHJldHVybiBzdHJpbmc7XG5cbiAgcmV0dXJuIHN0cmluZy5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbn1cblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBleHRyYWN0UGF0aDtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07IiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbnZhciBfd2FybmluZyA9IHJlcXVpcmUoJ3dhcm5pbmcnKTtcblxudmFyIF93YXJuaW5nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dhcm5pbmcpO1xuXG52YXIgX2V4dHJhY3RQYXRoID0gcmVxdWlyZSgnLi9leHRyYWN0UGF0aCcpO1xuXG52YXIgX2V4dHJhY3RQYXRoMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2V4dHJhY3RQYXRoKTtcblxuZnVuY3Rpb24gcGFyc2VQYXRoKHBhdGgpIHtcbiAgdmFyIHBhdGhuYW1lID0gX2V4dHJhY3RQYXRoMlsnZGVmYXVsdCddKHBhdGgpO1xuICB2YXIgc2VhcmNoID0gJyc7XG4gIHZhciBoYXNoID0gJyc7XG5cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IF93YXJuaW5nMlsnZGVmYXVsdCddKHBhdGggPT09IHBhdGhuYW1lLCAnQSBwYXRoIG11c3QgYmUgcGF0aG5hbWUgKyBzZWFyY2ggKyBoYXNoIG9ubHksIG5vdCBhIGZ1bGx5IHF1YWxpZmllZCBVUkwgbGlrZSBcIiVzXCInLCBwYXRoKSA6IHVuZGVmaW5lZDtcblxuICB2YXIgaGFzaEluZGV4ID0gcGF0aG5hbWUuaW5kZXhPZignIycpO1xuICBpZiAoaGFzaEluZGV4ICE9PSAtMSkge1xuICAgIGhhc2ggPSBwYXRobmFtZS5zdWJzdHJpbmcoaGFzaEluZGV4KTtcbiAgICBwYXRobmFtZSA9IHBhdGhuYW1lLnN1YnN0cmluZygwLCBoYXNoSW5kZXgpO1xuICB9XG5cbiAgdmFyIHNlYXJjaEluZGV4ID0gcGF0aG5hbWUuaW5kZXhPZignPycpO1xuICBpZiAoc2VhcmNoSW5kZXggIT09IC0xKSB7XG4gICAgc2VhcmNoID0gcGF0aG5hbWUuc3Vic3RyaW5nKHNlYXJjaEluZGV4KTtcbiAgICBwYXRobmFtZSA9IHBhdGhuYW1lLnN1YnN0cmluZygwLCBzZWFyY2hJbmRleCk7XG4gIH1cblxuICBpZiAocGF0aG5hbWUgPT09ICcnKSBwYXRobmFtZSA9ICcvJztcblxuICByZXR1cm4ge1xuICAgIHBhdGhuYW1lOiBwYXRobmFtZSxcbiAgICBzZWFyY2g6IHNlYXJjaCxcbiAgICBoYXNoOiBoYXNoXG4gIH07XG59XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IHBhcnNlUGF0aDtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddOyIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG52YXIgX3dhcm5pbmcgPSByZXF1aXJlKCd3YXJuaW5nJyk7XG5cbnZhciBfd2FybmluZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF93YXJuaW5nKTtcblxuZnVuY3Rpb24gcnVuVHJhbnNpdGlvbkhvb2soaG9vaywgbG9jYXRpb24sIGNhbGxiYWNrKSB7XG4gIHZhciByZXN1bHQgPSBob29rKGxvY2F0aW9uLCBjYWxsYmFjayk7XG5cbiAgaWYgKGhvb2subGVuZ3RoIDwgMikge1xuICAgIC8vIEFzc3VtZSB0aGUgaG9vayBydW5zIHN5bmNocm9ub3VzbHkgYW5kIGF1dG9tYXRpY2FsbHlcbiAgICAvLyBjYWxsIHRoZSBjYWxsYmFjayB3aXRoIHRoZSByZXR1cm4gdmFsdWUuXG4gICAgY2FsbGJhY2socmVzdWx0KTtcbiAgfSBlbHNlIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gX3dhcm5pbmcyWydkZWZhdWx0J10ocmVzdWx0ID09PSB1bmRlZmluZWQsICdZb3Ugc2hvdWxkIG5vdCBcInJldHVyblwiIGluIGEgdHJhbnNpdGlvbiBob29rIHdpdGggYSBjYWxsYmFjayBhcmd1bWVudDsgY2FsbCB0aGUgY2FsbGJhY2sgaW5zdGVhZCcpIDogdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IHJ1blRyYW5zaXRpb25Ib29rO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFVzZSBpbnZhcmlhbnQoKSB0byBhc3NlcnQgc3RhdGUgd2hpY2ggeW91ciBwcm9ncmFtIGFzc3VtZXMgdG8gYmUgdHJ1ZS5cbiAqXG4gKiBQcm92aWRlIHNwcmludGYtc3R5bGUgZm9ybWF0IChvbmx5ICVzIGlzIHN1cHBvcnRlZCkgYW5kIGFyZ3VtZW50c1xuICogdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGJyb2tlIGFuZCB3aGF0IHlvdSB3ZXJlXG4gKiBleHBlY3RpbmcuXG4gKlxuICogVGhlIGludmFyaWFudCBtZXNzYWdlIHdpbGwgYmUgc3RyaXBwZWQgaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBpbnZhcmlhbnRcbiAqIHdpbGwgcmVtYWluIHRvIGVuc3VyZSBsb2dpYyBkb2VzIG5vdCBkaWZmZXIgaW4gcHJvZHVjdGlvbi5cbiAqL1xuXG52YXIgaW52YXJpYW50ID0gZnVuY3Rpb24oY29uZGl0aW9uLCBmb3JtYXQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YXJpYW50IHJlcXVpcmVzIGFuIGVycm9yIG1lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHZhciBlcnJvcjtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAnTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArXG4gICAgICAgICdmb3IgdGhlIGZ1bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLidcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhcmdzID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24oKSB7IHJldHVybiBhcmdzW2FyZ0luZGV4KytdOyB9KVxuICAgICAgKTtcbiAgICAgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgfVxuXG4gICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGludmFyaWFudCdzIG93biBmcmFtZVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGludmFyaWFudDtcbiIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQgb25seSBsb2dzIGEgd2FybmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGluIGNyaXRpY2FsXG4gKiBwYXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgd2lsbCBrZWVwIHRoZVxuICogc2FtZSBsb2dpYyBhbmQgZm9sbG93IHRoZSBzYW1lIGNvZGUgcGF0aHMuXG4gKi9cblxudmFyIHdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB3YXJuaW5nID0gZnVuY3Rpb24oY29uZGl0aW9uLCBmb3JtYXQsIGFyZ3MpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBhcmdzID0gbmV3IEFycmF5KGxlbiA+IDIgPyBsZW4gLSAyIDogMCk7XG4gICAgZm9yICh2YXIga2V5ID0gMjsga2V5IDwgbGVuOyBrZXkrKykge1xuICAgICAgYXJnc1trZXkgLSAyXSA9IGFyZ3VtZW50c1trZXldO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2B3YXJuaW5nKGNvbmRpdGlvbiwgZm9ybWF0LCAuLi5hcmdzKWAgcmVxdWlyZXMgYSB3YXJuaW5nICcgK1xuICAgICAgICAnbWVzc2FnZSBhcmd1bWVudCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdC5sZW5ndGggPCAxMCB8fCAoL15bc1xcV10qJC8pLnRlc3QoZm9ybWF0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVGhlIHdhcm5pbmcgZm9ybWF0IHNob3VsZCBiZSBhYmxlIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgJyArXG4gICAgICAgICd3YXJuaW5nLiBQbGVhc2UsIHVzZSBhIG1vcmUgZGVzY3JpcHRpdmUgZm9ybWF0IHRoYW46ICcgKyBmb3JtYXRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICtcbiAgICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgICB9KTtcbiAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfSBjYXRjaCh4KSB7fVxuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3YXJuaW5nO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZWZyZXNoKCkge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgfVxuXG4gIGdldE1lc3NhZ2UoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuc2lnbmVkSW4pIHtcbiAgICAgIHJldHVybiBpbnRlcnBvbGF0ZShcbiAgICAgICAgZ2V0dGV4dChcIllvdSBoYXZlIHNpZ25lZCBpbiBhcyAlKHVzZXJuYW1lKXMuIFBsZWFzZSByZWZyZXNoIHRoZSBwYWdlIGJlZm9yZSBjb250aW51aW5nLlwiKSxcbiAgICAgICAge3VzZXJuYW1lOiB0aGlzLnByb3BzLnNpZ25lZEluLnVzZXJuYW1lfSwgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnNpZ25lZE91dCkge1xuICAgICAgcmV0dXJuIGludGVycG9sYXRlKFxuICAgICAgICBnZXR0ZXh0KFwiJSh1c2VybmFtZSlzLCB5b3UgaGF2ZSBiZWVuIHNpZ25lZCBvdXQuIFBsZWFzZSByZWZyZXNoIHRoZSBwYWdlIGJlZm9yZSBjb250aW51aW5nLlwiKSxcbiAgICAgICAge3VzZXJuYW1lOiB0aGlzLnByb3BzLnVzZXIudXNlcm5hbWV9LCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBnZXRDbGFzc05hbWUoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuc2lnbmVkSW4gfHwgdGhpcy5wcm9wcy5zaWduZWRPdXQpIHtcbiAgICAgIHJldHVybiBcImF1dGgtbWVzc2FnZSBzaG93XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcImF1dGgtbWVzc2FnZVwiO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmdldENsYXNzTmFtZSgpfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImxlYWRcIj57dGhpcy5nZXRNZXNzYWdlKCl9PC9wPlxuICAgICAgICA8cD5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5yZWZyZXNofT5cbiAgICAgICAgICAgIHtnZXR0ZXh0KFwiUmVsb2FkIHBhZ2VcIil9XG4gICAgICAgICAgPC9idXR0b24+IDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbi14cyBoaWRkZW4tc20gdGV4dC1tdXRlZFwiPlxuICAgICAgICAgICAge2dldHRleHQoXCJvciBwcmVzcyBGNSBrZXkuXCIpfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9wPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdChzdGF0ZSkge1xuICByZXR1cm4ge1xuICAgIHVzZXI6IHN0YXRlLmF1dGgudXNlcixcbiAgICBzaWduZWRJbjogc3RhdGUuYXV0aC5zaWduZWRJbixcbiAgICBzaWduZWRPdXQ6IHN0YXRlLmF1dGguc2lnbmVkT3V0XG4gIH07XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuY29uc3QgQkFTRV9VUkwgPSAkKCdiYXNlJykuYXR0cignaHJlZicpICsgJ3VzZXItYXZhdGFyLyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0U3JjKCkge1xuICAgIGxldCBzaXplID0gdGhpcy5wcm9wcy5zaXplIHx8IDEwMDsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG4gICAgbGV0IHVybCA9IEJBU0VfVVJMO1xuXG4gICAgaWYgKHRoaXMucHJvcHMudXNlciAmJiB0aGlzLnByb3BzLnVzZXIuaWQpIHtcbiAgICAgIC8vIGp1c3QgYXZhdGFyIGhhc2gsIHNpemUgYW5kIHVzZXIgaWRcbiAgICAgIHVybCArPSB0aGlzLnByb3BzLnVzZXIuYXZhdGFyX2hhc2ggKyAnLycgKyBzaXplICsgJy8nICsgdGhpcy5wcm9wcy51c2VyLmlkICsgJy5wbmcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBqdXN0IGFwcGVuZCBhdmF0YXIgc2l6ZSB0byBmaWxlIHRvIHByb2R1Y2Ugbm8tYXZhdGFyIHBsYWNlaG9sZGVyXG4gICAgICB1cmwgKz0gc2l6ZSArICcucG5nJztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGltZyBzcmM9e3RoaXMuZ2V0U3JjKCl9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCAndXNlci1hdmF0YXInfVxuICAgICAgICAgICAgICAgIHRpdGxlPXtnZXR0ZXh0KFwiVXNlciBhdmF0YXJcIil9Lz47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuIiwiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRSZWFzb25NZXNzYWdlKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICBpZiAodGhpcy5wcm9wcy5tZXNzYWdlLmh0bWwpIHtcbiAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImxlYWRcIiBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgIF9faHRtbDogdGhpcy5wcm9wcy5tZXNzYWdlLmh0bWxcbiAgICAgICAgfX0gLz47XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiA8cCBjbGFzc05hbWU9XCJsZWFkXCI+e3RoaXMucHJvcHMubWVzc2FnZS5wbGFpbn08L3A+O1xuICAgIH1cbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG5cbiAgZ2V0RXhwaXJhdGlvbk1lc3NhZ2UoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuZXhwaXJlcykge1xuICAgICAgaWYgKHRoaXMucHJvcHMuZXhwaXJlcy5pc0FmdGVyKG1vbWVudCgpKSkge1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICAgIGxldCB0aXRsZSA9IGludGVycG9sYXRlKFxuICAgICAgICAgIGdldHRleHQoXCJUaGlzIGJhbiBleHBpcmVzIG9uICUoZXhwaXJlc19vbilzLlwiKSwge1xuICAgICAgICAgICAgJ2V4cGlyZXNfb24nOiB0aGlzLnByb3BzLmV4cGlyZXMuZm9ybWF0KCdMTCwgTFQnKVxuICAgICAgICAgIH0sIHRydWUpO1xuXG4gICAgICAgIGxldCBtZXNzYWdlID0gaW50ZXJwb2xhdGUoXG4gICAgICAgICAgZ2V0dGV4dChcIlRoaXMgYmFuIGV4cGlyZXMgJShleHBpcmVzX29uKXMuXCIpLCB7XG4gICAgICAgICAgICAnZXhwaXJlc19vbic6IHRoaXMucHJvcHMuZXhwaXJlcy5mcm9tTm93KClcbiAgICAgICAgICB9LCB0cnVlKTtcblxuICAgICAgICByZXR1cm4gPGFiYnIgdGl0bGU9e3RpdGxlfT5cbiAgICAgICAgICB7bWVzc2FnZX1cbiAgICAgICAgPC9hYmJyPjtcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnZXR0ZXh0KFwiVGhpcyBiYW4gaGFzIGV4cGlyZWQuXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ2V0dGV4dChcIlRoaXMgYmFuIGlzIHBlcm1hbmVudC5cIik7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJwYWdlIHBhZ2UtZXJyb3IgcGFnZS1lcnJvci1iYW5uZWRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1wYW5lbFwiPlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLWljb25cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5oaWdobGlnaHRfb2ZmPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1ib2R5XCI+XG4gICAgICAgICAgICB7dGhpcy5nZXRSZWFzb25NZXNzYWdlKCl9XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJtZXNzYWdlLWZvb3Rub3RlXCI+XG4gICAgICAgICAgICAgIHt0aGlzLmdldEV4cGlyYXRpb25NZXNzYWdlKCl9XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTG9hZGVyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2xvYWRlcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCdXR0b24gZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgbGV0IGNsYXNzTmFtZSA9ICdidG4gJyArIHRoaXMucHJvcHMuY2xhc3NOYW1lO1xuICAgIGxldCBkaXNhYmxlZCA9IHRoaXMucHJvcHMuZGlzYWJsZWQ7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5sb2FkaW5nKSB7XG4gICAgICBjbGFzc05hbWUgKz0gJyBidG4tbG9hZGluZyc7XG4gICAgICBkaXNhYmxlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8YnV0dG9uIHR5cGU9e3RoaXMucHJvcHMub25DbGljayA/ICdidXR0b24nIDogJ3N1Ym1pdCd9XG4gICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMucHJvcHMub25DbGlja30+XG4gICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICAgIHt0aGlzLnByb3BzLmxvYWRpbmcgPyA8TG9hZGVyIC8+IDogbnVsbH1cbiAgICA8L2J1dHRvbj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5cbkJ1dHRvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZTogXCJidG4tZGVmYXVsdFwiLFxuXG4gIHR5cGU6IFwic3VibWl0XCIsXG5cbiAgbG9hZGluZzogZmFsc2UsXG4gIGRpc2FibGVkOiBmYWxzZSxcblxuICBvbkNsaWNrOiBudWxsXG59O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBMYXN0QWN0aXZpdHkgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvY2F0ZWdvcmllcy9sYXN0LWFjdGl2aXR5JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgUmVhZEljb24gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvY2F0ZWdvcmllcy9yZWFkLWljb24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBTdGF0cyBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9jYXRlZ29yaWVzL3N0YXRzJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnByb3BzLmNhdGVnb3J5LmNzc19jbGFzcykge1xuICAgICAgcmV0dXJuICdwYW5lbCBwYW5lbC1kZWZhdWx0IHBhbmVsLWNhdGVnb3J5IHBhbmVsLWNhdGVnb3J5LScgKyB0aGlzLnByb3BzLmNhdGVnb3J5LmNzc19jbGFzcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdwYW5lbCBwYW5lbC1kZWZhdWx0IHBhbmVsLWNhdGVnb3J5JztcbiAgICB9XG4gIH1cblxuICBnZXRIZWFkaW5nQ2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnByb3BzLmNhdGVnb3J5LnN1YmNhdGVnb3JpZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gJ3BhbmVsLWhlYWRpbmcnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ3BhbmVsLWhlYWRpbmcgaGVhZGluZy1hbG9uZSc7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2F0ZWdvcnlEZXNjcmlwdGlvbigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5jYXRlZ29yeS5kZXNjcmlwdGlvbikge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtYm9keSBjYXRlZ29yeS1kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICBkYW5nZXJvdXNseVNldElubmVySFRNTD17e1xuICAgICAgICAgICAgICAgICAgICBfX2h0bWw6IHRoaXMucHJvcHMuY2F0ZWdvcnkuZGVzY3JpcHRpb24uaHRtbFxuICAgICAgICAgICAgICAgICAgfX0gLz47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRTdWJjYXRlZ29yeUNsYXNzKGNhdGVnb3J5KSB7XG4gICAgaWYgKGNhdGVnb3J5LmNzc19jbGFzcykge1xuICAgICAgcmV0dXJuICdsaXN0LWdyb3VwLWl0ZW0gY2F0ZWdvcnktc3ViY2F0ZWdvcnkgc3ViY2F0ZWdvcnktJyArIGNhdGVnb3J5LmNzc19jbGFzcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdsaXN0LWdyb3VwLWl0ZW0gY2F0ZWdvcnktc3ViY2F0ZWdvcnknO1xuICAgIH1cbiAgfVxuXG4gIGdldFN1YmNhdGVnb3J5RGVzY3JpcHRpb24oY2F0ZWdvcnkpIHtcbiAgICBpZiAoY2F0ZWdvcnkuZGVzY3JpcHRpb24pIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInN1YmNhdGVnb3J5LWRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7XG4gICAgICAgICAgICAgICAgICAgIF9faHRtbDogY2F0ZWdvcnkuZGVzY3JpcHRpb24uaHRtbFxuICAgICAgICAgICAgICAgICAgfX0gLz47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRTdWJjYXRlZ29yeVN1YmNhdGVnb3J5Q2xhc3MoY2F0ZWdvcnkpIHtcbiAgICBpZiAoY2F0ZWdvcnkuY3NzX2NsYXNzKSB7XG4gICAgICByZXR1cm4gJ3N1YmNhdGVnb3J5IHN1YmNhdGVnb3J5LScgKyBjYXRlZ29yeS5jc3NfY2xhc3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnc3ViY2F0ZWdvcnknO1xuICAgIH1cbiAgfVxuXG4gIGdldFN1YmNhdGVnb3J5U3ViY2F0ZWdvcmllcyhjYXRlZ29yeSkge1xuICAgIGlmIChjYXRlZ29yeS5zdWJjYXRlZ29yaWVzLmxlbmd0aCkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDx1bCBjbGFzc05hbWU9XCJsaXN0LWlubGluZSBzdWJjYXRlZ29yaWVzLWxpc3RcIj5cbiAgICAgICAge2NhdGVnb3J5LnN1YmNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4ge1xuICAgICAgICAgIHJldHVybiA8bGkga2V5PXtjYXRlZ29yeS5pZH0+XG4gICAgICAgICAgICA8YSBocmVmPXtjYXRlZ29yeS5hYnNvbHV0ZV91cmx9XG4gICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuZ2V0U3ViY2F0ZWdvcnlTdWJjYXRlZ29yeUNsYXNzKGNhdGVnb3J5KX0+XG4gICAgICAgICAgICAgIHtjYXRlZ29yeS5uYW1lfVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvbGk+O1xuICAgICAgICB9KX1cbiAgICAgIDwvdWw+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0U3ViY2F0ZWdvcmllcygpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5jYXRlZ29yeS5zdWJjYXRlZ29yaWVzLmxlbmd0aCkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDx1bCBjbGFzc05hbWU9XCJsaXN0LWdyb3VwIGNhdGVnb3J5LXN1YmNhdGVnb3JpZXNcIj5cbiAgICAgICAge3RoaXMucHJvcHMuY2F0ZWdvcnkuc3ViY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIDxsaSBjbGFzc05hbWU9e3RoaXMuZ2V0U3ViY2F0ZWdvcnlDbGFzcyhjYXRlZ29yeSl9XG4gICAgICAgICAgICAgICAgICAgICBrZXk9e2NhdGVnb3J5LmlkfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidGl0bGUtcm93XCI+XG4gICAgICAgICAgICAgIDxoND5cbiAgICAgICAgICAgICAgICA8UmVhZEljb24gY2F0ZWdvcnk9e2NhdGVnb3J5fSAvPlxuICAgICAgICAgICAgICAgIDxhIGhyZWY9e2NhdGVnb3J5LmFic29sdXRlX3VybH0gY2xhc3NOYW1lPVwiaXRlbS10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAge2NhdGVnb3J5Lm5hbWV9XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgICA8U3RhdHMgY2F0ZWdvcnk9e2NhdGVnb3J5fSAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxMYXN0QWN0aXZpdHkgY2F0ZWdvcnk9e2NhdGVnb3J5fSAvPlxuXG4gICAgICAgICAgICB7dGhpcy5nZXRTdWJjYXRlZ29yeURlc2NyaXB0aW9uKGNhdGVnb3J5KX1cbiAgICAgICAgICAgIHt0aGlzLmdldFN1YmNhdGVnb3J5U3ViY2F0ZWdvcmllcyhjYXRlZ29yeSl9XG5cbiAgICAgICAgICA8L2xpPjtcbiAgICAgICAgfSl9XG4gICAgICA8L3VsPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgaWQ9eydwYW5lbC1jYXRlZ29yeS0nICsgdGhpcy5wcm9wcy5jYXRlZ29yeS5pZH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3RoaXMuZ2V0Q2xhc3NOYW1lKCl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuZ2V0SGVhZGluZ0NsYXNzTmFtZSgpfT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1oZWFkaW5nLWluYmxvY2tcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWhlYWRpbmctdG9wLXJvd1wiPlxuICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInBhbmVsLXRpdGxlXCI+XG4gICAgICAgICAgICAgIDxSZWFkSWNvbiBjYXRlZ29yeT17dGhpcy5wcm9wcy5jYXRlZ29yeX0gLz5cbiAgICAgICAgICAgICAgPGEgaHJlZj17dGhpcy5wcm9wcy5jYXRlZ29yeS5hYnNvbHV0ZV91cmx9IGNsYXNzTmFtZT1cIml0ZW0tdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5jYXRlZ29yeS5uYW1lfVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgPFN0YXRzIGNhdGVnb3J5PXt0aGlzLnByb3BzLmNhdGVnb3J5fSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxMYXN0QWN0aXZpdHkgY2F0ZWdvcnk9e3RoaXMucHJvcHMuY2F0ZWdvcnl9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHt0aGlzLmdldENhdGVnb3J5RGVzY3JpcHRpb24oKX1cblxuICAgICAge3RoaXMuZ2V0U3ViY2F0ZWdvcmllcygpfVxuXG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldExhc3RQb3N0ZXIoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuY2F0ZWdvcnkubGFzdF9wb3N0ZXJfdXJsKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGEgaHJlZj17dGhpcy5wcm9wcy5jYXRlZ29yeS5sYXN0X3Bvc3Rlcl91cmx9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaXRlbS10aXRsZVwiPlxuICAgICAgICB7dGhpcy5wcm9wcy5jYXRlZ29yeS5sYXN0X3Bvc3Rlcl9uYW1lfVxuICAgICAgPC9hPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJpdGVtLXRpdGxlXCI+XG4gICAgICAgIHt0aGlzLnByb3BzLmNhdGVnb3J5Lmxhc3RfcG9zdGVyX25hbWV9XG4gICAgICA8L3NwYW4+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9XG4gIH1cblxuICBnZXRUaHJlYWREZXRhaWxzKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gW1xuICAgICAgPGxpIGNsYXNzTmFtZT1cInRocmVhZC10aXRsZVwiIGtleT1cInRpdGxlXCI+XG4gICAgICAgIDxhIGhyZWY9e3RoaXMucHJvcHMuY2F0ZWdvcnkubGFzdF90aHJlYWRfdXJsfSBjbGFzc05hbWU9XCJpdGVtLXRpdGxlXCI+XG4gICAgICAgICAge3RoaXMucHJvcHMuY2F0ZWdvcnkubGFzdF90aHJlYWRfdGl0bGV9XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+LFxuICAgICAgPGxpIGNsYXNzTmFtZT1cInBvc3Rlci1uYW1lXCIga2V5PVwicG9zdGVyXCI+XG4gICAgICAgIHt0aGlzLmdldExhc3RQb3N0ZXIoKX1cbiAgICAgIDwvbGk+LFxuICAgICAgPGxpIGNsYXNzTmFtZT1cInRocmVhZC1kYXRlXCIga2V5PVwiZGF0ZVwiPlxuICAgICAgICA8YWJiciB0aXRsZT17dGhpcy5wcm9wcy5jYXRlZ29yeS5sYXN0X3Bvc3Rfb24uZm9ybWF0KCdMTCwgTFQnKX0+XG4gICAgICAgICAge3RoaXMucHJvcHMuY2F0ZWdvcnkubGFzdF9wb3N0X29uLmZyb21Ob3coKX1cbiAgICAgICAgPC9hYmJyPlxuICAgICAgPC9saT5cbiAgICBdO1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxuICBnZXRMYXN0QWN0aXZpdHkoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuY2F0ZWdvcnkuYWNsLmNhbl9icm93c2UpIHtcbiAgICAgIGlmICghdGhpcy5wcm9wcy5jYXRlZ29yeS5hY2wuY2FuX3NlZV9hbGxfdGhyZWFkcykge1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICAgIHJldHVybiA8bGkgY2xhc3NOYW1lPVwidGhyZWFkLW1lc3NhZ2VcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICBpbmZvX291dGxpbmVcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAge2dldHRleHQoXCJUaGlzIGNhdGVnb3J5IGlzIHByaXZhdGUuIFlvdSBjYW4gc2VlIG9ubHkgeW91ciBvd24gdGhyZWFkcyB3aXRoaW4gaXQuXCIpfVxuICAgICAgICA8L2xpPjtcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5jYXRlZ29yeS5sYXN0X3RocmVhZF90aXRsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUaHJlYWREZXRhaWxzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICAgIHJldHVybiA8bGkgY2xhc3NOYW1lPVwidGhyZWFkLW1lc3NhZ2VcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICBlcnJvcl9vdXRsaW5lXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIHtnZXR0ZXh0KFwiVGhpcyBjYXRlZ29yeSBpcyBlbXB0eS5cIil9XG4gICAgICAgIDwvbGk+O1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGxpIGNsYXNzTmFtZT1cInRocmVhZC1tZXNzYWdlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICBoaWdobGlnaHRfb2ZmXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAge2dldHRleHQoXCJUaGlzIGNhdGVnb3J5IGlzIHByb3RlY3RlZC4gWW91IGNhbid0IGJyb3dzZSBpdCdzIGNvbnRlbnRzLlwiKX1cbiAgICAgIDwvbGk+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8dWwgY2xhc3NOYW1lPVwibGlzdC1pbmxpbmUgY2F0ZWdvcnktbGFzdC1hY3Rpdml0eVwiPlxuICAgICAge3RoaXMuZ2V0TGFzdEFjdGl2aXR5KCl9XG4gICAgPC91bD47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnByb3BzLmNhdGVnb3J5LmlzX3JlYWQpIHtcbiAgICAgIHJldHVybiAncmVhZC1zdGF0dXMgaXRlbS1yZWFkJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdyZWFkLXN0YXR1cyBpdGVtLW5ldyc7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGl0bGUoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuY2F0ZWdvcnkuaXNfY2xvc2VkKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5jYXRlZ29yeS5pc19yZWFkKSB7XG4gICAgICAgIHJldHVybiBnZXR0ZXh0KFwiVGhpcyBjYXRlZ29yeSBoYXMgbm8gbmV3IHBvc3RzLiAoY2xvc2VkKVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnZXR0ZXh0KFwiVGhpcyBjYXRlZ29yeSBoYXMgbmV3IHBvc3RzLiAoY2xvc2VkKVwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucHJvcHMuY2F0ZWdvcnkuaXNfcmVhZCkge1xuICAgICAgICByZXR1cm4gZ2V0dGV4dChcIlRoaXMgY2F0ZWdvcnkgaGFzIG5vIG5ldyBwb3N0cy5cIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZ2V0dGV4dChcIlRoaXMgY2F0ZWdvcnkgaGFzIG5ldyBwb3N0cy5cIik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0SWNvbigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5jYXRlZ29yeS5pc19jbG9zZWQpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmNhdGVnb3J5LmlzX3JlYWQpIHtcbiAgICAgICAgcmV0dXJuICdsb2NrX291dGxpbmUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICdsb2NrJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucHJvcHMuY2F0ZWdvcnkuaXNfcmVhZCkge1xuICAgICAgICByZXR1cm4gJ2NoYXRfYnViYmxlX291dGxpbmUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICdjaGF0X2J1YmJsZSc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMuZ2V0Q2xhc3NOYW1lKCl9IHRpdGxlPXt0aGlzLmdldFRpdGxlKCl9PlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICB7dGhpcy5nZXRJY29uKCl9XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IENhdGVnb3J5IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2NhdGVnb3JpZXMvY2F0ZWdvcnknOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBwb2xscyBmcm9tICdtaXNhZ28vc2VydmljZXMvcG9sbHMnO1xuXG5sZXQgZGVoeWRyYXRlID0gZnVuY3Rpb24oY2F0ZWdvcnkpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNhdGVnb3J5LCB7XG4gICAgbGFzdF9wb3N0X29uOiBjYXRlZ29yeS5sYXN0X3Bvc3Rfb24gPyBtb21lbnQoY2F0ZWdvcnkubGFzdF9wb3N0X29uKSA6IG51bGwsXG4gICAgc3ViY2F0ZWdvcmllczogY2F0ZWdvcnkuc3ViY2F0ZWdvcmllcy5tYXAoZGVoeWRyYXRlKVxuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgY2F0ZWdvcmllczogbWlzYWdvLmdldCgnQ0FURUdPUklFUycpLm1hcChkZWh5ZHJhdGUpXG4gICAgfTtcblxuICAgIHRoaXMuc3RhcnRQb2xsaW5nKG1pc2Fnby5nZXQoJ0NBVEVHT1JJRVNfQVBJJykpO1xuICB9XG5cbiAgc3RhcnRQb2xsaW5nKGFwaSkge1xuICAgIHBvbGxzLnN0YXJ0KHtcbiAgICAgIHBvbGw6ICdjYXRlZ29yaWVzJyxcbiAgICAgIHVybDogYXBpLFxuICAgICAgZnJlcXVlbmN5OiAxODAgKiAxMDAwLFxuICAgICAgdXBkYXRlOiB0aGlzLnVwZGF0ZVxuICAgIH0pO1xuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICB1cGRhdGUgPSAoZGF0YSkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY2F0ZWdvcmllczogZGF0YS5tYXAoZGVoeWRyYXRlKVxuICAgIH0pO1xuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY2F0ZWdvcmllcy1saXN0XCI+XG4gICAgICB7dGhpcy5zdGF0ZS5jYXRlZ29yaWVzLm1hcChmdW5jdGlvbihjYXRlZ29yeSkge1xuICAgICAgICByZXR1cm4gPENhdGVnb3J5IGNhdGVnb3J5PXtjYXRlZ29yeX0ga2V5PXtjYXRlZ29yeS5pZH0gLz47XG4gICAgICB9KX1cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0KHN0b3JlKSB7XG4gIHJldHVybiB7XG4gICAgJ3RpY2snOiBzdG9yZS50aWNrLnRpY2ssXG4gIH07XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRUaHJlYWRzQ291bnQoKSB7XG4gICAgbGV0IHN0cmluZyA9IG5nZXR0ZXh0KFxuICAgICAgXCIlKHRocmVhZHMpcyB0aHJlYWRcIixcbiAgICAgIFwiJSh0aHJlYWRzKXMgdGhyZWFkc1wiLFxuICAgICAgdGhpcy5wcm9wcy5jYXRlZ29yeS50aHJlYWRzKTtcblxuICAgIHJldHVybiBpbnRlcnBvbGF0ZShzdHJpbmcsIHtcbiAgICAgICd0aHJlYWRzJzogdGhpcy5wcm9wcy5jYXRlZ29yeS50aHJlYWRzXG4gICAgfSwgdHJ1ZSk7XG4gIH1cblxuICBnZXRQb3N0c0NvdW50KCkge1xuICAgIGxldCBzdHJpbmcgPSBuZ2V0dGV4dChcbiAgICAgIFwiJShwb3N0cylzIHBvc3RcIixcbiAgICAgIFwiJShwb3N0cylzIHBvc3RzXCIsXG4gICAgICB0aGlzLnByb3BzLmNhdGVnb3J5LnBvc3RzKTtcblxuICAgIHJldHVybiBpbnRlcnBvbGF0ZShzdHJpbmcsIHtcbiAgICAgICdwb3N0cyc6IHRoaXMucHJvcHMuY2F0ZWdvcnkucG9zdHNcbiAgICB9LCB0cnVlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDx1bCBjbGFzc05hbWU9XCJsaXN0LWlubGluZSBjYXRlZ29yeS1zdGF0c1wiPlxuICAgICAgPGxpIGNsYXNzTmFtZT1cImNhdGVnb3J5LXRocmVhZHNcIj5cbiAgICAgICAge3RoaXMuZ2V0VGhyZWFkc0NvdW50KCl9XG4gICAgICA8L2xpPlxuICAgICAgPGxpIGNsYXNzTmFtZT1cImNhdGVnb3J5LXBvc3RzXCI+XG4gICAgICAgIHt0aGlzLmdldFBvc3RzQ291bnQoKX1cbiAgICAgIDwvbGk+XG4gICAgPC91bD47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXZhdGFyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2F2YXRhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEJ1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmNvbnN0IEJBU0VfVVJMID0gJCgnYmFzZScpLmF0dHIoJ2hyZWYnKSArICd1c2VyLWF2YXRhcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGdldEF2YXRhclNpemUoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMudXBsb2FkKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5vcHRpb25zLmNyb3BfdG1wLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLm9wdGlvbnMuY3JvcF9vcmcuc2l6ZTtcbiAgICB9XG4gIH1cblxuICBnZXRBdmF0YXJTZWNyZXQoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMudXBsb2FkKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5vcHRpb25zLmNyb3BfdG1wLnNlY3JldDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMub3B0aW9ucy5jcm9wX29yZy5zZWNyZXQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXZhdGFySGFzaCgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy51cGxvYWQgfHwgdGhpcy5wcm9wcy51c2VyLmF2YXRhcl9oYXNoO1xuICB9XG5cbiAgZ2V0SW1hZ2VQYXRoKCkge1xuICAgIHJldHVybiBbXG4gICAgICBCQVNFX1VSTCxcbiAgICAgIHRoaXMuZ2V0QXZhdGFyU2VjcmV0KCkgKyAnOicgKyB0aGlzLmdldEF2YXRhckhhc2goKSxcbiAgICAgIHRoaXMucHJvcHMudXNlci5pZCArICcucG5nJ1xuICAgIF0uam9pbignLycpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgbGV0IGNyb3BpdCA9ICQoJy5jcm9wLWZvcm0nKTtcbiAgICBjcm9waXQud2lkdGgodGhpcy5nZXRBdmF0YXJTaXplKCkpO1xuXG4gICAgY3JvcGl0LmNyb3BpdCh7XG4gICAgICAnd2lkdGgnOiB0aGlzLmdldEF2YXRhclNpemUoKSxcbiAgICAgICdoZWlnaHQnOiB0aGlzLmdldEF2YXRhclNpemUoKSxcbiAgICAgICdpbWFnZVN0YXRlJzoge1xuICAgICAgICAnc3JjJzogdGhpcy5nZXRJbWFnZVBhdGgoKVxuICAgICAgfSxcbiAgICAgIG9uSW1hZ2VMb2FkZWQ6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudXBsb2FkKSB7XG4gICAgICAgICAgLy8gY2VudGVyIHVwbG9hZGVkIGltYWdlXG4gICAgICAgICAgbGV0IHpvb21MZXZlbCA9IGNyb3BpdC5jcm9waXQoJ3pvb20nKTtcbiAgICAgICAgICBsZXQgaW1hZ2VTaXplID0gY3JvcGl0LmNyb3BpdCgnaW1hZ2VTaXplJyk7XG5cbiAgICAgICAgICAvLyBpcyBpdCB3aWRlciB0aGFuIHRhbGxlcj9cbiAgICAgICAgICBpZiAoaW1hZ2VTaXplLndpZHRoID4gaW1hZ2VTaXplLmhlaWdodCkge1xuICAgICAgICAgICAgbGV0IGRpc3BsYXllZFdpZHRoID0gKGltYWdlU2l6ZS53aWR0aCAqIHpvb21MZXZlbCk7XG4gICAgICAgICAgICBsZXQgb2Zmc2V0WCA9IChkaXNwbGF5ZWRXaWR0aCAtIHRoaXMuZ2V0QXZhdGFyU2l6ZSgpKSAvIC0yO1xuXG4gICAgICAgICAgICBjcm9waXQuY3JvcGl0KCdvZmZzZXQnLCB7XG4gICAgICAgICAgICAgICd4Jzogb2Zmc2V0WCxcbiAgICAgICAgICAgICAgJ3knOiAwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGltYWdlU2l6ZS53aWR0aCA8IGltYWdlU2l6ZS5oZWlnaHQpIHtcbiAgICAgICAgICAgIGxldCBkaXNwbGF5ZWRIZWlnaHQgPSAoaW1hZ2VTaXplLmhlaWdodCAqIHpvb21MZXZlbCk7XG4gICAgICAgICAgICBsZXQgb2Zmc2V0WSA9IChkaXNwbGF5ZWRIZWlnaHQgLSB0aGlzLmdldEF2YXRhclNpemUoKSkgLyAtMjtcblxuICAgICAgICAgICAgY3JvcGl0LmNyb3BpdCgnb2Zmc2V0Jywge1xuICAgICAgICAgICAgICAneCc6IDAsXG4gICAgICAgICAgICAgICd5Jzogb2Zmc2V0WVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHVzZSBwcmVzZXJ2ZWQgY3JvcFxuICAgICAgICAgIGxldCBjcm9wID0gdGhpcy5wcm9wcy5vcHRpb25zLmNyb3Bfb3JnLmNyb3A7XG4gICAgICAgICAgaWYgKGNyb3ApIHtcbiAgICAgICAgICAgIGNyb3BpdC5jcm9waXQoJ3pvb20nLCBjcm9wLnpvb20pO1xuICAgICAgICAgICAgY3JvcGl0LmNyb3BpdCgnb2Zmc2V0Jywge1xuICAgICAgICAgICAgICAneCc6IGNyb3AueCxcbiAgICAgICAgICAgICAgJ3knOiBjcm9wLnlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgJCgnLmNyb3AtZm9ybScpLmNyb3BpdCgnZGlzYWJsZScpO1xuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICBjcm9wQXZhdGFyID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLmlzTG9hZGluZykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgJ2lzTG9hZGluZyc6IHRydWVcbiAgICB9KTtcblxuICAgIGxldCBhdmF0YXJUeXBlID0gdGhpcy5wcm9wcy51cGxvYWQgPyAnY3JvcF90bXAnIDogJ2Nyb3Bfb3JnJztcbiAgICBsZXQgY3JvcGl0ID0gJCgnLmNyb3AtZm9ybScpO1xuXG4gICAgYWpheC5wb3N0KHRoaXMucHJvcHMudXNlci5hcGlfdXJsLmF2YXRhciwge1xuICAgICAgJ2F2YXRhcic6IGF2YXRhclR5cGUsXG4gICAgICAnY3JvcCc6IHtcbiAgICAgICAgJ29mZnNldCc6IGNyb3BpdC5jcm9waXQoJ29mZnNldCcpLFxuICAgICAgICAnem9vbSc6IGNyb3BpdC5jcm9waXQoJ3pvb20nKVxuICAgICAgfVxuICAgIH0pLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIHRoaXMucHJvcHMub25Db21wbGV0ZShkYXRhLmF2YXRhcl9oYXNoLCBkYXRhLm9wdGlvbnMpO1xuICAgICAgc25hY2tiYXIuc3VjY2VzcyhkYXRhLmRldGFpbCk7XG4gICAgfSwgKHJlamVjdGlvbikgPT4ge1xuICAgICAgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICBzbmFja2Jhci5lcnJvcihyZWplY3Rpb24uZGV0YWlsKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zaG93RXJyb3IocmVqZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1ib2R5IG1vZGFsLWF2YXRhci1jcm9wXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY3JvcC1mb3JtXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjcm9waXQtaW1hZ2UtcHJldmlld1wiPjwvZGl2PlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFuZ2VcIiBjbGFzc05hbWU9XCJjcm9waXQtaW1hZ2Utem9vbS1pbnB1dFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC02IGNvbC1tZC1vZmZzZXQtM1wiPlxuXG4gICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXt0aGlzLmNyb3BBdmF0YXJ9XG4gICAgICAgICAgICAgICAgICBsb2FkaW5nPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1wcmltYXJ5IGJ0bi1ibG9ja1wiPlxuICAgICAgICAgICAge3RoaXMucHJvcHMudXBsb2FkID8gZ2V0dGV4dChcIlNldCBhdmF0YXJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdldHRleHQoXCJDcm9wIGltYWdlXCIpfVxuICAgICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXt0aGlzLnByb3BzLnNob3dJbmRleH1cbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1kZWZhdWx0IGJ0bi1ibG9ja1wiPlxuICAgICAgICAgICAge2dldHRleHQoXCJDYW5jZWxcIil9XG4gICAgICAgICAgPC9CdXR0b24+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2J1dHRvbic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgYmF0Y2ggZnJvbSAnbWlzYWdvL3V0aWxzL2JhdGNoJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBjbGFzcyBHYWxsZXJ5SXRlbSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgc2VsZWN0ID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMuc2VsZWN0KHRoaXMucHJvcHMuaW1hZ2UpO1xuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIGdldENsYXNzTmFtZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3Rpb24gPT09IHRoaXMucHJvcHMuaW1hZ2UpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiAnYnRuIGJ0bi1hdmF0YXIgYnRuLWRpc2FibGVkIGF2YXRhci1zZWxlY3RlZCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJ2J0biBidG4tYXZhdGFyIGF2YXRhci1zZWxlY3RlZCc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gJ2J0biBidG4tYXZhdGFyIGJ0bi1kaXNhYmxlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnYnRuIGJ0bi1hdmF0YXInO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmdldENsYXNzTmFtZSgpfVxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnByb3BzLmRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuc2VsZWN0fT5cbiAgICAgIDxpbWcgc3JjPXttaXNhZ28uZ2V0KCdNRURJQV9VUkwnKSArIHRoaXMucHJvcHMuaW1hZ2V9IC8+XG4gICAgPC9idXR0b24+XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2FsbGVyeSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYXZhdGFycy1nYWxsZXJ5XCI+XG4gICAgICA8aDM+e3RoaXMucHJvcHMubmFtZX08L2gzPlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImF2YXRhcnMtZ2FsbGVyeS1pbWFnZXNcIj5cbiAgICAgICAge2JhdGNoKHRoaXMucHJvcHMuaW1hZ2VzLCA0LCBudWxsKS5tYXAoKHJvdywgaSkgPT4ge1xuICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiIGtleT17aX0+XG4gICAgICAgICAgICB7cm93Lm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJjb2wteHMtM1wiIGtleT17aX0+XG4gICAgICAgICAgICAgICAge2l0ZW0gPyA8R2FsbGVyeUl0ZW0gaW1hZ2U9e2l0ZW19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMucHJvcHMuZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0PXt0aGlzLnByb3BzLnNlbGVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb249e3RoaXMucHJvcHMuc2VsZWN0aW9ufSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDogPGRpdiBjbGFzc05hbWU9XCJibGFuay1hdmF0YXJcIiAvPn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICdzZWxlY3Rpb24nOiBudWxsLFxuICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgc2VsZWN0ID0gKGltYWdlKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzZWxlY3Rpb246IGltYWdlXG4gICAgfSk7XG4gIH07XG5cbiAgc2F2ZSA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS5pc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICdpc0xvYWRpbmcnOiB0cnVlXG4gICAgfSk7XG5cbiAgICBhamF4LnBvc3QodGhpcy5wcm9wcy51c2VyLmFwaV91cmwuYXZhdGFyLCB7XG4gICAgICBhdmF0YXI6ICdnYWxsZXJpZXMnLFxuICAgICAgaW1hZ2U6IHRoaXMuc3RhdGUuc2VsZWN0aW9uXG4gICAgfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAnaXNMb2FkaW5nJzogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICBzbmFja2Jhci5zdWNjZXNzKHJlc3BvbnNlLmRldGFpbCk7XG4gICAgICB0aGlzLnByb3BzLm9uQ29tcGxldGUocmVzcG9uc2UuYXZhdGFyX2hhc2gsIHJlc3BvbnNlLm9wdGlvbnMpO1xuICAgIH0sIChyZWplY3Rpb24pID0+IHtcbiAgICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgc25hY2tiYXIuZXJyb3IocmVqZWN0aW9uLmRldGFpbCk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICdpc0xvYWRpbmcnOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJvcHMuc2hvd0Vycm9yKHJlamVjdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtYm9keSBtb2RhbC1hdmF0YXItZ2FsbGVyeVwiPlxuXG4gICAgICAgIHt0aGlzLnByb3BzLm9wdGlvbnMuZ2FsbGVyaWVzLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgIHJldHVybiA8R2FsbGVyeSBuYW1lPXtpdGVtLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcz17aXRlbS5pbWFnZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbj17dGhpcy5zdGF0ZS5zZWxlY3Rpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0PXt0aGlzLnNlbGVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtpfSAvPjtcbiAgICAgICAgfSl9XG5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC02IGNvbC1tZC1vZmZzZXQtM1wiPlxuXG4gICAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e3RoaXMuc2F2ZX1cbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZz17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXshdGhpcy5zdGF0ZS5zZWxlY3Rpb259XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1wcmltYXJ5IGJ0bi1ibG9ja1wiPlxuICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5zZWxlY3Rpb24gPyBnZXR0ZXh0KFwiU2F2ZSBjaG9pY2VcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0dGV4dChcIlNlbGVjdCBhdmF0YXJcIil9XG4gICAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgICAgPEJ1dHRvbiBvbkNsaWNrPXt0aGlzLnByb3BzLnNob3dJbmRleH1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4tZGVmYXVsdCBidG4tYmxvY2tcIj5cbiAgICAgICAgICAgICAge2dldHRleHQoXCJDYW5jZWxcIil9XG4gICAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBdmF0YXIgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYXZhdGFyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgQnV0dG9uIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2J1dHRvbic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IExvYWRlciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9sb2FkZXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JztcbmltcG9ydCBzbmFja2JhciBmcm9tICdtaXNhZ28vc2VydmljZXMvc25hY2tiYXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICdpc0xvYWRpbmcnOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjYWxsQXBpKGF2YXRhclR5cGUpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5pc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICdpc0xvYWRpbmcnOiB0cnVlXG4gICAgfSk7XG5cbiAgICBhamF4LnBvc3QodGhpcy5wcm9wcy51c2VyLmFwaV91cmwuYXZhdGFyLCB7XG4gICAgICBhdmF0YXI6IGF2YXRhclR5cGVcbiAgICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICdpc0xvYWRpbmcnOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIHNuYWNrYmFyLnN1Y2Nlc3MocmVzcG9uc2UuZGV0YWlsKTtcbiAgICAgIHRoaXMucHJvcHMub25Db21wbGV0ZShyZXNwb25zZS5hdmF0YXJfaGFzaCwgcmVzcG9uc2Uub3B0aW9ucyk7XG4gICAgfSwgKHJlamVjdGlvbikgPT4ge1xuICAgICAgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICBzbmFja2Jhci5lcnJvcihyZWplY3Rpb24uZGV0YWlsKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zaG93RXJyb3IocmVqZWN0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgc2V0R3JhdmF0YXIgPSAoKSA9PiB7XG4gICAgdGhpcy5jYWxsQXBpKCdncmF2YXRhcicpO1xuICB9O1xuXG4gIHNldEdlbmVyYXRlZCA9ICgpID0+IHtcbiAgICB0aGlzLmNhbGxBcGkoJ2dlbmVyYXRlZCcpO1xuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIGdldEdyYXZhdGFyQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMuZ3JhdmF0YXIpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8QnV0dG9uIG9uQ2xpY2s9e3RoaXMuc2V0R3JhdmF0YXJ9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuLWRlZmF1bHQgYnRuLWJsb2NrIGJ0bi1hdmF0YXItZ3JhdmF0YXJcIj5cbiAgICAgICAge2dldHRleHQoXCJEb3dubG9hZCBteSBHcmF2YXRhclwiKX1cbiAgICAgIDwvQnV0dG9uPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldENyb3BCdXR0b24oKSB7XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5jcm9wX29yZykge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxCdXR0b24gb25DbGljaz17dGhpcy5wcm9wcy5zaG93Q3JvcH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4tZGVmYXVsdCBidG4tYmxvY2sgYnRuLWF2YXRhci1jcm9wXCI+XG4gICAgICAgIHtnZXR0ZXh0KFwiUmUtY3JvcCB1cGxvYWRlZCBpbWFnZVwiKX1cbiAgICAgIDwvQnV0dG9uPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldFVwbG9hZEJ1dHRvbigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLnVwbG9hZCkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxCdXR0b24gb25DbGljaz17dGhpcy5wcm9wcy5zaG93VXBsb2FkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1kZWZhdWx0IGJ0bi1ibG9jayBidG4tYXZhdGFyLXVwbG9hZFwiPlxuICAgICAgICB7Z2V0dGV4dChcIlVwbG9hZCBuZXcgaW1hZ2VcIil9XG4gICAgICA8L0J1dHRvbj47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRHYWxsZXJ5QnV0dG9uKCkge1xuICAgIGlmICh0aGlzLnByb3BzLm9wdGlvbnMuZ2FsbGVyaWVzKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPEJ1dHRvbiBvbkNsaWNrPXt0aGlzLnByb3BzLnNob3dHYWxsZXJ5fVxuICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0bi1kZWZhdWx0IGJ0bi1ibG9jayBidG4tYXZhdGFyLWdhbGxlcnlcIj5cbiAgICAgICAge2dldHRleHQoXCJQaWNrIGF2YXRhciBmcm9tIGdhbGxlcnlcIil9XG4gICAgICA8L0J1dHRvbj47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRBdmF0YXJQcmV2aWV3KCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICBsZXQgdXNlclBldmlldyA9IHtcbiAgICAgIGlkOiB0aGlzLnByb3BzLnVzZXIuaWQsXG4gICAgICBhdmF0YXJfaGFzaDogdGhpcy5wcm9wcy5vcHRpb25zLmF2YXRhcl9oYXNoXG4gICAgfVxuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgICBpZiAodGhpcy5zdGF0ZS5pc0xvYWRpbmcpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImF2YXRhci1wcmV2aWV3IHByZXZpZXctbG9hZGluZ1wiPlxuICAgICAgICA8QXZhdGFyIHVzZXI9e3VzZXJQZXZpZXd9IHNpemU9XCIyMDBcIiAvPlxuICAgICAgICA8TG9hZGVyIC8+XG4gICAgICA8L2Rpdj47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJhdmF0YXItcHJldmlld1wiPlxuICAgICAgICA8QXZhdGFyIHVzZXI9e3VzZXJQZXZpZXd9IHNpemU9XCIyMDBcIiAvPlxuICAgICAgPC9kaXY+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWJvZHkgbW9kYWwtYXZhdGFyLWluZGV4XCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC01XCI+XG5cbiAgICAgICAgICB7dGhpcy5nZXRBdmF0YXJQcmV2aWV3KCl9XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTdcIj5cblxuICAgICAgICAgIHt0aGlzLmdldEdyYXZhdGFyQnV0dG9uKCl9XG5cbiAgICAgICAgICA8QnV0dG9uIG9uQ2xpY2s9e3RoaXMuc2V0R2VuZXJhdGVkfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuLWRlZmF1bHQgYnRuLWJsb2NrIGJ0bi1hdmF0YXItZ2VuZXJhdGVcIj5cbiAgICAgICAgICAgIHtnZXR0ZXh0KFwiR2VuZXJhdGUgbXkgaW5kaXZpZHVhbCBhdmF0YXJcIil9XG4gICAgICAgICAgPC9CdXR0b24+XG5cbiAgICAgICAgICB7dGhpcy5nZXRDcm9wQnV0dG9uKCl9XG4gICAgICAgICAge3RoaXMuZ2V0VXBsb2FkQnV0dG9uKCl9XG4gICAgICAgICAge3RoaXMuZ2V0R2FsbGVyeUJ1dHRvbigpfVxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEF2YXRhckluZGV4IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2NoYW5nZS1hdmF0YXIvaW5kZXgnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBBdmF0YXJDcm9wIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2NoYW5nZS1hdmF0YXIvY3JvcCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEF2YXRhclVwbG9hZCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9jaGFuZ2UtYXZhdGFyL3VwbG9hZCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEF2YXRhckdhbGxlcnkgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvY2hhbmdlLWF2YXRhci9nYWxsZXJ5JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgTG9hZGVyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL21vZGFsLWxvYWRlcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IHsgdXBkYXRlQXZhdGFyIH0gZnJvbSAnbWlzYWdvL3JlZHVjZXJzL3VzZXJzJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7XG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBjbGFzcyBDaGFuZ2VBdmF0YXJFcnJvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldEVycm9yUmVhc29uKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJlYXNvbikge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxwIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7X19odG1sOiB0aGlzLnByb3BzLnJlYXNvbn19IC8+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1ib2R5XCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtaWNvblwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgcmVtb3ZlX2NpcmNsZV9vdXRsaW5lXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLWJvZHlcIj5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwibGVhZFwiPlxuICAgICAgICAgIHt0aGlzLnByb3BzLm1lc3NhZ2V9XG4gICAgICAgIDwvcD5cbiAgICAgICAge3RoaXMuZ2V0RXJyb3JSZWFzb24oKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgYWpheC5nZXQodGhpcy5wcm9wcy51c2VyLmFwaV91cmwuYXZhdGFyKS50aGVuKChvcHRpb25zKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgJ2NvbXBvbmVudCc6IEF2YXRhckluZGV4LFxuICAgICAgICAnb3B0aW9ucyc6IG9wdGlvbnMsXG4gICAgICAgICdlcnJvcic6IG51bGxcbiAgICAgIH0pO1xuICAgIH0sIChyZWplY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuc2hvd0Vycm9yKHJlamVjdGlvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIHNob3dFcnJvciA9IChlcnJvcikgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZXJyb3JcbiAgICB9KTtcbiAgfTtcblxuICBzaG93SW5kZXggPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAnY29tcG9uZW50JzogQXZhdGFySW5kZXhcbiAgICB9KTtcbiAgfTtcblxuICBzaG93VXBsb2FkID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgJ2NvbXBvbmVudCc6IEF2YXRhclVwbG9hZFxuICAgIH0pO1xuICB9O1xuXG4gIHNob3dDcm9wID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgJ2NvbXBvbmVudCc6IEF2YXRhckNyb3BcbiAgICB9KTtcbiAgfTtcblxuICBzaG93R2FsbGVyeSA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICdjb21wb25lbnQnOiBBdmF0YXJHYWxsZXJ5XG4gICAgfSk7XG4gIH07XG5cbiAgY29tcGxldGVGbG93ID0gKGF2YXRhckhhc2gsIG9wdGlvbnMpID0+IHtcbiAgICBzdG9yZS5kaXNwYXRjaCh1cGRhdGVBdmF0YXIodGhpcy5wcm9wcy51c2VyLCBhdmF0YXJIYXNoKSk7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICdjb21wb25lbnQnOiBBdmF0YXJJbmRleCxcbiAgICAgIG9wdGlvbnNcbiAgICB9KTtcbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICBnZXRCb2R5KCkge1xuICAgIGlmICh0aGlzLnN0YXRlKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5lcnJvcikge1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICAgIHJldHVybiA8Q2hhbmdlQXZhdGFyRXJyb3IgbWVzc2FnZT17dGhpcy5zdGF0ZS5lcnJvci5kZXRhaWx9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uPXt0aGlzLnN0YXRlLmVycm9yLnJlYXNvbn0gLz47XG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICAgIHJldHVybiA8dGhpcy5zdGF0ZS5jb21wb25lbnQgb3B0aW9ucz17dGhpcy5zdGF0ZS5vcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXI9e3RoaXMucHJvcHMudXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlPXt0aGlzLmNvbXBsZXRlRmxvd31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93RXJyb3I9e3RoaXMuc2hvd0Vycm9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dJbmRleD17dGhpcy5zaG93SW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Nyb3A9e3RoaXMuc2hvd0Nyb3B9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1VwbG9hZD17dGhpcy5zaG93VXBsb2FkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dHYWxsZXJ5PXt0aGlzLnNob3dHYWxsZXJ5fSAvPjtcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxMb2FkZXIgLz47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH1cbiAgfVxuXG4gIGdldENsYXNzTmFtZSgpIHtcbiAgIGlmICh0aGlzLnN0YXRlICYmIHRoaXMuc3RhdGUuZXJyb3IpIHtcbiAgICAgIHJldHVybiBcIm1vZGFsLWRpYWxvZyBtb2RhbC1tZXNzYWdlIG1vZGFsLWNoYW5nZS1hdmF0YXJcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwibW9kYWwtZGlhbG9nIG1vZGFsLWNoYW5nZS1hdmF0YXJcIjtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5nZXRDbGFzc05hbWUoKX1cbiAgICAgICAgICAgICAgICByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Z2V0dGV4dChcIkNsb3NlXCIpfT5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGg0IGNsYXNzTmFtZT1cIm1vZGFsLXRpdGxlXCI+e2dldHRleHQoXCJDaGFuZ2UgeW91ciBhdmF0YXJcIil9PC9oND5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAge3RoaXMuZ2V0Qm9keSgpfVxuXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0KHN0YXRlKSB7XG4gIHJldHVybiB7XG4gICAgJ3VzZXInOiBzdGF0ZS5hdXRoLnVzZXJcbiAgfTtcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXZhdGFyQ3JvcCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9jaGFuZ2UtYXZhdGFyL2Nyb3AnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBCdXR0b24gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYnV0dG9uJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IGZpbGVTaXplIGZyb20gJ21pc2Fnby91dGlscy9maWxlLXNpemUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICdpbWFnZSc6IG51bGwsXG4gICAgICAncHJldmlldyc6IG51bGwsXG4gICAgICAncHJvZ3Jlc3MnOiAwLFxuICAgICAgJ3VwbG9hZGVkJzogbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgdmFsaWRhdGVGaWxlKGltYWdlKSB7XG4gICAgaWYgKGltYWdlLnNpemUgPiB0aGlzLnByb3BzLm9wdGlvbnMudXBsb2FkLmxpbWl0KSB7XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIlNlbGVjdGVkIGZpbGUgaXMgdG9vIGJpZy4gKCUoZmlsZXNpemUpcylcIiksIHtcbiAgICAgICAgJ2ZpbGVzaXplJzogZmlsZVNpemUoaW1hZ2Uuc2l6ZSlcbiAgICAgIH0sIHRydWUpO1xuICAgIH1cblxuICAgIGxldCBpbnZhbGlkVHlwZU1zZyA9IGdldHRleHQoXCJTZWxlY3RlZCBmaWxlIHR5cGUgaXMgbm90IHN1cHBvcnRlZC5cIik7XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy51cGxvYWQuYWxsb3dlZF9taW1lX3R5cGVzLmluZGV4T2YoaW1hZ2UudHlwZSkgPT09IC0xKSB7XG4gICAgICByZXR1cm4gaW52YWxpZFR5cGVNc2c7XG4gICAgfVxuXG4gICAgbGV0IGV4dGVuc2lvbkZvdW5kID0gZmFsc2U7XG4gICAgbGV0IGxvd2VyZWRGaWxlbmFtZSA9IGltYWdlLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB0aGlzLnByb3BzLm9wdGlvbnMudXBsb2FkLmFsbG93ZWRfZXh0ZW5zaW9ucy5tYXAoZnVuY3Rpb24oZXh0ZW5zaW9uKSB7XG4gICAgICBpZiAobG93ZXJlZEZpbGVuYW1lLnN1YnN0cihleHRlbnNpb24ubGVuZ3RoICogLTEpID09PSBleHRlbnNpb24pIHtcbiAgICAgICAgZXh0ZW5zaW9uRm91bmQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKCFleHRlbnNpb25Gb3VuZCkge1xuICAgICAgcmV0dXJuIGludmFsaWRUeXBlTXNnO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgcGlja0ZpbGUgPSAoKSA9PiB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F2YXRhci1oaWRkZW4tdXBsb2FkJykuY2xpY2soKTtcbiAgfTtcblxuICB1cGxvYWRGaWxlID0gKCkgPT4ge1xuICAgIGxldCBpbWFnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdmF0YXItaGlkZGVuLXVwbG9hZCcpLmZpbGVzWzBdO1xuXG4gICAgbGV0IHZhbGlkYXRpb25FcnJvciA9IHRoaXMudmFsaWRhdGVGaWxlKGltYWdlKTtcbiAgICBpZiAodmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICBzbmFja2Jhci5lcnJvcih2YWxpZGF0aW9uRXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgaW1hZ2UsXG4gICAgICAncHJldmlldyc6IFVSTC5jcmVhdGVPYmplY3RVUkwoaW1hZ2UpLFxuICAgICAgJ3Byb2dyZXNzJzogMFxuICAgIH0pO1xuXG4gICAgbGV0IGRhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBkYXRhLmFwcGVuZCgnYXZhdGFyJywgJ3VwbG9hZCcpO1xuICAgIGRhdGEuYXBwZW5kKCdpbWFnZScsIGltYWdlKTtcblxuICAgIGFqYXgudXBsb2FkKHRoaXMucHJvcHMudXNlci5hcGlfdXJsLmF2YXRhciwgZGF0YSwgKHByb2dyZXNzKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgcHJvZ3Jlc3NcbiAgICAgIH0pO1xuICAgIH0pLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAnb3B0aW9ucyc6IGRhdGEub3B0aW9ucyxcbiAgICAgICAgJ3VwbG9hZGVkJzogZGF0YS5kZXRhaWxcbiAgICAgIH0pO1xuICAgICAgc25hY2tiYXIuaW5mbyhnZXR0ZXh0KFwiWW91ciBpbWFnZSBoYXMgYmVlbiB1cGxvYWRlZCBhbmQgeW91IG1heSBub3cgY3JvcCBpdC5cIikpO1xuICAgIH0sIChyZWplY3Rpb24pID0+IHtcbiAgICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgc25hY2tiYXIuZXJyb3IocmVqZWN0aW9uLmRldGFpbCk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICdpc0xvYWRpbmcnOiBmYWxzZSxcbiAgICAgICAgICAnaW1hZ2UnOiBudWxsLFxuICAgICAgICAgICdwcm9ncmVzcyc6IDBcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJvcHMuc2hvd0Vycm9yKHJlamVjdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgZ2V0VXBsb2FkUmVxdWlyZW1lbnRzKG9wdGlvbnMpIHtcbiAgICBsZXQgZXh0ZW5zaW9ucyA9IG9wdGlvbnMuYWxsb3dlZF9leHRlbnNpb25zLm1hcChmdW5jdGlvbihleHRlbnNpb24pIHtcbiAgICAgIHJldHVybiBleHRlbnNpb24uc3Vic3RyKDEpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGludGVycG9sYXRlKGdldHRleHQoXCIlKGZpbGVzKXMgZmlsZXMgc21hbGxlciB0aGFuICUobGltaXQpc1wiKSwge1xuICAgICAgICAnZmlsZXMnOiBleHRlbnNpb25zLmpvaW4oJywgJyksXG4gICAgICAgICdsaW1pdCc6IGZpbGVTaXplKG9wdGlvbnMubGltaXQpXG4gICAgICB9LCB0cnVlKTtcbiAgfVxuXG4gIGdldFVwbG9hZEJ1dHRvbigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtYm9keSBtb2RhbC1hdmF0YXItdXBsb2FkXCI+XG4gICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwiYnRuLXBpY2stZmlsZVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5waWNrRmlsZX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICBpbnB1dFxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHtnZXR0ZXh0KFwiU2VsZWN0IGZpbGVcIil9XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkXCI+XG4gICAgICAgICAge3RoaXMuZ2V0VXBsb2FkUmVxdWlyZW1lbnRzKHRoaXMucHJvcHMub3B0aW9ucy51cGxvYWQpfVxuICAgICAgICA8L3A+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxuICBnZXRVcGxvYWRQcm9ncmVzc0xhYmVsKCkge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZShnZXR0ZXh0KFwiJShwcm9ncmVzcylzICUgY29tcGxldGVcIiksIHtcbiAgICAgICAgJ3Byb2dyZXNzJzogdGhpcy5zdGF0ZS5wcm9ncmVzc1xuICAgICAgfSwgdHJ1ZSk7XG4gIH1cblxuICBnZXRVcGxvYWRQcm9ncmVzcygpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtYm9keSBtb2RhbC1hdmF0YXItdXBsb2FkXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXBsb2FkLXByb2dyZXNzXCI+XG4gICAgICAgICAgPGltZyBzcmM9e3RoaXMuc3RhdGUucHJldmlld30gLz5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHJvZ3Jlc3NcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHJvZ3Jlc3MtYmFyXCIgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgICAgICAgICAgICAgYXJpYS12YWx1ZW5vdz1cInt0aGlzLnN0YXRlLnByb2dyZXNzfVwiXG4gICAgICAgICAgICAgICAgIGFyaWEtdmFsdWVtaW49XCIwXCIgYXJpYS12YWx1ZW1heD1cIjEwMFwiXG4gICAgICAgICAgICAgICAgIHN0eWxlPXt7d2lkdGg6IHRoaXMuc3RhdGUucHJvZ3Jlc3MgKyAnJSd9fT5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPnt0aGlzLmdldFVwbG9hZFByb2dyZXNzTGFiZWwoKX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxuICByZW5kZXJVcGxvYWQoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2PlxuICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICBpZD1cImF2YXRhci1oaWRkZW4tdXBsb2FkXCJcbiAgICAgICAgICAgICBjbGFzc05hbWU9XCJoaWRkZW4tZmlsZS11cGxvYWRcIlxuICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLnVwbG9hZEZpbGV9IC8+XG4gICAgICB7dGhpcy5zdGF0ZS5pbWFnZSA/IHRoaXMuZ2V0VXBsb2FkUHJvZ3Jlc3MoKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmdldFVwbG9hZEJ1dHRvbigpfVxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtNiBjb2wtbWQtb2Zmc2V0LTNcIj5cblxuICAgICAgICAgIDxCdXR0b24gb25DbGljaz17dGhpcy5wcm9wcy5zaG93SW5kZXh9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlZD17ISF0aGlzLnN0YXRlLmltYWdlfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuLWRlZmF1bHQgYnRuLWJsb2NrXCI+XG4gICAgICAgICAgICB7Z2V0dGV4dChcIkNhbmNlbFwiKX1cbiAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG5cbiAgcmVuZGVyQ3JvcCgpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxBdmF0YXJDcm9wIG9wdGlvbnM9e3RoaXMuc3RhdGUub3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgdXNlcj17dGhpcy5wcm9wcy51c2VyfVxuICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWQ9e3RoaXMuc3RhdGUudXBsb2FkZWR9XG4gICAgICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGU9e3RoaXMucHJvcHMub25Db21wbGV0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Vycm9yPXt0aGlzLnByb3BzLnNob3dFcnJvcn1cbiAgICAgICAgICAgICAgICAgICAgICAgc2hvd0luZGV4PXt0aGlzLnByb3BzLnNob3dJbmRleH0gLz47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuICh0aGlzLnN0YXRlLnVwbG9hZGVkID8gdGhpcy5yZW5kZXJDcm9wKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnJlbmRlclVwbG9hZCgpKTtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRDbGFzc05hbWUoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuZHJvcGRvd24pIHtcbiAgICAgIHJldHVybiBcImJ0biBidG4tZGVmYXVsdCBidG4tYWxpZ25lZCBidG4taWNvbiBidG4tZHJvcGRvd24tdG9nZ2xlIG9wZW4gaGlkZGVuLW1kIGhpZGRlbi1sZ1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJidG4gYnRuLWRlZmF1bHQgYnRuLWFsaWduZWQgYnRuLWljb24gYnRuLWRyb3Bkb3duLXRvZ2dsZSBoaWRkZW4tbWQgaGlkZGVuLWxnXCI7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGJ1dHRvbiBjbGFzc05hbWU9e3RoaXMuZ2V0Q2xhc3NOYW1lKCl9XG4gICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5wcm9wcy50b2dnbGVOYXZ9XG4gICAgICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9e3RoaXMucHJvcHMuZHJvcGRvd24gPyAndHJ1ZScgOiAnZmFsc2UnfT5cbiAgICAgIDxpIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgbWVudVxuICAgICAgPC9pPlxuICAgIDwvYnV0dG9uPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBpc1ZhbGlkYXRlZCgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMucHJvcHMudmFsaWRhdGlvbiAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgfVxuXG4gIGdldENsYXNzTmFtZSgpIHtcbiAgICBsZXQgY2xhc3NOYW1lID0gJ2Zvcm0tZ3JvdXAnO1xuICAgIGlmICh0aGlzLmlzVmFsaWRhdGVkKCkpIHtcbiAgICAgIGNsYXNzTmFtZSArPSAnIGhhcy1mZWVkYmFjayc7XG4gICAgICBpZiAodGhpcy5wcm9wcy52YWxpZGF0aW9uID09PSBudWxsKSB7XG4gICAgICAgIGNsYXNzTmFtZSArPSAnIGhhcy1zdWNjZXNzJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsYXNzTmFtZSArPSAnIGhhcy1lcnJvcic7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICBnZXRGZWVkYmFjaygpIHtcbiAgICBpZiAodGhpcy5wcm9wcy52YWxpZGF0aW9uKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJoZWxwLWJsb2NrIGVycm9yc1wiPlxuICAgICAgICB7dGhpcy5wcm9wcy52YWxpZGF0aW9uLm1hcCgoZXJyb3IsIGkpID0+IHtcbiAgICAgICAgICByZXR1cm4gPHAga2V5PXt0aGlzLnByb3BzLmZvciArICdGZWVkYmFja0l0ZW0nICsgaX0+e2Vycm9yfTwvcD47XG4gICAgICAgIH0pfVxuICAgICAgPC9kaXY+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0RmVlZGJhY2tJY29uKCkge1xuICAgIGlmICh0aGlzLmlzVmFsaWRhdGVkKCkpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uIGZvcm0tY29udHJvbC1mZWVkYmFja1wiXG4gICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCIga2V5PXt0aGlzLnByb3BzLmZvciArICdGZWVkYmFja0ljb24nfT5cbiAgICAgICAge3RoaXMucHJvcHMudmFsaWRhdGlvbiA/ICdjbGVhcicgOiAnY2hlY2snfVxuICAgICAgPC9zcGFuPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldEZlZWRiYWNrRGVzY3JpcHRpb24oKSB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZGF0ZWQoKSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxzcGFuIGlkPXt0aGlzLnByb3BzLmZvciArICdfc3RhdHVzJ30gY2xhc3NOYW1lPVwic3Itb25seVwiPlxuICAgICAgICB7dGhpcy5wcm9wcy52YWxpZGF0aW9uID8gZ2V0dGV4dCgnKGVycm9yKScpIDogZ2V0dGV4dCgnKHN1Y2Nlc3MpJyl9XG4gICAgICA8L3NwYW4+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0SGVscFRleHQoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuaGVscFRleHQpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8cCBjbGFzc05hbWU9XCJoZWxwLWJsb2NrXCI+e3RoaXMucHJvcHMuaGVscFRleHR9PC9wPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmdldENsYXNzTmFtZSgpfT5cbiAgICAgIDxsYWJlbCBjbGFzc05hbWU9eydjb250cm9sLWxhYmVsICcgKyAodGhpcy5wcm9wcy5sYWJlbENsYXNzIHx8ICcnKX1cbiAgICAgICAgICAgICBodG1sRm9yPXt0aGlzLnByb3BzLmZvciB8fCAnJ30+XG4gICAgICAgIHt0aGlzLnByb3BzLmxhYmVsICsgJzonfVxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNvbnRyb2xDbGFzcyB8fCAnJ30+XG4gICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICB7dGhpcy5nZXRGZWVkYmFja0ljb24oKX1cbiAgICAgICAge3RoaXMuZ2V0RmVlZGJhY2tEZXNjcmlwdGlvbigpfVxuICAgICAgICB7dGhpcy5nZXRGZWVkYmFjaygpfVxuICAgICAgICB7dGhpcy5nZXRIZWxwVGV4dCgpfVxuICAgICAgICB7dGhpcy5wcm9wcy5leHRyYSB8fCBudWxsfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlcXVpcmVkIH0gZnJvbSAnbWlzYWdvL3V0aWxzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5sZXQgdmFsaWRhdGVSZXF1aXJlZCA9IHJlcXVpcmVkKCk7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgdmFsaWRhdGUoKSB7XG4gICAgbGV0IGVycm9ycyA9IHt9O1xuICAgIGlmICghdGhpcy5zdGF0ZS52YWxpZGF0b3JzKSB7XG4gICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIGxldCB2YWxpZGF0b3JzID0ge1xuICAgICAgcmVxdWlyZWQ6IHRoaXMuc3RhdGUudmFsaWRhdG9ycy5yZXF1aXJlZCB8fCB0aGlzLnN0YXRlLnZhbGlkYXRvcnMsXG4gICAgICBvcHRpb25hbDogdGhpcy5zdGF0ZS52YWxpZGF0b3JzLm9wdGlvbmFsIHx8IHt9XG4gICAgfTtcblxuICAgIGxldCB2YWxpZGF0ZWRGaWVsZHMgPSBbXTtcblxuICAgIC8vIGFkZCByZXF1aXJlZCBmaWVsZHMgdG8gdmFsaWRhdGlvblxuICAgIGZvciAobGV0IG5hbWUgaW4gdmFsaWRhdG9ycy5yZXF1aXJlZCkge1xuICAgICAgaWYgKHZhbGlkYXRvcnMucmVxdWlyZWQuaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgICB2YWxpZGF0b3JzLnJlcXVpcmVkW25hbWVdKSB7XG4gICAgICAgIHZhbGlkYXRlZEZpZWxkcy5wdXNoKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkZCBvcHRpb25hbCBmaWVsZHMgdG8gdmFsaWRhdGlvblxuICAgIGZvciAobGV0IG5hbWUgaW4gdmFsaWRhdG9ycy5vcHRpb25hbCkge1xuICAgICAgaWYgKHZhbGlkYXRvcnMub3B0aW9uYWwuaGFzT3duUHJvcGVydHkobmFtZSkgJiZcbiAgICAgICAgICB2YWxpZGF0b3JzLm9wdGlvbmFsW25hbWVdKSB7XG4gICAgICAgIHZhbGlkYXRlZEZpZWxkcy5wdXNoKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHZhbGlkYXRlIGZpZWxkcyB2YWx1ZXNcbiAgICBmb3IgKGxldCBpIGluIHZhbGlkYXRlZEZpZWxkcykge1xuICAgICAgbGV0IG5hbWUgPSB2YWxpZGF0ZWRGaWVsZHNbaV07XG4gICAgICBsZXQgZmllbGRFcnJvcnMgPSB0aGlzLnZhbGlkYXRlRmllbGQobmFtZSwgdGhpcy5zdGF0ZVtuYW1lXSk7XG5cbiAgICAgIGlmIChmaWVsZEVycm9ycyA9PT0gbnVsbCkge1xuICAgICAgICBlcnJvcnNbbmFtZV0gPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZEVycm9ycykge1xuICAgICAgICBlcnJvcnNbbmFtZV0gPSBmaWVsZEVycm9ycztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3JzO1xuICB9XG5cbiAgaXNWYWxpZCgpIHtcbiAgICBsZXQgZXJyb3JzID0gdGhpcy52YWxpZGF0ZSgpO1xuICAgIGZvciAobGV0IGZpZWxkIGluIGVycm9ycykge1xuICAgICAgaWYgKGVycm9ycy5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpIHtcbiAgICAgICAgaWYgKGVycm9yc1tmaWVsZF0gIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHZhbGlkYXRlRmllbGQobmFtZSwgdmFsdWUpIHtcbiAgICBsZXQgZXJyb3JzID0gW107XG4gICAgaWYgKCF0aGlzLnN0YXRlLnZhbGlkYXRvcnMpIHtcbiAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRvcnMgPSB7XG4gICAgICByZXF1aXJlZDogKHRoaXMuc3RhdGUudmFsaWRhdG9ycy5yZXF1aXJlZCB8fCB0aGlzLnN0YXRlLnZhbGlkYXRvcnMpW25hbWVdLFxuICAgICAgb3B0aW9uYWw6ICh0aGlzLnN0YXRlLnZhbGlkYXRvcnMub3B0aW9uYWwgfHwge30pW25hbWVdXG4gICAgfTtcblxuICAgIGxldCByZXF1aXJlZEVycm9yID0gdmFsaWRhdGVSZXF1aXJlZCh2YWx1ZSkgfHwgZmFsc2U7XG5cbiAgICBpZiAodmFsaWRhdG9ycy5yZXF1aXJlZCkge1xuICAgICAgaWYgKHJlcXVpcmVkRXJyb3IpIHtcbiAgICAgICAgZXJyb3JzID0gW3JlcXVpcmVkRXJyb3JdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSBpbiB2YWxpZGF0b3JzLnJlcXVpcmVkKSB7XG4gICAgICAgICAgbGV0IHZhbGlkYXRpb25FcnJvciA9IHZhbGlkYXRvcnMucmVxdWlyZWRbaV0odmFsdWUpO1xuICAgICAgICAgIGlmICh2YWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKHZhbGlkYXRpb25FcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlcnJvcnMubGVuZ3RoID8gZXJyb3JzIDogbnVsbDtcbiAgICB9IGVsc2UgaWYgKHJlcXVpcmVkRXJyb3IgPT09IGZhbHNlICYmIHZhbGlkYXRvcnMub3B0aW9uYWwpIHtcbiAgICAgIGZvciAobGV0IGkgaW4gdmFsaWRhdG9ycy5vcHRpb25hbCkge1xuICAgICAgICBsZXQgdmFsaWRhdGlvbkVycm9yID0gdmFsaWRhdG9ycy5vcHRpb25hbFtpXSh2YWx1ZSk7XG4gICAgICAgIGlmICh2YWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgICBlcnJvcnMucHVzaCh2YWxpZGF0aW9uRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlcnJvcnMubGVuZ3RoID8gZXJyb3JzIDogbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7IC8vIGZhbHNlID09PSBmaWVsZCB3YXNuJ3QgdmFsaWRhdGVkXG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIGJpbmRJbnB1dCA9IChuYW1lKSA9PiB7XG4gICAgcmV0dXJuIChldmVudCkgPT4ge1xuICAgICAgbGV0IG5ld1N0YXRlID0ge1xuICAgICAgICBbbmFtZV06IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgfTtcblxuICAgICAgbGV0IGZvcm1FcnJvcnMgPSB0aGlzLnN0YXRlLmVycm9ycyB8fCB7fTtcbiAgICAgIGZvcm1FcnJvcnNbbmFtZV0gPSB0aGlzLnZhbGlkYXRlRmllbGQobmFtZSwgbmV3U3RhdGVbbmFtZV0pO1xuICAgICAgbmV3U3RhdGUuZXJyb3JzID0gZm9ybUVycm9ycztcblxuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfVxuICB9O1xuXG4gIGNsZWFuKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc2VuZCgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGhhbmRsZVN1Y2Nlc3Moc3VjY2Vzcykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKHJlamVjdGlvbikge1xuICAgIHNuYWNrYmFyLmFwaUVycm9yKHJlamVjdGlvbik7XG4gIH1cblxuICBoYW5kbGVTdWJtaXQgPSAoZXZlbnQpID0+IHtcbiAgICAvLyB3ZSBkb24ndCByZWxvYWQgcGFnZSBvbiBzdWJtaXNzaW9uc1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICBpZiAodGhpcy5zdGF0ZS5pc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGVhbigpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtpc0xvYWRpbmc6IHRydWV9KTtcbiAgICAgIGxldCBwcm9taXNlID0gdGhpcy5zZW5kKCk7XG5cbiAgICAgIGlmIChwcm9taXNlKSB7XG4gICAgICAgIHByb21pc2UudGhlbigoc3VjY2VzcykgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2lzTG9hZGluZzogZmFsc2V9KTtcbiAgICAgICAgICB0aGlzLmhhbmRsZVN1Y2Nlc3Moc3VjY2Vzcyk7XG4gICAgICAgIH0sIChyZWplY3Rpb24pID0+IHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtpc0xvYWRpbmc6IGZhbHNlfSk7XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihyZWplY3Rpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2lzTG9hZGluZzogZmFsc2V9KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBpc0FjdGl2ZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5pc0NvbnRyb2xsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmlzQWN0aXZlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5wYXRoKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZS5pbmRleE9mKHRoaXMucHJvcHMucGF0aCkgPT09IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICAgIHJldHVybiAodGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgJycpICsgJyAnKyAodGhpcy5wcm9wcy5hY3RpdmVDbGFzc05hbWUgfHwgJ2FjdGl2ZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgJyc7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8vIGpzaGludCBpZ25vcmU6c3RhcnRcbiAgICByZXR1cm4gPGxpIGNsYXNzTmFtZT17dGhpcy5nZXRDbGFzc05hbWUoKX0+XG4gICAgICB7dGhpcy5wcm9wcy5jaGlsZHJlbn1cbiAgICA8L2xpPjtcbiAgICAvLyBqc2hpbnQgaWdub3JlOmVuZFxuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5wcm9wcy5jbGFzc05hbWUgfHwgXCJsb2FkZXJcIn0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImxvYWRlci1zcGlubmluZy13aGVlbFwiPjwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IExvYWRlciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9sb2FkZXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWJvZHkgbW9kYWwtbG9hZGVyXCI+XG4gICAgICA8TG9hZGVyIC8+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgUGFuZWxNZXNzYWdlIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3BhbmVsLW1lc3NhZ2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFBhbmVsTWVzc2FnZSB7XG4gIGdldEhlbHBUZXh0KCkge1xuICAgIGlmICh0aGlzLnByb3BzLmhlbHBUZXh0KSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPHAgY2xhc3NOYW1lPVwiaGVscC1ibG9ja1wiPlxuICAgICAgICB7dGhpcy5wcm9wcy5oZWxwVGV4dH1cbiAgICAgIDwvcD47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWJvZHlcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1pY29uXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5pY29uIHx8ICdpbmZvX291dGxpbmUnfVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1ib2R5XCI+XG4gICAgICAgIDxwIGNsYXNzTmFtZT1cImxlYWRcIj5cbiAgICAgICAgICB7dGhpcy5wcm9wcy5tZXNzYWdlfVxuICAgICAgICA8L3A+XG4gICAgICAgIHt0aGlzLmdldEhlbHBUZXh0KCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUGFuZWxMb2FkZXIgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvcGFuZWwtbG9hZGVyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJwYW5lbCBwYW5lbC1kZWZhdWx0IHBhbmVsLWZvcm1cIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtaGVhZGluZ1wiPlxuICAgICAgICA8aDMgY2xhc3NOYW1lPVwicGFuZWwtdGl0bGVcIj57Z2V0dGV4dChcIkNoYW5nZSB1c2VybmFtZVwiKX08L2gzPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxQYW5lbExvYWRlciAvPlxuXG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFBhbmVsTWVzc2FnZSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9wYW5lbC1tZXNzYWdlJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0SGVscFRleHQoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMub3B0aW9ucy5uZXh0X29uKSB7XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUoXG4gICAgICAgICAgZ2V0dGV4dChcIllvdSB3aWxsIGJlIGFibGUgdG8gY2hhbmdlIHlvdXIgdXNlcm5hbWUgJShuZXh0X2NoYW5nZSlzLlwiKSxcbiAgICAgICAgICB7J25leHRfY2hhbmdlJzogdGhpcy5wcm9wcy5vcHRpb25zLm5leHRfb24uZnJvbU5vdygpfSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiWW91IGhhdmUgdXNlZCB1cCBhdmFpbGFibGUgbmFtZSBjaGFuZ2VzLlwiKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsIHBhbmVsLWRlZmF1bHQgcGFuZWwtZm9ybVwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1oZWFkaW5nXCI+XG4gICAgICAgIDxoMyBjbGFzc05hbWU9XCJwYW5lbC10aXRsZVwiPntnZXR0ZXh0KFwiQ2hhbmdlIHVzZXJuYW1lXCIpfTwvaDM+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPFBhbmVsTWVzc2FnZSBtZXNzYWdlPXtnZXR0ZXh0KFwiWW91IGNhbid0IGNoYW5nZSB5b3VyIHVzZXJuYW1lIGF0IHRoZSBtb21lbnQuXCIpfVxuICAgICAgICAgICAgICAgICAgICBoZWxwVGV4dD17dGhpcy5nZXRIZWxwVGV4dCgpfSAvPlxuXG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEJ1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBGb3JtIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2Zvcm0nO1xuaW1wb3J0IEZvcm1Hcm91cCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9mb3JtLWdyb3VwJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7XG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJztcbmltcG9ydCAqIGFzIHZhbGlkYXRvcnMgZnJvbSAnbWlzYWdvL3V0aWxzL3ZhbGlkYXRvcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIEZvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICB1c2VybmFtZTogJycsXG5cbiAgICAgIHZhbGlkYXRvcnM6IHtcbiAgICAgICAgdXNlcm5hbWU6IFtcbiAgICAgICAgICB2YWxpZGF0b3JzLnVzZXJuYW1lQ29udGVudCgpLFxuICAgICAgICAgIHZhbGlkYXRvcnMudXNlcm5hbWVNaW5MZW5ndGgoe1xuICAgICAgICAgICAgdXNlcm5hbWVfbGVuZ3RoX21pbjogcHJvcHMub3B0aW9ucy5sZW5ndGhfbWluXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdmFsaWRhdG9ycy51c2VybmFtZU1heExlbmd0aCh7XG4gICAgICAgICAgICB1c2VybmFtZV9sZW5ndGhfbWF4OiBwcm9wcy5vcHRpb25zLmxlbmd0aF9tYXhcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9LFxuXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGdldEhlbHBUZXh0KCkge1xuICAgIGxldCBwaHJhc2VzID0gW107XG5cbiAgICBpZiAodGhpcy5wcm9wcy5vcHRpb25zLmNoYW5nZXNfbGVmdCA+IDApIHtcbiAgICAgIGxldCBtZXNzYWdlID0gbmdldHRleHQoXG4gICAgICAgIFwiWW91IGNhbiBjaGFuZ2UgeW91ciB1c2VybmFtZSAlKGNoYW5nZXNfbGVmdClzIG1vcmUgdGltZS5cIixcbiAgICAgICAgXCJZb3UgY2FuIGNoYW5nZSB5b3VyIHVzZXJuYW1lICUoY2hhbmdlc19sZWZ0KXMgbW9yZSB0aW1lcy5cIixcbiAgICAgICAgdGhpcy5wcm9wcy5vcHRpb25zLmNoYW5nZXNfbGVmdCk7XG5cbiAgICAgIHBocmFzZXMucHVzaChpbnRlcnBvbGF0ZShtZXNzYWdlLCB7XG4gICAgICAgICdjaGFuZ2VzX2xlZnQnOiB0aGlzLnByb3BzLm9wdGlvbnMuY2hhbmdlc19sZWZ0XG4gICAgICB9LCB0cnVlKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMudXNlci5hY2wubmFtZV9jaGFuZ2VzX2V4cGlyZSA+IDApIHtcbiAgICAgIGxldCBtZXNzYWdlID0gbmdldHRleHQoXG4gICAgICAgIFwiVXNlZCBjaGFuZ2VzIHJlZGVlbSBhZnRlciAlKG5hbWVfY2hhbmdlc19leHBpcmUpcyBkYXkuXCIsXG4gICAgICAgIFwiVXNlZCBjaGFuZ2VzIHJlZGVlbSBhZnRlciAlKG5hbWVfY2hhbmdlc19leHBpcmUpcyBkYXlzLlwiLFxuICAgICAgICB0aGlzLnByb3BzLnVzZXIuYWNsLm5hbWVfY2hhbmdlc19leHBpcmUpO1xuXG4gICAgICBwaHJhc2VzLnB1c2goaW50ZXJwb2xhdGUobWVzc2FnZSwge1xuICAgICAgICAnbmFtZV9jaGFuZ2VzX2V4cGlyZSc6IHRoaXMucHJvcHMudXNlci5hY2wubmFtZV9jaGFuZ2VzX2V4cGlyZVxuICAgICAgfSwgdHJ1ZSkpO1xuICAgIH1cblxuICAgIHJldHVybiBwaHJhc2VzLmxlbmd0aCA/IHBocmFzZXMuam9pbignICcpIDogbnVsbDtcbiAgfVxuXG4gIGNsZWFuKCkge1xuICAgIGxldCBlcnJvcnMgPSB0aGlzLnZhbGlkYXRlKCk7XG4gICAgaWYgKGVycm9ycy51c2VybmFtZSkge1xuICAgICAgc25hY2tiYXIuZXJyb3IoZXJyb3JzLnVzZXJuYW1lWzBdKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGlmICh0aGlzLnN0YXRlLnVzZXJuYW1lLnRyaW0oKSA9PT0gdGhpcy5wcm9wcy51c2VyLnVzZXJuYW1lKSB7XG4gICAgICBzbmFja2Jhci5pbmZvKGdldHRleHQoXCJZb3VyIG5ldyB1c2VybmFtZSBpcyBzYW1lIGFzIGN1cnJlbnQgb25lLlwiKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNlbmQoKSB7XG4gICAgcmV0dXJuIGFqYXgucG9zdCh0aGlzLnByb3BzLnVzZXIuYXBpX3VybC51c2VybmFtZSwge1xuICAgICAgJ3VzZXJuYW1lJzogdGhpcy5zdGF0ZS51c2VybmFtZVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU3VjY2VzcyhzdWNjZXNzKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAndXNlcm5hbWUnOiAnJ1xuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9wcy5jb21wbGV0ZShzdWNjZXNzLnVzZXJuYW1lLCBzdWNjZXNzLnNsdWcsIHN1Y2Nlc3Mub3B0aW9ucyk7XG4gIH1cblxuICBoYW5kbGVFcnJvcihyZWplY3Rpb24pIHtcbiAgICBzbmFja2Jhci5hcGlFcnJvcihyZWplY3Rpb24pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGZvcm0gb25TdWJtaXQ9e3RoaXMuaGFuZGxlU3VibWl0fSBjbGFzc05hbWU9XCJmb3JtLWhvcml6b250YWxcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwgcGFuZWwtZGVmYXVsdCBwYW5lbC1mb3JtXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtaGVhZGluZ1wiPlxuICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJwYW5lbC10aXRsZVwiPntnZXR0ZXh0KFwiQ2hhbmdlIHVzZXJuYW1lXCIpfTwvaDM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWJvZHlcIj5cblxuICAgICAgICAgIDxGb3JtR3JvdXAgbGFiZWw9e2dldHRleHQoXCJOZXcgdXNlcm5hbWVcIil9IGZvcj1cImlkX3VzZXJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgIGxhYmVsQ2xhc3M9XCJjb2wtc20tNFwiIGNvbnRyb2xDbGFzcz1cImNvbC1zbS04XCJcbiAgICAgICAgICAgICAgICAgICAgIGhlbHBUZXh0PXt0aGlzLmdldEhlbHBUZXh0KCl9PlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJpZF91c2VybmFtZVwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgndXNlcm5hbWUnKX1cbiAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS51c2VybmFtZX0gLz5cbiAgICAgICAgICA8L0Zvcm1Hcm91cD5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1mb290ZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtc20tOCBjb2wtc20tb2Zmc2V0LTRcIj5cblxuICAgICAgICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cImJ0bi1wcmltYXJ5XCIgbG9hZGluZz17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9PlxuICAgICAgICAgICAgICAgIHtnZXR0ZXh0KFwiQ2hhbmdlIHVzZXJuYW1lXCIpfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBGb3JtTG9hZGluZyBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9vcHRpb25zL2NoYW5nZS11c2VybmFtZS9mb3JtLWxvYWRpbmcnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBGb3JtTG9ja2VkIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL29wdGlvbnMvY2hhbmdlLXVzZXJuYW1lL2Zvcm0tbG9ja2VkJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgRm9ybSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9vcHRpb25zL2NoYW5nZS11c2VybmFtZS9mb3JtJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgVXNlcm5hbWVIaXN0b3J5IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXJuYW1lLWhpc3RvcnknOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCB7IGRlaHlkcmF0ZSwgYWRkTmFtZUNoYW5nZSB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy91c2VybmFtZS1oaXN0b3J5JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgeyB1cGRhdGVVc2VybmFtZSB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy91c2Vycyc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IGFqYXggZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2FqYXgnO1xuaW1wb3J0IHRpdGxlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9wYWdlLXRpdGxlJztcbmltcG9ydCBzbmFja2JhciBmcm9tICdtaXNhZ28vc2VydmljZXMvc25hY2tiYXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzTG9hZGVkOiBmYWxzZSxcbiAgICAgIG9wdGlvbnM6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGl0bGUuc2V0KHtcbiAgICAgIHRpdGxlOiBnZXR0ZXh0KFwiQ2hhbmdlIHVzZXJuYW1lXCIpLFxuICAgICAgcGFyZW50OiBnZXR0ZXh0KFwiQ2hhbmdlIHlvdXIgb3B0aW9uc1wiKVxuICAgIH0pO1xuXG4gICAgUHJvbWlzZS5hbGwoW1xuICAgICAgYWpheC5nZXQodGhpcy5wcm9wcy51c2VyLmFwaV91cmwudXNlcm5hbWUpLFxuICAgICAgYWpheC5nZXQobWlzYWdvLmdldCgnVVNFUk5BTUVfQ0hBTkdFU19BUEknKSwge3VzZXI6IHRoaXMucHJvcHMudXNlci5pZH0pXG4gICAgXSkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgc3RvcmUuZGlzcGF0Y2goZGVoeWRyYXRlKGRhdGFbMV0ucmVzdWx0cykpO1xuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNMb2FkZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBjaGFuZ2VzX2xlZnQ6IGRhdGFbMF0uY2hhbmdlc19sZWZ0LFxuICAgICAgICAgIGxlbmd0aF9taW46IGRhdGFbMF0ubGVuZ3RoX21pbixcbiAgICAgICAgICBsZW5ndGhfbWF4OiBkYXRhWzBdLmxlbmd0aF9tYXgsXG4gICAgICAgICAgbmV4dF9vbjogZGF0YVswXS5uZXh0X29uID8gbW9tZW50KGRhdGFbMF0ubmV4dF9vbikgOiBudWxsLFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgb25Db21wbGV0ZSA9ICh1c2VybmFtZSwgc2x1Zywgb3B0aW9ucykgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgb3B0aW9uc1xuICAgIH0pO1xuXG4gICAgc3RvcmUuZGlzcGF0Y2goXG4gICAgICBhZGROYW1lQ2hhbmdlKHsgdXNlcm5hbWUsIHNsdWcgfSwgdGhpcy5wcm9wcy51c2VyLCB0aGlzLnByb3BzLnVzZXIpKTtcbiAgICBzdG9yZS5kaXNwYXRjaChcbiAgICAgIHVwZGF0ZVVzZXJuYW1lKHRoaXMucHJvcHMudXNlciwgdXNlcm5hbWUsIHNsdWcpKTtcblxuICAgIHNuYWNrYmFyLnN1Y2Nlc3MoZ2V0dGV4dChcIllvdXIgdXNlcm5hbWUgaGFzIGJlZW4gY2hhbmdlZCBzdWNjZXNzZnVsbHkuXCIpKTtcbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICBnZXRDaGFuZ2VGb3JtKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmlzTG9hZGVkKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5vcHRpb25zLmNoYW5nZXNfbGVmdCA+IDApIHtcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgICByZXR1cm4gPEZvcm0gdXNlcj17dGhpcy5wcm9wcy51c2VyfVxuICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17dGhpcy5zdGF0ZS5vcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgY29tcGxldGU9e3RoaXMub25Db21wbGV0ZX0gLz47XG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICAgIHJldHVybiA8Rm9ybUxvY2tlZCBvcHRpb25zPXt0aGlzLnN0YXRlLm9wdGlvbnN9IC8+O1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPEZvcm1Mb2FkaW5nIC8+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2PlxuICAgICAge3RoaXMuZ2V0Q2hhbmdlRm9ybSgpfVxuICAgICAgPFVzZXJuYW1lSGlzdG9yeSBpc0xvYWRlZD17dGhpcy5zdGF0ZS5pc0xvYWRlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcz17dGhpcy5wcm9wc1sndXNlcm5hbWUtaGlzdG9yeSddfSAvPlxuICAgIDwvZGl2PlxuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBCdXR0b24gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYnV0dG9uJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgRm9ybSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9mb3JtJztcbmltcG9ydCBGb3JtR3JvdXAgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvZm9ybS1ncm91cCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFNlbGVjdCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9zZWxlY3QnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBZZXNOb1N3aXRjaCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy95ZXMtbm8tc3dpdGNoJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgeyBwYXRjaFVzZXIgfSBmcm9tICdtaXNhZ28vcmVkdWNlcnMvYXV0aCc7XG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7XG5pbXBvcnQgdGl0bGUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3BhZ2UtdGl0bGUnO1xuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7XG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBGb3JtIHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgJ2lzTG9hZGluZyc6IGZhbHNlLFxuXG4gICAgICAnaXNfaGlkaW5nX3ByZXNlbmNlJzogcHJvcHMudXNlci5pc19oaWRpbmdfcHJlc2VuY2UsXG4gICAgICAnbGltaXRzX3ByaXZhdGVfdGhyZWFkX2ludml0ZXNfdG8nOiBwcm9wcy51c2VyLmxpbWl0c19wcml2YXRlX3RocmVhZF9pbnZpdGVzX3RvLFxuICAgICAgJ3N1YnNjcmliZV90b19zdGFydGVkX3RocmVhZHMnOiBwcm9wcy51c2VyLnN1YnNjcmliZV90b19zdGFydGVkX3RocmVhZHMsXG4gICAgICAnc3Vic2NyaWJlX3RvX3JlcGxpZWRfdGhyZWFkcyc6IHByb3BzLnVzZXIuc3Vic2NyaWJlX3RvX3JlcGxpZWRfdGhyZWFkcyxcblxuICAgICAgJ2Vycm9ycyc6IHt9XG4gICAgfTtcblxuICAgIHRoaXMucHJpdmF0ZVRocmVhZEludml0ZXNDaG9pY2VzID0gW1xuICAgICAge1xuICAgICAgICAndmFsdWUnOiAwLFxuICAgICAgICAnaWNvbic6ICdoZWxwX291dGxpbmUnLFxuICAgICAgICAnbGFiZWwnOiBnZXR0ZXh0KCdFdmVyeWJvZHknKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3ZhbHVlJzogMSxcbiAgICAgICAgJ2ljb24nOiAnZG9uZV9hbGwnLFxuICAgICAgICAnbGFiZWwnOiBnZXR0ZXh0KCdVc2VycyBJIGZvbGxvdycpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAndmFsdWUnOiAyLFxuICAgICAgICAnaWNvbic6ICdoaWdobGlnaHRfb2ZmJyxcbiAgICAgICAgJ2xhYmVsJzogZ2V0dGV4dCgnTm9ib2R5JylcbiAgICAgIH1cbiAgICBdO1xuXG4gICAgdGhpcy5zdWJzY3JpYmVUb0Nob2ljZXMgPSBbXG4gICAgICB7XG4gICAgICAgICd2YWx1ZSc6IDAsXG4gICAgICAgICdpY29uJzogJ2Jvb2ttYXJrX2JvcmRlcicsXG4gICAgICAgICdsYWJlbCc6IGdldHRleHQoJ05vJylcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgICd2YWx1ZSc6IDEsXG4gICAgICAgICdpY29uJzogJ2Jvb2ttYXJrJyxcbiAgICAgICAgJ2xhYmVsJzogZ2V0dGV4dCgnQm9va21hcmsnKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgJ3ZhbHVlJzogMixcbiAgICAgICAgJ2ljb24nOiAnbWFpbCcsXG4gICAgICAgICdsYWJlbCc6IGdldHRleHQoJ0Jvb2ttYXJrIHdpdGggZS1tYWlsIG5vdGlmaWNhdGlvbicpXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIHNlbmQoKSB7XG4gICAgcmV0dXJuIGFqYXgucG9zdCh0aGlzLnByb3BzLnVzZXIuYXBpX3VybC5vcHRpb25zLCB7XG4gICAgICBpc19oaWRpbmdfcHJlc2VuY2U6IHRoaXMuc3RhdGUuaXNfaGlkaW5nX3ByZXNlbmNlLFxuICAgICAgbGltaXRzX3ByaXZhdGVfdGhyZWFkX2ludml0ZXNfdG86IHRoaXMuc3RhdGUubGltaXRzX3ByaXZhdGVfdGhyZWFkX2ludml0ZXNfdG8sXG4gICAgICBzdWJzY3JpYmVfdG9fc3RhcnRlZF90aHJlYWRzOiB0aGlzLnN0YXRlLnN1YnNjcmliZV90b19zdGFydGVkX3RocmVhZHMsXG4gICAgICBzdWJzY3JpYmVfdG9fcmVwbGllZF90aHJlYWRzOiB0aGlzLnN0YXRlLnN1YnNjcmliZV90b19yZXBsaWVkX3RocmVhZHNcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVN1Y2Nlc3MoKSB7XG4gICAgc3RvcmUuZGlzcGF0Y2gocGF0Y2hVc2VyKHtcbiAgICAgIGlzX2hpZGluZ19wcmVzZW5jZTogdGhpcy5zdGF0ZS5pc19oaWRpbmdfcHJlc2VuY2UsXG4gICAgICBsaW1pdHNfcHJpdmF0ZV90aHJlYWRfaW52aXRlc190bzogdGhpcy5zdGF0ZS5saW1pdHNfcHJpdmF0ZV90aHJlYWRfaW52aXRlc190byxcbiAgICAgIHN1YnNjcmliZV90b19zdGFydGVkX3RocmVhZHM6IHRoaXMuc3RhdGUuc3Vic2NyaWJlX3RvX3N0YXJ0ZWRfdGhyZWFkcyxcbiAgICAgIHN1YnNjcmliZV90b19yZXBsaWVkX3RocmVhZHM6IHRoaXMuc3RhdGUuc3Vic2NyaWJlX3RvX3JlcGxpZWRfdGhyZWFkc1xuICAgIH0pKTtcbiAgICBzbmFja2Jhci5zdWNjZXNzKGdldHRleHQoXCJZb3VyIGZvcnVtIG9wdGlvbnMgaGF2ZSBiZWVuIGNoYW5nZWQuXCIpKTtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKHJlamVjdGlvbikge1xuICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDApIHtcbiAgICAgIHNuYWNrYmFyLmVycm9yKGdldHRleHQoXCJQbGVhc2UgcmVsb2FkIHBhZ2UgYW5kIHRyeSBhZ2Fpbi5cIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzbmFja2Jhci5hcGlFcnJvcihyZWplY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRpdGxlLnNldCh7XG4gICAgICB0aXRsZTogZ2V0dGV4dChcIkZvcnVtIG9wdGlvbnNcIiksXG4gICAgICBwYXJlbnQ6IGdldHRleHQoXCJDaGFuZ2UgeW91ciBvcHRpb25zXCIpXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8Zm9ybSBvblN1Ym1pdD17dGhpcy5oYW5kbGVTdWJtaXR9IGNsYXNzTmFtZT1cImZvcm0taG9yaXpvbnRhbFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbCBwYW5lbC1kZWZhdWx0IHBhbmVsLWZvcm1cIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1oZWFkaW5nXCI+XG4gICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInBhbmVsLXRpdGxlXCI+e2dldHRleHQoXCJDaGFuZ2UgZm9ydW0gb3B0aW9uc1wiKX08L2gzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1ib2R5XCI+XG5cbiAgICAgICAgICA8ZmllbGRzZXQ+XG4gICAgICAgICAgICA8bGVnZW5kPntnZXR0ZXh0KFwiUHJpdmFjeSBzZXR0aW5nc1wiKX08L2xlZ2VuZD5cblxuICAgICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIkhpZGUgbXkgcHJlc2VuY2VcIil9XG4gICAgICAgICAgICAgICAgICAgICAgIGhlbHBUZXh0PXtnZXR0ZXh0KFwiSWYgeW91IGhpZGUgeW91ciBwcmVzZW5jZSwgb25seSBtZW1iZXJzIHdpdGggcGVybWlzc2lvbiB0byBzZWUgaGlkZGVuIHVzZXJzIHdpbGwgc2VlIHdoZW4geW91IGFyZSBvbmxpbmUuXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJpZF9pc19oaWRpbmdfcHJlc2VuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiY29sLXNtLTRcIiBjb250cm9sQ2xhc3M9XCJjb2wtc20tOFwiPlxuICAgICAgICAgICAgICA8WWVzTm9Td2l0Y2ggaWQ9XCJpZF9pc19oaWRpbmdfcHJlc2VuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbk9uPVwidmlzaWJpbGl0eV9vZmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbk9mZj1cInZpc2liaWxpdHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxPbj17Z2V0dGV4dChcIkhpZGUgbXkgcHJlc2VuY2UgZnJvbSBvdGhlciB1c2Vyc1wiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsT2ZmPXtnZXR0ZXh0KFwiU2hvdyBteSBwcmVzZW5jZSB0byBvdGhlciB1c2Vyc1wiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnaXNfaGlkaW5nX3ByZXNlbmNlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5pc19oaWRpbmdfcHJlc2VuY2V9IC8+XG4gICAgICAgICAgICA8L0Zvcm1Hcm91cD5cblxuICAgICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIlByaXZhdGUgdGhyZWFkIGludml0YXRpb25zXCIpfVxuICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJpZF9saW1pdHNfcHJpdmF0ZV90aHJlYWRfaW52aXRlc190b1wiXG4gICAgICAgICAgICAgICAgICAgICAgIGxhYmVsQ2xhc3M9XCJjb2wtc20tNFwiIGNvbnRyb2xDbGFzcz1cImNvbC1zbS04XCI+XG4gICAgICAgICAgICAgIDxTZWxlY3QgaWQ9XCJpZF9saW1pdHNfcHJpdmF0ZV90aHJlYWRfaW52aXRlc190b1wiXG4gICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnbGltaXRzX3ByaXZhdGVfdGhyZWFkX2ludml0ZXNfdG8nKX1cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5saW1pdHNfcHJpdmF0ZV90aHJlYWRfaW52aXRlc190b31cbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPXt0aGlzLnByaXZhdGVUaHJlYWRJbnZpdGVzQ2hvaWNlc30gLz5cbiAgICAgICAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgICAgIDwvZmllbGRzZXQ+XG5cbiAgICAgICAgICA8ZmllbGRzZXQ+XG4gICAgICAgICAgICA8bGVnZW5kPntnZXR0ZXh0KFwiQXV0b21hdGljIHN1YnNjcmlwdGlvbnNcIil9PC9sZWdlbmQ+XG5cbiAgICAgICAgICAgIDxGb3JtR3JvdXAgbGFiZWw9e2dldHRleHQoXCJUaHJlYWRzIEkgc3RhcnRcIil9XG4gICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImlkX3N1YnNjcmliZV90b19zdGFydGVkX3RocmVhZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiY29sLXNtLTRcIiBjb250cm9sQ2xhc3M9XCJjb2wtc20tOFwiPlxuICAgICAgICAgICAgICA8U2VsZWN0IGlkPVwiaWRfc3Vic2NyaWJlX3RvX3N0YXJ0ZWRfdGhyZWFkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnc3Vic2NyaWJlX3RvX3N0YXJ0ZWRfdGhyZWFkcycpfVxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnN1YnNjcmliZV90b19zdGFydGVkX3RocmVhZHN9XG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlcz17dGhpcy5zdWJzY3JpYmVUb0Nob2ljZXN9IC8+XG4gICAgICAgICAgICA8L0Zvcm1Hcm91cD5cblxuICAgICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIlRocmVhZHMgSSByZXBseSB0b1wiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwiaWRfc3Vic2NyaWJlX3RvX3JlcGxpZWRfdGhyZWFkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgIGxhYmVsQ2xhc3M9XCJjb2wtc20tNFwiIGNvbnRyb2xDbGFzcz1cImNvbC1zbS04XCI+XG4gICAgICAgICAgICAgIDxTZWxlY3QgaWQ9XCJpZF9zdWJzY3JpYmVfdG9fcmVwbGllZF90aHJlYWRzXCJcbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuYmluZElucHV0KCdzdWJzY3JpYmVfdG9fcmVwbGllZF90aHJlYWRzJyl9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuc3Vic2NyaWJlX3RvX3JlcGxpZWRfdGhyZWFkc31cbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzPXt0aGlzLnN1YnNjcmliZVRvQ2hvaWNlc30gLz5cbiAgICAgICAgICAgIDwvRm9ybUdyb3VwPlxuICAgICAgICAgIDwvZmllbGRzZXQ+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtZm9vdGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNtLTggY29sLXNtLW9mZnNldC00XCI+XG5cbiAgICAgICAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJidG4tcHJpbWFyeVwiIGxvYWRpbmc9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfT5cbiAgICAgICAgICAgICAgICB7Z2V0dGV4dChcIlNhdmUgY2hhbmdlc1wiKX1cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IExpbmsgfSBmcm9tICdyZWFjdC1yb3V0ZXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBMaSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9saSc7IC8vanNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7IC8vanNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBjbGFzcyBTaWRlTmF2IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIC8vIGpzaGludCBpZ25vcmU6c3RhcnRcbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJsaXN0LWdyb3VwIG5hdi1zaWRlXCI+XG4gICAgICB7dGhpcy5wcm9wcy5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgIHJldHVybiA8TGluayB0bz17dGhpcy5wcm9wcy5iYXNlVXJsICsgb3B0aW9uLmNvbXBvbmVudCArICcvJ31cbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImxpc3QtZ3JvdXAtaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICBhY3RpdmVDbGFzc05hbWU9XCJhY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICAga2V5PXtvcHRpb24uY29tcG9uZW50fT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICB7b3B0aW9uLmljb259XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIHtvcHRpb24ubmFtZX1cbiAgICAgICAgPC9MaW5rPjtcbiAgICAgIH0pfVxuICAgIDwvZGl2PjtcbiAgICAvLyBqc2hpbnQgaWdub3JlOmVuZFxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wYWN0TmF2IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIC8vIGpzaGludCBpZ25vcmU6c3RhcnRcbiAgICByZXR1cm4gPHVsIGNsYXNzTmFtZT1cImRyb3Bkb3duLW1lbnVcIiByb2xlPVwibWVudVwiPlxuICAgICAge3RoaXMucHJvcHMub3B0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gPExpIHBhdGg9e3RoaXMucHJvcHMuYmFzZVVybCArIG9wdGlvbi5jb21wb25lbnQgKyAnLyd9XG4gICAgICAgICAgICAgICAgICAga2V5PXtvcHRpb24uY29tcG9uZW50fT5cbiAgICAgICAgICA8TGluayB0bz17dGhpcy5wcm9wcy5iYXNlVXJsICsgb3B0aW9uLmNvbXBvbmVudCArICcvJ31cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnByb3BzLmhpZGVOYXZ9PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgICAgICB7b3B0aW9uLmljb259XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB7b3B0aW9uLm5hbWV9XG4gICAgICAgICAgPC9MaW5rPlxuICAgICAgICA8L0xpPjtcbiAgICAgIH0pfVxuICAgIDwvdWw+O1xuICAgIC8vIGpzaGludCBpZ25vcmU6ZW5kXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgRHJvcGRvd25Ub2dnbGUgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvZHJvcGRvd24tdG9nZ2xlJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgeyBTaWRlTmF2LCBDb21wYWN0TmF2IH0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvb3B0aW9ucy9uYXZzJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgQ2hhbmdlRm9ydW1PcHRpb25zIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL29wdGlvbnMvZm9ydW0tb3B0aW9ucyc7XG5pbXBvcnQgQ2hhbmdlVXNlcm5hbWUgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvb3B0aW9ucy9jaGFuZ2UtdXNlcm5hbWUvcm9vdCc7XG5pbXBvcnQgQ2hhbmdlU2lnbkluQ3JlZGVudGlhbHMgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvb3B0aW9ucy9zaWduLWluLWNyZWRlbnRpYWxzL3Jvb3QnO1xuaW1wb3J0IFdpdGhEcm9wZG93biBmcm9tICdtaXNhZ28vY29tcG9uZW50cy93aXRoLWRyb3Bkb3duJztcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBXaXRoRHJvcGRvd24ge1xuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInBhZ2UgcGFnZS1vcHRpb25zXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhZ2UtaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XG5cbiAgICAgICAgICA8aDEgY2xhc3NOYW1lPVwicHVsbC1sZWZ0XCI+e2dldHRleHQoXCJDaGFuZ2UgeW91ciBvcHRpb25zXCIpfTwvaDE+XG5cbiAgICAgICAgICA8RHJvcGRvd25Ub2dnbGUgdG9nZ2xlTmF2PXt0aGlzLnRvZ2dsZU5hdn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcGRvd249e3RoaXMuc3RhdGUuZHJvcGRvd259IC8+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmdldENvbXBhY3ROYXZDbGFzc05hbWUoKX0+XG5cbiAgICAgICAgPENvbXBhY3ROYXYgb3B0aW9ucz17bWlzYWdvLmdldCgnVVNFUl9PUFRJT05TJyl9XG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmw9e21pc2Fnby5nZXQoJ1VTRVJDUF9VUkwnKX1cbiAgICAgICAgICAgICAgICAgICAgaGlkZU5hdj17dGhpcy5oaWRlTmF2fSAvPlxuXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC0zIGhpZGRlbi14cyBoaWRkZW4tc21cIj5cblxuICAgICAgICAgICAgPFNpZGVOYXYgb3B0aW9ucz17bWlzYWdvLmdldCgnVVNFUl9PUFRJT05TJyl9XG4gICAgICAgICAgICAgICAgICAgICBiYXNlVXJsPXttaXNhZ28uZ2V0KCdVU0VSQ1BfVVJMJyl9IC8+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC05XCI+XG5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0KHN0b3JlKSB7XG4gIHJldHVybiB7XG4gICAgJ3RpY2snOiBzdG9yZS50aWNrLnRpY2ssXG4gICAgJ3VzZXInOiBzdG9yZS5hdXRoLnVzZXIsXG4gICAgJ3VzZXJuYW1lLWhpc3RvcnknOiBzdG9yZVsndXNlcm5hbWUtaGlzdG9yeSddXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRocygpIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXRoOiBtaXNhZ28uZ2V0KCdVU0VSQ1BfVVJMJykgKyAnZm9ydW0tb3B0aW9ucy8nLFxuICAgICAgY29tcG9uZW50OiBjb25uZWN0KHNlbGVjdCkoQ2hhbmdlRm9ydW1PcHRpb25zKVxuICAgIH0sXG4gICAge1xuICAgICAgcGF0aDogbWlzYWdvLmdldCgnVVNFUkNQX1VSTCcpICsgJ2NoYW5nZS11c2VybmFtZS8nLFxuICAgICAgY29tcG9uZW50OiBjb25uZWN0KHNlbGVjdCkoQ2hhbmdlVXNlcm5hbWUpXG4gICAgfSxcbiAgICB7XG4gICAgICBwYXRoOiBtaXNhZ28uZ2V0KCdVU0VSQ1BfVVJMJykgKyAnc2lnbi1pbi1jcmVkZW50aWFscy8nLFxuICAgICAgY29tcG9uZW50OiBjb25uZWN0KHNlbGVjdCkoQ2hhbmdlU2lnbkluQ3JlZGVudGlhbHMpXG4gICAgfVxuICBdO1xufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgQnV0dG9uIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2J1dHRvbic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEZvcm0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvZm9ybSc7XG5pbXBvcnQgRm9ybUdyb3VwIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2Zvcm0tZ3JvdXAnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JztcbmltcG9ydCBzbmFja2JhciBmcm9tICdtaXNhZ28vc2VydmljZXMvc25hY2tiYXInO1xuaW1wb3J0ICogYXMgdmFsaWRhdG9ycyBmcm9tICdtaXNhZ28vdXRpbHMvdmFsaWRhdG9ycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgRm9ybSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIG5ld19lbWFpbDogJycsXG4gICAgICBwYXNzd29yZDogJycsXG5cbiAgICAgIHZhbGlkYXRvcnM6IHtcbiAgICAgICAgbmV3X2VtYWlsOiBbXG4gICAgICAgICAgdmFsaWRhdG9ycy5lbWFpbCgpXG4gICAgICAgIF0sXG4gICAgICAgIHBhc3N3b3JkOiBbXVxuICAgICAgfSxcblxuICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjbGVhbigpIHtcbiAgICBsZXQgZXJyb3JzID0gdGhpcy52YWxpZGF0ZSgpO1xuICAgIGxldCBsZW5ndGhzID0gW1xuICAgICAgdGhpcy5zdGF0ZS5uZXdfZW1haWwudHJpbSgpLmxlbmd0aCxcbiAgICAgIHRoaXMuc3RhdGUucGFzc3dvcmQudHJpbSgpLmxlbmd0aFxuICAgIF07XG5cbiAgICBpZiAobGVuZ3Rocy5pbmRleE9mKDApICE9PSAtMSkge1xuICAgICAgc25hY2tiYXIuZXJyb3IoZ2V0dGV4dChcIkZpbGwgb3V0IGFsbCBmaWVsZHMuXCIpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLm5ld19lbWFpbCkge1xuICAgICAgc25hY2tiYXIuZXJyb3IoZXJyb3JzLm5ld19lbWFpbFswXSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzZW5kKCkge1xuICAgIHJldHVybiBhamF4LnBvc3QodGhpcy5wcm9wcy51c2VyLmFwaV91cmwuY2hhbmdlX2VtYWlsLCB7XG4gICAgICBuZXdfZW1haWw6IHRoaXMuc3RhdGUubmV3X2VtYWlsLFxuICAgICAgcGFzc3dvcmQ6IHRoaXMuc3RhdGUucGFzc3dvcmQsXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTdWNjZXNzKHJlc3BvbnNlKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBuZXdfZW1haWw6ICcnLFxuICAgICAgcGFzc3dvcmQ6ICcnXG4gICAgfSk7XG5cbiAgICBzbmFja2Jhci5zdWNjZXNzKHJlc3BvbnNlLmRldGFpbCk7XG4gIH1cblxuICBoYW5kbGVFcnJvcihyZWplY3Rpb24pIHtcbiAgICBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICBpZiAocmVqZWN0aW9uLm5ld19lbWFpbCkge1xuICAgICAgICBzbmFja2Jhci5lcnJvcihyZWplY3Rpb24ubmV3X2VtYWlsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNuYWNrYmFyLmVycm9yKHJlamVjdGlvbi5wYXNzd29yZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNuYWNrYmFyLmFwaUVycm9yKHJlamVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGZvcm0gb25TdWJtaXQ9e3RoaXMuaGFuZGxlU3VibWl0fSBjbGFzc05hbWU9XCJmb3JtLWhvcml6b250YWxcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwidHlwZVwiIHN0eWxlPXt7ZGlzcGxheTogJ25vbmUnfX0gLz5cbiAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBzdHlsZT17e2Rpc3BsYXk6ICdub25lJ319IC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsIHBhbmVsLWRlZmF1bHQgcGFuZWwtZm9ybVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWhlYWRpbmdcIj5cbiAgICAgICAgICA8aDMgY2xhc3NOYW1lPVwicGFuZWwtdGl0bGVcIj57Z2V0dGV4dChcIkNoYW5nZSBlLW1haWwgYWRkcmVzc1wiKX08L2gzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1ib2R5XCI+XG5cbiAgICAgICAgICA8Rm9ybUdyb3VwIGxhYmVsPXtnZXR0ZXh0KFwiTmV3IGUtbWFpbFwiKX0gZm9yPVwiaWRfbmV3X2VtYWlsXCJcbiAgICAgICAgICAgICAgICAgICAgIGxhYmVsQ2xhc3M9XCJjb2wtc20tNFwiIGNvbnRyb2xDbGFzcz1cImNvbC1zbS04XCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImlkX25ld19lbWFpbFwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnbmV3X2VtYWlsJyl9XG4gICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUubmV3X2VtYWlsfSAvPlxuICAgICAgICAgIDwvRm9ybUdyb3VwPlxuXG4gICAgICAgICAgPGhyIC8+XG5cbiAgICAgICAgICA8Rm9ybUdyb3VwIGxhYmVsPXtnZXR0ZXh0KFwiWW91ciBjdXJyZW50IHBhc3N3b3JkXCIpfSBmb3I9XCJpZF9wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiY29sLXNtLTRcIiBjb250cm9sQ2xhc3M9XCJjb2wtc20tOFwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIGlkPVwiaWRfcGFzc3dvcmRcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5iaW5kSW5wdXQoJ3Bhc3N3b3JkJyl9XG4gICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUucGFzc3dvcmR9IC8+XG4gICAgICAgICAgPC9Gb3JtR3JvdXA+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtZm9vdGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNtLTggY29sLXNtLW9mZnNldC00XCI+XG5cbiAgICAgICAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJidG4tcHJpbWFyeVwiIGxvYWRpbmc9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfT5cbiAgICAgICAgICAgICAgICB7Z2V0dGV4dChcIkNoYW5nZSBlLW1haWxcIil9XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBCdXR0b24gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYnV0dG9uJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgRm9ybSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9mb3JtJztcbmltcG9ydCBGb3JtR3JvdXAgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvZm9ybS1ncm91cCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IGFqYXggZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2FqYXgnO1xuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7XG5pbXBvcnQgKiBhcyB2YWxpZGF0b3JzIGZyb20gJ21pc2Fnby91dGlscy92YWxpZGF0b3JzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBGb3JtIHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgbmV3X3Bhc3N3b3JkOiAnJyxcbiAgICAgIHJlcGVhdF9wYXNzd29yZDogJycsXG4gICAgICBwYXNzd29yZDogJycsXG5cbiAgICAgIHZhbGlkYXRvcnM6IHtcbiAgICAgICAgbmV3X3Bhc3N3b3JkOiBbXG4gICAgICAgICAgdmFsaWRhdG9ycy5wYXNzd29yZE1pbkxlbmd0aChtaXNhZ28uZ2V0KCdTRVRUSU5HUycpKVxuICAgICAgICBdLFxuICAgICAgICByZXBlYXRfcGFzc3dvcmQ6IFtdLFxuICAgICAgICBwYXNzd29yZDogW11cbiAgICAgIH0sXG5cbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY2xlYW4oKSB7XG4gICAgbGV0IGVycm9ycyA9IHRoaXMudmFsaWRhdGUoKTtcbiAgICBsZXQgbGVuZ3RocyA9IFtcbiAgICAgIHRoaXMuc3RhdGUubmV3X3Bhc3N3b3JkLnRyaW0oKS5sZW5ndGgsXG4gICAgICB0aGlzLnN0YXRlLnJlcGVhdF9wYXNzd29yZC50cmltKCkubGVuZ3RoLFxuICAgICAgdGhpcy5zdGF0ZS5wYXNzd29yZC50cmltKCkubGVuZ3RoXG4gICAgXTtcblxuICAgIGlmIChsZW5ndGhzLmluZGV4T2YoMCkgIT09IC0xKSB7XG4gICAgICBzbmFja2Jhci5lcnJvcihnZXR0ZXh0KFwiRmlsbCBvdXQgYWxsIGZpZWxkcy5cIikpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChlcnJvcnMubmV3X3Bhc3N3b3JkKSB7XG4gICAgICBzbmFja2Jhci5lcnJvcihlcnJvcnMubmV3X3Bhc3N3b3JkWzBdKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5uZXdfcGFzc3dvcmQudHJpbSgpICE9PSB0aGlzLnN0YXRlLnJlcGVhdF9wYXNzd29yZC50cmltKCkpIHtcbiAgICAgIHNuYWNrYmFyLmVycm9yKGdldHRleHQoXCJOZXcgcGFzc3dvcmRzIGFyZSBkaWZmZXJlbnQuXCIpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHNlbmQoKSB7XG4gICAgcmV0dXJuIGFqYXgucG9zdCh0aGlzLnByb3BzLnVzZXIuYXBpX3VybC5jaGFuZ2VfcGFzc3dvcmQsIHtcbiAgICAgIG5ld19wYXNzd29yZDogdGhpcy5zdGF0ZS5uZXdfcGFzc3dvcmQsXG4gICAgICBwYXNzd29yZDogdGhpcy5zdGF0ZS5wYXNzd29yZFxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU3VjY2VzcyhyZXNwb25zZSkge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgbmV3X3Bhc3N3b3JkOiAnJyxcbiAgICAgIHJlcGVhdF9wYXNzd29yZDogJycsXG4gICAgICBwYXNzd29yZDogJydcbiAgICB9KTtcblxuICAgIHNuYWNrYmFyLnN1Y2Nlc3MocmVzcG9uc2UuZGV0YWlsKTtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKHJlamVjdGlvbikge1xuICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDApIHtcbiAgICAgIGlmIChyZWplY3Rpb24ubmV3X3Bhc3N3b3JkKSB7XG4gICAgICAgIHNuYWNrYmFyLmVycm9yKHJlamVjdGlvbi5uZXdfcGFzc3dvcmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc25hY2tiYXIuZXJyb3IocmVqZWN0aW9uLnBhc3N3b3JkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc25hY2tiYXIuYXBpRXJyb3IocmVqZWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8Zm9ybSBvblN1Ym1pdD17dGhpcy5oYW5kbGVTdWJtaXR9IGNsYXNzTmFtZT1cImZvcm0taG9yaXpvbnRhbFwiPlxuICAgICAgPGlucHV0IHR5cGU9XCJ0eXBlXCIgc3R5bGU9e3tkaXNwbGF5OiAnbm9uZSd9fSAvPlxuICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIHN0eWxlPXt7ZGlzcGxheTogJ25vbmUnfX0gLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwgcGFuZWwtZGVmYXVsdCBwYW5lbC1mb3JtXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtaGVhZGluZ1wiPlxuICAgICAgICAgIDxoMyBjbGFzc05hbWU9XCJwYW5lbC10aXRsZVwiPntnZXR0ZXh0KFwiQ2hhbmdlIHBhc3N3b3JkXCIpfTwvaDM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWJvZHlcIj5cblxuICAgICAgICAgIDxGb3JtR3JvdXAgbGFiZWw9e2dldHRleHQoXCJOZXcgcGFzc3dvcmRcIil9IGZvcj1cImlkX25ld19wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiY29sLXNtLTRcIiBjb250cm9sQ2xhc3M9XCJjb2wtc20tOFwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIGlkPVwiaWRfbmV3X3Bhc3N3b3JkXCIgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuYmluZElucHV0KCduZXdfcGFzc3dvcmQnKX1cbiAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5uZXdfcGFzc3dvcmR9IC8+XG4gICAgICAgICAgPC9Gb3JtR3JvdXA+XG5cbiAgICAgICAgICA8Rm9ybUdyb3VwIGxhYmVsPXtnZXR0ZXh0KFwiUmVwZWF0IHBhc3N3b3JkXCIpfSBmb3I9XCJpZF9yZXBlYXRfcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgbGFiZWxDbGFzcz1cImNvbC1zbS00XCIgY29udHJvbENsYXNzPVwiY29sLXNtLThcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicGFzc3dvcmRcIiBpZD1cImlkX3JlcGVhdF9wYXNzd29yZFwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgncmVwZWF0X3Bhc3N3b3JkJyl9XG4gICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUucmVwZWF0X3Bhc3N3b3JkfSAvPlxuICAgICAgICAgIDwvRm9ybUdyb3VwPlxuXG4gICAgICAgICAgPGhyIC8+XG5cbiAgICAgICAgICA8Rm9ybUdyb3VwIGxhYmVsPXtnZXR0ZXh0KFwiWW91ciBjdXJyZW50IHBhc3N3b3JkXCIpfSBmb3I9XCJpZF9wYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiY29sLXNtLTRcIiBjb250cm9sQ2xhc3M9XCJjb2wtc20tOFwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIGlkPVwiaWRfcGFzc3dvcmRcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5iaW5kSW5wdXQoJ3Bhc3N3b3JkJyl9XG4gICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUucGFzc3dvcmR9IC8+XG4gICAgICAgICAgPC9Gb3JtR3JvdXA+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtZm9vdGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXNtLTggY29sLXNtLW9mZnNldC00XCI+XG5cbiAgICAgICAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJidG4tcHJpbWFyeVwiIGxvYWRpbmc9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfT5cbiAgICAgICAgICAgICAgICB7Z2V0dGV4dChcIkNoYW5nZSBwYXNzd29yZFwiKX1cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDaGFuZ2VFbWFpbCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9vcHRpb25zL3NpZ24taW4tY3JlZGVudGlhbHMvY2hhbmdlLWVtYWlsJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgQ2hhbmdlUGFzc3dvcmQgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvb3B0aW9ucy9zaWduLWluLWNyZWRlbnRpYWxzL2NoYW5nZS1wYXNzd29yZCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCB0aXRsZSBmcm9tICdtaXNhZ28vc2VydmljZXMvcGFnZS10aXRsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGl0bGUuc2V0KHtcbiAgICAgIHRpdGxlOiBnZXR0ZXh0KFwiQ2hhbmdlIGVtYWlsIG9yIHBhc3N3b3JkXCIpLFxuICAgICAgcGFyZW50OiBnZXR0ZXh0KFwiQ2hhbmdlIHlvdXIgb3B0aW9uc1wiKVxuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdj5cbiAgICAgIDxDaGFuZ2VFbWFpbCB1c2VyPXt0aGlzLnByb3BzLnVzZXJ9IC8+XG4gICAgICA8Q2hhbmdlUGFzc3dvcmQgdXNlcj17dGhpcy5wcm9wcy51c2VyfSAvPlxuXG4gICAgICA8cCBjbGFzc05hbWU9XCJtZXNzYWdlLWxpbmVcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8YSBocmVmPXttaXNhZ28uZ2V0KCdGT1JHT1RURU5fUEFTU1dPUkRfVVJMJyl9PlxuICAgICAgICAgIHtnZXR0ZXh0KFwiQ2hhbmdlIGZvcmdvdHRlbiBwYXNzd29yZFwiKX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IExvYWRlciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9sb2FkZXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWJvZHkgcGFuZWwtYm9keS1sb2FkaW5nXCI+XG4gICAgICA8TG9hZGVyIGNsYXNzTmFtZT1cImxvYWRlciBsb2FkZXItc3BhY2VkXCIgLz5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldEhlbHBUZXh0KCkge1xuICAgIGlmICh0aGlzLnByb3BzLmhlbHBUZXh0KSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPHAgY2xhc3NOYW1lPVwiaGVscC1ibG9ja1wiPlxuICAgICAgICB7dGhpcy5wcm9wcy5oZWxwVGV4dH1cbiAgICAgIDwvcD47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWJvZHkgcGFuZWwtbWVzc2FnZS1ib2R5XCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtaWNvblwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAge3RoaXMucHJvcHMuaWNvbiB8fCAnaW5mb19vdXRsaW5lJ31cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtYm9keVwiPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJsZWFkXCI+XG4gICAgICAgICAge3RoaXMucHJvcHMubWVzc2FnZX1cbiAgICAgICAgPC9wPlxuICAgICAgICB7dGhpcy5nZXRIZWxwVGV4dCgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgenhjdmJuIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy96eGN2Ym4nO1xuXG5leHBvcnQgY29uc3QgU1RZTEVTID0gW1xuICAncHJvZ3Jlc3MtYmFyLWRhbmdlcicsXG4gICdwcm9ncmVzcy1iYXItd2FybmluZycsXG4gICdwcm9ncmVzcy1iYXItd2FybmluZycsXG4gICdwcm9ncmVzcy1iYXItcHJpbWFyeScsXG4gICdwcm9ncmVzcy1iYXItc3VjY2Vzcydcbl07XG5cbmV4cG9ydCBjb25zdCBMQUJFTFMgPSBbXG4gIGdldHRleHQoXCJFbnRlcmVkIHBhc3N3b3JkIGlzIHZlcnkgd2Vhay5cIiksXG4gIGdldHRleHQoXCJFbnRlcmVkIHBhc3N3b3JkIGlzIHdlYWsuXCIpLFxuICBnZXR0ZXh0KFwiRW50ZXJlZCBwYXNzd29yZCBpcyBhdmVyYWdlLlwiKSxcbiAgZ2V0dGV4dChcIkVudGVyZWQgcGFzc3dvcmQgaXMgc3Ryb25nLlwiKSxcbiAgZ2V0dGV4dChcIkVudGVyZWQgcGFzc3dvcmQgaXMgdmVyeSBzdHJvbmcuXCIpXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5fc2NvcmUgPSAwO1xuICAgIHRoaXMuX3Bhc3N3b3JkID0gbnVsbDtcbiAgICB0aGlzLl9pbnB1dHMgPSBbXTtcbiAgfVxuXG4gIGdldFNjb3JlKHBhc3N3b3JkLCBpbnB1dHMpIHtcbiAgICBsZXQgY2FjaGVTdGFsZSA9IGZhbHNlO1xuXG4gICAgaWYgKHBhc3N3b3JkLnRyaW0oKSAhPT0gdGhpcy5fcGFzc3dvcmQpIHtcbiAgICAgIGNhY2hlU3RhbGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChpbnB1dHMubGVuZ3RoICE9PSB0aGlzLl9pbnB1dHMubGVuZ3RoKSB7XG4gICAgICBjYWNoZVN0YWxlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXRzLm1hcCgodmFsdWUsIGkpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlLnRyaW0oKSAhPT0gdGhpcy5faW5wdXRzW2ldKSB7XG4gICAgICAgICAgY2FjaGVTdGFsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjYWNoZVN0YWxlKSB7XG4gICAgICB0aGlzLl9zY29yZSA9IHp4Y3Zibi5zY29yZVBhc3N3b3JkKHBhc3N3b3JkLCBpbnB1dHMpO1xuICAgICAgdGhpcy5fcGFzc3dvcmQgPSBwYXNzd29yZC50cmltKCk7XG4gICAgICB0aGlzLl9pbnB1dHMgPSBpbnB1dHMubWFwKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50cmltKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc2NvcmU7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIGxldCBzY29yZSA9IHRoaXMuZ2V0U2NvcmUodGhpcy5wcm9wcy5wYXNzd29yZCwgdGhpcy5wcm9wcy5pbnB1dHMpO1xuXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiaGVscC1ibG9jayBwYXNzd29yZC1zdHJlbmd0aFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJwcm9ncmVzc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJwcm9ncmVzcy1iYXIgXCIgKyBTVFlMRVNbc2NvcmVdfVxuICAgICAgICAgICAgIHN0eWxlPXt7d2lkdGg6ICgyMCArICgyMCAqIHNjb3JlKSkgKyAnJSd9fVxuICAgICAgICAgICAgIHJvbGU9XCJwcm9ncmVzcy1iYXJcIlxuICAgICAgICAgICAgIGFyaWEtdmFsdWVub3c9e3Njb3JlfVxuICAgICAgICAgICAgIGFyaWEtdmFsdWVtaW49XCIwXCJcbiAgICAgICAgICAgICBhcmlhLXZhbHVlbWF4PVwiNFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNyLW9ubHlcIj5cbiAgICAgICAgICAgIHtMQUJFTFNbc2NvcmVdfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc21hbGxcIj5cbiAgICAgICAge0xBQkVMU1tzY29yZV19XG4gICAgICA8L3A+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEF2YXRhciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9hdmF0YXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBEcm9wZG93blRvZ2dsZSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9kcm9wZG93bi10b2dnbGUnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBGb2xsb3dCdXR0b24gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvcHJvZmlsZS9mb2xsb3ctYnV0dG9uJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgTW9kZXJhdGlvbk5hdiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9wcm9maWxlL21vZGVyYXRpb24vbmF2JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgU3RhdHVzLCB7IFN0YXR1c0ljb24sIFN0YXR1c0xhYmVsIH0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvdXNlci1zdGF0dXMnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRVc2VyU3RhdHVzKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGxpIGNsYXNzTmFtZT1cInVzZXItc3RhdHVzLWRpc3BsYXlcIj5cbiAgICAgIDxTdGF0dXMgdXNlcj17dGhpcy5wcm9wcy5wcm9maWxlfSBzdGF0dXM9e3RoaXMucHJvcHMucHJvZmlsZS5zdGF0dXN9PlxuICAgICAgICA8U3RhdHVzSWNvbiB1c2VyPXt0aGlzLnByb3BzLnByb2ZpbGV9XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cz17dGhpcy5wcm9wcy5wcm9maWxlLnN0YXR1c30gLz5cbiAgICAgICAgPFN0YXR1c0xhYmVsIHVzZXI9e3RoaXMucHJvcHMucHJvZmlsZX1cbiAgICAgICAgICAgICAgICAgICAgIHN0YXR1cz17dGhpcy5wcm9wcy5wcm9maWxlLnN0YXR1c31cbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN0YXR1cy1sYWJlbFwiIC8+XG4gICAgICA8L1N0YXR1cz5cbiAgICA8L2xpPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG5cbiAgZ2V0VXNlclJhbmsoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucHJvZmlsZS5yYW5rLmlzX3RhYikge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxsaSBjbGFzc05hbWU9XCJ1c2VyLXJhbmtcIj5cbiAgICAgICAgPGEgaHJlZj17dGhpcy5wcm9wcy5wcm9maWxlLnJhbmsuYWJzb2x1dGVfdXJsfSBjbGFzc05hbWU9XCJpdGVtLXRpdGxlXCI+XG4gICAgICAgICAge3RoaXMucHJvcHMucHJvZmlsZS5yYW5rLm5hbWV9XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxsaSBjbGFzc05hbWU9XCJ1c2VyLXJhbmtcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaXRlbS10aXRsZVwiPnt0aGlzLnByb3BzLnByb2ZpbGUucmFuay5uYW1lfTwvc3Bhbj5cbiAgICAgIDwvbGk+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9XG4gIH1cblxuICBnZXRVc2VyVGl0bGUoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucHJvZmlsZS50aXRsZSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxsaSBjbGFzc05hbWU9XCJ1c2VyLXRpdGxlXCI+XG4gICAgICAgIHt0aGlzLnByb3BzLnByb2ZpbGUudGl0bGV9XG4gICAgICA8L2xpPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnByb2ZpbGUucmFuay50aXRsZSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxsaSBjbGFzc05hbWU9XCJ1c2VyLXRpdGxlXCI+XG4gICAgICAgIHt0aGlzLnByb3BzLnByb2ZpbGUucmFuay50aXRsZX1cbiAgICAgIDwvbGk+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0Sm9pbmVkT24oKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIGxldCB0aXRsZSA9IGludGVycG9sYXRlKGdldHRleHQoXCJKb2luZWQgb24gJShqb2luZWRfb24pc1wiKSwge1xuICAgICAgJ2pvaW5lZF9vbic6IHRoaXMucHJvcHMucHJvZmlsZS5qb2luZWRfb24uZm9ybWF0KCdMTCwgTFQnKVxuICAgIH0sIHRydWUpO1xuXG4gICAgbGV0IGFnZSA9IGludGVycG9sYXRlKGdldHRleHQoXCJKb2luZWQgJShqb2luZWRfb24pc1wiKSwge1xuICAgICAgJ2pvaW5lZF9vbic6IHRoaXMucHJvcHMucHJvZmlsZS5qb2luZWRfb24uZnJvbU5vdygpXG4gICAgfSwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gPGxpIGNsYXNzTmFtZT1cInVzZXItam9pbmVkLW9uXCI+XG4gICAgICA8YWJiciB0aXRsZT17dGl0bGV9PlxuICAgICAgICB7YWdlfVxuICAgICAgPC9hYmJyPlxuICAgIDwvbGk+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxuICBnZXRFbWFpbCgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wcm9maWxlLmVtYWlsKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGxpIGNsYXNzTmFtZT1cInVzZXItZW1haWxcIj5cbiAgICAgICAgPGEgaHJlZj17J21haWx0bzonICsgdGhpcy5wcm9wcy5wcm9maWxlLmVtYWlsfSBjbGFzc05hbWU9XCJpdGVtLXRpdGxlXCI+XG4gICAgICAgICAge3RoaXMucHJvcHMucHJvZmlsZS5lbWFpbH1cbiAgICAgICAgPC9hPlxuICAgICAgPC9saT47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRGb2xsb3dCdXR0b24oKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucHJvZmlsZS5hY2wuY2FuX2ZvbGxvdykge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxGb2xsb3dCdXR0b24gY2xhc3NOYW1lPVwiYnRuIGJ0bi1hbGlnbmVkIGhpZGRlbi14cyBoaWRkZW4tc21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZT17dGhpcy5wcm9wcy5wcm9maWxlfSAvPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldE1vZGVyYXRpb25CdXR0b24oKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucHJvZmlsZS5hY2wuY2FuX21vZGVyYXRlKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJidG4tZ3JvdXAgYnRuLWFsaWduZWQgaGlkZGVuLXhzIGhpZGRlbi1zbVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdCBidG4tbW9kZXJhdGUgZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgICAgdG9uYWxpdHlcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAge2dldHRleHQoXCJNb2RlcmF0aW9uXCIpfVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPE1vZGVyYXRpb25OYXYgcHJvZmlsZT17dGhpcy5wcm9wcy5wcm9maWxlfSAvPlxuICAgICAgPC9kaXY+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm48ZGl2IGNsYXNzTmFtZT1cInBhZ2UtaGVhZGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtOSBjb2wtbWQtb2Zmc2V0LTNcIj5cblxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInB1bGwtbGVmdFwiPlxuICAgICAgICAgICAgICA8QXZhdGFyIHVzZXI9e3RoaXMucHJvcHMucHJvZmlsZX0gc2l6ZT1cIjEwMFwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInVzZXItbmFtZVwiPnt0aGlzLnByb3BzLnByb2ZpbGUudXNlcm5hbWV9PC9zcGFuPlxuICAgICAgICAgICAgPC9oMT5cblxuICAgICAgICAgICAge3RoaXMuZ2V0Rm9sbG93QnV0dG9uKCl9XG4gICAgICAgICAgICB7dGhpcy5nZXRNb2RlcmF0aW9uQnV0dG9uKCl9XG5cbiAgICAgICAgICAgIDxEcm9wZG93blRvZ2dsZSB0b2dnbGVOYXY9e3RoaXMucHJvcHMudG9nZ2xlTmF2fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duPXt0aGlzLnByb3BzLmRyb3Bkb3dufSAvPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGVhZGVyLXN0YXRzXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLW1kLTkgY29sLW1kLW9mZnNldC0zXCI+XG5cbiAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cImxpc3QtaW5saW5lXCI+XG4gICAgICAgICAgICAgICAge3RoaXMuZ2V0VXNlclN0YXR1cygpfVxuICAgICAgICAgICAgICAgIHt0aGlzLmdldFVzZXJSYW5rKCl9XG4gICAgICAgICAgICAgICAge3RoaXMuZ2V0VXNlclRpdGxlKCl9XG4gICAgICAgICAgICAgICAge3RoaXMuZ2V0Sm9pbmVkT24oKX1cbiAgICAgICAgICAgICAgICB7dGhpcy5nZXRFbWFpbCgpfVxuICAgICAgICAgICAgICA8L3VsPlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUGFuZWxMb2FkZXIgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvcGFuZWwtbG9hZGVyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgUGFuZWxNZXNzYWdlIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3BhbmVsLW1lc3NhZ2UnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBwb2xscyBmcm9tICdtaXNhZ28vc2VydmljZXMvcG9sbHMnO1xuaW1wb3J0IHRpdGxlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9wYWdlLXRpdGxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIGlmIChtaXNhZ28uaGFzKCdQUk9GSUxFX0JBTicpKSB7XG4gICAgICB0aGlzLmluaXRXaXRoUHJlbG9hZGVkRGF0YShtaXNhZ28ucG9wKCdQUk9GSUxFX0JBTicpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbml0V2l0aG91dFByZWxvYWRlZERhdGEoKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0UG9sbGluZyhwcm9wcy5wcm9maWxlLmFwaV91cmwuYmFuKTtcbiAgfVxuXG4gIGluaXRXaXRoUHJlbG9hZGVkRGF0YShiYW4pIHtcbiAgICBpZiAoYmFuLmV4cGlyZXNfb24pIHtcbiAgICAgIGJhbi5leHBpcmVzX29uID0gbW9tZW50KGJhbi5leHBpcmVzX29uKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNMb2FkZWQ6IHRydWUsXG4gICAgICBiYW5cbiAgICB9O1xuICB9XG5cbiAgaW5pdFdpdGhvdXRQcmVsb2FkZWREYXRhKCkge1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBpc0xvYWRlZDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgc3RhcnRQb2xsaW5nKGFwaSkge1xuICAgIHBvbGxzLnN0YXJ0KHtcbiAgICAgIHBvbGw6ICdiYW4tZGV0YWlscycsXG4gICAgICB1cmw6IGFwaSxcbiAgICAgIGZyZXF1ZW5jeTogOTAgKiAxMDAwLFxuICAgICAgdXBkYXRlOiB0aGlzLnVwZGF0ZSxcbiAgICAgIGVycm9yOiB0aGlzLmVycm9yXG4gICAgfSk7XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIHVwZGF0ZSA9IChiYW4pID0+IHtcbiAgICBpZiAoYmFuLmV4cGlyZXNfb24pIHtcbiAgICAgIGJhbi5leHBpcmVzX29uID0gbW9tZW50KGJhbi5leHBpcmVzX29uKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGlzTG9hZGVkOiB0cnVlLFxuICAgICAgZXJyb3I6IG51bGwsXG5cbiAgICAgIGJhblxuICAgIH0pO1xuICB9O1xuXG4gIGVycm9yID0gKGVycm9yKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpc0xvYWRlZDogdHJ1ZSxcbiAgICAgIGVycm9yOiBlcnJvci5kZXRhaWwsXG4gICAgICBiYW46IG51bGxcbiAgICB9KTtcbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aXRsZS5zZXQoe1xuICAgICAgdGl0bGU6IGdldHRleHQoXCJCYW4gZGV0YWlsc1wiKSxcbiAgICAgIHBhcmVudDogdGhpcy5wcm9wcy5wcm9maWxlLnVzZXJuYW1lXG4gICAgfSk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBwb2xscy5zdG9wKCdiYW4tZGV0YWlscycpO1xuICB9XG5cbiAgZ2V0VXNlck1lc3NhZ2UoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuYmFuLnVzZXJfbWVzc2FnZSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtYm9keSBiYW4tbWVzc2FnZSBiYW4tdXNlci1tZXNzYWdlXCI+XG4gICAgICAgIDxoND57Z2V0dGV4dChcIlVzZXItc2hvd24gYmFuIG1lc3NhZ2VcIil9PC9oND5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsZWFkXCIgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICAgIF9faHRtbDogdGhpcy5zdGF0ZS5iYW4udXNlcl9tZXNzYWdlLmh0bWxcbiAgICAgICAgICB9fSAvPlxuICAgICAgPC9kaXY+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhZmZNZXNzYWdlKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmJhbi5zdGFmZl9tZXNzYWdlKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1ib2R5IGJhbi1tZXNzYWdlIGJhbi1zdGFmZi1tZXNzYWdlXCI+XG4gICAgICAgIDxoND57Z2V0dGV4dChcIlRlYW0tc2hvd24gYmFuIG1lc3NhZ2VcIil9PC9oND5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsZWFkXCIgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICAgIF9faHRtbDogdGhpcy5zdGF0ZS5iYW4uc3RhZmZfbWVzc2FnZS5odG1sXG4gICAgICAgICAgfX0gLz5cbiAgICAgIDwvZGl2PjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0RXhwaXJhdGlvbk1lc3NhZ2UoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuYmFuLmV4cGlyZXNfb24pIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmJhbi5leHBpcmVzX29uLmlzQWZ0ZXIobW9tZW50KCkpKSB7XG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgICAgbGV0IHRpdGxlID0gaW50ZXJwb2xhdGUoXG4gICAgICAgICAgZ2V0dGV4dChcIlRoaXMgYmFuIGV4cGlyZXMgb24gJShleHBpcmVzX29uKXMuXCIpLCB7XG4gICAgICAgICAgICAnZXhwaXJlc19vbic6IHRoaXMuc3RhdGUuYmFuLmV4cGlyZXNfb24uZm9ybWF0KCdMTCwgTFQnKVxuICAgICAgICAgIH0sIHRydWUpO1xuXG4gICAgICAgIGxldCBtZXNzYWdlID0gaW50ZXJwb2xhdGUoXG4gICAgICAgICAgZ2V0dGV4dChcIlRoaXMgYmFuIGV4cGlyZXMgJShleHBpcmVzX29uKXMuXCIpLCB7XG4gICAgICAgICAgICAnZXhwaXJlc19vbic6IHRoaXMuc3RhdGUuYmFuLmV4cGlyZXNfb24uZnJvbU5vdygpXG4gICAgICAgICAgfSwgdHJ1ZSk7XG5cbiAgICAgICAgcmV0dXJuIDxhYmJyIHRpdGxlPXt0aXRsZX0+XG4gICAgICAgICAge21lc3NhZ2V9XG4gICAgICAgIDwvYWJicj47XG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZ2V0dGV4dChcIlRoaXMgYmFuIGhhcyBleHBpcmVkLlwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGludGVycG9sYXRlKGdldHRleHQoXCIlKHVzZXJuYW1lKXMncyBiYW4gaXMgcGVybWFuZW50LlwiKSwge1xuICAgICAgICAndXNlcm5hbWUnOiB0aGlzLnByb3BzLnByb2ZpbGUudXNlcm5hbWVcbiAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldFBhbmVsQm9keSgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5iYW4pIHtcbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnN0YXRlLmJhbikubGVuZ3RoKSB7XG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgICAgcmV0dXJuIDxkaXY+XG4gICAgICAgICAge3RoaXMuZ2V0VXNlck1lc3NhZ2UoKX1cbiAgICAgICAgICB7dGhpcy5nZXRTdGFmZk1lc3NhZ2UoKX1cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtYm9keSBiYW4tZXhwaXJlc1wiPlxuICAgICAgICAgICAgPGg0PntnZXR0ZXh0KFwiQmFuIGV4cGlyYXRpb25cIil9PC9oND5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImxlYWRcIj5cbiAgICAgICAgICAgICAge3RoaXMuZ2V0RXhwaXJhdGlvbk1lc3NhZ2UoKX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+O1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgICByZXR1cm4gPGRpdj5cbiAgICAgICAgICA8UGFuZWxNZXNzYWdlIG1lc3NhZ2U9e2dldHRleHQoXCJObyBiYW4gaXMgYWN0aXZlIGF0IHRoZSBtb21lbnQuXCIpfSAvPlxuICAgICAgICA8L2Rpdj47XG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmVycm9yKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGRpdj5cbiAgICAgICAgPFBhbmVsTWVzc2FnZSBpY29uPVwiZXJyb3Jfb3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT17dGhpcy5zdGF0ZS5lcnJvcn0gLz5cbiAgICAgIDwvZGl2PjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8ZGl2PlxuICAgICAgICA8UGFuZWxMb2FkZXIgLz5cbiAgICAgIDwvZGl2PjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJwcm9maWxlLWJhbi1kZXRhaWxzXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbC1oZWFkaW5nXCI+XG4gICAgICAgICAgPGgzIGNsYXNzTmFtZT1cInBhbmVsLXRpdGxlXCI+e2dldHRleHQoXCJCYW4gZGV0YWlsc1wiKX08L2gzPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICB7dGhpcy5nZXRQYW5lbEJvZHkoKX1cblxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCB7IHBhdGNoUHJvZmlsZSB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy9wcm9maWxlJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnByb2ZpbGUuaXNfZm9sbG93ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNsYXNzTmFtZSArICcgYnRuLWRlZmF1bHQgYnRuLWZvbGxvd2luZyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNsYXNzTmFtZSArICcgYnRuLWRlZmF1bHQgYnRuLWZvbGxvdyc7XG4gICAgfVxuICB9XG5cbiAgZ2V0SWNvbigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wcm9maWxlLmlzX2ZvbGxvd2VkKSB7XG4gICAgICByZXR1cm4gJ2Zhdm9yaXRlJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdmYXZvcml0ZV9ib3JkZXInO1xuICAgIH1cbiAgfVxuXG4gIGdldExhYmVsKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnByb2ZpbGUuaXNfZm9sbG93ZWQpIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiRm9sbG93aW5nXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZ2V0dGV4dChcIkZvbGxvd1wiKTtcbiAgICB9XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIGFjdGlvbiA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGlzTG9hZGluZzogdHJ1ZVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucHJvcHMucHJvZmlsZS5pc19mb2xsb3dlZCkge1xuICAgICAgc3RvcmUuZGlzcGF0Y2gocGF0Y2hQcm9maWxlKHtcbiAgICAgICAgaXNfZm9sbG93ZWQ6IGZhbHNlLFxuICAgICAgICBmb2xsb3dlcnM6IHRoaXMucHJvcHMucHJvZmlsZS5mb2xsb3dlcnMgLSAxXG4gICAgICB9KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0b3JlLmRpc3BhdGNoKHBhdGNoUHJvZmlsZSh7XG4gICAgICAgIGlzX2ZvbGxvd2VkOiB0cnVlLFxuICAgICAgICBmb2xsb3dlcnM6IHRoaXMucHJvcHMucHJvZmlsZS5mb2xsb3dlcnMgKyAxXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgYWpheC5wb3N0KHRoaXMucHJvcHMucHJvZmlsZS5hcGlfdXJsLmZvbGxvdykudGhlbigoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICBzdG9yZS5kaXNwYXRjaChwYXRjaFByb2ZpbGUoZGF0YSkpO1xuICAgIH0sIChyZWplY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHNuYWNrYmFyLmFwaUVycm9yKHJlamVjdGlvbik7XG4gICAgfSk7XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPEJ1dHRvbiBjbGFzc05hbWU9e3RoaXMuZ2V0Q2xhc3NOYW1lKCl9XG4gICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuYWN0aW9ufT5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAge3RoaXMuZ2V0SWNvbigpfVxuICAgICAgPC9zcGFuPlxuICAgICAge3RoaXMuZ2V0TGFiZWwoKX1cbiAgICA8L0J1dHRvbj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2J1dHRvbic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFNlYXJjaCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9zZWFyY2gnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBVc2Vyc0xpc3QgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvdXNlcnMtbGlzdC9yb290JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgeyBkZWh5ZHJhdGUsIGFwcGVuZCB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy91c2Vycyc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IGFqYXggZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2FqYXgnO1xuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7XG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJztcbmltcG9ydCB0aXRsZSBmcm9tICdtaXNhZ28vc2VydmljZXMvcGFnZS10aXRsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnNldFNwZWNpYWxQcm9wcygpO1xuXG4gICAgaWYgKG1pc2Fnby5oYXModGhpcy5QUkVMT0FERURfREFUQV9LRVkpKSB7XG4gICAgICB0aGlzLmluaXRXaXRoUHJlbG9hZGVkRGF0YShtaXNhZ28ucG9wKHRoaXMuUFJFTE9BREVEX0RBVEFfS0VZKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdFdpdGhvdXRQcmVsb2FkZWREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0U3BlY2lhbFByb3BzKCkge1xuICAgIHRoaXMuUFJFTE9BREVEX0RBVEFfS0VZID0gJ1BST0ZJTEVfRk9MTE9XRVJTJztcbiAgICB0aGlzLlRJVExFID0gZ2V0dGV4dCgnRm9sbG93ZXJzJyk7XG4gICAgdGhpcy5BUElfRklMVEVSID0gJ2ZvbGxvd2Vycyc7XG4gIH1cblxuICBpbml0V2l0aFByZWxvYWRlZERhdGEoZGF0YSkge1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBpc0xvYWRlZDogdHJ1ZSxcbiAgICAgIGlzQnVzeTogZmFsc2UsXG5cbiAgICAgIHNlYXJjaDogJycsXG5cbiAgICAgIGNvdW50OiBkYXRhLmNvdW50LFxuICAgICAgbW9yZTogZGF0YS5tb3JlLFxuXG4gICAgICBwYWdlOiBkYXRhLnBhZ2UsXG4gICAgICBwYWdlczogZGF0YS5wYWdlc1xuICAgIH07XG5cbiAgICBzdG9yZS5kaXNwYXRjaChkZWh5ZHJhdGUoZGF0YS5yZXN1bHRzKSk7XG4gIH1cblxuICBpbml0V2l0aG91dFByZWxvYWRlZERhdGEoKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzTG9hZGVkOiBmYWxzZSxcbiAgICAgIGlzQnVzeTogZmFsc2UsXG5cbiAgICAgIHNlYXJjaDogJycsXG5cbiAgICAgIGNvdW50OiAwLFxuICAgICAgbW9yZTogMCxcblxuICAgICAgcGFnZTogMSxcbiAgICAgIHBhZ2VzOiAxXG4gICAgfTtcblxuICAgIHRoaXMubG9hZFVzZXJzKCk7XG4gIH1cblxuICBsb2FkVXNlcnMocGFnZT0xLCBzZWFyY2g9bnVsbCkge1xuICAgIGFqYXguZ2V0KG1pc2Fnby5nZXQoJ1VTRVJTX0FQSScpLCB7XG4gICAgICBbdGhpcy5BUElfRklMVEVSXTogdGhpcy5wcm9wcy5wcm9maWxlLmlkLFxuICAgICAgbmFtZTogc2VhcmNoLFxuICAgICAgcGFnZTogcGFnZSB8fCAxXG4gICAgfSwgJ3VzZXItJyArIHRoaXMuQVBJX0ZJTFRFUikudGhlbigoZGF0YSkgPT4ge1xuICAgICAgaWYgKHBhZ2UgPT09IDEpIHtcbiAgICAgICAgc3RvcmUuZGlzcGF0Y2goZGVoeWRyYXRlKGRhdGEucmVzdWx0cykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RvcmUuZGlzcGF0Y2goYXBwZW5kKGRhdGEucmVzdWx0cykpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNMb2FkZWQ6IHRydWUsXG4gICAgICAgIGlzQnVzeTogZmFsc2UsXG5cbiAgICAgICAgY291bnQ6IGRhdGEuY291bnQsXG4gICAgICAgIG1vcmU6IGRhdGEubW9yZSxcblxuICAgICAgICBwYWdlOiBkYXRhLnBhZ2UsXG4gICAgICAgIHBhZ2VzOiBkYXRhLnBhZ2VzXG4gICAgICB9KTtcbiAgICB9LCAocmVqZWN0aW9uKSA9PiB7XG4gICAgICBzbmFja2Jhci5hcGlFcnJvcihyZWplY3Rpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGl0bGUuc2V0KHtcbiAgICAgIHRpdGxlOiB0aGlzLlRJVExFLFxuICAgICAgcGFyZW50OiB0aGlzLnByb3BzLnByb2ZpbGUudXNlcm5hbWVcbiAgICB9KTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgbG9hZE1vcmUgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpc0J1c3k6IHRydWVcbiAgICB9KTtcblxuICAgIHRoaXMubG9hZFVzZXJzKHRoaXMuc3RhdGUucGFnZSArIDEsIHRoaXMuc3RhdGUuc2VhcmNoKTtcbiAgfTtcblxuICBzZWFyY2ggPSAoZXYpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGlzTG9hZGVkOiBmYWxzZSxcbiAgICAgIGlzQnVzeTogdHJ1ZSxcblxuICAgICAgc2VhcmNoOiBldi50YXJnZXQudmFsdWUsXG5cbiAgICAgIGNvdW50OiAwLFxuICAgICAgbW9yZTogMCxcblxuICAgICAgcGFnZTogMSxcbiAgICAgIHBhZ2VzOiAxXG4gICAgfSk7XG5cbiAgICB0aGlzLmxvYWRVc2VycygxLCBldi50YXJnZXQudmFsdWUpO1xuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIGdldExhYmVsKCkge1xuICAgIGlmICghdGhpcy5zdGF0ZS5pc0xvYWRlZCkge1xuICAgICAgcmV0dXJuIGdldHRleHQoJ0xvYWRpbmcuLi4nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUuc2VhcmNoKSB7XG4gICAgICBsZXQgbWVzc2FnZSA9IG5nZXR0ZXh0KFxuICAgICAgICBcIkZvdW5kICUodXNlcnMpcyB1c2VyLlwiLFxuICAgICAgICBcIkZvdW5kICUodXNlcnMpcyB1c2Vycy5cIixcbiAgICAgICAgdGhpcy5zdGF0ZS5jb3VudCk7XG5cbiAgICAgIHJldHVybiBpbnRlcnBvbGF0ZShtZXNzYWdlLCB7XG4gICAgICAgICd1c2Vycyc6IHRoaXMuc3RhdGUuY291bnRcbiAgICAgIH0sIHRydWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5wcm9maWxlLmlkID09PSB0aGlzLnByb3BzLnVzZXIuaWQpIHtcbiAgICAgIGxldCBtZXNzYWdlID0gbmdldHRleHQoXG4gICAgICAgIFwiWW91IGhhdmUgJSh1c2VycylzIGZvbGxvd2VyLlwiLFxuICAgICAgICBcIllvdSBoYXZlICUodXNlcnMpcyBmb2xsb3dlcnMuXCIsXG4gICAgICAgIHRoaXMuc3RhdGUuY291bnQpO1xuXG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUobWVzc2FnZSwge1xuICAgICAgICAndXNlcnMnOiB0aGlzLnN0YXRlLmNvdW50XG4gICAgICB9LCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG1lc3NhZ2UgPSBuZ2V0dGV4dChcbiAgICAgICAgXCIlKHVzZXJuYW1lKXMgaGFzICUodXNlcnMpcyBmb2xsb3dlci5cIixcbiAgICAgICAgXCIlKHVzZXJuYW1lKXMgaGFzICUodXNlcnMpcyBmb2xsb3dlcnMuXCIsXG4gICAgICAgIHRoaXMuc3RhdGUuY291bnQpO1xuXG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUobWVzc2FnZSwge1xuICAgICAgICAndXNlcm5hbWUnOiB0aGlzLnByb3BzLnByb2ZpbGUudXNlcm5hbWUsXG4gICAgICAgICd1c2Vycyc6IHRoaXMuc3RhdGUuY291bnRcbiAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldEVtcHR5TWVzc2FnZSgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5zZWFyY2gpIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiU2VhcmNoIHJldHVybmVkIG5vIHVzZXJzIG1hdGNoaW5nIHNwZWNpZmllZCBjcml0ZXJpYS5cIik7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnVzZXIuaWQgPT09IHRoaXMucHJvcHMucHJvZmlsZS5pZCkge1xuICAgICAgcmV0dXJuIGdldHRleHQoXCJZb3UgaGF2ZSBubyBmb2xsb3dlcnMuXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIiUodXNlcm5hbWUpcyBoYXMgbm8gZm9sbG93ZXJzLlwiKSwge1xuICAgICAgICAndXNlcm5hbWUnOiB0aGlzLnByb3BzLnByb2ZpbGUudXNlcm5hbWVcbiAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldE1vcmVCdXR0b24oKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUubW9yZSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwicGFnZXItbW9yZVwiPlxuICAgICAgICA8QnV0dG9uIGxvYWRpbmc9e3RoaXMuc3RhdGUuaXNCdXN5fVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMubG9hZE1vcmV9PlxuICAgICAgICAgIHtpbnRlcnBvbGF0ZShnZXR0ZXh0KFwiU2hvdyBtb3JlICglKG1vcmUpcylcIiksIHtcbiAgICAgICAgICAgICdtb3JlJzogdGhpcy5zdGF0ZS5tb3JlXG4gICAgICAgICAgfSwgdHJ1ZSl9XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9kaXY+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0TGlzdEJvZHkoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuaXNMb2FkZWQgJiYgdGhpcy5zdGF0ZS5jb3VudCA9PT0gMCkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxwIGNsYXNzTmFtZT1cImxlYWRcIj5cbiAgICAgICAge3RoaXMuZ2V0RW1wdHlNZXNzYWdlKCl9XG4gICAgICA8L3A+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxkaXY+XG4gICAgICAgIDxVc2Vyc0xpc3QgaXNMb2FkZWQ9e3RoaXMuc3RhdGUuaXNMb2FkZWR9XG4gICAgICAgICAgICAgICAgICAgdXNlcnM9e3RoaXMucHJvcHMudXNlcnN9XG4gICAgICAgICAgICAgICAgICAgc2hvd1Jhbms9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgY29scz17Mn0gLz5cblxuICAgICAgICB7dGhpcy5nZXRNb3JlQnV0dG9uKCl9XG4gICAgICA8L2Rpdj47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH1cbiAgfVxuXG4gIGdldENsYXNzTmFtZSgpIHtcbiAgICByZXR1cm4gJ3Byb2ZpbGUtJyArIHRoaXMuQVBJX0ZJTFRFUjtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmdldENsYXNzTmFtZSgpfT5cblxuICAgICAgPG5hdiBjbGFzc05hbWU9XCJ0b29sYmFyXCI+XG4gICAgICAgIDxoMyBjbGFzc05hbWU9XCJ0b29sYmFyLWxlZnRcIj5cbiAgICAgICAgICB7dGhpcy5nZXRMYWJlbCgpfVxuICAgICAgICA8L2gzPlxuXG4gICAgICAgIDxTZWFyY2ggY2xhc3NOYW1lPVwidG9vbGJhci1yaWdodFwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuc2VhcmNofVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLnNlYXJjaH1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17Z2V0dGV4dChcIlNlYXJjaCBoaXN0b3J5Li4uXCIpfSAvPlxuICAgICAgPC9uYXY+XG5cbiAgICAgIHt0aGlzLmdldExpc3RCb2R5KCl9XG5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEZvbGxvd2VycyBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9wcm9maWxlL2ZvbGxvd2Vycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgRm9sbG93ZXJzIHtcbiAgc2V0U3BlY2lhbFByb3BzKCkge1xuICAgIHRoaXMuUFJFTE9BREVEX0RBVEFfS0VZID0gJ1BST0ZJTEVfRk9MTE9XUyc7XG4gICAgdGhpcy5USVRMRSA9IGdldHRleHQoJ0ZvbGxvd3MnKTtcbiAgICB0aGlzLkFQSV9GSUxURVIgPSAnZm9sbG93cyc7XG4gIH1cblxuICBnZXRMYWJlbCgpIHtcbiAgICBpZiAoIXRoaXMuc3RhdGUuaXNMb2FkZWQpIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KCdMb2FkaW5nLi4uJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLnNlYXJjaCkge1xuICAgICAgbGV0IG1lc3NhZ2UgPSBuZ2V0dGV4dChcbiAgICAgICAgXCJGb3VuZCAlKHVzZXJzKXMgdXNlci5cIixcbiAgICAgICAgXCJGb3VuZCAlKHVzZXJzKXMgdXNlcnMuXCIsXG4gICAgICAgIHRoaXMuc3RhdGUuY291bnQpO1xuXG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUobWVzc2FnZSwge1xuICAgICAgICAndXNlcnMnOiB0aGlzLnN0YXRlLmNvdW50XG4gICAgICB9LCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMucHJvZmlsZS5pZCA9PT0gdGhpcy5wcm9wcy51c2VyLmlkKSB7XG4gICAgICBsZXQgbWVzc2FnZSA9IG5nZXR0ZXh0KFxuICAgICAgICBcIllvdSBhcmUgZm9sbG93aW5nICUodXNlcnMpcyB1c2VyLlwiLFxuICAgICAgICBcIllvdSBhcmUgZm9sbG93aW5nICUodXNlcnMpcyB1c2Vycy5cIixcbiAgICAgICAgdGhpcy5zdGF0ZS5jb3VudCk7XG5cbiAgICAgIHJldHVybiBpbnRlcnBvbGF0ZShtZXNzYWdlLCB7XG4gICAgICAgICd1c2Vycyc6IHRoaXMuc3RhdGUuY291bnRcbiAgICAgIH0sIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbWVzc2FnZSA9IG5nZXR0ZXh0KFxuICAgICAgICBcIiUodXNlcm5hbWUpcyBpcyBmb2xsb3dpbmcgJSh1c2VycylzIHVzZXIuXCIsXG4gICAgICAgIFwiJSh1c2VybmFtZSlzIGlzIGZvbGxvd2luZyAlKHVzZXJzKXMgdXNlcnMuXCIsXG4gICAgICAgIHRoaXMuc3RhdGUuY291bnQpO1xuXG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUobWVzc2FnZSwge1xuICAgICAgICAndXNlcm5hbWUnOiB0aGlzLnByb3BzLnByb2ZpbGUudXNlcm5hbWUsXG4gICAgICAgICd1c2Vycyc6IHRoaXMuc3RhdGUuY291bnRcbiAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldEVtcHR5TWVzc2FnZSgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5zZWFyY2gpIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiU2VhcmNoIHJldHVybmVkIG5vIHVzZXJzIG1hdGNoaW5nIHNwZWNpZmllZCBjcml0ZXJpYS5cIik7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnVzZXIuaWQgPT09IHRoaXMucHJvcHMucHJvZmlsZS5pZCkge1xuICAgICAgcmV0dXJuIGdldHRleHQoXCJZb3UgYXJlIG5vdCBmb2xsb3dpbmcgYW55IHVzZXJzLlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGludGVycG9sYXRlKGdldHRleHQoXCIlKHVzZXJuYW1lKXMgaXMgbm90IGZvbGxvd2luZyBhbnkgdXNlcnMuXCIpLCB7XG4gICAgICAgICd1c2VybmFtZSc6IHRoaXMucHJvcHMucHJvZmlsZS51c2VybmFtZVxuICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgQnV0dG9uIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2J1dHRvbic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEZvcm0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvZm9ybSc7XG5pbXBvcnQgRm9ybUdyb3VwIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2Zvcm0tZ3JvdXAnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBMb2FkZXIgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvbW9kYWwtbG9hZGVyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgWWVzTm9Td2l0Y2ggZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMveWVzLW5vLXN3aXRjaCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IE1vZGFsTWVzc2FnZSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9tb2RhbC1tZXNzYWdlJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgeyB1cGRhdGVBdmF0YXIgfSBmcm9tICdtaXNhZ28vcmVkdWNlcnMvdXNlcnMnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JztcbmltcG9ydCBzbmFja2JhciBmcm9tICdtaXNhZ28vc2VydmljZXMvc25hY2tiYXInO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgRm9ybSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzTG9hZGVkOiBmYWxzZSxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBlcnJvcjogbnVsbCxcblxuICAgICAgaXNfYXZhdGFyX2xvY2tlZDogJycsXG4gICAgICBhdmF0YXJfbG9ja191c2VyX21lc3NhZ2U6ICcnLFxuICAgICAgYXZhdGFyX2xvY2tfc3RhZmZfbWVzc2FnZTogJydcbiAgICB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgYWpheC5nZXQodGhpcy5wcm9wcy5wcm9maWxlLmFwaV91cmwubW9kZXJhdGVfYXZhdGFyKS50aGVuKChvcHRpb25zKSA9PiB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgaXNMb2FkZWQ6IHRydWUsXG5cbiAgICAgICAgaXNfYXZhdGFyX2xvY2tlZDogb3B0aW9ucy5pc19hdmF0YXJfbG9ja2VkLFxuICAgICAgICBhdmF0YXJfbG9ja191c2VyX21lc3NhZ2U6IG9wdGlvbnMuYXZhdGFyX2xvY2tfdXNlcl9tZXNzYWdlIHx8ICcnLFxuICAgICAgICBhdmF0YXJfbG9ja19zdGFmZl9tZXNzYWdlOiBvcHRpb25zLmF2YXRhcl9sb2NrX3N0YWZmX21lc3NhZ2UgfHwgJydcbiAgICAgIH0pO1xuICAgIH0sIChyZWplY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0xvYWRlZDogdHJ1ZSxcbiAgICAgICAgZXJyb3I6IHJlamVjdGlvbi5kZXRhaWxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgY2xlYW4oKSB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc25hY2tiYXIuZXJyb3IodGhpcy52YWxpZGF0ZSgpLnVzZXJuYW1lWzBdKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzZW5kKCkge1xuICAgIHJldHVybiBhamF4LnBvc3QodGhpcy5wcm9wcy5wcm9maWxlLmFwaV91cmwubW9kZXJhdGVfYXZhdGFyLCB7XG4gICAgICBpc19hdmF0YXJfbG9ja2VkOiB0aGlzLnN0YXRlLmlzX2F2YXRhcl9sb2NrZWQsXG4gICAgICBhdmF0YXJfbG9ja191c2VyX21lc3NhZ2U6IHRoaXMuc3RhdGUuYXZhdGFyX2xvY2tfdXNlcl9tZXNzYWdlLFxuICAgICAgYXZhdGFyX2xvY2tfc3RhZmZfbWVzc2FnZTogdGhpcy5zdGF0ZS5hdmF0YXJfbG9ja19zdGFmZl9tZXNzYWdlXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTdWNjZXNzKGFwaVJlc3BvbnNlKSB7XG4gICAgc3RvcmUuZGlzcGF0Y2godXBkYXRlQXZhdGFyKHRoaXMucHJvcHMucHJvZmlsZSwgYXBpUmVzcG9uc2UuYXZhdGFyX2hhc2gpKTtcbiAgICBzbmFja2Jhci5zdWNjZXNzKGdldHRleHQoXCJBdmF0YXIgY29udHJvbHMgaGF2ZSBiZWVuIGNoYW5nZWQuXCIpKTtcbiAgfVxuXG4gIGdldEZvcm1Cb2R5KCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGZvcm0gb25TdWJtaXQ9e3RoaXMuaGFuZGxlU3VibWl0fT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtYm9keVwiPlxuXG4gICAgICAgIDxGb3JtR3JvdXAgbGFiZWw9e2dldHRleHQoXCJMb2NrIGF2YXRhclwiKX1cbiAgICAgICAgICAgICAgICAgICBoZWxwVGV4dD17Z2V0dGV4dChcIkxvY2tpbmcgdXNlciBhdmF0YXIgd2lsbCBwcm9oaWJpdCB1c2VyIGZyb20gY2hhbmdpbmcgaGlzIGF2YXRhciBhbmQgd2lsbCByZXNldCBoaXMvaGVyIGF2YXRhciB0byBkZWZhdWx0IG9uZS5cIil9XG4gICAgICAgICAgICAgICAgICAgZm9yPVwiaWRfaXNfYXZhdGFyX2xvY2tlZFwiPlxuICAgICAgICAgIDxZZXNOb1N3aXRjaCBpZD1cImlkX2lzX2F2YXRhcl9sb2NrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICAgIGljb25Pbj1cImxvY2tfb3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIGljb25PZmY9XCJsb2NrX29wZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICBsYWJlbE9uPXtnZXR0ZXh0KFwiRGlzYWxsb3cgdXNlciBmcm9tIGNoYW5naW5nIGF2YXRhclwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxPZmY9e2dldHRleHQoXCJBbGxvdyB1c2VyIHRvIGNoYW5nZSBhdmF0YXJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnaXNfYXZhdGFyX2xvY2tlZCcpfVxuICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5pc19hdmF0YXJfbG9ja2VkfSAvPlxuICAgICAgICA8L0Zvcm1Hcm91cD5cblxuICAgICAgICA8Rm9ybUdyb3VwIGxhYmVsPXtnZXR0ZXh0KFwiVXNlciBtZXNzYWdlXCIpfVxuICAgICAgICAgICAgICAgICAgIGhlbHBUZXh0PXtnZXR0ZXh0KFwiT3B0aW9uYWwgbWVzc2FnZSBmb3IgdXNlciBleHBsYWluaW5nIHdoeSBoZS9zaGUgaXMgcHJvaGliaXRlZCBmb3JtIGNoYW5naW5nIGF2YXRhci5cIil9XG4gICAgICAgICAgICAgICAgICAgZm9yPVwiaWRfYXZhdGFyX2xvY2tfdXNlcl9tZXNzYWdlXCI+XG4gICAgICAgICAgPHRleHRhcmVhIGlkPVwiaWRfYXZhdGFyX2xvY2tfdXNlcl9tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgcm93cz1cIjRcIlxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnYXZhdGFyX2xvY2tfdXNlcl9tZXNzYWdlJyl9XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmF2YXRhcl9sb2NrX3VzZXJfbWVzc2FnZX0gLz5cbiAgICAgICAgPC9Gb3JtR3JvdXA+XG5cbiAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIlN0YWZmIG1lc3NhZ2VcIil9XG4gICAgICAgICAgICAgICAgICAgaGVscFRleHQ9e2dldHRleHQoXCJPcHRpb25hbCBtZXNzYWdlIGZvciBmb3J1bSB0ZWFtIG1lbWJlcnMgZXhwbGFpbmluZyB3aHkgdXNlciBpcyBwcm9oaWJpdGVkIGZvcm0gY2hhbmdpbmcgYXZhdGFyLlwiKX1cbiAgICAgICAgICAgICAgICAgICBmb3I9XCJpZF9hdmF0YXJfbG9ja19zdGFmZl9tZXNzYWdlXCI+XG4gICAgICAgICAgPHRleHRhcmVhIGlkPVwiaWRfYXZhdGFyX2xvY2tfc3RhZmZfbWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIHJvd3M9XCI0XCJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5iaW5kSW5wdXQoJ2F2YXRhcl9sb2NrX3N0YWZmX21lc3NhZ2UnKX1cbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuYXZhdGFyX2xvY2tfc3RhZmZfbWVzc2FnZX0gLz5cbiAgICAgICAgPC9Gb3JtR3JvdXA+XG5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1mb290ZXJcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0XCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIj5cbiAgICAgICAgICB7Z2V0dGV4dChcIkNsb3NlXCIpfVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJidG4tcHJpbWFyeVwiIGxvYWRpbmc9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfT5cbiAgICAgICAgICB7Z2V0dGV4dChcIlNhdmUgY2hhbmdlc1wiKX1cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxuICBnZXRNb2RhbEJvZHkoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZXJyb3IpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8TW9kYWxNZXNzYWdlIGljb249XCJyZW1vdmVfY2lyY2xlX291dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT17dGhpcy5zdGF0ZS5lcnJvcn0gLz47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5pc0xvYWRlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybUJvZHkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxMb2FkZXIgLz47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH1cbiAgfVxuXG4gIGdldENsYXNzTmFtZSgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5lcnJvcikge1xuICAgICAgcmV0dXJuIFwibW9kYWwtZGlhbG9nIG1vZGFsLW1lc3NhZ2UgbW9kYWwtYXZhdGFyLWNvbnRyb2xzXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIm1vZGFsLWRpYWxvZyBtb2RhbC1hdmF0YXItY29udHJvbHNcIjtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5nZXRDbGFzc05hbWUoKX1cbiAgICAgICAgICAgICAgICByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Z2V0dGV4dChcIkNsb3NlXCIpfT5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGg0IGNsYXNzTmFtZT1cIm1vZGFsLXRpdGxlXCI+e2dldHRleHQoXCJBdmF0YXIgY29udHJvbHNcIil9PC9oND5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLmdldE1vZGFsQm9keSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBCdXR0b24gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYnV0dG9uJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgRm9ybSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9mb3JtJztcbmltcG9ydCBGb3JtR3JvdXAgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvZm9ybS1ncm91cCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IExvYWRlciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9tb2RhbC1sb2FkZXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBNb2RhbE1lc3NhZ2UgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvbW9kYWwtbWVzc2FnZSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHsgYWRkTmFtZUNoYW5nZSB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy91c2VybmFtZS1oaXN0b3J5JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgeyB1cGRhdGVVc2VybmFtZSB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy91c2Vycyc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IGFqYXggZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2FqYXgnO1xuaW1wb3J0IHNuYWNrYmFyIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zbmFja2Jhcic7XG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJztcbmltcG9ydCAqIGFzIHZhbGlkYXRvcnMgZnJvbSAnbWlzYWdvL3V0aWxzL3ZhbGlkYXRvcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIEZvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBpc0xvYWRlZDogZmFsc2UsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGwsXG5cbiAgICAgIHVzZXJuYW1lOiAnJyxcbiAgICAgIHZhbGlkYXRvcnM6IHtcbiAgICAgICAgdXNlcm5hbWU6IFtcbiAgICAgICAgICB2YWxpZGF0b3JzLnVzZXJuYW1lQ29udGVudCgpLFxuICAgICAgICAgIHZhbGlkYXRvcnMudXNlcm5hbWVNaW5MZW5ndGgobWlzYWdvLmdldCgnU0VUVElOR1MnKSksXG4gICAgICAgICAgdmFsaWRhdG9ycy51c2VybmFtZU1heExlbmd0aChtaXNhZ28uZ2V0KCdTRVRUSU5HUycpKVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGFqYXguZ2V0KHRoaXMucHJvcHMucHJvZmlsZS5hcGlfdXJsLm1vZGVyYXRlX3VzZXJuYW1lKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0xvYWRlZDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSwgKHJlamVjdGlvbikgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzTG9hZGVkOiB0cnVlLFxuICAgICAgICBlcnJvcjogcmVqZWN0aW9uLmRldGFpbFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBjbGVhbigpIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzbmFja2Jhci5lcnJvcih0aGlzLnZhbGlkYXRlKCkudXNlcm5hbWVbMF0pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHNlbmQoKSB7XG4gICAgcmV0dXJuIGFqYXgucG9zdCh0aGlzLnByb3BzLnByb2ZpbGUuYXBpX3VybC5tb2RlcmF0ZV91c2VybmFtZSwge1xuICAgICAgdXNlcm5hbWU6IHRoaXMuc3RhdGUudXNlcm5hbWVcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVN1Y2Nlc3MoYXBpUmVzcG9uc2UpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHVzZXJuYW1lOiAnJ1xuICAgIH0pO1xuXG4gICAgc3RvcmUuZGlzcGF0Y2goYWRkTmFtZUNoYW5nZShcbiAgICAgIGFwaVJlc3BvbnNlLCB0aGlzLnByb3BzLnByb2ZpbGUsIHRoaXMucHJvcHMudXNlcikpO1xuICAgIHN0b3JlLmRpc3BhdGNoKHVwZGF0ZVVzZXJuYW1lKFxuICAgICAgdGhpcy5wcm9wcy5wcm9maWxlLCBhcGlSZXNwb25zZS51c2VybmFtZSwgYXBpUmVzcG9uc2Uuc2x1ZykpO1xuXG4gICAgc25hY2tiYXIuc3VjY2VzcyhnZXR0ZXh0KFwiVXNlcm5hbWUgaGFzIGJlZW4gY2hhbmdlZC5cIikpO1xuICB9XG5cbiAgZ2V0Rm9ybUJvZHkoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8Zm9ybSBvblN1Ym1pdD17dGhpcy5oYW5kbGVTdWJtaXR9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1ib2R5XCI+XG5cbiAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIk5ldyB1c2VybmFtZVwiKX0gZm9yPVwiaWRfdXNlcm5hbWVcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImlkX3VzZXJuYW1lXCIgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5iaW5kSW5wdXQoJ3VzZXJuYW1lJyl9XG4gICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnVzZXJuYW1lfSAvPlxuICAgICAgICA8L0Zvcm1Hcm91cD5cblxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPlxuICAgICAgICAgIHtnZXR0ZXh0KFwiQ2xvc2VcIil9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cImJ0bi1wcmltYXJ5XCIgbG9hZGluZz17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9PlxuICAgICAgICAgIHtnZXR0ZXh0KFwiQ2hhbmdlIHVzZXJuYW1lXCIpfVxuICAgICAgICA8L0J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxuXG4gIGdldE1vZGFsQm9keSgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5lcnJvcikge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxNb2RhbE1lc3NhZ2UgaWNvbj1cInJlbW92ZV9jaXJjbGVfb3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPXt0aGlzLnN0YXRlLmVycm9yfSAvPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmlzTG9hZGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRGb3JtQm9keSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPExvYWRlciAvPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfVxuICB9XG5cbiAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmVycm9yKSB7XG4gICAgICByZXR1cm4gXCJtb2RhbC1kaWFsb2cgbW9kYWwtbWVzc2FnZSBtb2RhbC1yZW5hbWUtdXNlclwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJtb2RhbC1kaWFsb2cgbW9kYWwtcmVuYW1lLXVzZXJcIjtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5nZXRDbGFzc05hbWUoKX1cbiAgICAgICAgICAgICAgICByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Z2V0dGV4dChcIkNsb3NlXCIpfT5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGg0IGNsYXNzTmFtZT1cIm1vZGFsLXRpdGxlXCI+e2dldHRleHQoXCJDaGFuZ2UgdXNlcm5hbWVcIil9PC9oND5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHt0aGlzLmdldE1vZGFsQm9keSgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBCdXR0b24gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYnV0dG9uJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgRm9ybSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9mb3JtJztcbmltcG9ydCBGb3JtR3JvdXAgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvZm9ybS1ncm91cCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IExvYWRlciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9tb2RhbC1sb2FkZXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBNb2RhbE1lc3NhZ2UgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvbW9kYWwtbWVzc2FnZSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFllc05vU3dpdGNoIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3llcy1uby1zd2l0Y2gnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7XG5pbXBvcnQgcG9sbHMgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3BvbGxzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBGb3JtIHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNMb2FkZWQ6IGZhbHNlLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGlzRGVsZXRlZDogZmFsc2UsXG4gICAgICBlcnJvcjogbnVsbCxcblxuICAgICAgY291bnRkb3duOiA1LFxuICAgICAgY29uZmlybTogZmFsc2UsXG5cbiAgICAgIHdpdGhfY29udGVudDogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgYWpheC5nZXQodGhpcy5wcm9wcy5wcm9maWxlLmFwaV91cmwuZGVsZXRlKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0xvYWRlZDogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY291bnRkb3duKCk7XG4gICAgfSwgKHJlamVjdGlvbikgPT4ge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzTG9hZGVkOiB0cnVlLFxuICAgICAgICBlcnJvcjogcmVqZWN0aW9uLmRldGFpbFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIGNvdW50ZG93biA9ICgpID0+IHtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5jb3VudGRvd24gPiAxKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGNvdW50ZG93bjogdGhpcy5zdGF0ZS5jb3VudGRvd24gLSAxLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb3VudGRvd24oKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMuc3RhdGUuY29uZmlybSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBjb25maXJtOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIDEwMDApO1xuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIHNlbmQoKSB7XG4gICAgcmV0dXJuIGFqYXgucG9zdCh0aGlzLnByb3BzLnByb2ZpbGUuYXBpX3VybC5kZWxldGUsIHtcbiAgICAgIHdpdGhfY29udGVudDogdGhpcy5zdGF0ZS53aXRoX2NvbnRlbnRcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVN1Y2Nlc3MoKSB7XG4gICAgcG9sbHMuc3RvcCgndXNlci1wcm9maWxlJyk7XG5cbiAgICBpZiAodGhpcy5zdGF0ZS53aXRoX2NvbnRlbnQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0RlbGV0ZWQ6IGludGVycG9sYXRlKGdldHRleHQoXCIlKHVzZXJuYW1lKXMncyBhY2NvdW50LCB0aHJlYWRzLCBwb3N0cyBhbmQgb3RoZXIgY29udGVudCBoYXMgYmVlbiBkZWxldGVkLlwiKSwge1xuICAgICAgICAgICd1c2VybmFtZSc6IHRoaXMucHJvcHMucHJvZmlsZS51c2VybmFtZVxuICAgICAgICB9LCB0cnVlKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBpc0RlbGV0ZWQ6IGludGVycG9sYXRlKGdldHRleHQoXCIlKHVzZXJuYW1lKXMncyBhY2NvdW50IGhhcyBiZWVuIGRlbGV0ZWQgYW5kIG90aGVyIGNvbnRlbnQgaGFzIGJlZW4gaGlkZGVuLlwiKSwge1xuICAgICAgICAgICd1c2VybmFtZSc6IHRoaXMucHJvcHMucHJvZmlsZS51c2VybmFtZVxuICAgICAgICB9LCB0cnVlKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QnV0dG9uTGFiZWwoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuY29uZmlybSkge1xuICAgICAgcmV0dXJuIGludGVycG9sYXRlKGdldHRleHQoXCJEZWxldGUgJSh1c2VybmFtZSlzXCIpLCB7XG4gICAgICAgICd1c2VybmFtZSc6IHRoaXMucHJvcHMucHJvZmlsZS51c2VybmFtZVxuICAgICAgfSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpbnRlcnBvbGF0ZShnZXR0ZXh0KFwiUGxlYXNlIHdhaXQuLi4gKCUoY291bnRkb3duKXNzKVwiKSwge1xuICAgICAgICAnY291bnRkb3duJzogdGhpcy5zdGF0ZS5jb3VudGRvd25cbiAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldEZvcm0oKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8Zm9ybSBvblN1Ym1pdD17dGhpcy5oYW5kbGVTdWJtaXR9IGNsYXNzTmFtZT1cImZvcm0taG9yaXpvbnRhbFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1ib2R5XCI+XG5cbiAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIlVzZXIgY29udGVudFwiKX1cbiAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiY29sLXNtLTRcIiBjb250cm9sQ2xhc3M9XCJjb2wtc20tOFwiXG4gICAgICAgICAgICAgICAgICAgZm9yPVwiaWRfd2l0aF9jb250ZW50XCI+XG4gICAgICAgICAgPFllc05vU3dpdGNoIGlkPVwiaWRfd2l0aF9jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgICBsYWJlbE9uPXtnZXR0ZXh0KFwiRGVsZXRlIHRvZ2V0aGVyIHdpdGggdXNlcidzIGFjY291bnRcIil9XG4gICAgICAgICAgICAgICAgICAgICAgIGxhYmVsT2ZmPXtnZXR0ZXh0KFwiSGlkZSBhZnRlciBkZWxldGluZyB1c2VyJ3MgYWNjb3VudFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuYmluZElucHV0KCd3aXRoX2NvbnRlbnQnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUud2l0aF9jb250ZW50fSAvPlxuICAgICAgICA8L0Zvcm1Hcm91cD5cblxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWZvb3RlclwiPlxuXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgICAgICAgICAgICBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPlxuICAgICAgICAgIHtnZXR0ZXh0KFwiQ2FuY2VsXCIpfVxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cImJ0bi1kYW5nZXJcIlxuICAgICAgICAgICAgICAgIGxvYWRpbmc9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshdGhpcy5zdGF0ZS5jb25maXJtfT5cbiAgICAgICAgICB7dGhpcy5nZXRCdXR0b25MYWJlbCgpfVxuICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG5cbiAgZ2V0RGVsZXRlZEJvZHkoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWJvZHlcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1pY29uXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICBpbmZvX291dGxpbmVcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtYm9keVwiPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJsZWFkXCI+XG4gICAgICAgICAge3RoaXMuc3RhdGUuaXNEZWxldGVkfVxuICAgICAgICA8L3A+XG4gICAgICAgIDxwPlxuICAgICAgICAgIDxhIGhyZWY9e21pc2Fnby5nZXQoJ1VTRVJTX0xJU1RfVVJMJyl9PlxuICAgICAgICAgICAge2dldHRleHQoXCJSZXR1cm4gdG8gdXNlcnMgbGlzdFwiKX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG5cbiAgZ2V0TW9kYWxCb2R5KCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmVycm9yKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPE1vZGFsTWVzc2FnZSBpY29uPVwicmVtb3ZlX2NpcmNsZV9vdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9e3RoaXMuc3RhdGUuZXJyb3J9IC8+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUuaXNMb2FkZWQpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmlzRGVsZXRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREZWxldGVkQm9keSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPExvYWRlciAvPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfVxuICB9XG5cbiAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmVycm9yIHx8IHRoaXMuc3RhdGUuaXNEZWxldGVkKSB7XG4gICAgICByZXR1cm4gXCJtb2RhbC1kaWFsb2cgbW9kYWwtbWVzc2FnZSBtb2RhbC1kZWxldGUtYWNjb3VudFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJtb2RhbC1kaWFsb2cgbW9kYWwtZGVsZXRlLWFjY291bnRcIjtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5nZXRDbGFzc05hbWUoKX1cbiAgICAgICAgICAgICAgICByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Z2V0dGV4dChcIkNsb3NlXCIpfT5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGg0IGNsYXNzTmFtZT1cIm1vZGFsLXRpdGxlXCI+e2dldHRleHQoXCJEZWxldGUgdXNlciBhY2NvdW50XCIpfTwvaDQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5nZXRNb2RhbEJvZHkoKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEF2YXRhckNvbnRyb2xzIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3Byb2ZpbGUvbW9kZXJhdGlvbi9hdmF0YXItY29udHJvbHMnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBDaGFuZ2VVc2VybmFtZSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9wcm9maWxlL21vZGVyYXRpb24vY2hhbmdlLXVzZXJuYW1lJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgRGVsZXRlQWNjb3VudCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9wcm9maWxlL21vZGVyYXRpb24vZGVsZXRlLWFjY291bnQnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtb2RhbCBmcm9tICdtaXNhZ28vc2VydmljZXMvbW9kYWwnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xubGV0IHNlbGVjdCA9IGZ1bmN0aW9uKHN0b3JlKSB7XG4gIHJldHVybiB7XG4gICAgdGljazogc3RvcmUudGljayxcbiAgICB1c2VyOiBzdG9yZS5hdXRoLFxuICAgIHByb2ZpbGU6IHN0b3JlLnByb2ZpbGUsXG4gIH07XG59O1xuLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIHNob3dBdmF0YXJEaWFsb2cgPSAoKSA9PiB7XG4gICAgbW9kYWwuc2hvdyhjb25uZWN0KHNlbGVjdCkoQXZhdGFyQ29udHJvbHMpKTtcbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICBnZXRBdmF0YXJCdXR0b24oKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucHJvZmlsZS5hY2wuY2FuX21vZGVyYXRlX2F2YXRhcikge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxsaT5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuLWxpbmtcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuc2hvd0F2YXRhckRpYWxvZ30+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgICAgcG9ydHJhaXRcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAge2dldHRleHQoXCJBdmF0YXIgY29udHJvbHNcIil9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9saT5cbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgc2hvd1JlbmFtZURpYWxvZyA9ICgpID0+IHtcbiAgICBtb2RhbC5zaG93KGNvbm5lY3Qoc2VsZWN0KShDaGFuZ2VVc2VybmFtZSkpO1xuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIGdldFJlbmFtZUJ1dHRvbigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wcm9maWxlLmFjbC5jYW5fcmVuYW1lKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGxpPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4tbGlua1wiXG4gICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5zaG93UmVuYW1lRGlhbG9nfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICBjcmVkaXRfY2FyZFxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB7Z2V0dGV4dChcIkNoYW5nZSB1c2VybmFtZVwiKX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICBzaG93RGVsZXRlRGlhbG9nID0gKCkgPT4ge1xuICAgIG1vZGFsLnNob3coY29ubmVjdChzZWxlY3QpKERlbGV0ZUFjY291bnQpKTtcbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICBnZXREZWxldGVCdXR0b24oKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucHJvZmlsZS5hY2wuY2FuX2RlbGV0ZSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxsaT5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuLWxpbmtcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuc2hvd0RlbGV0ZURpYWxvZ30+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgICAgY2xlYXJcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAge2dldHRleHQoXCJEZWxldGUgYWNjb3VudFwiKX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPHVsIGNsYXNzTmFtZT1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodFwiIHJvbGU9XCJtZW51XCI+XG4gICAgICB7dGhpcy5nZXRBdmF0YXJCdXR0b24oKX1cbiAgICAgIHt0aGlzLmdldFJlbmFtZUJ1dHRvbigpfVxuICAgICAge3RoaXMuZ2V0RGVsZXRlQnV0dG9uKCl9XG4gICAgICA8bGkgY2xhc3NOYW1lPVwiZGl2aWRlciBoaWRkZW4tbWQgaGlkZGVuLWxnXCIgLz5cbiAgICAgIDxsaSBjbGFzc05hbWU9XCJkcm9wZG93bi1idXR0b25zIGhpZGRlbi1tZCBoaWRkZW4tbGdcIj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1ibG9ja1wiXG4gICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5wcm9wcy50b2dnbGVOYXZ9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICAgIG1lbnVcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAge2dldHRleHQoXCJNZW51XCIpfVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgTGkgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvbGknOyAvL2pzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEZvbGxvd0J1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9wcm9maWxlL2ZvbGxvdy1idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JzsgLy9qc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGNsYXNzIFNpZGVOYXYgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRNZXRhKG1ldGEpIHtcbiAgICBpZiAobWV0YSkge1xuICAgICAgLy8ganNoaW50IGlnbm9yZTpzdGFydFxuICAgICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cImJhZGdlXCI+e3RoaXMucHJvcHMucHJvZmlsZVttZXRhLmF0dHJdfTwvc3Bhbj47XG4gICAgICAvLyBqc2hpbnQgaWdub3JlOmVuZFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLy8ganNoaW50IGlnbm9yZTpzdGFydFxuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImxpc3QtZ3JvdXAgbmF2LXNpZGVcIj5cbiAgICAgIHt0aGlzLnByb3BzLnBhZ2VzLm1hcCgocGFnZSkgPT4ge1xuICAgICAgICByZXR1cm4gPExpbmsgdG89e3RoaXMucHJvcHMuYmFzZVVybCArIHBhZ2UuY29tcG9uZW50ICsgJy8nfVxuICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibGlzdC1ncm91cC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUNsYXNzTmFtZT1cImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICBrZXk9e3BhZ2UuY29tcG9uZW50fT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICB7cGFnZS5pY29ufVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB7cGFnZS5uYW1lfVxuICAgICAgICAgIHt0aGlzLmdldE1ldGEocGFnZS5tZXRhKX1cbiAgICAgICAgPC9MaW5rPjtcbiAgICAgIH0pfVxuICAgIDwvZGl2PjtcbiAgICAvLyBqc2hpbnQgaWdub3JlOmVuZFxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wYWN0TmF2IGV4dGVuZHMgU2lkZU5hdiB7XG4gIHNob3dTcGVjaWFsT3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5wcm9maWxlLmFjbC5jYW5fZm9sbG93IHx8IHRoaXMucHJvcHMucHJvZmlsZS5hY2wuY2FuX21vZGVyYXRlO1xuICB9XG5cbiAgZ2V0Rm9sbG93QnV0dG9uKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnByb2ZpbGUuYWNsLmNhbl9mb2xsb3cpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8Rm9sbG93QnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZT17dGhpcy5wcm9wcy5wcm9maWxlfSAvPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldE1vZGVyYXRpb25CdXR0b24oKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucHJvZmlsZS5hY2wuY2FuX21vZGVyYXRlKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1ibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnByb3BzLnRvZ2dsZU1vZGVyYXRpb259PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgdG9uYWxpdHlcbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7Z2V0dGV4dChcIk1vZGVyYXRpb25cIil9XG4gICAgICA8L2J1dHRvbj47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRTcGVjaWFsT3B0aW9ucygpIHtcbiAgICBpZiAodGhpcy5zaG93U3BlY2lhbE9wdGlvbnMoKSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxsaSBjbGFzc05hbWU9XCJkcm9wZG93bi1idXR0b25zXCI+XG4gICAgICAgIHt0aGlzLmdldEZvbGxvd0J1dHRvbigpfVxuICAgICAgICB7dGhpcy5nZXRNb2RlcmF0aW9uQnV0dG9uKCl9XG4gICAgICA8L2xpPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvLyBqc2hpbnQgaWdub3JlOnN0YXJ0XG4gICAgcmV0dXJuIDx1bCBjbGFzc05hbWU9XCJkcm9wZG93bi1tZW51XCIgcm9sZT1cIm1lbnVcIj5cbiAgICAgIHt0aGlzLmdldFNwZWNpYWxPcHRpb25zKCl9XG4gICAgICB7dGhpcy5zaG93U3BlY2lhbE9wdGlvbnMoKSA/IDxsaSBjbGFzc05hbWU9XCJkaXZpZGVyXCIgLz4gOiBudWxsfVxuICAgICAge3RoaXMucHJvcHMucGFnZXMubWFwKChwYWdlKSA9PiB7XG4gICAgICAgIHJldHVybiA8TGkgcGF0aD17dGhpcy5wcm9wcy5iYXNlVXJsICsgcGFnZS5jb21wb25lbnQgKyAnLyd9XG4gICAgICAgICAgICAgICAgICAga2V5PXtwYWdlLmNvbXBvbmVudH0+XG4gICAgICAgICAgPExpbmsgdG89e3RoaXMucHJvcHMuYmFzZVVybCArIHBhZ2UuY29tcG9uZW50ICsgJy8nfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMucHJvcHMuaGlkZU5hdn0+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICAgIHtwYWdlLmljb259XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB7cGFnZS5uYW1lfVxuICAgICAgICAgICAge3RoaXMuZ2V0TWV0YShwYWdlLm1ldGEpfVxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgPC9MaT47XG4gICAgICB9KX1cbiAgICA8L3VsPjtcbiAgICAvLyBqc2hpbnQgaWdub3JlOmVuZFxuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgQXZhdGFyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2F2YXRhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEJhbkRldGFpbHMgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvcHJvZmlsZS9iYW4tZGV0YWlscyc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEZvbGxvd2VycyBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9wcm9maWxlL2ZvbGxvd2Vycyc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEZvbGxvd3MgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvcHJvZmlsZS9mb2xsb3dzJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgVXNlcm5hbWVIaXN0b3J5IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3Byb2ZpbGUvdXNlcm5hbWUtaGlzdG9yeSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEhlYWRlciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9wcm9maWxlL0hlYWRlcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IE1vZGVyYXRpb25OYXYgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvcHJvZmlsZS9tb2RlcmF0aW9uL25hdic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IHsgU2lkZU5hdiwgQ29tcGFjdE5hdiB9IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3Byb2ZpbGUvbmF2cyc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFdpdGhEcm9wZG93biBmcm9tICdtaXNhZ28vY29tcG9uZW50cy93aXRoLWRyb3Bkb3duJztcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCB7IGRlaHlkcmF0ZSB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy9wcm9maWxlJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgcG9sbHMgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3BvbGxzJztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBXaXRoRHJvcGRvd24ge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhcnRQb2xsaW5nKHByb3BzLnByb2ZpbGUuYXBpX3VybC5yb290KTtcbiAgfVxuXG4gIHN0YXJ0UG9sbGluZyhhcGkpIHtcbiAgICBwb2xscy5zdGFydCh7XG4gICAgICBwb2xsOiAndXNlci1wcm9maWxlJyxcbiAgICAgIHVybDogYXBpLFxuICAgICAgZnJlcXVlbmN5OiA5MCAqIDEwMDAsXG4gICAgICB1cGRhdGU6IHRoaXMudXBkYXRlXG4gICAgfSk7XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIHVwZGF0ZSA9IChkYXRhKSA9PiB7XG4gICAgc3RvcmUuZGlzcGF0Y2goZGVoeWRyYXRlKGRhdGEpKTtcbiAgfTtcblxuICB0b2dnbGVOYXYgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZHJvcGRvd24gPT09ICdwYWdlcycpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkcm9wZG93bjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZHJvcGRvd246ICdwYWdlcydcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICB0b2dnbGVNb2RlcmF0aW9uID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLmRyb3Bkb3duID09PSAnbW9kZXJhdGlvbicpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBkcm9wZG93bjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgZHJvcGRvd246ICdtb2RlcmF0aW9uJ1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIGdldE5hdkRyb3Bkb3duKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmRyb3Bkb3duID09PSAncGFnZXMnKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPENvbXBhY3ROYXYgcGFnZXM9e21pc2Fnby5nZXQoJ1BST0ZJTEVfUEFHRVMnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlVXJsPXttaXNhZ28uZ2V0KCdQUk9GSUxFJykuYWJzb2x1dGVfdXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgIHByb2ZpbGU9e3RoaXMucHJvcHMucHJvZmlsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICB0b2dnbGVNb2RlcmF0aW9uPXt0aGlzLnRvZ2dsZU1vZGVyYXRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgaGlkZU5hdj17dGhpcy5oaWRlTmF2fSAvPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmRyb3Bkb3duID09PSAnbW9kZXJhdGlvbicpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8TW9kZXJhdGlvbk5hdiBwcm9maWxlPXt0aGlzLnByb3BzLnByb2ZpbGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9nZ2xlTmF2PXt0aGlzLnRvZ2dsZU5hdn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlTmF2PXt0aGlzLmhpZGVOYXZ9IC8+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgIGNvbnN0IGJhc2VDbGFzcyA9ICdwYWdlIHBhZ2UtdXNlci1wcm9maWxlJztcbiAgICBpZiAoZmFsc2UgJiYgdGhpcy5wcm9wcy5wcm9maWxlLnJhbmsuY3NzX2NsYXNzKSB7XG4gICAgICByZXR1cm4gYmFzZUNsYXNzICsgJyBwYWdlLXVzZXItcHJvZmlsZS0nICsgdGhpcy5wcm9wcy5wcm9maWxlLnJhbmsuY3NzX2NsYXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYmFzZUNsYXNzO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmdldENsYXNzTmFtZSgpfT5cblxuICAgICAgPEhlYWRlciB1c2VyPXt0aGlzLnByb3BzLnVzZXJ9XG4gICAgICAgICAgICAgIHByb2ZpbGU9e3RoaXMucHJvcHMucHJvZmlsZX1cbiAgICAgICAgICAgICAgdG9nZ2xlTmF2PXt0aGlzLnRvZ2dsZU5hdn1cbiAgICAgICAgICAgICAgdG9nZ2xlTW9kZXJhdGlvbj17dGhpcy50b2dnbGVNb2RlcmF0aW9ufSAvPlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17dGhpcy5nZXRDb21wYWN0TmF2Q2xhc3NOYW1lKCl9PlxuICAgICAgICB7dGhpcy5nZXROYXZEcm9wZG93bigpfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb2wtbWQtMyBoaWRkZW4teHMgaGlkZGVuLXNtXCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHJvZmlsZS1zaWRlLWF2YXRhclwiPlxuICAgICAgICAgICAgICA8QXZhdGFyIHVzZXI9e3RoaXMucHJvcHMucHJvZmlsZX0gc2l6ZT1cIjQwMFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPFNpZGVOYXYgcGFnZXM9e21pc2Fnby5nZXQoJ1BST0ZJTEVfUEFHRVMnKX1cbiAgICAgICAgICAgICAgICAgICAgIGJhc2VVcmw9e21pc2Fnby5nZXQoJ1BST0ZJTEUnKS5hYnNvbHV0ZV91cmx9XG4gICAgICAgICAgICAgICAgICAgICBwcm9maWxlPXt0aGlzLnByb3BzLnByb2ZpbGV9IC8+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC1tZC05XCI+XG5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0KHN0b3JlKSB7XG4gIHJldHVybiB7XG4gICAgJ3RpY2snOiBzdG9yZS50aWNrLnRpY2ssXG4gICAgJ3VzZXInOiBzdG9yZS5hdXRoLnVzZXIsXG4gICAgJ3VzZXJzJzogc3RvcmUudXNlcnMsXG4gICAgJ3Byb2ZpbGUnOiBzdG9yZS5wcm9maWxlLFxuICAgICd1c2VybmFtZS1oaXN0b3J5Jzogc3RvcmVbJ3VzZXJuYW1lLWhpc3RvcnknXVxuICB9O1xufVxuXG5jbGFzcyBQbGFjZWhvbGRlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICAvLyBqc2hpbnQgaWdub3JlOnN0YXJ0XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XG4gICAgICA8cD57XCJIZWxsbywgSSdtIHBsYWNlaG9sZGVyIGZvciBcIiArIHRoaXMucHJvcHMucm91dGUubmFtZX08L3A+XG4gICAgPC9kaXY+O1xuICAgIC8vIGpzaGludCBpZ25vcmU6ZW5kXG4gIH1cbn1cblxuY29uc3QgQ09NUE9ORU5UUyA9IHtcbiAgJ3Bvc3RzJzogUGxhY2Vob2xkZXIsXG4gICd0aHJlYWRzJzogUGxhY2Vob2xkZXIsXG4gICdmb2xsb3dlcnMnOiBGb2xsb3dlcnMsXG4gICdmb2xsb3dzJzogRm9sbG93cyxcbiAgJ3VzZXJuYW1lLWhpc3RvcnknOiBVc2VybmFtZUhpc3RvcnksXG4gICdiYW4tZGV0YWlscyc6IEJhbkRldGFpbHNcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRocygpIHtcbiAgbGV0IHBhdGhzID0gW107XG5cbiAgbWlzYWdvLmdldCgnUFJPRklMRV9QQUdFUycpLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgIHBhdGhzLnB1c2goT2JqZWN0LmFzc2lnbih7fSwgaXRlbSwge1xuICAgICAgcGF0aDogbWlzYWdvLmdldCgnUFJPRklMRScpLmFic29sdXRlX3VybCArIGl0ZW0uY29tcG9uZW50ICsgJy8nLFxuICAgICAgY29tcG9uZW50OiBjb25uZWN0KHNlbGVjdCkoQ09NUE9ORU5UU1tpdGVtLmNvbXBvbmVudF0pLFxuICAgIH0pKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHBhdGhzO1xufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBCdXR0b24gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYnV0dG9uJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgU2VhcmNoIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3NlYXJjaCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFVzZXJuYW1lSGlzdG9yeSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy91c2VybmFtZS1oaXN0b3J5JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgeyBkZWh5ZHJhdGUsIGFwcGVuZCB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy91c2VybmFtZS1oaXN0b3J5JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7XG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnO1xuaW1wb3J0IHRpdGxlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9wYWdlLXRpdGxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIGlmIChtaXNhZ28uaGFzKCdQUk9GSUxFX05BTUVfSElTVE9SWScpKSB7XG4gICAgICB0aGlzLmluaXRXaXRoUHJlbG9hZGVkRGF0YShtaXNhZ28ucG9wKCdQUk9GSUxFX05BTUVfSElTVE9SWScpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbml0V2l0aG91dFByZWxvYWRlZERhdGEoKTtcbiAgICB9XG4gIH1cblxuICBpbml0V2l0aFByZWxvYWRlZERhdGEoZGF0YSkge1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBpc0xvYWRlZDogdHJ1ZSxcbiAgICAgIGlzQnVzeTogZmFsc2UsXG5cbiAgICAgIHNlYXJjaDogJycsXG5cbiAgICAgIGNvdW50OiBkYXRhLmNvdW50LFxuICAgICAgbW9yZTogZGF0YS5tb3JlLFxuXG4gICAgICBwYWdlOiBkYXRhLnBhZ2UsXG4gICAgICBwYWdlczogZGF0YS5wYWdlc1xuICAgIH07XG5cbiAgICBzdG9yZS5kaXNwYXRjaChkZWh5ZHJhdGUoZGF0YS5yZXN1bHRzKSk7XG4gIH1cblxuICBpbml0V2l0aG91dFByZWxvYWRlZERhdGEoKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzTG9hZGVkOiBmYWxzZSxcbiAgICAgIGlzQnVzeTogZmFsc2UsXG5cbiAgICAgIHNlYXJjaDogJycsXG5cbiAgICAgIGNvdW50OiAwLFxuICAgICAgbW9yZTogMCxcblxuICAgICAgcGFnZTogMSxcbiAgICAgIHBhZ2VzOiAxXG4gICAgfTtcblxuICAgIHRoaXMubG9hZENoYW5nZXMoKTtcbiAgfVxuXG4gIGxvYWRDaGFuZ2VzKHBhZ2U9MSwgc2VhcmNoPW51bGwpIHtcbiAgICBhamF4LmdldChtaXNhZ28uZ2V0KCdVU0VSTkFNRV9DSEFOR0VTX0FQSScpLCB7XG4gICAgICB1c2VyOiB0aGlzLnByb3BzLnByb2ZpbGUuaWQsXG4gICAgICBzZWFyY2g6IHNlYXJjaCxcbiAgICAgIHBhZ2U6IHBhZ2UgfHwgMVxuICAgIH0sICdzZWFyY2gtdXNlcm5hbWUtaGlzdG9yeScpLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIGlmIChwYWdlID09PSAxKSB7XG4gICAgICAgIHN0b3JlLmRpc3BhdGNoKGRlaHlkcmF0ZShkYXRhLnJlc3VsdHMpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0b3JlLmRpc3BhdGNoKGFwcGVuZChkYXRhLnJlc3VsdHMpKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzTG9hZGVkOiB0cnVlLFxuICAgICAgICBpc0J1c3k6IGZhbHNlLFxuXG4gICAgICAgIGNvdW50OiBkYXRhLmNvdW50LFxuICAgICAgICBtb3JlOiBkYXRhLm1vcmUsXG5cbiAgICAgICAgcGFnZTogZGF0YS5wYWdlLFxuICAgICAgICBwYWdlczogZGF0YS5wYWdlc1xuICAgICAgfSk7XG4gICAgfSwgKHJlamVjdGlvbikgPT4ge1xuICAgICAgc25hY2tiYXIuYXBpRXJyb3IocmVqZWN0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRpdGxlLnNldCh7XG4gICAgICB0aXRsZTogZ2V0dGV4dChcIlVzZXJuYW1lIGhpc3RvcnlcIiksXG4gICAgICBwYXJlbnQ6IHRoaXMucHJvcHMucHJvZmlsZS51c2VybmFtZVxuICAgIH0pO1xuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICBsb2FkTW9yZSA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGlzQnVzeTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgdGhpcy5sb2FkQ2hhbmdlcyh0aGlzLnN0YXRlLnBhZ2UgKyAxLCB0aGlzLnN0YXRlLnNlYXJjaCk7XG4gIH07XG5cbiAgc2VhcmNoID0gKGV2KSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBpc0xvYWRlZDogZmFsc2UsXG4gICAgICBpc0J1c3k6IHRydWUsXG5cbiAgICAgIHNlYXJjaDogZXYudGFyZ2V0LnZhbHVlLFxuXG4gICAgICBjb3VudDogMCxcbiAgICAgIG1vcmU6IDAsXG5cbiAgICAgIHBhZ2U6IDEsXG4gICAgICBwYWdlczogMVxuICAgIH0pO1xuXG4gICAgdGhpcy5sb2FkQ2hhbmdlcygxLCBldi50YXJnZXQudmFsdWUpO1xuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIGdldExhYmVsKCkge1xuICAgIGlmICghdGhpcy5zdGF0ZS5pc0xvYWRlZCkge1xuICAgICAgcmV0dXJuIGdldHRleHQoJ0xvYWRpbmcuLi4nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUuc2VhcmNoKSB7XG4gICAgICBsZXQgbWVzc2FnZSA9IG5nZXR0ZXh0KFxuICAgICAgICBcIkZvdW5kICUoY2hhbmdlcylzIHVzZXJuYW1lIGNoYW5nZS5cIixcbiAgICAgICAgXCJGb3VuZCAlKGNoYW5nZXMpcyB1c2VybmFtZSBjaGFuZ2VzLlwiLFxuICAgICAgICB0aGlzLnN0YXRlLmNvdW50KTtcblxuICAgICAgcmV0dXJuIGludGVycG9sYXRlKG1lc3NhZ2UsIHtcbiAgICAgICAgJ2NoYW5nZXMnOiB0aGlzLnN0YXRlLmNvdW50XG4gICAgICB9LCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMucHJvZmlsZS5pZCA9PT0gdGhpcy5wcm9wcy51c2VyLmlkKSB7XG4gICAgICBsZXQgbWVzc2FnZSA9IG5nZXR0ZXh0KFxuICAgICAgICBcIllvdXIgdXNlcm5hbWUgd2FzIGNoYW5nZWQgJShjaGFuZ2VzKXMgdGltZS5cIixcbiAgICAgICAgXCJZb3VyIHVzZXJuYW1lIHdhcyBjaGFuZ2VkICUoY2hhbmdlcylzIHRpbWVzLlwiLFxuICAgICAgICB0aGlzLnN0YXRlLmNvdW50KTtcblxuICAgICAgcmV0dXJuIGludGVycG9sYXRlKG1lc3NhZ2UsIHtcbiAgICAgICAgJ2NoYW5nZXMnOiB0aGlzLnN0YXRlLmNvdW50XG4gICAgICB9LCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG1lc3NhZ2UgPSBuZ2V0dGV4dChcbiAgICAgICAgXCIlKHVzZXJuYW1lKXMncyB1c2VybmFtZSB3YXMgY2hhbmdlZCAlKGNoYW5nZXMpcyB0aW1lLlwiLFxuICAgICAgICBcIiUodXNlcm5hbWUpcydzIHVzZXJuYW1lIHdhcyBjaGFuZ2VkICUoY2hhbmdlcylzIHRpbWVzLlwiLFxuICAgICAgICB0aGlzLnN0YXRlLmNvdW50KTtcblxuICAgICAgcmV0dXJuIGludGVycG9sYXRlKG1lc3NhZ2UsIHtcbiAgICAgICAgJ3VzZXJuYW1lJzogdGhpcy5wcm9wcy5wcm9maWxlLnVzZXJuYW1lLFxuICAgICAgICAnY2hhbmdlcyc6IHRoaXMuc3RhdGUuY291bnRcbiAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldEVtcHR5TWVzc2FnZSgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5zZWFyY2gpIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiU2VhcmNoIHJldHVybmVkIG5vIHVzZXJuYW1lIGNoYW5nZXMgbWF0Y2hpbmcgc3BlY2lmaWVkIGNyaXRlcmlhLlwiKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMudXNlci5pZCA9PT0gdGhpcy5wcm9wcy5wcm9maWxlLmlkKSB7XG4gICAgICByZXR1cm4gZ2V0dGV4dChcIk5vIG5hbWUgY2hhbmdlcyBoYXZlIGJlZW4gcmVjb3JkZWQgZm9yIHlvdXIgYWNjb3VudC5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpbnRlcnBvbGF0ZShnZXR0ZXh0KFwiJSh1c2VybmFtZSlzJ3MgdXNlcm5hbWUgd2FzIG5ldmVyIGNoYW5nZWQuXCIpLCB7XG4gICAgICAgICd1c2VybmFtZSc6IHRoaXMucHJvcHMucHJvZmlsZS51c2VybmFtZVxuICAgICAgfSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0TW9yZUJ1dHRvbigpIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5tb3JlKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJwYWdlci1tb3JlXCI+XG4gICAgICAgIDxCdXR0b24gbG9hZGluZz17dGhpcy5zdGF0ZS5pc0J1c3l9XG4gICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5sb2FkTW9yZX0+XG4gICAgICAgICAge2ludGVycG9sYXRlKGdldHRleHQoXCJTaG93IG9sZGVyICglKG1vcmUpcylcIiksIHtcbiAgICAgICAgICAgICdtb3JlJzogdGhpcy5zdGF0ZS5tb3JlXG4gICAgICAgICAgfSwgdHJ1ZSl9XG4gICAgICAgIDwvQnV0dG9uPlxuICAgICAgPC9kaXY+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJwcm9maWxlLXVzZXJuYW1lLWhpc3RvcnlcIj5cblxuICAgICAgPG5hdiBjbGFzc05hbWU9XCJ0b29sYmFyXCI+XG4gICAgICAgIDxoMyBjbGFzc05hbWU9XCJ0b29sYmFyLWxlZnRcIj5cbiAgICAgICAgICB7dGhpcy5nZXRMYWJlbCgpfVxuICAgICAgICA8L2gzPlxuXG4gICAgICAgIDxTZWFyY2ggY2xhc3NOYW1lPVwidG9vbGJhci1yaWdodFwiXG4gICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuc2VhcmNofVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLnNlYXJjaH1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17Z2V0dGV4dChcIlNlYXJjaCBoaXN0b3J5Li4uXCIpfSAvPlxuICAgICAgPC9uYXY+XG5cbiAgICAgIDxVc2VybmFtZUhpc3RvcnkgaXNMb2FkZWQ9e3RoaXMuc3RhdGUuaXNMb2FkZWR9XG4gICAgICAgICAgICAgICAgICAgICAgIGVtcHR5TWVzc2FnZT17dGhpcy5nZXRFbXB0eU1lc3NhZ2UoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcz17dGhpcy5wcm9wc1sndXNlcm5hbWUtaGlzdG9yeSddfSAvPlxuXG4gICAgICB7dGhpcy5nZXRNb3JlQnV0dG9uKCl9XG5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTG9hZGVyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2xvYWRlcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFJlZ2lzdGVyTW9kYWwgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvcmVnaXN0ZXIuanMnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBjYXB0Y2hhIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9jYXB0Y2hhJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgbW9kYWwgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL21vZGFsJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgenhjdmJuIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy96eGN2Ym4nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAnaXNMb2FkaW5nJzogZmFsc2UsXG4gICAgICAnaXNMb2FkZWQnOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIHNob3dSZWdpc3Rlck1vZGFsID0gKCkgPT4ge1xuICAgIGlmIChtaXNhZ28uZ2V0KCdTRVRUSU5HUycpLmFjY291bnRfYWN0aXZhdGlvbiA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgIHNuYWNrYmFyLmluZm8oZ2V0dGV4dChcIk5ldyByZWdpc3RyYXRpb25zIGFyZSBjdXJyZW50bHkgZGlzYWJsZWQuXCIpKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUuaXNMb2FkZWQpIHtcbiAgICAgIG1vZGFsLnNob3coUmVnaXN0ZXJNb2RhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAnaXNMb2FkaW5nJzogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIFByb21pc2UuYWxsKFtcbiAgICAgICAgY2FwdGNoYS5sb2FkKCksXG4gICAgICAgIHp4Y3Zibi5sb2FkKClcbiAgICAgIF0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuaXNMb2FkZWQpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICdpc0xvYWRpbmcnOiBmYWxzZSxcbiAgICAgICAgICAgICdpc0xvYWRlZCc6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBtb2RhbC5zaG93KFJlZ2lzdGVyTW9kYWwpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIGdldENsYXNzTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5jbGFzc05hbWUgKyAodGhpcy5zdGF0ZS5pc0xvYWRpbmcgPyAnIGJ0bi1sb2FkaW5nJyA6ICcnKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e3RoaXMuc2hvd1JlZ2lzdGVyTW9kYWx9XG4gICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXsnYnRuICcgKyB0aGlzLmdldENsYXNzTmFtZSgpfVxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGVkfT5cbiAgICAgIHtnZXR0ZXh0KFwiUmVnaXN0ZXJcIil9XG4gICAgICB7dGhpcy5zdGF0ZS5pc0xvYWRpbmcgPyA8TG9hZGVyIC8+IDogbnVsbCB9XG4gICAgPC9idXR0b24+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2J1dHRvbic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEZvcm0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvZm9ybSc7XG5pbXBvcnQgRm9ybUdyb3VwIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2Zvcm0tZ3JvdXAnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBQYXNzd29yZFN0cmVuZ3RoIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3Bhc3N3b3JkLXN0cmVuZ3RoJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7XG5pbXBvcnQgYXV0aCBmcm9tICdtaXNhZ28vc2VydmljZXMvYXV0aCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IGNhcHRjaGEgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2NhcHRjaGEnO1xuaW1wb3J0IG1vZGFsIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9tb2RhbCc7XG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJztcbmltcG9ydCBzaG93QmFubmVkUGFnZSBmcm9tICdtaXNhZ28vdXRpbHMvYmFubmVkLXBhZ2UnO1xuaW1wb3J0ICogYXMgdmFsaWRhdG9ycyBmcm9tICdtaXNhZ28vdXRpbHMvdmFsaWRhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBSZWdpc3RlckZvcm0gZXh0ZW5kcyBGb3JtIHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcblxuICAgICAgdXNlcm5hbWU6ICcnLFxuICAgICAgZW1haWw6ICcnLFxuICAgICAgcGFzc3dvcmQ6ICcnLFxuICAgICAgY2FwdGNoYTogJycsXG5cbiAgICAgIHZhbGlkYXRvcnM6IHtcbiAgICAgICAgdXNlcm5hbWU6IFtcbiAgICAgICAgICB2YWxpZGF0b3JzLnVzZXJuYW1lQ29udGVudCgpLFxuICAgICAgICAgIHZhbGlkYXRvcnMudXNlcm5hbWVNaW5MZW5ndGgobWlzYWdvLmdldCgnU0VUVElOR1MnKSksXG4gICAgICAgICAgdmFsaWRhdG9ycy51c2VybmFtZU1heExlbmd0aChtaXNhZ28uZ2V0KCdTRVRUSU5HUycpKVxuICAgICAgICBdLFxuICAgICAgICBlbWFpbDogW1xuICAgICAgICAgIHZhbGlkYXRvcnMuZW1haWwoKVxuICAgICAgICBdLFxuICAgICAgICBwYXNzd29yZDogW1xuICAgICAgICAgIHZhbGlkYXRvcnMucGFzc3dvcmRNaW5MZW5ndGgobWlzYWdvLmdldCgnU0VUVElOR1MnKSlcbiAgICAgICAgXSxcbiAgICAgICAgY2FwdGNoYTogY2FwdGNoYS52YWxpZGF0b3IoKVxuICAgICAgfSxcblxuICAgICAgZXJyb3JzOiB7fVxuICAgIH07XG4gIH1cblxuICBjbGVhbigpIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBzbmFja2Jhci5lcnJvcihnZXR0ZXh0KFwiRm9ybSBjb250YWlucyBlcnJvcnMuXCIpKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBlcnJvcnM6IHRoaXMudmFsaWRhdGUoKVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc2VuZCgpIHtcbiAgICByZXR1cm4gYWpheC5wb3N0KG1pc2Fnby5nZXQoJ1VTRVJTX0FQSScpLCB7XG4gICAgICB1c2VybmFtZTogdGhpcy5zdGF0ZS51c2VybmFtZSxcbiAgICAgIGVtYWlsOiB0aGlzLnN0YXRlLmVtYWlsLFxuICAgICAgcGFzc3dvcmQ6IHRoaXMuc3RhdGUucGFzc3dvcmQsXG4gICAgICBjYXB0Y2hhOiB0aGlzLnN0YXRlLmNhcHRjaGFcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVN1Y2Nlc3MoYXBpUmVzcG9uc2UpIHtcbiAgICB0aGlzLnByb3BzLmNhbGxiYWNrKGFwaVJlc3BvbnNlKTtcbiAgfVxuXG4gIGhhbmRsZUVycm9yKHJlamVjdGlvbikge1xuICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDApIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAnZXJyb3JzJzogT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5zdGF0ZS5lcnJvcnMsIHJlamVjdGlvbilcbiAgICAgIH0pO1xuICAgICAgc25hY2tiYXIuZXJyb3IoZ2V0dGV4dChcIkZvcm0gY29udGFpbnMgZXJyb3JzLlwiKSk7XG4gICAgfSBlbHNlIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDMgJiYgcmVqZWN0aW9uLmJhbikge1xuICAgICAgc2hvd0Jhbm5lZFBhZ2UocmVqZWN0aW9uLmJhbik7XG4gICAgICBtb2RhbC5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNuYWNrYmFyLmFwaUVycm9yKHJlamVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgZ2V0TGVnYWxGb290Tm90ZSgpIHtcbiAgICBpZiAobWlzYWdvLmdldCgnVEVSTVNfT0ZfU0VSVklDRV9VUkwnKSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxhIGhyZWY9e21pc2Fnby5nZXQoJ1RFUk1TX09GX1NFUlZJQ0VfVVJMJyl9XG4gICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgIHtnZXR0ZXh0KFwiQnkgcmVnaXN0ZXJpbmcgeW91IGFncmVlIHRvIHNpdGUncyB0ZXJtcyBhbmQgY29uZGl0aW9ucy5cIil9XG4gICAgICA8L2E+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJtb2RhbC1kaWFsb2cgbW9kYWwtcmVnaXN0ZXJcIiByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Z2V0dGV4dChcIkNsb3NlXCIpfT5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGg0IGNsYXNzTmFtZT1cIm1vZGFsLXRpdGxlXCI+e2dldHRleHQoXCJSZWdpc3RlclwiKX08L2g0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGZvcm0gb25TdWJtaXQ9e3RoaXMuaGFuZGxlU3VibWl0fSBjbGFzc05hbWU9XCJmb3JtLWhvcml6b250YWxcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInR5cGVcIiBzdHlsZT17e2Rpc3BsYXk6ICdub25lJ319IC8+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIHN0eWxlPXt7ZGlzcGxheTogJ25vbmUnfX0gLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWJvZHlcIj5cblxuICAgICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIlVzZXJuYW1lXCIpfSBmb3I9XCJpZF91c2VybmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgIGxhYmVsQ2xhc3M9XCJjb2wtc20tNFwiIGNvbnRyb2xDbGFzcz1cImNvbC1zbS04XCJcbiAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbj17dGhpcy5zdGF0ZS5lcnJvcnMudXNlcm5hbWV9PlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImlkX3VzZXJuYW1lXCIgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpZF91c2VybmFtZV9zdGF0dXNcIlxuICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuYmluZElucHV0KCd1c2VybmFtZScpfVxuICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudXNlcm5hbWV9IC8+XG4gICAgICAgICAgICA8L0Zvcm1Hcm91cD5cblxuICAgICAgICAgICAgPEZvcm1Hcm91cCBsYWJlbD17Z2V0dGV4dChcIkUtbWFpbFwiKX0gZm9yPVwiaWRfZW1haWxcIlxuICAgICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiY29sLXNtLTRcIiBjb250cm9sQ2xhc3M9XCJjb2wtc20tOFwiXG4gICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb249e3RoaXMuc3RhdGUuZXJyb3JzLmVtYWlsfT5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJpZF9lbWFpbFwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiaWRfZW1haWxfc3RhdHVzXCJcbiAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgnZW1haWwnKX1cbiAgICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmVtYWlsfSAvPlxuICAgICAgICAgICAgPC9Gb3JtR3JvdXA+XG5cbiAgICAgICAgICAgIDxGb3JtR3JvdXAgbGFiZWw9e2dldHRleHQoXCJQYXNzd29yZFwiKX0gZm9yPVwiaWRfcGFzc3dvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiY29sLXNtLTRcIiBjb250cm9sQ2xhc3M9XCJjb2wtc20tOFwiXG4gICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb249e3RoaXMuc3RhdGUuZXJyb3JzLnBhc3N3b3JkfVxuICAgICAgICAgICAgICAgICAgICAgICBleHRyYT17PFBhc3N3b3JkU3RyZW5ndGggcGFzc3dvcmQ9e3RoaXMuc3RhdGUucGFzc3dvcmR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHM9e1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS51c2VybmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5lbWFpbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXX0gLz59ID5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIGlkPVwiaWRfcGFzc3dvcmRcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cImlkX3Bhc3N3b3JkX3N0YXR1c1wiXG4gICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5iaW5kSW5wdXQoJ3Bhc3N3b3JkJyl9XG4gICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5wYXNzd29yZH0gLz5cbiAgICAgICAgICAgIDwvRm9ybUdyb3VwPlxuXG4gICAgICAgICAgICB7Y2FwdGNoYS5jb21wb25lbnQoe1xuICAgICAgICAgICAgICBmb3JtOiB0aGlzLFxuICAgICAgICAgICAgICBsYWJlbENsYXNzOiBcImNvbC1zbS00XCIsXG4gICAgICAgICAgICAgIGNvbnRyb2xDbGFzczogXCJjb2wtc20tOFwiXG4gICAgICAgICAgICB9KX1cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICB7dGhpcy5nZXRMZWdhbEZvb3ROb3RlKCl9XG4gICAgICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cImJ0bi1wcmltYXJ5XCIgbG9hZGluZz17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9PlxuICAgICAgICAgICAgICB7Z2V0dGV4dChcIlJlZ2lzdGVyIGFjY291bnRcIil9XG4gICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlZ2lzdGVyQ29tcGxldGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRMZWFkKCkge1xuICAgIGlmICh0aGlzLnByb3BzLmFjdGl2YXRpb24gPT09ICd1c2VyJykge1xuICAgICAgcmV0dXJuIGdldHRleHQoXCIlKHVzZXJuYW1lKXMsIHlvdXIgYWNjb3VudCBoYXMgYmVlbiBjcmVhdGVkIGJ1dCB5b3UgbmVlZCB0byBhY3RpdmF0ZSBpdCBiZWZvcmUgeW91IHdpbGwgYmUgYWJsZSB0byBzaWduIGluLlwiKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuYWN0aXZhdGlvbiA9PT0gJ2FkbWluJykge1xuICAgICAgcmV0dXJuIGdldHRleHQoXCIlKHVzZXJuYW1lKXMsIHlvdXIgYWNjb3VudCBoYXMgYmVlbiBjcmVhdGVkIGJ1dCBib2FyZCBhZG1pbmlzdHJhdG9yIHdpbGwgaGF2ZSB0byBhY3RpdmF0ZSBpdCBiZWZvcmUgeW91IHdpbGwgYmUgYWJsZSB0byBzaWduIGluLlwiKTtcbiAgICB9XG4gIH1cblxuICBnZXRTdWJzY3JpcHQoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuYWN0aXZhdGlvbiA9PT0gJ3VzZXInKSB7XG4gICAgICByZXR1cm4gZ2V0dGV4dChcIldlIGhhdmUgc2VudCBhbiBlLW1haWwgdG8gJShlbWFpbClzIHdpdGggbGluayB0aGF0IHlvdSBoYXZlIHRvIGNsaWNrIHRvIGFjdGl2YXRlIHlvdXIgYWNjb3VudC5cIik7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmFjdGl2YXRpb24gPT09ICdhZG1pbicpIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiV2Ugd2lsbCBzZW5kIGFuIGUtbWFpbCB0byAlKGVtYWlsKXMgd2hlbiB0aGlzIHRha2VzIHBsYWNlLlwiKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWRpYWxvZyBtb2RhbC1tZXNzYWdlIG1vZGFsLXJlZ2lzdGVyXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Z2V0dGV4dChcIkNsb3NlXCIpfT5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGg0IGNsYXNzTmFtZT1cIm1vZGFsLXRpdGxlXCI+e2dldHRleHQoXCJSZWdpc3RyYXRpb24gY29tcGxldGVcIil9PC9oND5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtYm9keVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1pY29uXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICAgIGluZm9fb3V0bGluZVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1ib2R5XCI+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJsZWFkXCI+XG4gICAgICAgICAgICAgIHtpbnRlcnBvbGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmdldExlYWQoKSxcbiAgICAgICAgICAgICAgICB7J3VzZXJuYW1lJzogdGhpcy5wcm9wcy51c2VybmFtZX0sIHRydWUpfVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIHtpbnRlcnBvbGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLmdldFN1YnNjcmlwdCgpLFxuICAgICAgICAgICAgICAgIHsnZW1haWwnOiB0aGlzLnByb3BzLmVtYWlsfSwgdHJ1ZSl9XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBjb21wbGV0ZTogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICBjb21wbGV0ZVJlZ2lzdHJhdGlvbiA9IChhcGlSZXNwb25zZSkgPT4ge1xuICAgIGlmIChhcGlSZXNwb25zZS5hY3RpdmF0aW9uID09PSAnYWN0aXZlJykge1xuICAgICAgbW9kYWwuaGlkZSgpO1xuICAgICAgYXV0aC5zaWduSW4oYXBpUmVzcG9uc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgY29tcGxldGU6IGFwaVJlc3BvbnNlXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICBpZiAodGhpcy5zdGF0ZS5jb21wbGV0ZSkge1xuICAgICAgcmV0dXJuIDxSZWdpc3RlckNvbXBsZXRlIGFjdGl2YXRpb249e3RoaXMuc3RhdGUuY29tcGxldGUuYWN0aXZhdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VybmFtZT17dGhpcy5zdGF0ZS5jb21wbGV0ZS51c2VybmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWFpbD17dGhpcy5zdGF0ZS5jb21wbGV0ZS5lbWFpbH0gLz47XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiA8UmVnaXN0ZXJGb3JtIGNhbGxiYWNrPXt0aGlzLmNvbXBsZXRlUmVnaXN0cmF0aW9ufS8+O1xuICAgIH1cbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBCdXR0b24gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYnV0dG9uJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgRm9ybSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9mb3JtJztcbmltcG9ydCBhamF4IGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9hamF4JztcbmltcG9ydCBzbmFja2JhciBmcm9tICdtaXNhZ28vc2VydmljZXMvc25hY2tiYXInO1xuaW1wb3J0ICogYXMgdmFsaWRhdG9ycyBmcm9tICdtaXNhZ28vdXRpbHMvdmFsaWRhdG9ycyc7XG5pbXBvcnQgc2hvd0Jhbm5lZFBhZ2UgZnJvbSAnbWlzYWdvL3V0aWxzL2Jhbm5lZC1wYWdlJztcblxuZXhwb3J0IGNsYXNzIFJlcXVlc3RMaW5rRm9ybSBleHRlbmRzIEZvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAnaXNMb2FkaW5nJzogZmFsc2UsXG5cbiAgICAgICdlbWFpbCc6ICcnLFxuXG4gICAgICAndmFsaWRhdG9ycyc6IHtcbiAgICAgICAgJ2VtYWlsJzogW1xuICAgICAgICAgIHZhbGlkYXRvcnMuZW1haWwoKVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGNsZWFuKCkge1xuICAgIGlmICh0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNuYWNrYmFyLmVycm9yKGdldHRleHQoXCJFbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuXCIpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzZW5kKCkge1xuICAgIHJldHVybiBhamF4LnBvc3QobWlzYWdvLmdldCgnU0VORF9BQ1RJVkFUSU9OX0FQSScpLCB7XG4gICAgICAnZW1haWwnOiB0aGlzLnN0YXRlLmVtYWlsXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTdWNjZXNzKGFwaVJlc3BvbnNlKSB7XG4gICAgdGhpcy5wcm9wcy5jYWxsYmFjayhhcGlSZXNwb25zZSk7XG4gIH1cblxuICBoYW5kbGVFcnJvcihyZWplY3Rpb24pIHtcbiAgICBpZiAoWydhbHJlYWR5X2FjdGl2ZScsICdpbmFjdGl2ZV9hZG1pbiddLmluZGV4T2YocmVqZWN0aW9uLmNvZGUpID4gLTEpIHtcbiAgICAgIHNuYWNrYmFyLmluZm8ocmVqZWN0aW9uLmRldGFpbCk7XG4gICAgfSBlbHNlIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDMgJiYgcmVqZWN0aW9uLmJhbikge1xuICAgICAgc2hvd0Jhbm5lZFBhZ2UocmVqZWN0aW9uLmJhbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNuYWNrYmFyLmFwaUVycm9yKHJlamVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJ3ZWxsIHdlbGwtZm9ybSB3ZWxsLWZvcm0tcmVxdWVzdC1hY3RpdmF0aW9uLWxpbmtcIj5cbiAgICAgIDxmb3JtIG9uU3VibWl0PXt0aGlzLmhhbmRsZVN1Ym1pdH0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udHJvbC1pbnB1dFwiPlxuXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtnZXR0ZXh0KFwiWW91ciBlLW1haWwgYWRkcmVzc1wiKX1cbiAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuYmluZElucHV0KCdlbWFpbCcpfVxuICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLmVtYWlsfSAvPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxCdXR0b24gY2xhc3NOYW1lPVwiYnRuLXByaW1hcnkgYnRuLWJsb2NrXCJcbiAgICAgICAgICAgICAgICBsb2FkaW5nPXt0aGlzLnN0YXRlLmlzTG9hZGluZ30+XG4gICAgICAgICAge2dldHRleHQoXCJTZW5kIGxpbmtcIil9XG4gICAgICAgIDwvQnV0dG9uPlxuXG4gICAgICA8L2Zvcm0+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpbmtTZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0TWVzc2FnZSgpIHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIkFjdGl2YXRpb24gbGluayB3YXMgc2VudCB0byAlKGVtYWlsKXNcIiksIHtcbiAgICAgIGVtYWlsOiB0aGlzLnByb3BzLnVzZXIuZW1haWxcbiAgICB9LCB0cnVlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwid2VsbCB3ZWxsLWZvcm0gd2VsbC1mb3JtLXJlcXVlc3QtYWN0aXZhdGlvbi1saW5rIHdlbGwtZG9uZVwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJkb25lLW1lc3NhZ2VcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLWljb25cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICBjaGVja1xuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1ib2R5XCI+XG4gICAgICAgICAgPHA+XG4gICAgICAgICAgICB7dGhpcy5nZXRNZXNzYWdlKCl9XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1ibG9ja1wiXG4gICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5wcm9wcy5jYWxsYmFja30+XG4gICAgICAgICAge2dldHRleHQoXCJSZXF1ZXN0IGFub3RoZXIgbGlua1wiKX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGNvbXBsZXRlOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gIGNvbXBsZXRlID0gKGFwaVJlc3BvbnNlKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjb21wbGV0ZTogYXBpUmVzcG9uc2VcbiAgICB9KTtcbiAgfTtcblxuICByZXNldCA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNvbXBsZXRlOiBmYWxzZVxuICAgIH0pO1xuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgaWYgKHRoaXMuc3RhdGUuY29tcGxldGUpIHtcbiAgICAgIHJldHVybiA8TGlua1NlbnQgdXNlcj17dGhpcy5zdGF0ZS5jb21wbGV0ZX0gY2FsbGJhY2s9e3RoaXMucmVzZXR9IC8+O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gPFJlcXVlc3RMaW5rRm9ybSBjYWxsYmFjaz17dGhpcy5jb21wbGV0ZX0gLz47XG4gICAgfTtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2J1dHRvbic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEZvcm0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvZm9ybSc7XG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7XG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJztcbmltcG9ydCAqIGFzIHZhbGlkYXRvcnMgZnJvbSAnbWlzYWdvL3V0aWxzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHNob3dCYW5uZWRQYWdlIGZyb20gJ21pc2Fnby91dGlscy9iYW5uZWQtcGFnZSc7XG5cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0UmVzZXRGb3JtIGV4dGVuZHMgRm9ybSB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICdpc0xvYWRpbmcnOiBmYWxzZSxcblxuICAgICAgJ2VtYWlsJzogJycsXG5cbiAgICAgICd2YWxpZGF0b3JzJzoge1xuICAgICAgICAnZW1haWwnOiBbXG4gICAgICAgICAgdmFsaWRhdG9ycy5lbWFpbCgpXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgY2xlYW4oKSB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc25hY2tiYXIuZXJyb3IoZ2V0dGV4dChcIkVudGVyIGEgdmFsaWQgZW1haWwgYWRkcmVzcy5cIikpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHNlbmQoKSB7XG4gICAgcmV0dXJuIGFqYXgucG9zdChtaXNhZ28uZ2V0KCdTRU5EX1BBU1NXT1JEX1JFU0VUX0FQSScpLCB7XG4gICAgICAnZW1haWwnOiB0aGlzLnN0YXRlLmVtYWlsXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTdWNjZXNzKGFwaVJlc3BvbnNlKSB7XG4gICAgdGhpcy5wcm9wcy5jYWxsYmFjayhhcGlSZXNwb25zZSk7XG4gIH1cblxuICBoYW5kbGVFcnJvcihyZWplY3Rpb24pIHtcbiAgICBpZiAoWydpbmFjdGl2ZV91c2VyJywgJ2luYWN0aXZlX2FkbWluJ10uaW5kZXhPZihyZWplY3Rpb24uY29kZSkgPiAtMSkge1xuICAgICAgdGhpcy5wcm9wcy5zaG93SW5hY3RpdmVQYWdlKHJlamVjdGlvbik7XG4gICAgfSBlbHNlIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDMgJiYgcmVqZWN0aW9uLmJhbikge1xuICAgICAgc2hvd0Jhbm5lZFBhZ2UocmVqZWN0aW9uLmJhbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNuYWNrYmFyLmFwaUVycm9yKHJlamVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJ3ZWxsIHdlbGwtZm9ybSB3ZWxsLWZvcm0tcmVxdWVzdC1wYXNzd29yZC1yZXNldFwiPlxuICAgICAgPGZvcm0gb25TdWJtaXQ9e3RoaXMuaGFuZGxlU3VibWl0fT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250cm9sLWlucHV0XCI+XG5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2dldHRleHQoXCJZb3VyIGUtbWFpbCBhZGRyZXNzXCIpfVxuICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5iaW5kSW5wdXQoJ2VtYWlsJyl9XG4gICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuZW1haWx9IC8+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPEJ1dHRvbiBjbGFzc05hbWU9XCJidG4tcHJpbWFyeSBidG4tYmxvY2tcIlxuICAgICAgICAgICAgICAgIGxvYWRpbmc9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfT5cbiAgICAgICAgICB7Z2V0dGV4dChcIlNlbmQgbGlua1wiKX1cbiAgICAgICAgPC9CdXR0b24+XG5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlua1NlbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRNZXNzYWdlKCkge1xuICAgIHJldHVybiBpbnRlcnBvbGF0ZShnZXR0ZXh0KFwiUmVzZXQgcGFzc3dvcmQgbGluayB3YXMgc2VudCB0byAlKGVtYWlsKXNcIiksIHtcbiAgICAgIGVtYWlsOiB0aGlzLnByb3BzLnVzZXIuZW1haWxcbiAgICB9LCB0cnVlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwid2VsbCB3ZWxsLWZvcm0gd2VsbC1mb3JtLXJlcXVlc3QtcGFzc3dvcmQtcmVzZXQgd2VsbC1kb25lXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImRvbmUtbWVzc2FnZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtaWNvblwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICAgIGNoZWNrXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLWJvZHlcIj5cbiAgICAgICAgICA8cD5cbiAgICAgICAgICAgIHt0aGlzLmdldE1lc3NhZ2UoKX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnkgYnRuLWJsb2NrXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnByb3BzLmNhbGxiYWNrfT5cbiAgICAgICAgICB7Z2V0dGV4dChcIlJlcXVlc3QgYW5vdGhlciBsaW5rXCIpfVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY2NvdW50SW5hY3RpdmVQYWdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0QWN0aXZhdGVCdXR0b24oKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuYWN0aXZhdGlvbiA9PT0gJ2luYWN0aXZlX3VzZXInKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPHA+XG4gICAgICAgIDxhIGhyZWY9e21pc2Fnby5nZXQoJ1JFUVVFU1RfQUNUSVZBVElPTl9VUkwnKX0+XG4gICAgICAgICAge2dldHRleHQoXCJBY3RpdmF0ZSB5b3VyIGFjY291bnQuXCIpfVxuICAgICAgICA8L2E+XG4gICAgICA8L3A+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJwYWdlIHBhZ2UtbWVzc2FnZSBwYWdlLW1lc3NhZ2UtaW5mbyBwYWdlLWZvcmdvdHRlbi1wYXNzd29yZC1pbmFjdGl2ZVwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLXBhbmVsXCI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtaWNvblwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgICAgICBpbmZvX291dGxpbmVcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1ib2R5XCI+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJsZWFkXCI+XG4gICAgICAgICAgICAgIHtnZXR0ZXh0KFwiWW91ciBhY2NvdW50IGlzIGluYWN0aXZlLlwiKX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICB7dGhpcy5wcm9wcy5tZXNzYWdlfVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAge3RoaXMuZ2V0QWN0aXZhdGVCdXR0b24oKX1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgY29tcGxldGU6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgY29tcGxldGUgPSAoYXBpUmVzcG9uc2UpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNvbXBsZXRlOiBhcGlSZXNwb25zZVxuICAgIH0pO1xuICB9O1xuXG4gIHJlc2V0ID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY29tcGxldGU6IGZhbHNlXG4gICAgfSk7XG4gIH07XG5cbiAgc2hvd0luYWN0aXZlUGFnZShhcGlSZXNwb25zZSkge1xuICAgIFJlYWN0RE9NLnJlbmRlcihcbiAgICAgIDxBY2NvdW50SW5hY3RpdmVQYWdlIGFjdGl2YXRpb249e2FwaVJlc3BvbnNlLmNvZGV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPXthcGlSZXNwb25zZS5kZXRhaWx9IC8+LFxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtbW91bnQnKVxuICAgICk7XG4gIH1cbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIGlmICh0aGlzLnN0YXRlLmNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gPExpbmtTZW50IHVzZXI9e3RoaXMuc3RhdGUuY29tcGxldGV9IGNhbGxiYWNrPXt0aGlzLnJlc2V0fSAvPjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIDxSZXF1ZXN0UmVzZXRGb3JtIGNhbGxiYWNrPXt0aGlzLmNvbXBsZXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dJbmFjdGl2ZVBhZ2U9e3RoaXMuc2hvd0luYWN0aXZlUGFnZX0gLz47XG4gICAgfTtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5pbXBvcnQgQnV0dG9uIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2J1dHRvbic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEZvcm0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvZm9ybSc7XG5pbXBvcnQgU2lnbkluTW9kYWwgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvc2lnbi1pbi5qcyc7XG5pbXBvcnQgYWpheCBmcm9tICdtaXNhZ28vc2VydmljZXMvYWpheCc7XG5pbXBvcnQgYXV0aCBmcm9tICdtaXNhZ28vc2VydmljZXMvYXV0aCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1vZGFsIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9tb2RhbCc7XG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJztcbmltcG9ydCAqIGFzIHZhbGlkYXRvcnMgZnJvbSAnbWlzYWdvL3V0aWxzL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHNob3dCYW5uZWRQYWdlIGZyb20gJ21pc2Fnby91dGlscy9iYW5uZWQtcGFnZSc7XG5cbmV4cG9ydCBjbGFzcyBSZXNldFBhc3N3b3JkRm9ybSBleHRlbmRzIEZvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAnaXNMb2FkaW5nJzogZmFsc2UsXG5cbiAgICAgICdwYXNzd29yZCc6ICcnLFxuXG4gICAgICAndmFsaWRhdG9ycyc6IHtcbiAgICAgICAgJ3Bhc3N3b3JkJzogW1xuICAgICAgICAgIHZhbGlkYXRvcnMucGFzc3dvcmRNaW5MZW5ndGgobWlzYWdvLmdldCgnU0VUVElOR1MnKSlcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjbGVhbigpIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5wYXNzd29yZC50cmltKCkubGVuZ3RoKSB7XG4gICAgICAgIHNuYWNrYmFyLmVycm9yKHRoaXMuc3RhdGUuZXJyb3JzLnBhc3N3b3JkWzBdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNuYWNrYmFyLmVycm9yKGdldHRleHQoXCJFbnRlciBuZXcgcGFzc3dvcmQuXCIpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzZW5kKCkge1xuICAgIHJldHVybiBhamF4LnBvc3QobWlzYWdvLmdldCgnQ0hBTkdFX1BBU1NXT1JEX0FQSScpLCB7XG4gICAgICAncGFzc3dvcmQnOiB0aGlzLnN0YXRlLnBhc3N3b3JkXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTdWNjZXNzKGFwaVJlc3BvbnNlKSB7XG4gICAgdGhpcy5wcm9wcy5jYWxsYmFjayhhcGlSZXNwb25zZSk7XG4gIH1cblxuICBoYW5kbGVFcnJvcihyZWplY3Rpb24pIHtcbiAgICBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gNDAzICYmIHJlamVjdGlvbi5iYW4pIHtcbiAgICAgIHNob3dCYW5uZWRQYWdlKHJlamVjdGlvbi5iYW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzbmFja2Jhci5hcGlFcnJvcihyZWplY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwid2VsbCB3ZWxsLWZvcm0gd2VsbC1mb3JtLXJlc2V0LXBhc3N3b3JkXCI+XG4gICAgICA8Zm9ybSBvblN1Ym1pdD17dGhpcy5oYW5kbGVTdWJtaXR9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRyb2wtaW5wdXRcIj5cblxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2dldHRleHQoXCJFbnRlciBuZXcgcGFzc3dvcmRcIil9XG4gICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgncGFzc3dvcmQnKX1cbiAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5wYXNzd29yZH0gLz5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cImJ0bi1wcmltYXJ5IGJ0bi1ibG9ja1wiXG4gICAgICAgICAgICAgICAgbG9hZGluZz17dGhpcy5zdGF0ZS5pc0xvYWRpbmd9PlxuICAgICAgICAgIHtnZXR0ZXh0KFwiQ2hhbmdlIHBhc3N3b3JkXCIpfVxuICAgICAgICA8L0J1dHRvbj5cblxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQYXNzd29yZENoYW5nZWRQYWdlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0TWVzc2FnZSgpIHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIiUodXNlcm5hbWUpcywgeW91ciBwYXNzd29yZCBoYXMgYmVlbiBjaGFuZ2VkIHN1Y2Nlc3NmdWxseS5cIiksIHtcbiAgICAgIHVzZXJuYW1lOiB0aGlzLnByb3BzLnVzZXIudXNlcm5hbWVcbiAgICB9LCB0cnVlKTtcbiAgfVxuXG4gIHNob3dTaWduSW4oKSB7XG4gICAgbW9kYWwuc2hvdyhTaWduSW5Nb2RhbCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInBhZ2UgcGFnZS1tZXNzYWdlIHBhZ2UtbWVzc2FnZS1zdWNjZXNzIHBhZ2UtZm9yZ290dGVuLXBhc3N3b3JkLWNoYW5nZWRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1wYW5lbFwiPlxuXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLWljb25cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICAgICAgY2hlY2tcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1ib2R5XCI+XG4gICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJsZWFkXCI+XG4gICAgICAgICAgICAgIHt0aGlzLmdldE1lc3NhZ2UoKX1cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICB7Z2V0dGV4dChcIllvdSB3aWxsIGhhdmUgdG8gc2lnbiBpbiB1c2luZyBuZXcgcGFzc3dvcmQgYmVmb3JlIGNvbnRpbnVpbmcuXCIpfVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeVwiIG9uQ2xpY2s9e3RoaXMuc2hvd1NpZ25Jbn0+XG4gICAgICAgICAgICAgICAge2dldHRleHQoXCJTaWduIGluXCIpfVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICBjb21wbGV0ZSA9IChhcGlSZXNwb25zZSkgPT4ge1xuICAgIGF1dGguc29mdFNpZ25PdXQoKTtcblxuICAgIC8vIG51a2UgXCJyZWRpcmVjdF90b1wiIGZpZWxkIHNvIHdlIGRvbid0IGVuZFxuICAgIC8vIGNvbWluZyBiYWNrIHRvIGVycm9yIHBhZ2UgYWZ0ZXIgc2lnbiBpblxuICAgICQoJyNoaWRkZW4tbG9naW4tZm9ybSBpbnB1dFtuYW1lPVwicmVkaXJlY3RfdG9cIl0nKS5yZW1vdmUoKTtcblxuICAgIFJlYWN0RE9NLnJlbmRlcihcbiAgICAgIDxQYXNzd29yZENoYW5nZWRQYWdlIHVzZXI9e2FwaVJlc3BvbnNlfSAvPixcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlLW1vdW50JylcbiAgICApO1xuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxSZXNldFBhc3N3b3JkRm9ybSBjYWxsYmFjaz17dGhpcy5jb21wbGV0ZX0gLz47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnByb3BzLmNsYXNzTmFtZSkge1xuICAgICAgcmV0dXJuIFwiZm9ybS1zZWFyY2ggXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwiZm9ybS1zZWFyY2hcIjtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5nZXRDbGFzc05hbWUoKX0+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgdmFsdWU9e3RoaXMucHJvcHMudmFsdWV9XG4gICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMucHJvcHMub25DaGFuZ2V9XG4gICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMucGxhY2Vob2xkZXIgfHwgZ2V0dGV4dChcIlNlYXJjaC4uLlwiKX0gLz5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgc2VhcmNoXG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldENob2ljZSgpIHtcbiAgICBsZXQgY2hvaWNlID0gbnVsbDtcbiAgICB0aGlzLnByb3BzLmNob2ljZXMubWFwKChpdGVtKSA9PiB7XG4gICAgICBpZiAoaXRlbS52YWx1ZSA9PT0gdGhpcy5wcm9wcy52YWx1ZSkge1xuICAgICAgICBjaG9pY2UgPSBpdGVtO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjaG9pY2U7XG4gIH1cblxuICBnZXRJY29uKCkge1xuICAgIHJldHVybiB0aGlzLmdldENob2ljZSgpLmljb247XG4gIH1cblxuICBnZXRMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaG9pY2UoKS5sYWJlbDtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgY2hhbmdlID0gKHZhbHVlKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMucHJvcHMub25DaGFuZ2Uoe1xuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cImJ0bi1ncm91cCBidG4tc2VsZWN0LWdyb3VwXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXNlbGVjdCBkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZCB8fCBudWxsfVxuICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PXt0aGlzLnByb3BzWydhcmlhLWRlc2NyaWJlZGJ5J10gfHwgbnVsbH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMucHJvcHMuZGlzYWJsZWQgfHwgZmFsc2V9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAge3RoaXMuZ2V0SWNvbigpfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHt0aGlzLmdldExhYmVsKCl9XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDx1bCBjbGFzc05hbWU9XCJkcm9wZG93bi1tZW51XCI+XG4gICAgICAgIHt0aGlzLnByb3BzLmNob2ljZXMubWFwKChpdGVtLCBpKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIDxsaSBrZXk9e2l9PlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmNoYW5nZShpdGVtLnZhbHVlKX0+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICAgICAgICB7aXRlbS5pY29ufVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIHtpdGVtLmxhYmVsfVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9saT47XG4gICAgICAgIH0pfVxuICAgICAgPC91bD5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9idXR0b24nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBGb3JtIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2Zvcm0nO1xuaW1wb3J0IGFqYXggZnJvbSAnbWlzYWdvL3NlcnZpY2VzL2FqYXgnO1xuaW1wb3J0IG1vZGFsIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9tb2RhbCc7XG5pbXBvcnQgc25hY2tiYXIgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3NuYWNrYmFyJztcbmltcG9ydCBzaG93QmFubmVkUGFnZSBmcm9tICdtaXNhZ28vdXRpbHMvYmFubmVkLXBhZ2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIEZvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAnaXNMb2FkaW5nJzogZmFsc2UsXG4gICAgICAnc2hvd0FjdGl2YXRpb24nOiBmYWxzZSxcblxuICAgICAgJ3VzZXJuYW1lJzogJycsXG4gICAgICAncGFzc3dvcmQnOiAnJyxcblxuICAgICAgJ3ZhbGlkYXRvcnMnOiB7XG4gICAgICAgICd1c2VybmFtZSc6IFtdLFxuICAgICAgICAncGFzc3dvcmQnOiBbXVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjbGVhbigpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICBzbmFja2Jhci5lcnJvcihnZXR0ZXh0KFwiRmlsbCBvdXQgYm90aCBmaWVsZHMuXCIpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgc2VuZCgpIHtcbiAgICByZXR1cm4gYWpheC5wb3N0KG1pc2Fnby5nZXQoJ0FVVEhfQVBJJyksIHtcbiAgICAgICd1c2VybmFtZSc6IHRoaXMuc3RhdGUudXNlcm5hbWUsXG4gICAgICAncGFzc3dvcmQnOiB0aGlzLnN0YXRlLnBhc3N3b3JkXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVTdWNjZXNzKCkge1xuICAgIGxldCBmb3JtID0gJCgnI2hpZGRlbi1sb2dpbi1mb3JtJyk7XG5cbiAgICBmb3JtLmFwcGVuZCgnPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInVzZXJuYW1lXCIgLz4nKTtcbiAgICBmb3JtLmFwcGVuZCgnPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIG5hbWU9XCJwYXNzd29yZFwiIC8+Jyk7XG5cbiAgICAvLyBmaWxsIG91dCBmb3JtIHdpdGggdXNlciBjcmVkZW50aWFscyBhbmQgc3VibWl0IGl0LCB0aGlzIHdpbGwgdGVsbFxuICAgIC8vIE1pc2FnbyB0byByZWRpcmVjdCB1c2VyIGJhY2sgdG8gcmlnaHQgcGFnZSwgYW5kIHdpbGwgdHJpZ2dlciBicm93c2VyJ3NcbiAgICAvLyBrZXkgcmluZyBmZWF0dXJlXG4gICAgZm9ybS5maW5kKCdpbnB1dFt0eXBlPVwiaGlkZGVuXCJdJykudmFsKGFqYXguZ2V0Q3NyZlRva2VuKCkpO1xuICAgIGZvcm0uZmluZCgnaW5wdXRbbmFtZT1cInJlZGlyZWN0X3RvXCJdJykudmFsKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSk7XG4gICAgZm9ybS5maW5kKCdpbnB1dFtuYW1lPVwidXNlcm5hbWVcIl0nKS52YWwodGhpcy5zdGF0ZS51c2VybmFtZSk7XG4gICAgZm9ybS5maW5kKCdpbnB1dFtuYW1lPVwicGFzc3dvcmRcIl0nKS52YWwodGhpcy5zdGF0ZS5wYXNzd29yZCk7XG4gICAgZm9ybS5zdWJtaXQoKTtcblxuICAgIC8vIGtlZXAgZm9ybSBsb2FkaW5nXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAnaXNMb2FkaW5nJzogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlRXJyb3IocmVqZWN0aW9uKSB7XG4gICAgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgaWYgKHJlamVjdGlvbi5jb2RlID09PSAnaW5hY3RpdmVfYWRtaW4nKSB7XG4gICAgICAgIHNuYWNrYmFyLmluZm8ocmVqZWN0aW9uLmRldGFpbCk7XG4gICAgICB9IGVsc2UgaWYgKHJlamVjdGlvbi5jb2RlID09PSAnaW5hY3RpdmVfdXNlcicpIHtcbiAgICAgICAgc25hY2tiYXIuaW5mbyhyZWplY3Rpb24uZGV0YWlsKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgJ3Nob3dBY3RpdmF0aW9uJzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocmVqZWN0aW9uLmNvZGUgPT09ICdiYW5uZWQnKSB7XG4gICAgICAgIHNob3dCYW5uZWRQYWdlKHJlamVjdGlvbi5kZXRhaWwpO1xuICAgICAgICBtb2RhbC5oaWRlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbmFja2Jhci5lcnJvcihyZWplY3Rpb24uZGV0YWlsKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDQwMyAmJiByZWplY3Rpb24uYmFuKSB7XG4gICAgICBzaG93QmFubmVkUGFnZShyZWplY3Rpb24uYmFuKTtcbiAgICAgIG1vZGFsLmhpZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc25hY2tiYXIuYXBpRXJyb3IocmVqZWN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBnZXRBY3RpdmF0aW9uQnV0dG9uKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLnNob3dBY3RpdmF0aW9uKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPGEgaHJlZj17bWlzYWdvLmdldCgnUkVRVUVTVF9BQ1RJVkFUSU9OX1VSTCcpfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBidG4tc3VjY2VzcyBidG4tYmxvY2tcIj5cbiAgICAgICAgIHtnZXR0ZXh0KFwiQWN0aXZhdGUgYWNjb3VudFwiKX1cbiAgICAgIDwvYT47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWRpYWxvZyBtb2RhbC1zbSBtb2RhbC1zaWduLWluXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiZG9jdW1lbnRcIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtY29udGVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1vZGFsLWhlYWRlclwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17Z2V0dGV4dChcIkNsb3NlXCIpfT5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGg0IGNsYXNzTmFtZT1cIm1vZGFsLXRpdGxlXCI+e2dldHRleHQoXCJTaWduIGluXCIpfTwvaDQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8Zm9ybSBvblN1Ym1pdD17dGhpcy5oYW5kbGVTdWJtaXR9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtYm9keVwiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250cm9sLWlucHV0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVwiaWRfdXNlcm5hbWVcIiBjbGFzc05hbWU9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2dldHRleHQoXCJVc2VybmFtZSBvciBlLW1haWxcIil9XG4gICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLmJpbmRJbnB1dCgndXNlcm5hbWUnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudXNlcm5hbWV9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRyb2wtaW5wdXRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJpZF9wYXNzd29yZFwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt0aGlzLnN0YXRlLmlzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e2dldHRleHQoXCJQYXNzd29yZFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMuYmluZElucHV0KCdwYXNzd29yZCcpfVxuICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS5wYXNzd29yZH0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgICAgICAgICB7dGhpcy5nZXRBY3RpdmF0aW9uQnV0dG9uKCl9XG4gICAgICAgICAgICA8QnV0dG9uIGNsYXNzTmFtZT1cImJ0bi1wcmltYXJ5IGJ0bi1ibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e3RoaXMuc3RhdGUuaXNMb2FkaW5nfT5cbiAgICAgICAgICAgICAge2dldHRleHQoXCJTaWduIGluXCIpfVxuICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8YSBocmVmPXttaXNhZ28uZ2V0KCdGT1JHT1RURU5fUEFTU1dPUkRfVVJMJyl9XG4gICAgICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHQgYnRuLWJsb2NrXCI+XG4gICAgICAgICAgICAgICB7Z2V0dGV4dChcIkZvcmdvdCBwYXNzd29yZD9cIil9XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG5jb25zdCBUWVBFU19DTEFTU0VTID0ge1xuICAnaW5mbyc6ICdhbGVydC1pbmZvJyxcbiAgJ3N1Y2Nlc3MnOiAnYWxlcnQtc3VjY2VzcycsXG4gICd3YXJuaW5nJzogJ2FsZXJ0LXdhcm5pbmcnLFxuICAnZXJyb3InOiAnYWxlcnQtZGFuZ2VyJ1xufTtcbi8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbmV4cG9ydCBjbGFzcyBTbmFja2JhciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldFNuYWNrYmFyQ2xhc3MoKSB7XG4gICAgbGV0IHNuYWNrYmFyQ2xhc3MgPSAnYWxlcnRzLXNuYWNrYmFyJztcbiAgICBpZiAodGhpcy5wcm9wcy5pc1Zpc2libGUpIHtcbiAgICAgIHNuYWNrYmFyQ2xhc3MgKz0gJyBpbic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNuYWNrYmFyQ2xhc3MgKz0gJyBvdXQnO1xuICAgIH1cbiAgICByZXR1cm4gc25hY2tiYXJDbGFzcztcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmdldFNuYWNrYmFyQ2xhc3MoKX0+XG4gICAgICA8cCBjbGFzc05hbWU9eydhbGVydCAnICsgVFlQRVNfQ0xBU1NFU1t0aGlzLnByb3BzLnR5cGVdfT5cbiAgICAgICAge3RoaXMucHJvcHMubWVzc2FnZX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0KHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5zbmFja2Jhcjtcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyICgpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwidGhyZWFkcy1saXN0IHVpLXJlYWR5XCI+XG4gICAgICA8dWwgY2xhc3NOYW1lPVwibGlzdC1ncm91cFwiPlxuICAgICAgICA8bGkgY2xhc3NOYW1lPVwibGlzdC1ncm91cC1pdGVtIGVtcHR5LW1lc3NhZ2VcIj5cbiAgICAgICAgICBJIGFtIHRocmVhZHMgbGlzdCBwbGFjZWhvbGRlciFcbiAgICAgICAgPC9saT5cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTGluayB9IGZyb20gJ3JlYWN0LXJvdXRlcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IERyb3Bkb3duVG9nZ2xlIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2Ryb3Bkb3duLXRvZ2dsZSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IHsgVGFic05hdiB9IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3RocmVhZHMvbmF2cyc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldENsYXNzTmFtZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5yb3V0ZS5saXN0cy5sZW5ndGggPiAxKSB7XG4gICAgICByZXR1cm4gJ3BhZ2UtaGVhZGVyIHRhYmJlZCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAncGFnZS1oZWFkZXInO1xuICAgIH1cbiAgfVxuXG4gIGdldEdvQmFja0J1dHRvbigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5yb3V0ZS5jYXRlZ29yeS5wYXJlbnQpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8TGluayBjbGFzc05hbWU9XCJidG4gYnRuLWRlZmF1bHQgYnRuLWFsaWduZWQgYnRuLWljb24gYnRuLWdvLWJhY2sgcHVsbC1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgICB0bz17dGhpcy5wcm9wcy5yb3V0ZS5jYXRlZ29yeS5wYXJlbnQuYWJzb2x1dGVfdXJsICsgdGhpcy5wcm9wcy5yb3V0ZS5saXN0LnBhdGh9PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAga2V5Ym9hcmRfYXJyb3dfbGVmdFxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L0xpbms+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29tcGFjdE5hdlRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5yb3V0ZS5saXN0cy5sZW5ndGggPiAxKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPERyb3Bkb3duVG9nZ2xlIHRvZ2dsZU5hdj17dGhpcy5wcm9wcy50b2dnbGVOYXZ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duPXt0aGlzLnByb3BzLmRyb3Bkb3dufSAvPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldFRhYnNOYXYoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucm91dGUubGlzdHMubGVuZ3RoID4gMSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxUYWJzTmF2IGJhc2VVcmw9e3RoaXMucHJvcHMucm91dGUuY2F0ZWdvcnkuYWJzb2x1dGVfdXJsfVxuICAgICAgICAgICAgICAgICAgICAgIGxpc3Q9e3RoaXMucHJvcHMucm91dGUubGlzdH1cbiAgICAgICAgICAgICAgICAgICAgICBsaXN0cz17dGhpcy5wcm9wcy5yb3V0ZS5saXN0c31cbiAgICAgICAgICAgICAgICAgICAgICBoaWRlTmF2PXt0aGlzLnByb3BzLmhpZGVOYXZ9IC8+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMuZ2V0Q2xhc3NOYW1lKCl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXJcIj5cbiAgICAgICAge3RoaXMuZ2V0R29CYWNrQnV0dG9uKCl9XG4gICAgICAgIDxoMSBjbGFzc05hbWU9XCJwdWxsLWxlZnRcIj57dGhpcy5wcm9wcy50aXRsZX08L2gxPlxuICAgICAgICB7dGhpcy5nZXRDb21wYWN0TmF2VG9nZ2xlKCl9XG4gICAgICA8L2Rpdj5cblxuICAgICAge3RoaXMuZ2V0VGFic05hdigpfVxuXG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTGluayB9IGZyb20gJ3JlYWN0LXJvdXRlcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IExpIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2xpJzsgLy9qc2hpbnQgaWdub3JlOmxpbmVcblxuLy8ganNoaW50IGlnbm9yZTpzdGFydFxubGV0IG5hdkxpbmtzID0gZnVuY3Rpb24oYmFzZVVybCwgYWN0aXZlLCBsaXN0cywgaGlkZU5hdikge1xuICAgIHJldHVybiBsaXN0cy5tYXAoZnVuY3Rpb24obGlzdCkge1xuICAgICAgcmV0dXJuIDxMaSBpc0NvbnRyb2xsZWQ9e3RydWV9XG4gICAgICAgICAgICAgICAgIGlzQWN0aXZlPXtsaXN0LnBhdGggPT09IGFjdGl2ZS5wYXRofVxuICAgICAgICAgICAgICAgICBrZXk9e2Jhc2VVcmwgKyBsaXN0LnBhdGh9PlxuICAgICAgICA8TGluayB0bz17YmFzZVVybCArIGxpc3QucGF0aH0gb25DbGljaz17aGlkZU5hdn0+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaGlkZGVuLXhzIGhpZGRlbi1zbVwiPntsaXN0Lm5hbWV9PC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImhpZGRlbi1tZCBoaWRkZW4tbGdcIj57bGlzdC5sb25nTmFtZX08L3NwYW4+XG4gICAgICAgIDwvTGluaz5cbiAgICAgIDwvTGk+O1xuICB9KTtcbn07XG4vLyBqc2hpbnQgaWdub3JlOmVuZFxuXG5leHBvcnQgY2xhc3MgVGFic05hdiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICAvLyBqc2hpbnQgaWdub3JlOnN0YXJ0XG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwicGFnZS10YWJzIGhpZGRlbi14cyBoaWRkZW4tc21cIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDx1bCBjbGFzc05hbWU9XCJuYXYgbmF2LXBpbGxzXCI+XG4gICAgICAgICAge25hdkxpbmtzKHRoaXMucHJvcHMuYmFzZVVybCwgdGhpcy5wcm9wcy5saXN0LCB0aGlzLnByb3BzLmxpc3RzLCB0aGlzLnByb3BzLmhpZGVOYXYpfVxuICAgICAgICA8L3VsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8vIGpzaGludCBpZ25vcmU6ZW5kXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbXBhY3ROYXYgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgLy8ganNoaW50IGlnbm9yZTpzdGFydFxuICAgIHJldHVybiA8dWwgY2xhc3NOYW1lPVwiZHJvcGRvd24tbWVudVwiIHJvbGU9XCJtZW51XCI+XG4gICAgICB7bmF2TGlua3ModGhpcy5wcm9wcy5iYXNlVXJsLCB0aGlzLnByb3BzLmxpc3QsIHRoaXMucHJvcHMubGlzdHMsIHRoaXMucHJvcHMuaGlkZU5hdil9XG4gICAgPC91bD47XG4gICAgLy8ganNoaW50IGlnbm9yZTplbmRcbiAgfVxufSIsImltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgUm91dGUgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvdGhyZWFkcy9yb3V0ZSc7XG5pbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3Qoc3RvcmUpIHtcbiAgcmV0dXJuIHtcbiAgICAndGljayc6IHN0b3JlLnRpY2sudGljayxcbiAgICAndXNlcic6IHN0b3JlLmF1dGgudXNlclxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdHMoKSB7XG4gIGxldCBsaXN0cyA9IFtcbiAgICB7XG4gICAgICBwYXRoOiAnJyxcbiAgICAgIG5hbWU6IGdldHRleHQoXCJBbGxcIiksXG4gICAgICBsb25nTmFtZTogZ2V0dGV4dChcIkFsbCB0aHJlYWRzXCIpXG4gICAgfVxuICBdO1xuXG4gIGlmIChtaXNhZ28uZ2V0KCdpc0F1dGhlbnRpY2F0ZWQnKSkge1xuICAgIGxpc3RzLnB1c2goe1xuICAgICAgcGF0aDogJ215LycsXG4gICAgICBuYW1lOiBnZXR0ZXh0KFwiTXlcIiksXG4gICAgICBsb25nTmFtZTogZ2V0dGV4dChcIk15IHRocmVhZHNcIilcbiAgICB9KTtcbiAgICBsaXN0cy5wdXNoKHtcbiAgICAgIHBhdGg6ICduZXcvJyxcbiAgICAgIG5hbWU6IGdldHRleHQoXCJOZXdcIiksXG4gICAgICBsb25nTmFtZTogZ2V0dGV4dChcIk5ldyB0aHJlYWRzXCIpXG4gICAgfSk7XG4gICAgbGlzdHMucHVzaCh7XG4gICAgICBwYXRoOiAndW5yZWFkLycsXG4gICAgICBuYW1lOiBnZXR0ZXh0KFwiVW5yZWFkXCIpLFxuICAgICAgbG9uZ05hbWU6IGdldHRleHQoXCJVbnJlYWQgdGhyZWFkc1wiKVxuICAgIH0pO1xuICAgIGxpc3RzLnB1c2goe1xuICAgICAgcGF0aDogJ3N1YnNjcmliZWQvJyxcbiAgICAgIG5hbWU6IGdldHRleHQoXCJTdWJzY3JpYmVkXCIpLFxuICAgICAgbG9uZ05hbWU6IGdldHRleHQoXCJTdWJzY3JpYmVkIHRocmVhZHNcIilcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsaXN0cztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhzKCkge1xuICBsZXQgbGlzdHMgPSBnZXRMaXN0cygpO1xuICBsZXQgcGF0aHMgPSBbXTtcbiAgbGV0IGNhdGVnb3JpZXNNYXAgPSB7fTtcblxuXG4gIG1pc2Fnby5nZXQoJ0NBVEVHT1JJRVMnKS5mb3JFYWNoKGZ1bmN0aW9uKGNhdGVnb3J5KSB7XG4gICAgbGlzdHMuZm9yRWFjaChmdW5jdGlvbihsaXN0KSB7XG4gICAgICBjYXRlZ29yaWVzTWFwW2NhdGVnb3J5LmlkXSA9IGNhdGVnb3JpZXNNYXA7XG5cbiAgICAgIHBhdGhzLnB1c2goe1xuICAgICAgICBwYXRoOiBjYXRlZ29yeS5hYnNvbHV0ZV91cmwgKyBsaXN0LnBhdGgsXG4gICAgICAgIGNvbXBvbmVudDogY29ubmVjdChzZWxlY3QpKFJvdXRlKSxcblxuICAgICAgICBjYXRlZ29yaWVzTWFwLFxuICAgICAgICBjYXRlZ29yeSxcblxuICAgICAgICBsaXN0cyxcbiAgICAgICAgbGlzdFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBwYXRocztcbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBIZWFkZXIgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvdGhyZWFkcy9oZWFkZXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCB7IENvbXBhY3ROYXYgfSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy90aHJlYWRzL25hdnMnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCB7IGdldFBhZ2VUaXRsZSwgZ2V0VGl0bGUgfSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy90aHJlYWRzL3RpdGxlLXV0aWxzJztcbmltcG9ydCBUaHJlYWRzTGlzdCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy90aHJlYWRzLWxpc3Qvcm9vdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFdpdGhEcm9wZG93biBmcm9tICdtaXNhZ28vY29tcG9uZW50cy93aXRoLWRyb3Bkb3duJztcbmltcG9ydCB0aXRsZSBmcm9tICdtaXNhZ28vc2VydmljZXMvcGFnZS10aXRsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgV2l0aERyb3Bkb3duIHtcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGl0bGUuc2V0KGdldFBhZ2VUaXRsZSh0aGlzLnByb3BzLnJvdXRlKSk7XG4gIH1cblxuICBnZXRUaXRsZSgpIHtcbiAgICByZXR1cm4gZ2V0VGl0bGUodGhpcy5wcm9wcy5yb3V0ZSk7XG4gIH1cblxuICBnZXRDbGFzc05hbWUoKSB7XG4gICAgbGV0IGNsYXNzTmFtZSA9ICdwYWdlIHBhZ2UtdGhyZWFkcyc7XG4gICAgY2xhc3NOYW1lICs9ICcgcGFnZS10aHJlYWRzLScgKyB0aGlzLnByb3BzLnJvdXRlLmxpc3Q7XG4gICAgaWYgKHRoaXMucHJvcHMucm91dGUuY2F0ZWdvcnkuY3NzX2NsYXNzKSB7XG4gICAgICBjbGFzc05hbWUgKz0gJyBwYWdlLScgKyB0aGlzLnByb3BzLnJvdXRlLmNhdGVnb3J5LmNzc19jbGFzcztcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG4gIGdldENvbXBhY3ROYXYoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucm91dGUubGlzdHMubGVuZ3RoID4gMSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxDb21wYWN0TmF2IGJhc2VVcmw9e3RoaXMucHJvcHMucm91dGUuY2F0ZWdvcnkuYWJzb2x1dGVfdXJsfVxuICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Q9e3RoaXMucHJvcHMucm91dGUubGlzdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0cz17dGhpcy5wcm9wcy5yb3V0ZS5saXN0c31cbiAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlTmF2PXt0aGlzLmhpZGVOYXZ9IC8+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMuZ2V0Q2xhc3NOYW1lKCl9PlxuICAgICAgPEhlYWRlciB0aXRsZT17dGhpcy5nZXRUaXRsZSgpfVxuICAgICAgICAgICAgICByb3V0ZT17dGhpcy5wcm9wcy5yb3V0ZX1cbiAgICAgICAgICAgICAgZHJvcGRvd249e3RoaXMuc3RhdGUuZHJvcGRvd259XG4gICAgICAgICAgICAgIHRvZ2dsZU5hdj17dGhpcy50b2dnbGVOYXZ9XG4gICAgICAgICAgICAgIGhpZGVOYXY9e3RoaXMuaGlkZU5hdn0gLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLmdldENvbXBhY3ROYXZDbGFzc05hbWUoKX0+XG4gICAgICAgIHt0aGlzLmdldENvbXBhY3ROYXYoKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXJcIj5cblxuICAgICAgICA8VGhyZWFkc0xpc3QgLz5cblxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgbWlzYWdvIGZyb20gJ21pc2Fnby9pbmRleCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWdlVGl0bGUocm91dGUpIHtcbiAgaWYgKCFyb3V0ZS5jYXRlZ29yeS5zcGVjaWFsX3JvbGUpIHtcbiAgICBpZiAocm91dGUubGlzdC5wYXRoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0aXRsZTogcm91dGUubGlzdC5sb25nTmFtZSxcbiAgICAgICAgcGFyZW50OiByb3V0ZS5jYXRlZ29yeS5uYW1lXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0aXRsZTogcm91dGUuY2F0ZWdvcnkubmFtZVxuICAgICAgfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIW1pc2Fnby5nZXQoJ0NBVEVHT1JJRVNfT05fSU5ERVgnKSkge1xuICAgIGlmIChyb3V0ZS5saXN0LnBhdGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiByb3V0ZS5saXN0LmxvbmdOYW1lXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKHJvdXRlLmxpc3QucGF0aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGU6IHJvdXRlLmxpc3QubG9uZ05hbWUsXG4gICAgICAgIHBhcmVudDogZ2V0dGV4dChcIlRocmVhZHNcIilcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBnZXR0ZXh0KFwiVGhyZWFkc1wiKVxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpdGxlKHJvdXRlKSB7XG4gIGlmICghcm91dGUuY2F0ZWdvcnkuc3BlY2lhbF9yb2xlKSB7XG4gICAgcmV0dXJuIHJvdXRlLmNhdGVnb3J5Lm5hbWU7XG4gIH0gZWxzZSBpZiAoIW1pc2Fnby5nZXQoJ0NBVEVHT1JJRVNfT05fSU5ERVgnKSkge1xuICAgIGlmIChtaXNhZ28uZ2V0KCdTRVRUSU5HUycpLmZvcnVtX2luZGV4X3RpdGxlKSB7XG4gICAgICByZXR1cm4gbWlzYWdvLmdldCgnU0VUVElOR1MnKS5mb3J1bV9pbmRleF90aXRsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1pc2Fnby5nZXQoJ1NFVFRJTkdTJykuZm9ydW1fbmFtZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdldHRleHQoXCJUaHJlYWRzXCIpO1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBdmF0YXIgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYXZhdGFyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgUmVnaXN0ZXJCdXR0b24gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvcmVnaXN0ZXItYnV0dG9uJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgU2lnbkluTW9kYWwgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvc2lnbi1pbi5qcyc7XG5pbXBvcnQgZHJvcGRvd24gZnJvbSAnbWlzYWdvL3NlcnZpY2VzL21vYmlsZS1uYXZiYXItZHJvcGRvd24nO1xuaW1wb3J0IG1vZGFsIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9tb2RhbCc7XG5cbmV4cG9ydCBjbGFzcyBHdWVzdE1lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzaG93U2lnbkluTW9kYWwoKSB7XG4gICAgbW9kYWwuc2hvdyhTaWduSW5Nb2RhbCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8dWwgY2xhc3NOYW1lPVwiZHJvcGRvd24tbWVudSB1c2VyLWRyb3Bkb3duIGRyb3Bkb3duLW1lbnUtcmlnaHRcIlxuICAgICAgICAgICAgICAgcm9sZT1cIm1lbnVcIj5cbiAgICAgIDxsaSBjbGFzc05hbWU9XCJndWVzdC1wcmV2aWV3XCI+XG4gICAgICAgIDxoND57Z2V0dGV4dChcIllvdSBhcmUgYnJvd3NpbmcgYXMgZ3Vlc3QuXCIpfTwvaDQ+XG4gICAgICAgIDxwPlxuICAgICAgICAgIHtnZXR0ZXh0KCdTaWduIGluIG9yIHJlZ2lzdGVyIHRvIHN0YXJ0IGFuZCBwYXJ0aWNpcGF0ZSBpbiBkaXNjdXNzaW9ucy4nKX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLXhzLTZcIj5cblxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1ibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuc2hvd1NpZ25Jbk1vZGFsfT5cbiAgICAgICAgICAgICAge2dldHRleHQoXCJTaWduIGluXCIpfVxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC14cy02XCI+XG5cbiAgICAgICAgICAgIDxSZWdpc3RlckJ1dHRvbiBjbGFzc05hbWU9XCJidG4tcHJpbWFyeSBidG4tYmxvY2tcIj5cbiAgICAgICAgICAgICAge2dldHRleHQoXCJSZWdpc3RlclwiKX1cbiAgICAgICAgICAgIDwvUmVnaXN0ZXJCdXR0b24+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEd1ZXN0TmF2IGV4dGVuZHMgR3Vlc3RNZW51IHtcbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJuYXYgbmF2LWd1ZXN0XCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9XCJidG4gbmF2YmFyLWJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuc2hvd1NpZ25Jbk1vZGFsfT5cbiAgICAgICAge2dldHRleHQoXCJTaWduIGluXCIpfVxuICAgICAgPC9idXR0b24+XG4gICAgICA8UmVnaXN0ZXJCdXR0b24gY2xhc3NOYW1lPVwibmF2YmFyLWJ0biBidG4tcHJpbWFyeVwiPlxuICAgICAgICB7Z2V0dGV4dChcIlJlZ2lzdGVyXCIpfVxuICAgICAgPC9SZWdpc3RlckJ1dHRvbj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcGFjdEd1ZXN0TmF2IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc2hvd0d1ZXN0TWVudSgpIHtcbiAgICBkcm9wZG93bi5zaG93KEd1ZXN0TWVudSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXt0aGlzLnNob3dHdWVzdE1lbnV9PlxuICAgICAgPEF2YXRhciBzaXplPVwiNjRcIiAvPlxuICAgIDwvYnV0dG9uPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgR3Vlc3ROYXYsIENvbXBhY3RHdWVzdE5hdiB9IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXItbWVudS9ndWVzdC1uYXYnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCB7IFVzZXJOYXYsIENvbXBhY3RVc2VyTmF2fSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy91c2VyLW1lbnUvdXNlci1uYXYnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGNsYXNzIFVzZXJNZW51IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICBpZiAodGhpcy5wcm9wcy5pc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIHJldHVybiA8VXNlck5hdiB1c2VyPXt0aGlzLnByb3BzLnVzZXJ9IC8+O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gPEd1ZXN0TmF2IC8+O1xuICAgIH1cbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wYWN0VXNlck1lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIGlmICh0aGlzLnByb3BzLmlzQXV0aGVudGljYXRlZCkge1xuICAgICAgcmV0dXJuIDxDb21wYWN0VXNlck5hdiB1c2VyPXt0aGlzLnByb3BzLnVzZXJ9IC8+O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gPENvbXBhY3RHdWVzdE5hdiAvPjtcbiAgICB9XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0KHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5hdXRoO1xufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgQXZhdGFyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2F2YXRhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IENoYW5nZUF2YXRhck1vZGFsLCB7IHNlbGVjdCB9IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2NoYW5nZS1hdmF0YXIvcm9vdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBkcm9wZG93biBmcm9tICdtaXNhZ28vc2VydmljZXMvbW9iaWxlLW5hdmJhci1kcm9wZG93bic7XG5pbXBvcnQgbW9kYWwgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL21vZGFsJztcblxuZXhwb3J0IGNsYXNzIFVzZXJNZW51IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgbG9nb3V0KCkge1xuICAgIGxldCBkZWNpc2lvbiA9IGNvbmZpcm0oZ2V0dGV4dChcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBzaWduIG91dD9cIikpO1xuICAgIGlmIChkZWNpc2lvbikge1xuICAgICAgJCgnI2hpZGRlbi1sb2dvdXQtZm9ybScpLnN1Ym1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZUF2YXRhcigpIHtcbiAgICBtb2RhbC5zaG93KGNvbm5lY3Qoc2VsZWN0KShDaGFuZ2VBdmF0YXJNb2RhbCkpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPHVsIGNsYXNzTmFtZT1cImRyb3Bkb3duLW1lbnUgdXNlci1kcm9wZG93biBkcm9wZG93bi1tZW51LXJpZ2h0XCJcbiAgICAgICAgICAgICAgIHJvbGU9XCJtZW51XCI+XG4gICAgICA8bGkgY2xhc3NOYW1lPVwiZHJvcGRvd24taGVhZGVyXCI+XG4gICAgICAgIDxzdHJvbmc+e3RoaXMucHJvcHMudXNlci51c2VybmFtZX08L3N0cm9uZz5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgY2xhc3NOYW1lPVwiZGl2aWRlclwiIC8+XG4gICAgICA8bGk+XG4gICAgICAgIDxhIGhyZWY9e3RoaXMucHJvcHMudXNlci5hYnNvbHV0ZV91cmx9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5hY2NvdW50X2NpcmNsZTwvc3Bhbj5cbiAgICAgICAgICB7Z2V0dGV4dChcIlNlZSB5b3VyIHByb2ZpbGVcIil9XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG4gICAgICA8bGk+XG4gICAgICAgIDxhIGhyZWY9e21pc2Fnby5nZXQoJ1VTRVJDUF9VUkwnKX0+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPmRvbmVfYWxsPC9zcGFuPlxuICAgICAgICAgIHtnZXR0ZXh0KFwiQ2hhbmdlIG9wdGlvbnNcIil9XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG4gICAgICA8bGk+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT1cImJ0bi1saW5rXCIgb25DbGljaz17dGhpcy5jaGFuZ2VBdmF0YXJ9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5wb3J0cmFpdDwvc3Bhbj5cbiAgICAgICAgICB7Z2V0dGV4dChcIkNoYW5nZSBhdmF0YXJcIil9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9saT5cbiAgICAgIDxsaSBjbGFzc05hbWU9XCJkaXZpZGVyXCIgLz5cbiAgICAgIDxsaSBjbGFzc05hbWU9XCJkcm9wZG93bi1idXR0b25zXCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1ibG9ja1wiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmxvZ291dH0+XG4gICAgICAgICAgICB7Z2V0dGV4dChcIkxvZyBvdXRcIil9XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVzZXJOYXYgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8dWwgY2xhc3NOYW1lPVwidWwgbmF2IG5hdmJhci1uYXYgbmF2LXVzZXJcIj5cbiAgICAgIDxsaSBjbGFzc05hbWU9XCJkcm9wZG93blwiPlxuICAgICAgICA8YSBocmVmPXt0aGlzLnByb3BzLnVzZXIuYWJzb2x1dGVfdXJsfSBjbGFzc05hbWU9XCJkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgICByb2xlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgPEF2YXRhciB1c2VyPXt0aGlzLnByb3BzLnVzZXJ9IHNpemU9XCI2NFwiIC8+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPFVzZXJNZW51IHVzZXI9e3RoaXMucHJvcHMudXNlcn0gLz5cbiAgICAgIDwvbGk+XG4gICAgPC91bD47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0VXNlck1lbnUoc3RhdGUpIHtcbiAgcmV0dXJuIHt1c2VyOiBzdGF0ZS5hdXRoLnVzZXJ9O1xufVxuXG5leHBvcnQgY2xhc3MgQ29tcGFjdFVzZXJOYXYgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzaG93VXNlck1lbnUoKSB7XG4gICAgZHJvcGRvd24uc2hvd0Nvbm5lY3RlZCgndXNlci1tZW51JywgY29ubmVjdChzZWxlY3RVc2VyTWVudSkoVXNlck1lbnUpKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e3RoaXMuc2hvd1VzZXJNZW51fT5cbiAgICAgIDxBdmF0YXIgdXNlcj17dGhpcy5wcm9wcy51c2VyfSBzaXplPVwiNjRcIiAvPlxuICAgIDwvYnV0dG9uPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldENsYXNzKCkge1xuICAgIGxldCBzdGF0dXMgPSAnJztcbiAgICBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfYmFubmVkKSB7XG4gICAgICBzdGF0dXMgPSAnYmFubmVkJztcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX2hpZGRlbikge1xuICAgICAgc3RhdHVzID0gJ29mZmxpbmUnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfb25saW5lX2hpZGRlbikge1xuICAgICAgc3RhdHVzID0gJ29ubGluZSc7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19vZmZsaW5lX2hpZGRlbikge1xuICAgICAgc3RhdHVzID0gJ29mZmxpbmUnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfb25saW5lKSB7XG4gICAgICBzdGF0dXMgPSAnb25saW5lJztcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX29mZmxpbmUpIHtcbiAgICAgIHN0YXR1cyA9ICdvZmZsaW5lJztcbiAgICB9XG5cbiAgICByZXR1cm4gJ3VzZXItc3RhdHVzIHVzZXItJyArIHN0YXR1cztcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT17dGhpcy5nZXRDbGFzcygpfT5cbiAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgIDwvc3Bhbj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RhdHVzSWNvbiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldEljb24oKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX2Jhbm5lZCkge1xuICAgICAgcmV0dXJuICdyZW1vdmVfY2lyY2xlX291dGxpbmUnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfaGlkZGVuKSB7XG4gICAgICByZXR1cm4gJ2hlbHBfb3V0bGluZSc7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19vbmxpbmVfaGlkZGVuKSB7XG4gICAgICByZXR1cm4gJ2xhYmVsJztcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX29mZmxpbmVfaGlkZGVuKSB7XG4gICAgICByZXR1cm4gJ2xhYmVsX291dGxpbmUnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfb25saW5lKSB7XG4gICAgICByZXR1cm4gJ2xlbnMnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfb2ZmbGluZSkge1xuICAgICAgcmV0dXJuICdwYW5vcmFtYV9maXNoX2V5ZSc7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvbiBzdGF0dXMtaWNvblwiPlxuICAgICAge3RoaXMuZ2V0SWNvbigpfVxuICAgIDwvc3Bhbj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxuXG59XG5cbmV4cG9ydCBjbGFzcyBTdGF0dXNMYWJlbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldEhlbHAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX2Jhbm5lZCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmJhbm5lZF91bnRpbCkge1xuICAgICAgICByZXR1cm4gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIiUodXNlcm5hbWUpcyBpcyBiYW5uZWQgdW50aWwgJShiYW5fZXhwaXJlcylzXCIpLCB7XG4gICAgICAgICAgdXNlcm5hbWU6IHRoaXMucHJvcHMudXNlci51c2VybmFtZSxcbiAgICAgICAgICBiYW5fZXhwaXJlczogdGhpcy5wcm9wcy5zdGF0dXMuYmFubmVkX3VudGlsLmZvcm1hdCgnTEwsIExUJylcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIiUodXNlcm5hbWUpcyBpcyBiYW5uZWRcIiksIHtcbiAgICAgICAgICB1c2VybmFtZTogdGhpcy5wcm9wcy51c2VyLnVzZXJuYW1lXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfaGlkZGVuKSB7XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIiUodXNlcm5hbWUpcyBpcyBoaWRpbmcgcHJlc2VuY2VcIiksIHtcbiAgICAgICAgdXNlcm5hbWU6IHRoaXMucHJvcHMudXNlci51c2VybmFtZVxuICAgICAgfSwgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19vbmxpbmVfaGlkZGVuKSB7XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUoZ2V0dGV4dChcIiUodXNlcm5hbWUpcyBpcyBvbmxpbmUgKGhpZGRlbilcIiksIHtcbiAgICAgICAgdXNlcm5hbWU6IHRoaXMucHJvcHMudXNlci51c2VybmFtZVxuICAgICAgfSwgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19vZmZsaW5lX2hpZGRlbikge1xuICAgICAgcmV0dXJuIGludGVycG9sYXRlKGdldHRleHQoXCIlKHVzZXJuYW1lKXMgd2FzIGxhc3Qgc2VlbiAlKGxhc3RfY2xpY2spcyAoaGlkZGVuKVwiKSwge1xuICAgICAgICB1c2VybmFtZTogdGhpcy5wcm9wcy51c2VyLnVzZXJuYW1lLFxuICAgICAgICBsYXN0X2NsaWNrOiB0aGlzLnByb3BzLnN0YXR1cy5sYXN0X2NsaWNrLmZyb21Ob3coKVxuICAgICAgfSwgdHJ1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19vbmxpbmUpIHtcbiAgICAgIHJldHVybiBpbnRlcnBvbGF0ZShnZXR0ZXh0KFwiJSh1c2VybmFtZSlzIGlzIG9ubGluZVwiKSwge1xuICAgICAgICB1c2VybmFtZTogdGhpcy5wcm9wcy51c2VyLnVzZXJuYW1lXG4gICAgICB9LCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX29mZmxpbmUpIHtcbiAgICAgIHJldHVybiBpbnRlcnBvbGF0ZShnZXR0ZXh0KFwiJSh1c2VybmFtZSlzIHdhcyBsYXN0IHNlZW4gJShsYXN0X2NsaWNrKXNcIiksIHtcbiAgICAgICAgdXNlcm5hbWU6IHRoaXMucHJvcHMudXNlci51c2VybmFtZSxcbiAgICAgICAgbGFzdF9jbGljazogdGhpcy5wcm9wcy5zdGF0dXMubGFzdF9jbGljay5mcm9tTm93KClcbiAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldExhYmVsKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19iYW5uZWQpIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiQmFubmVkXCIpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfaGlkZGVuKSB7XG4gICAgICByZXR1cm4gZ2V0dGV4dChcIkhpZGRlblwiKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX29ubGluZV9oaWRkZW4pIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiT25saW5lIChoaWRkZW4pXCIpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0dXMuaXNfb2ZmbGluZV9oaWRkZW4pIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiT2ZmbGluZSAoaGlkZGVuKVwiKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuc3RhdHVzLmlzX29ubGluZSkge1xuICAgICAgcmV0dXJuIGdldHRleHQoXCJPbmxpbmVcIik7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXR1cy5pc19vZmZsaW5lKSB7XG4gICAgICByZXR1cm4gZ2V0dGV4dChcIk9mZmxpbmVcIik7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZSB8fCBcInN0YXR1cy1sYWJlbFwifVxuICAgICAgICAgICAgICAgICB0aXRsZT17dGhpcy5nZXRIZWxwKCl9PlxuICAgICAge3RoaXMuZ2V0TGFiZWwoKX1cbiAgICA8L3NwYW4+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEF2YXRhciBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9hdmF0YXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCAqIGFzIHJhbmRvbSBmcm9tICdtaXNhZ28vdXRpbHMvcmFuZG9tJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyVXNlckF2YXRhcihpdGVtKSB7XG4gICAgaWYgKGl0ZW0uY2hhbmdlZF9ieSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxhIGhyZWY9e2l0ZW0uY2hhbmdlZF9ieS5hYnNvbHV0ZV91cmx9IGNsYXNzTmFtZT1cInVzZXItYXZhdGFyLXdyYXBwZXJcIj5cbiAgICAgICAgPEF2YXRhciB1c2VyPXtpdGVtLmNoYW5nZWRfYnl9IHNpemU9XCIxMDBcIiAvPlxuICAgICAgPC9hPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJ1c2VyLWF2YXRhci13cmFwcGVyXCI+XG4gICAgICAgIDxBdmF0YXIgc2l6ZT1cIjEwMFwiIC8+XG4gICAgICA8L3NwYW4+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9XG4gIH1cblxuICByZW5kZXJVc2VybmFtZShpdGVtKSB7XG4gICAgaWYgKGl0ZW0uY2hhbmdlZF9ieSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxhIGhyZWY9e2l0ZW0uY2hhbmdlZF9ieS5hYnNvbHV0ZV91cmx9IGNsYXNzTmFtZT1cIml0ZW0tdGl0bGVcIj5cbiAgICAgICAge2l0ZW0uY2hhbmdlZF9ieS51c2VybmFtZX1cbiAgICAgIDwvYT47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwiaXRlbS10aXRsZVwiPlxuICAgICAgICB7aXRlbS5jaGFuZ2VkX2J5X3VzZXJuYW1lfVxuICAgICAgPC9zcGFuPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfVxuICB9XG5cbiAgcmVuZGVySGlzdG9yeSgpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwidXNlcm5hbWUtaGlzdG9yeSB1aS1yZWFkeVwiPlxuICAgICAgPHVsIGNsYXNzTmFtZT1cImxpc3QtZ3JvdXBcIj5cbiAgICAgICAge3RoaXMucHJvcHMuY2hhbmdlcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gPGxpIGNsYXNzTmFtZT1cImxpc3QtZ3JvdXAtaXRlbVwiIGtleT17aXRlbS5pZH0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVzZXJuYW1lLWNoYW5nZS1hdmF0YXJcIj5cbiAgICAgICAgICAgICAge3RoaXMucmVuZGVyVXNlckF2YXRhcihpdGVtKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VybmFtZS1jaGFuZ2UtYXV0aG9yXCI+XG4gICAgICAgICAgICAgIHt0aGlzLnJlbmRlclVzZXJuYW1lKGl0ZW0pfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVzZXJuYW1lLWNoYW5nZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjaGFuZ2Utb2xkLXVzZXJuYW1lXCI+XG4gICAgICAgICAgICAgICAge2l0ZW0ub2xkX3VzZXJuYW1lfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIm1hdGVyaWFsLWljb25cIj5cbiAgICAgICAgICAgICAgICBhcnJvd19mb3J3YXJkXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiY2hhbmdlLW5ldy11c2VybmFtZVwiPlxuICAgICAgICAgICAgICAgIHtpdGVtLm5ld191c2VybmFtZX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVzZXJuYW1lLWNoYW5nZS1kYXRlXCI+XG4gICAgICAgICAgICAgIDxhYmJyIHRpdGxlPXtpdGVtLmNoYW5nZWRfb24uZm9ybWF0KCdMTEwnKX0+XG4gICAgICAgICAgICAgICAge2l0ZW0uY2hhbmdlZF9vbi5mcm9tTm93KCl9XG4gICAgICAgICAgICAgIDwvYWJicj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbGk+O1xuICAgICAgICB9KX1cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cblxuICBnZXRFbXB0eU1lc3NhZ2UoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuZW1wdHlNZXNzYWdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5lbXB0eU1lc3NhZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXR0ZXh0KFwiTm8gbmFtZSBjaGFuZ2VzIGhhdmUgYmVlbiByZWNvcmRlZCBmb3IgeW91ciBhY2NvdW50LlwiKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJFbXB0eUhpc3RvcnkoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInVzZXJuYW1lLWhpc3RvcnkgdWktcmVhZHlcIj5cbiAgICAgIDx1bCBjbGFzc05hbWU9XCJsaXN0LWdyb3VwXCI+XG4gICAgICAgIDxsaSBjbGFzc05hbWU9XCJsaXN0LWdyb3VwLWl0ZW0gZW1wdHktbWVzc2FnZVwiPlxuICAgICAgICAgIHt0aGlzLmdldEVtcHR5TWVzc2FnZSgpfVxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxuXG4gIHJlbmRlckhpc3RvcnlQcmV2aWV3KCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJ1c2VybmFtZS1oaXN0b3J5IHVpLXByZXZpZXdcIj5cbiAgICAgIDx1bCBjbGFzc05hbWU9XCJsaXN0LWdyb3VwXCI+XG4gICAgICAgIHtyYW5kb20ucmFuZ2UoMywgNSkubWFwKChpKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIDxsaSBjbGFzc05hbWU9XCJsaXN0LWdyb3VwLWl0ZW1cIiBrZXk9e2l9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VybmFtZS1jaGFuZ2UtYXZhdGFyXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInVzZXItYXZhdGFyXCI+XG4gICAgICAgICAgICAgICAgPEF2YXRhciBzaXplPVwiMTAwXCIgLz5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVzZXJuYW1lLWNoYW5nZS1hdXRob3JcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidWktcHJldmlldy10ZXh0XCIgc3R5bGU9e3t3aWR0aDogcmFuZG9tLmludCgzMCwgMTAwKSArIFwicHhcIn19PiZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VybmFtZS1jaGFuZ2VcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidWktcHJldmlldy10ZXh0XCIgc3R5bGU9e3t3aWR0aDogcmFuZG9tLmludCgzMCwgNTApICsgXCJweFwifX0+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICAgICAgYXJyb3dfZm9yd2FyZFxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInVpLXByZXZpZXctdGV4dFwiIHN0eWxlPXt7d2lkdGg6IHJhbmRvbS5pbnQoMzAsIDUwKSArIFwicHhcIn19PiZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VybmFtZS1jaGFuZ2UtZGF0ZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ1aS1wcmV2aWV3LXRleHRcIiBzdHlsZT17e3dpZHRoOiByYW5kb20uaW50KDUwLCAxMDApICsgXCJweFwifX0+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9saT47XG4gICAgICAgIH0pfVxuICAgICAgPC91bD5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5pc0xvYWRlZCkge1xuICAgICAgaWYgKHRoaXMucHJvcHMuY2hhbmdlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVySGlzdG9yeSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRW1wdHlIaXN0b3J5KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckhpc3RvcnlQcmV2aWV3KCk7XG4gICAgfVxuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBVc2VyQ2FyZCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy91c2Vycy1saXN0L3VzZXItY2FyZCcgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgVXNlclByZXZpZXcgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvdXNlcnMtbGlzdC91c2VyLXByZXZpZXcnIC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IGJhdGNoIGZyb20gJ21pc2Fnby91dGlscy9iYXRjaCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldFBhZ2VyKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnBhZ2VzID4gMSkge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxQYWdlciB7Li4udGhpcy5wcm9wc30gLz5cbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldENsYXNzTmFtZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5jbGFzc05hbWUpIHtcbiAgICAgIHJldHVybiBcInVzZXJzLWNhcmRzLWxpc3QgXCIgKyB0aGlzLnByb3BzLmNsYXNzTmFtZSArIFwiIHVpLXJlYWR5XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcInVzZXJzLWNhcmRzLWxpc3QgdWktcmVhZHlcIjtcbiAgICB9XG4gIH1cblxuICBnZXRDb2xDbGFzc05hbWUoKSB7XG4gICAgcmV0dXJuIFwiY29sLW1kLVwiICsgKDEyIC8gdGhpcy5wcm9wcy5jb2xzKTtcbiAgfVxuXG4gIGdldEJvZHkoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuaXNMb2FkZWQpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiBiYXRjaCh0aGlzLnByb3BzLnVzZXJzLCB0aGlzLnByb3BzLmNvbHMpLm1hcCgocm93LCByKSA9PiB7XG4gICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInJvd1wiIGtleT17cn0+XG4gICAgICAgICAge3Jvdy5tYXAoKHVzZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5nZXRDb2xDbGFzc05hbWUoKX0ga2V5PXt1c2VyLmlkfT5cbiAgICAgICAgICAgICAgPFVzZXJDYXJkIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93U3RhdHVzPXt0aGlzLnByb3BzLnNob3dTdGF0dXN9XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93UmFuaz17dGhpcy5wcm9wcy5zaG93UmFua30gLz5cbiAgICAgICAgICAgIDwvZGl2PjtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9kaXY+O1xuICAgICAgfSk7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICBsZXQgcm93ID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucHJvcHMuY29sczsgaSArKykge1xuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIHJvdy5wdXNoKHRoaXMuZ2V0Q29sQ2xhc3NOYW1lKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJvdy5wdXNoKHRoaXMuZ2V0Q29sQ2xhc3NOYW1lKCkgKyAnIGhpZGRlbi14cyBoaWRkZW4tc20nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cbiAgICAgICAge3Jvdy5tYXAoKGNsYXNzTmFtZSwgaSkgPT4ge1xuICAgICAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lfSBrZXk9e2l9PlxuICAgICAgICAgICAgPFVzZXJQcmV2aWV3IHNob3dTdGF0dXM9e3RoaXMucHJvcHMuc2hvd1N0YXR1c30gLz5cbiAgICAgICAgICA8L2Rpdj47XG4gICAgICAgIH0pfVxuICAgICAgPC9kaXY+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInVzZXJzLWNhcmRzLWxpc3QgdWktcmVhZHlcIj5cbiAgICAgIHt0aGlzLmdldEJvZHkoKX1cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXZhdGFyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2F2YXRhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFN0YXR1cywgeyBTdGF0dXNJY29uLCBTdGF0dXNMYWJlbCB9IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXItc3RhdHVzJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnVzZXIucmFuay5jc3NfY2xhc3MpIHtcbiAgICAgIHJldHVybiAndXNlci1jYXJkIHVzZXItY2FyZC0nICsgdGhpcy5wcm9wcy51c2VyLnJhbmsuY3NzX2NsYXNzICsgJyB1aS1yZWFkeSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAndXNlci1jYXJkIHVpLXJlYWR5JztcbiAgICB9XG4gIH1cblxuICBnZXRVc2VyU3RhdHVzKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnNob3dTdGF0dXMpIHtcbiAgICAgIGlmICh0aGlzLnByb3BzLnVzZXIuc3RhdHVzKSB7XG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgICAgcmV0dXJuIDxTdGF0dXMgdXNlcj17dGhpcy5wcm9wcy51c2VyfSBzdGF0dXM9e3RoaXMucHJvcHMudXNlci5zdGF0dXN9PlxuICAgICAgICAgIDxTdGF0dXNJY29uIHVzZXI9e3RoaXMucHJvcHMudXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM9e3RoaXMucHJvcHMudXNlci5zdGF0dXN9IC8+XG4gICAgICAgICAgPFN0YXR1c0xhYmVsIHVzZXI9e3RoaXMucHJvcHMudXNlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzPXt0aGlzLnByb3BzLnVzZXIuc3RhdHVzfVxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJzdGF0dXMtbGFiZWxcIiAvPlxuICAgICAgICA8L1N0YXR1cz47XG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJ1c2VyLXN0YXR1c1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInN0YXR1cy1pY29uIHVpLXByZXZpZXdcIj5cbiAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdGF0dXMtbGFiZWwgdWktcHJldmlld1wiPlxuICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+O1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRSYW5rTmFtZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zaG93UmFuaykge1xuICAgICAgaWYgKHRoaXMucHJvcHMudXNlci5yYW5rLmlzX3RhYikge1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICAgIHJldHVybiA8YSBocmVmPXt0aGlzLnByb3BzLnVzZXIucmFuay5hYnNvbHV0ZV91cmx9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJpdGVtLXRpdGxlIHJhbmstbmFtZVwiPlxuICAgICAgICAgIHt0aGlzLnByb3BzLnVzZXIucmFuay5uYW1lfVxuICAgICAgICA8L2E+O1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwiaXRlbS10aXRsZSByYW5rLW5hbWVcIj5cbiAgICAgICAgICB7dGhpcy5wcm9wcy51c2VyLnJhbmsubmFtZX1cbiAgICAgICAgPC9zcGFuPjtcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0VXNlclRpdGxlKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnVzZXIudGl0bGUpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJ1c2VyLXRpdGxlXCI+e3RoaXMucHJvcHMudXNlci50aXRsZX08L3NwYW4+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0VXNlckpvaW5lZE9uKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICBsZXQgdGl0bGUgPSBpbnRlcnBvbGF0ZShnZXR0ZXh0KFwiSm9pbmVkIG9uICUoam9pbmVkX29uKXNcIiksIHtcbiAgICAgICdqb2luZWRfb24nOiB0aGlzLnByb3BzLnVzZXIuam9pbmVkX29uLmZvcm1hdCgnTEwsIExUJylcbiAgICB9LCB0cnVlKTtcblxuICAgIGxldCBhZ2UgPSBpbnRlcnBvbGF0ZShnZXR0ZXh0KFwiSm9pbmVkICUoam9pbmVkX29uKXNcIiksIHtcbiAgICAgICdqb2luZWRfb24nOiB0aGlzLnByb3BzLnVzZXIuam9pbmVkX29uLmZyb21Ob3coKVxuICAgIH0sIHRydWUpO1xuXG4gICAgcmV0dXJuIDxzcGFuIGNsYXNzTmFtZT1cInVzZXItam9pbmVkLW9uXCIgdGl0bGU9e3RpdGxlfT5cbiAgICAgIHthZ2V9XG4gICAgPC9zcGFuPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG5cbiAgZ2V0UG9zdHNDb3VudCgpIHtcbiAgICBsZXQgbWVzc2FnZSA9IG5nZXR0ZXh0KFxuICAgICAgXCIlKHBvc3RzKXMgcG9zdFwiLFxuICAgICAgXCIlKHBvc3RzKXMgcG9zdHNcIixcbiAgICAgIHRoaXMucHJvcHMudXNlci5wb3N0cyk7XG5cbiAgICByZXR1cm4gaW50ZXJwb2xhdGUobWVzc2FnZSwge1xuICAgICAgJ3Bvc3RzJzogdGhpcy5wcm9wcy51c2VyLnBvc3RzXG4gICAgfSwgdHJ1ZSk7XG4gIH1cblxuICBnZXRUaHJlYWRzQ291bnQoKSB7XG4gICAgbGV0IG1lc3NhZ2UgPSBuZ2V0dGV4dChcbiAgICAgIFwiJSh0aHJlYWRzKXMgdGhyZWFkXCIsXG4gICAgICBcIiUodGhyZWFkcylzIHRocmVhZHNcIixcbiAgICAgIHRoaXMucHJvcHMudXNlci50aHJlYWRzKTtcblxuICAgIHJldHVybiBpbnRlcnBvbGF0ZShtZXNzYWdlLCB7XG4gICAgICAndGhyZWFkcyc6IHRoaXMucHJvcHMudXNlci50aHJlYWRzXG4gICAgfSwgdHJ1ZSk7XG4gIH1cblxuICBnZXRGb2xsb3dlcnNDb3VudCgpIHtcbiAgICBsZXQgbWVzc2FnZSA9IG5nZXR0ZXh0KFxuICAgICAgXCIlKGZvbGxvd2VycylzIGZvbGxvd2VyXCIsXG4gICAgICBcIiUoZm9sbG93ZXJzKXMgZm9sbG93ZXJzXCIsXG4gICAgICB0aGlzLnByb3BzLnVzZXIuZm9sbG93ZXJzKTtcblxuICAgIHJldHVybiBpbnRlcnBvbGF0ZShtZXNzYWdlLCB7XG4gICAgICAnZm9sbG93ZXJzJzogdGhpcy5wcm9wcy51c2VyLmZvbGxvd2Vyc1xuICAgIH0sIHRydWUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9e3RoaXMuZ2V0Q2xhc3NOYW1lKCl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VyLWNhcmQtYmctaW1hZ2VcIj5cbiAgICAgICAgPEF2YXRhciB1c2VyPXt0aGlzLnByb3BzLnVzZXJ9IHNpemU9XCI0MDBcIiBjbGFzc05hbWU9XCJiZy1pbWFnZVwiIC8+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VyLWNhcmQtYmdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVzZXItZGV0YWlsc1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVzZXItYXZhdGFyXCI+XG4gICAgICAgICAgICAgIDxhIGhyZWY9e3RoaXMucHJvcHMudXNlci5hYnNvbHV0ZV91cmx9PlxuICAgICAgICAgICAgICAgIDxBdmF0YXIgdXNlcj17dGhpcy5wcm9wcy51c2VyfSBzaXplPVwiNDAwXCIgLz5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxoNCBjbGFzc05hbWU9XCJ1c2VyLW5hbWVcIj5cbiAgICAgICAgICAgICAgPGEgaHJlZj17dGhpcy5wcm9wcy51c2VyLmFic29sdXRlX3VybH0gY2xhc3NOYW1lPVwiaXRlbS10aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnVzZXIudXNlcm5hbWV9XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvaDQ+XG5cbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInVzZXItc3Vic2NyaXB0XCI+XG4gICAgICAgICAgICAgIHt0aGlzLmdldFVzZXJTdGF0dXMoKX1cbiAgICAgICAgICAgICAge3RoaXMuZ2V0UmFua05hbWUoKX1cbiAgICAgICAgICAgICAge3RoaXMuZ2V0VXNlclRpdGxlKCl9XG4gICAgICAgICAgICAgIHt0aGlzLmdldFVzZXJKb2luZWRPbigpfVxuICAgICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VyLWNhcmQtc3RhdHNcIj5cblxuICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cImxpc3QtdW5zdHlsZWRcIj5cbiAgICAgICAgICAgICAgPGxpIGNsYXNzTmFtZT1cInVzZXItcG9zdHMtY291bnRcIj5cbiAgICAgICAgICAgICAgICB7dGhpcy5nZXRQb3N0c0NvdW50KCl9XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDxsaSBjbGFzc05hbWU9XCJ1c2VyLXRocmVhZHMtY291bnRcIj5cbiAgICAgICAgICAgICAgICB7dGhpcy5nZXRUaHJlYWRzQ291bnQoKX1cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPGxpIGNsYXNzTmFtZT1cInVzZXItZm9sbG93ZXJzLWNvdW50XCI+XG4gICAgICAgICAgICAgICAge3RoaXMuZ2V0Rm9sbG93ZXJzQ291bnQoKX1cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQXZhdGFyIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2F2YXRhcic7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0ICogYXMgcmFuZG9tIGZyb20gJ21pc2Fnby91dGlscy9yYW5kb20nOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBnZXRVc2VyU3RhdHVzKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnNob3dTdGF0dXMpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJ1c2VyLXN0YXR1c1wiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdGF0dXMtaWNvbiB1aS1wcmV2aWV3XCI+XG4gICAgICAgICAgJm5ic3A7XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3RhdHVzLWxhYmVsIHVpLXByZXZpZXdcIj5cbiAgICAgICAgICAmbmJzcDtcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9zcGFuPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPSd1c2VyLWNhcmQgdWktcHJldmlldyc+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInVzZXItY2FyZC1iZy1pbWFnZVwiPlxuICAgICAgICA8QXZhdGFyIHNpemU9XCI0MDBcIiBjbGFzc05hbWU9XCJiZy1pbWFnZVwiIC8+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ1c2VyLWNhcmQtYmdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVzZXItZGV0YWlsc1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInVzZXItYXZhdGFyXCI+XG4gICAgICAgICAgICAgIDxBdmF0YXIgc2l6ZT1cIjQwMFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGg0IGNsYXNzTmFtZT1cInVzZXItbmFtZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpdGVtLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidWktcHJldmlldy10ZXh0XCIgc3R5bGU9e3t3aWR0aDogcmFuZG9tLmludCg2MCwgMTUwKSArIFwicHhcIn19PiZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9oND5cblxuICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidXNlci1zdWJzY3JpcHRcIj5cblxuICAgICAgICAgICAgICB7dGhpcy5nZXRVc2VyU3RhdHVzKCl9XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInVzZXItam9pbmVkLW9uXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidWktcHJldmlldy10ZXh0XCIgc3R5bGU9e3t3aWR0aDogcmFuZG9tLmludCgzMCwgNTApICsgXCJweFwifX0+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgIDwvcD5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXNlci1jYXJkLXN0YXRzXCI+XG5cbiAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJsaXN0LXVuc3R5bGVkXCI+XG4gICAgICAgICAgICAgIDxsaSBjbGFzc05hbWU9XCJ1c2VyLXBvc3RzLWNvdW50XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidWktcHJldmlldy10ZXh0XCIgc3R5bGU9e3t3aWR0aDogcmFuZG9tLmludCg0MCwgNzApICsgXCJweFwifX0+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8bGkgY2xhc3NOYW1lPVwidXNlci10aHJlYWRzLWNvdW50XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidWktcHJldmlldy10ZXh0XCIgc3R5bGU9e3t3aWR0aDogcmFuZG9tLmludCg0MCwgNzApICsgXCJweFwifX0+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8bGkgY2xhc3NOYW1lPVwidXNlci1mb2xsb3dlcnMtY291bnRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ1aS1wcmV2aWV3LXRleHRcIiBzdHlsZT17e3dpZHRoOiByYW5kb20uaW50KDQwLCA3MCkgKyBcInB4XCJ9fT4mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldEVtcHR5TWVzc2FnZSgpIHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGUoXG4gICAgICBnZXR0ZXh0KFwiTm8gdXNlcnMgaGF2ZSBwb3N0ZWQgYW55IG5ldyBtZXNzYWdlcyBkdXJpbmcgbGFzdCAlKGRheXMpcyBkYXlzLlwiKSxcbiAgICAgIHsnZGF5cyc6IHRoaXMucHJvcHMudHJhY2tlZFBlcmlvZH0sIHRydWUpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBjbGFzc05hbWU9XCJhY3RpdmUtcG9zdGVycy1saXN0XCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuICAgICAgICA8cCBjbGFzc05hbWU9XCJsZWFkXCI+XG4gICAgICAgICAge3RoaXMuZ2V0RW1wdHlNZXNzYWdlKCl9XG4gICAgICAgIDwvcD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IExpbmsgfSBmcm9tICdyZWFjdC1yb3V0ZXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBBdmF0YXIgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYXZhdGFyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgU3RhdHVzLCB7IFN0YXR1c0ljb24sIFN0YXR1c0xhYmVsIH0gZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvdXNlci1zdGF0dXMnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJhbmsuY3NzX2NsYXNzKSB7XG4gICAgICByZXR1cm4gXCJsaXN0LWdyb3VwLWl0ZW0gbGlzdC1ncm91cC1yYW5rLVwiICsgdGhpcy5wcm9wcy5yYW5rLmNzc19jbGFzcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFwibGlzdC1ncm91cC1pdGVtXCI7XG4gICAgfVxuICB9XG5cbiAgZ2V0VXNlclN0YXR1cygpIHtcbiAgICBpZiAodGhpcy5wcm9wcy51c2VyLnN0YXR1cykge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgcmV0dXJuIDxTdGF0dXMgdXNlcj17dGhpcy5wcm9wcy51c2VyfSBzdGF0dXM9e3RoaXMucHJvcHMudXNlci5zdGF0dXN9PlxuICAgICAgICA8U3RhdHVzSWNvbiB1c2VyPXt0aGlzLnByb3BzLnVzZXJ9XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cz17dGhpcy5wcm9wcy51c2VyLnN0YXR1c30gLz5cbiAgICAgICAgPFN0YXR1c0xhYmVsIHVzZXI9e3RoaXMucHJvcHMudXNlcn1cbiAgICAgICAgICAgICAgICAgICAgIHN0YXR1cz17dGhpcy5wcm9wcy51c2VyLnN0YXR1c31cbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInN0YXR1cy1sYWJlbCBoaWRkZW4teHMgaGlkZGVuLXNtXCIgLz5cbiAgICAgIDwvU3RhdHVzPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJ1c2VyLXN0YXR1c1wiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdGF0dXMtaWNvbiB1aS1wcmV2aWV3XCI+XG4gICAgICAgICAgJm5ic3A7XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3RhdHVzLWxhYmVsIHVpLXByZXZpZXcgaGlkZGVuLXhzIGhpZGRlbi1zbVwiPlxuICAgICAgICAgICZuYnNwO1xuICAgICAgICA8L3NwYW4+XG4gICAgICA8L3NwYW4+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9XG4gIH1cblxuICBnZXRSYW5rTmFtZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5yYW5rLmlzX3RhYikge1xuICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgbGV0IHJhbmtVcmwgPSBtaXNhZ28uZ2V0KCdVU0VSU19MSVNUX1VSTCcpICsgdGhpcy5wcm9wcy5yYW5rLnNsdWcgKyAnLyc7XG4gICAgICByZXR1cm4gPExpbmsgdG89e3JhbmtVcmx9IGNsYXNzTmFtZT1cIml0ZW0tdGl0bGUgcmFuay1uYW1lXCI+XG4gICAgICAgIHt0aGlzLnByb3BzLnJhbmsubmFtZX1cbiAgICAgIDwvTGluaz47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPHNwYW4gY2xhc3NOYW1lPVwiaXRlbS10aXRsZSByYW5rLW5hbWVcIj5cbiAgICAgICAge3RoaXMucHJvcHMucmFuay5uYW1lfVxuICAgICAgPC9zcGFuPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfVxuICB9XG5cbiAgZ2V0VXNlclRpdGxlKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnVzZXIudGl0bGUpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8c3BhbiBjbGFzc05hbWU9XCJ1c2VyLXRpdGxlIGhpZGRlbi14cyBoaWRkZW4tc21cIj5cbiAgICAgICAge3RoaXMucHJvcHMudXNlci50aXRsZX1cbiAgICAgIDwvc3Bhbj47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8bGkgY2xhc3NOYW1lPXt0aGlzLmdldENsYXNzTmFtZSgpfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmFuay11c2VyLWF2YXRhclwiPlxuICAgICAgICA8YSBocmVmPXt0aGlzLnByb3BzLnVzZXIuYWJzb2x1dGVfdXJsfT5cbiAgICAgICAgICA8QXZhdGFyIHVzZXI9e3RoaXMucHJvcHMudXNlcn0gc2l6ZT1cIjUwXCIgLz5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmFuay11c2VyXCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXNlci1uYW1lXCI+XG4gICAgICAgICAgPGEgaHJlZj17dGhpcy5wcm9wcy51c2VyLmFic29sdXRlX3VybH0gY2xhc3NOYW1lPVwiaXRlbS10aXRsZVwiPlxuICAgICAgICAgICAge3RoaXMucHJvcHMudXNlci51c2VybmFtZX1cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dGhpcy5nZXRVc2VyU3RhdHVzKCl9XG4gICAgICAgIHt0aGlzLmdldFJhbmtOYW1lKCl9XG4gICAgICAgIHt0aGlzLmdldFVzZXJUaXRsZSgpfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmFuay1wb3NpdGlvblwiPlxuICAgICAgICA8c3Ryb25nPiN7dGhpcy5wcm9wcy5jb3VudGVyfTwvc3Ryb25nPlxuICAgICAgICA8c21hbGw+e2dldHRleHQoXCJSYW5rXCIpfTwvc21hbGw+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyYW5rLXBvc3RzLWNvdW50ZWRcIj5cbiAgICAgICAgPHN0cm9uZz57dGhpcy5wcm9wcy51c2VyLm1ldGEuc2NvcmV9PC9zdHJvbmc+XG4gICAgICAgIDxzbWFsbD57Z2V0dGV4dChcIlJhbmtlZCBwb3N0c1wiKX08L3NtYWxsPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmFuay1wb3N0cy10b3RhbFwiPlxuICAgICAgICA8c3Ryb25nPnt0aGlzLnByb3BzLnVzZXIucG9zdHN9PC9zdHJvbmc+XG4gICAgICAgIDxzbWFsbD57Z2V0dGV4dChcIlRvdGFsIHBvc3RzXCIpfTwvc21hbGw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2xpPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBBdmF0YXIgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYXZhdGFyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgKiBhcyByYW5kb20gZnJvbSAnbWlzYWdvL3V0aWxzL3JhbmRvbSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYWN0aXZlLXBvc3RlcnMtbGlzdFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXJcIj5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwibGVhZCB1aS1wcmV2aWV3LXBhcmFncmFwaFwiPlxuICAgICAgICAgIHtyYW5kb20ucmFuZ2UoMywgNCkubWFwKChpKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gPHNwYW4ga2V5PXtpfSBjbGFzc05hbWU9XCJ1aS1wcmV2aWV3LXRleHRcIiBzdHlsZT17e3dpZHRoOiByYW5kb20uaW50KDUwLCAxMjApICsgXCJweFwifX0+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgIH0pfVxuICAgICAgICA8L3A+XG5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhY3RpdmUtcG9zdGVycyB1aS1wcmV2aWV3XCI+XG4gICAgICAgICAgPHVsIGNsYXNzTmFtZT1cImxpc3QtZ3JvdXBcIj5cbiAgICAgICAgICAgIHtyYW5kb20ucmFuZ2UoNSwgMTApLm1hcCgoaSwgY291bnRlcikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gPGxpIGtleT17aX0gY2xhc3NOYW1lPVwibGlzdC1ncm91cC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyYW5rLXVzZXItYXZhdGFyXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPEF2YXRhciBzaXplPVwiNTBcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyYW5rLXVzZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidXNlci1uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cIml0ZW0tdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ1aS1wcmV2aWV3LXRleHRcIiBzdHlsZT17e3dpZHRoOiByYW5kb20uaW50KDMwLCA4MCkgKyBcInB4XCJ9fT4mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ1c2VyLXN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJzdGF0dXMtaWNvbiB1aS1wcmV2aWV3XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3RhdHVzLWxhYmVsIHVpLXByZXZpZXcgaGlkZGVuLXhzIGhpZGRlbi1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJyYW5rLW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidWktcHJldmlldy10ZXh0XCIgc3R5bGU9e3t3aWR0aDogcmFuZG9tLmludCgzMCwgNTApICsgXCJweFwifX0+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidXNlci10aXRsZSBoaWRkZW4teHMgaGlkZGVuLXNtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInVpLXByZXZpZXctdGV4dFwiIHN0eWxlPXt7d2lkdGg6IHJhbmRvbS5pbnQoMzAsIDUwKSArIFwicHhcIn19PiZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmFuay1wb3NpdGlvblwiPlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidWktcHJldmlldy10ZXh0XCIgc3R5bGU9e3t3aWR0aDogXCIzMHB4XCJ9fT4mbmJzcDs8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD57Z2V0dGV4dChcIlJhbmtcIil9PC9zbWFsbD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmFuay1wb3N0cy1jb3VudGVkXCI+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ1aS1wcmV2aWV3LXRleHRcIiBzdHlsZT17e3dpZHRoOiBcIjMwcHhcIn19PiZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgPHNtYWxsPntnZXR0ZXh0KFwiUmFua2VkIHBvc3RzXCIpfTwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJhbmstcG9zdHMtdG90YWxcIj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInVpLXByZXZpZXctdGV4dFwiIHN0eWxlPXt7d2lkdGg6IFwiMzBweFwifX0+Jm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICA8c21hbGw+e2dldHRleHQoXCJUb3RhbCBwb3N0c1wiKX08L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2xpPjtcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IExpc3RJdGVtIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXJzL2FjdGl2ZS1wb3N0ZXJzL2xpc3QtaXRlbSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGdldExlYWRNZXNzYWdlKCkge1xuICAgIGxldCBtZXNzYWdlID0gbmdldHRleHQoXG4gICAgICAgIFwiJShwb3N0ZXJzKXMgbW9zdCBhY3RpdmUgcG9zdGVyIGZyb20gbGFzdCAlKGRheXMpcyBkYXlzLlwiLFxuICAgICAgICBcIiUocG9zdGVycylzIG1vc3QgYWN0aXZlIHBvc3RlcnMgZnJvbSBsYXN0ICUoZGF5cylzIGRheXMuXCIsXG4gICAgICAgIHRoaXMucHJvcHMuY291bnQpO1xuXG4gICAgcmV0dXJuIGludGVycG9sYXRlKG1lc3NhZ2UsIHtcbiAgICAgIHBvc3RlcnM6IHRoaXMucHJvcHMuY291bnQsXG4gICAgICBkYXlzOiB0aGlzLnByb3BzLnRyYWNrZWRQZXJpb2RcbiAgICB9LCB0cnVlKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwiYWN0aXZlLXBvc3RlcnMtbGlzdFwiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXJcIj5cbiAgICAgICAgPHAgY2xhc3NOYW1lPVwibGVhZFwiPlxuICAgICAgICAgIHt0aGlzLmdldExlYWRNZXNzYWdlKCl9XG4gICAgICAgIDwvcD5cblxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFjdGl2ZS1wb3N0ZXJzIHVpLXJlYWR5XCI+XG4gICAgICAgICAgPHVsIGNsYXNzTmFtZT1cImxpc3QtZ3JvdXBcIj5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLnVzZXJzLm1hcCgodXNlciwgaSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gPExpc3RJdGVtIHVzZXI9e3VzZXJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuaz17dXNlci5yYW5rfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXI9e2kgKyAxfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17dXNlci5pZH0gLz47XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBMaXN0RW1wdHkgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvdXNlcnMvYWN0aXZlLXBvc3RlcnMvbGlzdC1lbXB0eSc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IExpc3RMb2FkaW5nIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXJzL2FjdGl2ZS1wb3N0ZXJzL2xpc3QtbG9hZGluZyc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IExpc3QgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvdXNlcnMvYWN0aXZlLXBvc3RlcnMvbGlzdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnO1xuaW1wb3J0IHsgZGVoeWRyYXRlIH0gZnJvbSAnbWlzYWdvL3JlZHVjZXJzL3VzZXJzJztcbmltcG9ydCBwb2xscyBmcm9tICdtaXNhZ28vc2VydmljZXMvcG9sbHMnO1xuaW1wb3J0IHN0b3JlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9zdG9yZSc7XG5pbXBvcnQgdGl0bGUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3BhZ2UtdGl0bGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuXG4gICAgaWYgKG1pc2Fnby5oYXMoJ1VTRVJTJykpIHtcbiAgICAgIHRoaXMuaW5pdFdpdGhQcmVsb2FkZWREYXRhKG1pc2Fnby5wb3AoJ1VTRVJTJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluaXRXaXRob3V0UHJlbG9hZGVkRGF0YSgpO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRQb2xsaW5nKCk7XG4gIH1cblxuICBpbml0V2l0aFByZWxvYWRlZERhdGEoZGF0YSkge1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBpc0xvYWRlZDogdHJ1ZSxcblxuICAgICAgdHJhY2tlZFBlcmlvZDogZGF0YS50cmFja2VkX3BlcmlvZCxcbiAgICAgIGNvdW50OiBkYXRhLmNvdW50XG4gICAgfTtcblxuICAgIHN0b3JlLmRpc3BhdGNoKGRlaHlkcmF0ZShkYXRhLnJlc3VsdHMpKTtcbiAgfVxuXG4gIGluaXRXaXRob3V0UHJlbG9hZGVkRGF0YSgpIHtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaXNMb2FkZWQ6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIHN0YXJ0UG9sbGluZygpIHtcbiAgICBwb2xscy5zdGFydCh7XG4gICAgICBwb2xsOiAnYWN0aXZlLXBvc3RlcnMnLFxuICAgICAgdXJsOiBtaXNhZ28uZ2V0KCdVU0VSU19BUEknKSxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbGlzdDogJ2FjdGl2ZSdcbiAgICAgIH0sXG4gICAgICBmcmVxdWVuY3k6IDkwICogMTAwMCxcbiAgICAgIHVwZGF0ZTogdGhpcy51cGRhdGVcbiAgICB9KTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgdXBkYXRlID0gKGRhdGEpID0+IHtcbiAgICBzdG9yZS5kaXNwYXRjaChkZWh5ZHJhdGUoZGF0YS5yZXN1bHRzKSk7XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGlzTG9hZGVkOiB0cnVlLFxuXG4gICAgICB0cmFja2VkUGVyaW9kOiBkYXRhLnRyYWNrZWRfcGVyaW9kLFxuICAgICAgY291bnQ6IGRhdGEuY291bnRcbiAgICB9KTtcbiAgfTtcbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aXRsZS5zZXQoe1xuICAgICAgdGl0bGU6IHRoaXMucHJvcHMucm91dGUuZXh0cmEubmFtZSxcbiAgICAgIHBhcmVudDogZ2V0dGV4dChcIlVzZXJzXCIpXG4gICAgfSk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBwb2xscy5zdG9wKCdhY3RpdmUtcG9zdGVycycpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLnN0YXRlLmlzTG9hZGVkKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZS5jb3VudCA+IDApIHtcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgICByZXR1cm4gPExpc3QgdXNlcnM9e3RoaXMucHJvcHMudXNlcnN9XG4gICAgICAgICAgICAgICAgICAgICB0cmFja2VkUGVyaW9kPXt0aGlzLnN0YXRlLnRyYWNrZWRQZXJpb2R9XG4gICAgICAgICAgICAgICAgICAgICBjb3VudD17dGhpcy5zdGF0ZS5jb3VudH0gLz47XG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICAgIHJldHVybiA8TGlzdEVtcHR5IHRyYWNrZWRQZXJpb2Q9e3RoaXMuc3RhdGUudHJhY2tlZFBlcmlvZH0gLz47XG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8TGlzdExvYWRpbmcgLz47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH1cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAncmVhY3Qtcm91dGVyJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgTGkgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvbGknOyAvL2pzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IG1pc2FnbyBmcm9tICdtaXNhZ28vaW5kZXgnOyAvL2pzaGludCBpZ25vcmU6bGluZVxuXG4vLyBqc2hpbnQgaWdub3JlOnN0YXJ0XG5sZXQgbGlzdFVybCA9IGZ1bmN0aW9uKGJhc2VVcmwsIGxpc3QpIHtcbiAgbGV0IHVybCA9IGJhc2VVcmw7XG4gIGlmIChsaXN0LmNvbXBvbmVudCA9PT0gJ3JhbmsnKSB7XG4gICAgdXJsICs9IGxpc3Quc2x1ZztcbiAgfSBlbHNlIHtcbiAgICB1cmwgKz0gbGlzdC5jb21wb25lbnQ7XG4gIH1cbiAgcmV0dXJuIHVybCArICcvJztcbn07XG5cbmxldCBuYXZMaW5rcyA9IGZ1bmN0aW9uKGJhc2VVcmwsIGxpc3RzLCBoaWRlTmF2KSB7XG4gICAgcmV0dXJuIGxpc3RzLm1hcChmdW5jdGlvbihsaXN0KSB7XG4gICAgICBsZXQgdXJsID0gbGlzdFVybChiYXNlVXJsLCBsaXN0KTtcbiAgICAgIHJldHVybiA8TGkgcGF0aD17dXJsfVxuICAgICAgICAgICAgICAgICBrZXk9e3VybH0+XG4gICAgICAgIDxMaW5rIHRvPXt1cmx9IG9uQ2xpY2s9e2hpZGVOYXZ9PlxuICAgICAgICAgIHtsaXN0Lm5hbWV9XG4gICAgICAgIDwvTGluaz5cbiAgICAgIDwvTGk+O1xuICB9KTtcbn07XG4vLyBqc2hpbnQgaWdub3JlOmVuZFxuXG5leHBvcnQgY2xhc3MgVGFic05hdiBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHJlbmRlcigpIHtcbiAgICAvLyBqc2hpbnQgaWdub3JlOnN0YXJ0XG4gICAgcmV0dXJuIDx1bCBjbGFzc05hbWU9XCJuYXYgbmF2LXBpbGxzXCI+XG4gICAgICB7bmF2TGlua3ModGhpcy5wcm9wcy5iYXNlVXJsLCB0aGlzLnByb3BzLmxpc3RzKX1cbiAgICA8L3VsPjtcbiAgICAvLyBqc2hpbnQgaWdub3JlOmVuZFxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wYWN0TmF2IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIC8vIGpzaGludCBpZ25vcmU6c3RhcnRcbiAgICByZXR1cm4gPHVsIGNsYXNzTmFtZT1cImRyb3Bkb3duLW1lbnVcIiByb2xlPVwibWVudVwiPlxuICAgICAge25hdkxpbmtzKHRoaXMucHJvcHMuYmFzZVVybCwgdGhpcy5wcm9wcy5saXN0cywgdGhpcy5wcm9wcy5oaWRlTmF2KX1cbiAgICA8L3VsPjtcbiAgICAvLyBqc2hpbnQgaWdub3JlOmVuZFxuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBVc2Vyc0xpc3QgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvdXNlcnMtbGlzdC9yb290JyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2PlxuICAgICAgPFVzZXJzTGlzdCBpc0xvYWRlZD17ZmFsc2V9IGNvbHM9ezN9IHNob3dTdGF0dXM9e3RydWV9IC8+XG4gICAgPC9kaXY+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUGFnZXIgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvdXNlcnMvcmFuay9wYWdlcicgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgVXNlcnNMaXN0IGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXJzLWxpc3Qvcm9vdCcgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0UGFnZXIoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucGFnZXMgPiAxKSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPFBhZ2VyIHsuLi50aGlzLnByb3BzfSAvPlxuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdj5cbiAgICAgIDxVc2Vyc0xpc3QgdXNlcnM9e3RoaXMucHJvcHMudXNlcnN9XG4gICAgICAgICAgICAgICAgIHNob3dTdGF0dXM9e3RydWV9XG4gICAgICAgICAgICAgICAgIGNvbHM9ezN9XG4gICAgICAgICAgICAgICAgIGlzTG9hZGVkPXt0cnVlfSAvPlxuXG4gICAgICB7dGhpcy5nZXRQYWdlcigpfVxuICAgIDwvZGl2PjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IExpbmsgfSBmcm9tICdyZWFjdC1yb3V0ZXInOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCByZXNldFNjcm9sbCBmcm9tICdtaXNhZ28vdXRpbHMvcmVzZXQtc2Nyb2xsJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0UHJldmlvdXNQYWdlKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnByZXZpb3VzIHx8IHRoaXMucHJvcHMuZmlyc3QpIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIGxldCB1cmwgPSB0aGlzLnByb3BzLmJhc2VVcmw7XG4gICAgICBpZiAodGhpcy5wcm9wcy5wcmV2aW91cykge1xuICAgICAgICB1cmwgKz0gdGhpcy5wcm9wcy5wcmV2aW91cyArICcvJztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIDxsaSBjbGFzc05hbWU9XCJwcmV2aW91c1wiPlxuICAgICAgICA8TGluayB0bz17dXJsfSBvbkNsaWNrPXtyZXNldFNjcm9sbH0+XG4gICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICAgICAgYXJyb3dfYmFja1xuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9MaW5rPlxuICAgICAgPC9saT47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXROZXh0UGFnZSgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5uZXh0KSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICBsZXQgdXJsID0gdGhpcy5wcm9wcy5iYXNlVXJsICsgdGhpcy5wcm9wcy5uZXh0ICsgJy8nO1xuICAgICAgcmV0dXJuIDxsaSBjbGFzc05hbWU9XCJuZXh0XCI+XG4gICAgICAgIDxMaW5rIHRvPXt1cmx9IG9uQ2xpY2s9e3Jlc2V0U2Nyb2xsfT5cbiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzc05hbWU9XCJtYXRlcmlhbC1pY29uXCI+XG4gICAgICAgICAgICBhcnJvd19mb3J3YXJkXG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L0xpbms+XG4gICAgICA8L2xpPjtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldFByb2dlc3NCYXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8dWwgY2xhc3NOYW1lPVwicGFnZXItcHJvZ3Jlc3MtYmFyXCI+XG4gICAgICB7dGhpcy5wcm9wcy5wYWdlX3JhbmdlLm1hcCgocGFnZSkgPT4ge1xuICAgICAgICBsZXQgY2xhc3NOYW1lID0gcGFnZSA9PT0gdGhpcy5wcm9wcy5wYWdlID8gJ2FjdGl2ZScgOiBudWxsO1xuICAgICAgICBsZXQgdXJsID0gdGhpcy5wcm9wcy5iYXNlVXJsO1xuXG4gICAgICAgIGlmIChwYWdlID4gMSkge1xuICAgICAgICAgIHVybCArPSBwYWdlICsgJy8nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxsaSBrZXk9e3BhZ2V9IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICA8TGluayB0bz17dXJsfSBvbkNsaWNrPXtyZXNldFNjcm9sbH0+XG4gICAgICAgICAgICB7cGFnZX1cbiAgICAgICAgICA8L0xpbms+XG4gICAgICAgIDwvbGk+O1xuICAgICAgfSl9XG4gICAgPC91bD47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxkaXYgY2xhc3NOYW1lPVwicGFnZXItdW5kZXJjb250ZW50XCI+XG4gICAgICA8bmF2PlxuICAgICAgICA8dWwgY2xhc3NOYW1lPVwicGFnZXJcIj5cbiAgICAgICAgICB7dGhpcy5nZXRQcmV2aW91c1BhZ2UoKX1cbiAgICAgICAgICB7dGhpcy5nZXROZXh0UGFnZSgpfVxuICAgICAgICA8L3VsPlxuICAgICAgICB7dGhpcy5nZXRQcm9nZXNzQmFyKCl9XG4gICAgICA8L25hdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgTGlzdCBmcm9tICdtaXNhZ28vY29tcG9uZW50cy91c2Vycy9yYW5rL2xpc3QnIC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IExpc3RMb2FkaW5nIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL3VzZXJzL3JhbmsvbGlzdC1sb2FkaW5nJyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCB7IGRlaHlkcmF0ZSB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy91c2Vycyc7XG5pbXBvcnQgcG9sbHMgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3BvbGxzJztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnO1xuaW1wb3J0IHRpdGxlIGZyb20gJ21pc2Fnby9zZXJ2aWNlcy9wYWdlLXRpdGxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuICAgIGlmIChtaXNhZ28uaGFzKCdVU0VSUycpKSB7XG4gICAgICB0aGlzLmluaXRXaXRoUHJlbG9hZGVkRGF0YShtaXNhZ28ucG9wKCdVU0VSUycpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbml0V2l0aG91dFByZWxvYWRlZERhdGEoKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0UG9sbGluZyhwcm9wcy5wYXJhbXMucGFnZSB8fCAxKTtcbiAgfVxuXG4gIGluaXRXaXRoUHJlbG9hZGVkRGF0YShkYXRhKSB7XG4gICAgdGhpcy5zdGF0ZSA9IE9iamVjdC5hc3NpZ24oZGF0YSwge1xuICAgICAgaXNMb2FkZWQ6IHRydWVcbiAgICB9KTtcbiAgICBzdG9yZS5kaXNwYXRjaChkZWh5ZHJhdGUoZGF0YS5yZXN1bHRzKSk7XG4gIH1cblxuICBpbml0V2l0aG91dFByZWxvYWRlZERhdGEoKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGlzTG9hZGVkOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBzdGFydFBvbGxpbmcocGFnZSkge1xuICAgIHBvbGxzLnN0YXJ0KHtcbiAgICAgIHBvbGw6ICdyYW5rLXVzZXJzJyxcbiAgICAgIHVybDogbWlzYWdvLmdldCgnVVNFUlNfQVBJJyksXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHJhbms6IHRoaXMucHJvcHMucm91dGUucmFuay5pZCxcbiAgICAgICAgcGFnZTogcGFnZVxuICAgICAgfSxcbiAgICAgIGZyZXF1ZW5jeTogOTAgKiAxMDAwLFxuICAgICAgdXBkYXRlOiB0aGlzLnVwZGF0ZVxuICAgIH0pO1xuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICB1cGRhdGUgPSAoZGF0YSkgPT4ge1xuICAgIHN0b3JlLmRpc3BhdGNoKGRlaHlkcmF0ZShkYXRhLnJlc3VsdHMpKTtcblxuICAgIGRhdGEuaXNMb2FkZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0U3RhdGUoZGF0YSk7XG4gIH07XG4gIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGl0bGUuc2V0KHtcbiAgICAgIHRpdGxlOiB0aGlzLnByb3BzLnJvdXRlLnJhbmsubmFtZSxcbiAgICAgIHBhZ2U6IHRoaXMucHJvcHMucGFyYW1zLnBhZ2UgfHwgbnVsbCxcbiAgICAgIHBhcmVudDogZ2V0dGV4dChcIlVzZXJzXCIpXG4gICAgfSk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICBwb2xscy5zdG9wKCdyYW5rLXVzZXJzJyk7XG4gIH1cblxuICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgIGlmICh0aGlzLnByb3BzLnBhcmFtcy5wYWdlICE9PSBuZXh0UHJvcHMucGFyYW1zLnBhZ2UpIHtcbiAgICAgIHRpdGxlLnNldCh7XG4gICAgICAgIHRpdGxlOiB0aGlzLnByb3BzLnJvdXRlLnJhbmsubmFtZSxcbiAgICAgICAgcGFnZTogbmV4dFByb3BzLnBhcmFtcy5wYWdlIHx8IG51bGwsXG4gICAgICAgIHBhcmVudDogZ2V0dGV4dChcIlVzZXJzXCIpXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGlzTG9hZGVkOiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIHBvbGxzLnN0b3AoJ3JhbmstdXNlcnMnKTtcbiAgICAgIHRoaXMuc3RhcnRQb2xsaW5nKG5leHRQcm9wcy5wYXJhbXMucGFnZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJvdXRlLnJhbmsuY3NzX2NsYXNzKSB7XG4gICAgICByZXR1cm4gJ3JhbmstdXNlcnMtbGlzdCByYW5rLXVzZXJzLScgKyB0aGlzLnByb3BzLnJvdXRlLnJhbmsuY3NzX2NsYXNzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ3JhbmstdXNlcnMtbGlzdCc7XG4gICAgfVxuICB9XG5cbiAgZ2V0UmFua0Rlc2NyaXB0aW9uKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJvdXRlLnJhbmsuZGVzY3JpcHRpb24pIHtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInJhbmstZGVzY3JpcHRpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsZWFkXCIgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tcbiAgICAgICAgICBfX2h0bWw6IHRoaXMucHJvcHMucm91dGUucmFuay5kZXNjcmlwdGlvbi5odG1sXG4gICAgICAgIH19IC8+XG4gICAgICA8L2Rpdj47XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRDb21wb25lbnQoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuaXNMb2FkZWQpIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmNvdW50ID4gMCkge1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICAgIGxldCBiYXNlVXJsID0gbWlzYWdvLmdldCgnVVNFUlNfTElTVF9VUkwnKSArIHRoaXMucHJvcHMucm91dGUucmFuay5zbHVnICsgJy8nO1xuICAgICAgICByZXR1cm4gPExpc3QgYmFzZVVybD17YmFzZVVybH1cbiAgICAgICAgICAgICAgICAgICAgIHVzZXJzPXt0aGlzLnByb3BzLnVzZXJzfVxuICAgICAgICAgICAgICAgICAgICAgey4uLnRoaXMuc3RhdGV9IC8+O1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgICByZXR1cm4gPHAgY2xhc3NOYW1lPVwibGVhZFwiPlxuICAgICAgICAgIHtnZXR0ZXh0KFwiVGhlcmUgYXJlIG5vIHVzZXJzIHdpdGggdGhpcyByYW5rIGF0IHRoZSBtb21lbnQuXCIpfVxuICAgICAgICA8L3A+O1xuICAgICAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICByZXR1cm4gPExpc3RMb2FkaW5nIC8+O1xuICAgICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17dGhpcy5nZXRDbGFzc05hbWUoKX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuICAgICAgICB7dGhpcy5nZXRSYW5rRGVzY3JpcHRpb24oKX1cbiAgICAgICAge3RoaXMuZ2V0Q29tcG9uZW50KCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBEcm9wZG93blRvZ2dsZSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy9kcm9wZG93bi10b2dnbGUnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCB7IFRhYnNOYXYsIENvbXBhY3ROYXYgfSBmcm9tICdtaXNhZ28vY29tcG9uZW50cy91c2Vycy9uYXZzJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgQWN0aXZlUG9zdGVycyBmcm9tICdtaXNhZ28vY29tcG9uZW50cy91c2Vycy9hY3RpdmUtcG9zdGVycy9yb290JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgUmFuayBmcm9tICdtaXNhZ28vY29tcG9uZW50cy91c2Vycy9yYW5rL3Jvb3QnO1xuaW1wb3J0IFdpdGhEcm9wZG93biBmcm9tICdtaXNhZ28vY29tcG9uZW50cy93aXRoLWRyb3Bkb3duJztcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgZXh0ZW5kcyBXaXRoRHJvcGRvd24ge1xuICByZW5kZXIoKSB7XG4gICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgIHJldHVybiA8ZGl2IGNsYXNzTmFtZT1cInBhZ2UgcGFnZS11c2Vycy1saXN0c1wiPlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhZ2UtaGVhZGVyIHRhYmJlZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lclwiPlxuXG4gICAgICAgICAgPGgxIGNsYXNzTmFtZT1cInB1bGwtbGVmdFwiPntnZXR0ZXh0KFwiVXNlcnNcIil9PC9oMT5cblxuICAgICAgICAgIDxEcm9wZG93blRvZ2dsZSB0b2dnbGVOYXY9e3RoaXMudG9nZ2xlTmF2fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wZG93bj17dGhpcy5zdGF0ZS5kcm9wZG93bn0gLz5cblxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJwYWdlLXRhYnMgaGlkZGVuLXhzIGhpZGRlbi1zbVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XG5cbiAgICAgICAgICAgIDxUYWJzTmF2IGxpc3RzPXttaXNhZ28uZ2V0KCdVU0VSU19MSVNUUycpfVxuICAgICAgICAgICAgICAgICAgICAgYmFzZVVybD17bWlzYWdvLmdldCgnVVNFUlNfTElTVF9VUkwnKX0gLz5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3RoaXMuZ2V0Q29tcGFjdE5hdkNsYXNzTmFtZSgpfT5cblxuICAgICAgICA8Q29tcGFjdE5hdiBsaXN0cz17bWlzYWdvLmdldCgnVVNFUlNfTElTVFMnKX1cbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybD17bWlzYWdvLmdldCgnVVNFUlNfTElTVF9VUkwnKX1cbiAgICAgICAgICAgICAgICAgICAgaGlkZU5hdj17dGhpcy5oaWRlTmF2fSAvPlxuXG4gICAgICA8L2Rpdj5cblxuICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG5cbiAgICA8L2Rpdj47XG4gICAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0KHN0b3JlKSB7XG4gIHJldHVybiB7XG4gICAgJ3RpY2snOiBzdG9yZS50aWNrLnRpY2ssXG4gICAgJ3VzZXInOiBzdG9yZS5hdXRoLnVzZXIsXG4gICAgJ3VzZXJzJzogc3RvcmUudXNlcnNcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhzKCkge1xuICBsZXQgcGF0aHMgPSBbXTtcblxuICBtaXNhZ28uZ2V0KCdVU0VSU19MSVNUUycpLmZvckVhY2goZnVuY3Rpb24oaXRlbSkge1xuICAgIGlmIChpdGVtLmNvbXBvbmVudCA9PT0gJ3JhbmsnKSB7XG4gICAgICBwYXRocy5wdXNoKHtcbiAgICAgICAgcGF0aDogbWlzYWdvLmdldCgnVVNFUlNfTElTVF9VUkwnKSArIGl0ZW0uc2x1ZyArICcvOnBhZ2UvJyxcbiAgICAgICAgY29tcG9uZW50OiBjb25uZWN0KHNlbGVjdCkoUmFuayksXG4gICAgICAgIHJhbms6IGl0ZW1cbiAgICAgIH0pO1xuICAgICAgcGF0aHMucHVzaCh7XG4gICAgICAgIHBhdGg6IG1pc2Fnby5nZXQoJ1VTRVJTX0xJU1RfVVJMJykgKyBpdGVtLnNsdWcgKyAnLycsXG4gICAgICAgIGNvbXBvbmVudDogY29ubmVjdChzZWxlY3QpKFJhbmspLFxuICAgICAgICByYW5rOiBpdGVtXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGl0ZW0uY29tcG9uZW50ID09PSAnYWN0aXZlLXBvc3RlcnMnKXtcbiAgICAgIHBhdGhzLnB1c2goe1xuICAgICAgICBwYXRoOiBtaXNhZ28uZ2V0KCdVU0VSU19MSVNUX1VSTCcpICsgaXRlbS5jb21wb25lbnQgKyAnLycsXG4gICAgICAgIGNvbXBvbmVudDogY29ubmVjdChzZWxlY3QpKEFjdGl2ZVBvc3RlcnMpLFxuICAgICAgICBleHRyYToge1xuICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXRocztcbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgZHJvcGRvd246IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgdG9nZ2xlTmF2ID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZHJvcGRvd246ICF0aGlzLnN0YXRlLmRyb3Bkb3duXG4gICAgfSk7XG4gIH07XG5cbiAgaGlkZU5hdiA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGRyb3Bkb3duOiBmYWxzZVxuICAgIH0pO1xuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIGdldENvbXBhY3ROYXZDbGFzc05hbWUoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZHJvcGRvd24pIHtcbiAgICAgIHJldHVybiAnY29tcGFjdC1uYXYgb3Blbic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnY29tcGFjdC1uYXYnO1xuICAgIH1cbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgZ2V0Q2xhc3NOYW1lKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnZhbHVlKSB7XG4gICAgICByZXR1cm4gXCJidG4gYnRuLXllcy1ubyBidG4teWVzLW5vLW9uXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcImJ0biBidG4teWVzLW5vIGJ0bi15ZXMtbm8tb2ZmXCI7XG4gICAgfVxuICB9XG5cbiAgZ2V0SWNvbigpIHtcbiAgICBpZiAodGhpcy5wcm9wcy52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuaWNvbk9uIHx8ICdjaGVja19ib3gnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5pY29uT2ZmIHx8ICdjaGVja19ib3hfb3V0bGluZV9ibGFuayc7XG4gICAgfVxuICB9XG5cbiAgZ2V0TGFiZWwoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMudmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmxhYmVsT24gfHwgZ2V0dGV4dChcInllc1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMubGFiZWxPZmYgfHwgZ2V0dGV4dChcIm5vXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgdG9nZ2xlID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMub25DaGFuZ2Uoe1xuICAgICAgdGFyZ2V0OiB7XG4gICAgICAgIHZhbHVlOiAhdGhpcy5wcm9wcy52YWx1ZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIHJlbmRlcigpIHtcbiAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgcmV0dXJuIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy50b2dnbGV9XG4gICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmdldENsYXNzTmFtZSgpfVxuICAgICAgICAgICAgICAgICAgIGlkPXt0aGlzLnByb3BzLmlkIHx8IG51bGx9XG4gICAgICAgICAgICAgICAgICAgYXJpYS1kZXNjcmliZWRieT17dGhpcy5wcm9wc1snYXJpYS1kZXNjcmliZWRieSddIHx8IG51bGx9XG4gICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMucHJvcHMuZGlzYWJsZWQgfHwgZmFsc2V9PlxuICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibWF0ZXJpYWwtaWNvblwiPlxuICAgICAgICB7dGhpcy5nZXRJY29uKCl9XG4gICAgICA8L3NwYW4+XG4gICAgICB7dGhpcy5nZXRMYWJlbCgpfVxuICAgIDwvYnV0dG9uPjtcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICB9XG59IiwiaW1wb3J0IE9yZGVyZWRMaXN0IGZyb20gJ21pc2Fnby91dGlscy9vcmRlcmVkLWxpc3QnO1xuXG5leHBvcnQgY2xhc3MgTWlzYWdvIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5faW5pdGlhbGl6ZXJzID0gW107XG4gICAgdGhpcy5fY29udGV4dCA9IHt9O1xuICB9XG5cbiAgYWRkSW5pdGlhbGl6ZXIoaW5pdGlhbGl6ZXIpIHtcbiAgICB0aGlzLl9pbml0aWFsaXplcnMucHVzaCh7XG4gICAgICBrZXk6IGluaXRpYWxpemVyLm5hbWUsXG5cbiAgICAgIGl0ZW06IGluaXRpYWxpemVyLmluaXRpYWxpemVyLFxuXG4gICAgICBhZnRlcjogaW5pdGlhbGl6ZXIuYWZ0ZXIsXG4gICAgICBiZWZvcmU6IGluaXRpYWxpemVyLmJlZm9yZVxuICAgIH0pO1xuICB9XG5cbiAgaW5pdChjb250ZXh0KSB7XG4gICAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG5cbiAgICB2YXIgaW5pdE9yZGVyID0gbmV3IE9yZGVyZWRMaXN0KHRoaXMuX2luaXRpYWxpemVycykub3JkZXJlZFZhbHVlcygpO1xuICAgIGluaXRPcmRlci5mb3JFYWNoKGluaXRpYWxpemVyID0+IHtcbiAgICAgIGluaXRpYWxpemVyKHRoaXMpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gY29udGV4dCBhY2Nlc3NvcnNcbiAgaGFzKGtleSkge1xuICAgIHJldHVybiAhIXRoaXMuX2NvbnRleHRba2V5XTtcbiAgfVxuXG4gIGdldChrZXksIGZhbGxiYWNrKSB7XG4gICAgaWYgKHRoaXMuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb250ZXh0W2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxsYmFjayB8fCB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcG9wKGtleSkge1xuICAgIGlmICh0aGlzLmhhcyhrZXkpKSB7XG4gICAgICBsZXQgdmFsdWUgPSB0aGlzLl9jb250ZXh0W2tleV07XG4gICAgICB0aGlzLl9jb250ZXh0W2tleV0gPSBudWxsO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuXG4vLyBjcmVhdGUgIHNpbmdsZXRvblxudmFyIG1pc2FnbyA9IG5ldyBNaXNhZ28oKTtcblxuLy8gZXhwb3NlIGl0IGdsb2JhbGx5XG5nbG9iYWwubWlzYWdvID0gbWlzYWdvO1xuXG4vLyBhbmQgZXhwb3J0IGl0IGZvciB0ZXN0cyBhbmQgc3R1ZmZcbmV4cG9ydCBkZWZhdWx0IG1pc2FnbztcbiIsImltcG9ydCB7IFVQREFURV9BVkFUQVIsIFVQREFURV9VU0VSTkFNRSB9IGZyb20gJ21pc2Fnby9yZWR1Y2Vycy91c2Vycyc7XG5cbmV4cG9ydCB2YXIgaW5pdGlhbFN0YXRlID0ge1xuICBzaWduZWRJbjogZmFsc2UsXG4gIHNpZ25lZE91dDogZmFsc2Vcbn07XG5cbmV4cG9ydCBjb25zdCBQQVRDSF9VU0VSID0gJ1BBVENIX1VTRVInO1xuZXhwb3J0IGNvbnN0IFNJR05fSU4gPSAnU0lHTl9JTic7XG5leHBvcnQgY29uc3QgU0lHTl9PVVQgPSAnU0lHTl9PVVQnO1xuXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hVc2VyKHBhdGNoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogUEFUQ0hfVVNFUixcbiAgICBwYXRjaFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2lnbkluKHVzZXIpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBTSUdOX0lOLFxuICAgIHVzZXJcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25PdXQoc29mdD1mYWxzZSkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFNJR05fT1VULFxuICAgIHNvZnRcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXV0aChzdGF0ZT1pbml0aWFsU3RhdGUsIGFjdGlvbj1udWxsKSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIFBBVENIX1VTRVI6XG4gICAgICAgIGxldCBuZXdTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKTtcbiAgICAgICAgbmV3U3RhdGUudXNlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnVzZXIsIGFjdGlvbi5wYXRjaCk7XG4gICAgICAgIHJldHVybiBuZXdTdGF0ZTtcblxuICAgIGNhc2UgU0lHTl9JTjpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgICBzaWduZWRJbjogYWN0aW9uLnVzZXJcbiAgICAgIH0pO1xuXG4gICAgY2FzZSBTSUdOX09VVDpcbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgICBpc0F1dGhlbnRpY2F0ZWQ6IGZhbHNlLFxuICAgICAgICBpc0Fub255bW91czogdHJ1ZSxcbiAgICAgICAgc2lnbmVkT3V0OiAhYWN0aW9uLnNvZnRcbiAgICAgIH0pO1xuXG4gICAgY2FzZSBVUERBVEVfQVZBVEFSOlxuICAgICAgaWYgKHN0YXRlLmlzQXV0aGVudGljYXRlZCAmJiBzdGF0ZS51c2VyLmlkID09PSBhY3Rpb24udXNlcklkKSB7XG4gICAgICAgIGxldCBuZXdTdGF0ZSA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlKTtcbiAgICAgICAgbmV3U3RhdGUudXNlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnVzZXIsIHtcbiAgICAgICAgICAnYXZhdGFyX2hhc2gnOiBhY3Rpb24uYXZhdGFySGFzaFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0YXRlO1xuXG4gICAgY2FzZSBVUERBVEVfVVNFUk5BTUU6XG4gICAgICBpZiAoc3RhdGUuaXNBdXRoZW50aWNhdGVkICYmIHN0YXRlLnVzZXIuaWQgPT09IGFjdGlvbi51c2VySWQpIHtcbiAgICAgICAgbGV0IG5ld1N0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUpO1xuICAgICAgICBuZXdTdGF0ZS51c2VyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUudXNlciwge1xuICAgICAgICAgIHVzZXJuYW1lOiBhY3Rpb24udXNlcm5hbWUsXG4gICAgICAgICAgc2x1ZzogYWN0aW9uLnNsdWdcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn1cbiIsImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IFVQREFURV9BVkFUQVIsIFVQREFURV9VU0VSTkFNRSwgZGVoeWRyYXRlU3RhdHVzIH0gZnJvbSAnbWlzYWdvL3JlZHVjZXJzL3VzZXJzJztcblxuZXhwb3J0IGNvbnN0IERFSFlEUkFURV9QUk9GSUxFID0gJ0RFSFlEUkFURV9QUk9GSUxFJztcbmV4cG9ydCBjb25zdCBQQVRDSF9QUk9GSUxFID0gJ1BBVENIX1BST0ZJTEUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZGVoeWRyYXRlKHByb2ZpbGUpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBERUhZRFJBVEVfUFJPRklMRSxcbiAgICBwcm9maWxlXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaFByb2ZpbGUocGF0Y2gpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBQQVRDSF9QUk9GSUxFLFxuICAgIHBhdGNoXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGF1dGgoc3RhdGU9e30sIGFjdGlvbj1udWxsKSB7XG4gIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcbiAgICBjYXNlIERFSFlEUkFURV9QUk9GSUxFOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGFjdGlvbi5wcm9maWxlLCB7XG4gICAgICAgIGpvaW5lZF9vbjogbW9tZW50KGFjdGlvbi5wcm9maWxlLmpvaW5lZF9vbiksXG4gICAgICAgIHN0YXR1czogZGVoeWRyYXRlU3RhdHVzKGFjdGlvbi5wcm9maWxlLnN0YXR1cylcbiAgICAgIH0pO1xuXG4gICAgY2FzZSBQQVRDSF9QUk9GSUxFOlxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCBhY3Rpb24ucGF0Y2gpO1xuXG4gICAgY2FzZSBVUERBVEVfQVZBVEFSOlxuICAgICAgaWYgKHN0YXRlLmlkID09PSBhY3Rpb24udXNlcklkKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIGF2YXRhcl9oYXNoOiBhY3Rpb24uYXZhdGFySGFzaFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0ZTtcblxuICAgIGNhc2UgVVBEQVRFX1VTRVJOQU1FOlxuICAgICAgaWYgKHN0YXRlLmlkID09PSBhY3Rpb24udXNlcklkKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgICAgIHVzZXJuYW1lOiBhY3Rpb24udXNlcm5hbWUsXG4gICAgICAgICAgc2x1ZzogYWN0aW9uLnNsdWdcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdGU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59XG4iLCJleHBvcnQgdmFyIGluaXRpYWxTdGF0ZSA9IHtcbiAgdHlwZTogJ2luZm8nLFxuICBtZXNzYWdlOiAnJyxcbiAgaXNWaXNpYmxlOiBmYWxzZVxufTtcblxuZXhwb3J0IGNvbnN0IFNIT1dfU05BQ0tCQVIgPSAnU0hPV19TTkFDS0JBUic7XG5leHBvcnQgY29uc3QgSElERV9TTkFDS0JBUiA9ICdISURFX1NOQUNLQkFSJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNob3dTbmFja2JhcihtZXNzYWdlLCB0eXBlKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogU0hPV19TTkFDS0JBUixcbiAgICBtZXNzYWdlLFxuICAgIG1lc3NhZ2VUeXBlOiB0eXBlXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoaWRlU25hY2tiYXIoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogSElERV9TTkFDS0JBUlxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzbmFja2JhcihzdGF0ZT1pbml0aWFsU3RhdGUsIGFjdGlvbj1udWxsKSB7XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gU0hPV19TTkFDS0JBUikge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBhY3Rpb24ubWVzc2FnZVR5cGUsXG4gICAgICBtZXNzYWdlOiBhY3Rpb24ubWVzc2FnZSxcbiAgICAgIGlzVmlzaWJsZTogdHJ1ZVxuICAgIH07XG4gIH0gZWxzZSBpZiAoYWN0aW9uLnR5cGUgPT09IEhJREVfU05BQ0tCQVIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUsIHtcbiAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuIiwiZXhwb3J0IHZhciBpbml0aWFsU3RhdGUgPSB7XG4gIHRpY2s6IDBcbn07XG5cbmV4cG9ydCBjb25zdCBUSUNLID0gJ1RJQ0snO1xuXG5leHBvcnQgZnVuY3Rpb24gZG9UaWNrKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IFRJQ0tcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGljayhzdGF0ZT1pbml0aWFsU3RhdGUsIGFjdGlvbj1udWxsKSB7XG4gIGlmIChhY3Rpb24udHlwZSA9PT0gVElDSykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZSwge1xuICAgICAgICB0aWNrOiBzdGF0ZS50aWNrICsgMVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgVVBEQVRFX0FWQVRBUiwgVVBEQVRFX1VTRVJOQU1FIH0gZnJvbSAnbWlzYWdvL3JlZHVjZXJzL3VzZXJzJztcblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5leHBvcnQgY29uc3QgQUREX05BTUVfQ0hBTkdFID0gJ0FERF9OQU1FX0NIQU5HRSc7XG5leHBvcnQgY29uc3QgQVBQRU5EX0hJU1RPUlkgPSAnQVBQRU5EX0hJU1RPUlknO1xuZXhwb3J0IGNvbnN0IERFSFlEUkFURV9ISVNUT1JZID0gJ0RFSFlEUkFURV9ISVNUT1JZJztcblxuZXhwb3J0IGZ1bmN0aW9uIGFkZE5hbWVDaGFuZ2UoY2hhbmdlLCB1c2VyLCBjaGFuZ2VkQnkpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBRERfTkFNRV9DSEFOR0UsXG4gICAgY2hhbmdlLFxuICAgIHVzZXIsXG4gICAgY2hhbmdlZEJ5XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmQoaXRlbXMpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBBUFBFTkRfSElTVE9SWSxcbiAgICBpdGVtczogaXRlbXNcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlaHlkcmF0ZShpdGVtcykge1xuICByZXR1cm4ge1xuICAgIHR5cGU6IERFSFlEUkFURV9ISVNUT1JZLFxuICAgIGl0ZW1zOiBpdGVtc1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VybmFtZShzdGF0ZT1bXSwgYWN0aW9uPW51bGwpIHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgQUREX05BTUVfQ0hBTkdFOlxuICAgICAgbGV0IG5ld1N0YXRlID0gc3RhdGUuc2xpY2UoKTtcbiAgICAgIG5ld1N0YXRlLnVuc2hpZnQoe1xuICAgICAgICBpZDogTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCksIC8vIGp1c3Qgc21hbGwgaGF4IGZvciBnZXR0aW5nIGlkXG4gICAgICAgIGNoYW5nZWRfYnk6IGFjdGlvbi5jaGFuZ2VkQnksXG4gICAgICAgIGNoYW5nZWRfYnlfdXNlcm5hbWU6IGFjdGlvbi5jaGFuZ2VkQnkudXNlcm5hbWUsXG4gICAgICAgIGNoYW5nZWRfb246IG1vbWVudCgpLFxuICAgICAgICBuZXdfdXNlcm5hbWU6IGFjdGlvbi5jaGFuZ2UudXNlcm5hbWUsXG4gICAgICAgIG9sZF91c2VybmFtZTogYWN0aW9uLnVzZXIudXNlcm5hbWVcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ld1N0YXRlO1xuXG4gICAgY2FzZSBBUFBFTkRfSElTVE9SWTpcbiAgICAgIHJldHVybiBzdGF0ZS5jb25jYXQoYWN0aW9uLml0ZW1zLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBpdGVtLCB7XG4gICAgICAgICAgY2hhbmdlZF9vbjogbW9tZW50KGl0ZW0uY2hhbmdlZF9vbilcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG5cbiAgICBjYXNlIERFSFlEUkFURV9ISVNUT1JZOlxuICAgICAgcmV0dXJuIGFjdGlvbi5pdGVtcy5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSwge1xuICAgICAgICAgIGNoYW5nZWRfb246IG1vbWVudChpdGVtLmNoYW5nZWRfb24pXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICBjYXNlIFVQREFURV9BVkFUQVI6XG4gICAgICByZXR1cm4gc3RhdGUubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgaXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGl0ZW0pO1xuICAgICAgICBpZiAoaXRlbS5jaGFuZ2VkX2J5ICYmIGl0ZW0uY2hhbmdlZF9ieS5pZCA9PT0gYWN0aW9uLnVzZXJJZCkge1xuICAgICAgICAgIGl0ZW0uY2hhbmdlZF9ieSA9IE9iamVjdC5hc3NpZ24oe30sIGl0ZW0uY2hhbmdlZF9ieSwge1xuICAgICAgICAgICAgJ2F2YXRhcl9oYXNoJzogYWN0aW9uLmF2YXRhckhhc2hcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfSk7XG5cbiAgICBjYXNlIFVQREFURV9VU0VSTkFNRTpcbiAgICAgIHJldHVybiBzdGF0ZS5tYXAoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICBpdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSk7XG4gICAgICAgIGlmIChpdGVtLmNoYW5nZWRfYnkgJiYgaXRlbS5jaGFuZ2VkX2J5LmlkID09PSBhY3Rpb24udXNlcklkKSB7XG4gICAgICAgICAgaXRlbS5jaGFuZ2VkX2J5ID0gT2JqZWN0LmFzc2lnbih7fSwgaXRlbS5jaGFuZ2VkX2J5LCB7XG4gICAgICAgICAgICAndXNlcm5hbWUnOiBhY3Rpb24udXNlcm5hbWUsXG4gICAgICAgICAgICAnc2x1Zyc6IGFjdGlvbi5zbHVnXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSk7XG4gICAgICB9KTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc3RhdGU7XG4gIH1cbn0iLCJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5cbmV4cG9ydCBjb25zdCBBUFBFTkRfVVNFUlMgPSAnQVBQRU5EX1VTRVJTJztcbmV4cG9ydCBjb25zdCBERUhZRFJBVEVfVVNFUlMgPSAnREVIWURSQVRFX1VTRVJTJztcbmV4cG9ydCBjb25zdCBVUERBVEVfQVZBVEFSID0gJ1VQREFURV9BVkFUQVInO1xuZXhwb3J0IGNvbnN0IFVQREFURV9VU0VSTkFNRSA9ICdVUERBVEVfVVNFUk5BTUUnO1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kKGl0ZW1zKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogQVBQRU5EX1VTRVJTLFxuICAgIGl0ZW1zXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWh5ZHJhdGUoaXRlbXMpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBERUhZRFJBVEVfVVNFUlMsXG4gICAgaXRlbXNcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlaHlkcmF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgaWYgKHN0YXR1cykge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdGF0dXMsIHtcbiAgICAgIGxhc3RfY2xpY2s6IHN0YXR1cy5sYXN0X2NsaWNrID8gbW9tZW50KHN0YXR1cy5sYXN0X2NsaWNrKSA6IG51bGwsXG4gICAgICBiYW5uZWRfdW50aWw6IHN0YXR1cy5iYW5uZWRfdW50aWwgPyBtb21lbnQoc3RhdHVzLmJhbm5lZF91bnRpbCkgOiBudWxsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUF2YXRhcih1c2VyLCBhdmF0YXJIYXNoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogVVBEQVRFX0FWQVRBUixcbiAgICB1c2VySWQ6IHVzZXIuaWQsXG4gICAgYXZhdGFySGFzaFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVXNlcm5hbWUodXNlciwgdXNlcm5hbWUsIHNsdWcpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBVUERBVEVfVVNFUk5BTUUsXG4gICAgdXNlcklkOiB1c2VyLmlkLFxuICAgIHVzZXJuYW1lLFxuICAgIHNsdWdcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlcihzdGF0ZT1bXSwgYWN0aW9uPW51bGwpIHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgIGNhc2UgQVBQRU5EX1VTRVJTOlxuICAgICAgcmV0dXJuIHN0YXRlLmNvbmNhdChhY3Rpb24uaXRlbXMubWFwKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGl0ZW0sIHtcbiAgICAgICAgICBqb2luZWRfb246IG1vbWVudChpdGVtLmpvaW5lZF9vbiksXG4gICAgICAgICAgc3RhdHVzOiBkZWh5ZHJhdGVTdGF0dXMoaXRlbS5zdGF0dXMpXG4gICAgICAgIH0pO1xuICAgICAgfSkpO1xuXG4gICAgY2FzZSBERUhZRFJBVEVfVVNFUlM6XG4gICAgICByZXR1cm4gYWN0aW9uLml0ZW1zLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBpdGVtLCB7XG4gICAgICAgICAgam9pbmVkX29uOiBtb21lbnQoaXRlbS5qb2luZWRfb24pLFxuICAgICAgICAgIHN0YXR1czogZGVoeWRyYXRlU3RhdHVzKGl0ZW0uc3RhdHVzKVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgY2FzZSBVUERBVEVfQVZBVEFSOlxuICAgICAgcmV0dXJuIHN0YXRlLm1hcChmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgIGl0ZW0gPSBPYmplY3QuYXNzaWduKHt9LCBpdGVtKTtcbiAgICAgICAgaWYgKGl0ZW0uaWQgPT09IGFjdGlvbi51c2VySWQpIHtcbiAgICAgICAgICBpdGVtLmF2YXRhcl9oYXNoID0gYWN0aW9uLmF2YXRhckhhc2g7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufSIsImV4cG9ydCBjbGFzcyBBamF4IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fY29va2llTmFtZSA9IG51bGw7XG4gICAgdGhpcy5fY3NyZlRva2VuID0gbnVsbDtcbiAgICB0aGlzLl9sb2NrcyA9IHt9O1xuICB9XG5cbiAgaW5pdChjb29raWVOYW1lKSB7XG4gICAgdGhpcy5fY29va2llTmFtZSA9IGNvb2tpZU5hbWU7XG4gICAgdGhpcy5fY3NyZlRva2VuID0gdGhpcy5nZXRDc3JmVG9rZW4oKTtcbiAgfVxuXG4gIGdldENzcmZUb2tlbigpIHtcbiAgICBpZiAoZG9jdW1lbnQuY29va2llLmluZGV4T2YodGhpcy5fY29va2llTmFtZSkgIT09IC0xKSB7XG4gICAgICBsZXQgY29va2llUmVnZXggPSBuZXcgUmVnRXhwKHRoaXMuX2Nvb2tpZU5hbWUgKyAnXFw9KFteO10qKScpO1xuICAgICAgbGV0IGNvb2tpZSA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChjb29raWVSZWdleClbMF07XG4gICAgICByZXR1cm4gY29va2llID8gY29va2llLnNwbGl0KCc9JylbMV0gOiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXF1ZXN0KG1ldGhvZCwgdXJsLCBkYXRhKSB7XG4gICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGxldCB4aHIgPSB7XG4gICAgICAgIHVybDogdXJsLFxuICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdYLUNTUkZUb2tlbic6IHNlbGYuX2NzcmZUb2tlblxuICAgICAgICB9LFxuXG4gICAgICAgIGRhdGE6IChkYXRhID8gSlNPTi5zdHJpbmdpZnkoZGF0YSkgOiBudWxsKSxcbiAgICAgICAgY29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLFxuICAgICAgICBkYXRhVHlwZTogJ2pzb24nLFxuXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbihqcVhIUikge1xuICAgICAgICAgIGxldCByZWplY3Rpb24gPSBqcVhIUi5yZXNwb25zZUpTT04gfHwge307XG5cbiAgICAgICAgICByZWplY3Rpb24uc3RhdHVzID0ganFYSFIuc3RhdHVzO1xuXG4gICAgICAgICAgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDApIHtcbiAgICAgICAgICAgIHJlamVjdGlvbi5kZXRhaWwgPSBnZXR0ZXh0KFwiTG9zdCBjb25uZWN0aW9uIHdpdGggYXBwbGljYXRpb24uXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICAgIGlmICghcmVqZWN0aW9uLmRldGFpbCB8fCByZWplY3Rpb24uZGV0YWlsID09PSAnTk9UIEZPVU5EJykge1xuICAgICAgICAgICAgICByZWplY3Rpb24uZGV0YWlsID0gZ2V0dGV4dChcIkFjdGlvbiBsaW5rIGlzIGludmFsaWQuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA1MDAgJiYgIXJlamVjdGlvbi5kZXRhaWwpIHtcbiAgICAgICAgICAgIHJlamVjdGlvbi5kZXRhaWwgPSBnZXR0ZXh0KFwiVW5rbm93biBlcnJvciBoYXMgb2NjdXJlZC5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVqZWN0aW9uLnN0YXR1c1RleHQgPSBqcVhIUi5zdGF0dXNUZXh0O1xuXG4gICAgICAgICAgcmVqZWN0KHJlamVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgICQuYWpheCh4aHIpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0KHVybCwgcGFyYW1zLCBsb2NrKSB7XG4gICAgaWYgKHBhcmFtcykge1xuICAgICAgdXJsICs9ICc/JyArICQucGFyYW0ocGFyYW1zKTtcbiAgICB9XG5cbiAgICBpZiAobG9jaykge1xuICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuXG4gICAgICAvLyB1cGRhdGUgdXJsIGluIGV4aXN0aW5nIGxvY2s/XG4gICAgICBpZiAodGhpcy5fbG9ja3NbbG9ja10pIHtcbiAgICAgICAgdGhpcy5fbG9ja3NbbG9ja10udXJsID0gdXJsO1xuICAgICAgfVxuXG4gICAgICAvLyBpbW1lZGlhdGVseSBkZXJlZmVyZW5jZSBwcm9taXNlIGhhbmRsZXJzIHdpdGhvdXQgZG9pbmcgYW55dGhpbmdcbiAgICAgIC8vIHdlIGFyZSBhbHJlYWR5IHdhaXRpbmcgZm9yIGV4aXN0aW5nIHJlc3BvbnNlIHRvIHJlc29sdmVcbiAgICAgIGlmICh0aGlzLl9sb2Nrc1tsb2NrXSAmJiB0aGlzLl9sb2Nrc1tsb2NrXS53YWl0ZXIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0aGVuOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgIC8vIHJldHVybiBwcm9taXNlIHRoYXQgd2lsbCBiZWdpbiB3aGVuIG9yaWdpbmFsIG9uZSByZXNvbHZlc1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9sb2Nrc1tsb2NrXSAmJiB0aGlzLl9sb2Nrc1tsb2NrXS53YWl0KSB7XG4gICAgICAgIHRoaXMuX2xvY2tzW2xvY2tdLndhaXRlciA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGxldCB3YWl0ID0gZnVuY3Rpb24odXJsKSB7XG4gICAgICAgICAgICAvLyBrZWVwIHdhaXRpbmcgb24gcHJvbWlzZVxuICAgICAgICAgICAgaWYgKHNlbGYuX2xvY2tzW2xvY2tdLndhaXQpIHtcbiAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgd2FpdCh1cmwpO1xuICAgICAgICAgICAgICB9LCAzMDApO1xuXG4gICAgICAgICAgICAvLyBwb2xsIGZvciBuZXcgdXJsXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGYuX2xvY2tzW2xvY2tdLnVybCAhPT0gdXJsKSB7XG4gICAgICAgICAgICAgIHdhaXQoc2VsZi5fbG9ja3NbbG9ja10udXJsKTtcblxuICAgICAgICAgICAgLy8gYWpheCBiYWNrZW5kIGZvciByZXNwb25zZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZi5fbG9ja3NbbG9ja10ud2FpdGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgIHNlbGYucmVxdWVzdCgnR0VUJywgc2VsZi5fbG9ja3NbbG9ja10udXJsKS50aGVuKGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fbG9ja3NbbG9ja10udXJsID09PSB1cmwpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHNlbGYuX2xvY2tzW2xvY2tdLndhaXRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB3YWl0KHNlbGYuX2xvY2tzW2xvY2tdLnVybCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LCBmdW5jdGlvbihyZWplY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fbG9ja3NbbG9ja10udXJsID09PSB1cmwpIHtcbiAgICAgICAgICAgICAgICAgIHJlamVjdChyZWplY3Rpb24pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzZWxmLl9sb2Nrc1tsb2NrXS53YWl0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgd2FpdChzZWxmLl9sb2Nrc1tsb2NrXS51cmwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgd2FpdCh1cmwpO1xuICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAvLyBzZXR1cCBuZXcgbG9jayB3aXRob3V0IHdhaXRlclxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbG9ja3NbbG9ja10gPSB7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIHdhaXQ6IHRydWUsXG4gICAgICAgICAgd2FpdGVyOiBmYWxzZVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBzZWxmLnJlcXVlc3QoJ0dFVCcsIHVybCkudGhlbihmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICBzZWxmLl9sb2Nrc1tsb2NrXS53YWl0ID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2VsZi5fbG9ja3NbbG9ja10udXJsID09PSB1cmwpIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBmdW5jdGlvbihyZWplY3Rpb24pIHtcbiAgICAgICAgICAgIHNlbGYuX2xvY2tzW2xvY2tdLndhaXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChzZWxmLl9sb2Nrc1tsb2NrXS51cmwgPT09IHVybCkge1xuICAgICAgICAgICAgICByZWplY3QocmVqZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0dFVCcsIHVybCk7XG4gICAgfVxuICB9XG5cbiAgcG9zdCh1cmwsIGRhdGEpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdQT1NUJywgdXJsLCBkYXRhKTtcbiAgfVxuXG4gIHBhdGNoKHVybCwgZGF0YSkge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ1BBVENIJywgdXJsLCBkYXRhKTtcbiAgfVxuXG4gIHB1dCh1cmwsIGRhdGEpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCdQVVQnLCB1cmwsIGRhdGEpO1xuICB9XG5cbiAgZGVsZXRlKHVybCkge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoJ0RFTEVURScsIHVybCk7XG4gIH1cblxuICB1cGxvYWQodXJsLCBkYXRhLCBwcm9ncmVzcykge1xuICAgIGxldCBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBsZXQgeGhyID0ge1xuICAgICAgICB1cmw6IHVybCxcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnWC1DU1JGVG9rZW4nOiBzZWxmLl9jc3JmVG9rZW5cbiAgICAgICAgfSxcblxuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBjb250ZW50VHlwZTogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcblxuICAgICAgICB4aHI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGxldCB4aHIgPSBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgeGhyLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKFwicHJvZ3Jlc3NcIiwgZnVuY3Rpb24oZXZ0KSB7XG4gICAgICAgICAgICBpZiAoZXZ0Lmxlbmd0aENvbXB1dGFibGUpIHtcbiAgICAgICAgICAgICAgcHJvZ3Jlc3MoTWF0aC5yb3VuZChldnQubG9hZGVkIC8gZXZ0LnRvdGFsICogMTAwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgZmFsc2UpO1xuICAgICAgICAgIHJldHVybiB4aHI7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgfSxcblxuICAgICAgICBlcnJvcjogZnVuY3Rpb24oanFYSFIpIHtcbiAgICAgICAgICBsZXQgcmVqZWN0aW9uID0ganFYSFIucmVzcG9uc2VKU09OIHx8IHt9O1xuXG4gICAgICAgICAgcmVqZWN0aW9uLnN0YXR1cyA9IGpxWEhSLnN0YXR1cztcblxuICAgICAgICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSAwKSB7XG4gICAgICAgICAgICByZWplY3Rpb24uZGV0YWlsID0gZ2V0dGV4dChcIkxvc3QgY29ubmVjdGlvbiB3aXRoIGFwcGxpY2F0aW9uLlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgICBpZiAoIXJlamVjdGlvbi5kZXRhaWwgfHwgcmVqZWN0aW9uLmRldGFpbCA9PT0gJ05PVCBGT1VORCcpIHtcbiAgICAgICAgICAgICAgcmVqZWN0aW9uLmRldGFpbCA9IGdldHRleHQoXCJBY3Rpb24gbGluayBpcyBpbnZhbGlkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVqZWN0aW9uLnN0YXR1cyA9PT0gNTAwICYmICFyZWplY3Rpb24uZGV0YWlsKSB7XG4gICAgICAgICAgICByZWplY3Rpb24uZGV0YWlsID0gZ2V0dGV4dChcIlVua25vd24gZXJyb3IgaGFzIG9jY3VyZWQuXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlamVjdGlvbi5zdGF0dXNUZXh0ID0ganFYSFIuc3RhdHVzVGV4dDtcblxuICAgICAgICAgIHJlamVjdChyZWplY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAkLmFqYXgoeGhyKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQWpheCgpO1xuIiwiaW1wb3J0IHsgc2lnbkluLCBzaWduT3V0IH0gZnJvbSAnbWlzYWdvL3JlZHVjZXJzL2F1dGgnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGNsYXNzIEF1dGgge1xuICBpbml0KHN0b3JlLCBsb2NhbCwgbW9kYWwpIHtcbiAgICB0aGlzLl9zdG9yZSA9IHN0b3JlO1xuICAgIHRoaXMuX2xvY2FsID0gbG9jYWw7XG4gICAgdGhpcy5fbW9kYWwgPSBtb2RhbDtcblxuICAgIC8vIHRlbGwgb3RoZXIgdGFicyB3aGF0IGF1dGggc3RhdGUgaXMgYmVjYXVzZSB3ZSBhcmUgbW9zdCBjdXJyZW50IHdpdGggaXRcbiAgICB0aGlzLnN5bmNTZXNzaW9uKCk7XG5cbiAgICAvLyBsaXN0ZW4gZm9yIG90aGVyIHRhYnMgdG8gdGVsbCB1cyB0aGF0IHN0YXRlIGNoYW5nZWRcbiAgICB0aGlzLndhdGNoU3RhdGUoKTtcbiAgfVxuXG4gIHN5bmNTZXNzaW9uKCkge1xuICAgIGxldCBzdGF0ZSA9IHRoaXMuX3N0b3JlLmdldFN0YXRlKCkuYXV0aDtcbiAgICBpZiAoc3RhdGUuaXNBdXRoZW50aWNhdGVkKSB7XG4gICAgICB0aGlzLl9sb2NhbC5zZXQoJ2F1dGgnLCB7XG4gICAgICAgIGlzQXV0aGVudGljYXRlZDogdHJ1ZSxcbiAgICAgICAgdXNlcm5hbWU6IHN0YXRlLnVzZXIudXNlcm5hbWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2NhbC5zZXQoJ2F1dGgnLCB7XG4gICAgICAgIGlzQXV0aGVudGljYXRlZDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHdhdGNoU3RhdGUoKSB7XG4gICAgdGhpcy5fbG9jYWwud2F0Y2goJ2F1dGgnLCAobmV3U3RhdGUpID0+IHtcbiAgICAgIGlmIChuZXdTdGF0ZS5pc0F1dGhlbnRpY2F0ZWQpIHtcbiAgICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goc2lnbkluKHtcbiAgICAgICAgICB1c2VybmFtZTogbmV3U3RhdGUudXNlcm5hbWVcbiAgICAgICAgfSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goc2lnbk91dCgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLl9tb2RhbC5oaWRlKCk7XG4gIH1cblxuICBzaWduSW4odXNlcikge1xuICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKHNpZ25Jbih1c2VyKSk7XG4gICAgdGhpcy5fbG9jYWwuc2V0KCdhdXRoJywge1xuICAgICAgaXNBdXRoZW50aWNhdGVkOiB0cnVlLFxuICAgICAgdXNlcm5hbWU6IHVzZXIudXNlcm5hbWVcbiAgICB9KTtcbiAgICB0aGlzLl9tb2RhbC5oaWRlKCk7XG4gIH1cblxuICBzaWduT3V0KCkge1xuICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKHNpZ25PdXQoKSk7XG4gICAgdGhpcy5fbG9jYWwuc2V0KCdhdXRoJywge1xuICAgICAgaXNBdXRoZW50aWNhdGVkOiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMuX21vZGFsLmhpZGUoKTtcbiAgfVxuXG4gIHNvZnRTaWduT3V0KCkge1xuICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKHNpZ25PdXQodHJ1ZSkpO1xuICAgIHRoaXMuX2xvY2FsLnNldCgnYXV0aCcsIHtcbiAgICAgIGlzQXV0aGVudGljYXRlZDogZmFsc2VcbiAgICB9KTtcbiAgICB0aGlzLl9tb2RhbC5oaWRlKCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEF1dGgoKTsiLCIvKiBnbG9iYWwgZ3JlY2FwdGNoYSAqL1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgRm9ybUdyb3VwIGZyb20gJ21pc2Fnby9jb21wb25lbnRzL2Zvcm0tZ3JvdXAnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuZXhwb3J0IGNsYXNzIEJhc2VDYXB0Y2hhIHtcbiAgaW5pdChjb250ZXh0LCBhamF4LCBpbmNsdWRlLCBzbmFja2Jhcikge1xuICAgIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMuX2FqYXggPSBhamF4O1xuICAgIHRoaXMuX2luY2x1ZGUgPSBpbmNsdWRlO1xuICAgIHRoaXMuX3NuYWNrYmFyID0gc25hY2tiYXI7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5vQ2FwdGNoYSBleHRlbmRzIEJhc2VDYXB0Y2hhIHtcbiAgbG9hZCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuICAgICAgLy8gaW1tZWRpYXRlbHkgcmVzb2x2ZSBhcyB3ZSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIHZhbGlkYXRlXG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0b3IoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFFBQ2FwdGNoYSBleHRlbmRzIEJhc2VDYXB0Y2hhIHtcbiAgbG9hZCgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNlbGYuX2FqYXguZ2V0KHNlbGYuX2NvbnRleHQuZ2V0KCdDQVBUQ0hBX0FQSV9VUkwnKSkudGhlbihcbiAgICAgIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgc2VsZi5xdWVzdGlvbiA9IGRhdGEucXVlc3Rpb247XG4gICAgICAgIHNlbGYuaGVscFRleHQgPSBkYXRhLmhlbHBfdGV4dDtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHNlbGYuX3NuYWNrYmFyLmVycm9yKGdldHRleHQoXCJGYWlsZWQgdG8gbG9hZCBDQVBUQ0hBLlwiKSk7XG4gICAgICAgIHJlamVjdCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0b3IoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICBjb21wb25lbnQoa3dhcmdzKSB7XG4gICAgcmV0dXJuIDxGb3JtR3JvdXAgbGFiZWw9e3RoaXMucXVlc3Rpb259IGZvcj1cImlkX2NhcHRjaGFcIlxuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsQ2xhc3M9e2t3YXJncy5sYWJlbENsYXNzIHx8IFwiY29sLXNtLTRcIn1cbiAgICAgICAgICAgICAgICAgICAgICBjb250cm9sQ2xhc3M9e2t3YXJncy5jb250cm9sQ2xhc3MgfHwgXCJjb2wtc20tOFwifVxuICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb249e2t3YXJncy5mb3JtLnN0YXRlLmVycm9ycy5jYXB0Y2hhfVxuICAgICAgICAgICAgICAgICAgICAgIGhlbHBUZXh0PXt0aGlzLmhlbHBUZXh0IHx8IG51bGx9PlxuICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJpZF9jYXB0Y2hhXCIgY2xhc3NOYW1lPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiaWRfY2FwdGNoYV9zdGF0dXNcIlxuICAgICAgICAgICAgIGRpc2FibGVkPXtrd2FyZ3MuZm9ybS5zdGF0ZS5pc0xvYWRpbmd9XG4gICAgICAgICAgICAgb25DaGFuZ2U9e2t3YXJncy5mb3JtLmJpbmRJbnB1dCgnY2FwdGNoYScpfVxuICAgICAgICAgICAgIHZhbHVlPXtrd2FyZ3MuZm9ybS5zdGF0ZS5jYXB0Y2hhfSAvPlxuICAgIDwvRm9ybUdyb3VwPjtcbiAgfVxuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xufVxuXG5cbmV4cG9ydCBjbGFzcyBSZUNhcHRjaGFDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBncmVjYXB0Y2hhLnJlbmRlcigncmVjYXB0Y2hhJywge1xuICAgICAgJ3NpdGVrZXknOiB0aGlzLnByb3BzLnNpdGVLZXksXG4gICAgICAnY2FsbGJhY2snOiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgLy8gZmlyZSBmYWtleSBldmVudCB0byBiaW5kaW5nXG4gICAgICAgIHRoaXMucHJvcHMuYmluZGluZyh7XG4gICAgICAgICAgdGFyZ2V0OiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVzcG9uc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICByZXR1cm4gPGRpdiBpZD1cInJlY2FwdGNoYVwiIC8+O1xuICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlQ2FwdGNoYSBleHRlbmRzIEJhc2VDYXB0Y2hhIHtcbiAgbG9hZCgpIHtcbiAgICB0aGlzLl9pbmNsdWRlLmluY2x1ZGUoJ2h0dHBzOi8vd3d3Lmdvb2dsZS5jb20vcmVjYXB0Y2hhL2FwaS5qcycsIHRydWUpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgIHZhciB3YWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZ3JlY2FwdGNoYSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgd2FpdCgpO1xuICAgICAgICAgIH0sIDIwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgd2FpdCgpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdG9yKCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgY29tcG9uZW50KGt3YXJncykge1xuICAgIHJldHVybiA8Rm9ybUdyb3VwIGxhYmVsPXtnZXR0ZXh0KFwiQ2FwdGNoYVwiKX0gZm9yPVwiaWRfY2FwdGNoYVwiXG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWxDbGFzcz17a3dhcmdzLmxhYmVsQ2xhc3MgfHwgXCJjb2wtc20tNFwifVxuICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xDbGFzcz17a3dhcmdzLmNvbnRyb2xDbGFzcyB8fCBcImNvbC1zbS04XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbj17a3dhcmdzLmZvcm0uc3RhdGUuZXJyb3JzLmNhcHRjaGF9XG4gICAgICAgICAgICAgICAgICAgICAgaGVscFRleHQ9e2dldHRleHQoXCJQbGVhc2Ugc29sdmUgdGhlIHF1aWNrIHRlc3QuXCIpfT5cbiAgICAgIDxSZUNhcHRjaGFDb21wb25lbnQgc2l0ZUtleT17dGhpcy5fY29udGV4dC5nZXQoJ1NFVFRJTkdTJykucmVjYXB0Y2hhX3NpdGVfa2V5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nPXtrd2FyZ3MuZm9ybS5iaW5kSW5wdXQoJ2NhcHRjaGEnKX0gLz5cbiAgICA8L0Zvcm1Hcm91cD47XG4gIH1cbiAgLyoganNoaW50IGlnbm9yZTplbmQgKi9cbn1cblxuZXhwb3J0IGNsYXNzIENhcHRjaGEge1xuICBpbml0KGNvbnRleHQsIGFqYXgsIGluY2x1ZGUsIHNuYWNrYmFyKSB7XG4gICAgc3dpdGNoKGNvbnRleHQuZ2V0KCdTRVRUSU5HUycpLmNhcHRjaGFfdHlwZSkge1xuICAgICAgY2FzZSAnbm8nOlxuICAgICAgICB0aGlzLl9jYXB0Y2hhID0gbmV3IE5vQ2FwdGNoYSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncWEnOlxuICAgICAgICB0aGlzLl9jYXB0Y2hhID0gbmV3IFFBQ2FwdGNoYSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncmUnOlxuICAgICAgICB0aGlzLl9jYXB0Y2hhID0gbmV3IFJlQ2FwdGNoYSgpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLl9jYXB0Y2hhLmluaXQoY29udGV4dCwgYWpheCwgaW5jbHVkZSwgc25hY2tiYXIpO1xuICB9XG5cbiAgLy8gYWNjZXNzb3JzIGZvciB1bmRlcmx5aW5nIHN0cmF0ZWd5XG5cbiAgbG9hZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FwdGNoYS5sb2FkKCk7XG4gIH1cblxuICB2YWxpZGF0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhcHRjaGEudmFsaWRhdG9yKCk7XG4gIH1cblxuICBjb21wb25lbnQoa3dhcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhcHRjaGEuY29tcG9uZW50KGt3YXJncyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IENhcHRjaGEoKTsiLCJleHBvcnQgY2xhc3MgSW5jbHVkZSB7XG4gIGluaXQoc3RhdGljVXJsKSB7XG4gICAgdGhpcy5fc3RhdGljVXJsID0gc3RhdGljVXJsO1xuICAgIHRoaXMuX2luY2x1ZGVkID0gW107XG4gIH1cblxuICBpbmNsdWRlKHNjcmlwdCwgcmVtb3RlPWZhbHNlKSB7XG4gICAgaWYgKHRoaXMuX2luY2x1ZGVkLmluZGV4T2Yoc2NyaXB0KSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuX2luY2x1ZGVkLnB1c2goc2NyaXB0KTtcbiAgICAgIHRoaXMuX2luY2x1ZGUoc2NyaXB0LCByZW1vdGUpO1xuICAgIH1cbiAgfVxuXG4gIF9pbmNsdWRlKHNjcmlwdCwgcmVtb3RlKSB7XG4gICAgJC5hamF4KHtcbiAgICAgIHVybDogKCFyZW1vdGUgPyB0aGlzLl9zdGF0aWNVcmwgOiAnJykgKyBzY3JpcHQsXG4gICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgIGRhdGFUeXBlOiAnc2NyaXB0J1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBJbmNsdWRlKCk7IiwibGV0IHN0b3JhZ2UgPSB3aW5kb3cubG9jYWxTdG9yYWdlO1xuXG5leHBvcnQgY2xhc3MgTG9jYWxTdG9yYWdlIHtcbiAgaW5pdChwcmVmaXgpIHtcbiAgICB0aGlzLl9wcmVmaXggPSBwcmVmaXg7XG4gICAgdGhpcy5fd2F0Y2hlcnMgPSBbXTtcblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzdG9yYWdlJywgKGUpID0+IHtcbiAgICAgIGxldCBuZXdWYWx1ZUpzb24gPSBKU09OLnBhcnNlKGUubmV3VmFsdWUpO1xuICAgICAgdGhpcy5fd2F0Y2hlcnMuZm9yRWFjaChmdW5jdGlvbih3YXRjaGVyKSB7XG4gICAgICAgIGlmICh3YXRjaGVyLmtleSA9PT0gZS5rZXkgJiYgZS5vbGRWYWx1ZSAhPT0gZS5uZXdWYWx1ZSkge1xuICAgICAgICAgIHdhdGNoZXIuY2FsbGJhY2sobmV3VmFsdWVKc29uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHN0b3JhZ2Uuc2V0SXRlbSh0aGlzLl9wcmVmaXggKyBrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gIH1cblxuICBnZXQoa2V5KSB7XG4gICAgbGV0IGl0ZW1TdHJpbmcgPSBzdG9yYWdlLmdldEl0ZW0odGhpcy5fcHJlZml4ICsga2V5KTtcbiAgICBpZiAoaXRlbVN0cmluZykge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoaXRlbVN0cmluZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHdhdGNoKGtleSwgY2FsbGJhY2spIHtcbiAgICB0aGlzLl93YXRjaGVycy5wdXNoKHtcbiAgICAgIGtleTogdGhpcy5fcHJlZml4ICsga2V5LFxuICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IExvY2FsU3RvcmFnZSgpOyIsImltcG9ydCBtb3VudCBmcm9tICdtaXNhZ28vdXRpbHMvbW91bnQtY29tcG9uZW50JztcblxuZXhwb3J0IGNsYXNzIE1vYmlsZU5hdmJhckRyb3Bkb3duIHtcbiAgaW5pdChlbGVtZW50KSB7XG4gICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5fY29tcG9uZW50ID0gbnVsbDtcbiAgfVxuXG4gIHNob3coY29tcG9uZW50KSB7XG4gICAgaWYgKHRoaXMuX2NvbXBvbmVudCA9PT0gY29tcG9uZW50KSB7XG4gICAgICB0aGlzLmhpZGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgICAgbW91bnQoY29tcG9uZW50LCB0aGlzLl9lbGVtZW50LmlkKTtcbiAgICAgICQodGhpcy5fZWxlbWVudCkuYWRkQ2xhc3MoJ29wZW4nKTtcbiAgICB9XG4gIH1cblxuICBzaG93Q29ubmVjdGVkKG5hbWUsIGNvbXBvbmVudCkge1xuICAgIGlmICh0aGlzLl9jb21wb25lbnQgPT09IG5hbWUpIHtcbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jb21wb25lbnQgPSBuYW1lO1xuICAgICAgbW91bnQoY29tcG9uZW50LCB0aGlzLl9lbGVtZW50LmlkLCB0cnVlKTtcbiAgICAgICQodGhpcy5fZWxlbWVudCkuYWRkQ2xhc3MoJ29wZW4nKTtcbiAgICB9XG4gIH1cblxuICBoaWRlKCkge1xuICAgICQodGhpcy5fZWxlbWVudCkucmVtb3ZlQ2xhc3MoJ29wZW4nKTtcbiAgICB0aGlzLl9jb21wb25lbnQgPSBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBNb2JpbGVOYXZiYXJEcm9wZG93bigpO1xuIiwiaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgbW91bnQgZnJvbSAnbWlzYWdvL3V0aWxzL21vdW50LWNvbXBvbmVudCc7XG5cbmV4cG9ydCBjbGFzcyBNb2RhbCB7XG4gIGluaXQoZWxlbWVudCkge1xuICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgdGhpcy5fbW9kYWwgPSAkKGVsZW1lbnQpLm1vZGFsKHtzaG93OiBmYWxzZX0pO1xuXG4gICAgdGhpcy5fbW9kYWwub24oJ2hpZGRlbi5icy5tb2RhbCcsICgpID0+IHtcbiAgICAgIFJlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUodGhpcy5fZWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBzaG93KGNvbXBvbmVudCkge1xuICAgIG1vdW50KGNvbXBvbmVudCwgdGhpcy5fZWxlbWVudC5pZCk7XG4gICAgdGhpcy5fbW9kYWwubW9kYWwoJ3Nob3cnKTtcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5fbW9kYWwubW9kYWwoJ2hpZGUnKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgTW9kYWwoKTtcbiIsImV4cG9ydCBjbGFzcyBQYWdlVGl0bGUge1xuICBpbml0KGluZGV4VGl0bGUsIGZvcnVtTmFtZSkge1xuICAgIHRoaXMuX2luZGV4VGl0bGUgPSBpbmRleFRpdGxlO1xuICAgIHRoaXMuX2ZvcnVtTmFtZSA9IGZvcnVtTmFtZTtcbiAgfVxuXG4gIHNldCh0aXRsZSkge1xuICAgIGlmICghdGl0bGUpIHtcbiAgICAgIGRvY3VtZW50LnRpdGxlID0gdGhpcy5faW5kZXhUaXRsZSB8fCB0aGlzLl9mb3J1bU5hbWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aXRsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRpdGxlID0ge3RpdGxlOiB0aXRsZX07XG4gICAgfVxuXG4gICAgbGV0IGZpbmFsVGl0bGUgPSB0aXRsZS50aXRsZTtcblxuICAgIGlmICh0aXRsZS5wYWdlKSB7XG4gICAgICBsZXQgcGFnZUxhYmVsID0gaW50ZXJwb2xhdGUoZ2V0dGV4dCgncGFnZTogJShwYWdlKXMnKSwge1xuICAgICAgICBwYWdlOiB0aXRsZS5wYWdlXG4gICAgICB9LCB0cnVlKTtcblxuICAgICAgZmluYWxUaXRsZSArPSAnICgnICsgcGFnZUxhYmVsICsgJyknO1xuICAgIH1cblxuICAgIGlmICh0aXRsZS5wYXJlbnQpIHtcbiAgICAgIGZpbmFsVGl0bGUgKz0gJyB8ICcgKyB0aXRsZS5wYXJlbnQ7XG4gICAgfVxuXG4gICAgZG9jdW1lbnQudGl0bGUgPSBmaW5hbFRpdGxlICsgJyB8ICcgKyB0aGlzLl9mb3J1bU5hbWU7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFBhZ2VUaXRsZSgpO1xuIiwiZXhwb3J0IGNsYXNzIFBvbGxzIHtcbiAgaW5pdChhamF4LCBzbmFja2Jhcikge1xuICAgIHRoaXMuX2FqYXggPSBhamF4O1xuICAgIHRoaXMuX3NuYWNrYmFyID0gc25hY2tiYXI7XG5cbiAgICB0aGlzLl9wb2xscyA9IHt9O1xuICB9XG5cbiAgc3RhcnQoa3dhcmdzKSB7XG4gICAgbGV0IHBvb2xTZXJ2ZXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9wb2xsc1trd2FyZ3MucG9sbF0gPSBrd2FyZ3M7XG5cbiAgICAgIHRoaXMuX2FqYXguZ2V0KGt3YXJncy51cmwsIGt3YXJncy5kYXRhIHx8IG51bGwpLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9wb2xsc1trd2FyZ3MucG9sbF0uX3N0b3BwZWQpIHtcbiAgICAgICAgICBrd2FyZ3MudXBkYXRlKGRhdGEpO1xuXG4gICAgICAgICAgdGhpcy5fcG9sbHNba3dhcmdzLnBvbGxdLnRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChcbiAgICAgICAgICAgIHBvb2xTZXJ2ZXIsIGt3YXJncy5mcmVxdWVuY3kpO1xuICAgICAgICB9XG4gICAgICB9LCAocmVqZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5fcG9sbHNba3dhcmdzLnBvbGxdLl9zdG9wcGVkKSB7XG4gICAgICAgICAgaWYgKGt3YXJncy5lcnJvcikge1xuICAgICAgICAgICAga3dhcmdzLmVycm9yKHJlamVjdGlvbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NuYWNrYmFyLmFwaUVycm9yKHJlamVjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgcG9vbFNlcnZlcigpO1xuICB9XG5cbiAgc3RvcChwb2xsSWQpIHtcbiAgICBpZiAodGhpcy5fcG9sbHNbcG9sbElkXSkge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9wb2xsc1twb2xsSWRdLnRpbWVvdXQpO1xuICAgICAgdGhpcy5fcG9sbHNbcG9sbElkXS5fc3RvcHBlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBQb2xscygpO1xuIiwiaW1wb3J0IHsgc2hvd1NuYWNrYmFyLCBoaWRlU25hY2tiYXIgfSBmcm9tICdtaXNhZ28vcmVkdWNlcnMvc25hY2tiYXInO1xuXG5jb25zdCBISURFX0FOSU1BVElPTl9MRU5HVEggPSAzMDA7XG5jb25zdCBNRVNTQUdFX1NIT1dfTEVOR1RIID0gNTAwMDtcblxuZXhwb3J0IGNsYXNzIFNuYWNrYmFyIHtcbiAgaW5pdChzdG9yZSkge1xuICAgIHRoaXMuX3N0b3JlID0gc3RvcmU7XG4gICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gIH1cblxuICBhbGVydChtZXNzYWdlLCB0eXBlKSB7XG4gICAgaWYgKHRoaXMuX3RpbWVvdXQpIHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaChoaWRlU25hY2tiYXIoKSk7XG5cbiAgICAgIHRoaXMuX3RpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLmFsZXJ0KG1lc3NhZ2UsIHR5cGUpO1xuICAgICAgfSwgSElERV9BTklNQVRJT05fTEVOR1RIKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goc2hvd1NuYWNrYmFyKG1lc3NhZ2UsIHR5cGUpKTtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKGhpZGVTbmFja2JhcigpKTtcbiAgICAgICAgdGhpcy5fdGltZW91dCA9IG51bGw7XG4gICAgICB9LCBNRVNTQUdFX1NIT1dfTEVOR1RIKTtcbiAgICB9XG4gIH1cblxuICAvLyBzaG9ydGhhbmRzIGZvciBtZXNzYWdlIHR5cGVzXG5cbiAgaW5mbyhtZXNzYWdlKSB7XG4gICAgdGhpcy5hbGVydChtZXNzYWdlLCAnaW5mbycpO1xuICB9XG5cbiAgc3VjY2VzcyhtZXNzYWdlKSB7XG4gICAgdGhpcy5hbGVydChtZXNzYWdlLCAnc3VjY2VzcycpO1xuICB9XG5cbiAgd2FybmluZyhtZXNzYWdlKSB7XG4gICAgdGhpcy5hbGVydChtZXNzYWdlLCAnd2FybmluZycpO1xuICB9XG5cbiAgZXJyb3IobWVzc2FnZSkge1xuICAgIHRoaXMuYWxlcnQobWVzc2FnZSwgJ2Vycm9yJyk7XG4gIH1cblxuICAvLyBzaG9ydGhhbmQgZm9yIGFwaSBlcnJvcnNcblxuICBhcGlFcnJvcihyZWplY3Rpb24pIHtcbiAgICBsZXQgbWVzc2FnZSA9IHJlamVjdGlvbi5kZXRhaWw7XG5cbiAgICBpZiAoIW1lc3NhZ2UpIHtcbiAgICAgIGlmIChyZWplY3Rpb24uc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgbWVzc2FnZSA9IGdldHRleHQoXCJBY3Rpb24gbGluayBpcyBpbnZhbGlkLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lc3NhZ2UgPSBnZXR0ZXh0KFwiVW5rbm93biBlcnJvciBoYXMgb2NjdXJlZC5cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlamVjdGlvbi5zdGF0dXMgPT09IDQwMyAmJiBtZXNzYWdlID09PSBcIlBlcm1pc3Npb24gZGVuaWVkXCIpIHtcbiAgICAgIG1lc3NhZ2UgPSBnZXR0ZXh0KFwiWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBwZXJmb3JtIHRoaXMgYWN0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBTbmFja2JhcigpO1xuIiwiaW1wb3J0IHsgY29tYmluZVJlZHVjZXJzLCBjcmVhdGVTdG9yZSB9IGZyb20gJ3JlZHV4JztcblxuZXhwb3J0IGNsYXNzIFN0b3JlV3JhcHBlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3N0b3JlID0gbnVsbDtcbiAgICB0aGlzLl9yZWR1Y2VycyA9IHt9O1xuICAgIHRoaXMuX2luaXRpYWxTdGF0ZSA9IHt9O1xuICB9XG5cbiAgYWRkUmVkdWNlcihuYW1lLCByZWR1Y2VyLCBpbml0aWFsU3RhdGUpIHtcbiAgICB0aGlzLl9yZWR1Y2Vyc1tuYW1lXSA9IHJlZHVjZXI7XG4gICAgdGhpcy5faW5pdGlhbFN0YXRlW25hbWVdID0gaW5pdGlhbFN0YXRlO1xuICB9XG5cbiAgaW5pdCgpIHtcbiAgICB0aGlzLl9zdG9yZSA9IGNyZWF0ZVN0b3JlKFxuICAgICAgY29tYmluZVJlZHVjZXJzKHRoaXMuX3JlZHVjZXJzKSwgdGhpcy5faW5pdGlhbFN0YXRlKTtcbiAgfVxuXG4gIGdldFN0b3JlKCkge1xuICAgIHJldHVybiB0aGlzLl9zdG9yZTtcbiAgfVxuXG4gIC8vIFN0b3JlIEFQSVxuXG4gIGdldFN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9zdG9yZS5nZXRTdGF0ZSgpO1xuICB9XG5cbiAgZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlLmRpc3BhdGNoKGFjdGlvbik7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFN0b3JlV3JhcHBlcigpO1xuIiwiLyogZ2xvYmFsIHp4Y3ZibiAqL1xuZXhwb3J0IGNsYXNzIFp4Y3ZibiB7XG4gIGluaXQoaW5jbHVkZSkge1xuICAgIHRoaXMuX2luY2x1ZGUgPSBpbmNsdWRlO1xuICB9XG5cbiAgc2NvcmVQYXNzd29yZChwYXNzd29yZCwgaW5wdXRzKSB7XG4gICAgLy8gMC00IHNjb3JlLCB0aGUgbW9yZSB0aGUgc3Ryb25nZXIgcGFzc3dvcmRcbiAgICByZXR1cm4genhjdmJuKHBhc3N3b3JkLCBpbnB1dHMpLnNjb3JlO1xuICB9XG5cbiAgbG9hZCgpIHtcbiAgICBpZiAodHlwZW9mIHp4Y3ZibiA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5faW5jbHVkZS5pbmNsdWRlKCdtaXNhZ28vanMvenhjdmJuLmpzJyk7XG4gICAgICByZXR1cm4gdGhpcy5fbG9hZGluZ1Byb21pc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX2xvYWRlZFByb21pc2UoKTtcbiAgICB9XG4gIH1cblxuICBfbG9hZGluZ1Byb21pc2UoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgIHZhciB3YWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0eXBlb2YgenhjdmJuID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB3YWl0KCk7XG4gICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB3YWl0KCk7XG4gICAgfSk7XG4gIH1cblxuICBfbG9hZGVkUHJvbWlzZSgpIHtcbiAgICAvLyB3ZSBoYXZlIGFscmVhZHkgbG9hZGVkIHp4Y3Zibi5qcywgcmVzb2x2ZSBhd2F5IVxuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IFp4Y3ZibigpOyIsImltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgUHJvdmlkZXIsIGNvbm5lY3QgfSBmcm9tICdyZWFjdC1yZWR1eCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IEJhbm5lZFBhZ2UgZnJvbSAnbWlzYWdvL2NvbXBvbmVudHMvYmFubmVkLXBhZ2UnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmltcG9ydCBtaXNhZ28gZnJvbSAnbWlzYWdvL2luZGV4JztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xubGV0IHNlbGVjdCA9IGZ1bmN0aW9uKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS50aWNrO1xufTtcblxubGV0IFJlZHJhd2VkQmFubmVkUGFnZSA9IGNvbm5lY3Qoc2VsZWN0KShCYW5uZWRQYWdlKTtcbi8qIGpzaGludCBpZ25vcmU6ZW5kICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGJhbiwgY2hhbmdlU3RhdGUpIHtcbiAgUmVhY3RET00ucmVuZGVyKFxuICAgIC8qIGpzaGludCBpZ25vcmU6c3RhcnQgKi9cbiAgICA8UHJvdmlkZXIgc3RvcmU9e3N0b3JlLmdldFN0b3JlKCl9PlxuICAgICAgPFJlZHJhd2VkQmFubmVkUGFnZSBtZXNzYWdlPXtiYW4ubWVzc2FnZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwaXJlcz17YmFuLmV4cGlyZXNfb24gPyBtb21lbnQoYmFuLmV4cGlyZXNfb24pIDogbnVsbH0gLz5cbiAgICA8L1Byb3ZpZGVyPixcbiAgICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlLW1vdW50JylcbiAgKTtcblxuICBpZiAodHlwZW9mIGNoYW5nZVN0YXRlID09PSAndW5kZWZpbmVkJyB8fCBjaGFuZ2VTdGF0ZSkge1xuICAgIGxldCBmb3J1bU5hbWUgPSBtaXNhZ28uZ2V0KCdTRVRUSU5HUycpLmZvcnVtX25hbWU7XG4gICAgZG9jdW1lbnQudGl0bGUgPSBnZXR0ZXh0KFwiWW91IGFyZSBiYW5uZWRcIikgKyAnIHwgJyArIGZvcnVtTmFtZTtcbiAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoe30sIFwiXCIsIG1pc2Fnby5nZXQoJ0JBTk5FRF9VUkwnKSk7XG4gIH1cbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihsaXN0LCByb3dXaWR0aCwgcGFkZGluZz1mYWxzZSkge1xuICBsZXQgcm93cyA9IFtdO1xuICBsZXQgcm93ID0gW107XG5cbiAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGVsZW1lbnQpIHtcbiAgICByb3cucHVzaChlbGVtZW50KTtcbiAgICBpZiAocm93Lmxlbmd0aCA9PT0gcm93V2lkdGgpIHtcbiAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgICAgcm93ID0gW107XG4gICAgfVxuICB9KTtcblxuICAvLyBwYWQgcm93IHRvIHJlcXVpcmVkIGxlbmd0aD9cbiAgaWYgKHBhZGRpbmcgIT09IGZhbHNlICYmIHJvdy5sZW5ndGggPiAwICYmIHJvdy5sZW5ndGggPCByb3dXaWR0aCkge1xuICAgIGZvciAobGV0IGkgPSByb3cubGVuZ3RoOyBpIDwgcm93V2lkdGg7IGkgKyspIHtcbiAgICAgIHJvdy5wdXNoKHBhZGRpbmcpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyb3cubGVuZ3RoKSB7XG4gICAgcm93cy5wdXNoKHJvdyk7XG4gIH1cblxuICByZXR1cm4gcm93cztcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihieXRlcykge1xuICBpZiAoYnl0ZXMgPiAxMDAwICogMTAwMCAqIDEwMDApIHtcbiAgICByZXR1cm4gKE1hdGgucm91bmQoYnl0ZXMgKiAxMDAgLyAoMTAwMCAqIDEwMDAgKiAxMDAwKSkgLyAxMDApICsgJyBHQic7XG4gIH0gZWxzZSBpZiAoYnl0ZXMgPiAxMDAwICogMTAwMCkge1xuICAgIHJldHVybiAoTWF0aC5yb3VuZChieXRlcyAqIDEwMCAvICgxMDAwICogMTAwMCkpIC8gMTAwKSArICcgTUInO1xuICB9IGVsc2UgaWYgKGJ5dGVzID4gMTAwMCkge1xuICAgIHJldHVybiAoTWF0aC5yb3VuZChieXRlcyAqIDEwMCAvIDEwMDApIC8gMTAwKSArICcgS0InO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAoTWF0aC5yb3VuZChieXRlcyAqIDEwMCkgLyAxMDApICsgJyBCJztcbiAgfVxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7IC8vIGpzaGludCBpZ25vcmU6bGluZVxuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ3JlYWN0LXJlZHV4JzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5pbXBvcnQgc3RvcmUgZnJvbSAnbWlzYWdvL3NlcnZpY2VzL3N0b3JlJzsgLy8ganNoaW50IGlnbm9yZTpsaW5lXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKENvbXBvbmVudCwgcm9vdEVsZW1lbnRJZCwgY29ubmVjdGVkPXRydWUpIHtcbiAgbGV0IHJvb3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocm9vdEVsZW1lbnRJZCk7XG5cbiAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICBsZXQgZmluYWxDb21wb25lbnQgPSBDb21wb25lbnQucHJvcHMgPyBDb21wb25lbnQgOiA8Q29tcG9uZW50IC8+O1xuICAvKiBqc2hpbnQgaWdub3JlOmVuZCAqL1xuXG4gIGlmIChyb290RWxlbWVudCkge1xuICAgIGlmIChjb25uZWN0ZWQpIHtcbiAgICAgIFJlYWN0RE9NLnJlbmRlcihcbiAgICAgICAgLyoganNoaW50IGlnbm9yZTpzdGFydCAqL1xuICAgICAgICA8UHJvdmlkZXIgc3RvcmU9e3N0b3JlLmdldFN0b3JlKCl9PlxuICAgICAgICAgIHtmaW5hbENvbXBvbmVudH1cbiAgICAgICAgPC9Qcm92aWRlcj4sXG4gICAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgICAgIHJvb3RFbGVtZW50XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvKiBqc2hpbnQgaWdub3JlOnN0YXJ0ICovXG4gICAgICBSZWFjdERPTS5yZW5kZXIoZmluYWxDb21wb25lbnQsIHJvb3RFbGVtZW50KTtcbiAgICAgIC8qIGpzaGludCBpZ25vcmU6ZW5kICovXG4gICAgfVxuICB9XG59XG4iLCJjbGFzcyBPcmRlcmVkTGlzdCB7XG4gICAgY29uc3RydWN0b3IoaXRlbXMpIHtcbiAgICAgIHRoaXMuaXNPcmRlcmVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9pdGVtcyA9IGl0ZW1zIHx8IFtdO1xuICAgIH1cblxuICAgIGFkZChrZXksIGl0ZW0sIG9yZGVyKSB7XG4gICAgICB0aGlzLl9pdGVtcy5wdXNoKHtcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIGl0ZW06IGl0ZW0sXG5cbiAgICAgICAgYWZ0ZXI6IG9yZGVyID8gb3JkZXIuYWZ0ZXIgfHwgbnVsbCA6IG51bGwsXG4gICAgICAgIGJlZm9yZTogb3JkZXIgPyBvcmRlci5iZWZvcmUgfHwgbnVsbCA6IG51bGxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldChrZXksIHZhbHVlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2l0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLl9pdGVtc1tpXS5rZXkgPT09IGtleSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9pdGVtc1tpXS5pdGVtO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBoYXMoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXQoa2V5KSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHZhbHVlcygpIHtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5faXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWVzLnB1c2godGhpcy5faXRlbXNbaV0uaXRlbSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH1cblxuICAgIG9yZGVyKHZhbHVlc19vbmx5KSB7XG4gICAgICBpZiAoIXRoaXMuaXNPcmRlcmVkKSB7XG4gICAgICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fb3JkZXIodGhpcy5faXRlbXMpO1xuICAgICAgICB0aGlzLmlzT3JkZXJlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZXNfb25seSB8fCB0eXBlb2YgdmFsdWVzX29ubHkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICAgICAgfVxuICAgIH1cblxuICAgIG9yZGVyZWRWYWx1ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcmRlcih0cnVlKTtcbiAgICB9XG5cbiAgICBfb3JkZXIodW5vcmRlcmVkKSB7XG4gICAgICAvLyBJbmRleCBvZiB1bm9yZGVyZWQgaXRlbXNcbiAgICAgIHZhciBpbmRleCA9IFtdO1xuICAgICAgdW5vcmRlcmVkLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgaW5kZXgucHVzaChpdGVtLmtleSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gT3JkZXJlZCBpdGVtc1xuICAgICAgdmFyIG9yZGVyZWQgPSBbXTtcbiAgICAgIHZhciBvcmRlcmluZyA9IFtdO1xuXG4gICAgICAvLyBGaXJzdCBwYXNzOiByZWdpc3RlciBpdGVtcyB0aGF0XG4gICAgICAvLyBkb24ndCBzcGVjaWZ5IHRoZWlyIG9yZGVyXG4gICAgICB1bm9yZGVyZWQuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBpZiAoIWl0ZW0uYWZ0ZXIgJiYgIWl0ZW0uYmVmb3JlKSB7XG4gICAgICAgICAgb3JkZXJlZC5wdXNoKGl0ZW0pO1xuICAgICAgICAgIG9yZGVyaW5nLnB1c2goaXRlbS5rZXkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gU2Vjb25kIHBhc3M6IHJlZ2lzdGVyIGl0ZW1zIHRoYXRcbiAgICAgIC8vIHNwZWNpZnkgdGhlaXIgYmVmb3JlIHRvIFwiX2VuZFwiXG4gICAgICB1bm9yZGVyZWQuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBpZiAoaXRlbS5iZWZvcmUgPT09IFwiX2VuZFwiKSB7XG4gICAgICAgICAgb3JkZXJlZC5wdXNoKGl0ZW0pO1xuICAgICAgICAgIG9yZGVyaW5nLnB1c2goaXRlbS5rZXkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gVGhpcmQgcGFzczoga2VlcCBpdGVyYXRpbmcgaXRlbXNcbiAgICAgIC8vIHVudGlsIHdlIGhpdCBpdGVyYXRpb25zIGxpbWl0IG9yIGZpbmlzaFxuICAgICAgLy8gb3JkZXJpbmcgbGlzdFxuICAgICAgZnVuY3Rpb24gaW5zZXJ0SXRlbShpdGVtKSB7XG4gICAgICAgIHZhciBpbnNlcnRBdCA9IC0xO1xuICAgICAgICBpZiAob3JkZXJpbmcuaW5kZXhPZihpdGVtLmtleSkgPT09IC0xKSB7XG4gICAgICAgICAgaWYgKGl0ZW0uYWZ0ZXIpIHtcbiAgICAgICAgICAgIGluc2VydEF0ID0gb3JkZXJpbmcuaW5kZXhPZihpdGVtLmFmdGVyKTtcbiAgICAgICAgICAgIGlmIChpbnNlcnRBdCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgaW5zZXJ0QXQgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uYmVmb3JlKSB7XG4gICAgICAgICAgICBpbnNlcnRBdCA9IG9yZGVyaW5nLmluZGV4T2YoaXRlbS5iZWZvcmUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpbnNlcnRBdCAhPT0gLTEpIHtcbiAgICAgICAgICAgIG9yZGVyZWQuc3BsaWNlKGluc2VydEF0LCAwLCBpdGVtKTtcbiAgICAgICAgICAgIG9yZGVyaW5nLnNwbGljZShpbnNlcnRBdCwgMCwgaXRlbS5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgaXRlcmF0aW9ucyA9IDIwMDtcbiAgICAgIHdoaWxlIChpdGVyYXRpb25zID4gMCAmJiBpbmRleC5sZW5ndGggIT09IG9yZGVyaW5nLmxlbmd0aCkge1xuICAgICAgICBpdGVyYXRpb25zIC09IDE7XG4gICAgICAgIHVub3JkZXJlZC5mb3JFYWNoKGluc2VydEl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3JkZXJlZDtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZGVmYXVsdCBPcmRlcmVkTGlzdDtcbiIsImV4cG9ydCBmdW5jdGlvbiBpbnQobWluLCBtYXgpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpKSArIG1pbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmdlKG1pbiwgbWF4KSB7XG4gIGxldCBhcnJheSA9IG5ldyBBcnJheShpbnQobWluLCBtYXgpKTtcbiAgZm9yKGxldCBpPTA7IGk8YXJyYXkubGVuZ3RoOyBpKyspe1xuICAgIGFycmF5W2ldID0gaTtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgd2luZG93LnNjcm9sbFRvKDAsIDApO1xufSIsIi8vIGpzaGludCBpZ25vcmU6c3RhcnRcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcbmltcG9ydCBjcmVhdGVIaXN0b3J5IGZyb20gJ2hpc3RvcnkvbGliL2NyZWF0ZUJyb3dzZXJIaXN0b3J5JztcbmltcG9ydCBzdG9yZSBmcm9tICdtaXNhZ28vc2VydmljZXMvc3RvcmUnO1xuXG5jb25zdCByb290RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWdlLW1vdW50Jyk7XG5jb25zdCBoaXN0b3J5ID0gbmV3IGNyZWF0ZUhpc3RvcnkoKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob3B0aW9ucykge1xuICBsZXQgcm91dGVzID0ge1xuICAgIGNvbXBvbmVudDogb3B0aW9ucy5jb21wb25lbnQgfHwgbnVsbCxcbiAgICBjaGlsZFJvdXRlczogW11cbiAgfTtcblxuICBpZiAob3B0aW9ucy5yb290KSB7XG4gICAgcm91dGVzLmNoaWxkUm91dGVzID0gW1xuICAgICAge1xuICAgICAgICBwYXRoOiBvcHRpb25zLnJvb3QsXG4gICAgICAgIG9uRW50ZXI6IGZ1bmN0aW9uKG5leHRTdGF0ZSwgcmVwbGFjZVN0YXRlKSB7XG4gICAgICAgICAgcmVwbGFjZVN0YXRlKG51bGwsIG9wdGlvbnMucGF0aHNbMF0ucGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLmNvbmNhdChvcHRpb25zLnBhdGhzKTtcbiAgfSBlbHNlIHtcbiAgICByb3V0ZXMuY2hpbGRSb3V0ZXMgPSBvcHRpb25zLnBhdGhzO1xuICB9XG5cbiAgUmVhY3RET00ucmVuZGVyKFxuICAgIDxQcm92aWRlciBzdG9yZT17c3RvcmUuZ2V0U3RvcmUoKX0+XG4gICAgICA8Um91dGVyIHJvdXRlcz17cm91dGVzfSBoaXN0b3J5PXtoaXN0b3J5fSAvPlxuICAgIDwvUHJvdmlkZXI+LFxuICAgIHJvb3RFbGVtZW50XG4gICk7XG59XG4iLCJjb25zdCBFTUFJTCA9IC9eKChbXjw+KClbXFxdXFwuLDs6XFxzQFxcXCJdKyhcXC5bXjw+KClbXFxdXFwuLDs6XFxzQFxcXCJdKykqKXwoXFxcIi4rXFxcIikpQCgoW148PigpW1xcXVxcLiw7Olxcc0BcXFwiXStcXC4pK1tePD4oKVtcXF1cXC4sOzpcXHNAXFxcIl17Mix9KSQvaTtcbmNvbnN0IFVTRVJOQU1FID0gbmV3IFJlZ0V4cCgnXlswLTlhLXpdKyQnLCAnaScpO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVxdWlyZWQoKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIGlmICgkLnRyaW0odmFsdWUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGdldHRleHQoXCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLlwiKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbWFpbChtZXNzYWdlKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIGlmICghRU1BSUwudGVzdCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlIHx8IGdldHRleHQoXCJFbnRlciBhIHZhbGlkIGVtYWlsIGFkZHJlc3MuXCIpO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pbkxlbmd0aChsaW1pdFZhbHVlLCBtZXNzYWdlKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXR1cm5NZXNzYWdlID0gJyc7XG4gICAgdmFyIGxlbmd0aCA9ICQudHJpbSh2YWx1ZSkubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA8IGxpbWl0VmFsdWUpIHtcbiAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybk1lc3NhZ2UgPSBtZXNzYWdlKGxpbWl0VmFsdWUsIGxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm5NZXNzYWdlID0gbmdldHRleHQoXG4gICAgICAgICAgXCJFbnN1cmUgdGhpcyB2YWx1ZSBoYXMgYXQgbGVhc3QgJShsaW1pdF92YWx1ZSlzIGNoYXJhY3RlciAoaXQgaGFzICUoc2hvd192YWx1ZSlzKS5cIixcbiAgICAgICAgICBcIkVuc3VyZSB0aGlzIHZhbHVlIGhhcyBhdCBsZWFzdCAlKGxpbWl0X3ZhbHVlKXMgY2hhcmFjdGVycyAoaXQgaGFzICUoc2hvd192YWx1ZSlzKS5cIixcbiAgICAgICAgICBsaW1pdFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnRlcnBvbGF0ZShyZXR1cm5NZXNzYWdlLCB7XG4gICAgICAgIGxpbWl0X3ZhbHVlOiBsaW1pdFZhbHVlLFxuICAgICAgICBzaG93X3ZhbHVlOiBsZW5ndGhcbiAgICAgIH0sIHRydWUpO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1heExlbmd0aChsaW1pdFZhbHVlLCBtZXNzYWdlKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXR1cm5NZXNzYWdlID0gJyc7XG4gICAgdmFyIGxlbmd0aCA9ICQudHJpbSh2YWx1ZSkubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA+IGxpbWl0VmFsdWUpIHtcbiAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybk1lc3NhZ2UgPSBtZXNzYWdlKGxpbWl0VmFsdWUsIGxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm5NZXNzYWdlID0gbmdldHRleHQoXG4gICAgICAgICAgXCJFbnN1cmUgdGhpcyB2YWx1ZSBoYXMgYXQgbW9zdCAlKGxpbWl0X3ZhbHVlKXMgY2hhcmFjdGVyIChpdCBoYXMgJShzaG93X3ZhbHVlKXMpLlwiLFxuICAgICAgICAgIFwiRW5zdXJlIHRoaXMgdmFsdWUgaGFzIGF0IG1vc3QgJShsaW1pdF92YWx1ZSlzIGNoYXJhY3RlcnMgKGl0IGhhcyAlKHNob3dfdmFsdWUpcykuXCIsXG4gICAgICAgICAgbGltaXRWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW50ZXJwb2xhdGUocmV0dXJuTWVzc2FnZSwge1xuICAgICAgICBsaW1pdF92YWx1ZTogbGltaXRWYWx1ZSxcbiAgICAgICAgc2hvd192YWx1ZTogbGVuZ3RoXG4gICAgICB9LCB0cnVlKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VybmFtZU1pbkxlbmd0aChzZXR0aW5ncykge1xuICB2YXIgbWVzc2FnZSA9IGZ1bmN0aW9uKGxpbWl0VmFsdWUpIHtcbiAgICByZXR1cm4gbmdldHRleHQoXG4gICAgICBcIlVzZXJuYW1lIG11c3QgYmUgYXQgbGVhc3QgJShsaW1pdF92YWx1ZSlzIGNoYXJhY3RlciBsb25nLlwiLFxuICAgICAgXCJVc2VybmFtZSBtdXN0IGJlIGF0IGxlYXN0ICUobGltaXRfdmFsdWUpcyBjaGFyYWN0ZXJzIGxvbmcuXCIsXG4gICAgICBsaW1pdFZhbHVlKTtcbiAgfTtcbiAgcmV0dXJuIHRoaXMubWluTGVuZ3RoKHNldHRpbmdzLnVzZXJuYW1lX2xlbmd0aF9taW4sIG1lc3NhZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlcm5hbWVNYXhMZW5ndGgoc2V0dGluZ3MpIHtcbiAgdmFyIG1lc3NhZ2UgPSBmdW5jdGlvbihsaW1pdFZhbHVlKSB7XG4gICAgcmV0dXJuIG5nZXR0ZXh0KFxuICAgICAgXCJVc2VybmFtZSBjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gJShsaW1pdF92YWx1ZSlzIGNoYXJhY3Rlci5cIixcbiAgICAgIFwiVXNlcm5hbWUgY2Fubm90IGJlIGxvbmdlciB0aGFuICUobGltaXRfdmFsdWUpcyBjaGFyYWN0ZXJzLlwiLFxuICAgICAgbGltaXRWYWx1ZSk7XG4gIH07XG4gIHJldHVybiB0aGlzLm1heExlbmd0aChzZXR0aW5ncy51c2VybmFtZV9sZW5ndGhfbWF4LCBtZXNzYWdlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZXJuYW1lQ29udGVudCgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgaWYgKCFVU0VSTkFNRS50ZXN0KCQudHJpbSh2YWx1ZSkpKSB7XG4gICAgICByZXR1cm4gZ2V0dGV4dChcIlVzZXJuYW1lIGNhbiBvbmx5IGNvbnRhaW4gbGF0aW4gYWxwaGFiZXQgbGV0dGVycyBhbmQgZGlnaXRzLlwiKTtcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXNzd29yZE1pbkxlbmd0aChzZXR0aW5ncykge1xuICB2YXIgbWVzc2FnZSA9IGZ1bmN0aW9uKGxpbWl0VmFsdWUpIHtcbiAgICByZXR1cm4gbmdldHRleHQoXG4gICAgICBcIlZhbGlkIHBhc3N3b3JkIG11c3QgYmUgYXQgbGVhc3QgJShsaW1pdF92YWx1ZSlzIGNoYXJhY3RlciBsb25nLlwiLFxuICAgICAgXCJWYWxpZCBwYXNzd29yZCBtdXN0IGJlIGF0IGxlYXN0ICUobGltaXRfdmFsdWUpcyBjaGFyYWN0ZXJzIGxvbmcuXCIsXG4gICAgICBsaW1pdFZhbHVlKTtcbiAgfTtcbiAgcmV0dXJuIHRoaXMubWluTGVuZ3RoKHNldHRpbmdzLnBhc3N3b3JkX2xlbmd0aF9taW4sIG1lc3NhZ2UpO1xufSJdfQ==

+ 1 - 1
misago/static/misago/js/misago.js.map

@@ -1 +1 @@
-{"version":3,"sources":["misago.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length",1,"module","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","timeout","setTimeout","len","run","clearTimeout","Item","fun","array","this","noop","process","nextTick","args","Array","arguments","push","prototype","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","name","cwd","chdir","dir","umask",2,"global","_interopRequireDefault","obj","__esModule","default","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","value","Misago","undefined","_orderedList","_orderedList2","_initializers","_context","initializer","item","after","before","context","_this","initOrder","orderedValues","forEach","fallback","has","misago","self","window","../../../misago/frontend/src/utils/ordered-list",3,"_ajax2","init","_index2","get","_index","_ajax","addInitializer","../../../../misago/frontend/src/index","../../../../misago/frontend/src/services/ajax",4,"_auth2","_store2","_localStorage2","_modal2","_auth","_modal","_store","_localStorage","../../../../misago/frontend/src/services/auth","../../../../misago/frontend/src/services/local-storage","../../../../misago/frontend/src/services/modal","../../../../misago/frontend/src/services/store",5,"_captcha2","_include2","_snackbar2","_captcha","_include","_snackbar","../../../../misago/frontend/src/services/captcha","../../../../misago/frontend/src/services/include","../../../../misago/frontend/src/services/snackbar",6,"_mountComponent2","_reactRedux","connect","_authMessage","select","_authMessage2","_mountComponent","../../../../../misago/frontend/src/components/auth-message","../../../../../misago/frontend/src/index","../../../../../misago/frontend/src/utils/mount-component","react-redux",7,"_bannedPage2","_bannedPage","../../../../../misago/frontend/src/utils/banned-page",8,"document","getElementById","_root","_root2","../../../../../misago/frontend/src/components/categories/root",9,"_routedComponent2","root","component","paths","_routedComponent","../../../../../misago/frontend/src/components/options/root","../../../../../misago/frontend/src/utils/routed-component",10,"absolute_url","../../../../../misago/frontend/src/components/profile/root",11,"_requestActivationLink2","_requestActivationLink","../../../../../misago/frontend/src/components/request-activation-link",12,"_requestPasswordReset2","_requestPasswordReset","../../../../../misago/frontend/src/components/request-password-reset",13,"_resetPasswordForm2","_resetPasswordForm","../../../../../misago/frontend/src/components/reset-password-form",14,"Snackbar","../../../../../misago/frontend/src/components/snackbar",15,"../../../../../misago/frontend/src/components/threads/root",16,"UserMenu","CompactUserMenu","../../../../../misago/frontend/src/components/user-menu/root",17,"../../../../../misago/frontend/src/components/users/root",18,19,20,"element","_mobileNavbarDropdown2","_mobileNavbarDropdown","../../../../misago/frontend/src/services/mobile-navbar-dropdown",21,22,"_moment2","locale","$","attr","_moment","moment",23,"_pageTitle2","forum_index_title","forum_name","_pageTitle","../../../../misago/frontend/src/services/page-title",24,"_polls2","_polls","../../../../misago/frontend/src/services/polls",25,"addReducer","assign","isAuthenticated","isAnonymous","user","initialState","../../../../../misago/frontend/src/reducers/auth","../../../../../misago/frontend/src/services/store",26,"dispatch","_profile","dehydrate","../../../../../misago/frontend/src/reducers/profile",27,"_profile2",28,"../../../../../misago/frontend/src/reducers/snackbar",29,"_tick2","_tick","../../../../../misago/frontend/src/reducers/tick",30,"_usernameHistory2","_usernameHistory","../../../../../misago/frontend/src/reducers/username-history",31,"_users2","_users","../../../../../misago/frontend/src/reducers/users",32,33,34,"setInterval","doTick","TICK_PERIOD","../../../../misago/frontend/src/reducers/tick",35,"_zxcvbn2","_zxcvbn","../../../../misago/frontend/src/services/zxcvbn",36,"isUndefinedOrNull","isBuffer","x","copy","slice","objEquiv","b","opts","isArguments","pSlice","deepEqual","ka","objectKeys","kb","sort","actual","expected","Date","getTime","strict","./lib/is_arguments.js","./lib/keys.js",37,"supported","object","toString","unsupported","hasOwnProperty","propertyIsEnumerable","supportsArgumentsClass",38,"shim","keys",39,"PUSH","REPLACE","POP",40,"loopAsync","turns","work","callback","done","isDone","next","currentTurn",41,"createKey","KeyPrefix","saveState","state","sessionStorage","setItem","JSON","stringify","error","SecurityError","NODE_ENV","_warning2","QuotaExceededError","readState","json","getItem","parse","_warning","_process","warning",42,"addEventListener","node","event","listener","attachEvent","removeEventListener","detachEvent","getHashPath","location","href","split","replaceHashPath","path","replace","pathname","search","getWindowPath","hash","go","history","getUserConfirmation","message","confirm","supportsHistory","ua","navigator","userAgent","indexOf","supportsGoWithoutReloadUsingHash",43,"canUseDOM","createElement",44,"createBrowserHistory","getCurrentLocation","historyState","_DOMUtils","_historyState","_DOMStateStorage","isSupported","replaceState","_extends","_parsePath2","createLocation","startPopStateListener","_ref","popStateListener","transitionTo","finishTransition","basename","action","_Actions","useRefresh","pushState","listenBefore","listenerCount","stopPopStateListener","unlisten","listen","registerTransitionHook","hook","unregisterTransitionHook","options","_ExecutionEnvironment","_invariant2","forceRefresh","_createDOMHistory2","source","_invariant","_createDOMHistory","_parsePath","./Actions","./DOMStateStorage","./DOMUtils","./ExecutionEnvironment","./createDOMHistory","./parsePath","invariant",45,"createDOMHistory","_createHistory2","_createHistory","./createHistory",46,"createRandomKey","Math","random","substr","locationsAreEqual","_deepEqual2","createHistory","transitionHooks","filter","getCurrent","pendingLocation","allKeys","updateLocation","newLocation","current","changeListeners","_location","confirmTransitionTo","_AsyncUtils","index","_runTransitionHook2","result","ok","nextLocation","prevPath","createPath","nextPath","prevIndex","nextIndex","goBack","goForward","keyLength","createHref","_createLocation3","setState","updateLocationState","DefaultKeyLength","_deprecate2","_deepEqual","_createLocation2","_runTransitionHook","_deprecate","./AsyncUtils","./createLocation","./deprecate","./runTransitionHook","deep-equal",47,"_fourthArg",48,"deprecate","fn",49,"extractPath","string","match","substring",50,"parsePath","_extractPath2","hashIndex","searchIndex","_extractPath","./extractPath",51,"runTransitionHook",52,"condition","format","c","d","argIndex","framesToPop",53,54,"_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","create","constructor","setPrototypeOf","__proto__","auth","signedIn","signedOut","_react","_react2","_class","_React$Component","getPrototypeOf","reload","interpolate","gettext","username","className","getClassName","getMessage","type","onClick","refresh","Component","react",55,"BASE_URL","size","url","id","avatar_hash","src","getSrc",56,"html","dangerouslySetInnerHTML","__html","plain","expires","isAfter","expires_on","fromNow","getReasonMessage","getExpirationMessage",57,"_loader","_loader2","Button","disabled","loading","children","defaultProps","./loader",58,"_lastActivity","_lastActivity2","_readIcon","_readIcon2","_stats","_stats2","category","css_class","subcategories","description","_this2","map","getSubcategorySubcategoryClass","_this3","getSubcategoryClass","getSubcategoryDescription","getSubcategorySubcategories","getHeadingClassName","getCategoryDescription","getSubcategories","./last-activity","./read-icon","./stats",59,"last_poster_url","last_poster_name","last_thread_url","last_thread_title","getLastPoster","last_post_on","acl","can_browse","can_see_all_threads","getThreadDetails","getLastActivity",60,"is_read","is_closed","getTitle","getIcon",61,"store","tick","_category","_category2","update","data","categories","startPolling","api","start","poll","frequency","../../index","../../services/polls","./category",62,"ngettext","threads","posts","getThreadsCount","getPostsCount",63,"_avatar","_button","_button2","cropAvatar","isLoading","avatarType","upload","cropit","post","api_url","avatar","crop","offset","zoom","then","onComplete","success","detail","rejection","status","showError","crop_tmp","crop_org","secret","getAvatarSecret","getAvatarHash","join","width","getAvatarSize","height","imageState","getImagePath","onImageLoaded","zoomLevel","imageSize","displayedWidth","offsetX","y","displayedHeight","offsetY","showIndex","../../services/ajax","../../services/snackbar","../avatar","../button",64,"Gallery","GalleryItem","_batch","_batch2","_Object$getPrototypeO","_temp","_ret","_len","_key","image","selection","_React$Component2","images","row","_React$Component3","_this4","save","response","_this5","galleries","../../utils/batch",65,"_avatar2","setGravatar","callApi","setGenerated","gravatar","showCrop","showUpload","showGallery","userPeview","getAvatarPreview","getGravatarButton","getCropButton","getUploadButton","getGalleryButton","../loader",66,"ChangeAvatarError","_crop","_crop2","_upload","_upload2","_gallery","_gallery2","_modalLoader","_modalLoader2","reason","getErrorReason","completeFlow","avatarHash","updateAvatar","role","data-dismiss","aria-label","aria-hidden","getBody","../../reducers/users","../../services/store","../modal-loader","./crop","./gallery","./index","./upload",67,"_fileSize","_fileSize2","pickFile","click","uploadFile","files","validationError","validateFile","preview","URL","createObjectURL","progress","FormData","append","uploaded","info","limit","filesize","invalidTypeMsg","allowed_mime_types","extensionFound","loweredFilename","toLowerCase","allowed_extensions","extension","extensions","getUploadRequirements","aria-valuenow","aria-valuemin","aria-valuemax","style","getUploadProgressLabel","onChange","getUploadProgress","renderCrop","renderUpload","../../utils/file-size",68,"dropdown","toggleNav","aria-haspopup","aria-expanded",69,"validation","isValidated","helpText","labelClass","htmlFor","label","controlClass","getFeedbackIcon","getFeedbackDescription","getFeedback","getHelpText","extra",70,"_defineProperty","_validators","validateRequired","required","bindInput","newState","formErrors","errors","validateField","handleSubmit","preventDefault","clean","promise","send","handleSuccess","handleError","validators","optional","validatedFields","fieldErrors","validate","field","requiredError","apiError","../services/snackbar","../utils/validators",71,"isControlled","isActive","activeClassName",72,73,74,"_panelMessage","_panelMessage2","_PanelMessage","icon","./panel-message",75,"_panelLoader","_panelLoader2","../../panel-loader",76,"next_on","next_change","../../panel-message",77,"_interopRequireWildcard","newObj","_form","_form2","_formGroup","_formGroup2","_Form","usernameContent","usernameMinLength","username_length_min","length_min","usernameMaxLength","username_length_max","length_max","phrases","changes_left","name_changes_expire","trim","complete","slug","onSubmit","for","../../../services/ajax","../../../services/snackbar","../../../utils/validators","../../button","../../form","../../form-group",78,"_formLoading","_formLoading2","_formLocked","_formLocked2","_usernameHistory3","addNameChange","updateUsername","isLoaded","set","parent","Promise","all","results","getChangeForm","changes","../../../index","../../../reducers/username-history","../../../reducers/users","../../../services/page-title","../../../services/store","../../username-history","./form","./form-loading","./form-locked",79,"_select","_select2","_yesNoSwitch","_yesNoSwitch2","is_hiding_presence","limits_private_thread_invites_to","subscribe_to_started_threads","subscribe_to_replied_threads","privateThreadInvitesChoices","subscribeToChoices","patchUser","iconOn","iconOff","labelOn","labelOff","choices","../../reducers/auth","../../services/page-title","../form","../form-group","../select","../yes-no-switch",80,"CompactNav","SideNav","_reactRouter","_li","_li2","option","Link","to","baseUrl","hideNav","../li","react-router",81,"username-history","_forumOptions2","_root4","_dropdownToggle","_dropdownToggle2","_navs","_forumOptions","_root3","_withDropdown","_withDropdown2","_WithDropdown","getCompactNavClassName","../dropdown-toggle","../with-dropdown","./change-username/root","./forum-options","./navs","./sign-in-credentials/root",82,"new_email","password","email","lengths","change_email","display",83,"new_password","repeat_password","passwordMinLength","change_password",84,"_changeEmail","_changeEmail2","_changePassword","_changePassword2","./change-email","./change-password",85,86,87,"LABELS","STYLES","_score","_password","_inputs","inputs","cacheStale","scorePassword","score","getScore","../services/zxcvbn",88,"_followButton","_followButton2","_nav","_nav2","_userStatus","_userStatus2","profile","StatusIcon","StatusLabel","rank","is_tab","joined_on","age","can_follow","can_moderate","data-toggle","getFollowButton","getModerationButton","getUserStatus","getUserRank","getUserTitle","getJoinedOn","getEmail","../user-status","./follow-button","./moderation/nav",89,"ban","initWithPreloadedData","pop","initWithoutPreloadedData","stop","user_message","staff_message","_title","getUserMessage","getStaffMessage","getPanelBody","../panel-loader","../panel-message",90,"is_followed","patchProfile","followers","follow","getLabel","../../reducers/profile",91,"_search","_search2","loadMore","isBusy","loadUsers","page","ev","count","more","pages","setSpecialProps","PRELOADED_DATA_KEY","TITLE","API_FILTER","_ajax$get","users","getEmptyMessage","showRank","cols","getMoreButton","placeholder","getListBody","../search","../users-list/root",92,"_followers","_followers2","_Followers","./followers",93,"_modalMessage","_modalMessage2","is_avatar_locked","avatar_lock_user_message","avatar_lock_staff_message","moderate_avatar","isValid","apiResponse","rows","getFormBody","getModalBody","../../modal-loader","../../modal-message","../../yes-no-switch",94,"moderate_username",95,"countdown","isDeleted","with_content","getButtonLabel","getDeletedBody","getForm","../../../services/polls",96,"_avatarControls","_avatarControls2","_changeUsername","_changeUsername2","_deleteAccount","_deleteAccount2","showAvatarDialog","show","showRenameDialog","showDeleteDialog","can_moderate_avatar","can_rename","can_delete","getAvatarButton","getRenameButton","getDeleteButton","../../../services/modal","./avatar-controls","./change-username","./delete-account",97,"meta","getMeta","_SideNav","toggleModeration","showSpecialOptions","getSpecialOptions",98,"COMPONENTS","_banDetails","_banDetails2","_follows","_follows2","_Header","_Header2","baseClass","getNavDropdown","Placeholder","route","follows","ban-details","./Header","./ban-details","./follows","./username-history",99,"loadChanges","emptyMessage","../../reducers/username-history","../username-history",100,"_register","_register2","showRegisterModal","account_activation","load","../services/captcha","../services/modal","./register.js",101,"RegisterComplete","RegisterForm","_passwordStrength","_passwordStrength2","captcha","validator","hide","aria-describedby","form","getLegalFootNote","activation","getLead","getSubscript","completeRegistration","signIn","../index","../services/ajax","../services/auth","../utils/banned-page","./button","./form-group","./password-strength",102,"LinkSent","RequestLinkForm","reset",103,"AccountInactivePage","RequestResetForm","_reactDom","_reactDom2","showInactivePage","getActivateButton","render","react-dom",104,"PasswordChangedPage","ResetPasswordForm","_signIn","_signIn2","showSignIn","softSignOut","remove","./sign-in.js",105,106,"change","choice","getChoice",107,"showActivation","find","val","getCsrfToken","submit","getActivationButton",108,"snackbar","TYPES_CLASSES","snackbarClass","isVisible","getSnackbarClass",109,110,"TabsNav","navLinks","active","lists","list","longName",111,"getLists","_route2","_route","./route",112,"_titleUtils","getPageTitle","getHeaderClassName","getGoBackButton","getCompactNavToggle","getTabsNav","getCompactNav","../threads-list/root","./title-utils",113,"special_role",114,"CompactGuestNav","GuestNav","GuestMenu","_registerButton","_registerButton2","showSignInModal","_GuestMenu","showGuestMenu","../../services/mobile-navbar-dropdown","../../services/modal","../register-button","../sign-in.js",115,"_guestNav","_userNav","UserNav","CompactUserNav","./guest-nav","./user-nav",116,"selectUserMenu","decision","changeAvatar","logout","showConnected","showUserMenu","../change-avatar/root",117,"is_banned","is_hidden","is_online_hidden","is_offline_hidden","is_online","is_offline","getClass","banned_until","ban_expires","last_click","getHelp",118,"_random","changed_by","changed_by_username","renderUserAvatar","renderUsername","old_username","new_username","changed_on","range","renderHistory","renderEmptyHistory","renderHistoryPreview","../utils/random","./avatar",119,"_userCard","_userCard2","_userPreview","_userPreview2","Pager","getColClassName","showStatus","./user-card","./user-preview",120,"getRankName","getUserJoinedOn","getFollowersCount",121,"../../utils/random",122,"days","trackedPeriod",123,"rankUrl","counter","../../avatar","../../user-status",124,"../../../utils/random",125,"_listItem","_listItem2","posters","getLeadMessage","./list-item",126,"_listEmpty","_listEmpty2","_listLoading","_listLoading2","_list","_list2","tracked_period","./list","./list-empty","./list-loading",127,"listUrl",128,"../../users-list/root",129,"_pager","_pager2","getPager","./pager",130,"_resetScroll","_resetScroll2","previous","first","page_range","getPreviousPage","getNextPage","getProgessBar","../../../utils/reset-scroll",131,"params","nextProps","getRankDescription","getComponent",132,"./active-posters/root","./rank/root",133,134,"toggle",135,"./utils/ordered-list",136,"patch","PATCH_USER","SIGN_IN","signOut","soft","SIGN_OUT","UPDATE_AVATAR","userId","_newState","UPDATE_USERNAME","_newState2","./users",137,"DEHYDRATE_PROFILE","PATCH_PROFILE","dehydrateStatus",138,"showSnackbar","SHOW_SNACKBAR","messageType","hideSnackbar","HIDE_SNACKBAR",139,"TICK",140,"changedBy","ADD_NAME_CHANGE","items","APPEND_HISTORY","DEHYDRATE_HISTORY","unshift","floor","now",141,"APPEND_USERS","DEHYDRATE_USERS",142,"_typeof","Symbol","iterator","Ajax","_cookieName","_csrfToken","_locks","cookieName","cookie","cookieRegex","RegExp","method","resolve","reject","xhr","headers","X-CSRFToken","contentType","dataType","jqXHR","responseJSON","statusText","ajax","lock","param","request","waiter","v","wait","processData","XMLHttpRequest","evt","lengthComputable","round","loaded","total",143,"Auth","local","modal","_local","syncSession","watchState","getState","watch","../reducers/auth",144,"Captcha","ReCaptcha","ReCaptchaComponent","QACaptcha","NoCaptcha","BaseCaptcha","include","_BaseCaptcha","_BaseCaptcha2","question","help_text","kwargs","grecaptcha","sitekey","siteKey","_BaseCaptcha3","recaptcha_site_key","captcha_type","../components/form-group",145,"Include","staticUrl","_staticUrl","_included","script","remote","cache",146,"storage","localStorage","LocalStorage","prefix","_prefix","_watchers","newValueJson","newValue","watcher","oldValue","itemString",147,"MobileNavbarDropdown","_element","_component","addClass","removeClass","../utils/mount-component",148,"Modal","unmountComponentAtNode",149,"PageTitle","indexTitle","forumName","_indexTitle","_forumName","finalTitle","pageLabel",150,"Polls","poolServer","_stopped","pollId",151,"HIDE_ANIMATION_LENGTH","MESSAGE_SHOW_LENGTH","_timeout","alert","../reducers/snackbar",152,"StoreWrapper","_redux","_reducers","_initialState","reducer","createStore","combineReducers","redux",153,"Zxcvbn","zxcvbn","_loadingPromise","_loadedPromise",154,"changeState","Provider","getStore","RedrawedBannedPage","../components/banned-page","../services/store",155,"rowWidth","padding",156,"bytes",157,"rootElementId","connected","rootElement","finalComponent",158,"OrderedList","isOrdered","_items","order","values","values_only","_order","unordered","insertItem","insertAt","ordering","ordered","splice","iterations",159,"int","min","max",160,"scrollTo",161,"routes","childRoutes","onEnter","nextState","Router","_createBrowserHistory","_createBrowserHistory2","history/lib/createBrowserHistory",162,"EMAIL","test","minLength","limitValue","returnMessage","limit_value","show_value","maxLength","settings","USERNAME","password_length_min"],"mappings":"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","file":"misago.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = setTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        setTimeout(drainQueue, 0);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],2:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Misago = undefined;\n\nvar _orderedList = require('../../../misago/frontend/src/utils/ordered-list');\n\nvar _orderedList2 = _interopRequireDefault(_orderedList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Misago = exports.Misago = function () {\n  function Misago() {\n    _classCallCheck(this, Misago);\n\n    this._initializers = [];\n    this._context = {};\n  }\n\n  _createClass(Misago, [{\n    key: 'addInitializer',\n    value: function addInitializer(initializer) {\n      this._initializers.push({\n        key: initializer.name,\n\n        item: initializer.initializer,\n\n        after: initializer.after,\n        before: initializer.before\n      });\n    }\n  }, {\n    key: 'init',\n    value: function init(context) {\n      var _this = this;\n\n      this._context = context;\n\n      var initOrder = new _orderedList2.default(this._initializers).orderedValues();\n      initOrder.forEach(function (initializer) {\n        initializer(_this);\n      });\n    }\n\n    // context accessors\n\n  }, {\n    key: 'has',\n    value: function has(key) {\n      return !!this._context[key];\n    }\n  }, {\n    key: 'get',\n    value: function get(key, fallback) {\n      if (this.has(key)) {\n        return this._context[key];\n      } else {\n        return fallback || undefined;\n      }\n    }\n  }, {\n    key: 'pop',\n    value: function pop(key) {\n      if (this.has(key)) {\n        var value = this._context[key];\n        this._context[key] = null;\n        return value;\n      } else {\n        return undefined;\n      }\n    }\n  }]);\n\n  return Misago;\n}();\n\n// create  singleton\n\nvar misago = new Misago();\n\n// expose it globally\nglobal.misago = misago;\n\n// and export it for tests and stuff\nexports.default = misago;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../../../misago/frontend/src/utils/ordered-list\":158}],3:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../../../misago/frontend/src/services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _ajax2.default.init(_index2.default.get('CSRF_COOKIE_NAME'));\n}\n\n_index2.default.addInitializer({\n  name: 'ajax',\n  initializer: initializer\n});\n\n},{\"../../../../misago/frontend/src/index\":135,\"../../../../misago/frontend/src/services/ajax\":142}],4:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _auth = require('../../../../misago/frontend/src/services/auth');\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _modal = require('../../../../misago/frontend/src/services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _store = require('../../../../misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _localStorage = require('../../../../misago/frontend/src/services/local-storage');\n\nvar _localStorage2 = _interopRequireDefault(_localStorage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _auth2.default.init(_store2.default, _localStorage2.default, _modal2.default);\n}\n\n_index2.default.addInitializer({\n  name: 'auth',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../misago/frontend/src/index\":135,\"../../../../misago/frontend/src/services/auth\":143,\"../../../../misago/frontend/src/services/local-storage\":146,\"../../../../misago/frontend/src/services/modal\":148,\"../../../../misago/frontend/src/services/store\":152}],5:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../../../misago/frontend/src/services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _captcha = require('../../../../misago/frontend/src/services/captcha');\n\nvar _captcha2 = _interopRequireDefault(_captcha);\n\nvar _include = require('../../../../misago/frontend/src/services/include');\n\nvar _include2 = _interopRequireDefault(_include);\n\nvar _snackbar = require('../../../../misago/frontend/src/services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  _captcha2.default.init(context, _ajax2.default, _include2.default, _snackbar2.default);\n}\n\n_index2.default.addInitializer({\n  name: 'captcha',\n  initializer: initializer\n});\n\n},{\"../../../../misago/frontend/src/index\":135,\"../../../../misago/frontend/src/services/ajax\":142,\"../../../../misago/frontend/src/services/captcha\":144,\"../../../../misago/frontend/src/services/include\":145,\"../../../../misago/frontend/src/services/snackbar\":151}],6:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _reactRedux = require('react-redux');\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _authMessage = require('../../../../../misago/frontend/src/components/auth-message');\n\nvar _authMessage2 = _interopRequireDefault(_authMessage);\n\nvar _mountComponent = require('../../../../../misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  (0, _mountComponent2.default)((0, _reactRedux.connect)(_authMessage.select)(_authMessage2.default), 'auth-message-mount');\n}\n\n_index2.default.addInitializer({\n  name: 'component:auth-message',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../misago/frontend/src/components/auth-message\":54,\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/utils/mount-component\":157,\"react-redux\":\"react-redux\"}],7:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _bannedPage = require('../../../../../misago/frontend/src/utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  if (context.has('BAN_MESSAGE')) {\n    (0, _bannedPage2.default)(context.get('BAN_MESSAGE'), false);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:baned-page',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/utils/banned-page\":154}],8:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _reactRedux = require('react-redux');\n\nvar _root = require('../../../../../misago/frontend/src/components/categories/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _mountComponent = require('../../../../../misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  if (document.getElementById('categories-mount')) {\n    (0, _mountComponent2.default)((0, _reactRedux.connect)(_root.select)(_root2.default), 'categories-mount');\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:reset-password-form',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../misago/frontend/src/components/categories/root\":61,\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/utils/mount-component\":157,\"react-redux\":\"react-redux\"}],9:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _root = require('../../../../../misago/frontend/src/components/options/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _routedComponent = require('../../../../../misago/frontend/src/utils/routed-component');\n\nvar _routedComponent2 = _interopRequireDefault(_routedComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  if (context.has('USER_OPTIONS')) {\n    (0, _routedComponent2.default)({\n      root: _index2.default.get('USERCP_URL'),\n      component: _root2.default,\n      paths: (0, _root.paths)()\n    });\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:options',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../misago/frontend/src/components/options/root\":81,\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/utils/routed-component\":161}],10:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _reactRedux = require('react-redux');\n\nvar _root = require('../../../../../misago/frontend/src/components/profile/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _routedComponent = require('../../../../../misago/frontend/src/utils/routed-component');\n\nvar _routedComponent2 = _interopRequireDefault(_routedComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  if (context.has('PROFILE') && context.has('PROFILE_PAGES')) {\n    (0, _routedComponent2.default)({\n      root: _index2.default.get('PROFILE').absolute_url,\n      component: (0, _reactRedux.connect)(_root.select)(_root2.default),\n      paths: (0, _root.paths)()\n    });\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:profile',\n  initializer: initializer,\n  after: 'reducer:profile-dehydrate'\n});\n\n},{\"../../../../../misago/frontend/src/components/profile/root\":98,\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/utils/routed-component\":161,\"react-redux\":\"react-redux\"}],11:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _requestActivationLink = require('../../../../../misago/frontend/src/components/request-activation-link');\n\nvar _requestActivationLink2 = _interopRequireDefault(_requestActivationLink);\n\nvar _mountComponent = require('../../../../../misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  if (document.getElementById('request-activation-link-mount')) {\n    (0, _mountComponent2.default)(_requestActivationLink2.default, 'request-activation-link-mount', false);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:request-activation-link',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../misago/frontend/src/components/request-activation-link\":102,\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/utils/mount-component\":157}],12:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _requestPasswordReset = require('../../../../../misago/frontend/src/components/request-password-reset');\n\nvar _requestPasswordReset2 = _interopRequireDefault(_requestPasswordReset);\n\nvar _mountComponent = require('../../../../../misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  if (document.getElementById('request-password-reset-mount')) {\n    (0, _mountComponent2.default)(_requestPasswordReset2.default, 'request-password-reset-mount', false);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:request-password-reset',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../misago/frontend/src/components/request-password-reset\":103,\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/utils/mount-component\":157}],13:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _resetPasswordForm = require('../../../../../misago/frontend/src/components/reset-password-form');\n\nvar _resetPasswordForm2 = _interopRequireDefault(_resetPasswordForm);\n\nvar _mountComponent = require('../../../../../misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  if (document.getElementById('reset-password-form-mount')) {\n    (0, _mountComponent2.default)(_resetPasswordForm2.default, 'reset-password-form-mount', false);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:reset-password-form',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../misago/frontend/src/components/reset-password-form\":104,\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/utils/mount-component\":157}],14:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _reactRedux = require('react-redux');\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _snackbar = require('../../../../../misago/frontend/src/components/snackbar');\n\nvar _mountComponent = require('../../../../../misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  (0, _mountComponent2.default)((0, _reactRedux.connect)(_snackbar.select)(_snackbar.Snackbar), 'snackbar-mount');\n}\n\n_index2.default.addInitializer({\n  name: 'component:snackbar',\n  initializer: initializer,\n  after: 'snackbar'\n});\n\n},{\"../../../../../misago/frontend/src/components/snackbar\":108,\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/utils/mount-component\":157,\"react-redux\":\"react-redux\"}],15:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _root = require('../../../../../misago/frontend/src/components/threads/root');\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _routedComponent = require('../../../../../misago/frontend/src/utils/routed-component');\n\nvar _routedComponent2 = _interopRequireDefault(_routedComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  if (context.has('THREADS') && context.has('CATEGORIES')) {\n    (0, _routedComponent2.default)({\n      paths: (0, _root.paths)()\n    });\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:threads',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../misago/frontend/src/components/threads/root\":111,\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/utils/routed-component\":161}],16:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _reactRedux = require('react-redux');\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _root = require('../../../../../misago/frontend/src/components/user-menu/root');\n\nvar _mountComponent = require('../../../../../misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  (0, _mountComponent2.default)((0, _reactRedux.connect)(_root.select)(_root.UserMenu), 'user-menu-mount');\n  (0, _mountComponent2.default)((0, _reactRedux.connect)(_root.select)(_root.CompactUserMenu), 'user-menu-compact-mount');\n}\n\n_index2.default.addInitializer({\n  name: 'component:user-menu',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../misago/frontend/src/components/user-menu/root\":115,\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/utils/mount-component\":157,\"react-redux\":\"react-redux\"}],17:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _root = require('../../../../../misago/frontend/src/components/users/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _routedComponent = require('../../../../../misago/frontend/src/utils/routed-component');\n\nvar _routedComponent2 = _interopRequireDefault(_routedComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  if (context.has('USERS_LISTS')) {\n    (0, _routedComponent2.default)({\n      root: _index2.default.get('USERS_LIST_URL'),\n      component: _root2.default,\n      paths: (0, _root.paths)()\n    });\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:users',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../misago/frontend/src/components/users/root\":132,\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/utils/routed-component\":161}],18:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _include = require('../../../../misago/frontend/src/services/include');\n\nvar _include2 = _interopRequireDefault(_include);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  _include2.default.init(context.get('STATIC_URL'));\n}\n\n_index2.default.addInitializer({\n  name: 'include',\n  initializer: initializer\n});\n\n},{\"../../../../misago/frontend/src/index\":135,\"../../../../misago/frontend/src/services/include\":145}],19:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _localStorage = require('../../../../misago/frontend/src/services/local-storage');\n\nvar _localStorage2 = _interopRequireDefault(_localStorage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _localStorage2.default.init('misago_');\n}\n\n_index2.default.addInitializer({\n  name: 'local-storage',\n  initializer: initializer\n});\n\n},{\"../../../../misago/frontend/src/index\":135,\"../../../../misago/frontend/src/services/local-storage\":146}],20:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _mobileNavbarDropdown = require('../../../../misago/frontend/src/services/mobile-navbar-dropdown');\n\nvar _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  var element = document.getElementById('mobile-navbar-dropdown-mount');\n  if (element) {\n    _mobileNavbarDropdown2.default.init(element);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'dropdown',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../misago/frontend/src/index\":135,\"../../../../misago/frontend/src/services/mobile-navbar-dropdown\":147}],21:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _modal = require('../../../../misago/frontend/src/services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  var element = document.getElementById('modal-mount');\n  if (element) {\n    _modal2.default.init(element);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'modal',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../misago/frontend/src/index\":135,\"../../../../misago/frontend/src/services/modal\":148}],22:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _index = require('../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _moment2.default.locale($('html').attr('lang'));\n}\n\n_index2.default.addInitializer({\n  name: 'moment',\n  initializer: initializer\n});\n\n},{\"../../../../misago/frontend/src/index\":135,\"moment\":\"moment\"}],23:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _pageTitle = require('../../../../misago/frontend/src/services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  _pageTitle2.default.init(context.get('SETTINGS').forum_index_title, context.get('SETTINGS').forum_name);\n}\n\n_index2.default.addInitializer({\n  name: 'page-title',\n  initializer: initializer\n});\n\n},{\"../../../../misago/frontend/src/index\":135,\"../../../../misago/frontend/src/services/page-title\":149}],24:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../../../misago/frontend/src/services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../../../misago/frontend/src/services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _polls = require('../../../../misago/frontend/src/services/polls');\n\nvar _polls2 = _interopRequireDefault(_polls);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _polls2.default.init(_ajax2.default, _snackbar2.default);\n}\n\n_index2.default.addInitializer({\n  name: 'polls',\n  initializer: initializer\n});\n\n},{\"../../../../misago/frontend/src/index\":135,\"../../../../misago/frontend/src/services/ajax\":142,\"../../../../misago/frontend/src/services/polls\":150,\"../../../../misago/frontend/src/services/snackbar\":151}],25:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _auth = require('../../../../../misago/frontend/src/reducers/auth');\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _store = require('../../../../../misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  _store2.default.addReducer('auth', _auth2.default, Object.assign({\n    'isAuthenticated': context.get('isAuthenticated'),\n    'isAnonymous': !context.get('isAuthenticated'),\n\n    'user': context.get('user')\n  }, _auth.initialState));\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:auth',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/reducers/auth\":136,\"../../../../../misago/frontend/src/services/store\":152}],26:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _profile = require('../../../../../misago/frontend/src/reducers/profile');\n\nvar _store = require('../../../../../misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  if (_index2.default.has('PROFILE')) {\n    _store2.default.dispatch((0, _profile.dehydrate)(_index2.default.get('PROFILE')));\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:profile-dehydrate',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/reducers/profile\":137,\"../../../../../misago/frontend/src/services/store\":152}],27:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _profile = require('../../../../../misago/frontend/src/reducers/profile');\n\nvar _profile2 = _interopRequireDefault(_profile);\n\nvar _store = require('../../../../../misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.addReducer('profile', _profile2.default, {});\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:profile',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/reducers/profile\":137,\"../../../../../misago/frontend/src/services/store\":152}],28:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _snackbar = require('../../../../../misago/frontend/src/reducers/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../../../../misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.addReducer('snackbar', _snackbar2.default, _snackbar.initialState);\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:snackbar',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/reducers/snackbar\":138,\"../../../../../misago/frontend/src/services/store\":152}],29:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _tick = require('../../../../../misago/frontend/src/reducers/tick');\n\nvar _tick2 = _interopRequireDefault(_tick);\n\nvar _store = require('../../../../../misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.addReducer('tick', _tick2.default, _tick.initialState);\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:tick',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/reducers/tick\":139,\"../../../../../misago/frontend/src/services/store\":152}],30:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _usernameHistory = require('../../../../../misago/frontend/src/reducers/username-history');\n\nvar _usernameHistory2 = _interopRequireDefault(_usernameHistory);\n\nvar _store = require('../../../../../misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.addReducer('username-history', _usernameHistory2.default, []);\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:username-history',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/reducers/username-history\":140,\"../../../../../misago/frontend/src/services/store\":152}],31:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _users = require('../../../../../misago/frontend/src/reducers/users');\n\nvar _users2 = _interopRequireDefault(_users);\n\nvar _store = require('../../../../../misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.addReducer('users', _users2.default, []);\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:users',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../misago/frontend/src/index\":135,\"../../../../../misago/frontend/src/reducers/users\":141,\"../../../../../misago/frontend/src/services/store\":152}],32:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _snackbar = require('../../../../misago/frontend/src/services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../../../misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _snackbar2.default.init(_store2.default);\n}\n\n_index2.default.addInitializer({\n  name: 'snackbar',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../misago/frontend/src/index\":135,\"../../../../misago/frontend/src/services/snackbar\":151,\"../../../../misago/frontend/src/services/store\":152}],33:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _store = require('../../../../misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.init();\n}\n\n_index2.default.addInitializer({\n  name: 'store',\n  initializer: initializer,\n  before: '_end'\n});\n\n},{\"../../../../misago/frontend/src/index\":135,\"../../../../misago/frontend/src/services/store\":152}],34:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _tick = require('../../../../misago/frontend/src/reducers/tick');\n\nvar _store = require('../../../../misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar TICK_PERIOD = 50 * 1000; //do the tick every 50s\n\nfunction initializer() {\n  window.setInterval(function () {\n    _store2.default.dispatch((0, _tick.doTick)());\n  }, TICK_PERIOD);\n}\n\n_index2.default.addInitializer({\n  name: 'tick-start',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../misago/frontend/src/index\":135,\"../../../../misago/frontend/src/reducers/tick\":139,\"../../../../misago/frontend/src/services/store\":152}],35:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _include = require('../../../../misago/frontend/src/services/include');\n\nvar _include2 = _interopRequireDefault(_include);\n\nvar _zxcvbn = require('../../../../misago/frontend/src/services/zxcvbn');\n\nvar _zxcvbn2 = _interopRequireDefault(_zxcvbn);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _zxcvbn2.default.init(_include2.default);\n}\n\n_index2.default.addInitializer({\n  name: 'zxcvbn',\n  initializer: initializer\n});\n\n},{\"../../../../misago/frontend/src/index\":135,\"../../../../misago/frontend/src/services/include\":145,\"../../../../misago/frontend/src/services/zxcvbn\":153}],36:[function(require,module,exports){\nvar pSlice = Array.prototype.slice;\nvar objectKeys = require('./lib/keys.js');\nvar isArguments = require('./lib/is_arguments.js');\n\nvar deepEqual = module.exports = function (actual, expected, opts) {\n  if (!opts) opts = {};\n  // 7.1. All identical values are equivalent, as determined by ===.\n  if (actual === expected) {\n    return true;\n\n  } else if (actual instanceof Date && expected instanceof Date) {\n    return actual.getTime() === expected.getTime();\n\n  // 7.3. Other pairs that do not both pass typeof value == 'object',\n  // equivalence is determined by ==.\n  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n    return opts.strict ? actual === expected : actual == expected;\n\n  // 7.4. For all other Object pairs, including Array objects, equivalence is\n  // determined by having the same number of owned properties (as verified\n  // with Object.prototype.hasOwnProperty.call), the same set of keys\n  // (although not necessarily the same order), equivalent values for every\n  // corresponding key, and an identical 'prototype' property. Note: this\n  // accounts for both named and indexed properties on Arrays.\n  } else {\n    return objEquiv(actual, expected, opts);\n  }\n}\n\nfunction isUndefinedOrNull(value) {\n  return value === null || value === undefined;\n}\n\nfunction isBuffer (x) {\n  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\n  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n    return false;\n  }\n  if (x.length > 0 && typeof x[0] !== 'number') return false;\n  return true;\n}\n\nfunction objEquiv(a, b, opts) {\n  var i, key;\n  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n    return false;\n  // an identical 'prototype' property.\n  if (a.prototype !== b.prototype) return false;\n  //~~~I've managed to break Object.keys through screwy arguments passing.\n  //   Converting to array solves the problem.\n  if (isArguments(a)) {\n    if (!isArguments(b)) {\n      return false;\n    }\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return deepEqual(a, b, opts);\n  }\n  if (isBuffer(a)) {\n    if (!isBuffer(b)) {\n      return false;\n    }\n    if (a.length !== b.length) return false;\n    for (i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) return false;\n    }\n    return true;\n  }\n  try {\n    var ka = objectKeys(a),\n        kb = objectKeys(b);\n  } catch (e) {//happens when one is a string literal and the other isn't\n    return false;\n  }\n  // having the same number of owned properties (keys incorporates\n  // hasOwnProperty)\n  if (ka.length != kb.length)\n    return false;\n  //the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  //~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  //equivalent values for every corresponding key, and\n  //~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!deepEqual(a[key], b[key], opts)) return false;\n  }\n  return typeof a === typeof b;\n}\n\n},{\"./lib/is_arguments.js\":37,\"./lib/keys.js\":38}],37:[function(require,module,exports){\nvar supportsArgumentsClass = (function(){\n  return Object.prototype.toString.call(arguments)\n})() == '[object Arguments]';\n\nexports = module.exports = supportsArgumentsClass ? supported : unsupported;\n\nexports.supported = supported;\nfunction supported(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n};\n\nexports.unsupported = unsupported;\nfunction unsupported(object){\n  return object &&\n    typeof object == 'object' &&\n    typeof object.length == 'number' &&\n    Object.prototype.hasOwnProperty.call(object, 'callee') &&\n    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\n    false;\n};\n\n},{}],38:[function(require,module,exports){\nexports = module.exports = typeof Object.keys === 'function'\n  ? Object.keys : shim;\n\nexports.shim = shim;\nfunction shim (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n}\n\n},{}],39:[function(require,module,exports){\n/**\n * Indicates that navigation was caused by a call to history.push.\n */\n'use strict';\n\nexports.__esModule = true;\nvar PUSH = 'PUSH';\n\nexports.PUSH = PUSH;\n/**\n * Indicates that navigation was caused by a call to history.replace.\n */\nvar REPLACE = 'REPLACE';\n\nexports.REPLACE = REPLACE;\n/**\n * Indicates that navigation was caused by some other action such\n * as using a browser's back/forward buttons and/or manually manipulating\n * the URL in a browser's location bar. This is the default.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate\n * for more information.\n */\nvar POP = 'POP';\n\nexports.POP = POP;\nexports['default'] = {\n  PUSH: PUSH,\n  REPLACE: REPLACE,\n  POP: POP\n};\n},{}],40:[function(require,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\nexports.loopAsync = loopAsync;\n\nfunction loopAsync(turns, work, callback) {\n  var currentTurn = 0;\n  var isDone = false;\n\n  function done() {\n    isDone = true;\n    callback.apply(this, arguments);\n  }\n\n  function next() {\n    if (isDone) return;\n\n    if (currentTurn < turns) {\n      work.call(this, currentTurn++, next, done);\n    } else {\n      done.apply(this, arguments);\n    }\n  }\n\n  next();\n}\n},{}],41:[function(require,module,exports){\n(function (process){\n/*eslint-disable no-empty */\n'use strict';\n\nexports.__esModule = true;\nexports.saveState = saveState;\nexports.readState = readState;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar KeyPrefix = '@@History/';\nvar QuotaExceededError = 'QuotaExceededError';\nvar SecurityError = 'SecurityError';\n\nfunction createKey(key) {\n  return KeyPrefix + key;\n}\n\nfunction saveState(key, state) {\n  try {\n    window.sessionStorage.setItem(createKey(key), JSON.stringify(state));\n  } catch (error) {\n    if (error.name === SecurityError) {\n      // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any\n      // attempt to access window.sessionStorage.\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available due to security settings') : undefined;\n\n      return;\n    }\n\n    if (error.name === QuotaExceededError && window.sessionStorage.length === 0) {\n      // Safari \"private mode\" throws QuotaExceededError.\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available in Safari private mode') : undefined;\n\n      return;\n    }\n\n    throw error;\n  }\n}\n\nfunction readState(key) {\n  var json = undefined;\n  try {\n    json = window.sessionStorage.getItem(createKey(key));\n  } catch (error) {\n    if (error.name === SecurityError) {\n      // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any\n      // attempt to access window.sessionStorage.\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to read state; sessionStorage is not available due to security settings') : undefined;\n\n      return null;\n    }\n  }\n\n  if (json) {\n    try {\n      return JSON.parse(json);\n    } catch (error) {\n      // Ignore invalid JSON.\n    }\n  }\n\n  return null;\n}\n}).call(this,require('_process'))\n},{\"_process\":1,\"warning\":53}],42:[function(require,module,exports){\n'use strict';\n\nexports.__esModule = true;\nexports.addEventListener = addEventListener;\nexports.removeEventListener = removeEventListener;\nexports.getHashPath = getHashPath;\nexports.replaceHashPath = replaceHashPath;\nexports.getWindowPath = getWindowPath;\nexports.go = go;\nexports.getUserConfirmation = getUserConfirmation;\nexports.supportsHistory = supportsHistory;\nexports.supportsGoWithoutReloadUsingHash = supportsGoWithoutReloadUsingHash;\n\nfunction addEventListener(node, event, listener) {\n  if (node.addEventListener) {\n    node.addEventListener(event, listener, false);\n  } else {\n    node.attachEvent('on' + event, listener);\n  }\n}\n\nfunction removeEventListener(node, event, listener) {\n  if (node.removeEventListener) {\n    node.removeEventListener(event, listener, false);\n  } else {\n    node.detachEvent('on' + event, listener);\n  }\n}\n\nfunction getHashPath() {\n  // We can't use window.location.hash here because it's not\n  // consistent across browsers - Firefox will pre-decode it!\n  return window.location.href.split('#')[1] || '';\n}\n\nfunction replaceHashPath(path) {\n  window.location.replace(window.location.pathname + window.location.search + '#' + path);\n}\n\nfunction getWindowPath() {\n  return window.location.pathname + window.location.search + window.location.hash;\n}\n\nfunction go(n) {\n  if (n) window.history.go(n);\n}\n\nfunction getUserConfirmation(message, callback) {\n  callback(window.confirm(message));\n}\n\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586\n */\n\nfunction supportsHistory() {\n  var ua = navigator.userAgent;\n  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) {\n    return false;\n  }\n  // FIXME: Work around our browser history not working correctly on Chrome\n  // iOS: https://github.com/rackt/react-router/issues/2565\n  if (ua.indexOf('CriOS') !== -1) {\n    return false;\n  }\n  return window.history && 'pushState' in window.history;\n}\n\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n  var ua = navigator.userAgent;\n  return ua.indexOf('Firefox') === -1;\n}\n},{}],43:[function(require,module,exports){\n'use strict';\n\nexports.__esModule = true;\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nexports.canUseDOM = canUseDOM;\n},{}],44:[function(require,module,exports){\n(function (process){\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _Actions = require('./Actions');\n\nvar _ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar _DOMUtils = require('./DOMUtils');\n\nvar _DOMStateStorage = require('./DOMStateStorage');\n\nvar _createDOMHistory = require('./createDOMHistory');\n\nvar _createDOMHistory2 = _interopRequireDefault(_createDOMHistory);\n\nvar _parsePath = require('./parsePath');\n\nvar _parsePath2 = _interopRequireDefault(_parsePath);\n\n/**\n * Creates and returns a history object that uses HTML5's history API\n * (pushState, replaceState, and the popstate event) to manage history.\n * This is the recommended method of managing history in browsers because\n * it provides the cleanest URLs.\n *\n * Note: In browsers that do not support the HTML5 history API full\n * page reloads will be used to preserve URLs.\n */\nfunction createBrowserHistory() {\n  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n  !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Browser history needs a DOM') : _invariant2['default'](false) : undefined;\n\n  var forceRefresh = options.forceRefresh;\n\n  var isSupported = _DOMUtils.supportsHistory();\n  var useRefresh = !isSupported || forceRefresh;\n\n  function getCurrentLocation(historyState) {\n    historyState = historyState || window.history.state || {};\n\n    var path = _DOMUtils.getWindowPath();\n    var _historyState = historyState;\n    var key = _historyState.key;\n\n    var state = undefined;\n    if (key) {\n      state = _DOMStateStorage.readState(key);\n    } else {\n      state = null;\n      key = history.createKey();\n\n      if (isSupported) window.history.replaceState(_extends({}, historyState, { key: key }), null, path);\n    }\n\n    var location = _parsePath2['default'](path);\n\n    return history.createLocation(_extends({}, location, { state: state }), undefined, key);\n  }\n\n  function startPopStateListener(_ref) {\n    var transitionTo = _ref.transitionTo;\n\n    function popStateListener(event) {\n      if (event.state === undefined) return; // Ignore extraneous popstate events in WebKit.\n\n      transitionTo(getCurrentLocation(event.state));\n    }\n\n    _DOMUtils.addEventListener(window, 'popstate', popStateListener);\n\n    return function () {\n      _DOMUtils.removeEventListener(window, 'popstate', popStateListener);\n    };\n  }\n\n  function finishTransition(location) {\n    var basename = location.basename;\n    var pathname = location.pathname;\n    var search = location.search;\n    var hash = location.hash;\n    var state = location.state;\n    var action = location.action;\n    var key = location.key;\n\n    if (action === _Actions.POP) return; // Nothing to do.\n\n    _DOMStateStorage.saveState(key, state);\n\n    var path = (basename || '') + pathname + search + hash;\n    var historyState = {\n      key: key\n    };\n\n    if (action === _Actions.PUSH) {\n      if (useRefresh) {\n        window.location.href = path;\n        return false; // Prevent location update.\n      } else {\n          window.history.pushState(historyState, null, path);\n        }\n    } else {\n      // REPLACE\n      if (useRefresh) {\n        window.location.replace(path);\n        return false; // Prevent location update.\n      } else {\n          window.history.replaceState(historyState, null, path);\n        }\n    }\n  }\n\n  var history = _createDOMHistory2['default'](_extends({}, options, {\n    getCurrentLocation: getCurrentLocation,\n    finishTransition: finishTransition,\n    saveState: _DOMStateStorage.saveState\n  }));\n\n  var listenerCount = 0,\n      stopPopStateListener = undefined;\n\n  function listenBefore(listener) {\n    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);\n\n    var unlisten = history.listenBefore(listener);\n\n    return function () {\n      unlisten();\n\n      if (--listenerCount === 0) stopPopStateListener();\n    };\n  }\n\n  function listen(listener) {\n    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);\n\n    var unlisten = history.listen(listener);\n\n    return function () {\n      unlisten();\n\n      if (--listenerCount === 0) stopPopStateListener();\n    };\n  }\n\n  // deprecated\n  function registerTransitionHook(hook) {\n    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);\n\n    history.registerTransitionHook(hook);\n  }\n\n  // deprecated\n  function unregisterTransitionHook(hook) {\n    history.unregisterTransitionHook(hook);\n\n    if (--listenerCount === 0) stopPopStateListener();\n  }\n\n  return _extends({}, history, {\n    listenBefore: listenBefore,\n    listen: listen,\n    registerTransitionHook: registerTransitionHook,\n    unregisterTransitionHook: unregisterTransitionHook\n  });\n}\n\nexports['default'] = createBrowserHistory;\nmodule.exports = exports['default'];\n}).call(this,require('_process'))\n},{\"./Actions\":39,\"./DOMStateStorage\":41,\"./DOMUtils\":42,\"./ExecutionEnvironment\":43,\"./createDOMHistory\":45,\"./parsePath\":50,\"_process\":1,\"invariant\":52}],45:[function(require,module,exports){\n(function (process){\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar _DOMUtils = require('./DOMUtils');\n\nvar _createHistory = require('./createHistory');\n\nvar _createHistory2 = _interopRequireDefault(_createHistory);\n\nfunction createDOMHistory(options) {\n  var history = _createHistory2['default'](_extends({\n    getUserConfirmation: _DOMUtils.getUserConfirmation\n  }, options, {\n    go: _DOMUtils.go\n  }));\n\n  function listen(listener) {\n    !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'DOM history needs a DOM') : _invariant2['default'](false) : undefined;\n\n    return history.listen(listener);\n  }\n\n  return _extends({}, history, {\n    listen: listen\n  });\n}\n\nexports['default'] = createDOMHistory;\nmodule.exports = exports['default'];\n}).call(this,require('_process'))\n},{\"./DOMUtils\":42,\"./ExecutionEnvironment\":43,\"./createHistory\":46,\"_process\":1,\"invariant\":52}],46:[function(require,module,exports){\n//import warning from 'warning'\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _deepEqual = require('deep-equal');\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _AsyncUtils = require('./AsyncUtils');\n\nvar _Actions = require('./Actions');\n\nvar _createLocation2 = require('./createLocation');\n\nvar _createLocation3 = _interopRequireDefault(_createLocation2);\n\nvar _runTransitionHook = require('./runTransitionHook');\n\nvar _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);\n\nvar _parsePath = require('./parsePath');\n\nvar _parsePath2 = _interopRequireDefault(_parsePath);\n\nvar _deprecate = require('./deprecate');\n\nvar _deprecate2 = _interopRequireDefault(_deprecate);\n\nfunction createRandomKey(length) {\n  return Math.random().toString(36).substr(2, length);\n}\n\nfunction locationsAreEqual(a, b) {\n  return a.pathname === b.pathname && a.search === b.search &&\n  //a.action === b.action && // Different action !== location change.\n  a.key === b.key && _deepEqual2['default'](a.state, b.state);\n}\n\nvar DefaultKeyLength = 6;\n\nfunction createHistory() {\n  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n  var getCurrentLocation = options.getCurrentLocation;\n  var finishTransition = options.finishTransition;\n  var saveState = options.saveState;\n  var go = options.go;\n  var keyLength = options.keyLength;\n  var getUserConfirmation = options.getUserConfirmation;\n\n  if (typeof keyLength !== 'number') keyLength = DefaultKeyLength;\n\n  var transitionHooks = [];\n\n  function listenBefore(hook) {\n    transitionHooks.push(hook);\n\n    return function () {\n      transitionHooks = transitionHooks.filter(function (item) {\n        return item !== hook;\n      });\n    };\n  }\n\n  var allKeys = [];\n  var changeListeners = [];\n  var location = undefined;\n\n  function getCurrent() {\n    if (pendingLocation && pendingLocation.action === _Actions.POP) {\n      return allKeys.indexOf(pendingLocation.key);\n    } else if (location) {\n      return allKeys.indexOf(location.key);\n    } else {\n      return -1;\n    }\n  }\n\n  function updateLocation(newLocation) {\n    var current = getCurrent();\n\n    location = newLocation;\n\n    if (location.action === _Actions.PUSH) {\n      allKeys = [].concat(allKeys.slice(0, current + 1), [location.key]);\n    } else if (location.action === _Actions.REPLACE) {\n      allKeys[current] = location.key;\n    }\n\n    changeListeners.forEach(function (listener) {\n      listener(location);\n    });\n  }\n\n  function listen(listener) {\n    changeListeners.push(listener);\n\n    if (location) {\n      listener(location);\n    } else {\n      var _location = getCurrentLocation();\n      allKeys = [_location.key];\n      updateLocation(_location);\n    }\n\n    return function () {\n      changeListeners = changeListeners.filter(function (item) {\n        return item !== listener;\n      });\n    };\n  }\n\n  function confirmTransitionTo(location, callback) {\n    _AsyncUtils.loopAsync(transitionHooks.length, function (index, next, done) {\n      _runTransitionHook2['default'](transitionHooks[index], location, function (result) {\n        if (result != null) {\n          done(result);\n        } else {\n          next();\n        }\n      });\n    }, function (message) {\n      if (getUserConfirmation && typeof message === 'string') {\n        getUserConfirmation(message, function (ok) {\n          callback(ok !== false);\n        });\n      } else {\n        callback(message !== false);\n      }\n    });\n  }\n\n  var pendingLocation = undefined;\n\n  function transitionTo(nextLocation) {\n    if (location && locationsAreEqual(location, nextLocation)) return; // Nothing to do.\n\n    pendingLocation = nextLocation;\n\n    confirmTransitionTo(nextLocation, function (ok) {\n      if (pendingLocation !== nextLocation) return; // Transition was interrupted.\n\n      if (ok) {\n        // treat PUSH to current path like REPLACE to be consistent with browsers\n        if (nextLocation.action === _Actions.PUSH) {\n          var prevPath = createPath(location);\n          var nextPath = createPath(nextLocation);\n\n          if (nextPath === prevPath) nextLocation.action = _Actions.REPLACE;\n        }\n\n        if (finishTransition(nextLocation) !== false) updateLocation(nextLocation);\n      } else if (location && nextLocation.action === _Actions.POP) {\n        var prevIndex = allKeys.indexOf(location.key);\n        var nextIndex = allKeys.indexOf(nextLocation.key);\n\n        if (prevIndex !== -1 && nextIndex !== -1) go(prevIndex - nextIndex); // Restore the URL.\n      }\n    });\n  }\n\n  function push(location) {\n    transitionTo(createLocation(location, _Actions.PUSH, createKey()));\n  }\n\n  function replace(location) {\n    transitionTo(createLocation(location, _Actions.REPLACE, createKey()));\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  function createKey() {\n    return createRandomKey(keyLength);\n  }\n\n  function createPath(location) {\n    if (location == null || typeof location === 'string') return location;\n\n    var pathname = location.pathname;\n    var search = location.search;\n    var hash = location.hash;\n\n    var result = pathname;\n\n    if (search) result += search;\n\n    if (hash) result += hash;\n\n    return result;\n  }\n\n  function createHref(location) {\n    return createPath(location);\n  }\n\n  function createLocation(location, action) {\n    var key = arguments.length <= 2 || arguments[2] === undefined ? createKey() : arguments[2];\n\n    if (typeof action === 'object') {\n      //warning(\n      //  false,\n      //  'The state (2nd) argument to history.createLocation is deprecated; use a ' +\n      //  'location descriptor instead'\n      //)\n\n      if (typeof location === 'string') location = _parsePath2['default'](location);\n\n      location = _extends({}, location, { state: action });\n\n      action = key;\n      key = arguments[3] || createKey();\n    }\n\n    return _createLocation3['default'](location, action, key);\n  }\n\n  // deprecated\n  function setState(state) {\n    if (location) {\n      updateLocationState(location, state);\n      updateLocation(location);\n    } else {\n      updateLocationState(getCurrentLocation(), state);\n    }\n  }\n\n  function updateLocationState(location, state) {\n    location.state = _extends({}, location.state, state);\n    saveState(location.key, location.state);\n  }\n\n  // deprecated\n  function registerTransitionHook(hook) {\n    if (transitionHooks.indexOf(hook) === -1) transitionHooks.push(hook);\n  }\n\n  // deprecated\n  function unregisterTransitionHook(hook) {\n    transitionHooks = transitionHooks.filter(function (item) {\n      return item !== hook;\n    });\n  }\n\n  // deprecated\n  function pushState(state, path) {\n    if (typeof path === 'string') path = _parsePath2['default'](path);\n\n    push(_extends({ state: state }, path));\n  }\n\n  // deprecated\n  function replaceState(state, path) {\n    if (typeof path === 'string') path = _parsePath2['default'](path);\n\n    replace(_extends({ state: state }, path));\n  }\n\n  return {\n    listenBefore: listenBefore,\n    listen: listen,\n    transitionTo: transitionTo,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    createKey: createKey,\n    createPath: createPath,\n    createHref: createHref,\n    createLocation: createLocation,\n\n    setState: _deprecate2['default'](setState, 'setState is deprecated; use location.key to save state instead'),\n    registerTransitionHook: _deprecate2['default'](registerTransitionHook, 'registerTransitionHook is deprecated; use listenBefore instead'),\n    unregisterTransitionHook: _deprecate2['default'](unregisterTransitionHook, 'unregisterTransitionHook is deprecated; use the callback returned from listenBefore instead'),\n    pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'),\n    replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead')\n  };\n}\n\nexports['default'] = createHistory;\nmodule.exports = exports['default'];\n},{\"./Actions\":39,\"./AsyncUtils\":40,\"./createLocation\":47,\"./deprecate\":48,\"./parsePath\":50,\"./runTransitionHook\":51,\"deep-equal\":36}],47:[function(require,module,exports){\n//import warning from 'warning'\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _Actions = require('./Actions');\n\nvar _parsePath = require('./parsePath');\n\nvar _parsePath2 = _interopRequireDefault(_parsePath);\n\nfunction createLocation() {\n  var location = arguments.length <= 0 || arguments[0] === undefined ? '/' : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? _Actions.POP : arguments[1];\n  var key = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2];\n\n  var _fourthArg = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3];\n\n  if (typeof location === 'string') location = _parsePath2['default'](location);\n\n  if (typeof action === 'object') {\n    //warning(\n    //  false,\n    //  'The state (2nd) argument to createLocation is deprecated; use a ' +\n    //  'location descriptor instead'\n    //)\n\n    location = _extends({}, location, { state: action });\n\n    action = key || _Actions.POP;\n    key = _fourthArg;\n  }\n\n  var pathname = location.pathname || '/';\n  var search = location.search || '';\n  var hash = location.hash || '';\n  var state = location.state || null;\n\n  return {\n    pathname: pathname,\n    search: search,\n    hash: hash,\n    state: state,\n    action: action,\n    key: key\n  };\n}\n\nexports['default'] = createLocation;\nmodule.exports = exports['default'];\n},{\"./Actions\":39,\"./parsePath\":50}],48:[function(require,module,exports){\n//import warning from 'warning'\n\n\"use strict\";\n\nexports.__esModule = true;\nfunction deprecate(fn) {\n  return fn;\n  //return function () {\n  //  warning(false, '[history] ' + message)\n  //  return fn.apply(this, arguments)\n  //}\n}\n\nexports[\"default\"] = deprecate;\nmodule.exports = exports[\"default\"];\n},{}],49:[function(require,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\nfunction extractPath(string) {\n  var match = string.match(/^https?:\\/\\/[^\\/]*/);\n\n  if (match == null) return string;\n\n  return string.substring(match[0].length);\n}\n\nexports[\"default\"] = extractPath;\nmodule.exports = exports[\"default\"];\n},{}],50:[function(require,module,exports){\n(function (process){\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _extractPath = require('./extractPath');\n\nvar _extractPath2 = _interopRequireDefault(_extractPath);\n\nfunction parsePath(path) {\n  var pathname = _extractPath2['default'](path);\n  var search = '';\n  var hash = '';\n\n  process.env.NODE_ENV !== 'production' ? _warning2['default'](path === pathname, 'A path must be pathname + search + hash only, not a fully qualified URL like \"%s\"', path) : undefined;\n\n  var hashIndex = pathname.indexOf('#');\n  if (hashIndex !== -1) {\n    hash = pathname.substring(hashIndex);\n    pathname = pathname.substring(0, hashIndex);\n  }\n\n  var searchIndex = pathname.indexOf('?');\n  if (searchIndex !== -1) {\n    search = pathname.substring(searchIndex);\n    pathname = pathname.substring(0, searchIndex);\n  }\n\n  if (pathname === '') pathname = '/';\n\n  return {\n    pathname: pathname,\n    search: search,\n    hash: hash\n  };\n}\n\nexports['default'] = parsePath;\nmodule.exports = exports['default'];\n}).call(this,require('_process'))\n},{\"./extractPath\":49,\"_process\":1,\"warning\":53}],51:[function(require,module,exports){\n(function (process){\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction runTransitionHook(hook, location, callback) {\n  var result = hook(location, callback);\n\n  if (hook.length < 2) {\n    // Assume the hook runs synchronously and automatically\n    // call the callback with the return value.\n    callback(result);\n  } else {\n    process.env.NODE_ENV !== 'production' ? _warning2['default'](result === undefined, 'You should not \"return\" in a transition hook with a callback argument; call the callback instead') : undefined;\n  }\n}\n\nexports['default'] = runTransitionHook;\nmodule.exports = exports['default'];\n}).call(this,require('_process'))\n},{\"_process\":1,\"warning\":53}],52:[function(require,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n  if (\"production\" !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error(\n        'Minified exception occurred; use the non-minified dev environment ' +\n        'for the full error message and additional helpful warnings.'\n      );\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(\n        format.replace(/%s/g, function() { return args[argIndex++]; })\n      );\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n\n},{}],53:[function(require,module,exports){\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (\"production\" !== 'production') {\n  warning = function(condition, format, args) {\n    var len = arguments.length;\n    args = new Array(len > 2 ? len - 2 : 0);\n    for (var key = 2; key < len; key++) {\n      args[key - 2] = arguments[key];\n    }\n    if (format === undefined) {\n      throw new Error(\n        '`warning(condition, format, ...args)` requires a warning ' +\n        'message argument'\n      );\n    }\n\n    if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n      throw new Error(\n        'The warning format should be able to uniquely identify this ' +\n        'warning. Please, use a more descriptive format than: ' + format\n      );\n    }\n\n    if (!condition) {\n      var argIndex = 0;\n      var message = 'Warning: ' +\n        format.replace(/%s/g, function() {\n          return args[argIndex++];\n        });\n      if (typeof console !== 'undefined') {\n        console.error(message);\n      }\n      try {\n        // This error was thrown as a convenience so that you can use this stack\n        // to find the callsite that caused this warning to fire.\n        throw new Error(message);\n      } catch(x) {}\n    }\n  };\n}\n\nmodule.exports = warning;\n\n},{}],54:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.select = select;\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"refresh\",\n    value: function refresh() {\n      window.location.reload();\n    }\n  }, {\n    key: \"getMessage\",\n    value: function getMessage() {\n      if (this.props.signedIn) {\n        return interpolate(gettext(\"You have signed in as %(username)s. Please refresh the page before continuing.\"), { username: this.props.signedIn.username }, true);\n      } else if (this.props.signedOut) {\n        return interpolate(gettext(\"%(username)s, you have been signed out. Please refresh the page before continuing.\"), { username: this.props.user.username }, true);\n      }\n    }\n  }, {\n    key: \"getClassName\",\n    value: function getClassName() {\n      if (this.props.signedIn || this.props.signedOut) {\n        return \"auth-message show\";\n      } else {\n        return \"auth-message\";\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"div\",\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          \"div\",\n          { className: \"container\" },\n          _react2.default.createElement(\n            \"p\",\n            { className: \"lead\" },\n            this.getMessage()\n          ),\n          _react2.default.createElement(\n            \"p\",\n            null,\n            _react2.default.createElement(\n              \"button\",\n              { type: \"button\", className: \"btn btn-default\",\n                onClick: this.refresh },\n              gettext(\"Reload page\")\n            ),\n            \" \",\n            _react2.default.createElement(\n              \"span\",\n              { className: \"hidden-xs hidden-sm text-muted\" },\n              gettext(\"or press F5 key.\")\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\nfunction select(state) {\n  return {\n    user: state.auth.user,\n    signedIn: state.auth.signedIn,\n    signedOut: state.auth.signedOut\n  };\n}\n\n},{\"react\":\"react\"}],55:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BASE_URL = $('base').attr('href') + 'user-avatar/';\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getSrc',\n    value: function getSrc() {\n      var size = this.props.size || 100; // jshint ignore:line\n      var url = BASE_URL;\n\n      if (this.props.user && this.props.user.id) {\n        // just avatar hash, size and user id\n        url += this.props.user.avatar_hash + '/' + size + '/' + this.props.user.id + '.png';\n      } else {\n        // just append avatar size to file to produce no-avatar placeholder\n        url += size + '.png';\n      }\n\n      return url;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement('img', { src: this.getSrc(),\n        className: this.props.className || 'user-avatar',\n        title: gettext(\"User avatar\") });\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],56:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getReasonMessage',\n    value: function getReasonMessage() {\n      /* jshint ignore:start */\n      if (this.props.message.html) {\n        return _react2.default.createElement('div', { className: 'lead', dangerouslySetInnerHTML: {\n            __html: this.props.message.html\n          } });\n      } else {\n        return _react2.default.createElement(\n          'p',\n          { className: 'lead' },\n          this.props.message.plain\n        );\n      }\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getExpirationMessage',\n    value: function getExpirationMessage() {\n      if (this.props.expires) {\n        if (this.props.expires.isAfter((0, _moment2.default)())) {\n          /* jshint ignore:start */\n          var title = interpolate(gettext(\"This ban expires on %(expires_on)s.\"), {\n            'expires_on': this.props.expires.format('LL, LT')\n          }, true);\n\n          var message = interpolate(gettext(\"This ban expires %(expires_on)s.\"), {\n            'expires_on': this.props.expires.fromNow()\n          }, true);\n\n          return _react2.default.createElement(\n            'abbr',\n            { title: title },\n            message\n          );\n          /* jshint ignore:end */\n        } else {\n            return gettext(\"This ban has expired.\");\n          }\n      } else {\n        return gettext(\"This ban is permanent.\");\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page page-error page-error-banned' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-panel' },\n            _react2.default.createElement(\n              'div',\n              { className: 'message-icon' },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                'highlight_off'\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'message-body' },\n              this.getReasonMessage(),\n              _react2.default.createElement(\n                'p',\n                { className: 'message-footnote' },\n                this.getExpirationMessage()\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"moment\":\"moment\",\"react\":\"react\"}],57:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _loader = require('./loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar Button = function (_React$Component) {\n  _inherits(Button, _React$Component);\n\n  function Button() {\n    _classCallCheck(this, Button);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(Button).apply(this, arguments));\n  }\n\n  _createClass(Button, [{\n    key: 'render',\n    value: function render() {\n      var className = 'btn ' + this.props.className;\n      var disabled = this.props.disabled;\n\n      if (this.props.loading) {\n        className += ' btn-loading';\n        disabled = true;\n      }\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: this.props.onClick ? 'button' : 'submit',\n          className: className,\n          disabled: disabled,\n          onClick: this.props.onClick },\n        this.props.children,\n        this.props.loading ? _react2.default.createElement(_loader2.default, null) : null\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return Button;\n}(_react2.default.Component);\n\nexports.default = Button;\n\nButton.defaultProps = {\n  className: \"btn-default\",\n\n  type: \"submit\",\n\n  loading: false,\n  disabled: false,\n\n  onClick: null\n};\n\n},{\"./loader\":72,\"react\":\"react\"}],58:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _lastActivity = require('./last-activity');\n\nvar _lastActivity2 = _interopRequireDefault(_lastActivity);\n\nvar _readIcon = require('./read-icon');\n\nvar _readIcon2 = _interopRequireDefault(_readIcon);\n\nvar _stats = require('./stats');\n\nvar _stats2 = _interopRequireDefault(_stats);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.props.category.css_class) {\n        return 'panel panel-default panel-category panel-category-' + this.props.category.css_class;\n      } else {\n        return 'panel panel-default panel-category';\n      }\n    }\n  }, {\n    key: 'getHeadingClassName',\n    value: function getHeadingClassName() {\n      if (this.props.category.subcategories.length) {\n        return 'panel-heading';\n      } else {\n        return 'panel-heading heading-alone';\n      }\n    }\n  }, {\n    key: 'getCategoryDescription',\n    value: function getCategoryDescription() {\n      if (this.props.category.description) {\n        /* jshint ignore:start */\n        return _react2.default.createElement('div', { className: 'panel-body category-description',\n          dangerouslySetInnerHTML: {\n            __html: this.props.category.description.html\n          } });\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getSubcategoryClass',\n    value: function getSubcategoryClass(category) {\n      if (category.css_class) {\n        return 'list-group-item category-subcategory subcategory-' + category.css_class;\n      } else {\n        return 'list-group-item category-subcategory';\n      }\n    }\n  }, {\n    key: 'getSubcategoryDescription',\n    value: function getSubcategoryDescription(category) {\n      if (category.description) {\n        /* jshint ignore:start */\n        return _react2.default.createElement('div', { className: 'subcategory-description',\n          dangerouslySetInnerHTML: {\n            __html: category.description.html\n          } });\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getSubcategorySubcategoryClass',\n    value: function getSubcategorySubcategoryClass(category) {\n      if (category.css_class) {\n        return 'subcategory subcategory-' + category.css_class;\n      } else {\n        return 'subcategory';\n      }\n    }\n  }, {\n    key: 'getSubcategorySubcategories',\n    value: function getSubcategorySubcategories(category) {\n      var _this2 = this;\n\n      if (category.subcategories.length) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'ul',\n          { className: 'list-inline subcategories-list' },\n          category.subcategories.map(function (category) {\n            return _react2.default.createElement(\n              'li',\n              { key: category.id },\n              _react2.default.createElement(\n                'a',\n                { href: category.absolute_url,\n                  className: _this2.getSubcategorySubcategoryClass(category) },\n                category.name\n              )\n            );\n          })\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getSubcategories',\n    value: function getSubcategories() {\n      var _this3 = this;\n\n      if (this.props.category.subcategories.length) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'ul',\n          { className: 'list-group category-subcategories' },\n          this.props.category.subcategories.map(function (category) {\n            return _react2.default.createElement(\n              'li',\n              { className: _this3.getSubcategoryClass(category),\n                key: category.id },\n              _react2.default.createElement(\n                'div',\n                { className: 'title-row' },\n                _react2.default.createElement(\n                  'h4',\n                  null,\n                  _react2.default.createElement(_readIcon2.default, { category: category }),\n                  _react2.default.createElement(\n                    'a',\n                    { href: category.absolute_url, className: 'item-title' },\n                    category.name\n                  )\n                ),\n                _react2.default.createElement(_stats2.default, { category: category })\n              ),\n              _react2.default.createElement(_lastActivity2.default, { category: category }),\n              _this3.getSubcategoryDescription(category),\n              _this3.getSubcategorySubcategories(category)\n            );\n          })\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { id: 'panel-category-' + this.props.category.id,\n          className: this.getClassName() },\n        _react2.default.createElement(\n          'div',\n          { className: this.getHeadingClassName() },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading-inblock' },\n            _react2.default.createElement(\n              'div',\n              { className: 'panel-heading-top-row' },\n              _react2.default.createElement(\n                'h3',\n                { className: 'panel-title' },\n                _react2.default.createElement(_readIcon2.default, { category: this.props.category }),\n                _react2.default.createElement(\n                  'a',\n                  { href: this.props.category.absolute_url, className: 'item-title' },\n                  this.props.category.name\n                )\n              ),\n              _react2.default.createElement(_stats2.default, { category: this.props.category })\n            ),\n            _react2.default.createElement(_lastActivity2.default, { category: this.props.category })\n          )\n        ),\n        this.getCategoryDescription(),\n        this.getSubcategories()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"./last-activity\":59,\"./read-icon\":60,\"./stats\":62,\"react\":\"react\"}],59:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"getLastPoster\",\n    value: function getLastPoster() {\n      if (this.props.category.last_poster_url) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          \"a\",\n          { href: this.props.category.last_poster_url,\n            className: \"item-title\" },\n          this.props.category.last_poster_name\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            \"span\",\n            { className: \"item-title\" },\n            this.props.category.last_poster_name\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: \"getThreadDetails\",\n    value: function getThreadDetails() {\n      /* jshint ignore:start */\n      return [_react2.default.createElement(\n        \"li\",\n        { className: \"thread-title\", key: \"title\" },\n        _react2.default.createElement(\n          \"a\",\n          { href: this.props.category.last_thread_url, className: \"item-title\" },\n          this.props.category.last_thread_title\n        )\n      ), _react2.default.createElement(\n        \"li\",\n        { className: \"poster-name\", key: \"poster\" },\n        this.getLastPoster()\n      ), _react2.default.createElement(\n        \"li\",\n        { className: \"thread-date\", key: \"date\" },\n        _react2.default.createElement(\n          \"abbr\",\n          { title: this.props.category.last_post_on.format('LL, LT') },\n          this.props.category.last_post_on.fromNow()\n        )\n      )];\n      /* jshint ignore:end */\n    }\n  }, {\n    key: \"getLastActivity\",\n    value: function getLastActivity() {\n      if (this.props.category.acl.can_browse) {\n        if (!this.props.category.acl.can_see_all_threads) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            \"li\",\n            { className: \"thread-message\" },\n            _react2.default.createElement(\n              \"span\",\n              { className: \"material-icon\" },\n              \"info_outline\"\n            ),\n            gettext(\"This category is private. You can see only your own threads within it.\")\n          );\n          /* jshint ignore:end */\n        } else if (this.props.category.last_thread_title) {\n            return this.getThreadDetails();\n          } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(\n              \"li\",\n              { className: \"thread-message\" },\n              _react2.default.createElement(\n                \"span\",\n                { className: \"material-icon\" },\n                \"error_outline\"\n              ),\n              gettext(\"This category is empty.\")\n            );\n            /* jshint ignore:end */\n          }\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            \"li\",\n            { className: \"thread-message\" },\n            _react2.default.createElement(\n              \"span\",\n              { className: \"material-icon\" },\n              \"highlight_off\"\n            ),\n            gettext(\"This category is protected. You can't browse it's contents.\")\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"ul\",\n        { className: \"list-inline category-last-activity\" },\n        this.getLastActivity()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],60:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.props.category.is_read) {\n        return 'read-status item-read';\n      } else {\n        return 'read-status item-new';\n      }\n    }\n  }, {\n    key: 'getTitle',\n    value: function getTitle() {\n      if (this.props.category.is_closed) {\n        if (this.props.category.is_read) {\n          return gettext(\"This category has no new posts. (closed)\");\n        } else {\n          return gettext(\"This category has new posts. (closed)\");\n        }\n      } else {\n        if (this.props.category.is_read) {\n          return gettext(\"This category has no new posts.\");\n        } else {\n          return gettext(\"This category has new posts.\");\n        }\n      }\n    }\n  }, {\n    key: 'getIcon',\n    value: function getIcon() {\n      if (this.props.category.is_closed) {\n        if (this.props.category.is_read) {\n          return 'lock_outline';\n        } else {\n          return 'lock';\n        }\n      } else {\n        if (this.props.category.is_read) {\n          return 'chat_bubble_outline';\n        } else {\n          return 'chat_bubble';\n        }\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName(), title: this.getTitle() },\n        _react2.default.createElement(\n          'span',\n          { className: 'material-icon' },\n          this.getIcon()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],61:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.select = select;\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _category = require('./category');\n\nvar _category2 = _interopRequireDefault(_category);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _polls = require('../../services/polls');\n\nvar _polls2 = _interopRequireDefault(_polls);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\nvar dehydrate = function dehydrate(category) {\n  return Object.assign({}, category, {\n    last_post_on: category.last_post_on ? (0, _moment2.default)(category.last_post_on) : null,\n    subcategories: category.subcategories.map(dehydrate)\n  });\n};\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.update = function (data) {\n      _this.setState({\n        categories: data.map(dehydrate)\n      });\n    };\n\n    _this.state = {\n      categories: _index2.default.get('CATEGORIES').map(dehydrate)\n    };\n\n    _this.startPolling(_index2.default.get('CATEGORIES_API'));\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'startPolling',\n    value: function startPolling(api) {\n      _polls2.default.start({\n        poll: 'categories',\n        url: api,\n        frequency: 180 * 1000,\n        update: this.update\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'categories-list' },\n        this.state.categories.map(function (category) {\n          return _react2.default.createElement(_category2.default, { category: category, key: category.id });\n        })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\nfunction select(store) {\n  return {\n    'tick': store.tick.tick\n  };\n}\n\n},{\"../../index\":135,\"../../services/polls\":150,\"./category\":58,\"moment\":\"moment\",\"react\":\"react\"}],62:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"getThreadsCount\",\n    value: function getThreadsCount() {\n      var string = ngettext(\"%(threads)s thread\", \"%(threads)s threads\", this.props.category.threads);\n\n      return interpolate(string, {\n        'threads': this.props.category.threads\n      }, true);\n    }\n  }, {\n    key: \"getPostsCount\",\n    value: function getPostsCount() {\n      var string = ngettext(\"%(posts)s post\", \"%(posts)s posts\", this.props.category.posts);\n\n      return interpolate(string, {\n        'posts': this.props.category.posts\n      }, true);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"ul\",\n        { className: \"list-inline category-stats\" },\n        _react2.default.createElement(\n          \"li\",\n          { className: \"category-threads\" },\n          this.getThreadsCount()\n        ),\n        _react2.default.createElement(\n          \"li\",\n          { className: \"category-posts\" },\n          this.getPostsCount()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],63:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar BASE_URL = $('base').attr('href') + 'user-avatar';\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.cropAvatar = function () {\n      if (_this.state.isLoading) {\n        return false;\n      }\n\n      _this.setState({\n        'isLoading': true\n      });\n\n      var avatarType = _this.props.upload ? 'crop_tmp' : 'crop_org';\n      var cropit = $('.crop-form');\n\n      _ajax2.default.post(_this.props.user.api_url.avatar, {\n        'avatar': avatarType,\n        'crop': {\n          'offset': cropit.cropit('offset'),\n          'zoom': cropit.cropit('zoom')\n        }\n      }).then(function (data) {\n        _this.props.onComplete(data.avatar_hash, data.options);\n        _snackbar2.default.success(data.detail);\n      }, function (rejection) {\n        if (rejection.status === 400) {\n          _snackbar2.default.error(rejection.detail);\n          _this.setState({\n            'isLoading': false\n          });\n        } else {\n          _this.props.showError(rejection);\n        }\n      });\n    };\n\n    _this.state = {\n      'isLoading': false\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'getAvatarSize',\n    value: function getAvatarSize() {\n      if (this.props.upload) {\n        return this.props.options.crop_tmp.size;\n      } else {\n        return this.props.options.crop_org.size;\n      }\n    }\n  }, {\n    key: 'getAvatarSecret',\n    value: function getAvatarSecret() {\n      if (this.props.upload) {\n        return this.props.options.crop_tmp.secret;\n      } else {\n        return this.props.options.crop_org.secret;\n      }\n    }\n  }, {\n    key: 'getAvatarHash',\n    value: function getAvatarHash() {\n      return this.props.upload || this.props.user.avatar_hash;\n    }\n  }, {\n    key: 'getImagePath',\n    value: function getImagePath() {\n      return [BASE_URL, this.getAvatarSecret() + ':' + this.getAvatarHash(), this.props.user.id + '.png'].join('/');\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this2 = this;\n\n      var cropit = $('.crop-form');\n      cropit.width(this.getAvatarSize());\n\n      cropit.cropit({\n        'width': this.getAvatarSize(),\n        'height': this.getAvatarSize(),\n        'imageState': {\n          'src': this.getImagePath()\n        },\n        onImageLoaded: function onImageLoaded() {\n          if (_this2.props.upload) {\n            // center uploaded image\n            var zoomLevel = cropit.cropit('zoom');\n            var imageSize = cropit.cropit('imageSize');\n\n            // is it wider than taller?\n            if (imageSize.width > imageSize.height) {\n              var displayedWidth = imageSize.width * zoomLevel;\n              var offsetX = (displayedWidth - _this2.getAvatarSize()) / -2;\n\n              cropit.cropit('offset', {\n                'x': offsetX,\n                'y': 0\n              });\n            } else if (imageSize.width < imageSize.height) {\n              var displayedHeight = imageSize.height * zoomLevel;\n              var offsetY = (displayedHeight - _this2.getAvatarSize()) / -2;\n\n              cropit.cropit('offset', {\n                'x': 0,\n                'y': offsetY\n              });\n            }\n          } else {\n            // use preserved crop\n            var crop = _this2.props.options.crop_org.crop;\n            if (crop) {\n              cropit.cropit('zoom', crop.zoom);\n              cropit.cropit('offset', {\n                'x': crop.x,\n                'y': crop.y\n              });\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      $('.crop-form').cropit('disable');\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-body modal-avatar-crop' },\n          _react2.default.createElement(\n            'div',\n            { className: 'crop-form' },\n            _react2.default.createElement('div', { className: 'cropit-image-preview' }),\n            _react2.default.createElement('input', { type: 'range', className: 'cropit-image-zoom-input' })\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-footer' },\n          _react2.default.createElement(\n            'div',\n            { className: 'col-md-6 col-md-offset-3' },\n            _react2.default.createElement(\n              _button2.default,\n              { onClick: this.cropAvatar,\n                loading: this.state.isLoading,\n                className: 'btn-primary btn-block' },\n              this.props.upload ? gettext(\"Set avatar\") : gettext(\"Crop image\")\n            ),\n            _react2.default.createElement(\n              _button2.default,\n              { onClick: this.props.showIndex,\n                disabled: this.state.isLoading,\n                className: 'btn-default btn-block' },\n              gettext(\"Cancel\")\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../services/ajax\":142,\"../../services/snackbar\":151,\"../avatar\":55,\"../button\":57,\"react\":\"react\"}],64:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Gallery = exports.GalleryItem = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _batch = require('../../utils/batch');\n\nvar _batch2 = _interopRequireDefault(_batch);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar GalleryItem = exports.GalleryItem = function (_React$Component) {\n  _inherits(GalleryItem, _React$Component);\n\n  function GalleryItem() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, GalleryItem);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(GalleryItem)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.select = function () {\n      _this.props.select(_this.props.image);\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n  /* jshint ignore:start */\n\n  _createClass(GalleryItem, [{\n    key: 'getClassName',\n\n    /* jshint ignore:end */\n\n    value: function getClassName() {\n      if (this.props.selection === this.props.image) {\n        if (this.props.disabled) {\n          return 'btn btn-avatar btn-disabled avatar-selected';\n        } else {\n          return 'btn btn-avatar avatar-selected';\n        }\n      } else if (this.props.disabled) {\n        return 'btn btn-avatar btn-disabled';\n      } else {\n        return 'btn btn-avatar';\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: 'button',\n          className: this.getClassName(),\n          disabled: this.props.disabled,\n          onClick: this.select },\n        _react2.default.createElement('img', { src: _index2.default.get('MEDIA_URL') + this.props.image })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return GalleryItem;\n}(_react2.default.Component);\n\nvar Gallery = exports.Gallery = function (_React$Component2) {\n  _inherits(Gallery, _React$Component2);\n\n  function Gallery() {\n    _classCallCheck(this, Gallery);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(Gallery).apply(this, arguments));\n  }\n\n  _createClass(Gallery, [{\n    key: 'render',\n    value: function render() {\n      var _this3 = this;\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'avatars-gallery' },\n        _react2.default.createElement(\n          'h3',\n          null,\n          this.props.name\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'avatars-gallery-images' },\n          (0, _batch2.default)(this.props.images, 4, null).map(function (row, i) {\n            return _react2.default.createElement(\n              'div',\n              { className: 'row', key: i },\n              row.map(function (item, i) {\n                return _react2.default.createElement(\n                  'div',\n                  { className: 'col-xs-3', key: i },\n                  item ? _react2.default.createElement(GalleryItem, { image: item,\n                    disabled: _this3.props.disabled,\n                    select: _this3.props.select,\n                    selection: _this3.props.selection }) : _react2.default.createElement('div', { className: 'blank-avatar' })\n                );\n              })\n            );\n          })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return Gallery;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component3) {\n  _inherits(_class, _React$Component3);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this4 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this4.select = function (image) {\n      _this4.setState({\n        selection: image\n      });\n    };\n\n    _this4.save = function () {\n      if (_this4.state.isLoading) {\n        return false;\n      }\n\n      _this4.setState({\n        'isLoading': true\n      });\n\n      _ajax2.default.post(_this4.props.user.api_url.avatar, {\n        avatar: 'galleries',\n        image: _this4.state.selection\n      }).then(function (response) {\n        _this4.setState({\n          'isLoading': false\n        });\n\n        _snackbar2.default.success(response.detail);\n        _this4.props.onComplete(response.avatar_hash, response.options);\n      }, function (rejection) {\n        if (rejection.status === 400) {\n          _snackbar2.default.error(rejection.detail);\n          _this4.setState({\n            'isLoading': false\n          });\n        } else {\n          _this4.props.showError(rejection);\n        }\n      });\n    };\n\n    _this4.state = {\n      'selection': null,\n      'isLoading': false\n    };\n    return _this4;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      var _this5 = this;\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-body modal-avatar-gallery' },\n          this.props.options.galleries.map(function (item, i) {\n            return _react2.default.createElement(Gallery, { name: item.name,\n              images: item.images,\n              selection: _this5.state.selection,\n              disabled: _this5.state.isLoading,\n              select: _this5.select,\n              key: i });\n          })\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-footer' },\n          _react2.default.createElement(\n            'div',\n            { className: 'row' },\n            _react2.default.createElement(\n              'div',\n              { className: 'col-md-6 col-md-offset-3' },\n              _react2.default.createElement(\n                _button2.default,\n                { onClick: this.save,\n                  loading: this.state.isLoading,\n                  disabled: !this.state.selection,\n                  className: 'btn-primary btn-block' },\n                this.state.selection ? gettext(\"Save choice\") : gettext(\"Select avatar\")\n              ),\n              _react2.default.createElement(\n                _button2.default,\n                { onClick: this.props.showIndex,\n                  disabled: this.state.isLoading,\n                  className: 'btn-default btn-block' },\n                gettext(\"Cancel\")\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../index\":135,\"../../services/ajax\":142,\"../../services/snackbar\":151,\"../../utils/batch\":155,\"../button\":57,\"react\":\"react\"}],65:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _loader = require('../loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.setGravatar = function () {\n      _this.callApi('gravatar');\n    };\n\n    _this.setGenerated = function () {\n      _this.callApi('generated');\n    };\n\n    _this.state = {\n      'isLoading': false\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'callApi',\n    value: function callApi(avatarType) {\n      var _this2 = this;\n\n      if (this.state.isLoading) {\n        return false;\n      }\n\n      this.setState({\n        'isLoading': true\n      });\n\n      _ajax2.default.post(this.props.user.api_url.avatar, {\n        avatar: avatarType\n      }).then(function (response) {\n        _this2.setState({\n          'isLoading': false\n        });\n\n        _snackbar2.default.success(response.detail);\n        _this2.props.onComplete(response.avatar_hash, response.options);\n      }, function (rejection) {\n        if (rejection.status === 400) {\n          _snackbar2.default.error(rejection.detail);\n          _this2.setState({\n            'isLoading': false\n          });\n        } else {\n          _this2.props.showError(rejection);\n        }\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getGravatarButton',\n\n    /* jshint ignore:end */\n\n    value: function getGravatarButton() {\n      if (this.props.options.gravatar) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _button2.default,\n          { onClick: this.setGravatar,\n            disabled: this.state.isLoading,\n            className: 'btn-default btn-block btn-avatar-gravatar' },\n          gettext(\"Download my Gravatar\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getCropButton',\n    value: function getCropButton() {\n      if (this.props.options.crop_org) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _button2.default,\n          { onClick: this.props.showCrop,\n            disabled: this.state.isLoading,\n            className: 'btn-default btn-block btn-avatar-crop' },\n          gettext(\"Re-crop uploaded image\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getUploadButton',\n    value: function getUploadButton() {\n      if (this.props.options.upload) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _button2.default,\n          { onClick: this.props.showUpload,\n            disabled: this.state.isLoading,\n            className: 'btn-default btn-block btn-avatar-upload' },\n          gettext(\"Upload new image\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getGalleryButton',\n    value: function getGalleryButton() {\n      if (this.props.options.galleries) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _button2.default,\n          { onClick: this.props.showGallery,\n            disabled: this.state.isLoading,\n            className: 'btn-default btn-block btn-avatar-gallery' },\n          gettext(\"Pick avatar from gallery\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getAvatarPreview',\n    value: function getAvatarPreview() {\n      /* jshint ignore:start */\n      var userPeview = {\n        id: this.props.user.id,\n        avatar_hash: this.props.options.avatar_hash\n      };\n      /* jshint ignore:end */\n\n      if (this.state.isLoading) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'avatar-preview preview-loading' },\n          _react2.default.createElement(_avatar2.default, { user: userPeview, size: '200' }),\n          _react2.default.createElement(_loader2.default, null)\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'div',\n            { className: 'avatar-preview' },\n            _react2.default.createElement(_avatar2.default, { user: userPeview, size: '200' })\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body modal-avatar-index' },\n        _react2.default.createElement(\n          'div',\n          { className: 'row' },\n          _react2.default.createElement(\n            'div',\n            { className: 'col-md-5' },\n            this.getAvatarPreview()\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'col-md-7' },\n            this.getGravatarButton(),\n            _react2.default.createElement(\n              _button2.default,\n              { onClick: this.setGenerated,\n                disabled: this.state.isLoading,\n                className: 'btn-default btn-block btn-avatar-generate' },\n              gettext(\"Generate my individual avatar\")\n            ),\n            this.getCropButton(),\n            this.getUploadButton(),\n            this.getGalleryButton()\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../services/ajax\":142,\"../../services/snackbar\":151,\"../avatar\":55,\"../button\":57,\"../loader\":72,\"react\":\"react\"}],66:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ChangeAvatarError = undefined;\nexports.select = select;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _index = require('./index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _crop = require('./crop');\n\nvar _crop2 = _interopRequireDefault(_crop);\n\nvar _upload = require('./upload');\n\nvar _upload2 = _interopRequireDefault(_upload);\n\nvar _gallery = require('./gallery');\n\nvar _gallery2 = _interopRequireDefault(_gallery);\n\nvar _modalLoader = require('../modal-loader');\n\nvar _modalLoader2 = _interopRequireDefault(_modalLoader);\n\nvar _users = require('../../reducers/users');\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar ChangeAvatarError = exports.ChangeAvatarError = function (_React$Component) {\n  _inherits(ChangeAvatarError, _React$Component);\n\n  function ChangeAvatarError() {\n    _classCallCheck(this, ChangeAvatarError);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(ChangeAvatarError).apply(this, arguments));\n  }\n\n  _createClass(ChangeAvatarError, [{\n    key: 'getErrorReason',\n    value: function getErrorReason() {\n      if (this.props.reason) {\n        /* jshint ignore:start */\n        return _react2.default.createElement('p', { dangerouslySetInnerHTML: { __html: this.props.reason } });\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body' },\n        _react2.default.createElement(\n          'div',\n          { className: 'message-icon' },\n          _react2.default.createElement(\n            'span',\n            { className: 'material-icon' },\n            'remove_circle_outline'\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'message-body' },\n          _react2.default.createElement(\n            'p',\n            { className: 'lead' },\n            this.props.message\n          ),\n          this.getErrorReason()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ChangeAvatarError;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component2) {\n  _inherits(_class, _React$Component2);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this2, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this2 = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this2), _this2.showError = function (error) {\n      _this2.setState({\n        error: error\n      });\n    }, _this2.showIndex = function () {\n      _this2.setState({\n        'component': _index2.default\n      });\n    }, _this2.showUpload = function () {\n      _this2.setState({\n        'component': _upload2.default\n      });\n    }, _this2.showCrop = function () {\n      _this2.setState({\n        'component': _crop2.default\n      });\n    }, _this2.showGallery = function () {\n      _this2.setState({\n        'component': _gallery2.default\n      });\n    }, _this2.completeFlow = function (avatarHash, options) {\n      _store2.default.dispatch((0, _users.updateAvatar)(_this2.props.user, avatarHash));\n\n      _this2.setState({\n        'component': _index2.default,\n        options: options\n      });\n    }, _temp), _possibleConstructorReturn(_this2, _ret);\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this3 = this;\n\n      _ajax2.default.get(this.props.user.api_url.avatar).then(function (options) {\n        _this3.setState({\n          'component': _index2.default,\n          'options': options,\n          'error': null\n        });\n      }, function (rejection) {\n        _this3.showError(rejection);\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getBody',\n\n    /* jshint ignore:end */\n\n    value: function getBody() {\n      if (this.state) {\n        if (this.state.error) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(ChangeAvatarError, { message: this.state.error.detail,\n            reason: this.state.error.reason });\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(this.state.component, { options: this.state.options,\n              user: this.props.user,\n              onComplete: this.completeFlow,\n              showError: this.showError,\n              showIndex: this.showIndex,\n              showCrop: this.showCrop,\n              showUpload: this.showUpload,\n              showGallery: this.showGallery });\n            /* jshint ignore:end */\n          }\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_modalLoader2.default, null);\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.state && this.state.error) {\n        return \"modal-dialog modal-message modal-change-avatar\";\n      } else {\n        return \"modal-dialog modal-change-avatar\";\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName(),\n          role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Change your avatar\")\n            )\n          ),\n          this.getBody()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\nfunction select(state) {\n  return {\n    'user': state.auth.user\n  };\n}\n\n},{\"../../reducers/users\":141,\"../../services/ajax\":142,\"../../services/store\":152,\"../modal-loader\":73,\"./crop\":63,\"./gallery\":64,\"./index\":65,\"./upload\":67,\"react\":\"react\"}],67:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _crop = require('./crop');\n\nvar _crop2 = _interopRequireDefault(_crop);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _fileSize = require('../../utils/file-size');\n\nvar _fileSize2 = _interopRequireDefault(_fileSize);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.pickFile = function () {\n      document.getElementById('avatar-hidden-upload').click();\n    };\n\n    _this.uploadFile = function () {\n      var image = document.getElementById('avatar-hidden-upload').files[0];\n\n      var validationError = _this.validateFile(image);\n      if (validationError) {\n        _snackbar2.default.error(validationError);\n        return;\n      }\n\n      _this.setState({\n        image: image,\n        'preview': URL.createObjectURL(image),\n        'progress': 0\n      });\n\n      var data = new FormData();\n      data.append('avatar', 'upload');\n      data.append('image', image);\n\n      _ajax2.default.upload(_this.props.user.api_url.avatar, data, function (progress) {\n        _this.setState({\n          progress: progress\n        });\n      }).then(function (data) {\n        _this.setState({\n          'options': data.options,\n          'uploaded': data.detail\n        });\n        _snackbar2.default.info(gettext(\"Your image has been uploaded and you may now crop it.\"));\n      }, function (rejection) {\n        if (rejection.status === 400) {\n          _snackbar2.default.error(rejection.detail);\n          _this.setState({\n            'isLoading': false,\n            'image': null,\n            'progress': 0\n          });\n        } else {\n          _this.props.showError(rejection);\n        }\n      });\n    };\n\n    _this.state = {\n      'image': null,\n      'preview': null,\n      'progress': 0,\n      'uploaded': null\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'validateFile',\n    value: function validateFile(image) {\n      if (image.size > this.props.options.upload.limit) {\n        return interpolate(gettext(\"Selected file is too big. (%(filesize)s)\"), {\n          'filesize': (0, _fileSize2.default)(image.size)\n        }, true);\n      }\n\n      var invalidTypeMsg = gettext(\"Selected file type is not supported.\");\n      if (this.props.options.upload.allowed_mime_types.indexOf(image.type) === -1) {\n        return invalidTypeMsg;\n      }\n\n      var extensionFound = false;\n      var loweredFilename = image.name.toLowerCase();\n      this.props.options.upload.allowed_extensions.map(function (extension) {\n        if (loweredFilename.substr(extension.length * -1) === extension) {\n          extensionFound = true;\n        }\n      });\n\n      if (!extensionFound) {\n        return invalidTypeMsg;\n      }\n\n      return false;\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getUploadRequirements',\n\n    /* jshint ignore:end */\n\n    value: function getUploadRequirements(options) {\n      var extensions = options.allowed_extensions.map(function (extension) {\n        return extension.substr(1);\n      });\n\n      return interpolate(gettext(\"%(files)s files smaller than %(limit)s\"), {\n        'files': extensions.join(', '),\n        'limit': (0, _fileSize2.default)(options.limit)\n      }, true);\n    }\n  }, {\n    key: 'getUploadButton',\n    value: function getUploadButton() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body modal-avatar-upload' },\n        _react2.default.createElement(\n          _button2.default,\n          { className: 'btn-pick-file',\n            onClick: this.pickFile },\n          _react2.default.createElement(\n            'div',\n            { className: 'material-icon' },\n            'input'\n          ),\n          gettext(\"Select file\")\n        ),\n        _react2.default.createElement(\n          'p',\n          { className: 'text-muted' },\n          this.getUploadRequirements(this.props.options.upload)\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getUploadProgressLabel',\n    value: function getUploadProgressLabel() {\n      return interpolate(gettext(\"%(progress)s % complete\"), {\n        'progress': this.state.progress\n      }, true);\n    }\n  }, {\n    key: 'getUploadProgress',\n    value: function getUploadProgress() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body modal-avatar-upload' },\n        _react2.default.createElement(\n          'div',\n          { className: 'upload-progress' },\n          _react2.default.createElement('img', { src: this.state.preview }),\n          _react2.default.createElement(\n            'div',\n            { className: 'progress' },\n            _react2.default.createElement(\n              'div',\n              { className: 'progress-bar', role: 'progressbar',\n                'aria-valuenow': '{this.state.progress}',\n                'aria-valuemin': '0', 'aria-valuemax': '100',\n                style: { width: this.state.progress + '%' } },\n              _react2.default.createElement(\n                'span',\n                { className: 'sr-only' },\n                this.getUploadProgressLabel()\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'renderUpload',\n    value: function renderUpload() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement('input', { type: 'file',\n          id: 'avatar-hidden-upload',\n          className: 'hidden-file-upload',\n          onChange: this.uploadFile }),\n        this.state.image ? this.getUploadProgress() : this.getUploadButton(),\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-footer' },\n          _react2.default.createElement(\n            'div',\n            { className: 'col-md-6 col-md-offset-3' },\n            _react2.default.createElement(\n              _button2.default,\n              { onClick: this.props.showIndex,\n                disabled: !!this.state.image,\n                className: 'btn-default btn-block' },\n              gettext(\"Cancel\")\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'renderCrop',\n    value: function renderCrop() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(_crop2.default, { options: this.state.options,\n        user: this.props.user,\n        upload: this.state.uploaded,\n        onComplete: this.props.onComplete,\n        showError: this.props.showError,\n        showIndex: this.props.showIndex });\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return this.state.uploaded ? this.renderCrop() : this.renderUpload();\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../services/ajax\":142,\"../../services/snackbar\":151,\"../../utils/file-size\":156,\"../button\":57,\"./crop\":63,\"react\":\"react\"}],68:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"getClassName\",\n    value: function getClassName() {\n      if (this.props.dropdown) {\n        return \"btn btn-default btn-aligned btn-icon btn-dropdown-toggle open hidden-md hidden-lg\";\n      } else {\n        return \"btn btn-default btn-aligned btn-icon btn-dropdown-toggle hidden-md hidden-lg\";\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"button\",\n        { className: this.getClassName(),\n          type: \"button\",\n          onClick: this.props.toggleNav,\n          \"aria-haspopup\": \"true\",\n          \"aria-expanded\": this.props.dropdown ? 'true' : 'false' },\n        _react2.default.createElement(\n          \"i\",\n          { className: \"material-icon\" },\n          \"menu\"\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],69:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'isValidated',\n    value: function isValidated() {\n      return typeof this.props.validation !== \"undefined\";\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      var className = 'form-group';\n      if (this.isValidated()) {\n        className += ' has-feedback';\n        if (this.props.validation === null) {\n          className += ' has-success';\n        } else {\n          className += ' has-error';\n        }\n      }\n      return className;\n    }\n  }, {\n    key: 'getFeedback',\n    value: function getFeedback() {\n      var _this2 = this;\n\n      if (this.props.validation) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'help-block errors' },\n          this.props.validation.map(function (error, i) {\n            return _react2.default.createElement(\n              'p',\n              { key: _this2.props.for + 'FeedbackItem' + i },\n              error\n            );\n          })\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getFeedbackIcon',\n    value: function getFeedbackIcon() {\n      if (this.isValidated()) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'span',\n          { className: 'material-icon form-control-feedback',\n            'aria-hidden': 'true', key: this.props.for + 'FeedbackIcon' },\n          this.props.validation ? 'clear' : 'check'\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getFeedbackDescription',\n    value: function getFeedbackDescription() {\n      if (this.isValidated()) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'span',\n          { id: this.props.for + '_status', className: 'sr-only' },\n          this.props.validation ? gettext('(error)') : gettext('(success)')\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getHelpText',\n    value: function getHelpText() {\n      if (this.props.helpText) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'p',\n          { className: 'help-block' },\n          this.props.helpText\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          'label',\n          { className: 'control-label ' + (this.props.labelClass || ''),\n            htmlFor: this.props.for || '' },\n          this.props.label + ':'\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: this.props.controlClass || '' },\n          this.props.children,\n          this.getFeedbackIcon(),\n          this.getFeedbackDescription(),\n          this.getFeedback(),\n          this.getHelpText(),\n          this.props.extra || null\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],70:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _validators = require('../utils/validators');\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar validateRequired = (0, _validators.required)();\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.bindInput = function (name) {\n      return function (event) {\n        var newState = _defineProperty({}, name, event.target.value);\n\n        var formErrors = _this.state.errors || {};\n        formErrors[name] = _this.validateField(name, newState[name]);\n        newState.errors = formErrors;\n\n        _this.setState(newState);\n      };\n    }, _this.handleSubmit = function (event) {\n      // we don't reload page on submissions\n      event.preventDefault();\n      if (_this.state.isLoading) {\n        return;\n      }\n\n      if (_this.clean()) {\n        _this.setState({ isLoading: true });\n        var promise = _this.send();\n\n        if (promise) {\n          promise.then(function (success) {\n            _this.setState({ isLoading: false });\n            _this.handleSuccess(success);\n          }, function (rejection) {\n            _this.setState({ isLoading: false });\n            _this.handleError(rejection);\n          });\n        } else {\n          _this.setState({ isLoading: false });\n        }\n      }\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(_class, [{\n    key: 'validate',\n    value: function validate() {\n      var errors = {};\n      if (!this.state.validators) {\n        return errors;\n      }\n\n      var validators = {\n        required: this.state.validators.required || this.state.validators,\n        optional: this.state.validators.optional || {}\n      };\n\n      var validatedFields = [];\n\n      // add required fields to validation\n      for (var name in validators.required) {\n        if (validators.required.hasOwnProperty(name) && validators.required[name]) {\n          validatedFields.push(name);\n        }\n      }\n\n      // add optional fields to validation\n      for (var name in validators.optional) {\n        if (validators.optional.hasOwnProperty(name) && validators.optional[name]) {\n          validatedFields.push(name);\n        }\n      }\n\n      // validate fields values\n      for (var i in validatedFields) {\n        var name = validatedFields[i];\n        var fieldErrors = this.validateField(name, this.state[name]);\n\n        if (fieldErrors === null) {\n          errors[name] = null;\n        } else if (fieldErrors) {\n          errors[name] = fieldErrors;\n        }\n      }\n\n      return errors;\n    }\n  }, {\n    key: 'isValid',\n    value: function isValid() {\n      var errors = this.validate();\n      for (var field in errors) {\n        if (errors.hasOwnProperty(field)) {\n          if (errors[field] !== null) {\n            return false;\n          }\n        }\n      }\n\n      return true;\n    }\n  }, {\n    key: 'validateField',\n    value: function validateField(name, value) {\n      var errors = [];\n      if (!this.state.validators) {\n        return errors;\n      }\n\n      var validators = {\n        required: (this.state.validators.required || this.state.validators)[name],\n        optional: (this.state.validators.optional || {})[name]\n      };\n\n      var requiredError = validateRequired(value) || false;\n\n      if (validators.required) {\n        if (requiredError) {\n          errors = [requiredError];\n        } else {\n          for (var i in validators.required) {\n            var validationError = validators.required[i](value);\n            if (validationError) {\n              errors.push(validationError);\n            }\n          }\n        }\n\n        return errors.length ? errors : null;\n      } else if (requiredError === false && validators.optional) {\n        for (var i in validators.optional) {\n          var validationError = validators.optional[i](value);\n          if (validationError) {\n            errors.push(validationError);\n          }\n        }\n\n        return errors.length ? errors : null;\n      }\n\n      return false; // false === field wasn't validated\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'clean',\n    value: function clean() {\n      return true;\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return null;\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(success) {\n      return;\n    }\n  }, {\n    key: 'handleError',\n\n    /* jshint ignore:end */\n    value: function handleError(rejection) {\n      _snackbar2.default.apiError(rejection);\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../services/snackbar\":151,\"../utils/validators\":162,\"react\":\"react\"}],71:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'isActive',\n    value: function isActive() {\n      if (this.props.isControlled) {\n        return this.props.isActive;\n      } else {\n        if (this.props.path) {\n          return document.location.pathname.indexOf(this.props.path) === 0;\n        } else {\n          return false;\n        }\n      }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.isActive()) {\n        return (this.props.className || '') + ' ' + (this.props.activeClassName || 'active');\n      } else {\n        return this.props.className || '';\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'li',\n        { className: this.getClassName() },\n        this.props.children\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],72:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"div\",\n        { className: this.props.className || \"loader\" },\n        _react2.default.createElement(\"div\", { className: \"loader-spinning-wheel\" })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],73:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _loader = require('./loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body modal-loader' },\n        _react2.default.createElement(_loader2.default, null)\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"./loader\":72,\"react\":\"react\"}],74:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _panelMessage = require('./panel-message');\n\nvar _panelMessage2 = _interopRequireDefault(_panelMessage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\nvar _class = function (_PanelMessage) {\n  _inherits(_class, _PanelMessage);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getHelpText',\n    value: function getHelpText() {\n      if (this.props.helpText) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'p',\n          { className: 'help-block' },\n          this.props.helpText\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body' },\n        _react2.default.createElement(\n          'div',\n          { className: 'message-icon' },\n          _react2.default.createElement(\n            'span',\n            { className: 'material-icon' },\n            this.props.icon || 'info_outline'\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'message-body' },\n          _react2.default.createElement(\n            'p',\n            { className: 'lead' },\n            this.props.message\n          ),\n          this.getHelpText()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_panelMessage2.default);\n\nexports.default = _class;\n\n},{\"./panel-message\":86,\"react\":\"react\"}],75:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _panelLoader = require('../../panel-loader');\n\nvar _panelLoader2 = _interopRequireDefault(_panelLoader);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'panel panel-default panel-form' },\n        _react2.default.createElement(\n          'div',\n          { className: 'panel-heading' },\n          _react2.default.createElement(\n            'h3',\n            { className: 'panel-title' },\n            gettext(\"Change username\")\n          )\n        ),\n        _react2.default.createElement(_panelLoader2.default, null)\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../panel-loader\":85,\"react\":\"react\"}],76:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _panelMessage = require('../../panel-message');\n\nvar _panelMessage2 = _interopRequireDefault(_panelMessage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getHelpText',\n    value: function getHelpText() {\n      if (this.props.options.next_on) {\n        return interpolate(gettext(\"You will be able to change your username %(next_change)s.\"), { 'next_change': this.props.options.next_on.fromNow() }, true);\n      } else {\n        return gettext(\"You have used up available name changes.\");\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'panel panel-default panel-form' },\n        _react2.default.createElement(\n          'div',\n          { className: 'panel-heading' },\n          _react2.default.createElement(\n            'h3',\n            { className: 'panel-title' },\n            gettext(\"Change username\")\n          )\n        ),\n        _react2.default.createElement(_panelMessage2.default, { message: gettext(\"You can't change your username at the moment.\"),\n          helpText: this.getHelpText() })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../panel-message\":86,\"react\":\"react\"}],77:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _ajax = require('../../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../../../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.state = {\n      username: '',\n\n      validators: {\n        username: [validators.usernameContent(), validators.usernameMinLength({\n          username_length_min: props.options.length_min\n        }), validators.usernameMaxLength({\n          username_length_max: props.options.length_max\n        })]\n      },\n\n      isLoading: false\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'getHelpText',\n    value: function getHelpText() {\n      var phrases = [];\n\n      if (this.props.options.changes_left > 0) {\n        var message = ngettext(\"You can change your username %(changes_left)s more time.\", \"You can change your username %(changes_left)s more times.\", this.props.options.changes_left);\n\n        phrases.push(interpolate(message, {\n          'changes_left': this.props.options.changes_left\n        }, true));\n      }\n\n      if (this.props.user.acl.name_changes_expire > 0) {\n        var message = ngettext(\"Used changes redeem after %(name_changes_expire)s day.\", \"Used changes redeem after %(name_changes_expire)s days.\", this.props.user.acl.name_changes_expire);\n\n        phrases.push(interpolate(message, {\n          'name_changes_expire': this.props.user.acl.name_changes_expire\n        }, true));\n      }\n\n      return phrases.length ? phrases.join(' ') : null;\n    }\n  }, {\n    key: 'clean',\n    value: function clean() {\n      var errors = this.validate();\n      if (errors.username) {\n        _snackbar2.default.error(errors.username[0]);\n        return false;\n      }if (this.state.username.trim() === this.props.user.username) {\n        _snackbar2.default.info(gettext(\"Your new username is same as current one.\"));\n        return false;\n      } else {\n        return true;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.user.api_url.username, {\n        'username': this.state.username\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(success) {\n      this.setState({\n        'username': ''\n      });\n\n      this.props.complete(success.username, success.slug, success.options);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      _snackbar2.default.apiError(rejection);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n        _react2.default.createElement(\n          'div',\n          { className: 'panel panel-default panel-form' },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading' },\n            _react2.default.createElement(\n              'h3',\n              { className: 'panel-title' },\n              gettext(\"Change username\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-body' },\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"New username\"), 'for': 'id_username',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8',\n                helpText: this.getHelpText() },\n              _react2.default.createElement('input', { type: 'text', id: 'id_username', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('username'),\n                value: this.state.username })\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-footer' },\n            _react2.default.createElement(\n              'div',\n              { className: 'row' },\n              _react2.default.createElement(\n                'div',\n                { className: 'col-sm-8 col-sm-offset-4' },\n                _react2.default.createElement(\n                  _button2.default,\n                  { className: 'btn-primary', loading: this.state.isLoading },\n                  gettext(\"Change username\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../../../services/ajax\":142,\"../../../services/snackbar\":151,\"../../../utils/validators\":162,\"../../button\":57,\"../../form\":70,\"../../form-group\":69,\"react\":\"react\"}],78:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _formLoading = require('./form-loading');\n\nvar _formLoading2 = _interopRequireDefault(_formLoading);\n\nvar _formLocked = require('./form-locked');\n\nvar _formLocked2 = _interopRequireDefault(_formLocked);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _usernameHistory = require('../../username-history');\n\nvar _usernameHistory2 = _interopRequireDefault(_usernameHistory);\n\nvar _index = require('../../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _usernameHistory3 = require('../../../reducers/username-history');\n\nvar _users = require('../../../reducers/users');\n\nvar _ajax = require('../../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _pageTitle = require('../../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nvar _snackbar = require('../../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.onComplete = function (username, slug, options) {\n      _this.setState({\n        options: options\n      });\n\n      _store2.default.dispatch((0, _usernameHistory3.addNameChange)({ username: username, slug: slug }, _this.props.user, _this.props.user));\n      _store2.default.dispatch((0, _users.updateUsername)(_this.props.user, username, slug));\n\n      _snackbar2.default.success(gettext(\"Your username has been changed successfully.\"));\n    };\n\n    _this.state = {\n      isLoaded: false,\n      options: null\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this2 = this;\n\n      _pageTitle2.default.set({\n        title: gettext(\"Change username\"),\n        parent: gettext(\"Change your options\")\n      });\n\n      Promise.all([_ajax2.default.get(this.props.user.api_url.username), _ajax2.default.get(_index2.default.get('USERNAME_CHANGES_API'), { user: this.props.user.id })]).then(function (data) {\n        _store2.default.dispatch((0, _usernameHistory3.dehydrate)(data[1].results));\n\n        _this2.setState({\n          isLoaded: true,\n          options: {\n            changes_left: data[0].changes_left,\n            length_min: data[0].length_min,\n            length_max: data[0].length_max,\n            next_on: data[0].next_on ? (0, _moment2.default)(data[0].next_on) : null\n          }\n        });\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getChangeForm',\n\n    /* jshint ignore:end */\n\n    value: function getChangeForm() {\n      if (this.state.isLoaded) {\n        if (this.state.options.changes_left > 0) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_form2.default, { user: this.props.user,\n            options: this.state.options,\n            complete: this.onComplete });\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(_formLocked2.default, { options: this.state.options });\n            /* jshint ignore:end */\n          }\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_formLoading2.default, null);\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        this.getChangeForm(),\n        _react2.default.createElement(_usernameHistory2.default, { isLoaded: this.state.isLoaded,\n          changes: this.props['username-history'] })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../../index\":135,\"../../../reducers/username-history\":140,\"../../../reducers/users\":141,\"../../../services/ajax\":142,\"../../../services/page-title\":149,\"../../../services/snackbar\":151,\"../../../services/store\":152,\"../../username-history\":118,\"./form\":77,\"./form-loading\":75,\"./form-locked\":76,\"moment\":\"moment\",\"react\":\"react\"}],79:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _select = require('../select');\n\nvar _select2 = _interopRequireDefault(_select);\n\nvar _yesNoSwitch = require('../yes-no-switch');\n\nvar _yesNoSwitch2 = _interopRequireDefault(_yesNoSwitch);\n\nvar _auth = require('../../reducers/auth');\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _pageTitle = require('../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n\n      'is_hiding_presence': props.user.is_hiding_presence,\n      'limits_private_thread_invites_to': props.user.limits_private_thread_invites_to,\n      'subscribe_to_started_threads': props.user.subscribe_to_started_threads,\n      'subscribe_to_replied_threads': props.user.subscribe_to_replied_threads,\n\n      'errors': {}\n    };\n\n    _this.privateThreadInvitesChoices = [{\n      'value': 0,\n      'icon': 'help_outline',\n      'label': gettext('Everybody')\n    }, {\n      'value': 1,\n      'icon': 'done_all',\n      'label': gettext('Users I follow')\n    }, {\n      'value': 2,\n      'icon': 'highlight_off',\n      'label': gettext('Nobody')\n    }];\n\n    _this.subscribeToChoices = [{\n      'value': 0,\n      'icon': 'bookmark_border',\n      'label': gettext('No')\n    }, {\n      'value': 1,\n      'icon': 'bookmark',\n      'label': gettext('Bookmark')\n    }, {\n      'value': 2,\n      'icon': 'mail',\n      'label': gettext('Bookmark with e-mail notification')\n    }];\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.user.api_url.options, {\n        is_hiding_presence: this.state.is_hiding_presence,\n        limits_private_thread_invites_to: this.state.limits_private_thread_invites_to,\n        subscribe_to_started_threads: this.state.subscribe_to_started_threads,\n        subscribe_to_replied_threads: this.state.subscribe_to_replied_threads\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess() {\n      _store2.default.dispatch((0, _auth.patchUser)({\n        is_hiding_presence: this.state.is_hiding_presence,\n        limits_private_thread_invites_to: this.state.limits_private_thread_invites_to,\n        subscribe_to_started_threads: this.state.subscribe_to_started_threads,\n        subscribe_to_replied_threads: this.state.subscribe_to_replied_threads\n      }));\n      _snackbar2.default.success(gettext(\"Your forum options have been changed.\"));\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        _snackbar2.default.error(gettext(\"Please reload page and try again.\"));\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: gettext(\"Forum options\"),\n        parent: gettext(\"Change your options\")\n      });\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n        _react2.default.createElement(\n          'div',\n          { className: 'panel panel-default panel-form' },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading' },\n            _react2.default.createElement(\n              'h3',\n              { className: 'panel-title' },\n              gettext(\"Change forum options\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-body' },\n            _react2.default.createElement(\n              'fieldset',\n              null,\n              _react2.default.createElement(\n                'legend',\n                null,\n                gettext(\"Privacy settings\")\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Hide my presence\"),\n                  helpText: gettext(\"If you hide your presence, only members with permission to see hidden users will see when you are online.\"),\n                  'for': 'id_is_hiding_presence',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n                _react2.default.createElement(_yesNoSwitch2.default, { id: 'id_is_hiding_presence',\n                  disabled: this.state.isLoading,\n                  iconOn: 'visibility_off',\n                  iconOff: 'visibility',\n                  labelOn: gettext(\"Hide my presence from other users\"),\n                  labelOff: gettext(\"Show my presence to other users\"),\n                  onChange: this.bindInput('is_hiding_presence'),\n                  value: this.state.is_hiding_presence })\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Private thread invitations\"),\n                  'for': 'id_limits_private_thread_invites_to',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n                _react2.default.createElement(_select2.default, { id: 'id_limits_private_thread_invites_to',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('limits_private_thread_invites_to'),\n                  value: this.state.limits_private_thread_invites_to,\n                  choices: this.privateThreadInvitesChoices })\n              )\n            ),\n            _react2.default.createElement(\n              'fieldset',\n              null,\n              _react2.default.createElement(\n                'legend',\n                null,\n                gettext(\"Automatic subscriptions\")\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Threads I start\"),\n                  'for': 'id_subscribe_to_started_threads',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n                _react2.default.createElement(_select2.default, { id: 'id_subscribe_to_started_threads',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('subscribe_to_started_threads'),\n                  value: this.state.subscribe_to_started_threads,\n                  choices: this.subscribeToChoices })\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Threads I reply to\"),\n                  'for': 'id_subscribe_to_replied_threads',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n                _react2.default.createElement(_select2.default, { id: 'id_subscribe_to_replied_threads',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('subscribe_to_replied_threads'),\n                  value: this.state.subscribe_to_replied_threads,\n                  choices: this.subscribeToChoices })\n              )\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-footer' },\n            _react2.default.createElement(\n              'div',\n              { className: 'row' },\n              _react2.default.createElement(\n                'div',\n                { className: 'col-sm-8 col-sm-offset-4' },\n                _react2.default.createElement(\n                  _button2.default,\n                  { className: 'btn-primary', loading: this.state.isLoading },\n                  gettext(\"Save changes\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../../reducers/auth\":136,\"../../services/ajax\":142,\"../../services/page-title\":149,\"../../services/snackbar\":151,\"../../services/store\":152,\"../button\":57,\"../form\":70,\"../form-group\":69,\"../select\":106,\"../yes-no-switch\":134,\"react\":\"react\"}],80:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactNav = exports.SideNav = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouter = require('react-router');\n\nvar _li = require('../li');\n\nvar _li2 = _interopRequireDefault(_li);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n//jshint ignore:line\n\n//jshint ignore:line\n\nvar SideNav = exports.SideNav = function (_React$Component) {\n  _inherits(SideNav, _React$Component);\n\n  function SideNav() {\n    _classCallCheck(this, SideNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(SideNav).apply(this, arguments));\n  }\n\n  _createClass(SideNav, [{\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'div',\n        { className: 'list-group nav-side' },\n        this.props.options.map(function (option) {\n          return _react2.default.createElement(\n            _reactRouter.Link,\n            { to: _this2.props.baseUrl + option.component + '/',\n              className: 'list-group-item',\n              activeClassName: 'active',\n              key: option.component },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              option.icon\n            ),\n            option.name\n          );\n        })\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return SideNav;\n}(_react2.default.Component);\n\nvar CompactNav = exports.CompactNav = function (_React$Component2) {\n  _inherits(CompactNav, _React$Component2);\n\n  function CompactNav() {\n    _classCallCheck(this, CompactNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));\n  }\n\n  _createClass(CompactNav, [{\n    key: 'render',\n    value: function render() {\n      var _this4 = this;\n\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu', role: 'menu' },\n        this.props.options.map(function (option) {\n          return _react2.default.createElement(\n            _li2.default,\n            { path: _this4.props.baseUrl + option.component + '/',\n              key: option.component },\n            _react2.default.createElement(\n              _reactRouter.Link,\n              { to: _this4.props.baseUrl + option.component + '/',\n                onClick: _this4.props.hideNav },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                option.icon\n              ),\n              option.name\n            )\n          );\n        })\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return CompactNav;\n}(_react2.default.Component);\n\n},{\"../../index\":135,\"../li\":71,\"react\":\"react\",\"react-router\":\"react-router\"}],81:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.select = select;\nexports.paths = paths;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRedux = require('react-redux');\n\nvar _dropdownToggle = require('../dropdown-toggle');\n\nvar _dropdownToggle2 = _interopRequireDefault(_dropdownToggle);\n\nvar _navs = require('./navs');\n\nvar _forumOptions = require('./forum-options');\n\nvar _forumOptions2 = _interopRequireDefault(_forumOptions);\n\nvar _root = require('./change-username/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _root3 = require('./sign-in-credentials/root');\n\nvar _root4 = _interopRequireDefault(_root3);\n\nvar _withDropdown = require('../with-dropdown');\n\nvar _withDropdown2 = _interopRequireDefault(_withDropdown);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_WithDropdown) {\n  _inherits(_class, _WithDropdown);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page page-options' },\n        _react2.default.createElement(\n          'div',\n          { className: 'page-header' },\n          _react2.default.createElement(\n            'div',\n            { className: 'container' },\n            _react2.default.createElement(\n              'h1',\n              { className: 'pull-left' },\n              gettext(\"Change your options\")\n            ),\n            _react2.default.createElement(_dropdownToggle2.default, { toggleNav: this.toggleNav,\n              dropdown: this.state.dropdown })\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: this.getCompactNavClassName() },\n          _react2.default.createElement(_navs.CompactNav, { options: _index2.default.get('USER_OPTIONS'),\n            baseUrl: _index2.default.get('USERCP_URL'),\n            hideNav: this.hideNav })\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'row' },\n            _react2.default.createElement(\n              'div',\n              { className: 'col-md-3 hidden-xs hidden-sm' },\n              _react2.default.createElement(_navs.SideNav, { options: _index2.default.get('USER_OPTIONS'),\n                baseUrl: _index2.default.get('USERCP_URL') })\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'col-md-9' },\n              this.props.children\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_withDropdown2.default);\n\nexports.default = _class;\nfunction select(store) {\n  return {\n    'tick': store.tick.tick,\n    'user': store.auth.user,\n    'username-history': store['username-history']\n  };\n}\n\nfunction paths() {\n  return [{\n    path: _index2.default.get('USERCP_URL') + 'forum-options/',\n    component: (0, _reactRedux.connect)(select)(_forumOptions2.default)\n  }, {\n    path: _index2.default.get('USERCP_URL') + 'change-username/',\n    component: (0, _reactRedux.connect)(select)(_root2.default)\n  }, {\n    path: _index2.default.get('USERCP_URL') + 'sign-in-credentials/',\n    component: (0, _reactRedux.connect)(select)(_root4.default)\n  }];\n}\n\n},{\"../../index\":135,\"../dropdown-toggle\":68,\"../with-dropdown\":133,\"./change-username/root\":78,\"./forum-options\":79,\"./navs\":80,\"./sign-in-credentials/root\":84,\"react\":\"react\",\"react-redux\":\"react-redux\"}],82:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _ajax = require('../../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../../../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.state = {\n      new_email: '',\n      password: '',\n\n      validators: {\n        new_email: [validators.email()],\n        password: []\n      },\n\n      isLoading: false\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'clean',\n    value: function clean() {\n      var errors = this.validate();\n      var lengths = [this.state.new_email.trim().length, this.state.password.trim().length];\n\n      if (lengths.indexOf(0) !== -1) {\n        _snackbar2.default.error(gettext(\"Fill out all fields.\"));\n        return false;\n      }\n\n      if (errors.new_email) {\n        _snackbar2.default.error(errors.new_email[0]);\n        return false;\n      }\n\n      return true;\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.user.api_url.change_email, {\n        new_email: this.state.new_email,\n        password: this.state.password\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(response) {\n      this.setState({\n        new_email: '',\n        password: ''\n      });\n\n      _snackbar2.default.success(response.detail);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        if (rejection.new_email) {\n          _snackbar2.default.error(rejection.new_email);\n        } else {\n          _snackbar2.default.error(rejection.password);\n        }\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n        _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),\n        _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),\n        _react2.default.createElement(\n          'div',\n          { className: 'panel panel-default panel-form' },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading' },\n            _react2.default.createElement(\n              'h3',\n              { className: 'panel-title' },\n              gettext(\"Change e-mail address\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-body' },\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"New e-mail\"), 'for': 'id_new_email',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'text', id: 'id_new_email', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('new_email'),\n                value: this.state.new_email })\n            ),\n            _react2.default.createElement('hr', null),\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"Your current password\"), 'for': 'id_password',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('password'),\n                value: this.state.password })\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-footer' },\n            _react2.default.createElement(\n              'div',\n              { className: 'row' },\n              _react2.default.createElement(\n                'div',\n                { className: 'col-sm-8 col-sm-offset-4' },\n                _react2.default.createElement(\n                  _button2.default,\n                  { className: 'btn-primary', loading: this.state.isLoading },\n                  gettext(\"Change e-mail\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../../../services/ajax\":142,\"../../../services/snackbar\":151,\"../../../utils/validators\":162,\"../../button\":57,\"../../form\":70,\"../../form-group\":69,\"react\":\"react\"}],83:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _index = require('../../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../../../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.state = {\n      new_password: '',\n      repeat_password: '',\n      password: '',\n\n      validators: {\n        new_password: [validators.passwordMinLength(_index2.default.get('SETTINGS'))],\n        repeat_password: [],\n        password: []\n      },\n\n      isLoading: false\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'clean',\n    value: function clean() {\n      var errors = this.validate();\n      var lengths = [this.state.new_password.trim().length, this.state.repeat_password.trim().length, this.state.password.trim().length];\n\n      if (lengths.indexOf(0) !== -1) {\n        _snackbar2.default.error(gettext(\"Fill out all fields.\"));\n        return false;\n      }\n\n      if (errors.new_password) {\n        _snackbar2.default.error(errors.new_password[0]);\n        return false;\n      }\n\n      if (this.state.new_password.trim() !== this.state.repeat_password.trim()) {\n        _snackbar2.default.error(gettext(\"New passwords are different.\"));\n        return false;\n      }\n\n      return true;\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.user.api_url.change_password, {\n        new_password: this.state.new_password,\n        password: this.state.password\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(response) {\n      this.setState({\n        new_password: '',\n        repeat_password: '',\n        password: ''\n      });\n\n      _snackbar2.default.success(response.detail);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        if (rejection.new_password) {\n          _snackbar2.default.error(rejection.new_password);\n        } else {\n          _snackbar2.default.error(rejection.password);\n        }\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n        _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),\n        _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),\n        _react2.default.createElement(\n          'div',\n          { className: 'panel panel-default panel-form' },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading' },\n            _react2.default.createElement(\n              'h3',\n              { className: 'panel-title' },\n              gettext(\"Change password\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-body' },\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"New password\"), 'for': 'id_new_password',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'password', id: 'id_new_password', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('new_password'),\n                value: this.state.new_password })\n            ),\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"Repeat password\"), 'for': 'id_repeat_password',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'password', id: 'id_repeat_password', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('repeat_password'),\n                value: this.state.repeat_password })\n            ),\n            _react2.default.createElement('hr', null),\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"Your current password\"), 'for': 'id_password',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('password'),\n                value: this.state.password })\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-footer' },\n            _react2.default.createElement(\n              'div',\n              { className: 'row' },\n              _react2.default.createElement(\n                'div',\n                { className: 'col-sm-8 col-sm-offset-4' },\n                _react2.default.createElement(\n                  _button2.default,\n                  { className: 'btn-primary', loading: this.state.isLoading },\n                  gettext(\"Change password\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../../../index\":135,\"../../../services/ajax\":142,\"../../../services/snackbar\":151,\"../../../utils/validators\":162,\"../../button\":57,\"../../form\":70,\"../../form-group\":69,\"react\":\"react\"}],84:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _changeEmail = require('./change-email');\n\nvar _changeEmail2 = _interopRequireDefault(_changeEmail);\n\nvar _changePassword = require('./change-password');\n\nvar _changePassword2 = _interopRequireDefault(_changePassword);\n\nvar _index = require('../../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _pageTitle = require('../../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: gettext(\"Change email or password\"),\n        parent: gettext(\"Change your options\")\n      });\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement(_changeEmail2.default, { user: this.props.user }),\n        _react2.default.createElement(_changePassword2.default, { user: this.props.user }),\n        _react2.default.createElement(\n          'p',\n          { className: 'message-line' },\n          _react2.default.createElement(\n            'span',\n            { className: 'material-icon' },\n            'warning'\n          ),\n          _react2.default.createElement(\n            'a',\n            { href: _index2.default.get('FORGOTTEN_PASSWORD_URL') },\n            gettext(\"Change forgotten password\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../../index\":135,\"../../../services/page-title\":149,\"./change-email\":82,\"./change-password\":83,\"react\":\"react\"}],85:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _loader = require('./loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'panel-body panel-body-loading' },\n        _react2.default.createElement(_loader2.default, { className: 'loader loader-spaced' })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"./loader\":72,\"react\":\"react\"}],86:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"getHelpText\",\n    value: function getHelpText() {\n      if (this.props.helpText) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          \"p\",\n          { className: \"help-block\" },\n          this.props.helpText\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"div\",\n        { className: \"panel-body panel-message-body\" },\n        _react2.default.createElement(\n          \"div\",\n          { className: \"message-icon\" },\n          _react2.default.createElement(\n            \"span\",\n            { className: \"material-icon\" },\n            this.props.icon || 'info_outline'\n          )\n        ),\n        _react2.default.createElement(\n          \"div\",\n          { className: \"message-body\" },\n          _react2.default.createElement(\n            \"p\",\n            { className: \"lead\" },\n            this.props.message\n          ),\n          this.getHelpText()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],87:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.LABELS = exports.STYLES = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _zxcvbn = require('../services/zxcvbn');\n\nvar _zxcvbn2 = _interopRequireDefault(_zxcvbn);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar STYLES = exports.STYLES = ['progress-bar-danger', 'progress-bar-warning', 'progress-bar-warning', 'progress-bar-primary', 'progress-bar-success'];\n\nvar LABELS = exports.LABELS = [gettext(\"Entered password is very weak.\"), gettext(\"Entered password is weak.\"), gettext(\"Entered password is average.\"), gettext(\"Entered password is strong.\"), gettext(\"Entered password is very strong.\")];\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this._score = 0;\n    _this._password = null;\n    _this._inputs = [];\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'getScore',\n    value: function getScore(password, inputs) {\n      var _this2 = this;\n\n      var cacheStale = false;\n\n      if (password.trim() !== this._password) {\n        cacheStale = true;\n      }\n\n      if (inputs.length !== this._inputs.length) {\n        cacheStale = true;\n      } else {\n        inputs.map(function (value, i) {\n          if (value.trim() !== _this2._inputs[i]) {\n            cacheStale = true;\n          }\n        });\n      }\n\n      if (cacheStale) {\n        this._score = _zxcvbn2.default.scorePassword(password, inputs);\n        this._password = password.trim();\n        this._inputs = inputs.map(function (value) {\n          return value.trim();\n        });\n      }\n\n      return this._score;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      var score = this.getScore(this.props.password, this.props.inputs);\n\n      return _react2.default.createElement(\n        'div',\n        { className: 'help-block password-strength' },\n        _react2.default.createElement(\n          'div',\n          { className: 'progress' },\n          _react2.default.createElement(\n            'div',\n            { className: \"progress-bar \" + STYLES[score],\n              style: { width: 20 + 20 * score + '%' },\n              role: 'progress-bar',\n              'aria-valuenow': score,\n              'aria-valuemin': '0',\n              'aria-valuemax': '4' },\n            _react2.default.createElement(\n              'span',\n              { className: 'sr-only' },\n              LABELS[score]\n            )\n          )\n        ),\n        _react2.default.createElement(\n          'p',\n          { className: 'text-small' },\n          LABELS[score]\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../services/zxcvbn\":153,\"react\":\"react\"}],88:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _dropdownToggle = require('../dropdown-toggle');\n\nvar _dropdownToggle2 = _interopRequireDefault(_dropdownToggle);\n\nvar _followButton = require('./follow-button');\n\nvar _followButton2 = _interopRequireDefault(_followButton);\n\nvar _nav = require('./moderation/nav');\n\nvar _nav2 = _interopRequireDefault(_nav);\n\nvar _userStatus = require('../user-status');\n\nvar _userStatus2 = _interopRequireDefault(_userStatus);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getUserStatus',\n    value: function getUserStatus() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'li',\n        { className: 'user-status-display' },\n        _react2.default.createElement(\n          _userStatus2.default,\n          { user: this.props.profile, status: this.props.profile.status },\n          _react2.default.createElement(_userStatus.StatusIcon, { user: this.props.profile,\n            status: this.props.profile.status }),\n          _react2.default.createElement(_userStatus.StatusLabel, { user: this.props.profile,\n            status: this.props.profile.status,\n            className: 'status-label' })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getUserRank',\n    value: function getUserRank() {\n      if (this.props.profile.rank.is_tab) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'li',\n          { className: 'user-rank' },\n          _react2.default.createElement(\n            'a',\n            { href: this.props.profile.rank.absolute_url, className: 'item-title' },\n            this.props.profile.rank.name\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'li',\n            { className: 'user-rank' },\n            _react2.default.createElement(\n              'span',\n              { className: 'item-title' },\n              this.props.profile.rank.name\n            )\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getUserTitle',\n    value: function getUserTitle() {\n      if (this.props.profile.title) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'li',\n          { className: 'user-title' },\n          this.props.profile.title\n        );\n        /* jshint ignore:end */\n      } else if (this.props.profile.rank.title) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'li',\n            { className: 'user-title' },\n            this.props.profile.rank.title\n          );\n          /* jshint ignore:end */\n        } else {\n            return null;\n          }\n    }\n  }, {\n    key: 'getJoinedOn',\n    value: function getJoinedOn() {\n      /* jshint ignore:start */\n      var title = interpolate(gettext(\"Joined on %(joined_on)s\"), {\n        'joined_on': this.props.profile.joined_on.format('LL, LT')\n      }, true);\n\n      var age = interpolate(gettext(\"Joined %(joined_on)s\"), {\n        'joined_on': this.props.profile.joined_on.fromNow()\n      }, true);\n\n      return _react2.default.createElement(\n        'li',\n        { className: 'user-joined-on' },\n        _react2.default.createElement(\n          'abbr',\n          { title: title },\n          age\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getEmail',\n    value: function getEmail() {\n      if (this.props.profile.email) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'li',\n          { className: 'user-email' },\n          _react2.default.createElement(\n            'a',\n            { href: 'mailto:' + this.props.profile.email, className: 'item-title' },\n            this.props.profile.email\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getFollowButton',\n    value: function getFollowButton() {\n      if (this.props.profile.acl.can_follow) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_followButton2.default, { className: 'btn btn-aligned hidden-xs hidden-sm',\n          profile: this.props.profile });\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getModerationButton',\n    value: function getModerationButton() {\n      if (this.props.profile.acl.can_moderate) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'btn-group btn-aligned hidden-xs hidden-sm' },\n          _react2.default.createElement(\n            'button',\n            { className: 'btn btn-default btn-moderate dropdown-toggle',\n              type: 'button',\n              'data-toggle': 'dropdown',\n              'aria-haspopup': 'true',\n              'aria-expanded': 'false' },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'tonality'\n            ),\n            gettext(\"Moderation\")\n          ),\n          _react2.default.createElement(_nav2.default, { profile: this.props.profile })\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page-header' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'row' },\n            _react2.default.createElement(\n              'div',\n              { className: 'col-md-9 col-md-offset-3' },\n              _react2.default.createElement(\n                'h1',\n                { className: 'pull-left' },\n                _react2.default.createElement(_avatar2.default, { user: this.props.profile, size: '100' }),\n                _react2.default.createElement(\n                  'span',\n                  { className: 'user-name' },\n                  this.props.profile.username\n                )\n              ),\n              this.getFollowButton(),\n              this.getModerationButton(),\n              _react2.default.createElement(_dropdownToggle2.default, { toggleNav: this.props.toggleNav,\n                dropdown: this.props.dropdown })\n            )\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'header-stats' },\n          _react2.default.createElement(\n            'div',\n            { className: 'container' },\n            _react2.default.createElement(\n              'div',\n              { className: 'row' },\n              _react2.default.createElement(\n                'div',\n                { className: 'col-md-9 col-md-offset-3' },\n                _react2.default.createElement(\n                  'ul',\n                  { className: 'list-inline' },\n                  this.getUserStatus(),\n                  this.getUserRank(),\n                  this.getUserTitle(),\n                  this.getJoinedOn(),\n                  this.getEmail()\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../avatar\":55,\"../dropdown-toggle\":68,\"../user-status\":117,\"./follow-button\":90,\"./moderation/nav\":96,\"react\":\"react\"}],89:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _panelLoader = require('../panel-loader');\n\nvar _panelLoader2 = _interopRequireDefault(_panelLoader);\n\nvar _panelMessage = require('../panel-message');\n\nvar _panelMessage2 = _interopRequireDefault(_panelMessage);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _polls = require('../../services/polls');\n\nvar _polls2 = _interopRequireDefault(_polls);\n\nvar _pageTitle = require('../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.update = function (ban) {\n      if (ban.expires_on) {\n        ban.expires_on = (0, _moment2.default)(ban.expires_on);\n      }\n\n      _this.setState({\n        isLoaded: true,\n        error: null,\n\n        ban: ban\n      });\n    };\n\n    _this.error = function (error) {\n      _this.setState({\n        isLoaded: true,\n        error: error.detail,\n        ban: null\n      });\n    };\n\n    if (_index2.default.has('PROFILE_BAN')) {\n      _this.initWithPreloadedData(_index2.default.pop('PROFILE_BAN'));\n    } else {\n      _this.initWithoutPreloadedData();\n    }\n\n    _this.startPolling(props.profile.api_url.ban);\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'initWithPreloadedData',\n    value: function initWithPreloadedData(ban) {\n      if (ban.expires_on) {\n        ban.expires_on = (0, _moment2.default)(ban.expires_on);\n      }\n\n      this.state = {\n        isLoaded: true,\n        ban: ban\n      };\n    }\n  }, {\n    key: 'initWithoutPreloadedData',\n    value: function initWithoutPreloadedData() {\n      this.state = {\n        isLoaded: false\n      };\n    }\n  }, {\n    key: 'startPolling',\n    value: function startPolling(api) {\n      _polls2.default.start({\n        poll: 'ban-details',\n        url: api,\n        frequency: 90 * 1000,\n        update: this.update,\n        error: this.error\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'componentDidMount',\n\n    /* jshint ignore:end */\n\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: gettext(\"Ban details\"),\n        parent: this.props.profile.username\n      });\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      _polls2.default.stop('ban-details');\n    }\n  }, {\n    key: 'getUserMessage',\n    value: function getUserMessage() {\n      if (this.state.ban.user_message) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'panel-body ban-message ban-user-message' },\n          _react2.default.createElement(\n            'h4',\n            null,\n            gettext(\"User-shown ban message\")\n          ),\n          _react2.default.createElement('div', { className: 'lead', dangerouslySetInnerHTML: {\n              __html: this.state.ban.user_message.html\n            } })\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getStaffMessage',\n    value: function getStaffMessage() {\n      if (this.state.ban.staff_message) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'panel-body ban-message ban-staff-message' },\n          _react2.default.createElement(\n            'h4',\n            null,\n            gettext(\"Team-shown ban message\")\n          ),\n          _react2.default.createElement('div', { className: 'lead', dangerouslySetInnerHTML: {\n              __html: this.state.ban.staff_message.html\n            } })\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getExpirationMessage',\n    value: function getExpirationMessage() {\n      if (this.state.ban.expires_on) {\n        if (this.state.ban.expires_on.isAfter((0, _moment2.default)())) {\n          /* jshint ignore:start */\n          var _title = interpolate(gettext(\"This ban expires on %(expires_on)s.\"), {\n            'expires_on': this.state.ban.expires_on.format('LL, LT')\n          }, true);\n\n          var message = interpolate(gettext(\"This ban expires %(expires_on)s.\"), {\n            'expires_on': this.state.ban.expires_on.fromNow()\n          }, true);\n\n          return _react2.default.createElement(\n            'abbr',\n            { title: _title },\n            message\n          );\n          /* jshint ignore:end */\n        } else {\n            return gettext(\"This ban has expired.\");\n          }\n      } else {\n        return interpolate(gettext(\"%(username)s's ban is permanent.\"), {\n          'username': this.props.profile.username\n        }, true);\n      }\n    }\n  }, {\n    key: 'getPanelBody',\n    value: function getPanelBody() {\n      if (this.state.ban) {\n        if (Object.keys(this.state.ban).length) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'div',\n            null,\n            this.getUserMessage(),\n            this.getStaffMessage(),\n            _react2.default.createElement(\n              'div',\n              { className: 'panel-body ban-expires' },\n              _react2.default.createElement(\n                'h4',\n                null,\n                gettext(\"Ban expiration\")\n              ),\n              _react2.default.createElement(\n                'p',\n                { className: 'lead' },\n                this.getExpirationMessage()\n              )\n            )\n          );\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(\n              'div',\n              null,\n              _react2.default.createElement(_panelMessage2.default, { message: gettext(\"No ban is active at the moment.\") })\n            );\n            /* jshint ignore:end */\n          }\n      } else if (this.state.error) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'div',\n            null,\n            _react2.default.createElement(_panelMessage2.default, { icon: 'error_outline',\n              message: this.state.error })\n          );\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(\n              'div',\n              null,\n              _react2.default.createElement(_panelLoader2.default, null)\n            );\n            /* jshint ignore:end */\n          }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'profile-ban-details' },\n        _react2.default.createElement(\n          'div',\n          { className: 'panel panel-default' },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading' },\n            _react2.default.createElement(\n              'h3',\n              { className: 'panel-title' },\n              gettext(\"Ban details\")\n            )\n          ),\n          this.getPanelBody()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../index\":135,\"../../services/page-title\":149,\"../../services/polls\":150,\"../panel-loader\":85,\"../panel-message\":86,\"moment\":\"moment\",\"react\":\"react\"}],90:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _profile = require('../../reducers/profile');\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.action = function () {\n      _this.setState({\n        isLoading: true\n      });\n\n      if (_this.props.profile.is_followed) {\n        _store2.default.dispatch((0, _profile.patchProfile)({\n          is_followed: false,\n          followers: _this.props.profile.followers - 1\n        }));\n      } else {\n        _store2.default.dispatch((0, _profile.patchProfile)({\n          is_followed: true,\n          followers: _this.props.profile.followers + 1\n        }));\n      }\n\n      _ajax2.default.post(_this.props.profile.api_url.follow).then(function (data) {\n        _this.setState({\n          isLoading: false\n        });\n\n        _store2.default.dispatch((0, _profile.patchProfile)(data));\n      }, function (rejection) {\n        _this.setState({\n          isLoading: false\n        });\n        _snackbar2.default.apiError(rejection);\n      });\n    };\n\n    _this.state = {\n      isLoading: false\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.props.profile.is_followed) {\n        return this.props.className + ' btn-default btn-following';\n      } else {\n        return this.props.className + ' btn-default btn-follow';\n      }\n    }\n  }, {\n    key: 'getIcon',\n    value: function getIcon() {\n      if (this.props.profile.is_followed) {\n        return 'favorite';\n      } else {\n        return 'favorite_border';\n      }\n    }\n  }, {\n    key: 'getLabel',\n    value: function getLabel() {\n      if (this.props.profile.is_followed) {\n        return gettext(\"Following\");\n      } else {\n        return gettext(\"Follow\");\n      }\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        _button2.default,\n        { className: this.getClassName(),\n          disabled: this.state.isLoading,\n          onClick: this.action },\n        _react2.default.createElement(\n          'span',\n          { className: 'material-icon' },\n          this.getIcon()\n        ),\n        this.getLabel()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../reducers/profile\":137,\"../../services/ajax\":142,\"../../services/snackbar\":151,\"../../services/store\":152,\"../button\":57,\"react\":\"react\"}],91:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _search = require('../search');\n\nvar _search2 = _interopRequireDefault(_search);\n\nvar _root = require('../users-list/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _users = require('../../reducers/users');\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _pageTitle = require('../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.loadMore = function () {\n      _this.setState({\n        isBusy: true\n      });\n\n      _this.loadUsers(_this.state.page + 1, _this.state.search);\n    };\n\n    _this.search = function (ev) {\n      _this.setState({\n        isLoaded: false,\n        isBusy: true,\n\n        search: ev.target.value,\n\n        count: 0,\n        more: 0,\n\n        page: 1,\n        pages: 1\n      });\n\n      _this.loadUsers(1, ev.target.value);\n    };\n\n    _this.setSpecialProps();\n\n    if (_index2.default.has(_this.PRELOADED_DATA_KEY)) {\n      _this.initWithPreloadedData(_index2.default.pop(_this.PRELOADED_DATA_KEY));\n    } else {\n      _this.initWithoutPreloadedData();\n    }\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'setSpecialProps',\n    value: function setSpecialProps() {\n      this.PRELOADED_DATA_KEY = 'PROFILE_FOLLOWERS';\n      this.TITLE = gettext('Followers');\n      this.API_FILTER = 'followers';\n    }\n  }, {\n    key: 'initWithPreloadedData',\n    value: function initWithPreloadedData(data) {\n      this.state = {\n        isLoaded: true,\n        isBusy: false,\n\n        search: '',\n\n        count: data.count,\n        more: data.more,\n\n        page: data.page,\n        pages: data.pages\n      };\n\n      _store2.default.dispatch((0, _users.dehydrate)(data.results));\n    }\n  }, {\n    key: 'initWithoutPreloadedData',\n    value: function initWithoutPreloadedData() {\n      this.state = {\n        isLoaded: false,\n        isBusy: false,\n\n        search: '',\n\n        count: 0,\n        more: 0,\n\n        page: 1,\n        pages: 1\n      };\n\n      this.loadUsers();\n    }\n  }, {\n    key: 'loadUsers',\n    value: function loadUsers() {\n      var _ajax$get,\n          _this2 = this;\n\n      var page = arguments.length <= 0 || arguments[0] === undefined ? 1 : arguments[0];\n      var search = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n      _ajax2.default.get(_index2.default.get('USERS_API'), (_ajax$get = {}, _defineProperty(_ajax$get, this.API_FILTER, this.props.profile.id), _defineProperty(_ajax$get, 'name', search), _defineProperty(_ajax$get, 'page', page || 1), _ajax$get), 'user-' + this.API_FILTER).then(function (data) {\n        if (page === 1) {\n          _store2.default.dispatch((0, _users.dehydrate)(data.results));\n        } else {\n          _store2.default.dispatch((0, _users.append)(data.results));\n        }\n\n        _this2.setState({\n          isLoaded: true,\n          isBusy: false,\n\n          count: data.count,\n          more: data.more,\n\n          page: data.page,\n          pages: data.pages\n        });\n      }, function (rejection) {\n        _snackbar2.default.apiError(rejection);\n      });\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: this.TITLE,\n        parent: this.props.profile.username\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getLabel',\n\n    /* jshint ignore:end */\n\n    value: function getLabel() {\n      if (!this.state.isLoaded) {\n        return gettext('Loading...');\n      } else if (this.state.search) {\n        var message = ngettext(\"Found %(users)s user.\", \"Found %(users)s users.\", this.state.count);\n\n        return interpolate(message, {\n          'users': this.state.count\n        }, true);\n      } else if (this.props.profile.id === this.props.user.id) {\n        var message = ngettext(\"You have %(users)s follower.\", \"You have %(users)s followers.\", this.state.count);\n\n        return interpolate(message, {\n          'users': this.state.count\n        }, true);\n      } else {\n        var message = ngettext(\"%(username)s has %(users)s follower.\", \"%(username)s has %(users)s followers.\", this.state.count);\n\n        return interpolate(message, {\n          'username': this.props.profile.username,\n          'users': this.state.count\n        }, true);\n      }\n    }\n  }, {\n    key: 'getEmptyMessage',\n    value: function getEmptyMessage() {\n      if (this.state.search) {\n        return gettext(\"Search returned no users matching specified criteria.\");\n      } else if (this.props.user.id === this.props.profile.id) {\n        return gettext(\"You have no followers.\");\n      } else {\n        return interpolate(gettext(\"%(username)s has no followers.\"), {\n          'username': this.props.profile.username\n        }, true);\n      }\n    }\n  }, {\n    key: 'getMoreButton',\n    value: function getMoreButton() {\n      if (this.state.more) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'pager-more' },\n          _react2.default.createElement(\n            _button2.default,\n            { loading: this.state.isBusy,\n              onClick: this.loadMore },\n            interpolate(gettext(\"Show more (%(more)s)\"), {\n              'more': this.state.more\n            }, true)\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getListBody',\n    value: function getListBody() {\n      if (this.state.isLoaded && this.state.count === 0) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'p',\n          { className: 'lead' },\n          this.getEmptyMessage()\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'div',\n            null,\n            _react2.default.createElement(_root2.default, { isLoaded: this.state.isLoaded,\n              users: this.props.users,\n              showRank: true,\n              cols: 2 }),\n            this.getMoreButton()\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      return 'profile-' + this.API_FILTER;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          'nav',\n          { className: 'toolbar' },\n          _react2.default.createElement(\n            'h3',\n            { className: 'toolbar-left' },\n            this.getLabel()\n          ),\n          _react2.default.createElement(_search2.default, { className: 'toolbar-right',\n            value: this.state.search,\n            onChange: this.search,\n            placeholder: gettext(\"Search history...\") })\n        ),\n        this.getListBody()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../index\":135,\"../../reducers/users\":141,\"../../services/ajax\":142,\"../../services/page-title\":149,\"../../services/snackbar\":151,\"../../services/store\":152,\"../button\":57,\"../search\":105,\"../users-list/root\":119,\"react\":\"react\"}],92:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _followers = require('./followers');\n\nvar _followers2 = _interopRequireDefault(_followers);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\nvar _class = function (_Followers) {\n  _inherits(_class, _Followers);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'setSpecialProps',\n    value: function setSpecialProps() {\n      this.PRELOADED_DATA_KEY = 'PROFILE_FOLLOWS';\n      this.TITLE = gettext('Follows');\n      this.API_FILTER = 'follows';\n    }\n  }, {\n    key: 'getLabel',\n    value: function getLabel() {\n      if (!this.state.isLoaded) {\n        return gettext('Loading...');\n      } else if (this.state.search) {\n        var message = ngettext(\"Found %(users)s user.\", \"Found %(users)s users.\", this.state.count);\n\n        return interpolate(message, {\n          'users': this.state.count\n        }, true);\n      } else if (this.props.profile.id === this.props.user.id) {\n        var message = ngettext(\"You are following %(users)s user.\", \"You are following %(users)s users.\", this.state.count);\n\n        return interpolate(message, {\n          'users': this.state.count\n        }, true);\n      } else {\n        var message = ngettext(\"%(username)s is following %(users)s user.\", \"%(username)s is following %(users)s users.\", this.state.count);\n\n        return interpolate(message, {\n          'username': this.props.profile.username,\n          'users': this.state.count\n        }, true);\n      }\n    }\n  }, {\n    key: 'getEmptyMessage',\n    value: function getEmptyMessage() {\n      if (this.state.search) {\n        return gettext(\"Search returned no users matching specified criteria.\");\n      } else if (this.props.user.id === this.props.profile.id) {\n        return gettext(\"You are not following any users.\");\n      } else {\n        return interpolate(gettext(\"%(username)s is not following any users.\"), {\n          'username': this.props.profile.username\n        }, true);\n      }\n    }\n  }]);\n\n  return _class;\n}(_followers2.default);\n\nexports.default = _class;\n\n},{\"./followers\":91,\"react\":\"react\"}],93:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _modalLoader = require('../../modal-loader');\n\nvar _modalLoader2 = _interopRequireDefault(_modalLoader);\n\nvar _yesNoSwitch = require('../../yes-no-switch');\n\nvar _yesNoSwitch2 = _interopRequireDefault(_yesNoSwitch);\n\nvar _modalMessage = require('../../modal-message');\n\nvar _modalMessage2 = _interopRequireDefault(_modalMessage);\n\nvar _users = require('../../../reducers/users');\n\nvar _ajax = require('../../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.state = {\n      isLoaded: false,\n      isLoading: false,\n      error: null,\n\n      is_avatar_locked: '',\n      avatar_lock_user_message: '',\n      avatar_lock_staff_message: ''\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this2 = this;\n\n      _ajax2.default.get(this.props.profile.api_url.moderate_avatar).then(function (options) {\n        _this2.setState({\n          isLoaded: true,\n\n          is_avatar_locked: options.is_avatar_locked,\n          avatar_lock_user_message: options.avatar_lock_user_message || '',\n          avatar_lock_staff_message: options.avatar_lock_staff_message || ''\n        });\n      }, function (rejection) {\n        _this2.setState({\n          isLoaded: true,\n          error: rejection.detail\n        });\n      });\n    }\n  }, {\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        _snackbar2.default.error(this.validate().username[0]);\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.profile.api_url.moderate_avatar, {\n        is_avatar_locked: this.state.is_avatar_locked,\n        avatar_lock_user_message: this.state.avatar_lock_user_message,\n        avatar_lock_staff_message: this.state.avatar_lock_staff_message\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      _store2.default.dispatch((0, _users.updateAvatar)(this.props.profile, apiResponse.avatar_hash));\n      _snackbar2.default.success(gettext(\"Avatar controls have been changed.\"));\n    }\n  }, {\n    key: 'getFormBody',\n    value: function getFormBody() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-body' },\n          _react2.default.createElement(\n            _formGroup2.default,\n            { label: gettext(\"Lock avatar\"),\n              helpText: gettext(\"Locking user avatar will prohibit user from changing his avatar and will reset his/her avatar to default one.\"),\n              'for': 'id_is_avatar_locked' },\n            _react2.default.createElement(_yesNoSwitch2.default, { id: 'id_is_avatar_locked',\n              disabled: this.state.isLoading,\n              iconOn: 'lock_outline',\n              iconOff: 'lock_open',\n              labelOn: gettext(\"Disallow user from changing avatar\"),\n              labelOff: gettext(\"Allow user to change avatar\"),\n              onChange: this.bindInput('is_avatar_locked'),\n              value: this.state.is_avatar_locked })\n          ),\n          _react2.default.createElement(\n            _formGroup2.default,\n            { label: gettext(\"User message\"),\n              helpText: gettext(\"Optional message for user explaining why he/she is prohibited form changing avatar.\"),\n              'for': 'id_avatar_lock_user_message' },\n            _react2.default.createElement('textarea', { id: 'id_avatar_lock_user_message',\n              className: 'form-control',\n              rows: '4',\n              disabled: this.state.isLoading,\n              onChange: this.bindInput('avatar_lock_user_message'),\n              value: this.state.avatar_lock_user_message })\n          ),\n          _react2.default.createElement(\n            _formGroup2.default,\n            { label: gettext(\"Staff message\"),\n              helpText: gettext(\"Optional message for forum team members explaining why user is prohibited form changing avatar.\"),\n              'for': 'id_avatar_lock_staff_message' },\n            _react2.default.createElement('textarea', { id: 'id_avatar_lock_staff_message',\n              className: 'form-control',\n              rows: '4',\n              disabled: this.state.isLoading,\n              onChange: this.bindInput('avatar_lock_staff_message'),\n              value: this.state.avatar_lock_staff_message })\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-footer' },\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn btn-default', 'data-dismiss': 'modal' },\n            gettext(\"Close\")\n          ),\n          _react2.default.createElement(\n            _button2.default,\n            { className: 'btn-primary', loading: this.state.isLoading },\n            gettext(\"Save changes\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getModalBody',\n    value: function getModalBody() {\n      if (this.state.error) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_modalMessage2.default, { icon: 'remove_circle_outline',\n          message: this.state.error });\n        /* jshint ignore:end */\n      } else if (this.state.isLoaded) {\n          return this.getFormBody();\n        } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_modalLoader2.default, null);\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.state.error) {\n        return \"modal-dialog modal-message modal-avatar-controls\";\n      } else {\n        return \"modal-dialog modal-avatar-controls\";\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName(),\n          role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Avatar controls\")\n            )\n          ),\n          this.getModalBody()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../../../reducers/users\":141,\"../../../services/ajax\":142,\"../../../services/snackbar\":151,\"../../../services/store\":152,\"../../button\":57,\"../../form\":70,\"../../form-group\":69,\"../../modal-loader\":73,\"../../modal-message\":74,\"../../yes-no-switch\":134,\"react\":\"react\"}],94:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _modalLoader = require('../../modal-loader');\n\nvar _modalLoader2 = _interopRequireDefault(_modalLoader);\n\nvar _modalMessage = require('../../modal-message');\n\nvar _modalMessage2 = _interopRequireDefault(_modalMessage);\n\nvar _index = require('../../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _usernameHistory = require('../../../reducers/username-history');\n\nvar _users = require('../../../reducers/users');\n\nvar _ajax = require('../../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _validators = require('../../../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.state = {\n      isLoaded: false,\n      isLoading: false,\n      error: null,\n\n      username: '',\n      validators: {\n        username: [validators.usernameContent(), validators.usernameMinLength(_index2.default.get('SETTINGS')), validators.usernameMaxLength(_index2.default.get('SETTINGS'))]\n      }\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this2 = this;\n\n      _ajax2.default.get(this.props.profile.api_url.moderate_username).then(function () {\n        _this2.setState({\n          isLoaded: true\n        });\n      }, function (rejection) {\n        _this2.setState({\n          isLoaded: true,\n          error: rejection.detail\n        });\n      });\n    }\n  }, {\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        _snackbar2.default.error(this.validate().username[0]);\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.profile.api_url.moderate_username, {\n        username: this.state.username\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      this.setState({\n        username: ''\n      });\n\n      _store2.default.dispatch((0, _usernameHistory.addNameChange)(apiResponse, this.props.profile, this.props.user));\n      _store2.default.dispatch((0, _users.updateUsername)(this.props.profile, apiResponse.username, apiResponse.slug));\n\n      _snackbar2.default.success(gettext(\"Username has been changed.\"));\n    }\n  }, {\n    key: 'getFormBody',\n    value: function getFormBody() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-body' },\n          _react2.default.createElement(\n            _formGroup2.default,\n            { label: gettext(\"New username\"), 'for': 'id_username' },\n            _react2.default.createElement('input', { type: 'text', id: 'id_username', className: 'form-control',\n              disabled: this.state.isLoading,\n              onChange: this.bindInput('username'),\n              value: this.state.username })\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-footer' },\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn btn-default', 'data-dismiss': 'modal' },\n            gettext(\"Close\")\n          ),\n          _react2.default.createElement(\n            _button2.default,\n            { className: 'btn-primary', loading: this.state.isLoading },\n            gettext(\"Change username\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getModalBody',\n    value: function getModalBody() {\n      if (this.state.error) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_modalMessage2.default, { icon: 'remove_circle_outline',\n          message: this.state.error });\n        /* jshint ignore:end */\n      } else if (this.state.isLoaded) {\n          return this.getFormBody();\n        } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_modalLoader2.default, null);\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.state.error) {\n        return \"modal-dialog modal-message modal-rename-user\";\n      } else {\n        return \"modal-dialog modal-rename-user\";\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName(),\n          role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Change username\")\n            )\n          ),\n          this.getModalBody()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../../../index\":135,\"../../../reducers/username-history\":140,\"../../../reducers/users\":141,\"../../../services/ajax\":142,\"../../../services/snackbar\":151,\"../../../services/store\":152,\"../../../utils/validators\":162,\"../../button\":57,\"../../form\":70,\"../../form-group\":69,\"../../modal-loader\":73,\"../../modal-message\":74,\"react\":\"react\"}],95:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _modalLoader = require('../../modal-loader');\n\nvar _modalLoader2 = _interopRequireDefault(_modalLoader);\n\nvar _modalMessage = require('../../modal-message');\n\nvar _modalMessage2 = _interopRequireDefault(_modalMessage);\n\nvar _yesNoSwitch = require('../../yes-no-switch');\n\nvar _yesNoSwitch2 = _interopRequireDefault(_yesNoSwitch);\n\nvar _index = require('../../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _polls = require('../../../services/polls');\n\nvar _polls2 = _interopRequireDefault(_polls);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.countdown = function () {\n      window.setTimeout(function () {\n        if (_this.state.countdown > 1) {\n          _this.setState({\n            countdown: _this.state.countdown - 1\n          });\n          _this.countdown();\n        } else if (!_this.state.confirm) {\n          _this.setState({\n            confirm: true\n          });\n        }\n      }, 1000);\n    };\n\n    _this.state = {\n      isLoaded: false,\n      isLoading: false,\n      isDeleted: false,\n      error: null,\n\n      countdown: 5,\n      confirm: false,\n\n      with_content: false\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this2 = this;\n\n      _ajax2.default.get(this.props.profile.api_url.delete).then(function () {\n        _this2.setState({\n          isLoaded: true\n        });\n\n        _this2.countdown();\n      }, function (rejection) {\n        _this2.setState({\n          isLoaded: true,\n          error: rejection.detail\n        });\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'send',\n\n    /* jshint ignore:end */\n\n    value: function send() {\n      return _ajax2.default.post(this.props.profile.api_url.delete, {\n        with_content: this.state.with_content\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess() {\n      _polls2.default.stop('user-profile');\n\n      if (this.state.with_content) {\n        this.setState({\n          isDeleted: interpolate(gettext(\"%(username)s's account, threads, posts and other content has been deleted.\"), {\n            'username': this.props.profile.username\n          }, true)\n        });\n      } else {\n        this.setState({\n          isDeleted: interpolate(gettext(\"%(username)s's account has been deleted and other content has been hidden.\"), {\n            'username': this.props.profile.username\n          }, true)\n        });\n      }\n    }\n  }, {\n    key: 'getButtonLabel',\n    value: function getButtonLabel() {\n      if (this.state.confirm) {\n        return interpolate(gettext(\"Delete %(username)s\"), {\n          'username': this.props.profile.username\n        }, true);\n      } else {\n        return interpolate(gettext(\"Please wait... (%(countdown)ss)\"), {\n          'countdown': this.state.countdown\n        }, true);\n      }\n    }\n  }, {\n    key: 'getForm',\n    value: function getForm() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-body' },\n          _react2.default.createElement(\n            _formGroup2.default,\n            { label: gettext(\"User content\"),\n              labelClass: 'col-sm-4', controlClass: 'col-sm-8',\n              'for': 'id_with_content' },\n            _react2.default.createElement(_yesNoSwitch2.default, { id: 'id_with_content',\n              disabled: this.state.isLoading,\n              labelOn: gettext(\"Delete together with user's account\"),\n              labelOff: gettext(\"Hide after deleting user's account\"),\n              onChange: this.bindInput('with_content'),\n              value: this.state.with_content })\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-footer' },\n          _react2.default.createElement(\n            'button',\n            { type: 'button',\n              className: 'btn btn-default',\n              'data-dismiss': 'modal' },\n            gettext(\"Cancel\")\n          ),\n          _react2.default.createElement(\n            _button2.default,\n            { className: 'btn-danger',\n              loading: this.state.isLoading,\n              disabled: !this.state.confirm },\n            this.getButtonLabel()\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getDeletedBody',\n    value: function getDeletedBody() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body' },\n        _react2.default.createElement(\n          'div',\n          { className: 'message-icon' },\n          _react2.default.createElement(\n            'span',\n            { className: 'material-icon' },\n            'info_outline'\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'message-body' },\n          _react2.default.createElement(\n            'p',\n            { className: 'lead' },\n            this.state.isDeleted\n          ),\n          _react2.default.createElement(\n            'p',\n            null,\n            _react2.default.createElement(\n              'a',\n              { href: _index2.default.get('USERS_LIST_URL') },\n              gettext(\"Return to users list\")\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getModalBody',\n    value: function getModalBody() {\n      if (this.state.error) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_modalMessage2.default, { icon: 'remove_circle_outline',\n          message: this.state.error });\n        /* jshint ignore:end */\n      } else if (this.state.isLoaded) {\n          if (this.state.isDeleted) {\n            return this.getDeletedBody();\n          } else {\n            return this.getForm();\n          }\n        } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_modalLoader2.default, null);\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.state.error || this.state.isDeleted) {\n        return \"modal-dialog modal-message modal-delete-account\";\n      } else {\n        return \"modal-dialog modal-delete-account\";\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName(),\n          role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Delete user account\")\n            )\n          ),\n          this.getModalBody()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../../../index\":135,\"../../../services/ajax\":142,\"../../../services/polls\":150,\"../../button\":57,\"../../form\":70,\"../../form-group\":69,\"../../modal-loader\":73,\"../../modal-message\":74,\"../../yes-no-switch\":134,\"react\":\"react\"}],96:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRedux = require('react-redux');\n\nvar _avatarControls = require('./avatar-controls');\n\nvar _avatarControls2 = _interopRequireDefault(_avatarControls);\n\nvar _changeUsername = require('./change-username');\n\nvar _changeUsername2 = _interopRequireDefault(_changeUsername);\n\nvar _deleteAccount = require('./delete-account');\n\nvar _deleteAccount2 = _interopRequireDefault(_deleteAccount);\n\nvar _modal = require('../../../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\n/* jshint ignore:start */\nvar select = function select(store) {\n  return {\n    tick: store.tick,\n    user: store.auth,\n    profile: store.profile\n  };\n};\n/* jshint ignore:end */\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.showAvatarDialog = function () {\n      _modal2.default.show((0, _reactRedux.connect)(select)(_avatarControls2.default));\n    }, _this.showRenameDialog = function () {\n      _modal2.default.show((0, _reactRedux.connect)(select)(_changeUsername2.default));\n    }, _this.showDeleteDialog = function () {\n      _modal2.default.show((0, _reactRedux.connect)(select)(_deleteAccount2.default));\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'getAvatarButton',\n\n    /* jshint ignore:end */\n\n    value: function getAvatarButton() {\n      if (this.props.profile.acl.can_moderate_avatar) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'li',\n          null,\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn-link',\n              onClick: this.showAvatarDialog },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'portrait'\n            ),\n            gettext(\"Avatar controls\")\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getRenameButton',\n\n    /* jshint ignore:end */\n\n    value: function getRenameButton() {\n      if (this.props.profile.acl.can_rename) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'li',\n          null,\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn-link',\n              onClick: this.showRenameDialog },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'credit_card'\n            ),\n            gettext(\"Change username\")\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getDeleteButton',\n\n    /* jshint ignore:end */\n\n    value: function getDeleteButton() {\n      if (this.props.profile.acl.can_delete) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'li',\n          null,\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn-link',\n              onClick: this.showDeleteDialog },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'clear'\n            ),\n            gettext(\"Delete account\")\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu dropdown-menu-right', role: 'menu' },\n        this.getAvatarButton(),\n        this.getRenameButton(),\n        this.getDeleteButton(),\n        _react2.default.createElement('li', { className: 'divider hidden-md hidden-lg' }),\n        _react2.default.createElement(\n          'li',\n          { className: 'dropdown-buttons hidden-md hidden-lg' },\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn btn-default btn-block',\n              onClick: this.props.toggleNav },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'menu'\n            ),\n            gettext(\"Menu\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../../services/modal\":148,\"./avatar-controls\":93,\"./change-username\":94,\"./delete-account\":95,\"react\":\"react\",\"react-redux\":\"react-redux\"}],97:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactNav = exports.SideNav = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouter = require('react-router');\n\nvar _li = require('../li');\n\nvar _li2 = _interopRequireDefault(_li);\n\nvar _followButton = require('./follow-button');\n\nvar _followButton2 = _interopRequireDefault(_followButton);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n//jshint ignore:line\n// jshint ignore:line\n\n//jshint ignore:line\n\nvar SideNav = exports.SideNav = function (_React$Component) {\n  _inherits(SideNav, _React$Component);\n\n  function SideNav() {\n    _classCallCheck(this, SideNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(SideNav).apply(this, arguments));\n  }\n\n  _createClass(SideNav, [{\n    key: 'getMeta',\n    value: function getMeta(meta) {\n      if (meta) {\n        // jshint ignore:start\n        return _react2.default.createElement(\n          'span',\n          { className: 'badge' },\n          this.props.profile[meta.attr]\n        );\n        // jshint ignore:end\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'div',\n        { className: 'list-group nav-side' },\n        this.props.pages.map(function (page) {\n          return _react2.default.createElement(\n            _reactRouter.Link,\n            { to: _this2.props.baseUrl + page.component + '/',\n              className: 'list-group-item',\n              activeClassName: 'active',\n              key: page.component },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              page.icon\n            ),\n            page.name,\n            _this2.getMeta(page.meta)\n          );\n        })\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return SideNav;\n}(_react2.default.Component);\n\nvar CompactNav = exports.CompactNav = function (_SideNav) {\n  _inherits(CompactNav, _SideNav);\n\n  function CompactNav() {\n    _classCallCheck(this, CompactNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));\n  }\n\n  _createClass(CompactNav, [{\n    key: 'showSpecialOptions',\n    value: function showSpecialOptions() {\n      return this.props.profile.acl.can_follow || this.props.profile.acl.can_moderate;\n    }\n  }, {\n    key: 'getFollowButton',\n    value: function getFollowButton() {\n      if (this.props.profile.acl.can_follow) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_followButton2.default, { className: 'btn btn-block',\n          profile: this.props.profile });\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getModerationButton',\n    value: function getModerationButton() {\n      if (this.props.profile.acl.can_moderate) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'button',\n          { type: 'button', className: 'btn btn-default btn-block',\n            onClick: this.props.toggleModeration },\n          _react2.default.createElement(\n            'span',\n            { className: 'material-icon' },\n            'tonality'\n          ),\n          gettext(\"Moderation\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getSpecialOptions',\n    value: function getSpecialOptions() {\n      if (this.showSpecialOptions()) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'li',\n          { className: 'dropdown-buttons' },\n          this.getFollowButton(),\n          this.getModerationButton()\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this4 = this;\n\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu', role: 'menu' },\n        this.getSpecialOptions(),\n        this.showSpecialOptions() ? _react2.default.createElement('li', { className: 'divider' }) : null,\n        this.props.pages.map(function (page) {\n          return _react2.default.createElement(\n            _li2.default,\n            { path: _this4.props.baseUrl + page.component + '/',\n              key: page.component },\n            _react2.default.createElement(\n              _reactRouter.Link,\n              { to: _this4.props.baseUrl + page.component + '/',\n                onClick: _this4.props.hideNav },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                page.icon\n              ),\n              page.name,\n              _this4.getMeta(page.meta)\n            )\n          );\n        })\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return CompactNav;\n}(SideNav);\n\n},{\"../../index\":135,\"../li\":71,\"./follow-button\":90,\"react\":\"react\",\"react-router\":\"react-router\"}],98:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.select = select;\nexports.paths = paths;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRedux = require('react-redux');\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _banDetails = require('./ban-details');\n\nvar _banDetails2 = _interopRequireDefault(_banDetails);\n\nvar _followers = require('./followers');\n\nvar _followers2 = _interopRequireDefault(_followers);\n\nvar _follows = require('./follows');\n\nvar _follows2 = _interopRequireDefault(_follows);\n\nvar _usernameHistory = require('./username-history');\n\nvar _usernameHistory2 = _interopRequireDefault(_usernameHistory);\n\nvar _Header = require('./Header');\n\nvar _Header2 = _interopRequireDefault(_Header);\n\nvar _nav = require('./moderation/nav');\n\nvar _nav2 = _interopRequireDefault(_nav);\n\nvar _navs = require('./navs');\n\nvar _withDropdown = require('../with-dropdown');\n\nvar _withDropdown2 = _interopRequireDefault(_withDropdown);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _profile = require('../../reducers/profile');\n\nvar _polls = require('../../services/polls');\n\nvar _polls2 = _interopRequireDefault(_polls);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_WithDropdown) {\n  _inherits(_class, _WithDropdown);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.update = function (data) {\n      _store2.default.dispatch((0, _profile.dehydrate)(data));\n    };\n\n    _this.toggleNav = function () {\n      if (_this.state.dropdown === 'pages') {\n        _this.setState({\n          dropdown: false\n        });\n      } else {\n        _this.setState({\n          dropdown: 'pages'\n        });\n      }\n    };\n\n    _this.toggleModeration = function () {\n      if (_this.state.dropdown === 'moderation') {\n        _this.setState({\n          dropdown: false\n        });\n      } else {\n        _this.setState({\n          dropdown: 'moderation'\n        });\n      }\n    };\n\n    _this.startPolling(props.profile.api_url.root);\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'startPolling',\n    value: function startPolling(api) {\n      _polls2.default.start({\n        poll: 'user-profile',\n        url: api,\n        frequency: 90 * 1000,\n        update: this.update\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getNavDropdown',\n\n    /* jshint ignore:end */\n\n    value: function getNavDropdown() {\n      if (this.state.dropdown === 'pages') {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_navs.CompactNav, { pages: _index2.default.get('PROFILE_PAGES'),\n          baseUrl: _index2.default.get('PROFILE').absolute_url,\n          profile: this.props.profile,\n          toggleModeration: this.toggleModeration,\n          hideNav: this.hideNav });\n        /* jshint ignore:end */\n      } else if (this.state.dropdown === 'moderation') {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_nav2.default, { profile: this.props.profile,\n            toggleNav: this.toggleNav,\n            hideNav: this.hideNav });\n          /* jshint ignore:end */\n        } else {\n            return null;\n          }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      var baseClass = 'page page-user-profile';\n      if (false && this.props.profile.rank.css_class) {\n        return baseClass + ' page-user-profile-' + this.props.profile.rank.css_class;\n      } else {\n        return baseClass;\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName() },\n        _react2.default.createElement(_Header2.default, { user: this.props.user,\n          profile: this.props.profile,\n          toggleNav: this.toggleNav,\n          toggleModeration: this.toggleModeration }),\n        _react2.default.createElement(\n          'div',\n          { className: this.getCompactNavClassName() },\n          this.getNavDropdown()\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'row' },\n            _react2.default.createElement(\n              'div',\n              { className: 'col-md-3 hidden-xs hidden-sm' },\n              _react2.default.createElement(\n                'div',\n                { className: 'profile-side-avatar' },\n                _react2.default.createElement(_avatar2.default, { user: this.props.profile, size: '400' })\n              ),\n              _react2.default.createElement(_navs.SideNav, { pages: _index2.default.get('PROFILE_PAGES'),\n                baseUrl: _index2.default.get('PROFILE').absolute_url,\n                profile: this.props.profile })\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'col-md-9' },\n              this.props.children\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_withDropdown2.default);\n\nexports.default = _class;\nfunction select(store) {\n  return {\n    'tick': store.tick.tick,\n    'user': store.auth.user,\n    'users': store.users,\n    'profile': store.profile,\n    'username-history': store['username-history']\n  };\n}\n\nvar Placeholder = function (_React$Component) {\n  _inherits(Placeholder, _React$Component);\n\n  function Placeholder() {\n    _classCallCheck(this, Placeholder);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(Placeholder).apply(this, arguments));\n  }\n\n  _createClass(Placeholder, [{\n    key: 'render',\n    value: function render() {\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'div',\n        { className: 'container' },\n        _react2.default.createElement(\n          'p',\n          null,\n          \"Hello, I'm placeholder for \" + this.props.route.name\n        )\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return Placeholder;\n}(_react2.default.Component);\n\nvar COMPONENTS = {\n  'posts': Placeholder,\n  'threads': Placeholder,\n  'followers': _followers2.default,\n  'follows': _follows2.default,\n  'username-history': _usernameHistory2.default,\n  'ban-details': _banDetails2.default\n};\n\nfunction paths() {\n  var paths = [];\n\n  _index2.default.get('PROFILE_PAGES').forEach(function (item) {\n    paths.push(Object.assign({}, item, {\n      path: _index2.default.get('PROFILE').absolute_url + item.component + '/',\n      component: (0, _reactRedux.connect)(select)(COMPONENTS[item.component])\n    }));\n  });\n\n  return paths;\n}\n\n},{\"../../index\":135,\"../../reducers/profile\":137,\"../../services/polls\":150,\"../../services/store\":152,\"../avatar\":55,\"../with-dropdown\":133,\"./Header\":88,\"./ban-details\":89,\"./followers\":91,\"./follows\":92,\"./moderation/nav\":96,\"./navs\":97,\"./username-history\":99,\"react\":\"react\",\"react-redux\":\"react-redux\"}],99:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _search = require('../search');\n\nvar _search2 = _interopRequireDefault(_search);\n\nvar _usernameHistory = require('../username-history');\n\nvar _usernameHistory2 = _interopRequireDefault(_usernameHistory);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _usernameHistory3 = require('../../reducers/username-history');\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _pageTitle = require('../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.loadMore = function () {\n      _this.setState({\n        isBusy: true\n      });\n\n      _this.loadChanges(_this.state.page + 1, _this.state.search);\n    };\n\n    _this.search = function (ev) {\n      _this.setState({\n        isLoaded: false,\n        isBusy: true,\n\n        search: ev.target.value,\n\n        count: 0,\n        more: 0,\n\n        page: 1,\n        pages: 1\n      });\n\n      _this.loadChanges(1, ev.target.value);\n    };\n\n    if (_index2.default.has('PROFILE_NAME_HISTORY')) {\n      _this.initWithPreloadedData(_index2.default.pop('PROFILE_NAME_HISTORY'));\n    } else {\n      _this.initWithoutPreloadedData();\n    }\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'initWithPreloadedData',\n    value: function initWithPreloadedData(data) {\n      this.state = {\n        isLoaded: true,\n        isBusy: false,\n\n        search: '',\n\n        count: data.count,\n        more: data.more,\n\n        page: data.page,\n        pages: data.pages\n      };\n\n      _store2.default.dispatch((0, _usernameHistory3.dehydrate)(data.results));\n    }\n  }, {\n    key: 'initWithoutPreloadedData',\n    value: function initWithoutPreloadedData() {\n      this.state = {\n        isLoaded: false,\n        isBusy: false,\n\n        search: '',\n\n        count: 0,\n        more: 0,\n\n        page: 1,\n        pages: 1\n      };\n\n      this.loadChanges();\n    }\n  }, {\n    key: 'loadChanges',\n    value: function loadChanges() {\n      var _this2 = this;\n\n      var page = arguments.length <= 0 || arguments[0] === undefined ? 1 : arguments[0];\n      var search = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n      _ajax2.default.get(_index2.default.get('USERNAME_CHANGES_API'), {\n        user: this.props.profile.id,\n        search: search,\n        page: page || 1\n      }, 'search-username-history').then(function (data) {\n        if (page === 1) {\n          _store2.default.dispatch((0, _usernameHistory3.dehydrate)(data.results));\n        } else {\n          _store2.default.dispatch((0, _usernameHistory3.append)(data.results));\n        }\n\n        _this2.setState({\n          isLoaded: true,\n          isBusy: false,\n\n          count: data.count,\n          more: data.more,\n\n          page: data.page,\n          pages: data.pages\n        });\n      }, function (rejection) {\n        _snackbar2.default.apiError(rejection);\n      });\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: gettext(\"Username history\"),\n        parent: this.props.profile.username\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getLabel',\n\n    /* jshint ignore:end */\n\n    value: function getLabel() {\n      if (!this.state.isLoaded) {\n        return gettext('Loading...');\n      } else if (this.state.search) {\n        var message = ngettext(\"Found %(changes)s username change.\", \"Found %(changes)s username changes.\", this.state.count);\n\n        return interpolate(message, {\n          'changes': this.state.count\n        }, true);\n      } else if (this.props.profile.id === this.props.user.id) {\n        var message = ngettext(\"Your username was changed %(changes)s time.\", \"Your username was changed %(changes)s times.\", this.state.count);\n\n        return interpolate(message, {\n          'changes': this.state.count\n        }, true);\n      } else {\n        var message = ngettext(\"%(username)s's username was changed %(changes)s time.\", \"%(username)s's username was changed %(changes)s times.\", this.state.count);\n\n        return interpolate(message, {\n          'username': this.props.profile.username,\n          'changes': this.state.count\n        }, true);\n      }\n    }\n  }, {\n    key: 'getEmptyMessage',\n    value: function getEmptyMessage() {\n      if (this.state.search) {\n        return gettext(\"Search returned no username changes matching specified criteria.\");\n      } else if (this.props.user.id === this.props.profile.id) {\n        return gettext(\"No name changes have been recorded for your account.\");\n      } else {\n        return interpolate(gettext(\"%(username)s's username was never changed.\"), {\n          'username': this.props.profile.username\n        }, true);\n      }\n    }\n  }, {\n    key: 'getMoreButton',\n    value: function getMoreButton() {\n      if (this.state.more) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'pager-more' },\n          _react2.default.createElement(\n            _button2.default,\n            { loading: this.state.isBusy,\n              onClick: this.loadMore },\n            interpolate(gettext(\"Show older (%(more)s)\"), {\n              'more': this.state.more\n            }, true)\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'profile-username-history' },\n        _react2.default.createElement(\n          'nav',\n          { className: 'toolbar' },\n          _react2.default.createElement(\n            'h3',\n            { className: 'toolbar-left' },\n            this.getLabel()\n          ),\n          _react2.default.createElement(_search2.default, { className: 'toolbar-right',\n            value: this.state.search,\n            onChange: this.search,\n            placeholder: gettext(\"Search history...\") })\n        ),\n        _react2.default.createElement(_usernameHistory2.default, { isLoaded: this.state.isLoaded,\n          emptyMessage: this.getEmptyMessage(),\n          changes: this.props['username-history'] }),\n        this.getMoreButton()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../index\":135,\"../../reducers/username-history\":140,\"../../services/ajax\":142,\"../../services/page-title\":149,\"../../services/snackbar\":151,\"../../services/store\":152,\"../button\":57,\"../search\":105,\"../username-history\":118,\"react\":\"react\"}],100:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _loader = require('./loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nvar _register = require('./register.js');\n\nvar _register2 = _interopRequireDefault(_register);\n\nvar _captcha = require('../services/captcha');\n\nvar _captcha2 = _interopRequireDefault(_captcha);\n\nvar _modal = require('../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _zxcvbn = require('../services/zxcvbn');\n\nvar _zxcvbn2 = _interopRequireDefault(_zxcvbn);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.showRegisterModal = function () {\n      if (misago.get('SETTINGS').account_activation === 'closed') {\n        _snackbar2.default.info(gettext(\"New registrations are currently disabled.\"));\n      } else if (_this.state.isLoaded) {\n        _modal2.default.show(_register2.default);\n      } else {\n        _this.setState({\n          'isLoading': true\n        });\n\n        Promise.all([_captcha2.default.load(), _zxcvbn2.default.load()]).then(function () {\n          if (!_this.state.isLoaded) {\n            _this.setState({\n              'isLoading': false,\n              'isLoaded': false\n            });\n          }\n\n          _modal2.default.show(_register2.default);\n        });\n      }\n    };\n\n    _this.state = {\n      'isLoading': false,\n      'isLoaded': false\n    };\n    return _this;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'getClassName',\n\n    /* jshint ignore:end */\n\n    value: function getClassName() {\n      return this.props.className + (this.state.isLoading ? ' btn-loading' : '');\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: 'button', onClick: this.showRegisterModal,\n          className: 'btn ' + this.getClassName(),\n          disabled: this.state.isLoaded },\n        gettext(\"Register\"),\n        this.state.isLoading ? _react2.default.createElement(_loader2.default, null) : null\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../services/captcha\":144,\"../services/modal\":148,\"../services/snackbar\":151,\"../services/zxcvbn\":153,\"./loader\":72,\"./register.js\":101,\"react\":\"react\"}],101:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.RegisterComplete = exports.RegisterForm = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('./form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _passwordStrength = require('./password-strength');\n\nvar _passwordStrength2 = _interopRequireDefault(_passwordStrength);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _auth = require('../services/auth');\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _captcha = require('../services/captcha');\n\nvar _captcha2 = _interopRequireDefault(_captcha);\n\nvar _modal = require('../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nvar _validators = require('../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar RegisterForm = exports.RegisterForm = function (_Form) {\n  _inherits(RegisterForm, _Form);\n\n  function RegisterForm(props) {\n    _classCallCheck(this, RegisterForm);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RegisterForm).call(this, props));\n\n    _this.state = {\n      isLoading: false,\n\n      username: '',\n      email: '',\n      password: '',\n      captcha: '',\n\n      validators: {\n        username: [validators.usernameContent(), validators.usernameMinLength(_index2.default.get('SETTINGS')), validators.usernameMaxLength(_index2.default.get('SETTINGS'))],\n        email: [validators.email()],\n        password: [validators.passwordMinLength(_index2.default.get('SETTINGS'))],\n        captcha: _captcha2.default.validator()\n      },\n\n      errors: {}\n    };\n    return _this;\n  }\n\n  _createClass(RegisterForm, [{\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        _snackbar2.default.error(gettext(\"Form contains errors.\"));\n        this.setState({\n          errors: this.validate()\n        });\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('USERS_API'), {\n        username: this.state.username,\n        email: this.state.email,\n        password: this.state.password,\n        captcha: this.state.captcha\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      this.props.callback(apiResponse);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        this.setState({\n          'errors': Object.assign({}, this.state.errors, rejection)\n        });\n        _snackbar2.default.error(gettext(\"Form contains errors.\"));\n      } else if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n        _modal2.default.hide();\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'getLegalFootNote',\n    value: function getLegalFootNote() {\n      if (_index2.default.get('TERMS_OF_SERVICE_URL')) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'a',\n          { href: _index2.default.get('TERMS_OF_SERVICE_URL'),\n            target: '_blank' },\n          gettext(\"By registering you agree to site's terms and conditions.\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-dialog modal-register', role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Register\")\n            )\n          ),\n          _react2.default.createElement(\n            'form',\n            { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n            _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),\n            _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),\n            _react2.default.createElement(\n              'div',\n              { className: 'modal-body' },\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Username\"), 'for': 'id_username',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',\n                  validation: this.state.errors.username },\n                _react2.default.createElement('input', { type: 'text', id: 'id_username', className: 'form-control',\n                  'aria-describedby': 'id_username_status',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('username'),\n                  value: this.state.username })\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"E-mail\"), 'for': 'id_email',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',\n                  validation: this.state.errors.email },\n                _react2.default.createElement('input', { type: 'text', id: 'id_email', className: 'form-control',\n                  'aria-describedby': 'id_email_status',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('email'),\n                  value: this.state.email })\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Password\"), 'for': 'id_password',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',\n                  validation: this.state.errors.password,\n                  extra: _react2.default.createElement(_passwordStrength2.default, { password: this.state.password,\n                    inputs: [this.state.username, this.state.email] }) },\n                _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',\n                  'aria-describedby': 'id_password_status',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('password'),\n                  value: this.state.password })\n              ),\n              _captcha2.default.component({\n                form: this,\n                labelClass: \"col-sm-4\",\n                controlClass: \"col-sm-8\"\n              })\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'modal-footer' },\n              this.getLegalFootNote(),\n              _react2.default.createElement(\n                _button2.default,\n                { className: 'btn-primary', loading: this.state.isLoading },\n                gettext(\"Register account\")\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return RegisterForm;\n}(_form2.default);\n\nvar RegisterComplete = exports.RegisterComplete = function (_React$Component) {\n  _inherits(RegisterComplete, _React$Component);\n\n  function RegisterComplete() {\n    _classCallCheck(this, RegisterComplete);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(RegisterComplete).apply(this, arguments));\n  }\n\n  _createClass(RegisterComplete, [{\n    key: 'getLead',\n    value: function getLead() {\n      if (this.props.activation === 'user') {\n        return gettext(\"%(username)s, your account has been created but you need to activate it before you will be able to sign in.\");\n      } else if (this.props.activation === 'admin') {\n        return gettext(\"%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in.\");\n      }\n    }\n  }, {\n    key: 'getSubscript',\n    value: function getSubscript() {\n      if (this.props.activation === 'user') {\n        return gettext(\"We have sent an e-mail to %(email)s with link that you have to click to activate your account.\");\n      } else if (this.props.activation === 'admin') {\n        return gettext(\"We will send an e-mail to %(email)s when this takes place.\");\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-dialog modal-message modal-register',\n          role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Registration complete\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-body' },\n            _react2.default.createElement(\n              'div',\n              { className: 'message-icon' },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                'info_outline'\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'message-body' },\n              _react2.default.createElement(\n                'p',\n                { className: 'lead' },\n                interpolate(this.getLead(), { 'username': this.props.username }, true)\n              ),\n              _react2.default.createElement(\n                'p',\n                null,\n                interpolate(this.getSubscript(), { 'email': this.props.email }, true)\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return RegisterComplete;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component2) {\n  _inherits(_class, _React$Component2);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this3.completeRegistration = function (apiResponse) {\n      if (apiResponse.activation === 'active') {\n        _modal2.default.hide();\n        _auth2.default.signIn(apiResponse);\n      } else {\n        _this3.setState({\n          complete: apiResponse\n        });\n      }\n    };\n\n    _this3.state = {\n      complete: false\n    };\n    return _this3;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.state.complete) {\n        return _react2.default.createElement(RegisterComplete, { activation: this.state.complete.activation,\n          username: this.state.complete.username,\n          email: this.state.complete.email });\n      } else {\n        return _react2.default.createElement(RegisterForm, { callback: this.completeRegistration });\n      }\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../index\":135,\"../services/ajax\":142,\"../services/auth\":143,\"../services/captcha\":144,\"../services/modal\":148,\"../services/snackbar\":151,\"../utils/banned-page\":154,\"../utils/validators\":162,\"./button\":57,\"./form\":70,\"./form-group\":69,\"./password-strength\":87,\"react\":\"react\"}],102:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.LinkSent = exports.RequestLinkForm = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\nvar RequestLinkForm = exports.RequestLinkForm = function (_Form) {\n  _inherits(RequestLinkForm, _Form);\n\n  function RequestLinkForm(props) {\n    _classCallCheck(this, RequestLinkForm);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RequestLinkForm).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n\n      'email': '',\n\n      'validators': {\n        'email': [validators.email()]\n      }\n    };\n    return _this;\n  }\n\n  _createClass(RequestLinkForm, [{\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        _snackbar2.default.error(gettext(\"Enter a valid email address.\"));\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('SEND_ACTIVATION_API'), {\n        'email': this.state.email\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      this.props.callback(apiResponse);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (['already_active', 'inactive_admin'].indexOf(rejection.code) > -1) {\n        _snackbar2.default.info(rejection.detail);\n      } else if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-request-activation-link' },\n        _react2.default.createElement(\n          'form',\n          { onSubmit: this.handleSubmit },\n          _react2.default.createElement(\n            'div',\n            { className: 'form-group' },\n            _react2.default.createElement(\n              'div',\n              { className: 'control-input' },\n              _react2.default.createElement('input', { type: 'text', className: 'form-control',\n                placeholder: gettext(\"Your e-mail address\"),\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('email'),\n                value: this.state.email })\n            )\n          ),\n          _react2.default.createElement(\n            _button2.default,\n            { className: 'btn-primary btn-block',\n              loading: this.state.isLoading },\n            gettext(\"Send link\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return RequestLinkForm;\n}(_form2.default);\n\nvar LinkSent = exports.LinkSent = function (_React$Component) {\n  _inherits(LinkSent, _React$Component);\n\n  function LinkSent() {\n    _classCallCheck(this, LinkSent);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(LinkSent).apply(this, arguments));\n  }\n\n  _createClass(LinkSent, [{\n    key: 'getMessage',\n    value: function getMessage() {\n      return interpolate(gettext(\"Activation link was sent to %(email)s\"), {\n        email: this.props.user.email\n      }, true);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-request-activation-link well-done' },\n        _react2.default.createElement(\n          'div',\n          { className: 'done-message' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-icon' },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'check'\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'message-body' },\n            _react2.default.createElement(\n              'p',\n              null,\n              this.getMessage()\n            )\n          ),\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn btn-primary btn-block',\n              onClick: this.props.callback },\n            gettext(\"Request another link\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return LinkSent;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component2) {\n  _inherits(_class, _React$Component2);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this3.complete = function (apiResponse) {\n      _this3.setState({\n        complete: apiResponse\n      });\n    };\n\n    _this3.reset = function () {\n      _this3.setState({\n        complete: false\n      });\n    };\n\n    _this3.state = {\n      complete: false\n    };\n    return _this3;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.state.complete) {\n        return _react2.default.createElement(LinkSent, { user: this.state.complete, callback: this.reset });\n      } else {\n        return _react2.default.createElement(RequestLinkForm, { callback: this.complete });\n      };\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../index\":135,\"../services/ajax\":142,\"../services/snackbar\":151,\"../utils/banned-page\":154,\"../utils/validators\":162,\"./button\":57,\"./form\":70,\"react\":\"react\"}],103:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AccountInactivePage = exports.LinkSent = exports.RequestResetForm = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar RequestResetForm = exports.RequestResetForm = function (_Form) {\n  _inherits(RequestResetForm, _Form);\n\n  function RequestResetForm(props) {\n    _classCallCheck(this, RequestResetForm);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RequestResetForm).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n\n      'email': '',\n\n      'validators': {\n        'email': [validators.email()]\n      }\n    };\n    return _this;\n  }\n\n  _createClass(RequestResetForm, [{\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        _snackbar2.default.error(gettext(\"Enter a valid email address.\"));\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('SEND_PASSWORD_RESET_API'), {\n        'email': this.state.email\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      this.props.callback(apiResponse);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (['inactive_user', 'inactive_admin'].indexOf(rejection.code) > -1) {\n        this.props.showInactivePage(rejection);\n      } else if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-request-password-reset' },\n        _react2.default.createElement(\n          'form',\n          { onSubmit: this.handleSubmit },\n          _react2.default.createElement(\n            'div',\n            { className: 'form-group' },\n            _react2.default.createElement(\n              'div',\n              { className: 'control-input' },\n              _react2.default.createElement('input', { type: 'text', className: 'form-control',\n                placeholder: gettext(\"Your e-mail address\"),\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('email'),\n                value: this.state.email })\n            )\n          ),\n          _react2.default.createElement(\n            _button2.default,\n            { className: 'btn-primary btn-block',\n              loading: this.state.isLoading },\n            gettext(\"Send link\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return RequestResetForm;\n}(_form2.default);\n\nvar LinkSent = exports.LinkSent = function (_React$Component) {\n  _inherits(LinkSent, _React$Component);\n\n  function LinkSent() {\n    _classCallCheck(this, LinkSent);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(LinkSent).apply(this, arguments));\n  }\n\n  _createClass(LinkSent, [{\n    key: 'getMessage',\n    value: function getMessage() {\n      return interpolate(gettext(\"Reset password link was sent to %(email)s\"), {\n        email: this.props.user.email\n      }, true);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-request-password-reset well-done' },\n        _react2.default.createElement(\n          'div',\n          { className: 'done-message' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-icon' },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'check'\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'message-body' },\n            _react2.default.createElement(\n              'p',\n              null,\n              this.getMessage()\n            )\n          ),\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn btn-primary btn-block',\n              onClick: this.props.callback },\n            gettext(\"Request another link\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return LinkSent;\n}(_react2.default.Component);\n\nvar AccountInactivePage = exports.AccountInactivePage = function (_React$Component2) {\n  _inherits(AccountInactivePage, _React$Component2);\n\n  function AccountInactivePage() {\n    _classCallCheck(this, AccountInactivePage);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(AccountInactivePage).apply(this, arguments));\n  }\n\n  _createClass(AccountInactivePage, [{\n    key: 'getActivateButton',\n    value: function getActivateButton() {\n      if (this.props.activation === 'inactive_user') {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'p',\n          null,\n          _react2.default.createElement(\n            'a',\n            { href: _index2.default.get('REQUEST_ACTIVATION_URL') },\n            gettext(\"Activate your account.\")\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page page-message page-message-info page-forgotten-password-inactive' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-panel' },\n            _react2.default.createElement(\n              'div',\n              { className: 'message-icon' },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                'info_outline'\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'message-body' },\n              _react2.default.createElement(\n                'p',\n                { className: 'lead' },\n                gettext(\"Your account is inactive.\")\n              ),\n              _react2.default.createElement(\n                'p',\n                null,\n                this.props.message\n              ),\n              this.getActivateButton()\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return AccountInactivePage;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component3) {\n  _inherits(_class, _React$Component3);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this4 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this4.complete = function (apiResponse) {\n      _this4.setState({\n        complete: apiResponse\n      });\n    };\n\n    _this4.reset = function () {\n      _this4.setState({\n        complete: false\n      });\n    };\n\n    _this4.state = {\n      complete: false\n    };\n    return _this4;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'showInactivePage',\n    value: function showInactivePage(apiResponse) {\n      _reactDom2.default.render(_react2.default.createElement(AccountInactivePage, { activation: apiResponse.code,\n        message: apiResponse.detail }), document.getElementById('page-mount'));\n    }\n    /* jshint ignore:end */\n\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.state.complete) {\n        return _react2.default.createElement(LinkSent, { user: this.state.complete, callback: this.reset });\n      } else {\n        return _react2.default.createElement(RequestResetForm, { callback: this.complete,\n          showInactivePage: this.showInactivePage });\n      };\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../index\":135,\"../services/ajax\":142,\"../services/snackbar\":151,\"../utils/banned-page\":154,\"../utils/validators\":162,\"./button\":57,\"./form\":70,\"react\":\"react\",\"react-dom\":\"react-dom\"}],104:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.PasswordChangedPage = exports.ResetPasswordForm = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _signIn = require('./sign-in.js');\n\nvar _signIn2 = _interopRequireDefault(_signIn);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _auth = require('../services/auth');\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _modal = require('../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar ResetPasswordForm = exports.ResetPasswordForm = function (_Form) {\n  _inherits(ResetPasswordForm, _Form);\n\n  function ResetPasswordForm(props) {\n    _classCallCheck(this, ResetPasswordForm);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ResetPasswordForm).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n\n      'password': '',\n\n      'validators': {\n        'password': [validators.passwordMinLength(_index2.default.get('SETTINGS'))]\n      }\n    };\n    return _this;\n  }\n\n  _createClass(ResetPasswordForm, [{\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        if (this.state.password.trim().length) {\n          _snackbar2.default.error(this.state.errors.password[0]);\n        } else {\n          _snackbar2.default.error(gettext(\"Enter new password.\"));\n        }\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('CHANGE_PASSWORD_API'), {\n        'password': this.state.password\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      this.props.callback(apiResponse);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-reset-password' },\n        _react2.default.createElement(\n          'form',\n          { onSubmit: this.handleSubmit },\n          _react2.default.createElement(\n            'div',\n            { className: 'form-group' },\n            _react2.default.createElement(\n              'div',\n              { className: 'control-input' },\n              _react2.default.createElement('input', { type: 'password', className: 'form-control',\n                placeholder: gettext(\"Enter new password\"),\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('password'),\n                value: this.state.password })\n            )\n          ),\n          _react2.default.createElement(\n            _button2.default,\n            { className: 'btn-primary btn-block',\n              loading: this.state.isLoading },\n            gettext(\"Change password\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ResetPasswordForm;\n}(_form2.default);\n\nvar PasswordChangedPage = exports.PasswordChangedPage = function (_React$Component) {\n  _inherits(PasswordChangedPage, _React$Component);\n\n  function PasswordChangedPage() {\n    _classCallCheck(this, PasswordChangedPage);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(PasswordChangedPage).apply(this, arguments));\n  }\n\n  _createClass(PasswordChangedPage, [{\n    key: 'getMessage',\n    value: function getMessage() {\n      return interpolate(gettext(\"%(username)s, your password has been changed successfully.\"), {\n        username: this.props.user.username\n      }, true);\n    }\n  }, {\n    key: 'showSignIn',\n    value: function showSignIn() {\n      _modal2.default.show(_signIn2.default);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page page-message page-message-success page-forgotten-password-changed' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-panel' },\n            _react2.default.createElement(\n              'div',\n              { className: 'message-icon' },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                'check'\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'message-body' },\n              _react2.default.createElement(\n                'p',\n                { className: 'lead' },\n                this.getMessage()\n              ),\n              _react2.default.createElement(\n                'p',\n                null,\n                gettext(\"You will have to sign in using new password before continuing.\")\n              ),\n              _react2.default.createElement(\n                'p',\n                null,\n                _react2.default.createElement(\n                  'button',\n                  { type: 'button', className: 'btn btn-primary', onClick: this.showSignIn },\n                  gettext(\"Sign in\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return PasswordChangedPage;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component2) {\n  _inherits(_class, _React$Component2);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this3, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this3 = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this3), _this3.complete = function (apiResponse) {\n      _auth2.default.softSignOut();\n\n      // nuke \"redirect_to\" field so we don't end\n      // coming back to error page after sign in\n      $('#hidden-login-form input[name=\"redirect_to\"]').remove();\n\n      _reactDom2.default.render(_react2.default.createElement(PasswordChangedPage, { user: apiResponse }), document.getElementById('page-mount'));\n    }, _temp), _possibleConstructorReturn(_this3, _ret);\n  }\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(ResetPasswordForm, { callback: this.complete });\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../index\":135,\"../services/ajax\":142,\"../services/auth\":143,\"../services/modal\":148,\"../services/snackbar\":151,\"../utils/banned-page\":154,\"../utils/validators\":162,\"./button\":57,\"./form\":70,\"./sign-in.js\":107,\"react\":\"react\",\"react-dom\":\"react-dom\"}],105:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"getClassName\",\n    value: function getClassName() {\n      if (this.props.className) {\n        return \"form-search \" + this.props.className;\n      } else {\n        return \"form-search\";\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"div\",\n        { className: this.getClassName() },\n        _react2.default.createElement(\"input\", { type: \"text\",\n          className: \"form-control\",\n          value: this.props.value,\n          onChange: this.props.onChange,\n          placeholder: this.props.placeholder || gettext(\"Search...\") }),\n        _react2.default.createElement(\n          \"span\",\n          { className: \"material-icon\" },\n          \"search\"\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],106:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.change = function (value) {\n      return function () {\n        _this.props.onChange({\n          target: {\n            value: value\n          }\n        });\n      };\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(_class, [{\n    key: \"getChoice\",\n    value: function getChoice() {\n      var _this2 = this;\n\n      var choice = null;\n      this.props.choices.map(function (item) {\n        if (item.value === _this2.props.value) {\n          choice = item;\n        }\n      });\n      return choice;\n    }\n  }, {\n    key: \"getIcon\",\n    value: function getIcon() {\n      return this.getChoice().icon;\n    }\n  }, {\n    key: \"getLabel\",\n    value: function getLabel() {\n      return this.getChoice().label;\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: \"render\",\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      var _this3 = this;\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"div\",\n        { className: \"btn-group btn-select-group\" },\n        _react2.default.createElement(\n          \"button\",\n          { type: \"button\",\n            className: \"btn btn-select dropdown-toggle\",\n            id: this.props.id || null,\n            \"data-toggle\": \"dropdown\",\n            \"aria-haspopup\": \"true\",\n            \"aria-expanded\": \"false\",\n            \"aria-describedby\": this.props['aria-describedby'] || null,\n            disabled: this.props.disabled || false },\n          _react2.default.createElement(\n            \"span\",\n            { className: \"material-icon\" },\n            this.getIcon()\n          ),\n          this.getLabel()\n        ),\n        _react2.default.createElement(\n          \"ul\",\n          { className: \"dropdown-menu\" },\n          this.props.choices.map(function (item, i) {\n            return _react2.default.createElement(\n              \"li\",\n              { key: i },\n              _react2.default.createElement(\n                \"button\",\n                { type: \"button\", className: \"btn-link\",\n                  onClick: _this3.change(item.value) },\n                _react2.default.createElement(\n                  \"span\",\n                  { className: \"material-icon\" },\n                  item.icon\n                ),\n                item.label\n              )\n            );\n          })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],107:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _modal = require('../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n      'showActivation': false,\n\n      'username': '',\n      'password': '',\n\n      'validators': {\n        'username': [],\n        'password': []\n      }\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'clean',\n    value: function clean() {\n      if (!this.isValid()) {\n        _snackbar2.default.error(gettext(\"Fill out both fields.\"));\n        return false;\n      } else {\n        return true;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('AUTH_API'), {\n        'username': this.state.username,\n        'password': this.state.password\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess() {\n      var form = $('#hidden-login-form');\n\n      form.append('<input type=\"text\" name=\"username\" />');\n      form.append('<input type=\"password\" name=\"password\" />');\n\n      // fill out form with user credentials and submit it, this will tell\n      // Misago to redirect user back to right page, and will trigger browser's\n      // key ring feature\n      form.find('input[type=\"hidden\"]').val(_ajax2.default.getCsrfToken());\n      form.find('input[name=\"redirect_to\"]').val(window.location.pathname);\n      form.find('input[name=\"username\"]').val(this.state.username);\n      form.find('input[name=\"password\"]').val(this.state.password);\n      form.submit();\n\n      // keep form loading\n      this.setState({\n        'isLoading': true\n      });\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        if (rejection.code === 'inactive_admin') {\n          _snackbar2.default.info(rejection.detail);\n        } else if (rejection.code === 'inactive_user') {\n          _snackbar2.default.info(rejection.detail);\n          this.setState({\n            'showActivation': true\n          });\n        } else if (rejection.code === 'banned') {\n          (0, _bannedPage2.default)(rejection.detail);\n          _modal2.default.hide();\n        } else {\n          _snackbar2.default.error(rejection.detail);\n        }\n      } else if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n        _modal2.default.hide();\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'getActivationButton',\n    value: function getActivationButton() {\n      if (this.state.showActivation) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'a',\n          { href: _index2.default.get('REQUEST_ACTIVATION_URL'),\n            className: 'btn btn-success btn-block' },\n          gettext(\"Activate account\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-dialog modal-sm modal-sign-in',\n          role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Sign in\")\n            )\n          ),\n          _react2.default.createElement(\n            'form',\n            { onSubmit: this.handleSubmit },\n            _react2.default.createElement(\n              'div',\n              { className: 'modal-body' },\n              _react2.default.createElement(\n                'div',\n                { className: 'form-group' },\n                _react2.default.createElement(\n                  'div',\n                  { className: 'control-input' },\n                  _react2.default.createElement('input', { id: 'id_username', className: 'form-control', type: 'text',\n                    disabled: this.state.isLoading,\n                    placeholder: gettext(\"Username or e-mail\"),\n                    onChange: this.bindInput('username'),\n                    value: this.state.username })\n                )\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'form-group' },\n                _react2.default.createElement(\n                  'div',\n                  { className: 'control-input' },\n                  _react2.default.createElement('input', { id: 'id_password', className: 'form-control', type: 'password',\n                    disabled: this.state.isLoading,\n                    placeholder: gettext(\"Password\"),\n                    onChange: this.bindInput('password'),\n                    value: this.state.password })\n                )\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'modal-footer' },\n              this.getActivationButton(),\n              _react2.default.createElement(\n                _button2.default,\n                { className: 'btn-primary btn-block',\n                  loading: this.state.isLoading },\n                gettext(\"Sign in\")\n              ),\n              _react2.default.createElement(\n                'a',\n                { href: _index2.default.get('FORGOTTEN_PASSWORD_URL'),\n                  className: 'btn btn-default btn-block' },\n                gettext(\"Forgot password?\")\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../index\":135,\"../services/ajax\":142,\"../services/modal\":148,\"../services/snackbar\":151,\"../utils/banned-page\":154,\"./button\":57,\"./form\":70,\"react\":\"react\"}],108:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Snackbar = undefined;\nexports.select = select;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/* jshint ignore:start */\nvar TYPES_CLASSES = {\n  'info': 'alert-info',\n  'success': 'alert-success',\n  'warning': 'alert-warning',\n  'error': 'alert-danger'\n};\n/* jshint ignore:end */\n\nvar Snackbar = exports.Snackbar = function (_React$Component) {\n  _inherits(Snackbar, _React$Component);\n\n  function Snackbar() {\n    _classCallCheck(this, Snackbar);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(Snackbar).apply(this, arguments));\n  }\n\n  _createClass(Snackbar, [{\n    key: 'getSnackbarClass',\n    value: function getSnackbarClass() {\n      var snackbarClass = 'alerts-snackbar';\n      if (this.props.isVisible) {\n        snackbarClass += ' in';\n      } else {\n        snackbarClass += ' out';\n      }\n      return snackbarClass;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getSnackbarClass() },\n        _react2.default.createElement(\n          'p',\n          { className: 'alert ' + TYPES_CLASSES[this.props.type] },\n          this.props.message\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return Snackbar;\n}(_react2.default.Component);\n\nfunction select(state) {\n  return state.snackbar;\n}\n\n},{\"react\":\"react\"}],109:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"div\",\n        { className: \"threads-list ui-ready\" },\n        _react2.default.createElement(\n          \"ul\",\n          { className: \"list-group\" },\n          _react2.default.createElement(\n            \"li\",\n            { className: \"list-group-item empty-message\" },\n            \"I am threads list placeholder!\"\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],110:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactNav = exports.TabsNav = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouter = require('react-router');\n\nvar _li = require('../li');\n\nvar _li2 = _interopRequireDefault(_li);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\n//jshint ignore:line\n\n// jshint ignore:start\nvar navLinks = function navLinks(baseUrl, active, lists, hideNav) {\n  return lists.map(function (list) {\n    return _react2.default.createElement(\n      _li2.default,\n      { isControlled: true,\n        isActive: list.path === active.path,\n        key: baseUrl + list.path },\n      _react2.default.createElement(\n        _reactRouter.Link,\n        { to: baseUrl + list.path, onClick: hideNav },\n        _react2.default.createElement(\n          'span',\n          { className: 'hidden-xs hidden-sm' },\n          list.name\n        ),\n        _react2.default.createElement(\n          'span',\n          { className: 'hidden-md hidden-lg' },\n          list.longName\n        )\n      )\n    );\n  });\n};\n// jshint ignore:end\n\nvar TabsNav = exports.TabsNav = function (_React$Component) {\n  _inherits(TabsNav, _React$Component);\n\n  function TabsNav() {\n    _classCallCheck(this, TabsNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(TabsNav).apply(this, arguments));\n  }\n\n  _createClass(TabsNav, [{\n    key: 'render',\n    value: function render() {\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'div',\n        { className: 'page-tabs hidden-xs hidden-sm' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'ul',\n            { className: 'nav nav-pills' },\n            navLinks(this.props.baseUrl, this.props.list, this.props.lists, this.props.hideNav)\n          )\n        )\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return TabsNav;\n}(_react2.default.Component);\n\nvar CompactNav = exports.CompactNav = function (_React$Component2) {\n  _inherits(CompactNav, _React$Component2);\n\n  function CompactNav() {\n    _classCallCheck(this, CompactNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));\n  }\n\n  _createClass(CompactNav, [{\n    key: 'render',\n    value: function render() {\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu', role: 'menu' },\n        navLinks(this.props.baseUrl, this.props.list, this.props.lists, this.props.hideNav)\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return CompactNav;\n}(_react2.default.Component);\n\n},{\"../li\":71,\"react\":\"react\",\"react-router\":\"react-router\"}],111:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.select = select;\nexports.getLists = getLists;\nexports.paths = paths;\n\nvar _reactRedux = require('react-redux');\n\nvar _route = require('./route');\n\nvar _route2 = _interopRequireDefault(_route);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction select(store) {\n  return {\n    'tick': store.tick.tick,\n    'user': store.auth.user\n  };\n}\n\nfunction getLists() {\n  var lists = [{\n    path: '',\n    name: gettext(\"All\"),\n    longName: gettext(\"All threads\")\n  }];\n\n  if (_index2.default.get('isAuthenticated')) {\n    lists.push({\n      path: 'my/',\n      name: gettext(\"My\"),\n      longName: gettext(\"My threads\")\n    });\n    lists.push({\n      path: 'new/',\n      name: gettext(\"New\"),\n      longName: gettext(\"New threads\")\n    });\n    lists.push({\n      path: 'unread/',\n      name: gettext(\"Unread\"),\n      longName: gettext(\"Unread threads\")\n    });\n    lists.push({\n      path: 'subscribed/',\n      name: gettext(\"Subscribed\"),\n      longName: gettext(\"Subscribed threads\")\n    });\n  }\n\n  return lists;\n}\n\nfunction paths() {\n  var lists = getLists();\n  var paths = [];\n\n  _index2.default.get('CATEGORIES').forEach(function (category) {\n    lists.forEach(function (list) {\n      paths.push({\n        path: category.absolute_url + list.path,\n        component: (0, _reactRedux.connect)(select)(_route2.default),\n        category: category,\n\n        lists: lists,\n        list: list\n      });\n    });\n  });\n\n  return paths;\n}\n\n},{\"../../index\":135,\"./route\":112,\"react-redux\":\"react-redux\"}],112:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouter = require('react-router');\n\nvar _dropdownToggle = require('../dropdown-toggle');\n\nvar _dropdownToggle2 = _interopRequireDefault(_dropdownToggle);\n\nvar _navs = require('./navs');\n\nvar _titleUtils = require('./title-utils');\n\nvar _root = require('../threads-list/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _withDropdown = require('../with-dropdown');\n\nvar _withDropdown2 = _interopRequireDefault(_withDropdown);\n\nvar _pageTitle = require('../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_WithDropdown) {\n  _inherits(_class, _WithDropdown);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      _pageTitle2.default.set((0, _titleUtils.getPageTitle)(this.props.route));\n    }\n  }, {\n    key: 'getTitle',\n    value: function getTitle() {\n      return (0, _titleUtils.getTitle)(this.props.route);\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      var className = 'page page-threads';\n      className += ' page-threads-' + this.props.route.list;\n      if (this.props.route.category.css_class) {\n        className += ' page-' + this.props.route.category.css_class;\n      }\n      return className;\n    }\n  }, {\n    key: 'getHeaderClassName',\n    value: function getHeaderClassName() {\n      if (this.props.route.lists.length > 1) {\n        return 'page-header tabbed';\n      } else {\n        return 'page-header';\n      }\n    }\n  }, {\n    key: 'getGoBackButton',\n    value: function getGoBackButton() {\n      if (this.props.route.category.parent) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _reactRouter.Link,\n          { className: 'btn btn-default btn-aligned btn-icon btn-go-back pull-left',\n            to: this.props.route.category.parent.absolute_url + this.props.route.list.path },\n          _react2.default.createElement(\n            'span',\n            { className: 'material-icon' },\n            'keyboard_arrow_left'\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getTabsNav',\n    value: function getTabsNav() {\n      if (this.props.route.lists.length > 1) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_navs.TabsNav, { baseUrl: this.props.route.category.absolute_url,\n          list: this.props.route.list,\n          lists: this.props.route.lists,\n          hideNav: this.hideNav });\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getCompactNavToggle',\n    value: function getCompactNavToggle() {\n      if (this.props.route.lists.length > 1) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_dropdownToggle2.default, { toggleNav: this.toggleNav,\n          dropdown: this.state.dropdown });\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getCompactNav',\n    value: function getCompactNav() {\n      if (this.props.route.lists.length > 1) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_navs.CompactNav, { baseUrl: this.props.route.category.absolute_url,\n          list: this.props.route.list,\n          lists: this.props.route.lists,\n          hideNav: this.hideNav });\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          'div',\n          { className: this.getHeaderClassName() },\n          _react2.default.createElement(\n            'div',\n            { className: 'container' },\n            this.getGoBackButton(),\n            _react2.default.createElement(\n              'h1',\n              { className: 'pull-left' },\n              this.getTitle()\n            ),\n            this.getCompactNavToggle()\n          ),\n          this.getTabsNav()\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: this.getCompactNavClassName() },\n          this.getCompactNav()\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(_root2.default, null)\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_withDropdown2.default);\n\nexports.default = _class;\n\n},{\"../../services/page-title\":149,\"../dropdown-toggle\":68,\"../threads-list/root\":109,\"../with-dropdown\":133,\"./navs\":110,\"./title-utils\":113,\"react\":\"react\",\"react-router\":\"react-router\"}],113:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.getPageTitle = getPageTitle;\nexports.getTitle = getTitle;\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getPageTitle(route) {\n  if (!route.category.special_role) {\n    if (route.list.path) {\n      return {\n        title: route.list.longName,\n        parent: route.category.name\n      };\n    } else {\n      return {\n        title: route.category.name\n      };\n    }\n  } else if (!_index2.default.get('CATEGORIES_ON_INDEX')) {\n    if (route.list.path) {\n      return {\n        title: route.list.longName\n      };\n    } else {\n      return null;\n    }\n  } else {\n    if (route.list.path) {\n      return {\n        title: route.list.longName,\n        parent: gettext(\"Threads\")\n      };\n    } else {\n      return {\n        title: gettext(\"Threads\")\n      };\n    }\n  }\n}\n\nfunction getTitle(route) {\n  if (!route.category.special_role) {\n    return route.category.name;\n  } else if (!_index2.default.get('CATEGORIES_ON_INDEX')) {\n    if (_index2.default.get('SETTINGS').forum_index_title) {\n      return _index2.default.get('SETTINGS').forum_index_title;\n    } else {\n      return _index2.default.get('SETTINGS').forum_name;\n    }\n  } else {\n    return gettext(\"Threads\");\n  }\n}\n\n},{\"../../index\":135}],114:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactGuestNav = exports.GuestNav = exports.GuestMenu = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _registerButton = require('../register-button');\n\nvar _registerButton2 = _interopRequireDefault(_registerButton);\n\nvar _signIn = require('../sign-in.js');\n\nvar _signIn2 = _interopRequireDefault(_signIn);\n\nvar _mobileNavbarDropdown = require('../../services/mobile-navbar-dropdown');\n\nvar _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);\n\nvar _modal = require('../../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\nvar GuestMenu = exports.GuestMenu = function (_React$Component) {\n  _inherits(GuestMenu, _React$Component);\n\n  function GuestMenu() {\n    _classCallCheck(this, GuestMenu);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(GuestMenu).apply(this, arguments));\n  }\n\n  _createClass(GuestMenu, [{\n    key: 'showSignInModal',\n    value: function showSignInModal() {\n      _modal2.default.show(_signIn2.default);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu user-dropdown dropdown-menu-right',\n          role: 'menu' },\n        _react2.default.createElement(\n          'li',\n          { className: 'guest-preview' },\n          _react2.default.createElement(\n            'h4',\n            null,\n            gettext(\"You are browsing as guest.\")\n          ),\n          _react2.default.createElement(\n            'p',\n            null,\n            gettext('Sign in or register to start and participate in discussions.')\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'row' },\n            _react2.default.createElement(\n              'div',\n              { className: 'col-xs-6' },\n              _react2.default.createElement(\n                'button',\n                { type: 'button', className: 'btn btn-default btn-block',\n                  onClick: this.showSignInModal },\n                gettext(\"Sign in\")\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'col-xs-6' },\n              _react2.default.createElement(\n                _registerButton2.default,\n                { className: 'btn-primary btn-block' },\n                gettext(\"Register\")\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return GuestMenu;\n}(_react2.default.Component);\n\nvar GuestNav = exports.GuestNav = function (_GuestMenu) {\n  _inherits(GuestNav, _GuestMenu);\n\n  function GuestNav() {\n    _classCallCheck(this, GuestNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(GuestNav).apply(this, arguments));\n  }\n\n  _createClass(GuestNav, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'nav nav-guest' },\n        _react2.default.createElement(\n          'button',\n          { type: 'button', className: 'btn navbar-btn btn-default',\n            onClick: this.showSignInModal },\n          gettext(\"Sign in\")\n        ),\n        _react2.default.createElement(\n          _registerButton2.default,\n          { className: 'navbar-btn btn-primary' },\n          gettext(\"Register\")\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return GuestNav;\n}(GuestMenu);\n\nvar CompactGuestNav = exports.CompactGuestNav = function (_React$Component2) {\n  _inherits(CompactGuestNav, _React$Component2);\n\n  function CompactGuestNav() {\n    _classCallCheck(this, CompactGuestNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactGuestNav).apply(this, arguments));\n  }\n\n  _createClass(CompactGuestNav, [{\n    key: 'showGuestMenu',\n    value: function showGuestMenu() {\n      _mobileNavbarDropdown2.default.show(GuestMenu);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: 'button', onClick: this.showGuestMenu },\n        _react2.default.createElement(_avatar2.default, { size: '64' })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return CompactGuestNav;\n}(_react2.default.Component);\n\n},{\"../../services/mobile-navbar-dropdown\":147,\"../../services/modal\":148,\"../avatar\":55,\"../register-button\":100,\"../sign-in.js\":107,\"react\":\"react\"}],115:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactUserMenu = exports.UserMenu = undefined;\nexports.select = select;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _guestNav = require('./guest-nav');\n\nvar _userNav = require('./user-nav');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\n// jshint ignore:line\n\nvar UserMenu = exports.UserMenu = function (_React$Component) {\n  _inherits(UserMenu, _React$Component);\n\n  function UserMenu() {\n    _classCallCheck(this, UserMenu);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserMenu).apply(this, arguments));\n  }\n\n  _createClass(UserMenu, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.props.isAuthenticated) {\n        return _react2.default.createElement(_userNav.UserNav, { user: this.props.user });\n      } else {\n        return _react2.default.createElement(_guestNav.GuestNav, null);\n      }\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return UserMenu;\n}(_react2.default.Component);\n\nvar CompactUserMenu = exports.CompactUserMenu = function (_React$Component2) {\n  _inherits(CompactUserMenu, _React$Component2);\n\n  function CompactUserMenu() {\n    _classCallCheck(this, CompactUserMenu);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactUserMenu).apply(this, arguments));\n  }\n\n  _createClass(CompactUserMenu, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.props.isAuthenticated) {\n        return _react2.default.createElement(_userNav.CompactUserNav, { user: this.props.user });\n      } else {\n        return _react2.default.createElement(_guestNav.CompactGuestNav, null);\n      }\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return CompactUserMenu;\n}(_react2.default.Component);\n\nfunction select(state) {\n  return state.auth;\n}\n\n},{\"./guest-nav\":114,\"./user-nav\":116,\"react\":\"react\"}],116:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactUserNav = exports.UserNav = exports.UserMenu = undefined;\nexports.selectUserMenu = selectUserMenu;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRedux = require('react-redux');\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _root = require('../change-avatar/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _mobileNavbarDropdown = require('../../services/mobile-navbar-dropdown');\n\nvar _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);\n\nvar _modal = require('../../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar UserMenu = exports.UserMenu = function (_React$Component) {\n  _inherits(UserMenu, _React$Component);\n\n  function UserMenu() {\n    _classCallCheck(this, UserMenu);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserMenu).apply(this, arguments));\n  }\n\n  _createClass(UserMenu, [{\n    key: 'logout',\n    value: function logout() {\n      var decision = confirm(gettext(\"Are you sure you want to sign out?\"));\n      if (decision) {\n        $('#hidden-logout-form').submit();\n      }\n    }\n  }, {\n    key: 'changeAvatar',\n    value: function changeAvatar() {\n      _modal2.default.show((0, _reactRedux.connect)(_root.select)(_root2.default));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu user-dropdown dropdown-menu-right',\n          role: 'menu' },\n        _react2.default.createElement(\n          'li',\n          { className: 'dropdown-header' },\n          _react2.default.createElement(\n            'strong',\n            null,\n            this.props.user.username\n          )\n        ),\n        _react2.default.createElement('li', { className: 'divider' }),\n        _react2.default.createElement(\n          'li',\n          null,\n          _react2.default.createElement(\n            'a',\n            { href: this.props.user.absolute_url },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'account_circle'\n            ),\n            gettext(\"See your profile\")\n          )\n        ),\n        _react2.default.createElement(\n          'li',\n          null,\n          _react2.default.createElement(\n            'a',\n            { href: _index2.default.get('USERCP_URL') },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'done_all'\n            ),\n            gettext(\"Change options\")\n          )\n        ),\n        _react2.default.createElement(\n          'li',\n          null,\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn-link', onClick: this.changeAvatar },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'portrait'\n            ),\n            gettext(\"Change avatar\")\n          )\n        ),\n        _react2.default.createElement('li', { className: 'divider' }),\n        _react2.default.createElement(\n          'li',\n          { className: 'dropdown-buttons' },\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn btn-default btn-block',\n              onClick: this.logout },\n            gettext(\"Log out\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return UserMenu;\n}(_react2.default.Component);\n\nvar UserNav = exports.UserNav = function (_React$Component2) {\n  _inherits(UserNav, _React$Component2);\n\n  function UserNav() {\n    _classCallCheck(this, UserNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserNav).apply(this, arguments));\n  }\n\n  _createClass(UserNav, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'ul',\n        { className: 'ul nav navbar-nav nav-user' },\n        _react2.default.createElement(\n          'li',\n          { className: 'dropdown' },\n          _react2.default.createElement(\n            'a',\n            { href: this.props.user.absolute_url, className: 'dropdown-toggle',\n              'data-toggle': 'dropdown', 'aria-haspopup': 'true', 'aria-expanded': 'false',\n              role: 'button' },\n            _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '64' })\n          ),\n          _react2.default.createElement(UserMenu, { user: this.props.user })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return UserNav;\n}(_react2.default.Component);\n\nfunction selectUserMenu(state) {\n  return { user: state.auth.user };\n}\n\nvar CompactUserNav = exports.CompactUserNav = function (_React$Component3) {\n  _inherits(CompactUserNav, _React$Component3);\n\n  function CompactUserNav() {\n    _classCallCheck(this, CompactUserNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactUserNav).apply(this, arguments));\n  }\n\n  _createClass(CompactUserNav, [{\n    key: 'showUserMenu',\n    value: function showUserMenu() {\n      _mobileNavbarDropdown2.default.showConnected('user-menu', (0, _reactRedux.connect)(selectUserMenu)(UserMenu));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: 'button', onClick: this.showUserMenu },\n        _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '64' })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return CompactUserNav;\n}(_react2.default.Component);\n\n},{\"../../index\":135,\"../../services/mobile-navbar-dropdown\":147,\"../../services/modal\":148,\"../avatar\":55,\"../change-avatar/root\":66,\"react\":\"react\",\"react-redux\":\"react-redux\"}],117:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.StatusLabel = exports.StatusIcon = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getClass',\n    value: function getClass() {\n      var status = '';\n      if (this.props.status.is_banned) {\n        status = 'banned';\n      } else if (this.props.status.is_hidden) {\n        status = 'offline';\n      } else if (this.props.status.is_online_hidden) {\n        status = 'online';\n      } else if (this.props.status.is_offline_hidden) {\n        status = 'offline';\n      } else if (this.props.status.is_online) {\n        status = 'online';\n      } else if (this.props.status.is_offline) {\n        status = 'offline';\n      }\n\n      return 'user-status user-' + status;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'span',\n        { className: this.getClass() },\n        this.props.children\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\nvar StatusIcon = exports.StatusIcon = function (_React$Component2) {\n  _inherits(StatusIcon, _React$Component2);\n\n  function StatusIcon() {\n    _classCallCheck(this, StatusIcon);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(StatusIcon).apply(this, arguments));\n  }\n\n  _createClass(StatusIcon, [{\n    key: 'getIcon',\n    value: function getIcon() {\n      if (this.props.status.is_banned) {\n        return 'remove_circle_outline';\n      } else if (this.props.status.is_hidden) {\n        return 'help_outline';\n      } else if (this.props.status.is_online_hidden) {\n        return 'label';\n      } else if (this.props.status.is_offline_hidden) {\n        return 'label_outline';\n      } else if (this.props.status.is_online) {\n        return 'lens';\n      } else if (this.props.status.is_offline) {\n        return 'panorama_fish_eye';\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'span',\n        { className: 'material-icon status-icon' },\n        this.getIcon()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return StatusIcon;\n}(_react2.default.Component);\n\nvar StatusLabel = exports.StatusLabel = function (_React$Component3) {\n  _inherits(StatusLabel, _React$Component3);\n\n  function StatusLabel() {\n    _classCallCheck(this, StatusLabel);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(StatusLabel).apply(this, arguments));\n  }\n\n  _createClass(StatusLabel, [{\n    key: 'getHelp',\n    value: function getHelp() {\n      if (this.props.status.is_banned) {\n        if (this.props.status.banned_until) {\n          return interpolate(gettext(\"%(username)s is banned until %(ban_expires)s\"), {\n            username: this.props.user.username,\n            ban_expires: this.props.status.banned_until.format('LL, LT')\n          }, true);\n        } else {\n          return interpolate(gettext(\"%(username)s is banned\"), {\n            username: this.props.user.username\n          }, true);\n        }\n      } else if (this.props.status.is_hidden) {\n        return interpolate(gettext(\"%(username)s is hiding presence\"), {\n          username: this.props.user.username\n        }, true);\n      } else if (this.props.status.is_online_hidden) {\n        return interpolate(gettext(\"%(username)s is online (hidden)\"), {\n          username: this.props.user.username\n        }, true);\n      } else if (this.props.status.is_offline_hidden) {\n        return interpolate(gettext(\"%(username)s was last seen %(last_click)s (hidden)\"), {\n          username: this.props.user.username,\n          last_click: this.props.status.last_click.fromNow()\n        }, true);\n      } else if (this.props.status.is_online) {\n        return interpolate(gettext(\"%(username)s is online\"), {\n          username: this.props.user.username\n        }, true);\n      } else if (this.props.status.is_offline) {\n        return interpolate(gettext(\"%(username)s was last seen %(last_click)s\"), {\n          username: this.props.user.username,\n          last_click: this.props.status.last_click.fromNow()\n        }, true);\n      }\n    }\n  }, {\n    key: 'getLabel',\n    value: function getLabel() {\n      if (this.props.status.is_banned) {\n        return gettext(\"Banned\");\n      } else if (this.props.status.is_hidden) {\n        return gettext(\"Hidden\");\n      } else if (this.props.status.is_online_hidden) {\n        return gettext(\"Online (hidden)\");\n      } else if (this.props.status.is_offline_hidden) {\n        return gettext(\"Offline (hidden)\");\n      } else if (this.props.status.is_online) {\n        return gettext(\"Online\");\n      } else if (this.props.status.is_offline) {\n        return gettext(\"Offline\");\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'span',\n        { className: this.props.className || \"status-label\",\n          title: this.getHelp() },\n        this.getLabel()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return StatusLabel;\n}(_react2.default.Component);\n\n},{\"react\":\"react\"}],118:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('./avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _random = require('../utils/random');\n\nvar random = _interopRequireWildcard(_random);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'renderUserAvatar',\n    value: function renderUserAvatar(item) {\n      if (item.changed_by) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'a',\n          { href: item.changed_by.absolute_url, className: 'user-avatar-wrapper' },\n          _react2.default.createElement(_avatar2.default, { user: item.changed_by, size: '100' })\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'span',\n            { className: 'user-avatar-wrapper' },\n            _react2.default.createElement(_avatar2.default, { size: '100' })\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'renderUsername',\n    value: function renderUsername(item) {\n      if (item.changed_by) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'a',\n          { href: item.changed_by.absolute_url, className: 'item-title' },\n          item.changed_by.username\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'span',\n            { className: 'item-title' },\n            item.changed_by_username\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'renderHistory',\n    value: function renderHistory() {\n      var _this2 = this;\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'username-history ui-ready' },\n        _react2.default.createElement(\n          'ul',\n          { className: 'list-group' },\n          this.props.changes.map(function (item) {\n            return _react2.default.createElement(\n              'li',\n              { className: 'list-group-item', key: item.id },\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-avatar' },\n                _this2.renderUserAvatar(item)\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-author' },\n                _this2.renderUsername(item)\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'change-old-username' },\n                  item.old_username\n                ),\n                _react2.default.createElement(\n                  'span',\n                  { className: 'material-icon' },\n                  'arrow_forward'\n                ),\n                _react2.default.createElement(\n                  'span',\n                  { className: 'change-new-username' },\n                  item.new_username\n                )\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-date' },\n                _react2.default.createElement(\n                  'abbr',\n                  { title: item.changed_on.format('LLL') },\n                  item.changed_on.fromNow()\n                )\n              )\n            );\n          })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getEmptyMessage',\n    value: function getEmptyMessage() {\n      if (this.props.emptyMessage) {\n        return this.props.emptyMessage;\n      } else {\n        return gettext(\"No name changes have been recorded for your account.\");\n      }\n    }\n  }, {\n    key: 'renderEmptyHistory',\n    value: function renderEmptyHistory() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'username-history ui-ready' },\n        _react2.default.createElement(\n          'ul',\n          { className: 'list-group' },\n          _react2.default.createElement(\n            'li',\n            { className: 'list-group-item empty-message' },\n            this.getEmptyMessage()\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'renderHistoryPreview',\n    value: function renderHistoryPreview() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'username-history ui-preview' },\n        _react2.default.createElement(\n          'ul',\n          { className: 'list-group' },\n          random.range(3, 5).map(function (i) {\n            return _react2.default.createElement(\n              'li',\n              { className: 'list-group-item', key: i },\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-avatar' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'user-avatar' },\n                  _react2.default.createElement(_avatar2.default, { size: '100' })\n                )\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-author' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'ui-preview-text', style: { width: random.int(30, 100) + \"px\" } },\n                  ' '\n                )\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'ui-preview-text', style: { width: random.int(30, 50) + \"px\" } },\n                  ' '\n                ),\n                _react2.default.createElement(\n                  'span',\n                  { className: 'material-icon' },\n                  'arrow_forward'\n                ),\n                _react2.default.createElement(\n                  'span',\n                  { className: 'ui-preview-text', style: { width: random.int(30, 50) + \"px\" } },\n                  ' '\n                )\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-date' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'ui-preview-text', style: { width: random.int(50, 100) + \"px\" } },\n                  ' '\n                )\n              )\n            );\n          })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      if (this.props.isLoaded) {\n        if (this.props.changes.length) {\n          return this.renderHistory();\n        } else {\n          return this.renderEmptyHistory();\n        }\n      } else {\n        return this.renderHistoryPreview();\n      }\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../utils/random\":159,\"./avatar\":55,\"react\":\"react\"}],119:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _userCard = require('./user-card');\n\nvar _userCard2 = _interopRequireDefault(_userCard);\n\nvar _userPreview = require('./user-preview');\n\nvar _userPreview2 = _interopRequireDefault(_userPreview);\n\nvar _batch = require('../../utils/batch');\n\nvar _batch2 = _interopRequireDefault(_batch);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getPager',\n    value: function getPager() {\n      if (this.props.pages > 1) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(Pager, this.props);\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.props.className) {\n        return \"users-cards-list \" + this.props.className + \" ui-ready\";\n      } else {\n        return \"users-cards-list ui-ready\";\n      }\n    }\n  }, {\n    key: 'getColClassName',\n    value: function getColClassName() {\n      return \"col-md-\" + 12 / this.props.cols;\n    }\n  }, {\n    key: 'getBody',\n    value: function getBody() {\n      var _this2 = this;\n\n      if (this.props.isLoaded) {\n        /* jshint ignore:start */\n        return (0, _batch2.default)(this.props.users, this.props.cols).map(function (row, r) {\n          return _react2.default.createElement(\n            'div',\n            { className: 'row', key: r },\n            row.map(function (user) {\n              return _react2.default.createElement(\n                'div',\n                { className: _this2.getColClassName(), key: user.id },\n                _react2.default.createElement(_userCard2.default, { user: user,\n                  showStatus: _this2.props.showStatus,\n                  showRank: _this2.props.showRank })\n              );\n            })\n          );\n        });\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          var row = [];\n          for (var i = 0; i < this.props.cols; i++) {\n            row.push(i);\n          }\n\n          return _react2.default.createElement(\n            'div',\n            { className: 'row' },\n            row.map(function (i) {\n              return _react2.default.createElement(\n                'div',\n                { className: _this2.getColClassName(), key: i },\n                _react2.default.createElement(_userPreview2.default, { showStatus: _this2.props.showStatus })\n              );\n            })\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'users-cards-list ui-ready' },\n        this.getBody()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../utils/batch\":155,\"./user-card\":120,\"./user-preview\":121,\"react\":\"react\"}],120:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _userStatus = require('../user-status');\n\nvar _userStatus2 = _interopRequireDefault(_userStatus);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.props.user.rank.css_class) {\n        return 'user-card user-card-' + this.props.user.rank.css_class + ' ui-ready';\n      } else {\n        return 'user-card ui-ready';\n      }\n    }\n  }, {\n    key: 'getUserStatus',\n    value: function getUserStatus() {\n      if (this.props.showStatus) {\n        if (this.props.user.status) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            _userStatus2.default,\n            { user: this.props.user, status: this.props.user.status },\n            _react2.default.createElement(_userStatus.StatusIcon, { user: this.props.user,\n              status: this.props.user.status }),\n            _react2.default.createElement(_userStatus.StatusLabel, { user: this.props.user,\n              status: this.props.user.status,\n              className: 'status-label' })\n          );\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(\n              'span',\n              { className: 'user-status' },\n              _react2.default.createElement(\n                'span',\n                { className: 'status-icon ui-preview' },\n                ' '\n              ),\n              _react2.default.createElement(\n                'span',\n                { className: 'status-label ui-preview' },\n                ' '\n              )\n            );\n            /* jshint ignore:end */\n          }\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getRankName',\n    value: function getRankName() {\n      if (this.props.showRank) {\n        if (this.props.user.rank.is_tab) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'a',\n            { href: this.props.user.rank.absolute_url,\n              className: 'item-title rank-name' },\n            this.props.user.rank.name\n          );\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(\n              'span',\n              { className: 'item-title rank-name' },\n              this.props.user.rank.name\n            );\n            /* jshint ignore:end */\n          }\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getUserTitle',\n    value: function getUserTitle() {\n      if (this.props.user.title) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'span',\n          { className: 'user-title' },\n          this.props.user.title\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getUserJoinedOn',\n    value: function getUserJoinedOn() {\n      /* jshint ignore:start */\n      var title = interpolate(gettext(\"Joined on %(joined_on)s\"), {\n        'joined_on': this.props.user.joined_on.format('LL, LT')\n      }, true);\n\n      var age = interpolate(gettext(\"Joined %(joined_on)s\"), {\n        'joined_on': this.props.user.joined_on.fromNow()\n      }, true);\n\n      return _react2.default.createElement(\n        'span',\n        { className: 'user-joined-on', title: title },\n        age\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getPostsCount',\n    value: function getPostsCount() {\n      var message = ngettext(\"%(posts)s post\", \"%(posts)s posts\", this.props.user.posts);\n\n      return interpolate(message, {\n        'posts': this.props.user.posts\n      }, true);\n    }\n  }, {\n    key: 'getThreadsCount',\n    value: function getThreadsCount() {\n      var message = ngettext(\"%(threads)s thread\", \"%(threads)s threads\", this.props.user.threads);\n\n      return interpolate(message, {\n        'threads': this.props.user.threads\n      }, true);\n    }\n  }, {\n    key: 'getFollowersCount',\n    value: function getFollowersCount() {\n      var message = ngettext(\"%(followers)s follower\", \"%(followers)s followers\", this.props.user.followers);\n\n      return interpolate(message, {\n        'followers': this.props.user.followers\n      }, true);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          'div',\n          { className: 'user-card-bg-image' },\n          _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '400', className: 'bg-image' }),\n          _react2.default.createElement(\n            'div',\n            { className: 'user-card-bg' },\n            _react2.default.createElement(\n              'div',\n              { className: 'user-details' },\n              _react2.default.createElement(\n                'div',\n                { className: 'user-avatar' },\n                _react2.default.createElement(\n                  'a',\n                  { href: this.props.user.absolute_url },\n                  _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '400' })\n                )\n              ),\n              _react2.default.createElement(\n                'h4',\n                { className: 'user-name' },\n                _react2.default.createElement(\n                  'a',\n                  { href: this.props.user.absolute_url, className: 'item-title' },\n                  this.props.user.username\n                )\n              ),\n              _react2.default.createElement(\n                'p',\n                { className: 'user-subscript' },\n                this.getUserStatus(),\n                this.getRankName(),\n                this.getUserTitle(),\n                this.getUserJoinedOn()\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'user-card-stats' },\n              _react2.default.createElement(\n                'ul',\n                { className: 'list-unstyled' },\n                _react2.default.createElement(\n                  'li',\n                  { className: 'user-posts-count' },\n                  this.getPostsCount()\n                ),\n                _react2.default.createElement(\n                  'li',\n                  { className: 'user-threads-count' },\n                  this.getThreadsCount()\n                ),\n                _react2.default.createElement(\n                  'li',\n                  { className: 'user-followers-count' },\n                  this.getFollowersCount()\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../avatar\":55,\"../user-status\":117,\"react\":\"react\"}],121:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _random = require('../../utils/random');\n\nvar random = _interopRequireWildcard(_random);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getUserStatus',\n    value: function getUserStatus() {\n      if (this.props.showStatus) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'span',\n          { className: 'user-status' },\n          _react2.default.createElement(\n            'span',\n            { className: 'status-icon ui-preview' },\n            ' '\n          ),\n          _react2.default.createElement(\n            'span',\n            { className: 'status-label ui-preview' },\n            ' '\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'user-card ui-preview' },\n        _react2.default.createElement(\n          'div',\n          { className: 'user-card-bg-image' },\n          _react2.default.createElement(_avatar2.default, { size: '400', className: 'bg-image' }),\n          _react2.default.createElement(\n            'div',\n            { className: 'user-card-bg' },\n            _react2.default.createElement(\n              'div',\n              { className: 'user-details' },\n              _react2.default.createElement(\n                'div',\n                { className: 'user-avatar' },\n                _react2.default.createElement(_avatar2.default, { size: '400' })\n              ),\n              _react2.default.createElement(\n                'h4',\n                { className: 'user-name' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'item-title' },\n                  _react2.default.createElement(\n                    'span',\n                    { className: 'ui-preview-text', style: { width: random.int(60, 150) + \"px\" } },\n                    ' '\n                  )\n                )\n              ),\n              _react2.default.createElement(\n                'p',\n                { className: 'user-subscript' },\n                this.getUserStatus(),\n                _react2.default.createElement(\n                  'span',\n                  { className: 'user-joined-on' },\n                  _react2.default.createElement(\n                    'span',\n                    { className: 'ui-preview-text', style: { width: random.int(30, 50) + \"px\" } },\n                    ' '\n                  )\n                )\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'user-card-stats' },\n              _react2.default.createElement(\n                'ul',\n                { className: 'list-unstyled' },\n                _react2.default.createElement(\n                  'li',\n                  { className: 'user-posts-count' },\n                  _react2.default.createElement(\n                    'strong',\n                    null,\n                    _react2.default.createElement(\n                      'span',\n                      { className: 'ui-preview-text' },\n                      ' '\n                    )\n                  ),\n                  _react2.default.createElement(\n                    'small',\n                    null,\n                    gettext(\"posts\")\n                  )\n                ),\n                _react2.default.createElement(\n                  'li',\n                  { className: 'user-threads-count' },\n                  _react2.default.createElement(\n                    'strong',\n                    null,\n                    _react2.default.createElement(\n                      'span',\n                      { className: 'ui-preview-text' },\n                      ' '\n                    )\n                  ),\n                  _react2.default.createElement(\n                    'small',\n                    null,\n                    gettext(\"threads\")\n                  )\n                ),\n                _react2.default.createElement(\n                  'li',\n                  { className: 'user-followers-count' },\n                  _react2.default.createElement(\n                    'strong',\n                    null,\n                    _react2.default.createElement(\n                      'span',\n                      { className: 'ui-preview-text' },\n                      ' '\n                    )\n                  ),\n                  _react2.default.createElement(\n                    'small',\n                    null,\n                    gettext(\"followers\")\n                  )\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../utils/random\":159,\"../avatar\":55,\"react\":\"react\"}],122:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getEmptyMessage',\n    value: function getEmptyMessage() {\n      return interpolate(gettext(\"No users have posted any new messages during last %(days)s days.\"), { 'days': this.props.trackedPeriod }, true);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'active-posters-list' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'p',\n            { className: 'lead' },\n            this.getEmptyMessage()\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],123:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouter = require('react-router');\n\nvar _avatar = require('../../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _userStatus = require('../../user-status');\n\nvar _userStatus2 = _interopRequireDefault(_userStatus);\n\nvar _index = require('../../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.props.rank.css_class) {\n        return \"list-group-item list-group-rank-\" + this.props.rank.css_class;\n      } else {\n        return \"list-group-item\";\n      }\n    }\n  }, {\n    key: 'getUserStatus',\n    value: function getUserStatus() {\n      if (this.props.user.status) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _userStatus2.default,\n          { user: this.props.user, status: this.props.user.status },\n          _react2.default.createElement(_userStatus.StatusIcon, { user: this.props.user,\n            status: this.props.user.status }),\n          _react2.default.createElement(_userStatus.StatusLabel, { user: this.props.user,\n            status: this.props.user.status,\n            className: 'status-label hidden-xs hidden-sm' })\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'span',\n            { className: 'user-status' },\n            _react2.default.createElement(\n              'span',\n              { className: 'status-icon ui-preview' },\n              ' '\n            ),\n            _react2.default.createElement(\n              'span',\n              { className: 'status-label ui-preview hidden-xs hidden-sm' },\n              ' '\n            )\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getRankName',\n    value: function getRankName() {\n      if (this.props.rank.is_tab) {\n        /* jshint ignore:start */\n        var rankUrl = _index2.default.get('USERS_LIST_URL') + this.props.rank.slug + '/';\n        return _react2.default.createElement(\n          _reactRouter.Link,\n          { to: rankUrl, className: 'item-title rank-name' },\n          this.props.rank.name\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'span',\n            { className: 'item-title rank-name' },\n            this.props.rank.name\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getUserTitle',\n    value: function getUserTitle() {\n      if (this.props.user.title) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'span',\n          { className: 'user-title hidden-xs hidden-sm' },\n          this.props.user.title\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'li',\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          'div',\n          { className: 'rank-user-avatar' },\n          _react2.default.createElement(\n            'a',\n            { href: this.props.user.absolute_url },\n            _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '50' })\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'rank-user' },\n          _react2.default.createElement(\n            'div',\n            { className: 'user-name' },\n            _react2.default.createElement(\n              'a',\n              { href: this.props.user.absolute_url, className: 'item-title' },\n              this.props.user.username\n            )\n          ),\n          this.getUserStatus(),\n          this.getRankName(),\n          this.getUserTitle()\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'rank-position' },\n          _react2.default.createElement(\n            'strong',\n            null,\n            '#',\n            this.props.counter\n          ),\n          _react2.default.createElement(\n            'small',\n            null,\n            gettext(\"Rank\")\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'rank-posts-counted' },\n          _react2.default.createElement(\n            'strong',\n            null,\n            this.props.user.meta.score\n          ),\n          _react2.default.createElement(\n            'small',\n            null,\n            gettext(\"Ranked posts\")\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'rank-posts-total' },\n          _react2.default.createElement(\n            'strong',\n            null,\n            this.props.user.posts\n          ),\n          _react2.default.createElement(\n            'small',\n            null,\n            gettext(\"Total posts\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../../index\":135,\"../../avatar\":55,\"../../user-status\":117,\"react\":\"react\",\"react-router\":\"react-router\"}],124:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _random = require('../../../utils/random');\n\nvar random = _interopRequireWildcard(_random);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'active-posters-list' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'p',\n            { className: 'lead ui-preview-paragraph' },\n            random.range(3, 4).map(function (i) {\n              return _react2.default.createElement(\n                'span',\n                { key: i, className: 'ui-preview-text', style: { width: random.int(50, 120) + \"px\" } },\n                ' '\n              );\n            })\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'active-posters ui-preview' },\n            _react2.default.createElement(\n              'ul',\n              { className: 'list-group' },\n              random.range(5, 10).map(function (i, counter) {\n                return _react2.default.createElement(\n                  'li',\n                  { key: i, className: 'list-group-item' },\n                  _react2.default.createElement(\n                    'div',\n                    { className: 'rank-user-avatar' },\n                    _react2.default.createElement(\n                      'span',\n                      null,\n                      _react2.default.createElement(_avatar2.default, { size: '50' })\n                    )\n                  ),\n                  _react2.default.createElement(\n                    'div',\n                    { className: 'rank-user' },\n                    _react2.default.createElement(\n                      'div',\n                      { className: 'user-name' },\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'item-title' },\n                        _react2.default.createElement(\n                          'span',\n                          { className: 'ui-preview-text', style: { width: random.int(30, 80) + \"px\" } },\n                          ' '\n                        )\n                      )\n                    ),\n                    _react2.default.createElement(\n                      'span',\n                      { className: 'user-status' },\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'status-icon ui-preview' },\n                        ' '\n                      ),\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'status-label ui-preview hidden-xs hidden-sm' },\n                        ' '\n                      )\n                    ),\n                    _react2.default.createElement(\n                      'span',\n                      { className: 'rank-name' },\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'ui-preview-text', style: { width: random.int(30, 50) + \"px\" } },\n                        ' '\n                      )\n                    ),\n                    _react2.default.createElement(\n                      'span',\n                      { className: 'user-title hidden-xs hidden-sm' },\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'ui-preview-text', style: { width: random.int(30, 50) + \"px\" } },\n                        ' '\n                      )\n                    )\n                  ),\n                  _react2.default.createElement(\n                    'div',\n                    { className: 'rank-position' },\n                    _react2.default.createElement(\n                      'strong',\n                      null,\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'ui-preview-text', style: { width: \"30px\" } },\n                        ' '\n                      )\n                    ),\n                    _react2.default.createElement(\n                      'small',\n                      null,\n                      gettext(\"Rank\")\n                    )\n                  ),\n                  _react2.default.createElement(\n                    'div',\n                    { className: 'rank-posts-counted' },\n                    _react2.default.createElement(\n                      'strong',\n                      null,\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'ui-preview-text', style: { width: \"30px\" } },\n                        ' '\n                      )\n                    ),\n                    _react2.default.createElement(\n                      'small',\n                      null,\n                      gettext(\"Ranked posts\")\n                    )\n                  ),\n                  _react2.default.createElement(\n                    'div',\n                    { className: 'rank-posts-total' },\n                    _react2.default.createElement(\n                      'strong',\n                      null,\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'ui-preview-text', style: { width: \"30px\" } },\n                        ' '\n                      )\n                    ),\n                    _react2.default.createElement(\n                      'small',\n                      null,\n                      gettext(\"Total posts\")\n                    )\n                  )\n                );\n              })\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../../utils/random\":159,\"../../avatar\":55,\"react\":\"react\"}],125:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _listItem = require('./list-item');\n\nvar _listItem2 = _interopRequireDefault(_listItem);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getLeadMessage',\n    value: function getLeadMessage() {\n      var message = ngettext(\"%(posters)s most active poster from last %(days)s days.\", \"%(posters)s most active posters from last %(days)s days.\", this.props.count);\n\n      return interpolate(message, {\n        posters: this.props.count,\n        days: this.props.trackedPeriod\n      }, true);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'active-posters-list' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'p',\n            { className: 'lead' },\n            this.getLeadMessage()\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'active-posters ui-ready' },\n            _react2.default.createElement(\n              'ul',\n              { className: 'list-group' },\n              this.props.users.map(function (user, i) {\n                return _react2.default.createElement(_listItem2.default, { user: user,\n                  rank: user.rank,\n                  counter: i + 1,\n                  key: user.id });\n              })\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"./list-item\":123,\"react\":\"react\"}],126:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _listEmpty = require('./list-empty');\n\nvar _listEmpty2 = _interopRequireDefault(_listEmpty);\n\nvar _listLoading = require('./list-loading');\n\nvar _listLoading2 = _interopRequireDefault(_listLoading);\n\nvar _list = require('./list');\n\nvar _list2 = _interopRequireDefault(_list);\n\nvar _index = require('../../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _users = require('../../../reducers/users');\n\nvar _polls = require('../../../services/polls');\n\nvar _polls2 = _interopRequireDefault(_polls);\n\nvar _store = require('../../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _pageTitle = require('../../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.update = function (data) {\n      _store2.default.dispatch((0, _users.dehydrate)(data.results));\n\n      _this.setState({\n        isLoaded: true,\n\n        trackedPeriod: data.tracked_period,\n        count: data.count\n      });\n    };\n\n    if (_index2.default.has('USERS')) {\n      _this.initWithPreloadedData(_index2.default.pop('USERS'));\n    } else {\n      _this.initWithoutPreloadedData();\n    }\n\n    _this.startPolling();\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'initWithPreloadedData',\n    value: function initWithPreloadedData(data) {\n      this.state = {\n        isLoaded: true,\n\n        trackedPeriod: data.tracked_period,\n        count: data.count\n      };\n\n      _store2.default.dispatch((0, _users.dehydrate)(data.results));\n    }\n  }, {\n    key: 'initWithoutPreloadedData',\n    value: function initWithoutPreloadedData() {\n      this.state = {\n        isLoaded: false\n      };\n    }\n  }, {\n    key: 'startPolling',\n    value: function startPolling() {\n      _polls2.default.start({\n        poll: 'active-posters',\n        url: _index2.default.get('USERS_API'),\n        data: {\n          list: 'active'\n        },\n        frequency: 90 * 1000,\n        update: this.update\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'componentDidMount',\n\n    /* jshint ignore:end */\n\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: this.props.route.extra.name,\n        parent: gettext(\"Users\")\n      });\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      _polls2.default.stop('active-posters');\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      if (this.state.isLoaded) {\n        if (this.state.count > 0) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_list2.default, { users: this.props.users,\n            trackedPeriod: this.state.trackedPeriod,\n            count: this.state.count });\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(_listEmpty2.default, { trackedPeriod: this.state.trackedPeriod });\n            /* jshint ignore:end */\n          }\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_listLoading2.default, null);\n          /* jshint ignore:end */\n        }\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../../index\":135,\"../../../reducers/users\":141,\"../../../services/page-title\":149,\"../../../services/polls\":150,\"../../../services/store\":152,\"./list\":125,\"./list-empty\":122,\"./list-loading\":124,\"react\":\"react\"}],127:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactNav = exports.TabsNav = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouter = require('react-router');\n\nvar _li = require('../li');\n\nvar _li2 = _interopRequireDefault(_li);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n//jshint ignore:line\n\n//jshint ignore:line\n\n// jshint ignore:start\nvar listUrl = function listUrl(baseUrl, list) {\n  var url = baseUrl;\n  if (list.component === 'rank') {\n    url += list.slug;\n  } else {\n    url += list.component;\n  }\n  return url + '/';\n};\n\nvar navLinks = function navLinks(baseUrl, lists, hideNav) {\n  return lists.map(function (list) {\n    var url = listUrl(baseUrl, list);\n    return _react2.default.createElement(\n      _li2.default,\n      { path: url,\n        key: url },\n      _react2.default.createElement(\n        _reactRouter.Link,\n        { to: url, onClick: hideNav },\n        list.name\n      )\n    );\n  });\n};\n// jshint ignore:end\n\nvar TabsNav = exports.TabsNav = function (_React$Component) {\n  _inherits(TabsNav, _React$Component);\n\n  function TabsNav() {\n    _classCallCheck(this, TabsNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(TabsNav).apply(this, arguments));\n  }\n\n  _createClass(TabsNav, [{\n    key: 'render',\n    value: function render() {\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'ul',\n        { className: 'nav nav-pills' },\n        navLinks(this.props.baseUrl, this.props.lists)\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return TabsNav;\n}(_react2.default.Component);\n\nvar CompactNav = exports.CompactNav = function (_React$Component2) {\n  _inherits(CompactNav, _React$Component2);\n\n  function CompactNav() {\n    _classCallCheck(this, CompactNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));\n  }\n\n  _createClass(CompactNav, [{\n    key: 'render',\n    value: function render() {\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu', role: 'menu' },\n        navLinks(this.props.baseUrl, this.props.lists, this.props.hideNav)\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return CompactNav;\n}(_react2.default.Component);\n\n},{\"../../index\":135,\"../li\":71,\"react\":\"react\",\"react-router\":\"react-router\"}],128:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _root = require('../../users-list/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement(_root2.default, { isLoaded: false, cols: 3, showStatus: true })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../users-list/root\":119,\"react\":\"react\"}],129:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _pager = require('./pager');\n\nvar _pager2 = _interopRequireDefault(_pager);\n\nvar _root = require('../../users-list/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getPager',\n    value: function getPager() {\n      if (this.props.pages > 1) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_pager2.default, this.props);\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement(_root2.default, { users: this.props.users,\n          showStatus: true,\n          cols: 3,\n          isLoaded: true }),\n        this.getPager()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../users-list/root\":119,\"./pager\":130,\"react\":\"react\"}],130:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouter = require('react-router');\n\nvar _resetScroll = require('../../../utils/reset-scroll');\n\nvar _resetScroll2 = _interopRequireDefault(_resetScroll);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getPreviousPage',\n    value: function getPreviousPage() {\n      if (this.props.previous || this.props.first) {\n        /* jshint ignore:start */\n        var url = this.props.baseUrl;\n        if (this.props.previous) {\n          url += this.props.previous + '/';\n        }\n\n        return _react2.default.createElement(\n          'li',\n          { className: 'previous' },\n          _react2.default.createElement(\n            _reactRouter.Link,\n            { to: url, onClick: _resetScroll2.default },\n            _react2.default.createElement(\n              'span',\n              { 'aria-hidden': 'true', className: 'material-icon' },\n              'arrow_back'\n            )\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getNextPage',\n    value: function getNextPage() {\n      if (this.props.next) {\n        /* jshint ignore:start */\n        var url = this.props.baseUrl + this.props.next + '/';\n        return _react2.default.createElement(\n          'li',\n          { className: 'next' },\n          _react2.default.createElement(\n            _reactRouter.Link,\n            { to: url, onClick: _resetScroll2.default },\n            _react2.default.createElement(\n              'span',\n              { 'aria-hidden': 'true', className: 'material-icon' },\n              'arrow_forward'\n            )\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getProgessBar',\n    value: function getProgessBar() {\n      var _this2 = this;\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'ul',\n        { className: 'pager-progress-bar' },\n        this.props.page_range.map(function (page) {\n          var className = page === _this2.props.page ? 'active' : null;\n          var url = _this2.props.baseUrl;\n\n          if (page > 1) {\n            url += page + '/';\n          }\n\n          return _react2.default.createElement(\n            'li',\n            { key: page, className: className },\n            _react2.default.createElement(\n              _reactRouter.Link,\n              { to: url, onClick: _resetScroll2.default },\n              page\n            )\n          );\n        })\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'pager-undercontent' },\n        _react2.default.createElement(\n          'nav',\n          null,\n          _react2.default.createElement(\n            'ul',\n            { className: 'pager' },\n            this.getPreviousPage(),\n            this.getNextPage()\n          ),\n          this.getProgessBar()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../../utils/reset-scroll\":160,\"react\":\"react\",\"react-router\":\"react-router\"}],131:[function(require,module,exports){\n'use strict';\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _list = require('./list');\n\nvar _list2 = _interopRequireDefault(_list);\n\nvar _listLoading = require('./list-loading');\n\nvar _listLoading2 = _interopRequireDefault(_listLoading);\n\nvar _index = require('../../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _users = require('../../../reducers/users');\n\nvar _polls = require('../../../services/polls');\n\nvar _polls2 = _interopRequireDefault(_polls);\n\nvar _store = require('../../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _pageTitle = require('../../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.update = function (data) {\n      _store2.default.dispatch((0, _users.dehydrate)(data.results));\n\n      data.isLoaded = true;\n      _this.setState(data);\n    };\n\n    if (_index2.default.has('USERS')) {\n      _this.initWithPreloadedData(_index2.default.pop('USERS'));\n    } else {\n      _this.initWithoutPreloadedData();\n    }\n\n    _this.startPolling(props.params.page || 1);\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'initWithPreloadedData',\n    value: function initWithPreloadedData(data) {\n      this.state = Object.assign(data, {\n        isLoaded: true\n      });\n      _store2.default.dispatch((0, _users.dehydrate)(data.results));\n    }\n  }, {\n    key: 'initWithoutPreloadedData',\n    value: function initWithoutPreloadedData() {\n      this.state = {\n        isLoaded: false\n      };\n    }\n  }, {\n    key: 'startPolling',\n    value: function startPolling(page) {\n      _polls2.default.start({\n        poll: 'rank-users',\n        url: _index2.default.get('USERS_API'),\n        data: {\n          rank: this.props.route.rank.id,\n          page: page\n        },\n        frequency: 90 * 1000,\n        update: this.update\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'componentDidMount',\n\n    /* jshint ignore:end */\n\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: this.props.route.rank.name,\n        page: this.props.params.page || null,\n        parent: gettext(\"Users\")\n      });\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      _polls2.default.stop('rank-users');\n    }\n  }, {\n    key: 'componentWillReceiveProps',\n    value: function componentWillReceiveProps(nextProps) {\n      if (this.props.params.page !== nextProps.params.page) {\n        _pageTitle2.default.set({\n          title: this.props.route.rank.name,\n          page: nextProps.params.page || null,\n          parent: gettext(\"Users\")\n        });\n\n        this.setState({\n          isLoaded: false\n        });\n\n        _polls2.default.stop('rank-users');\n        this.startPolling(nextProps.params.page);\n      }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.props.route.rank.css_class) {\n        return 'rank-users-list rank-users-' + this.props.route.rank.css_class;\n      } else {\n        return 'rank-users-list';\n      }\n    }\n  }, {\n    key: 'getRankDescription',\n    value: function getRankDescription() {\n      if (this.props.route.rank.description) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'rank-description' },\n          _react2.default.createElement('div', { className: 'lead', dangerouslySetInnerHTML: {\n              __html: this.props.route.rank.description.html\n            } })\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getComponent',\n    value: function getComponent() {\n      if (this.state.isLoaded) {\n        if (this.state.count > 0) {\n          /* jshint ignore:start */\n          var baseUrl = _index2.default.get('USERS_LIST_URL') + this.props.route.rank.slug + '/';\n          return _react2.default.createElement(_list2.default, _extends({ baseUrl: baseUrl,\n            users: this.props.users\n          }, this.state));\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(\n              'p',\n              { className: 'lead' },\n              gettext(\"There are no users with this rank at the moment.\")\n            );\n            /* jshint ignore:end */\n          }\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_listLoading2.default, null);\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          this.getRankDescription(),\n          this.getComponent()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../../index\":135,\"../../../reducers/users\":141,\"../../../services/page-title\":149,\"../../../services/polls\":150,\"../../../services/store\":152,\"./list\":129,\"./list-loading\":128,\"react\":\"react\"}],132:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.select = select;\nexports.paths = paths;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRedux = require('react-redux');\n\nvar _dropdownToggle = require('../dropdown-toggle');\n\nvar _dropdownToggle2 = _interopRequireDefault(_dropdownToggle);\n\nvar _navs = require('./navs');\n\nvar _root = require('./active-posters/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _root3 = require('./rank/root');\n\nvar _root4 = _interopRequireDefault(_root3);\n\nvar _withDropdown = require('../with-dropdown');\n\nvar _withDropdown2 = _interopRequireDefault(_withDropdown);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_WithDropdown) {\n  _inherits(_class, _WithDropdown);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page page-users-lists' },\n        _react2.default.createElement(\n          'div',\n          { className: 'page-header tabbed' },\n          _react2.default.createElement(\n            'div',\n            { className: 'container' },\n            _react2.default.createElement(\n              'h1',\n              { className: 'pull-left' },\n              gettext(\"Users\")\n            ),\n            _react2.default.createElement(_dropdownToggle2.default, { toggleNav: this.toggleNav,\n              dropdown: this.state.dropdown })\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'page-tabs hidden-xs hidden-sm' },\n            _react2.default.createElement(\n              'div',\n              { className: 'container' },\n              _react2.default.createElement(_navs.TabsNav, { lists: _index2.default.get('USERS_LISTS'),\n                baseUrl: _index2.default.get('USERS_LIST_URL') })\n            )\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: this.getCompactNavClassName() },\n          _react2.default.createElement(_navs.CompactNav, { lists: _index2.default.get('USERS_LISTS'),\n            baseUrl: _index2.default.get('USERS_LIST_URL'),\n            hideNav: this.hideNav })\n        ),\n        this.props.children\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_withDropdown2.default);\n\nexports.default = _class;\nfunction select(store) {\n  return {\n    'tick': store.tick.tick,\n    'user': store.auth.user,\n    'users': store.users\n  };\n}\n\nfunction paths() {\n  var paths = [];\n\n  _index2.default.get('USERS_LISTS').forEach(function (item) {\n    if (item.component === 'rank') {\n      paths.push({\n        path: _index2.default.get('USERS_LIST_URL') + item.slug + '/:page/',\n        component: (0, _reactRedux.connect)(select)(_root4.default),\n        rank: item\n      });\n      paths.push({\n        path: _index2.default.get('USERS_LIST_URL') + item.slug + '/',\n        component: (0, _reactRedux.connect)(select)(_root4.default),\n        rank: item\n      });\n    } else if (item.component === 'active-posters') {\n      paths.push({\n        path: _index2.default.get('USERS_LIST_URL') + item.component + '/',\n        component: (0, _reactRedux.connect)(select)(_root2.default),\n        extra: {\n          name: item.name\n        }\n      });\n    }\n  });\n\n  return paths;\n}\n\n},{\"../../index\":135,\"../dropdown-toggle\":68,\"../with-dropdown\":133,\"./active-posters/root\":126,\"./navs\":127,\"./rank/root\":131,\"react\":\"react\",\"react-redux\":\"react-redux\"}],133:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.toggleNav = function () {\n      _this.setState({\n        dropdown: !_this.state.dropdown\n      });\n    };\n\n    _this.hideNav = function () {\n      _this.setState({\n        dropdown: false\n      });\n    };\n\n    _this.state = {\n      dropdown: false\n    };\n    return _this;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'getCompactNavClassName',\n\n    /* jshint ignore:end */\n\n    value: function getCompactNavClassName() {\n      if (this.state.dropdown) {\n        return 'compact-nav open';\n      } else {\n        return 'compact-nav';\n      }\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],134:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.toggle = function () {\n      _this.props.onChange({\n        target: {\n          value: !_this.props.value\n        }\n      });\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(_class, [{\n    key: \"getClassName\",\n    value: function getClassName() {\n      if (this.props.value) {\n        return \"btn btn-yes-no btn-yes-no-on\";\n      } else {\n        return \"btn btn-yes-no btn-yes-no-off\";\n      }\n    }\n  }, {\n    key: \"getIcon\",\n    value: function getIcon() {\n      if (this.props.value) {\n        return this.props.iconOn || 'check_box';\n      } else {\n        return this.props.iconOff || 'check_box_outline_blank';\n      }\n    }\n  }, {\n    key: \"getLabel\",\n    value: function getLabel() {\n      if (this.props.value) {\n        return this.props.labelOn || gettext(\"yes\");\n      } else {\n        return this.props.labelOff || gettext(\"no\");\n      }\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: \"render\",\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"button\",\n        { type: \"button\",\n          onClick: this.toggle,\n          className: this.getClassName(),\n          id: this.props.id || null,\n          \"aria-describedby\": this.props['aria-describedby'] || null,\n          disabled: this.props.disabled || false },\n        _react2.default.createElement(\n          \"span\",\n          { className: \"material-icon\" },\n          this.getIcon()\n        ),\n        this.getLabel()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],135:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Misago = undefined;\n\nvar _orderedList = require('./utils/ordered-list');\n\nvar _orderedList2 = _interopRequireDefault(_orderedList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Misago = exports.Misago = function () {\n  function Misago() {\n    _classCallCheck(this, Misago);\n\n    this._initializers = [];\n    this._context = {};\n  }\n\n  _createClass(Misago, [{\n    key: 'addInitializer',\n    value: function addInitializer(initializer) {\n      this._initializers.push({\n        key: initializer.name,\n\n        item: initializer.initializer,\n\n        after: initializer.after,\n        before: initializer.before\n      });\n    }\n  }, {\n    key: 'init',\n    value: function init(context) {\n      var _this = this;\n\n      this._context = context;\n\n      var initOrder = new _orderedList2.default(this._initializers).orderedValues();\n      initOrder.forEach(function (initializer) {\n        initializer(_this);\n      });\n    }\n\n    // context accessors\n\n  }, {\n    key: 'has',\n    value: function has(key) {\n      return !!this._context[key];\n    }\n  }, {\n    key: 'get',\n    value: function get(key, fallback) {\n      if (this.has(key)) {\n        return this._context[key];\n      } else {\n        return fallback || undefined;\n      }\n    }\n  }, {\n    key: 'pop',\n    value: function pop(key) {\n      if (this.has(key)) {\n        var value = this._context[key];\n        this._context[key] = null;\n        return value;\n      } else {\n        return undefined;\n      }\n    }\n  }]);\n\n  return Misago;\n}();\n\n// create  singleton\n\nvar misago = new Misago();\n\n// expose it globally\nglobal.misago = misago;\n\n// and export it for tests and stuff\nexports.default = misago;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./utils/ordered-list\":158}],136:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SIGN_OUT = exports.SIGN_IN = exports.PATCH_USER = exports.initialState = undefined;\nexports.patchUser = patchUser;\nexports.signIn = signIn;\nexports.signOut = signOut;\nexports.default = auth;\n\nvar _users = require('./users');\n\nvar initialState = exports.initialState = {\n  signedIn: false,\n  signedOut: false\n};\n\nvar PATCH_USER = exports.PATCH_USER = 'PATCH_USER';\nvar SIGN_IN = exports.SIGN_IN = 'SIGN_IN';\nvar SIGN_OUT = exports.SIGN_OUT = 'SIGN_OUT';\n\nfunction patchUser(patch) {\n  return {\n    type: PATCH_USER,\n    patch: patch\n  };\n}\n\nfunction signIn(user) {\n  return {\n    type: SIGN_IN,\n    user: user\n  };\n}\n\nfunction signOut() {\n  var soft = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0];\n\n  return {\n    type: SIGN_OUT,\n    soft: soft\n  };\n}\n\nfunction auth() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  switch (action.type) {\n    case PATCH_USER:\n      var newState = Object.assign({}, state);\n      newState.user = Object.assign({}, state.user, action.patch);\n      return newState;\n\n    case SIGN_IN:\n      return Object.assign({}, state, {\n        signedIn: action.user\n      });\n\n    case SIGN_OUT:\n      return Object.assign({}, state, {\n        isAuthenticated: false,\n        isAnonymous: true,\n        signedOut: !action.soft\n      });\n\n    case _users.UPDATE_AVATAR:\n      if (state.isAuthenticated && state.user.id === action.userId) {\n        var _newState = Object.assign({}, state);\n        _newState.user = Object.assign({}, state.user, {\n          'avatar_hash': action.avatarHash\n        });\n        return _newState;\n      }\n      return state;\n\n    case _users.UPDATE_USERNAME:\n      if (state.isAuthenticated && state.user.id === action.userId) {\n        var _newState2 = Object.assign({}, state);\n        _newState2.user = Object.assign({}, state.user, {\n          username: action.username,\n          slug: action.slug\n        });\n        return _newState2;\n      }\n      return state;\n\n    default:\n      return state;\n  }\n}\n\n},{\"./users\":141}],137:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.PATCH_PROFILE = exports.DEHYDRATE_PROFILE = undefined;\nexports.dehydrate = dehydrate;\nexports.patchProfile = patchProfile;\nexports.default = auth;\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _users = require('./users');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar DEHYDRATE_PROFILE = exports.DEHYDRATE_PROFILE = 'DEHYDRATE_PROFILE';\nvar PATCH_PROFILE = exports.PATCH_PROFILE = 'PATCH_PROFILE';\n\nfunction dehydrate(profile) {\n  return {\n    type: DEHYDRATE_PROFILE,\n    profile: profile\n  };\n}\n\nfunction patchProfile(patch) {\n  return {\n    type: PATCH_PROFILE,\n    patch: patch\n  };\n}\n\nfunction auth() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  switch (action.type) {\n    case DEHYDRATE_PROFILE:\n      return Object.assign({}, action.profile, {\n        joined_on: (0, _moment2.default)(action.profile.joined_on),\n        status: (0, _users.dehydrateStatus)(action.profile.status)\n      });\n\n    case PATCH_PROFILE:\n      return Object.assign({}, state, action.patch);\n\n    case _users.UPDATE_AVATAR:\n      if (state.id === action.userId) {\n        return Object.assign({}, state, {\n          avatar_hash: action.avatarHash\n        });\n      }\n      return state;\n\n    case _users.UPDATE_USERNAME:\n      if (state.id === action.userId) {\n        return Object.assign({}, state, {\n          username: action.username,\n          slug: action.slug\n        });\n      }\n      return state;\n\n    default:\n      return state;\n  }\n}\n\n},{\"./users\":141,\"moment\":\"moment\"}],138:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.showSnackbar = showSnackbar;\nexports.hideSnackbar = hideSnackbar;\nexports.default = snackbar;\nvar initialState = exports.initialState = {\n  type: 'info',\n  message: '',\n  isVisible: false\n};\n\nvar SHOW_SNACKBAR = exports.SHOW_SNACKBAR = 'SHOW_SNACKBAR';\nvar HIDE_SNACKBAR = exports.HIDE_SNACKBAR = 'HIDE_SNACKBAR';\n\nfunction showSnackbar(message, type) {\n  return {\n    type: SHOW_SNACKBAR,\n    message: message,\n    messageType: type\n  };\n}\n\nfunction hideSnackbar() {\n  return {\n    type: HIDE_SNACKBAR\n  };\n}\n\nfunction snackbar() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  if (action.type === SHOW_SNACKBAR) {\n    return {\n      type: action.messageType,\n      message: action.message,\n      isVisible: true\n    };\n  } else if (action.type === HIDE_SNACKBAR) {\n    return Object.assign({}, state, {\n      isVisible: false\n    });\n  } else {\n    return state;\n  }\n}\n\n},{}],139:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.doTick = doTick;\nexports.default = tick;\nvar initialState = exports.initialState = {\n  tick: 0\n};\n\nvar TICK = exports.TICK = 'TICK';\n\nfunction doTick() {\n  return {\n    type: TICK\n  };\n}\n\nfunction tick() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  if (action.type === TICK) {\n    return Object.assign({}, state, {\n      tick: state.tick + 1\n    });\n  } else {\n    return state;\n  }\n}\n\n},{}],140:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DEHYDRATE_HISTORY = exports.APPEND_HISTORY = exports.ADD_NAME_CHANGE = undefined;\nexports.addNameChange = addNameChange;\nexports.append = append;\nexports.dehydrate = dehydrate;\nexports.default = username;\n\nvar _users = require('./users');\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar ADD_NAME_CHANGE = exports.ADD_NAME_CHANGE = 'ADD_NAME_CHANGE';\nvar APPEND_HISTORY = exports.APPEND_HISTORY = 'APPEND_HISTORY';\nvar DEHYDRATE_HISTORY = exports.DEHYDRATE_HISTORY = 'DEHYDRATE_HISTORY';\n\nfunction addNameChange(change, user, changedBy) {\n  return {\n    type: ADD_NAME_CHANGE,\n    change: change,\n    user: user,\n    changedBy: changedBy\n  };\n}\n\nfunction append(items) {\n  return {\n    type: APPEND_HISTORY,\n    items: items\n  };\n}\n\nfunction dehydrate(items) {\n  return {\n    type: DEHYDRATE_HISTORY,\n    items: items\n  };\n}\n\nfunction username() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  switch (action.type) {\n    case ADD_NAME_CHANGE:\n      var newState = state.slice();\n      newState.unshift({\n        id: Math.floor(Date.now() / 1000), // just small hax for getting id\n        changed_by: action.changedBy,\n        changed_by_username: action.changedBy.username,\n        changed_on: (0, _moment2.default)(),\n        new_username: action.change.username,\n        old_username: action.user.username\n      });\n      return newState;\n\n    case APPEND_HISTORY:\n      return state.concat(action.items.map(function (item) {\n        return Object.assign({}, item, {\n          changed_on: (0, _moment2.default)(item.changed_on)\n        });\n      }));\n\n    case DEHYDRATE_HISTORY:\n      return action.items.map(function (item) {\n        return Object.assign({}, item, {\n          changed_on: (0, _moment2.default)(item.changed_on)\n        });\n      });\n\n    case _users.UPDATE_AVATAR:\n      return state.map(function (item) {\n        item = Object.assign({}, item);\n        if (item.changed_by && item.changed_by.id === action.userId) {\n          item.changed_by = Object.assign({}, item.changed_by, {\n            'avatar_hash': action.avatarHash\n          });\n        }\n\n        return item;\n      });\n\n    case _users.UPDATE_USERNAME:\n      return state.map(function (item) {\n        item = Object.assign({}, item);\n        if (item.changed_by && item.changed_by.id === action.userId) {\n          item.changed_by = Object.assign({}, item.changed_by, {\n            'username': action.username,\n            'slug': action.slug\n          });\n        }\n\n        return Object.assign({}, item);\n      });\n\n    default:\n      return state;\n  }\n}\n\n},{\"./users\":141,\"moment\":\"moment\"}],141:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.UPDATE_USERNAME = exports.UPDATE_AVATAR = exports.DEHYDRATE_USERS = exports.APPEND_USERS = undefined;\nexports.append = append;\nexports.dehydrate = dehydrate;\nexports.dehydrateStatus = dehydrateStatus;\nexports.updateAvatar = updateAvatar;\nexports.updateUsername = updateUsername;\nexports.default = user;\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar APPEND_USERS = exports.APPEND_USERS = 'APPEND_USERS';\nvar DEHYDRATE_USERS = exports.DEHYDRATE_USERS = 'DEHYDRATE_USERS';\nvar UPDATE_AVATAR = exports.UPDATE_AVATAR = 'UPDATE_AVATAR';\nvar UPDATE_USERNAME = exports.UPDATE_USERNAME = 'UPDATE_USERNAME';\n\nfunction append(items) {\n  return {\n    type: APPEND_USERS,\n    items: items\n  };\n}\n\nfunction dehydrate(items) {\n  return {\n    type: DEHYDRATE_USERS,\n    items: items\n  };\n}\n\nfunction dehydrateStatus(status) {\n  if (status) {\n    return Object.assign({}, status, {\n      last_click: status.last_click ? (0, _moment2.default)(status.last_click) : null,\n      banned_until: status.banned_until ? (0, _moment2.default)(status.banned_until) : null\n    });\n  } else {\n    return null;\n  }\n}\n\nfunction updateAvatar(user, avatarHash) {\n  return {\n    type: UPDATE_AVATAR,\n    userId: user.id,\n    avatarHash: avatarHash\n  };\n}\n\nfunction updateUsername(user, username, slug) {\n  return {\n    type: UPDATE_USERNAME,\n    userId: user.id,\n    username: username,\n    slug: slug\n  };\n}\n\nfunction user() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  switch (action.type) {\n    case APPEND_USERS:\n      return state.concat(action.items.map(function (item) {\n        return Object.assign({}, item, {\n          joined_on: (0, _moment2.default)(item.joined_on),\n          status: dehydrateStatus(item.status)\n        });\n      }));\n\n    case DEHYDRATE_USERS:\n      return action.items.map(function (item) {\n        return Object.assign({}, item, {\n          joined_on: (0, _moment2.default)(item.joined_on),\n          status: dehydrateStatus(item.status)\n        });\n      });\n\n    case UPDATE_AVATAR:\n      return state.map(function (item) {\n        item = Object.assign({}, item);\n        if (item.id === action.userId) {\n          item.avatar_hash = action.avatarHash;\n        }\n\n        return item;\n      });\n\n    default:\n      return state;\n  }\n}\n\n},{\"moment\":\"moment\"}],142:[function(require,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Ajax = exports.Ajax = function () {\n  function Ajax() {\n    _classCallCheck(this, Ajax);\n\n    this._cookieName = null;\n    this._csrfToken = null;\n    this._locks = {};\n  }\n\n  _createClass(Ajax, [{\n    key: 'init',\n    value: function init(cookieName) {\n      this._cookieName = cookieName;\n      this._csrfToken = this.getCsrfToken();\n    }\n  }, {\n    key: 'getCsrfToken',\n    value: function getCsrfToken() {\n      if (document.cookie.indexOf(this._cookieName) !== -1) {\n        var cookieRegex = new RegExp(this._cookieName + '\\=([^;]*)');\n        var cookie = document.cookie.match(cookieRegex)[0];\n        return cookie ? cookie.split('=')[1] : null;\n      } else {\n        return null;\n      }\n    }\n  }, {\n    key: 'request',\n    value: function request(method, url, data) {\n      var self = this;\n      return new Promise(function (resolve, reject) {\n        var xhr = {\n          url: url,\n          method: method,\n          headers: {\n            'X-CSRFToken': self._csrfToken\n          },\n\n          data: data ? JSON.stringify(data) : null,\n          contentType: \"application/json; charset=utf-8\",\n          dataType: 'json',\n\n          success: function success(data) {\n            resolve(data);\n          },\n\n          error: function error(jqXHR) {\n            var rejection = jqXHR.responseJSON || {};\n\n            rejection.status = jqXHR.status;\n\n            if (rejection.status === 0) {\n              rejection.detail = gettext(\"Lost connection with application.\");\n            }\n\n            if (rejection.status === 404) {\n              if (!rejection.detail || rejection.detail === 'NOT FOUND') {\n                rejection.detail = gettext(\"Action link is invalid.\");\n              }\n            }\n\n            if (rejection.status === 500 && !rejection.detail) {\n              rejection.detail = gettext(\"Unknown error has occured.\");\n            }\n\n            rejection.statusText = jqXHR.statusText;\n\n            reject(rejection);\n          }\n        };\n\n        $.ajax(xhr);\n      });\n    }\n  }, {\n    key: 'get',\n    value: function get(url, params, lock) {\n      var _this = this;\n\n      if (params) {\n        url += '?' + $.param(params);\n      }\n\n      if (lock) {\n        var _ret = function () {\n          var self = _this;\n\n          // update url in existing lock?\n          if (_this._locks[lock]) {\n            _this._locks[lock].url = url;\n          }\n\n          // immediately dereference promise handlers without doing anything\n          // we are already waiting for existing response to resolve\n          if (_this._locks[lock] && _this._locks[lock].waiter) {\n            return {\n              v: {\n                then: function then() {\n                  return;\n                }\n              }\n            };\n\n            // return promise that will begin when original one resolves\n          } else if (_this._locks[lock] && _this._locks[lock].wait) {\n              _this._locks[lock].waiter = true;\n\n              return {\n                v: new Promise(function (resolve, reject) {\n                  var wait = function wait(url) {\n                    // keep waiting on promise\n                    if (self._locks[lock].wait) {\n                      window.setTimeout(function () {\n                        wait(url);\n                      }, 300);\n\n                      // poll for new url\n                    } else if (self._locks[lock].url !== url) {\n                        wait(self._locks[lock].url);\n\n                        // ajax backend for response\n                      } else {\n                          self._locks[lock].waiter = false;\n                          self.request('GET', self._locks[lock].url).then(function (data) {\n                            if (self._locks[lock].url === url) {\n                              resolve(data);\n                            } else {\n                              self._locks[lock].waiter = true;\n                              wait(self._locks[lock].url);\n                            }\n                          }, function (rejection) {\n                            if (self._locks[lock].url === url) {\n                              reject(rejection);\n                            } else {\n                              self._locks[lock].waiter = true;\n                              wait(self._locks[lock].url);\n                            }\n                          });\n                        }\n                  };\n\n                  window.setTimeout(function () {\n                    wait(url);\n                  }, 300);\n                })\n              };\n\n              // setup new lock without waiter\n            } else {\n                _this._locks[lock] = {\n                  url: url,\n                  wait: true,\n                  waiter: false\n                };\n\n                return {\n                  v: new Promise(function (resolve, reject) {\n                    self.request('GET', url).then(function (data) {\n                      self._locks[lock].wait = false;\n                      if (self._locks[lock].url === url) {\n                        resolve(data);\n                      }\n                    }, function (rejection) {\n                      self._locks[lock].wait = false;\n                      if (self._locks[lock].url === url) {\n                        reject(rejection);\n                      }\n                    });\n                  })\n                };\n              }\n        }();\n\n        if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === \"object\") return _ret.v;\n      } else {\n        return this.request('GET', url);\n      }\n    }\n  }, {\n    key: 'post',\n    value: function post(url, data) {\n      return this.request('POST', url, data);\n    }\n  }, {\n    key: 'patch',\n    value: function patch(url, data) {\n      return this.request('PATCH', url, data);\n    }\n  }, {\n    key: 'put',\n    value: function put(url, data) {\n      return this.request('PUT', url, data);\n    }\n  }, {\n    key: 'delete',\n    value: function _delete(url) {\n      return this.request('DELETE', url);\n    }\n  }, {\n    key: 'upload',\n    value: function upload(url, data, progress) {\n      var self = this;\n      return new Promise(function (resolve, reject) {\n        var xhr = {\n          url: url,\n          method: 'POST',\n          headers: {\n            'X-CSRFToken': self._csrfToken\n          },\n\n          data: data,\n          contentType: false,\n          processData: false,\n\n          xhr: function xhr() {\n            var xhr = new window.XMLHttpRequest();\n            xhr.upload.addEventListener(\"progress\", function (evt) {\n              if (evt.lengthComputable) {\n                progress(Math.round(evt.loaded / evt.total * 100));\n              }\n            }, false);\n            return xhr;\n          },\n\n          success: function success(response) {\n            resolve(response);\n          },\n\n          error: function error(jqXHR) {\n            var rejection = jqXHR.responseJSON || {};\n\n            rejection.status = jqXHR.status;\n\n            if (rejection.status === 0) {\n              rejection.detail = gettext(\"Lost connection with application.\");\n            }\n\n            if (rejection.status === 404) {\n              if (!rejection.detail || rejection.detail === 'NOT FOUND') {\n                rejection.detail = gettext(\"Action link is invalid.\");\n              }\n            }\n\n            if (rejection.status === 500 && !rejection.detail) {\n              rejection.detail = gettext(\"Unknown error has occured.\");\n            }\n\n            rejection.statusText = jqXHR.statusText;\n\n            reject(rejection);\n          }\n        };\n\n        $.ajax(xhr);\n      });\n    }\n  }]);\n\n  return Ajax;\n}();\n\nexports.default = new Ajax();\n\n},{}],143:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Auth = undefined;\n\nvar _auth = require('../reducers/auth');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// jshint ignore:line\n\nvar Auth = exports.Auth = function () {\n  function Auth() {\n    _classCallCheck(this, Auth);\n  }\n\n  _createClass(Auth, [{\n    key: 'init',\n    value: function init(store, local, modal) {\n      this._store = store;\n      this._local = local;\n      this._modal = modal;\n\n      // tell other tabs what auth state is because we are most current with it\n      this.syncSession();\n\n      // listen for other tabs to tell us that state changed\n      this.watchState();\n    }\n  }, {\n    key: 'syncSession',\n    value: function syncSession() {\n      var state = this._store.getState().auth;\n      if (state.isAuthenticated) {\n        this._local.set('auth', {\n          isAuthenticated: true,\n          username: state.user.username\n        });\n      } else {\n        this._local.set('auth', {\n          isAuthenticated: false\n        });\n      }\n    }\n  }, {\n    key: 'watchState',\n    value: function watchState() {\n      var _this = this;\n\n      this._local.watch('auth', function (newState) {\n        if (newState.isAuthenticated) {\n          _this._store.dispatch((0, _auth.signIn)({\n            username: newState.username\n          }));\n        } else {\n          _this._store.dispatch((0, _auth.signOut)());\n        }\n      });\n      this._modal.hide();\n    }\n  }, {\n    key: 'signIn',\n    value: function signIn(user) {\n      this._store.dispatch((0, _auth.signIn)(user));\n      this._local.set('auth', {\n        isAuthenticated: true,\n        username: user.username\n      });\n      this._modal.hide();\n    }\n  }, {\n    key: 'signOut',\n    value: function signOut() {\n      this._store.dispatch((0, _auth.signOut)());\n      this._local.set('auth', {\n        isAuthenticated: false\n      });\n      this._modal.hide();\n    }\n  }, {\n    key: 'softSignOut',\n    value: function softSignOut() {\n      this._store.dispatch((0, _auth.signOut)(true));\n      this._local.set('auth', {\n        isAuthenticated: false\n      });\n      this._modal.hide();\n    }\n  }]);\n\n  return Auth;\n}();\n\nexports.default = new Auth();\n\n},{\"../reducers/auth\":136}],144:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* global grecaptcha */\n// jshint ignore:line\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Captcha = exports.ReCaptcha = exports.ReCaptchaComponent = exports.QACaptcha = exports.NoCaptcha = exports.BaseCaptcha = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _formGroup = require('../components/form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// jshint ignore:line\n\nvar BaseCaptcha = exports.BaseCaptcha = function () {\n  function BaseCaptcha() {\n    _classCallCheck(this, BaseCaptcha);\n  }\n\n  _createClass(BaseCaptcha, [{\n    key: 'init',\n    value: function init(context, ajax, include, snackbar) {\n      this._context = context;\n      this._ajax = ajax;\n      this._include = include;\n      this._snackbar = snackbar;\n    }\n  }]);\n\n  return BaseCaptcha;\n}();\n\nvar NoCaptcha = exports.NoCaptcha = function (_BaseCaptcha) {\n  _inherits(NoCaptcha, _BaseCaptcha);\n\n  function NoCaptcha() {\n    _classCallCheck(this, NoCaptcha);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(NoCaptcha).apply(this, arguments));\n  }\n\n  _createClass(NoCaptcha, [{\n    key: 'load',\n    value: function load() {\n      return new Promise(function (resolve) {\n        // immediately resolve as we don't have anything to validate\n        resolve();\n      });\n    }\n  }, {\n    key: 'validator',\n    value: function validator() {\n      return null;\n    }\n  }, {\n    key: 'component',\n    value: function component() {\n      return null;\n    }\n  }]);\n\n  return NoCaptcha;\n}(BaseCaptcha);\n\nvar QACaptcha = exports.QACaptcha = function (_BaseCaptcha2) {\n  _inherits(QACaptcha, _BaseCaptcha2);\n\n  function QACaptcha() {\n    _classCallCheck(this, QACaptcha);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(QACaptcha).apply(this, arguments));\n  }\n\n  _createClass(QACaptcha, [{\n    key: 'load',\n    value: function load() {\n      var self = this;\n      return new Promise(function (resolve, reject) {\n        self._ajax.get(self._context.get('CAPTCHA_API_URL')).then(function (data) {\n          self.question = data.question;\n          self.helpText = data.help_text;\n          resolve();\n        }, function () {\n          self._snackbar.error(gettext(\"Failed to load CAPTCHA.\"));\n          reject();\n        });\n      });\n    }\n  }, {\n    key: 'validator',\n    value: function validator() {\n      return [];\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'component',\n    value: function component(kwargs) {\n      return _react2.default.createElement(\n        _formGroup2.default,\n        { label: this.question, 'for': 'id_captcha',\n          labelClass: kwargs.labelClass || \"col-sm-4\",\n          controlClass: kwargs.controlClass || \"col-sm-8\",\n          validation: kwargs.form.state.errors.captcha,\n          helpText: this.helpText || null },\n        _react2.default.createElement('input', { type: 'text', id: 'id_captcha', className: 'form-control',\n          'aria-describedby': 'id_captcha_status',\n          disabled: kwargs.form.state.isLoading,\n          onChange: kwargs.form.bindInput('captcha'),\n          value: kwargs.form.state.captcha })\n      );\n    }\n    /* jshint ignore:end */\n\n  }]);\n\n  return QACaptcha;\n}(BaseCaptcha);\n\nvar ReCaptchaComponent = exports.ReCaptchaComponent = function (_React$Component) {\n  _inherits(ReCaptchaComponent, _React$Component);\n\n  function ReCaptchaComponent() {\n    _classCallCheck(this, ReCaptchaComponent);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(ReCaptchaComponent).apply(this, arguments));\n  }\n\n  _createClass(ReCaptchaComponent, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this4 = this;\n\n      grecaptcha.render('recaptcha', {\n        'sitekey': this.props.siteKey,\n        'callback': function callback(response) {\n          // fire fakey event to binding\n          _this4.props.binding({\n            target: {\n              value: response\n            }\n          });\n        }\n      });\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement('div', { id: 'recaptcha' });\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ReCaptchaComponent;\n}(_react2.default.Component);\n\nvar ReCaptcha = exports.ReCaptcha = function (_BaseCaptcha3) {\n  _inherits(ReCaptcha, _BaseCaptcha3);\n\n  function ReCaptcha() {\n    _classCallCheck(this, ReCaptcha);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(ReCaptcha).apply(this, arguments));\n  }\n\n  _createClass(ReCaptcha, [{\n    key: 'load',\n    value: function load() {\n      this._include.include('https://www.google.com/recaptcha/api.js', true);\n\n      return new Promise(function (resolve) {\n        var wait = function wait() {\n          if (typeof grecaptcha === \"undefined\") {\n            window.setTimeout(function () {\n              wait();\n            }, 200);\n          } else {\n            resolve();\n          }\n        };\n        wait();\n      });\n    }\n  }, {\n    key: 'validator',\n    value: function validator() {\n      return [];\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'component',\n    value: function component(kwargs) {\n      return _react2.default.createElement(\n        _formGroup2.default,\n        { label: gettext(\"Captcha\"), 'for': 'id_captcha',\n          labelClass: kwargs.labelClass || \"col-sm-4\",\n          controlClass: kwargs.controlClass || \"col-sm-8\",\n          validation: kwargs.form.state.errors.captcha,\n          helpText: gettext(\"Please solve the quick test.\") },\n        _react2.default.createElement(ReCaptchaComponent, { siteKey: this._context.get('SETTINGS').recaptcha_site_key,\n          binding: kwargs.form.bindInput('captcha') })\n      );\n    }\n    /* jshint ignore:end */\n\n  }]);\n\n  return ReCaptcha;\n}(BaseCaptcha);\n\nvar Captcha = exports.Captcha = function () {\n  function Captcha() {\n    _classCallCheck(this, Captcha);\n  }\n\n  _createClass(Captcha, [{\n    key: 'init',\n    value: function init(context, ajax, include, snackbar) {\n      switch (context.get('SETTINGS').captcha_type) {\n        case 'no':\n          this._captcha = new NoCaptcha();\n          break;\n\n        case 'qa':\n          this._captcha = new QACaptcha();\n          break;\n\n        case 're':\n          this._captcha = new ReCaptcha();\n          break;\n      }\n\n      this._captcha.init(context, ajax, include, snackbar);\n    }\n\n    // accessors for underlying strategy\n\n  }, {\n    key: 'load',\n    value: function load() {\n      return this._captcha.load();\n    }\n  }, {\n    key: 'validator',\n    value: function validator() {\n      return this._captcha.validator();\n    }\n  }, {\n    key: 'component',\n    value: function component(kwargs) {\n      return this._captcha.component(kwargs);\n    }\n  }]);\n\n  return Captcha;\n}();\n\nexports.default = new Captcha();\n\n},{\"../components/form-group\":69,\"react\":\"react\"}],145:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Include = exports.Include = function () {\n  function Include() {\n    _classCallCheck(this, Include);\n  }\n\n  _createClass(Include, [{\n    key: 'init',\n    value: function init(staticUrl) {\n      this._staticUrl = staticUrl;\n      this._included = [];\n    }\n  }, {\n    key: 'include',\n    value: function include(script) {\n      var remote = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n      if (this._included.indexOf(script) === -1) {\n        this._included.push(script);\n        this._include(script, remote);\n      }\n    }\n  }, {\n    key: '_include',\n    value: function _include(script, remote) {\n      $.ajax({\n        url: (!remote ? this._staticUrl : '') + script,\n        cache: true,\n        dataType: 'script'\n      });\n    }\n  }]);\n\n  return Include;\n}();\n\nexports.default = new Include();\n\n},{}],146:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar storage = window.localStorage;\n\nvar LocalStorage = exports.LocalStorage = function () {\n  function LocalStorage() {\n    _classCallCheck(this, LocalStorage);\n  }\n\n  _createClass(LocalStorage, [{\n    key: 'init',\n    value: function init(prefix) {\n      var _this = this;\n\n      this._prefix = prefix;\n      this._watchers = [];\n\n      window.addEventListener('storage', function (e) {\n        var newValueJson = JSON.parse(e.newValue);\n        _this._watchers.forEach(function (watcher) {\n          if (watcher.key === e.key && e.oldValue !== e.newValue) {\n            watcher.callback(newValueJson);\n          }\n        });\n      });\n    }\n  }, {\n    key: 'set',\n    value: function set(key, value) {\n      storage.setItem(this._prefix + key, JSON.stringify(value));\n    }\n  }, {\n    key: 'get',\n    value: function get(key) {\n      var itemString = storage.getItem(this._prefix + key);\n      if (itemString) {\n        return JSON.parse(itemString);\n      } else {\n        return null;\n      }\n    }\n  }, {\n    key: 'watch',\n    value: function watch(key, callback) {\n      this._watchers.push({\n        key: this._prefix + key,\n        callback: callback\n      });\n    }\n  }]);\n\n  return LocalStorage;\n}();\n\nexports.default = new LocalStorage();\n\n},{}],147:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.MobileNavbarDropdown = undefined;\n\nvar _mountComponent = require('../utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MobileNavbarDropdown = exports.MobileNavbarDropdown = function () {\n  function MobileNavbarDropdown() {\n    _classCallCheck(this, MobileNavbarDropdown);\n  }\n\n  _createClass(MobileNavbarDropdown, [{\n    key: 'init',\n    value: function init(element) {\n      this._element = element;\n      this._component = null;\n    }\n  }, {\n    key: 'show',\n    value: function show(component) {\n      if (this._component === component) {\n        this.hide();\n      } else {\n        this._component = component;\n        (0, _mountComponent2.default)(component, this._element.id);\n        $(this._element).addClass('open');\n      }\n    }\n  }, {\n    key: 'showConnected',\n    value: function showConnected(name, component) {\n      if (this._component === name) {\n        this.hide();\n      } else {\n        this._component = name;\n        (0, _mountComponent2.default)(component, this._element.id, true);\n        $(this._element).addClass('open');\n      }\n    }\n  }, {\n    key: 'hide',\n    value: function hide() {\n      $(this._element).removeClass('open');\n      this._component = null;\n    }\n  }]);\n\n  return MobileNavbarDropdown;\n}();\n\nexports.default = new MobileNavbarDropdown();\n\n},{\"../utils/mount-component\":157}],148:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Modal = undefined;\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _mountComponent = require('../utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Modal = exports.Modal = function () {\n  function Modal() {\n    _classCallCheck(this, Modal);\n  }\n\n  _createClass(Modal, [{\n    key: 'init',\n    value: function init(element) {\n      var _this = this;\n\n      this._element = element;\n\n      this._modal = $(element).modal({ show: false });\n\n      this._modal.on('hidden.bs.modal', function () {\n        _reactDom2.default.unmountComponentAtNode(_this._element);\n      });\n    }\n  }, {\n    key: 'show',\n    value: function show(component) {\n      (0, _mountComponent2.default)(component, this._element.id);\n      this._modal.modal('show');\n    }\n  }, {\n    key: 'hide',\n    value: function hide() {\n      this._modal.modal('hide');\n    }\n  }]);\n\n  return Modal;\n}();\n\nexports.default = new Modal();\n\n},{\"../utils/mount-component\":157,\"react-dom\":\"react-dom\"}],149:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar PageTitle = exports.PageTitle = function () {\n  function PageTitle() {\n    _classCallCheck(this, PageTitle);\n  }\n\n  _createClass(PageTitle, [{\n    key: 'init',\n    value: function init(indexTitle, forumName) {\n      this._indexTitle = indexTitle;\n      this._forumName = forumName;\n    }\n  }, {\n    key: 'set',\n    value: function set(title) {\n      if (!title) {\n        document.title = this._indexTitle || this._forumName;\n        return;\n      }\n\n      if (typeof title === 'string') {\n        title = { title: title };\n      }\n\n      var finalTitle = title.title;\n\n      if (title.page) {\n        var pageLabel = interpolate(gettext('page: %(page)s'), {\n          page: title.page\n        }, true);\n\n        finalTitle += ' (' + pageLabel + ')';\n      }\n\n      if (title.parent) {\n        finalTitle += ' | ' + title.parent;\n      }\n\n      document.title = finalTitle + ' | ' + this._forumName;\n    }\n  }]);\n\n  return PageTitle;\n}();\n\nexports.default = new PageTitle();\n\n},{}],150:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Polls = exports.Polls = function () {\n  function Polls() {\n    _classCallCheck(this, Polls);\n  }\n\n  _createClass(Polls, [{\n    key: \"init\",\n    value: function init(ajax, snackbar) {\n      this._ajax = ajax;\n      this._snackbar = snackbar;\n\n      this._polls = {};\n    }\n  }, {\n    key: \"start\",\n    value: function start(kwargs) {\n      var _this = this;\n\n      var poolServer = function poolServer() {\n        _this._polls[kwargs.poll] = kwargs;\n\n        _this._ajax.get(kwargs.url, kwargs.data || null).then(function (data) {\n          if (!_this._polls[kwargs.poll]._stopped) {\n            kwargs.update(data);\n\n            _this._polls[kwargs.poll].timeout = window.setTimeout(poolServer, kwargs.frequency);\n          }\n        }, function (rejection) {\n          if (!_this._polls[kwargs.poll]._stopped) {\n            if (kwargs.error) {\n              kwargs.error(rejection);\n            } else {\n              _this._snackbar.apiError(rejection);\n            }\n          }\n        });\n      };\n\n      poolServer();\n    }\n  }, {\n    key: \"stop\",\n    value: function stop(pollId) {\n      if (this._polls[pollId]) {\n        window.clearTimeout(this._polls[pollId].timeout);\n        this._polls[pollId]._stopped = true;\n      }\n    }\n  }]);\n\n  return Polls;\n}();\n\nexports.default = new Polls();\n\n},{}],151:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Snackbar = undefined;\n\nvar _snackbar = require('../reducers/snackbar');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar HIDE_ANIMATION_LENGTH = 300;\nvar MESSAGE_SHOW_LENGTH = 5000;\n\nvar Snackbar = exports.Snackbar = function () {\n  function Snackbar() {\n    _classCallCheck(this, Snackbar);\n  }\n\n  _createClass(Snackbar, [{\n    key: 'init',\n    value: function init(store) {\n      this._store = store;\n      this._timeout = null;\n    }\n  }, {\n    key: 'alert',\n    value: function alert(message, type) {\n      var _this = this;\n\n      if (this._timeout) {\n        window.clearTimeout(this._timeout);\n        this._store.dispatch((0, _snackbar.hideSnackbar)());\n\n        this._timeout = window.setTimeout(function () {\n          _this._timeout = null;\n          _this.alert(message, type);\n        }, HIDE_ANIMATION_LENGTH);\n      } else {\n        this._store.dispatch((0, _snackbar.showSnackbar)(message, type));\n        this._timeout = window.setTimeout(function () {\n          _this._store.dispatch((0, _snackbar.hideSnackbar)());\n          _this._timeout = null;\n        }, MESSAGE_SHOW_LENGTH);\n      }\n    }\n\n    // shorthands for message types\n\n  }, {\n    key: 'info',\n    value: function info(message) {\n      this.alert(message, 'info');\n    }\n  }, {\n    key: 'success',\n    value: function success(message) {\n      this.alert(message, 'success');\n    }\n  }, {\n    key: 'warning',\n    value: function warning(message) {\n      this.alert(message, 'warning');\n    }\n  }, {\n    key: 'error',\n    value: function error(message) {\n      this.alert(message, 'error');\n    }\n\n    // shorthand for api errors\n\n  }, {\n    key: 'apiError',\n    value: function apiError(rejection) {\n      var message = rejection.detail;\n\n      if (!message) {\n        if (rejection.status === 404) {\n          message = gettext(\"Action link is invalid.\");\n        } else {\n          message = gettext(\"Unknown error has occured.\");\n        }\n      }\n\n      if (rejection.status === 403 && message === \"Permission denied\") {\n        message = gettext(\"You don't have permission to perform this action.\");\n      }\n\n      this.error(message);\n    }\n  }]);\n\n  return Snackbar;\n}();\n\nexports.default = new Snackbar();\n\n},{\"../reducers/snackbar\":138}],152:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.StoreWrapper = undefined;\n\nvar _redux = require('redux');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar StoreWrapper = exports.StoreWrapper = function () {\n  function StoreWrapper() {\n    _classCallCheck(this, StoreWrapper);\n\n    this._store = null;\n    this._reducers = {};\n    this._initialState = {};\n  }\n\n  _createClass(StoreWrapper, [{\n    key: 'addReducer',\n    value: function addReducer(name, reducer, initialState) {\n      this._reducers[name] = reducer;\n      this._initialState[name] = initialState;\n    }\n  }, {\n    key: 'init',\n    value: function init() {\n      this._store = (0, _redux.createStore)((0, _redux.combineReducers)(this._reducers), this._initialState);\n    }\n  }, {\n    key: 'getStore',\n    value: function getStore() {\n      return this._store;\n    }\n\n    // Store API\n\n  }, {\n    key: 'getState',\n    value: function getState() {\n      return this._store.getState();\n    }\n  }, {\n    key: 'dispatch',\n    value: function dispatch(action) {\n      return this._store.dispatch(action);\n    }\n  }]);\n\n  return StoreWrapper;\n}();\n\nexports.default = new StoreWrapper();\n\n},{\"redux\":\"redux\"}],153:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* global zxcvbn */\n\nvar Zxcvbn = exports.Zxcvbn = function () {\n  function Zxcvbn() {\n    _classCallCheck(this, Zxcvbn);\n  }\n\n  _createClass(Zxcvbn, [{\n    key: \"init\",\n    value: function init(include) {\n      this._include = include;\n    }\n  }, {\n    key: \"scorePassword\",\n    value: function scorePassword(password, inputs) {\n      // 0-4 score, the more the stronger password\n      return zxcvbn(password, inputs).score;\n    }\n  }, {\n    key: \"load\",\n    value: function load() {\n      if (typeof zxcvbn === \"undefined\") {\n        this._include.include('misago/js/zxcvbn.js');\n        return this._loadingPromise();\n      } else {\n        return this._loadedPromise();\n      }\n    }\n  }, {\n    key: \"_loadingPromise\",\n    value: function _loadingPromise() {\n      return new Promise(function (resolve) {\n        var wait = function wait() {\n          if (typeof zxcvbn === \"undefined\") {\n            window.setTimeout(function () {\n              wait();\n            }, 200);\n          } else {\n            resolve();\n          }\n        };\n        wait();\n      });\n    }\n  }, {\n    key: \"_loadedPromise\",\n    value: function _loadedPromise() {\n      // we have already loaded zxcvbn.js, resolve away!\n      return new Promise(function (resolve) {\n        resolve();\n      });\n    }\n  }]);\n\n  return Zxcvbn;\n}();\n\nexports.default = new Zxcvbn();\n\n},{}],154:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (ban, changeState) {\n  _reactDom2.default.render(\n  /* jshint ignore:start */\n  _react2.default.createElement(\n    _reactRedux.Provider,\n    { store: _store2.default.getStore() },\n    _react2.default.createElement(RedrawedBannedPage, { message: ban.message,\n      expires: ban.expires_on ? (0, _moment2.default)(ban.expires_on) : null })\n  ),\n  /* jshint ignore:end */\n  document.getElementById('page-mount'));\n\n  if (typeof changeState === 'undefined' || changeState) {\n    var forumName = _index2.default.get('SETTINGS').forum_name;\n    document.title = gettext(\"You are banned\") + ' | ' + forumName;\n    window.history.pushState({}, \"\", _index2.default.get('BANNED_URL'));\n  }\n};\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _reactRedux = require('react-redux');\n\nvar _bannedPage = require('../components/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _store = require('../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// jshint ignore:line\n\n/* jshint ignore:start */\n// jshint ignore:line\n// jshint ignore:line\nvar select = function select(state) {\n  return state.tick;\n}; // jshint ignore:line\n// jshint ignore:line\n\nvar RedrawedBannedPage = (0, _reactRedux.connect)(select)(_bannedPage2.default);\n/* jshint ignore:end */\n\n},{\"../components/banned-page\":56,\"../index\":135,\"../services/store\":152,\"moment\":\"moment\",\"react\":\"react\",\"react-dom\":\"react-dom\",\"react-redux\":\"react-redux\"}],155:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (list, rowWidth) {\n  var padding = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];\n\n  var rows = [];\n  var row = [];\n\n  list.forEach(function (element) {\n    row.push(element);\n    if (row.length === rowWidth) {\n      rows.push(row);\n      row = [];\n    }\n  });\n\n  // pad row to required length?\n  if (padding !== false && row.length > 0 && row.length < rowWidth) {\n    for (var i = row.length; i < rowWidth; i++) {\n      row.push(padding);\n    }\n  }\n\n  if (row.length) {\n    rows.push(row);\n  }\n\n  return rows;\n};\n\n},{}],156:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (bytes) {\n  if (bytes > 1000 * 1000 * 1000) {\n    return Math.round(bytes * 100 / (1000 * 1000 * 1000)) / 100 + ' GB';\n  } else if (bytes > 1000 * 1000) {\n    return Math.round(bytes * 100 / (1000 * 1000)) / 100 + ' MB';\n  } else if (bytes > 1000) {\n    return Math.round(bytes * 100 / 1000) / 100 + ' KB';\n  } else {\n    return Math.round(bytes * 100) / 100 + ' B';\n  }\n};\n\n},{}],157:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (Component, rootElementId) {\n  var connected = arguments.length <= 2 || arguments[2] === undefined ? true : arguments[2];\n\n  var rootElement = document.getElementById(rootElementId);\n\n  /* jshint ignore:start */\n  var finalComponent = Component.props ? Component : _react2.default.createElement(Component, null);\n  /* jshint ignore:end */\n\n  if (rootElement) {\n    if (connected) {\n      _reactDom2.default.render(\n      /* jshint ignore:start */\n      _react2.default.createElement(\n        _reactRedux.Provider,\n        { store: _store2.default.getStore() },\n        finalComponent\n      ),\n      /* jshint ignore:end */\n      rootElement);\n    } else {\n      /* jshint ignore:start */\n      _reactDom2.default.render(finalComponent, rootElement);\n      /* jshint ignore:end */\n    }\n  }\n};\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _reactRedux = require('react-redux');\n\nvar _store = require('../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n},{\"../services/store\":152,\"react\":\"react\",\"react-dom\":\"react-dom\",\"react-redux\":\"react-redux\"}],158:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar OrderedList = function () {\n  function OrderedList(items) {\n    _classCallCheck(this, OrderedList);\n\n    this.isOrdered = false;\n    this._items = items || [];\n  }\n\n  _createClass(OrderedList, [{\n    key: \"add\",\n    value: function add(key, item, order) {\n      this._items.push({\n        key: key,\n        item: item,\n\n        after: order ? order.after || null : null,\n        before: order ? order.before || null : null\n      });\n    }\n  }, {\n    key: \"get\",\n    value: function get(key, value) {\n      for (var i = 0; i < this._items.length; i++) {\n        if (this._items[i].key === key) {\n          return this._items[i].item;\n        }\n      }\n\n      return value;\n    }\n  }, {\n    key: \"has\",\n    value: function has(key) {\n      return this.get(key) !== undefined;\n    }\n  }, {\n    key: \"values\",\n    value: function values() {\n      var values = [];\n      for (var i = 0; i < this._items.length; i++) {\n        values.push(this._items[i].item);\n      }\n      return values;\n    }\n  }, {\n    key: \"order\",\n    value: function order(values_only) {\n      if (!this.isOrdered) {\n        this._items = this._order(this._items);\n        this.isOrdered = true;\n      }\n\n      if (values_only || typeof values_only === 'undefined') {\n        return this.values();\n      } else {\n        return this._items;\n      }\n    }\n  }, {\n    key: \"orderedValues\",\n    value: function orderedValues() {\n      return this.order(true);\n    }\n  }, {\n    key: \"_order\",\n    value: function _order(unordered) {\n      // Index of unordered items\n      var index = [];\n      unordered.forEach(function (item) {\n        index.push(item.key);\n      });\n\n      // Ordered items\n      var ordered = [];\n      var ordering = [];\n\n      // First pass: register items that\n      // don't specify their order\n      unordered.forEach(function (item) {\n        if (!item.after && !item.before) {\n          ordered.push(item);\n          ordering.push(item.key);\n        }\n      });\n\n      // Second pass: register items that\n      // specify their before to \"_end\"\n      unordered.forEach(function (item) {\n        if (item.before === \"_end\") {\n          ordered.push(item);\n          ordering.push(item.key);\n        }\n      });\n\n      // Third pass: keep iterating items\n      // until we hit iterations limit or finish\n      // ordering list\n      function insertItem(item) {\n        var insertAt = -1;\n        if (ordering.indexOf(item.key) === -1) {\n          if (item.after) {\n            insertAt = ordering.indexOf(item.after);\n            if (insertAt !== -1) {\n              insertAt += 1;\n            }\n          } else if (item.before) {\n            insertAt = ordering.indexOf(item.before);\n          }\n\n          if (insertAt !== -1) {\n            ordered.splice(insertAt, 0, item);\n            ordering.splice(insertAt, 0, item.key);\n          }\n        }\n      }\n\n      var iterations = 200;\n      while (iterations > 0 && index.length !== ordering.length) {\n        iterations -= 1;\n        unordered.forEach(insertItem);\n      }\n\n      return ordered;\n    }\n  }]);\n\n  return OrderedList;\n}();\n\nexports.default = OrderedList;\n\n},{}],159:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.int = int;\nexports.range = range;\nfunction int(min, max) {\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\nfunction range(min, max) {\n  var array = new Array(int(min, max));\n  for (var i = 0; i < array.length; i++) {\n    array[i] = i;\n  }\n\n  return array;\n}\n\n},{}],160:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function () {\n  window.scrollTo(0, 0);\n};\n\n},{}],161:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (options) {\n  var routes = {\n    component: options.component || null,\n    childRoutes: []\n  };\n\n  if (options.root) {\n    routes.childRoutes = [{\n      path: options.root,\n      onEnter: function onEnter(nextState, replaceState) {\n        replaceState(null, options.paths[0].path);\n      }\n    }].concat(options.paths);\n  } else {\n    routes.childRoutes = options.paths;\n  }\n\n  _reactDom2.default.render(_react2.default.createElement(\n    _reactRedux.Provider,\n    { store: _store2.default.getStore() },\n    _react2.default.createElement(_reactRouter.Router, { routes: routes, history: history })\n  ), rootElement);\n};\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _reactRedux = require('react-redux');\n\nvar _reactRouter = require('react-router');\n\nvar _createBrowserHistory = require('history/lib/createBrowserHistory');\n\nvar _createBrowserHistory2 = _interopRequireDefault(_createBrowserHistory);\n\nvar _store = require('../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// jshint ignore:start\n\nvar rootElement = document.getElementById('page-mount');\nvar history = new _createBrowserHistory2.default();\n\n},{\"../services/store\":152,\"history/lib/createBrowserHistory\":44,\"react\":\"react\",\"react-dom\":\"react-dom\",\"react-redux\":\"react-redux\",\"react-router\":\"react-router\"}],162:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.required = required;\nexports.email = email;\nexports.minLength = minLength;\nexports.maxLength = maxLength;\nexports.usernameMinLength = usernameMinLength;\nexports.usernameMaxLength = usernameMaxLength;\nexports.usernameContent = usernameContent;\nexports.passwordMinLength = passwordMinLength;\nvar EMAIL = /^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i;\nvar USERNAME = new RegExp('^[0-9a-z]+$', 'i');\n\nfunction required() {\n  return function (value) {\n    if ($.trim(value).length === 0) {\n      return gettext(\"This field is required.\");\n    }\n  };\n}\n\nfunction email(message) {\n  return function (value) {\n    if (!EMAIL.test(value)) {\n      return message || gettext(\"Enter a valid email address.\");\n    }\n  };\n}\n\nfunction minLength(limitValue, message) {\n  return function (value) {\n    var returnMessage = '';\n    var length = $.trim(value).length;\n\n    if (length < limitValue) {\n      if (message) {\n        returnMessage = message(limitValue, length);\n      } else {\n        returnMessage = ngettext(\"Ensure this value has at least %(limit_value)s character (it has %(show_value)s).\", \"Ensure this value has at least %(limit_value)s characters (it has %(show_value)s).\", limitValue);\n      }\n      return interpolate(returnMessage, {\n        limit_value: limitValue,\n        show_value: length\n      }, true);\n    }\n  };\n}\n\nfunction maxLength(limitValue, message) {\n  return function (value) {\n    var returnMessage = '';\n    var length = $.trim(value).length;\n\n    if (length > limitValue) {\n      if (message) {\n        returnMessage = message(limitValue, length);\n      } else {\n        returnMessage = ngettext(\"Ensure this value has at most %(limit_value)s character (it has %(show_value)s).\", \"Ensure this value has at most %(limit_value)s characters (it has %(show_value)s).\", limitValue);\n      }\n      return interpolate(returnMessage, {\n        limit_value: limitValue,\n        show_value: length\n      }, true);\n    }\n  };\n}\n\nfunction usernameMinLength(settings) {\n  var message = function message(limitValue) {\n    return ngettext(\"Username must be at least %(limit_value)s character long.\", \"Username must be at least %(limit_value)s characters long.\", limitValue);\n  };\n  return this.minLength(settings.username_length_min, message);\n}\n\nfunction usernameMaxLength(settings) {\n  var message = function message(limitValue) {\n    return ngettext(\"Username cannot be longer than %(limit_value)s character.\", \"Username cannot be longer than %(limit_value)s characters.\", limitValue);\n  };\n  return this.maxLength(settings.username_length_max, message);\n}\n\nfunction usernameContent() {\n  return function (value) {\n    if (!USERNAME.test($.trim(value))) {\n      return gettext(\"Username can only contain latin alphabet letters and digits.\");\n    }\n  };\n}\n\nfunction passwordMinLength(settings) {\n  var message = function message(limitValue) {\n    return ngettext(\"Valid password must be at least %(limit_value)s character long.\", \"Valid password must be at least %(limit_value)s characters long.\", limitValue);\n  };\n  return this.minLength(settings.password_length_min, message);\n}\n\n},{}]},{},[2,3,4,5,18,19,20,21,22,23,24,32,33,34,35,6,7,8,9,10,11,12,13,14,15,16,17,25,26,27,28,29,30,31]);\n"],"sourceRoot":"/source/"}
+{"version":3,"sources":["misago.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length",1,"module","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","timeout","setTimeout","len","run","clearTimeout","Item","fun","array","this","noop","process","nextTick","args","Array","arguments","push","prototype","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","binding","name","cwd","chdir","dir","umask",2,"global","_interopRequireDefault","obj","__esModule","default","_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","value","Misago","undefined","_orderedList","_orderedList2","_initializers","_context","initializer","item","after","before","context","_this","initOrder","orderedValues","forEach","fallback","has","misago","self","window","../../../../documents/misago/frontend/src/utils/ordered-list",3,"_ajax2","init","_index2","get","_index","_ajax","addInitializer","../../../../../documents/misago/frontend/src/index","../../../../../documents/misago/frontend/src/services/ajax",4,"_auth2","_store2","_localStorage2","_modal2","_auth","_modal","_store","_localStorage","../../../../../documents/misago/frontend/src/services/auth","../../../../../documents/misago/frontend/src/services/local-storage","../../../../../documents/misago/frontend/src/services/modal","../../../../../documents/misago/frontend/src/services/store",5,"_captcha2","_include2","_snackbar2","_captcha","_include","_snackbar","../../../../../documents/misago/frontend/src/services/captcha","../../../../../documents/misago/frontend/src/services/include","../../../../../documents/misago/frontend/src/services/snackbar",6,"_mountComponent2","_reactRedux","connect","_authMessage","select","_authMessage2","_mountComponent","../../../../../../documents/misago/frontend/src/components/auth-message","../../../../../../documents/misago/frontend/src/index","../../../../../../documents/misago/frontend/src/utils/mount-component","react-redux",7,"_bannedPage2","_bannedPage","../../../../../../documents/misago/frontend/src/utils/banned-page",8,"document","getElementById","_root","_root2","../../../../../../documents/misago/frontend/src/components/categories/root",9,"_routedComponent2","root","component","paths","_routedComponent","../../../../../../documents/misago/frontend/src/components/options/root","../../../../../../documents/misago/frontend/src/utils/routed-component",10,"absolute_url","../../../../../../documents/misago/frontend/src/components/profile/root",11,"_requestActivationLink2","_requestActivationLink","../../../../../../documents/misago/frontend/src/components/request-activation-link",12,"_requestPasswordReset2","_requestPasswordReset","../../../../../../documents/misago/frontend/src/components/request-password-reset",13,"_resetPasswordForm2","_resetPasswordForm","../../../../../../documents/misago/frontend/src/components/reset-password-form",14,"Snackbar","../../../../../../documents/misago/frontend/src/components/snackbar",15,"../../../../../../documents/misago/frontend/src/components/threads/root",16,"UserMenu","CompactUserMenu","../../../../../../documents/misago/frontend/src/components/user-menu/root",17,"../../../../../../documents/misago/frontend/src/components/users/root",18,19,20,"element","_mobileNavbarDropdown2","_mobileNavbarDropdown","../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown",21,22,"_moment2","locale","$","attr","_moment","moment",23,"_pageTitle2","forum_index_title","forum_name","_pageTitle","../../../../../documents/misago/frontend/src/services/page-title",24,"_polls2","_polls","../../../../../documents/misago/frontend/src/services/polls",25,"addReducer","assign","isAuthenticated","isAnonymous","user","initialState","../../../../../../documents/misago/frontend/src/reducers/auth","../../../../../../documents/misago/frontend/src/services/store",26,"dispatch","_profile","dehydrate","../../../../../../documents/misago/frontend/src/reducers/profile",27,"_profile2",28,"../../../../../../documents/misago/frontend/src/reducers/snackbar",29,"_tick2","_tick","../../../../../../documents/misago/frontend/src/reducers/tick",30,"_usernameHistory2","_usernameHistory","../../../../../../documents/misago/frontend/src/reducers/username-history",31,"_users2","_users","../../../../../../documents/misago/frontend/src/reducers/users",32,33,34,"setInterval","doTick","TICK_PERIOD","../../../../../documents/misago/frontend/src/reducers/tick",35,"_zxcvbn2","_zxcvbn","../../../../../documents/misago/frontend/src/services/zxcvbn",36,"isUndefinedOrNull","isBuffer","x","copy","slice","objEquiv","b","opts","isArguments","pSlice","deepEqual","ka","objectKeys","kb","sort","actual","expected","Date","getTime","strict","./lib/is_arguments.js","./lib/keys.js",37,"supported","object","toString","unsupported","hasOwnProperty","propertyIsEnumerable","supportsArgumentsClass",38,"shim","keys",39,"PUSH","REPLACE","POP",40,"loopAsync","turns","work","callback","done","isDone","next","currentTurn",41,"createKey","KeyPrefix","saveState","state","sessionStorage","setItem","JSON","stringify","error","SecurityError","NODE_ENV","_warning2","QuotaExceededError","readState","json","getItem","parse","_warning","_process","warning",42,"addEventListener","node","event","listener","attachEvent","removeEventListener","detachEvent","getHashPath","location","href","split","replaceHashPath","path","replace","pathname","search","getWindowPath","hash","go","history","getUserConfirmation","message","confirm","supportsHistory","ua","navigator","userAgent","indexOf","supportsGoWithoutReloadUsingHash",43,"canUseDOM","createElement",44,"createBrowserHistory","getCurrentLocation","historyState","_DOMUtils","_historyState","_DOMStateStorage","isSupported","replaceState","_extends","_parsePath2","createLocation","startPopStateListener","_ref","popStateListener","transitionTo","finishTransition","basename","action","_Actions","useRefresh","pushState","listenBefore","listenerCount","stopPopStateListener","unlisten","listen","registerTransitionHook","hook","unregisterTransitionHook","options","_ExecutionEnvironment","_invariant2","forceRefresh","_createDOMHistory2","source","_invariant","_createDOMHistory","_parsePath","./Actions","./DOMStateStorage","./DOMUtils","./ExecutionEnvironment","./createDOMHistory","./parsePath","invariant",45,"createDOMHistory","_createHistory2","_createHistory","./createHistory",46,"createRandomKey","Math","random","substr","locationsAreEqual","_deepEqual2","createHistory","transitionHooks","filter","getCurrent","pendingLocation","allKeys","updateLocation","newLocation","current","changeListeners","_location","confirmTransitionTo","_AsyncUtils","index","_runTransitionHook2","result","ok","nextLocation","prevPath","createPath","nextPath","prevIndex","nextIndex","goBack","goForward","keyLength","createHref","_createLocation3","setState","updateLocationState","DefaultKeyLength","_deprecate2","_deepEqual","_createLocation2","_runTransitionHook","_deprecate","./AsyncUtils","./createLocation","./deprecate","./runTransitionHook","deep-equal",47,"_fourthArg",48,"deprecate","fn",49,"extractPath","string","match","substring",50,"parsePath","_extractPath2","hashIndex","searchIndex","_extractPath","./extractPath",51,"runTransitionHook",52,"condition","format","c","d","argIndex","framesToPop",53,54,"_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","create","constructor","setPrototypeOf","__proto__","auth","signedIn","signedOut","_react","_react2","_class","_React$Component","getPrototypeOf","reload","interpolate","gettext","username","className","getClassName","getMessage","type","onClick","refresh","Component","react",55,"BASE_URL","size","url","id","avatar_hash","src","getSrc",56,"html","dangerouslySetInnerHTML","__html","plain","expires","isAfter","expires_on","fromNow","getReasonMessage","getExpirationMessage",57,"_loader","_loader2","Button","disabled","loading","children","defaultProps","./loader",58,"_lastActivity","_lastActivity2","_readIcon","_readIcon2","_stats","_stats2","category","css_class","subcategories","description","_this2","map","getSubcategorySubcategoryClass","_this3","getSubcategoryClass","getSubcategoryDescription","getSubcategorySubcategories","getHeadingClassName","getCategoryDescription","getSubcategories","./last-activity","./read-icon","./stats",59,"last_poster_url","last_poster_name","last_thread_url","last_thread_title","getLastPoster","last_post_on","acl","can_browse","can_see_all_threads","getThreadDetails","getLastActivity",60,"is_read","is_closed","getTitle","getIcon",61,"store","tick","_category","_category2","update","data","categories","startPolling","api","start","poll","frequency","../../index","../../services/polls","./category",62,"ngettext","threads","posts","getThreadsCount","getPostsCount",63,"_avatar","_button","_button2","cropAvatar","isLoading","avatarType","upload","cropit","post","api_url","avatar","crop","offset","zoom","then","onComplete","success","detail","rejection","status","showError","crop_tmp","crop_org","secret","getAvatarSecret","getAvatarHash","join","width","getAvatarSize","height","imageState","getImagePath","onImageLoaded","zoomLevel","imageSize","displayedWidth","offsetX","y","displayedHeight","offsetY","showIndex","../../services/ajax","../../services/snackbar","../avatar","../button",64,"Gallery","GalleryItem","_batch","_batch2","_Object$getPrototypeO","_temp","_ret","_len","_key","image","selection","_React$Component2","images","row","_React$Component3","_this4","save","response","_this5","galleries","../../utils/batch",65,"_avatar2","setGravatar","callApi","setGenerated","gravatar","showCrop","showUpload","showGallery","userPeview","getAvatarPreview","getGravatarButton","getCropButton","getUploadButton","getGalleryButton","../loader",66,"ChangeAvatarError","_crop","_crop2","_upload","_upload2","_gallery","_gallery2","_modalLoader","_modalLoader2","reason","getErrorReason","completeFlow","avatarHash","updateAvatar","role","data-dismiss","aria-label","aria-hidden","getBody","../../reducers/users","../../services/store","../modal-loader","./crop","./gallery","./index","./upload",67,"_fileSize","_fileSize2","pickFile","click","uploadFile","files","validationError","validateFile","preview","URL","createObjectURL","progress","FormData","append","uploaded","info","limit","filesize","invalidTypeMsg","allowed_mime_types","extensionFound","loweredFilename","toLowerCase","allowed_extensions","extension","extensions","getUploadRequirements","aria-valuenow","aria-valuemin","aria-valuemax","style","getUploadProgressLabel","onChange","getUploadProgress","renderCrop","renderUpload","../../utils/file-size",68,"dropdown","toggleNav","aria-haspopup","aria-expanded",69,"validation","isValidated","helpText","labelClass","htmlFor","label","controlClass","getFeedbackIcon","getFeedbackDescription","getFeedback","getHelpText","extra",70,"_defineProperty","_validators","validateRequired","required","bindInput","newState","formErrors","errors","validateField","handleSubmit","preventDefault","clean","promise","send","handleSuccess","handleError","validators","optional","validatedFields","fieldErrors","validate","field","requiredError","apiError","../services/snackbar","../utils/validators",71,"isControlled","isActive","activeClassName",72,73,74,"_panelMessage","_panelMessage2","_PanelMessage","icon","./panel-message",75,"_panelLoader","_panelLoader2","../../panel-loader",76,"next_on","next_change","../../panel-message",77,"_interopRequireWildcard","newObj","_form","_form2","_formGroup","_formGroup2","_Form","usernameContent","usernameMinLength","username_length_min","length_min","usernameMaxLength","username_length_max","length_max","phrases","changes_left","name_changes_expire","trim","complete","slug","onSubmit","for","../../../services/ajax","../../../services/snackbar","../../../utils/validators","../../button","../../form","../../form-group",78,"_formLoading","_formLoading2","_formLocked","_formLocked2","_usernameHistory3","addNameChange","updateUsername","isLoaded","set","parent","Promise","all","results","getChangeForm","changes","../../../index","../../../reducers/username-history","../../../reducers/users","../../../services/page-title","../../../services/store","../../username-history","./form","./form-loading","./form-locked",79,"_select","_select2","_yesNoSwitch","_yesNoSwitch2","is_hiding_presence","limits_private_thread_invites_to","subscribe_to_started_threads","subscribe_to_replied_threads","privateThreadInvitesChoices","subscribeToChoices","patchUser","iconOn","iconOff","labelOn","labelOff","choices","../../reducers/auth","../../services/page-title","../form","../form-group","../select","../yes-no-switch",80,"CompactNav","SideNav","_reactRouter","_li","_li2","option","Link","to","baseUrl","hideNav","../li","react-router",81,"username-history","_forumOptions2","_root4","_dropdownToggle","_dropdownToggle2","_navs","_forumOptions","_root3","_withDropdown","_withDropdown2","_WithDropdown","getCompactNavClassName","../dropdown-toggle","../with-dropdown","./change-username/root","./forum-options","./navs","./sign-in-credentials/root",82,"new_email","password","email","lengths","change_email","display",83,"new_password","repeat_password","passwordMinLength","change_password",84,"_changeEmail","_changeEmail2","_changePassword","_changePassword2","./change-email","./change-password",85,86,87,"LABELS","STYLES","_score","_password","_inputs","inputs","cacheStale","scorePassword","score","getScore","../services/zxcvbn",88,"_followButton","_followButton2","_nav","_nav2","_userStatus","_userStatus2","profile","StatusIcon","StatusLabel","rank","is_tab","joined_on","age","can_follow","can_moderate","data-toggle","getFollowButton","getModerationButton","getUserStatus","getUserRank","getUserTitle","getJoinedOn","getEmail","../user-status","./follow-button","./moderation/nav",89,"ban","initWithPreloadedData","pop","initWithoutPreloadedData","stop","user_message","staff_message","_title","getUserMessage","getStaffMessage","getPanelBody","../panel-loader","../panel-message",90,"is_followed","patchProfile","followers","follow","getLabel","../../reducers/profile",91,"_search","_search2","loadMore","isBusy","loadUsers","page","ev","count","more","pages","setSpecialProps","PRELOADED_DATA_KEY","TITLE","API_FILTER","_ajax$get","users","getEmptyMessage","showRank","cols","getMoreButton","placeholder","getListBody","../search","../users-list/root",92,"_followers","_followers2","_Followers","./followers",93,"_modalMessage","_modalMessage2","is_avatar_locked","avatar_lock_user_message","avatar_lock_staff_message","moderate_avatar","isValid","apiResponse","rows","getFormBody","getModalBody","../../modal-loader","../../modal-message","../../yes-no-switch",94,"moderate_username",95,"countdown","isDeleted","with_content","getButtonLabel","getDeletedBody","getForm","../../../services/polls",96,"_avatarControls","_avatarControls2","_changeUsername","_changeUsername2","_deleteAccount","_deleteAccount2","showAvatarDialog","show","showRenameDialog","showDeleteDialog","can_moderate_avatar","can_rename","can_delete","getAvatarButton","getRenameButton","getDeleteButton","../../../services/modal","./avatar-controls","./change-username","./delete-account",97,"meta","getMeta","_SideNav","toggleModeration","showSpecialOptions","getSpecialOptions",98,"COMPONENTS","_banDetails","_banDetails2","_follows","_follows2","_Header","_Header2","baseClass","getNavDropdown","Placeholder","route","follows","ban-details","./Header","./ban-details","./follows","./username-history",99,"loadChanges","emptyMessage","../../reducers/username-history","../username-history",100,"_register","_register2","showRegisterModal","account_activation","load","../services/captcha","../services/modal","./register.js",101,"RegisterComplete","RegisterForm","_passwordStrength","_passwordStrength2","captcha","validator","hide","aria-describedby","form","getLegalFootNote","activation","getLead","getSubscript","completeRegistration","signIn","../index","../services/ajax","../services/auth","../utils/banned-page","./button","./form-group","./password-strength",102,"LinkSent","RequestLinkForm","reset",103,"AccountInactivePage","RequestResetForm","_reactDom","_reactDom2","showInactivePage","getActivateButton","render","react-dom",104,"PasswordChangedPage","ResetPasswordForm","_signIn","_signIn2","showSignIn","softSignOut","remove","./sign-in.js",105,106,"change","choice","getChoice",107,"showActivation","find","val","getCsrfToken","submit","getActivationButton",108,"snackbar","TYPES_CLASSES","snackbarClass","isVisible","getSnackbarClass",109,110,"TabsNav","navLinks","active","lists","list","longName",111,"getLists","_route2","_route","./route",112,"_titleUtils","getPageTitle","getHeaderClassName","getGoBackButton","getCompactNavToggle","getTabsNav","getCompactNav","../threads-list/root","./title-utils",113,"special_role",114,"CompactGuestNav","GuestNav","GuestMenu","_registerButton","_registerButton2","showSignInModal","_GuestMenu","showGuestMenu","../../services/mobile-navbar-dropdown","../../services/modal","../register-button","../sign-in.js",115,"_guestNav","_userNav","UserNav","CompactUserNav","./guest-nav","./user-nav",116,"selectUserMenu","decision","changeAvatar","logout","showConnected","showUserMenu","../change-avatar/root",117,"is_banned","is_hidden","is_online_hidden","is_offline_hidden","is_online","is_offline","getClass","banned_until","ban_expires","last_click","getHelp",118,"_random","changed_by","changed_by_username","renderUserAvatar","renderUsername","old_username","new_username","changed_on","range","renderHistory","renderEmptyHistory","renderHistoryPreview","../utils/random","./avatar",119,"_userCard","_userCard2","_userPreview","_userPreview2","Pager","getColClassName","showStatus","./user-card","./user-preview",120,"getRankName","getUserJoinedOn","getFollowersCount",121,"../../utils/random",122,"days","trackedPeriod",123,"rankUrl","counter","../../avatar","../../user-status",124,"../../../utils/random",125,"_listItem","_listItem2","posters","getLeadMessage","./list-item",126,"_listEmpty","_listEmpty2","_listLoading","_listLoading2","_list","_list2","tracked_period","./list","./list-empty","./list-loading",127,"listUrl",128,"../../users-list/root",129,"_pager","_pager2","getPager","./pager",130,"_resetScroll","_resetScroll2","previous","first","page_range","getPreviousPage","getNextPage","getProgessBar","../../../utils/reset-scroll",131,"params","nextProps","getRankDescription","getComponent",132,"./active-posters/root","./rank/root",133,134,"toggle",135,"./utils/ordered-list",136,"patch","PATCH_USER","SIGN_IN","signOut","soft","SIGN_OUT","UPDATE_AVATAR","userId","_newState","UPDATE_USERNAME","_newState2","./users",137,"DEHYDRATE_PROFILE","PATCH_PROFILE","dehydrateStatus",138,"showSnackbar","SHOW_SNACKBAR","messageType","hideSnackbar","HIDE_SNACKBAR",139,"TICK",140,"changedBy","ADD_NAME_CHANGE","items","APPEND_HISTORY","DEHYDRATE_HISTORY","unshift","floor","now",141,"APPEND_USERS","DEHYDRATE_USERS",142,"_typeof","Symbol","iterator","Ajax","_cookieName","_csrfToken","_locks","cookieName","cookie","cookieRegex","RegExp","method","resolve","reject","xhr","headers","X-CSRFToken","contentType","dataType","jqXHR","responseJSON","statusText","ajax","lock","param","request","waiter","v","wait","processData","XMLHttpRequest","evt","lengthComputable","round","loaded","total",143,"Auth","local","modal","_local","syncSession","watchState","getState","watch","../reducers/auth",144,"Captcha","ReCaptcha","ReCaptchaComponent","QACaptcha","NoCaptcha","BaseCaptcha","include","_BaseCaptcha","_BaseCaptcha2","question","help_text","kwargs","grecaptcha","sitekey","siteKey","_BaseCaptcha3","recaptcha_site_key","captcha_type","../components/form-group",145,"Include","staticUrl","_staticUrl","_included","script","remote","cache",146,"storage","localStorage","LocalStorage","prefix","_prefix","_watchers","newValueJson","newValue","watcher","oldValue","itemString",147,"MobileNavbarDropdown","_element","_component","addClass","removeClass","../utils/mount-component",148,"Modal","unmountComponentAtNode",149,"PageTitle","indexTitle","forumName","_indexTitle","_forumName","finalTitle","pageLabel",150,"Polls","poolServer","_stopped","pollId",151,"HIDE_ANIMATION_LENGTH","MESSAGE_SHOW_LENGTH","_timeout","alert","../reducers/snackbar",152,"StoreWrapper","_redux","_reducers","_initialState","reducer","createStore","combineReducers","redux",153,"Zxcvbn","zxcvbn","_loadingPromise","_loadedPromise",154,"changeState","Provider","getStore","RedrawedBannedPage","../components/banned-page","../services/store",155,"rowWidth","padding",156,"bytes",157,"rootElementId","connected","rootElement","finalComponent",158,"OrderedList","isOrdered","_items","order","values","values_only","_order","unordered","insertItem","insertAt","ordering","ordered","splice","iterations",159,"int","min","max",160,"scrollTo",161,"routes","childRoutes","onEnter","nextState","Router","_createBrowserHistory","_createBrowserHistory2","history/lib/createBrowserHistory",162,"EMAIL","test","minLength","limitValue","returnMessage","limit_value","show_value","maxLength","settings","USERNAME","password_length_min"],"mappings":"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","file":"misago.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n// shim for using process in browser\n\nvar process = module.exports = {};\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = setTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    clearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        setTimeout(drainQueue, 0);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],2:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Misago = undefined;\n\nvar _orderedList = require('../../../../documents/misago/frontend/src/utils/ordered-list');\n\nvar _orderedList2 = _interopRequireDefault(_orderedList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Misago = exports.Misago = function () {\n  function Misago() {\n    _classCallCheck(this, Misago);\n\n    this._initializers = [];\n    this._context = {};\n  }\n\n  _createClass(Misago, [{\n    key: 'addInitializer',\n    value: function addInitializer(initializer) {\n      this._initializers.push({\n        key: initializer.name,\n\n        item: initializer.initializer,\n\n        after: initializer.after,\n        before: initializer.before\n      });\n    }\n  }, {\n    key: 'init',\n    value: function init(context) {\n      var _this = this;\n\n      this._context = context;\n\n      var initOrder = new _orderedList2.default(this._initializers).orderedValues();\n      initOrder.forEach(function (initializer) {\n        initializer(_this);\n      });\n    }\n\n    // context accessors\n\n  }, {\n    key: 'has',\n    value: function has(key) {\n      return !!this._context[key];\n    }\n  }, {\n    key: 'get',\n    value: function get(key, fallback) {\n      if (this.has(key)) {\n        return this._context[key];\n      } else {\n        return fallback || undefined;\n      }\n    }\n  }, {\n    key: 'pop',\n    value: function pop(key) {\n      if (this.has(key)) {\n        var value = this._context[key];\n        this._context[key] = null;\n        return value;\n      } else {\n        return undefined;\n      }\n    }\n  }]);\n\n  return Misago;\n}();\n\n// create  singleton\n\nvar misago = new Misago();\n\n// expose it globally\nglobal.misago = misago;\n\n// and export it for tests and stuff\nexports.default = misago;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"../../../../documents/misago/frontend/src/utils/ordered-list\":158}],3:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../../../../documents/misago/frontend/src/services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _ajax2.default.init(_index2.default.get('CSRF_COOKIE_NAME'));\n}\n\n_index2.default.addInitializer({\n  name: 'ajax',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":135,\"../../../../../documents/misago/frontend/src/services/ajax\":142}],4:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _auth = require('../../../../../documents/misago/frontend/src/services/auth');\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _modal = require('../../../../../documents/misago/frontend/src/services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _localStorage = require('../../../../../documents/misago/frontend/src/services/local-storage');\n\nvar _localStorage2 = _interopRequireDefault(_localStorage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _auth2.default.init(_store2.default, _localStorage2.default, _modal2.default);\n}\n\n_index2.default.addInitializer({\n  name: 'auth',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":135,\"../../../../../documents/misago/frontend/src/services/auth\":143,\"../../../../../documents/misago/frontend/src/services/local-storage\":146,\"../../../../../documents/misago/frontend/src/services/modal\":148,\"../../../../../documents/misago/frontend/src/services/store\":152}],5:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../../../../documents/misago/frontend/src/services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _captcha = require('../../../../../documents/misago/frontend/src/services/captcha');\n\nvar _captcha2 = _interopRequireDefault(_captcha);\n\nvar _include = require('../../../../../documents/misago/frontend/src/services/include');\n\nvar _include2 = _interopRequireDefault(_include);\n\nvar _snackbar = require('../../../../../documents/misago/frontend/src/services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  _captcha2.default.init(context, _ajax2.default, _include2.default, _snackbar2.default);\n}\n\n_index2.default.addInitializer({\n  name: 'captcha',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":135,\"../../../../../documents/misago/frontend/src/services/ajax\":142,\"../../../../../documents/misago/frontend/src/services/captcha\":144,\"../../../../../documents/misago/frontend/src/services/include\":145,\"../../../../../documents/misago/frontend/src/services/snackbar\":151}],6:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _reactRedux = require('react-redux');\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _authMessage = require('../../../../../../documents/misago/frontend/src/components/auth-message');\n\nvar _authMessage2 = _interopRequireDefault(_authMessage);\n\nvar _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  (0, _mountComponent2.default)((0, _reactRedux.connect)(_authMessage.select)(_authMessage2.default), 'auth-message-mount');\n}\n\n_index2.default.addInitializer({\n  name: 'component:auth-message',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/components/auth-message\":54,\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/utils/mount-component\":157,\"react-redux\":\"react-redux\"}],7:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _bannedPage = require('../../../../../../documents/misago/frontend/src/utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  if (context.has('BAN_MESSAGE')) {\n    (0, _bannedPage2.default)(context.get('BAN_MESSAGE'), false);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:baned-page',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/utils/banned-page\":154}],8:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _reactRedux = require('react-redux');\n\nvar _root = require('../../../../../../documents/misago/frontend/src/components/categories/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  if (document.getElementById('categories-mount')) {\n    (0, _mountComponent2.default)((0, _reactRedux.connect)(_root.select)(_root2.default), 'categories-mount');\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:reset-password-form',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/components/categories/root\":61,\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/utils/mount-component\":157,\"react-redux\":\"react-redux\"}],9:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _root = require('../../../../../../documents/misago/frontend/src/components/options/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _routedComponent = require('../../../../../../documents/misago/frontend/src/utils/routed-component');\n\nvar _routedComponent2 = _interopRequireDefault(_routedComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  if (context.has('USER_OPTIONS')) {\n    (0, _routedComponent2.default)({\n      root: _index2.default.get('USERCP_URL'),\n      component: _root2.default,\n      paths: (0, _root.paths)()\n    });\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:options',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/components/options/root\":81,\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/utils/routed-component\":161}],10:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _reactRedux = require('react-redux');\n\nvar _root = require('../../../../../../documents/misago/frontend/src/components/profile/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _routedComponent = require('../../../../../../documents/misago/frontend/src/utils/routed-component');\n\nvar _routedComponent2 = _interopRequireDefault(_routedComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  if (context.has('PROFILE') && context.has('PROFILE_PAGES')) {\n    (0, _routedComponent2.default)({\n      root: _index2.default.get('PROFILE').absolute_url,\n      component: (0, _reactRedux.connect)(_root.select)(_root2.default),\n      paths: (0, _root.paths)()\n    });\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:profile',\n  initializer: initializer,\n  after: 'reducer:profile-dehydrate'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/components/profile/root\":98,\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/utils/routed-component\":161,\"react-redux\":\"react-redux\"}],11:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _requestActivationLink = require('../../../../../../documents/misago/frontend/src/components/request-activation-link');\n\nvar _requestActivationLink2 = _interopRequireDefault(_requestActivationLink);\n\nvar _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  if (document.getElementById('request-activation-link-mount')) {\n    (0, _mountComponent2.default)(_requestActivationLink2.default, 'request-activation-link-mount', false);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:request-activation-link',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/components/request-activation-link\":102,\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/utils/mount-component\":157}],12:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _requestPasswordReset = require('../../../../../../documents/misago/frontend/src/components/request-password-reset');\n\nvar _requestPasswordReset2 = _interopRequireDefault(_requestPasswordReset);\n\nvar _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  if (document.getElementById('request-password-reset-mount')) {\n    (0, _mountComponent2.default)(_requestPasswordReset2.default, 'request-password-reset-mount', false);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:request-password-reset',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/components/request-password-reset\":103,\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/utils/mount-component\":157}],13:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _resetPasswordForm = require('../../../../../../documents/misago/frontend/src/components/reset-password-form');\n\nvar _resetPasswordForm2 = _interopRequireDefault(_resetPasswordForm);\n\nvar _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  if (document.getElementById('reset-password-form-mount')) {\n    (0, _mountComponent2.default)(_resetPasswordForm2.default, 'reset-password-form-mount', false);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:reset-password-form',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/components/reset-password-form\":104,\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/utils/mount-component\":157}],14:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _reactRedux = require('react-redux');\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _snackbar = require('../../../../../../documents/misago/frontend/src/components/snackbar');\n\nvar _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  (0, _mountComponent2.default)((0, _reactRedux.connect)(_snackbar.select)(_snackbar.Snackbar), 'snackbar-mount');\n}\n\n_index2.default.addInitializer({\n  name: 'component:snackbar',\n  initializer: initializer,\n  after: 'snackbar'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/components/snackbar\":108,\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/utils/mount-component\":157,\"react-redux\":\"react-redux\"}],15:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _root = require('../../../../../../documents/misago/frontend/src/components/threads/root');\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _routedComponent = require('../../../../../../documents/misago/frontend/src/utils/routed-component');\n\nvar _routedComponent2 = _interopRequireDefault(_routedComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  if (context.has('THREADS') && context.has('CATEGORIES')) {\n    (0, _routedComponent2.default)({\n      paths: (0, _root.paths)()\n    });\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:threads',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/components/threads/root\":111,\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/utils/routed-component\":161}],16:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _reactRedux = require('react-redux');\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _root = require('../../../../../../documents/misago/frontend/src/components/user-menu/root');\n\nvar _mountComponent = require('../../../../../../documents/misago/frontend/src/utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  (0, _mountComponent2.default)((0, _reactRedux.connect)(_root.select)(_root.UserMenu), 'user-menu-mount');\n  (0, _mountComponent2.default)((0, _reactRedux.connect)(_root.select)(_root.CompactUserMenu), 'user-menu-compact-mount');\n}\n\n_index2.default.addInitializer({\n  name: 'component:user-menu',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/components/user-menu/root\":115,\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/utils/mount-component\":157,\"react-redux\":\"react-redux\"}],17:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _root = require('../../../../../../documents/misago/frontend/src/components/users/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _routedComponent = require('../../../../../../documents/misago/frontend/src/utils/routed-component');\n\nvar _routedComponent2 = _interopRequireDefault(_routedComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  if (context.has('USERS_LISTS')) {\n    (0, _routedComponent2.default)({\n      root: _index2.default.get('USERS_LIST_URL'),\n      component: _root2.default,\n      paths: (0, _root.paths)()\n    });\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'component:users',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/components/users/root\":132,\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/utils/routed-component\":161}],18:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _include = require('../../../../../documents/misago/frontend/src/services/include');\n\nvar _include2 = _interopRequireDefault(_include);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  _include2.default.init(context.get('STATIC_URL'));\n}\n\n_index2.default.addInitializer({\n  name: 'include',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":135,\"../../../../../documents/misago/frontend/src/services/include\":145}],19:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _localStorage = require('../../../../../documents/misago/frontend/src/services/local-storage');\n\nvar _localStorage2 = _interopRequireDefault(_localStorage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _localStorage2.default.init('misago_');\n}\n\n_index2.default.addInitializer({\n  name: 'local-storage',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":135,\"../../../../../documents/misago/frontend/src/services/local-storage\":146}],20:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _mobileNavbarDropdown = require('../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown');\n\nvar _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  var element = document.getElementById('mobile-navbar-dropdown-mount');\n  if (element) {\n    _mobileNavbarDropdown2.default.init(element);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'dropdown',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":135,\"../../../../../documents/misago/frontend/src/services/mobile-navbar-dropdown\":147}],21:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _modal = require('../../../../../documents/misago/frontend/src/services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  var element = document.getElementById('modal-mount');\n  if (element) {\n    _modal2.default.init(element);\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'modal',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":135,\"../../../../../documents/misago/frontend/src/services/modal\":148}],22:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _moment2.default.locale($('html').attr('lang'));\n}\n\n_index2.default.addInitializer({\n  name: 'moment',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":135,\"moment\":\"moment\"}],23:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _pageTitle = require('../../../../../documents/misago/frontend/src/services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  _pageTitle2.default.init(context.get('SETTINGS').forum_index_title, context.get('SETTINGS').forum_name);\n}\n\n_index2.default.addInitializer({\n  name: 'page-title',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":135,\"../../../../../documents/misago/frontend/src/services/page-title\":149}],24:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../../../../documents/misago/frontend/src/services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../../../../documents/misago/frontend/src/services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _polls = require('../../../../../documents/misago/frontend/src/services/polls');\n\nvar _polls2 = _interopRequireDefault(_polls);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _polls2.default.init(_ajax2.default, _snackbar2.default);\n}\n\n_index2.default.addInitializer({\n  name: 'polls',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":135,\"../../../../../documents/misago/frontend/src/services/ajax\":142,\"../../../../../documents/misago/frontend/src/services/polls\":150,\"../../../../../documents/misago/frontend/src/services/snackbar\":151}],25:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _auth = require('../../../../../../documents/misago/frontend/src/reducers/auth');\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _store = require('../../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer(context) {\n  _store2.default.addReducer('auth', _auth2.default, Object.assign({\n    'isAuthenticated': context.get('isAuthenticated'),\n    'isAnonymous': !context.get('isAuthenticated'),\n\n    'user': context.get('user')\n  }, _auth.initialState));\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:auth',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/reducers/auth\":136,\"../../../../../../documents/misago/frontend/src/services/store\":152}],26:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _profile = require('../../../../../../documents/misago/frontend/src/reducers/profile');\n\nvar _store = require('../../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  if (_index2.default.has('PROFILE')) {\n    _store2.default.dispatch((0, _profile.dehydrate)(_index2.default.get('PROFILE')));\n  }\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:profile-dehydrate',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/reducers/profile\":137,\"../../../../../../documents/misago/frontend/src/services/store\":152}],27:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _profile = require('../../../../../../documents/misago/frontend/src/reducers/profile');\n\nvar _profile2 = _interopRequireDefault(_profile);\n\nvar _store = require('../../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.addReducer('profile', _profile2.default, {});\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:profile',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/reducers/profile\":137,\"../../../../../../documents/misago/frontend/src/services/store\":152}],28:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _snackbar = require('../../../../../../documents/misago/frontend/src/reducers/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.addReducer('snackbar', _snackbar2.default, _snackbar.initialState);\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:snackbar',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/reducers/snackbar\":138,\"../../../../../../documents/misago/frontend/src/services/store\":152}],29:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _tick = require('../../../../../../documents/misago/frontend/src/reducers/tick');\n\nvar _tick2 = _interopRequireDefault(_tick);\n\nvar _store = require('../../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.addReducer('tick', _tick2.default, _tick.initialState);\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:tick',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/reducers/tick\":139,\"../../../../../../documents/misago/frontend/src/services/store\":152}],30:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _usernameHistory = require('../../../../../../documents/misago/frontend/src/reducers/username-history');\n\nvar _usernameHistory2 = _interopRequireDefault(_usernameHistory);\n\nvar _store = require('../../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.addReducer('username-history', _usernameHistory2.default, []);\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:username-history',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/reducers/username-history\":140,\"../../../../../../documents/misago/frontend/src/services/store\":152}],31:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _users = require('../../../../../../documents/misago/frontend/src/reducers/users');\n\nvar _users2 = _interopRequireDefault(_users);\n\nvar _store = require('../../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.addReducer('users', _users2.default, []);\n}\n\n_index2.default.addInitializer({\n  name: 'reducer:users',\n  initializer: initializer,\n  before: 'store'\n});\n\n},{\"../../../../../../documents/misago/frontend/src/index\":135,\"../../../../../../documents/misago/frontend/src/reducers/users\":141,\"../../../../../../documents/misago/frontend/src/services/store\":152}],32:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _snackbar = require('../../../../../documents/misago/frontend/src/services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _snackbar2.default.init(_store2.default);\n}\n\n_index2.default.addInitializer({\n  name: 'snackbar',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":135,\"../../../../../documents/misago/frontend/src/services/snackbar\":151,\"../../../../../documents/misago/frontend/src/services/store\":152}],33:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _store2.default.init();\n}\n\n_index2.default.addInitializer({\n  name: 'store',\n  initializer: initializer,\n  before: '_end'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":135,\"../../../../../documents/misago/frontend/src/services/store\":152}],34:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _tick = require('../../../../../documents/misago/frontend/src/reducers/tick');\n\nvar _store = require('../../../../../documents/misago/frontend/src/services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar TICK_PERIOD = 50 * 1000; //do the tick every 50s\n\nfunction initializer() {\n  window.setInterval(function () {\n    _store2.default.dispatch((0, _tick.doTick)());\n  }, TICK_PERIOD);\n}\n\n_index2.default.addInitializer({\n  name: 'tick-start',\n  initializer: initializer,\n  after: 'store'\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":135,\"../../../../../documents/misago/frontend/src/reducers/tick\":139,\"../../../../../documents/misago/frontend/src/services/store\":152}],35:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = initializer;\n\nvar _index = require('../../../../../documents/misago/frontend/src/index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _include = require('../../../../../documents/misago/frontend/src/services/include');\n\nvar _include2 = _interopRequireDefault(_include);\n\nvar _zxcvbn = require('../../../../../documents/misago/frontend/src/services/zxcvbn');\n\nvar _zxcvbn2 = _interopRequireDefault(_zxcvbn);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction initializer() {\n  _zxcvbn2.default.init(_include2.default);\n}\n\n_index2.default.addInitializer({\n  name: 'zxcvbn',\n  initializer: initializer\n});\n\n},{\"../../../../../documents/misago/frontend/src/index\":135,\"../../../../../documents/misago/frontend/src/services/include\":145,\"../../../../../documents/misago/frontend/src/services/zxcvbn\":153}],36:[function(require,module,exports){\nvar pSlice = Array.prototype.slice;\nvar objectKeys = require('./lib/keys.js');\nvar isArguments = require('./lib/is_arguments.js');\n\nvar deepEqual = module.exports = function (actual, expected, opts) {\n  if (!opts) opts = {};\n  // 7.1. All identical values are equivalent, as determined by ===.\n  if (actual === expected) {\n    return true;\n\n  } else if (actual instanceof Date && expected instanceof Date) {\n    return actual.getTime() === expected.getTime();\n\n  // 7.3. Other pairs that do not both pass typeof value == 'object',\n  // equivalence is determined by ==.\n  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n    return opts.strict ? actual === expected : actual == expected;\n\n  // 7.4. For all other Object pairs, including Array objects, equivalence is\n  // determined by having the same number of owned properties (as verified\n  // with Object.prototype.hasOwnProperty.call), the same set of keys\n  // (although not necessarily the same order), equivalent values for every\n  // corresponding key, and an identical 'prototype' property. Note: this\n  // accounts for both named and indexed properties on Arrays.\n  } else {\n    return objEquiv(actual, expected, opts);\n  }\n}\n\nfunction isUndefinedOrNull(value) {\n  return value === null || value === undefined;\n}\n\nfunction isBuffer (x) {\n  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\n  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n    return false;\n  }\n  if (x.length > 0 && typeof x[0] !== 'number') return false;\n  return true;\n}\n\nfunction objEquiv(a, b, opts) {\n  var i, key;\n  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n    return false;\n  // an identical 'prototype' property.\n  if (a.prototype !== b.prototype) return false;\n  //~~~I've managed to break Object.keys through screwy arguments passing.\n  //   Converting to array solves the problem.\n  if (isArguments(a)) {\n    if (!isArguments(b)) {\n      return false;\n    }\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return deepEqual(a, b, opts);\n  }\n  if (isBuffer(a)) {\n    if (!isBuffer(b)) {\n      return false;\n    }\n    if (a.length !== b.length) return false;\n    for (i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) return false;\n    }\n    return true;\n  }\n  try {\n    var ka = objectKeys(a),\n        kb = objectKeys(b);\n  } catch (e) {//happens when one is a string literal and the other isn't\n    return false;\n  }\n  // having the same number of owned properties (keys incorporates\n  // hasOwnProperty)\n  if (ka.length != kb.length)\n    return false;\n  //the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  //~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  //equivalent values for every corresponding key, and\n  //~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!deepEqual(a[key], b[key], opts)) return false;\n  }\n  return typeof a === typeof b;\n}\n\n},{\"./lib/is_arguments.js\":37,\"./lib/keys.js\":38}],37:[function(require,module,exports){\nvar supportsArgumentsClass = (function(){\n  return Object.prototype.toString.call(arguments)\n})() == '[object Arguments]';\n\nexports = module.exports = supportsArgumentsClass ? supported : unsupported;\n\nexports.supported = supported;\nfunction supported(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n};\n\nexports.unsupported = unsupported;\nfunction unsupported(object){\n  return object &&\n    typeof object == 'object' &&\n    typeof object.length == 'number' &&\n    Object.prototype.hasOwnProperty.call(object, 'callee') &&\n    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\n    false;\n};\n\n},{}],38:[function(require,module,exports){\nexports = module.exports = typeof Object.keys === 'function'\n  ? Object.keys : shim;\n\nexports.shim = shim;\nfunction shim (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n}\n\n},{}],39:[function(require,module,exports){\n/**\n * Indicates that navigation was caused by a call to history.push.\n */\n'use strict';\n\nexports.__esModule = true;\nvar PUSH = 'PUSH';\n\nexports.PUSH = PUSH;\n/**\n * Indicates that navigation was caused by a call to history.replace.\n */\nvar REPLACE = 'REPLACE';\n\nexports.REPLACE = REPLACE;\n/**\n * Indicates that navigation was caused by some other action such\n * as using a browser's back/forward buttons and/or manually manipulating\n * the URL in a browser's location bar. This is the default.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onpopstate\n * for more information.\n */\nvar POP = 'POP';\n\nexports.POP = POP;\nexports['default'] = {\n  PUSH: PUSH,\n  REPLACE: REPLACE,\n  POP: POP\n};\n},{}],40:[function(require,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\nexports.loopAsync = loopAsync;\n\nfunction loopAsync(turns, work, callback) {\n  var currentTurn = 0;\n  var isDone = false;\n\n  function done() {\n    isDone = true;\n    callback.apply(this, arguments);\n  }\n\n  function next() {\n    if (isDone) return;\n\n    if (currentTurn < turns) {\n      work.call(this, currentTurn++, next, done);\n    } else {\n      done.apply(this, arguments);\n    }\n  }\n\n  next();\n}\n},{}],41:[function(require,module,exports){\n(function (process){\n/*eslint-disable no-empty */\n'use strict';\n\nexports.__esModule = true;\nexports.saveState = saveState;\nexports.readState = readState;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar KeyPrefix = '@@History/';\nvar QuotaExceededError = 'QuotaExceededError';\nvar SecurityError = 'SecurityError';\n\nfunction createKey(key) {\n  return KeyPrefix + key;\n}\n\nfunction saveState(key, state) {\n  try {\n    window.sessionStorage.setItem(createKey(key), JSON.stringify(state));\n  } catch (error) {\n    if (error.name === SecurityError) {\n      // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any\n      // attempt to access window.sessionStorage.\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available due to security settings') : undefined;\n\n      return;\n    }\n\n    if (error.name === QuotaExceededError && window.sessionStorage.length === 0) {\n      // Safari \"private mode\" throws QuotaExceededError.\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to save state; sessionStorage is not available in Safari private mode') : undefined;\n\n      return;\n    }\n\n    throw error;\n  }\n}\n\nfunction readState(key) {\n  var json = undefined;\n  try {\n    json = window.sessionStorage.getItem(createKey(key));\n  } catch (error) {\n    if (error.name === SecurityError) {\n      // Blocking cookies in Chrome/Firefox/Safari throws SecurityError on any\n      // attempt to access window.sessionStorage.\n      process.env.NODE_ENV !== 'production' ? _warning2['default'](false, '[history] Unable to read state; sessionStorage is not available due to security settings') : undefined;\n\n      return null;\n    }\n  }\n\n  if (json) {\n    try {\n      return JSON.parse(json);\n    } catch (error) {\n      // Ignore invalid JSON.\n    }\n  }\n\n  return null;\n}\n}).call(this,require('_process'))\n},{\"_process\":1,\"warning\":53}],42:[function(require,module,exports){\n'use strict';\n\nexports.__esModule = true;\nexports.addEventListener = addEventListener;\nexports.removeEventListener = removeEventListener;\nexports.getHashPath = getHashPath;\nexports.replaceHashPath = replaceHashPath;\nexports.getWindowPath = getWindowPath;\nexports.go = go;\nexports.getUserConfirmation = getUserConfirmation;\nexports.supportsHistory = supportsHistory;\nexports.supportsGoWithoutReloadUsingHash = supportsGoWithoutReloadUsingHash;\n\nfunction addEventListener(node, event, listener) {\n  if (node.addEventListener) {\n    node.addEventListener(event, listener, false);\n  } else {\n    node.attachEvent('on' + event, listener);\n  }\n}\n\nfunction removeEventListener(node, event, listener) {\n  if (node.removeEventListener) {\n    node.removeEventListener(event, listener, false);\n  } else {\n    node.detachEvent('on' + event, listener);\n  }\n}\n\nfunction getHashPath() {\n  // We can't use window.location.hash here because it's not\n  // consistent across browsers - Firefox will pre-decode it!\n  return window.location.href.split('#')[1] || '';\n}\n\nfunction replaceHashPath(path) {\n  window.location.replace(window.location.pathname + window.location.search + '#' + path);\n}\n\nfunction getWindowPath() {\n  return window.location.pathname + window.location.search + window.location.hash;\n}\n\nfunction go(n) {\n  if (n) window.history.go(n);\n}\n\nfunction getUserConfirmation(message, callback) {\n  callback(window.confirm(message));\n}\n\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/rackt/react-router/issues/586\n */\n\nfunction supportsHistory() {\n  var ua = navigator.userAgent;\n  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) {\n    return false;\n  }\n  // FIXME: Work around our browser history not working correctly on Chrome\n  // iOS: https://github.com/rackt/react-router/issues/2565\n  if (ua.indexOf('CriOS') !== -1) {\n    return false;\n  }\n  return window.history && 'pushState' in window.history;\n}\n\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\n\nfunction supportsGoWithoutReloadUsingHash() {\n  var ua = navigator.userAgent;\n  return ua.indexOf('Firefox') === -1;\n}\n},{}],43:[function(require,module,exports){\n'use strict';\n\nexports.__esModule = true;\nvar canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nexports.canUseDOM = canUseDOM;\n},{}],44:[function(require,module,exports){\n(function (process){\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _Actions = require('./Actions');\n\nvar _ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar _DOMUtils = require('./DOMUtils');\n\nvar _DOMStateStorage = require('./DOMStateStorage');\n\nvar _createDOMHistory = require('./createDOMHistory');\n\nvar _createDOMHistory2 = _interopRequireDefault(_createDOMHistory);\n\nvar _parsePath = require('./parsePath');\n\nvar _parsePath2 = _interopRequireDefault(_parsePath);\n\n/**\n * Creates and returns a history object that uses HTML5's history API\n * (pushState, replaceState, and the popstate event) to manage history.\n * This is the recommended method of managing history in browsers because\n * it provides the cleanest URLs.\n *\n * Note: In browsers that do not support the HTML5 history API full\n * page reloads will be used to preserve URLs.\n */\nfunction createBrowserHistory() {\n  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n  !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'Browser history needs a DOM') : _invariant2['default'](false) : undefined;\n\n  var forceRefresh = options.forceRefresh;\n\n  var isSupported = _DOMUtils.supportsHistory();\n  var useRefresh = !isSupported || forceRefresh;\n\n  function getCurrentLocation(historyState) {\n    historyState = historyState || window.history.state || {};\n\n    var path = _DOMUtils.getWindowPath();\n    var _historyState = historyState;\n    var key = _historyState.key;\n\n    var state = undefined;\n    if (key) {\n      state = _DOMStateStorage.readState(key);\n    } else {\n      state = null;\n      key = history.createKey();\n\n      if (isSupported) window.history.replaceState(_extends({}, historyState, { key: key }), null, path);\n    }\n\n    var location = _parsePath2['default'](path);\n\n    return history.createLocation(_extends({}, location, { state: state }), undefined, key);\n  }\n\n  function startPopStateListener(_ref) {\n    var transitionTo = _ref.transitionTo;\n\n    function popStateListener(event) {\n      if (event.state === undefined) return; // Ignore extraneous popstate events in WebKit.\n\n      transitionTo(getCurrentLocation(event.state));\n    }\n\n    _DOMUtils.addEventListener(window, 'popstate', popStateListener);\n\n    return function () {\n      _DOMUtils.removeEventListener(window, 'popstate', popStateListener);\n    };\n  }\n\n  function finishTransition(location) {\n    var basename = location.basename;\n    var pathname = location.pathname;\n    var search = location.search;\n    var hash = location.hash;\n    var state = location.state;\n    var action = location.action;\n    var key = location.key;\n\n    if (action === _Actions.POP) return; // Nothing to do.\n\n    _DOMStateStorage.saveState(key, state);\n\n    var path = (basename || '') + pathname + search + hash;\n    var historyState = {\n      key: key\n    };\n\n    if (action === _Actions.PUSH) {\n      if (useRefresh) {\n        window.location.href = path;\n        return false; // Prevent location update.\n      } else {\n          window.history.pushState(historyState, null, path);\n        }\n    } else {\n      // REPLACE\n      if (useRefresh) {\n        window.location.replace(path);\n        return false; // Prevent location update.\n      } else {\n          window.history.replaceState(historyState, null, path);\n        }\n    }\n  }\n\n  var history = _createDOMHistory2['default'](_extends({}, options, {\n    getCurrentLocation: getCurrentLocation,\n    finishTransition: finishTransition,\n    saveState: _DOMStateStorage.saveState\n  }));\n\n  var listenerCount = 0,\n      stopPopStateListener = undefined;\n\n  function listenBefore(listener) {\n    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);\n\n    var unlisten = history.listenBefore(listener);\n\n    return function () {\n      unlisten();\n\n      if (--listenerCount === 0) stopPopStateListener();\n    };\n  }\n\n  function listen(listener) {\n    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);\n\n    var unlisten = history.listen(listener);\n\n    return function () {\n      unlisten();\n\n      if (--listenerCount === 0) stopPopStateListener();\n    };\n  }\n\n  // deprecated\n  function registerTransitionHook(hook) {\n    if (++listenerCount === 1) stopPopStateListener = startPopStateListener(history);\n\n    history.registerTransitionHook(hook);\n  }\n\n  // deprecated\n  function unregisterTransitionHook(hook) {\n    history.unregisterTransitionHook(hook);\n\n    if (--listenerCount === 0) stopPopStateListener();\n  }\n\n  return _extends({}, history, {\n    listenBefore: listenBefore,\n    listen: listen,\n    registerTransitionHook: registerTransitionHook,\n    unregisterTransitionHook: unregisterTransitionHook\n  });\n}\n\nexports['default'] = createBrowserHistory;\nmodule.exports = exports['default'];\n}).call(this,require('_process'))\n},{\"./Actions\":39,\"./DOMStateStorage\":41,\"./DOMUtils\":42,\"./ExecutionEnvironment\":43,\"./createDOMHistory\":45,\"./parsePath\":50,\"_process\":1,\"invariant\":52}],45:[function(require,module,exports){\n(function (process){\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _invariant = require('invariant');\n\nvar _invariant2 = _interopRequireDefault(_invariant);\n\nvar _ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar _DOMUtils = require('./DOMUtils');\n\nvar _createHistory = require('./createHistory');\n\nvar _createHistory2 = _interopRequireDefault(_createHistory);\n\nfunction createDOMHistory(options) {\n  var history = _createHistory2['default'](_extends({\n    getUserConfirmation: _DOMUtils.getUserConfirmation\n  }, options, {\n    go: _DOMUtils.go\n  }));\n\n  function listen(listener) {\n    !_ExecutionEnvironment.canUseDOM ? process.env.NODE_ENV !== 'production' ? _invariant2['default'](false, 'DOM history needs a DOM') : _invariant2['default'](false) : undefined;\n\n    return history.listen(listener);\n  }\n\n  return _extends({}, history, {\n    listen: listen\n  });\n}\n\nexports['default'] = createDOMHistory;\nmodule.exports = exports['default'];\n}).call(this,require('_process'))\n},{\"./DOMUtils\":42,\"./ExecutionEnvironment\":43,\"./createHistory\":46,\"_process\":1,\"invariant\":52}],46:[function(require,module,exports){\n//import warning from 'warning'\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _deepEqual = require('deep-equal');\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _AsyncUtils = require('./AsyncUtils');\n\nvar _Actions = require('./Actions');\n\nvar _createLocation2 = require('./createLocation');\n\nvar _createLocation3 = _interopRequireDefault(_createLocation2);\n\nvar _runTransitionHook = require('./runTransitionHook');\n\nvar _runTransitionHook2 = _interopRequireDefault(_runTransitionHook);\n\nvar _parsePath = require('./parsePath');\n\nvar _parsePath2 = _interopRequireDefault(_parsePath);\n\nvar _deprecate = require('./deprecate');\n\nvar _deprecate2 = _interopRequireDefault(_deprecate);\n\nfunction createRandomKey(length) {\n  return Math.random().toString(36).substr(2, length);\n}\n\nfunction locationsAreEqual(a, b) {\n  return a.pathname === b.pathname && a.search === b.search &&\n  //a.action === b.action && // Different action !== location change.\n  a.key === b.key && _deepEqual2['default'](a.state, b.state);\n}\n\nvar DefaultKeyLength = 6;\n\nfunction createHistory() {\n  var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n  var getCurrentLocation = options.getCurrentLocation;\n  var finishTransition = options.finishTransition;\n  var saveState = options.saveState;\n  var go = options.go;\n  var keyLength = options.keyLength;\n  var getUserConfirmation = options.getUserConfirmation;\n\n  if (typeof keyLength !== 'number') keyLength = DefaultKeyLength;\n\n  var transitionHooks = [];\n\n  function listenBefore(hook) {\n    transitionHooks.push(hook);\n\n    return function () {\n      transitionHooks = transitionHooks.filter(function (item) {\n        return item !== hook;\n      });\n    };\n  }\n\n  var allKeys = [];\n  var changeListeners = [];\n  var location = undefined;\n\n  function getCurrent() {\n    if (pendingLocation && pendingLocation.action === _Actions.POP) {\n      return allKeys.indexOf(pendingLocation.key);\n    } else if (location) {\n      return allKeys.indexOf(location.key);\n    } else {\n      return -1;\n    }\n  }\n\n  function updateLocation(newLocation) {\n    var current = getCurrent();\n\n    location = newLocation;\n\n    if (location.action === _Actions.PUSH) {\n      allKeys = [].concat(allKeys.slice(0, current + 1), [location.key]);\n    } else if (location.action === _Actions.REPLACE) {\n      allKeys[current] = location.key;\n    }\n\n    changeListeners.forEach(function (listener) {\n      listener(location);\n    });\n  }\n\n  function listen(listener) {\n    changeListeners.push(listener);\n\n    if (location) {\n      listener(location);\n    } else {\n      var _location = getCurrentLocation();\n      allKeys = [_location.key];\n      updateLocation(_location);\n    }\n\n    return function () {\n      changeListeners = changeListeners.filter(function (item) {\n        return item !== listener;\n      });\n    };\n  }\n\n  function confirmTransitionTo(location, callback) {\n    _AsyncUtils.loopAsync(transitionHooks.length, function (index, next, done) {\n      _runTransitionHook2['default'](transitionHooks[index], location, function (result) {\n        if (result != null) {\n          done(result);\n        } else {\n          next();\n        }\n      });\n    }, function (message) {\n      if (getUserConfirmation && typeof message === 'string') {\n        getUserConfirmation(message, function (ok) {\n          callback(ok !== false);\n        });\n      } else {\n        callback(message !== false);\n      }\n    });\n  }\n\n  var pendingLocation = undefined;\n\n  function transitionTo(nextLocation) {\n    if (location && locationsAreEqual(location, nextLocation)) return; // Nothing to do.\n\n    pendingLocation = nextLocation;\n\n    confirmTransitionTo(nextLocation, function (ok) {\n      if (pendingLocation !== nextLocation) return; // Transition was interrupted.\n\n      if (ok) {\n        // treat PUSH to current path like REPLACE to be consistent with browsers\n        if (nextLocation.action === _Actions.PUSH) {\n          var prevPath = createPath(location);\n          var nextPath = createPath(nextLocation);\n\n          if (nextPath === prevPath) nextLocation.action = _Actions.REPLACE;\n        }\n\n        if (finishTransition(nextLocation) !== false) updateLocation(nextLocation);\n      } else if (location && nextLocation.action === _Actions.POP) {\n        var prevIndex = allKeys.indexOf(location.key);\n        var nextIndex = allKeys.indexOf(nextLocation.key);\n\n        if (prevIndex !== -1 && nextIndex !== -1) go(prevIndex - nextIndex); // Restore the URL.\n      }\n    });\n  }\n\n  function push(location) {\n    transitionTo(createLocation(location, _Actions.PUSH, createKey()));\n  }\n\n  function replace(location) {\n    transitionTo(createLocation(location, _Actions.REPLACE, createKey()));\n  }\n\n  function goBack() {\n    go(-1);\n  }\n\n  function goForward() {\n    go(1);\n  }\n\n  function createKey() {\n    return createRandomKey(keyLength);\n  }\n\n  function createPath(location) {\n    if (location == null || typeof location === 'string') return location;\n\n    var pathname = location.pathname;\n    var search = location.search;\n    var hash = location.hash;\n\n    var result = pathname;\n\n    if (search) result += search;\n\n    if (hash) result += hash;\n\n    return result;\n  }\n\n  function createHref(location) {\n    return createPath(location);\n  }\n\n  function createLocation(location, action) {\n    var key = arguments.length <= 2 || arguments[2] === undefined ? createKey() : arguments[2];\n\n    if (typeof action === 'object') {\n      //warning(\n      //  false,\n      //  'The state (2nd) argument to history.createLocation is deprecated; use a ' +\n      //  'location descriptor instead'\n      //)\n\n      if (typeof location === 'string') location = _parsePath2['default'](location);\n\n      location = _extends({}, location, { state: action });\n\n      action = key;\n      key = arguments[3] || createKey();\n    }\n\n    return _createLocation3['default'](location, action, key);\n  }\n\n  // deprecated\n  function setState(state) {\n    if (location) {\n      updateLocationState(location, state);\n      updateLocation(location);\n    } else {\n      updateLocationState(getCurrentLocation(), state);\n    }\n  }\n\n  function updateLocationState(location, state) {\n    location.state = _extends({}, location.state, state);\n    saveState(location.key, location.state);\n  }\n\n  // deprecated\n  function registerTransitionHook(hook) {\n    if (transitionHooks.indexOf(hook) === -1) transitionHooks.push(hook);\n  }\n\n  // deprecated\n  function unregisterTransitionHook(hook) {\n    transitionHooks = transitionHooks.filter(function (item) {\n      return item !== hook;\n    });\n  }\n\n  // deprecated\n  function pushState(state, path) {\n    if (typeof path === 'string') path = _parsePath2['default'](path);\n\n    push(_extends({ state: state }, path));\n  }\n\n  // deprecated\n  function replaceState(state, path) {\n    if (typeof path === 'string') path = _parsePath2['default'](path);\n\n    replace(_extends({ state: state }, path));\n  }\n\n  return {\n    listenBefore: listenBefore,\n    listen: listen,\n    transitionTo: transitionTo,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    createKey: createKey,\n    createPath: createPath,\n    createHref: createHref,\n    createLocation: createLocation,\n\n    setState: _deprecate2['default'](setState, 'setState is deprecated; use location.key to save state instead'),\n    registerTransitionHook: _deprecate2['default'](registerTransitionHook, 'registerTransitionHook is deprecated; use listenBefore instead'),\n    unregisterTransitionHook: _deprecate2['default'](unregisterTransitionHook, 'unregisterTransitionHook is deprecated; use the callback returned from listenBefore instead'),\n    pushState: _deprecate2['default'](pushState, 'pushState is deprecated; use push instead'),\n    replaceState: _deprecate2['default'](replaceState, 'replaceState is deprecated; use replace instead')\n  };\n}\n\nexports['default'] = createHistory;\nmodule.exports = exports['default'];\n},{\"./Actions\":39,\"./AsyncUtils\":40,\"./createLocation\":47,\"./deprecate\":48,\"./parsePath\":50,\"./runTransitionHook\":51,\"deep-equal\":36}],47:[function(require,module,exports){\n//import warning from 'warning'\n'use strict';\n\nexports.__esModule = true;\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _Actions = require('./Actions');\n\nvar _parsePath = require('./parsePath');\n\nvar _parsePath2 = _interopRequireDefault(_parsePath);\n\nfunction createLocation() {\n  var location = arguments.length <= 0 || arguments[0] === undefined ? '/' : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? _Actions.POP : arguments[1];\n  var key = arguments.length <= 2 || arguments[2] === undefined ? null : arguments[2];\n\n  var _fourthArg = arguments.length <= 3 || arguments[3] === undefined ? null : arguments[3];\n\n  if (typeof location === 'string') location = _parsePath2['default'](location);\n\n  if (typeof action === 'object') {\n    //warning(\n    //  false,\n    //  'The state (2nd) argument to createLocation is deprecated; use a ' +\n    //  'location descriptor instead'\n    //)\n\n    location = _extends({}, location, { state: action });\n\n    action = key || _Actions.POP;\n    key = _fourthArg;\n  }\n\n  var pathname = location.pathname || '/';\n  var search = location.search || '';\n  var hash = location.hash || '';\n  var state = location.state || null;\n\n  return {\n    pathname: pathname,\n    search: search,\n    hash: hash,\n    state: state,\n    action: action,\n    key: key\n  };\n}\n\nexports['default'] = createLocation;\nmodule.exports = exports['default'];\n},{\"./Actions\":39,\"./parsePath\":50}],48:[function(require,module,exports){\n//import warning from 'warning'\n\n\"use strict\";\n\nexports.__esModule = true;\nfunction deprecate(fn) {\n  return fn;\n  //return function () {\n  //  warning(false, '[history] ' + message)\n  //  return fn.apply(this, arguments)\n  //}\n}\n\nexports[\"default\"] = deprecate;\nmodule.exports = exports[\"default\"];\n},{}],49:[function(require,module,exports){\n\"use strict\";\n\nexports.__esModule = true;\nfunction extractPath(string) {\n  var match = string.match(/^https?:\\/\\/[^\\/]*/);\n\n  if (match == null) return string;\n\n  return string.substring(match[0].length);\n}\n\nexports[\"default\"] = extractPath;\nmodule.exports = exports[\"default\"];\n},{}],50:[function(require,module,exports){\n(function (process){\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nvar _extractPath = require('./extractPath');\n\nvar _extractPath2 = _interopRequireDefault(_extractPath);\n\nfunction parsePath(path) {\n  var pathname = _extractPath2['default'](path);\n  var search = '';\n  var hash = '';\n\n  process.env.NODE_ENV !== 'production' ? _warning2['default'](path === pathname, 'A path must be pathname + search + hash only, not a fully qualified URL like \"%s\"', path) : undefined;\n\n  var hashIndex = pathname.indexOf('#');\n  if (hashIndex !== -1) {\n    hash = pathname.substring(hashIndex);\n    pathname = pathname.substring(0, hashIndex);\n  }\n\n  var searchIndex = pathname.indexOf('?');\n  if (searchIndex !== -1) {\n    search = pathname.substring(searchIndex);\n    pathname = pathname.substring(0, searchIndex);\n  }\n\n  if (pathname === '') pathname = '/';\n\n  return {\n    pathname: pathname,\n    search: search,\n    hash: hash\n  };\n}\n\nexports['default'] = parsePath;\nmodule.exports = exports['default'];\n}).call(this,require('_process'))\n},{\"./extractPath\":49,\"_process\":1,\"warning\":53}],51:[function(require,module,exports){\n(function (process){\n'use strict';\n\nexports.__esModule = true;\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _warning = require('warning');\n\nvar _warning2 = _interopRequireDefault(_warning);\n\nfunction runTransitionHook(hook, location, callback) {\n  var result = hook(location, callback);\n\n  if (hook.length < 2) {\n    // Assume the hook runs synchronously and automatically\n    // call the callback with the return value.\n    callback(result);\n  } else {\n    process.env.NODE_ENV !== 'production' ? _warning2['default'](result === undefined, 'You should not \"return\" in a transition hook with a callback argument; call the callback instead') : undefined;\n  }\n}\n\nexports['default'] = runTransitionHook;\nmodule.exports = exports['default'];\n}).call(this,require('_process'))\n},{\"_process\":1,\"warning\":53}],52:[function(require,module,exports){\n/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n  if (\"production\" !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error(\n        'Minified exception occurred; use the non-minified dev environment ' +\n        'for the full error message and additional helpful warnings.'\n      );\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(\n        format.replace(/%s/g, function() { return args[argIndex++]; })\n      );\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n\n},{}],53:[function(require,module,exports){\n/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\n\nvar warning = function() {};\n\nif (\"production\" !== 'production') {\n  warning = function(condition, format, args) {\n    var len = arguments.length;\n    args = new Array(len > 2 ? len - 2 : 0);\n    for (var key = 2; key < len; key++) {\n      args[key - 2] = arguments[key];\n    }\n    if (format === undefined) {\n      throw new Error(\n        '`warning(condition, format, ...args)` requires a warning ' +\n        'message argument'\n      );\n    }\n\n    if (format.length < 10 || (/^[s\\W]*$/).test(format)) {\n      throw new Error(\n        'The warning format should be able to uniquely identify this ' +\n        'warning. Please, use a more descriptive format than: ' + format\n      );\n    }\n\n    if (!condition) {\n      var argIndex = 0;\n      var message = 'Warning: ' +\n        format.replace(/%s/g, function() {\n          return args[argIndex++];\n        });\n      if (typeof console !== 'undefined') {\n        console.error(message);\n      }\n      try {\n        // This error was thrown as a convenience so that you can use this stack\n        // to find the callsite that caused this warning to fire.\n        throw new Error(message);\n      } catch(x) {}\n    }\n  };\n}\n\nmodule.exports = warning;\n\n},{}],54:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.select = select;\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"refresh\",\n    value: function refresh() {\n      window.location.reload();\n    }\n  }, {\n    key: \"getMessage\",\n    value: function getMessage() {\n      if (this.props.signedIn) {\n        return interpolate(gettext(\"You have signed in as %(username)s. Please refresh the page before continuing.\"), { username: this.props.signedIn.username }, true);\n      } else if (this.props.signedOut) {\n        return interpolate(gettext(\"%(username)s, you have been signed out. Please refresh the page before continuing.\"), { username: this.props.user.username }, true);\n      }\n    }\n  }, {\n    key: \"getClassName\",\n    value: function getClassName() {\n      if (this.props.signedIn || this.props.signedOut) {\n        return \"auth-message show\";\n      } else {\n        return \"auth-message\";\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"div\",\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          \"div\",\n          { className: \"container\" },\n          _react2.default.createElement(\n            \"p\",\n            { className: \"lead\" },\n            this.getMessage()\n          ),\n          _react2.default.createElement(\n            \"p\",\n            null,\n            _react2.default.createElement(\n              \"button\",\n              { type: \"button\", className: \"btn btn-default\",\n                onClick: this.refresh },\n              gettext(\"Reload page\")\n            ),\n            \" \",\n            _react2.default.createElement(\n              \"span\",\n              { className: \"hidden-xs hidden-sm text-muted\" },\n              gettext(\"or press F5 key.\")\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\nfunction select(state) {\n  return {\n    user: state.auth.user,\n    signedIn: state.auth.signedIn,\n    signedOut: state.auth.signedOut\n  };\n}\n\n},{\"react\":\"react\"}],55:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar BASE_URL = $('base').attr('href') + 'user-avatar/';\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getSrc',\n    value: function getSrc() {\n      var size = this.props.size || 100; // jshint ignore:line\n      var url = BASE_URL;\n\n      if (this.props.user && this.props.user.id) {\n        // just avatar hash, size and user id\n        url += this.props.user.avatar_hash + '/' + size + '/' + this.props.user.id + '.png';\n      } else {\n        // just append avatar size to file to produce no-avatar placeholder\n        url += size + '.png';\n      }\n\n      return url;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement('img', { src: this.getSrc(),\n        className: this.props.className || 'user-avatar',\n        title: gettext(\"User avatar\") });\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],56:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getReasonMessage',\n    value: function getReasonMessage() {\n      /* jshint ignore:start */\n      if (this.props.message.html) {\n        return _react2.default.createElement('div', { className: 'lead', dangerouslySetInnerHTML: {\n            __html: this.props.message.html\n          } });\n      } else {\n        return _react2.default.createElement(\n          'p',\n          { className: 'lead' },\n          this.props.message.plain\n        );\n      }\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getExpirationMessage',\n    value: function getExpirationMessage() {\n      if (this.props.expires) {\n        if (this.props.expires.isAfter((0, _moment2.default)())) {\n          /* jshint ignore:start */\n          var title = interpolate(gettext(\"This ban expires on %(expires_on)s.\"), {\n            'expires_on': this.props.expires.format('LL, LT')\n          }, true);\n\n          var message = interpolate(gettext(\"This ban expires %(expires_on)s.\"), {\n            'expires_on': this.props.expires.fromNow()\n          }, true);\n\n          return _react2.default.createElement(\n            'abbr',\n            { title: title },\n            message\n          );\n          /* jshint ignore:end */\n        } else {\n            return gettext(\"This ban has expired.\");\n          }\n      } else {\n        return gettext(\"This ban is permanent.\");\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page page-error page-error-banned' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-panel' },\n            _react2.default.createElement(\n              'div',\n              { className: 'message-icon' },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                'highlight_off'\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'message-body' },\n              this.getReasonMessage(),\n              _react2.default.createElement(\n                'p',\n                { className: 'message-footnote' },\n                this.getExpirationMessage()\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"moment\":\"moment\",\"react\":\"react\"}],57:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _loader = require('./loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar Button = function (_React$Component) {\n  _inherits(Button, _React$Component);\n\n  function Button() {\n    _classCallCheck(this, Button);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(Button).apply(this, arguments));\n  }\n\n  _createClass(Button, [{\n    key: 'render',\n    value: function render() {\n      var className = 'btn ' + this.props.className;\n      var disabled = this.props.disabled;\n\n      if (this.props.loading) {\n        className += ' btn-loading';\n        disabled = true;\n      }\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: this.props.onClick ? 'button' : 'submit',\n          className: className,\n          disabled: disabled,\n          onClick: this.props.onClick },\n        this.props.children,\n        this.props.loading ? _react2.default.createElement(_loader2.default, null) : null\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return Button;\n}(_react2.default.Component);\n\nexports.default = Button;\n\nButton.defaultProps = {\n  className: \"btn-default\",\n\n  type: \"submit\",\n\n  loading: false,\n  disabled: false,\n\n  onClick: null\n};\n\n},{\"./loader\":72,\"react\":\"react\"}],58:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _lastActivity = require('./last-activity');\n\nvar _lastActivity2 = _interopRequireDefault(_lastActivity);\n\nvar _readIcon = require('./read-icon');\n\nvar _readIcon2 = _interopRequireDefault(_readIcon);\n\nvar _stats = require('./stats');\n\nvar _stats2 = _interopRequireDefault(_stats);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.props.category.css_class) {\n        return 'panel panel-default panel-category panel-category-' + this.props.category.css_class;\n      } else {\n        return 'panel panel-default panel-category';\n      }\n    }\n  }, {\n    key: 'getHeadingClassName',\n    value: function getHeadingClassName() {\n      if (this.props.category.subcategories.length) {\n        return 'panel-heading';\n      } else {\n        return 'panel-heading heading-alone';\n      }\n    }\n  }, {\n    key: 'getCategoryDescription',\n    value: function getCategoryDescription() {\n      if (this.props.category.description) {\n        /* jshint ignore:start */\n        return _react2.default.createElement('div', { className: 'panel-body category-description',\n          dangerouslySetInnerHTML: {\n            __html: this.props.category.description.html\n          } });\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getSubcategoryClass',\n    value: function getSubcategoryClass(category) {\n      if (category.css_class) {\n        return 'list-group-item category-subcategory subcategory-' + category.css_class;\n      } else {\n        return 'list-group-item category-subcategory';\n      }\n    }\n  }, {\n    key: 'getSubcategoryDescription',\n    value: function getSubcategoryDescription(category) {\n      if (category.description) {\n        /* jshint ignore:start */\n        return _react2.default.createElement('div', { className: 'subcategory-description',\n          dangerouslySetInnerHTML: {\n            __html: category.description.html\n          } });\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getSubcategorySubcategoryClass',\n    value: function getSubcategorySubcategoryClass(category) {\n      if (category.css_class) {\n        return 'subcategory subcategory-' + category.css_class;\n      } else {\n        return 'subcategory';\n      }\n    }\n  }, {\n    key: 'getSubcategorySubcategories',\n    value: function getSubcategorySubcategories(category) {\n      var _this2 = this;\n\n      if (category.subcategories.length) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'ul',\n          { className: 'list-inline subcategories-list' },\n          category.subcategories.map(function (category) {\n            return _react2.default.createElement(\n              'li',\n              { key: category.id },\n              _react2.default.createElement(\n                'a',\n                { href: category.absolute_url,\n                  className: _this2.getSubcategorySubcategoryClass(category) },\n                category.name\n              )\n            );\n          })\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getSubcategories',\n    value: function getSubcategories() {\n      var _this3 = this;\n\n      if (this.props.category.subcategories.length) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'ul',\n          { className: 'list-group category-subcategories' },\n          this.props.category.subcategories.map(function (category) {\n            return _react2.default.createElement(\n              'li',\n              { className: _this3.getSubcategoryClass(category),\n                key: category.id },\n              _react2.default.createElement(\n                'div',\n                { className: 'title-row' },\n                _react2.default.createElement(\n                  'h4',\n                  null,\n                  _react2.default.createElement(_readIcon2.default, { category: category }),\n                  _react2.default.createElement(\n                    'a',\n                    { href: category.absolute_url, className: 'item-title' },\n                    category.name\n                  )\n                ),\n                _react2.default.createElement(_stats2.default, { category: category })\n              ),\n              _react2.default.createElement(_lastActivity2.default, { category: category }),\n              _this3.getSubcategoryDescription(category),\n              _this3.getSubcategorySubcategories(category)\n            );\n          })\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { id: 'panel-category-' + this.props.category.id,\n          className: this.getClassName() },\n        _react2.default.createElement(\n          'div',\n          { className: this.getHeadingClassName() },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading-inblock' },\n            _react2.default.createElement(\n              'div',\n              { className: 'panel-heading-top-row' },\n              _react2.default.createElement(\n                'h3',\n                { className: 'panel-title' },\n                _react2.default.createElement(_readIcon2.default, { category: this.props.category }),\n                _react2.default.createElement(\n                  'a',\n                  { href: this.props.category.absolute_url, className: 'item-title' },\n                  this.props.category.name\n                )\n              ),\n              _react2.default.createElement(_stats2.default, { category: this.props.category })\n            ),\n            _react2.default.createElement(_lastActivity2.default, { category: this.props.category })\n          )\n        ),\n        this.getCategoryDescription(),\n        this.getSubcategories()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"./last-activity\":59,\"./read-icon\":60,\"./stats\":62,\"react\":\"react\"}],59:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"getLastPoster\",\n    value: function getLastPoster() {\n      if (this.props.category.last_poster_url) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          \"a\",\n          { href: this.props.category.last_poster_url,\n            className: \"item-title\" },\n          this.props.category.last_poster_name\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            \"span\",\n            { className: \"item-title\" },\n            this.props.category.last_poster_name\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: \"getThreadDetails\",\n    value: function getThreadDetails() {\n      /* jshint ignore:start */\n      return [_react2.default.createElement(\n        \"li\",\n        { className: \"thread-title\", key: \"title\" },\n        _react2.default.createElement(\n          \"a\",\n          { href: this.props.category.last_thread_url, className: \"item-title\" },\n          this.props.category.last_thread_title\n        )\n      ), _react2.default.createElement(\n        \"li\",\n        { className: \"poster-name\", key: \"poster\" },\n        this.getLastPoster()\n      ), _react2.default.createElement(\n        \"li\",\n        { className: \"thread-date\", key: \"date\" },\n        _react2.default.createElement(\n          \"abbr\",\n          { title: this.props.category.last_post_on.format('LL, LT') },\n          this.props.category.last_post_on.fromNow()\n        )\n      )];\n      /* jshint ignore:end */\n    }\n  }, {\n    key: \"getLastActivity\",\n    value: function getLastActivity() {\n      if (this.props.category.acl.can_browse) {\n        if (!this.props.category.acl.can_see_all_threads) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            \"li\",\n            { className: \"thread-message\" },\n            _react2.default.createElement(\n              \"span\",\n              { className: \"material-icon\" },\n              \"info_outline\"\n            ),\n            gettext(\"This category is private. You can see only your own threads within it.\")\n          );\n          /* jshint ignore:end */\n        } else if (this.props.category.last_thread_title) {\n            return this.getThreadDetails();\n          } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(\n              \"li\",\n              { className: \"thread-message\" },\n              _react2.default.createElement(\n                \"span\",\n                { className: \"material-icon\" },\n                \"error_outline\"\n              ),\n              gettext(\"This category is empty.\")\n            );\n            /* jshint ignore:end */\n          }\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            \"li\",\n            { className: \"thread-message\" },\n            _react2.default.createElement(\n              \"span\",\n              { className: \"material-icon\" },\n              \"highlight_off\"\n            ),\n            gettext(\"This category is protected. You can't browse it's contents.\")\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"ul\",\n        { className: \"list-inline category-last-activity\" },\n        this.getLastActivity()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],60:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.props.category.is_read) {\n        return 'read-status item-read';\n      } else {\n        return 'read-status item-new';\n      }\n    }\n  }, {\n    key: 'getTitle',\n    value: function getTitle() {\n      if (this.props.category.is_closed) {\n        if (this.props.category.is_read) {\n          return gettext(\"This category has no new posts. (closed)\");\n        } else {\n          return gettext(\"This category has new posts. (closed)\");\n        }\n      } else {\n        if (this.props.category.is_read) {\n          return gettext(\"This category has no new posts.\");\n        } else {\n          return gettext(\"This category has new posts.\");\n        }\n      }\n    }\n  }, {\n    key: 'getIcon',\n    value: function getIcon() {\n      if (this.props.category.is_closed) {\n        if (this.props.category.is_read) {\n          return 'lock_outline';\n        } else {\n          return 'lock';\n        }\n      } else {\n        if (this.props.category.is_read) {\n          return 'chat_bubble_outline';\n        } else {\n          return 'chat_bubble';\n        }\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName(), title: this.getTitle() },\n        _react2.default.createElement(\n          'span',\n          { className: 'material-icon' },\n          this.getIcon()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],61:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.select = select;\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _category = require('./category');\n\nvar _category2 = _interopRequireDefault(_category);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _polls = require('../../services/polls');\n\nvar _polls2 = _interopRequireDefault(_polls);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\nvar dehydrate = function dehydrate(category) {\n  return Object.assign({}, category, {\n    last_post_on: category.last_post_on ? (0, _moment2.default)(category.last_post_on) : null,\n    subcategories: category.subcategories.map(dehydrate)\n  });\n};\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.update = function (data) {\n      _this.setState({\n        categories: data.map(dehydrate)\n      });\n    };\n\n    _this.state = {\n      categories: _index2.default.get('CATEGORIES').map(dehydrate)\n    };\n\n    _this.startPolling(_index2.default.get('CATEGORIES_API'));\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'startPolling',\n    value: function startPolling(api) {\n      _polls2.default.start({\n        poll: 'categories',\n        url: api,\n        frequency: 180 * 1000,\n        update: this.update\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'categories-list' },\n        this.state.categories.map(function (category) {\n          return _react2.default.createElement(_category2.default, { category: category, key: category.id });\n        })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\nfunction select(store) {\n  return {\n    'tick': store.tick.tick\n  };\n}\n\n},{\"../../index\":135,\"../../services/polls\":150,\"./category\":58,\"moment\":\"moment\",\"react\":\"react\"}],62:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"getThreadsCount\",\n    value: function getThreadsCount() {\n      var string = ngettext(\"%(threads)s thread\", \"%(threads)s threads\", this.props.category.threads);\n\n      return interpolate(string, {\n        'threads': this.props.category.threads\n      }, true);\n    }\n  }, {\n    key: \"getPostsCount\",\n    value: function getPostsCount() {\n      var string = ngettext(\"%(posts)s post\", \"%(posts)s posts\", this.props.category.posts);\n\n      return interpolate(string, {\n        'posts': this.props.category.posts\n      }, true);\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"ul\",\n        { className: \"list-inline category-stats\" },\n        _react2.default.createElement(\n          \"li\",\n          { className: \"category-threads\" },\n          this.getThreadsCount()\n        ),\n        _react2.default.createElement(\n          \"li\",\n          { className: \"category-posts\" },\n          this.getPostsCount()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],63:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar BASE_URL = $('base').attr('href') + 'user-avatar';\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.cropAvatar = function () {\n      if (_this.state.isLoading) {\n        return false;\n      }\n\n      _this.setState({\n        'isLoading': true\n      });\n\n      var avatarType = _this.props.upload ? 'crop_tmp' : 'crop_org';\n      var cropit = $('.crop-form');\n\n      _ajax2.default.post(_this.props.user.api_url.avatar, {\n        'avatar': avatarType,\n        'crop': {\n          'offset': cropit.cropit('offset'),\n          'zoom': cropit.cropit('zoom')\n        }\n      }).then(function (data) {\n        _this.props.onComplete(data.avatar_hash, data.options);\n        _snackbar2.default.success(data.detail);\n      }, function (rejection) {\n        if (rejection.status === 400) {\n          _snackbar2.default.error(rejection.detail);\n          _this.setState({\n            'isLoading': false\n          });\n        } else {\n          _this.props.showError(rejection);\n        }\n      });\n    };\n\n    _this.state = {\n      'isLoading': false\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'getAvatarSize',\n    value: function getAvatarSize() {\n      if (this.props.upload) {\n        return this.props.options.crop_tmp.size;\n      } else {\n        return this.props.options.crop_org.size;\n      }\n    }\n  }, {\n    key: 'getAvatarSecret',\n    value: function getAvatarSecret() {\n      if (this.props.upload) {\n        return this.props.options.crop_tmp.secret;\n      } else {\n        return this.props.options.crop_org.secret;\n      }\n    }\n  }, {\n    key: 'getAvatarHash',\n    value: function getAvatarHash() {\n      return this.props.upload || this.props.user.avatar_hash;\n    }\n  }, {\n    key: 'getImagePath',\n    value: function getImagePath() {\n      return [BASE_URL, this.getAvatarSecret() + ':' + this.getAvatarHash(), this.props.user.id + '.png'].join('/');\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this2 = this;\n\n      var cropit = $('.crop-form');\n      cropit.width(this.getAvatarSize());\n\n      cropit.cropit({\n        'width': this.getAvatarSize(),\n        'height': this.getAvatarSize(),\n        'imageState': {\n          'src': this.getImagePath()\n        },\n        onImageLoaded: function onImageLoaded() {\n          if (_this2.props.upload) {\n            // center uploaded image\n            var zoomLevel = cropit.cropit('zoom');\n            var imageSize = cropit.cropit('imageSize');\n\n            // is it wider than taller?\n            if (imageSize.width > imageSize.height) {\n              var displayedWidth = imageSize.width * zoomLevel;\n              var offsetX = (displayedWidth - _this2.getAvatarSize()) / -2;\n\n              cropit.cropit('offset', {\n                'x': offsetX,\n                'y': 0\n              });\n            } else if (imageSize.width < imageSize.height) {\n              var displayedHeight = imageSize.height * zoomLevel;\n              var offsetY = (displayedHeight - _this2.getAvatarSize()) / -2;\n\n              cropit.cropit('offset', {\n                'x': 0,\n                'y': offsetY\n              });\n            }\n          } else {\n            // use preserved crop\n            var crop = _this2.props.options.crop_org.crop;\n            if (crop) {\n              cropit.cropit('zoom', crop.zoom);\n              cropit.cropit('offset', {\n                'x': crop.x,\n                'y': crop.y\n              });\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      $('.crop-form').cropit('disable');\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-body modal-avatar-crop' },\n          _react2.default.createElement(\n            'div',\n            { className: 'crop-form' },\n            _react2.default.createElement('div', { className: 'cropit-image-preview' }),\n            _react2.default.createElement('input', { type: 'range', className: 'cropit-image-zoom-input' })\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-footer' },\n          _react2.default.createElement(\n            'div',\n            { className: 'col-md-6 col-md-offset-3' },\n            _react2.default.createElement(\n              _button2.default,\n              { onClick: this.cropAvatar,\n                loading: this.state.isLoading,\n                className: 'btn-primary btn-block' },\n              this.props.upload ? gettext(\"Set avatar\") : gettext(\"Crop image\")\n            ),\n            _react2.default.createElement(\n              _button2.default,\n              { onClick: this.props.showIndex,\n                disabled: this.state.isLoading,\n                className: 'btn-default btn-block' },\n              gettext(\"Cancel\")\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../services/ajax\":142,\"../../services/snackbar\":151,\"../avatar\":55,\"../button\":57,\"react\":\"react\"}],64:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Gallery = exports.GalleryItem = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _batch = require('../../utils/batch');\n\nvar _batch2 = _interopRequireDefault(_batch);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar GalleryItem = exports.GalleryItem = function (_React$Component) {\n  _inherits(GalleryItem, _React$Component);\n\n  function GalleryItem() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, GalleryItem);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(GalleryItem)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.select = function () {\n      _this.props.select(_this.props.image);\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n  /* jshint ignore:start */\n\n  _createClass(GalleryItem, [{\n    key: 'getClassName',\n\n    /* jshint ignore:end */\n\n    value: function getClassName() {\n      if (this.props.selection === this.props.image) {\n        if (this.props.disabled) {\n          return 'btn btn-avatar btn-disabled avatar-selected';\n        } else {\n          return 'btn btn-avatar avatar-selected';\n        }\n      } else if (this.props.disabled) {\n        return 'btn btn-avatar btn-disabled';\n      } else {\n        return 'btn btn-avatar';\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: 'button',\n          className: this.getClassName(),\n          disabled: this.props.disabled,\n          onClick: this.select },\n        _react2.default.createElement('img', { src: _index2.default.get('MEDIA_URL') + this.props.image })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return GalleryItem;\n}(_react2.default.Component);\n\nvar Gallery = exports.Gallery = function (_React$Component2) {\n  _inherits(Gallery, _React$Component2);\n\n  function Gallery() {\n    _classCallCheck(this, Gallery);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(Gallery).apply(this, arguments));\n  }\n\n  _createClass(Gallery, [{\n    key: 'render',\n    value: function render() {\n      var _this3 = this;\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'avatars-gallery' },\n        _react2.default.createElement(\n          'h3',\n          null,\n          this.props.name\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'avatars-gallery-images' },\n          (0, _batch2.default)(this.props.images, 4, null).map(function (row, i) {\n            return _react2.default.createElement(\n              'div',\n              { className: 'row', key: i },\n              row.map(function (item, i) {\n                return _react2.default.createElement(\n                  'div',\n                  { className: 'col-xs-3', key: i },\n                  item ? _react2.default.createElement(GalleryItem, { image: item,\n                    disabled: _this3.props.disabled,\n                    select: _this3.props.select,\n                    selection: _this3.props.selection }) : _react2.default.createElement('div', { className: 'blank-avatar' })\n                );\n              })\n            );\n          })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return Gallery;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component3) {\n  _inherits(_class, _React$Component3);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this4 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this4.select = function (image) {\n      _this4.setState({\n        selection: image\n      });\n    };\n\n    _this4.save = function () {\n      if (_this4.state.isLoading) {\n        return false;\n      }\n\n      _this4.setState({\n        'isLoading': true\n      });\n\n      _ajax2.default.post(_this4.props.user.api_url.avatar, {\n        avatar: 'galleries',\n        image: _this4.state.selection\n      }).then(function (response) {\n        _this4.setState({\n          'isLoading': false\n        });\n\n        _snackbar2.default.success(response.detail);\n        _this4.props.onComplete(response.avatar_hash, response.options);\n      }, function (rejection) {\n        if (rejection.status === 400) {\n          _snackbar2.default.error(rejection.detail);\n          _this4.setState({\n            'isLoading': false\n          });\n        } else {\n          _this4.props.showError(rejection);\n        }\n      });\n    };\n\n    _this4.state = {\n      'selection': null,\n      'isLoading': false\n    };\n    return _this4;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      var _this5 = this;\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-body modal-avatar-gallery' },\n          this.props.options.galleries.map(function (item, i) {\n            return _react2.default.createElement(Gallery, { name: item.name,\n              images: item.images,\n              selection: _this5.state.selection,\n              disabled: _this5.state.isLoading,\n              select: _this5.select,\n              key: i });\n          })\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-footer' },\n          _react2.default.createElement(\n            'div',\n            { className: 'row' },\n            _react2.default.createElement(\n              'div',\n              { className: 'col-md-6 col-md-offset-3' },\n              _react2.default.createElement(\n                _button2.default,\n                { onClick: this.save,\n                  loading: this.state.isLoading,\n                  disabled: !this.state.selection,\n                  className: 'btn-primary btn-block' },\n                this.state.selection ? gettext(\"Save choice\") : gettext(\"Select avatar\")\n              ),\n              _react2.default.createElement(\n                _button2.default,\n                { onClick: this.props.showIndex,\n                  disabled: this.state.isLoading,\n                  className: 'btn-default btn-block' },\n                gettext(\"Cancel\")\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../index\":135,\"../../services/ajax\":142,\"../../services/snackbar\":151,\"../../utils/batch\":155,\"../button\":57,\"react\":\"react\"}],65:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _loader = require('../loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.setGravatar = function () {\n      _this.callApi('gravatar');\n    };\n\n    _this.setGenerated = function () {\n      _this.callApi('generated');\n    };\n\n    _this.state = {\n      'isLoading': false\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'callApi',\n    value: function callApi(avatarType) {\n      var _this2 = this;\n\n      if (this.state.isLoading) {\n        return false;\n      }\n\n      this.setState({\n        'isLoading': true\n      });\n\n      _ajax2.default.post(this.props.user.api_url.avatar, {\n        avatar: avatarType\n      }).then(function (response) {\n        _this2.setState({\n          'isLoading': false\n        });\n\n        _snackbar2.default.success(response.detail);\n        _this2.props.onComplete(response.avatar_hash, response.options);\n      }, function (rejection) {\n        if (rejection.status === 400) {\n          _snackbar2.default.error(rejection.detail);\n          _this2.setState({\n            'isLoading': false\n          });\n        } else {\n          _this2.props.showError(rejection);\n        }\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getGravatarButton',\n\n    /* jshint ignore:end */\n\n    value: function getGravatarButton() {\n      if (this.props.options.gravatar) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _button2.default,\n          { onClick: this.setGravatar,\n            disabled: this.state.isLoading,\n            className: 'btn-default btn-block btn-avatar-gravatar' },\n          gettext(\"Download my Gravatar\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getCropButton',\n    value: function getCropButton() {\n      if (this.props.options.crop_org) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _button2.default,\n          { onClick: this.props.showCrop,\n            disabled: this.state.isLoading,\n            className: 'btn-default btn-block btn-avatar-crop' },\n          gettext(\"Re-crop uploaded image\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getUploadButton',\n    value: function getUploadButton() {\n      if (this.props.options.upload) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _button2.default,\n          { onClick: this.props.showUpload,\n            disabled: this.state.isLoading,\n            className: 'btn-default btn-block btn-avatar-upload' },\n          gettext(\"Upload new image\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getGalleryButton',\n    value: function getGalleryButton() {\n      if (this.props.options.galleries) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _button2.default,\n          { onClick: this.props.showGallery,\n            disabled: this.state.isLoading,\n            className: 'btn-default btn-block btn-avatar-gallery' },\n          gettext(\"Pick avatar from gallery\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getAvatarPreview',\n    value: function getAvatarPreview() {\n      /* jshint ignore:start */\n      var userPeview = {\n        id: this.props.user.id,\n        avatar_hash: this.props.options.avatar_hash\n      };\n      /* jshint ignore:end */\n\n      if (this.state.isLoading) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'avatar-preview preview-loading' },\n          _react2.default.createElement(_avatar2.default, { user: userPeview, size: '200' }),\n          _react2.default.createElement(_loader2.default, null)\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'div',\n            { className: 'avatar-preview' },\n            _react2.default.createElement(_avatar2.default, { user: userPeview, size: '200' })\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body modal-avatar-index' },\n        _react2.default.createElement(\n          'div',\n          { className: 'row' },\n          _react2.default.createElement(\n            'div',\n            { className: 'col-md-5' },\n            this.getAvatarPreview()\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'col-md-7' },\n            this.getGravatarButton(),\n            _react2.default.createElement(\n              _button2.default,\n              { onClick: this.setGenerated,\n                disabled: this.state.isLoading,\n                className: 'btn-default btn-block btn-avatar-generate' },\n              gettext(\"Generate my individual avatar\")\n            ),\n            this.getCropButton(),\n            this.getUploadButton(),\n            this.getGalleryButton()\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../services/ajax\":142,\"../../services/snackbar\":151,\"../avatar\":55,\"../button\":57,\"../loader\":72,\"react\":\"react\"}],66:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ChangeAvatarError = undefined;\nexports.select = select;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _index = require('./index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _crop = require('./crop');\n\nvar _crop2 = _interopRequireDefault(_crop);\n\nvar _upload = require('./upload');\n\nvar _upload2 = _interopRequireDefault(_upload);\n\nvar _gallery = require('./gallery');\n\nvar _gallery2 = _interopRequireDefault(_gallery);\n\nvar _modalLoader = require('../modal-loader');\n\nvar _modalLoader2 = _interopRequireDefault(_modalLoader);\n\nvar _users = require('../../reducers/users');\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar ChangeAvatarError = exports.ChangeAvatarError = function (_React$Component) {\n  _inherits(ChangeAvatarError, _React$Component);\n\n  function ChangeAvatarError() {\n    _classCallCheck(this, ChangeAvatarError);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(ChangeAvatarError).apply(this, arguments));\n  }\n\n  _createClass(ChangeAvatarError, [{\n    key: 'getErrorReason',\n    value: function getErrorReason() {\n      if (this.props.reason) {\n        /* jshint ignore:start */\n        return _react2.default.createElement('p', { dangerouslySetInnerHTML: { __html: this.props.reason } });\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body' },\n        _react2.default.createElement(\n          'div',\n          { className: 'message-icon' },\n          _react2.default.createElement(\n            'span',\n            { className: 'material-icon' },\n            'remove_circle_outline'\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'message-body' },\n          _react2.default.createElement(\n            'p',\n            { className: 'lead' },\n            this.props.message\n          ),\n          this.getErrorReason()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ChangeAvatarError;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component2) {\n  _inherits(_class, _React$Component2);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this2, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this2 = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this2), _this2.showError = function (error) {\n      _this2.setState({\n        error: error\n      });\n    }, _this2.showIndex = function () {\n      _this2.setState({\n        'component': _index2.default\n      });\n    }, _this2.showUpload = function () {\n      _this2.setState({\n        'component': _upload2.default\n      });\n    }, _this2.showCrop = function () {\n      _this2.setState({\n        'component': _crop2.default\n      });\n    }, _this2.showGallery = function () {\n      _this2.setState({\n        'component': _gallery2.default\n      });\n    }, _this2.completeFlow = function (avatarHash, options) {\n      _store2.default.dispatch((0, _users.updateAvatar)(_this2.props.user, avatarHash));\n\n      _this2.setState({\n        'component': _index2.default,\n        options: options\n      });\n    }, _temp), _possibleConstructorReturn(_this2, _ret);\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this3 = this;\n\n      _ajax2.default.get(this.props.user.api_url.avatar).then(function (options) {\n        _this3.setState({\n          'component': _index2.default,\n          'options': options,\n          'error': null\n        });\n      }, function (rejection) {\n        _this3.showError(rejection);\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getBody',\n\n    /* jshint ignore:end */\n\n    value: function getBody() {\n      if (this.state) {\n        if (this.state.error) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(ChangeAvatarError, { message: this.state.error.detail,\n            reason: this.state.error.reason });\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(this.state.component, { options: this.state.options,\n              user: this.props.user,\n              onComplete: this.completeFlow,\n              showError: this.showError,\n              showIndex: this.showIndex,\n              showCrop: this.showCrop,\n              showUpload: this.showUpload,\n              showGallery: this.showGallery });\n            /* jshint ignore:end */\n          }\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_modalLoader2.default, null);\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.state && this.state.error) {\n        return \"modal-dialog modal-message modal-change-avatar\";\n      } else {\n        return \"modal-dialog modal-change-avatar\";\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName(),\n          role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Change your avatar\")\n            )\n          ),\n          this.getBody()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\nfunction select(state) {\n  return {\n    'user': state.auth.user\n  };\n}\n\n},{\"../../reducers/users\":141,\"../../services/ajax\":142,\"../../services/store\":152,\"../modal-loader\":73,\"./crop\":63,\"./gallery\":64,\"./index\":65,\"./upload\":67,\"react\":\"react\"}],67:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _crop = require('./crop');\n\nvar _crop2 = _interopRequireDefault(_crop);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _fileSize = require('../../utils/file-size');\n\nvar _fileSize2 = _interopRequireDefault(_fileSize);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.pickFile = function () {\n      document.getElementById('avatar-hidden-upload').click();\n    };\n\n    _this.uploadFile = function () {\n      var image = document.getElementById('avatar-hidden-upload').files[0];\n\n      var validationError = _this.validateFile(image);\n      if (validationError) {\n        _snackbar2.default.error(validationError);\n        return;\n      }\n\n      _this.setState({\n        image: image,\n        'preview': URL.createObjectURL(image),\n        'progress': 0\n      });\n\n      var data = new FormData();\n      data.append('avatar', 'upload');\n      data.append('image', image);\n\n      _ajax2.default.upload(_this.props.user.api_url.avatar, data, function (progress) {\n        _this.setState({\n          progress: progress\n        });\n      }).then(function (data) {\n        _this.setState({\n          'options': data.options,\n          'uploaded': data.detail\n        });\n        _snackbar2.default.info(gettext(\"Your image has been uploaded and you may now crop it.\"));\n      }, function (rejection) {\n        if (rejection.status === 400) {\n          _snackbar2.default.error(rejection.detail);\n          _this.setState({\n            'isLoading': false,\n            'image': null,\n            'progress': 0\n          });\n        } else {\n          _this.props.showError(rejection);\n        }\n      });\n    };\n\n    _this.state = {\n      'image': null,\n      'preview': null,\n      'progress': 0,\n      'uploaded': null\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'validateFile',\n    value: function validateFile(image) {\n      if (image.size > this.props.options.upload.limit) {\n        return interpolate(gettext(\"Selected file is too big. (%(filesize)s)\"), {\n          'filesize': (0, _fileSize2.default)(image.size)\n        }, true);\n      }\n\n      var invalidTypeMsg = gettext(\"Selected file type is not supported.\");\n      if (this.props.options.upload.allowed_mime_types.indexOf(image.type) === -1) {\n        return invalidTypeMsg;\n      }\n\n      var extensionFound = false;\n      var loweredFilename = image.name.toLowerCase();\n      this.props.options.upload.allowed_extensions.map(function (extension) {\n        if (loweredFilename.substr(extension.length * -1) === extension) {\n          extensionFound = true;\n        }\n      });\n\n      if (!extensionFound) {\n        return invalidTypeMsg;\n      }\n\n      return false;\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getUploadRequirements',\n\n    /* jshint ignore:end */\n\n    value: function getUploadRequirements(options) {\n      var extensions = options.allowed_extensions.map(function (extension) {\n        return extension.substr(1);\n      });\n\n      return interpolate(gettext(\"%(files)s files smaller than %(limit)s\"), {\n        'files': extensions.join(', '),\n        'limit': (0, _fileSize2.default)(options.limit)\n      }, true);\n    }\n  }, {\n    key: 'getUploadButton',\n    value: function getUploadButton() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body modal-avatar-upload' },\n        _react2.default.createElement(\n          _button2.default,\n          { className: 'btn-pick-file',\n            onClick: this.pickFile },\n          _react2.default.createElement(\n            'div',\n            { className: 'material-icon' },\n            'input'\n          ),\n          gettext(\"Select file\")\n        ),\n        _react2.default.createElement(\n          'p',\n          { className: 'text-muted' },\n          this.getUploadRequirements(this.props.options.upload)\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getUploadProgressLabel',\n    value: function getUploadProgressLabel() {\n      return interpolate(gettext(\"%(progress)s % complete\"), {\n        'progress': this.state.progress\n      }, true);\n    }\n  }, {\n    key: 'getUploadProgress',\n    value: function getUploadProgress() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body modal-avatar-upload' },\n        _react2.default.createElement(\n          'div',\n          { className: 'upload-progress' },\n          _react2.default.createElement('img', { src: this.state.preview }),\n          _react2.default.createElement(\n            'div',\n            { className: 'progress' },\n            _react2.default.createElement(\n              'div',\n              { className: 'progress-bar', role: 'progressbar',\n                'aria-valuenow': '{this.state.progress}',\n                'aria-valuemin': '0', 'aria-valuemax': '100',\n                style: { width: this.state.progress + '%' } },\n              _react2.default.createElement(\n                'span',\n                { className: 'sr-only' },\n                this.getUploadProgressLabel()\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'renderUpload',\n    value: function renderUpload() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement('input', { type: 'file',\n          id: 'avatar-hidden-upload',\n          className: 'hidden-file-upload',\n          onChange: this.uploadFile }),\n        this.state.image ? this.getUploadProgress() : this.getUploadButton(),\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-footer' },\n          _react2.default.createElement(\n            'div',\n            { className: 'col-md-6 col-md-offset-3' },\n            _react2.default.createElement(\n              _button2.default,\n              { onClick: this.props.showIndex,\n                disabled: !!this.state.image,\n                className: 'btn-default btn-block' },\n              gettext(\"Cancel\")\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'renderCrop',\n    value: function renderCrop() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(_crop2.default, { options: this.state.options,\n        user: this.props.user,\n        upload: this.state.uploaded,\n        onComplete: this.props.onComplete,\n        showError: this.props.showError,\n        showIndex: this.props.showIndex });\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return this.state.uploaded ? this.renderCrop() : this.renderUpload();\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../services/ajax\":142,\"../../services/snackbar\":151,\"../../utils/file-size\":156,\"../button\":57,\"./crop\":63,\"react\":\"react\"}],68:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"getClassName\",\n    value: function getClassName() {\n      if (this.props.dropdown) {\n        return \"btn btn-default btn-aligned btn-icon btn-dropdown-toggle open hidden-md hidden-lg\";\n      } else {\n        return \"btn btn-default btn-aligned btn-icon btn-dropdown-toggle hidden-md hidden-lg\";\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"button\",\n        { className: this.getClassName(),\n          type: \"button\",\n          onClick: this.props.toggleNav,\n          \"aria-haspopup\": \"true\",\n          \"aria-expanded\": this.props.dropdown ? 'true' : 'false' },\n        _react2.default.createElement(\n          \"i\",\n          { className: \"material-icon\" },\n          \"menu\"\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],69:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'isValidated',\n    value: function isValidated() {\n      return typeof this.props.validation !== \"undefined\";\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      var className = 'form-group';\n      if (this.isValidated()) {\n        className += ' has-feedback';\n        if (this.props.validation === null) {\n          className += ' has-success';\n        } else {\n          className += ' has-error';\n        }\n      }\n      return className;\n    }\n  }, {\n    key: 'getFeedback',\n    value: function getFeedback() {\n      var _this2 = this;\n\n      if (this.props.validation) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'help-block errors' },\n          this.props.validation.map(function (error, i) {\n            return _react2.default.createElement(\n              'p',\n              { key: _this2.props.for + 'FeedbackItem' + i },\n              error\n            );\n          })\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getFeedbackIcon',\n    value: function getFeedbackIcon() {\n      if (this.isValidated()) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'span',\n          { className: 'material-icon form-control-feedback',\n            'aria-hidden': 'true', key: this.props.for + 'FeedbackIcon' },\n          this.props.validation ? 'clear' : 'check'\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getFeedbackDescription',\n    value: function getFeedbackDescription() {\n      if (this.isValidated()) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'span',\n          { id: this.props.for + '_status', className: 'sr-only' },\n          this.props.validation ? gettext('(error)') : gettext('(success)')\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getHelpText',\n    value: function getHelpText() {\n      if (this.props.helpText) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'p',\n          { className: 'help-block' },\n          this.props.helpText\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          'label',\n          { className: 'control-label ' + (this.props.labelClass || ''),\n            htmlFor: this.props.for || '' },\n          this.props.label + ':'\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: this.props.controlClass || '' },\n          this.props.children,\n          this.getFeedbackIcon(),\n          this.getFeedbackDescription(),\n          this.getFeedback(),\n          this.getHelpText(),\n          this.props.extra || null\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],70:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _validators = require('../utils/validators');\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar validateRequired = (0, _validators.required)();\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.bindInput = function (name) {\n      return function (event) {\n        var newState = _defineProperty({}, name, event.target.value);\n\n        var formErrors = _this.state.errors || {};\n        formErrors[name] = _this.validateField(name, newState[name]);\n        newState.errors = formErrors;\n\n        _this.setState(newState);\n      };\n    }, _this.handleSubmit = function (event) {\n      // we don't reload page on submissions\n      event.preventDefault();\n      if (_this.state.isLoading) {\n        return;\n      }\n\n      if (_this.clean()) {\n        _this.setState({ isLoading: true });\n        var promise = _this.send();\n\n        if (promise) {\n          promise.then(function (success) {\n            _this.setState({ isLoading: false });\n            _this.handleSuccess(success);\n          }, function (rejection) {\n            _this.setState({ isLoading: false });\n            _this.handleError(rejection);\n          });\n        } else {\n          _this.setState({ isLoading: false });\n        }\n      }\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(_class, [{\n    key: 'validate',\n    value: function validate() {\n      var errors = {};\n      if (!this.state.validators) {\n        return errors;\n      }\n\n      var validators = {\n        required: this.state.validators.required || this.state.validators,\n        optional: this.state.validators.optional || {}\n      };\n\n      var validatedFields = [];\n\n      // add required fields to validation\n      for (var name in validators.required) {\n        if (validators.required.hasOwnProperty(name) && validators.required[name]) {\n          validatedFields.push(name);\n        }\n      }\n\n      // add optional fields to validation\n      for (var name in validators.optional) {\n        if (validators.optional.hasOwnProperty(name) && validators.optional[name]) {\n          validatedFields.push(name);\n        }\n      }\n\n      // validate fields values\n      for (var i in validatedFields) {\n        var name = validatedFields[i];\n        var fieldErrors = this.validateField(name, this.state[name]);\n\n        if (fieldErrors === null) {\n          errors[name] = null;\n        } else if (fieldErrors) {\n          errors[name] = fieldErrors;\n        }\n      }\n\n      return errors;\n    }\n  }, {\n    key: 'isValid',\n    value: function isValid() {\n      var errors = this.validate();\n      for (var field in errors) {\n        if (errors.hasOwnProperty(field)) {\n          if (errors[field] !== null) {\n            return false;\n          }\n        }\n      }\n\n      return true;\n    }\n  }, {\n    key: 'validateField',\n    value: function validateField(name, value) {\n      var errors = [];\n      if (!this.state.validators) {\n        return errors;\n      }\n\n      var validators = {\n        required: (this.state.validators.required || this.state.validators)[name],\n        optional: (this.state.validators.optional || {})[name]\n      };\n\n      var requiredError = validateRequired(value) || false;\n\n      if (validators.required) {\n        if (requiredError) {\n          errors = [requiredError];\n        } else {\n          for (var i in validators.required) {\n            var validationError = validators.required[i](value);\n            if (validationError) {\n              errors.push(validationError);\n            }\n          }\n        }\n\n        return errors.length ? errors : null;\n      } else if (requiredError === false && validators.optional) {\n        for (var i in validators.optional) {\n          var validationError = validators.optional[i](value);\n          if (validationError) {\n            errors.push(validationError);\n          }\n        }\n\n        return errors.length ? errors : null;\n      }\n\n      return false; // false === field wasn't validated\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'clean',\n    value: function clean() {\n      return true;\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return null;\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(success) {\n      return;\n    }\n  }, {\n    key: 'handleError',\n\n    /* jshint ignore:end */\n    value: function handleError(rejection) {\n      _snackbar2.default.apiError(rejection);\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../services/snackbar\":151,\"../utils/validators\":162,\"react\":\"react\"}],71:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'isActive',\n    value: function isActive() {\n      if (this.props.isControlled) {\n        return this.props.isActive;\n      } else {\n        if (this.props.path) {\n          return document.location.pathname.indexOf(this.props.path) === 0;\n        } else {\n          return false;\n        }\n      }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.isActive()) {\n        return (this.props.className || '') + ' ' + (this.props.activeClassName || 'active');\n      } else {\n        return this.props.className || '';\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'li',\n        { className: this.getClassName() },\n        this.props.children\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],72:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"div\",\n        { className: this.props.className || \"loader\" },\n        _react2.default.createElement(\"div\", { className: \"loader-spinning-wheel\" })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],73:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _loader = require('./loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body modal-loader' },\n        _react2.default.createElement(_loader2.default, null)\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"./loader\":72,\"react\":\"react\"}],74:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _panelMessage = require('./panel-message');\n\nvar _panelMessage2 = _interopRequireDefault(_panelMessage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\nvar _class = function (_PanelMessage) {\n  _inherits(_class, _PanelMessage);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getHelpText',\n    value: function getHelpText() {\n      if (this.props.helpText) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'p',\n          { className: 'help-block' },\n          this.props.helpText\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body' },\n        _react2.default.createElement(\n          'div',\n          { className: 'message-icon' },\n          _react2.default.createElement(\n            'span',\n            { className: 'material-icon' },\n            this.props.icon || 'info_outline'\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'message-body' },\n          _react2.default.createElement(\n            'p',\n            { className: 'lead' },\n            this.props.message\n          ),\n          this.getHelpText()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_panelMessage2.default);\n\nexports.default = _class;\n\n},{\"./panel-message\":86,\"react\":\"react\"}],75:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _panelLoader = require('../../panel-loader');\n\nvar _panelLoader2 = _interopRequireDefault(_panelLoader);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'panel panel-default panel-form' },\n        _react2.default.createElement(\n          'div',\n          { className: 'panel-heading' },\n          _react2.default.createElement(\n            'h3',\n            { className: 'panel-title' },\n            gettext(\"Change username\")\n          )\n        ),\n        _react2.default.createElement(_panelLoader2.default, null)\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../panel-loader\":85,\"react\":\"react\"}],76:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _panelMessage = require('../../panel-message');\n\nvar _panelMessage2 = _interopRequireDefault(_panelMessage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getHelpText',\n    value: function getHelpText() {\n      if (this.props.options.next_on) {\n        return interpolate(gettext(\"You will be able to change your username %(next_change)s.\"), { 'next_change': this.props.options.next_on.fromNow() }, true);\n      } else {\n        return gettext(\"You have used up available name changes.\");\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'panel panel-default panel-form' },\n        _react2.default.createElement(\n          'div',\n          { className: 'panel-heading' },\n          _react2.default.createElement(\n            'h3',\n            { className: 'panel-title' },\n            gettext(\"Change username\")\n          )\n        ),\n        _react2.default.createElement(_panelMessage2.default, { message: gettext(\"You can't change your username at the moment.\"),\n          helpText: this.getHelpText() })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../panel-message\":86,\"react\":\"react\"}],77:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _ajax = require('../../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../../../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.state = {\n      username: '',\n\n      validators: {\n        username: [validators.usernameContent(), validators.usernameMinLength({\n          username_length_min: props.options.length_min\n        }), validators.usernameMaxLength({\n          username_length_max: props.options.length_max\n        })]\n      },\n\n      isLoading: false\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'getHelpText',\n    value: function getHelpText() {\n      var phrases = [];\n\n      if (this.props.options.changes_left > 0) {\n        var message = ngettext(\"You can change your username %(changes_left)s more time.\", \"You can change your username %(changes_left)s more times.\", this.props.options.changes_left);\n\n        phrases.push(interpolate(message, {\n          'changes_left': this.props.options.changes_left\n        }, true));\n      }\n\n      if (this.props.user.acl.name_changes_expire > 0) {\n        var message = ngettext(\"Used changes redeem after %(name_changes_expire)s day.\", \"Used changes redeem after %(name_changes_expire)s days.\", this.props.user.acl.name_changes_expire);\n\n        phrases.push(interpolate(message, {\n          'name_changes_expire': this.props.user.acl.name_changes_expire\n        }, true));\n      }\n\n      return phrases.length ? phrases.join(' ') : null;\n    }\n  }, {\n    key: 'clean',\n    value: function clean() {\n      var errors = this.validate();\n      if (errors.username) {\n        _snackbar2.default.error(errors.username[0]);\n        return false;\n      }if (this.state.username.trim() === this.props.user.username) {\n        _snackbar2.default.info(gettext(\"Your new username is same as current one.\"));\n        return false;\n      } else {\n        return true;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.user.api_url.username, {\n        'username': this.state.username\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(success) {\n      this.setState({\n        'username': ''\n      });\n\n      this.props.complete(success.username, success.slug, success.options);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      _snackbar2.default.apiError(rejection);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n        _react2.default.createElement(\n          'div',\n          { className: 'panel panel-default panel-form' },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading' },\n            _react2.default.createElement(\n              'h3',\n              { className: 'panel-title' },\n              gettext(\"Change username\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-body' },\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"New username\"), 'for': 'id_username',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8',\n                helpText: this.getHelpText() },\n              _react2.default.createElement('input', { type: 'text', id: 'id_username', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('username'),\n                value: this.state.username })\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-footer' },\n            _react2.default.createElement(\n              'div',\n              { className: 'row' },\n              _react2.default.createElement(\n                'div',\n                { className: 'col-sm-8 col-sm-offset-4' },\n                _react2.default.createElement(\n                  _button2.default,\n                  { className: 'btn-primary', loading: this.state.isLoading },\n                  gettext(\"Change username\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../../../services/ajax\":142,\"../../../services/snackbar\":151,\"../../../utils/validators\":162,\"../../button\":57,\"../../form\":70,\"../../form-group\":69,\"react\":\"react\"}],78:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _formLoading = require('./form-loading');\n\nvar _formLoading2 = _interopRequireDefault(_formLoading);\n\nvar _formLocked = require('./form-locked');\n\nvar _formLocked2 = _interopRequireDefault(_formLocked);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _usernameHistory = require('../../username-history');\n\nvar _usernameHistory2 = _interopRequireDefault(_usernameHistory);\n\nvar _index = require('../../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _usernameHistory3 = require('../../../reducers/username-history');\n\nvar _users = require('../../../reducers/users');\n\nvar _ajax = require('../../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _pageTitle = require('../../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nvar _snackbar = require('../../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.onComplete = function (username, slug, options) {\n      _this.setState({\n        options: options\n      });\n\n      _store2.default.dispatch((0, _usernameHistory3.addNameChange)({ username: username, slug: slug }, _this.props.user, _this.props.user));\n      _store2.default.dispatch((0, _users.updateUsername)(_this.props.user, username, slug));\n\n      _snackbar2.default.success(gettext(\"Your username has been changed successfully.\"));\n    };\n\n    _this.state = {\n      isLoaded: false,\n      options: null\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this2 = this;\n\n      _pageTitle2.default.set({\n        title: gettext(\"Change username\"),\n        parent: gettext(\"Change your options\")\n      });\n\n      Promise.all([_ajax2.default.get(this.props.user.api_url.username), _ajax2.default.get(_index2.default.get('USERNAME_CHANGES_API'), { user: this.props.user.id })]).then(function (data) {\n        _store2.default.dispatch((0, _usernameHistory3.dehydrate)(data[1].results));\n\n        _this2.setState({\n          isLoaded: true,\n          options: {\n            changes_left: data[0].changes_left,\n            length_min: data[0].length_min,\n            length_max: data[0].length_max,\n            next_on: data[0].next_on ? (0, _moment2.default)(data[0].next_on) : null\n          }\n        });\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getChangeForm',\n\n    /* jshint ignore:end */\n\n    value: function getChangeForm() {\n      if (this.state.isLoaded) {\n        if (this.state.options.changes_left > 0) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_form2.default, { user: this.props.user,\n            options: this.state.options,\n            complete: this.onComplete });\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(_formLocked2.default, { options: this.state.options });\n            /* jshint ignore:end */\n          }\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_formLoading2.default, null);\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        this.getChangeForm(),\n        _react2.default.createElement(_usernameHistory2.default, { isLoaded: this.state.isLoaded,\n          changes: this.props['username-history'] })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../../index\":135,\"../../../reducers/username-history\":140,\"../../../reducers/users\":141,\"../../../services/ajax\":142,\"../../../services/page-title\":149,\"../../../services/snackbar\":151,\"../../../services/store\":152,\"../../username-history\":118,\"./form\":77,\"./form-loading\":75,\"./form-locked\":76,\"moment\":\"moment\",\"react\":\"react\"}],79:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _select = require('../select');\n\nvar _select2 = _interopRequireDefault(_select);\n\nvar _yesNoSwitch = require('../yes-no-switch');\n\nvar _yesNoSwitch2 = _interopRequireDefault(_yesNoSwitch);\n\nvar _auth = require('../../reducers/auth');\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _pageTitle = require('../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n\n      'is_hiding_presence': props.user.is_hiding_presence,\n      'limits_private_thread_invites_to': props.user.limits_private_thread_invites_to,\n      'subscribe_to_started_threads': props.user.subscribe_to_started_threads,\n      'subscribe_to_replied_threads': props.user.subscribe_to_replied_threads,\n\n      'errors': {}\n    };\n\n    _this.privateThreadInvitesChoices = [{\n      'value': 0,\n      'icon': 'help_outline',\n      'label': gettext('Everybody')\n    }, {\n      'value': 1,\n      'icon': 'done_all',\n      'label': gettext('Users I follow')\n    }, {\n      'value': 2,\n      'icon': 'highlight_off',\n      'label': gettext('Nobody')\n    }];\n\n    _this.subscribeToChoices = [{\n      'value': 0,\n      'icon': 'bookmark_border',\n      'label': gettext('No')\n    }, {\n      'value': 1,\n      'icon': 'bookmark',\n      'label': gettext('Bookmark')\n    }, {\n      'value': 2,\n      'icon': 'mail',\n      'label': gettext('Bookmark with e-mail notification')\n    }];\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.user.api_url.options, {\n        is_hiding_presence: this.state.is_hiding_presence,\n        limits_private_thread_invites_to: this.state.limits_private_thread_invites_to,\n        subscribe_to_started_threads: this.state.subscribe_to_started_threads,\n        subscribe_to_replied_threads: this.state.subscribe_to_replied_threads\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess() {\n      _store2.default.dispatch((0, _auth.patchUser)({\n        is_hiding_presence: this.state.is_hiding_presence,\n        limits_private_thread_invites_to: this.state.limits_private_thread_invites_to,\n        subscribe_to_started_threads: this.state.subscribe_to_started_threads,\n        subscribe_to_replied_threads: this.state.subscribe_to_replied_threads\n      }));\n      _snackbar2.default.success(gettext(\"Your forum options have been changed.\"));\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        _snackbar2.default.error(gettext(\"Please reload page and try again.\"));\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: gettext(\"Forum options\"),\n        parent: gettext(\"Change your options\")\n      });\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n        _react2.default.createElement(\n          'div',\n          { className: 'panel panel-default panel-form' },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading' },\n            _react2.default.createElement(\n              'h3',\n              { className: 'panel-title' },\n              gettext(\"Change forum options\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-body' },\n            _react2.default.createElement(\n              'fieldset',\n              null,\n              _react2.default.createElement(\n                'legend',\n                null,\n                gettext(\"Privacy settings\")\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Hide my presence\"),\n                  helpText: gettext(\"If you hide your presence, only members with permission to see hidden users will see when you are online.\"),\n                  'for': 'id_is_hiding_presence',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n                _react2.default.createElement(_yesNoSwitch2.default, { id: 'id_is_hiding_presence',\n                  disabled: this.state.isLoading,\n                  iconOn: 'visibility_off',\n                  iconOff: 'visibility',\n                  labelOn: gettext(\"Hide my presence from other users\"),\n                  labelOff: gettext(\"Show my presence to other users\"),\n                  onChange: this.bindInput('is_hiding_presence'),\n                  value: this.state.is_hiding_presence })\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Private thread invitations\"),\n                  'for': 'id_limits_private_thread_invites_to',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n                _react2.default.createElement(_select2.default, { id: 'id_limits_private_thread_invites_to',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('limits_private_thread_invites_to'),\n                  value: this.state.limits_private_thread_invites_to,\n                  choices: this.privateThreadInvitesChoices })\n              )\n            ),\n            _react2.default.createElement(\n              'fieldset',\n              null,\n              _react2.default.createElement(\n                'legend',\n                null,\n                gettext(\"Automatic subscriptions\")\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Threads I start\"),\n                  'for': 'id_subscribe_to_started_threads',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n                _react2.default.createElement(_select2.default, { id: 'id_subscribe_to_started_threads',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('subscribe_to_started_threads'),\n                  value: this.state.subscribe_to_started_threads,\n                  choices: this.subscribeToChoices })\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Threads I reply to\"),\n                  'for': 'id_subscribe_to_replied_threads',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n                _react2.default.createElement(_select2.default, { id: 'id_subscribe_to_replied_threads',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('subscribe_to_replied_threads'),\n                  value: this.state.subscribe_to_replied_threads,\n                  choices: this.subscribeToChoices })\n              )\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-footer' },\n            _react2.default.createElement(\n              'div',\n              { className: 'row' },\n              _react2.default.createElement(\n                'div',\n                { className: 'col-sm-8 col-sm-offset-4' },\n                _react2.default.createElement(\n                  _button2.default,\n                  { className: 'btn-primary', loading: this.state.isLoading },\n                  gettext(\"Save changes\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../../reducers/auth\":136,\"../../services/ajax\":142,\"../../services/page-title\":149,\"../../services/snackbar\":151,\"../../services/store\":152,\"../button\":57,\"../form\":70,\"../form-group\":69,\"../select\":106,\"../yes-no-switch\":134,\"react\":\"react\"}],80:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactNav = exports.SideNav = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouter = require('react-router');\n\nvar _li = require('../li');\n\nvar _li2 = _interopRequireDefault(_li);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n//jshint ignore:line\n\n//jshint ignore:line\n\nvar SideNav = exports.SideNav = function (_React$Component) {\n  _inherits(SideNav, _React$Component);\n\n  function SideNav() {\n    _classCallCheck(this, SideNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(SideNav).apply(this, arguments));\n  }\n\n  _createClass(SideNav, [{\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'div',\n        { className: 'list-group nav-side' },\n        this.props.options.map(function (option) {\n          return _react2.default.createElement(\n            _reactRouter.Link,\n            { to: _this2.props.baseUrl + option.component + '/',\n              className: 'list-group-item',\n              activeClassName: 'active',\n              key: option.component },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              option.icon\n            ),\n            option.name\n          );\n        })\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return SideNav;\n}(_react2.default.Component);\n\nvar CompactNav = exports.CompactNav = function (_React$Component2) {\n  _inherits(CompactNav, _React$Component2);\n\n  function CompactNav() {\n    _classCallCheck(this, CompactNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));\n  }\n\n  _createClass(CompactNav, [{\n    key: 'render',\n    value: function render() {\n      var _this4 = this;\n\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu', role: 'menu' },\n        this.props.options.map(function (option) {\n          return _react2.default.createElement(\n            _li2.default,\n            { path: _this4.props.baseUrl + option.component + '/',\n              key: option.component },\n            _react2.default.createElement(\n              _reactRouter.Link,\n              { to: _this4.props.baseUrl + option.component + '/',\n                onClick: _this4.props.hideNav },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                option.icon\n              ),\n              option.name\n            )\n          );\n        })\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return CompactNav;\n}(_react2.default.Component);\n\n},{\"../../index\":135,\"../li\":71,\"react\":\"react\",\"react-router\":\"react-router\"}],81:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.select = select;\nexports.paths = paths;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRedux = require('react-redux');\n\nvar _dropdownToggle = require('../dropdown-toggle');\n\nvar _dropdownToggle2 = _interopRequireDefault(_dropdownToggle);\n\nvar _navs = require('./navs');\n\nvar _forumOptions = require('./forum-options');\n\nvar _forumOptions2 = _interopRequireDefault(_forumOptions);\n\nvar _root = require('./change-username/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _root3 = require('./sign-in-credentials/root');\n\nvar _root4 = _interopRequireDefault(_root3);\n\nvar _withDropdown = require('../with-dropdown');\n\nvar _withDropdown2 = _interopRequireDefault(_withDropdown);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_WithDropdown) {\n  _inherits(_class, _WithDropdown);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page page-options' },\n        _react2.default.createElement(\n          'div',\n          { className: 'page-header' },\n          _react2.default.createElement(\n            'div',\n            { className: 'container' },\n            _react2.default.createElement(\n              'h1',\n              { className: 'pull-left' },\n              gettext(\"Change your options\")\n            ),\n            _react2.default.createElement(_dropdownToggle2.default, { toggleNav: this.toggleNav,\n              dropdown: this.state.dropdown })\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: this.getCompactNavClassName() },\n          _react2.default.createElement(_navs.CompactNav, { options: _index2.default.get('USER_OPTIONS'),\n            baseUrl: _index2.default.get('USERCP_URL'),\n            hideNav: this.hideNav })\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'row' },\n            _react2.default.createElement(\n              'div',\n              { className: 'col-md-3 hidden-xs hidden-sm' },\n              _react2.default.createElement(_navs.SideNav, { options: _index2.default.get('USER_OPTIONS'),\n                baseUrl: _index2.default.get('USERCP_URL') })\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'col-md-9' },\n              this.props.children\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_withDropdown2.default);\n\nexports.default = _class;\nfunction select(store) {\n  return {\n    'tick': store.tick.tick,\n    'user': store.auth.user,\n    'username-history': store['username-history']\n  };\n}\n\nfunction paths() {\n  return [{\n    path: _index2.default.get('USERCP_URL') + 'forum-options/',\n    component: (0, _reactRedux.connect)(select)(_forumOptions2.default)\n  }, {\n    path: _index2.default.get('USERCP_URL') + 'change-username/',\n    component: (0, _reactRedux.connect)(select)(_root2.default)\n  }, {\n    path: _index2.default.get('USERCP_URL') + 'sign-in-credentials/',\n    component: (0, _reactRedux.connect)(select)(_root4.default)\n  }];\n}\n\n},{\"../../index\":135,\"../dropdown-toggle\":68,\"../with-dropdown\":133,\"./change-username/root\":78,\"./forum-options\":79,\"./navs\":80,\"./sign-in-credentials/root\":84,\"react\":\"react\",\"react-redux\":\"react-redux\"}],82:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _ajax = require('../../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../../../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.state = {\n      new_email: '',\n      password: '',\n\n      validators: {\n        new_email: [validators.email()],\n        password: []\n      },\n\n      isLoading: false\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'clean',\n    value: function clean() {\n      var errors = this.validate();\n      var lengths = [this.state.new_email.trim().length, this.state.password.trim().length];\n\n      if (lengths.indexOf(0) !== -1) {\n        _snackbar2.default.error(gettext(\"Fill out all fields.\"));\n        return false;\n      }\n\n      if (errors.new_email) {\n        _snackbar2.default.error(errors.new_email[0]);\n        return false;\n      }\n\n      return true;\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.user.api_url.change_email, {\n        new_email: this.state.new_email,\n        password: this.state.password\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(response) {\n      this.setState({\n        new_email: '',\n        password: ''\n      });\n\n      _snackbar2.default.success(response.detail);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        if (rejection.new_email) {\n          _snackbar2.default.error(rejection.new_email);\n        } else {\n          _snackbar2.default.error(rejection.password);\n        }\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n        _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),\n        _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),\n        _react2.default.createElement(\n          'div',\n          { className: 'panel panel-default panel-form' },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading' },\n            _react2.default.createElement(\n              'h3',\n              { className: 'panel-title' },\n              gettext(\"Change e-mail address\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-body' },\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"New e-mail\"), 'for': 'id_new_email',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'text', id: 'id_new_email', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('new_email'),\n                value: this.state.new_email })\n            ),\n            _react2.default.createElement('hr', null),\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"Your current password\"), 'for': 'id_password',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('password'),\n                value: this.state.password })\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-footer' },\n            _react2.default.createElement(\n              'div',\n              { className: 'row' },\n              _react2.default.createElement(\n                'div',\n                { className: 'col-sm-8 col-sm-offset-4' },\n                _react2.default.createElement(\n                  _button2.default,\n                  { className: 'btn-primary', loading: this.state.isLoading },\n                  gettext(\"Change e-mail\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../../../services/ajax\":142,\"../../../services/snackbar\":151,\"../../../utils/validators\":162,\"../../button\":57,\"../../form\":70,\"../../form-group\":69,\"react\":\"react\"}],83:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _index = require('../../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../../../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.state = {\n      new_password: '',\n      repeat_password: '',\n      password: '',\n\n      validators: {\n        new_password: [validators.passwordMinLength(_index2.default.get('SETTINGS'))],\n        repeat_password: [],\n        password: []\n      },\n\n      isLoading: false\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'clean',\n    value: function clean() {\n      var errors = this.validate();\n      var lengths = [this.state.new_password.trim().length, this.state.repeat_password.trim().length, this.state.password.trim().length];\n\n      if (lengths.indexOf(0) !== -1) {\n        _snackbar2.default.error(gettext(\"Fill out all fields.\"));\n        return false;\n      }\n\n      if (errors.new_password) {\n        _snackbar2.default.error(errors.new_password[0]);\n        return false;\n      }\n\n      if (this.state.new_password.trim() !== this.state.repeat_password.trim()) {\n        _snackbar2.default.error(gettext(\"New passwords are different.\"));\n        return false;\n      }\n\n      return true;\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.user.api_url.change_password, {\n        new_password: this.state.new_password,\n        password: this.state.password\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(response) {\n      this.setState({\n        new_password: '',\n        repeat_password: '',\n        password: ''\n      });\n\n      _snackbar2.default.success(response.detail);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        if (rejection.new_password) {\n          _snackbar2.default.error(rejection.new_password);\n        } else {\n          _snackbar2.default.error(rejection.password);\n        }\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n        _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),\n        _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),\n        _react2.default.createElement(\n          'div',\n          { className: 'panel panel-default panel-form' },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading' },\n            _react2.default.createElement(\n              'h3',\n              { className: 'panel-title' },\n              gettext(\"Change password\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-body' },\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"New password\"), 'for': 'id_new_password',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'password', id: 'id_new_password', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('new_password'),\n                value: this.state.new_password })\n            ),\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"Repeat password\"), 'for': 'id_repeat_password',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'password', id: 'id_repeat_password', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('repeat_password'),\n                value: this.state.repeat_password })\n            ),\n            _react2.default.createElement('hr', null),\n            _react2.default.createElement(\n              _formGroup2.default,\n              { label: gettext(\"Your current password\"), 'for': 'id_password',\n                labelClass: 'col-sm-4', controlClass: 'col-sm-8' },\n              _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('password'),\n                value: this.state.password })\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-footer' },\n            _react2.default.createElement(\n              'div',\n              { className: 'row' },\n              _react2.default.createElement(\n                'div',\n                { className: 'col-sm-8 col-sm-offset-4' },\n                _react2.default.createElement(\n                  _button2.default,\n                  { className: 'btn-primary', loading: this.state.isLoading },\n                  gettext(\"Change password\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../../../index\":135,\"../../../services/ajax\":142,\"../../../services/snackbar\":151,\"../../../utils/validators\":162,\"../../button\":57,\"../../form\":70,\"../../form-group\":69,\"react\":\"react\"}],84:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _changeEmail = require('./change-email');\n\nvar _changeEmail2 = _interopRequireDefault(_changeEmail);\n\nvar _changePassword = require('./change-password');\n\nvar _changePassword2 = _interopRequireDefault(_changePassword);\n\nvar _index = require('../../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _pageTitle = require('../../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: gettext(\"Change email or password\"),\n        parent: gettext(\"Change your options\")\n      });\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement(_changeEmail2.default, { user: this.props.user }),\n        _react2.default.createElement(_changePassword2.default, { user: this.props.user }),\n        _react2.default.createElement(\n          'p',\n          { className: 'message-line' },\n          _react2.default.createElement(\n            'span',\n            { className: 'material-icon' },\n            'warning'\n          ),\n          _react2.default.createElement(\n            'a',\n            { href: _index2.default.get('FORGOTTEN_PASSWORD_URL') },\n            gettext(\"Change forgotten password\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../../index\":135,\"../../../services/page-title\":149,\"./change-email\":82,\"./change-password\":83,\"react\":\"react\"}],85:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _loader = require('./loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'panel-body panel-body-loading' },\n        _react2.default.createElement(_loader2.default, { className: 'loader loader-spaced' })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"./loader\":72,\"react\":\"react\"}],86:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"getHelpText\",\n    value: function getHelpText() {\n      if (this.props.helpText) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          \"p\",\n          { className: \"help-block\" },\n          this.props.helpText\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"div\",\n        { className: \"panel-body panel-message-body\" },\n        _react2.default.createElement(\n          \"div\",\n          { className: \"message-icon\" },\n          _react2.default.createElement(\n            \"span\",\n            { className: \"material-icon\" },\n            this.props.icon || 'info_outline'\n          )\n        ),\n        _react2.default.createElement(\n          \"div\",\n          { className: \"message-body\" },\n          _react2.default.createElement(\n            \"p\",\n            { className: \"lead\" },\n            this.props.message\n          ),\n          this.getHelpText()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],87:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.LABELS = exports.STYLES = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _zxcvbn = require('../services/zxcvbn');\n\nvar _zxcvbn2 = _interopRequireDefault(_zxcvbn);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar STYLES = exports.STYLES = ['progress-bar-danger', 'progress-bar-warning', 'progress-bar-warning', 'progress-bar-primary', 'progress-bar-success'];\n\nvar LABELS = exports.LABELS = [gettext(\"Entered password is very weak.\"), gettext(\"Entered password is weak.\"), gettext(\"Entered password is average.\"), gettext(\"Entered password is strong.\"), gettext(\"Entered password is very strong.\")];\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this._score = 0;\n    _this._password = null;\n    _this._inputs = [];\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'getScore',\n    value: function getScore(password, inputs) {\n      var _this2 = this;\n\n      var cacheStale = false;\n\n      if (password.trim() !== this._password) {\n        cacheStale = true;\n      }\n\n      if (inputs.length !== this._inputs.length) {\n        cacheStale = true;\n      } else {\n        inputs.map(function (value, i) {\n          if (value.trim() !== _this2._inputs[i]) {\n            cacheStale = true;\n          }\n        });\n      }\n\n      if (cacheStale) {\n        this._score = _zxcvbn2.default.scorePassword(password, inputs);\n        this._password = password.trim();\n        this._inputs = inputs.map(function (value) {\n          return value.trim();\n        });\n      }\n\n      return this._score;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      var score = this.getScore(this.props.password, this.props.inputs);\n\n      return _react2.default.createElement(\n        'div',\n        { className: 'help-block password-strength' },\n        _react2.default.createElement(\n          'div',\n          { className: 'progress' },\n          _react2.default.createElement(\n            'div',\n            { className: \"progress-bar \" + STYLES[score],\n              style: { width: 20 + 20 * score + '%' },\n              role: 'progress-bar',\n              'aria-valuenow': score,\n              'aria-valuemin': '0',\n              'aria-valuemax': '4' },\n            _react2.default.createElement(\n              'span',\n              { className: 'sr-only' },\n              LABELS[score]\n            )\n          )\n        ),\n        _react2.default.createElement(\n          'p',\n          { className: 'text-small' },\n          LABELS[score]\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../services/zxcvbn\":153,\"react\":\"react\"}],88:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _dropdownToggle = require('../dropdown-toggle');\n\nvar _dropdownToggle2 = _interopRequireDefault(_dropdownToggle);\n\nvar _followButton = require('./follow-button');\n\nvar _followButton2 = _interopRequireDefault(_followButton);\n\nvar _nav = require('./moderation/nav');\n\nvar _nav2 = _interopRequireDefault(_nav);\n\nvar _userStatus = require('../user-status');\n\nvar _userStatus2 = _interopRequireDefault(_userStatus);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getUserStatus',\n    value: function getUserStatus() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'li',\n        { className: 'user-status-display' },\n        _react2.default.createElement(\n          _userStatus2.default,\n          { user: this.props.profile, status: this.props.profile.status },\n          _react2.default.createElement(_userStatus.StatusIcon, { user: this.props.profile,\n            status: this.props.profile.status }),\n          _react2.default.createElement(_userStatus.StatusLabel, { user: this.props.profile,\n            status: this.props.profile.status,\n            className: 'status-label' })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getUserRank',\n    value: function getUserRank() {\n      if (this.props.profile.rank.is_tab) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'li',\n          { className: 'user-rank' },\n          _react2.default.createElement(\n            'a',\n            { href: this.props.profile.rank.absolute_url, className: 'item-title' },\n            this.props.profile.rank.name\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'li',\n            { className: 'user-rank' },\n            _react2.default.createElement(\n              'span',\n              { className: 'item-title' },\n              this.props.profile.rank.name\n            )\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getUserTitle',\n    value: function getUserTitle() {\n      if (this.props.profile.title) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'li',\n          { className: 'user-title' },\n          this.props.profile.title\n        );\n        /* jshint ignore:end */\n      } else if (this.props.profile.rank.title) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'li',\n            { className: 'user-title' },\n            this.props.profile.rank.title\n          );\n          /* jshint ignore:end */\n        } else {\n            return null;\n          }\n    }\n  }, {\n    key: 'getJoinedOn',\n    value: function getJoinedOn() {\n      /* jshint ignore:start */\n      var title = interpolate(gettext(\"Joined on %(joined_on)s\"), {\n        'joined_on': this.props.profile.joined_on.format('LL, LT')\n      }, true);\n\n      var age = interpolate(gettext(\"Joined %(joined_on)s\"), {\n        'joined_on': this.props.profile.joined_on.fromNow()\n      }, true);\n\n      return _react2.default.createElement(\n        'li',\n        { className: 'user-joined-on' },\n        _react2.default.createElement(\n          'abbr',\n          { title: title },\n          age\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getEmail',\n    value: function getEmail() {\n      if (this.props.profile.email) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'li',\n          { className: 'user-email' },\n          _react2.default.createElement(\n            'a',\n            { href: 'mailto:' + this.props.profile.email, className: 'item-title' },\n            this.props.profile.email\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getFollowButton',\n    value: function getFollowButton() {\n      if (this.props.profile.acl.can_follow) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_followButton2.default, { className: 'btn btn-aligned hidden-xs hidden-sm',\n          profile: this.props.profile });\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getModerationButton',\n    value: function getModerationButton() {\n      if (this.props.profile.acl.can_moderate) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'btn-group btn-aligned hidden-xs hidden-sm' },\n          _react2.default.createElement(\n            'button',\n            { className: 'btn btn-default btn-moderate dropdown-toggle',\n              type: 'button',\n              'data-toggle': 'dropdown',\n              'aria-haspopup': 'true',\n              'aria-expanded': 'false' },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'tonality'\n            ),\n            gettext(\"Moderation\")\n          ),\n          _react2.default.createElement(_nav2.default, { profile: this.props.profile })\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page-header' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'row' },\n            _react2.default.createElement(\n              'div',\n              { className: 'col-md-9 col-md-offset-3' },\n              _react2.default.createElement(\n                'h1',\n                { className: 'pull-left' },\n                _react2.default.createElement(_avatar2.default, { user: this.props.profile, size: '100' }),\n                _react2.default.createElement(\n                  'span',\n                  { className: 'user-name' },\n                  this.props.profile.username\n                )\n              ),\n              this.getFollowButton(),\n              this.getModerationButton(),\n              _react2.default.createElement(_dropdownToggle2.default, { toggleNav: this.props.toggleNav,\n                dropdown: this.props.dropdown })\n            )\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'header-stats' },\n          _react2.default.createElement(\n            'div',\n            { className: 'container' },\n            _react2.default.createElement(\n              'div',\n              { className: 'row' },\n              _react2.default.createElement(\n                'div',\n                { className: 'col-md-9 col-md-offset-3' },\n                _react2.default.createElement(\n                  'ul',\n                  { className: 'list-inline' },\n                  this.getUserStatus(),\n                  this.getUserRank(),\n                  this.getUserTitle(),\n                  this.getJoinedOn(),\n                  this.getEmail()\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../avatar\":55,\"../dropdown-toggle\":68,\"../user-status\":117,\"./follow-button\":90,\"./moderation/nav\":96,\"react\":\"react\"}],89:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _panelLoader = require('../panel-loader');\n\nvar _panelLoader2 = _interopRequireDefault(_panelLoader);\n\nvar _panelMessage = require('../panel-message');\n\nvar _panelMessage2 = _interopRequireDefault(_panelMessage);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _polls = require('../../services/polls');\n\nvar _polls2 = _interopRequireDefault(_polls);\n\nvar _pageTitle = require('../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.update = function (ban) {\n      if (ban.expires_on) {\n        ban.expires_on = (0, _moment2.default)(ban.expires_on);\n      }\n\n      _this.setState({\n        isLoaded: true,\n        error: null,\n\n        ban: ban\n      });\n    };\n\n    _this.error = function (error) {\n      _this.setState({\n        isLoaded: true,\n        error: error.detail,\n        ban: null\n      });\n    };\n\n    if (_index2.default.has('PROFILE_BAN')) {\n      _this.initWithPreloadedData(_index2.default.pop('PROFILE_BAN'));\n    } else {\n      _this.initWithoutPreloadedData();\n    }\n\n    _this.startPolling(props.profile.api_url.ban);\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'initWithPreloadedData',\n    value: function initWithPreloadedData(ban) {\n      if (ban.expires_on) {\n        ban.expires_on = (0, _moment2.default)(ban.expires_on);\n      }\n\n      this.state = {\n        isLoaded: true,\n        ban: ban\n      };\n    }\n  }, {\n    key: 'initWithoutPreloadedData',\n    value: function initWithoutPreloadedData() {\n      this.state = {\n        isLoaded: false\n      };\n    }\n  }, {\n    key: 'startPolling',\n    value: function startPolling(api) {\n      _polls2.default.start({\n        poll: 'ban-details',\n        url: api,\n        frequency: 90 * 1000,\n        update: this.update,\n        error: this.error\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'componentDidMount',\n\n    /* jshint ignore:end */\n\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: gettext(\"Ban details\"),\n        parent: this.props.profile.username\n      });\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      _polls2.default.stop('ban-details');\n    }\n  }, {\n    key: 'getUserMessage',\n    value: function getUserMessage() {\n      if (this.state.ban.user_message) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'panel-body ban-message ban-user-message' },\n          _react2.default.createElement(\n            'h4',\n            null,\n            gettext(\"User-shown ban message\")\n          ),\n          _react2.default.createElement('div', { className: 'lead', dangerouslySetInnerHTML: {\n              __html: this.state.ban.user_message.html\n            } })\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getStaffMessage',\n    value: function getStaffMessage() {\n      if (this.state.ban.staff_message) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'panel-body ban-message ban-staff-message' },\n          _react2.default.createElement(\n            'h4',\n            null,\n            gettext(\"Team-shown ban message\")\n          ),\n          _react2.default.createElement('div', { className: 'lead', dangerouslySetInnerHTML: {\n              __html: this.state.ban.staff_message.html\n            } })\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getExpirationMessage',\n    value: function getExpirationMessage() {\n      if (this.state.ban.expires_on) {\n        if (this.state.ban.expires_on.isAfter((0, _moment2.default)())) {\n          /* jshint ignore:start */\n          var _title = interpolate(gettext(\"This ban expires on %(expires_on)s.\"), {\n            'expires_on': this.state.ban.expires_on.format('LL, LT')\n          }, true);\n\n          var message = interpolate(gettext(\"This ban expires %(expires_on)s.\"), {\n            'expires_on': this.state.ban.expires_on.fromNow()\n          }, true);\n\n          return _react2.default.createElement(\n            'abbr',\n            { title: _title },\n            message\n          );\n          /* jshint ignore:end */\n        } else {\n            return gettext(\"This ban has expired.\");\n          }\n      } else {\n        return interpolate(gettext(\"%(username)s's ban is permanent.\"), {\n          'username': this.props.profile.username\n        }, true);\n      }\n    }\n  }, {\n    key: 'getPanelBody',\n    value: function getPanelBody() {\n      if (this.state.ban) {\n        if (Object.keys(this.state.ban).length) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'div',\n            null,\n            this.getUserMessage(),\n            this.getStaffMessage(),\n            _react2.default.createElement(\n              'div',\n              { className: 'panel-body ban-expires' },\n              _react2.default.createElement(\n                'h4',\n                null,\n                gettext(\"Ban expiration\")\n              ),\n              _react2.default.createElement(\n                'p',\n                { className: 'lead' },\n                this.getExpirationMessage()\n              )\n            )\n          );\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(\n              'div',\n              null,\n              _react2.default.createElement(_panelMessage2.default, { message: gettext(\"No ban is active at the moment.\") })\n            );\n            /* jshint ignore:end */\n          }\n      } else if (this.state.error) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'div',\n            null,\n            _react2.default.createElement(_panelMessage2.default, { icon: 'error_outline',\n              message: this.state.error })\n          );\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(\n              'div',\n              null,\n              _react2.default.createElement(_panelLoader2.default, null)\n            );\n            /* jshint ignore:end */\n          }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'profile-ban-details' },\n        _react2.default.createElement(\n          'div',\n          { className: 'panel panel-default' },\n          _react2.default.createElement(\n            'div',\n            { className: 'panel-heading' },\n            _react2.default.createElement(\n              'h3',\n              { className: 'panel-title' },\n              gettext(\"Ban details\")\n            )\n          ),\n          this.getPanelBody()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../index\":135,\"../../services/page-title\":149,\"../../services/polls\":150,\"../panel-loader\":85,\"../panel-message\":86,\"moment\":\"moment\",\"react\":\"react\"}],90:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _profile = require('../../reducers/profile');\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.action = function () {\n      _this.setState({\n        isLoading: true\n      });\n\n      if (_this.props.profile.is_followed) {\n        _store2.default.dispatch((0, _profile.patchProfile)({\n          is_followed: false,\n          followers: _this.props.profile.followers - 1\n        }));\n      } else {\n        _store2.default.dispatch((0, _profile.patchProfile)({\n          is_followed: true,\n          followers: _this.props.profile.followers + 1\n        }));\n      }\n\n      _ajax2.default.post(_this.props.profile.api_url.follow).then(function (data) {\n        _this.setState({\n          isLoading: false\n        });\n\n        _store2.default.dispatch((0, _profile.patchProfile)(data));\n      }, function (rejection) {\n        _this.setState({\n          isLoading: false\n        });\n        _snackbar2.default.apiError(rejection);\n      });\n    };\n\n    _this.state = {\n      isLoading: false\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.props.profile.is_followed) {\n        return this.props.className + ' btn-default btn-following';\n      } else {\n        return this.props.className + ' btn-default btn-follow';\n      }\n    }\n  }, {\n    key: 'getIcon',\n    value: function getIcon() {\n      if (this.props.profile.is_followed) {\n        return 'favorite';\n      } else {\n        return 'favorite_border';\n      }\n    }\n  }, {\n    key: 'getLabel',\n    value: function getLabel() {\n      if (this.props.profile.is_followed) {\n        return gettext(\"Following\");\n      } else {\n        return gettext(\"Follow\");\n      }\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        _button2.default,\n        { className: this.getClassName(),\n          disabled: this.state.isLoading,\n          onClick: this.action },\n        _react2.default.createElement(\n          'span',\n          { className: 'material-icon' },\n          this.getIcon()\n        ),\n        this.getLabel()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../reducers/profile\":137,\"../../services/ajax\":142,\"../../services/snackbar\":151,\"../../services/store\":152,\"../button\":57,\"react\":\"react\"}],91:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _search = require('../search');\n\nvar _search2 = _interopRequireDefault(_search);\n\nvar _root = require('../users-list/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _users = require('../../reducers/users');\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _pageTitle = require('../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.loadMore = function () {\n      _this.setState({\n        isBusy: true\n      });\n\n      _this.loadUsers(_this.state.page + 1, _this.state.search);\n    };\n\n    _this.search = function (ev) {\n      _this.setState({\n        isLoaded: false,\n        isBusy: true,\n\n        search: ev.target.value,\n\n        count: 0,\n        more: 0,\n\n        page: 1,\n        pages: 1\n      });\n\n      _this.loadUsers(1, ev.target.value);\n    };\n\n    _this.setSpecialProps();\n\n    if (_index2.default.has(_this.PRELOADED_DATA_KEY)) {\n      _this.initWithPreloadedData(_index2.default.pop(_this.PRELOADED_DATA_KEY));\n    } else {\n      _this.initWithoutPreloadedData();\n    }\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'setSpecialProps',\n    value: function setSpecialProps() {\n      this.PRELOADED_DATA_KEY = 'PROFILE_FOLLOWERS';\n      this.TITLE = gettext('Followers');\n      this.API_FILTER = 'followers';\n    }\n  }, {\n    key: 'initWithPreloadedData',\n    value: function initWithPreloadedData(data) {\n      this.state = {\n        isLoaded: true,\n        isBusy: false,\n\n        search: '',\n\n        count: data.count,\n        more: data.more,\n\n        page: data.page,\n        pages: data.pages\n      };\n\n      _store2.default.dispatch((0, _users.dehydrate)(data.results));\n    }\n  }, {\n    key: 'initWithoutPreloadedData',\n    value: function initWithoutPreloadedData() {\n      this.state = {\n        isLoaded: false,\n        isBusy: false,\n\n        search: '',\n\n        count: 0,\n        more: 0,\n\n        page: 1,\n        pages: 1\n      };\n\n      this.loadUsers();\n    }\n  }, {\n    key: 'loadUsers',\n    value: function loadUsers() {\n      var _ajax$get,\n          _this2 = this;\n\n      var page = arguments.length <= 0 || arguments[0] === undefined ? 1 : arguments[0];\n      var search = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n      _ajax2.default.get(_index2.default.get('USERS_API'), (_ajax$get = {}, _defineProperty(_ajax$get, this.API_FILTER, this.props.profile.id), _defineProperty(_ajax$get, 'name', search), _defineProperty(_ajax$get, 'page', page || 1), _ajax$get), 'user-' + this.API_FILTER).then(function (data) {\n        if (page === 1) {\n          _store2.default.dispatch((0, _users.dehydrate)(data.results));\n        } else {\n          _store2.default.dispatch((0, _users.append)(data.results));\n        }\n\n        _this2.setState({\n          isLoaded: true,\n          isBusy: false,\n\n          count: data.count,\n          more: data.more,\n\n          page: data.page,\n          pages: data.pages\n        });\n      }, function (rejection) {\n        _snackbar2.default.apiError(rejection);\n      });\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: this.TITLE,\n        parent: this.props.profile.username\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getLabel',\n\n    /* jshint ignore:end */\n\n    value: function getLabel() {\n      if (!this.state.isLoaded) {\n        return gettext('Loading...');\n      } else if (this.state.search) {\n        var message = ngettext(\"Found %(users)s user.\", \"Found %(users)s users.\", this.state.count);\n\n        return interpolate(message, {\n          'users': this.state.count\n        }, true);\n      } else if (this.props.profile.id === this.props.user.id) {\n        var message = ngettext(\"You have %(users)s follower.\", \"You have %(users)s followers.\", this.state.count);\n\n        return interpolate(message, {\n          'users': this.state.count\n        }, true);\n      } else {\n        var message = ngettext(\"%(username)s has %(users)s follower.\", \"%(username)s has %(users)s followers.\", this.state.count);\n\n        return interpolate(message, {\n          'username': this.props.profile.username,\n          'users': this.state.count\n        }, true);\n      }\n    }\n  }, {\n    key: 'getEmptyMessage',\n    value: function getEmptyMessage() {\n      if (this.state.search) {\n        return gettext(\"Search returned no users matching specified criteria.\");\n      } else if (this.props.user.id === this.props.profile.id) {\n        return gettext(\"You have no followers.\");\n      } else {\n        return interpolate(gettext(\"%(username)s has no followers.\"), {\n          'username': this.props.profile.username\n        }, true);\n      }\n    }\n  }, {\n    key: 'getMoreButton',\n    value: function getMoreButton() {\n      if (this.state.more) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'pager-more' },\n          _react2.default.createElement(\n            _button2.default,\n            { loading: this.state.isBusy,\n              onClick: this.loadMore },\n            interpolate(gettext(\"Show more (%(more)s)\"), {\n              'more': this.state.more\n            }, true)\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getListBody',\n    value: function getListBody() {\n      if (this.state.isLoaded && this.state.count === 0) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'p',\n          { className: 'lead' },\n          this.getEmptyMessage()\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'div',\n            null,\n            _react2.default.createElement(_root2.default, { isLoaded: this.state.isLoaded,\n              users: this.props.users,\n              showRank: true,\n              cols: 2 }),\n            this.getMoreButton()\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      return 'profile-' + this.API_FILTER;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          'nav',\n          { className: 'toolbar' },\n          _react2.default.createElement(\n            'h3',\n            { className: 'toolbar-left' },\n            this.getLabel()\n          ),\n          _react2.default.createElement(_search2.default, { className: 'toolbar-right',\n            value: this.state.search,\n            onChange: this.search,\n            placeholder: gettext(\"Search history...\") })\n        ),\n        this.getListBody()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../index\":135,\"../../reducers/users\":141,\"../../services/ajax\":142,\"../../services/page-title\":149,\"../../services/snackbar\":151,\"../../services/store\":152,\"../button\":57,\"../search\":105,\"../users-list/root\":119,\"react\":\"react\"}],92:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _followers = require('./followers');\n\nvar _followers2 = _interopRequireDefault(_followers);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\nvar _class = function (_Followers) {\n  _inherits(_class, _Followers);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'setSpecialProps',\n    value: function setSpecialProps() {\n      this.PRELOADED_DATA_KEY = 'PROFILE_FOLLOWS';\n      this.TITLE = gettext('Follows');\n      this.API_FILTER = 'follows';\n    }\n  }, {\n    key: 'getLabel',\n    value: function getLabel() {\n      if (!this.state.isLoaded) {\n        return gettext('Loading...');\n      } else if (this.state.search) {\n        var message = ngettext(\"Found %(users)s user.\", \"Found %(users)s users.\", this.state.count);\n\n        return interpolate(message, {\n          'users': this.state.count\n        }, true);\n      } else if (this.props.profile.id === this.props.user.id) {\n        var message = ngettext(\"You are following %(users)s user.\", \"You are following %(users)s users.\", this.state.count);\n\n        return interpolate(message, {\n          'users': this.state.count\n        }, true);\n      } else {\n        var message = ngettext(\"%(username)s is following %(users)s user.\", \"%(username)s is following %(users)s users.\", this.state.count);\n\n        return interpolate(message, {\n          'username': this.props.profile.username,\n          'users': this.state.count\n        }, true);\n      }\n    }\n  }, {\n    key: 'getEmptyMessage',\n    value: function getEmptyMessage() {\n      if (this.state.search) {\n        return gettext(\"Search returned no users matching specified criteria.\");\n      } else if (this.props.user.id === this.props.profile.id) {\n        return gettext(\"You are not following any users.\");\n      } else {\n        return interpolate(gettext(\"%(username)s is not following any users.\"), {\n          'username': this.props.profile.username\n        }, true);\n      }\n    }\n  }]);\n\n  return _class;\n}(_followers2.default);\n\nexports.default = _class;\n\n},{\"./followers\":91,\"react\":\"react\"}],93:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _modalLoader = require('../../modal-loader');\n\nvar _modalLoader2 = _interopRequireDefault(_modalLoader);\n\nvar _yesNoSwitch = require('../../yes-no-switch');\n\nvar _yesNoSwitch2 = _interopRequireDefault(_yesNoSwitch);\n\nvar _modalMessage = require('../../modal-message');\n\nvar _modalMessage2 = _interopRequireDefault(_modalMessage);\n\nvar _users = require('../../../reducers/users');\n\nvar _ajax = require('../../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.state = {\n      isLoaded: false,\n      isLoading: false,\n      error: null,\n\n      is_avatar_locked: '',\n      avatar_lock_user_message: '',\n      avatar_lock_staff_message: ''\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this2 = this;\n\n      _ajax2.default.get(this.props.profile.api_url.moderate_avatar).then(function (options) {\n        _this2.setState({\n          isLoaded: true,\n\n          is_avatar_locked: options.is_avatar_locked,\n          avatar_lock_user_message: options.avatar_lock_user_message || '',\n          avatar_lock_staff_message: options.avatar_lock_staff_message || ''\n        });\n      }, function (rejection) {\n        _this2.setState({\n          isLoaded: true,\n          error: rejection.detail\n        });\n      });\n    }\n  }, {\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        _snackbar2.default.error(this.validate().username[0]);\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.profile.api_url.moderate_avatar, {\n        is_avatar_locked: this.state.is_avatar_locked,\n        avatar_lock_user_message: this.state.avatar_lock_user_message,\n        avatar_lock_staff_message: this.state.avatar_lock_staff_message\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      _store2.default.dispatch((0, _users.updateAvatar)(this.props.profile, apiResponse.avatar_hash));\n      _snackbar2.default.success(gettext(\"Avatar controls have been changed.\"));\n    }\n  }, {\n    key: 'getFormBody',\n    value: function getFormBody() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-body' },\n          _react2.default.createElement(\n            _formGroup2.default,\n            { label: gettext(\"Lock avatar\"),\n              helpText: gettext(\"Locking user avatar will prohibit user from changing his avatar and will reset his/her avatar to default one.\"),\n              'for': 'id_is_avatar_locked' },\n            _react2.default.createElement(_yesNoSwitch2.default, { id: 'id_is_avatar_locked',\n              disabled: this.state.isLoading,\n              iconOn: 'lock_outline',\n              iconOff: 'lock_open',\n              labelOn: gettext(\"Disallow user from changing avatar\"),\n              labelOff: gettext(\"Allow user to change avatar\"),\n              onChange: this.bindInput('is_avatar_locked'),\n              value: this.state.is_avatar_locked })\n          ),\n          _react2.default.createElement(\n            _formGroup2.default,\n            { label: gettext(\"User message\"),\n              helpText: gettext(\"Optional message for user explaining why he/she is prohibited form changing avatar.\"),\n              'for': 'id_avatar_lock_user_message' },\n            _react2.default.createElement('textarea', { id: 'id_avatar_lock_user_message',\n              className: 'form-control',\n              rows: '4',\n              disabled: this.state.isLoading,\n              onChange: this.bindInput('avatar_lock_user_message'),\n              value: this.state.avatar_lock_user_message })\n          ),\n          _react2.default.createElement(\n            _formGroup2.default,\n            { label: gettext(\"Staff message\"),\n              helpText: gettext(\"Optional message for forum team members explaining why user is prohibited form changing avatar.\"),\n              'for': 'id_avatar_lock_staff_message' },\n            _react2.default.createElement('textarea', { id: 'id_avatar_lock_staff_message',\n              className: 'form-control',\n              rows: '4',\n              disabled: this.state.isLoading,\n              onChange: this.bindInput('avatar_lock_staff_message'),\n              value: this.state.avatar_lock_staff_message })\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-footer' },\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn btn-default', 'data-dismiss': 'modal' },\n            gettext(\"Close\")\n          ),\n          _react2.default.createElement(\n            _button2.default,\n            { className: 'btn-primary', loading: this.state.isLoading },\n            gettext(\"Save changes\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getModalBody',\n    value: function getModalBody() {\n      if (this.state.error) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_modalMessage2.default, { icon: 'remove_circle_outline',\n          message: this.state.error });\n        /* jshint ignore:end */\n      } else if (this.state.isLoaded) {\n          return this.getFormBody();\n        } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_modalLoader2.default, null);\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.state.error) {\n        return \"modal-dialog modal-message modal-avatar-controls\";\n      } else {\n        return \"modal-dialog modal-avatar-controls\";\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName(),\n          role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Avatar controls\")\n            )\n          ),\n          this.getModalBody()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../../../reducers/users\":141,\"../../../services/ajax\":142,\"../../../services/snackbar\":151,\"../../../services/store\":152,\"../../button\":57,\"../../form\":70,\"../../form-group\":69,\"../../modal-loader\":73,\"../../modal-message\":74,\"../../yes-no-switch\":134,\"react\":\"react\"}],94:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _modalLoader = require('../../modal-loader');\n\nvar _modalLoader2 = _interopRequireDefault(_modalLoader);\n\nvar _modalMessage = require('../../modal-message');\n\nvar _modalMessage2 = _interopRequireDefault(_modalMessage);\n\nvar _index = require('../../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _usernameHistory = require('../../../reducers/username-history');\n\nvar _users = require('../../../reducers/users');\n\nvar _ajax = require('../../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _validators = require('../../../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.state = {\n      isLoaded: false,\n      isLoading: false,\n      error: null,\n\n      username: '',\n      validators: {\n        username: [validators.usernameContent(), validators.usernameMinLength(_index2.default.get('SETTINGS')), validators.usernameMaxLength(_index2.default.get('SETTINGS'))]\n      }\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this2 = this;\n\n      _ajax2.default.get(this.props.profile.api_url.moderate_username).then(function () {\n        _this2.setState({\n          isLoaded: true\n        });\n      }, function (rejection) {\n        _this2.setState({\n          isLoaded: true,\n          error: rejection.detail\n        });\n      });\n    }\n  }, {\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        _snackbar2.default.error(this.validate().username[0]);\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(this.props.profile.api_url.moderate_username, {\n        username: this.state.username\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      this.setState({\n        username: ''\n      });\n\n      _store2.default.dispatch((0, _usernameHistory.addNameChange)(apiResponse, this.props.profile, this.props.user));\n      _store2.default.dispatch((0, _users.updateUsername)(this.props.profile, apiResponse.username, apiResponse.slug));\n\n      _snackbar2.default.success(gettext(\"Username has been changed.\"));\n    }\n  }, {\n    key: 'getFormBody',\n    value: function getFormBody() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-body' },\n          _react2.default.createElement(\n            _formGroup2.default,\n            { label: gettext(\"New username\"), 'for': 'id_username' },\n            _react2.default.createElement('input', { type: 'text', id: 'id_username', className: 'form-control',\n              disabled: this.state.isLoading,\n              onChange: this.bindInput('username'),\n              value: this.state.username })\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-footer' },\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn btn-default', 'data-dismiss': 'modal' },\n            gettext(\"Close\")\n          ),\n          _react2.default.createElement(\n            _button2.default,\n            { className: 'btn-primary', loading: this.state.isLoading },\n            gettext(\"Change username\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getModalBody',\n    value: function getModalBody() {\n      if (this.state.error) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_modalMessage2.default, { icon: 'remove_circle_outline',\n          message: this.state.error });\n        /* jshint ignore:end */\n      } else if (this.state.isLoaded) {\n          return this.getFormBody();\n        } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_modalLoader2.default, null);\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.state.error) {\n        return \"modal-dialog modal-message modal-rename-user\";\n      } else {\n        return \"modal-dialog modal-rename-user\";\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName(),\n          role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Change username\")\n            )\n          ),\n          this.getModalBody()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../../../index\":135,\"../../../reducers/username-history\":140,\"../../../reducers/users\":141,\"../../../services/ajax\":142,\"../../../services/snackbar\":151,\"../../../services/store\":152,\"../../../utils/validators\":162,\"../../button\":57,\"../../form\":70,\"../../form-group\":69,\"../../modal-loader\":73,\"../../modal-message\":74,\"react\":\"react\"}],95:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('../../form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('../../form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _modalLoader = require('../../modal-loader');\n\nvar _modalLoader2 = _interopRequireDefault(_modalLoader);\n\nvar _modalMessage = require('../../modal-message');\n\nvar _modalMessage2 = _interopRequireDefault(_modalMessage);\n\nvar _yesNoSwitch = require('../../yes-no-switch');\n\nvar _yesNoSwitch2 = _interopRequireDefault(_yesNoSwitch);\n\nvar _index = require('../../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _polls = require('../../../services/polls');\n\nvar _polls2 = _interopRequireDefault(_polls);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.countdown = function () {\n      window.setTimeout(function () {\n        if (_this.state.countdown > 1) {\n          _this.setState({\n            countdown: _this.state.countdown - 1\n          });\n          _this.countdown();\n        } else if (!_this.state.confirm) {\n          _this.setState({\n            confirm: true\n          });\n        }\n      }, 1000);\n    };\n\n    _this.state = {\n      isLoaded: false,\n      isLoading: false,\n      isDeleted: false,\n      error: null,\n\n      countdown: 5,\n      confirm: false,\n\n      with_content: false\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this2 = this;\n\n      _ajax2.default.get(this.props.profile.api_url.delete).then(function () {\n        _this2.setState({\n          isLoaded: true\n        });\n\n        _this2.countdown();\n      }, function (rejection) {\n        _this2.setState({\n          isLoaded: true,\n          error: rejection.detail\n        });\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'send',\n\n    /* jshint ignore:end */\n\n    value: function send() {\n      return _ajax2.default.post(this.props.profile.api_url.delete, {\n        with_content: this.state.with_content\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess() {\n      _polls2.default.stop('user-profile');\n\n      if (this.state.with_content) {\n        this.setState({\n          isDeleted: interpolate(gettext(\"%(username)s's account, threads, posts and other content has been deleted.\"), {\n            'username': this.props.profile.username\n          }, true)\n        });\n      } else {\n        this.setState({\n          isDeleted: interpolate(gettext(\"%(username)s's account has been deleted and other content has been hidden.\"), {\n            'username': this.props.profile.username\n          }, true)\n        });\n      }\n    }\n  }, {\n    key: 'getButtonLabel',\n    value: function getButtonLabel() {\n      if (this.state.confirm) {\n        return interpolate(gettext(\"Delete %(username)s\"), {\n          'username': this.props.profile.username\n        }, true);\n      } else {\n        return interpolate(gettext(\"Please wait... (%(countdown)ss)\"), {\n          'countdown': this.state.countdown\n        }, true);\n      }\n    }\n  }, {\n    key: 'getForm',\n    value: function getForm() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'form',\n        { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-body' },\n          _react2.default.createElement(\n            _formGroup2.default,\n            { label: gettext(\"User content\"),\n              labelClass: 'col-sm-4', controlClass: 'col-sm-8',\n              'for': 'id_with_content' },\n            _react2.default.createElement(_yesNoSwitch2.default, { id: 'id_with_content',\n              disabled: this.state.isLoading,\n              labelOn: gettext(\"Delete together with user's account\"),\n              labelOff: gettext(\"Hide after deleting user's account\"),\n              onChange: this.bindInput('with_content'),\n              value: this.state.with_content })\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-footer' },\n          _react2.default.createElement(\n            'button',\n            { type: 'button',\n              className: 'btn btn-default',\n              'data-dismiss': 'modal' },\n            gettext(\"Cancel\")\n          ),\n          _react2.default.createElement(\n            _button2.default,\n            { className: 'btn-danger',\n              loading: this.state.isLoading,\n              disabled: !this.state.confirm },\n            this.getButtonLabel()\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getDeletedBody',\n    value: function getDeletedBody() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-body' },\n        _react2.default.createElement(\n          'div',\n          { className: 'message-icon' },\n          _react2.default.createElement(\n            'span',\n            { className: 'material-icon' },\n            'info_outline'\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'message-body' },\n          _react2.default.createElement(\n            'p',\n            { className: 'lead' },\n            this.state.isDeleted\n          ),\n          _react2.default.createElement(\n            'p',\n            null,\n            _react2.default.createElement(\n              'a',\n              { href: _index2.default.get('USERS_LIST_URL') },\n              gettext(\"Return to users list\")\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getModalBody',\n    value: function getModalBody() {\n      if (this.state.error) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_modalMessage2.default, { icon: 'remove_circle_outline',\n          message: this.state.error });\n        /* jshint ignore:end */\n      } else if (this.state.isLoaded) {\n          if (this.state.isDeleted) {\n            return this.getDeletedBody();\n          } else {\n            return this.getForm();\n          }\n        } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_modalLoader2.default, null);\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.state.error || this.state.isDeleted) {\n        return \"modal-dialog modal-message modal-delete-account\";\n      } else {\n        return \"modal-dialog modal-delete-account\";\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName(),\n          role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Delete user account\")\n            )\n          ),\n          this.getModalBody()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../../../index\":135,\"../../../services/ajax\":142,\"../../../services/polls\":150,\"../../button\":57,\"../../form\":70,\"../../form-group\":69,\"../../modal-loader\":73,\"../../modal-message\":74,\"../../yes-no-switch\":134,\"react\":\"react\"}],96:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRedux = require('react-redux');\n\nvar _avatarControls = require('./avatar-controls');\n\nvar _avatarControls2 = _interopRequireDefault(_avatarControls);\n\nvar _changeUsername = require('./change-username');\n\nvar _changeUsername2 = _interopRequireDefault(_changeUsername);\n\nvar _deleteAccount = require('./delete-account');\n\nvar _deleteAccount2 = _interopRequireDefault(_deleteAccount);\n\nvar _modal = require('../../../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\n/* jshint ignore:start */\nvar select = function select(store) {\n  return {\n    tick: store.tick,\n    user: store.auth,\n    profile: store.profile\n  };\n};\n/* jshint ignore:end */\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.showAvatarDialog = function () {\n      _modal2.default.show((0, _reactRedux.connect)(select)(_avatarControls2.default));\n    }, _this.showRenameDialog = function () {\n      _modal2.default.show((0, _reactRedux.connect)(select)(_changeUsername2.default));\n    }, _this.showDeleteDialog = function () {\n      _modal2.default.show((0, _reactRedux.connect)(select)(_deleteAccount2.default));\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'getAvatarButton',\n\n    /* jshint ignore:end */\n\n    value: function getAvatarButton() {\n      if (this.props.profile.acl.can_moderate_avatar) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'li',\n          null,\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn-link',\n              onClick: this.showAvatarDialog },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'portrait'\n            ),\n            gettext(\"Avatar controls\")\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getRenameButton',\n\n    /* jshint ignore:end */\n\n    value: function getRenameButton() {\n      if (this.props.profile.acl.can_rename) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'li',\n          null,\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn-link',\n              onClick: this.showRenameDialog },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'credit_card'\n            ),\n            gettext(\"Change username\")\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getDeleteButton',\n\n    /* jshint ignore:end */\n\n    value: function getDeleteButton() {\n      if (this.props.profile.acl.can_delete) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'li',\n          null,\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn-link',\n              onClick: this.showDeleteDialog },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'clear'\n            ),\n            gettext(\"Delete account\")\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu dropdown-menu-right', role: 'menu' },\n        this.getAvatarButton(),\n        this.getRenameButton(),\n        this.getDeleteButton(),\n        _react2.default.createElement('li', { className: 'divider hidden-md hidden-lg' }),\n        _react2.default.createElement(\n          'li',\n          { className: 'dropdown-buttons hidden-md hidden-lg' },\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn btn-default btn-block',\n              onClick: this.props.toggleNav },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'menu'\n            ),\n            gettext(\"Menu\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../../services/modal\":148,\"./avatar-controls\":93,\"./change-username\":94,\"./delete-account\":95,\"react\":\"react\",\"react-redux\":\"react-redux\"}],97:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactNav = exports.SideNav = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouter = require('react-router');\n\nvar _li = require('../li');\n\nvar _li2 = _interopRequireDefault(_li);\n\nvar _followButton = require('./follow-button');\n\nvar _followButton2 = _interopRequireDefault(_followButton);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n//jshint ignore:line\n// jshint ignore:line\n\n//jshint ignore:line\n\nvar SideNav = exports.SideNav = function (_React$Component) {\n  _inherits(SideNav, _React$Component);\n\n  function SideNav() {\n    _classCallCheck(this, SideNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(SideNav).apply(this, arguments));\n  }\n\n  _createClass(SideNav, [{\n    key: 'getMeta',\n    value: function getMeta(meta) {\n      if (meta) {\n        // jshint ignore:start\n        return _react2.default.createElement(\n          'span',\n          { className: 'badge' },\n          this.props.profile[meta.attr]\n        );\n        // jshint ignore:end\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this2 = this;\n\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'div',\n        { className: 'list-group nav-side' },\n        this.props.pages.map(function (page) {\n          return _react2.default.createElement(\n            _reactRouter.Link,\n            { to: _this2.props.baseUrl + page.component + '/',\n              className: 'list-group-item',\n              activeClassName: 'active',\n              key: page.component },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              page.icon\n            ),\n            page.name,\n            _this2.getMeta(page.meta)\n          );\n        })\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return SideNav;\n}(_react2.default.Component);\n\nvar CompactNav = exports.CompactNav = function (_SideNav) {\n  _inherits(CompactNav, _SideNav);\n\n  function CompactNav() {\n    _classCallCheck(this, CompactNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));\n  }\n\n  _createClass(CompactNav, [{\n    key: 'showSpecialOptions',\n    value: function showSpecialOptions() {\n      return this.props.profile.acl.can_follow || this.props.profile.acl.can_moderate;\n    }\n  }, {\n    key: 'getFollowButton',\n    value: function getFollowButton() {\n      if (this.props.profile.acl.can_follow) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_followButton2.default, { className: 'btn btn-block',\n          profile: this.props.profile });\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getModerationButton',\n    value: function getModerationButton() {\n      if (this.props.profile.acl.can_moderate) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'button',\n          { type: 'button', className: 'btn btn-default btn-block',\n            onClick: this.props.toggleModeration },\n          _react2.default.createElement(\n            'span',\n            { className: 'material-icon' },\n            'tonality'\n          ),\n          gettext(\"Moderation\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getSpecialOptions',\n    value: function getSpecialOptions() {\n      if (this.showSpecialOptions()) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'li',\n          { className: 'dropdown-buttons' },\n          this.getFollowButton(),\n          this.getModerationButton()\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      var _this4 = this;\n\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu', role: 'menu' },\n        this.getSpecialOptions(),\n        this.showSpecialOptions() ? _react2.default.createElement('li', { className: 'divider' }) : null,\n        this.props.pages.map(function (page) {\n          return _react2.default.createElement(\n            _li2.default,\n            { path: _this4.props.baseUrl + page.component + '/',\n              key: page.component },\n            _react2.default.createElement(\n              _reactRouter.Link,\n              { to: _this4.props.baseUrl + page.component + '/',\n                onClick: _this4.props.hideNav },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                page.icon\n              ),\n              page.name,\n              _this4.getMeta(page.meta)\n            )\n          );\n        })\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return CompactNav;\n}(SideNav);\n\n},{\"../../index\":135,\"../li\":71,\"./follow-button\":90,\"react\":\"react\",\"react-router\":\"react-router\"}],98:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.select = select;\nexports.paths = paths;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRedux = require('react-redux');\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _banDetails = require('./ban-details');\n\nvar _banDetails2 = _interopRequireDefault(_banDetails);\n\nvar _followers = require('./followers');\n\nvar _followers2 = _interopRequireDefault(_followers);\n\nvar _follows = require('./follows');\n\nvar _follows2 = _interopRequireDefault(_follows);\n\nvar _usernameHistory = require('./username-history');\n\nvar _usernameHistory2 = _interopRequireDefault(_usernameHistory);\n\nvar _Header = require('./Header');\n\nvar _Header2 = _interopRequireDefault(_Header);\n\nvar _nav = require('./moderation/nav');\n\nvar _nav2 = _interopRequireDefault(_nav);\n\nvar _navs = require('./navs');\n\nvar _withDropdown = require('../with-dropdown');\n\nvar _withDropdown2 = _interopRequireDefault(_withDropdown);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _profile = require('../../reducers/profile');\n\nvar _polls = require('../../services/polls');\n\nvar _polls2 = _interopRequireDefault(_polls);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_WithDropdown) {\n  _inherits(_class, _WithDropdown);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.update = function (data) {\n      _store2.default.dispatch((0, _profile.dehydrate)(data));\n    };\n\n    _this.toggleNav = function () {\n      if (_this.state.dropdown === 'pages') {\n        _this.setState({\n          dropdown: false\n        });\n      } else {\n        _this.setState({\n          dropdown: 'pages'\n        });\n      }\n    };\n\n    _this.toggleModeration = function () {\n      if (_this.state.dropdown === 'moderation') {\n        _this.setState({\n          dropdown: false\n        });\n      } else {\n        _this.setState({\n          dropdown: 'moderation'\n        });\n      }\n    };\n\n    _this.startPolling(props.profile.api_url.root);\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'startPolling',\n    value: function startPolling(api) {\n      _polls2.default.start({\n        poll: 'user-profile',\n        url: api,\n        frequency: 90 * 1000,\n        update: this.update\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getNavDropdown',\n\n    /* jshint ignore:end */\n\n    value: function getNavDropdown() {\n      if (this.state.dropdown === 'pages') {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_navs.CompactNav, { pages: _index2.default.get('PROFILE_PAGES'),\n          baseUrl: _index2.default.get('PROFILE').absolute_url,\n          profile: this.props.profile,\n          toggleModeration: this.toggleModeration,\n          hideNav: this.hideNav });\n        /* jshint ignore:end */\n      } else if (this.state.dropdown === 'moderation') {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_nav2.default, { profile: this.props.profile,\n            toggleNav: this.toggleNav,\n            hideNav: this.hideNav });\n          /* jshint ignore:end */\n        } else {\n            return null;\n          }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      var baseClass = 'page page-user-profile';\n      if (false && this.props.profile.rank.css_class) {\n        return baseClass + ' page-user-profile-' + this.props.profile.rank.css_class;\n      } else {\n        return baseClass;\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName() },\n        _react2.default.createElement(_Header2.default, { user: this.props.user,\n          profile: this.props.profile,\n          toggleNav: this.toggleNav,\n          toggleModeration: this.toggleModeration }),\n        _react2.default.createElement(\n          'div',\n          { className: this.getCompactNavClassName() },\n          this.getNavDropdown()\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'row' },\n            _react2.default.createElement(\n              'div',\n              { className: 'col-md-3 hidden-xs hidden-sm' },\n              _react2.default.createElement(\n                'div',\n                { className: 'profile-side-avatar' },\n                _react2.default.createElement(_avatar2.default, { user: this.props.profile, size: '400' })\n              ),\n              _react2.default.createElement(_navs.SideNav, { pages: _index2.default.get('PROFILE_PAGES'),\n                baseUrl: _index2.default.get('PROFILE').absolute_url,\n                profile: this.props.profile })\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'col-md-9' },\n              this.props.children\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_withDropdown2.default);\n\nexports.default = _class;\nfunction select(store) {\n  return {\n    'tick': store.tick.tick,\n    'user': store.auth.user,\n    'users': store.users,\n    'profile': store.profile,\n    'username-history': store['username-history']\n  };\n}\n\nvar Placeholder = function (_React$Component) {\n  _inherits(Placeholder, _React$Component);\n\n  function Placeholder() {\n    _classCallCheck(this, Placeholder);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(Placeholder).apply(this, arguments));\n  }\n\n  _createClass(Placeholder, [{\n    key: 'render',\n    value: function render() {\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'div',\n        { className: 'container' },\n        _react2.default.createElement(\n          'p',\n          null,\n          \"Hello, I'm placeholder for \" + this.props.route.name\n        )\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return Placeholder;\n}(_react2.default.Component);\n\nvar COMPONENTS = {\n  'posts': Placeholder,\n  'threads': Placeholder,\n  'followers': _followers2.default,\n  'follows': _follows2.default,\n  'username-history': _usernameHistory2.default,\n  'ban-details': _banDetails2.default\n};\n\nfunction paths() {\n  var paths = [];\n\n  _index2.default.get('PROFILE_PAGES').forEach(function (item) {\n    paths.push(Object.assign({}, item, {\n      path: _index2.default.get('PROFILE').absolute_url + item.component + '/',\n      component: (0, _reactRedux.connect)(select)(COMPONENTS[item.component])\n    }));\n  });\n\n  return paths;\n}\n\n},{\"../../index\":135,\"../../reducers/profile\":137,\"../../services/polls\":150,\"../../services/store\":152,\"../avatar\":55,\"../with-dropdown\":133,\"./Header\":88,\"./ban-details\":89,\"./followers\":91,\"./follows\":92,\"./moderation/nav\":96,\"./navs\":97,\"./username-history\":99,\"react\":\"react\",\"react-redux\":\"react-redux\"}],99:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('../button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _search = require('../search');\n\nvar _search2 = _interopRequireDefault(_search);\n\nvar _usernameHistory = require('../username-history');\n\nvar _usernameHistory2 = _interopRequireDefault(_usernameHistory);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _usernameHistory3 = require('../../reducers/username-history');\n\nvar _ajax = require('../../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _store = require('../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _pageTitle = require('../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.loadMore = function () {\n      _this.setState({\n        isBusy: true\n      });\n\n      _this.loadChanges(_this.state.page + 1, _this.state.search);\n    };\n\n    _this.search = function (ev) {\n      _this.setState({\n        isLoaded: false,\n        isBusy: true,\n\n        search: ev.target.value,\n\n        count: 0,\n        more: 0,\n\n        page: 1,\n        pages: 1\n      });\n\n      _this.loadChanges(1, ev.target.value);\n    };\n\n    if (_index2.default.has('PROFILE_NAME_HISTORY')) {\n      _this.initWithPreloadedData(_index2.default.pop('PROFILE_NAME_HISTORY'));\n    } else {\n      _this.initWithoutPreloadedData();\n    }\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'initWithPreloadedData',\n    value: function initWithPreloadedData(data) {\n      this.state = {\n        isLoaded: true,\n        isBusy: false,\n\n        search: '',\n\n        count: data.count,\n        more: data.more,\n\n        page: data.page,\n        pages: data.pages\n      };\n\n      _store2.default.dispatch((0, _usernameHistory3.dehydrate)(data.results));\n    }\n  }, {\n    key: 'initWithoutPreloadedData',\n    value: function initWithoutPreloadedData() {\n      this.state = {\n        isLoaded: false,\n        isBusy: false,\n\n        search: '',\n\n        count: 0,\n        more: 0,\n\n        page: 1,\n        pages: 1\n      };\n\n      this.loadChanges();\n    }\n  }, {\n    key: 'loadChanges',\n    value: function loadChanges() {\n      var _this2 = this;\n\n      var page = arguments.length <= 0 || arguments[0] === undefined ? 1 : arguments[0];\n      var search = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n      _ajax2.default.get(_index2.default.get('USERNAME_CHANGES_API'), {\n        user: this.props.profile.id,\n        search: search,\n        page: page || 1\n      }, 'search-username-history').then(function (data) {\n        if (page === 1) {\n          _store2.default.dispatch((0, _usernameHistory3.dehydrate)(data.results));\n        } else {\n          _store2.default.dispatch((0, _usernameHistory3.append)(data.results));\n        }\n\n        _this2.setState({\n          isLoaded: true,\n          isBusy: false,\n\n          count: data.count,\n          more: data.more,\n\n          page: data.page,\n          pages: data.pages\n        });\n      }, function (rejection) {\n        _snackbar2.default.apiError(rejection);\n      });\n    }\n  }, {\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: gettext(\"Username history\"),\n        parent: this.props.profile.username\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'getLabel',\n\n    /* jshint ignore:end */\n\n    value: function getLabel() {\n      if (!this.state.isLoaded) {\n        return gettext('Loading...');\n      } else if (this.state.search) {\n        var message = ngettext(\"Found %(changes)s username change.\", \"Found %(changes)s username changes.\", this.state.count);\n\n        return interpolate(message, {\n          'changes': this.state.count\n        }, true);\n      } else if (this.props.profile.id === this.props.user.id) {\n        var message = ngettext(\"Your username was changed %(changes)s time.\", \"Your username was changed %(changes)s times.\", this.state.count);\n\n        return interpolate(message, {\n          'changes': this.state.count\n        }, true);\n      } else {\n        var message = ngettext(\"%(username)s's username was changed %(changes)s time.\", \"%(username)s's username was changed %(changes)s times.\", this.state.count);\n\n        return interpolate(message, {\n          'username': this.props.profile.username,\n          'changes': this.state.count\n        }, true);\n      }\n    }\n  }, {\n    key: 'getEmptyMessage',\n    value: function getEmptyMessage() {\n      if (this.state.search) {\n        return gettext(\"Search returned no username changes matching specified criteria.\");\n      } else if (this.props.user.id === this.props.profile.id) {\n        return gettext(\"No name changes have been recorded for your account.\");\n      } else {\n        return interpolate(gettext(\"%(username)s's username was never changed.\"), {\n          'username': this.props.profile.username\n        }, true);\n      }\n    }\n  }, {\n    key: 'getMoreButton',\n    value: function getMoreButton() {\n      if (this.state.more) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'pager-more' },\n          _react2.default.createElement(\n            _button2.default,\n            { loading: this.state.isBusy,\n              onClick: this.loadMore },\n            interpolate(gettext(\"Show older (%(more)s)\"), {\n              'more': this.state.more\n            }, true)\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'profile-username-history' },\n        _react2.default.createElement(\n          'nav',\n          { className: 'toolbar' },\n          _react2.default.createElement(\n            'h3',\n            { className: 'toolbar-left' },\n            this.getLabel()\n          ),\n          _react2.default.createElement(_search2.default, { className: 'toolbar-right',\n            value: this.state.search,\n            onChange: this.search,\n            placeholder: gettext(\"Search history...\") })\n        ),\n        _react2.default.createElement(_usernameHistory2.default, { isLoaded: this.state.isLoaded,\n          emptyMessage: this.getEmptyMessage(),\n          changes: this.props['username-history'] }),\n        this.getMoreButton()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../index\":135,\"../../reducers/username-history\":140,\"../../services/ajax\":142,\"../../services/page-title\":149,\"../../services/snackbar\":151,\"../../services/store\":152,\"../button\":57,\"../search\":105,\"../username-history\":118,\"react\":\"react\"}],100:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _loader = require('./loader');\n\nvar _loader2 = _interopRequireDefault(_loader);\n\nvar _register = require('./register.js');\n\nvar _register2 = _interopRequireDefault(_register);\n\nvar _captcha = require('../services/captcha');\n\nvar _captcha2 = _interopRequireDefault(_captcha);\n\nvar _modal = require('../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _zxcvbn = require('../services/zxcvbn');\n\nvar _zxcvbn2 = _interopRequireDefault(_zxcvbn);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.showRegisterModal = function () {\n      if (misago.get('SETTINGS').account_activation === 'closed') {\n        _snackbar2.default.info(gettext(\"New registrations are currently disabled.\"));\n      } else if (_this.state.isLoaded) {\n        _modal2.default.show(_register2.default);\n      } else {\n        _this.setState({\n          'isLoading': true\n        });\n\n        Promise.all([_captcha2.default.load(), _zxcvbn2.default.load()]).then(function () {\n          if (!_this.state.isLoaded) {\n            _this.setState({\n              'isLoading': false,\n              'isLoaded': false\n            });\n          }\n\n          _modal2.default.show(_register2.default);\n        });\n      }\n    };\n\n    _this.state = {\n      'isLoading': false,\n      'isLoaded': false\n    };\n    return _this;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'getClassName',\n\n    /* jshint ignore:end */\n\n    value: function getClassName() {\n      return this.props.className + (this.state.isLoading ? ' btn-loading' : '');\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: 'button', onClick: this.showRegisterModal,\n          className: 'btn ' + this.getClassName(),\n          disabled: this.state.isLoaded },\n        gettext(\"Register\"),\n        this.state.isLoading ? _react2.default.createElement(_loader2.default, null) : null\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../services/captcha\":144,\"../services/modal\":148,\"../services/snackbar\":151,\"../services/zxcvbn\":153,\"./loader\":72,\"./register.js\":101,\"react\":\"react\"}],101:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.RegisterComplete = exports.RegisterForm = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _formGroup = require('./form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nvar _passwordStrength = require('./password-strength');\n\nvar _passwordStrength2 = _interopRequireDefault(_passwordStrength);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _auth = require('../services/auth');\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _captcha = require('../services/captcha');\n\nvar _captcha2 = _interopRequireDefault(_captcha);\n\nvar _modal = require('../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nvar _validators = require('../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar RegisterForm = exports.RegisterForm = function (_Form) {\n  _inherits(RegisterForm, _Form);\n\n  function RegisterForm(props) {\n    _classCallCheck(this, RegisterForm);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RegisterForm).call(this, props));\n\n    _this.state = {\n      isLoading: false,\n\n      username: '',\n      email: '',\n      password: '',\n      captcha: '',\n\n      validators: {\n        username: [validators.usernameContent(), validators.usernameMinLength(_index2.default.get('SETTINGS')), validators.usernameMaxLength(_index2.default.get('SETTINGS'))],\n        email: [validators.email()],\n        password: [validators.passwordMinLength(_index2.default.get('SETTINGS'))],\n        captcha: _captcha2.default.validator()\n      },\n\n      errors: {}\n    };\n    return _this;\n  }\n\n  _createClass(RegisterForm, [{\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        _snackbar2.default.error(gettext(\"Form contains errors.\"));\n        this.setState({\n          errors: this.validate()\n        });\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('USERS_API'), {\n        username: this.state.username,\n        email: this.state.email,\n        password: this.state.password,\n        captcha: this.state.captcha\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      this.props.callback(apiResponse);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        this.setState({\n          'errors': Object.assign({}, this.state.errors, rejection)\n        });\n        _snackbar2.default.error(gettext(\"Form contains errors.\"));\n      } else if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n        _modal2.default.hide();\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'getLegalFootNote',\n    value: function getLegalFootNote() {\n      if (_index2.default.get('TERMS_OF_SERVICE_URL')) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'a',\n          { href: _index2.default.get('TERMS_OF_SERVICE_URL'),\n            target: '_blank' },\n          gettext(\"By registering you agree to site's terms and conditions.\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-dialog modal-register', role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Register\")\n            )\n          ),\n          _react2.default.createElement(\n            'form',\n            { onSubmit: this.handleSubmit, className: 'form-horizontal' },\n            _react2.default.createElement('input', { type: 'type', style: { display: 'none' } }),\n            _react2.default.createElement('input', { type: 'password', style: { display: 'none' } }),\n            _react2.default.createElement(\n              'div',\n              { className: 'modal-body' },\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Username\"), 'for': 'id_username',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',\n                  validation: this.state.errors.username },\n                _react2.default.createElement('input', { type: 'text', id: 'id_username', className: 'form-control',\n                  'aria-describedby': 'id_username_status',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('username'),\n                  value: this.state.username })\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"E-mail\"), 'for': 'id_email',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',\n                  validation: this.state.errors.email },\n                _react2.default.createElement('input', { type: 'text', id: 'id_email', className: 'form-control',\n                  'aria-describedby': 'id_email_status',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('email'),\n                  value: this.state.email })\n              ),\n              _react2.default.createElement(\n                _formGroup2.default,\n                { label: gettext(\"Password\"), 'for': 'id_password',\n                  labelClass: 'col-sm-4', controlClass: 'col-sm-8',\n                  validation: this.state.errors.password,\n                  extra: _react2.default.createElement(_passwordStrength2.default, { password: this.state.password,\n                    inputs: [this.state.username, this.state.email] }) },\n                _react2.default.createElement('input', { type: 'password', id: 'id_password', className: 'form-control',\n                  'aria-describedby': 'id_password_status',\n                  disabled: this.state.isLoading,\n                  onChange: this.bindInput('password'),\n                  value: this.state.password })\n              ),\n              _captcha2.default.component({\n                form: this,\n                labelClass: \"col-sm-4\",\n                controlClass: \"col-sm-8\"\n              })\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'modal-footer' },\n              this.getLegalFootNote(),\n              _react2.default.createElement(\n                _button2.default,\n                { className: 'btn-primary', loading: this.state.isLoading },\n                gettext(\"Register account\")\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return RegisterForm;\n}(_form2.default);\n\nvar RegisterComplete = exports.RegisterComplete = function (_React$Component) {\n  _inherits(RegisterComplete, _React$Component);\n\n  function RegisterComplete() {\n    _classCallCheck(this, RegisterComplete);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(RegisterComplete).apply(this, arguments));\n  }\n\n  _createClass(RegisterComplete, [{\n    key: 'getLead',\n    value: function getLead() {\n      if (this.props.activation === 'user') {\n        return gettext(\"%(username)s, your account has been created but you need to activate it before you will be able to sign in.\");\n      } else if (this.props.activation === 'admin') {\n        return gettext(\"%(username)s, your account has been created but board administrator will have to activate it before you will be able to sign in.\");\n      }\n    }\n  }, {\n    key: 'getSubscript',\n    value: function getSubscript() {\n      if (this.props.activation === 'user') {\n        return gettext(\"We have sent an e-mail to %(email)s with link that you have to click to activate your account.\");\n      } else if (this.props.activation === 'admin') {\n        return gettext(\"We will send an e-mail to %(email)s when this takes place.\");\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-dialog modal-message modal-register',\n          role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Registration complete\")\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-body' },\n            _react2.default.createElement(\n              'div',\n              { className: 'message-icon' },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                'info_outline'\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'message-body' },\n              _react2.default.createElement(\n                'p',\n                { className: 'lead' },\n                interpolate(this.getLead(), { 'username': this.props.username }, true)\n              ),\n              _react2.default.createElement(\n                'p',\n                null,\n                interpolate(this.getSubscript(), { 'email': this.props.email }, true)\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return RegisterComplete;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component2) {\n  _inherits(_class, _React$Component2);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this3.completeRegistration = function (apiResponse) {\n      if (apiResponse.activation === 'active') {\n        _modal2.default.hide();\n        _auth2.default.signIn(apiResponse);\n      } else {\n        _this3.setState({\n          complete: apiResponse\n        });\n      }\n    };\n\n    _this3.state = {\n      complete: false\n    };\n    return _this3;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.state.complete) {\n        return _react2.default.createElement(RegisterComplete, { activation: this.state.complete.activation,\n          username: this.state.complete.username,\n          email: this.state.complete.email });\n      } else {\n        return _react2.default.createElement(RegisterForm, { callback: this.completeRegistration });\n      }\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../index\":135,\"../services/ajax\":142,\"../services/auth\":143,\"../services/captcha\":144,\"../services/modal\":148,\"../services/snackbar\":151,\"../utils/banned-page\":154,\"../utils/validators\":162,\"./button\":57,\"./form\":70,\"./form-group\":69,\"./password-strength\":87,\"react\":\"react\"}],102:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.LinkSent = exports.RequestLinkForm = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\nvar RequestLinkForm = exports.RequestLinkForm = function (_Form) {\n  _inherits(RequestLinkForm, _Form);\n\n  function RequestLinkForm(props) {\n    _classCallCheck(this, RequestLinkForm);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RequestLinkForm).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n\n      'email': '',\n\n      'validators': {\n        'email': [validators.email()]\n      }\n    };\n    return _this;\n  }\n\n  _createClass(RequestLinkForm, [{\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        _snackbar2.default.error(gettext(\"Enter a valid email address.\"));\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('SEND_ACTIVATION_API'), {\n        'email': this.state.email\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      this.props.callback(apiResponse);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (['already_active', 'inactive_admin'].indexOf(rejection.code) > -1) {\n        _snackbar2.default.info(rejection.detail);\n      } else if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-request-activation-link' },\n        _react2.default.createElement(\n          'form',\n          { onSubmit: this.handleSubmit },\n          _react2.default.createElement(\n            'div',\n            { className: 'form-group' },\n            _react2.default.createElement(\n              'div',\n              { className: 'control-input' },\n              _react2.default.createElement('input', { type: 'text', className: 'form-control',\n                placeholder: gettext(\"Your e-mail address\"),\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('email'),\n                value: this.state.email })\n            )\n          ),\n          _react2.default.createElement(\n            _button2.default,\n            { className: 'btn-primary btn-block',\n              loading: this.state.isLoading },\n            gettext(\"Send link\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return RequestLinkForm;\n}(_form2.default);\n\nvar LinkSent = exports.LinkSent = function (_React$Component) {\n  _inherits(LinkSent, _React$Component);\n\n  function LinkSent() {\n    _classCallCheck(this, LinkSent);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(LinkSent).apply(this, arguments));\n  }\n\n  _createClass(LinkSent, [{\n    key: 'getMessage',\n    value: function getMessage() {\n      return interpolate(gettext(\"Activation link was sent to %(email)s\"), {\n        email: this.props.user.email\n      }, true);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-request-activation-link well-done' },\n        _react2.default.createElement(\n          'div',\n          { className: 'done-message' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-icon' },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'check'\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'message-body' },\n            _react2.default.createElement(\n              'p',\n              null,\n              this.getMessage()\n            )\n          ),\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn btn-primary btn-block',\n              onClick: this.props.callback },\n            gettext(\"Request another link\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return LinkSent;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component2) {\n  _inherits(_class, _React$Component2);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this3 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this3.complete = function (apiResponse) {\n      _this3.setState({\n        complete: apiResponse\n      });\n    };\n\n    _this3.reset = function () {\n      _this3.setState({\n        complete: false\n      });\n    };\n\n    _this3.state = {\n      complete: false\n    };\n    return _this3;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.state.complete) {\n        return _react2.default.createElement(LinkSent, { user: this.state.complete, callback: this.reset });\n      } else {\n        return _react2.default.createElement(RequestLinkForm, { callback: this.complete });\n      };\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../index\":135,\"../services/ajax\":142,\"../services/snackbar\":151,\"../utils/banned-page\":154,\"../utils/validators\":162,\"./button\":57,\"./form\":70,\"react\":\"react\"}],103:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AccountInactivePage = exports.LinkSent = exports.RequestResetForm = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar RequestResetForm = exports.RequestResetForm = function (_Form) {\n  _inherits(RequestResetForm, _Form);\n\n  function RequestResetForm(props) {\n    _classCallCheck(this, RequestResetForm);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(RequestResetForm).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n\n      'email': '',\n\n      'validators': {\n        'email': [validators.email()]\n      }\n    };\n    return _this;\n  }\n\n  _createClass(RequestResetForm, [{\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        _snackbar2.default.error(gettext(\"Enter a valid email address.\"));\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('SEND_PASSWORD_RESET_API'), {\n        'email': this.state.email\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      this.props.callback(apiResponse);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (['inactive_user', 'inactive_admin'].indexOf(rejection.code) > -1) {\n        this.props.showInactivePage(rejection);\n      } else if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-request-password-reset' },\n        _react2.default.createElement(\n          'form',\n          { onSubmit: this.handleSubmit },\n          _react2.default.createElement(\n            'div',\n            { className: 'form-group' },\n            _react2.default.createElement(\n              'div',\n              { className: 'control-input' },\n              _react2.default.createElement('input', { type: 'text', className: 'form-control',\n                placeholder: gettext(\"Your e-mail address\"),\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('email'),\n                value: this.state.email })\n            )\n          ),\n          _react2.default.createElement(\n            _button2.default,\n            { className: 'btn-primary btn-block',\n              loading: this.state.isLoading },\n            gettext(\"Send link\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return RequestResetForm;\n}(_form2.default);\n\nvar LinkSent = exports.LinkSent = function (_React$Component) {\n  _inherits(LinkSent, _React$Component);\n\n  function LinkSent() {\n    _classCallCheck(this, LinkSent);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(LinkSent).apply(this, arguments));\n  }\n\n  _createClass(LinkSent, [{\n    key: 'getMessage',\n    value: function getMessage() {\n      return interpolate(gettext(\"Reset password link was sent to %(email)s\"), {\n        email: this.props.user.email\n      }, true);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-request-password-reset well-done' },\n        _react2.default.createElement(\n          'div',\n          { className: 'done-message' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-icon' },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'check'\n            )\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'message-body' },\n            _react2.default.createElement(\n              'p',\n              null,\n              this.getMessage()\n            )\n          ),\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn btn-primary btn-block',\n              onClick: this.props.callback },\n            gettext(\"Request another link\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return LinkSent;\n}(_react2.default.Component);\n\nvar AccountInactivePage = exports.AccountInactivePage = function (_React$Component2) {\n  _inherits(AccountInactivePage, _React$Component2);\n\n  function AccountInactivePage() {\n    _classCallCheck(this, AccountInactivePage);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(AccountInactivePage).apply(this, arguments));\n  }\n\n  _createClass(AccountInactivePage, [{\n    key: 'getActivateButton',\n    value: function getActivateButton() {\n      if (this.props.activation === 'inactive_user') {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'p',\n          null,\n          _react2.default.createElement(\n            'a',\n            { href: _index2.default.get('REQUEST_ACTIVATION_URL') },\n            gettext(\"Activate your account.\")\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page page-message page-message-info page-forgotten-password-inactive' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-panel' },\n            _react2.default.createElement(\n              'div',\n              { className: 'message-icon' },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                'info_outline'\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'message-body' },\n              _react2.default.createElement(\n                'p',\n                { className: 'lead' },\n                gettext(\"Your account is inactive.\")\n              ),\n              _react2.default.createElement(\n                'p',\n                null,\n                this.props.message\n              ),\n              this.getActivateButton()\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return AccountInactivePage;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component3) {\n  _inherits(_class, _React$Component3);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this4 = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this4.complete = function (apiResponse) {\n      _this4.setState({\n        complete: apiResponse\n      });\n    };\n\n    _this4.reset = function () {\n      _this4.setState({\n        complete: false\n      });\n    };\n\n    _this4.state = {\n      complete: false\n    };\n    return _this4;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'showInactivePage',\n    value: function showInactivePage(apiResponse) {\n      _reactDom2.default.render(_react2.default.createElement(AccountInactivePage, { activation: apiResponse.code,\n        message: apiResponse.detail }), document.getElementById('page-mount'));\n    }\n    /* jshint ignore:end */\n\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.state.complete) {\n        return _react2.default.createElement(LinkSent, { user: this.state.complete, callback: this.reset });\n      } else {\n        return _react2.default.createElement(RequestResetForm, { callback: this.complete,\n          showInactivePage: this.showInactivePage });\n      };\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../index\":135,\"../services/ajax\":142,\"../services/snackbar\":151,\"../utils/banned-page\":154,\"../utils/validators\":162,\"./button\":57,\"./form\":70,\"react\":\"react\",\"react-dom\":\"react-dom\"}],104:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.PasswordChangedPage = exports.ResetPasswordForm = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _signIn = require('./sign-in.js');\n\nvar _signIn2 = _interopRequireDefault(_signIn);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _auth = require('../services/auth');\n\nvar _auth2 = _interopRequireDefault(_auth);\n\nvar _modal = require('../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _validators = require('../utils/validators');\n\nvar validators = _interopRequireWildcard(_validators);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar ResetPasswordForm = exports.ResetPasswordForm = function (_Form) {\n  _inherits(ResetPasswordForm, _Form);\n\n  function ResetPasswordForm(props) {\n    _classCallCheck(this, ResetPasswordForm);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(ResetPasswordForm).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n\n      'password': '',\n\n      'validators': {\n        'password': [validators.passwordMinLength(_index2.default.get('SETTINGS'))]\n      }\n    };\n    return _this;\n  }\n\n  _createClass(ResetPasswordForm, [{\n    key: 'clean',\n    value: function clean() {\n      if (this.isValid()) {\n        return true;\n      } else {\n        if (this.state.password.trim().length) {\n          _snackbar2.default.error(this.state.errors.password[0]);\n        } else {\n          _snackbar2.default.error(gettext(\"Enter new password.\"));\n        }\n        return false;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('CHANGE_PASSWORD_API'), {\n        'password': this.state.password\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess(apiResponse) {\n      this.props.callback(apiResponse);\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'well well-form well-form-reset-password' },\n        _react2.default.createElement(\n          'form',\n          { onSubmit: this.handleSubmit },\n          _react2.default.createElement(\n            'div',\n            { className: 'form-group' },\n            _react2.default.createElement(\n              'div',\n              { className: 'control-input' },\n              _react2.default.createElement('input', { type: 'password', className: 'form-control',\n                placeholder: gettext(\"Enter new password\"),\n                disabled: this.state.isLoading,\n                onChange: this.bindInput('password'),\n                value: this.state.password })\n            )\n          ),\n          _react2.default.createElement(\n            _button2.default,\n            { className: 'btn-primary btn-block',\n              loading: this.state.isLoading },\n            gettext(\"Change password\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ResetPasswordForm;\n}(_form2.default);\n\nvar PasswordChangedPage = exports.PasswordChangedPage = function (_React$Component) {\n  _inherits(PasswordChangedPage, _React$Component);\n\n  function PasswordChangedPage() {\n    _classCallCheck(this, PasswordChangedPage);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(PasswordChangedPage).apply(this, arguments));\n  }\n\n  _createClass(PasswordChangedPage, [{\n    key: 'getMessage',\n    value: function getMessage() {\n      return interpolate(gettext(\"%(username)s, your password has been changed successfully.\"), {\n        username: this.props.user.username\n      }, true);\n    }\n  }, {\n    key: 'showSignIn',\n    value: function showSignIn() {\n      _modal2.default.show(_signIn2.default);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page page-message page-message-success page-forgotten-password-changed' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'div',\n            { className: 'message-panel' },\n            _react2.default.createElement(\n              'div',\n              { className: 'message-icon' },\n              _react2.default.createElement(\n                'span',\n                { className: 'material-icon' },\n                'check'\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'message-body' },\n              _react2.default.createElement(\n                'p',\n                { className: 'lead' },\n                this.getMessage()\n              ),\n              _react2.default.createElement(\n                'p',\n                null,\n                gettext(\"You will have to sign in using new password before continuing.\")\n              ),\n              _react2.default.createElement(\n                'p',\n                null,\n                _react2.default.createElement(\n                  'button',\n                  { type: 'button', className: 'btn btn-primary', onClick: this.showSignIn },\n                  gettext(\"Sign in\")\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return PasswordChangedPage;\n}(_react2.default.Component);\n\nvar _class = function (_React$Component2) {\n  _inherits(_class, _React$Component2);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this3, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this3 = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this3), _this3.complete = function (apiResponse) {\n      _auth2.default.softSignOut();\n\n      // nuke \"redirect_to\" field so we don't end\n      // coming back to error page after sign in\n      $('#hidden-login-form input[name=\"redirect_to\"]').remove();\n\n      _reactDom2.default.render(_react2.default.createElement(PasswordChangedPage, { user: apiResponse }), document.getElementById('page-mount'));\n    }, _temp), _possibleConstructorReturn(_this3, _ret);\n  }\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'render',\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(ResetPasswordForm, { callback: this.complete });\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../index\":135,\"../services/ajax\":142,\"../services/auth\":143,\"../services/modal\":148,\"../services/snackbar\":151,\"../utils/banned-page\":154,\"../utils/validators\":162,\"./button\":57,\"./form\":70,\"./sign-in.js\":107,\"react\":\"react\",\"react-dom\":\"react-dom\"}],105:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"getClassName\",\n    value: function getClassName() {\n      if (this.props.className) {\n        return \"form-search \" + this.props.className;\n      } else {\n        return \"form-search\";\n      }\n    }\n  }, {\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"div\",\n        { className: this.getClassName() },\n        _react2.default.createElement(\"input\", { type: \"text\",\n          className: \"form-control\",\n          value: this.props.value,\n          onChange: this.props.onChange,\n          placeholder: this.props.placeholder || gettext(\"Search...\") }),\n        _react2.default.createElement(\n          \"span\",\n          { className: \"material-icon\" },\n          \"search\"\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],106:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.change = function (value) {\n      return function () {\n        _this.props.onChange({\n          target: {\n            value: value\n          }\n        });\n      };\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(_class, [{\n    key: \"getChoice\",\n    value: function getChoice() {\n      var _this2 = this;\n\n      var choice = null;\n      this.props.choices.map(function (item) {\n        if (item.value === _this2.props.value) {\n          choice = item;\n        }\n      });\n      return choice;\n    }\n  }, {\n    key: \"getIcon\",\n    value: function getIcon() {\n      return this.getChoice().icon;\n    }\n  }, {\n    key: \"getLabel\",\n    value: function getLabel() {\n      return this.getChoice().label;\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: \"render\",\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      var _this3 = this;\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"div\",\n        { className: \"btn-group btn-select-group\" },\n        _react2.default.createElement(\n          \"button\",\n          { type: \"button\",\n            className: \"btn btn-select dropdown-toggle\",\n            id: this.props.id || null,\n            \"data-toggle\": \"dropdown\",\n            \"aria-haspopup\": \"true\",\n            \"aria-expanded\": \"false\",\n            \"aria-describedby\": this.props['aria-describedby'] || null,\n            disabled: this.props.disabled || false },\n          _react2.default.createElement(\n            \"span\",\n            { className: \"material-icon\" },\n            this.getIcon()\n          ),\n          this.getLabel()\n        ),\n        _react2.default.createElement(\n          \"ul\",\n          { className: \"dropdown-menu\" },\n          this.props.choices.map(function (item, i) {\n            return _react2.default.createElement(\n              \"li\",\n              { key: i },\n              _react2.default.createElement(\n                \"button\",\n                { type: \"button\", className: \"btn-link\",\n                  onClick: _this3.change(item.value) },\n                _react2.default.createElement(\n                  \"span\",\n                  { className: \"material-icon\" },\n                  item.icon\n                ),\n                item.label\n              )\n            );\n          })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],107:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _button = require('./button');\n\nvar _button2 = _interopRequireDefault(_button);\n\nvar _form = require('./form');\n\nvar _form2 = _interopRequireDefault(_form);\n\nvar _ajax = require('../services/ajax');\n\nvar _ajax2 = _interopRequireDefault(_ajax);\n\nvar _modal = require('../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nvar _snackbar = require('../services/snackbar');\n\nvar _snackbar2 = _interopRequireDefault(_snackbar);\n\nvar _bannedPage = require('../utils/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_Form) {\n  _inherits(_class, _Form);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.state = {\n      'isLoading': false,\n      'showActivation': false,\n\n      'username': '',\n      'password': '',\n\n      'validators': {\n        'username': [],\n        'password': []\n      }\n    };\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'clean',\n    value: function clean() {\n      if (!this.isValid()) {\n        _snackbar2.default.error(gettext(\"Fill out both fields.\"));\n        return false;\n      } else {\n        return true;\n      }\n    }\n  }, {\n    key: 'send',\n    value: function send() {\n      return _ajax2.default.post(_index2.default.get('AUTH_API'), {\n        'username': this.state.username,\n        'password': this.state.password\n      });\n    }\n  }, {\n    key: 'handleSuccess',\n    value: function handleSuccess() {\n      var form = $('#hidden-login-form');\n\n      form.append('<input type=\"text\" name=\"username\" />');\n      form.append('<input type=\"password\" name=\"password\" />');\n\n      // fill out form with user credentials and submit it, this will tell\n      // Misago to redirect user back to right page, and will trigger browser's\n      // key ring feature\n      form.find('input[type=\"hidden\"]').val(_ajax2.default.getCsrfToken());\n      form.find('input[name=\"redirect_to\"]').val(window.location.pathname);\n      form.find('input[name=\"username\"]').val(this.state.username);\n      form.find('input[name=\"password\"]').val(this.state.password);\n      form.submit();\n\n      // keep form loading\n      this.setState({\n        'isLoading': true\n      });\n    }\n  }, {\n    key: 'handleError',\n    value: function handleError(rejection) {\n      if (rejection.status === 400) {\n        if (rejection.code === 'inactive_admin') {\n          _snackbar2.default.info(rejection.detail);\n        } else if (rejection.code === 'inactive_user') {\n          _snackbar2.default.info(rejection.detail);\n          this.setState({\n            'showActivation': true\n          });\n        } else if (rejection.code === 'banned') {\n          (0, _bannedPage2.default)(rejection.detail);\n          _modal2.default.hide();\n        } else {\n          _snackbar2.default.error(rejection.detail);\n        }\n      } else if (rejection.status === 403 && rejection.ban) {\n        (0, _bannedPage2.default)(rejection.ban);\n        _modal2.default.hide();\n      } else {\n        _snackbar2.default.apiError(rejection);\n      }\n    }\n  }, {\n    key: 'getActivationButton',\n    value: function getActivationButton() {\n      if (this.state.showActivation) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'a',\n          { href: _index2.default.get('REQUEST_ACTIVATION_URL'),\n            className: 'btn btn-success btn-block' },\n          gettext(\"Activate account\")\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'modal-dialog modal-sm modal-sign-in',\n          role: 'document' },\n        _react2.default.createElement(\n          'div',\n          { className: 'modal-content' },\n          _react2.default.createElement(\n            'div',\n            { className: 'modal-header' },\n            _react2.default.createElement(\n              'button',\n              { type: 'button', className: 'close', 'data-dismiss': 'modal',\n                'aria-label': gettext(\"Close\") },\n              _react2.default.createElement(\n                'span',\n                { 'aria-hidden': 'true' },\n                '×'\n              )\n            ),\n            _react2.default.createElement(\n              'h4',\n              { className: 'modal-title' },\n              gettext(\"Sign in\")\n            )\n          ),\n          _react2.default.createElement(\n            'form',\n            { onSubmit: this.handleSubmit },\n            _react2.default.createElement(\n              'div',\n              { className: 'modal-body' },\n              _react2.default.createElement(\n                'div',\n                { className: 'form-group' },\n                _react2.default.createElement(\n                  'div',\n                  { className: 'control-input' },\n                  _react2.default.createElement('input', { id: 'id_username', className: 'form-control', type: 'text',\n                    disabled: this.state.isLoading,\n                    placeholder: gettext(\"Username or e-mail\"),\n                    onChange: this.bindInput('username'),\n                    value: this.state.username })\n                )\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'form-group' },\n                _react2.default.createElement(\n                  'div',\n                  { className: 'control-input' },\n                  _react2.default.createElement('input', { id: 'id_password', className: 'form-control', type: 'password',\n                    disabled: this.state.isLoading,\n                    placeholder: gettext(\"Password\"),\n                    onChange: this.bindInput('password'),\n                    value: this.state.password })\n                )\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'modal-footer' },\n              this.getActivationButton(),\n              _react2.default.createElement(\n                _button2.default,\n                { className: 'btn-primary btn-block',\n                  loading: this.state.isLoading },\n                gettext(\"Sign in\")\n              ),\n              _react2.default.createElement(\n                'a',\n                { href: _index2.default.get('FORGOTTEN_PASSWORD_URL'),\n                  className: 'btn btn-default btn-block' },\n                gettext(\"Forgot password?\")\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_form2.default);\n\nexports.default = _class;\n\n},{\"../index\":135,\"../services/ajax\":142,\"../services/modal\":148,\"../services/snackbar\":151,\"../utils/banned-page\":154,\"./button\":57,\"./form\":70,\"react\":\"react\"}],108:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Snackbar = undefined;\nexports.select = select;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/* jshint ignore:start */\nvar TYPES_CLASSES = {\n  'info': 'alert-info',\n  'success': 'alert-success',\n  'warning': 'alert-warning',\n  'error': 'alert-danger'\n};\n/* jshint ignore:end */\n\nvar Snackbar = exports.Snackbar = function (_React$Component) {\n  _inherits(Snackbar, _React$Component);\n\n  function Snackbar() {\n    _classCallCheck(this, Snackbar);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(Snackbar).apply(this, arguments));\n  }\n\n  _createClass(Snackbar, [{\n    key: 'getSnackbarClass',\n    value: function getSnackbarClass() {\n      var snackbarClass = 'alerts-snackbar';\n      if (this.props.isVisible) {\n        snackbarClass += ' in';\n      } else {\n        snackbarClass += ' out';\n      }\n      return snackbarClass;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getSnackbarClass() },\n        _react2.default.createElement(\n          'p',\n          { className: 'alert ' + TYPES_CLASSES[this.props.type] },\n          this.props.message\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return Snackbar;\n}(_react2.default.Component);\n\nfunction select(state) {\n  return state.snackbar;\n}\n\n},{\"react\":\"react\"}],109:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: \"render\",\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"div\",\n        { className: \"threads-list ui-ready\" },\n        _react2.default.createElement(\n          \"ul\",\n          { className: \"list-group\" },\n          _react2.default.createElement(\n            \"li\",\n            { className: \"list-group-item empty-message\" },\n            \"I am threads list placeholder!\"\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],110:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactNav = exports.TabsNav = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouter = require('react-router');\n\nvar _li = require('../li');\n\nvar _li2 = _interopRequireDefault(_li);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\n//jshint ignore:line\n\n// jshint ignore:start\nvar navLinks = function navLinks(baseUrl, active, lists, hideNav) {\n  return lists.map(function (list) {\n    return _react2.default.createElement(\n      _li2.default,\n      { isControlled: true,\n        isActive: list.path === active.path,\n        key: baseUrl + list.path },\n      _react2.default.createElement(\n        _reactRouter.Link,\n        { to: baseUrl + list.path, onClick: hideNav },\n        _react2.default.createElement(\n          'span',\n          { className: 'hidden-xs hidden-sm' },\n          list.name\n        ),\n        _react2.default.createElement(\n          'span',\n          { className: 'hidden-md hidden-lg' },\n          list.longName\n        )\n      )\n    );\n  });\n};\n// jshint ignore:end\n\nvar TabsNav = exports.TabsNav = function (_React$Component) {\n  _inherits(TabsNav, _React$Component);\n\n  function TabsNav() {\n    _classCallCheck(this, TabsNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(TabsNav).apply(this, arguments));\n  }\n\n  _createClass(TabsNav, [{\n    key: 'render',\n    value: function render() {\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'div',\n        { className: 'page-tabs hidden-xs hidden-sm' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'ul',\n            { className: 'nav nav-pills' },\n            navLinks(this.props.baseUrl, this.props.list, this.props.lists, this.props.hideNav)\n          )\n        )\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return TabsNav;\n}(_react2.default.Component);\n\nvar CompactNav = exports.CompactNav = function (_React$Component2) {\n  _inherits(CompactNav, _React$Component2);\n\n  function CompactNav() {\n    _classCallCheck(this, CompactNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));\n  }\n\n  _createClass(CompactNav, [{\n    key: 'render',\n    value: function render() {\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu', role: 'menu' },\n        navLinks(this.props.baseUrl, this.props.list, this.props.lists, this.props.hideNav)\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return CompactNav;\n}(_react2.default.Component);\n\n},{\"../li\":71,\"react\":\"react\",\"react-router\":\"react-router\"}],111:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.select = select;\nexports.getLists = getLists;\nexports.paths = paths;\n\nvar _reactRedux = require('react-redux');\n\nvar _route = require('./route');\n\nvar _route2 = _interopRequireDefault(_route);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction select(store) {\n  return {\n    'tick': store.tick.tick,\n    'user': store.auth.user\n  };\n}\n\nfunction getLists() {\n  var lists = [{\n    path: '',\n    name: gettext(\"All\"),\n    longName: gettext(\"All threads\")\n  }];\n\n  if (_index2.default.get('isAuthenticated')) {\n    lists.push({\n      path: 'my/',\n      name: gettext(\"My\"),\n      longName: gettext(\"My threads\")\n    });\n    lists.push({\n      path: 'new/',\n      name: gettext(\"New\"),\n      longName: gettext(\"New threads\")\n    });\n    lists.push({\n      path: 'unread/',\n      name: gettext(\"Unread\"),\n      longName: gettext(\"Unread threads\")\n    });\n    lists.push({\n      path: 'subscribed/',\n      name: gettext(\"Subscribed\"),\n      longName: gettext(\"Subscribed threads\")\n    });\n  }\n\n  return lists;\n}\n\nfunction paths() {\n  var lists = getLists();\n  var paths = [];\n\n  _index2.default.get('CATEGORIES').forEach(function (category) {\n    lists.forEach(function (list) {\n      paths.push({\n        path: category.absolute_url + list.path,\n        component: (0, _reactRedux.connect)(select)(_route2.default),\n        category: category,\n\n        lists: lists,\n        list: list\n      });\n    });\n  });\n\n  return paths;\n}\n\n},{\"../../index\":135,\"./route\":112,\"react-redux\":\"react-redux\"}],112:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouter = require('react-router');\n\nvar _dropdownToggle = require('../dropdown-toggle');\n\nvar _dropdownToggle2 = _interopRequireDefault(_dropdownToggle);\n\nvar _navs = require('./navs');\n\nvar _titleUtils = require('./title-utils');\n\nvar _root = require('../threads-list/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _withDropdown = require('../with-dropdown');\n\nvar _withDropdown2 = _interopRequireDefault(_withDropdown);\n\nvar _pageTitle = require('../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_WithDropdown) {\n  _inherits(_class, _WithDropdown);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      _pageTitle2.default.set((0, _titleUtils.getPageTitle)(this.props.route));\n    }\n  }, {\n    key: 'getTitle',\n    value: function getTitle() {\n      return (0, _titleUtils.getTitle)(this.props.route);\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      var className = 'page page-threads';\n      className += ' page-threads-' + this.props.route.list;\n      if (this.props.route.category.css_class) {\n        className += ' page-' + this.props.route.category.css_class;\n      }\n      return className;\n    }\n  }, {\n    key: 'getHeaderClassName',\n    value: function getHeaderClassName() {\n      if (this.props.route.lists.length > 1) {\n        return 'page-header tabbed';\n      } else {\n        return 'page-header';\n      }\n    }\n  }, {\n    key: 'getGoBackButton',\n    value: function getGoBackButton() {\n      if (this.props.route.category.parent) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _reactRouter.Link,\n          { className: 'btn btn-default btn-aligned btn-icon btn-go-back pull-left',\n            to: this.props.route.category.parent.absolute_url + this.props.route.list.path },\n          _react2.default.createElement(\n            'span',\n            { className: 'material-icon' },\n            'keyboard_arrow_left'\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getTabsNav',\n    value: function getTabsNav() {\n      if (this.props.route.lists.length > 1) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_navs.TabsNav, { baseUrl: this.props.route.category.absolute_url,\n          list: this.props.route.list,\n          lists: this.props.route.lists,\n          hideNav: this.hideNav });\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getCompactNavToggle',\n    value: function getCompactNavToggle() {\n      if (this.props.route.lists.length > 1) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_dropdownToggle2.default, { toggleNav: this.toggleNav,\n          dropdown: this.state.dropdown });\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getCompactNav',\n    value: function getCompactNav() {\n      if (this.props.route.lists.length > 1) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_navs.CompactNav, { baseUrl: this.props.route.category.absolute_url,\n          list: this.props.route.list,\n          lists: this.props.route.lists,\n          hideNav: this.hideNav });\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          'div',\n          { className: this.getHeaderClassName() },\n          _react2.default.createElement(\n            'div',\n            { className: 'container' },\n            this.getGoBackButton(),\n            _react2.default.createElement(\n              'h1',\n              { className: 'pull-left' },\n              this.getTitle()\n            ),\n            this.getCompactNavToggle()\n          ),\n          this.getTabsNav()\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: this.getCompactNavClassName() },\n          this.getCompactNav()\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(_root2.default, null)\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_withDropdown2.default);\n\nexports.default = _class;\n\n},{\"../../services/page-title\":149,\"../dropdown-toggle\":68,\"../threads-list/root\":109,\"../with-dropdown\":133,\"./navs\":110,\"./title-utils\":113,\"react\":\"react\",\"react-router\":\"react-router\"}],113:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.getPageTitle = getPageTitle;\nexports.getTitle = getTitle;\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction getPageTitle(route) {\n  if (!route.category.special_role) {\n    if (route.list.path) {\n      return {\n        title: route.list.longName,\n        parent: route.category.name\n      };\n    } else {\n      return {\n        title: route.category.name\n      };\n    }\n  } else if (!_index2.default.get('CATEGORIES_ON_INDEX')) {\n    if (route.list.path) {\n      return {\n        title: route.list.longName\n      };\n    } else {\n      return null;\n    }\n  } else {\n    if (route.list.path) {\n      return {\n        title: route.list.longName,\n        parent: gettext(\"Threads\")\n      };\n    } else {\n      return {\n        title: gettext(\"Threads\")\n      };\n    }\n  }\n}\n\nfunction getTitle(route) {\n  if (!route.category.special_role) {\n    return route.category.name;\n  } else if (!_index2.default.get('CATEGORIES_ON_INDEX')) {\n    if (_index2.default.get('SETTINGS').forum_index_title) {\n      return _index2.default.get('SETTINGS').forum_index_title;\n    } else {\n      return _index2.default.get('SETTINGS').forum_name;\n    }\n  } else {\n    return gettext(\"Threads\");\n  }\n}\n\n},{\"../../index\":135}],114:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactGuestNav = exports.GuestNav = exports.GuestMenu = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _registerButton = require('../register-button');\n\nvar _registerButton2 = _interopRequireDefault(_registerButton);\n\nvar _signIn = require('../sign-in.js');\n\nvar _signIn2 = _interopRequireDefault(_signIn);\n\nvar _mobileNavbarDropdown = require('../../services/mobile-navbar-dropdown');\n\nvar _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);\n\nvar _modal = require('../../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\nvar GuestMenu = exports.GuestMenu = function (_React$Component) {\n  _inherits(GuestMenu, _React$Component);\n\n  function GuestMenu() {\n    _classCallCheck(this, GuestMenu);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(GuestMenu).apply(this, arguments));\n  }\n\n  _createClass(GuestMenu, [{\n    key: 'showSignInModal',\n    value: function showSignInModal() {\n      _modal2.default.show(_signIn2.default);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu user-dropdown dropdown-menu-right',\n          role: 'menu' },\n        _react2.default.createElement(\n          'li',\n          { className: 'guest-preview' },\n          _react2.default.createElement(\n            'h4',\n            null,\n            gettext(\"You are browsing as guest.\")\n          ),\n          _react2.default.createElement(\n            'p',\n            null,\n            gettext('Sign in or register to start and participate in discussions.')\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'row' },\n            _react2.default.createElement(\n              'div',\n              { className: 'col-xs-6' },\n              _react2.default.createElement(\n                'button',\n                { type: 'button', className: 'btn btn-default btn-block',\n                  onClick: this.showSignInModal },\n                gettext(\"Sign in\")\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'col-xs-6' },\n              _react2.default.createElement(\n                _registerButton2.default,\n                { className: 'btn-primary btn-block' },\n                gettext(\"Register\")\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return GuestMenu;\n}(_react2.default.Component);\n\nvar GuestNav = exports.GuestNav = function (_GuestMenu) {\n  _inherits(GuestNav, _GuestMenu);\n\n  function GuestNav() {\n    _classCallCheck(this, GuestNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(GuestNav).apply(this, arguments));\n  }\n\n  _createClass(GuestNav, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'nav nav-guest' },\n        _react2.default.createElement(\n          'button',\n          { type: 'button', className: 'btn navbar-btn btn-default',\n            onClick: this.showSignInModal },\n          gettext(\"Sign in\")\n        ),\n        _react2.default.createElement(\n          _registerButton2.default,\n          { className: 'navbar-btn btn-primary' },\n          gettext(\"Register\")\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return GuestNav;\n}(GuestMenu);\n\nvar CompactGuestNav = exports.CompactGuestNav = function (_React$Component2) {\n  _inherits(CompactGuestNav, _React$Component2);\n\n  function CompactGuestNav() {\n    _classCallCheck(this, CompactGuestNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactGuestNav).apply(this, arguments));\n  }\n\n  _createClass(CompactGuestNav, [{\n    key: 'showGuestMenu',\n    value: function showGuestMenu() {\n      _mobileNavbarDropdown2.default.show(GuestMenu);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: 'button', onClick: this.showGuestMenu },\n        _react2.default.createElement(_avatar2.default, { size: '64' })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return CompactGuestNav;\n}(_react2.default.Component);\n\n},{\"../../services/mobile-navbar-dropdown\":147,\"../../services/modal\":148,\"../avatar\":55,\"../register-button\":100,\"../sign-in.js\":107,\"react\":\"react\"}],115:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactUserMenu = exports.UserMenu = undefined;\nexports.select = select;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _guestNav = require('./guest-nav');\n\nvar _userNav = require('./user-nav');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\n// jshint ignore:line\n\nvar UserMenu = exports.UserMenu = function (_React$Component) {\n  _inherits(UserMenu, _React$Component);\n\n  function UserMenu() {\n    _classCallCheck(this, UserMenu);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserMenu).apply(this, arguments));\n  }\n\n  _createClass(UserMenu, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.props.isAuthenticated) {\n        return _react2.default.createElement(_userNav.UserNav, { user: this.props.user });\n      } else {\n        return _react2.default.createElement(_guestNav.GuestNav, null);\n      }\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return UserMenu;\n}(_react2.default.Component);\n\nvar CompactUserMenu = exports.CompactUserMenu = function (_React$Component2) {\n  _inherits(CompactUserMenu, _React$Component2);\n\n  function CompactUserMenu() {\n    _classCallCheck(this, CompactUserMenu);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactUserMenu).apply(this, arguments));\n  }\n\n  _createClass(CompactUserMenu, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      if (this.props.isAuthenticated) {\n        return _react2.default.createElement(_userNav.CompactUserNav, { user: this.props.user });\n      } else {\n        return _react2.default.createElement(_guestNav.CompactGuestNav, null);\n      }\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return CompactUserMenu;\n}(_react2.default.Component);\n\nfunction select(state) {\n  return state.auth;\n}\n\n},{\"./guest-nav\":114,\"./user-nav\":116,\"react\":\"react\"}],116:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactUserNav = exports.UserNav = exports.UserMenu = undefined;\nexports.selectUserMenu = selectUserMenu;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRedux = require('react-redux');\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _root = require('../change-avatar/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _mobileNavbarDropdown = require('../../services/mobile-navbar-dropdown');\n\nvar _mobileNavbarDropdown2 = _interopRequireDefault(_mobileNavbarDropdown);\n\nvar _modal = require('../../services/modal');\n\nvar _modal2 = _interopRequireDefault(_modal);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar UserMenu = exports.UserMenu = function (_React$Component) {\n  _inherits(UserMenu, _React$Component);\n\n  function UserMenu() {\n    _classCallCheck(this, UserMenu);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserMenu).apply(this, arguments));\n  }\n\n  _createClass(UserMenu, [{\n    key: 'logout',\n    value: function logout() {\n      var decision = confirm(gettext(\"Are you sure you want to sign out?\"));\n      if (decision) {\n        $('#hidden-logout-form').submit();\n      }\n    }\n  }, {\n    key: 'changeAvatar',\n    value: function changeAvatar() {\n      _modal2.default.show((0, _reactRedux.connect)(_root.select)(_root2.default));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu user-dropdown dropdown-menu-right',\n          role: 'menu' },\n        _react2.default.createElement(\n          'li',\n          { className: 'dropdown-header' },\n          _react2.default.createElement(\n            'strong',\n            null,\n            this.props.user.username\n          )\n        ),\n        _react2.default.createElement('li', { className: 'divider' }),\n        _react2.default.createElement(\n          'li',\n          null,\n          _react2.default.createElement(\n            'a',\n            { href: this.props.user.absolute_url },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'account_circle'\n            ),\n            gettext(\"See your profile\")\n          )\n        ),\n        _react2.default.createElement(\n          'li',\n          null,\n          _react2.default.createElement(\n            'a',\n            { href: _index2.default.get('USERCP_URL') },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'done_all'\n            ),\n            gettext(\"Change options\")\n          )\n        ),\n        _react2.default.createElement(\n          'li',\n          null,\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn-link', onClick: this.changeAvatar },\n            _react2.default.createElement(\n              'span',\n              { className: 'material-icon' },\n              'portrait'\n            ),\n            gettext(\"Change avatar\")\n          )\n        ),\n        _react2.default.createElement('li', { className: 'divider' }),\n        _react2.default.createElement(\n          'li',\n          { className: 'dropdown-buttons' },\n          _react2.default.createElement(\n            'button',\n            { type: 'button', className: 'btn btn-default btn-block',\n              onClick: this.logout },\n            gettext(\"Log out\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return UserMenu;\n}(_react2.default.Component);\n\nvar UserNav = exports.UserNav = function (_React$Component2) {\n  _inherits(UserNav, _React$Component2);\n\n  function UserNav() {\n    _classCallCheck(this, UserNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(UserNav).apply(this, arguments));\n  }\n\n  _createClass(UserNav, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'ul',\n        { className: 'ul nav navbar-nav nav-user' },\n        _react2.default.createElement(\n          'li',\n          { className: 'dropdown' },\n          _react2.default.createElement(\n            'a',\n            { href: this.props.user.absolute_url, className: 'dropdown-toggle',\n              'data-toggle': 'dropdown', 'aria-haspopup': 'true', 'aria-expanded': 'false',\n              role: 'button' },\n            _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '64' })\n          ),\n          _react2.default.createElement(UserMenu, { user: this.props.user })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return UserNav;\n}(_react2.default.Component);\n\nfunction selectUserMenu(state) {\n  return { user: state.auth.user };\n}\n\nvar CompactUserNav = exports.CompactUserNav = function (_React$Component3) {\n  _inherits(CompactUserNav, _React$Component3);\n\n  function CompactUserNav() {\n    _classCallCheck(this, CompactUserNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactUserNav).apply(this, arguments));\n  }\n\n  _createClass(CompactUserNav, [{\n    key: 'showUserMenu',\n    value: function showUserMenu() {\n      _mobileNavbarDropdown2.default.showConnected('user-menu', (0, _reactRedux.connect)(selectUserMenu)(UserMenu));\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'button',\n        { type: 'button', onClick: this.showUserMenu },\n        _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '64' })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return CompactUserNav;\n}(_react2.default.Component);\n\n},{\"../../index\":135,\"../../services/mobile-navbar-dropdown\":147,\"../../services/modal\":148,\"../avatar\":55,\"../change-avatar/root\":66,\"react\":\"react\",\"react-redux\":\"react-redux\"}],117:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.StatusLabel = exports.StatusIcon = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getClass',\n    value: function getClass() {\n      var status = '';\n      if (this.props.status.is_banned) {\n        status = 'banned';\n      } else if (this.props.status.is_hidden) {\n        status = 'offline';\n      } else if (this.props.status.is_online_hidden) {\n        status = 'online';\n      } else if (this.props.status.is_offline_hidden) {\n        status = 'offline';\n      } else if (this.props.status.is_online) {\n        status = 'online';\n      } else if (this.props.status.is_offline) {\n        status = 'offline';\n      }\n\n      return 'user-status user-' + status;\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'span',\n        { className: this.getClass() },\n        this.props.children\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\nvar StatusIcon = exports.StatusIcon = function (_React$Component2) {\n  _inherits(StatusIcon, _React$Component2);\n\n  function StatusIcon() {\n    _classCallCheck(this, StatusIcon);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(StatusIcon).apply(this, arguments));\n  }\n\n  _createClass(StatusIcon, [{\n    key: 'getIcon',\n    value: function getIcon() {\n      if (this.props.status.is_banned) {\n        return 'remove_circle_outline';\n      } else if (this.props.status.is_hidden) {\n        return 'help_outline';\n      } else if (this.props.status.is_online_hidden) {\n        return 'label';\n      } else if (this.props.status.is_offline_hidden) {\n        return 'label_outline';\n      } else if (this.props.status.is_online) {\n        return 'lens';\n      } else if (this.props.status.is_offline) {\n        return 'panorama_fish_eye';\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'span',\n        { className: 'material-icon status-icon' },\n        this.getIcon()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return StatusIcon;\n}(_react2.default.Component);\n\nvar StatusLabel = exports.StatusLabel = function (_React$Component3) {\n  _inherits(StatusLabel, _React$Component3);\n\n  function StatusLabel() {\n    _classCallCheck(this, StatusLabel);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(StatusLabel).apply(this, arguments));\n  }\n\n  _createClass(StatusLabel, [{\n    key: 'getHelp',\n    value: function getHelp() {\n      if (this.props.status.is_banned) {\n        if (this.props.status.banned_until) {\n          return interpolate(gettext(\"%(username)s is banned until %(ban_expires)s\"), {\n            username: this.props.user.username,\n            ban_expires: this.props.status.banned_until.format('LL, LT')\n          }, true);\n        } else {\n          return interpolate(gettext(\"%(username)s is banned\"), {\n            username: this.props.user.username\n          }, true);\n        }\n      } else if (this.props.status.is_hidden) {\n        return interpolate(gettext(\"%(username)s is hiding presence\"), {\n          username: this.props.user.username\n        }, true);\n      } else if (this.props.status.is_online_hidden) {\n        return interpolate(gettext(\"%(username)s is online (hidden)\"), {\n          username: this.props.user.username\n        }, true);\n      } else if (this.props.status.is_offline_hidden) {\n        return interpolate(gettext(\"%(username)s was last seen %(last_click)s (hidden)\"), {\n          username: this.props.user.username,\n          last_click: this.props.status.last_click.fromNow()\n        }, true);\n      } else if (this.props.status.is_online) {\n        return interpolate(gettext(\"%(username)s is online\"), {\n          username: this.props.user.username\n        }, true);\n      } else if (this.props.status.is_offline) {\n        return interpolate(gettext(\"%(username)s was last seen %(last_click)s\"), {\n          username: this.props.user.username,\n          last_click: this.props.status.last_click.fromNow()\n        }, true);\n      }\n    }\n  }, {\n    key: 'getLabel',\n    value: function getLabel() {\n      if (this.props.status.is_banned) {\n        return gettext(\"Banned\");\n      } else if (this.props.status.is_hidden) {\n        return gettext(\"Hidden\");\n      } else if (this.props.status.is_online_hidden) {\n        return gettext(\"Online (hidden)\");\n      } else if (this.props.status.is_offline_hidden) {\n        return gettext(\"Offline (hidden)\");\n      } else if (this.props.status.is_online) {\n        return gettext(\"Online\");\n      } else if (this.props.status.is_offline) {\n        return gettext(\"Offline\");\n      }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'span',\n        { className: this.props.className || \"status-label\",\n          title: this.getHelp() },\n        this.getLabel()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return StatusLabel;\n}(_react2.default.Component);\n\n},{\"react\":\"react\"}],118:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('./avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _random = require('../utils/random');\n\nvar random = _interopRequireWildcard(_random);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'renderUserAvatar',\n    value: function renderUserAvatar(item) {\n      if (item.changed_by) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'a',\n          { href: item.changed_by.absolute_url, className: 'user-avatar-wrapper' },\n          _react2.default.createElement(_avatar2.default, { user: item.changed_by, size: '100' })\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'span',\n            { className: 'user-avatar-wrapper' },\n            _react2.default.createElement(_avatar2.default, { size: '100' })\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'renderUsername',\n    value: function renderUsername(item) {\n      if (item.changed_by) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'a',\n          { href: item.changed_by.absolute_url, className: 'item-title' },\n          item.changed_by.username\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'span',\n            { className: 'item-title' },\n            item.changed_by_username\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'renderHistory',\n    value: function renderHistory() {\n      var _this2 = this;\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'username-history ui-ready' },\n        _react2.default.createElement(\n          'ul',\n          { className: 'list-group' },\n          this.props.changes.map(function (item) {\n            return _react2.default.createElement(\n              'li',\n              { className: 'list-group-item', key: item.id },\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-avatar' },\n                _this2.renderUserAvatar(item)\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-author' },\n                _this2.renderUsername(item)\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'change-old-username' },\n                  item.old_username\n                ),\n                _react2.default.createElement(\n                  'span',\n                  { className: 'material-icon' },\n                  'arrow_forward'\n                ),\n                _react2.default.createElement(\n                  'span',\n                  { className: 'change-new-username' },\n                  item.new_username\n                )\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-date' },\n                _react2.default.createElement(\n                  'abbr',\n                  { title: item.changed_on.format('LLL') },\n                  item.changed_on.fromNow()\n                )\n              )\n            );\n          })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getEmptyMessage',\n    value: function getEmptyMessage() {\n      if (this.props.emptyMessage) {\n        return this.props.emptyMessage;\n      } else {\n        return gettext(\"No name changes have been recorded for your account.\");\n      }\n    }\n  }, {\n    key: 'renderEmptyHistory',\n    value: function renderEmptyHistory() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'username-history ui-ready' },\n        _react2.default.createElement(\n          'ul',\n          { className: 'list-group' },\n          _react2.default.createElement(\n            'li',\n            { className: 'list-group-item empty-message' },\n            this.getEmptyMessage()\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'renderHistoryPreview',\n    value: function renderHistoryPreview() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'username-history ui-preview' },\n        _react2.default.createElement(\n          'ul',\n          { className: 'list-group' },\n          random.range(3, 5).map(function (i) {\n            return _react2.default.createElement(\n              'li',\n              { className: 'list-group-item', key: i },\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-avatar' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'user-avatar' },\n                  _react2.default.createElement(_avatar2.default, { size: '100' })\n                )\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-author' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'ui-preview-text', style: { width: random.int(30, 100) + \"px\" } },\n                  ' '\n                )\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'ui-preview-text', style: { width: random.int(30, 50) + \"px\" } },\n                  ' '\n                ),\n                _react2.default.createElement(\n                  'span',\n                  { className: 'material-icon' },\n                  'arrow_forward'\n                ),\n                _react2.default.createElement(\n                  'span',\n                  { className: 'ui-preview-text', style: { width: random.int(30, 50) + \"px\" } },\n                  ' '\n                )\n              ),\n              _react2.default.createElement(\n                'div',\n                { className: 'username-change-date' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'ui-preview-text', style: { width: random.int(50, 100) + \"px\" } },\n                  ' '\n                )\n              )\n            );\n          })\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      if (this.props.isLoaded) {\n        if (this.props.changes.length) {\n          return this.renderHistory();\n        } else {\n          return this.renderEmptyHistory();\n        }\n      } else {\n        return this.renderHistoryPreview();\n      }\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../utils/random\":159,\"./avatar\":55,\"react\":\"react\"}],119:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _userCard = require('./user-card');\n\nvar _userCard2 = _interopRequireDefault(_userCard);\n\nvar _userPreview = require('./user-preview');\n\nvar _userPreview2 = _interopRequireDefault(_userPreview);\n\nvar _batch = require('../../utils/batch');\n\nvar _batch2 = _interopRequireDefault(_batch);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getPager',\n    value: function getPager() {\n      if (this.props.pages > 1) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(Pager, this.props);\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.props.className) {\n        return \"users-cards-list \" + this.props.className + \" ui-ready\";\n      } else {\n        return \"users-cards-list ui-ready\";\n      }\n    }\n  }, {\n    key: 'getColClassName',\n    value: function getColClassName() {\n      return \"col-md-\" + 12 / this.props.cols;\n    }\n  }, {\n    key: 'getBody',\n    value: function getBody() {\n      var _this2 = this;\n\n      if (this.props.isLoaded) {\n        /* jshint ignore:start */\n        return (0, _batch2.default)(this.props.users, this.props.cols).map(function (row, r) {\n          return _react2.default.createElement(\n            'div',\n            { className: 'row', key: r },\n            row.map(function (user) {\n              return _react2.default.createElement(\n                'div',\n                { className: _this2.getColClassName(), key: user.id },\n                _react2.default.createElement(_userCard2.default, { user: user,\n                  showStatus: _this2.props.showStatus,\n                  showRank: _this2.props.showRank })\n              );\n            })\n          );\n        });\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          var row = [];\n          for (var i = 0; i < this.props.cols; i++) {\n            if (i === 0) {\n              row.push(this.getColClassName());\n            } else {\n              row.push(this.getColClassName() + ' hidden-xs hidden-sm');\n            }\n          }\n\n          return _react2.default.createElement(\n            'div',\n            { className: 'row' },\n            row.map(function (className, i) {\n              return _react2.default.createElement(\n                'div',\n                { className: className, key: i },\n                _react2.default.createElement(_userPreview2.default, { showStatus: _this2.props.showStatus })\n              );\n            })\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'users-cards-list ui-ready' },\n        this.getBody()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../utils/batch\":155,\"./user-card\":120,\"./user-preview\":121,\"react\":\"react\"}],120:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _userStatus = require('../user-status');\n\nvar _userStatus2 = _interopRequireDefault(_userStatus);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.props.user.rank.css_class) {\n        return 'user-card user-card-' + this.props.user.rank.css_class + ' ui-ready';\n      } else {\n        return 'user-card ui-ready';\n      }\n    }\n  }, {\n    key: 'getUserStatus',\n    value: function getUserStatus() {\n      if (this.props.showStatus) {\n        if (this.props.user.status) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            _userStatus2.default,\n            { user: this.props.user, status: this.props.user.status },\n            _react2.default.createElement(_userStatus.StatusIcon, { user: this.props.user,\n              status: this.props.user.status }),\n            _react2.default.createElement(_userStatus.StatusLabel, { user: this.props.user,\n              status: this.props.user.status,\n              className: 'status-label' })\n          );\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(\n              'span',\n              { className: 'user-status' },\n              _react2.default.createElement(\n                'span',\n                { className: 'status-icon ui-preview' },\n                ' '\n              ),\n              _react2.default.createElement(\n                'span',\n                { className: 'status-label ui-preview' },\n                ' '\n              )\n            );\n            /* jshint ignore:end */\n          }\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getRankName',\n    value: function getRankName() {\n      if (this.props.showRank) {\n        if (this.props.user.rank.is_tab) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'a',\n            { href: this.props.user.rank.absolute_url,\n              className: 'item-title rank-name' },\n            this.props.user.rank.name\n          );\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(\n              'span',\n              { className: 'item-title rank-name' },\n              this.props.user.rank.name\n            );\n            /* jshint ignore:end */\n          }\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getUserTitle',\n    value: function getUserTitle() {\n      if (this.props.user.title) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'span',\n          { className: 'user-title' },\n          this.props.user.title\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getUserJoinedOn',\n    value: function getUserJoinedOn() {\n      /* jshint ignore:start */\n      var title = interpolate(gettext(\"Joined on %(joined_on)s\"), {\n        'joined_on': this.props.user.joined_on.format('LL, LT')\n      }, true);\n\n      var age = interpolate(gettext(\"Joined %(joined_on)s\"), {\n        'joined_on': this.props.user.joined_on.fromNow()\n      }, true);\n\n      return _react2.default.createElement(\n        'span',\n        { className: 'user-joined-on', title: title },\n        age\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'getPostsCount',\n    value: function getPostsCount() {\n      var message = ngettext(\"%(posts)s post\", \"%(posts)s posts\", this.props.user.posts);\n\n      return interpolate(message, {\n        'posts': this.props.user.posts\n      }, true);\n    }\n  }, {\n    key: 'getThreadsCount',\n    value: function getThreadsCount() {\n      var message = ngettext(\"%(threads)s thread\", \"%(threads)s threads\", this.props.user.threads);\n\n      return interpolate(message, {\n        'threads': this.props.user.threads\n      }, true);\n    }\n  }, {\n    key: 'getFollowersCount',\n    value: function getFollowersCount() {\n      var message = ngettext(\"%(followers)s follower\", \"%(followers)s followers\", this.props.user.followers);\n\n      return interpolate(message, {\n        'followers': this.props.user.followers\n      }, true);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          'div',\n          { className: 'user-card-bg-image' },\n          _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '400', className: 'bg-image' }),\n          _react2.default.createElement(\n            'div',\n            { className: 'user-card-bg' },\n            _react2.default.createElement(\n              'div',\n              { className: 'user-details' },\n              _react2.default.createElement(\n                'div',\n                { className: 'user-avatar' },\n                _react2.default.createElement(\n                  'a',\n                  { href: this.props.user.absolute_url },\n                  _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '400' })\n                )\n              ),\n              _react2.default.createElement(\n                'h4',\n                { className: 'user-name' },\n                _react2.default.createElement(\n                  'a',\n                  { href: this.props.user.absolute_url, className: 'item-title' },\n                  this.props.user.username\n                )\n              ),\n              _react2.default.createElement(\n                'p',\n                { className: 'user-subscript' },\n                this.getUserStatus(),\n                this.getRankName(),\n                this.getUserTitle(),\n                this.getUserJoinedOn()\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'user-card-stats' },\n              _react2.default.createElement(\n                'ul',\n                { className: 'list-unstyled' },\n                _react2.default.createElement(\n                  'li',\n                  { className: 'user-posts-count' },\n                  this.getPostsCount()\n                ),\n                _react2.default.createElement(\n                  'li',\n                  { className: 'user-threads-count' },\n                  this.getThreadsCount()\n                ),\n                _react2.default.createElement(\n                  'li',\n                  { className: 'user-followers-count' },\n                  this.getFollowersCount()\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../avatar\":55,\"../user-status\":117,\"react\":\"react\"}],121:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _random = require('../../utils/random');\n\nvar random = _interopRequireWildcard(_random);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getUserStatus',\n    value: function getUserStatus() {\n      if (this.props.showStatus) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'span',\n          { className: 'user-status' },\n          _react2.default.createElement(\n            'span',\n            { className: 'status-icon ui-preview' },\n            ' '\n          ),\n          _react2.default.createElement(\n            'span',\n            { className: 'status-label ui-preview' },\n            ' '\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'user-card ui-preview' },\n        _react2.default.createElement(\n          'div',\n          { className: 'user-card-bg-image' },\n          _react2.default.createElement(_avatar2.default, { size: '400', className: 'bg-image' }),\n          _react2.default.createElement(\n            'div',\n            { className: 'user-card-bg' },\n            _react2.default.createElement(\n              'div',\n              { className: 'user-details' },\n              _react2.default.createElement(\n                'div',\n                { className: 'user-avatar' },\n                _react2.default.createElement(_avatar2.default, { size: '400' })\n              ),\n              _react2.default.createElement(\n                'h4',\n                { className: 'user-name' },\n                _react2.default.createElement(\n                  'span',\n                  { className: 'item-title' },\n                  _react2.default.createElement(\n                    'span',\n                    { className: 'ui-preview-text', style: { width: random.int(60, 150) + \"px\" } },\n                    ' '\n                  )\n                )\n              ),\n              _react2.default.createElement(\n                'p',\n                { className: 'user-subscript' },\n                this.getUserStatus(),\n                _react2.default.createElement(\n                  'span',\n                  { className: 'user-joined-on' },\n                  _react2.default.createElement(\n                    'span',\n                    { className: 'ui-preview-text', style: { width: random.int(30, 50) + \"px\" } },\n                    ' '\n                  )\n                )\n              )\n            ),\n            _react2.default.createElement(\n              'div',\n              { className: 'user-card-stats' },\n              _react2.default.createElement(\n                'ul',\n                { className: 'list-unstyled' },\n                _react2.default.createElement(\n                  'li',\n                  { className: 'user-posts-count' },\n                  _react2.default.createElement(\n                    'span',\n                    { className: 'ui-preview-text', style: { width: random.int(40, 70) + \"px\" } },\n                    ' '\n                  )\n                ),\n                _react2.default.createElement(\n                  'li',\n                  { className: 'user-threads-count' },\n                  _react2.default.createElement(\n                    'span',\n                    { className: 'ui-preview-text', style: { width: random.int(40, 70) + \"px\" } },\n                    ' '\n                  )\n                ),\n                _react2.default.createElement(\n                  'li',\n                  { className: 'user-followers-count' },\n                  _react2.default.createElement(\n                    'span',\n                    { className: 'ui-preview-text', style: { width: random.int(40, 70) + \"px\" } },\n                    ' '\n                  )\n                )\n              )\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../utils/random\":159,\"../avatar\":55,\"react\":\"react\"}],122:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getEmptyMessage',\n    value: function getEmptyMessage() {\n      return interpolate(gettext(\"No users have posted any new messages during last %(days)s days.\"), { 'days': this.props.trackedPeriod }, true);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'active-posters-list' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'p',\n            { className: 'lead' },\n            this.getEmptyMessage()\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],123:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouter = require('react-router');\n\nvar _avatar = require('../../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _userStatus = require('../../user-status');\n\nvar _userStatus2 = _interopRequireDefault(_userStatus);\n\nvar _index = require('../../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.props.rank.css_class) {\n        return \"list-group-item list-group-rank-\" + this.props.rank.css_class;\n      } else {\n        return \"list-group-item\";\n      }\n    }\n  }, {\n    key: 'getUserStatus',\n    value: function getUserStatus() {\n      if (this.props.user.status) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          _userStatus2.default,\n          { user: this.props.user, status: this.props.user.status },\n          _react2.default.createElement(_userStatus.StatusIcon, { user: this.props.user,\n            status: this.props.user.status }),\n          _react2.default.createElement(_userStatus.StatusLabel, { user: this.props.user,\n            status: this.props.user.status,\n            className: 'status-label hidden-xs hidden-sm' })\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'span',\n            { className: 'user-status' },\n            _react2.default.createElement(\n              'span',\n              { className: 'status-icon ui-preview' },\n              ' '\n            ),\n            _react2.default.createElement(\n              'span',\n              { className: 'status-label ui-preview hidden-xs hidden-sm' },\n              ' '\n            )\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getRankName',\n    value: function getRankName() {\n      if (this.props.rank.is_tab) {\n        /* jshint ignore:start */\n        var rankUrl = _index2.default.get('USERS_LIST_URL') + this.props.rank.slug + '/';\n        return _react2.default.createElement(\n          _reactRouter.Link,\n          { to: rankUrl, className: 'item-title rank-name' },\n          this.props.rank.name\n        );\n        /* jshint ignore:end */\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(\n            'span',\n            { className: 'item-title rank-name' },\n            this.props.rank.name\n          );\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'getUserTitle',\n    value: function getUserTitle() {\n      if (this.props.user.title) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'span',\n          { className: 'user-title hidden-xs hidden-sm' },\n          this.props.user.title\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'li',\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          'div',\n          { className: 'rank-user-avatar' },\n          _react2.default.createElement(\n            'a',\n            { href: this.props.user.absolute_url },\n            _react2.default.createElement(_avatar2.default, { user: this.props.user, size: '50' })\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'rank-user' },\n          _react2.default.createElement(\n            'div',\n            { className: 'user-name' },\n            _react2.default.createElement(\n              'a',\n              { href: this.props.user.absolute_url, className: 'item-title' },\n              this.props.user.username\n            )\n          ),\n          this.getUserStatus(),\n          this.getRankName(),\n          this.getUserTitle()\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'rank-position' },\n          _react2.default.createElement(\n            'strong',\n            null,\n            '#',\n            this.props.counter\n          ),\n          _react2.default.createElement(\n            'small',\n            null,\n            gettext(\"Rank\")\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'rank-posts-counted' },\n          _react2.default.createElement(\n            'strong',\n            null,\n            this.props.user.meta.score\n          ),\n          _react2.default.createElement(\n            'small',\n            null,\n            gettext(\"Ranked posts\")\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: 'rank-posts-total' },\n          _react2.default.createElement(\n            'strong',\n            null,\n            this.props.user.posts\n          ),\n          _react2.default.createElement(\n            'small',\n            null,\n            gettext(\"Total posts\")\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../../index\":135,\"../../avatar\":55,\"../../user-status\":117,\"react\":\"react\",\"react-router\":\"react-router\"}],124:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _avatar = require('../../avatar');\n\nvar _avatar2 = _interopRequireDefault(_avatar);\n\nvar _random = require('../../../utils/random');\n\nvar random = _interopRequireWildcard(_random);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'active-posters-list' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'p',\n            { className: 'lead ui-preview-paragraph' },\n            random.range(3, 4).map(function (i) {\n              return _react2.default.createElement(\n                'span',\n                { key: i, className: 'ui-preview-text', style: { width: random.int(50, 120) + \"px\" } },\n                ' '\n              );\n            })\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'active-posters ui-preview' },\n            _react2.default.createElement(\n              'ul',\n              { className: 'list-group' },\n              random.range(5, 10).map(function (i, counter) {\n                return _react2.default.createElement(\n                  'li',\n                  { key: i, className: 'list-group-item' },\n                  _react2.default.createElement(\n                    'div',\n                    { className: 'rank-user-avatar' },\n                    _react2.default.createElement(\n                      'span',\n                      null,\n                      _react2.default.createElement(_avatar2.default, { size: '50' })\n                    )\n                  ),\n                  _react2.default.createElement(\n                    'div',\n                    { className: 'rank-user' },\n                    _react2.default.createElement(\n                      'div',\n                      { className: 'user-name' },\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'item-title' },\n                        _react2.default.createElement(\n                          'span',\n                          { className: 'ui-preview-text', style: { width: random.int(30, 80) + \"px\" } },\n                          ' '\n                        )\n                      )\n                    ),\n                    _react2.default.createElement(\n                      'span',\n                      { className: 'user-status' },\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'status-icon ui-preview' },\n                        ' '\n                      ),\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'status-label ui-preview hidden-xs hidden-sm' },\n                        ' '\n                      )\n                    ),\n                    _react2.default.createElement(\n                      'span',\n                      { className: 'rank-name' },\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'ui-preview-text', style: { width: random.int(30, 50) + \"px\" } },\n                        ' '\n                      )\n                    ),\n                    _react2.default.createElement(\n                      'span',\n                      { className: 'user-title hidden-xs hidden-sm' },\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'ui-preview-text', style: { width: random.int(30, 50) + \"px\" } },\n                        ' '\n                      )\n                    )\n                  ),\n                  _react2.default.createElement(\n                    'div',\n                    { className: 'rank-position' },\n                    _react2.default.createElement(\n                      'strong',\n                      null,\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'ui-preview-text', style: { width: \"30px\" } },\n                        ' '\n                      )\n                    ),\n                    _react2.default.createElement(\n                      'small',\n                      null,\n                      gettext(\"Rank\")\n                    )\n                  ),\n                  _react2.default.createElement(\n                    'div',\n                    { className: 'rank-posts-counted' },\n                    _react2.default.createElement(\n                      'strong',\n                      null,\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'ui-preview-text', style: { width: \"30px\" } },\n                        ' '\n                      )\n                    ),\n                    _react2.default.createElement(\n                      'small',\n                      null,\n                      gettext(\"Ranked posts\")\n                    )\n                  ),\n                  _react2.default.createElement(\n                    'div',\n                    { className: 'rank-posts-total' },\n                    _react2.default.createElement(\n                      'strong',\n                      null,\n                      _react2.default.createElement(\n                        'span',\n                        { className: 'ui-preview-text', style: { width: \"30px\" } },\n                        ' '\n                      )\n                    ),\n                    _react2.default.createElement(\n                      'small',\n                      null,\n                      gettext(\"Total posts\")\n                    )\n                  )\n                );\n              })\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../../utils/random\":159,\"../../avatar\":55,\"react\":\"react\"}],125:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _listItem = require('./list-item');\n\nvar _listItem2 = _interopRequireDefault(_listItem);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getLeadMessage',\n    value: function getLeadMessage() {\n      var message = ngettext(\"%(posters)s most active poster from last %(days)s days.\", \"%(posters)s most active posters from last %(days)s days.\", this.props.count);\n\n      return interpolate(message, {\n        posters: this.props.count,\n        days: this.props.trackedPeriod\n      }, true);\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'active-posters-list' },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          _react2.default.createElement(\n            'p',\n            { className: 'lead' },\n            this.getLeadMessage()\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'active-posters ui-ready' },\n            _react2.default.createElement(\n              'ul',\n              { className: 'list-group' },\n              this.props.users.map(function (user, i) {\n                return _react2.default.createElement(_listItem2.default, { user: user,\n                  rank: user.rank,\n                  counter: i + 1,\n                  key: user.id });\n              })\n            )\n          )\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"./list-item\":123,\"react\":\"react\"}],126:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _listEmpty = require('./list-empty');\n\nvar _listEmpty2 = _interopRequireDefault(_listEmpty);\n\nvar _listLoading = require('./list-loading');\n\nvar _listLoading2 = _interopRequireDefault(_listLoading);\n\nvar _list = require('./list');\n\nvar _list2 = _interopRequireDefault(_list);\n\nvar _index = require('../../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _users = require('../../../reducers/users');\n\nvar _polls = require('../../../services/polls');\n\nvar _polls2 = _interopRequireDefault(_polls);\n\nvar _store = require('../../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _pageTitle = require('../../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.update = function (data) {\n      _store2.default.dispatch((0, _users.dehydrate)(data.results));\n\n      _this.setState({\n        isLoaded: true,\n\n        trackedPeriod: data.tracked_period,\n        count: data.count\n      });\n    };\n\n    if (_index2.default.has('USERS')) {\n      _this.initWithPreloadedData(_index2.default.pop('USERS'));\n    } else {\n      _this.initWithoutPreloadedData();\n    }\n\n    _this.startPolling();\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'initWithPreloadedData',\n    value: function initWithPreloadedData(data) {\n      this.state = {\n        isLoaded: true,\n\n        trackedPeriod: data.tracked_period,\n        count: data.count\n      };\n\n      _store2.default.dispatch((0, _users.dehydrate)(data.results));\n    }\n  }, {\n    key: 'initWithoutPreloadedData',\n    value: function initWithoutPreloadedData() {\n      this.state = {\n        isLoaded: false\n      };\n    }\n  }, {\n    key: 'startPolling',\n    value: function startPolling() {\n      _polls2.default.start({\n        poll: 'active-posters',\n        url: _index2.default.get('USERS_API'),\n        data: {\n          list: 'active'\n        },\n        frequency: 90 * 1000,\n        update: this.update\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'componentDidMount',\n\n    /* jshint ignore:end */\n\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: this.props.route.extra.name,\n        parent: gettext(\"Users\")\n      });\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      _polls2.default.stop('active-posters');\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      if (this.state.isLoaded) {\n        if (this.state.count > 0) {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_list2.default, { users: this.props.users,\n            trackedPeriod: this.state.trackedPeriod,\n            count: this.state.count });\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(_listEmpty2.default, { trackedPeriod: this.state.trackedPeriod });\n            /* jshint ignore:end */\n          }\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_listLoading2.default, null);\n          /* jshint ignore:end */\n        }\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../../index\":135,\"../../../reducers/users\":141,\"../../../services/page-title\":149,\"../../../services/polls\":150,\"../../../services/store\":152,\"./list\":125,\"./list-empty\":122,\"./list-loading\":124,\"react\":\"react\"}],127:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CompactNav = exports.TabsNav = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouter = require('react-router');\n\nvar _li = require('../li');\n\nvar _li2 = _interopRequireDefault(_li);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n//jshint ignore:line\n\n//jshint ignore:line\n\n// jshint ignore:start\nvar listUrl = function listUrl(baseUrl, list) {\n  var url = baseUrl;\n  if (list.component === 'rank') {\n    url += list.slug;\n  } else {\n    url += list.component;\n  }\n  return url + '/';\n};\n\nvar navLinks = function navLinks(baseUrl, lists, hideNav) {\n  return lists.map(function (list) {\n    var url = listUrl(baseUrl, list);\n    return _react2.default.createElement(\n      _li2.default,\n      { path: url,\n        key: url },\n      _react2.default.createElement(\n        _reactRouter.Link,\n        { to: url, onClick: hideNav },\n        list.name\n      )\n    );\n  });\n};\n// jshint ignore:end\n\nvar TabsNav = exports.TabsNav = function (_React$Component) {\n  _inherits(TabsNav, _React$Component);\n\n  function TabsNav() {\n    _classCallCheck(this, TabsNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(TabsNav).apply(this, arguments));\n  }\n\n  _createClass(TabsNav, [{\n    key: 'render',\n    value: function render() {\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'ul',\n        { className: 'nav nav-pills' },\n        navLinks(this.props.baseUrl, this.props.lists)\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return TabsNav;\n}(_react2.default.Component);\n\nvar CompactNav = exports.CompactNav = function (_React$Component2) {\n  _inherits(CompactNav, _React$Component2);\n\n  function CompactNav() {\n    _classCallCheck(this, CompactNav);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(CompactNav).apply(this, arguments));\n  }\n\n  _createClass(CompactNav, [{\n    key: 'render',\n    value: function render() {\n      // jshint ignore:start\n      return _react2.default.createElement(\n        'ul',\n        { className: 'dropdown-menu', role: 'menu' },\n        navLinks(this.props.baseUrl, this.props.lists, this.props.hideNav)\n      );\n      // jshint ignore:end\n    }\n  }]);\n\n  return CompactNav;\n}(_react2.default.Component);\n\n},{\"../../index\":135,\"../li\":71,\"react\":\"react\",\"react-router\":\"react-router\"}],128:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _root = require('../../users-list/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement(_root2.default, { isLoaded: false, cols: 3, showStatus: true })\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../users-list/root\":119,\"react\":\"react\"}],129:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _pager = require('./pager');\n\nvar _pager2 = _interopRequireDefault(_pager);\n\nvar _root = require('../../users-list/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getPager',\n    value: function getPager() {\n      if (this.props.pages > 1) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(_pager2.default, this.props);\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        null,\n        _react2.default.createElement(_root2.default, { users: this.props.users,\n          showStatus: true,\n          cols: 3,\n          isLoaded: true }),\n        this.getPager()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../users-list/root\":119,\"./pager\":130,\"react\":\"react\"}],130:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRouter = require('react-router');\n\nvar _resetScroll = require('../../../utils/reset-scroll');\n\nvar _resetScroll2 = _interopRequireDefault(_resetScroll);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'getPreviousPage',\n    value: function getPreviousPage() {\n      if (this.props.previous || this.props.first) {\n        /* jshint ignore:start */\n        var url = this.props.baseUrl;\n        if (this.props.previous) {\n          url += this.props.previous + '/';\n        }\n\n        return _react2.default.createElement(\n          'li',\n          { className: 'previous' },\n          _react2.default.createElement(\n            _reactRouter.Link,\n            { to: url, onClick: _resetScroll2.default },\n            _react2.default.createElement(\n              'span',\n              { 'aria-hidden': 'true', className: 'material-icon' },\n              'arrow_back'\n            )\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getNextPage',\n    value: function getNextPage() {\n      if (this.props.next) {\n        /* jshint ignore:start */\n        var url = this.props.baseUrl + this.props.next + '/';\n        return _react2.default.createElement(\n          'li',\n          { className: 'next' },\n          _react2.default.createElement(\n            _reactRouter.Link,\n            { to: url, onClick: _resetScroll2.default },\n            _react2.default.createElement(\n              'span',\n              { 'aria-hidden': 'true', className: 'material-icon' },\n              'arrow_forward'\n            )\n          )\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getProgessBar',\n    value: function getProgessBar() {\n      var _this2 = this;\n\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'ul',\n        { className: 'pager-progress-bar' },\n        this.props.page_range.map(function (page) {\n          var className = page === _this2.props.page ? 'active' : null;\n          var url = _this2.props.baseUrl;\n\n          if (page > 1) {\n            url += page + '/';\n          }\n\n          return _react2.default.createElement(\n            'li',\n            { key: page, className: className },\n            _react2.default.createElement(\n              _reactRouter.Link,\n              { to: url, onClick: _resetScroll2.default },\n              page\n            )\n          );\n        })\n      );\n      /* jshint ignore:end */\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'pager-undercontent' },\n        _react2.default.createElement(\n          'nav',\n          null,\n          _react2.default.createElement(\n            'ul',\n            { className: 'pager' },\n            this.getPreviousPage(),\n            this.getNextPage()\n          ),\n          this.getProgessBar()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../../utils/reset-scroll\":160,\"react\":\"react\",\"react-router\":\"react-router\"}],131:[function(require,module,exports){\n'use strict';\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _list = require('./list');\n\nvar _list2 = _interopRequireDefault(_list);\n\nvar _listLoading = require('./list-loading');\n\nvar _listLoading2 = _interopRequireDefault(_listLoading);\n\nvar _index = require('../../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _users = require('../../../reducers/users');\n\nvar _polls = require('../../../services/polls');\n\nvar _polls2 = _interopRequireDefault(_polls);\n\nvar _store = require('../../../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nvar _pageTitle = require('../../../services/page-title');\n\nvar _pageTitle2 = _interopRequireDefault(_pageTitle);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.update = function (data) {\n      _store2.default.dispatch((0, _users.dehydrate)(data.results));\n\n      data.isLoaded = true;\n      _this.setState(data);\n    };\n\n    if (_index2.default.has('USERS')) {\n      _this.initWithPreloadedData(_index2.default.pop('USERS'));\n    } else {\n      _this.initWithoutPreloadedData();\n    }\n\n    _this.startPolling(props.params.page || 1);\n    return _this;\n  }\n\n  _createClass(_class, [{\n    key: 'initWithPreloadedData',\n    value: function initWithPreloadedData(data) {\n      this.state = Object.assign(data, {\n        isLoaded: true\n      });\n      _store2.default.dispatch((0, _users.dehydrate)(data.results));\n    }\n  }, {\n    key: 'initWithoutPreloadedData',\n    value: function initWithoutPreloadedData() {\n      this.state = {\n        isLoaded: false\n      };\n    }\n  }, {\n    key: 'startPolling',\n    value: function startPolling(page) {\n      _polls2.default.start({\n        poll: 'rank-users',\n        url: _index2.default.get('USERS_API'),\n        data: {\n          rank: this.props.route.rank.id,\n          page: page\n        },\n        frequency: 90 * 1000,\n        update: this.update\n      });\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'componentDidMount',\n\n    /* jshint ignore:end */\n\n    value: function componentDidMount() {\n      _pageTitle2.default.set({\n        title: this.props.route.rank.name,\n        page: this.props.params.page || null,\n        parent: gettext(\"Users\")\n      });\n    }\n  }, {\n    key: 'componentWillUnmount',\n    value: function componentWillUnmount() {\n      _polls2.default.stop('rank-users');\n    }\n  }, {\n    key: 'componentWillReceiveProps',\n    value: function componentWillReceiveProps(nextProps) {\n      if (this.props.params.page !== nextProps.params.page) {\n        _pageTitle2.default.set({\n          title: this.props.route.rank.name,\n          page: nextProps.params.page || null,\n          parent: gettext(\"Users\")\n        });\n\n        this.setState({\n          isLoaded: false\n        });\n\n        _polls2.default.stop('rank-users');\n        this.startPolling(nextProps.params.page);\n      }\n    }\n  }, {\n    key: 'getClassName',\n    value: function getClassName() {\n      if (this.props.route.rank.css_class) {\n        return 'rank-users-list rank-users-' + this.props.route.rank.css_class;\n      } else {\n        return 'rank-users-list';\n      }\n    }\n  }, {\n    key: 'getRankDescription',\n    value: function getRankDescription() {\n      if (this.props.route.rank.description) {\n        /* jshint ignore:start */\n        return _react2.default.createElement(\n          'div',\n          { className: 'rank-description' },\n          _react2.default.createElement('div', { className: 'lead', dangerouslySetInnerHTML: {\n              __html: this.props.route.rank.description.html\n            } })\n        );\n        /* jshint ignore:end */\n      } else {\n          return null;\n        }\n    }\n  }, {\n    key: 'getComponent',\n    value: function getComponent() {\n      if (this.state.isLoaded) {\n        if (this.state.count > 0) {\n          /* jshint ignore:start */\n          var baseUrl = _index2.default.get('USERS_LIST_URL') + this.props.route.rank.slug + '/';\n          return _react2.default.createElement(_list2.default, _extends({ baseUrl: baseUrl,\n            users: this.props.users\n          }, this.state));\n          /* jshint ignore:end */\n        } else {\n            /* jshint ignore:start */\n            return _react2.default.createElement(\n              'p',\n              { className: 'lead' },\n              gettext(\"There are no users with this rank at the moment.\")\n            );\n            /* jshint ignore:end */\n          }\n      } else {\n          /* jshint ignore:start */\n          return _react2.default.createElement(_listLoading2.default, null);\n          /* jshint ignore:end */\n        }\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: this.getClassName() },\n        _react2.default.createElement(\n          'div',\n          { className: 'container' },\n          this.getRankDescription(),\n          this.getComponent()\n        )\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"../../../index\":135,\"../../../reducers/users\":141,\"../../../services/page-title\":149,\"../../../services/polls\":150,\"../../../services/store\":152,\"./list\":129,\"./list-loading\":128,\"react\":\"react\"}],132:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.select = select;\nexports.paths = paths;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactRedux = require('react-redux');\n\nvar _dropdownToggle = require('../dropdown-toggle');\n\nvar _dropdownToggle2 = _interopRequireDefault(_dropdownToggle);\n\nvar _navs = require('./navs');\n\nvar _root = require('./active-posters/root');\n\nvar _root2 = _interopRequireDefault(_root);\n\nvar _root3 = require('./rank/root');\n\nvar _root4 = _interopRequireDefault(_root3);\n\nvar _withDropdown = require('../with-dropdown');\n\nvar _withDropdown2 = _interopRequireDefault(_withDropdown);\n\nvar _index = require('../../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n// jshint ignore:line\n\nvar _class = function (_WithDropdown) {\n  _inherits(_class, _WithDropdown);\n\n  function _class() {\n    _classCallCheck(this, _class);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(_class).apply(this, arguments));\n  }\n\n  _createClass(_class, [{\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        'div',\n        { className: 'page page-users-lists' },\n        _react2.default.createElement(\n          'div',\n          { className: 'page-header tabbed' },\n          _react2.default.createElement(\n            'div',\n            { className: 'container' },\n            _react2.default.createElement(\n              'h1',\n              { className: 'pull-left' },\n              gettext(\"Users\")\n            ),\n            _react2.default.createElement(_dropdownToggle2.default, { toggleNav: this.toggleNav,\n              dropdown: this.state.dropdown })\n          ),\n          _react2.default.createElement(\n            'div',\n            { className: 'page-tabs hidden-xs hidden-sm' },\n            _react2.default.createElement(\n              'div',\n              { className: 'container' },\n              _react2.default.createElement(_navs.TabsNav, { lists: _index2.default.get('USERS_LISTS'),\n                baseUrl: _index2.default.get('USERS_LIST_URL') })\n            )\n          )\n        ),\n        _react2.default.createElement(\n          'div',\n          { className: this.getCompactNavClassName() },\n          _react2.default.createElement(_navs.CompactNav, { lists: _index2.default.get('USERS_LISTS'),\n            baseUrl: _index2.default.get('USERS_LIST_URL'),\n            hideNav: this.hideNav })\n        ),\n        this.props.children\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_withDropdown2.default);\n\nexports.default = _class;\nfunction select(store) {\n  return {\n    'tick': store.tick.tick,\n    'user': store.auth.user,\n    'users': store.users\n  };\n}\n\nfunction paths() {\n  var paths = [];\n\n  _index2.default.get('USERS_LISTS').forEach(function (item) {\n    if (item.component === 'rank') {\n      paths.push({\n        path: _index2.default.get('USERS_LIST_URL') + item.slug + '/:page/',\n        component: (0, _reactRedux.connect)(select)(_root4.default),\n        rank: item\n      });\n      paths.push({\n        path: _index2.default.get('USERS_LIST_URL') + item.slug + '/',\n        component: (0, _reactRedux.connect)(select)(_root4.default),\n        rank: item\n      });\n    } else if (item.component === 'active-posters') {\n      paths.push({\n        path: _index2.default.get('USERS_LIST_URL') + item.component + '/',\n        component: (0, _reactRedux.connect)(select)(_root2.default),\n        extra: {\n          name: item.name\n        }\n      });\n    }\n  });\n\n  return paths;\n}\n\n},{\"../../index\":135,\"../dropdown-toggle\":68,\"../with-dropdown\":133,\"./active-posters/root\":126,\"./navs\":127,\"./rank/root\":131,\"react\":\"react\",\"react-redux\":\"react-redux\"}],133:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class(props) {\n    _classCallCheck(this, _class);\n\n    var _this = _possibleConstructorReturn(this, Object.getPrototypeOf(_class).call(this, props));\n\n    _this.toggleNav = function () {\n      _this.setState({\n        dropdown: !_this.state.dropdown\n      });\n    };\n\n    _this.hideNav = function () {\n      _this.setState({\n        dropdown: false\n      });\n    };\n\n    _this.state = {\n      dropdown: false\n    };\n    return _this;\n  }\n\n  /* jshint ignore:start */\n\n  _createClass(_class, [{\n    key: 'getCompactNavClassName',\n\n    /* jshint ignore:end */\n\n    value: function getCompactNavClassName() {\n      if (this.state.dropdown) {\n        return 'compact-nav open';\n      } else {\n        return 'compact-nav';\n      }\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],134:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _react = require(\"react\");\n\nvar _react2 = _interopRequireDefault(_react);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar _class = function (_React$Component) {\n  _inherits(_class, _React$Component);\n\n  function _class() {\n    var _Object$getPrototypeO;\n\n    var _temp, _this, _ret;\n\n    _classCallCheck(this, _class);\n\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_Object$getPrototypeO = Object.getPrototypeOf(_class)).call.apply(_Object$getPrototypeO, [this].concat(args))), _this), _this.toggle = function () {\n      _this.props.onChange({\n        target: {\n          value: !_this.props.value\n        }\n      });\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n\n  _createClass(_class, [{\n    key: \"getClassName\",\n    value: function getClassName() {\n      if (this.props.value) {\n        return \"btn btn-yes-no btn-yes-no-on\";\n      } else {\n        return \"btn btn-yes-no btn-yes-no-off\";\n      }\n    }\n  }, {\n    key: \"getIcon\",\n    value: function getIcon() {\n      if (this.props.value) {\n        return this.props.iconOn || 'check_box';\n      } else {\n        return this.props.iconOff || 'check_box_outline_blank';\n      }\n    }\n  }, {\n    key: \"getLabel\",\n    value: function getLabel() {\n      if (this.props.value) {\n        return this.props.labelOn || gettext(\"yes\");\n      } else {\n        return this.props.labelOff || gettext(\"no\");\n      }\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: \"render\",\n\n    /* jshint ignore:end */\n\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement(\n        \"button\",\n        { type: \"button\",\n          onClick: this.toggle,\n          className: this.getClassName(),\n          id: this.props.id || null,\n          \"aria-describedby\": this.props['aria-describedby'] || null,\n          disabled: this.props.disabled || false },\n        _react2.default.createElement(\n          \"span\",\n          { className: \"material-icon\" },\n          this.getIcon()\n        ),\n        this.getLabel()\n      );\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return _class;\n}(_react2.default.Component);\n\nexports.default = _class;\n\n},{\"react\":\"react\"}],135:[function(require,module,exports){\n(function (global){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Misago = undefined;\n\nvar _orderedList = require('./utils/ordered-list');\n\nvar _orderedList2 = _interopRequireDefault(_orderedList);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Misago = exports.Misago = function () {\n  function Misago() {\n    _classCallCheck(this, Misago);\n\n    this._initializers = [];\n    this._context = {};\n  }\n\n  _createClass(Misago, [{\n    key: 'addInitializer',\n    value: function addInitializer(initializer) {\n      this._initializers.push({\n        key: initializer.name,\n\n        item: initializer.initializer,\n\n        after: initializer.after,\n        before: initializer.before\n      });\n    }\n  }, {\n    key: 'init',\n    value: function init(context) {\n      var _this = this;\n\n      this._context = context;\n\n      var initOrder = new _orderedList2.default(this._initializers).orderedValues();\n      initOrder.forEach(function (initializer) {\n        initializer(_this);\n      });\n    }\n\n    // context accessors\n\n  }, {\n    key: 'has',\n    value: function has(key) {\n      return !!this._context[key];\n    }\n  }, {\n    key: 'get',\n    value: function get(key, fallback) {\n      if (this.has(key)) {\n        return this._context[key];\n      } else {\n        return fallback || undefined;\n      }\n    }\n  }, {\n    key: 'pop',\n    value: function pop(key) {\n      if (this.has(key)) {\n        var value = this._context[key];\n        this._context[key] = null;\n        return value;\n      } else {\n        return undefined;\n      }\n    }\n  }]);\n\n  return Misago;\n}();\n\n// create  singleton\n\nvar misago = new Misago();\n\n// expose it globally\nglobal.misago = misago;\n\n// and export it for tests and stuff\nexports.default = misago;\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{\"./utils/ordered-list\":158}],136:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SIGN_OUT = exports.SIGN_IN = exports.PATCH_USER = exports.initialState = undefined;\nexports.patchUser = patchUser;\nexports.signIn = signIn;\nexports.signOut = signOut;\nexports.default = auth;\n\nvar _users = require('./users');\n\nvar initialState = exports.initialState = {\n  signedIn: false,\n  signedOut: false\n};\n\nvar PATCH_USER = exports.PATCH_USER = 'PATCH_USER';\nvar SIGN_IN = exports.SIGN_IN = 'SIGN_IN';\nvar SIGN_OUT = exports.SIGN_OUT = 'SIGN_OUT';\n\nfunction patchUser(patch) {\n  return {\n    type: PATCH_USER,\n    patch: patch\n  };\n}\n\nfunction signIn(user) {\n  return {\n    type: SIGN_IN,\n    user: user\n  };\n}\n\nfunction signOut() {\n  var soft = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0];\n\n  return {\n    type: SIGN_OUT,\n    soft: soft\n  };\n}\n\nfunction auth() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  switch (action.type) {\n    case PATCH_USER:\n      var newState = Object.assign({}, state);\n      newState.user = Object.assign({}, state.user, action.patch);\n      return newState;\n\n    case SIGN_IN:\n      return Object.assign({}, state, {\n        signedIn: action.user\n      });\n\n    case SIGN_OUT:\n      return Object.assign({}, state, {\n        isAuthenticated: false,\n        isAnonymous: true,\n        signedOut: !action.soft\n      });\n\n    case _users.UPDATE_AVATAR:\n      if (state.isAuthenticated && state.user.id === action.userId) {\n        var _newState = Object.assign({}, state);\n        _newState.user = Object.assign({}, state.user, {\n          'avatar_hash': action.avatarHash\n        });\n        return _newState;\n      }\n      return state;\n\n    case _users.UPDATE_USERNAME:\n      if (state.isAuthenticated && state.user.id === action.userId) {\n        var _newState2 = Object.assign({}, state);\n        _newState2.user = Object.assign({}, state.user, {\n          username: action.username,\n          slug: action.slug\n        });\n        return _newState2;\n      }\n      return state;\n\n    default:\n      return state;\n  }\n}\n\n},{\"./users\":141}],137:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.PATCH_PROFILE = exports.DEHYDRATE_PROFILE = undefined;\nexports.dehydrate = dehydrate;\nexports.patchProfile = patchProfile;\nexports.default = auth;\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _users = require('./users');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar DEHYDRATE_PROFILE = exports.DEHYDRATE_PROFILE = 'DEHYDRATE_PROFILE';\nvar PATCH_PROFILE = exports.PATCH_PROFILE = 'PATCH_PROFILE';\n\nfunction dehydrate(profile) {\n  return {\n    type: DEHYDRATE_PROFILE,\n    profile: profile\n  };\n}\n\nfunction patchProfile(patch) {\n  return {\n    type: PATCH_PROFILE,\n    patch: patch\n  };\n}\n\nfunction auth() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  switch (action.type) {\n    case DEHYDRATE_PROFILE:\n      return Object.assign({}, action.profile, {\n        joined_on: (0, _moment2.default)(action.profile.joined_on),\n        status: (0, _users.dehydrateStatus)(action.profile.status)\n      });\n\n    case PATCH_PROFILE:\n      return Object.assign({}, state, action.patch);\n\n    case _users.UPDATE_AVATAR:\n      if (state.id === action.userId) {\n        return Object.assign({}, state, {\n          avatar_hash: action.avatarHash\n        });\n      }\n      return state;\n\n    case _users.UPDATE_USERNAME:\n      if (state.id === action.userId) {\n        return Object.assign({}, state, {\n          username: action.username,\n          slug: action.slug\n        });\n      }\n      return state;\n\n    default:\n      return state;\n  }\n}\n\n},{\"./users\":141,\"moment\":\"moment\"}],138:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.showSnackbar = showSnackbar;\nexports.hideSnackbar = hideSnackbar;\nexports.default = snackbar;\nvar initialState = exports.initialState = {\n  type: 'info',\n  message: '',\n  isVisible: false\n};\n\nvar SHOW_SNACKBAR = exports.SHOW_SNACKBAR = 'SHOW_SNACKBAR';\nvar HIDE_SNACKBAR = exports.HIDE_SNACKBAR = 'HIDE_SNACKBAR';\n\nfunction showSnackbar(message, type) {\n  return {\n    type: SHOW_SNACKBAR,\n    message: message,\n    messageType: type\n  };\n}\n\nfunction hideSnackbar() {\n  return {\n    type: HIDE_SNACKBAR\n  };\n}\n\nfunction snackbar() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  if (action.type === SHOW_SNACKBAR) {\n    return {\n      type: action.messageType,\n      message: action.message,\n      isVisible: true\n    };\n  } else if (action.type === HIDE_SNACKBAR) {\n    return Object.assign({}, state, {\n      isVisible: false\n    });\n  } else {\n    return state;\n  }\n}\n\n},{}],139:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.doTick = doTick;\nexports.default = tick;\nvar initialState = exports.initialState = {\n  tick: 0\n};\n\nvar TICK = exports.TICK = 'TICK';\n\nfunction doTick() {\n  return {\n    type: TICK\n  };\n}\n\nfunction tick() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? initialState : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  if (action.type === TICK) {\n    return Object.assign({}, state, {\n      tick: state.tick + 1\n    });\n  } else {\n    return state;\n  }\n}\n\n},{}],140:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DEHYDRATE_HISTORY = exports.APPEND_HISTORY = exports.ADD_NAME_CHANGE = undefined;\nexports.addNameChange = addNameChange;\nexports.append = append;\nexports.dehydrate = dehydrate;\nexports.default = username;\n\nvar _users = require('./users');\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar ADD_NAME_CHANGE = exports.ADD_NAME_CHANGE = 'ADD_NAME_CHANGE';\nvar APPEND_HISTORY = exports.APPEND_HISTORY = 'APPEND_HISTORY';\nvar DEHYDRATE_HISTORY = exports.DEHYDRATE_HISTORY = 'DEHYDRATE_HISTORY';\n\nfunction addNameChange(change, user, changedBy) {\n  return {\n    type: ADD_NAME_CHANGE,\n    change: change,\n    user: user,\n    changedBy: changedBy\n  };\n}\n\nfunction append(items) {\n  return {\n    type: APPEND_HISTORY,\n    items: items\n  };\n}\n\nfunction dehydrate(items) {\n  return {\n    type: DEHYDRATE_HISTORY,\n    items: items\n  };\n}\n\nfunction username() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  switch (action.type) {\n    case ADD_NAME_CHANGE:\n      var newState = state.slice();\n      newState.unshift({\n        id: Math.floor(Date.now() / 1000), // just small hax for getting id\n        changed_by: action.changedBy,\n        changed_by_username: action.changedBy.username,\n        changed_on: (0, _moment2.default)(),\n        new_username: action.change.username,\n        old_username: action.user.username\n      });\n      return newState;\n\n    case APPEND_HISTORY:\n      return state.concat(action.items.map(function (item) {\n        return Object.assign({}, item, {\n          changed_on: (0, _moment2.default)(item.changed_on)\n        });\n      }));\n\n    case DEHYDRATE_HISTORY:\n      return action.items.map(function (item) {\n        return Object.assign({}, item, {\n          changed_on: (0, _moment2.default)(item.changed_on)\n        });\n      });\n\n    case _users.UPDATE_AVATAR:\n      return state.map(function (item) {\n        item = Object.assign({}, item);\n        if (item.changed_by && item.changed_by.id === action.userId) {\n          item.changed_by = Object.assign({}, item.changed_by, {\n            'avatar_hash': action.avatarHash\n          });\n        }\n\n        return item;\n      });\n\n    case _users.UPDATE_USERNAME:\n      return state.map(function (item) {\n        item = Object.assign({}, item);\n        if (item.changed_by && item.changed_by.id === action.userId) {\n          item.changed_by = Object.assign({}, item.changed_by, {\n            'username': action.username,\n            'slug': action.slug\n          });\n        }\n\n        return Object.assign({}, item);\n      });\n\n    default:\n      return state;\n  }\n}\n\n},{\"./users\":141,\"moment\":\"moment\"}],141:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.UPDATE_USERNAME = exports.UPDATE_AVATAR = exports.DEHYDRATE_USERS = exports.APPEND_USERS = undefined;\nexports.append = append;\nexports.dehydrate = dehydrate;\nexports.dehydrateStatus = dehydrateStatus;\nexports.updateAvatar = updateAvatar;\nexports.updateUsername = updateUsername;\nexports.default = user;\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar APPEND_USERS = exports.APPEND_USERS = 'APPEND_USERS';\nvar DEHYDRATE_USERS = exports.DEHYDRATE_USERS = 'DEHYDRATE_USERS';\nvar UPDATE_AVATAR = exports.UPDATE_AVATAR = 'UPDATE_AVATAR';\nvar UPDATE_USERNAME = exports.UPDATE_USERNAME = 'UPDATE_USERNAME';\n\nfunction append(items) {\n  return {\n    type: APPEND_USERS,\n    items: items\n  };\n}\n\nfunction dehydrate(items) {\n  return {\n    type: DEHYDRATE_USERS,\n    items: items\n  };\n}\n\nfunction dehydrateStatus(status) {\n  if (status) {\n    return Object.assign({}, status, {\n      last_click: status.last_click ? (0, _moment2.default)(status.last_click) : null,\n      banned_until: status.banned_until ? (0, _moment2.default)(status.banned_until) : null\n    });\n  } else {\n    return null;\n  }\n}\n\nfunction updateAvatar(user, avatarHash) {\n  return {\n    type: UPDATE_AVATAR,\n    userId: user.id,\n    avatarHash: avatarHash\n  };\n}\n\nfunction updateUsername(user, username, slug) {\n  return {\n    type: UPDATE_USERNAME,\n    userId: user.id,\n    username: username,\n    slug: slug\n  };\n}\n\nfunction user() {\n  var state = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];\n  var action = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];\n\n  switch (action.type) {\n    case APPEND_USERS:\n      return state.concat(action.items.map(function (item) {\n        return Object.assign({}, item, {\n          joined_on: (0, _moment2.default)(item.joined_on),\n          status: dehydrateStatus(item.status)\n        });\n      }));\n\n    case DEHYDRATE_USERS:\n      return action.items.map(function (item) {\n        return Object.assign({}, item, {\n          joined_on: (0, _moment2.default)(item.joined_on),\n          status: dehydrateStatus(item.status)\n        });\n      });\n\n    case UPDATE_AVATAR:\n      return state.map(function (item) {\n        item = Object.assign({}, item);\n        if (item.id === action.userId) {\n          item.avatar_hash = action.avatarHash;\n        }\n\n        return item;\n      });\n\n    default:\n      return state;\n  }\n}\n\n},{\"moment\":\"moment\"}],142:[function(require,module,exports){\n'use strict';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Ajax = exports.Ajax = function () {\n  function Ajax() {\n    _classCallCheck(this, Ajax);\n\n    this._cookieName = null;\n    this._csrfToken = null;\n    this._locks = {};\n  }\n\n  _createClass(Ajax, [{\n    key: 'init',\n    value: function init(cookieName) {\n      this._cookieName = cookieName;\n      this._csrfToken = this.getCsrfToken();\n    }\n  }, {\n    key: 'getCsrfToken',\n    value: function getCsrfToken() {\n      if (document.cookie.indexOf(this._cookieName) !== -1) {\n        var cookieRegex = new RegExp(this._cookieName + '\\=([^;]*)');\n        var cookie = document.cookie.match(cookieRegex)[0];\n        return cookie ? cookie.split('=')[1] : null;\n      } else {\n        return null;\n      }\n    }\n  }, {\n    key: 'request',\n    value: function request(method, url, data) {\n      var self = this;\n      return new Promise(function (resolve, reject) {\n        var xhr = {\n          url: url,\n          method: method,\n          headers: {\n            'X-CSRFToken': self._csrfToken\n          },\n\n          data: data ? JSON.stringify(data) : null,\n          contentType: \"application/json; charset=utf-8\",\n          dataType: 'json',\n\n          success: function success(data) {\n            resolve(data);\n          },\n\n          error: function error(jqXHR) {\n            var rejection = jqXHR.responseJSON || {};\n\n            rejection.status = jqXHR.status;\n\n            if (rejection.status === 0) {\n              rejection.detail = gettext(\"Lost connection with application.\");\n            }\n\n            if (rejection.status === 404) {\n              if (!rejection.detail || rejection.detail === 'NOT FOUND') {\n                rejection.detail = gettext(\"Action link is invalid.\");\n              }\n            }\n\n            if (rejection.status === 500 && !rejection.detail) {\n              rejection.detail = gettext(\"Unknown error has occured.\");\n            }\n\n            rejection.statusText = jqXHR.statusText;\n\n            reject(rejection);\n          }\n        };\n\n        $.ajax(xhr);\n      });\n    }\n  }, {\n    key: 'get',\n    value: function get(url, params, lock) {\n      var _this = this;\n\n      if (params) {\n        url += '?' + $.param(params);\n      }\n\n      if (lock) {\n        var _ret = function () {\n          var self = _this;\n\n          // update url in existing lock?\n          if (_this._locks[lock]) {\n            _this._locks[lock].url = url;\n          }\n\n          // immediately dereference promise handlers without doing anything\n          // we are already waiting for existing response to resolve\n          if (_this._locks[lock] && _this._locks[lock].waiter) {\n            return {\n              v: {\n                then: function then() {\n                  return;\n                }\n              }\n            };\n\n            // return promise that will begin when original one resolves\n          } else if (_this._locks[lock] && _this._locks[lock].wait) {\n              _this._locks[lock].waiter = true;\n\n              return {\n                v: new Promise(function (resolve, reject) {\n                  var wait = function wait(url) {\n                    // keep waiting on promise\n                    if (self._locks[lock].wait) {\n                      window.setTimeout(function () {\n                        wait(url);\n                      }, 300);\n\n                      // poll for new url\n                    } else if (self._locks[lock].url !== url) {\n                        wait(self._locks[lock].url);\n\n                        // ajax backend for response\n                      } else {\n                          self._locks[lock].waiter = false;\n                          self.request('GET', self._locks[lock].url).then(function (data) {\n                            if (self._locks[lock].url === url) {\n                              resolve(data);\n                            } else {\n                              self._locks[lock].waiter = true;\n                              wait(self._locks[lock].url);\n                            }\n                          }, function (rejection) {\n                            if (self._locks[lock].url === url) {\n                              reject(rejection);\n                            } else {\n                              self._locks[lock].waiter = true;\n                              wait(self._locks[lock].url);\n                            }\n                          });\n                        }\n                  };\n\n                  window.setTimeout(function () {\n                    wait(url);\n                  }, 300);\n                })\n              };\n\n              // setup new lock without waiter\n            } else {\n                _this._locks[lock] = {\n                  url: url,\n                  wait: true,\n                  waiter: false\n                };\n\n                return {\n                  v: new Promise(function (resolve, reject) {\n                    self.request('GET', url).then(function (data) {\n                      self._locks[lock].wait = false;\n                      if (self._locks[lock].url === url) {\n                        resolve(data);\n                      }\n                    }, function (rejection) {\n                      self._locks[lock].wait = false;\n                      if (self._locks[lock].url === url) {\n                        reject(rejection);\n                      }\n                    });\n                  })\n                };\n              }\n        }();\n\n        if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === \"object\") return _ret.v;\n      } else {\n        return this.request('GET', url);\n      }\n    }\n  }, {\n    key: 'post',\n    value: function post(url, data) {\n      return this.request('POST', url, data);\n    }\n  }, {\n    key: 'patch',\n    value: function patch(url, data) {\n      return this.request('PATCH', url, data);\n    }\n  }, {\n    key: 'put',\n    value: function put(url, data) {\n      return this.request('PUT', url, data);\n    }\n  }, {\n    key: 'delete',\n    value: function _delete(url) {\n      return this.request('DELETE', url);\n    }\n  }, {\n    key: 'upload',\n    value: function upload(url, data, progress) {\n      var self = this;\n      return new Promise(function (resolve, reject) {\n        var xhr = {\n          url: url,\n          method: 'POST',\n          headers: {\n            'X-CSRFToken': self._csrfToken\n          },\n\n          data: data,\n          contentType: false,\n          processData: false,\n\n          xhr: function xhr() {\n            var xhr = new window.XMLHttpRequest();\n            xhr.upload.addEventListener(\"progress\", function (evt) {\n              if (evt.lengthComputable) {\n                progress(Math.round(evt.loaded / evt.total * 100));\n              }\n            }, false);\n            return xhr;\n          },\n\n          success: function success(response) {\n            resolve(response);\n          },\n\n          error: function error(jqXHR) {\n            var rejection = jqXHR.responseJSON || {};\n\n            rejection.status = jqXHR.status;\n\n            if (rejection.status === 0) {\n              rejection.detail = gettext(\"Lost connection with application.\");\n            }\n\n            if (rejection.status === 404) {\n              if (!rejection.detail || rejection.detail === 'NOT FOUND') {\n                rejection.detail = gettext(\"Action link is invalid.\");\n              }\n            }\n\n            if (rejection.status === 500 && !rejection.detail) {\n              rejection.detail = gettext(\"Unknown error has occured.\");\n            }\n\n            rejection.statusText = jqXHR.statusText;\n\n            reject(rejection);\n          }\n        };\n\n        $.ajax(xhr);\n      });\n    }\n  }]);\n\n  return Ajax;\n}();\n\nexports.default = new Ajax();\n\n},{}],143:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Auth = undefined;\n\nvar _auth = require('../reducers/auth');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// jshint ignore:line\n\nvar Auth = exports.Auth = function () {\n  function Auth() {\n    _classCallCheck(this, Auth);\n  }\n\n  _createClass(Auth, [{\n    key: 'init',\n    value: function init(store, local, modal) {\n      this._store = store;\n      this._local = local;\n      this._modal = modal;\n\n      // tell other tabs what auth state is because we are most current with it\n      this.syncSession();\n\n      // listen for other tabs to tell us that state changed\n      this.watchState();\n    }\n  }, {\n    key: 'syncSession',\n    value: function syncSession() {\n      var state = this._store.getState().auth;\n      if (state.isAuthenticated) {\n        this._local.set('auth', {\n          isAuthenticated: true,\n          username: state.user.username\n        });\n      } else {\n        this._local.set('auth', {\n          isAuthenticated: false\n        });\n      }\n    }\n  }, {\n    key: 'watchState',\n    value: function watchState() {\n      var _this = this;\n\n      this._local.watch('auth', function (newState) {\n        if (newState.isAuthenticated) {\n          _this._store.dispatch((0, _auth.signIn)({\n            username: newState.username\n          }));\n        } else {\n          _this._store.dispatch((0, _auth.signOut)());\n        }\n      });\n      this._modal.hide();\n    }\n  }, {\n    key: 'signIn',\n    value: function signIn(user) {\n      this._store.dispatch((0, _auth.signIn)(user));\n      this._local.set('auth', {\n        isAuthenticated: true,\n        username: user.username\n      });\n      this._modal.hide();\n    }\n  }, {\n    key: 'signOut',\n    value: function signOut() {\n      this._store.dispatch((0, _auth.signOut)());\n      this._local.set('auth', {\n        isAuthenticated: false\n      });\n      this._modal.hide();\n    }\n  }, {\n    key: 'softSignOut',\n    value: function softSignOut() {\n      this._store.dispatch((0, _auth.signOut)(true));\n      this._local.set('auth', {\n        isAuthenticated: false\n      });\n      this._modal.hide();\n    }\n  }]);\n\n  return Auth;\n}();\n\nexports.default = new Auth();\n\n},{\"../reducers/auth\":136}],144:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* global grecaptcha */\n// jshint ignore:line\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Captcha = exports.ReCaptcha = exports.ReCaptchaComponent = exports.QACaptcha = exports.NoCaptcha = exports.BaseCaptcha = undefined;\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _formGroup = require('../components/form-group');\n\nvar _formGroup2 = _interopRequireDefault(_formGroup);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n// jshint ignore:line\n\nvar BaseCaptcha = exports.BaseCaptcha = function () {\n  function BaseCaptcha() {\n    _classCallCheck(this, BaseCaptcha);\n  }\n\n  _createClass(BaseCaptcha, [{\n    key: 'init',\n    value: function init(context, ajax, include, snackbar) {\n      this._context = context;\n      this._ajax = ajax;\n      this._include = include;\n      this._snackbar = snackbar;\n    }\n  }]);\n\n  return BaseCaptcha;\n}();\n\nvar NoCaptcha = exports.NoCaptcha = function (_BaseCaptcha) {\n  _inherits(NoCaptcha, _BaseCaptcha);\n\n  function NoCaptcha() {\n    _classCallCheck(this, NoCaptcha);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(NoCaptcha).apply(this, arguments));\n  }\n\n  _createClass(NoCaptcha, [{\n    key: 'load',\n    value: function load() {\n      return new Promise(function (resolve) {\n        // immediately resolve as we don't have anything to validate\n        resolve();\n      });\n    }\n  }, {\n    key: 'validator',\n    value: function validator() {\n      return null;\n    }\n  }, {\n    key: 'component',\n    value: function component() {\n      return null;\n    }\n  }]);\n\n  return NoCaptcha;\n}(BaseCaptcha);\n\nvar QACaptcha = exports.QACaptcha = function (_BaseCaptcha2) {\n  _inherits(QACaptcha, _BaseCaptcha2);\n\n  function QACaptcha() {\n    _classCallCheck(this, QACaptcha);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(QACaptcha).apply(this, arguments));\n  }\n\n  _createClass(QACaptcha, [{\n    key: 'load',\n    value: function load() {\n      var self = this;\n      return new Promise(function (resolve, reject) {\n        self._ajax.get(self._context.get('CAPTCHA_API_URL')).then(function (data) {\n          self.question = data.question;\n          self.helpText = data.help_text;\n          resolve();\n        }, function () {\n          self._snackbar.error(gettext(\"Failed to load CAPTCHA.\"));\n          reject();\n        });\n      });\n    }\n  }, {\n    key: 'validator',\n    value: function validator() {\n      return [];\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'component',\n    value: function component(kwargs) {\n      return _react2.default.createElement(\n        _formGroup2.default,\n        { label: this.question, 'for': 'id_captcha',\n          labelClass: kwargs.labelClass || \"col-sm-4\",\n          controlClass: kwargs.controlClass || \"col-sm-8\",\n          validation: kwargs.form.state.errors.captcha,\n          helpText: this.helpText || null },\n        _react2.default.createElement('input', { type: 'text', id: 'id_captcha', className: 'form-control',\n          'aria-describedby': 'id_captcha_status',\n          disabled: kwargs.form.state.isLoading,\n          onChange: kwargs.form.bindInput('captcha'),\n          value: kwargs.form.state.captcha })\n      );\n    }\n    /* jshint ignore:end */\n\n  }]);\n\n  return QACaptcha;\n}(BaseCaptcha);\n\nvar ReCaptchaComponent = exports.ReCaptchaComponent = function (_React$Component) {\n  _inherits(ReCaptchaComponent, _React$Component);\n\n  function ReCaptchaComponent() {\n    _classCallCheck(this, ReCaptchaComponent);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(ReCaptchaComponent).apply(this, arguments));\n  }\n\n  _createClass(ReCaptchaComponent, [{\n    key: 'componentDidMount',\n    value: function componentDidMount() {\n      var _this4 = this;\n\n      grecaptcha.render('recaptcha', {\n        'sitekey': this.props.siteKey,\n        'callback': function callback(response) {\n          // fire fakey event to binding\n          _this4.props.binding({\n            target: {\n              value: response\n            }\n          });\n        }\n      });\n    }\n  }, {\n    key: 'render',\n    value: function render() {\n      /* jshint ignore:start */\n      return _react2.default.createElement('div', { id: 'recaptcha' });\n      /* jshint ignore:end */\n    }\n  }]);\n\n  return ReCaptchaComponent;\n}(_react2.default.Component);\n\nvar ReCaptcha = exports.ReCaptcha = function (_BaseCaptcha3) {\n  _inherits(ReCaptcha, _BaseCaptcha3);\n\n  function ReCaptcha() {\n    _classCallCheck(this, ReCaptcha);\n\n    return _possibleConstructorReturn(this, Object.getPrototypeOf(ReCaptcha).apply(this, arguments));\n  }\n\n  _createClass(ReCaptcha, [{\n    key: 'load',\n    value: function load() {\n      this._include.include('https://www.google.com/recaptcha/api.js', true);\n\n      return new Promise(function (resolve) {\n        var wait = function wait() {\n          if (typeof grecaptcha === \"undefined\") {\n            window.setTimeout(function () {\n              wait();\n            }, 200);\n          } else {\n            resolve();\n          }\n        };\n        wait();\n      });\n    }\n  }, {\n    key: 'validator',\n    value: function validator() {\n      return [];\n    }\n\n    /* jshint ignore:start */\n\n  }, {\n    key: 'component',\n    value: function component(kwargs) {\n      return _react2.default.createElement(\n        _formGroup2.default,\n        { label: gettext(\"Captcha\"), 'for': 'id_captcha',\n          labelClass: kwargs.labelClass || \"col-sm-4\",\n          controlClass: kwargs.controlClass || \"col-sm-8\",\n          validation: kwargs.form.state.errors.captcha,\n          helpText: gettext(\"Please solve the quick test.\") },\n        _react2.default.createElement(ReCaptchaComponent, { siteKey: this._context.get('SETTINGS').recaptcha_site_key,\n          binding: kwargs.form.bindInput('captcha') })\n      );\n    }\n    /* jshint ignore:end */\n\n  }]);\n\n  return ReCaptcha;\n}(BaseCaptcha);\n\nvar Captcha = exports.Captcha = function () {\n  function Captcha() {\n    _classCallCheck(this, Captcha);\n  }\n\n  _createClass(Captcha, [{\n    key: 'init',\n    value: function init(context, ajax, include, snackbar) {\n      switch (context.get('SETTINGS').captcha_type) {\n        case 'no':\n          this._captcha = new NoCaptcha();\n          break;\n\n        case 'qa':\n          this._captcha = new QACaptcha();\n          break;\n\n        case 're':\n          this._captcha = new ReCaptcha();\n          break;\n      }\n\n      this._captcha.init(context, ajax, include, snackbar);\n    }\n\n    // accessors for underlying strategy\n\n  }, {\n    key: 'load',\n    value: function load() {\n      return this._captcha.load();\n    }\n  }, {\n    key: 'validator',\n    value: function validator() {\n      return this._captcha.validator();\n    }\n  }, {\n    key: 'component',\n    value: function component(kwargs) {\n      return this._captcha.component(kwargs);\n    }\n  }]);\n\n  return Captcha;\n}();\n\nexports.default = new Captcha();\n\n},{\"../components/form-group\":69,\"react\":\"react\"}],145:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Include = exports.Include = function () {\n  function Include() {\n    _classCallCheck(this, Include);\n  }\n\n  _createClass(Include, [{\n    key: 'init',\n    value: function init(staticUrl) {\n      this._staticUrl = staticUrl;\n      this._included = [];\n    }\n  }, {\n    key: 'include',\n    value: function include(script) {\n      var remote = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];\n\n      if (this._included.indexOf(script) === -1) {\n        this._included.push(script);\n        this._include(script, remote);\n      }\n    }\n  }, {\n    key: '_include',\n    value: function _include(script, remote) {\n      $.ajax({\n        url: (!remote ? this._staticUrl : '') + script,\n        cache: true,\n        dataType: 'script'\n      });\n    }\n  }]);\n\n  return Include;\n}();\n\nexports.default = new Include();\n\n},{}],146:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar storage = window.localStorage;\n\nvar LocalStorage = exports.LocalStorage = function () {\n  function LocalStorage() {\n    _classCallCheck(this, LocalStorage);\n  }\n\n  _createClass(LocalStorage, [{\n    key: 'init',\n    value: function init(prefix) {\n      var _this = this;\n\n      this._prefix = prefix;\n      this._watchers = [];\n\n      window.addEventListener('storage', function (e) {\n        var newValueJson = JSON.parse(e.newValue);\n        _this._watchers.forEach(function (watcher) {\n          if (watcher.key === e.key && e.oldValue !== e.newValue) {\n            watcher.callback(newValueJson);\n          }\n        });\n      });\n    }\n  }, {\n    key: 'set',\n    value: function set(key, value) {\n      storage.setItem(this._prefix + key, JSON.stringify(value));\n    }\n  }, {\n    key: 'get',\n    value: function get(key) {\n      var itemString = storage.getItem(this._prefix + key);\n      if (itemString) {\n        return JSON.parse(itemString);\n      } else {\n        return null;\n      }\n    }\n  }, {\n    key: 'watch',\n    value: function watch(key, callback) {\n      this._watchers.push({\n        key: this._prefix + key,\n        callback: callback\n      });\n    }\n  }]);\n\n  return LocalStorage;\n}();\n\nexports.default = new LocalStorage();\n\n},{}],147:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.MobileNavbarDropdown = undefined;\n\nvar _mountComponent = require('../utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MobileNavbarDropdown = exports.MobileNavbarDropdown = function () {\n  function MobileNavbarDropdown() {\n    _classCallCheck(this, MobileNavbarDropdown);\n  }\n\n  _createClass(MobileNavbarDropdown, [{\n    key: 'init',\n    value: function init(element) {\n      this._element = element;\n      this._component = null;\n    }\n  }, {\n    key: 'show',\n    value: function show(component) {\n      if (this._component === component) {\n        this.hide();\n      } else {\n        this._component = component;\n        (0, _mountComponent2.default)(component, this._element.id);\n        $(this._element).addClass('open');\n      }\n    }\n  }, {\n    key: 'showConnected',\n    value: function showConnected(name, component) {\n      if (this._component === name) {\n        this.hide();\n      } else {\n        this._component = name;\n        (0, _mountComponent2.default)(component, this._element.id, true);\n        $(this._element).addClass('open');\n      }\n    }\n  }, {\n    key: 'hide',\n    value: function hide() {\n      $(this._element).removeClass('open');\n      this._component = null;\n    }\n  }]);\n\n  return MobileNavbarDropdown;\n}();\n\nexports.default = new MobileNavbarDropdown();\n\n},{\"../utils/mount-component\":157}],148:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Modal = undefined;\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _mountComponent = require('../utils/mount-component');\n\nvar _mountComponent2 = _interopRequireDefault(_mountComponent);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Modal = exports.Modal = function () {\n  function Modal() {\n    _classCallCheck(this, Modal);\n  }\n\n  _createClass(Modal, [{\n    key: 'init',\n    value: function init(element) {\n      var _this = this;\n\n      this._element = element;\n\n      this._modal = $(element).modal({ show: false });\n\n      this._modal.on('hidden.bs.modal', function () {\n        _reactDom2.default.unmountComponentAtNode(_this._element);\n      });\n    }\n  }, {\n    key: 'show',\n    value: function show(component) {\n      (0, _mountComponent2.default)(component, this._element.id);\n      this._modal.modal('show');\n    }\n  }, {\n    key: 'hide',\n    value: function hide() {\n      this._modal.modal('hide');\n    }\n  }]);\n\n  return Modal;\n}();\n\nexports.default = new Modal();\n\n},{\"../utils/mount-component\":157,\"react-dom\":\"react-dom\"}],149:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar PageTitle = exports.PageTitle = function () {\n  function PageTitle() {\n    _classCallCheck(this, PageTitle);\n  }\n\n  _createClass(PageTitle, [{\n    key: 'init',\n    value: function init(indexTitle, forumName) {\n      this._indexTitle = indexTitle;\n      this._forumName = forumName;\n    }\n  }, {\n    key: 'set',\n    value: function set(title) {\n      if (!title) {\n        document.title = this._indexTitle || this._forumName;\n        return;\n      }\n\n      if (typeof title === 'string') {\n        title = { title: title };\n      }\n\n      var finalTitle = title.title;\n\n      if (title.page) {\n        var pageLabel = interpolate(gettext('page: %(page)s'), {\n          page: title.page\n        }, true);\n\n        finalTitle += ' (' + pageLabel + ')';\n      }\n\n      if (title.parent) {\n        finalTitle += ' | ' + title.parent;\n      }\n\n      document.title = finalTitle + ' | ' + this._forumName;\n    }\n  }]);\n\n  return PageTitle;\n}();\n\nexports.default = new PageTitle();\n\n},{}],150:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Polls = exports.Polls = function () {\n  function Polls() {\n    _classCallCheck(this, Polls);\n  }\n\n  _createClass(Polls, [{\n    key: \"init\",\n    value: function init(ajax, snackbar) {\n      this._ajax = ajax;\n      this._snackbar = snackbar;\n\n      this._polls = {};\n    }\n  }, {\n    key: \"start\",\n    value: function start(kwargs) {\n      var _this = this;\n\n      var poolServer = function poolServer() {\n        _this._polls[kwargs.poll] = kwargs;\n\n        _this._ajax.get(kwargs.url, kwargs.data || null).then(function (data) {\n          if (!_this._polls[kwargs.poll]._stopped) {\n            kwargs.update(data);\n\n            _this._polls[kwargs.poll].timeout = window.setTimeout(poolServer, kwargs.frequency);\n          }\n        }, function (rejection) {\n          if (!_this._polls[kwargs.poll]._stopped) {\n            if (kwargs.error) {\n              kwargs.error(rejection);\n            } else {\n              _this._snackbar.apiError(rejection);\n            }\n          }\n        });\n      };\n\n      poolServer();\n    }\n  }, {\n    key: \"stop\",\n    value: function stop(pollId) {\n      if (this._polls[pollId]) {\n        window.clearTimeout(this._polls[pollId].timeout);\n        this._polls[pollId]._stopped = true;\n      }\n    }\n  }]);\n\n  return Polls;\n}();\n\nexports.default = new Polls();\n\n},{}],151:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.Snackbar = undefined;\n\nvar _snackbar = require('../reducers/snackbar');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar HIDE_ANIMATION_LENGTH = 300;\nvar MESSAGE_SHOW_LENGTH = 5000;\n\nvar Snackbar = exports.Snackbar = function () {\n  function Snackbar() {\n    _classCallCheck(this, Snackbar);\n  }\n\n  _createClass(Snackbar, [{\n    key: 'init',\n    value: function init(store) {\n      this._store = store;\n      this._timeout = null;\n    }\n  }, {\n    key: 'alert',\n    value: function alert(message, type) {\n      var _this = this;\n\n      if (this._timeout) {\n        window.clearTimeout(this._timeout);\n        this._store.dispatch((0, _snackbar.hideSnackbar)());\n\n        this._timeout = window.setTimeout(function () {\n          _this._timeout = null;\n          _this.alert(message, type);\n        }, HIDE_ANIMATION_LENGTH);\n      } else {\n        this._store.dispatch((0, _snackbar.showSnackbar)(message, type));\n        this._timeout = window.setTimeout(function () {\n          _this._store.dispatch((0, _snackbar.hideSnackbar)());\n          _this._timeout = null;\n        }, MESSAGE_SHOW_LENGTH);\n      }\n    }\n\n    // shorthands for message types\n\n  }, {\n    key: 'info',\n    value: function info(message) {\n      this.alert(message, 'info');\n    }\n  }, {\n    key: 'success',\n    value: function success(message) {\n      this.alert(message, 'success');\n    }\n  }, {\n    key: 'warning',\n    value: function warning(message) {\n      this.alert(message, 'warning');\n    }\n  }, {\n    key: 'error',\n    value: function error(message) {\n      this.alert(message, 'error');\n    }\n\n    // shorthand for api errors\n\n  }, {\n    key: 'apiError',\n    value: function apiError(rejection) {\n      var message = rejection.detail;\n\n      if (!message) {\n        if (rejection.status === 404) {\n          message = gettext(\"Action link is invalid.\");\n        } else {\n          message = gettext(\"Unknown error has occured.\");\n        }\n      }\n\n      if (rejection.status === 403 && message === \"Permission denied\") {\n        message = gettext(\"You don't have permission to perform this action.\");\n      }\n\n      this.error(message);\n    }\n  }]);\n\n  return Snackbar;\n}();\n\nexports.default = new Snackbar();\n\n},{\"../reducers/snackbar\":138}],152:[function(require,module,exports){\n'use strict';\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.StoreWrapper = undefined;\n\nvar _redux = require('redux');\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar StoreWrapper = exports.StoreWrapper = function () {\n  function StoreWrapper() {\n    _classCallCheck(this, StoreWrapper);\n\n    this._store = null;\n    this._reducers = {};\n    this._initialState = {};\n  }\n\n  _createClass(StoreWrapper, [{\n    key: 'addReducer',\n    value: function addReducer(name, reducer, initialState) {\n      this._reducers[name] = reducer;\n      this._initialState[name] = initialState;\n    }\n  }, {\n    key: 'init',\n    value: function init() {\n      this._store = (0, _redux.createStore)((0, _redux.combineReducers)(this._reducers), this._initialState);\n    }\n  }, {\n    key: 'getStore',\n    value: function getStore() {\n      return this._store;\n    }\n\n    // Store API\n\n  }, {\n    key: 'getState',\n    value: function getState() {\n      return this._store.getState();\n    }\n  }, {\n    key: 'dispatch',\n    value: function dispatch(action) {\n      return this._store.dispatch(action);\n    }\n  }]);\n\n  return StoreWrapper;\n}();\n\nexports.default = new StoreWrapper();\n\n},{\"redux\":\"redux\"}],153:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* global zxcvbn */\n\nvar Zxcvbn = exports.Zxcvbn = function () {\n  function Zxcvbn() {\n    _classCallCheck(this, Zxcvbn);\n  }\n\n  _createClass(Zxcvbn, [{\n    key: \"init\",\n    value: function init(include) {\n      this._include = include;\n    }\n  }, {\n    key: \"scorePassword\",\n    value: function scorePassword(password, inputs) {\n      // 0-4 score, the more the stronger password\n      return zxcvbn(password, inputs).score;\n    }\n  }, {\n    key: \"load\",\n    value: function load() {\n      if (typeof zxcvbn === \"undefined\") {\n        this._include.include('misago/js/zxcvbn.js');\n        return this._loadingPromise();\n      } else {\n        return this._loadedPromise();\n      }\n    }\n  }, {\n    key: \"_loadingPromise\",\n    value: function _loadingPromise() {\n      return new Promise(function (resolve) {\n        var wait = function wait() {\n          if (typeof zxcvbn === \"undefined\") {\n            window.setTimeout(function () {\n              wait();\n            }, 200);\n          } else {\n            resolve();\n          }\n        };\n        wait();\n      });\n    }\n  }, {\n    key: \"_loadedPromise\",\n    value: function _loadedPromise() {\n      // we have already loaded zxcvbn.js, resolve away!\n      return new Promise(function (resolve) {\n        resolve();\n      });\n    }\n  }]);\n\n  return Zxcvbn;\n}();\n\nexports.default = new Zxcvbn();\n\n},{}],154:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (ban, changeState) {\n  _reactDom2.default.render(\n  /* jshint ignore:start */\n  _react2.default.createElement(\n    _reactRedux.Provider,\n    { store: _store2.default.getStore() },\n    _react2.default.createElement(RedrawedBannedPage, { message: ban.message,\n      expires: ban.expires_on ? (0, _moment2.default)(ban.expires_on) : null })\n  ),\n  /* jshint ignore:end */\n  document.getElementById('page-mount'));\n\n  if (typeof changeState === 'undefined' || changeState) {\n    var forumName = _index2.default.get('SETTINGS').forum_name;\n    document.title = gettext(\"You are banned\") + ' | ' + forumName;\n    window.history.pushState({}, \"\", _index2.default.get('BANNED_URL'));\n  }\n};\n\nvar _moment = require('moment');\n\nvar _moment2 = _interopRequireDefault(_moment);\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _reactRedux = require('react-redux');\n\nvar _bannedPage = require('../components/banned-page');\n\nvar _bannedPage2 = _interopRequireDefault(_bannedPage);\n\nvar _index = require('../index');\n\nvar _index2 = _interopRequireDefault(_index);\n\nvar _store = require('../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// jshint ignore:line\n\n/* jshint ignore:start */\n// jshint ignore:line\n// jshint ignore:line\nvar select = function select(state) {\n  return state.tick;\n}; // jshint ignore:line\n// jshint ignore:line\n\nvar RedrawedBannedPage = (0, _reactRedux.connect)(select)(_bannedPage2.default);\n/* jshint ignore:end */\n\n},{\"../components/banned-page\":56,\"../index\":135,\"../services/store\":152,\"moment\":\"moment\",\"react\":\"react\",\"react-dom\":\"react-dom\",\"react-redux\":\"react-redux\"}],155:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (list, rowWidth) {\n  var padding = arguments.length <= 2 || arguments[2] === undefined ? false : arguments[2];\n\n  var rows = [];\n  var row = [];\n\n  list.forEach(function (element) {\n    row.push(element);\n    if (row.length === rowWidth) {\n      rows.push(row);\n      row = [];\n    }\n  });\n\n  // pad row to required length?\n  if (padding !== false && row.length > 0 && row.length < rowWidth) {\n    for (var i = row.length; i < rowWidth; i++) {\n      row.push(padding);\n    }\n  }\n\n  if (row.length) {\n    rows.push(row);\n  }\n\n  return rows;\n};\n\n},{}],156:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (bytes) {\n  if (bytes > 1000 * 1000 * 1000) {\n    return Math.round(bytes * 100 / (1000 * 1000 * 1000)) / 100 + ' GB';\n  } else if (bytes > 1000 * 1000) {\n    return Math.round(bytes * 100 / (1000 * 1000)) / 100 + ' MB';\n  } else if (bytes > 1000) {\n    return Math.round(bytes * 100 / 1000) / 100 + ' KB';\n  } else {\n    return Math.round(bytes * 100) / 100 + ' B';\n  }\n};\n\n},{}],157:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (Component, rootElementId) {\n  var connected = arguments.length <= 2 || arguments[2] === undefined ? true : arguments[2];\n\n  var rootElement = document.getElementById(rootElementId);\n\n  /* jshint ignore:start */\n  var finalComponent = Component.props ? Component : _react2.default.createElement(Component, null);\n  /* jshint ignore:end */\n\n  if (rootElement) {\n    if (connected) {\n      _reactDom2.default.render(\n      /* jshint ignore:start */\n      _react2.default.createElement(\n        _reactRedux.Provider,\n        { store: _store2.default.getStore() },\n        finalComponent\n      ),\n      /* jshint ignore:end */\n      rootElement);\n    } else {\n      /* jshint ignore:start */\n      _reactDom2.default.render(finalComponent, rootElement);\n      /* jshint ignore:end */\n    }\n  }\n};\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _reactRedux = require('react-redux');\n\nvar _store = require('../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n},{\"../services/store\":152,\"react\":\"react\",\"react-dom\":\"react-dom\",\"react-redux\":\"react-redux\"}],158:[function(require,module,exports){\n\"use strict\";\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar OrderedList = function () {\n  function OrderedList(items) {\n    _classCallCheck(this, OrderedList);\n\n    this.isOrdered = false;\n    this._items = items || [];\n  }\n\n  _createClass(OrderedList, [{\n    key: \"add\",\n    value: function add(key, item, order) {\n      this._items.push({\n        key: key,\n        item: item,\n\n        after: order ? order.after || null : null,\n        before: order ? order.before || null : null\n      });\n    }\n  }, {\n    key: \"get\",\n    value: function get(key, value) {\n      for (var i = 0; i < this._items.length; i++) {\n        if (this._items[i].key === key) {\n          return this._items[i].item;\n        }\n      }\n\n      return value;\n    }\n  }, {\n    key: \"has\",\n    value: function has(key) {\n      return this.get(key) !== undefined;\n    }\n  }, {\n    key: \"values\",\n    value: function values() {\n      var values = [];\n      for (var i = 0; i < this._items.length; i++) {\n        values.push(this._items[i].item);\n      }\n      return values;\n    }\n  }, {\n    key: \"order\",\n    value: function order(values_only) {\n      if (!this.isOrdered) {\n        this._items = this._order(this._items);\n        this.isOrdered = true;\n      }\n\n      if (values_only || typeof values_only === 'undefined') {\n        return this.values();\n      } else {\n        return this._items;\n      }\n    }\n  }, {\n    key: \"orderedValues\",\n    value: function orderedValues() {\n      return this.order(true);\n    }\n  }, {\n    key: \"_order\",\n    value: function _order(unordered) {\n      // Index of unordered items\n      var index = [];\n      unordered.forEach(function (item) {\n        index.push(item.key);\n      });\n\n      // Ordered items\n      var ordered = [];\n      var ordering = [];\n\n      // First pass: register items that\n      // don't specify their order\n      unordered.forEach(function (item) {\n        if (!item.after && !item.before) {\n          ordered.push(item);\n          ordering.push(item.key);\n        }\n      });\n\n      // Second pass: register items that\n      // specify their before to \"_end\"\n      unordered.forEach(function (item) {\n        if (item.before === \"_end\") {\n          ordered.push(item);\n          ordering.push(item.key);\n        }\n      });\n\n      // Third pass: keep iterating items\n      // until we hit iterations limit or finish\n      // ordering list\n      function insertItem(item) {\n        var insertAt = -1;\n        if (ordering.indexOf(item.key) === -1) {\n          if (item.after) {\n            insertAt = ordering.indexOf(item.after);\n            if (insertAt !== -1) {\n              insertAt += 1;\n            }\n          } else if (item.before) {\n            insertAt = ordering.indexOf(item.before);\n          }\n\n          if (insertAt !== -1) {\n            ordered.splice(insertAt, 0, item);\n            ordering.splice(insertAt, 0, item.key);\n          }\n        }\n      }\n\n      var iterations = 200;\n      while (iterations > 0 && index.length !== ordering.length) {\n        iterations -= 1;\n        unordered.forEach(insertItem);\n      }\n\n      return ordered;\n    }\n  }]);\n\n  return OrderedList;\n}();\n\nexports.default = OrderedList;\n\n},{}],159:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.int = int;\nexports.range = range;\nfunction int(min, max) {\n  return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\nfunction range(min, max) {\n  var array = new Array(int(min, max));\n  for (var i = 0; i < array.length; i++) {\n    array[i] = i;\n  }\n\n  return array;\n}\n\n},{}],160:[function(require,module,exports){\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function () {\n  window.scrollTo(0, 0);\n};\n\n},{}],161:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nexports.default = function (options) {\n  var routes = {\n    component: options.component || null,\n    childRoutes: []\n  };\n\n  if (options.root) {\n    routes.childRoutes = [{\n      path: options.root,\n      onEnter: function onEnter(nextState, replaceState) {\n        replaceState(null, options.paths[0].path);\n      }\n    }].concat(options.paths);\n  } else {\n    routes.childRoutes = options.paths;\n  }\n\n  _reactDom2.default.render(_react2.default.createElement(\n    _reactRedux.Provider,\n    { store: _store2.default.getStore() },\n    _react2.default.createElement(_reactRouter.Router, { routes: routes, history: history })\n  ), rootElement);\n};\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _reactDom = require('react-dom');\n\nvar _reactDom2 = _interopRequireDefault(_reactDom);\n\nvar _reactRedux = require('react-redux');\n\nvar _reactRouter = require('react-router');\n\nvar _createBrowserHistory = require('history/lib/createBrowserHistory');\n\nvar _createBrowserHistory2 = _interopRequireDefault(_createBrowserHistory);\n\nvar _store = require('../services/store');\n\nvar _store2 = _interopRequireDefault(_store);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n// jshint ignore:start\n\nvar rootElement = document.getElementById('page-mount');\nvar history = new _createBrowserHistory2.default();\n\n},{\"../services/store\":152,\"history/lib/createBrowserHistory\":44,\"react\":\"react\",\"react-dom\":\"react-dom\",\"react-redux\":\"react-redux\",\"react-router\":\"react-router\"}],162:[function(require,module,exports){\n'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.required = required;\nexports.email = email;\nexports.minLength = minLength;\nexports.maxLength = maxLength;\nexports.usernameMinLength = usernameMinLength;\nexports.usernameMaxLength = usernameMaxLength;\nexports.usernameContent = usernameContent;\nexports.passwordMinLength = passwordMinLength;\nvar EMAIL = /^(([^<>()[\\]\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@(([^<>()[\\]\\.,;:\\s@\\\"]+\\.)+[^<>()[\\]\\.,;:\\s@\\\"]{2,})$/i;\nvar USERNAME = new RegExp('^[0-9a-z]+$', 'i');\n\nfunction required() {\n  return function (value) {\n    if ($.trim(value).length === 0) {\n      return gettext(\"This field is required.\");\n    }\n  };\n}\n\nfunction email(message) {\n  return function (value) {\n    if (!EMAIL.test(value)) {\n      return message || gettext(\"Enter a valid email address.\");\n    }\n  };\n}\n\nfunction minLength(limitValue, message) {\n  return function (value) {\n    var returnMessage = '';\n    var length = $.trim(value).length;\n\n    if (length < limitValue) {\n      if (message) {\n        returnMessage = message(limitValue, length);\n      } else {\n        returnMessage = ngettext(\"Ensure this value has at least %(limit_value)s character (it has %(show_value)s).\", \"Ensure this value has at least %(limit_value)s characters (it has %(show_value)s).\", limitValue);\n      }\n      return interpolate(returnMessage, {\n        limit_value: limitValue,\n        show_value: length\n      }, true);\n    }\n  };\n}\n\nfunction maxLength(limitValue, message) {\n  return function (value) {\n    var returnMessage = '';\n    var length = $.trim(value).length;\n\n    if (length > limitValue) {\n      if (message) {\n        returnMessage = message(limitValue, length);\n      } else {\n        returnMessage = ngettext(\"Ensure this value has at most %(limit_value)s character (it has %(show_value)s).\", \"Ensure this value has at most %(limit_value)s characters (it has %(show_value)s).\", limitValue);\n      }\n      return interpolate(returnMessage, {\n        limit_value: limitValue,\n        show_value: length\n      }, true);\n    }\n  };\n}\n\nfunction usernameMinLength(settings) {\n  var message = function message(limitValue) {\n    return ngettext(\"Username must be at least %(limit_value)s character long.\", \"Username must be at least %(limit_value)s characters long.\", limitValue);\n  };\n  return this.minLength(settings.username_length_min, message);\n}\n\nfunction usernameMaxLength(settings) {\n  var message = function message(limitValue) {\n    return ngettext(\"Username cannot be longer than %(limit_value)s character.\", \"Username cannot be longer than %(limit_value)s characters.\", limitValue);\n  };\n  return this.maxLength(settings.username_length_max, message);\n}\n\nfunction usernameContent() {\n  return function (value) {\n    if (!USERNAME.test($.trim(value))) {\n      return gettext(\"Username can only contain latin alphabet letters and digits.\");\n    }\n  };\n}\n\nfunction passwordMinLength(settings) {\n  var message = function message(limitValue) {\n    return ngettext(\"Valid password must be at least %(limit_value)s character long.\", \"Valid password must be at least %(limit_value)s characters long.\", limitValue);\n  };\n  return this.minLength(settings.password_length_min, message);\n}\n\n},{}]},{},[2,3,4,5,18,19,20,21,22,23,24,32,33,34,35,6,7,8,9,10,11,12,13,14,15,16,17,25,26,27,28,29,30,31]);\n"],"sourceRoot":"/source/"}

File diff suppressed because it is too large
+ 39358 - 14
misago/static/misago/js/vendor.js


Some files were not shown because too many files changed in this diff