/*!***************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/resolve-url-loader/index.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./assets/styles/app.scss ***!
  \***************************************************************************************************************************************************************************************************************************************/
.vue3-easy-data-table__body tr {
  cursor: pointer;
}

.page-wrapper {
  height: 99vh;
  overflow-y: scroll;
}

.position-table .card {
  overflow: hidden;
  line-height: 1;
  font-weight: bold;
}
.position-table .name {
  min-height: 76px;
  font-size: 40px;
  color: #000;
  padding: 0px 0px 0px 0px;
  white-space: nowrap;
}
.position-table .card-header {
  font-size: 40px;
  background: #317082;
  color: white;
  padding: 0.5rem;
}

.pointer {
  cursor: pointer;
}

.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
  color: #101010;
  background-color: #ffd332;
}

a {
  color: #777673;
  text-shadow: #efd988 0.5px 0 0.5px;
}

.waves-effect {
  cursor: pointer;
  overflow: hidden;
  user-select: none;
}

.waves-ripple {
  background: rgba(0, 0, 0, 0.2);
  background: -webkit-radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
  background: -o-radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
  background: -moz-radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
  background: radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
  border-radius: 50%;
  height: 100px;
  margin-left: -50px;
  margin-top: -50px;
  opacity: 0;
  pointer-events: none;
  position: absolute;
  transform: scale(0);
  transition-property: transform, opacity;
  transition-duration: 0.75s;
  width: 100px;
}

.automatic-issue-row:hover {
  background: #f9fbfd;
}
.automatic-issue-row .icon-wrapper {
  color: #fff;
  display: flex;
  padding: 4px;
  border-radius: 25px;
  width: 40px;
  height: 40px;
  justify-content: center;
  align-items: center;
  background-color: #22ca80;
}
.automatic-issue-row .icon-wrapper.open {
  background-color: #ff4f70;
}
.automatic-issue-row .icon-wrapper.open_parcel_label_mismatch {
  background-color: #7a7a7a;
}
/*!***********************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** 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/js/components/ShipmentTaskComponent.vue?vue&type=style&index=0&id=3632fb2d&scoped=true&lang=css ***!
  \***********************************************************************************************************************************************************************************************************************************************************************************************/

pre[data-v-3632fb2d] {
    white-space: pre-wrap;
}
.main-package-badge[data-v-3632fb2d] {
    top: 0;
    right: 0;
}

/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/resolve-url-loader/index.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/common/BsModal.vue?vue&type=style&index=0&id=8c945e4e&scoped=true&lang=scss ***!
  \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
.loading .modal-footer[data-v-8c945e4e] {
  justify-content: flex-end;
}
/*!**************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** 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/js/components/ShipmentTask.vue?vue&type=style&index=0&id=26721160&scoped=true&lang=css ***!
  \**************************************************************************************************************************************************************************************************************************************************************************************/

.vue3-easy-data-table[data-v-26721160] {
    white-space: nowrap;
}

/*!*****************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** 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/js/components/ActualPackaging.vue?vue&type=style&index=0&id=523fcd04&scoped=true&lang=css ***!
  \*****************************************************************************************************************************************************************************************************************************************************************************************/

.vue3-easy-data-table[data-v-523fcd04] {
    white-space: nowrap;
}
.pointer[data-v-523fcd04]{
    cursor:pointer
}
.bin-container[data-v-523fcd04]{
small[data-v-523fcd04]{
        font-size: 69%;
        font-weight: 400;
        line-height: 4px;
}
}

/*!********************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** 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/js/components/ShipmentTaskDetail.vue?vue&type=style&index=0&id=6691815e&scoped=true&lang=css ***!
  \********************************************************************************************************************************************************************************************************************************************************************************************/

.vue3-easy-data-table[data-v-6691815e] {
    white-space: nowrap;
}

/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/resolve-url-loader/index.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/packer/ExitGateSelector/MobilConveyor.vue?vue&type=style&index=0&id=18c34c82&scoped=true&lang=scss ***!
  \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
.text[data-v-18c34c82] {
  font: bold 30px sans-serif;
}
/*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/resolve-url-loader/index.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/packer/ExitGateSelector/Supplier.vue?vue&type=style&index=0&id=3ab094ab&scoped=true&lang=scss ***!
  \************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
svg[data-v-3ab094ab], image[data-v-3ab094ab] {
  z-index: 100;
  position: absolute;
}
.text[data-v-3ab094ab] {
  font-weight: bold;
  font-family: monospace;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  font-size: 30px;
}
/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/resolve-url-loader/index.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/packer/ExitGateSelector/Truck.vue?vue&type=style&index=0&id=3318f690&scoped=true&lang=scss ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
.text[data-v-3318f690] {
  font: bold 30px sans-serif;
}
text[data-v-3318f690] {
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
text[data-v-3318f690]::selection {
  background: none;
}
image[data-v-3318f690] {
  z-index: -1;
  position: relative;
}
/*!***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/resolve-url-loader/index.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/packer/ExitGateSelector/Dropper.vue?vue&type=style&index=0&id=957f1f82&scoped=true&lang=scss ***!
  \***********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
.circle-drop[data-v-957f1f82] {
  stroke: #404040;
  fill: none;
  stroke-opacity: 1;
  stroke-width: 70;
  stroke-dasharray: 100 4.71;
}
.circle-drop-selected[data-v-957f1f82] {
  stroke: #ffd814;
  fill: none;
  stroke-opacity: 0.9;
  stroke-width: 70;
  stroke-dasharray: 100.71 523.59;
}
.dropper-text[data-v-957f1f82] {
  font-weight: bold;
  font-size: 30px;
}
text[data-v-957f1f82] {
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** 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/js/components/packer/ExitGateSelector/WeightToleranceComponent.vue?vue&type=style&index=0&id=5362ea32&scoped=true&lang=css ***!
  \**************************************************************************************************************************************************************************************************************************************************************************************************************************/

pre[data-v-5362ea32] {
    white-space: pre-wrap;
}
.main-package-badge[data-v-5362ea32] {
    top: 0;
    right: 0;
}

/*!********************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** 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/js/components/packer/ExitGateSelector/PacketGateSettings.vue?vue&type=style&index=0&id=777aafd5&scoped=true&lang=css ***!
  \********************************************************************************************************************************************************************************************************************************************************************************************************************/

.box[data-v-777aafd5] {
  margin: auto;
  position: center;
  display: block;
}
#containerBox[data-v-777aafd5] {
  width: 1600px;
  height: 650px;
  touch-action: none;
}
svg[data-v-777aafd5] {
  touch-action: none;
}
.handler[data-v-777aafd5]:hover {
  fill: green;
}
.text[data-v-777aafd5] {
  font: bold 40px sans-serif;
  fill: #ffffff;
}
.text-dark[data-v-777aafd5] {
  font: bold 30px sans-serif;
  fill: #4e4e4e;
}
text[data-v-777aafd5] {
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/resolve-url-loader/index.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/packer/PackerPositions.vue?vue&type=style&index=0&id=921746c8&scoped=true&lang=scss ***!
  \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
.list-group-item[data-v-921746c8] {
  padding: 0.5rem 0.5rem;
  cursor: grab;
}
.list-group[data-v-921746c8] {
  min-height: 38px;
  background: #f1f1f1;
}
.position-columns[data-v-921746c8] {
  height: fit-content;
}
.workers-list[data-v-921746c8] {
  max-height: 600px;
  overflow-y: scroll;
}
.workers-list-mobile[data-v-921746c8] {
  max-height: 300px;
}
.remove-worker[data-v-921746c8] {
  cursor: pointer;
  top: 0.5rem;
  right: 0.5rem;
}
/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/resolve-url-loader/index.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/packer/PackerPositions.vue?vue&type=style&index=1&id=921746c8&lang=scss ***!
  \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
.scroll::-webkit-scrollbar {
  -webkit-appearance: none;
}
.scroll::-webkit-scrollbar:vertical {
  width: 20px;
}
.scroll::-webkit-scrollbar:horizontal {
  height: 12px;
}
.scroll::-webkit-scrollbar-thumb {
  background-color: rgba(0, 0, 0, 0.5);
  border-radius: 10px;
  border: 2px solid #ffffff;
}
.scroll::-webkit-scrollbar-track {
  border-radius: 10px;
  background-color: #ffffff;
}
/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/resolve-url-loader/index.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/packer/PackerPositionsWorkers.vue?vue&type=style&index=0&id=0cc4de29&scoped=true&lang=scss ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
.size[data-v-0cc4de29] {
  height: 30rem;
  overflow-y: scroll;
}
.sticky-top[data-v-0cc4de29] {
  z-index: 1;
}
.sticky-top th[data-v-0cc4de29] {
  border-top: none;
}
/*!**********************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** 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/js/components/ErrorReportComponent.vue?vue&type=style&index=0&id=06d1bfbc&lang=css ***!
  \**********************************************************************************************************************************************************************************************************************************************************************************/

.error_solution {
    width: 100%;
    height: 100px;
}
.description {
    padding: 10px;
    background: #fbfbfb;
    margin-bottom: 15px;
}

/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/resolve-url-loader/index.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/ErrorReportList.vue?vue&type=style&index=0&id=278e4dee&scoped=true&lang=scss ***!
  \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
.activity .border-left-line[data-v-278e4dee] {
  position: relative;
  margin-left: 35px;
}
.activity .btn-circle[data-v-278e4dee] {
  font-size: 11px;
  font-weight: bold;
  width: 56px;
  height: 55px;
  margin-left: -28px;
}
a .fa-edit[data-v-278e4dee] {
  color: #000;
}
.automatic-issue-list[data-v-278e4dee] {
  display: flex;
  flex-direction: column;
  justify-content: center;
}
/*!****************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** 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/js/components/ErrorReportButtonComponent.vue?vue&type=style&index=0&id=6620ac50&scoped=true&lang=css ***!
  \****************************************************************************************************************************************************************************************************************************************************************************************************/

#send-error-wrapper[data-v-6620ac50] {
    position: fixed;
    height: 40px;
    bottom: 30px;
    width: 40px;
    right: 40px;
}
.form-control-time-divider[data-v-6620ac50] {
    text-align: center;
    line-height: 31px;
    width: 26px;
    font-size: 14px;
    font-weight: bold;
}

/*!****************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** 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/js/components/ErrorReportAddNewTopButton.vue?vue&type=style&index=0&id=26aa064d&scoped=true&lang=css ***!
  \****************************************************************************************************************************************************************************************************************************************************************************************************/

#send-error-wrapper[data-v-26aa064d] {
     position: fixed;
    height: 71px;
    bottom: 0px;
    width: calc(100% - 52px);
    text-align: right;
}

/*!************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** 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/js/components/tablet/error_report/TabletErrorReportComponent.vue?vue&type=style&index=0&id=55ba6083&lang=css ***!
  \************************************************************************************************************************************************************************************************************************************************************************************************************/

.error_solution {
    width: 100%;
    height: 100px;
}
.description {
    padding: 10px;
    background: #fbfbfb;
    margin-bottom: 15px;
}

/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/resolve-url-loader/index.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/tablet/error_report/TabletErrorReportList.vue?vue&type=style&index=0&id=0ef52008&scoped=true&lang=scss ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
.activity .border-left-line[data-v-0ef52008] {
  position: relative;
  margin-left: 35px;
}
.activity .btn-circle[data-v-0ef52008] {
  font-size: 11px;
  font-weight: bold;
  width: 56px;
  height: 55px;
  margin-left: -28px;
}
a .fa-edit[data-v-0ef52008] {
  color: #000;
}
.automatic-issue-list[data-v-0ef52008] {
  display: flex;
  flex-direction: column;
  justify-content: center;
}
.tablet-body[data-v-0ef52008] {
  overflow-y: scroll;
}
.fix-search[data-v-0ef52008] {
  position: fixed;
  top: 0;
  z-index: 10;
  width: 100%;
  left: 0;
  padding: 14px 29px 10px 15px;
  background: #fff;
}
.automatic-issue-row[data-v-0ef52008] {
  background: #ffffff;
  padding-top: 10px;
  border-radius: 4px;
  margin-bottom: 8px;
  box-shadow: 0 3px 9px 0 rgba(169, 184, 200, 0.15);
  -webkit-box-shadow: 0 3px 9px 0 rgba(169, 184, 200, 0.15);
  -moz-box-shadow: 0 3px 9px 0 rgba(169, 184, 200, 0.15);
}
/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/resolve-url-loader/index.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/tablet/error_report/TabletErrorReportList.vue?vue&type=style&index=1&id=0ef52008&lang=scss ***!
  \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
.tablet-body {
  overflow-y: scroll;
  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/js/components/tablet/error_report/TabletErrorReportAddNewTopButton.vue?vue&type=style&index=0&id=7399b9ee&scoped=true&lang=css ***!
  \******************************************************************************************************************************************************************************************************************************************************************************************************************************/

#send-error-wrapper[data-v-7399b9ee] {
     position: fixed;
    height: 71px;
    bottom: 0px;
    width: calc(100% - 52px);
    text-align: right;
}

/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-13.use[1]!./node_modules/vue-loader/dist/stylePostLoader.js!./node_modules/resolve-url-loader/index.js??clonedRuleSet-13.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-13.use[3]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./assets/js/components/common/DrawerRight.vue?vue&type=style&index=0&id=ee5154b0&scoped=true&lang=scss ***!
  \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
#overlay[data-v-ee5154b0] {
  font-family: "Poppins", sans-serif;
  margin: 0;
  padding: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: 0.3s linear;
}
#overlay.active[data-v-ee5154b0] {
  width: 100%;
  height: 100vh;
  background-color: rgba(0, 0, 0, 0.7);
  width: 100%;
  height: 100vh;
  background-color: rgba(0, 0, 0, 0.41);
  position: fixed;
  top: 0;
  left: 0px;
  z-index: 99;
}
#drawer-wrapper[data-v-ee5154b0] {
  height: 100vh;
  width: 600px;
  background: #ffffff;
  align-items: center;
  justify-content: center;
  position: fixed;
  right: 0;
  transform: translateX(100%);
  transition: transform 0.3s linear;
  margin-left: 200px;
  border: 1px solid #edf2f9;
  top: 0;
  z-index: 100;
}
#drawer-wrapper .drawer-head[data-v-ee5154b0] {
  display: flex;
  justify-content: space-between;
  flex-direction: row;
  border-bottom: 1px solid #edf2f9;
  padding: 6px 15px 0px;
}
#drawer-wrapper .drawer-head .close[data-v-ee5154b0] {
  font-size: 22px;
}
#drawer-wrapper #drawer[data-v-ee5154b0] {
  padding: 4px 15px;
  height: calc(100vh - 140px);
  overflow: scroll;
}
#drawer-wrapper #drawer-buttons[data-v-ee5154b0] {
  padding: 4px 15px;
}
#drawer-wrapper.active[data-v-ee5154b0] {
  transform: translateX(0);
}
@media screen and (max-width: 600px) {
#burger[data-v-ee5154b0] {
    top: 90%;
    right: 12%;
}
#drawer-wrapper[data-v-ee5154b0] {
    height: 100vh;
    width: 100%;
}
}

/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmQ5ZjdmY2Q3LmNzcyIsIm1hcHBpbmdzIjoiOzs7QUFDSTtFQUNJO0FBQVI7O0FBSUE7RUFDSTtFQUNBO0FBREo7O0FBS0k7RUFDSTtFQUNBO0VBQ0E7QUFGUjtBQUtJO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUhSO0FBTUk7RUFDSTtFQUNBO0VBQ0E7RUFDQTtBQUpSOztBQU9BO0VBQ0k7QUFKSjs7QUFPQTtFQUNJO0VBQ0E7QUFKSjs7QUFPQTtFQUNJO0VBQ0E7QUFKSjs7QUFPQTtFQUNDO0VBQ0E7RUFDQTtBQUpEOztBQU9BO0VBQ0M7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFKRDs7QUFTRTtFQUNFO0FBTko7QUFTRTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQVBKO0FBU0k7RUFDRTtBQVBOO0FBVUk7RUFDRTtBQVJOLEM7Ozs7O0FDa1lBO0lBQ0kscUJBQXFCO0FBQ3pCO0FBRUE7SUFDSSxNQUFNO0lBQ04sUUFBUTtBQUNaOzs7OztBQzdkRTtFQUNFO0FBREosQzs7Ozs7QUNzSUE7SUFDSSxtQkFBbUI7QUFDdkI7Ozs7OztBQ2lMQTtJQUNJLG1CQUFtQjtBQUN2QjtBQUNBO0lBQ0k7QUFDSjtBQUNBO0FBQ0k7UUFDSSxjQUFjO1FBQ2QsZ0JBQWdCO1FBQ2hCLGdCQUFnQjtBQUNwQjtBQUNKOzs7Ozs7QUNuTEE7SUFDSSxtQkFBbUI7QUFDdkI7Ozs7O0FDckpBO0VBQ0U7QUFBRixDOzs7O0FDREE7RUFDRTtFQUNBO0FBQUY7QUFHQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQUYsQzs7OztBQ1pBO0VBQ0U7QUFBRjtBQU1BO0VBQ0k7RUFDRztFQUNDO0VBQ0k7QUFIWjtBQUtBO0VBQ0k7QUFGSjtBQUtBO0VBQ0E7RUFDQTtBQUZBLEM7Ozs7QUNqQkE7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0FBQUY7QUFHQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFBRjtBQUdBO0VBQ0U7RUFDQTtBQUFGO0FBR0E7RUFDRTtFQUNBO0VBQ0E7RUFDQTtBQUFGLEM7Ozs7O0FDbUZBO0lBQ0kscUJBQXFCO0FBQ3pCO0FBRUE7SUFDSSxNQUFNO0lBQ04sUUFBUTtBQUNaOzs7Ozs7QUN3Z0JBO0VBQ0UsWUFBWTtFQUNaLGdCQUFnQjtFQUNoQixjQUFjO0FBQ2hCO0FBQ0E7RUFDRSxhQUFhO0VBQ2IsYUFBYTtFQUNiLGtCQUFrQjtBQUNwQjtBQUNBO0VBQ0Usa0JBQWtCO0FBQ3BCO0FBQ0E7RUFDRSxXQUFXO0FBQ2I7QUFDQTtFQUNFLDBCQUEwQjtFQUMxQixhQUFhO0FBQ2Y7QUFDQTtFQUNFLDBCQUEwQjtFQUMxQixhQUFhO0FBQ2Y7QUFFQTtFQUNFLHlCQUF5QjtFQUN6QixzQkFBc0I7RUFDdEIscUJBQXFCO0VBQ3JCLGlCQUFpQjtBQUNuQjs7Ozs7QUN6cEJBO0VBQ0k7RUFDQTtBQUFKO0FBR0E7RUFDSTtFQUNBO0FBQUo7QUFHQTtFQUNJO0FBQUo7QUFHQTtFQUNJO0VBQ0E7QUFBSjtBQUdBO0VBQ0k7QUFBSjtBQUdBO0VBQ0k7RUFDQTtFQUNBO0FBQUosQzs7OztBQXpCSTtFQUNJO0FBRFI7QUFJSTtFQUNJO0FBRlI7QUFLSTtFQUNJO0FBSFI7QUFNSTtFQUNJO0VBQ0E7RUFDQTtBQUpSO0FBT0k7RUFDSTtFQUNBO0FBTFIsQzs7OztBQ2hCQTtFQUNJO0VBQ0E7QUFBSjtBQUdBO0VBQ0k7QUFBSjtBQUNJO0VBQ0k7QUFDUixDOzs7OztBQ3FaQTtJQUNJLFdBQVc7SUFDWCxhQUFhO0FBQ2pCO0FBRUE7SUFDSSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLG1CQUFtQjtBQUN2Qjs7Ozs7QUN2YUE7RUFDSTtFQUNBO0FBQUo7QUFLSTtFQUNJO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFGUjtBQU9JO0VBQ0k7QUFKUjtBQVFBO0VBQ0k7RUFDQTtFQUNBO0FBTEosQzs7Ozs7QUNtWUE7SUFDSSxlQUFlO0lBQ2YsWUFBWTtJQUNaLFlBQVk7SUFDWixXQUFXO0lBQ1gsV0FBVztBQUNmO0FBRUE7SUFDSSxrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLFdBQVc7SUFDWCxlQUFlO0lBQ2YsaUJBQWlCO0FBQ3JCOzs7Ozs7QUNqWUE7S0FDSyxlQUFlO0lBQ2hCLFlBQVk7SUFDWixXQUFXO0lBQ1gsd0JBQXdCO0lBQ3hCLGlCQUFpQjtBQUNyQjs7Ozs7O0FDb1hBO0lBQ0ksV0FBVztJQUNYLGFBQWE7QUFDakI7QUFFQTtJQUNJLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsbUJBQW1CO0FBQ3ZCOzs7OztBQ3ZhQTtFQUNJO0VBQ0E7QUFBSjtBQUtJO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUZSO0FBT0k7RUFDSTtBQUpSO0FBUUE7RUFFSTtFQUNBO0VBQ0E7QUFOSjtBQVNBO0VBQ0U7QUFORjtBQVNBO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFOSjtBQVFBO0VBQ0k7RUFDQTtFQUNBO0VBQ0E7RUFFQTtFQUNBO0VBQ0E7QUFOSixDOzs7O0FBNUNBO0VBQ0U7RUFDQTtBQUFGLEM7Ozs7O0FDaUNBO0tBQ0ssZUFBZTtJQUNoQixZQUFZO0lBQ1osV0FBVztJQUNYLHdCQUF3QjtJQUN4QixpQkFBaUI7QUFDckI7Ozs7O0FDeENBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFERjtBQUlBO0VBQ0U7RUFDQTtFQUNBO0VBQ0k7RUFDRjtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7QUFESjtBQU1BO0VBQ0U7RUFDQTtFQUNBO0VBRUE7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNFO0VBQ0E7QUFMSjtBQU1JO0VBRUk7RUFDQTtFQUNBO0VBQ0E7RUFDQTtBQUxSO0FBTVE7RUFDSTtBQUpaO0FBT0k7RUFDSTtFQUNBO0VBQ0E7QUFMUjtBQVFJO0VBQ0k7QUFOUjtBQVVBO0VBQ0U7QUFQRjtBQVVBO0FBQ0U7SUFDRTtJQUNBO0FBUEY7QUFXRjtJQUNFO0lBQ0E7QUFUQTtBQUNGLEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvc3R5bGVzL2FwcC5zY3NzIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL1NoaXBtZW50VGFza0NvbXBvbmVudC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvY29tbW9uL0JzTW9kYWwudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL1NoaXBtZW50VGFzay52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvQWN0dWFsUGFja2FnaW5nLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9TaGlwbWVudFRhc2tEZXRhaWwudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL3BhY2tlci9FeGl0R2F0ZVNlbGVjdG9yL01vYmlsQ29udmV5b3IudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL3BhY2tlci9FeGl0R2F0ZVNlbGVjdG9yL1N1cHBsaWVyLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9wYWNrZXIvRXhpdEdhdGVTZWxlY3Rvci9UcnVjay52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvcGFja2VyL0V4aXRHYXRlU2VsZWN0b3IvRHJvcHBlci52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvcGFja2VyL0V4aXRHYXRlU2VsZWN0b3IvV2VpZ2h0VG9sZXJhbmNlQ29tcG9uZW50LnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9wYWNrZXIvRXhpdEdhdGVTZWxlY3Rvci9QYWNrZXRHYXRlU2V0dGluZ3MudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL3BhY2tlci9QYWNrZXJQb3NpdGlvbnMudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL3BhY2tlci9QYWNrZXJQb3NpdGlvbnNXb3JrZXJzLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9FcnJvclJlcG9ydENvbXBvbmVudC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvRXJyb3JSZXBvcnRMaXN0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9FcnJvclJlcG9ydEJ1dHRvbkNvbXBvbmVudC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvRXJyb3JSZXBvcnRBZGROZXdUb3BCdXR0b24udnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL3RhYmxldC9lcnJvcl9yZXBvcnQvVGFibGV0RXJyb3JSZXBvcnRDb21wb25lbnQudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL3RhYmxldC9lcnJvcl9yZXBvcnQvVGFibGV0RXJyb3JSZXBvcnRMaXN0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy90YWJsZXQvZXJyb3JfcmVwb3J0L1RhYmxldEVycm9yUmVwb3J0QWRkTmV3VG9wQnV0dG9uLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9jb21tb24vRHJhd2VyUmlnaHQudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIi52dWUzLWVhc3ktZGF0YS10YWJsZV9fYm9keSB7XG4gICAgdHIge1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxufVxuXG4ucGFnZS13cmFwcGVyIHtcbiAgICBoZWlnaHQ6IDk5dmg7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xufVxuXG4ucG9zaXRpb24tdGFibGUge1xuICAgIC5jYXJkIHtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIH1cblxuICAgIC5uYW1lIHtcbiAgICAgICAgbWluLWhlaWdodDogNzZweDtcbiAgICAgICAgZm9udC1zaXplOiA0MHB4O1xuICAgICAgICBjb2xvcjogIzAwMDtcbiAgICAgICAgcGFkZGluZzogMHB4IDBweCAwcHggMHB4O1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIH1cblxuICAgIC5jYXJkLWhlYWRlciB7XG4gICAgICAgIGZvbnQtc2l6ZTogNDBweDtcbiAgICAgICAgYmFja2dyb3VuZDogIzMxNzA4MjtcbiAgICAgICAgY29sb3I6IHdoaXRlO1xuICAgICAgICBwYWRkaW5nOiAwLjVyZW07XG4gICAgfVxufVxuLnBvaW50ZXJ7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ubmF2LXBpbGxzIC5uYXYtbGluay5hY3RpdmUsIC5uYXYtcGlsbHMgLnNob3c+Lm5hdi1saW5rIHtcbiAgICBjb2xvcjogIzEwMTAxMDtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZkMzMyO1xufVxuXG5he1xuICAgIGNvbG9yOiAjNzc3NjczOyAgICBcbiAgICB0ZXh0LXNoYWRvdzogI2VmZDk4OCAwLjVweCAwIDAuNXB4O1xufVxuXG4ud2F2ZXMtZWZmZWN0IHtcblx0Y3Vyc29yOiBwb2ludGVyOyBcblx0b3ZlcmZsb3c6IGhpZGRlbjsgXG5cdHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4ud2F2ZXMtcmlwcGxlIHtcblx0YmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAuMik7XG5cdGJhY2tncm91bmQ6IC13ZWJraXQtcmFkaWFsLWdyYWRpZW50KHJnYmEoMCwgMCwgMCwgLjIpIDAsIHJnYmEoMCwgMCwgMCwgLjMpIDQwJSwgcmdiYSgwLCAwLCAwLCAuNCkgNTAlLCByZ2JhKDAsIDAsIDAsIC41KSA2MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkgNzAlKTtcblx0YmFja2dyb3VuZDogLW8tcmFkaWFsLWdyYWRpZW50KHJnYmEoMCwgMCwgMCwgLjIpIDAsIHJnYmEoMCwgMCwgMCwgLjMpIDQwJSwgcmdiYSgwLCAwLCAwLCAuNCkgNTAlLCByZ2JhKDAsIDAsIDAsIC41KSA2MCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMCkgNzAlKTtcblx0YmFja2dyb3VuZDogLW1vei1yYWRpYWwtZ3JhZGllbnQocmdiYSgwLCAwLCAwLCAuMikgMCwgcmdiYSgwLCAwLCAwLCAuMykgNDAlLCByZ2JhKDAsIDAsIDAsIC40KSA1MCUsIHJnYmEoMCwgMCwgMCwgLjUpIDYwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSA3MCUpO1xuXHRiYWNrZ3JvdW5kOiByYWRpYWwtZ3JhZGllbnQocmdiYSgwLCAwLCAwLCAuMikgMCwgcmdiYSgwLCAwLCAwLCAuMykgNDAlLCByZ2JhKDAsIDAsIDAsIC40KSA1MCUsIHJnYmEoMCwgMCwgMCwgLjUpIDYwJSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSA3MCUpO1xuXHRib3JkZXItcmFkaXVzOiA1MCU7XG5cdGhlaWdodDogMTAwcHg7XG5cdG1hcmdpbi1sZWZ0OiAtNTBweDtcblx0bWFyZ2luLXRvcDogLTUwcHg7XG5cdG9wYWNpdHk6IDA7XG5cdHBvaW50ZXItZXZlbnRzOiBub25lO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHRyYW5zZm9ybTogc2NhbGUoMCk7XG5cdHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybSwgb3BhY2l0eTtcblx0dHJhbnNpdGlvbi1kdXJhdGlvbjogLjc1cztcblx0d2lkdGg6IDEwMHB4O1xufVxuXG4uYXV0b21hdGljLWlzc3VlLXJvdyB7XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogI2Y5ZmJmZDtcbiAgfVxuXG4gIC5pY29uLXdyYXBwZXIge1xuICAgIGNvbG9yOiAjZmZmO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgcGFkZGluZzogNHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDI1cHg7XG4gICAgd2lkdGg6IDQwcHg7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzIyY2E4MDtcblxuICAgICYub3BlbiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmY0ZjcwO1xuICAgIH1cblxuICAgICYub3Blbl9wYXJjZWxfbGFiZWxfbWlzbWF0Y2gge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzdhN2E3YTtcbiAgICB9XG4gIH1cbn0iLCI8dGVtcGxhdGU+XG4gICAgPGRpdiB2LWlmPVwic2hpcG1lbnRUYXNrRGV0YWlsc1wiPiAgICBcbiAgICAgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAgdi1zaG93PVwic2hvd1NlbmRpbmdFcnJvcigpICAmJiAhbG9hZGluZyAmJiBuYXZDc29tcy5sZW5ndGggPT0gMFwiICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC04XCI+IFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nXCIgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cImFsZXJ0LWhlYWRpbmdcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2subW9kYWwuZXJyb3JfbWVzc2FnZXMnKSB9fTwvaDU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJGZpbHRlcnMudHJhbnMoc2hpcG1lbnRUYXNrRGV0YWlscy5zaGlwbWVudFN0YXR1cy50eXBlKSB9fSAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNCB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdi1pZj1cInNoaXBtZW50VGFza0RldGFpbHMuc2hpcHBpbmdBZ2VudENvZGUgPT0gJ0RQRENaJyAgJiYgc2hpcG1lbnRUYXNrRGV0YWlscy5zaGlwbWVudFN0YXR1cy50eXBlID09ICd3cm9uZ19zaGlwbWVudF9yZWZlcmVuY2UnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIG1sLTIgbWItMlwiIEBjbGljaz1cImRwZEN6RGVsZXRlQW5kUmVzZW5kKClcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbHRlcnMudHJhbnMoJ3dyb25nX3NoaXBtZW50X3JlZmVyZW5jZS5idG4nKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICA8YSA6aHJlZj1cImVycm9yRW1haWxIcmVmXCIgdGFyZ2V0PVwiX3RvcFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbSBtbC0yXCI+XG4gICAgICAgICAgICAgICAge3sgJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2subW9kYWwuc2VuZF9lcnJvcl9lbWFpbF90b190YXRhJykgfX1cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCI+XG4gICAgICAgICAgICAgICAgPGg1Pnt7ICRmaWx0ZXJzLnRyYW5zKCdzaGlwbWVudF90YXNrLm1vZGFsLnNoaXBtZW50LnRpdGxlJykgfX08L2g1PlxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXNtXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJyb3dcIj57eyAkZmlsdGVycy50cmFucygnc2hpcG1lbnRfdGFzay5tb2RhbC5zaGlwbWVudC5kZWxpdmVyeVRhc2tObycpIH19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgc2hpcG1lbnRUYXNrRGV0YWlscy5kZWxpdmVyeVRhc2tObyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cInJvd1wiPnt7ICRmaWx0ZXJzLnRyYW5zKCdzaGlwbWVudF90YXNrLm1vZGFsLnNoaXBtZW50Lm9yZGVyTm8nKSB9fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHNoaXBtZW50VGFza0RldGFpbHMub3JkZXJObyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cInJvd1wiPnt7ICRmaWx0ZXJzLnRyYW5zKCdzaGlwbWVudF90YXNrLm1vZGFsLnNoaXBtZW50LmRhdHVtJykgfX08L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBzaGlwbWVudFRhc2tEZXRhaWxzLmRhdHVtLmRhdGUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb21lbnQoc2hpcG1lbnRUYXNrRGV0YWlscy5kYXR1bS5kYXRlKS5mb3JtYXQoJGZpbHRlcnMudHJhbnMoJ2RhdGV0aW1lX2Zvcm1hdCcpKSA6ICcnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwicm93XCI+e3sgJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2subW9kYWwuc2hpcG1lbnQuc2VuZGVyQ291bnRyeVJlZ2lvbkNvZGUnKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHNoaXBtZW50VGFza0RldGFpbHMuc2VuZGVyQ291bnRyeVJlZ2lvbkNvZGUgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJyb3dcIj57eyAkZmlsdGVycy50cmFucygnc2hpcG1lbnRfdGFzay5tb2RhbC5zaGlwbWVudC5zaGlwcGluZ0FnZW50Q29kZScpIH19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgc2hpcG1lbnRUYXNrRGV0YWlscy5zaGlwcGluZ0FnZW50Q29kZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cInJvd1wiPnt7ICRmaWx0ZXJzLnRyYW5zKCdzaGlwbWVudF90YXNrLm1vZGFsLnNoaXBtZW50LnN0YXR1c0F0dGVtcHQnKSB9fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHNoaXBtZW50VGFza0RldGFpbHMuc2hpcG1lbnRTdGF0dXMuYXR0ZW1wdCAhPT0gdW5kZWZpbmVkID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpcG1lbnRUYXNrRGV0YWlscy5zaGlwbWVudFN0YXR1cy5hdHRlbXB0IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJyb3dcIj57eyAkZmlsdGVycy50cmFucygnc2hpcG1lbnRfdGFzay5tb2RhbC5zaGlwbWVudC5zdGF0dXNBdHRlbXB0Q3JlYXRlZEF0JykgfX08L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBzaGlwbWVudFRhc2tEZXRhaWxzLnNoaXBtZW50U3RhdHVzLmNyZWF0ZWRBdCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudChzaGlwbWVudFRhc2tEZXRhaWxzLnNoaXBtZW50U3RhdHVzLmNyZWF0ZWRBdC5kYXRlKS5mb3JtYXQoJGZpbHRlcnMudHJhbnMoJ2RhdGV0aW1lX2Zvcm1hdCcpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICA8aDU+e3sgJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2subW9kYWwuYWRkcmVzc2VlJykgfX08L2g1PlxuXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsb2F0LXJpZ2h0IGQtZmxleFwiPiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiB2LWlmPVwic2hpcG1lbnRUYXNrRGV0YWlscy5zaGlwbWVudFN0YXR1cy5hdHRlbXB0ID49IDEgJiYgIWVkaXRBZGRyZXNzZWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gbWwtMlwiIEBjbGljaz1cImVkaXRBZGRyZXNzZWUgPSB0cnVlXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWx0ZXJzLnRyYW5zKCdzaGlwbWVudF90YXNrLm1vZGFsLmVkaXQnKSB9fTwvYnV0dG9uPiAtLT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdi1pZj1cIiFlZGl0QWRkcmVzc2VlICYmIChuYXZDc29tcy5sZW5ndGggPT0gMCkgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIG1sLTJcIiBAY2xpY2s9XCJlZGl0QWRkcmVzc2VlID0gdHJ1ZVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsdGVycy50cmFucygnc2hpcG1lbnRfdGFzay5tb2RhbC5lZGl0JykgfX08L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIG1sLTJcIiB2LWlmPVwiZWRpdEFkZHJlc3NlZVwiIEBjbGljaz1cInNhdmVBZGRyZXNzZWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJzYXZlTG9hZGluZ1wiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsdGVycy50cmFucygnc2hpcG1lbnRfdGFzay5tb2RhbC5zYXZlJykgfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXNtXCIgdi1pZj1cInNoaXBtZW50VGFza0RldGFpbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cInJvd1wiPnt7ICRmaWx0ZXJzLnRyYW5zKCdzaGlwbWVudF90YXNrLm1vZGFsLnNoaXBtZW50LmFkZHJlc3NlZUNvdW50cnlSZWdpb25Db2RlJykgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc2hpcG1lbnRUYXNrRGV0YWlscy5hZGRyZXNzZWVDb3VudHJ5UmVnaW9uQ29kZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cInJvd1wiPnt7ICRmaWx0ZXJzLnRyYW5zKCdzaGlwbWVudF90YXNrLm1vZGFsLnNoaXBtZW50LmFkZHJlc3NlZU5hbWUnKSB9fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImVkaXRBZGRyZXNzZWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJzaGlwbWVudFRhc2tEZXRhaWxzLmFkZHJlc3NlZU5hbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1lbHNlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc2hpcG1lbnRUYXNrRGV0YWlscy5hZGRyZXNzZWVOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwicm93XCI+e3sgJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2subW9kYWwuc2hpcG1lbnQuYWRkcmVzc2VlUGhvbmVObycpIH19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiZWRpdEFkZHJlc3NlZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cInNoaXBtZW50VGFza0RldGFpbHMuYWRkcmVzc2VlUGhvbmVOb1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzaGlwbWVudFRhc2tEZXRhaWxzLmFkZHJlc3NlZVBob25lTm8gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJyb3dcIj57eyAkZmlsdGVycy50cmFucygnc2hpcG1lbnRfdGFzay5tb2RhbC5zaGlwbWVudC50YXJnZXRFTWFpbCcpIH19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiZWRpdEFkZHJlc3NlZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cInNoaXBtZW50VGFza0RldGFpbHMudGFyZ2V0RU1haWxcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1lbHNlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc2hpcG1lbnRUYXNrRGV0YWlscy50YXJnZXRFTWFpbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cInJvd1wiPnt7ICRmaWx0ZXJzLnRyYW5zKCdzaGlwbWVudF90YXNrLm1vZGFsLnNoaXBtZW50LmFkZHJlc3NlZUNpdHknKSB9fTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1pZj1cImVkaXRBZGRyZXNzZWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJzaGlwbWVudFRhc2tEZXRhaWxzLmFkZHJlc3NlZUNpdHlcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgdi1lbHNlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIHYtaWY9XCIgKG5hdkNzb21zLmxlbmd0aCA9PSAwKVwiIDpocmVmPVwiYGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vc2VhcmNoP3E9JHtzaGlwbWVudFRhc2tEZXRhaWxzLmFkZHJlc3NlZVBvc3RDb2RlfSwgJHtzaGlwbWVudFRhc2tEZXRhaWxzLmFkZHJlc3NlZUNpdHl9LCAke3NoaXBtZW50VGFza0RldGFpbHMuYWRkcmVzc2VlQWRkcmVzc31gXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIGNsYXNzPVwiYWxpZ24tc2VsZi1jZW50ZXJcIj57eyBzaGlwbWVudFRhc2tEZXRhaWxzLmFkZHJlc3NlZUNpdHkgfX08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtZWxzZT57eyBzaGlwbWVudFRhc2tEZXRhaWxzLmFkZHJlc3NlZUNpdHkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJyb3dcIj57eyAkZmlsdGVycy50cmFucygnc2hpcG1lbnRfdGFzay5tb2RhbC5zaGlwbWVudC5hZGRyZXNzZWVQb3N0Q29kZScpIH19PC90aD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJlZGl0QWRkcmVzc2VlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiB2LW1vZGVsPVwic2hpcG1lbnRUYXNrRGV0YWlscy5hZGRyZXNzZWVQb3N0Q29kZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzaGlwbWVudFRhc2tEZXRhaWxzLmFkZHJlc3NlZVBvc3RDb2RlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwicm93XCI+e3sgJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2subW9kYWwuc2hpcG1lbnQuYWRkcmVzc2VlQWRkcmVzcycpIH19PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWlmPVwiZWRpdEFkZHJlc3NlZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgdi1tb2RlbD1cInNoaXBtZW50VGFza0RldGFpbHMuYWRkcmVzc2VlQWRkcmVzc1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzaGlwbWVudFRhc2tEZXRhaWxzLmFkZHJlc3NlZUFkZHJlc3MgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cInJvd1wiPnt7ICRmaWx0ZXJzLnRyYW5zKCdzaGlwbWVudF90YXNrLm1vZGFsLnNoaXBtZW50LmFkZHJlc3NlZUFkZHJlc3MyJykgfX08L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJlZGl0QWRkcmVzc2VlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiB2LW1vZGVsPVwic2hpcG1lbnRUYXNrRGV0YWlscy5hZGRyZXNzZWVBZGRyZXNzMlwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSB2LWVsc2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzaGlwbWVudFRhc2tEZXRhaWxzLmFkZHJlc3NlZUFkZHJlc3MyIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2ICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgICA8aDU+VGVybcOpa2VrPC9oNT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9XCJpc19wYWNrYWdpbmdcIiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNiB0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIG1sLTJcIiBAY2xpY2s9XCJyZWZyZXNoU2hpbWVudFRhc2tMaW5lcygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBLYWxvZGEgaW5mb3Jtw6FjacOzayBmcmlzc8OtdMOpc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC0xMlwiPiBcbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc21cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgc2NvcGU9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCA+Q2lrazwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCA+S2Fsb2RhPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgdi1mb3I9XCJpdGVtIGluIGl0ZW1zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBpdGVtLlNVTV9RVUFOVElUWSB9fSB4IHt7aXRlbS5JVEVNX05BTUV9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBpdGVtLkJJTl9DT0RFUyB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+ICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4gICAgXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIFxuICAgICAgICA8aDU+e3sgJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2subW9kYWwubmF2X2Nzb20udGl0bGUnKSB9fTwvaDU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBjb2wtMTJcIiB2LWlmPVwibG9hZGluZ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtcHJpbWFyeVwiIHJvbGU9XCJzdGF0dXNcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5Mb2FkaW5nLi4uPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTJcIiB2LWlmPVwic2hpcG1lbnRUYXNrRGV0YWlsc1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCIgdi1mb3I9XCIobmF2Q3NvbSwgaW5kZXgpIGluIG5hdkNzb21zXCIgOmtleT1cImluZGV4XCI+IFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJvcmRlciBtYi0yXCIgOmNsYXNzPVwieyAnYm9yZGVyLXByaW1hcnknOiBuYXZDc29tLnBhY2thZ2VUeXBlID09PSAwIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiY2FyZC10aXRsZSBtYi0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YSA6aHJlZj1cImdldFNoaXBwaW5nQWdlbnRVcmwoc2hpcG1lbnRUYXNrLnNoaXBwaW5nQWdlbnRDb2RlLCBuYXZDc29tLnBhcmNlbE51bWJlcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+e3sgbmF2Q3NvbS5wYXJjZWxOdW1iZXIgfX08L2E+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSA6aHJlZj1cIidodHRwczovL3RlbXBvcmFyeS1zdXBwbGllci1hcGkuYWtoLmh1L2xhYmVsLycrbmF2Q3NvbS5wYXJjZWxOdW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCI+e3sgbmF2Q3NvbS5wYXJjZWxOdW1iZXIgfX08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2g1PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGg2PlxuICAgICAgICAgICAgICAgICAgICAgICAge3tuYXZDc29tLmhlbHBlckNvZGV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oNj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gOnRpdGxlPVwiJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2subW9kYWwubmF2X2Nzb20uaXNfcHJpbnRlZCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwiaWNvbiBpY29uLXRhYmxlciBpY29uLXRhYmxlci1wcmludGVyXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcgMTdoMmEyIDIgMCAwIDAgMiAtMnYtNGEyIDIgMCAwIDAgLTIgLTJoLTE0YTIgMiAwIDAgMCAtMiAydjRhMiAyIDAgMCAwIDIgMmgyXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNyA5di00YTIgMiAwIDAgMCAtMiAtMmgtNmEyIDIgMCAwIDAgLTIgMnY0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk03IDEzbTAgMmEyIDIgMCAwIDEgMiAtMmg2YTIgMiAwIDAgMSAyIDJ2NGEyIDIgMCAwIDEgLTIgMmgtNmEyIDIgMCAwIDEgLTIgLTJ6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bmF2Q3NvbS5rZXN6ID09IDE/IG1vbWVudChuYXZDc29tLmRhdHVtLmRhdGUpLmZvcm1hdCgkZmlsdGVycy50cmFucygnZGF0ZXRpbWVfZm9ybWF0JykpOicnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gOnRpdGxlPVwiJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2subW9kYWwubmF2X2Nzb20uY3JlYXRlZF9hdCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwiaWNvbiBpY29uLXRhYmxlciBpY29uLXRhYmxlci1jdWJlLXNlbmRcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE2IDEyLjVsLTUgLTNsNSAtM2w1IDN2NS41bC01IDN6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTEgOS41djUuNWw1IDNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNiAxMi41NDVsNSAtMy4wM1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcgOWgtNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcgMTJoLTNcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk03IDE1aC0xXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbmF2Q3NvbS5jcmVhdGlvblRpbWUgPyBtb21lbnQobmF2Q3NvbS5jcmVhdGlvblRpbWUuZGF0ZSkuZm9ybWF0KCRmaWx0ZXJzLnRyYW5zKCdkYXRldGltZV9mb3JtYXQnKSkgOiAnJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gOnRpdGxlPVwiJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2subW9kYWwubmF2X2Nzb20uaGVscGVyX2NvZGVfc2Nhbm5lZF9hdCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGNsYXNzPVwiaWNvbiBpY29uLXRhYmxlciBpY29uLXRhYmxlci1xcmNvZGVcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIGZpbGw9XCJub25lXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTQgNG0wIDFhMSAxIDAgMCAxIDEgLTFoNGExIDEgMCAwIDEgMSAxdjRhMSAxIDAgMCAxIC0xIDFoLTRhMSAxIDAgMCAxIC0xIC0xelwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTcgMTdsMCAuMDFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNCA0bTAgMWExIDEgMCAwIDEgMSAtMWg0YTEgMSAwIDAgMSAxIDF2NGExIDEgMCAwIDEgLTEgMWgtNGExIDEgMCAwIDEgLTEgLTF6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNyA3bDAgLjAxXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNCAxNG0wIDFhMSAxIDAgMCAxIDEgLTFoNGExIDEgMCAwIDEgMSAxdjRhMSAxIDAgMCAxIC0xIDFoLTRhMSAxIDAgMCAxIC0xIC0xelwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3IDdsMCAuMDFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNCAxNGwzIDBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMCAxNGwwIC4wMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDE0bDAgM1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDIwbDMgMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3IDE3bDMgMFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIwIDE3bDAgM1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBuYXZDc29tLmhlbHBlckxhYmVsU2Nhbm5lZEF0ID8gbW9tZW50KG5hdkNzb20uaGVscGVyTGFiZWxTY2FubmVkQXQuZGF0ZSkuZm9ybWF0KCRmaWx0ZXJzLnRyYW5zKCdkYXRldGltZV9mb3JtYXQnKSkgOiAnJyB9fSAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+IFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gOnRpdGxlPVwiJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2subW9kYWwubmF2X2Nzb20uc3VwcGxpZXJfY29kZV9zY2FubmVkJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cImljb24gaWNvbi10YWJsZXIgaWNvbi10YWJsZXItZmlsZS1iYXJjb2RlXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0IDN2NGExIDEgMCAwIDAgMSAxaDRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcgMjFoLTEwYTIgMiAwIDAgMSAtMiAtMnYtMTRhMiAyIDAgMCAxIDIgLTJoN2w1IDV2MTFhMiAyIDAgMCAxIC0yIDJ6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTggMTNoMXYzaC0xelwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMiAxM3YzXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE1IDEzaDF2M2gtMXpcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG5hdkNzb20uc3VwcGxpZXJMYWJlbFNjYW5uZWRBdCA/IG1vbWVudChuYXZDc29tLnN1cHBsaWVyTGFiZWxTY2FubmVkQXQuZGF0ZSkuZm9ybWF0KCRmaWx0ZXJzLnRyYW5zKCdkYXRldGltZV9mb3JtYXQnKSkgOiAnJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA6dGl0bGU9XCIkZmlsdGVycy50cmFucygnc2hpcG1lbnRfdGFzay5tb2RhbC5uYXZfY3NvbS53ZWlnaHQnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3M9XCJpY29uIGljb24tdGFibGVyIGljb24tdGFibGVyLXdlaWdodFwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgZmlsbD1cIm5vbmVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT1cIm5vbmVcIiBkPVwiTTAgMGgyNHYyNEgwelwiIGZpbGw9XCJub25lXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgNm0tMyAwYTMgMyAwIDEgMCA2IDBhMyAzIDAgMSAwIC02IDBcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjgzNSA5aDEwLjMzYTEgMSAwIDAgMSAuOTg0IC44MjFsMS42MzcgOWExIDEgMCAwIDEgLS45ODQgMS4xNzloLTEzLjYwNGExIDEgMCAwIDEgLS45ODQgLTEuMTc5bDEuNjM3IC05YTEgMSAwIDAgMSAuOTg0IC0uODIxelwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAgbmF2Q3NvbS5zdXBwbGllckxhYmVsU2Nhbm5lZEF0ID8gcGFyc2VGbG9hdChuYXZDc29tLndlaWdodCkudG9GaXhlZCgyKSsnIEtnJyA6JycgfX0gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+IFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gOnRpdGxlPVwiJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2subW9kYWwubmF2X2Nzb20ucGFja2luZ0NvbnZHYXRlJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiICB3aWR0aD1cIjI0XCIgIGhlaWdodD1cIjI0XCIgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiAgZmlsbD1cIm5vbmVcIiAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgIHN0cm9rZS13aWR0aD1cIjJcIiAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiICBjbGFzcz1cImljb24gaWNvbi10YWJsZXIgaWNvbnMtdGFibGVyLW91dGxpbmUgaWNvbi10YWJsZXItcm91dGUtYWx0LWxlZnRcIj48cGF0aCBzdHJva2U9XCJub25lXCIgZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiLz48cGF0aCBkPVwiTTggM2gtNXY1XCIgLz48cGF0aCBkPVwiTTE2IDNoNXY1XCIgLz48cGF0aCBkPVwiTTMgM2w3LjUzNiA3LjUzNmE1IDUgMCAwIDEgMS40NjQgMy41MzR2Ni45M1wiIC8+PHBhdGggZD1cIk0xOCA2LjAxdi0uMDFcIiAvPjxwYXRoIGQ9XCJNMTYgOC4wMnYtLjAxXCIgLz48cGF0aCBkPVwiTTE0IDEwdi4wMVwiIC8+PC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgIG5hdkNzb20ucGFja2luZ0NvbnZHYXRlICB9fSAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4gXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtcHJpbWFyeSBwb3NpdGlvbi1hYnNvbHV0ZSBtYWluLXBhY2thZ2UtYmFkZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtaWY9XCJuYXZDc29tLnBhY2thZ2VUeXBlID09PSAwXCI+e3sgJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2subW9kYWwubmF2X2Nzb20ubGVhZGVyX3BhcmNlbCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgdGV4dC1jZW50ZXJcIiB2LWlmPVwiIWxvYWRpbmcgJiYgbmF2Q3NvbXMubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICAgICAge3sgJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2subW9kYWwubmF2X2Nzb20ubm90X2ZvdW5kJykgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogXCJTaGlwbWVudFRhc2tDb21wb25lbnRcIixcbiAgICBjb21wb25lbnRzOiB7XG5cbiAgICB9LFxuICAgIHByb3BzOiB7XG4gICAgICAgIHNoaXBtZW50VGFzazoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgICB9XG4gICAgfSxcbiAgICBkYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2hpcG1lbnRUYXNrRGV0YWlsczogbnVsbCxcbiAgICAgICAgICAgIGlzX3BhY2thZ2luZzogbnVsbCxcbiAgICAgICAgICAgIGVkaXRBZGRyZXNzZWU6IGZhbHNlLFxuICAgICAgICAgICAgbmF2Q3NvbXM6IFtdLFxuICAgICAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICAgICAgbW9tZW50LFxuICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICBzYXZlTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICBzaGlwcGluZ0FnZW50czoge1xuICAgICAgICAgICAgICAgIFNEU1NLOiAnaHR0cHM6Ly9zZHNwb3J0YWwub2x0aXNncm91cC5jei9aYXNpbGthL1NsZWRvdmFuaT9DaXNsbz1JRCcsXG5cbiAgICAgICAgICAgICAgICBEUERDWjogJ2h0dHBzOi8vdHJhY2tpbmcuZHBkLmRlL2NnaS1iaW4vZGVsaXN0cmFjaz9wa25yPUlEJnR5cD0xJmxhbmc9SFUnLFxuICAgICAgICAgICAgICAgIERQREFUOiAnaHR0cHM6Ly90cmFja2luZy5kcGQuZGUvY2dpLWJpbi9kZWxpc3RyYWNrP3BrbnI9SUQmdHlwPTEmbGFuZz1IVScsXG5cbiAgICAgICAgICAgICAgICAvLyBodHRwczovL2dscy1ncm91cC5ldS9TSy9lbi9wYXJjZWwtdHJhY2tpbmc/bWF0Y2g9OTAxMjEyODQ2MTQzXG4gICAgICAgICAgICAgICAgR0xTU0s6ICdodHRwOi8vb25saW5lLmdscy1zbG92YWtpYS5zay90dF9wYWdlLnBocD90dF92YWx1ZT1JRCcsXG4gICAgICAgICAgICAgICAgR0xTUk86ICdodHRwOi8vb25saW5lLmdscy1yb21hbmlhLnJvL3NlYXJjaF9zdGF0LnBocD90dF92YWx1ZT1JRCcsXG4gICAgICAgICAgICAgICAgR0xTSFU6ICdodHRwOi8vb25saW5lLmdscy1odW5nYXJ5LmNvbS9zZWFyY2hfc3RhdC5waHA/dHRfdmFsdWU9SUQnLFxuICAgICAgICAgICAgICAgIEdMU0NaOiAnaHR0cDovL29ubGluZS5nbHMtY3plY2guY29tL3R0X3BhZ2UucGhwP3R0X3ZhbHVlPUlEJyxcbiAgICAgICAgICAgICAgICBHTFNTSTogJ2h0dHA6Ly9jb25uZWN0Lmdscy1zbG92ZW5pYS5jb20vc2VhcmNoX3N0YXQucGhwP3R0X3ZhbHVlPUlEJyxcblxuICAgICAgICAgICAgICAgIFBPU1RBSFU6ICdodHRwczovL3Bvc3RhLmh1L3VneWZlbHN6b2xnYWxhdC9ueW9ta292ZXRlcz9pZHM9SUQnLFxuICAgICAgICAgICAgICAgIE1QTDogJ2h0dHBzOi8vcG9zdGEuaHUvdWd5ZmVsc3pvbGdhbGF0L255b21rb3ZldGVzP2lkcz1JRCcsXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGdldFNoaXBtZW50VGFza0RldGFpbHMoKSB7XG4gICAgICAgICAgICB0aGlzLnNoaXBtZW50VGFza0RldGFpbHMgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5uYXZDc29tcyA9IFtdO1xuXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICAgICAgICB0aGlzLiRodHRwLmdldChgL2FwaS9hZG1pbi9uYXYtZ2V0c2hpcG1lbnQtdGFzay8ke3RoaXMuc2hpcG1lbnRUYXNrLmRlbGl2ZXJ5VGFza05vfWApXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaXBtZW50VGFza0RldGFpbHMgPSByZXNwb25zZS5kYXRhLm5hdkdldHNoaXBtZW50VGFzaztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZDc29tcyA9IHJlc3BvbnNlLmRhdGEubmF2Q3NvbXM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMgPSByZXNwb25zZS5kYXRhLml0ZW1zO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzX3BhY2thZ2luZyA9IHJlc3BvbnNlLmRhdGEuaXNfcGFja2FnaW5nO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNhdmVBZGRyZXNzZWUoKSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVMb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgdGhpcy4kaHR0cC5wb3N0KGAvYXBpL2FkbWluL25hdi1nZXRzaGlwbWVudC10YXNrLyR7dGhpcy5zaGlwbWVudFRhc2suZGVsaXZlcnlUYXNrTm99YCwgdGhpcy5zaGlwbWVudFRhc2tEZXRhaWxzKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGlwbWVudFRhc2tEZXRhaWxzID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRBZGRyZXNzZWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc3dhbCh0aGlzLiRmaWx0ZXJzLnRyYW5zKCdzaGlwbWVudF90YXNrLm1vZGFsLnNhdmUuc3VjY2VzcycpLCAnJywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzd2FsKHRoaXMuJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2subW9kYWwuc2F2ZS5lcnJvcicpLCB0aGlzLiRmaWx0ZXJzLnRyYW5zKCdzaGlwbWVudF90YXNrLm1vZGFsLmVycm9yLicgKyBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFNoaXBwaW5nQWdlbnRVcmwoYWdlbnRDb2RlLCBpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hpcHBpbmdBZ2VudHNbYWdlbnRDb2RlXSA/IHRoaXMuc2hpcHBpbmdBZ2VudHNbYWdlbnRDb2RlXS5yZXBsYWNlKCdJRCcsIGlkKSA6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIHNob3dTZW5kaW5nRXJyb3IoKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gKCh0aGlzLnNoaXBtZW50VGFza0RldGFpbHMuc2hpcG1lbnRTdGF0dXMgJiYgKHRoaXMuc2hpcG1lbnRUYXNrRGV0YWlscy5zaGlwbWVudFN0YXR1cy5tZXNzYWdlcyA/IHRoaXMuc2hpcG1lbnRUYXNrRGV0YWlscy5zaGlwbWVudFN0YXR1cy5tZXNzYWdlcyA6ICcnKSAhPT0gJycgJiYgdGhpcy5zaGlwbWVudFRhc2tEZXRhaWxzLnNoaXBtZW50U3RhdHVzLm1lc3NhZ2VzICE9PSAnU1VDQ0VTU0ZVTCcgJiYgdGhpcy5zaGlwbWVudFRhc2tEZXRhaWxzLnNoaXBtZW50U3RhdHVzLm1lc3NhZ2VzICE9PSAnU1VDQ0VTU0ZVTEwnKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGRwZEN6RGVsZXRlQW5kUmVzZW5kKCl7XG4gICAgICAgICAgICAgIHRoaXMuc2F2ZUxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuJGh0dHAucG9zdChgL2FwaS9hZG1pbi9zdXBwbGllci9kcGQvY3ovZGVsZXRlLWFuZC1yZXNlbmQvJHt0aGlzLnNoaXBtZW50VGFzay5kZWxpdmVyeVRhc2tOb31gLCB0aGlzLnNoaXBtZW50VGFza0RldGFpbHMpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4geyBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlTG9hZGluZyA9IGZhbHNlOyBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc3dhbCh0aGlzLiRmaWx0ZXJzLnRyYW5zKCdzaGlwbWVudF90YXNrLm1vZGFsLnNhdmUuc3VjY2VzcycpLCAnJywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzd2FsKHRoaXMuJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2subW9kYWwuc2F2ZS5lcnJvcicpLCB0aGlzLiRmaWx0ZXJzLnRyYW5zKCdzaGlwbWVudF90YXNrLm1vZGFsLmVycm9yLicgKyBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yKSwgJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZnJlc2hTaGltZW50VGFza0xpbmVzKCl7XG4gICAgICAgICAgICAgIHRoaXMuc2F2ZUxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuJGh0dHAucG9zdChgL2FwaS9hZG1pbi9uYXYtZ2V0c2hpcG1lbnQtdGFzay8ke3RoaXMuc2hpcG1lbnRUYXNrLmRlbGl2ZXJ5VGFza05vfS9yZWZyZXNoLWxpbmVzYCwgdGhpcy5zaGlwbWVudFRhc2tEZXRhaWxzKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHsgXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUxvYWRpbmcgPSBmYWxzZTsgXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHN3YWwodGhpcy4kZmlsdGVycy50cmFucygnc2hpcG1lbnRfdGFzay5tb2RhbC5zYXZlLnN1Y2Nlc3MnKSwgJycsICdzdWNjZXNzJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0U2hpcG1lbnRUYXNrRGV0YWlscygpXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kc3dhbCh0aGlzLiRmaWx0ZXJzLnRyYW5zKCdzaGlwbWVudF90YXNrLm1vZGFsLnNhdmUuZXJyb3InKSwgdGhpcy4kZmlsdGVycy50cmFucygnc2hpcG1lbnRfdGFzay5tb2RhbC5lcnJvci4nICsgZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvciksICdlcnJvcicpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFNoaXBtZW50VGFza0RldGFpbHMoKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgICB0aGlzLnNoaXBtZW50VGFza0RldGFpbHMgPSB0aGlzLnNoaXBtZW50VGFzaztcbiAgICAgICAgdGhpcy5lZGl0QWRkcmVzc2VlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZ2V0U2hpcG1lbnRUYXNrRGV0YWlscygpO1xuICAgICAgICB0aGlzLnNoaXBtZW50VGFza0RldGFpbHMgPSB0aGlzLnNoaXBtZW50VGFzaztcbiAgICB9LFxuICAgIHdhdGNoOiB7XG4gICAgfSxcbiAgICBjb21wdXRlZDoge1xuICAgICAgICBlcnJvckVtYWlsSHJlZigpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuc2hpcG1lbnRUYXNrRGV0YWlscyB8fCAhdGhpcy5zaGlwbWVudFRhc2tEZXRhaWxzLmRlbGl2ZXJ5VGFza05vKSB7XG4gICAgICAgICAgICByZXR1cm4gJydcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBtYWlsVG8gPSAnYWRtaW5pc3p0cmFjaW8udGF0YUBha2guaHUsbXVzemFrdmV6ZXRvay50YXRhQGFraC5odSdcblxuICAgICAgICAgIGNvbnN0IHN1YmplY3QgPSBgJHt0aGlzLnNoaXBtZW50VGFza0RldGFpbHMuZGVsaXZlcnlUYXNrTm99IHN6w6FsbMOtdMOhc2kgZmVsYWRhdGhveiBuZW0gbGVoZXQgc3rDoWxsw610w7MgY2lta8OpdCBsZWvDqXJuaS5gXG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gYFN6aWFzenRvayxcblxuICBhICR7dGhpcy5zaGlwbWVudFRhc2tEZXRhaWxzLmRlbGl2ZXJ5VGFza05vfSBzesOhbGzDrXTDoXNpIGZlbGFkYXRob3ogbmVtIGxlaGV0IHN6w6FsbMOtdMOzIGNpbWvDqXQgbGVrw6lybmksIG1lcnRcbiAgYFxuXG4gICAgICAgICAgcmV0dXJuIGBtYWlsdG86JHttYWlsVG99JnN1YmplY3Q9JHtlbmNvZGVVUklDb21wb25lbnQoc3ViamVjdCl9JmJvZHk9JHtlbmNvZGVVUklDb21wb25lbnQoYm9keSl9YFxuICAgICAgfVxuICAgIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgc2NvcGVkPlxucHJlIHtcbiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG59XG5cbi5tYWluLXBhY2thZ2UtYmFkZ2Uge1xuICAgIHRvcDogMDtcbiAgICByaWdodDogMDtcbn1cbjwvc3R5bGU+IiwiXG4ubG9hZGluZyB7XG4gIC5tb2RhbC1mb290ZXIge1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYxMiBjb2wtbWQtNiBtYi0yXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJzZWFyY2hUZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIEBjbGljaz1cInNlYXJjaCgpXCI+e3sgJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2suc2VhcmNoJykgfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1sZ1wiPlxuICAgICAgICAgICAgPEVhc3lEYXRhVGFibGUgdi1tb2RlbDpzZXJ2ZXItb3B0aW9ucz1cInNlcnZlck9wdGlvbnNcIiA6c2VydmVyLWl0ZW1zLWxlbmd0aD1cInNlcnZlckl0ZW1zTGVuZ3RoXCJcbiAgICAgICAgICAgICAgICA6aGVhZGVycz1cImhlYWRlcnNcIiA6bG9hZGluZz1cImxvYWRpbmdcIiBAY2xpY2stcm93PVwicm93Q2xpY2tcIlxuICAgICAgICAgICAgICAgIDppdGVtcz1cIml0ZW1zXCIgYWx0ZXJuYXRpbmc+XG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlICNpdGVtLWRlbGl2ZXJ5VGFza05vPVwieyBkZWxpdmVyeVRhc2tObyB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPjxhIDpocmVmPVwiYCR7cGF0aH0vJHtkZWxpdmVyeVRhc2tOb31gXCIgQGNsaWNrPVwib3BlbkluTW9kYWwgPSBmYWxzZVwiPnt7IGRlbGl2ZXJ5VGFza05vIH19PC9hPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS1kYXR1bT1cInsgZGF0dW0gfVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBtb21lbnQoZGF0dW0uZGF0ZSkuZm9ybWF0KCRmaWx0ZXJzLnRyYW5zKCdkYXRldGltZV9mb3JtYXQnKSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2l0ZW0tc2hpcG1lbnRTdGF0dXMuY3JlYXRlZEF0PVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiaXRlbS5zaGlwbWVudFN0YXR1c1wiIDp0aXRsZT1cIml0ZW0uc2hpcG1lbnRTdGF0dXMuY3JlYXRlZEF0ID9cbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudChpdGVtLnNoaXBtZW50U3RhdHVzLmNyZWF0ZWRBdC5kYXRlKS5mb3JtYXQoJGZpbHRlcnMudHJhbnMoJ2RhdGV0aW1lX2Zvcm1hdCcpKSA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnNoaXBtZW50U3RhdHVzLmNyZWF0ZWRBdCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50KGl0ZW0uc2hpcG1lbnRTdGF0dXMuY3JlYXRlZEF0LmRhdGUpLmZyb21Ob3coKSA6ICcnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPHRlbXBsYXRlICNpdGVtLXNoaXBtZW50U3RhdHVzLnVwZGF0ZWRBdD1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cIml0ZW0uc2hpcG1lbnRTdGF0dXNcIiA6dGl0bGU9XCJpdGVtLnNoaXBtZW50U3RhdHVzLnVwZGF0ZWRBdCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBtb21lbnQoaXRlbS5zaGlwbWVudFN0YXR1cy51cGRhdGVkQXQuZGF0ZSkuZm9ybWF0KCRmaWx0ZXJzLnRyYW5zKCdkYXRldGltZV9mb3JtYXQnKSkgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5zaGlwbWVudFN0YXR1cy51cGRhdGVkQXQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudChpdGVtLnNoaXBtZW50U3RhdHVzLnVwZGF0ZWRBdC5kYXRlKS5mcm9tTm93KCkgOiAnJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjbG9hZGluZz5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkxvYWRpbmcuLi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvRWFzeURhdGFUYWJsZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPFNoaXBtZW50VGFza01vZGFsIHYtbW9kZWw9XCJtb2RhbFwiIDpzaGlwbWVudFRhc2s9XCJzZWxlY3RlZFNoaXBtZW50VGFza1wiIEBjbG9zZT1cIm1vZGFsID0gZmFsc2VcIiAvPlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xuaW1wb3J0IFNoaXBtZW50VGFza01vZGFsIGZyb20gJy4vU2hpcG1lbnRUYXNrTW9kYWwudnVlJ1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogXCJTaGlwbWVudFRhc2tcIixcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFNoaXBtZW50VGFza01vZGFsXG4gICAgfSxcbiAgICBkYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVhZGVyczogW1xuICAgICAgICAgICAgICAgIHsgdGV4dDogdGhpcy4kZmlsdGVycy50cmFucygnc2hpcG1lbnRfdGFzay50YWJsZS5kZWxpdmVyeV90YXNrX25vJyksIHZhbHVlOiBcImRlbGl2ZXJ5VGFza05vXCIsIHNvcnRhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgeyB0ZXh0OiB0aGlzLiRmaWx0ZXJzLnRyYW5zKCdzaGlwbWVudF90YXNrLnRhYmxlLm9yZGVyX25vJyksIHZhbHVlOiBcIm9yZGVyTm9cIiwgc29ydGFibGU6IHRydWUgfSxcbiAgICAgICAgICAgICAgICB7IHRleHQ6IHRoaXMuJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2sudGFibGUuZGF0ZScpLCB2YWx1ZTogXCJkYXR1bVwiLCBzb3J0YWJsZTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgdGV4dDogdGhpcy4kZmlsdGVycy50cmFucygnc2hpcG1lbnRfdGFzay50YWJsZS5zZW5kZXJfY291bnRyeV9yZWdpb25fY29kZScpLCB2YWx1ZTogXCJzZW5kZXJDb3VudHJ5UmVnaW9uQ29kZVwiIH0sXG4gICAgICAgICAgICAgICAgeyB0ZXh0OiB0aGlzLiRmaWx0ZXJzLnRyYW5zKCdzaGlwbWVudF90YXNrLnRhYmxlLnNoaXBwaW5nX2FnZW50X2NvZGUnKSwgdmFsdWU6IFwic2hpcHBpbmdBZ2VudENvZGVcIiB9LFxuICAgICAgICAgICAgICAgIHsgdGV4dDogdGhpcy4kZmlsdGVycy50cmFucygnc2hpcG1lbnRfdGFzay50YWJsZS5zdGF0dXNfYXR0ZW1wdCcpLCB2YWx1ZTogXCJzaGlwbWVudFN0YXR1cy5hdHRlbXB0XCIgfSxcbiAgICAgICAgICAgICAgICB7IHRleHQ6IHRoaXMuJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2sudGFibGUuc3RhdHVzX2NyZWF0ZWRfYXQnKSwgdmFsdWU6IFwic2hpcG1lbnRTdGF0dXMuY3JlYXRlZEF0XCIgfSxcbiAgICAgICAgICAgICAgICB7IHRleHQ6IHRoaXMuJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2sudGFibGUuc3RhdHVzX3VwZGF0ZWRfYXQnKSwgdmFsdWU6IFwic2hpcG1lbnRTdGF0dXMudXBkYXRlZEF0XCIgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpdGVtczogW10sXG4gICAgICAgICAgICBzZXJ2ZXJJdGVtc0xlbmd0aDogMCxcbiAgICAgICAgICAgIHNlcnZlck9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgICAgICAgIHJvd3NQZXJQYWdlOiAyNSxcbiAgICAgICAgICAgICAgICBzb3J0Qnk6ICdpZCcsXG4gICAgICAgICAgICAgICAgc29ydFR5cGU6ICdkZXNjJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWFyY2hUZXh0OiAnJyxcbiAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgc2VsZWN0ZWRTaGlwbWVudFRhc2s6IG51bGwsXG4gICAgICAgICAgICBtb2RhbDogZmFsc2UsXG4gICAgICAgICAgICBtb21lbnQsXG4gICAgICAgICAgICBwYXRoOiB3aW5kb3cubG9jYXRpb24uaHJlZixcbiAgICAgICAgICAgIG9wZW5Jbk1vZGFsOiB0cnVlLFxuICAgICAgICB9XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIHNlYXJjaDogXy5kZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlXG4gICAgICAgICAgICAvLyBGZXRjaCBkYXRhIGZyb20gQVBJXG4gICAgICAgICAgICB0aGlzLiRodHRwLnBvc3QoJy9hcGkvYWRtaW4vbmF2LWdldHNoaXBtZW50LXRhc2svc2VhcmNoJywge1xuICAgICAgICAgICAgICAgIHNlYXJjaDogdGhpcy5zZWFyY2hUZXh0LFxuICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMuc2VydmVyT3B0aW9ucy5wYWdlLFxuICAgICAgICAgICAgICAgIHJvd3NQZXJQYWdlOiB0aGlzLnNlcnZlck9wdGlvbnMucm93c1BlclBhZ2UsXG4gICAgICAgICAgICAgICAgc29ydEJ5OiB0aGlzLnNlcnZlck9wdGlvbnMuc29ydEJ5LFxuICAgICAgICAgICAgICAgIGRlc2NlbmRpbmc6IHRoaXMuc2VydmVyT3B0aW9ucy5zb3J0VHlwZSA9PT0gJ2Rlc2MnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMgPSByZXNwb25zZS5kYXRhLm5hdkdldHNoaXBtZW50VGFza3NcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2ZXJJdGVtc0xlbmd0aCA9IHJlc3BvbnNlLmRhdGEubmF2R2V0c2hpcG1lbnRUYXNrc1Jvd3NDb3VudFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgIH0sIDUwMCksXG4gICAgICAgIHJvd0NsaWNrKGl0ZW0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW5Jbk1vZGFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNoaXBtZW50VGFzayA9IGl0ZW1cbiAgICAgICAgICAgICAgICB0aGlzLm1vZGFsID0gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5Jbk1vZGFsID0gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgICB0aGlzLnNlYXJjaCgpXG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgICBzZXJ2ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICBoYW5kbGVyKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1ZhbC5zb3J0QnkgIT09IG9sZFZhbC5zb3J0QnkgfHwgbmV3VmFsLnNvcnRUeXBlICE9PSBvbGRWYWwuc29ydFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2ZXJPcHRpb25zLnBhZ2UgPSAxXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2goKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZXA6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgc2VhcmNoVGV4dCgpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRoaXMuc2VhcmNoVGV4dC50cmltKClcbiAgICAgICAgICAgIHRoaXMuc2VydmVyT3B0aW9ucy5wYWdlID0gMVxuICAgICAgICAgICAgdGhpcy5zZWFyY2goKVxuICAgICAgICB9XG4gICAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4udnVlMy1lYXN5LWRhdGEtdGFibGUge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2PlxuICAgICAgIFxuPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBjb2wtbWQtOVwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdW5kZWQtbGdcIj5cbiAgICAgICAgICAgICAgICA8RWFzeURhdGFUYWJsZSB2LW1vZGVsOnNlcnZlci1vcHRpb25zPVwic2VydmVyT3B0aW9uc1wiIDpzZXJ2ZXItaXRlbXMtbGVuZ3RoPVwic2VydmVySXRlbXNMZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICA6aGVhZGVycz1cImhlYWRlcnNcIiA6bG9hZGluZz1cImxvYWRpbmdcIiBAY2xpY2stcm93PVwicm93Q2xpY2tcIlxuICAgICAgICAgICAgICAgICAgICA6aXRlbXM9XCJpdGVtc1wiIGFsdGVybmF0aW5nPlxuICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNpdGVtLXN0YXR1cz1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4+e3tpdGVtLlNUQVRVU319PC9zcGFuPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiaXRlbS5TVEFUVVMgPT09ICdlcnJvcidcIiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+PGkgZGF0YS12LTY2MjBhYzUwPVwiXCIgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZVwiPjwvaT48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+IFxuICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS1kYXR1bT1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG1vbWVudChpdGVtLkRBVFVNKS5mb3JtYXQoJGZpbHRlcnMudHJhbnMoJ2RhdGV0aW1lX2Zvcm1hdCcpKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2xvYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5Mb2FkaW5nLi4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9FYXN5RGF0YVRhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBjb2wtbWQtM1wiPlxuICAgICAgICA8ZGl2ID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgY29sLW1kLTNcIj48Yj5TesOhbGzDrXTDszwvYj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgY29sLW1kLTMgdGV4dC1yaWdodFwiPlbDoXJha296aWs8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgY29sLW1kLTMgdGV4dC1yaWdodFwiPkNzb21hZ29sdDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBjb2wtbWQtMyB0ZXh0LXJpZ2h0XCI+UmFrb2RvdHQ8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGhyPlxuICAgICAgICAgICAgIDxkaXYgdi1mb3I9XCIoc3RhdCwgaW5kZXgpIGluIHN0YXR1c1wiIDprZXk9XCJpbmRleFwiIGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IGNvbC1tZC0zXCI+PGI+e3tpbmRleH19PC9iPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBjb2wtbWQtMyB0ZXh0LXJpZ2h0XCI+e3tzdGF0LndhaXRpbmd9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBjb2wtbWQtMyB0ZXh0LXJpZ2h0XCI+e3tzdGF0LnBhY2tlZH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IGNvbC1tZC0zIHRleHQtcmlnaHRcIj57e3N0YXQuc2Nhbm5lZH19PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxocj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgY29sLW1kLTNcIj48Yj7DlnNzemVzZW46PC9iPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBjb2wtbWQtMyB0ZXh0LXJpZ2h0XCI+e3tzdGF0dXNUb3RhbC53YWl0aW5nfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgY29sLW1kLTMgdGV4dC1yaWdodFwiPnt7c3RhdHVzVG90YWwucGFja2VkfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgY29sLW1kLTMgdGV4dC1yaWdodFwiPnt7c3RhdHVzVG90YWwuc2Nhbm5lZH19PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj4gIFxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj4gXG4gICAgICAgICAgICA8aHI+XG4gICAgICAgICAgICA8aW5wdXQgdi1tb2RlbD1cImJpblNlYXJjaFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIG1iLTJcIiBwbGFjZWhvbGRlcj1cIktlcmVzw6lzLi4uXCI+XG4gICAgICAgICAgICA8ZGl2IHYtZm9yPVwiKGJpbkxpc3QsIGluZGV4KSBpbiBmaWx0ZXJlZEJpbnNCeUFnZW50XCIgOmtleT1cImluZGV4XCI+XG4gICAgICAgICAgICAgICAgPGhyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGgzPnt7aW5kZXh9fTwvaDM+ICBcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwb2ludGVyXCIgQGNsaWNrPVwic2hvd0hhbGZQcm9jZXNzaW5nKGluZGV4KVwiIHYtaWY9XCJpbnByb2dyZXNzQnlBZ2VudFtpbmRleF0+MFwiPiBmb2x5YW1hdGJhbjogPGIgID57e2lucHJvZ3Jlc3NCeUFnZW50W2luZGV4XX19PC9iPjwvYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiIHJvbGU9XCJhbGVydFwiIHYtaWY9XCJjb252ZXlvclNldHRpbmdzQnlBZ2VudFtpbmRleF08MFwiPlxuICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJiaSBiaS1leGNsYW1hdGlvbi1jaXJjbGUtZmlsbFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgTmluY3MgYmXDoWxsw610dmEgYXoga2l0w6Fyb2zDoXNpcsOhbnkgXG4gICAgICAgICAgICAgICAgPC9kaXY+IFxuXG4gICAgICAgICAgICAgICAgPGRpdiB2LWZvcj1cIihiaW4sIGluZGV4KSBpbiBiaW5MaXN0XCIgOmtleT1cImluZGV4XCIgY2xhc3M9XCJwb2ludGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJvcmRlciBtYi0yIHAtMiBiaW4tY29udGFpbmVyXCIgIFxuICAgICAgICAgICAgICAgICAgICAgICAgOmNsYXNzPVwieyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXN1Y2Nlc3MnOiBiaW5zU3RhdHVzW2Jpbi5CSU5fQ09ERV0gJiYgYmluc1N0YXR1c1tiaW4uQklOX0NPREVdLm92ZXJhbGxfc3RhdHVzID09PSAnb2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItZGFuZ2VyJzogYmluc1N0YXR1c1tiaW4uQklOX0NPREVdICYmIGJpbnNTdGF0dXNbYmluLkJJTl9DT0RFXS5vdmVyYWxsX3N0YXR1cyA9PT0gJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXdhaXRpbmcnOiBiaW5zU3RhdHVzW2Jpbi5CSU5fQ09ERV0gJiYgYmluc1N0YXR1c1tiaW4uQklOX0NPREVdLm92ZXJhbGxfc3RhdHVzID09PSAnd2FpdGluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci13YXJuaW5nJzogYmluc1N0YXR1c1tiaW4uQklOX0NPREVdICYmIGJpbnNTdGF0dXNbYmluLkJJTl9DT0RFXS5vdmVyYWxsX3N0YXR1cyA9PT0gJ3dhcm5pbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCIgXG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz1cInNob3dCaW4oYmluLkJJTl9DT0RFKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGI+e3tiaW4uQklOX0NPREV9fTwvYj4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPnt7IGJpbi5PVVRfR0FURV9OTyB9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICBcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+IFxuICAgICAgICAgICAgIDxocj5cbiAgICAgICAgICAgIDxoMz5aw7ZsZCBrYWxvZGE8L2gzPlxuICAgICAgICAgICAgIDxkaXYgdi1mb3I9XCIoYmluTGlzdCwgaW5kZXgpIGluIGdyZWVuQmluc1wiIDprZXk9XCJpbmRleFwiIGNsYXNzPVwiY2FyZCBib3JkZXIgbWItMiBwLTIgYm9yZGVyLXN1Y2Nlc3MgcG9pbnRlclwiIEBjbGljaz1cInNob3dCaW4oaW5kZXgpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICA8Yj57e2luZGV4fX08L2I+ICBcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwb2ludGVyXCIgQGNsaWNrPVwic2hvd0hhbGZQcm9jZXNzaW5nKGluZGV4KVwiIHYtaWY9XCJpbnByb2dyZXNzQnlBZ2VudFtpbmRleF0+MFwiPiBmb2x5YW1hdGJhbjogPGIgID57e2lucHJvZ3Jlc3NCeUFnZW50W2luZGV4XX19PC9iPjwvYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj4gXG5cbiAgICAgICAgICAgICAgICA8ZGl2IHYtZm9yPVwiKGJpbiwgaW5kZXgpIGluIGJpbkxpc3RcIiA6a2V5PVwiaW5kZXhcIiA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD57e2Jpbi5TSElQUElOR19BR0VOVF9DT0RFfX08L3NtYWxsPiAgPHNtYWxsPnt7IGJpbi5PVVRfR0FURV9OTyB9fTwvc21hbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICBcbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj4gXG4gICAgICAgICAgIDxTaGlwbWVudFRhc2tNb2RhbCB2LW1vZGVsPVwibW9kYWxcIiA6c2hpcG1lbnRUYXNrPVwic2VsZWN0ZWRTaGlwbWVudFRhc2tcIiBAY2xvc2U9XCJtb2RhbCA9IGZhbHNlXCIgLz5cbiAgICAgICAgICAgPEJpbk1vZGFsICAgICAgICAgIHYtbW9kZWw9XCJiaW5Nb2RhbFwiIDpiaW5Db2RlPVwic2VsZWN0ZWRCaW5Db2RlXCIgQGNsb3NlPVwiY2xvc2VCaW5cIiAvPlxuICAgICAgICAgICA8QWdlbnRNb2RhbCAgICAgICAgdi1tb2RlbD1cInNob3dBZ2VudE1vZGFsXCIgOm9yZGVycz1cImhhbGZQYWNrZWRPcmRlcnNcIiA6YWdlbnRDb2RlPVwic2VsZWN0ZWRBZ2VudFwiIEBjbG9zZT1cInNob3dBZ2VudE1vZGFsID0gZmFsc2VcIiAvPlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xuaW1wb3J0IFNoaXBtZW50VGFza01vZGFsIGZyb20gJy4vU2hpcG1lbnRUYXNrTW9kYWwudnVlJ1xuaW1wb3J0IEJpbk1vZGFsIGZyb20gJy4vQmluTW9kYWwudnVlJ1xuaW1wb3J0IEFnZW50TW9kYWwgZnJvbSAnLi9BZ2VudE1vZGFsLnZ1ZSdcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCdcblxuZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6IFwiQWN0dWFsUGFja2FnaW5nXCIsXG4gICAgY29tcG9uZW50czoge1xuICAgICAgICBTaGlwbWVudFRhc2tNb2RhbCxcbiAgICAgICAgQmluTW9kYWwsXG4gICAgICAgIEFnZW50TW9kYWxcbiAgICB9LFxuICAgIGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoZWFkZXJzOiBbXG4gICAgICAgICAgICAgICAgeyB0ZXh0OiB0aGlzLiRmaWx0ZXJzLnRyYW5zKCcnKSwgdmFsdWU6IFwiU1RBVFVTXCIsIHNvcnRhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgeyB0ZXh0OiB0aGlzLiRmaWx0ZXJzLnRyYW5zKCdhY3R1YWxfcGFja2FnaW5nLnRhYmxlLmRhdGUnKSwgdmFsdWU6IFwiREFUVU1cIiwgc29ydGFibGU6IHRydWUgfSxcbiAgICAgICAgICAgICAgICB7IHRleHQ6IHRoaXMuJGZpbHRlcnMudHJhbnMoJ2FjdHVhbF9wYWNrYWdpbmcudGFibGUuc2hpcHBpbmdfYWdlbnRfY29kZScpLCB2YWx1ZTogXCJTSElQUElOR19BR0VOVF9DT0RFXCIsIHNvcnRhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgeyB0ZXh0OiB0aGlzLiRmaWx0ZXJzLnRyYW5zKCdhY3R1YWxfcGFja2FnaW5nLnRhYmxlLmRlbGl2ZXJ5X3Rhc2tfbm8nKSwgdmFsdWU6IFwiREVMSVZFUllfVEFTS19OT1wiLCBzb3J0YWJsZTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgdGV4dDogdGhpcy4kZmlsdGVycy50cmFucygnYWN0dWFsX3BhY2thZ2luZy50YWJsZS5xdWFudGl0eScpLCB2YWx1ZTogXCJRVUFOVElUWVwiLCBzb3J0YWJsZTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgdGV4dDogdGhpcy4kZmlsdGVycy50cmFucygnYWN0dWFsX3BhY2thZ2luZy50YWJsZS5pdGVtJyksIHZhbHVlOiBcIklURU1fTkFNRVwiLCBzb3J0YWJsZTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgdGV4dDogdGhpcy4kZmlsdGVycy50cmFucygnYWN0dWFsX3BhY2thZ2luZy50YWJsZS5oZWxwZXJfY29kZScpLCB2YWx1ZTogXCJIRUxQRVJfQ09ERVwiICwgc29ydGFibGU6IHRydWV9LFxuICAgICAgICAgICAgICAgIHsgdGV4dDogdGhpcy4kZmlsdGVycy50cmFucygnYWN0dWFsX3BhY2thZ2luZy50YWJsZS5oZWxwZXJfbGFiZWxfc2Nhbm5lZF9hdCcpLCB2YWx1ZTogXCJIRUxQRVJfTEFCRUxfU0NBTk5FRF9BVFwiLCBzb3J0YWJsZTogdHJ1ZSB9XG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICAgICAgYmluczogW10sXG4gICAgICAgICAgICBiaW5zQnlBZ2VudDogW10sXG4gICAgICAgICAgICBiaW5zU3RhdHVzOiBbXSxcbiAgICAgICAgICAgIGdyZWVuQmluczogW10sXG4gICAgICAgICAgICBpbnByb2dyZXNzQnlBZ2VudDogW10sXG4gICAgICAgICAgICBjb252ZXlvclNldHRpbmdzQnlBZ2VudDogW10sXG4gICAgICAgICAgICBzdGF0dXM6IFtdLFxuICAgICAgICAgICAgc3RhdHVzVG90YWw6IFtdLFxuICAgICAgICAgICAgc2VydmVySXRlbXNMZW5ndGg6IDAsXG4gICAgICAgICAgICBzZXJ2ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgICAgICByb3dzUGVyUGFnZTogMjUsXG4gICAgICAgICAgICAgICAgc29ydEJ5OiAnREFUVU0nLFxuICAgICAgICAgICAgICAgIHNvcnRUeXBlOiAnZGVzYycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VhcmNoVGV4dDogJycsXG4gICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIHNlbGVjdGVkU2hpcG1lbnRUYXNrOiBudWxsLFxuICAgICAgICAgICAgc2VsZWN0ZWRBZ2VudDogbnVsbCxcbiAgICAgICAgICAgIHNlbGVjdGVkQmluQ29kZTogbnVsbCxcbiAgICAgICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgICAgIGJpbk1vZGFsOiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dBZ2VudE1vZGFsOiBmYWxzZSxcbiAgICAgICAgICAgIG1vbWVudCxcbiAgICAgICAgICAgIHBhdGg6IHdpbmRvdy5sb2NhdGlvbi5ocmVmLFxuICAgICAgICAgICAgb3BlbkluTW9kYWw6IHRydWUsXG4gICAgICAgICAgICBiaW5TZWFyY2g6ICcnLFxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICAgIGZpbHRlcmVkQmluc0J5QWdlbnQoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYmluU2VhcmNoKSByZXR1cm4gdGhpcy5iaW5zQnlBZ2VudDtcblxuICAgICAgICAgICAgY29uc3Qgc2VhcmNoVGVybSA9IHRoaXMuYmluU2VhcmNoLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHt9O1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFthZ2VudENvZGUsIGJpbnNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuYmluc0J5QWdlbnQpKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEJpbnMgPSBiaW5zLmZpbHRlcihiaW4gPT4gXG4gICAgICAgICAgICAgICAgYmluLkJJTl9DT0RFLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybSkgfHxcbiAgICAgICAgICAgICAgICBiaW4uU0hJUFBJTkdfQUdFTlRfQ09ERS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0pIHx8XG4gICAgICAgICAgICAgICAgKGJpbi5PVVRfR0FURV9OTyAmJiBiaW4uT1VUX0dBVEVfTk8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hUZXJtKSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChmaWx0ZXJlZEJpbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkW2FnZW50Q29kZV0gPSBmaWx0ZXJlZEJpbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgICBcbiAgICAgICAgc2VhcmNoOiBfLmRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWUgXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh7XG4gICAgICAgICAgICAvLyAgICAgc2VhcmNoOiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAvLyAgICAgcGFnZTogdGhpcy5zZXJ2ZXJPcHRpb25zLnBhZ2UsXG4gICAgICAgICAgICAvLyAgICAgcm93c1BlclBhZ2U6IHRoaXMuc2VydmVyT3B0aW9ucy5yb3dzUGVyUGFnZSxcbiAgICAgICAgICAgIC8vICAgICBzb3J0Qnk6IHRoaXMuc2VydmVyT3B0aW9ucy5zb3J0QnksXG4gICAgICAgICAgICAvLyAgICAgZGVzY2VuZGluZzogdGhpcy5zZXJ2ZXJPcHRpb25zLnNvcnRUeXBlID09PSAnZGVzYycsXG4gICAgICAgICAgICAvLyB9KTtcbiAgXG5cbiAgICAgICAgICAgIC8vIEZldGNoIGRhdGEgZnJvbSBBUElcbiAgICAgICAgICAgIHRoaXMuJGh0dHAucG9zdCgnL2FwaS9hZG1pbi9wYWNrZXIvZGFzaGJvYXJkLycsIHtcbiAgICAgICAgICAgICAgICBzZWFyY2g6IHRoaXMuc2VhcmNoVGV4dCxcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnNlcnZlck9wdGlvbnMucGFnZSxcbiAgICAgICAgICAgICAgICByb3dzUGVyUGFnZTogdGhpcy5zZXJ2ZXJPcHRpb25zLnJvd3NQZXJQYWdlLFxuICAgICAgICAgICAgICAgIHNvcnRCeTogdGhpcy5zZXJ2ZXJPcHRpb25zLnNvcnRCeSxcbiAgICAgICAgICAgICAgICBkZXNjZW5kaW5nOiB0aGlzLnNlcnZlck9wdGlvbnMuc29ydFR5cGUgPT09ICdkZXNjJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zID0gcmVzcG9uc2UuZGF0YS5vbl9yb3dcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5zID0gcmVzcG9uc2UuZGF0YS5iaW5zXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYmluc0J5QWdlbnQgPSByZXNwb25zZS5kYXRhLmJpbnNfYnlfYWdlbnRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iaW5zU3RhdHVzID0gcmVzcG9uc2UuZGF0YS5iaW5zX3N0YXR1c1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyZWVuQmlucyA9IHJlc3BvbnNlLmRhdGEuZ3JlZW5fYmluc1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cyA9IHJlc3BvbnNlLmRhdGEuc3RhdHVzXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzVG90YWwgPSByZXNwb25zZS5kYXRhLnN0YXR1c190b3RhbFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbGZQYWNrZWRPcmRlcnMgPSByZXNwb25zZS5kYXRhLmhhbGZfcGFja2VkX29yZGVycztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb252ZXlvclNldHRpbmdzQnlBZ2VudCA9IHJlc3BvbnNlLmRhdGEuY29udmV5b3Jfc2V0dGluZ3Muc3VwcGxpZXJDb252ZXlvcjtcbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRoaXMuaW5wcm9ncmVzc0J5QWdlbnQgPSBbXTtcblxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuaGFsZlBhY2tlZE9yZGVycykuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGVudHJ5O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5ERUxJVkVSWV9UQVNLX05PID09PSAgdmFsdWUuU0hJUE1FTlRfVEFTS19OTyApO1xuIFxuXG5cbiAgICAgICAgICAgICAgICAgICAgaWYoaW5kZXg+MCl7IFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpbmRleF0uREVMSVZFUllfVEFTS19OTz0gIHRoaXMuaXRlbXNbaW5kZXhdLkRFTElWRVJZX1RBU0tfTk8rJyAqJztcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1tpbmRleF0ub3JkZXJJc0luUHJvY2VzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgIC8vICAgICAgICAgICAgICB0aGlzLml0ZW1zW2luZGV4XS5vcmRlcklzSW5Qcm9jZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmlucHJvZ3Jlc3NCeUFnZW50W3ZhbHVlLlNISVBQSU5HX0FHRU5UX0NPREVdID09ICd1bmRlZmluZWQnIClcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wcm9ncmVzc0J5QWdlbnRbdmFsdWUuU0hJUFBJTkdfQUdFTlRfQ09ERV0gPSAwO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnByb2dyZXNzQnlBZ2VudFt2YWx1ZS5TSElQUElOR19BR0VOVF9DT0RFXSsrO1xuXG4gICAgICAgICAgICAgICAgfSk7IFxuXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5pbnByb2dyZXNzQnlBZ2VudFsnUE9TVEFIVSddID0gMjsgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIHRoaXMuaW5wcm9ncmVzc0J5QWdlbnQgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmlucHJvZ3Jlc3NCeUFnZW50KSBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICB9LCA1MDApLFxuICAgICAgICBnZXRSb3dDbGFzc05hbWUoaXRlbSkge1xuICAgICAgICAgICAgaWYgKGl0ZW0uU1RBVFVTID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0YWJsZS13YXJuaW5nJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfSxcbiAgICAgICAgcm93Q2xpY2soaXRlbSkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3BlbkluTW9kYWwpIHsgIFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTaGlwbWVudFRhc2sgPSB7ZGVsaXZlcnlUYXNrTm8gOml0ZW0uREVMSVZFUllfVEFTS19OT31cbiAgICAgICAgICAgICAgICB0aGlzLm1vZGFsID0gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5Jbk1vZGFsID0gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzaG93QmluKGJpbkNvZGUpIHtcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLm9wZW5Jbk1vZGFsKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYmluQ29kZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5Nb2RhbCA9IHRydWVcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQmluQ29kZSA9IGJpbkNvZGU7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMub3BlbkluTW9kYWwgPSB0cnVlXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH0sXG4gICAgICAgIGNsb3NlQmluKCkge1xuICAgICAgICAgICAgLy8gaWYgKHRoaXMub3BlbkluTW9kYWwpIHtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLmJpbk1vZGFsID0gZmFsc2VcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQmluQ29kZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHRoaXMub3BlbkluTW9kYWwgPSB0cnVlXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH0sXG4gICAgICAgIHNob3dIYWxmUHJvY2Vzc2luZyhhZ2VudENvZGUpIHtcbiAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQWdlbnQgPSBhZ2VudENvZGU7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93QWdlbnRNb2RhbCAgPSB0cnVlXG4gICAgICAgICAgIFxuICAgICAgICB9XG4gICAgfSxcbiAgICBtb3VudGVkKCkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2goKVxuICAgICAgICAgIHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaCgpXG4gICAgICAgICAgICAgICAgfSwgMTUwMDApOyAvLyByZWxvYWQgZXZlcnkgMTAgc2Vjb25kc1xuICAgICAgICBcbiAgICB9ICxcbiAgICB3YXRjaDoge1xuICAgICAgICBzZXJ2ZXJPcHRpb25zOiB7XG4gICAgICAgICAgICBoYW5kbGVyKG5ld1ZhbCwgb2xkVmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1ZhbC5zb3J0QnkgIT09IG9sZFZhbC5zb3J0QnkgfHwgbmV3VmFsLnNvcnRUeXBlICE9PSBvbGRWYWwuc29ydFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2ZXJPcHRpb25zLnBhZ2UgPSAxXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2goKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZXA6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgc2VhcmNoVGV4dCgpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRoaXMuc2VhcmNoVGV4dC50cmltKClcbiAgICAgICAgICAgIHRoaXMuc2VydmVyT3B0aW9ucy5wYWdlID0gMVxuICAgICAgICAgICAgdGhpcy5zZWFyY2goKVxuICAgICAgICB9XG4gICAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4udnVlMy1lYXN5LWRhdGEtdGFibGUge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4ucG9pbnRlcntcbiAgICBjdXJzb3I6cG9pbnRlclxufVxuLmJpbi1jb250YWluZXJ7XG4gICAgc21hbGx7XG4gICAgICAgIGZvbnQtc2l6ZTogNjklO1xuICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICBsaW5lLWhlaWdodDogNHB4O1xuICAgIH1cbn1cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICAgIDxkaXY+XG4gICAgICAgIDxkaXYgdi1zaG93PVwic2hvd1RhYmxlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02MTIgY29sLW1kLTYgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHYtbW9kZWw9XCJzZWFyY2hUZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBAY2xpY2s9XCJzZWFyY2goKVwiPnt7ICRmaWx0ZXJzLnRyYW5zKCdzaGlwbWVudF90YXNrLnNlYXJjaCcpXG4gICAgICAgICAgICAgICAgICAgICAgICB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1sZ1wiPlxuICAgICAgICAgICAgICAgIDxFYXN5RGF0YVRhYmxlIHYtbW9kZWw6c2VydmVyLW9wdGlvbnM9XCJzZXJ2ZXJPcHRpb25zXCIgOnNlcnZlci1pdGVtcy1sZW5ndGg9XCJzZXJ2ZXJJdGVtc0xlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgIDpoZWFkZXJzPVwiaGVhZGVyc1wiIDpsb2FkaW5nPVwibG9hZGluZ1wiIEBjbGljay1yb3c9XCJyb3dDbGlja1wiIDppdGVtcz1cIml0ZW1zXCIgYWx0ZXJuYXRpbmc+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjaXRlbS1kYXR1bT1cInsgZGF0dW0gfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgbW9tZW50KGRhdHVtLmRhdGUpLmZvcm1hdCgkZmlsdGVycy50cmFucygnZGF0ZXRpbWVfZm9ybWF0JykpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgI2l0ZW0tc2hpcG1lbnRTdGF0dXMuY3JlYXRlZEF0PVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cIml0ZW0uc2hpcG1lbnRTdGF0dXNcIiA6dGl0bGU9XCJpdGVtLnNoaXBtZW50U3RhdHVzLmNyZWF0ZWRBdCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9tZW50KGl0ZW0uc2hpcG1lbnRTdGF0dXMuY3JlYXRlZEF0LmRhdGUpLmZvcm1hdCgkZmlsdGVycy50cmFucygnZGF0ZXRpbWVfZm9ybWF0JykpIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnNoaXBtZW50U3RhdHVzLmNyZWF0ZWRBdCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudChpdGVtLnNoaXBtZW50U3RhdHVzLmNyZWF0ZWRBdC5kYXRlKS5mcm9tTm93KCkgOiAnJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlICNpdGVtLXNoaXBtZW50U3RhdHVzLnVwZGF0ZWRBdD1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJpdGVtLnNoaXBtZW50U3RhdHVzXCIgOnRpdGxlPVwiaXRlbS5zaGlwbWVudFN0YXR1cy51cGRhdGVkQXQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbWVudChpdGVtLnNoaXBtZW50U3RhdHVzLnVwZGF0ZWRBdC5kYXRlKS5mb3JtYXQoJGZpbHRlcnMudHJhbnMoJ2RhdGV0aW1lX2Zvcm1hdCcpKSA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5zaGlwbWVudFN0YXR1cy51cGRhdGVkQXQgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb21lbnQoaXRlbS5zaGlwbWVudFN0YXR1cy51cGRhdGVkQXQuZGF0ZSkuZnJvbU5vdygpIDogJycgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSAjbG9hZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciB0ZXh0LXByaW1hcnlcIiByb2xlPVwic3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkxvYWRpbmcuLi48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L0Vhc3lEYXRhVGFibGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCIgdi1pZj1cImxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciB0ZXh0LXByaW1hcnlcIiByb2xlPVwic3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+TG9hZGluZy4uLjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiIHYtaWY9XCJzZWxlY3RlZFNoaXBtZW50VGFzayAmJiAhc2hvd1RhYmxlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XG4gICAgICAgICAgICAgICAgPFNoaXBtZW50VGFza0NvbXBvbmVudCA6c2hpcG1lbnRUYXNrPVwic2VsZWN0ZWRTaGlwbWVudFRhc2tcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xuaW1wb3J0IFNoaXBtZW50VGFza01vZGFsIGZyb20gJy4vU2hpcG1lbnRUYXNrTW9kYWwudnVlJ1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IFNoaXBtZW50VGFza0NvbXBvbmVudCBmcm9tICcuL1NoaXBtZW50VGFza0NvbXBvbmVudC52dWUnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiBcIlNoaXBtZW50VGFza0RldGFpbFwiLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgU2hpcG1lbnRUYXNrTW9kYWwsXG4gICAgICAgIFNoaXBtZW50VGFza0NvbXBvbmVudFxuICAgIH0sXG4gICAgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IFtcbiAgICAgICAgICAgICAgICB7IHRleHQ6IHRoaXMuJGZpbHRlcnMudHJhbnMoJ3NoaXBtZW50X3Rhc2sudGFibGUuZGVsaXZlcnlfdGFza19ubycpLCB2YWx1ZTogXCJkZWxpdmVyeVRhc2tOb1wiLCBzb3J0YWJsZTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIHsgdGV4dDogdGhpcy4kZmlsdGVycy50cmFucygnc2hpcG1lbnRfdGFzay50YWJsZS5vcmRlcl9ubycpLCB2YWx1ZTogXCJvcmRlck5vXCIsIHNvcnRhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgeyB0ZXh0OiB0aGlzLiRmaWx0ZXJzLnRyYW5zKCdzaGlwbWVudF90YXNrLnRhYmxlLnNoaXBwaW5nX2FnZW50X2NvZGUnKSwgdmFsdWU6IFwic2hpcHBpbmdBZ2VudENvZGVcIiB9LFxuICAgICAgICAgICAgICAgIHsgdGV4dDogdGhpcy4kZmlsdGVycy50cmFucygnc2hpcG1lbnRfdGFzay50YWJsZS5zdGF0dXNfYXR0ZW1wdCcpLCB2YWx1ZTogXCJzaGlwbWVudFN0YXR1cy5hdHRlbXB0XCIgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpdGVtczogW10sXG4gICAgICAgICAgICBzZXJ2ZXJJdGVtc0xlbmd0aDogMCxcbiAgICAgICAgICAgIHNlcnZlck9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgICAgICAgIHJvd3NQZXJQYWdlOiAyNSxcbiAgICAgICAgICAgICAgICBzb3J0Qnk6ICdpZCcsXG4gICAgICAgICAgICAgICAgc29ydFR5cGU6ICdkZXNjJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWFyY2hUZXh0OiAnJyxcbiAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgc2VsZWN0ZWRTaGlwbWVudFRhc2s6IG51bGwsXG4gICAgICAgICAgICBzaG93VGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgbW9tZW50XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgICAgc2VhcmNoOiBfLmRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWVcbiAgICAgICAgICAgIC8vIEZldGNoIGRhdGEgZnJvbSBBUElcbiAgICAgICAgICAgIHRoaXMuJGh0dHAucG9zdCgnL2FwaS9hZG1pbi9uYXYtZ2V0c2hpcG1lbnQtdGFzay9zZWFyY2gnLCB7XG4gICAgICAgICAgICAgICAgc2VhcmNoOiB0aGlzLnNlYXJjaFRleHQsXG4gICAgICAgICAgICAgICAgcGFnZTogdGhpcy5zZXJ2ZXJPcHRpb25zLnBhZ2UsXG4gICAgICAgICAgICAgICAgcm93c1BlclBhZ2U6IHRoaXMuc2VydmVyT3B0aW9ucy5yb3dzUGVyUGFnZSxcbiAgICAgICAgICAgICAgICBzb3J0Qnk6IHRoaXMuc2VydmVyT3B0aW9ucy5zb3J0QnksXG4gICAgICAgICAgICAgICAgZGVzY2VuZGluZzogdGhpcy5zZXJ2ZXJPcHRpb25zLnNvcnRUeXBlID09PSAnZGVzYycsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcyA9IHJlc3BvbnNlLmRhdGEubmF2R2V0c2hpcG1lbnRUYXNrc1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZlckl0ZW1zTGVuZ3RoID0gcmVzcG9uc2UuZGF0YS5uYXZHZXRzaGlwbWVudFRhc2tzUm93c0NvdW50XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2hpcG1lbnRUYXNrID0gdGhpcy5pdGVtc1swXVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93VGFibGUgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICB9LCA1MDApLFxuICAgICAgICByb3dDbGljayhpdGVtKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygncmVkaXJlY3QnLCBpdGVtLmRlbGl2ZXJ5VGFza05vKTtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9hZG1pbi9uYXYtZ2V0c2hpcG1lbnQtdGFzay8nICsgaXRlbS5kZWxpdmVyeVRhc2tOb1xuXG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1vdW50ZWQoKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoKClcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZilcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdXJsLnBhdGhuYW1lLnNwbGl0KCcvJykucG9wKClcbiAgICB9LFxuICAgIHdhdGNoOiB7XG4gICAgICAgIHNlcnZlck9wdGlvbnM6IHtcbiAgICAgICAgICAgIGhhbmRsZXIobmV3VmFsLCBvbGRWYWwpIHtcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsLnNvcnRCeSAhPT0gb2xkVmFsLnNvcnRCeSB8fCBuZXdWYWwuc29ydFR5cGUgIT09IG9sZFZhbC5zb3J0VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZlck9wdGlvbnMucGFnZSA9IDFcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaCgpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVlcDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBzZWFyY2hUZXh0KCkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdGhpcy5zZWFyY2hUZXh0LnRyaW0oKVxuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJPcHRpb25zLnBhZ2UgPSAxXG4gICAgICAgICAgICB0aGlzLnNlYXJjaCgpXG4gICAgICAgIH1cbiAgICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi52dWUzLWVhc3ktZGF0YS10YWJsZSB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cbjwvc3R5bGU+IiwiXG4udGV4dCB7XG4gIGZvbnQ6IGJvbGQgMzBweCBzYW5zLXNlcmlmO1xufVxuLnRydWNrIHtcbiAgLy8gYmFja2dyb3VuZC1pbWFnZSA6IHVybCgnL2J1aWxkL2ltYWdlcy90cnVjay5zdmcnKTtcbn1cbiIsIlxuc3ZnLCBpbWFnZXtcbiAgei1pbmRleDoxMDA7XG4gIHBvc2l0aW9uOmFic29sdXRlO1xufVxuXG4udGV4dCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBmb250LWZhbWlseTogbW9ub3NwYWNlO1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICBmb250LXNpemU6IDMwcHg7XG59XG4iLCJcbi50ZXh0IHtcbiAgZm9udDogYm9sZCAzMHB4IHNhbnMtc2VyaWY7XG59XG4udHJ1Y2sge1xuICAvLyBiYWNrZ3JvdW5kLWltYWdlIDogdXJsKCcvYnVpbGQvaW1hZ2VzL3RydWNrLnN2ZycpO1xufVxuXG50ZXh0IHtcbiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xufVxudGV4dDo6c2VsZWN0aW9uIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xufVxuXG5pbWFnZXtcbnotaW5kZXg6LTE7XG5wb3NpdGlvbjpyZWxhdGl2ZTtcblxufVxuIiwiXG4uY2lyY2xlLWRyb3Age1xuICBzdHJva2U6ICM0MDQwNDA7XG4gIGZpbGw6IG5vbmU7XG4gIHN0cm9rZS1vcGFjaXR5OiAxO1xuICBzdHJva2Utd2lkdGg6IDcwO1xuICBzdHJva2UtZGFzaGFycmF5OiAxMDAgNC43MTtcbn1cblxuLmNpcmNsZS1kcm9wLXNlbGVjdGVkIHtcbiAgc3Ryb2tlOiAjZmZkODE0O1xuICBmaWxsOiBub25lO1xuICBzdHJva2Utb3BhY2l0eTogMC45O1xuICBzdHJva2Utd2lkdGg6IDcwO1xuICBzdHJva2UtZGFzaGFycmF5OiAxMDAuNzEgNTIzLjU5O1xufVxuXG4uZHJvcHBlci10ZXh0IHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGZvbnQtc2l6ZTogMzBweDtcbn1cblxudGV4dCB7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG4iLCI8dGVtcGxhdGU+XG4gICAgPGRpdiB2LWlmPVwic2hvd1dlaWdodFRvbGVyYW5jZUNvbnRlbnQgIT0gdHJ1ZVwiPlxuICAgICAgICA8cCBjbGFzcz1cInRleHQtbGVmdFwiPnt7ICRmaWx0ZXJzLnRyYW5zKCdlcnJvcl9yZXBvcnQuY3JlZGVudGlhbHNfcmVxdWlyZScpIH19PC9wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItM1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIHYtbW9kZWw9XCJwYXNzd29yZFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJwYXNzd29yZFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIEBjbGljaz1cImNoZWNrVXNlcigpXCIgdHlwZT1cImJ1dHRvblwiPnt7ICRmaWx0ZXJzLnRyYW5zKCdzYXZlLm1vcmUnKSB9fTwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgdi1lbHNlPVwic2hvd1dlaWdodFRvbGVyYW5jZUNvbnRlbnRcIj5cbiAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMTIgIGg1IHRleHQtbGVmdFwiPnt7ICRmaWx0ZXJzLnRyYW5zKCdlcnJvcl9yZXBvcnQud2VpZ2h0X3RvbGVyYW5jZV93ZWlnaHRzJykgfX08L2xhYmVsPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMlwiPlxuICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIndlaWdodFwiIHYtbW9kZWw9XCJzZWxlY3RlZFdlaWdodFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgOnJlcXVpcmVkPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+e3sgJGZpbHRlcnMudHJhbnMoJ2FsbCcpIH19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1mb3I9XCIod2VpZ2h0LCBrZXkpIGluIHdlaWdodHNcIiB2LWJpbmQ6dmFsdWU9XCJrZXlcIiAgPnt7d2VpZ2h0fX08L29wdGlvbj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWJsb2NrXCIgQGNsaWNrPVwic2F2ZVdlaWdodCgpXCIgdHlwZT1cImJ1dHRvblwiPnt7ICRmaWx0ZXJzLnRyYW5zKCdzYXZlLmFjdGlvbicpIH19PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiBcIldlaWdodFRvbGVyYW5jZUNvbXBvbmVudFwiLFxuICAgIGNvbXBvbmVudHM6IHtcblxuICAgIH0sXG4gICAgcHJvcHM6IHtcblxuICAgICAgICBtb2RlbFZhbHVlOiB7XG4gICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgICAgfSxcblxuICAgICAgICB3ZWlnaHRzOiB7XG4gICAgICAgICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgICB9LFxuICAgICAgICBhY3R1YWxXZWlnaHQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIFxuICAgIH0sXG4gICAgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgc2hvd1dlaWdodFRvbGVyYW5jZUNvbnRlbnQ6IGZhbHNlLFxuICAgICAgICAgICBwYXNzd29yZDogbnVsbCxcbiAgICAgICAgICAgd2VpZ2h0czogdGhpcy53ZWlnaHRzLFxuICAgICAgICAgICBzZWxlY3RlZFdlaWdodDogbnVsbCxcbiAgICAgICAgICAgYWN0dWFsV2VpZ2h0TnVtYmVyOiB0aGlzLmFjdHVhbFdlaWdodFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgbWV0aG9kczoge1xuXG4gICAgICAgIGNoZWNrVXNlcigpe1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLiRodHRwLnBvc3QoJy9hZG1pbi93ZWlnaHQtdG9sZXJhbmNlL3VzZXItY2hlY2snLCB7XG4gICAgICAgICAgICAgICAgJ3Bhc3N3b3JkJzogdGhpcy5wYXNzd29yZFxuICAgICAgICAgICAgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93V2VpZ2h0VG9sZXJhbmNlQ29udGVudCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRzd2FsKHRoaXMuJGZpbHRlcnMudHJhbnMoJ2Vycm9yX3JlcG9ydC5iYWRfY3JlZGVudGlhbHMnKSwgJycsICd3YXJuaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1dlaWdodFRvbGVyYW5jZUNvbnRlbnQgPSBmYWxzZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSxcblxuICAgICAgICBzYXZlV2VpZ2h0KCl7XG5cbiAgICAgICAgICAgIHRoaXMuYWN0dWFsV2VpZ2h0TnVtYmVyID0gdGhpcy5zZWxlY3RlZFdlaWdodFxuXG4gICAgICAgICAgICB0aGlzLiRodHRwLnBvc3QoJy9hZG1pbi93ZWlnaHQtdG9sZXJhbmNlL3NhdmUnLCB7XG4gICAgICAgICAgICAgICAgJ3dlaWdodF90b2xlcmFuY2UnOiB0aGlzLnNlbGVjdGVkV2VpZ2h0XG4gICAgICAgICAgICB9KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnJldHVybikge1xuICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dXZWlnaHRUb2xlcmFuY2VDb250ZW50ID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kc3dhbCh0aGlzLiRmaWx0ZXJzLnRyYW5zKCdzYXZlLnN1Y2Nlc3MnKSwgJycsICdzdWNjZXNzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdvblNhdmUnLCB0aGlzLmFjdHVhbFdlaWdodE51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJHN3YWwodGhpcy4kZmlsdGVycy50cmFucygnZXJyb3JfcmVwb3J0LmJhZF9jcmVkZW50aWFscycpLCAnJywgJ3dhcm5pbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbW91bnRlZCgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFdlaWdodCA9IHRoaXMuYWN0dWFsV2VpZ2h0TnVtYmVyXG4gICAgfSxcbiAgICB3YXRjaDoge1xuICAgICAgICBtb2RlbFZhbHVlICh2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd01vZGFsID0gdmFsXG4gICAgICAgIH0sXG4gICAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG5wcmUge1xuICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbn1cblxuLm1haW4tcGFja2FnZS1iYWRnZSB7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAwO1xufVxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gIFxuICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHRleHQtcmlnaHQgbWItNVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtci0yXCI+e3sgJGZpbHRlcnMudHJhbnMoJ2Vycm9yX3JlcG9ydC5hY3R1YWxfd2VpZ2h0X3RvbGVyYW5jZScpIH19IHt7IChhY3R1YWxXZWlnaHQgKiAxMDAgKSB9fSU8L3NwYW4+ICAgIFxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIEBjbGljaz1cIm9wZW5Nb2RhbFwiPnt7ICRmaWx0ZXJzLnRyYW5zKCdzYXZlLnVwZGF0ZScpIH19PC9idXR0b24+XG4gICAgICAgICAgPFdlaWdodFRvbGVyYW5jZU1vZGFsIDp3ZWlnaHRzID0gXCJ3ZWlnaHRzXCIgOmFjdHVhbFdlaWdodD1cImFjdHVhbFdlaWdodFwiIHYtbW9kZWw9XCJzaG93TW9kYWxcIiBAY2xvc2U9XCJzaG93TW9kYWwgPSBmYWxzZVwiIEBzYXZlPVwibmV3V2VpZ2h0ID0+KGFjdHVhbFdlaWdodCA9IG5ld1dlaWdodClcIi8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXZcbiAgICByZWY9XCJjb250YWluZXJCb3hcIlxuICAgIGlkPVwiY29udGFpbmVyQm94XCJcbiAgICBAdG91Y2htb3ZlPVwibW92ZURyYWdcIlxuICAgIEB0b3VjaHN0YXJ0PVwic3RhcnREcmFnXCJcbiAgICBAdG91Y2hlbmQ9XCJlbmREcmFnXCJcbiAgICBAZHJhZ2VudGVyLnByZXZlbnRcbiAgICBAZHJhZ292ZXIucHJldmVudFxuICA+XG4gICAgPHN2Z1xuICAgICAgcmVmPVwiYm94XCJcbiAgICAgIGNsYXNzPVwiYm94XCJcbiAgICAgIGlkPVwiZHJhZ0JveFwiXG4gICAgICB3aWR0aD1cIjE2MDBcIlxuICAgICAgaGVpZ2h0PVwiNjUwXCJcbiAgICAgIEBzY3JvbGwucHJldmVudFxuICAgICAgQG1vdXNlZG93bj1cIm1vdXNlRHJhZ1wiXG4gICAgICBAbW91c2V1cD1cIm1vdXNlRHJvcFwiXG4gICAgPlxuICAgICAgPHJlY3RcbiAgICAgICAgd2lkdGg9XCIxNjAwXCJcbiAgICAgICAgaGVpZ2h0PVwiNjUwXCJcbiAgICAgICAgZmlsbD1cIndoaXRlXCJcbiAgICAgICAgc3Ryb2tlPVwiYmxhY2tcIlxuICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcbiAgICAgIC8+XG5cbiAgICAgIDxyZWN0IHdpZHRoPVwiMTYwMFwiIGhlaWdodD1cIjIxMFwiIGZpbGw9XCIjYTZhM2EzXCIgLz5cblxuICAgICAgPHJlY3Qgd2lkdGg9XCIxNjAwXCIgaGVpZ2h0PVwiNTAwXCIgeT1cIjIxMFwiIGZpbGw9XCIjZTdlN2U3XCIgLz5cblxuICAgICAgPHRlbXBsYXRlIHYtZm9yPVwiKHBvcywgaW5kZXgpIGluIHRydWNrUG9zaXRpb25zXCI+XG4gICAgICAgIDxUcnVja1xuICAgICAgICAgIHYtaWY9XCJpbmRleCA9PT0gJzAnXCJcbiAgICAgICAgICAgIHJlZj1cInRydWNrc1wiXG4gICAgICAgICAgICA6a2V5PVwiJzAnXCJcbiAgICAgICAgICAgIDppbmRleD1cImluZGV4XCJcbiAgICAgICAgICAgIDpzdXBwbGllcj1cImdhdGVzU3VwcGxpZXJzW2luZGV4XVwiXG4gICAgICAgICAgICA6eD1cIjIwXCJcbiAgICAgICAgICAgIDp5PVwiMzAwXCJcbiAgICAgICAgICAgIDpkcmFnWD1cImRyYWcueFwiXG4gICAgICAgICAgICA6ZHJhZ1k9XCJkcmFnLnlcIlxuICAgICAgICAgICAgOnR5cGU9XCInZGlyZWN0LXRydWNrJ1wiXG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDxUcnVjayB2LWVsc2VcbiAgICAgICAgICAgIHJlZj1cInRydWNrc1wiXG4gICAgICAgICAgICA6a2V5PVwiaW5kZXhcIlxuICAgICAgICAgICAgOmluZGV4PVwiaW5kZXhcIlxuICAgICAgICAgICAgOnN1cHBsaWVyPVwiZ2F0ZXNTdXBwbGllcnNbaW5kZXhdXCJcbiAgICAgICAgICAgIDp4PVwicG9zXCJcbiAgICAgICAgICAgIDp5PVwiNVwiXG4gICAgICAgICAgICA6ZHJhZ1g9XCJkcmFnLnhcIlxuICAgICAgICAgICAgOmRyYWdZPVwiZHJhZy55XCJcbiAgICAgICAgICAgIDp0eXBlPVwiJ3RydWNrJ1wiXG4gICAgICAgICAgLz5cbiAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgIDx0ZW1wbGF0ZSB2LWZvcj1cIihwb3MsIGluZGV4KSBpbiB0cnVja1Bvc2l0aW9uc1wiPlxuICAgICAgICA8bGluZVxuICAgICAgICB2LWlmPVwiaW5kZXggIT09ICcwJ1wiXG4gICAgICAgIHYtc2hvdz1cImluZGV4IDwgZ2F0ZXNcIlxuICAgICAgICA6eDE9XCJwb3MgKyAxMjBcIlxuICAgICAgICB5MT1cIjExXCJcbiAgICAgICAgOngyPVwicG9zICsgMTIwXCJcbiAgICAgICAgeTI9XCIyMDBcIlxuICAgICAgICBzdHJva2U9XCJ3aGl0ZVwiXG4gICAgICAgIHN0cm9rZS13aWR0aD1cIjEwXCJcbiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT1cIjAgMzAgMFwiXG4gICAgICAvPlxuICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgPHJlY3Qgd2lkdGg9XCIxNjAwXCIgaGVpZ2h0PVwiMTVcIiB5PVwiMjEwXCIgZmlsbD1cIiM1NDU0NTRcIiAvPlxuICAgICAgPHJlY3RcbiAgICAgICAgOndpZHRoPVwiY2FudmFzTWFyZ2luZ1JpZ2h0XCJcbiAgICAgICAgOmhlaWdodD1cImNhbnZhc0hlaWdodFwiXG4gICAgICAgIDp4PVwiKGNhbnZhc1dpZHRoLWNhbnZhc01hcmdpbmdSaWdodClcIlxuICAgICAgICBmaWxsPVwiI2ZmZmZmZlwiXG4gICAgICAvPlxuXG4gICAgICA8dGV4dCA6eD1cImNhbnZhc1dpZHRoIC0gY2FudmFzTWFyZ2luZ1JpZ2h0ICsgMTVcIiB5PVwiNDBcIiBjbGFzcz1cInRleHQtZGFya1wiPlxuICAgICAgICB7eyAkZmlsdGVycy50cmFucygncGFja2V0X2dhdGVfc2V0dGluZ3MuZGVsaXZlcnlfc3VwcGxpZXJzJykgfX1cbiAgICAgIDwvdGV4dD5cblxuICAgICAgPFN1cHBsaWVyXG4gICAgICAgIHYtZm9yPVwiKHN1cHBsaWVyLCBpbmRleCkgaW4gc3VwcGxpZXJzRGF0YVwiXG4gICAgICAgIHJlZj1cInN1cHBsaWVyc1wiXG4gICAgICAgIDprZXk9XCJpbmRleFwiXG4gICAgICAgIDp4PVwiY2FudmFzV2lkdGggLSBjYW52YXNNYXJnaW5nUmlnaHQgKyAyXCJcbiAgICAgICAgOnk9XCIoaW5kZXggKyAxKSAqIDUwXCJcbiAgICAgICAgOmltYWdlPVwic3VwcGxpZXIuaW1hZ2VcIlxuICAgICAgICA6Y2M9XCJzdXBwbGllci5jY1wiXG4gICAgICAgIDpjb2RlPVwic3VwcGxpZXIuY29kZVwiXG4gICAgICAgIDp0ZXh0PVwic3VwcGxpZXIudGV4dFwiXG4gICAgICAgIDpyb3RhdGU9XCJmYWxzZVwiXG4gICAgICAvPlxuXG4gICAgICA8TW9iaWxDb252ZXlvclxuICAgICAgICB2LWZvcj1cIihkYXRhLCBpbmRleCkgaW4gbW9iaWxDb252ZXlvcnNcIlxuICAgICAgICByZWY9XCJjb252ZXlvcnNcIlxuICAgICAgICA6a2V5PVwiaW5kZXhcIlxuICAgICAgICA6aW5kZXg9XCJpbmRleFwiXG4gICAgICAgIDppc0Nyb3NzZWQ9XCIoY3Jvc3NlZENvbnZheW9yc1tpbmRleF0/dHJ1ZTpmYWxzZSlcIlxuICAgICAgICA6c3RhcnRYPVwiZGF0YS5zdGFydC54XCJcbiAgICAgICAgOnN0YXJ0WT1cImRhdGEuc3RhcnQueVwiXG4gICAgICAgIDplbmRYPVwiZGF0YS5lbmQueFwiXG4gICAgICAgIDplbmRZPVwiZGF0YS5lbmQueVwiXG4gICAgICAgIDpib3g9XCJjb250YWluZXJCb3hcIlxuICAgICAgICA6cG9zQ29udGFpbmVyWD1cInBvc0NvbnRhaW5lclhcIlxuICAgICAgICA6cG9zQ29udGFpbmVyWT1cInBvc0NvbnRhaW5lcllcIlxuICAgICAgLz5cblxuICAgICAgPERyb3BwZXIgOng9XCJkcm9wcGVyLnhcIiA6eT1cImRyb3BwZXIueVwiIDppbmRleD1cInNlbGVjdGVkQ29udmV5b3JJbmRleFwiIC8+XG4gICAgPC9zdmc+XG5cbiAgICA8YnV0dG9uIEBjbGljaz1cInN0b3JlXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgc3R5bGU9XCIgd2lkdGg6IDE0MDBweDsgZm9udC1zaXplOiAyOXB4OyBtYXJnaW4tdG9wOiAxMXB4O1wiPnt7ICRmaWx0ZXJzLnRyYW5zKCdzYXZlLmFjdGlvbicpIH19PC9idXR0b24+XG5cbiAgPC9kaXY+XG5cbjwvdGVtcGxhdGU+XG48c2NyaXB0PlxuLy8gMSAtMzEzLjUzIDsgMiAtNDE4LjUzOyAgMyAtNTIzLjUzO1xuaW1wb3J0IE1vYmlsQ29udmV5b3IgZnJvbSBcIi4vTW9iaWxDb252ZXlvci52dWVcIjtcbmltcG9ydCBTdXBwbGllciBmcm9tIFwiLi9TdXBwbGllci52dWVcIjtcbmltcG9ydCBUcnVjayBmcm9tIFwiLi9UcnVjay52dWVcIjtcbmltcG9ydCBEcm9wcGVyIGZyb20gXCIuL0Ryb3BwZXIudnVlXCI7XG5pbXBvcnQgeyBuZXh0VGljayB9IGZyb20gXCJ2dWVcIjtcblxuaW1wb3J0IFdlaWdodFRvbGVyYW5jZU1vZGFsIGZyb20gJy4vV2VpZ2h0VG9sZXJhbmNlTW9kYWwudnVlJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6IFwiUGFja2V0R2F0ZVNldHRpbmdzXCIsXG4gIGNvbXBvbmVudHM6IHtcbiAgICBUcnVjayxcbiAgICBNb2JpbENvbnZleW9yLFxuICAgIFN1cHBsaWVyLFxuICAgIERyb3BwZXIsXG4gICAgV2VpZ2h0VG9sZXJhbmNlTW9kYWxcbiAgfSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2VpZ2h0czogbnVsbCxcbiAgICAgIGFjdHVhbFdlaWdodDogbnVsbCxcbiAgICAgIHNob3dNb2RhbDogZmFsc2UsXG4gICAgICBjYW52YXNXaWR0aDogMTYwMCxcbiAgICAgIGNhbnZhc01hcmdpbmdSaWdodDogMjAwLFxuICAgICAgY2FudmFzSGVpZ2h0OiA2NTAsXG4gICAgICBzZWxlY3RlZFRydWNrOiBudWxsLFxuICAgICAgc2VsZWN0ZWRDb252ZXlvcjogbnVsbCxcbiAgICAgIHNlbGVjdGVkQ29udmV5b3JJbmRleDogbnVsbCxcbiAgICAgIHNlbGVjdGVkU3VwcGxpZXJJbmRleDogbnVsbCxcbiAgICAgIHNlbGVjdGVkU3VwcGxpZXI6IG51bGwsXG4gICAgICBzZWxlY3RlZFRydWNrU3VwcGxpZXI6IG51bGwsXG4gICAgICBoYXNDcm9zc0xpbmU6IGZhbHNlLFxuICAgICAgY3Jvc3NlZENvbnZheW9yczoge30sXG4gICAgICBkcmFnT2Zmc2V0WDogMCxcbiAgICAgIGRyYWdPZmZzZXRZOiAwLFxuICAgICAgZHJhZ0V2ZW50VHlwZTogbnVsbCxcbiAgICAgIHBvc0NvbnRhaW5lclg6IDAsXG4gICAgICBwb3NDb250YWluZXJZOiAwLFxuICAgICAgZ2F0ZXM6IDgsXG4gICAgICBjb250YWluZXJCb3g6IG51bGwsXG4gICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN1cHBsaWVyc0RhdGE6IG51bGwsXG4gICAgICB0cnVja1Bvc2l0aW9uczoge30sXG4gICAgICBnYXRlc1N1cHBsaWVyczoge30sXG4gICAgICBtb2JpbENvbnZleW9yczoge1xuICAgICAgICAxOiB7XG4gICAgICAgICAgcGF0aDogXCJcIixcbiAgICAgICAgICBnYXRlOiBudWxsLFxuICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICB4OiA2MDgsXG4gICAgICAgICAgICB5OiA2MTUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbmQ6IHtcbiAgICAgICAgICAgIHg6IDUwNixcbiAgICAgICAgICAgIHk6IDU4NixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhhbmRsZXI6IHtcbiAgICAgICAgICAgIHg6IDUwMixcbiAgICAgICAgICAgIHk6IDU2MixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICAyOiB7XG4gICAgICAgICAgcGF0aDogXCJcIixcbiAgICAgICAgICBnYXRlOiBudWxsLFxuICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICB4OiA2OTUsXG4gICAgICAgICAgICB5OiA1NzgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbmQ6IHtcbiAgICAgICAgICAgIHg6IDY5NCxcbiAgICAgICAgICAgIHk6IDQ2MixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhhbmRsZXI6IHtcbiAgICAgICAgICAgIHg6IDEwMCxcbiAgICAgICAgICAgIHk6IDEwMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICAzOiB7XG4gICAgICAgICAgcGF0aDogXCJcIixcbiAgICAgICAgICBnYXRlOiBudWxsLFxuICAgICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgICB4OiA3OTQsXG4gICAgICAgICAgICB5OiA2MzYsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbmQ6IHtcbiAgICAgICAgICAgIHg6IDg3OSxcbiAgICAgICAgICAgIHk6IDU2MixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhhbmRsZXI6IHtcbiAgICAgICAgICAgIHg6IDEwMCxcbiAgICAgICAgICAgIHk6IDEwMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGhhbmRsZXI6IHtcbiAgICAgICAgeDogMTAwLFxuICAgICAgICB5OiAxMDAsXG4gICAgICB9LFxuICAgICAgZHJhZzoge1xuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwLFxuICAgICAgfSxcbiAgICAgIGRyb3BwZXI6IHtcbiAgICAgICAgeDogMTAwLFxuICAgICAgICB5OiAxMDAsXG4gICAgICB9LFxuICAgIH07XG4gIH0sXG4gIG1vdW50ZWQoKSB7XG5cbiAgICB0aGlzLmxvYWRXZWlnaHRzKClcbiAgICB0aGlzLmxvYWQoKTtcbiAgICB3aW5kb3cub25zY3JvbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XG4gICAgfTtcbiAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICB0aGlzLnBvc0NvbnRhaW5lclggPSB0aGlzLiRyZWZzW1wiY29udGFpbmVyQm94XCJdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLng7XG4gICAgICB0aGlzLnBvc0NvbnRhaW5lclkgPSB0aGlzLiRyZWZzW1wiY29udGFpbmVyQm94XCJdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnk7XG4gICAgICAkKFwiYm9keVwiKS5hZGRDbGFzcyhcInN0b3Atc2Nyb2xsaW5nXCIpO1xuICAgIH0pO1xuXG4gICAgc2V0VGltZW91dChcbiAgICAgIGZ1bmN0aW9uIChzY29wZSkge1xuICAgICAgICBzY29wZS5wb3NDb250YWluZXJYID0gc2NvcGUuJHJlZnNbXG4gICAgICAgICAgXCJjb250YWluZXJCb3hcIlxuICAgICAgICBdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLng7XG4gICAgICAgIHNjb3BlLnBvc0NvbnRhaW5lclkgPSBzY29wZS4kcmVmc1tcbiAgICAgICAgICBcImNvbnRhaW5lckJveFwiXG4gICAgICAgIF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueTtcbiAgICAgIH0sXG4gICAgICAxMDAwLFxuICAgICAgdGhpc1xuICAgICk7XG5cbiAgICB0aGlzLmNvbnRhaW5lckJveCA9IHRoaXMuJHJlZnMuYm94O1xuXG4gICAgdGhpcy5kcm9wcGVyLnkgPSB0aGlzLmNhbnZhc0hlaWdodCArIDEwO1xuICAgIHRoaXMuZHJvcHBlci54ID0gKHRoaXMuY2FudmFzV2lkdGggLSB0aGlzLmNhbnZhc01hcmdpbmdSaWdodCkgLyAyO1xuXG4gICAgdmFyIHBwID0gdGhpcy5jYW52YXNXaWR0aCAtIHRoaXMuY2FudmFzTWFyZ2luZ1JpZ2h0IC0gdGhpcy5nYXRlcyAqIDIwO1xuICAgIHBwID0gKHBwIC0gdGhpcy5nYXRlcyAqIDEpIC8gdGhpcy5nYXRlcztcblxuICAgIC8vIEFkZCBkaXJlY3QgZGVsaXZlcnkgZ2F0ZVxuICAgIHRoaXMudHJ1Y2tQb3NpdGlvbnNbMF0gPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gdGhpcy5nYXRlczsgaSsrKSB7XG4gICAgICB0aGlzLnRydWNrUG9zaXRpb25zW2ldID0gaSAqIHBwIC0gMzA7XG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIGNvbGxlY3RlZERhdGEoKSB7XG4gICAgICB2YXIgZGF0YSA9IHt9O1xuXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnRydWNrUG9zaXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgZGF0YVtrZXldID0ge1xuICAgICAgICAgIHN1cHBsaWVyOiBudWxsLFxuICAgICAgICAgIGNvbnZleW9yOiBudWxsLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLmdhdGVzU3VwcGxpZXJzW2tleV0pXG4gICAgICAgICAgZGF0YVtrZXldLnN1cHBsaWVyID0gdGhpcy5nYXRlc1N1cHBsaWVyc1trZXldLmNvZGU7XG5cbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5tb2JpbENvbnZleW9ycykuZm9yRWFjaChmdW5jdGlvbiAoY2tleSkge1xuICAgICAgICAgIGlmICh0aGlzLm1vYmlsQ29udmV5b3JzW2NrZXldLmdhdGUgPT0ga2V5KSBkYXRhW2tleV0uY29udmV5b3IgPSBja2V5O1xuICAgICAgICB9LCB0aGlzKTtcbiAgICAgIH0sIHRoaXMpO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICAgIGN1cnNvcigpIHtcbiAgICAgIHJldHVybiBgY3Vyc29yOiAke3RoaXMuZHJhZ09mZnNldFggPyBcImdyYWJiaW5nXCIgOiBcImdyYWJcIn1gO1xuICAgIH0sXG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBzdG9yZSgpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLiRodHRwLnBvc3QoYC9hZG1pbi9hcGkvZ2F0ZS1zZXR0aW5ncy9zYXZlYCwgdGhpcy5jb2xsZWN0ZWREYXRhKS50aGVuKFxuICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLiRzd2FsKFxuICAgICAgICAgICAgICB0aGlzLiRmaWx0ZXJzLnRyYW5zKFwic2F2ZS5zdWNjZXNzXCIpLFxuICAgICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgICBcInN1Y2Nlc3NcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICB0aGlzLiRzd2FsKFxuICAgICAgICAgICAgICB0aGlzLiRmaWx0ZXJzLnRyYW5zKFwic2F2ZS5lcnJvclwiKSxcbiAgICAgICAgICAgICAgdGhpcy4kZmlsdGVycy50cmFucyhcbiAgICAgICAgICAgICAgICBcImVycm9yLlwiICsgcmVzcG9uc2UuZGF0YS5lcnJvclxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBcImVycm9yXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLiRzd2FsKFxuICAgICAgICAgICAgdGhpcy4kZmlsdGVycy50cmFucyhcInNhdmUuZXJyb3JcIiksXG4gICAgICAgICAgICB0aGlzLiRmaWx0ZXJzLnRyYW5zKFxuICAgICAgICAgICAgICBcImVycm9yLlwiICsgZXJyb3IucmVzcG9uc2UuZGF0YS5lcnJvclxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIFwiZXJyb3JcIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSxcbiAgICBsb2FkKCkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuJGh0dHAuZ2V0KFwiL2FwaS9nYXRlLXNldHRpbmdzXCIpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuZ2F0ZXNTdXBwbGllcnMgPSByZXNwb25zZS5kYXRhLmdhdGVzU3VwcGxpZXJzO1xuICAgICAgICB0aGlzLnN1cHBsaWVyc0RhdGEgPSByZXNwb25zZS5kYXRhLnN1cHBsaWVyc0RhdGE7XG5cblxuICAgICAgICBPYmplY3Qua2V5cyhyZXNwb25zZS5kYXRhLmNvbnZleW9yR2F0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIGlmICh0aGlzLm1vYmlsQ29udmV5b3JzW2tleV0pXG4gICAgICAgICAgICB0aGlzLm1vYmlsQ29udmV5b3JzW2tleV0uZ2F0ZSA9IHJlc3BvbnNlLmRhdGEuY29udmV5b3JHYXRlc1trZXldO1xuXG4gICAgICAgICAgdmFyIGNvbnZleW9ycyA9IHRoaXMuJHJlZnNbXCJjb252ZXlvcnNcIl07XG4gICAgICAgICAgdmFyIHRydWNrcyA9IHRoaXMuJHJlZnNbXCJ0cnVja3NcIl07XG4gICAgICAgICAgdmFyIHRydWNrID0gbnVsbDtcblxuICAgICAgICAgIE9iamVjdC5rZXlzKHRydWNrcykuZm9yRWFjaChmdW5jdGlvbiAodHJ1bmNrS2V5KSB7XG4gICAgICAgICAgICBpZiAodHJ1Y2tzW3RydW5ja0tleV0uaW5kZXggPT0gcGFyc2VJbnQocmVzcG9uc2UuZGF0YS5jb252ZXlvckdhdGVzW2tleV0pKSB7XG4gICAgICAgICAgICAgIHRydWNrID0gdHJ1Y2tzW3RydW5ja0tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgdGhpcyk7XG5cbiAgICAgICAgICBPYmplY3Qua2V5cyhjb252ZXlvcnMpLmZvckVhY2goZnVuY3Rpb24gKGNrZXkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbnZleW9yc1tja2V5XS5pbmRleCwga2V5KTtcbiAgICAgICAgICAgIGlmIChjb252ZXlvcnNbY2tleV0uaW5kZXggPT0ga2V5KSB7XG4gICAgICAgICAgICAgIGNvbnZleW9yc1tja2V5XS5zdGlja3kodHJ1Y2suaGFuZGxlUG9pbnRYLCB0cnVjay5oYW5kbGVQb2ludFkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9LCB0aGlzKTtcblxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgbW91c2VEcmFnKHsgb2Zmc2V0WCwgb2Zmc2V0WSB9KSB7XG4gICAgICB0aGlzLmRyYWdPZmZzZXRYID0gb2Zmc2V0WCAtIHRoaXMuZHJhZy54O1xuICAgICAgdGhpcy5kcmFnT2Zmc2V0WSA9IG9mZnNldFkgLSB0aGlzLmRyYWcueTtcblxuICAgICAgdGhpcy5kcmFnLnggPSBvZmZzZXRYOyAvLy0gdGhpcy5kcmFnT2Zmc2V0WDtcbiAgICAgIHRoaXMuZHJhZy55ID0gb2Zmc2V0WTsgLy8tIHRoaXMuZHJhZ09mZnNldFk7XG4gICAgICB0aGlzLmRldGVybWluZUV2ZW50KCk7XG5cbiAgICAgIHRoaXMuY29udGFpbmVyQm94LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhpcy5tb3ZlKTtcbiAgICB9LFxuICAgIG1vdXNlRHJvcCgpIHtcbiAgICAgIHRoaXMuZW5kRHJhZygpO1xuICAgICAgdGhpcy5kcmFnT2Zmc2V0WCA9IHRoaXMuZHJhZ09mZnNldFkgPSBudWxsO1xuICAgICAgdGhpcy5jb250YWluZXJCb3gucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCB0aGlzLm1vdmUpO1xuICAgIH0sXG5cbiAgICBkZXRlcm1pbmVFdmVudCgpIHtcbiAgICAgIHZhciBfc2VsZiA9IHRoaXM7XG5cbiAgICAgIHZhciBjb252ZXlvcnMgPSB0aGlzLiRyZWZzW1wiY29udmV5b3JzXCJdO1xuICAgICAgdmFyIHN1cHBsaWVycyA9IHRoaXMuJHJlZnNbXCJzdXBwbGllcnNcIl07XG4gICAgICB2YXIgdHJ1Y2tzID0gdGhpcy4kcmVmc1tcInRydWNrc1wiXTtcblxuICAgICAgdGhpcy5zZWxlY3RlZFRydWNrID0gbnVsbDtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUcnVja1N1cHBsaWVyID0gbnVsbDtcblxuICAgICAgT2JqZWN0LmtleXModHJ1Y2tzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKHRydWNrc1trZXldLnNlbGVjdGVkKSB7XG4gICAgICAgICAgX3NlbGYuc2VsZWN0ZWRUcnVjayA9IHRydWNrc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cnVja3Nba2V5XS5zdXBwbGllckRyYWdnZWQodGhpcy5kcmFnLngsIHRoaXMuZHJhZy55KSkge1xuICAgICAgICAgIC8vIGFsZXJ0KClcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVHJ1Y2tTdXBwbGllciA9IHRydWNrc1trZXldLmdldFN1cHBsaWVyKCk7XG4gICAgICAgICAgX3NlbGYuZHJhZ0V2ZW50VHlwZSA9IFwic3VwcGxpZXItcmVtb3ZlXCI7XG4gICAgICAgIH1cbiAgICAgIH0sIHRoaXMpO1xuXG4gICAgICBPYmplY3Qua2V5cyhjb252ZXlvcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoY29udmV5b3JzW2tleV0ucG9pbnRJbkNpcmNsZSh0aGlzLmRyYWcueCwgdGhpcy5kcmFnLnkpKSB7XG4gICAgICAgICAgX3NlbGYuc2VsZWN0ZWRDb252ZXlvckluZGV4ID0ga2V5O1xuICAgICAgICAgIF9zZWxmLmRyYWdFdmVudFR5cGUgPSBcImNvbnZleW9yXCI7XG5cbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFRydWNrID09IG51bGwpIHtcbiAgICAgICAgICAgIF9zZWxmLmRyYWdFdmVudFR5cGUgPSBcImNvbnZleW9yLXJlbW92ZVwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBfc2VsZi5kcmFnRXZlbnRUeXBlID0gXCJjb252ZXlvci1hZGRcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIHRoaXMpO1xuXG4gICAgICBPYmplY3Qua2V5cyhzdXBwbGllcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoc3VwcGxpZXJzW2tleV0ucG9pbnRJblJlY3QodGhpcy5kcmFnLngsIHRoaXMuZHJhZy55KSkge1xuICAgICAgICAgIF9zZWxmLnNlbGVjdGVkU3VwcGxpZXJJbmRleCA9IGtleTtcbiAgICAgICAgICBfc2VsZi5kcmFnRXZlbnRUeXBlID0gXCJzdXBwbGllclwiO1xuXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUcnVjayA9PSBudWxsKSB7XG4gICAgICAgICAgICBfc2VsZi5kcmFnRXZlbnRUeXBlID0gXCJzdXBwbGllci1hZGRcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3NlbGYuZHJhZ0V2ZW50VHlwZSA9IFwic3VwcGxpZXItcmVtb3ZlXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCB0aGlzKTtcbiAgICB9LFxuICAgIG1vdmUoeyBvZmZzZXRYLCBvZmZzZXRZIH0pIHtcbiAgICAgIHZhciBfc2VsZiA9IHRoaXM7XG5cbiAgICAgIHRoaXMuZHJhZy54ID0gb2Zmc2V0WDsgLy8tIHRoaXMuZHJhZ09mZnNldFg7XG4gICAgICB0aGlzLmRyYWcueSA9IG9mZnNldFk7IC8vLSB0aGlzLmRyYWdPZmZzZXRZO1xuXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZENvbnZleW9ySW5kZXggIT0gbnVsbCkge1xuICAgICAgICB0aGlzLiRyZWZzW1wiY29udmV5b3JzXCJdW3RoaXMuc2VsZWN0ZWRDb252ZXlvckluZGV4XS5zdGlja3koXG4gICAgICAgICAgdGhpcy5kcmFnLngsXG4gICAgICAgICAgdGhpcy5kcmFnLnlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkU3VwcGxpZXJJbmRleCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuJHJlZnNbXCJzdXBwbGllcnNcIl1bdGhpcy5zZWxlY3RlZFN1cHBsaWVySW5kZXhdLnN0aWNreShcbiAgICAgICAgICB0aGlzLmRyYWcueCxcbiAgICAgICAgICB0aGlzLmRyYWcueVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFRydWNrU3VwcGxpZXIgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVHJ1Y2tTdXBwbGllci5zdGlja3kodGhpcy5kcmFnLnggKyA2MCwgdGhpcy5kcmFnLnkgLSAxMTApO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBtb3ZlRHJhZyhldmVudCwgaXRlbSkge1xuICAgICAgdmFyIGNsaWVudFggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgICB2YXIgY2xpZW50WSA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WTtcblxuICAgICAgdGhpcy5kcmFnLnggPSBjbGllbnRYIC0gdGhpcy5wb3NDb250YWluZXJYO1xuICAgICAgdGhpcy5kcmFnLnkgPSBjbGllbnRZIC0gdGhpcy5wb3NDb250YWluZXJZO1xuXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZENvbnZleW9ySW5kZXggIT0gbnVsbCkge1xuICAgICAgICB0aGlzLiRyZWZzW1wiY29udmV5b3JzXCJdW3RoaXMuc2VsZWN0ZWRDb252ZXlvckluZGV4XS5zdGlja3koXG4gICAgICAgICAgdGhpcy5kcmFnLngsXG4gICAgICAgICAgdGhpcy5kcmFnLnlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkU3VwcGxpZXJJbmRleCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuJHJlZnNbXCJzdXBwbGllcnNcIl1bdGhpcy5zZWxlY3RlZFN1cHBsaWVySW5kZXhdLnN0aWNreShcbiAgICAgICAgICB0aGlzLmRyYWcueCxcbiAgICAgICAgICB0aGlzLmRyYWcueVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFRydWNrU3VwcGxpZXIgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVHJ1Y2tTdXBwbGllci5zdGlja3kodGhpcy5kcmFnLnggKyA2MCwgdGhpcy5kcmFnLnkgLSAxMTApO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3RhcnREcmFnKGV2ZW50LCBpdGVtKSB7XG4gICAgICB2YXIgY2xpZW50WCA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICAgIHZhciBjbGllbnRZID0gZXZlbnQudG91Y2hlc1swXS5jbGllbnRZO1xuXG4gICAgICB0aGlzLmRyYWcueCA9IGNsaWVudFggLSB0aGlzLnBvc0NvbnRhaW5lclg7XG4gICAgICB0aGlzLmRyYWcueSA9IGNsaWVudFkgLSB0aGlzLnBvc0NvbnRhaW5lclk7XG5cbiAgICAgIHRoaXMuZGV0ZXJtaW5lRXZlbnQoKTtcbiAgICB9LFxuICAgIHNlbGVjdFRydWNrKGNvbnZleW9yLCB0cnVjaykge1xuICAgICAgaWYgKHRydWNrID09IG51bGwgJiYgY29udmV5b3IgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLm1vYmlsQ29udmV5b3JzW2NvbnZleW9yLmluZGV4XS5nYXRlID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRydWNrICE9IG51bGwgJiYgY29udmV5b3IgIT0gbnVsbCkge1xuICAgICAgICAvKmNoZWNrIGNyb3NzIGxpbmVzKi9cbiAgICAgICAgdGhpcy5oYXNDcm9zc0xpbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jcm9zc2VkQ29udmF5b3JzID0ge307XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVHJ1Y2suaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMubW9iaWxDb252ZXlvcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKGNvbnZleW9yLmluZGV4IDwga2V5KSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0cnVjay5pbmRleCA+IHRoaXMubW9iaWxDb252ZXlvcnNba2V5XS5nYXRlICYmXG4gICAgICAgICAgICAgICAgdGhpcy5tb2JpbENvbnZleW9yc1trZXldLmdhdGUgIT0gbnVsbFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0Nyb3NzTGluZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jcm9zc2VkQ29udmF5b3JzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb252ZXlvci5pbmRleCA+IGtleSkge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdHJ1Y2suaW5kZXggPCB0aGlzLm1vYmlsQ29udmV5b3JzW2tleV0uZ2F0ZSAmJlxuICAgICAgICAgICAgICAgIHRoaXMubW9iaWxDb252ZXlvcnNba2V5XS5nYXRlICE9IG51bGxcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNDcm9zc0xpbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY3Jvc3NlZENvbnZheW9yc1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzQ3Jvc3NMaW5lKVxuICAgICAgICAgICAgICB0aGlzLm1vYmlsQ29udmV5b3JzW1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb252ZXlvci5pbmRleFxuICAgICAgICAgICAgICBdLmdhdGUgPSB0aGlzLnNlbGVjdGVkVHJ1Y2suaW5kZXg7XG4gICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNDcm9zc0xpbmUpIHtcbiAgICAgICAgICBjb252ZXlvci5hbmltYXRlKHRydWNrLmNsb3Nlc3RQb3NpdGlvbi54LCB0cnVjay5jbG9zZXN0UG9zaXRpb24ueSk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29udmV5b3Iuc3RpY2t5KHRydWNrLmhhbmRsZVBvaW50WCwgdHJ1Y2suaGFuZGxlUG9pbnRZKTtcbiAgICAgICAgY29udmV5b3IuYW5pbWF0ZSh0cnVjay5oYW5kbGVQb2ludFgsIHRydWNrLmhhbmRsZVBvaW50WSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBlbmREcmFnKCkge1xuICAgICAgdmFyIF9zZWxmID0gdGhpcztcblxuICAgICAgdmFyIHRydWNrcyA9IHRoaXMuJHJlZnNbXCJ0cnVja3NcIl07XG4gICAgICB2YXIgY29udmV5b3JzID0gdGhpcy4kcmVmc1tcImNvbnZleW9yc1wiXTtcbiAgICAgIHZhciBzdXBwbGllcnMgPSB0aGlzLiRyZWZzW1wic3VwcGxpZXJzXCJdO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkVHJ1Y2sgPSBudWxsO1xuICAgICAgdGhpcy5zZWxlY3RlZENvbnZleW9yID0gY29udmV5b3JzW3RoaXMuc2VsZWN0ZWRDb252ZXlvckluZGV4XTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdXBwbGllciA9IHN1cHBsaWVyc1t0aGlzLnNlbGVjdGVkU3VwcGxpZXJJbmRleF07XG5cbiAgICAgIGlmICghdGhpcy5pbkNhbnZhcygpICYmIHRoaXMuc2VsZWN0ZWRDb252ZXlvckluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbnZleW9yLnJlc2V0KCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBPYmplY3Qua2V5cyh0cnVja3MpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAodHJ1Y2tzW2tleV0uc2VsZWN0ZWQpIHtcbiAgICAgICAgICBfc2VsZi5zZWxlY3RlZFRydWNrID0gdHJ1Y2tzW2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFN1cHBsaWVySW5kZXggIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkU3VwcGxpZXIucmVzZXQoKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUcnVjayAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5nYXRlc1N1cHBsaWVyc1t0aGlzLnNlbGVjdGVkVHJ1Y2suaW5kZXhdID0gdGhpcy5zdXBwbGllcnNEYXRhW1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFN1cHBsaWVySW5kZXhcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkVHJ1Y2tTdXBwbGllciAhPSBudWxsKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVHJ1Y2sgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuZ2F0ZXNTdXBwbGllcnNbdGhpcy5zZWxlY3RlZFRydWNrU3VwcGxpZXIuZ2F0ZV0gPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZ2F0ZXNTdXBwbGllcnNbdGhpcy5zZWxlY3RlZFRydWNrU3VwcGxpZXIuZ2F0ZV0gPSBudWxsO1xuXG4gICAgICAgICAgT2JqZWN0LmtleXModGhpcy5zdXBwbGllcnNEYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5zdXBwbGllcnNEYXRhW2tleV0uY29kZSA9PSB0aGlzLnNlbGVjdGVkVHJ1Y2tTdXBwbGllci5jb2RlXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5nYXRlc1N1cHBsaWVyc1tcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVHJ1Y2suaW5kZXhcbiAgICAgICAgICAgICAgXSA9IHRoaXMuc3VwcGxpZXJzRGF0YVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUcnVja1N1cHBsaWVyLnJlc2V0KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRDb252ZXlvckluZGV4ID0gbnVsbDtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdXBwbGllckluZGV4ID0gbnVsbDtcbiAgICAgIHRoaXMuZHJhZ0V2ZW50VHlwZSA9IG51bGw7XG4gICAgICB0aGlzLnNlbGVjdGVkVHJ1Y2tTdXBwbGllciA9IG51bGw7XG5cbiAgICAgIHRoaXMuc2VsZWN0VHJ1Y2soX3NlbGYuc2VsZWN0ZWRDb252ZXlvciwgX3NlbGYuc2VsZWN0ZWRUcnVjayk7XG5cbiAgICAgIC8vIFJlc2V0IHNlbGVjdGVkIGNvbnZleW9yIGlmIHRydWNrIGlzIG5vdCBzZWxlY3RlZFxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb252ZXlvciAhPT0gbnVsbCAmJiB0aGlzLm1vYmlsQ29udmV5b3JzICYmIHRoaXMuc2VsZWN0ZWRDb252ZXlvciAmJiB0aGlzLm1vYmlsQ29udmV5b3JzW3RoaXMuc2VsZWN0ZWRDb252ZXlvci5pbmRleF0uZ2F0ZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb252ZXlvci5yZXNldCgpO1xuICAgICAgfVxuXG4gICAgfSxcbiAgICBpbkNhbnZhcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuZHJhZy54ID4gMCAmJlxuICAgICAgICB0aGlzLmRyYWcueCA8IDAgKyAodGhpcy5jYW52YXNXaWR0aCAtIHRoaXMuY2FudmFzTWFyZ2luZ1JpZ2h0KSAmJlxuICAgICAgICB0aGlzLmRyYWcueSA+IDAgJiZcbiAgICAgICAgdGhpcy5kcmFnLnkgPCAwICsgdGhpcy5jYW52YXNIZWlnaHRcbiAgICAgICk7XG4gICAgfSxcblxuICAgIG9wZW5Nb2RhbCgpe1xuICAgICAgdGhpcy5zaG93TW9kYWwgPSB0cnVlXG4gICAgfSxcblxuICAgIGxvYWRXZWlnaHRzKCl7XG5cbiAgICAgIHRoaXMuJGh0dHAucG9zdCgnL2FkbWluL3dlaWdodC10b2xlcmFuY2UvbGlzdCcsIHtcblxuICAgICAgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgIFxuICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgICAgIHRoaXMud2VpZ2h0cyA9IHJlc3BvbnNlLmRhdGEuaXRlbXNcbiAgICAgICAgICAgICAgdGhpcy5hY3R1YWxXZWlnaHQgPSByZXNwb25zZS5kYXRhLnNlbGVjdGVkXG4gICAgICAgICAgfVxuXG4gICAgICB9KVxuICAgIH0sXG4gIH0sXG4gIHdhdGNoOiB7fSxcbn07XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbi5ib3gge1xuICBtYXJnaW46IGF1dG87XG4gIHBvc2l0aW9uOiBjZW50ZXI7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuI2NvbnRhaW5lckJveCB7XG4gIHdpZHRoOiAxNjAwcHg7XG4gIGhlaWdodDogNjUwcHg7XG4gIHRvdWNoLWFjdGlvbjogbm9uZTtcbn1cbnN2ZyB7XG4gIHRvdWNoLWFjdGlvbjogbm9uZTtcbn1cbi5oYW5kbGVyOmhvdmVyIHtcbiAgZmlsbDogZ3JlZW47XG59XG4udGV4dCB7XG4gIGZvbnQ6IGJvbGQgNDBweCBzYW5zLXNlcmlmO1xuICBmaWxsOiAjZmZmZmZmO1xufVxuLnRleHQtZGFyayB7XG4gIGZvbnQ6IGJvbGQgMzBweCBzYW5zLXNlcmlmO1xuICBmaWxsOiAjNGU0ZTRlO1xufVxuXG50ZXh0IHtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cbjwvc3R5bGU+XG4iLCJcbi5saXN0LWdyb3VwLWl0ZW0ge1xuICAgIHBhZGRpbmc6IDAuNXJlbSAwLjVyZW07XG4gICAgY3Vyc29yOiBncmFiO1xufVxuXG4ubGlzdC1ncm91cCB7XG4gICAgbWluLWhlaWdodDogMzhweDtcbiAgICBiYWNrZ3JvdW5kOiAjZjFmMWYxO1xufVxuXG4ucG9zaXRpb24tY29sdW1ucyB7XG4gICAgaGVpZ2h0OiBmaXQtY29udGVudDtcbn1cblxuLndvcmtlcnMtbGlzdCB7XG4gICAgbWF4LWhlaWdodDogNjAwcHg7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xufVxuXG4ud29ya2Vycy1saXN0LW1vYmlsZSB7XG4gICAgbWF4LWhlaWdodDogMzAwcHg7XG59XG5cbi5yZW1vdmUtd29ya2VyIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdG9wOiAwLjVyZW07XG4gICAgcmlnaHQ6IDAuNXJlbTtcbn1cbiIsIlxuLnNpemUge1xuICAgIGhlaWdodDogMzByZW07XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xufVxuXG4uc3RpY2t5LXRvcCB7XG4gICAgei1pbmRleDogMTtcbiAgICB0aCB7XG4gICAgICAgIGJvcmRlci10b3A6IG5vbmU7XG4gICAgfVxufVxuIiwiPHRlbXBsYXRlPlxuXG48VGVsZXBvcnQgdG89XCIjZHJhd2VyLXRpdGxlXCI+SGliYWplbGVudMOpczwvVGVsZXBvcnQ+XG5cbiA8VGVsZXBvcnQgdG89XCIjZHJhd2VyXCI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPiAgICAgICAgICAgIFxuICAgICAgPGRpdiBjbGFzcz1cImNvbC04XCIgdi1pZj1cIiFlZGl0VGlja2V0XCIgPlxuICAgICAgICAgICA8aDIgY2xhc3M9XCJtdC0yXCIgdi1pZj1cIiFlZGl0VGlja2V0XCI+XG4gICAgICAgICAgICB7e3RpY2tldD8uY2F0ZWdvcnlfZGV0YWlscz8ubmFtZX19XG4gICAgICAgICAgPC9oMj4gICAgICAgICBcbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgdGV4dC1yaWdodFwiIHYtaWY9XCIhZWRpdFRpY2tldCAmJiB0aWNrZXQ/LnNvdXJjZSAhPT0gJ3BsYydcIiA+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4gYnRuLWxpbmsgcG9pbnRlclwiIEBjbGljaz1cImVkaXRUaWNrZXQ9dHJ1ZVwiPk3Ds2Rvc8OtdMOhczwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTggbWItMlwiIHYtaWY9XCJlZGl0VGlja2V0XCI+XG4gICAgICAgICAgIDxzZWxlY3QgbmFtZT1cImNhdGVnb3J5XCIgdi1tb2RlbD1cImNhdGVnb3J5XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdi1mb3I9XCJjYXRlZ29yeSBpbiBjYXRlZ29yaWVzXCIgOnZhbHVlPVwiY2F0ZWdvcnkuaWRcIj57e2NhdGVnb3J5Lm5hbWV9fTwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBtYi0yXCIgdi1pZj1cImVkaXRUaWNrZXRcIiA+XG4gICAgICAgICAgPHNlbGVjdCBuYW1lPVwic3RhdHVzXCIgdi1tb2RlbD1cInN0YXR1c1wiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgOmRpc2FibGVkPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2LWZvcj1cInN0YXR1cyBpbiBzdGF0dXNlc1wiIDp2YWx1ZT1cInN0YXR1cy5pZFwiPnt7c3RhdHVzLm5hbWV9fTwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgIFxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiIWVkaXRUaWNrZXRcIj57eyAoZXJyb3JSZXBvcnREZXRhaWxzICYmIGVycm9yUmVwb3J0RGV0YWlscy50aW1lKSA/IG1vbWVudChlcnJvclJlcG9ydERldGFpbHMudGltZSkuZm9ybWF0KCRmaWx0ZXJzLnRyYW5zKCdkYXRldGltZV9mb3JtYXRfc29ydCcpKSA6ICcnIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8aW5wdXQgdi1lbHNlIHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIG5hbWU9XCJkYXRldGltZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdi1tb2RlbD1cInRpbWVcIiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIiByZXF1aXJlZC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHRleHQtcmlnaHRcIj5cbiAgICAgICAgICAgIHt7ZXJyb3JSZXBvcnREZXRhaWxzPy5jcmVhdG9yfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgPGRpdiB2LWlmPVwidGlja2V0Py5leHRlcm5hbF9pZFwiIGNsYXNzPVwiZGVzY3JpcHRpb24tbmF2LWdldC1zaGlwbWVudC10YXNrXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OiAxO1wiPlxuICAgICAgICAgICAgICAgIDxiPnt7dGlja2V0LmV4dGVybmFsX2lkfX08L2I+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGEgdHlwZT1cImJ1dHRvblwiIDpocmVmPVwiJy9hZG1pbi9uYXYtZ2V0c2hpcG1lbnQtdGFzay8nICsgdGlja2V0LmV4dGVybmFsX2lkXCIgdGFyZ2V0PVwiX3RhcmdldFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSAgYnRuLXByaW1hcnkgZHJvcGRvd24tdG9nZ2xlIGRyb3Bkb3duLXRvZ2dsZS1zcGxpdFwiID5cbiAgICAgICAgICAgICAgICAgICAgTWVnbnlpdMOhc1xuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIiB2LWlmPVwiKCFlZGl0VGlja2V0IHx8IGRpc2FibGVkKSAmJiBlcnJvclJlcG9ydERldGFpbHM/LmRlc2NyaXB0aW9uXCIgdi1odG1sPVwiZXJyb3JSZXBvcnREZXRhaWxzPy5kZXNjcmlwdGlvblwiPjwvZGl2PlxuXG4gICAgPFF1aWxsRWRpdG9yIHYtZWxzZVxuICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDBweDtcIlxuICAgICAgbmFtZT1cImRlc2NyaXB0aW9uXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGVkaXRvciBlcnJvcl9zb2x1dGlvblwiXG4gICAgICB2LW1vZGVsOmNvbnRlbnQ9XCJkZXNjcmlwdGlvblwiXG4gICAgICB2LW1vZGVsPVwiZGVzY3JpcHRpb25cIlxuICAgICAgY29udGVudFR5cGU9XCJodG1sXCIvPlxuICAgIFxuXG4gICAgPGRpdiB2LWlmPVwidGlja2V0Py5jYXRlZ29yeV9kZXRhaWxzPy5zb2x1dGlvbnMgJiYgdGlja2V0Py5jYXRlZ29yeV9kZXRhaWxzPy5zb2x1dGlvbnMubGVuZ3RoID4gMFwiID5cbiAgICAgICAgICA8c2VsZWN0ICBuYW1lPVwiY2F0ZWdvcnlcIiB2LW1vZGVsPVwicXVpY2tfc29sdXRpb25cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIDpkaXNhYmxlZD1cImRpc2FibGVkID09IDFcIj5cbiAgICAgICAgICAgIDxvcHRpb24gIDp2YWx1ZT1cIjBcIiA+VsOhbGFzc3pvbiBneW9ycyBtZWdvbGTDoXN0PC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHYtZm9yPVwic29sdXRpb24gaW4gdGlja2V0Py5jYXRlZ29yeV9kZXRhaWxzPy5zb2x1dGlvbnNcIiA6dmFsdWU9XCJzb2x1dGlvbi5pZFwiID57e3NvbHV0aW9uLmRlc2NyaXB0aW9ufX08L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICA8L2Rpdj4gICAgICAgICAgICAgIFxuXG4gPGRpdiBjbGFzcz1cInJvdyBtYi0yXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+IFxuICAgICAgICA8Yj57eyAkZmlsdGVycy50cmFucygnZXJyb3JfcmVwb3J0LnNvbHV0aW9uJykgfX08L2I+XG4gICAgICAgIDxRdWlsbEVkaXRvciAgdi1pZj1cIihlcnJvclJlcG9ydERldGFpbHMgJiYgICghZXJyb3JSZXBvcnREZXRhaWxzLmNsb3NlZF9hdCB8fCBlZGl0VGlja2V0KSApXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwcHg7XCIgXG4gICAgICAgICAgICAgICAgICBuYW1lPVwic29sdXRpb25cIiBcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGVkaXRvciBlcnJvcl9zb2x1dGlvblwiIFxuICAgICAgICAgICAgICAgICAgdi1tb2RlbDpjb250ZW50PVwic29sdXRpb25cIiBcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJzb2x1dGlvblwiXG4gICAgICAgICAgICAgICAgICBjb250ZW50VHlwZT1cImh0bWxcIi8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzb2x1dGlvblwiIHYtaWY9XCIoZXJyb3JSZXBvcnREZXRhaWxzICYmIGVycm9yUmVwb3J0RGV0YWlscy5jbG9zZWRfYXQgJiYgIWVkaXRUaWNrZXQpXCIgdi1odG1sPVwiZXJyb3JSZXBvcnREZXRhaWxzPy5zb2x1dGlvbiBcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuPC9kaXY+XG4gXG5cbiA8ZGl2IGNsYXNzPVwicm93IG1iLTJcIiB2LWlmPVwidGlja2V0Py5zb3VyY2UgIT09ICdwbGMnXCIgPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiIHYtaWY9XCIhZWRpdFRpY2tldFwiPlxuICAgICAgICA8Yj57eyAkZmlsdGVycy50cmFucygnZXJyb3JfcmVwb3J0LnJlc3BvbnNpYmxlJykgfX06IDwvYj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvIGJhZGdlLXBpbGwgbm90aWZ5LW5vICBtbC0xXCIgdi1mb3I9XCJyZXNwb25zaWJsZSBpbiB0aWNrZXQ/LnJlc3BvbnNpYmxlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpXCIgOnRpdGxlPVwicmVzcG9uc2libGUuY29udGFjdF9lbWFpbFwiPnt7cmVzcG9uc2libGUubmFtZX19IDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgdi1lbHNlPlxuICAgICAgPGJyPlxuICAgICAgICA8YiBjbGFzcz1cIm1iLTJcIj57eyAkZmlsdGVycy50cmFucygnZXJyb3JfcmVwb3J0LnJlc3BvbnNpYmxlJykgfX06IDwvYj5cbiAgICAgICAgPGJyPlxuICAgICAgICA8YnI+XG4gICAgICAgIDxzcGFuIHYtZm9yPVwic3VwcGxpZXIgaW4gc3VwcGxpZXJzXCIgY2xhc3M9XCJtbC0zXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFxuICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgOm5hbWU9XCInc3VwcGxpZXJfJytzdXBwbGllci5pZFwiIFxuICAgICAgICAgICAgICAgICAgOmlkPVwiJ3N1cHBsaWVyXycrc3VwcGxpZXIuaWRcIiBcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJzdXBwbGllci5zZWxlY3RlZFwiIC8+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPGxhYmVsIDpmb3I9XCInc3VwcGxpZXJfJytzdXBwbGllci5pZFwiPiZuYnNwO3t7c3VwcGxpZXIubmFtZX19ICh7e3N1cHBsaWVyLmNvbnRhY3RfcGhvbmV9fSk8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxici8+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuPC9kaXY+IFxuIDxkaXYgY2xhc3M9XCJyb3cgbWItMlwiIHYtaWY9XCIoZXJyb3JSZXBvcnREZXRhaWxzICYmIGVycm9yUmVwb3J0RGV0YWlscy5jbG9zZWRfYXQpXCIgPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiID5cbiAgICAgICAgPGI+XG4gICAgICAgICAgICA8c3Bhbj5MZXrDoXJ2YTogPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3sgKGVycm9yUmVwb3J0RGV0YWlscyAmJiBlcnJvclJlcG9ydERldGFpbHMuY2xvc2VkX2F0KSA/IG1vbWVudChlcnJvclJlcG9ydERldGFpbHMuY2xvc2VkX2F0LmRhdGUpLmZvcm1hdCgkZmlsdGVycy50cmFucygnZGF0ZXRpbWVfZm9ybWF0JykpIDogJycgfX08L3NwYW4+XG4gICAgICAgIDwvYj5cbiAgICAgIDwvZGl2PiBcbjwvZGl2PiBcbiAgXG4gIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG48L1RlbGVwb3J0PiBcblxuPFRlbGVwb3J0IHRvPVwiI2RyYXdlci1idXR0b25zXCI+XG4gICA8ZGl2IGNsYXNzPVwiYnV0dG9uc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMlwiID5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPiAgICAgICAgXG4gICAgICAgIDxidXR0b24gQGNsaWNrPVwiY2FuY2VsXCIgY2xhc3M9XCJidG4gYnRuIGJ0bi1sZyBtbC0yXCI+XG4gICAgICAgIDxzcGFuIHYtaWY9XCJlZGl0VGlja2V0XCI+TcOpZ3NlPC9zcGFuPlxuICAgICAgICA8c3BhbiB2LWVsc2U+QmV6w6Fyw6FzPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHRleHQtcmlnaHRcIj4gICAgICAgIFxuICAgICAgICA8YnV0dG9uIHYtaWY9XCIoZXJyb3JSZXBvcnREZXRhaWxzICYmICFlcnJvclJlcG9ydERldGFpbHMuY2xvc2VkX2F0ICYmICFlZGl0VGlja2V0KVwiIEBjbGljaz1cImNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWxnIG1sLTJcIj57eyAkZmlsdGVycy50cmFucygnZXJyb3JfcmVwb3J0LnRpY2tldF9jbG9zZScpIH19PC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdi1pZj1cImVkaXRUaWNrZXRcIiAgQGNsaWNrPVwic2F2ZVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBtbC0yXCI+e3sgJGZpbHRlcnMudHJhbnMoJ2Vycm9yX3JlcG9ydC50aWNrZXRfc2F2ZScpIH19PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gXG4gPC9kaXY+XG48L1RlbGVwb3J0PiBcblxuXG48L3RlbXBsYXRlPlxuPHNjcmlwdD5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xuaW1wb3J0IHsgUXVpbGxFZGl0b3IgfSBmcm9tICdAdnVldXAvdnVlLXF1aWxsJ1xuaW1wb3J0ICdAdnVldXAvdnVlLXF1aWxsL2Rpc3QvdnVlLXF1aWxsLnNub3cuY3NzJztcblxuaW1wb3J0IGV2ZW50QnVzIGZyb20gJy4vY29tbW9uL2V2ZW50QnVzJ1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIG5hbWU6IFwiRXJyb3JSZXBvcnRDb21wb25lbnRcIixcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICBRdWlsbEVkaXRvclxuICAgIH0sXG4gICAgcHJvcHM6IHtcbiAgICAgICAgZXJyb3JSZXBvcnQ6IHtcbiAgICAgICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yUmVwb3J0RGV0YWlsczogbnVsbCxcbiAgICAgICAgICAgIGVkaXRUaWNrZXQ6IGZhbHNlLFxuICAgICAgICAgICAgdGlja2V0OiBudWxsLFxuICAgICAgICAgICAgbW9tZW50LFxuICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICBzYXZlTG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICBzdGF0dXNlczogbnVsbCxcbiAgICAgICAgICAgIGNhdGVnb3JpZXM6IG51bGwsXG4gICAgICAgICAgICBzdXBwbGllcnM6IG51bGwsXG4gICAgICAgICAgICB2aWV3OiBmYWxzZSxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1czogbnVsbCxcbiAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGNhdGVnb3J5OiBudWxsLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICcnLFxuICAgICAgICAgICAgdGltZTogbnVsbCxcbiAgICAgICAgICAgIHBhY2thZ2U6IG51bGwsXG4gICAgICAgICAgICBjbG9zYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBsYWRpbmdQYWNrYWdlOiBmYWxzZSxcbiAgICAgICAgICAgIHNvbHV0aW9uX2Rpc2FibGVkOiB0cnVlLFxuICAgICAgICAgICAgc29sdXRpb246ICcnLFxuICAgICAgICAgICAgcXVpY2tfc29sdXRpb246IDAsXG4gICAgICAgICAgICBqdXN0X29wZW5lZDogdHJ1ZVxuICAgICAgICB9O1xuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgICBjYW5jZWwoKSB7XG4gICAgICAgICAgaWYodGhpcy5lZGl0VGlja2V0KXsgXG4gICAgICAgICAgICB0aGlzLmVkaXRUaWNrZXQgPSBmYWxzZTtcbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgZXZlbnRCdXMuJGVtaXQoJ2Nsb3NlLWRyYXdlcicgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbG9hZEV4dGVybmFsUGFja2luZ0RhdGEoaWQpIHtcbiAgICAgICAgICB0aGlzLnBhY2thZ2UgPSBudWxsO1xuICAgICAgICAgIGlmKGlkIT1udWxsKXtcbiAgICAgICAgICB0aGlzLmxhZGluZ1BhY2thZ2UgPSB0cnVlOyAgIFxuICAgICAgICAgICAgICB0aGlzLiRodHRwLmdldChgL2FwaS9hZG1pbi9uYXYtZ2V0c2hpcG1lbnQtdGFzay8ke2lkfWApXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgIHRoaXMucGFja2FnZT0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICAgICB0aGlzLmxhZGluZ1BhY2thZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFkaW5nUGFja2FnZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRFcnJvclJlcG9ydERldGFpbHMoKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yUmVwb3J0RGV0YWlscyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOyBcblxuICAgICAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICBpZighdGhpcy5lcnJvclJlcG9ydC5pZCkgdGhpcy5lcnJvclJlcG9ydC5pZCA9IDA7XG4gICAgICAgICAgICB0aGlzLiRodHRwLmdldChgL2FwaS9hZG1pbi9lcnJvci1yZXBvcnQvJHt0aGlzLmVycm9yUmVwb3J0LmlkfWApXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvclJlcG9ydERldGFpbHMgPSByZXNwb25zZS5kYXRhLnRpY2tldDtcbiAgICAgICAgICAgICAgICAgIHNlbGYudGlja2V0ICA9IHJlc3BvbnNlLmRhdGEudGlja2V0O1xuICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0dXNlcyA9IHJlc3BvbnNlLmRhdGEuc3RhdHVzZXM7XG4gICAgICAgICAgICAgICAgICBzZWxmLmNhdGVnb3JpZXMgPSByZXNwb25zZS5kYXRhLmNhdGVnb3JpZXM7XG4gICAgICAgICAgICAgICAgICBzZWxmLnN1cHBsaWVycyA9IHJlc3BvbnNlLmRhdGEuc3VwcGxpZXJzO1xuICAgICAgICAgICAgICAgICAgc2VsZi5zb2x1dGlvbiA9IHJlc3BvbnNlLmRhdGEuc29sdXRpb247XG4gICAgICAgICAgICAgICAgICBzZWxmLnRpY2tldC5jYXRlZ29yeV9kZXRhaWxzICA9IHNlbGYuZXJyb3JSZXBvcnREZXRhaWxzLmNhdGVnb3J5O1xuXG4gICAgICAgICAgICAgICAgICBzZWxmLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0dXMgPSAoc2VsZi5lcnJvclJlcG9ydERldGFpbHMuaWQgIT0gMD9zZWxmLmVycm9yUmVwb3J0RGV0YWlscz8uc3RhdHVzLmlkOjEpO1xuICAgICAgICAgICAgICAgICAgc2VsZi5jYXRlZ29yeSA9IChzZWxmLmVycm9yUmVwb3J0RGV0YWlscy5jYXRlZ29yeT9zZWxmLmVycm9yUmVwb3J0RGV0YWlscy5jYXRlZ29yeS5pZDoxKTtcbiAgICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSAoc2VsZi5lcnJvclJlcG9ydERldGFpbHMuaWQgIT0gMD9zZWxmLmVycm9yUmVwb3J0RGV0YWlscy5kZXNjcmlwdGlvbjonJyk7XG4gICAgICAgICAgICAgICAgICBzZWxmLnRpbWUgPSBtb21lbnQoc2VsZi5lcnJvclJlcG9ydERldGFpbHMudGltZS5kYXRlKS5mb3JtYXQoc2VsZi4kZmlsdGVycy50cmFucygnZGF0ZXRpbWVfZm9ybWF0X2lucHV0JykpO1xuICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zYWJsZSA9IChzZWxmLmVycm9yUmVwb3J0RGV0YWlscy5pZCA/IHRydWU6ZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgc2VsZi5xdWlja19zb2x1dGlvbiA9IChzZWxmLnRpY2tldC5xdWlja19zb2x1dGlvbiA/IHNlbGYudGlja2V0LnF1aWNrX3NvbHV0aW9uLmlkOjApO1xuXG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRFeHRlcm5hbFBhY2tpbmdEYXRhKHNlbGYudGlja2V0LmV4dGVybmFsX2lkKTtcbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgaWYoc2VsZi5lcnJvclJlcG9ydERldGFpbHMuc3RhdHVzICE9IDMgfHwgc2VsZi5lcnJvclJlcG9ydERldGFpbHMuc29sdXRpb24gIT0gJycpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc29sdXRpb25fZGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPD1zZWxmLnN1cHBsaWVycy5sZW5ndGggLTE7IGkrKyl7XG4gICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdXBwbGllcnNbaV0uc2VsZWN0ZWQgID0gc2VsZi5lcnJvclJlcG9ydERldGFpbHMucmVzcG9uc2libGUubWFwKGUgPT4gZS5pZCkuaW5jbHVkZXMoIHNlbGYuc3VwcGxpZXJzW2ldLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuanVzdF9vcGVuZWQgPSB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBzYXZlKCkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgICAgIGlmKHNlbGYuc29sdXRpb249PScnICYmIHNlbGYuc29sdXRpb25fZGlzYWJsZWQgPT0gZmFsc2Upe1xuICAgICAgICAgICAgICB0aGlzLiRzd2FsKHRoaXMuJGZpbHRlcnMudHJhbnMoJ2Vycm9yX3JlcG9ydC5zb2x1dGlvbl9kZXNjJyksICcnLCAnd2FybmluZycpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKHNlbGYuZGVzY3JpcHRpb249PScnIHx8IHNlbGYuZGVzY3JpcHRpb24gPT0gbnVsbCl7XG4gICAgICAgICAgICAgIHRoaXMuJHN3YWwodGhpcy4kZmlsdGVycy50cmFucygnZXJyb3JfcmVwb3J0Lm1pc3NpbmdfZGVzYycpLCAnJywgJ3dhcm5pbmcnKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihzZWxmLnRpbWU9PScnIHx8IHNlbGYudGltZSA9PSBudWxsKXtcbiAgICAgICAgICAgICAgdGhpcy4kc3dhbCh0aGlzLiRmaWx0ZXJzLnRyYW5zKCdlcnJvcl9yZXBvcnQubWlzc2luZ190aW1lJyksICcnLCAnd2FybmluZycpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuJGh0dHAucG9zdChgL2FwaS9hZG1pbi9lcnJvci1yZXBvcnQvJHt0aGlzLmVycm9yUmVwb3J0LmlkfS91cGRhdGVgLFxuICAgICAgICAgICAgICB0aGlzLmVycm9yUmVwb3J0RGV0YWlsc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuJHN3YWwodGhpcy4kZmlsdGVycy50cmFucygnU2lrZXJlcyBtxbF2ZWxldCcpLCAnJywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdvblNhdmUnKTtcbiAgICAgICAgICAgICAgICAgZXZlbnRCdXMuJGVtaXQoJ25ldy1lcnJvci1yZXBvcnQtc2F2ZWQnKVxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdFRpY2tldCA9IGZhbHNlICBcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLiRzd2FsKHRoaXMuJGZpbHRlcnMudHJhbnMoJ1Npa2VydGVsZW4gbcWxdmVsZXQnKSwgJycsICdlcnJvcicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgIFxuICAgICAgICB9LFxuICAgICAgICBjbG9zZSgpIHtcbiAgICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgXG4gICAgICAgICAgaWYoKHRoaXMuc29sdXRpb24gPT0gJycgfHwgIHRoaXMuc29sdXRpb24gPT0nPHA+PGJyPjwvcD4nIHx8IHRoaXMuc29sdXRpb24gPT0gbnVsbCkgJiYgdGhpcy5xdWlja19zb2x1dGlvbiA9PSAwICl7XG4gICAgICAgICAgICB0aGlzLiRzd2FsKHRoaXMuJGZpbHRlcnMudHJhbnMoJ2Vycm9yX3JlcG9ydC5zb2x1dGlvbl9kZXNjJyksICcnLCAnd2FybmluZycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICAgXG4gICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy4kaHR0cC5wb3N0KGAvYXBpL2FkbWluL2Vycm9yLXJlcG9ydC8ke3RoaXMuZXJyb3JSZXBvcnQuaWR9L2Nsb3NlYCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNvbHV0aW9uOiB0aGlzLnNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHF1aWNrX3NvbHV0aW9uIDogdGhpcy5xdWlja19zb2x1dGlvbixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICB0aGlzLiRzd2FsKHRoaXMuJGZpbHRlcnMudHJhbnMoJ0hpYmFqZWd5IGxlesOhcsOhc2Egc2lrZXJlcycpLCAnJywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnb25TYXZlJyk7XG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgZXZlbnRCdXMuJGVtaXQoJ25ldy1lcnJvci1yZXBvcnQtc2F2ZWQnKVxuXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBzd2l0Y2gyRWRpdCgpe1xuICAgICAgICAgIGlmKCB0aGlzLmVkaXRpbmcgKSB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICBlbHNlIHRoaXMuZWRpdGluZyA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGluQXJyYXkobmVlZGxlLCBoYXlzdGFjayl7XG4gICAgICAgICAgaGF5c3RhY2suZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmlkID09IG5lZWRsZS5pZCkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSk7IHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgbG9hZFN1cHBsaWVyc1RvQ2F0ZWdvcnkoKXtcbiAgICAgICAgICB0aGlzLiRodHRwLmdldChgL2FwaS9hZG1pbi9lcnJvci1yZXBvcnQvZ2V0LXN1cHBsaWVycy1ieS1jYXRlZ29yeS8ke3RoaXMuY2F0ZWdvcnl9YClcbiAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcblxuICAgICAgICAgICAgICAgICAgZm9yKGxldCBpPTA7IGk8PXRoaXMuc3VwcGxpZXJzLmxlbmd0aC0xOyBpKyspe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1cHBsaWVyc1tpXS5zZWxlY3RlZD1mYWxzZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgZm9yKGxldCBpPTA7IGk8PXJlc3BvbnNlLmRhdGEubGVuZ3RoLTE7IGkrKyl7XG4gICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1cHBsaWVyc1tyZXNwb25zZS5kYXRhW2ldLmlkXS5zZWxlY3RlZD10cnVlO1xuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbW91bnRlZCgpIHtcbiAgICAgIHRoaXMuZXJyb3JSZXBvcnREZXRhaWxzID0gdGhpcy5nZXRFcnJvclJlcG9ydERldGFpbHMoKTtcbiAgICAgICAgaWYoIHRoaXMuZXJyb3JSZXBvcnQuaWQgKXtcbiAgICAgICAgICAvL3RoaXMuZXJyb3JSZXBvcnREZXRhaWxzID0gdGhpcy5nZXRFcnJvclJlcG9ydERldGFpbHMoKTtcbiAgICAgICAgICB0aGlzLnZpZXcgPSB0cnVlO1xuICAgICAgICAgIGlmKHRoaXMuZXJyb3JSZXBvcnQuY2xvc2VkX2F0KVxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA9IDE7XG5cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgLy90aGlzLmVycm9yUmVwb3J0RGV0YWlscyA9IG51bGw7XG4gICAgICAgICAgdGhpcy52aWV3ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHdhdGNoOiB7XG4gICAgICBlcnJvclJlcG9ydCA6e1xuICAgICAgICAgICAgaGFuZGxlcihuZXdWYWwpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JSZXBvcnREZXRhaWxzID0gdGhpcy5nZXRFcnJvclJlcG9ydERldGFpbHMoKTsgXG4gICAgICAgICAgICB0aGlzLmVkaXRUaWNrZXQgPSBmYWxzZTsgXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVlcDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgc3VwcGxpZXJzIDp7XG4gICAgICAgICAgICBoYW5kbGVyKG5ld1ZhbCkge1xuICAgICAgICAgICAgICB0aGlzLmVycm9yUmVwb3J0RGV0YWlscy5yZXNwb25zaWJsZSA9IHRoaXMuc3VwcGxpZXJzO1xuICAgICAgICAgICAgICAvL3RoaXMuc3VwcGxpZXJzID0gdGhpcy5lcnJvclJlcG9ydERldGFpbHMucmVzcG9uc2libGU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZGVlcDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgc3RhdHVzIDp7XG4gICAgICAgICAgICBoYW5kbGVyKG5ld1ZhbCkge1xuICAgICAgICAgICAgICB0aGlzLmVycm9yUmVwb3J0RGV0YWlscy5zdGF0dXMgPSB0aGlzLnN0YXR1cztcbiAgICAgICAgICAgICAgaWYodGhpcy5lcnJvclJlcG9ydERldGFpbHMuc3RhdHVzID09IDMpXG4gICAgICAgICAgICAgICAgdGhpcy5zb2x1dGlvbl9kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgICAgIC8vdGhpcy5lcnJvclJlcG9ydERldGFpbHMuc29sdXRpb24gPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnNvbHV0aW9uX2Rpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfSBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWVwOiB0cnVlXG4gICAgICAgIH0sY2F0ZWdvcnkgOntcbiAgICAgICAgICAgIGhhbmRsZXIobmV3VmFsKSB7XG4gICAgICAgICAgICAgIHRoaXMuZXJyb3JSZXBvcnREZXRhaWxzLmNhdGVnb3J5ID0gdGhpcy5jYXRlZ29yeTtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkU3VwcGxpZXJzVG9DYXRlZ29yeSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZXA6IHRydWVcbiAgICAgICAgfSxkZXNjcmlwdGlvbiA6e1xuICAgICAgICAgIGhhbmRsZXIobmV3VmFsKSB7XG4gICAgICAgICAgICAgIHRoaXMuZXJyb3JSZXBvcnREZXRhaWxzLmRlc2NyaXB0aW9uID0gdGhpcy5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSx0aW1lIDp7XG4gICAgICAgICAgaGFuZGxlcihuZXdWYWwpIHtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvclJlcG9ydERldGFpbHMudGltZSA9IHRoaXMudGltZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAsc29sdXRpb24gOntcbiAgICAgICAgICBoYW5kbGVyKG5ld1ZhbCkge1xuICAgICAgICAgICAgICBpZih0aGlzLmp1c3Rfb3BlbmVkKXtcbiAgICAgICAgICAgICAgICB0aGlzLnNvbHV0aW9uID0gdGhpcy5lcnJvclJlcG9ydERldGFpbHMuc29sdXRpb247XG4gICAgICAgICAgICAgICAgdGhpcy5qdXN0X29wZW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yUmVwb3J0RGV0YWlscy5zb2x1dGlvbiA9IHRoaXMuc29sdXRpb247XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICAgIFxuICAgIH0sXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIFxuICAgIH1cbiAgfSBcbjwvc2NyaXB0PlxuXG48c3R5bGU+XG4uZXJyb3Jfc29sdXRpb24ge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwcHg7XG59XG5cbi5kZXNjcmlwdGlvbiB7XG4gICAgcGFkZGluZzogMTBweDtcbiAgICBiYWNrZ3JvdW5kOiAjZmJmYmZiO1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG59XG48L3N0eWxlPiIsIlxuLmFjdGl2aXR5IC5ib3JkZXItbGVmdC1saW5lIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLWxlZnQ6IDM1cHg7XG5cbn1cblxuLmFjdGl2aXR5IHtcbiAgICAuYnRuLWNpcmNsZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIHdpZHRoOiA1NnB4O1xuICAgICAgICBoZWlnaHQ6IDU1cHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMjhweDtcbiAgICB9XG59XG5cbmEge1xuICAgIC5mYS1lZGl0IHtcbiAgICAgICAgY29sb3I6ICMwMDA7XG4gICAgfVxufVxuXG4uYXV0b21hdGljLWlzc3VlLWxpc3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBpZD1cInNlbmQtZXJyb3Itd3JhcHBlclwiPlxuICAgIDxidXR0b25cbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJidG4gYnRuLXdhcm5pbmcgYnRuLWNpcmNsZS1sZ1wiXG4gICAgICBAY2xpY2s9XCJvcGVuKClcIlxuICAgID5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGVcIj48L2k+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuIFxuICA8QnNNb2RhbFxuICAgIDpzaG93PVwic2hvd01vZGFsXCJcbiAgICA6bGFiZWw9XCIkZmlsdGVycy50cmFucygnZXJyb3JfcmVwb3J0Lm5ld190aWNrZXQnKVwiXG4gICAgOndpZGU9XCJmYWxzZVwiXG4gICAgOnNob3dTYXZlPVwidHJ1ZVwiXG4gICAgOnNob3dDYW5jZWw9XCJ0cnVlXCJcbiAgICA6aXNMb2FkaW5nPVwibG9hZGluZyB8fCBwYWNrYWdlU3VnZ2VzdGlvbnNMb2FkaW5nXCJcbiAgICBAb25DbG9zZT1cInNob3dNb2RhbCA9IGZhbHNlXCJcbiAgICBAb25Db25maXJtPVwic2F2ZSgpXCJcbiAgICA6Y2xvc2VPdXRzaWRlQ2xpY2s9XCJmYWxzZVwiXG4gID5cbiBcblxuICAgIDxkaXYgY2xhc3M9XCJyb3cgZm9ybS1ncm91cFwiIHYtaWY9XCJzaG93UGFyY2VsU2VhcmNoXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgPlxuICAgICAgICA8bGFiZWwgZm9yPVwicGFja2FnZVNlYXJjaFwiIGNsYXNzPVwiZm9ybS1sYWJlbCByZXF1aXJlZFwiPnt7ICRmaWx0ZXJzLnRyYW5zKCdlcnJvcl9yZXBvcnQucGFyY2VsX2ZpbmRlcicpIH19PC9sYWJlbD5cbiAgICAgICAgPGlucHV0IG5hbWU9XCJwYWNrYWdlU2VhcmNoXCIgaWQ9XCJwYWNrYWdlU2VhcmNoXCIgdHlwZT1cInRleHRcIiB2LW1vZGVsPVwicGFyY2VsU2VhcmNoXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiA6Y2xhc3M9XCJ7ICdpcy12YWxpZCc6IHBhY2thZ2VTZWxlY3RlZCB9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciBzcGlubmVyLWJvcmRlci1zbVwiIHYtc2hvdz1cInBhY2thZ2VTdWdnZXN0aW9uc0xvYWRpbmcgXCIgcm9sZT1cInN0YXR1c1wiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDM1cHg7ICAgIHJpZ2h0OiAyNHB4O1wiPiAgICAgICAgICAgXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+ICAgICAgXG4gICAgICBcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiB2LXNob3c9XCJwYWNrYWdlU3VnZ2VzdGlvbnMgJiYgcGFja2FnZVN1Z2dlc3Rpb25zLmxlbmd0aCA+IDEgJiYgIXBhY2thZ2VTdWdnZXN0aW9uc0xvYWRpbmdcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cInBhY2thZ2VcIiBjbGFzcz1cImZvcm0tbGFiZWwgcmVxdWlyZWRcIj57eyAkZmlsdGVycy50cmFucygnZXJyb3JfcmVwb3J0LnBhcmNlbF9saXN0JykgfX08L2xhYmVsPlxuICAgICAgICA8ZGl2IHYtZm9yPVwicGFja2FnZVN1Z2dlc3Rpb24gaW4gcGFja2FnZVN1Z2dlc3Rpb25zXCIgdi1pZj1cInBhY2thZ2VTZWxlY3RlZD8uaGVscGVyQ29kZSAhPSBwYXJjZWxTZWFyY2ggXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiA6aWQ9XCIncGFja2FnZV8nICsgcGFja2FnZVN1Z2dlc3Rpb24uaWRcIiA6dmFsdWU9XCJwYWNrYWdlU3VnZ2VzdGlvblwiIEBjaGFuZ2U9XCJwYWNrYWdlU2VsZWN0ZWRDaGFuZ2UocGFja2FnZVN1Z2dlc3Rpb24pXCIgbmFtZT1cInBhY2thZ2Vfc3VnZ2VzdGlvblwiIHYtbW9kZWw9XCJwYWNrYWdlU2VsZWN0ZWRcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgXCI+XG4gICAgICAgICAgICA8bGFiZWwgOmZvcj1cIidwYWNrYWdlXycgKyBwYWNrYWdlU3VnZ2VzdGlvbi5pZFwiIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPnt7IHBhY2thZ2VTdWdnZXN0aW9uLnNoaXBtZW50VGFza05vIH19IC0ge3sgcGFja2FnZVN1Z2dlc3Rpb24uaGVscGVyQ29kZSB9fVxuICAgICAgICAgICAgPHRlbXBsYXRlIHYtaWY9XCJwYWNrYWdlU3VnZ2VzdGlvbi5pdGVtcyAmJiBwYWNrYWdlU3VnZ2VzdGlvbi5pdGVtcy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAtIHt7IHBhY2thZ2VTdWdnZXN0aW9uLnF1YW50aXR5fX0geCB7e3BhY2thZ2VTdWdnZXN0aW9uLml0ZW1zWzBdLklURU1fTkFNRX19XG4gICAgICAgICAgICA8L3RlbXBsYXRlPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICAgXG4gICAgIDxkaXYgY2xhc3M9XCJyb3cgZm9ybS1ncm91cFwiPiBcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiB2LXNob3c9XCIhb25lQ2F0ZWdvcnlNb2RlXCI+XG4gICAgICAgIDxzZWxlY3QgbmFtZT1cImNhdGVnb3J5XCIgdi1tb2RlbD1cImNhdGVnb3J5XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZD5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgZGlzYWJsZWQgc2VsZWN0ZWQ+e3tcbiAgICAgICAgICAgICRmaWx0ZXJzLnRyYW5zKFwiZXJyb3JfcmVwb3J0LmNhdGVnb3J5X3NlbGVjdFwiKVxuICAgICAgICAgIH19PC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2LWZvcj1cImNhdGVnb3J5IGluIGZpbHRlcmVkQ2F0ZWdvcmllc1wiIDp2YWx1ZT1cImNhdGVnb3J5LmRhdGEuaWRcIj57e1xuICAgICAgICAgICAgY2F0ZWdvcnkuZGF0YS5uYW1lXG4gICAgICAgICAgfX08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICAgPGRpdiBjbGFzcz1cInJvdyBmb3JtLWdyb3VwXCIgdi1pZj1cInN1YkNhdGVnb3JpZXNcIj4gXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICBcbiAgICAgICAgPHNlbGVjdCBuYW1lPVwiY2F0ZWdvcnlcIiB2LW1vZGVsPVwic3ViQ2F0ZWdvcnlcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIiB2LWlmPVwiIW9uZUNhdGVnb3J5TW9kZVwiIGRpc2FibGVkIHNlbGVjdGVkPnt7XG4gICAgICAgICAgICAkZmlsdGVycy50cmFucyhcImVycm9yX3JlcG9ydC5zdWJfY2F0ZWdvcnlfc2VsZWN0XCIpXG4gICAgICAgICAgfX08L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiXCIgdi1lbHNlPVwib25lQ2F0ZWdvcnlNb2RlXCIgZGlzYWJsZWQgc2VsZWN0ZWQ+e3tcbiAgICAgICAgICAgICRmaWx0ZXJzLnRyYW5zKFwiZXJyb3JfcmVwb3J0LmNhdGVnb3J5X3NlbGVjdFwiKVxuICAgICAgICAgIH19PC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2LWZvcj1cImNhdGVnb3J5IGluIHN1YkNhdGVnb3JpZXNcIiA6dmFsdWU9XCJjYXRlZ29yeS5pZFwiPnt7XG4gICAgICAgICAgICBjYXRlZ29yeS5uYW1lXG4gICAgICAgICAgfX08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gXG4gICAgXG5cbiAgICA8ZGl2IHYtaWY9XCJzdWJDYXRlZ29yaWVzICYmIHN1YkNhdGVnb3J5IT0gbnVsbCAmJiBzdWJDYXRlZ29yaWVzW3N1YkNhdGVnb3J5XSAmJiBzdWJDYXRlZ29yaWVzW3N1YkNhdGVnb3J5XT8uc29sdXRpb25zICYmIHN1YkNhdGVnb3JpZXNbc3ViQ2F0ZWdvcnldPy5zb2x1dGlvbnMubGVuZ3RoID4gMFwiID4gICAgIFxuICAgICAgICA8ZGl2IHYtZm9yPVwic29sdXRpb24gaW4gc3ViQ2F0ZWdvcmllc1tzdWJDYXRlZ29yeV0uc29sdXRpb25zXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiA6aWQ9XCIncXVpY2tfc29sdXRpb25fJytzb2x1dGlvbi5pZFwiIHYtbW9kZWw9XCJxdWlja19zb2x1dGlvblwiIG5hbWU9XCJjYXRlZ29yeVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGNvbC0yXCIgOnZhbHVlPVwic29sdXRpb24uaWRcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiA6Zm9yPVwiJ3F1aWNrX3NvbHV0aW9uXycrc29sdXRpb24uaWRcIj57e3NvbHV0aW9uLmRlc2NyaXB0aW9ufX08L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gICAgICBcbiAgIFxuXG4gICAgPFF1aWxsRWRpdG9yXG4gICAgICBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMHB4O1wiXG4gICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZWRpdG9yIGVycm9yX2Rlc2NyaXB0aW9uXCJcbiAgICAgIHYtbW9kZWw6Y29udGVudD1cImRlc2NyaXB0aW9uXCJcbiAgICAgIHYtbW9kZWw9XCJkZXNjcmlwdGlvblwiXG4gICAgICBjb250ZW50VHlwZT1cImh0bWxcIlxuICAgIC8+XG4gIDwvQnNNb2RhbD5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgQnNNb2RhbCBmcm9tIFwiLi9jb21tb24vQnNNb2RhbC52dWVcIjtcblxuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQgeyBRdWlsbEVkaXRvciB9IGZyb20gXCJAdnVldXAvdnVlLXF1aWxsXCI7XG5pbXBvcnQgXCJAdnVldXAvdnVlLXF1aWxsL2Rpc3QvdnVlLXF1aWxsLnNub3cuY3NzXCI7XG5pbXBvcnQgZXZlbnRCdXMgZnJvbSAnLi9jb21tb24vZXZlbnRCdXMnXG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiBcIkVycm9yUmVwb3J0QnV0dG9uQ29tcG9uZW50XCIsXG4gIGNvbXBvbmVudHM6IHtcbiAgICBCc01vZGFsLFxuICAgIFF1aWxsRWRpdG9yLFxuICB9LFxuICBwcm9wczoge1xuICAgIGxpbmU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnLFxuICAgIH0sXG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgIH0sXG4gICAgZXJyb3JSZXBvcnQ6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgfSxcbiAgfSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd01vZGFsOiBmYWxzZSxcbiAgICAgIGVycm9yUmVwb3J0RGV0YWlsczogbnVsbCxcbiAgICAgIGVkaXRUaWNrZXQ6IGZhbHNlLFxuICAgICAgbW9tZW50LFxuICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICBwYWNrYWdlU3VnZ2VzdGlvbnNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHNhdmVMb2FkaW5nOiBmYWxzZSxcbiAgICAgIHN0YXR1c2VzOiBudWxsLFxuICAgICAgY2F0ZWdvcmllczogbnVsbCxcbiAgICAgIGZpbHRlcmVkQ2F0ZWdvcmllczogbnVsbCxcbiAgICAgIHN1cHBsaWVyczogbnVsbCxcbiAgICAgIHZpZXc6IGZhbHNlLFxuICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgc3RhdHVzOiBudWxsLFxuICAgICAgZGlzYWJsZWQ6IDAsXG4gICAgICBvbmVDYXRlZ29yeU1vZGU6IGZhbHNlLFxuICAgICAgY2F0ZWdvcnk6IFwiXCIsXG4gICAgICBzdWJDYXRlZ29yeTogXCJcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlwiLCBcbiAgICAgIGNsb3NhYmxlOiBmYWxzZSxcbiAgICAgIHNvbHV0aW9uX2Rpc2FibGVkOiB0cnVlLFxuICAgICAgc29sdXRpb246IFwiXCIsXG4gICAgICBqdXN0X29wZW5lZDogdHJ1ZSxcbiAgICAgIGRheTogbnVsbCxcbiAgICAgIGRheXM6IFtdLFxuICAgICAgcGFyY2VsU2VhcmNoOiAnJyxcbiAgICAgIHNob3dQYXJjZWxTZWFyY2g6IGZhbHNlLFxuICAgICAgcGFja2FnZVN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIHBhY2thZ2VTZWxlY3RlZDogbnVsbCxcbiAgICAgIHR5cGU6ICdhZG1pbicsIC8vIGFkbWluLCB0YWJsZXRcbiAgICAgIGFsbG93ZWRDYXRlZ29yaWVzOiBbXSxcbiAgICB9O1xuICB9LFxuICBtZXRob2RzOiB7XG4gICAgb3BlbigpIHtcbiAgICAgIHRoaXMuc2hvd01vZGFsID0gdHJ1ZTtcbiAgICAgIHRoaXMudHlwZSAgICAgICAgICAgICAgPSAnYWRtaW4nO1xuICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCd0YWJsZXQnKSkge1xuICAgICAgICB0aGlzLnNob3dQYXJjZWxTZWFyY2ggID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50eXBlICAgICAgICAgICAgICA9ICd0YWJsZXQnO1xuICAgICAgICB0aGlzLmFsbG93ZWRDYXRlZ29yaWVzID0gWydwYWNrZXJfZXJyb3InXTtcbiBcbiAgICAgIH1cblxuICAgIH0sXG4gICAgc2F2ZSgpIHsgICAgICAgXG4gICAgICAgIHRoaXMudGltZSA9IG1vbWVudChgJHt0aGlzLmRheX0gJHt0aGlzLmhvdXJ9OiR7dGhpcy5taW51dGV9YCkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tJyk7XG5cbiAgICAgICAgaWYodGhpcy5jYXRlZ29yeSA9PT0gJycpe1xuICAgICAgICAgICAgdGhpcy4kc3dhbCh0aGlzLiRmaWx0ZXJzLnRyYW5zKCdlcnJvcl9yZXBvcnQubWlzc2luZ19jYXRlZ29yeScpLCAnJywgJ3dhcm5pbmcnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMuc3ViQ2F0ZWdvcnkgPT09ICcnKXtcbiAgICAgICAgICAgIHRoaXMuJHN3YWwodGhpcy4kZmlsdGVycy50cmFucygnZXJyb3JfcmVwb3J0Lm1pc3Npbmdfc3ViX2NhdGVnb3J5JyksICcnLCAnd2FybmluZycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgXG4gICAgICAgIGlmKCB0aGlzLnR5cGUgPT0gJ2FkbWluJyAgJiYgKHRoaXMuZGVzY3JpcHRpb24gPT09ICcnIHx8IHRoaXMuZGVzY3JpcHRpb24gPT09IG51bGwpKXtcbiAgICAgICAgICB0aGlzLiRzd2FsKHRoaXMuJGZpbHRlcnMudHJhbnMoJ2Vycm9yX3JlcG9ydC5taXNzaW5nX2Rlc2MnKSwgJycsICd3YXJuaW5nJyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy50aW1lID09PSAnJyB8fCB0aGlzLnRpbWUgPT09IG51bGwpe1xuICAgICAgICAgIHRoaXMuJHN3YWwodGhpcy4kZmlsdGVycy50cmFucygnZXJyb3JfcmVwb3J0Lm1pc3NpbmdfdGltZScpLCAnJywgJ3dhcm5pbmcnKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgaWYodGhpcy5wYXJjZWxTZWFyY2ggIT09ICcnICYmICF0aGlzLnBhY2thZ2VTZWxlY3RlZCl7XG4gICAgICAgIHRoaXMuJHN3YWwodGhpcy4kZmlsdGVycy50cmFucygnZXJyb3JfcmVwb3J0Lm1pc3Npbmdfc2VsZWN0ZWRfcGFyY2VsJyksICcnLCAnd2FybmluZycpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICAgICAgY29uc3Qgc3RvcmVEYXRhID0ge1xuICAgICAgICAgIGNhdGVnb3J5OiAodGhpcy5zdWJDYXRlZ29yeSAhPSAnJyA/IHRoaXMuc3ViQ2F0ZWdvcnkgOiB0aGlzLmNhdGVnb3J5KSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvblxuICAgICAgICB9XG5cbiAgICAgICAgc3RvcmVEYXRhLnF1aWNrX3NvbHV0aW9uID0gdGhpcy5xdWlja19zb2x1dGlvbjsgXG4gICAgICAgIGlmICh0aGlzLmxpbmUgIT0gJycpIHtcbiAgICAgICAgICBzdG9yZURhdGEubGluZSA9IHRoaXMubGluZTsgXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wYWNrYWdlU2VsZWN0ZWQpIHtcbiAgICAgICAgICBzdG9yZURhdGEuZXh0ZXJuYWxfaWQgPSB0aGlzLnBhY2thZ2VTZWxlY3RlZC5oZWxwZXJDb2RlO1xuICAgICAgICAgIHN0b3JlRGF0YS5zaGlwbWVudF90YXNrX25vID0gdGhpcy5wYWNrYWdlU2VsZWN0ZWQuc2hpcG1lbnRUYXNrTm87XG4gICAgICAgICAgc3RvcmVEYXRhLnNoaXBwaW5nX2FnZW50X2NvZGUgPSB0aGlzLnBhY2thZ2VTZWxlY3RlZC5zaGlwcGluZ0FnZW50Q29kZTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy4kaHR0cC5wb3N0KGAvYXBpLyR7dGhpcy50eXBlfS9lcnJvci1yZXBvcnQvc3RvcmVgLFxuICAgICAgICAgICAgc3RvcmVEYXRhXG4gICAgICAgICAgKVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICB0aGlzLnNob3dNb2RhbCA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLnBhcmNlbFNlYXJjaCA9ICcnO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2FzZGFzZCcscmVzcG9uc2UuZGF0YS5oaW50ICk7XG5cbiAgICAgICAgICAgIGV2ZW50QnVzLiRlbWl0KCduZXctZXJyb3ItcmVwb3J0LXNhdmVkJykgICAgICAgICAgIFxuXG4gICAgICAgICAgICBpZihyZXNwb25zZS5kYXRhLmhpbnQgPT0gJycpe1xuICAgICAgICAgICAgICB0aGlzLiRzd2FsKCdBIGhpYmVqZWd5ZXQgbMOpdHJlaG96dHVrJywnJywgJ3N1Y2Nlc3MnICApOyAgIFxuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgIHRoaXMuJHN3YWwoJ0EgaGliZWplZ3lldCBsw6l0cmVob3p0dWsnLCByZXNwb25zZS5kYXRhLmhpbnQgKTsgICBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jYXRlZ29yeSA9ICcnO1xuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9ICcnO1xuXG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgdGhpcy4kc3dhbCgnSGliYWplZ3kgbMOpdHJlaG96w6FzIG5lbSBzaWtlcsO8bHQnLCAnJywgJ2Vycm9yJyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9LFxuXG4gICBcbiAgICBnZXRFcnJvclJlcG9ydERldGFpbHMoKSB7XG4gICAgICB0aGlzLmVycm9yUmVwb3J0RGV0YWlscyA9IG51bGw7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIHRoaXMuJGh0dHAuZ2V0KGAvYXBpLyR7dGhpcy50eXBlfS9lcnJvci1yZXBvcnQvMC9lZGl0YCkudGhlbihcbiAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgc2VsZi5lcnJvclJlcG9ydERldGFpbHMgPSByZXNwb25zZS5kYXRhLnRpY2tldDtcbiAgICAgICAgICBzZWxmLnN0YXR1c2VzID0gcmVzcG9uc2UuZGF0YS5zdGF0dXNlcztcbiAgICAgICAgICBzZWxmLmNhdGVnb3JpZXMgPSByZXNwb25zZS5kYXRhLmNhdGVnb3JpZXM7XG4gICAgICAgICAgc2VsZi5maWx0ZXJlZENhdGVnb3JpZXMgPSByZXNwb25zZS5kYXRhLmNhdGVnb3JpZXM7XG4gXG5cbiAgICAgICAgICBzZWxmLnN1cHBsaWVycyA9IHJlc3BvbnNlLmRhdGEuc3VwcGxpZXJzO1xuICAgICAgICAgIHNlbGYuc29sdXRpb24gPSByZXNwb25zZS5kYXRhLnNvbHV0aW9uO1xuIDtcbiAgICAgICAgICBcbiAgICAgICAgICBzZWxmLmxvYWRpbmcgPSBmYWxzZTtcbiAgXG5cbiAgICAgICAgICBcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHNlbGYuc3VwcGxpZXJzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgc2VsZi5zdXBwbGllcnNbXG4gICAgICAgICAgICAgIGlcbiAgICAgICAgICAgIF0uc2VsZWN0ZWQgPSBzZWxmLmVycm9yUmVwb3J0RGV0YWlscy5yZXNwb25zaWJsZVxuICAgICAgICAgICAgICAubWFwKChlKSA9PiBlLmlkKVxuICAgICAgICAgICAgICAuaW5jbHVkZXMoc2VsZi5zdXBwbGllcnNbaV0uaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgICAgIHNlbGYubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICApO1xuICAgICAgdGhpcy5qdXN0X29wZW5lZCA9IHRydWU7XG4gICAgfSxcbiAgICBwYWNrYWdlU2VsZWN0ZWRDaGFuZ2UodmFsKSB7XG4gICAgICB0aGlzLnBhY2thZ2VTZWxlY3RlZCA9IHZhbDtcbiAgICAgIHRoaXMucGFyY2VsU2VhcmNoID0gdmFsLmhlbHBlckNvZGU7XG4gICAgICAvLyB0aGlzLmdldFBhY2thZ2VTdWdnZXN0aW9ucygpO1xuICAgIH0sXG4gICAgZ2V0UGFja2FnZVN1Z2dlc3Rpb25zKCkge1xuICAgICBcblxuICAgICAgaWYgKHRoaXMucGFyY2VsU2VhcmNoID09PSAnJykge1xuICAgICAgICB0aGlzLnBhY2thZ2VTZWxlY3RlZCA9IG51bGw7XG4gICAgICAgIHRoaXMucGFja2FnZVN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gXG4gICAgICBcbiAgICAgIGlmICh0aGlzLnBhcmNlbFNlYXJjaCA9PSB0aGlzLnBhY2thZ2VTZWxlY3RlZD8uaGVscGVyQ29kZSkge1xuICAgICAgICB0aGlzLnBhY2thZ2VTdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGFja2FnZVN1Z2dlc3Rpb25zTG9hZGluZyA9IHRydWU7XG5cbiAgICAgIHN3aXRjaCAodGhpcy50eXBlKSB7XG4gICAgICAgIGNhc2UgJ3RhYmxldCc6XG4gICAgICAgICAgdGhpcy4kaHR0cC5nZXQoYC9hcGkvJHt0aGlzLnR5cGV9L3BhcmNlbC1zZWFyY2gvJHt0aGlzLnBhcmNlbFNlYXJjaH1gKVxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnBhY2thZ2VTZWxlY3RlZCA9IG51bGw7XG4gICAgICAgICAgICAgIHRoaXMucGFja2FnZVN1Z2dlc3Rpb25zID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgaWYodGhpcy5wYWNrYWdlU3VnZ2VzdGlvbnMubGVuZ3RoID09IDEgJiYgdGhpcy5wYWNrYWdlU3VnZ2VzdGlvbnNbMF0uaGVscGVyQ29kZSA9PSB0aGlzLnBhcmNlbFNlYXJjaCApe1xuICAgICAgICAgICAgICAgIHRoaXMucGFja2FnZVNlbGVjdGVkID0gdGhpcy5wYWNrYWdlU3VnZ2VzdGlvbnNbMF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5wYWNrYWdlU3VnZ2VzdGlvbnNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0sXG4gICAgZGVib3VuY2VTZWFyY2g6IF8uZGVib3VuY2UoZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5nZXRQYWNrYWdlU3VnZ2VzdGlvbnMoKTtcbiAgICB9LCAxMDAwKSxcbiAgfSwgXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy50eXBlICAgICAgICAgICAgICA9ICdhZG1pbic7XG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCd0YWJsZXQnKSkgeyAgICAgIFxuICAgICAgdGhpcy50eXBlICAgICAgICAgICAgICA9ICd0YWJsZXQnOyAgICAgIFxuICAgIH1cbiAgICB0aGlzLmdldEVycm9yUmVwb3J0RGV0YWlscygpOyAgICBcbiAgICBldmVudEJ1cy4kb24oJ25ldy1lcnJvci1yZXBvcnQtb3Blbi1tb2RhbCcsIChkYXRhKSA9PiB7XG5cbiAgICAgXG4gICAgICAgIHRoaXMuc2hvd01vZGFsID0gdHJ1ZTtcbiBcblxuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnNlYXJjaCkge1xuICAgICAgICAgIHRoaXMucGFyY2VsU2VhcmNoID0gZGF0YS5zZWFyY2g7XG4gICAgICAgICAgdGhpcy5zaG93UGFyY2VsU2VhcmNoID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEudHlwZSkge1xuICAgICAgICAgIHRoaXMudHlwZSA9IGRhdGEudHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09ICd0YWJsZXQnKSB7XG4gICAgICAgICAgdGhpcy5hbGxvd2VkQ2F0ZWdvcmllcyA9IFsncGFja2VyX2Vycm9yJ107XG4gICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9ICcgJztcbiAgICAgICAgfVxuICAgIH0pOyBcblxuICB9LFxuICBjb21wdXRlZDoge1xuICAgICAgc3ViQ2F0ZWdvcmllcygpIHsgXG4gICAgICAgICAgcmV0dXJuICh0aGlzLmZpbHRlcmVkQ2F0ZWdvcmllcyAmJiB0aGlzLmZpbHRlcmVkQ2F0ZWdvcmllc1t0aGlzLmNhdGVnb3J5XT90aGlzLmZpbHRlcmVkQ2F0ZWdvcmllc1t0aGlzLmNhdGVnb3J5XS5jaGlsZHJlbnM6bnVsbCk7XG4gICAgfSxcbiAgfSxcbiAgd2F0Y2g6IHtcbiAgICAgY2F0ZWdvcnkodmFsKSB7XG4gICAgICB0aGlzLnN1YkNhdGVnb3J5ID0gXCJcIjtcbiAgICB9LFxuICAgIGVycm9yUmVwb3J0KHZhbCkge1xuICAgICAgdGhpcy5lcnJvclJlcG9ydERldGFpbHMgPSB2YWw7XG4gICAgICB0aGlzLnNob3dNb2RhbCA9IHRydWU7XG4gICAgfSxcbiAgICBtb2RlbFZhbHVlKHZhbCkge1xuICAgICAgdGhpcy5zaG93TW9kYWwgPSB2YWw7XG4gICAgfSxcbiAgICBzaG93TW9kYWwodmFsKSB7XG4gICAgIFxuICAgIH0sXG4gICAgcGFyY2VsU2VhcmNoKHZhbCkge1xuICAgICAgdGhpcy5kZWJvdW5jZVNlYXJjaCgpO1xuICAgIH0sXG4gICAgLy8gcGFja2FnZVNlbGVjdGVkKHZhbCkge1xuICAgIC8vICBjb25zb2xlLmxvZygnLi4uLi4uLi4uLi4uLicsdmFsKVxuICAgIC8vICBpZih2YWw/LmhlbHBlckNvZGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnBhcmNlbFNlYXJjaCAhPSB2YWwuaGVscGVyQ29kZSl7XG4gICAgLy8gICB0aGlzLnBhcmNlbFNlYXJjaCA9IHZhbC5oZWxwZXJDb2RlO1xuICAgIC8vICB9XG5cbiAgICAvLyB9LFxuICAgIGZpbHRlcmVkQ2F0ZWdvcmllcyh2YWwpe1xuICAgICAgXG4gICAgICBpZih2YWwhPSBudWxsICYmIE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoID09IDEpe1xuICAgICAgICB0aGlzLmNhdGVnb3J5ID0gdGhpcy5maWx0ZXJlZENhdGVnb3JpZXNbT2JqZWN0LmtleXModmFsKVswXV0uZGF0YS5pZDtcbiAgICAgICAgdGhpcy5vbmVDYXRlZ29yeU1vZGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sXG4gICAgLyoqXG4gICAgICogRmlsdGVyIGNhdGVnb3JpZXMgYmFzZWQgb24gYWxsb3dlZENhdGVnb3JpZXMsIGJhc2VkIG9uIGNhdGVnb3J5IGlkIG9yIHNsdWdcbiAgICAgKi9cbiAgICBhbGxvd2VkQ2F0ZWdvcmllcyh2YWwpIHtcbiAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIHRoaXMuZmlsdGVyZWRDYXRlZ29yaWVzID0gT2JqZWN0LmtleXModGhpcy5jYXRlZ29yaWVzKS5maWx0ZXIoKGNhdGVnb3J5S2V5KSA9PiB7XG4gICAgICAgIHJldHVybiAoc2VsZi5hbGxvd2VkQ2F0ZWdvcmllcy5pbmNsdWRlcyhzZWxmLmNhdGVnb3JpZXNbY2F0ZWdvcnlLZXldLmRhdGEuaWQpIHx8IHNlbGYuYWxsb3dlZENhdGVnb3JpZXMuaW5jbHVkZXMoc2VsZi5jYXRlZ29yaWVzW2NhdGVnb3J5S2V5XS5kYXRhLnNsdWcpKTtcbiAgICAgIH0pLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgICAgICAgb2JqW2tleV0gPSBzZWxmLmNhdGVnb3JpZXNba2V5XTtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH0sIHt9KTtcblxuXG4gICAgfVxuICB9XG59O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4jc2VuZC1lcnJvci13cmFwcGVyIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICAgIGJvdHRvbTogMzBweDtcbiAgICB3aWR0aDogNDBweDtcbiAgICByaWdodDogNDBweDtcbn1cblxuLmZvcm0tY29udHJvbC10aW1lLWRpdmlkZXIge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBsaW5lLWhlaWdodDogMzFweDtcbiAgICB3aWR0aDogMjZweDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIEBjbGljaz1cImNsaWNrXCI+XG5cdFx0XHQ8aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiBMw6l0cmVob3rDoXM8L2J1dHRvbj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+ICBcbmltcG9ydCBldmVudEJ1cyBmcm9tICcuL2NvbW1vbi9ldmVudEJ1cydcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6IFwiRXJyb3JSZXBvcnRBZGROZXdUb3BCdXR0b25cIixcbiAgY29tcG9uZW50czoge1xuICAgIFxuICB9LFxuICBwcm9wczoge1xuICAgIFxuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7IFxuICAgIH07XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBjbGljaygpIHsgICAgICAgXG4gICAgICAgZXZlbnRCdXMuJGVtaXQoJ25ldy1lcnJvci1yZXBvcnQtb3Blbi1tb2RhbCcpXG4gICAgfSwgXG4gIH0sXG4gIG1vdW50ZWQoKSB7XG4gICAgIFxuICB9LFxuICAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICAvLyByZW1vdmluZyBldmVudEJ1cyBsaXN0ZW5lclxuICAgIGV2ZW50QnVzLiRvZmYoJ25ldy1lcnJvci1yZXBvcnQtb3Blbi1tb2RhbCcpXG4gIH1cbn07XG48L3NjcmlwdD5cblxuPHN0eWxlIHNjb3BlZD5cbiNzZW5kLWVycm9yLXdyYXBwZXIge1xuICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgaGVpZ2h0OiA3MXB4O1xuICAgIGJvdHRvbTogMHB4O1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA1MnB4KTtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGU+XG5cbjxUZWxlcG9ydCB0bz1cIiNkcmF3ZXItdGl0bGVcIj5IaWJhamVsZW50w6lzPC9UZWxlcG9ydD5cblxuIDxUZWxlcG9ydCB0bz1cIiNkcmF3ZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLThcIiB2LWlmPVwiIWVkaXRUaWNrZXRcIiA+XG4gICAgICAgICAgIDxoMiBjbGFzcz1cIm10LTJcIiB2LWlmPVwiIWVkaXRUaWNrZXRcIj5cbiAgICAgICAgICAgIHt7dGlja2V0Py5jYXRlZ29yeV9kZXRhaWxzPy5uYW1lfX1cbiAgICAgICAgICA8L2gyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCB0ZXh0LXJpZ2h0XCIgdi1pZj1cIiFlZGl0VGlja2V0ICYmIHRpY2tldD8uc291cmNlICE9PSAncGxjJ1wiID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0biBidG4tbGluayBwb2ludGVyXCIgQGNsaWNrPVwiZWRpdFRpY2tldD10cnVlXCI+TcOzZG9zw610w6FzPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOCBtYi0yXCIgdi1pZj1cImVkaXRUaWNrZXRcIj5cbiAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiY2F0ZWdvcnlcIiB2LW1vZGVsPVwiY2F0ZWdvcnlcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIDpkaXNhYmxlZD1cImRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbiB2LWZvcj1cImNhdGVnb3J5IGluIGNhdGVnb3JpZXNcIiA6dmFsdWU9XCJjYXRlZ29yeS5pZFwiPnt7Y2F0ZWdvcnkubmFtZX19PC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNvbC00IG1iLTJcIiB2LWlmPVwiZWRpdFRpY2tldFwiID5cbiAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJzdGF0dXNcIiB2LW1vZGVsPVwic3RhdHVzXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxuICAgICAgICAgICAgICA8b3B0aW9uIHYtZm9yPVwic3RhdHVzIGluIHN0YXR1c2VzXCIgOnZhbHVlPVwic3RhdHVzLmlkXCI+e3tzdGF0dXMubmFtZX19PC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICA8c3BhbiB2LWlmPVwiIWVkaXRUaWNrZXRcIj57eyAoZXJyb3JSZXBvcnREZXRhaWxzICYmIGVycm9yUmVwb3J0RGV0YWlscy50aW1lKSA/IG1vbWVudChlcnJvclJlcG9ydERldGFpbHMudGltZSkuZm9ybWF0KCRmaWx0ZXJzLnRyYW5zKCdkYXRldGltZV9mb3JtYXRfc29ydCcpKSA6ICcnIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8aW5wdXQgdi1lbHNlIHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIG5hbWU9XCJkYXRldGltZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdi1tb2RlbD1cInRpbWVcIiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIiByZXF1aXJlZC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHRleHQtcmlnaHRcIj5cbiAgICAgICAgICAgIHt7ZXJyb3JSZXBvcnREZXRhaWxzPy5jcmVhdG9yfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgPGRpdiB2LWlmPVwidGlja2V0Py5leHRlcm5hbF9pZFwiIGNsYXNzPVwiZGVzY3JpcHRpb24tbmF2LWdldC1zaGlwbWVudC10YXNrXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmbGV4OiAxO1wiPlxuICAgICAgICAgICAgICAgIDxiPnt7dGlja2V0LmV4dGVybmFsX2lkfX08L2I+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGEgdHlwZT1cImJ1dHRvblwiIDpocmVmPVwiJy9hZG1pbi9uYXYtZ2V0c2hpcG1lbnQtdGFzay8nICsgdGlja2V0LmV4dGVybmFsX2lkXCIgdGFyZ2V0PVwiX3RhcmdldFwiIGNsYXNzPVwiYnRuIGJ0bi1zbSAgYnRuLXByaW1hcnkgZHJvcGRvd24tdG9nZ2xlIGRyb3Bkb3duLXRvZ2dsZS1zcGxpdFwiID5cbiAgICAgICAgICAgICAgICAgICAgTWVnbnlpdMOhc1xuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvblwiIHYtaWY9XCIoIWVkaXRUaWNrZXQgfHwgZGlzYWJsZWQpICYmIGVycm9yUmVwb3J0RGV0YWlscz8uZGVzY3JpcHRpb25cIiB2LWh0bWw9XCJlcnJvclJlcG9ydERldGFpbHM/LmRlc2NyaXB0aW9uXCI+PC9kaXY+XG5cbiAgICA8UXVpbGxFZGl0b3Igdi1lbHNlXG4gICAgICBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMHB4O1wiXG4gICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZWRpdG9yIGVycm9yX3NvbHV0aW9uXCJcbiAgICAgIHYtbW9kZWw6Y29udGVudD1cImRlc2NyaXB0aW9uXCJcbiAgICAgIHYtbW9kZWw9XCJkZXNjcmlwdGlvblwiXG4gICAgICBjb250ZW50VHlwZT1cImh0bWxcIi8+XG5cblxuICAgIDxkaXYgdi1pZj1cInRpY2tldD8uY2F0ZWdvcnlfZGV0YWlscz8uc29sdXRpb25zICYmIHRpY2tldD8uY2F0ZWdvcnlfZGV0YWlscz8uc29sdXRpb25zLmxlbmd0aCA+IDBcIiA+XG4gICAgICAgICAgPHNlbGVjdCAgbmFtZT1cImNhdGVnb3J5XCIgdi1tb2RlbD1cInF1aWNrX3NvbHV0aW9uXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCA9PSAxXCI+XG4gICAgICAgICAgICA8b3B0aW9uICA6dmFsdWU9XCIwXCIgPlbDoWxhc3N6b24gZ3lvcnMgbWVnb2xkw6FzdDwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiB2LWZvcj1cInNvbHV0aW9uIGluIHRpY2tldD8uY2F0ZWdvcnlfZGV0YWlscz8uc29sdXRpb25zXCIgOnZhbHVlPVwic29sdXRpb24uaWRcIiA+e3tzb2x1dGlvbi5kZXNjcmlwdGlvbn19PC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgPC9kaXY+XG5cbiA8ZGl2IGNsYXNzPVwicm93IG1iLTJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgPGI+e3sgJGZpbHRlcnMudHJhbnMoJ2Vycm9yX3JlcG9ydC5zb2x1dGlvbicpIH19PC9iPlxuICAgICAgICA8UXVpbGxFZGl0b3IgIHYtaWY9XCIoZXJyb3JSZXBvcnREZXRhaWxzICYmICAoIWVycm9yUmVwb3J0RGV0YWlscy5jbG9zZWRfYXQgfHwgZWRpdFRpY2tldCkgKVwiXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMHB4O1wiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwic29sdXRpb25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZWRpdG9yIGVycm9yX3NvbHV0aW9uXCJcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw6Y29udGVudD1cInNvbHV0aW9uXCJcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJzb2x1dGlvblwiXG4gICAgICAgICAgICAgICAgICBjb250ZW50VHlwZT1cImh0bWxcIi8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzb2x1dGlvblwiIHYtaWY9XCIoZXJyb3JSZXBvcnREZXRhaWxzICYmIGVycm9yUmVwb3J0RGV0YWlscy5jbG9zZWRfYXQgJiYgIWVkaXRUaWNrZXQpXCIgdi1odG1sPVwiZXJyb3JSZXBvcnREZXRhaWxzPy5zb2x1dGlvbiBcIj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuPC9kaXY+XG5cblxuIDxkaXYgY2xhc3M9XCJyb3cgbWItMlwiIHYtaWY9XCJ0aWNrZXQ/LnNvdXJjZSAhPT0gJ3BsYydcIiA+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgdi1pZj1cIiFlZGl0VGlja2V0XCI+XG4gICAgICAgIDxiPnt7ICRmaWx0ZXJzLnRyYW5zKCdlcnJvcl9yZXBvcnQucmVzcG9uc2libGUnKSB9fTogPC9iPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWluZm8gYmFkZ2UtcGlsbCBub3RpZnktbm8gIG1sLTFcIiB2LWZvcj1cInJlc3BvbnNpYmxlIGluIHRpY2tldD8ucmVzcG9uc2libGVcIiA6dGl0bGU9XCJyZXNwb25zaWJsZS5jb250YWN0X2VtYWlsXCI+e3tyZXNwb25zaWJsZS5uYW1lfX0gPC9zcGFuPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiB2LWVsc2U+XG4gICAgICA8YnI+XG4gICAgICAgIDxiIGNsYXNzPVwibWItMlwiPnt7ICRmaWx0ZXJzLnRyYW5zKCdlcnJvcl9yZXBvcnQucmVzcG9uc2libGUnKSB9fTogPC9iPlxuICAgICAgICA8YnI+XG4gICAgICAgIDxicj5cbiAgICAgICAgPHNwYW4gdi1mb3I9XCJzdXBwbGllciBpbiBzdXBwbGllcnNcIiBjbGFzcz1cIm1sLTNcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIDpuYW1lPVwiJ3N1cHBsaWVyXycrc3VwcGxpZXIuaWRcIlxuICAgICAgICAgICAgICAgICAgOmlkPVwiJ3N1cHBsaWVyXycrc3VwcGxpZXIuaWRcIlxuICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInN1cHBsaWVyLnNlbGVjdGVkXCIgLz5cblxuICAgICAgICAgICAgICAgIDxsYWJlbCA6Zm9yPVwiJ3N1cHBsaWVyXycrc3VwcGxpZXIuaWRcIj4mbmJzcDt7e3N1cHBsaWVyLm5hbWV9fSAoe3tzdXBwbGllci5jb250YWN0X3Bob25lfX0pPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8YnIvPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbjwvZGl2PlxuIDxkaXYgY2xhc3M9XCJyb3cgbWItMlwiIHYtaWY9XCIoZXJyb3JSZXBvcnREZXRhaWxzICYmIGVycm9yUmVwb3J0RGV0YWlscy5jbG9zZWRfYXQpXCIgPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiID5cbiAgICAgICAgPGI+XG4gICAgICAgICAgICA8c3Bhbj5MZXrDoXJ2YTogPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3sgKGVycm9yUmVwb3J0RGV0YWlscyAmJiBlcnJvclJlcG9ydERldGFpbHMuY2xvc2VkX2F0KSA/IG1vbWVudChlcnJvclJlcG9ydERldGFpbHMuY2xvc2VkX2F0LmRhdGUpLmZvcm1hdCgkZmlsdGVycy50cmFucygnZGF0ZXRpbWVfZm9ybWF0JykpIDogJycgfX08L3NwYW4+XG4gICAgICAgIDwvYj5cbiAgICAgIDwvZGl2PlxuPC9kaXY+XG5cblxuXG5cbjwvVGVsZXBvcnQ+XG5cbjxUZWxlcG9ydCB0bz1cIiNkcmF3ZXItYnV0dG9uc1wiPlxuICAgPGRpdiBjbGFzcz1cImJ1dHRvbnNcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTJcIiA+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgPGJ1dHRvbiBAY2xpY2s9XCJjYW5jZWxcIiBjbGFzcz1cImJ0biBidG4gYnRuLWxnIG1sLTJcIj5cbiAgICAgICAgPHNwYW4gdi1pZj1cImVkaXRUaWNrZXRcIj5Nw6lnc2U8L3NwYW4+XG4gICAgICAgIDxzcGFuIHYtZWxzZT5CZXrDoXLDoXM8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgdGV4dC1yaWdodFwiPlxuICAgICAgICA8YnV0dG9uIHYtaWY9XCIoZXJyb3JSZXBvcnREZXRhaWxzICYmICFlcnJvclJlcG9ydERldGFpbHMuY2xvc2VkX2F0ICYmICFlZGl0VGlja2V0KVwiIEBjbGljaz1cImNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLWxnIG1sLTJcIj57eyAkZmlsdGVycy50cmFucygnZXJyb3JfcmVwb3J0LnRpY2tldF9jbG9zZScpIH19PC9idXR0b24+XG4gICAgICAgIDxidXR0b24gdi1pZj1cImVkaXRUaWNrZXRcIiAgQGNsaWNrPVwic2F2ZVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBtbC0yXCI+e3sgJGZpbHRlcnMudHJhbnMoJ2Vycm9yX3JlcG9ydC50aWNrZXRfc2F2ZScpIH19PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiA8L2Rpdj5cbjwvVGVsZXBvcnQ+XG5cblxuPC90ZW1wbGF0ZT5cbjxzY3JpcHQ+XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCdcbmltcG9ydCB7IFF1aWxsRWRpdG9yIH0gZnJvbSAnQHZ1ZXVwL3Z1ZS1xdWlsbCdcbmltcG9ydCAnQHZ1ZXVwL3Z1ZS1xdWlsbC9kaXN0L3Z1ZS1xdWlsbC5zbm93LmNzcyc7XG5cbmltcG9ydCBldmVudEJ1cyBmcm9tICcuLi8uLi9jb21tb24vZXZlbnRCdXMnXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogXCJUYWJsZXRFcnJvclJlcG9ydENvbXBvbmVudFwiLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICAgIFF1aWxsRWRpdG9yXG4gICAgfSxcbiAgICBwcm9wczoge1xuICAgICAgICBlcnJvclJlcG9ydDoge1xuICAgICAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgICB9XG4gICAgfSxcbiAgICBkYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3JSZXBvcnREZXRhaWxzOiBudWxsLFxuICAgICAgICAgICAgZWRpdFRpY2tldDogZmFsc2UsXG4gICAgICAgICAgICB0aWNrZXQ6IG51bGwsXG4gICAgICAgICAgICBtb21lbnQsXG4gICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIHNhdmVMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIHN0YXR1c2VzOiBudWxsLFxuICAgICAgICAgICAgY2F0ZWdvcmllczogbnVsbCxcbiAgICAgICAgICAgIHN1cHBsaWVyczogbnVsbCxcbiAgICAgICAgICAgIHZpZXc6IGZhbHNlLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgc3RhdHVzOiBudWxsLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IG51bGwsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgICAgICAgICB0aW1lOiBudWxsLFxuICAgICAgICAgICAgcGFja2FnZTogbnVsbCxcbiAgICAgICAgICAgIGNsb3NhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGxhZGluZ1BhY2thZ2U6IGZhbHNlLFxuICAgICAgICAgICAgc29sdXRpb25fZGlzYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBzb2x1dGlvbjogJycsXG4gICAgICAgICAgICBxdWlja19zb2x1dGlvbjogMCxcbiAgICAgICAgICAgIGp1c3Rfb3BlbmVkOiB0cnVlXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAgIGNhbmNlbCgpIHtcbiAgICAgICAgICBpZih0aGlzLmVkaXRUaWNrZXQpe1xuICAgICAgICAgICAgdGhpcy5lZGl0VGlja2V0ID0gZmFsc2U7XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgIGV2ZW50QnVzLiRlbWl0KCdjbG9zZS1kcmF3ZXInIClcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGxvYWRFeHRlcm5hbFBhY2tpbmdEYXRhKGlkKSB7XG4gICAgICAgICAgdGhpcy5wYWNrYWdlID0gbnVsbDtcbiAgICAgICAgICBpZihpZCE9bnVsbCl7XG4gICAgICAgICAgdGhpcy5sYWRpbmdQYWNrYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdGhpcy4kaHR0cC5nZXQoYC9hcGkvYWRtaW4vbmF2LWdldHNoaXBtZW50LXRhc2svJHtpZH1gKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICB0aGlzLnBhY2thZ2U9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgdGhpcy5sYWRpbmdQYWNrYWdlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhZGluZ1BhY2thZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0RXJyb3JSZXBvcnREZXRhaWxzKCkge1xuICAgICAgICAgICAgdGhpcy5lcnJvclJlcG9ydERldGFpbHMgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICBpZighdGhpcy5lcnJvclJlcG9ydC5pZCkgdGhpcy5lcnJvclJlcG9ydC5pZCA9IDA7XG4gICAgICAgICAgICB0aGlzLiRodHRwLmdldChgL2FwaS9hZG1pbi9lcnJvci1yZXBvcnQvJHt0aGlzLmVycm9yUmVwb3J0LmlkfWApXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgc2VsZi5lcnJvclJlcG9ydERldGFpbHMgPSByZXNwb25zZS5kYXRhLnRpY2tldDtcbiAgICAgICAgICAgICAgICAgIHNlbGYudGlja2V0ICA9IHJlc3BvbnNlLmRhdGEudGlja2V0O1xuICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0dXNlcyA9IHJlc3BvbnNlLmRhdGEuc3RhdHVzZXM7XG4gICAgICAgICAgICAgICAgICBzZWxmLmNhdGVnb3JpZXMgPSByZXNwb25zZS5kYXRhLmNhdGVnb3JpZXM7XG4gICAgICAgICAgICAgICAgICBzZWxmLnN1cHBsaWVycyA9IHJlc3BvbnNlLmRhdGEuc3VwcGxpZXJzO1xuICAgICAgICAgICAgICAgICAgc2VsZi5zb2x1dGlvbiA9IHJlc3BvbnNlLmRhdGEuc29sdXRpb247XG4gICAgICAgICAgICAgICAgICBzZWxmLnRpY2tldC5jYXRlZ29yeV9kZXRhaWxzICA9IHNlbGYuZXJyb3JSZXBvcnREZXRhaWxzLmNhdGVnb3J5O1xuXG4gICAgICAgICAgICAgICAgICBzZWxmLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0dXMgPSAoc2VsZi5lcnJvclJlcG9ydERldGFpbHMuaWQgIT0gMD9zZWxmLmVycm9yUmVwb3J0RGV0YWlscz8uc3RhdHVzLmlkOjEpO1xuICAgICAgICAgICAgICAgICAgc2VsZi5jYXRlZ29yeSA9IChzZWxmLmVycm9yUmVwb3J0RGV0YWlscy5jYXRlZ29yeT9zZWxmLmVycm9yUmVwb3J0RGV0YWlscy5jYXRlZ29yeS5pZDoxKTtcbiAgICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpcHRpb24gPSAoc2VsZi5lcnJvclJlcG9ydERldGFpbHMuaWQgIT0gMD9zZWxmLmVycm9yUmVwb3J0RGV0YWlscy5kZXNjcmlwdGlvbjonJyk7XG4gICAgICAgICAgICAgICAgICBzZWxmLnRpbWUgPSBtb21lbnQoc2VsZi5lcnJvclJlcG9ydERldGFpbHMudGltZS5kYXRlKS5mb3JtYXQoc2VsZi4kZmlsdGVycy50cmFucygnZGF0ZXRpbWVfZm9ybWF0X2lucHV0JykpO1xuICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zYWJsZSA9IChzZWxmLmVycm9yUmVwb3J0RGV0YWlscy5pZCA/IHRydWU6ZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgc2VsZi5xdWlja19zb2x1dGlvbiA9IChzZWxmLnRpY2tldC5xdWlja19zb2x1dGlvbiA/IHNlbGYudGlja2V0LnF1aWNrX3NvbHV0aW9uLmlkOjApO1xuXG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRFeHRlcm5hbFBhY2tpbmdEYXRhKHNlbGYudGlja2V0LmV4dGVybmFsX2lkKTtcblxuICAgICAgICAgICAgICAgICAgaWYoc2VsZi5lcnJvclJlcG9ydERldGFpbHMuc3RhdHVzICE9IDMgfHwgc2VsZi5lcnJvclJlcG9ydERldGFpbHMuc29sdXRpb24gIT0gJycpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuc29sdXRpb25fZGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPD1zZWxmLnN1cHBsaWVycy5sZW5ndGggLTE7IGkrKyl7XG4gICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdXBwbGllcnNbaV0uc2VsZWN0ZWQgID0gc2VsZi5lcnJvclJlcG9ydERldGFpbHMucmVzcG9uc2libGUubWFwKGUgPT4gZS5pZCkuaW5jbHVkZXMoIHNlbGYuc3VwcGxpZXJzW2ldLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuanVzdF9vcGVuZWQgPSB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBzYXZlKCkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgICAgIGlmKHNlbGYuc29sdXRpb249PScnICYmIHNlbGYuc29sdXRpb25fZGlzYWJsZWQgPT0gZmFsc2Upe1xuICAgICAgICAgICAgICB0aGlzLiRzd2FsKHRoaXMuJGZpbHRlcnMudHJhbnMoJ2Vycm9yX3JlcG9ydC5zb2x1dGlvbl9kZXNjJyksICcnLCAnd2FybmluZycpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmKHNlbGYuZGVzY3JpcHRpb249PScnIHx8IHNlbGYuZGVzY3JpcHRpb24gPT0gbnVsbCl7XG4gICAgICAgICAgICAgIHRoaXMuJHN3YWwodGhpcy4kZmlsdGVycy50cmFucygnZXJyb3JfcmVwb3J0Lm1pc3NpbmdfZGVzYycpLCAnJywgJ3dhcm5pbmcnKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZihzZWxmLnRpbWU9PScnIHx8IHNlbGYudGltZSA9PSBudWxsKXtcbiAgICAgICAgICAgICAgdGhpcy4kc3dhbCh0aGlzLiRmaWx0ZXJzLnRyYW5zKCdlcnJvcl9yZXBvcnQubWlzc2luZ190aW1lJyksICcnLCAnd2FybmluZycpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuJGh0dHAucG9zdChgL2FwaS9hZG1pbi9lcnJvci1yZXBvcnQvJHt0aGlzLmVycm9yUmVwb3J0LmlkfS91cGRhdGVgLFxuICAgICAgICAgICAgICB0aGlzLmVycm9yUmVwb3J0RGV0YWlsc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuJHN3YWwodGhpcy4kZmlsdGVycy50cmFucygnU2lrZXJlcyBtxbF2ZWxldCcpLCAnJywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRlbWl0KCdvblNhdmUnKTtcbiAgICAgICAgICAgICAgICAgZXZlbnRCdXMuJGVtaXQoJ25ldy1lcnJvci1yZXBvcnQtc2F2ZWQnKVxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdFRpY2tldCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgdGhpcy4kc3dhbCh0aGlzLiRmaWx0ZXJzLnRyYW5zKCdTaWtlcnRlbGVuIG3FsXZlbGV0JyksICcnLCAnZXJyb3InKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICB9LFxuICAgICAgICBjbG9zZSgpIHtcbiAgICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgICAgICAgIGlmKCh0aGlzLnNvbHV0aW9uID09ICcnIHx8ICB0aGlzLnNvbHV0aW9uID09JzxwPjxicj48L3A+JyB8fCB0aGlzLnNvbHV0aW9uID09IG51bGwpICYmIHRoaXMucXVpY2tfc29sdXRpb24gPT0gMCApe1xuICAgICAgICAgICAgdGhpcy4kc3dhbCh0aGlzLiRmaWx0ZXJzLnRyYW5zKCdlcnJvcl9yZXBvcnQuc29sdXRpb25fZGVzYycpLCAnJywgJ3dhcm5pbmcnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgdGhpcy4kaHR0cC5wb3N0KGAvYXBpL2FkbWluL2Vycm9yLXJlcG9ydC8ke3RoaXMuZXJyb3JSZXBvcnQuaWR9L2Nsb3NlYCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNvbHV0aW9uOiB0aGlzLnNvbHV0aW9uLFxuICAgICAgICAgICAgICAgIHF1aWNrX3NvbHV0aW9uIDogdGhpcy5xdWlja19zb2x1dGlvbixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICB0aGlzLiRzd2FsKHRoaXMuJGZpbHRlcnMudHJhbnMoJ0hpYmFqZWd5IGxlesOhcsOhc2Egc2lrZXJlcycpLCAnJywgJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICAgICAgdGhpcy4kZW1pdCgnb25TYXZlJyk7XG5cbiAgICAgICAgICAgICAgZXZlbnRCdXMuJGVtaXQoJ25ldy1lcnJvci1yZXBvcnQtc2F2ZWQnKVxuXG4gICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBzd2l0Y2gyRWRpdCgpe1xuICAgICAgICAgIGlmKCB0aGlzLmVkaXRpbmcgKSB0aGlzLmVkaXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICBlbHNlIHRoaXMuZWRpdGluZyA9IHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIGluQXJyYXkobmVlZGxlLCBoYXlzdGFjayl7XG4gICAgICAgICAgaGF5c3RhY2suZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmlkID09IG5lZWRsZS5pZCkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSk7IHJldHVybiBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgbG9hZFN1cHBsaWVyc1RvQ2F0ZWdvcnkoKXtcbiAgICAgICAgICB0aGlzLiRodHRwLmdldChgL2FwaS9hZG1pbi9lcnJvci1yZXBvcnQvZ2V0LXN1cHBsaWVycy1ieS1jYXRlZ29yeS8ke3RoaXMuY2F0ZWdvcnl9YClcbiAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcblxuICAgICAgICAgICAgICAgICAgZm9yKGxldCBpPTA7IGk8PXRoaXMuc3VwcGxpZXJzLmxlbmd0aC0xOyBpKyspe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1cHBsaWVyc1tpXS5zZWxlY3RlZD1mYWxzZTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgZm9yKGxldCBpPTA7IGk8PXJlc3BvbnNlLmRhdGEubGVuZ3RoLTE7IGkrKyl7XG4gICAgICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1cHBsaWVyc1tyZXNwb25zZS5kYXRhW2ldLmlkXS5zZWxlY3RlZD10cnVlO1xuICAgICAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbW91bnRlZCgpIHtcbiAgICAgIHRoaXMuZXJyb3JSZXBvcnREZXRhaWxzID0gdGhpcy5nZXRFcnJvclJlcG9ydERldGFpbHMoKTtcbiAgICAgICAgaWYoIHRoaXMuZXJyb3JSZXBvcnQuaWQgKXtcbiAgICAgICAgICAvL3RoaXMuZXJyb3JSZXBvcnREZXRhaWxzID0gdGhpcy5nZXRFcnJvclJlcG9ydERldGFpbHMoKTtcbiAgICAgICAgICB0aGlzLnZpZXcgPSB0cnVlO1xuICAgICAgICAgIGlmKHRoaXMuZXJyb3JSZXBvcnQuY2xvc2VkX2F0KVxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA9IDE7XG5cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgLy90aGlzLmVycm9yUmVwb3J0RGV0YWlscyA9IG51bGw7XG4gICAgICAgICAgdGhpcy52aWV3ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHdhdGNoOiB7XG4gICAgICBlcnJvclJlcG9ydCA6e1xuICAgICAgICAgICAgaGFuZGxlcihuZXdWYWwpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JSZXBvcnREZXRhaWxzID0gdGhpcy5nZXRFcnJvclJlcG9ydERldGFpbHMoKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdFRpY2tldCA9IGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZXA6IHRydWVcbiAgICAgICAgfSxcbiAgICAgIHN1cHBsaWVycyA6e1xuICAgICAgICAgICAgaGFuZGxlcihuZXdWYWwpIHtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvclJlcG9ydERldGFpbHMucmVzcG9uc2libGUgPSB0aGlzLnN1cHBsaWVycztcbiAgICAgICAgICAgICAgLy90aGlzLnN1cHBsaWVycyA9IHRoaXMuZXJyb3JSZXBvcnREZXRhaWxzLnJlc3BvbnNpYmxlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZXA6IHRydWVcbiAgICAgICAgfSxcbiAgICAgIHN0YXR1cyA6e1xuICAgICAgICAgICAgaGFuZGxlcihuZXdWYWwpIHtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvclJlcG9ydERldGFpbHMuc3RhdHVzID0gdGhpcy5zdGF0dXM7XG4gICAgICAgICAgICAgIGlmKHRoaXMuZXJyb3JSZXBvcnREZXRhaWxzLnN0YXR1cyA9PSAzKVxuICAgICAgICAgICAgICAgIHRoaXMuc29sdXRpb25fZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICAvL3RoaXMuZXJyb3JSZXBvcnREZXRhaWxzLnNvbHV0aW9uID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zb2x1dGlvbl9kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkZWVwOiB0cnVlXG4gICAgICAgIH0sY2F0ZWdvcnkgOntcbiAgICAgICAgICAgIGhhbmRsZXIobmV3VmFsKSB7XG4gICAgICAgICAgICAgIHRoaXMuZXJyb3JSZXBvcnREZXRhaWxzLmNhdGVnb3J5ID0gdGhpcy5jYXRlZ29yeTtcbiAgICAgICAgICAgICAgdGhpcy5sb2FkU3VwcGxpZXJzVG9DYXRlZ29yeSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRlZXA6IHRydWVcbiAgICAgICAgfSxkZXNjcmlwdGlvbiA6e1xuICAgICAgICAgIGhhbmRsZXIobmV3VmFsKSB7XG4gICAgICAgICAgICAgIHRoaXMuZXJyb3JSZXBvcnREZXRhaWxzLmRlc2NyaXB0aW9uID0gdGhpcy5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSx0aW1lIDp7XG4gICAgICAgICAgaGFuZGxlcihuZXdWYWwpIHtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvclJlcG9ydERldGFpbHMudGltZSA9IHRoaXMudGltZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAsc29sdXRpb24gOntcbiAgICAgICAgICBoYW5kbGVyKG5ld1ZhbCkge1xuICAgICAgICAgICAgICBpZih0aGlzLmp1c3Rfb3BlbmVkKXtcbiAgICAgICAgICAgICAgICB0aGlzLnNvbHV0aW9uID0gdGhpcy5lcnJvclJlcG9ydERldGFpbHMuc29sdXRpb247XG4gICAgICAgICAgICAgICAgdGhpcy5qdXN0X29wZW5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yUmVwb3J0RGV0YWlscy5zb2x1dGlvbiA9IHRoaXMuc29sdXRpb247XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICB9LFxuICAgIGNvbXB1dGVkOiB7XG5cbiAgICB9XG4gIH1cbjwvc2NyaXB0PlxuXG48c3R5bGU+XG4uZXJyb3Jfc29sdXRpb24ge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwcHg7XG59XG5cbi5kZXNjcmlwdGlvbiB7XG4gICAgcGFkZGluZzogMTBweDtcbiAgICBiYWNrZ3JvdW5kOiAjZmJmYmZiO1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG59XG48L3N0eWxlPiIsIlxuLmFjdGl2aXR5IC5ib3JkZXItbGVmdC1saW5lIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luLWxlZnQ6IDM1cHg7XG5cbn1cblxuLmFjdGl2aXR5IHtcbiAgICAuYnRuLWNpcmNsZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMTFweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgICAgIHdpZHRoOiA1NnB4O1xuICAgICAgICBoZWlnaHQ6IDU1cHg7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAtMjhweDtcbiAgICB9XG59XG5cbmEge1xuICAgIC5mYS1lZGl0IHtcbiAgICAgICAgY29sb3I6ICMwMDA7XG4gICAgfVxufVxuXG4uYXV0b21hdGljLWlzc3VlLWxpc3Qge1xuXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4udGFibGV0LWJvZHkge1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG59XG5cbi5maXgtc2VhcmNoe1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICB0b3A6IDA7XG4gICAgei1pbmRleDogMTA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbGVmdDogMDtcbiAgICBwYWRkaW5nOiAxNHB4IDI5cHggMTBweCAxNXB4O1xuICAgIGJhY2tncm91bmQ6ICNmZmY7XG59XG4uYXV0b21hdGljLWlzc3VlLXJvd3tcbiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgIHBhZGRpbmctdG9wOiAxMHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgLy8gY29sb3I6ICNmZmY7XG4gICAgYm94LXNoYWRvdzogMCAzcHggOXB4IDAgcmdiYSgxNjksMTg0LDIwMCwuMTUpO1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogMCAzcHggOXB4IDAgcmdiYSgxNjksMTg0LDIwMCwuMTUpO1xuICAgIC1tb3otYm94LXNoYWRvdzogMCAzcHggOXB4IDAgcmdiYSgxNjksMTg0LDIwMCwuMTUpXG59XG4iLCI8dGVtcGxhdGU+XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgQGNsaWNrPVwiY2xpY2tcIj5cblx0XHRcdDxpIGNsYXNzPVwiZmEgZmEtdXBkYXRlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiBGcmlzc8OtdMOpczwvYnV0dG9uPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBldmVudEJ1cyBmcm9tICcuLi8uLi9jb21tb24vZXZlbnRCdXMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogXCJUYWJsZXRFcnJvclJlcG9ydEFkZE5ld1RvcEJ1dHRvblwiLFxuICBjb21wb25lbnRzOiB7XG5cbiAgfSxcbiAgcHJvcHM6IHtcblxuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgfTtcbiAgfSxcbiAgbWV0aG9kczoge1xuICAgIGNsaWNrKCkge1xuICAgICAgIGV2ZW50QnVzLiRlbWl0KCduZXctZXJyb3ItcmVwb3J0LW9wZW4tbW9kYWwnKVxuICAgIH0sXG4gIH0sXG4gIG1vdW50ZWQoKSB7XG5cbiAgfSxcbiAgIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgLy8gcmVtb3ZpbmcgZXZlbnRCdXMgbGlzdGVuZXJcbiAgICBldmVudEJ1cy4kb2ZmKCduZXctZXJyb3ItcmVwb3J0LW9wZW4tbW9kYWwnKVxuICB9XG59O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZSBzY29wZWQ+XG4jc2VuZC1lcnJvci13cmFwcGVyIHtcbiAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgIGhlaWdodDogNzFweDtcbiAgICBib3R0b206IDBweDtcbiAgICB3aWR0aDogY2FsYygxMDAlIC0gNTJweCk7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG48L3N0eWxlPlxuIiwiXG5cbiNvdmVybGF5IHtcbiAgZm9udC1mYW1pbHk6IFwiUG9wcGluc1wiLCBzYW5zLXNlcmlmO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyOyBcbiAgdHJhbnNpdGlvbjogMC4zcyBsaW5lYXI7XG59XG5cbiNvdmVybGF5LmFjdGl2ZSB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMHZoO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNyk7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMHZoO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigwIDAgMCAvIDQxJSk7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwcHg7XG4gICAgei1pbmRleDogOTk7XG5cbn1cbiBcblxuI2RyYXdlci13cmFwcGVyIHtcbiAgaGVpZ2h0OiAxMDB2aDtcbiAgd2lkdGg6IDYwMHB4OyBcbiAgYmFja2dyb3VuZDogI2ZmZmZmZjtcblxuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgXG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgcmlnaHQ6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDAlKTtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgbGluZWFyO1xuICBtYXJnaW4tbGVmdDogMjAwcHg7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNlZGYyZjk7XG4gICAgdG9wOiAwO1xuICAgIHotaW5kZXg6IDEwMDtcbiAgICAuZHJhd2VyLWhlYWR7XG4gICAgXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZGYyZjk7ICAgICAgICBcbiAgICAgICAgcGFkZGluZzogNnB4IDE1cHggMHB4O1xuICAgICAgICAuY2xvc2V7ICAgICAgICAgICBcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAjZHJhd2VyeyAgICAgICAgXG4gICAgICAgIHBhZGRpbmc6IDRweCAxNXB4OyAgICAgICAgIFxuICAgICAgICBoZWlnaHQ6IGNhbGMoIDEwMHZoIC0gMTQwcHgpO1xuICAgICAgICBvdmVyZmxvdzogc2Nyb2xsO1xuXG4gICAgfVxuICAgICNkcmF3ZXItYnV0dG9uc3sgICAgICAgIFxuICAgICAgICBwYWRkaW5nOiA0cHggMTVweDtcbiAgICB9XG59XG5cbiNkcmF3ZXItd3JhcHBlci5hY3RpdmUge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG59XG4gXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA2MDBweCkge1xuICAjYnVyZ2VyIHtcbiAgICB0b3A6IDkwJTtcbiAgICByaWdodDogMTIlO1xuICB9XG4gIFxuXG4jZHJhd2VyLXdyYXBwZXIge1xuICBoZWlnaHQ6IDEwMHZoO1xuICB3aWR0aDogMTAwJTsgXG4gIH1cbn1cblxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9*/