/*!*************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./assets/styles/app.css ***!
  \*************************************************************************************************/
body {
    background-color: lightgray;
}

/* Глобальные стили */
.v-application {
    font-family: 'Roboto', sans-serif;
}

/* Стили для карточек займов */
.loan-card {
    transition: all 0.3s ease;
}

.loan-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 4px 12px rgba(0,0,0,0.15) !important;
}

/* Анимации для табов */
.v-window-item {
    transition: opacity 0.3s ease;
}

/* Стили для поиска */
.search-field .v-field__input {
    font-size: 1.1rem;
}

/* Мобильная адаптация */
@media (max-width: 600px) {
    .v-tab {
        font-size: 0.8rem;
        padding: 0 8px;
    }
}
/*!*******************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/AuthForm.vue?vue&type=style&index=0&id=0b69dc87&scoped=true&lang=css ***!
  \*******************************************************************************************************************************************************************************************************************************************************************************/

.fill-height[data-v-0b69dc87] {
  min-height: 100vh;
}

/*!*******************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/LoansTab.vue?vue&type=style&index=0&id=68f38be6&scoped=true&lang=css ***!
  \*******************************************************************************************************************************************************************************************************************************************************************************/

.loan-header[data-v-68f38be6] {
  background-color: rgb(var(--v-theme-surface));
}

/* Дополнительный стиль для гарантии полной ширины */
[data-v-68f38be6] .v-expansion-panel-text__wrapper {
  padding: 16px !important;
  width: 100% !important;
}

/*!*********************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/MainLayout.vue?vue&type=style&index=0&id=4d230ffe&lang=css ***!
  \*********************************************************************************************************************************************************************************************************************************************************************/

/* Глобальные стили для мобильного режима - ЕДИНАЯ СВЕТЛАЯ ТЕМА */
.mobile-main {
  background-color: #f5f5f5 !important;
}
.v-toolbar--collapse {
  max-width: 80px !important;
}
.mobile-main .v-container {
  padding: 0 !important;
  background-color: #f5f5f5 !important;
}

/* Принудительное скрытие десктопных элементов в мобильном режиме */
.mobile-main .v-app-bar:not(.mobile-header) {
  display: none !important;
}
.mobile-main .v-window {
  display: none !important;
}

/* Адаптация для мобильных устройств */
@media (max-width: 768px) {
.v-application {
    font-size: 16px;
}
button,
  .v-btn,
  .v-list-item {
    min-height: 48px !important;
}
}

/*!*********************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-4.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/components/MainLayout.vue?vue&type=style&index=1&id=4d230ffe&scoped=true&lang=css ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************/

/* ========== ДЕСКТОПНЫЕ СТИЛИ ========== */
.tab-content[data-v-4d230ffe] {
  display: flex;
  align-items: center;
  gap: 8px;
}

/* ========== МОБИЛЬНЫЕ СТИЛИ ========== */
/* Фиксированный хедер */
.mobile-header[data-v-4d230ffe] {
  position: fixed !important;
  top: 0 !important;
  left: 0 !important;
  right: 0 !important;
  z-index: 1000 !important;
  background-color: rgb(var(--v-theme-primary)) !important;
  border-bottom: 1px solid rgba(0, 0, 0, 0.05);
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important;
}
.burger-icon[data-v-4d230ffe] {
  margin-left: -4px;
  color: white !important;
}

/* Основной контент */
.mobile-content[data-v-4d230ffe] {
  padding-bottom: 72px !important;
  min-height: 100vh !important;
  background-color: #f5f5f5 !important;
  width: 100% !important;
  position: relative !important;
  z-index: 1 !important;
}

/* Панели табов */
.tab-pane[data-v-4d230ffe] {
  min-height: calc(100vh - 136px) !important;
  background-color: #f5f5f5 !important;
  width: 100% !important;
  padding: 16px !important;
}

/* Нижняя навигация */
.mobile-bottom-nav[data-v-4d230ffe] {
  position: fixed !important;
  bottom: 0 !important;
  left: 0 !important;
  right: 0 !important;
  z-index: 1000 !important;
  height: 64px !important;
  background-color: white !important;
  box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.15) !important;
  border-top: 1px solid rgba(0, 0, 0, 0.1) !important;
}
.mobile-bottom-nav[data-v-4d230ffe] .v-btn {
  min-width: auto !important;
  height: 64px !important;
  color: rgba(0, 0, 0, 0.6) !important;
  position: relative !important;
}
.mobile-bottom-nav[data-v-4d230ffe] .v-btn--active {
  color: rgb(var(--v-theme-primary)) !important;
}
.mobile-bottom-nav[data-v-4d230ffe] .v-btn__content {
  flex-direction: column !important;
  align-items: center !important;
  gap: 4px !important;
}
.mobile-bottom-nav[data-v-4d230ffe] .v-icon {
  font-size: 24px !important;
  margin-bottom: 2px !important;
}
.mobile-bottom-nav[data-v-4d230ffe] .v-badge {
  position: absolute !important;
  top: 8px !important;
  right: 20px !important;
}

/* ========== СТИЛИ ИЗ APP.VUE ========== */
/* Области для жестов */
.mobile-gesture-area[data-v-4d230ffe] {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  pointer-events: none;
  z-index: 9999;
}
.edge-swipe-area[data-v-4d230ffe] {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 20px;
  pointer-events: auto;
}
.left-edge[data-v-4d230ffe] {
  left: 0;
}
.right-edge[data-v-4d230ffe] {
  right: 0;
}

/* Подсказка свайпа */
.swipe-hint[data-v-4d230ffe] {
  position: fixed;
  left: 10px;
  top: 50%;
  transform: translateY(-50%);
  background-color: rgba(0, 0, 0, 0.7);
  color: white;
  padding: 8px 12px;
  border-radius: 30px;
  font-size: 14px;
  display: flex;
  align-items: center;
  z-index: 9998;
  pointer-events: auto;
  cursor: pointer;
  animation: pulse-4d230ffe 2s infinite;
}
@keyframes pulse-4d230ffe {
0% {
    transform: translateY(-50%) scale(1);
}
50% {
    transform: translateY(-50%) scale(1.05);
}
100% {
    transform: translateY(-50%) scale(1);
}
}

/* Анимации */
.fade-enter-active[data-v-4d230ffe],
.fade-leave-active[data-v-4d230ffe] {
  transition: opacity 0.3s ease;
}
.fade-enter-from[data-v-4d230ffe],
.fade-leave-to[data-v-4d230ffe] {
  opacity: 0;
}

/* ========== LANDSCAPE ОРИЕНТАЦИЯ ========== */
@media (orientation: landscape) {
.mobile-header[data-v-4d230ffe] {
    height: 48px !important;
}
.mobile-content[data-v-4d230ffe] {
    padding-top: 56px !important;
    padding-bottom: 56px !important;
}
.mobile-bottom-nav[data-v-4d230ffe] {
    height: 48px !important;
}
.mobile-bottom-nav[data-v-4d230ffe] .v-btn {
    height: 48px !important;
}
.mobile-bottom-nav[data-v-4d230ffe] .v-btn__content {
    flex-direction: row !important;
    gap: 8px !important;
}
.mobile-bottom-nav[data-v-4d230ffe] .v-icon {
    font-size: 20px !important;
    margin-bottom: 0 !important;
}
.mobile-fab[data-v-4d230ffe] {
    bottom: 60px !important;
}
}

/* ========== SAFE AREAS ДЛЯ IPHONE ========== */
@supports (padding: max(0px)) {
.mobile-header[data-v-4d230ffe] {
    //padding-top: env(safe-area-inset-top, 0) !important;
    height: calc(64px + env(safe-area-inset-top, 0)) !important;
}
.mobile-content[data-v-4d230ffe] {
    //padding-top: calc(64px + env(safe-area-inset-top, 0)) !important;
    padding-bottom: calc(72px + env(safe-area-inset-bottom, 0)) !important;
}
.mobile-bottom-nav[data-v-4d230ffe] {
    padding-bottom: env(safe-area-inset-bottom, 0) !important;
    height: calc(64px + env(safe-area-inset-bottom, 0)) !important;
}
.mobile-fab[data-v-4d230ffe] {
    bottom: calc(80px + env(safe-area-inset-bottom, 0)) !important;
}
.left-edge[data-v-4d230ffe] {
    left: env(safe-area-inset-left, 0);
}
.right-edge[data-v-4d230ffe] {
    right: env(safe-area-inset-right, 0);
}
@media (orientation: landscape) {
.mobile-header[data-v-4d230ffe] {
      height: calc(48px + env(safe-area-inset-top, 0)) !important;
}
.mobile-content[data-v-4d230ffe] {
      padding-top: calc(56px + env(safe-area-inset-top, 0)) !important;
}
.mobile-bottom-nav[data-v-4d230ffe] {
      height: calc(48px + env(safe-area-inset-bottom, 0)) !important;
}
.mobile-fab[data-v-4d230ffe] {
      bottom: calc(60px + env(safe-area-inset-bottom, 0)) !important;
}
}
}


/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNzcyIsIm1hcHBpbmdzIjoiOzs7QUFBQTtJQUNJLDJCQUEyQjtBQUMvQjs7QUFFQSxxQkFBcUI7QUFDckI7SUFDSSxpQ0FBaUM7QUFDckM7O0FBRUEsOEJBQThCO0FBQzlCO0lBQ0kseUJBQXlCO0FBQzdCOztBQUVBO0lBQ0ksMkJBQTJCO0lBQzNCLGtEQUFrRDtBQUN0RDs7QUFFQSx1QkFBdUI7QUFDdkI7SUFDSSw2QkFBNkI7QUFDakM7O0FBRUEscUJBQXFCO0FBQ3JCO0lBQ0ksaUJBQWlCO0FBQ3JCOztBQUVBLHdCQUF3QjtBQUN4QjtJQUNJO1FBQ0ksaUJBQWlCO1FBQ2pCLGNBQWM7SUFDbEI7QUFDSixDOzs7OztBQ21PQTtFQUNFLGlCQUFpQjtBQUNuQjs7Ozs7O0FDb0JBO0VBQ0UsNkNBQTZDO0FBQy9DOztBQUVBLG9EQUFvRDtBQUNwRDtFQUNFLHdCQUF3QjtFQUN4QixzQkFBc0I7QUFDeEI7Ozs7OztBQ29RQSxpRUFBaUU7QUFDakU7RUFDRSxvQ0FBb0M7QUFDdEM7QUFHQTtFQUNFLDBCQUEwQjtBQUM1QjtBQUVBO0VBQ0UscUJBQXFCO0VBQ3JCLG9DQUFvQztBQUN0Qzs7QUFFQSxtRUFBbUU7QUFDbkU7RUFDRSx3QkFBd0I7QUFDMUI7QUFFQTtFQUNFLHdCQUF3QjtBQUMxQjs7QUFFQSxzQ0FBc0M7QUFDdEM7QUFDRTtJQUNFLGVBQWU7QUFDakI7QUFFQTs7O0lBR0UsMkJBQTJCO0FBQzdCO0FBQ0Y7Ozs7OztBQUlBLDJDQUEyQztBQUMzQztFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsUUFBUTtBQUNWOztBQUVBLDBDQUEwQztBQUMxQyx3QkFBd0I7QUFDeEI7RUFDRSwwQkFBMEI7RUFDMUIsaUJBQWlCO0VBQ2pCLGtCQUFrQjtFQUNsQixtQkFBbUI7RUFDbkIsd0JBQXdCO0VBQ3hCLHdEQUF3RDtFQUN4RCw0Q0FBNEM7RUFDNUMsbURBQW1EO0FBQ3JEO0FBRUE7RUFDRSxpQkFBaUI7RUFDakIsdUJBQXVCO0FBQ3pCOztBQUVBLHFCQUFxQjtBQUNyQjtFQUNFLCtCQUErQjtFQUMvQiw0QkFBNEI7RUFDNUIsb0NBQW9DO0VBQ3BDLHNCQUFzQjtFQUN0Qiw2QkFBNkI7RUFDN0IscUJBQXFCO0FBQ3ZCOztBQUVBLGlCQUFpQjtBQUNqQjtFQUNFLDBDQUEwQztFQUMxQyxvQ0FBb0M7RUFDcEMsc0JBQXNCO0VBQ3RCLHdCQUF3QjtBQUMxQjs7QUFFQSxxQkFBcUI7QUFDckI7RUFDRSwwQkFBMEI7RUFDMUIsb0JBQW9CO0VBQ3BCLGtCQUFrQjtFQUNsQixtQkFBbUI7RUFDbkIsd0JBQXdCO0VBQ3hCLHVCQUF1QjtFQUN2QixrQ0FBa0M7RUFDbEMsc0RBQXNEO0VBQ3RELG1EQUFtRDtBQUNyRDtBQUVBO0VBQ0UsMEJBQTBCO0VBQzFCLHVCQUF1QjtFQUN2QixvQ0FBb0M7RUFDcEMsNkJBQTZCO0FBQy9CO0FBRUE7RUFDRSw2Q0FBNkM7QUFDL0M7QUFFQTtFQUNFLGlDQUFpQztFQUNqQyw4QkFBOEI7RUFDOUIsbUJBQW1CO0FBQ3JCO0FBRUE7RUFDRSwwQkFBMEI7RUFDMUIsNkJBQTZCO0FBQy9CO0FBRUE7RUFDRSw2QkFBNkI7RUFDN0IsbUJBQW1CO0VBQ25CLHNCQUFzQjtBQUN4Qjs7QUFFQSwyQ0FBMkM7QUFDM0MsdUJBQXVCO0FBQ3ZCO0VBQ0UsZUFBZTtFQUNmLE1BQU07RUFDTixPQUFPO0VBQ1AsUUFBUTtFQUNSLFNBQVM7RUFDVCxvQkFBb0I7RUFDcEIsYUFBYTtBQUNmO0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIsTUFBTTtFQUNOLFNBQVM7RUFDVCxXQUFXO0VBQ1gsb0JBQW9CO0FBQ3RCO0FBRUE7RUFDRSxPQUFPO0FBQ1Q7QUFFQTtFQUNFLFFBQVE7QUFDVjs7QUFFQSxxQkFBcUI7QUFDckI7RUFDRSxlQUFlO0VBQ2YsVUFBVTtFQUNWLFFBQVE7RUFDUiwyQkFBMkI7RUFDM0Isb0NBQW9DO0VBQ3BDLFlBQVk7RUFDWixpQkFBaUI7RUFDakIsbUJBQW1CO0VBQ25CLGVBQWU7RUFDZixhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLGFBQWE7RUFDYixvQkFBb0I7RUFDcEIsZUFBZTtFQUNmLHFDQUE0QjtBQUM5QjtBQUVBO0FBQ0U7SUFDRSxvQ0FBb0M7QUFDdEM7QUFDQTtJQUNFLHVDQUF1QztBQUN6QztBQUNBO0lBQ0Usb0NBQW9DO0FBQ3RDO0FBQ0Y7O0FBRUEsYUFBYTtBQUNiOztFQUVFLDZCQUE2QjtBQUMvQjtBQUVBOztFQUVFLFVBQVU7QUFDWjs7QUFFQSwrQ0FBK0M7QUFDL0M7QUFDRTtJQUNFLHVCQUF1QjtBQUN6QjtBQUVBO0lBQ0UsNEJBQTRCO0lBQzVCLCtCQUErQjtBQUNqQztBQUVBO0lBQ0UsdUJBQXVCO0FBQ3pCO0FBRUE7SUFDRSx1QkFBdUI7QUFDekI7QUFFQTtJQUNFLDhCQUE4QjtJQUM5QixtQkFBbUI7QUFDckI7QUFFQTtJQUNFLDBCQUEwQjtJQUMxQiwyQkFBMkI7QUFDN0I7QUFFQTtJQUNFLHVCQUF1QjtBQUN6QjtBQUNGOztBQUVBLGdEQUFnRDtBQUNoRDtBQUNFO0lBQ0UscURBQXFEO0lBQ3JELDJEQUEyRDtBQUM3RDtBQUVBO0lBQ0Usa0VBQWtFO0lBQ2xFLHNFQUFzRTtBQUN4RTtBQUVBO0lBQ0UseURBQXlEO0lBQ3pELDhEQUE4RDtBQUNoRTtBQUVBO0lBQ0UsOERBQThEO0FBQ2hFO0FBRUE7SUFDRSxrQ0FBa0M7QUFDcEM7QUFFQTtJQUNFLG9DQUFvQztBQUN0QztBQUVBO0FBQ0U7TUFDRSwyREFBMkQ7QUFDN0Q7QUFFQTtNQUNFLGdFQUFnRTtBQUNsRTtBQUVBO01BQ0UsOERBQThEO0FBQ2hFO0FBRUE7TUFDRSw4REFBOEQ7QUFDaEU7QUFDRjtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3N0eWxlcy9hcHAuY3NzIiwid2VicGFjazovLy8uL2Fzc2V0cy9jb21wb25lbnRzL0F1dGhGb3JtLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvY29tcG9uZW50cy9Mb2Fuc1RhYi52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2NvbXBvbmVudHMvTWFpbkxheW91dC52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiYm9keSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRncmF5O1xufVxuXG4vKiDQk9C70L7QsdCw0LvRjNC90YvQtSDRgdGC0LjQu9C4ICovXG4udi1hcHBsaWNhdGlvbiB7XG4gICAgZm9udC1mYW1pbHk6ICdSb2JvdG8nLCBzYW5zLXNlcmlmO1xufVxuXG4vKiDQodGC0LjQu9C4INC00LvRjyDQutCw0YDRgtC+0YfQtdC6INC30LDQudC80L7QsiAqL1xuLmxvYW4tY2FyZCB7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTtcbn1cblxuLmxvYW4tY2FyZDpob3ZlciB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpO1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLDAsMCwwLjE1KSAhaW1wb3J0YW50O1xufVxuXG4vKiDQkNC90LjQvNCw0YbQuNC4INC00LvRjyDRgtCw0LHQvtCyICovXG4udi13aW5kb3ctaXRlbSB7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzIGVhc2U7XG59XG5cbi8qINCh0YLQuNC70Lgg0LTQu9GPINC/0L7QuNGB0LrQsCAqL1xuLnNlYXJjaC1maWVsZCAudi1maWVsZF9faW5wdXQge1xuICAgIGZvbnQtc2l6ZTogMS4xcmVtO1xufVxuXG4vKiDQnNC+0LHQuNC70YzQvdCw0Y8g0LDQtNCw0L/RgtCw0YbQuNGPICovXG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcbiAgICAudi10YWIge1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgICAgcGFkZGluZzogMCA4cHg7XG4gICAgfVxufSIsIjx0ZW1wbGF0ZT5cbiAgPHYtbWFpbj5cbiAgICA8di1jb250YWluZXIgY2xhc3M9XCJmaWxsLWhlaWdodFwiIGZsdWlkPlxuICAgICAgPHYtcm93IGFsaWduPVwiY2VudGVyXCIganVzdGlmeT1cImNlbnRlclwiPlxuICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgc209XCI4XCIgbWQ9XCI2XCIgbGc9XCI0XCI+XG4gICAgICAgICAgPHYtY2FyZCBjbGFzcz1cImVsZXZhdGlvbi0xMlwiPlxuICAgICAgICAgICAgPHYtdG9vbGJhciBjb2xvcj1cInByaW1hcnlcIiBkYXJrIGZsYXQ+XG4gICAgICAgICAgICAgIDx2LXRvb2xiYXItdGl0bGU+0JDQstGC0L7RgNC40LfQsNGG0LjRjzwvdi10b29sYmFyLXRpdGxlPlxuICAgICAgICAgICAgPC92LXRvb2xiYXI+XG5cbiAgICAgICAgICAgIDx2LWNhcmQtdGV4dD5cbiAgICAgICAgICAgICAgPCEtLSDQqNCw0LMgMTog0JLQstC+0LQg0YLQtdC70LXRhNC+0L3QsCAtLT5cbiAgICAgICAgICAgICAgPHYtZm9ybSB2LWlmPVwic3RlcCA9PT0gJ3Bob25lJ1wiIHJlZj1cInBob25lRm9ybVwiIHYtbW9kZWw9XCJ2YWxpZC5waG9uZVwiPlxuICAgICAgICAgICAgICAgIDx2LXRleHQtZmllbGRcbiAgICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cImZvcm0ucGhvbmVcIlxuICAgICAgICAgICAgICAgICAgICA6cnVsZXM9XCJbcnVsZXMucmVxdWlyZWQsIHJ1bGVzLnBob25lXVwiXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwi0J3QvtC80LXRgCDRgtC10LvQtdGE0L7QvdCwXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCI3OTk5MTExMjIzM1wiXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeD1cIis3XCJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgcHJlcGVuZC1pbm5lci1pY29uPVwibWRpLXBob25lXCJcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcj1cIjEwXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgICBAa2V5dXAuZW50ZXI9XCJzZW5kQ29kZVwiXG4gICAgICAgICAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPHYtYWxlcnRcbiAgICAgICAgICAgICAgICAgICAgdi1pZj1cInBob25lRXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwidG9uYWxcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm10LTNcIlxuICAgICAgICAgICAgICAgICAgICBkaXNtaXNzaWJsZVxuICAgICAgICAgICAgICAgICAgICBAY2xpY2s6Y2xvc2U9XCJwaG9uZUVycm9yID0gJydcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IHBob25lRXJyb3IgfX1cbiAgICAgICAgICAgICAgICA8L3YtYWxlcnQ+XG4gICAgICAgICAgICAgIDwvdi1mb3JtPlxuXG4gICAgICAgICAgICAgIDwhLS0g0KjQsNCzIDI6INCS0LLQvtC0INC60L7QtNCwIC0tPlxuICAgICAgICAgICAgICA8di1mb3JtIHYtaWY9XCJzdGVwID09PSAnY29kZSdcIiByZWY9XCJjb2RlRm9ybVwiIHYtbW9kZWw9XCJ2YWxpZC5jb2RlXCI+XG4gICAgICAgICAgICAgICAgPHYtdGV4dC1maWVsZFxuICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiZm9ybS5jb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgOnJ1bGVzPVwiW3J1bGVzLnJlcXVpcmVkLCBydWxlcy5jb2RlXVwiXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwi0JrQvtC0INC/0L7QtNGC0LLQtdGA0LbQtNC10L3QuNGPXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIxMjM0XCJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgcHJlcGVuZC1pbm5lci1pY29uPVwibWRpLWxvY2tcIlxuICAgICAgICAgICAgICAgICAgICBjb3VudGVyPVwiNFwiXG4gICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjRcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIEBrZXl1cC5lbnRlcj1cImNvbmZpcm1Db2RlXCJcbiAgICAgICAgICAgICAgICA+PC92LXRleHQtZmllbGQ+XG5cbiAgICAgICAgICAgICAgICA8di1idG5cbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJ0aW1lciA+IDBcIlxuICAgICAgICAgICAgICAgICAgICBAY2xpY2s9XCJyZXNlbmRDb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgYmxvY2tcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtdC0yXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICDQntGC0L/RgNCw0LLQuNGC0Ywg0LrQvtC0INC/0L7QstGC0L7RgNC90L5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJ0aW1lciA+IDBcIj4oe3sgdGltZXIgfX3RgSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC92LWJ0bj5cblxuICAgICAgICAgICAgICAgIDx2LWFsZXJ0XG4gICAgICAgICAgICAgICAgICAgIHYtaWY9XCJjb2RlRXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwidG9uYWxcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm10LTNcIlxuICAgICAgICAgICAgICAgICAgICBkaXNtaXNzaWJsZVxuICAgICAgICAgICAgICAgICAgICBAY2xpY2s6Y2xvc2U9XCJjb2RlRXJyb3IgPSAnJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgY29kZUVycm9yIH19XG4gICAgICAgICAgICAgICAgPC92LWFsZXJ0PlxuICAgICAgICAgICAgICA8L3YtZm9ybT5cbiAgICAgICAgICAgIDwvdi1jYXJkLXRleHQ+XG5cbiAgICAgICAgICAgIDx2LWNhcmQtYWN0aW9ucz5cbiAgICAgICAgICAgICAgPHYtYnRuXG4gICAgICAgICAgICAgICAgICB2LWlmPVwic3RlcCA9PT0gJ3Bob25lJ1wiXG4gICAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgOmxvYWRpbmc9XCJsb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cIiF2YWxpZC5waG9uZVwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2s9XCJzZW5kQ29kZVwiXG4gICAgICAgICAgICAgICAgICBibG9ja1xuICAgICAgICAgICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgINCf0L7Qu9GD0YfQuNGC0Ywg0LrQvtC0XG4gICAgICAgICAgICAgICAgPHYtaWNvbiBlbmQ+bWRpLWFycm93LXJpZ2h0PC92LWljb24+XG4gICAgICAgICAgICAgIDwvdi1idG4+XG5cbiAgICAgICAgICAgICAgPHYtcm93IHYtaWY9XCJzdGVwID09PSAnY29kZSdcIiBuby1ndXR0ZXJzPlxuICAgICAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiM1wiPlxuICAgICAgICAgICAgICAgICAgPHYtYnRuXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9XCJzdGVwID0gJ3Bob25lJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwibG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDx2LWljb24+bWRpLWFycm93LWxlZnQ8L3YtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICA8di1jb2wgY29scz1cIjlcIj5cbiAgICAgICAgICAgICAgICAgIDx2LWJ0blxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgOmxvYWRpbmc9XCJsb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCIhdmFsaWQuY29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPVwiY29uZmlybUNvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGJsb2NrXG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAg0J/QvtC00YLQstC10YDQtNC40YLRjFxuICAgICAgICAgICAgICAgICAgICA8di1pY29uIGVuZD5tZGktY2hlY2s8L3YtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgPC92LXJvdz5cbiAgICAgICAgICAgIDwvdi1jYXJkLWFjdGlvbnM+XG4gICAgICAgICAgPC92LWNhcmQ+XG4gICAgICAgIDwvdi1jb2w+XG4gICAgICA8L3Ytcm93PlxuICAgIDwvdi1jb250YWluZXI+XG4gIDwvdi1tYWluPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgYXBpIGZyb20gJy4uL3NlcnZpY2VzL2FwaSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ0F1dGhGb3JtJyxcbiAgZW1pdHM6IFsnbG9naW4tc3VjY2VzcyddLFxuICBzZXR1cChwcm9wcywgeyBlbWl0IH0pIHtcbiAgICBjb25zdCBzdGVwID0gcmVmKCdwaG9uZScpO1xuICAgIGNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpO1xuICAgIGNvbnN0IHBob25lRXJyb3IgPSByZWYoJycpO1xuICAgIGNvbnN0IGNvZGVFcnJvciA9IHJlZignJyk7XG4gICAgY29uc3QgdGltZXIgPSByZWYoMCk7XG4gICAgY29uc3QgdGltZXJJbnRlcnZhbCA9IHJlZihudWxsKTtcbiAgICBjb25zdCBmb3JtID0gcmVmKHtcbiAgICAgIHBob25lOiAnJyxcbiAgICAgIGNvZGU6ICcnXG4gICAgfSk7XG4gICAgY29uc3QgdmFsaWQgPSByZWYoe1xuICAgICAgcGhvbmU6IGZhbHNlLFxuICAgICAgY29kZTogZmFsc2VcbiAgICB9KTtcblxuICAgIGNvbnN0IHJ1bGVzID0ge1xuICAgICAgcmVxdWlyZWQ6IHYgPT4gISF2IHx8ICfQntCx0Y/Qt9Cw0YLQtdC70YzQvdC+0LUg0L/QvtC70LUnLFxuICAgICAgcGhvbmU6IHYgPT4ge1xuICAgICAgICBjb25zdCBwaG9uZVJlZ2V4ID0gL15bMC05XXsxMH0kLztcbiAgICAgICAgcmV0dXJuIHBob25lUmVnZXgudGVzdCh2KSB8fCAn0JLQstC10LTQuNGC0LUgMTAg0YbQuNGE0YAg0L3QvtC80LXRgNCwICjQvdCw0L/RgNC40LzQtdGALCA3OTk5MTExMjIzMyknO1xuICAgICAgfSxcbiAgICAgIGNvZGU6IHYgPT4ge1xuICAgICAgICBjb25zdCBjb2RlUmVnZXggPSAvXlswLTldezR9JC87XG4gICAgICAgIHJldHVybiBjb2RlUmVnZXgudGVzdCh2KSB8fCAn0JLQstC10LTQuNGC0LUgNCDRhtC40YTRgNGLINC60L7QtNCwJztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3Qgc3RhcnRUaW1lciA9IChzZWNvbmRzKSA9PiB7XG4gICAgICB0aW1lci52YWx1ZSA9IHNlY29uZHM7XG5cbiAgICAgIGlmICh0aW1lckludGVydmFsLnZhbHVlKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJbnRlcnZhbC52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRpbWVySW50ZXJ2YWwudmFsdWUgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmICh0aW1lci52YWx1ZSA+IDApIHtcbiAgICAgICAgICB0aW1lci52YWx1ZS0tO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJbnRlcnZhbC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMDApO1xuICAgIH07XG5cbiAgICBjb25zdCBzZW5kQ29kZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghdmFsaWQudmFsdWUucGhvbmUpIHJldHVybjtcblxuICAgICAgbG9hZGluZy52YWx1ZSA9IHRydWU7XG4gICAgICBwaG9uZUVycm9yLnZhbHVlID0gJyc7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpLnBvc3QoJy9hcGkvdXNlci9hdXRob3JpemUnLCB7XG4gICAgICAgICAgcGhvbmU6IGZvcm0udmFsdWUucGhvbmVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdHVzID09PSAxKSB7XG4gICAgICAgICAgc3RlcC52YWx1ZSA9ICdjb2RlJztcbiAgICAgICAgICBzdGFydFRpbWVyKDYwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwaG9uZUVycm9yLnZhbHVlID0gcmVzcG9uc2UuZGF0YS5tZXNzYWdlIHx8ICfQntGI0LjQsdC60LAg0L7RgtC/0YDQsNCy0LrQuCDQutC+0LTQsCc7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHBob25lRXJyb3IudmFsdWUgPSBlcnJvci5yZXNwb25zZT8uZGF0YT8ubWVzc2FnZSB8fCAn0J7RiNC40LHQutCwINGB0L7QtdC00LjQvdC10L3QuNGPINGBINGB0LXRgNCy0LXRgNC+0LwnO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdTZW5kIGNvZGUgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgbG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjb25maXJtQ29kZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmICghdmFsaWQudmFsdWUuY29kZSkgcmV0dXJuO1xuXG4gICAgICBsb2FkaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIGNvZGVFcnJvci52YWx1ZSA9ICcnO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5wb3N0KCcvYXBpL3VzZXIvY29uZmlybScsIHtcbiAgICAgICAgICBwaG9uZTogZm9ybS52YWx1ZS5waG9uZSxcbiAgICAgICAgICBjb2RlOiBmb3JtLnZhbHVlLmNvZGVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuc3RhdHVzID09PSAxKSB7XG4gICAgICAgICAgY29uc3QgYXV0aERhdGEgPSB7XG4gICAgICAgICAgICB0b2tlbjogcmVzcG9uc2UuZGF0YS5kYXRhLnRva2VuLFxuICAgICAgICAgICAgdXNlcjogcmVzcG9uc2UuZGF0YS5kYXRhLnVzZXJcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgLy8g0KHQvtGF0YDQsNC90Y/QtdC8INCyIGxvY2FsU3RvcmFnZVxuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhdXRoX3Rva2VuJywgYXV0aERhdGEudG9rZW4pO1xuXG4gICAgICAgICAgLy8g0J7RgdGC0LDQvdCw0LLQu9C40LLQsNC10Lwg0YLQsNC50LzQtdGAXG4gICAgICAgICAgaWYgKHRpbWVySW50ZXJ2YWwudmFsdWUpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJbnRlcnZhbC52YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8g0J7RgtC/0YDQsNCy0LvRj9C10Lwg0YHQvtCx0YvRgtC40LUg0L7QsSDRg9GB0L/QtdGI0L3QvtC5INCw0LLRgtC+0YDQuNC30LDRhtC40LhcbiAgICAgICAgICBlbWl0KCdsb2dpbi1zdWNjZXNzJywgYXV0aERhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvZGVFcnJvci52YWx1ZSA9IHJlc3BvbnNlLmRhdGEubWVzc2FnZSB8fCAn0J3QtdCy0LXRgNC90YvQuSDQutC+0LQnO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb2RlRXJyb3IudmFsdWUgPSBlcnJvci5yZXNwb25zZT8uZGF0YT8ubWVzc2FnZSB8fCAn0J7RiNC40LHQutCwINC/0L7QtNGC0LLQtdGA0LbQtNC10L3QuNGPINC60L7QtNCwJztcbiAgICAgICAgY29uc29sZS5lcnJvcignQ29uZmlybSBjb2RlIGVycm9yOicsIGVycm9yKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmVzZW5kQ29kZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHNlbmRDb2RlKCk7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGVwLFxuICAgICAgbG9hZGluZyxcbiAgICAgIHBob25lRXJyb3IsXG4gICAgICBjb2RlRXJyb3IsXG4gICAgICB0aW1lcixcbiAgICAgIGZvcm0sXG4gICAgICB2YWxpZCxcbiAgICAgIHJ1bGVzLFxuICAgICAgc2VuZENvZGUsXG4gICAgICBjb25maXJtQ29kZSxcbiAgICAgIHJlc2VuZENvZGVcbiAgICB9O1xuICB9XG59O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4uZmlsbC1oZWlnaHQge1xuICBtaW4taGVpZ2h0OiAxMDB2aDtcbn1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICA8di1jb250YWluZXI+XG4gICAgPCEtLSDQlNCw0YLQsCDQuCDQv9C+0LjRgdC6IC0tPlxuICAgIDx2LXJvdyBjbGFzcz1cIm1iLTRcIj5cbiAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjRcIj5cbiAgICAgICAgPHYtbWVudVxuICAgICAgICAgICAgdi1tb2RlbD1cImRhdGVNZW51XCJcbiAgICAgICAgICAgIDpjbG9zZS1vbi1jb250ZW50LWNsaWNrPVwiZmFsc2VcIlxuICAgICAgICAgICAgdHJhbnNpdGlvbj1cInNjYWxlLXRyYW5zaXRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDphY3RpdmF0b3I9XCJ7IHByb3BzIH1cIj5cbiAgICAgICAgICAgIDx2LXRleHQtZmllbGRcbiAgICAgICAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWREYXRlRGlzcGxheVwiXG4gICAgICAgICAgICAgICAgbGFiZWw9XCLQlNCw0YLQsCDRgNCw0YHRh9C10YLQsFwiXG4gICAgICAgICAgICAgICAgcHJlcGVuZC1pbm5lci1pY29uPVwibWRpLWNhbGVuZGFyXCJcbiAgICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgICAgICAgICAgZGVuc2l0eT1cImNvbXBhY3RcIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cInByb3BzXCJcbiAgICAgICAgICAgID48L3YtdGV4dC1maWVsZD5cbiAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgIDx2LWRhdGUtcGlja2VyXG4gICAgICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZERhdGVcIlxuICAgICAgICAgICAgICBAdXBkYXRlOm1vZGVsLXZhbHVlPVwib25EYXRlQ2hhbmdlXCJcbiAgICAgICAgICA+PC92LWRhdGUtcGlja2VyPlxuICAgICAgICA8L3YtbWVudT5cbiAgICAgIDwvdi1jb2w+XG5cbiAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBtZD1cIjhcIj5cbiAgICAgICAgPHYtdGV4dC1maWVsZFxuICAgICAgICAgICAgdi1tb2RlbD1cInNlYXJjaFF1ZXJ5XCJcbiAgICAgICAgICAgIGxhYmVsPVwi0J/QvtC40YHQuiDQv9C+INC90L7QvNC10YDRg1wiXG4gICAgICAgICAgICBwcmVwZW5kLWlubmVyLWljb249XCJtZGktbWFnbmlmeVwiXG4gICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgICAgZGVuc2l0eT1cImNvbXBhY3RcIlxuICAgICAgICAgICAgY2xlYXJhYmxlXG4gICAgICAgICAgICBAaW5wdXQ9XCIkZW1pdCgnc2VhcmNoJywgc2VhcmNoUXVlcnkpXCJcbiAgICAgICAgPjwvdi10ZXh0LWZpZWxkPlxuICAgICAgPC92LWNvbD5cbiAgICA8L3Ytcm93PlxuXG4gICAgPCEtLSDQodC/0LjRgdC+0Log0LfQsNC50LzQvtCyIC0tPlxuICAgIDx2LXJvdz5cbiAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIj5cbiAgICAgICAgPHYtcHJvZ3Jlc3MtY2lyY3VsYXJcbiAgICAgICAgICAgIHYtaWY9XCJsb2FkaW5nXCJcbiAgICAgICAgICAgIGluZGV0ZXJtaW5hdGVcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICBjbGFzcz1cImQtYmxvY2sgbXgtYXV0byBteS04XCJcbiAgICAgICAgPjwvdi1wcm9ncmVzcy1jaXJjdWxhcj5cblxuICAgICAgICA8di1leHBhbnNpb24tcGFuZWxzIHYtZWxzZS1pZj1cImxvYW5zICYmIGxvYW5zLmxlbmd0aCA+IDBcIiB2YXJpYW50PVwiYWNjb3JkaW9uXCI+XG4gICAgICAgICAgPHYtZXhwYW5zaW9uLXBhbmVsXG4gICAgICAgICAgICAgIHYtZm9yPVwibG9hbiBpbiBsb2Fuc1wiXG4gICAgICAgICAgICAgIDprZXk9XCJsb2FuLmlkIHx8IGxvYW4uTnVtVGlja2V0XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtYi0yXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8di1leHBhbnNpb24tcGFuZWwtdGl0bGUgY2xhc3M9XCJsb2FuLWhlYWRlclwiPlxuICAgICAgICAgICAgICA8di1yb3cgYWxpZ249XCJjZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgc209XCI0XCI+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IGxvYW4uTnVtVGlja2V0IH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtY2FwdGlvbiBtbC0yXCI+0L7RgiB7eyBmb3JtYXREYXRlKGxvYW4uRGF0ZVopIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgICAgPHYtY29sIGNvbHM9XCI2XCIgc209XCIzXCI+XG4gICAgICAgICAgICAgICAgICA8di1jaGlwIHNpemU9XCJzbWFsbFwiIDpjb2xvcj1cImdldFBlcmNlbnRDb2xvcihsb2FuLnBlcmNlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGxvYW4ucGVyY2VudCB9fSVcbiAgICAgICAgICAgICAgICAgIDwvdi1jaGlwPlxuICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgICAgPHYtY29sIGNvbHM9XCI2XCIgc209XCIzXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtaDZcIj57eyBmb3JtYXRBbW91bnQobG9hbi5TdW1Qcm9jKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3YtY29sPlxuICAgICAgICAgICAgICAgIDx2LWNvbCBjb2xzPVwiMTJcIiBzbT1cIjJcIiBjbGFzcz1cInRleHQtcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgIDx2LWJ0blxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwic3VjY2Vzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2suc3RvcD1cIiRlbWl0KCdwYXltZW50JywgbG9hbilcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICDQntC/0LvQsNGC0LjRgtGMXG4gICAgICAgICAgICAgICAgICA8L3YtYnRuPlxuICAgICAgICAgICAgICAgIDwvdi1jb2w+XG4gICAgICAgICAgICAgIDwvdi1yb3c+XG4gICAgICAgICAgICA8L3YtZXhwYW5zaW9uLXBhbmVsLXRpdGxlPlxuXG4gICAgICAgICAgICA8di1leHBhbnNpb24tcGFuZWwtdGV4dD5cbiAgICAgICAgICAgICAgPHYtY2FyZCB2YXJpYW50PVwib3V0bGluZWRcIiBjbGFzcz1cInBhLTRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zdWJ0aXRsZS0yIG1iLTJcIj7QmNC90YTQvtGA0LzQsNGG0LjRjyDQviDQtNC+0LPQvtCy0L7RgNC1PC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8di1yb3c+XG4gICAgICAgICAgICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgbWQ9XCI2XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNhcHRpb24gdGV4dC1tZWRpdW0tZW1waGFzaXNcIj7QntGA0LPQsNC90LjQt9Cw0YbQuNGPPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJvZHktMlwiPnt7IGxvYW4uT3JnTmFpbSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jYXB0aW9uXCI+e3sgbG9hbi5BZHJlc3MgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2FwdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPVwiJ3RlbDonICsgbG9hbi5UZWxcIj57eyBsb2FuLlRlbCB9fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L3YtY29sPlxuXG4gICAgICAgICAgICAgICAgICA8di1jb2wgY29scz1cIjEyXCIgbWQ9XCI2XCI+XG4gICAgICAgICAgICAgICAgICAgIDx2LWxpc3QgZGVuc2l0eT1cImNvbXBhY3RcIiBsaW5lcz1cIm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx2LWxpc3QtaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6cHJlcGVuZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWNhcHRpb25cIj7QodGD0LzQvNCwINC30LDQudC80LA6PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2LWxpc3QtaXRlbS10aXRsZSBjbGFzcz1cInRleHQtcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybWF0QW1vdW50KGxvYW4uU3VtQ3JlZGl0KSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC92LWxpc3QtaXRlbS10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3YtbGlzdC1pdGVtPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPHYtbGlzdC1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtc2xvdDpwcmVwZW5kPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtY2FwdGlvblwiPtCU0LXQudGB0YLQstC40YLQtdC70LXQvSDQtNC+Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1saXN0LWl0ZW0tdGl0bGUgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdERhdGUobG9hbi5EYXRlVikgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1saXN0LWl0ZW0tdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC92LWxpc3QtaXRlbT5cblxuICAgICAgICAgICAgICAgICAgICAgIDx2LWxpc3QtaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6cHJlcGVuZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWNhcHRpb25cIj7QktC+0LfQstGA0LDRgiDQtNC+Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1saXN0LWl0ZW0tdGl0bGUgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdERhdGUobG9hbi5EYXRlUikgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdi1saXN0LWl0ZW0tdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC92LWxpc3QtaXRlbT5cblxuICAgICAgICAgICAgICAgICAgICAgIDx2LWxpc3QtaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6cHJlcGVuZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWNhcHRpb25cIj7Qn9GA0L7RhtC10L3RgtGLOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8di1saXN0LWl0ZW0tdGl0bGUgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdEFtb3VudChsb2FuLlN1bVByb2MpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3YtbGlzdC1pdGVtLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdi1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgIDwvdi1saXN0PlxuICAgICAgICAgICAgICAgICAgPC92LWNvbD5cbiAgICAgICAgICAgICAgICA8L3Ytcm93PlxuXG4gICAgICAgICAgICAgICAgPHYtZGl2aWRlciBjbGFzcz1cIm15LTNcIj48L3YtZGl2aWRlcj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXN1YnRpdGxlLTIgbWItMlwiPtCi0L7QstCw0YDRiyDQsiDQt9Cw0LvQvtCz0LU8L2Rpdj5cbiAgICAgICAgICAgICAgICA8di1saXN0IGxpbmVzPVwib25lXCIgZGVuc2l0eT1cImNvbXBhY3RcIj5cbiAgICAgICAgICAgICAgICAgIDx2LWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgIHYtZm9yPVwiKHByb2R1Y3QsIGluZGV4KSBpbiBsb2FuLkdvb2RzXCJcbiAgICAgICAgICAgICAgICAgICAgICA6a2V5PVwiaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1zbG90OnByZXBlbmQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHYtaWNvbiBpY29uPVwibWRpLWRpYW1vbmRcIiBjb2xvcj1cInByaW1hcnlcIj48L3YtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPHYtbGlzdC1pdGVtLXRpdGxlPnt7IGdldFByb2R1Y3RUaXRsZShwcm9kdWN0KSB9fTwvdi1saXN0LWl0ZW0tdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6YXBwZW5kPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ib2R5LTJcIj57eyBmb3JtYXRBbW91bnQocHJvZHVjdC5TdW1DcmVkaXQpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPC92LWxpc3QtaXRlbT5cbiAgICAgICAgICAgICAgICA8L3YtbGlzdD5cblxuICAgICAgICAgICAgICAgIDx2LWFsZXJ0XG4gICAgICAgICAgICAgICAgICAgIHYtaWY9XCJsb2FuLnJhdGVEZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJpbmZvXCJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInRvbmFsXCJcbiAgICAgICAgICAgICAgICAgICAgZGVuc2l0eT1cImNvbXBhY3RcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm10LTNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGxvYW4ucmF0ZURlc2NyaXB0aW9uIH19XG4gICAgICAgICAgICAgICAgPC92LWFsZXJ0PlxuICAgICAgICAgICAgICA8L3YtY2FyZD5cbiAgICAgICAgICAgIDwvdi1leHBhbnNpb24tcGFuZWwtdGV4dD5cbiAgICAgICAgICA8L3YtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L3YtZXhwYW5zaW9uLXBhbmVscz5cblxuICAgICAgICA8IS0tINCh0L7QvtCx0YnQtdC90LjQtSDQtdGB0LvQuCDQvdC10YIg0LfQsNC50LzQvtCyIC0tPlxuICAgICAgICA8di1hbGVydFxuICAgICAgICAgICAgdi1lbHNlLWlmPVwiIWxvYWRpbmdcIlxuICAgICAgICAgICAgdHlwZT1cImluZm9cIlxuICAgICAgICAgICAgdmFyaWFudD1cInRvbmFsXCJcbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXJcIlxuICAgICAgICA+XG4gICAgICAgICAg0J3QtdGCINC30LDQudC80L7QsiDQt9CwINCy0YvQsdGA0LDQvdC90YPRjiDQtNCw0YLRg1xuICAgICAgICA8L3YtYWxlcnQ+XG4gICAgICA8L3YtY29sPlxuICAgIDwvdi1yb3c+XG4gIDwvdi1jb250YWluZXI+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgcmVmLCB3YXRjaCB9IGZyb20gJ3Z1ZSc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ0xvYW5zVGFiJyxcbiAgcHJvcHM6IHtcbiAgICBsb2Fuczoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgbG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9LFxuICBlbWl0czogWydzZWFyY2gnLCAncGF5bWVudCcsICdkYXRlLWNoYW5nZSddLFxuICBzZXR1cChwcm9wcywgeyBlbWl0IH0pIHtcbiAgICBjb25zdCBkYXRlTWVudSA9IHJlZihmYWxzZSk7XG4gICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gcmVmKG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdKTtcbiAgICBjb25zdCBzZWxlY3RlZERhdGVEaXNwbGF5ID0gcmVmKG5ldyBEYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKCdydS1SVScpKTtcbiAgICBjb25zdCBzZWFyY2hRdWVyeSA9IHJlZignJyk7XG5cbiAgICAvLyDQpNC+0YDQvNCw0YLQuNGA0YPQtdC8INC00LDRgtGDINC00LvRjyDQvtGC0L7QsdGA0LDQttC10L3QuNGPINC/0YDQuCDQuNC30LzQtdC90LXQvdC40LhcbiAgICB3YXRjaChzZWxlY3RlZERhdGUsIChuZXdEYXRlKSA9PiB7XG4gICAgICBpZiAobmV3RGF0ZSkge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUobmV3RGF0ZSk7XG4gICAgICAgIHNlbGVjdGVkRGF0ZURpc3BsYXkudmFsdWUgPSBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygncnUtUlUnKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vINCe0LHRgNCw0LHQvtGC0YfQuNC6INC40LfQvNC10L3QtdC90LjRjyDQtNCw0YLRi1xuICAgIGNvbnN0IG9uRGF0ZUNoYW5nZSA9IChkYXRlKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnTG9hbnNUYWI6IG9uRGF0ZUNoYW5nZSBjYWxsZWQgd2l0aCBkYXRlOicsIGRhdGUpO1xuXG4gICAgICAvLyDQl9Cw0LrRgNGL0LLQsNC10Lwg0LrQsNC70LXQvdC00LDRgNGMXG4gICAgICBkYXRlTWVudS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAvLyDQntCx0L3QvtCy0LvRj9C10Lwg0LLRi9Cx0YDQsNC90L3Rg9GOINC00LDRgtGDXG4gICAgICBzZWxlY3RlZERhdGUudmFsdWUgPSBkYXRlO1xuXG4gICAgICAvLyDQpNC+0YDQvNCw0YLQuNGA0YPQtdC8INC00LDRgtGDINCyIElTTyDRgSDQstGA0LXQvNC10L3QtdC8INC00LvRjyBBUElcbiAgICAgIGNvbnN0IGRhdGVPYmogPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgIC8vINCj0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdC8INC60L7QvdC10YYg0LTQvdGPICgyMzo1OTo1OSlcbiAgICAgIGRhdGVPYmouc2V0SG91cnMoMjMsIDU5LCA1OSk7XG4gICAgICBjb25zdCBpc29EYXRlID0gZGF0ZU9iai50b0lTT1N0cmluZygpO1xuXG4gICAgICBjb25zb2xlLmxvZygnTG9hbnNUYWI6IEVtaXR0aW5nIGRhdGUtY2hhbmdlIHdpdGg6JywgaXNvRGF0ZSk7XG5cbiAgICAgIC8vINCe0YLQv9GA0LDQstC70Y/QtdC8INGB0L7QsdGL0YLQuNC1INGBINC90L7QstC+0Lkg0LTQsNGC0L7QuSDQsiDRgNC+0LTQuNGC0LXQu9GM0YHQutC40Lkg0LrQvtC80L/QvtC90LXQvdGCXG4gICAgICBlbWl0KCdkYXRlLWNoYW5nZScsIGlzb0RhdGUpO1xuICAgIH07XG5cbiAgICBjb25zdCBmb3JtYXREYXRlID0gKGRhdGUpID0+IHtcbiAgICAgIGlmICghZGF0ZSkgcmV0dXJuICcnO1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpLnRvTG9jYWxlRGF0ZVN0cmluZygncnUtUlUnKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZm9ybWF0QW1vdW50ID0gKGFtb3VudCkgPT4ge1xuICAgICAgaWYgKCFhbW91bnQpIHJldHVybiAnMCDigr0nO1xuICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCgncnUtUlUnLCB7XG4gICAgICAgIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICBjdXJyZW5jeTogJ1JVQicsXG4gICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMlxuICAgICAgfSkuZm9ybWF0KGFtb3VudCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGdldFByb2R1Y3RUaXRsZSA9IChwcm9kdWN0KSA9PiB7XG4gICAgICBjb25zdCBwYXJ0cyA9IFtcbiAgICAgICAgcHJvZHVjdC5UeXBlSXpkLFxuICAgICAgICBwcm9kdWN0LlByb2JhLFxuICAgICAgICBwcm9kdWN0Lk9waXNhbmllLFxuICAgICAgICBwcm9kdWN0LktvbCA/IGAke3Byb2R1Y3QuS29sfSDRiNGCYCA6IG51bGwsXG4gICAgICAgIHByb2R1Y3QuVmVzID8gYCR7cHJvZHVjdC5WZXN9INCzYCA6IG51bGxcbiAgICAgIF0uZmlsdGVyKHBhcnQgPT4gcGFydCAmJiBwYXJ0ICE9PSAnJyAmJiBwYXJ0ICE9PSAnbnVsbCcpO1xuXG4gICAgICByZXR1cm4gcGFydHMuam9pbignICcpIHx8ICfQotC+0LLQsNGAJztcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0UGVyY2VudENvbG9yID0gKHBlcmNlbnQpID0+IHtcbiAgICAgIGlmIChwZXJjZW50IDwgMTApIHJldHVybiAnc3VjY2Vzcyc7XG4gICAgICBpZiAocGVyY2VudCA8IDIwKSByZXR1cm4gJ3dhcm5pbmcnO1xuICAgICAgcmV0dXJuICdlcnJvcic7XG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRlTWVudSxcbiAgICAgIHNlbGVjdGVkRGF0ZSxcbiAgICAgIHNlbGVjdGVkRGF0ZURpc3BsYXksXG4gICAgICBzZWFyY2hRdWVyeSxcbiAgICAgIG9uRGF0ZUNoYW5nZSwgIC8vINCS0LDQttC90L4hINCt0YLQviDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0LLQvtC30LLRgNCw0YnQtdC90L5cbiAgICAgIGZvcm1hdERhdGUsXG4gICAgICBmb3JtYXRBbW91bnQsXG4gICAgICBnZXRQZXJjZW50Q29sb3IsXG4gICAgICBnZXRQcm9kdWN0VGl0bGVcbiAgICB9O1xuICB9XG59O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4ubG9hbi1oZWFkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IodmFyKC0tdi10aGVtZS1zdXJmYWNlKSk7XG59XG5cbi8qINCU0L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0Lkg0YHRgtC40LvRjCDQtNC70Y8g0LPQsNGA0LDQvdGC0LjQuCDQv9C+0LvQvdC+0Lkg0YjQuNGA0LjQvdGLICovXG46ZGVlcCgudi1leHBhbnNpb24tcGFuZWwtdGV4dF9fd3JhcHBlcikge1xuICBwYWRkaW5nOiAxNnB4ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG59XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgPHYtbWFpbiA6Y2xhc3M9XCJ7ICdtb2JpbGUtbWFpbic6IGlzTW9iaWxlTW9kZSB9XCI+XG4gICAgPHYtY29udGFpbmVyIGZsdWlkIGNsYXNzPVwicGEtMCBmaWxsLWhlaWdodFwiPlxuICAgICAgPCEtLSDQlNC10YHQutGC0L7Qv9C90LDRjyDQstC10YDRgdC40Y8g0YEg0YLQsNCx0LDQvNC4IC0tPlxuICAgICAgPHRlbXBsYXRlIHYtaWY9XCIhaXNNb2JpbGVNb2RlXCI+XG4gICAgICAgIDx2LWFwcC1iYXIgY29sb3I9XCJwcmltYXJ5XCIgZGVuc2l0eT1cImNvbXBhY3RcIiBwcm9taW5lbnQ+XG4gICAgICAgICAgPHYtdGFic1xuICAgICAgICAgICAgICB2LW1vZGVsPVwiYWN0aXZlVGFiXCJcbiAgICAgICAgICAgICAgYWxpZ24tdGFicz1cInN0YXJ0XCJcbiAgICAgICAgICAgICAgY29sb3I9XCJ3aGl0ZVwiXG4gICAgICAgICAgICAgIHNob3ctYXJyb3dzXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHYtdGFiIHZhbHVlPVwidGFiLTFcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAg0JfQsNC50LzRi1xuICAgICAgICAgICAgICAgIDx2LWJhZGdlIHYtaWY9XCJsb2Fuc0NvdW50XCIgOmNvbnRlbnQ9XCJsb2Fuc0NvdW50XCIgY29sb3I9XCJlcnJvclwiIGlubGluZT48L3YtYmFkZ2U+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92LXRhYj5cbiAgICAgICAgICAgIDx2LXRhYiB2YWx1ZT1cInRhYi1wYXltZW50XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiPlxuICAgICAgICAgICAgICAgINCe0L/Qu9Cw0YLRi1xuICAgICAgICAgICAgICAgIDx2LWJhZGdlIHYtaWY9XCJwYXltZW50c0NvdW50XCIgOmNvbnRlbnQ9XCJwYXltZW50c0NvdW50XCIgY29sb3I9XCJlcnJvclwiIGlubGluZT48L3YtYmFkZ2U+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC92LXRhYj5cbiAgICAgICAgICAgIDx2LXRhYiB2YWx1ZT1cInRhYi0yXCI+0J/RgNC+0YTQuNC70Yw8L3YtdGFiPlxuICAgICAgICAgICAgPHYtc3BhY2VyPjwvdi1zcGFjZXI+XG4gICAgICAgICAgICA8di10YWIgdmFsdWU9XCJ0YWItNFwiIEBjbGljaz1cImxvZ291dFwiPlxuICAgICAgICAgICAgICA8di1pY29uIHN0YXJ0Pm1kaS1sb2dvdXQ8L3YtaWNvbj5cbiAgICAgICAgICAgICAg0JLRi9GF0L7QtFxuICAgICAgICAgICAgPC92LXRhYj5cbiAgICAgICAgICA8L3YtdGFicz5cbiAgICAgICAgPC92LWFwcC1iYXI+XG5cbiAgICAgICAgPCEtLSDQlNC10YHQutGC0L7Qv9C90YvQuSDQutC+0L3RgtC10L3RgiAtLT5cbiAgICAgICAgPHYtd2luZG93IHYtbW9kZWw9XCJhY3RpdmVUYWJcIiBjbGFzcz1cIm10LTE2XCI+XG4gICAgICAgICAgPHYtd2luZG93LWl0ZW0gdmFsdWU9XCJ0YWItMVwiPlxuICAgICAgICAgICAgPExvYW5zVGFiXG4gICAgICAgICAgICAgICAgOmxvYW5zPVwiZmlsdGVyZWRMb2Fuc1wiXG4gICAgICAgICAgICAgICAgOmxvYWRpbmc9XCJsb2FkaW5nXCJcbiAgICAgICAgICAgICAgICBAc2VhcmNoPVwiaGFuZGxlU2VhcmNoXCJcbiAgICAgICAgICAgICAgICBAcGF5bWVudD1cImhhbmRsZVBheW1lbnRcIlxuICAgICAgICAgICAgICAgIEBkYXRlLWNoYW5nZT1cImhhbmRsZURhdGVDaGFuZ2VcIlxuICAgICAgICAgICAgICAgIDptb2JpbGU9XCJpc01vYmlsZU1vZGVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3Ytd2luZG93LWl0ZW0+XG4gICAgICAgICAgPHYtd2luZG93LWl0ZW0gdmFsdWU9XCJ0YWItcGF5bWVudFwiPlxuICAgICAgICAgICAgPFBheW1lbnRzVGFiXG4gICAgICAgICAgICAgICAgOnBheW1lbnRzPVwicGF5bWVudHNcIlxuICAgICAgICAgICAgICAgIEByZWZyZXNoPVwibG9hZFBheW1lbnRzXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC92LXdpbmRvdy1pdGVtPlxuICAgICAgICAgIDx2LXdpbmRvdy1pdGVtIHZhbHVlPVwidGFiLTJcIj5cbiAgICAgICAgICAgIDxDbGllbnRUYWIgOmNsaWVudD1cImNsaWVudFwiIEBsb2dvdXQ9XCJsb2dvdXRcIiAvPlxuICAgICAgICAgIDwvdi13aW5kb3ctaXRlbT5cbiAgICAgICAgPC92LXdpbmRvdz5cbiAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgIDwhLS0g0JzQvtCx0LjQu9GM0L3QsNGPINCy0LXRgNGB0LjRjyAtLT5cbiAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XG4gICAgICAgIDwhLS0g0JzQvtCx0LjQu9GM0L3Ri9C5INGF0LXQtNC10YAgLS0+XG4gICAgICAgIDx2LWFwcC1iYXJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICBkZW5zaXR5PVwiY29tZm9ydGFibGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJtb2JpbGUtaGVhZGVyXCJcbiAgICAgICAgICAgIDpzdHlsZT1cInsgcGFkZGluZ1RvcDogYGVudihzYWZlLWFyZWEtaW5zZXQtdG9wLCAwKWAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8di1hcHAtYmFyLW5hdi1pY29uXG4gICAgICAgICAgICAgIEBjbGljaz1cIiRlbWl0KCd0b2dnbGUtZHJhd2VyJylcIlxuICAgICAgICAgICAgICB2YXJpYW50PVwidGV4dFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnVyZ2VyLWljb25cIlxuICAgICAgICAgICAgICBjb2xvcj1cIndoaXRlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8di1pY29uPm1kaS1tZW51PC92LWljb24+XG4gICAgICAgICAgPC92LWFwcC1iYXItbmF2LWljb24+XG5cbiAgICAgICAgICA8di10b29sYmFyLXRpdGxlIGNsYXNzPVwidGV4dC10cnVuY2F0ZSB0ZXh0LXdoaXRlXCI+XG4gICAgICAgICAgICB7eyBjdXJyZW50VGFiVGl0bGUgfX1cbiAgICAgICAgICA8L3YtdG9vbGJhci10aXRsZT5cblxuICAgICAgICAgIDx0ZW1wbGF0ZSB2LXNsb3Q6YXBwZW5kPlxuICAgICAgICAgICAgPHYtYnRuXG4gICAgICAgICAgICAgICAgaWNvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBjb2xvcj1cIndoaXRlXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJsb2dvdXRcIlxuICAgICAgICAgICAgICAgIHYtaWY9XCIhZW1iZWRkZWRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8di1pY29uPm1kaS1sb2dvdXQ8L3YtaWNvbj5cbiAgICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPC92LWFwcC1iYXI+XG5cbiAgICAgICAgPCEtLSDQnNC+0LHQuNC70YzQvdGL0Lkg0LrQvtC90YLQtdC90YIgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtY29udGVudFwiPlxuICAgICAgICAgIDwhLS0g0KLQsNCxINCX0LDQudC80YsgLS0+XG4gICAgICAgICAgPGRpdiB2LWlmPVwiYWN0aXZlVGFiID09PSAndGFiLTEnXCIgY2xhc3M9XCJ0YWItcGFuZVwiPlxuICAgICAgICAgICAgPExvYW5zVGFiXG4gICAgICAgICAgICAgICAgOmxvYW5zPVwiZmlsdGVyZWRMb2Fuc1wiXG4gICAgICAgICAgICAgICAgOmxvYWRpbmc9XCJsb2FkaW5nXCJcbiAgICAgICAgICAgICAgICBAc2VhcmNoPVwiaGFuZGxlU2VhcmNoXCJcbiAgICAgICAgICAgICAgICBAcGF5bWVudD1cImhhbmRsZVBheW1lbnRcIlxuICAgICAgICAgICAgICAgIEBkYXRlLWNoYW5nZT1cImhhbmRsZURhdGVDaGFuZ2VcIlxuICAgICAgICAgICAgICAgIDptb2JpbGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tINCi0LDQsSDQntC/0LvQsNGC0YsgLS0+XG4gICAgICAgICAgPGRpdiB2LWVsc2UtaWY9XCJhY3RpdmVUYWIgPT09ICd0YWItcGF5bWVudCdcIiBjbGFzcz1cInRhYi1wYW5lXCI+XG4gICAgICAgICAgICA8UGF5bWVudHNUYWJcbiAgICAgICAgICAgICAgICA6cGF5bWVudHM9XCJwYXltZW50c1wiXG4gICAgICAgICAgICAgICAgQHJlZnJlc2g9XCJsb2FkUGF5bWVudHNcIlxuICAgICAgICAgICAgICAgIDptb2JpbGU9XCJ0cnVlXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tINCi0LDQsSDQmtC70LjQtdC90YIgLS0+XG4gICAgICAgICAgPGRpdiB2LWVsc2UtaWY9XCJhY3RpdmVUYWIgPT09ICd0YWItMidcIiBjbGFzcz1cInRhYi1wYW5lXCI+XG4gICAgICAgICAgICA8Q2xpZW50VGFiXG4gICAgICAgICAgICAgICAgOmNsaWVudD1cImNsaWVudFwiXG4gICAgICAgICAgICAgICAgQGxvZ291dD1cImxvZ291dFwiXG4gICAgICAgICAgICAgICAgOm1vYmlsZT1cInRydWVcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSDQnNC+0LHQuNC70YzQvdCw0Y8g0L3QuNC20L3Rj9GPINC90LDQstC40LPQsNGG0LjRjyAtLT5cbiAgICAgICAgPHYtYm90dG9tLW5hdmlnYXRpb25cbiAgICAgICAgICAgIHYtbW9kZWw9XCJhY3RpdmVUYWJcIlxuICAgICAgICAgICAgZ3Jvd1xuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgIGJnLWNvbG9yPVwid2hpdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJtb2JpbGUtYm90dG9tLW5hdlwiXG4gICAgICAgICAgICA6c3R5bGU9XCJ7IHBhZGRpbmdCb3R0b206IGBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSwgMClgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHYtYnRuIHZhbHVlPVwidGFiLTFcIj5cbiAgICAgICAgICAgIDx2LWljb24+bWRpLWhhbmQtY29pbjwvdi1pY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWNhcHRpb25cIj7Ql9Cw0LnQvNGLPC9zcGFuPlxuICAgICAgICAgICAgPHYtYmFkZ2VcbiAgICAgICAgICAgICAgICB2LWlmPVwibG9hbnNDb3VudFwiXG4gICAgICAgICAgICAgICAgOmNvbnRlbnQ9XCJsb2Fuc0NvdW50XCJcbiAgICAgICAgICAgICAgICBjb2xvcj1cImVycm9yXCJcbiAgICAgICAgICAgICAgICBmbG9hdGluZ1xuICAgICAgICAgICAgICAgIG9mZnNldC14PVwiNVwiXG4gICAgICAgICAgICAgICAgb2Zmc2V0LXk9XCIxMFwiXG4gICAgICAgICAgICA+PC92LWJhZGdlPlxuICAgICAgICAgIDwvdi1idG4+XG5cbiAgICAgICAgICA8di1idG4gdmFsdWU9XCJ0YWItcGF5bWVudFwiPlxuICAgICAgICAgICAgPHYtaWNvbj5tZGktY3JlZGl0LWNhcmQ8L3YtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1jYXB0aW9uXCI+0J7Qv9C70LDRgtGLPC9zcGFuPlxuICAgICAgICAgICAgPHYtYmFkZ2VcbiAgICAgICAgICAgICAgICB2LWlmPVwicGF5bWVudHNDb3VudFwiXG4gICAgICAgICAgICAgICAgOmNvbnRlbnQ9XCJwYXltZW50c0NvdW50XCJcbiAgICAgICAgICAgICAgICBjb2xvcj1cImVycm9yXCJcbiAgICAgICAgICAgICAgICBmbG9hdGluZ1xuICAgICAgICAgICAgICAgIG9mZnNldC14PVwiNVwiXG4gICAgICAgICAgICAgICAgb2Zmc2V0LXk9XCI1XCJcbiAgICAgICAgICAgID48L3YtYmFkZ2U+XG4gICAgICAgICAgPC92LWJ0bj5cblxuICAgICAgICAgIDx2LWJ0biB2YWx1ZT1cInRhYi0yXCI+XG4gICAgICAgICAgICA8di1pY29uPm1kaS1hY2NvdW50PC92LWljb24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtY2FwdGlvblwiPtCf0YDQvtGE0LjQu9GMPC9zcGFuPlxuICAgICAgICAgIDwvdi1idG4+XG4gICAgICAgIDwvdi1ib3R0b20tbmF2aWdhdGlvbj5cblxuICAgICAgICA8IS0tINCe0LHQu9Cw0YHRgtC4INC00LvRjyDQttC10YHRgtC+0LIgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2JpbGUtZ2VzdHVyZS1hcmVhXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImVkZ2Utc3dpcGUtYXJlYSBsZWZ0LWVkZ2VcIiBAdG91Y2hzdGFydD1cIiRlbWl0KCdzd2lwZS1sZWZ0JylcIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRnZS1zd2lwZS1hcmVhIHJpZ2h0LWVkZ2VcIiBAdG91Y2hzdGFydD1cIiRlbWl0KCdzd2lwZS1yaWdodCcpXCI+PC9kaXY+XG5cbiAgICAgICAgICA8IS0tINCf0L7QtNGB0LrQsNC30LrQsCDRgdCy0LDQudC/0LAgLS0+XG4gICAgICAgICAgPGRpdiB2LWlmPVwic2hvd1N3aXBlSGludFwiIGNsYXNzPVwic3dpcGUtaGludFwiIEBjbGljaz1cIiRlbWl0KCd0b2dnbGUtZHJhd2VyJylcIj5cbiAgICAgICAgICAgIDx2LWljb24gbGVmdCBzbWFsbCBjb2xvcj1cIndoaXRlXCI+bWRpLW1lbnU8L3YtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPtCf0YDQvtCy0LXQtNC40YLQtSDQstC/0YDQsNCy0L48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgPCEtLSDQmtC+0LzQv9C+0L3QtdC90YIg0L7Qv9C70LDRgtGLIChQb3B1cCkgLSDQvtCx0YnQuNC5INC00LvRjyDQstGB0LXRhSDQstC10YDRgdC40LkgLS0+XG4gICAgICA8UGF5bWVudERpYWxvZ1xuICAgICAgICAgIHYtbW9kZWw9XCJwYXltZW50RGlhbG9nXCJcbiAgICAgICAgICA6bG9hbj1cInNlbGVjdGVkTG9hblwiXG4gICAgICAgICAgOm1vYmlsZT1cImlzTW9iaWxlTW9kZVwiXG4gICAgICAgICAgQGNvbmZpcm09XCJwcm9jZXNzUGF5bWVudFwiXG4gICAgICAvPlxuICAgIDwvdi1jb250YWluZXI+XG4gIDwvdi1tYWluPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IHJlZiwgY29tcHV0ZWQsIG9uTW91bnRlZCwgd2F0Y2gsIGluamVjdCwgb25CZWZvcmVVbm1vdW50LCBvblVubW91bnRlZCwgbmV4dFRpY2sgfSBmcm9tICd2dWUnO1xuaW1wb3J0IExvYW5zVGFiIGZyb20gJy4vTG9hbnNUYWIudnVlJztcbmltcG9ydCBQYXltZW50c1RhYiBmcm9tICcuL1BheW1lbnRzVGFiLnZ1ZSc7XG5pbXBvcnQgQ2xpZW50VGFiIGZyb20gJy4vQ2xpZW50VGFiLnZ1ZSc7XG5pbXBvcnQgUGF5bWVudERpYWxvZyBmcm9tICcuL1BheW1lbnREaWFsb2cudnVlJztcbmltcG9ydCB7IGxvYW5zIGFzIGxvYW5zQXBpLCBwYXltZW50cyBhcyBwYXltZW50c0FwaSwgY2xpZW50IGFzIGNsaWVudEFwaSwgYXV0aCwgZ2V0Q3VycmVudFVzZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy9hcGknO1xuaW1wb3J0IGFwaSBmcm9tICcuLi9zZXJ2aWNlcy9hcGknO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdNYWluTGF5b3V0JyxcbiAgY29tcG9uZW50czoge1xuICAgIExvYW5zVGFiLFxuICAgIFBheW1lbnRzVGFiLFxuICAgIENsaWVudFRhYixcbiAgICBQYXltZW50RGlhbG9nXG4gIH0sXG4gIHByb3BzOiB7XG4gICAgZW1iZWRkZWQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0sXG4gICAgdXNlcjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgbW9iaWxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9LFxuICAgIHNob3dTd2lwZUhpbnQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgZW1pdHM6IFsnbG9nb3V0JywgJ3RhYi1jaGFuZ2UnLCAndG9nZ2xlLWRyYXdlcicsICdzd2lwZS1sZWZ0JywgJ3N3aXBlLXJpZ2h0J10sXG4gIHNldHVwKHByb3BzLCB7IGVtaXQgfSkge1xuICAgIGNvbnN0IGFjdGl2ZVRhYiA9IHJlZigndGFiLTEnKTtcblxuICAgIGNvbnN0IGxvYW5zID0gcmVmKFtdKTtcbiAgICBjb25zdCBmaWx0ZXJlZExvYW5zID0gcmVmKFtdKTtcbiAgICBjb25zdCBwYXltZW50cyA9IHJlZihbXSk7XG4gICAgY29uc3QgY2xpZW50ID0gcmVmKHt9KTtcbiAgICBjb25zdCBwYXltZW50RGlhbG9nID0gcmVmKGZhbHNlKTtcbiAgICBjb25zdCBzZWxlY3RlZExvYW4gPSByZWYobnVsbCk7XG4gICAgY29uc3QgbG9hZGluZyA9IHJlZihmYWxzZSk7XG5cbiAgICBjb25zdCBpc01vYmlsZU1vZGUgPSByZWYoZmFsc2UpO1xuICAgIGxldCByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgbGV0IHJlc2l6ZVRpbWVvdXQgPSBudWxsO1xuICAgIGNvbnN0IE1PQklMRV9CUkVBS1BPSU5UID0gOTYwO1xuXG4gICAgY29uc3QgY2hlY2tNb2JpbGVNb2RlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IG5ld1ZhbHVlO1xuICAgICAgaWYgKHByb3BzLm1vYmlsZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLm1vYmlsZSAhPT0gbnVsbCkge1xuICAgICAgICBuZXdWYWx1ZSA9IHByb3BzLm1vYmlsZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgIG5ld1ZhbHVlID0gd2lkdGggPCBNT0JJTEVfQlJFQUtQT0lOVDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTW9iaWxlTW9kZS52YWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgICAgaXNNb2JpbGVNb2RlLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIGF3YWl0IG5leHRUaWNrKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGN1cnJlbnRUYWJGcm9tUGFyZW50ID0gaW5qZWN0KCdjdXJyZW50VGFiJywgbnVsbCk7XG4gICAgY29uc3Qgc2VsZWN0TWVudUl0ZW0gPSBpbmplY3QoJ3NlbGVjdE1lbnVJdGVtJywgbnVsbCk7XG5cbiAgICBpZiAoY3VycmVudFRhYkZyb21QYXJlbnQ/LnZhbHVlKSB7XG4gICAgICBhY3RpdmVUYWIudmFsdWUgPSBjdXJyZW50VGFiRnJvbVBhcmVudC52YWx1ZTtcbiAgICB9XG5cblxuICAgIGNvbnN0IGN1cnJlbnRUYWJUaXRsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHN3aXRjaCAoYWN0aXZlVGFiLnZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ3RhYi0xJzogcmV0dXJuICfQnNC+0Lgg0LfQsNC50LzRiyc7XG4gICAgICAgIGNhc2UgJ3RhYi1wYXltZW50JzogcmV0dXJuICfQmNGB0YLQvtGA0LjRjyDQvtC/0LvQsNGCJztcbiAgICAgICAgY2FzZSAndGFiLTInOiByZXR1cm4gJ9Cf0YDQvtGE0LjQu9GMINC60LvQuNC10L3RgtCwJztcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICfQm9C40YfQvdGL0Lkg0LrQsNCx0LjQvdC10YInO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgaGFuZGxlRGF0ZUNoYW5nZSA9IChuZXdEYXRlKSA9PiB7XG4gICAgICBsb2FkTG9hbnMobmV3RGF0ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGxvYWRMb2FucyA9IGFzeW5jIChkYXRlID0gbnVsbCkgPT4ge1xuICAgICAgbG9hZGluZy52YWx1ZSA9IHRydWU7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGxvYW5zQXBpLmdldE15VGlja2V0cyhkYXRlKTtcblxuICAgICAgICBsZXQgdGlja2V0cyA9IFtdO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuZGF0YSAmJiByZXNwb25zZS5kYXRhLmRhdGEuVGlja2V0TGlzdCkge1xuICAgICAgICAgICAgdGlja2V0cyA9IHJlc3BvbnNlLmRhdGEuZGF0YS5UaWNrZXRMaXN0O1xuICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuZGF0YS5UaWNrZXRMaXN0KSB7XG4gICAgICAgICAgICB0aWNrZXRzID0gcmVzcG9uc2UuZGF0YS5UaWNrZXRMaXN0O1xuICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuZGF0YS5kYXRhICYmIEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZGF0YS5kYXRhKSkge1xuICAgICAgICAgICAgdGlja2V0cyA9IHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZGF0YSkpIHtcbiAgICAgICAgICAgIHRpY2tldHMgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuZGF0YS50aWNrZXRzKSB7XG4gICAgICAgICAgICB0aWNrZXRzID0gcmVzcG9uc2UuZGF0YS50aWNrZXRzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aWNrZXRzID0gW107XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRpY2tldHMpKSB7XG4gICAgICAgICAgdGlja2V0cyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9hbnMudmFsdWUgPSB0aWNrZXRzO1xuICAgICAgICBmaWx0ZXJlZExvYW5zLnZhbHVlID0gbG9hbnMudmFsdWU7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGxvYW5zOicsIGVycm9yKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgbG9hZFBheW1lbnRzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBhcGkuZ2V0KCcvcGF5bWVudHMnKTtcbiAgICAgICAgcGF5bWVudHMudmFsdWUgPSByZXNwb25zZS5kYXRhLmRhdGEgfHwgW107XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHBheW1lbnRzOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgbG9hZENsaWVudCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50QXBpLmdldE15SW5mbygpO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEuZGF0YSAmJiByZXNwb25zZS5kYXRhLmRhdGEuVXNlckluZm8pIHtcbiAgICAgICAgICBjbGllbnQudmFsdWUgPSByZXNwb25zZS5kYXRhLmRhdGEuVXNlckluZm87XG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLlVzZXJJbmZvKSB7XG4gICAgICAgICAgY2xpZW50LnZhbHVlID0gcmVzcG9uc2UuZGF0YS5Vc2VySW5mbztcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEuZGF0YSkge1xuICAgICAgICAgIGNsaWVudC52YWx1ZSA9IHJlc3BvbnNlLmRhdGEuZGF0YTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGllbnQudmFsdWUgPSByZXNwb25zZS5kYXRhIHx8IHt9O1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGNsaWVudDonLCBlcnJvcik7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB1c2VyRGF0YSA9IGF3YWl0IGdldEN1cnJlbnRVc2VyKCk7XG4gICAgICAgICAgY29uc3QgcGhvbmUgPSB1c2VyRGF0YT8ucGhvbmUgfHwgdXNlckRhdGE/LnVzZXJuYW1lIHx8ICcnO1xuXG4gICAgICAgICAgaWYgKHBob25lKSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGFwaS5wb3N0KCcvaW50ZWdyYXRpb24vMWMvdXNlci9ieS1waG9uZScsIHtcbiAgICAgICAgICAgICAgVGVsOiBwaG9uZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjbGllbnQudmFsdWUgPSByZXNwb25zZS5kYXRhLmRhdGE/LlVzZXJJbmZvIHx8IHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZmFsbGJhY2tFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhbGxiYWNrIGZhaWxlZDonLCBmYWxsYmFja0Vycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVTZWFyY2ggPSAocXVlcnkpID0+IHtcbiAgICAgIGlmICghcXVlcnkpIHtcbiAgICAgICAgZmlsdGVyZWRMb2Fucy52YWx1ZSA9IGxvYW5zLnZhbHVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZpbHRlcmVkTG9hbnMudmFsdWUgPSBsb2Fucy52YWx1ZS5maWx0ZXIobG9hbiA9PlxuICAgICAgICAgIGxvYW4ubnVtYmVyPy5pbmNsdWRlcyhxdWVyeSkgfHxcbiAgICAgICAgICBsb2FuLnByb2R1Y3Q/Lm5hbWU/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkudG9Mb3dlckNhc2UoKSlcbiAgICAgICk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZVBheW1lbnQgPSAobG9hbikgPT4ge1xuICAgICAgc2VsZWN0ZWRMb2FuLnZhbHVlID0gbG9hbjtcbiAgICAgIHBheW1lbnREaWFsb2cudmFsdWUgPSB0cnVlO1xuICAgIH07XG5cbiAgICBjb25zdCBxdWlja1BheW1lbnQgPSAoKSA9PiB7XG4gICAgICBpZiAobG9hbnMudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBhY3RpdmVMb2FuID0gbG9hbnMudmFsdWUuZmluZChsb2FuID0+IGxvYW4uc3RhdHVzID09PSAnYWN0aXZlJykgfHwgbG9hbnMudmFsdWVbMF07XG4gICAgICAgIGhhbmRsZVBheW1lbnQoYWN0aXZlTG9hbik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHByb2Nlc3NQYXltZW50ID0gYXN5bmMgKHBheW1lbnREYXRhKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBhcGkucG9zdCgnL3BheW1lbnQnLCBwYXltZW50RGF0YSk7XG4gICAgICAgIHBheW1lbnREaWFsb2cudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgYXdhaXQgbG9hZExvYW5zKCk7XG4gICAgICAgIGF3YWl0IGxvYWRQYXltZW50cygpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUGF5bWVudCBlcnJvcjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGxvZ291dCA9ICgpID0+IHtcbiAgICAgIGVtaXQoJ2xvZ291dCcpO1xuICAgIH07XG5cbiAgICB3YXRjaCgoKSA9PiBwcm9wcy5tb2JpbGUsIGFzeW5jIChuZXdWYWwpID0+IHtcbiAgICAgIGF3YWl0IGNoZWNrTW9iaWxlTW9kZSgpO1xuICAgIH0pO1xuXG4gICAgd2F0Y2goYWN0aXZlVGFiLCAobmV3VmFsKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnTWFpbkxheW91dCBhY3RpdmVUYWIgY2hhbmdlZDonLCBuZXdWYWwpO1xuICAgICAgZW1pdCgndGFiLWNoYW5nZScsIG5ld1ZhbCk7XG4gICAgICBpZiAoc2VsZWN0TWVudUl0ZW0pIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0NhbGxpbmcgc2VsZWN0TWVudUl0ZW0gd2l0aDonLCBuZXdWYWwpO1xuICAgICAgICBzZWxlY3RNZW51SXRlbShuZXdWYWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3NlbGVjdE1lbnVJdGVtIGlzIG51bGwhJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBsb2Fuc0NvdW50ID0gY29tcHV0ZWQoKCkgPT4gbG9hbnMudmFsdWUubGVuZ3RoKTtcbiAgICBjb25zdCBwYXltZW50c0NvdW50ID0gY29tcHV0ZWQoKCkgPT4gcGF5bWVudHMudmFsdWUubGVuZ3RoKTtcblxuICAgIHdhdGNoKGFjdGl2ZVRhYiwgKG5ld1RhYikgPT4ge1xuICAgICAgaWYgKG5ld1RhYiA9PT0gJ3RhYi1wYXltZW50JyAmJiBwYXltZW50cy52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgbG9hZFBheW1lbnRzKCk7XG4gICAgICB9IGVsc2UgaWYgKG5ld1RhYiA9PT0gJ3RhYi0yJyAmJiBPYmplY3Qua2V5cyhjbGllbnQudmFsdWUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBsb2FkQ2xpZW50KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBvbk1vdW50ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgY2hlY2tNb2JpbGVNb2RlKCk7XG5cbiAgICAgIC8vINCh0LjQvdGF0YDQvtC90LjQt9C40YDRg9C10Lwg0YEgQXBwINC/0YDQuCDQt9Cw0LPRgNGD0LfQutC1XG4gICAgICBjb25zdCBjdXJyZW50VGFiRnJvbVBhcmVudCA9IGluamVjdCgnY3VycmVudFRhYicsIG51bGwpO1xuICAgICAgY29uc29sZS5sb2coJ01haW5MYXlvdXQgY3VycmVudFRhYkZyb21QYXJlbnQ6JywgY3VycmVudFRhYkZyb21QYXJlbnQ/LnZhbHVlKTtcblxuICAgICAgaWYgKGN1cnJlbnRUYWJGcm9tUGFyZW50Py52YWx1ZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnU2V0dGluZyBhY3RpdmVUYWIgZnJvbSBwYXJlbnQ6JywgY3VycmVudFRhYkZyb21QYXJlbnQudmFsdWUpO1xuICAgICAgICBhY3RpdmVUYWIudmFsdWUgPSBjdXJyZW50VGFiRnJvbVBhcmVudC52YWx1ZTtcbiAgICAgIH1cblxuXG4gICAgICBhd2FpdCBsb2FkTG9hbnMoKTtcbiAgICAgIGF3YWl0IGxvYWRQYXltZW50cygpO1xuICAgICAgYXdhaXQgbG9hZENsaWVudCgpO1xuXG4gICAgICBpZiAod2luZG93LlJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICBpZiAocmVzaXplVGltZW91dCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlc2l6ZVRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXNpemVUaW1lb3V0ID0gc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBjaGVja01vYmlsZU1vZGUoKTtcbiAgICAgICAgICB9LCAxNTApO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7XG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgICAgIH1cblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29yaWVudGF0aW9uY2hhbmdlJywgaGFuZGxlT3JpZW50YXRpb25DaGFuZ2UpO1xuICAgIH0pO1xuXG4gICAgb25CZWZvcmVVbm1vdW50KCgpID0+IHtcbiAgICAgIGlmIChyZXNpemVPYnNlcnZlcikge1xuICAgICAgICByZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICB9XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcmllbnRhdGlvbmNoYW5nZScsIGhhbmRsZU9yaWVudGF0aW9uQ2hhbmdlKTtcbiAgICAgIGlmIChyZXNpemVUaW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dChyZXNpemVUaW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIG9uVW5tb3VudGVkKCgpID0+IHtcbiAgICAgIGlmIChyZWZyZXNoSW50ZXJ2YWwpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChyZWZyZXNoSW50ZXJ2YWwpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgaGFuZGxlUmVzaXplID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHJlc2l6ZVRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHJlc2l6ZVRpbWVvdXQpO1xuICAgICAgfVxuICAgICAgcmVzaXplVGltZW91dCA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBjaGVja01vYmlsZU1vZGUoKTtcbiAgICAgIH0sIDE1MCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZU9yaWVudGF0aW9uQ2hhbmdlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGNoZWNrTW9iaWxlTW9kZSgpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9O1xuXG4gICAgbGV0IHJlZnJlc2hJbnRlcnZhbDtcblxuICAgIGNvbnN0IHN0YXJ0UmVmcmVzaEludGVydmFsID0gKCkgPT4ge1xuICAgICAgaWYgKHJlZnJlc2hJbnRlcnZhbCkge1xuICAgICAgICBjbGVhckludGVydmFsKHJlZnJlc2hJbnRlcnZhbCk7XG4gICAgICB9XG4gICAgICByZWZyZXNoSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIGlmIChhY3RpdmVUYWIudmFsdWUgPT09ICd0YWItMScpIHtcbiAgICAgICAgICBsb2FkTG9hbnMoKTtcbiAgICAgICAgfSBlbHNlIGlmIChhY3RpdmVUYWIudmFsdWUgPT09ICd0YWItcGF5bWVudCcpIHtcbiAgICAgICAgICBsb2FkUGF5bWVudHMoKTtcbiAgICAgICAgfVxuICAgICAgfSwgMzAwMDApO1xuICAgIH07XG5cbiAgICBjb25zdCBzdG9wUmVmcmVzaEludGVydmFsID0gKCkgPT4ge1xuICAgICAgaWYgKHJlZnJlc2hJbnRlcnZhbCkge1xuICAgICAgICBjbGVhckludGVydmFsKHJlZnJlc2hJbnRlcnZhbCk7XG4gICAgICAgIHJlZnJlc2hJbnRlcnZhbCA9IG51bGw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHdhdGNoKGlzTW9iaWxlTW9kZSwgKG5ld1ZhbCkgPT4ge1xuICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICBzdGFydFJlZnJlc2hJbnRlcnZhbCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RvcFJlZnJlc2hJbnRlcnZhbCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgd2F0Y2goKCkgPT4gY3VycmVudFRhYkZyb21QYXJlbnQ/LnZhbHVlLCAobmV3VmFsKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygnY3VycmVudFRhYkZyb21QYXJlbnQgY2hhbmdlZDonLCBuZXdWYWwpO1xuICAgICAgaWYgKG5ld1ZhbCAmJiBuZXdWYWwgIT09IGFjdGl2ZVRhYi52YWx1ZSkge1xuICAgICAgICBhY3RpdmVUYWIudmFsdWUgPSBuZXdWYWw7XG4gICAgICB9XG4gICAgfSk7XG5cblxuICAgIHJldHVybiB7XG4gICAgICBhY3RpdmVUYWIsXG4gICAgICBsb2FucyxcbiAgICAgIGZpbHRlcmVkTG9hbnMsXG4gICAgICBwYXltZW50cyxcbiAgICAgIGNsaWVudCxcbiAgICAgIHBheW1lbnREaWFsb2csXG4gICAgICBzZWxlY3RlZExvYW4sXG4gICAgICBsb2Fuc0NvdW50LFxuICAgICAgcGF5bWVudHNDb3VudCxcbiAgICAgIGN1cnJlbnRUYWJUaXRsZSxcbiAgICAgIGxvYWRpbmcsXG4gICAgICBpc01vYmlsZU1vZGUsXG4gICAgICBoYW5kbGVTZWFyY2gsXG4gICAgICBoYW5kbGVEYXRlQ2hhbmdlLFxuICAgICAgaGFuZGxlUGF5bWVudCxcbiAgICAgIHF1aWNrUGF5bWVudCxcbiAgICAgIHByb2Nlc3NQYXltZW50LFxuICAgICAgbG9nb3V0LFxuICAgICAgbG9hZFBheW1lbnRzXG4gICAgfTtcbiAgfVxufTtcbjwvc2NyaXB0PlxuXG48c3R5bGU+XG4vKiDQk9C70L7QsdCw0LvRjNC90YvQtSDRgdGC0LjQu9C4INC00LvRjyDQvNC+0LHQuNC70YzQvdC+0LPQviDRgNC10LbQuNC80LAgLSDQldCU0JjQndCQ0K8g0KHQktCV0KLQm9CQ0K8g0KLQldCc0JAgKi9cbi5tb2JpbGUtbWFpbiB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjUgIWltcG9ydGFudDtcbn1cblxuXG4udi10b29sYmFyLS1jb2xsYXBzZSB7XG4gIG1heC13aWR0aDogODBweCAhaW1wb3J0YW50O1xufVxuXG4ubW9iaWxlLW1haW4gLnYtY29udGFpbmVyIHtcbiAgcGFkZGluZzogMCAhaW1wb3J0YW50O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1ICFpbXBvcnRhbnQ7XG59XG5cbi8qINCf0YDQuNC90YPQtNC40YLQtdC70YzQvdC+0LUg0YHQutGA0YvRgtC40LUg0LTQtdGB0LrRgtC+0L/QvdGL0YUg0Y3Qu9C10LzQtdC90YLQvtCyINCyINC80L7QsdC40LvRjNC90L7QvCDRgNC10LbQuNC80LUgKi9cbi5tb2JpbGUtbWFpbiAudi1hcHAtYmFyOm5vdCgubW9iaWxlLWhlYWRlcikge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi5tb2JpbGUtbWFpbiAudi13aW5kb3cge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi8qINCQ0LTQsNC/0YLQsNGG0LjRjyDQtNC70Y8g0LzQvtCx0LjQu9GM0L3Ri9GFINGD0YHRgtGA0L7QudGB0YLQsiAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC52LWFwcGxpY2F0aW9uIHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gIH1cblxuICBidXR0b24sXG4gIC52LWJ0bixcbiAgLnYtbGlzdC1pdGVtIHtcbiAgICBtaW4taGVpZ2h0OiA0OHB4ICFpbXBvcnRhbnQ7XG4gIH1cbn1cbjwvc3R5bGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4vKiA9PT09PT09PT09INCU0JXQodCa0KLQntCf0J3Qq9CVINCh0KLQmNCb0JggPT09PT09PT09PSAqL1xuLnRhYi1jb250ZW50IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA4cHg7XG59XG5cbi8qID09PT09PT09PT0g0JzQntCR0JjQm9Cs0J3Qq9CVINCh0KLQmNCb0JggPT09PT09PT09PSAqL1xuLyog0KTQuNC60YHQuNGA0L7QstCw0L3QvdGL0Lkg0YXQtdC00LXRgCAqL1xuLm1vYmlsZS1oZWFkZXIge1xuICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDtcbiAgdG9wOiAwICFpbXBvcnRhbnQ7XG4gIGxlZnQ6IDAgIWltcG9ydGFudDtcbiAgcmlnaHQ6IDAgIWltcG9ydGFudDtcbiAgei1pbmRleDogMTAwMCAhaW1wb3J0YW50O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IodmFyKC0tdi10aGVtZS1wcmltYXJ5KSkgIWltcG9ydGFudDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4wNSk7XG4gIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSkgIWltcG9ydGFudDtcbn1cblxuLmJ1cmdlci1pY29uIHtcbiAgbWFyZ2luLWxlZnQ6IC00cHg7XG4gIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50O1xufVxuXG4vKiDQntGB0L3QvtCy0L3QvtC5INC60L7QvdGC0LXQvdGCICovXG4ubW9iaWxlLWNvbnRlbnQge1xuICBwYWRkaW5nLWJvdHRvbTogNzJweCAhaW1wb3J0YW50O1xuICBtaW4taGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1ICFpbXBvcnRhbnQ7XG4gIHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xuICB6LWluZGV4OiAxICFpbXBvcnRhbnQ7XG59XG5cbi8qINCf0LDQvdC10LvQuCDRgtCw0LHQvtCyICovXG4udGFiLXBhbmUge1xuICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTM2cHgpICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjUgIWltcG9ydGFudDtcbiAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgcGFkZGluZzogMTZweCAhaW1wb3J0YW50O1xufVxuXG4vKiDQndC40LbQvdGP0Y8g0L3QsNCy0LjQs9Cw0YbQuNGPICovXG4ubW9iaWxlLWJvdHRvbS1uYXYge1xuICBwb3NpdGlvbjogZml4ZWQgIWltcG9ydGFudDtcbiAgYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gIGxlZnQ6IDAgIWltcG9ydGFudDtcbiAgcmlnaHQ6IDAgIWltcG9ydGFudDtcbiAgei1pbmRleDogMTAwMCAhaW1wb3J0YW50O1xuICBoZWlnaHQ6IDY0cHggIWltcG9ydGFudDtcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGUgIWltcG9ydGFudDtcbiAgYm94LXNoYWRvdzogMCAtNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KSAhaW1wb3J0YW50O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjEpICFpbXBvcnRhbnQ7XG59XG5cbi5tb2JpbGUtYm90dG9tLW5hdiA6ZGVlcCgudi1idG4pIHtcbiAgbWluLXdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XG4gIGhlaWdodDogNjRweCAhaW1wb3J0YW50O1xuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjYpICFpbXBvcnRhbnQ7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZSAhaW1wb3J0YW50O1xufVxuXG4ubW9iaWxlLWJvdHRvbS1uYXYgOmRlZXAoLnYtYnRuLS1hY3RpdmUpIHtcbiAgY29sb3I6IHJnYih2YXIoLS12LXRoZW1lLXByaW1hcnkpKSAhaW1wb3J0YW50O1xufVxuXG4ubW9iaWxlLWJvdHRvbS1uYXYgOmRlZXAoLnYtYnRuX19jb250ZW50KSB7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4gIWltcG9ydGFudDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlciAhaW1wb3J0YW50O1xuICBnYXA6IDRweCAhaW1wb3J0YW50O1xufVxuXG4ubW9iaWxlLWJvdHRvbS1uYXYgOmRlZXAoLnYtaWNvbikge1xuICBmb250LXNpemU6IDI0cHggIWltcG9ydGFudDtcbiAgbWFyZ2luLWJvdHRvbTogMnB4ICFpbXBvcnRhbnQ7XG59XG5cbi5tb2JpbGUtYm90dG9tLW5hdiA6ZGVlcCgudi1iYWRnZSkge1xuICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDtcbiAgdG9wOiA4cHggIWltcG9ydGFudDtcbiAgcmlnaHQ6IDIwcHggIWltcG9ydGFudDtcbn1cblxuLyogPT09PT09PT09PSDQodCi0JjQm9CYINCY0JcgQVBQLlZVRSA9PT09PT09PT09ICovXG4vKiDQntCx0LvQsNGB0YLQuCDQtNC70Y8g0LbQtdGB0YLQvtCyICovXG4ubW9iaWxlLWdlc3R1cmUtYXJlYSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAwO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgei1pbmRleDogOTk5OTtcbn1cblxuLmVkZ2Utc3dpcGUtYXJlYSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBib3R0b206IDA7XG4gIHdpZHRoOiAyMHB4O1xuICBwb2ludGVyLWV2ZW50czogYXV0bztcbn1cblxuLmxlZnQtZWRnZSB7XG4gIGxlZnQ6IDA7XG59XG5cbi5yaWdodC1lZGdlIHtcbiAgcmlnaHQ6IDA7XG59XG5cbi8qINCf0L7QtNGB0LrQsNC30LrQsCDRgdCy0LDQudC/0LAgKi9cbi5zd2lwZS1oaW50IHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBsZWZ0OiAxMHB4O1xuICB0b3A6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNyk7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgcGFkZGluZzogOHB4IDEycHg7XG4gIGJvcmRlci1yYWRpdXM6IDMwcHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgei1pbmRleDogOTk5ODtcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYW5pbWF0aW9uOiBwdWxzZSAycyBpbmZpbml0ZTtcbn1cblxuQGtleWZyYW1lcyBwdWxzZSB7XG4gIDAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSkgc2NhbGUoMSk7XG4gIH1cbiAgNTAlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSkgc2NhbGUoMS4wNSk7XG4gIH1cbiAgMTAwJSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHNjYWxlKDEpO1xuICB9XG59XG5cbi8qINCQ0L3QuNC80LDRhtC40LggKi9cbi5mYWRlLWVudGVyLWFjdGl2ZSxcbi5mYWRlLWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlO1xufVxuXG4uZmFkZS1lbnRlci1mcm9tLFxuLmZhZGUtbGVhdmUtdG8ge1xuICBvcGFjaXR5OiAwO1xufVxuXG4vKiA9PT09PT09PT09IExBTkRTQ0FQRSDQntCg0JjQldCd0KLQkNCm0JjQryA9PT09PT09PT09ICovXG5AbWVkaWEgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpIHtcbiAgLm1vYmlsZS1oZWFkZXIge1xuICAgIGhlaWdodDogNDhweCAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1vYmlsZS1jb250ZW50IHtcbiAgICBwYWRkaW5nLXRvcDogNTZweCAhaW1wb3J0YW50O1xuICAgIHBhZGRpbmctYm90dG9tOiA1NnB4ICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubW9iaWxlLWJvdHRvbS1uYXYge1xuICAgIGhlaWdodDogNDhweCAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1vYmlsZS1ib3R0b20tbmF2IDpkZWVwKC52LWJ0bikge1xuICAgIGhlaWdodDogNDhweCAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1vYmlsZS1ib3R0b20tbmF2IDpkZWVwKC52LWJ0bl9fY29udGVudCkge1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3cgIWltcG9ydGFudDtcbiAgICBnYXA6IDhweCAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1vYmlsZS1ib3R0b20tbmF2IDpkZWVwKC52LWljb24pIHtcbiAgICBmb250LXNpemU6IDIwcHggIWltcG9ydGFudDtcbiAgICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubW9iaWxlLWZhYiB7XG4gICAgYm90dG9tOiA2MHB4ICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuLyogPT09PT09PT09PSBTQUZFIEFSRUFTINCU0JvQryBJUEhPTkUgPT09PT09PT09PSAqL1xuQHN1cHBvcnRzIChwYWRkaW5nOiBtYXgoMHB4KSkge1xuICAubW9iaWxlLWhlYWRlciB7XG4gICAgLy9wYWRkaW5nLXRvcDogZW52KHNhZmUtYXJlYS1pbnNldC10b3AsIDApICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiBjYWxjKDY0cHggKyBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCwgMCkpICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubW9iaWxlLWNvbnRlbnQge1xuICAgIC8vcGFkZGluZy10b3A6IGNhbGMoNjRweCArIGVudihzYWZlLWFyZWEtaW5zZXQtdG9wLCAwKSkgIWltcG9ydGFudDtcbiAgICBwYWRkaW5nLWJvdHRvbTogY2FsYyg3MnB4ICsgZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20sIDApKSAhaW1wb3J0YW50O1xuICB9XG5cbiAgLm1vYmlsZS1ib3R0b20tbmF2IHtcbiAgICBwYWRkaW5nLWJvdHRvbTogZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20sIDApICFpbXBvcnRhbnQ7XG4gICAgaGVpZ2h0OiBjYWxjKDY0cHggKyBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSwgMCkpICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubW9iaWxlLWZhYiB7XG4gICAgYm90dG9tOiBjYWxjKDgwcHggKyBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSwgMCkpICFpbXBvcnRhbnQ7XG4gIH1cblxuICAubGVmdC1lZGdlIHtcbiAgICBsZWZ0OiBlbnYoc2FmZS1hcmVhLWluc2V0LWxlZnQsIDApO1xuICB9XG5cbiAgLnJpZ2h0LWVkZ2Uge1xuICAgIHJpZ2h0OiBlbnYoc2FmZS1hcmVhLWluc2V0LXJpZ2h0LCAwKTtcbiAgfVxuXG4gIEBtZWRpYSAob3JpZW50YXRpb246IGxhbmRzY2FwZSkge1xuICAgIC5tb2JpbGUtaGVhZGVyIHtcbiAgICAgIGhlaWdodDogY2FsYyg0OHB4ICsgZW52KHNhZmUtYXJlYS1pbnNldC10b3AsIDApKSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC5tb2JpbGUtY29udGVudCB7XG4gICAgICBwYWRkaW5nLXRvcDogY2FsYyg1NnB4ICsgZW52KHNhZmUtYXJlYS1pbnNldC10b3AsIDApKSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC5tb2JpbGUtYm90dG9tLW5hdiB7XG4gICAgICBoZWlnaHQ6IGNhbGMoNDhweCArIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tLCAwKSkgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAubW9iaWxlLWZhYiB7XG4gICAgICBib3R0b206IGNhbGMoNjBweCArIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tLCAwKSkgIWltcG9ydGFudDtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9*/