/* Tints could be set with:
  color: mix($color--navy, #FFF, 10%);
  But the mix function seems slightly off
  */
/* LINKS */
/* breakpoints */
body.sidebar #main .sidebar {
  border-color: #058488; }
  body.sidebar #main .sidebar .field-name-field-paragraph-sidebar > .field-items > .field-item:after,
  body.sidebar #main .sidebar .field-name-field-blockref-sidebar > .field-items > .field-item:after,
  body.sidebar #main .sidebar .field-name-field-pg-blockref-blockref > .field-items > .field-item:after,
  body.sidebar #main .sidebar .region-sidebar > .block:after {
    background-color: #058488; }

#main #content div[id*=block-views-news-news-block] > h3,
#main #content div[id*=block-views-events-events-block] > h3,
#main #content div[id*=block-views-blog-blog-block] > h3,
#main #content div[id*=block-ucsf-b1gfoot-xmlnews-startingpoint-xmlnews] > h3,
#main #content div[id*=block-ucsf-b1gfoot-xmlevents-startingpoint-xmlevents] > h3 {
  border-bottom: 2px solid #058488; }

#main #content .field-name-field-pg-ref-pubs .field-label,
#main #content .field-name-field-pg-ref-profiles .field-label,
#main #content .field-name-field-person-publications-list .field-label,
#main #content .field-name-field-person-pub-override-list .field-label,
#main #content .block-ucsf-b1gfoot-publication > h3,
#main #content .block-ucsf-b1gfoot-profile > h3,
#main #content .block-ucsf-b1gfoot-profile > h3,
#block-views-blog-related-author-block > h3,
#block-views-blog-by-author-block > h3 {
  border-bottom: 2px solid #058488; }

.slider-no-image .region-content-top #block-fieldblock-node-page-default-field-paragraph-sliders:after {
  background-color: #058488; }

.slider-image-behind .region-content-top #block-fieldblock-node-page-default-field-paragraph-sliders .paragraphs-items > .field > .field-items > .slick-list >
.slick-track > .field-item:after {
  background-color: #058488; }

@media (max-width: 959px) {
  .slider-image-behind .region-content-top #block-fieldblock-node-page-default-field-paragraph-sliders .paragraphs-items > .field > .field-items > .slick-list >
.slick-track > .field-item:before {
    background-color: #058488; } }

.slider-image-behind .region-content-top #block-fieldblock-node-page-default-field-paragraph-sliders .group-slider-content:after {
  background-color: #058488; }

.slider-image-behind .region-content-top #block-fieldblock-node-page-default-field-paragraph-sliders .field-name-field-pg-slider-image:after {
  background-color: #058488; }

.slider-image-left .region-content-top #block-fieldblock-node-page-default-field-paragraph-sliders:after {
  background-color: #058488; }

.slider-image-right .region-content-top .group-slider-content {
  background-color: #058488; }

.slider-image-right .region-content-top #block-fieldblock-node-page-default-field-paragraph-sliders:after {
  background-color: #058488; }

#main #content #block-views-events-events-block h2 {
  border-bottom: 2px solid #058488; }

#main #content #block-views-publications-block h2 {
  border-bottom: 2px solid #058488; }

.view-display-id-blog_page .blog-author-name a,
.node-blog .byline-author a {
  color: #058488; }

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vjb25kYXJ5LXRlYWwuY3NzIiwic291cmNlcyI6WyJzZWNvbmRhcnktdGVhbC5zY3NzIiwiLi4vLi4vdXRpbGl0aWVzL18wX3ZhcmlhYmxlcy5zY3NzIiwiX3NlY29uZGFyeS1jb2xvcnMuc2NzcyIsIi4uLy4uL2JyZWFrcG9pbnQvYnJlYWtwb2ludC5zY3NzIiwiLi4vLi4vYnJlYWtwb2ludC9fc2V0dGluZ3Muc2NzcyIsIi4uLy4uL2JyZWFrcG9pbnQvX2NvbnRleHQuc2NzcyIsIi4uLy4uL2JyZWFrcG9pbnQvX2hlbHBlcnMuc2NzcyIsIi4uLy4uL2JyZWFrcG9pbnQvX3BhcnNlcnMuc2NzcyIsIi4uLy4uL2JyZWFrcG9pbnQvcGFyc2Vycy9fcXVlcnkuc2NzcyIsIi4uLy4uL2JyZWFrcG9pbnQvcGFyc2Vycy9fc2luZ2xlLnNjc3MiLCIuLi8uLi9icmVha3BvaW50L3BhcnNlcnMvc2luZ2xlL19kZWZhdWx0LnNjc3MiLCIuLi8uLi9icmVha3BvaW50L3BhcnNlcnMvX2RvdWJsZS5zY3NzIiwiLi4vLi4vYnJlYWtwb2ludC9wYXJzZXJzL2RvdWJsZS9fZGVmYXVsdC1wYWlyLnNjc3MiLCIuLi8uLi9icmVha3BvaW50L3BhcnNlcnMvZG91YmxlL19kb3VibGUtc3RyaW5nLnNjc3MiLCIuLi8uLi9icmVha3BvaW50L3BhcnNlcnMvZG91YmxlL19kZWZhdWx0LnNjc3MiLCIuLi8uLi9icmVha3BvaW50L3BhcnNlcnMvX3RyaXBsZS5zY3NzIiwiLi4vLi4vYnJlYWtwb2ludC9wYXJzZXJzL3RyaXBsZS9fZGVmYXVsdC5zY3NzIiwiLi4vLi4vYnJlYWtwb2ludC9wYXJzZXJzL19yZXNvbHV0aW9uLnNjc3MiLCIuLi8uLi9icmVha3BvaW50L3BhcnNlcnMvcmVzb2x1dGlvbi9fcmVzb2x1dGlvbi5zY3NzIiwiLi4vLi4vYnJlYWtwb2ludC9fbm8tcXVlcnkuc2NzcyIsIi4uLy4uL2JyZWFrcG9pbnQvX3Jlc3BvbmQtdG8uc2NzcyIsIi4uLy4uL2JyZWFrcG9pbnQvX2xlZ2FjeS1zZXR0aW5ncy5zY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIkBpbXBvcnQgXCIuLi8uLi91dGlsaXRpZXMvXzBfdmFyaWFibGVzLnNjc3NcIjtcclxuXHJcbiRzZWNvbmRhcnktY29sb3I6ICRjb2xvci0tdGVhbDtcclxuXHJcbkBpbXBvcnQgXCJzZWNvbmRhcnktY29sb3JzXCI7XHJcblxyXG4vLyBib2R5LnNpZGViYXIge1xyXG4vLyAgICNtYWluIHtcclxuLy8gICAgIC5zaWRlYmFyIHtcclxuLy8gICAgICAgYm9yZGVyLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yO1xyXG4vLyAgICAgfVxyXG4vLyAgIH1cclxuLy8gfVxyXG5cclxuLy8gI2Jsb2NrLXZpZXdzLW5ld3MtbmV3cy1ibG9jayB7XHJcbi8vICAgbWFyZ2luLWJvdHRvbTogNDBweDtcclxuLy8gICBoMiB7XHJcbi8vICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgJHNlY29uZGFyeS1jb2xvcjtcclxuLy8gICB9XHJcbi8vIH1cclxuXHJcbi8vICNibG9jay11Y3NmLWIxZ2Zvb3QteG1sZXZlbnRzLXN0YXJ0aW5ncG9pbnQteG1sZXZlbnRzIHtcclxuLy8gICBoMiB7XHJcbi8vICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgJHNlY29uZGFyeS1jb2xvcjtcclxuLy8gICB9XHJcbi8vIH1cclxuIiwiJG1haW4tZm9udDogXCJIZWx2ZXRpY2FOZXVlTFRXMDQtNTVSb21hblwiLCBcIkhlbHZldGljYSBOZXVlXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XHJcbiRtYWluLWZvbnQtLWxpZ2h0OiBcIkhlbHZldGljYU5ldWVMVFcwNC00NUxpZ2h0XCIsIFwiSGVsdmV0aWNhIE5ldWUgTGlnaHRcIiwgXCJIZWx2ZXRpY2FOZXVlLWxpZ2h0XCIsIFwiSGVsdmV0aWNhIE5ldWVcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcclxuJG1haW4tZm9udC0taGVhZGVyOiBcIkhlbHZldGljYU5ldWVMVFcwNC01NVJvbWFuXCIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XHJcbiRwcmltYXJ5LWZvbnQ6ICRtYWluLWZvbnQ7XHJcbiRzZWNvbmRhcnktZm9udDogXCJHcmFuam9uTFRXMDEtUm9tYW5cIiwgXCJHcmFuam9uXCIsIEdhcmFtb25kLCBzZXJpZjtcclxuJGZvbnQtYXdlc29tZTogXCJGb250QXdlc29tZVwiO1xyXG5cclxuJGRlZmF1bHQtLWZvbnQtc2l6ZTogMTZweDtcclxuJGZvbnQtc2l6ZS1zbWFsbDogLjllbTtcclxuJGRlZmF1bHQtLWxpbmUtaGVpZ2h0OiAxLjQ7XHJcblxyXG4kZm9udC0tZXh0cmEtLWxpZ2h0OiAyMDA7XHJcbiRmb250LS1saWdodDogMzAwO1xyXG4kZm9udC0tbm9ybWFsOiA0MDA7XHJcbiRmb250LS1ib2xkOiA1MDA7XHJcblxyXG4kZm9udC1ncmV5OiAjNTI1ODYwO1xyXG5cclxuJGNvbG9yLS13aGl0ZTogI0ZGRjtcclxuJGNvbG9yLS1ibGFjazogIzAwMDtcclxuJGNvbG9yLS1ncmV5MTogI0QxRDNEMztcclxuJGNvbG9yLS1ncmV5MjogI0I0QjlCRjtcclxuJGNvbG9yLS1ncmV5MzogI0VGRUZFRjtcclxuJGNvbG9yLS1ncmV5NDogI0VERURFRDtcclxuJGNvbG9yLS1ncmV5LXBhbGU6ICNmMmY0ZjY7XHJcbiRjb2xvci1ncmV5LWJsdWU6ICM1MDYzODA7XHJcblxyXG4vLyBQcmltYXJ5IFBhbGV0dGVcclxuJGNvbG9yLS1uYXZ5OiAjMDUyMDQ5O1xyXG4kY29sb3ItLXRlYWw6ICMwNTg0ODg7XHJcbiRjb2xvci0tZ3JlZW46ICM2RUE0MDA7XHJcbiRjb2xvci0tYmx1ZTogIzAwNzFhZDtcclxuJGNvbG9yLS1vcmFuZ2U6ICNGMjZEMDQ7XHJcbiRjb2xvci0tZ3JleTogJGNvbG9yLS1ncmV5MjtcclxuXHJcbi8vIFNlY29uZGFyeSBQYWxldHRlXHJcbiRjb2xvci0tcHVycGxlOiAjNzE2RkIyO1xyXG4kY29sb3ItLXBpbms6ICNFQjA5M0M7XHJcbiRjb2xvci0teWVsbG93OiAjRkZERDAwO1xyXG4kY29sb3ItLWdyZXk6ICRjb2xvci0tZ3JleTI7XHJcblxyXG4vLyBCb251cyBjb2xvclxyXG4kY29sb3ItLWRhcmstZ3JleTogIzczNzM3MztcclxuJGNvbG9yLS1saWdodC1ncmV5OiAjRUJFRkYzO1xyXG4vLyBUaW50c1xyXG4vKiBUaW50cyBjb3VsZCBiZSBzZXQgd2l0aDpcclxuICBjb2xvcjogbWl4KCRjb2xvci0tbmF2eSwgI0ZGRiwgMTAlKTtcclxuICBCdXQgdGhlIG1peCBmdW5jdGlvbiBzZWVtcyBzbGlnaHRseSBvZmZcclxuICAqL1xyXG4kY29sb3ItLWJsYWNrLS10aW50MDU6ICMzQjNCM0I7XHJcbiRjb2xvci0tYmxhY2stLXRpbnQxOiAjNEQ0RDREO1xyXG4kY29sb3ItLWJsYWNrLS10aW50MjogIzk5OTk5OTtcclxuJGNvbG9yLS1ibGFjay0tdGludDM6ICNFNUU1RTU7XHJcblxyXG4kY29sb3ItLWdyZXkxLS10aW50MTogI0RGRTBFMDtcclxuJGNvbG9yLS1ncmV5MS0tdGludDI6ICNFREVERUU7XHJcbiRjb2xvci0tZ3JleTEtLXRpbnQzOiAjRkFGQkZCO1xyXG5cclxuJGNvbG9yLS1ncmV5Mi0tdGludDE6ICNDQkNFRDI7XHJcbiRjb2xvci0tZ3JleTItLXRpbnQyOiAjRTFFM0U2O1xyXG4kY29sb3ItLWdyZXkyLS10aW50MzogI0Y4RjhGOTtcclxuXHJcbiRjb2xvci0tZ3JleS0tdGludDE6ICRjb2xvci0tZ3JleTItLXRpbnQxO1xyXG5cclxuJGNvbG9yLS1uYXZ5LS10aW50MTogIzUwNjM4MDtcclxuJGNvbG9yLS1uYXZ5LS10aW50MjogIzlCQTZCNjtcclxuJGNvbG9yLS1uYXZ5LS10aW50MzogI0U2RTlFRDtcclxuXHJcbiRjb2xvci0tYmx1ZS0tdGludDE6ICM1REFGREI7XHJcbiRjb2xvci0tYmx1ZS0tdGludDI6ICNBMkQxRUE7XHJcbiRjb2xvci0tYmx1ZS0tdGludDM6ICNFOEY0RkE7XHJcblxyXG4kY29sb3ItLW9yYW5nZS0tdGludDE6ICNGN0E2NjU7XHJcbiRjb2xvci0tb3JhbmdlLS10aW50MjogI0ZCQ0NBNztcclxuJGNvbG9yLS1vcmFuZ2UtLXRpbnQzOiAjRkVGMkU5O1xyXG5cclxuJGNvbG9yLS10ZWFsLS10aW50MTogIzVEQkZDNTtcclxuJGNvbG9yLS10ZWFsLS10aW50MjogI0EzREFERTtcclxuJGNvbG9yLS10ZWFsLS10aW50MzogI0U4RjZGNztcclxuXHJcbiRjb2xvci0tZ3JlZW4tLXRpbnQxOiAjQjFEMTZGO1xyXG4kY29sb3ItLWdyZWVuLS10aW50MjogI0QzRTRBRDtcclxuJGNvbG9yLS1ncmVlbi0tdGludDM6ICNGNEY4RUE7XHJcblxyXG4kY29sb3ItLXB1cnBsZS0tdGludDE6ICM5QzlBQzk7XHJcbiRjb2xvci0tcHVycGxlLS10aW50MjogI0M2QzVFMDtcclxuJGNvbG9yLS1wdXJwbGUtLXRpbnQzOiAjRjFGMUY3O1xyXG5cclxuJGNvbG9yLS1waW5rLS10aW50MTogI0YyNUQ3RjtcclxuJGNvbG9yLS1waW5rLS10aW50MjogI0Y3QTNCNjtcclxuJGNvbG9yLS1waW5rLS10aW50MzogI0ZERThFRDtcclxuXHJcbiRjb2xvci0teWVsbG93LS10aW50MTogI0ZGRTc0RDtcclxuJGNvbG9yLS15ZWxsb3ctLXRpbnQyOiAjRkZGMTk5O1xyXG4kY29sb3ItLXllbGxvdy0tdGludDM6ICNGRkZDRTY7XHJcblxyXG5cclxuJGNvbG9yLS1ib3JkZXI6ICRjb2xvci0tZ3JleTI7XHJcbiRjb2xvci0tYm9yZGVyLS1ob3ZlcjogJGNvbG9yLS1ibGFjay0tdGludDI7XHJcbiRjb2xvci0tYm9yZGVyLS1hY3RpdmU6ICRjb2xvci0tYmxhY2stLXRpbnQxO1xyXG5cclxuJGNvbG9yLS10ZXh0OiAkY29sb3ItLWJsYWNrO1xyXG5cclxuLyogTElOS1MgKi9cclxuLy8gTGluayBkZWZhdWx0IGNvbG9yIGFuZCBob3ZlciBjb2xvclxyXG4kY29sb3ItLWxpbms6ICRjb2xvci0tYmx1ZTtcclxuJGNvbG9yLS1saW5rLS1ob3ZlcjogIzA1MjA0OTtcclxuXHJcbi8vIExpbmsgcmV2ZXJzZSBjb2xvciBhbmQgaG92ZXIgY29sb3JcclxuJGNvbG9yLS1saW5rLWRhcms6ICRjb2xvci0tbmF2eTtcclxuJGNvbG9yLS1saW5rLWRhcmstLWhvdmVyOiAkY29sb3ItLWJsdWU7XHJcblxyXG4kY29sb3ItLWVtcHR5OiAjQUJBQkFCO1xyXG5cclxuLyogYnJlYWtwb2ludHMgKi9cclxuJHdpZHRoLS14c21hbGwgIDogMzIwcHg7XHJcbiR3aWR0aC0tc21hbGwgICA6IDQ4MHB4O1xyXG4kd2lkdGgtLW1lZGl1bSAgOiA3NjlweDtcclxuJHdpZHRoLS1tZWRpdW0tLW1haW4tLWNvbnRlbnQgIDogNzY4cHg7XHJcbiR3aWR0aC0tOTYwICBcdDogOTYwcHg7XHJcbiR3aWR0aC0tbGFyZ2UgICA6IDEzMjBweDtcclxuJHdpZHRoLS14bGFyZ2UgIDogMTE3MHB4O1xyXG5cclxuJG1heC13aWR0aDogJHdpZHRoLS1sYXJnZTtcclxuJHdpZHRoLS10YWJsZXQ6ICR3aWR0aC0tbWVkaXVtO1xyXG4kd2lkdGgtLWRlc2t0b3A6ICR3aWR0aC0tbGFyZ2U7XHJcblxyXG4vLyBCcmVha3BvaW50IHZhcmlhYmxlcyBhcmUgcHJlZml4ZWQgd2l0aCBcIiRicC0tXCJcclxuLy8gTW9iaWxlLWZpcnN0IHF1ZXJpZXNcclxuJGJwLS14c21hbGwtdXAgIDogJHdpZHRoLS14c21hbGw7XHJcbiRicC0tc21hbGwtdXAgICA6ICR3aWR0aC0tc21hbGw7XHJcbiRicC0tbWVkaXVtLXVwICA6ICR3aWR0aC0tbWVkaXVtO1xyXG4kYnAtLW1lZGl1bS11cC0tbWFpbi0tY29udGVudCAgOiAkd2lkdGgtLW1lZGl1bS0tbWFpbi0tY29udGVudDtcclxuJGJwLS10YWJsZXQtdXBcdDogJGJwLS1tZWRpdW0tdXAtLW1haW4tLWNvbnRlbnQ7XHJcbiRicC0tOTYwLXVwICBcdDogJHdpZHRoLS05NjA7XHJcbiRicC0tbGFyZ2UtdXAgICA6ICR3aWR0aC0tbGFyZ2U7XHJcbiRicC0teGxhcmdlLXVwICA6ICR3aWR0aC0teGxhcmdlO1xyXG5cclxuLy8gTW9iaWxlLWxhc3QgcXVlcmllcyAoVVNFIFNQQVJJTkdMWSlcclxuJGJwLS10YWJsZXQtZG93bjogJGJwLS10YWJsZXQtdXAgLSAxO1xyXG4kYnAtLXNtYWxsLWRvd246IG1heC13aWR0aCAkd2lkdGgtLW1lZGl1bSAtIDE7XHJcbiRicC0tbWVkaXVtLWRvd246IG1heC13aWR0aCAkd2lkdGgtLWxhcmdlIC0gMTtcclxuJGJwLS05NjAtZG93bjogbWF4LXdpZHRoICR3aWR0aC0tOTYwIC0gMTtcclxuIiwiLy8gLnBhcmFncmFwaHMtaXRlbS1zbGlkZXIge1xyXG4vLyAgICYuc2xpZGVyLXR5cGUtMSxcclxuLy8gICAmLnNsaWRlci10eXBlLTIge1xyXG4vLyAgICAgLnBhcmFncmFwaHMtaXRlbS1zbGlkZXItaW1hZ2UgLmZpZWxkLW5hbWUtZmllbGQtdGV4dGFyZWEtYm9keSB7XHJcbi8vICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnktY29sb3I7XHJcbi8vICAgICB9XHJcbi8vICAgfVxyXG4vLyB9XHJcbkBpbXBvcnQgXCIuLi8uLi9icmVha3BvaW50L2JyZWFrcG9pbnRcIjtcclxuXHJcbmJvZHkuc2lkZWJhciB7XHJcbiAgI21haW4ge1xyXG4gICAgLnNpZGViYXIge1xyXG4gICAgICBib3JkZXItY29sb3I6ICRzZWNvbmRhcnktY29sb3I7XHJcbiAgICAgIGgyIHtcclxuICAgICAgICAvL2JvcmRlci1ib3R0b206IDJweCBzb2xpZCAkc2Vjb25kYXJ5LWNvbG9yO1xyXG4gICAgICB9XHJcbiAgICAgIC5maWVsZC1uYW1lLWZpZWxkLXBhcmFncmFwaC1zaWRlYmFyID4gLmZpZWxkLWl0ZW1zID4gLmZpZWxkLWl0ZW06YWZ0ZXIsXHJcbiAgICAgIC5maWVsZC1uYW1lLWZpZWxkLWJsb2NrcmVmLXNpZGViYXIgPiAuZmllbGQtaXRlbXMgPiAuZmllbGQtaXRlbTphZnRlcixcclxuICAgICAgLmZpZWxkLW5hbWUtZmllbGQtcGctYmxvY2tyZWYtYmxvY2tyZWYgPiAuZmllbGQtaXRlbXMgPiAuZmllbGQtaXRlbTphZnRlcixcclxuICAgICAgLnJlZ2lvbi1zaWRlYmFyID4gLmJsb2NrOmFmdGVyIHtcclxuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIC5maWVsZC1pdGVtIHtcclxuICAgICAgLy8gICBib3JkZXItYm90dG9tOiAycHggc29saWQgJHNlY29uZGFyeS1jb2xvcjtcclxuICAgICAgLy8gICAmOmxhc3QtY2hpbGQge1xyXG4gICAgICAvLyAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbiNtYWluICNjb250ZW50IHtcclxuICBkaXZbaWQqPWJsb2NrLXZpZXdzLW5ld3MtbmV3cy1ibG9ja10sXHJcbiAgZGl2W2lkKj1ibG9jay12aWV3cy1ldmVudHMtZXZlbnRzLWJsb2NrXSxcclxuICBkaXZbaWQqPWJsb2NrLXZpZXdzLWJsb2ctYmxvZy1ibG9ja10sXHJcbiAgZGl2W2lkKj1ibG9jay11Y3NmLWIxZ2Zvb3QteG1sbmV3cy1zdGFydGluZ3BvaW50LXhtbG5ld3NdLFxyXG4gIGRpdltpZCo9YmxvY2stdWNzZi1iMWdmb290LXhtbGV2ZW50cy1zdGFydGluZ3BvaW50LXhtbGV2ZW50c10ge1xyXG4gICAgJiA+IGgzIHtcclxuICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICRzZWNvbmRhcnktY29sb3I7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4jbWFpbiAjY29udGVudCAuZmllbGQtbmFtZS1maWVsZC1wZy1yZWYtcHVicyAuZmllbGQtbGFiZWwsXHJcbiNtYWluICNjb250ZW50IC5maWVsZC1uYW1lLWZpZWxkLXBnLXJlZi1wcm9maWxlcyAuZmllbGQtbGFiZWwsXHJcbiNtYWluICNjb250ZW50IC5maWVsZC1uYW1lLWZpZWxkLXBlcnNvbi1wdWJsaWNhdGlvbnMtbGlzdCAuZmllbGQtbGFiZWwsXHJcbiNtYWluICNjb250ZW50IC5maWVsZC1uYW1lLWZpZWxkLXBlcnNvbi1wdWItb3ZlcnJpZGUtbGlzdCAuZmllbGQtbGFiZWwsXHJcbiNtYWluICNjb250ZW50IC5ibG9jay11Y3NmLWIxZ2Zvb3QtcHVibGljYXRpb24gPiBoMyxcclxuI21haW4gI2NvbnRlbnQgLmJsb2NrLXVjc2YtYjFnZm9vdC1wcm9maWxlID4gaDMsXHJcbiNtYWluICNjb250ZW50IC5ibG9jay11Y3NmLWIxZ2Zvb3QtcHJvZmlsZSA+IGgzLFxyXG4jYmxvY2stdmlld3MtYmxvZy1yZWxhdGVkLWF1dGhvci1ibG9jayA+IGgzLFxyXG4jYmxvY2stdmlld3MtYmxvZy1ieS1hdXRob3ItYmxvY2sgPiBoMyxcclxuIHtcclxuICBib3JkZXItYm90dG9tOiAycHggc29saWQgJHNlY29uZGFyeS1jb2xvcjtcclxufVxyXG5cclxuXHJcbi5zbGlkZXItbm8taW1hZ2UgLnJlZ2lvbi1jb250ZW50LXRvcHtcclxuICAjYmxvY2stZmllbGRibG9jay1ub2RlLXBhZ2UtZGVmYXVsdC1maWVsZC1wYXJhZ3JhcGgtc2xpZGVycyB7XHJcbiAgICAmOmFmdGVyIHtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeS1jb2xvcjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi5zbGlkZXItaW1hZ2UtYmVoaW5kIC5yZWdpb24tY29udGVudC10b3B7XHJcbiAgI2Jsb2NrLWZpZWxkYmxvY2stbm9kZS1wYWdlLWRlZmF1bHQtZmllbGQtcGFyYWdyYXBoLXNsaWRlcnMge1xyXG4gICAgLnBhcmFncmFwaHMtaXRlbXMgPiAuZmllbGQgPiAuZmllbGQtaXRlbXMgPiAuc2xpY2stbGlzdCA+XHJcbiAgICAuc2xpY2stdHJhY2sgPiAuZmllbGQtaXRlbSB7XHJcbiAgICAgICY6YWZ0ZXIge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnktY29sb3I7XHJcbiAgICAgIH1cclxuICAgICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkYnAtLTk2MC1kb3duKSB7XHJcbiAgICAgICAgJjpiZWZvcmUge1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeS1jb2xvcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC5ncm91cC1zbGlkZXItY29udGVudCB7XHJcbiAgICAgICY6YWZ0ZXIge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnktY29sb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC5maWVsZC1uYW1lLWZpZWxkLXBnLXNsaWRlci1pbWFnZSB7XHJcbiAgICAgICY6YWZ0ZXIge1xyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnktY29sb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi5zbGlkZXItaW1hZ2UtbGVmdCAucmVnaW9uLWNvbnRlbnQtdG9we1xyXG4gICNibG9jay1maWVsZGJsb2NrLW5vZGUtcGFnZS1kZWZhdWx0LWZpZWxkLXBhcmFncmFwaC1zbGlkZXJzIHtcclxuICAgICY6YWZ0ZXIge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuLnNsaWRlci1pbWFnZS1yaWdodCAucmVnaW9uLWNvbnRlbnQtdG9we1xyXG4gIC5ncm91cC1zbGlkZXItY29udGVudCB7XHJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzZWNvbmRhcnktY29sb3I7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuLnNsaWRlci1pbWFnZS1yaWdodCAucmVnaW9uLWNvbnRlbnQtdG9we1xyXG4gICNibG9jay1maWVsZGJsb2NrLW5vZGUtcGFnZS1kZWZhdWx0LWZpZWxkLXBhcmFncmFwaC1zbGlkZXJzIHtcclxuICAgICY6YWZ0ZXIge1xyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuXHJcbi8vIC53eXNpd3lnX3F1b3RlIHtcclxuLy8gICAmOmJlZm9yZSB7XHJcbi8vICAgYmFja2dyb3VuZC1jb2xvcjogJHNlY29uZGFyeS1jb2xvcjtcclxuLy8gICB9XHJcbi8vIH1cclxuXHJcbiNtYWluICNjb250ZW50ICNibG9jay12aWV3cy1ldmVudHMtZXZlbnRzLWJsb2NrIHtcclxuICBoMiB7XHJcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgJHNlY29uZGFyeS1jb2xvcjtcclxuICB9XHJcbn1cclxuXHJcbiNtYWluICNjb250ZW50ICNibG9jay12aWV3cy1wdWJsaWNhdGlvbnMtYmxvY2sge1xyXG4gIGgyIHtcclxuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAkc2Vjb25kYXJ5LWNvbG9yO1xyXG4gIH1cclxufVxyXG5cclxuLy8gLnd5c2l3eWdfcXVvdGU6YmVmb3JlIHtcclxuLy8gICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yO1xyXG4vLyB9XHJcblxyXG4udmlldy1kaXNwbGF5LWlkLWJsb2dfcGFnZSAuYmxvZy1hdXRob3ItbmFtZSBhLFxyXG4ubm9kZS1ibG9nIC5ieWxpbmUtYXV0aG9yIGEge1xyXG4gIGNvbG9yOiAkc2Vjb25kYXJ5LWNvbG9yO1xyXG59XHJcbiIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vLyBEZWZhdWx0IFZhcmlhYmxlc1xyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuJEJyZWFrcG9pbnQtU2V0dGluZ3M6IChcclxuICAnZGVmYXVsdCBtZWRpYSc6IGFsbCxcclxuICAnZGVmYXVsdCBmZWF0dXJlJzogbWluLXdpZHRoLFxyXG4gICdkZWZhdWx0IHBhaXInOiB3aWR0aCxcclxuICAnZm9yY2UgYWxsIG1lZGlhIHR5cGUnOiBmYWxzZSxcclxuICAndG8gZW1zJzogZmFsc2UsXHJcbiAgJ3RyYW5zZm9ybSByZXNvbHV0aW9ucyc6IHRydWUsXHJcbiAgJ25vIHF1ZXJpZXMnOiBmYWxzZSxcclxuICAnbm8gcXVlcnkgZmFsbGJhY2tzJzogZmFsc2UsXHJcbiAgJ2Jhc2UgZm9udCBzaXplJzogMTZweCxcclxuICAnbGVnYWN5IHN5bnRheCc6IGZhbHNlXHJcbik7XHJcblxyXG4kYnJlYWtwb2ludDogKCkgIWRlZmF1bHQ7XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gSW1wb3J0c1xyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuQGltcG9ydCBcInNldHRpbmdzXCI7XHJcbkBpbXBvcnQgJ2NvbnRleHQnO1xyXG5AaW1wb3J0ICdoZWxwZXJzJztcclxuQGltcG9ydCAncGFyc2Vycyc7XHJcbkBpbXBvcnQgJ25vLXF1ZXJ5JztcclxuXHJcbkBpbXBvcnQgJ3Jlc3BvbmQtdG8nO1xyXG5cclxuQGltcG9ydCBcImxlZ2FjeS1zZXR0aW5nc1wiO1xyXG5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbi8vIEJyZWFrcG9pbnQgTWl4aW5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcblxyXG5AbWl4aW4gYnJlYWtwb2ludCgkcXVlcnksICRuby1xdWVyeTogZmFsc2UpIHtcclxuICBAaW5jbHVkZSBsZWdhY3ktc2V0dGluZ3Mtd2FybmluZztcclxuXHJcbiAgLy8gUmVzZXQgY29udGV4dHNcclxuICBAaW5jbHVkZSBwcml2YXRlLWJyZWFrcG9pbnQtcmVzZXQtY29udGV4dHMoKTtcclxuXHJcbiAgJGJyZWFrcG9pbnQ6IGJyZWFrcG9pbnQoJHF1ZXJ5LCBmYWxzZSk7XHJcblxyXG4gICRxdWVyeS1zdHJpbmc6IG1hcC1nZXQoJGJyZWFrcG9pbnQsICdxdWVyeScpO1xyXG4gICRxdWVyeS1mYWxsYmFjazogbWFwLWdldCgkYnJlYWtwb2ludCwgJ2ZhbGxiYWNrJyk7XHJcblxyXG4gICRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXI6IG1hcC1nZXQoJGJyZWFrcG9pbnQsICdjb250ZXh0IGhvbGRlcicpICFnbG9iYWw7XHJcbiAgJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudDogbWFwLWdldCgkYnJlYWtwb2ludCwgJ3F1ZXJ5IGNvdW50JykgIWdsb2JhbDtcclxuXHJcbiAgLy8gQWxsb3cgZm9yIGFuIGFzLW5lZWRlZCBvdmVycmlkZSBvciB1c2FnZSBvZiBubyBxdWVyeSBmYWxsYmFjay5cclxuICBAaWYgJG5vLXF1ZXJ5ICE9IGZhbHNlIHtcclxuICAgICRxdWVyeS1mYWxsYmFjazogJG5vLXF1ZXJ5O1xyXG4gIH1cclxuXHJcbiAgQGlmICRxdWVyeS1mYWxsYmFjayAhPSBmYWxzZSB7XHJcbiAgICAkY29udGV4dC1zZXR0ZXI6IHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dCgnbm8tcXVlcnknLCAkcXVlcnktZmFsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgLy8gUHJpbnQgT3V0IFF1ZXJ5IFN0cmluZ1xyXG4gIEBpZiBub3QgYnJlYWtwb2ludC1nZXQoJ25vIHF1ZXJpZXMnKSB7XHJcbiAgICBAbWVkaWEgI3skcXVlcnktc3RyaW5nfSB7XHJcbiAgICAgIEBjb250ZW50O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQGlmIGJyZWFrcG9pbnQtZ2V0KCdubyBxdWVyeSBmYWxsYmFja3MnKSAhPSBmYWxzZSBvciBicmVha3BvaW50LWdldCgnbm8gcXVlcmllcycpID09IHRydWUge1xyXG5cclxuICAgICR0eXBlOiB0eXBlLW9mKGJyZWFrcG9pbnQtZ2V0KCdubyBxdWVyeSBmYWxsYmFja3MnKSk7XHJcbiAgICAkcHJpbnQ6IGZhbHNlO1xyXG5cclxuICAgIEBpZiAoJHR5cGUgPT0gJ2Jvb2wnKSB7XHJcbiAgICAgICRwcmludDogdHJ1ZTtcclxuICAgIH1cclxuICAgIEBlbHNlIGlmICgkdHlwZSA9PSAnc3RyaW5nJykge1xyXG4gICAgICBAaWYgJHF1ZXJ5LWZhbGxiYWNrID09IGJyZWFrcG9pbnQtZ2V0KCdubyBxdWVyeSBmYWxsYmFja3MnKSB7XHJcbiAgICAgICAgJHByaW50OiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBAZWxzZSBpZiAoJHR5cGUgPT0gJ2xpc3QnKSB7XHJcbiAgICAgIEBlYWNoICR3cmFwcGVyIGluIGJyZWFrcG9pbnQtZ2V0KCdubyBxdWVyeSBmYWxsYmFja3MnKSB7XHJcbiAgICAgICAgQGlmICRxdWVyeS1mYWxsYmFjayA9PSAkd3JhcHBlciB7XHJcbiAgICAgICAgICAkcHJpbnQ6IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gV3JpdGUgRmFsbGJhY2tcclxuICAgIEBpZiAoJHF1ZXJ5LWZhbGxiYWNrICE9IGZhbHNlKSBhbmQgKCRwcmludCA9PSB0cnVlKSB7XHJcbiAgICAgICR0eXBlLWZhbGxiYWNrOiB0eXBlLW9mKCRxdWVyeS1mYWxsYmFjayk7XHJcblxyXG4gICAgICBAaWYgKCR0eXBlLWZhbGxiYWNrICE9ICdib29sJykge1xyXG4gICAgICAgICN7JHF1ZXJ5LWZhbGxiYWNrfSAmIHtcclxuICAgICAgICAgIEBjb250ZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBAZWxzZSB7XHJcbiAgICAgICAgQGNvbnRlbnQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBpbmNsdWRlIHByaXZhdGUtYnJlYWtwb2ludC1yZXNldC1jb250ZXh0cygpO1xyXG59XHJcblxyXG5cclxuQG1peGluIG1xKCRxdWVyeSwgJG5vLXF1ZXJ5OiBmYWxzZSkge1xyXG4gIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHF1ZXJ5LCAkbm8tcXVlcnkpIHtcclxuICAgIEBjb250ZW50O1xyXG4gIH1cclxufVxyXG4iLCIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gSGFzIFNldHRpbmdcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbkBmdW5jdGlvbiBicmVha3BvaW50LWhhcygkc2V0dGluZykge1xyXG4gIEBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludCwgJHNldHRpbmcpIHtcclxuICAgIEByZXR1cm4gdHJ1ZTtcclxuICB9XHJcbiAgQGVsc2Uge1xyXG4gICAgQHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vLyBHZXQgU2V0dGluZ3NcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbkBmdW5jdGlvbiBicmVha3BvaW50LWdldCgkc2V0dGluZykge1xyXG4gIEBpZiBicmVha3BvaW50LWhhcygkc2V0dGluZykge1xyXG4gICAgQHJldHVybiBtYXAtZ2V0KCRicmVha3BvaW50LCAkc2V0dGluZyk7XHJcbiAgfVxyXG4gIEBlbHNlIHtcclxuICAgIEByZXR1cm4gbWFwLWdldCgkQnJlYWtwb2ludC1TZXR0aW5ncywgJHNldHRpbmcpO1xyXG4gIH1cclxufVxyXG5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbi8vIFNldCBTZXR0aW5nc1xyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtc2V0KCRzZXR0aW5nLCAkdmFsdWUpIHtcclxuICBAaWYgKHN0ci1pbmRleCgkc2V0dGluZywgJy0nKSBvciBzdHItaW5kZXgoJHNldHRpbmcsICdfJykpIGFuZCBzdHItaW5kZXgoJHNldHRpbmcsICcgJykgPT0gbnVsbCB7XHJcbiAgICBAd2FybiBcIldvcmRzIGluIEJyZWFrcG9pbnQgc2V0dGluZ3Mgc2hvdWxkIGJlIHNlcGFyYXRlZCBieSBzcGFjZXMsIG5vdCBkYXNoZXMgb3IgdW5kZXJzY29yZXMuIFBsZWFzZSByZXBsYWNlIGRhc2hlcyBhbmQgdW5kZXJzY29yZXMgYmV0d2VlbiB3b3JkcyB3aXRoIHNwYWNlcy4gU2V0dGluZ3Mgd2lsbCBub3Qgd29yayBhcyBleHBlY3RlZCB1bnRpbCBjaGFuZ2VkLlwiO1xyXG4gIH1cclxuICAkYnJlYWtwb2ludDogbWFwLW1lcmdlKCRicmVha3BvaW50LCAoJHNldHRpbmc6ICR2YWx1ZSkpICFnbG9iYWw7XHJcbiAgQHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5AbWl4aW4gYnJlYWtwb2ludC1jaGFuZ2UoJHNldHRpbmcsICR2YWx1ZSkge1xyXG4gICRicmVha3BvaW50LWNoYW5nZTogYnJlYWtwb2ludC1zZXQoJHNldHRpbmcsICR2YWx1ZSk7XHJcbn1cclxuXHJcbkBtaXhpbiBicmVha3BvaW50LXNldCgkc2V0dGluZywgJHZhbHVlKSB7XHJcbiAgQGluY2x1ZGUgYnJlYWtwb2ludC1jaGFuZ2UoJHNldHRpbmcsICR2YWx1ZSk7XHJcbn1cclxuXHJcbkBtaXhpbiBia3B0LWNoYW5nZSgkc2V0dGluZywgJHZhbHVlKSB7XHJcbiAgQGluY2x1ZGUgYnJlYWtwb2ludC1jaGFuZ2UoJHNldHRpbmcsICR2YWx1ZSk7XHJcbn1cclxuQG1peGluIGJrcHQtc2V0KCRzZXR0aW5nLCAkdmFsdWUpIHtcclxuICBAaW5jbHVkZSBicmVha3BvaW50LWNoYW5nZSgkc2V0dGluZywgJHZhbHVlKTtcclxufVxyXG5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbi8vIFJlbW92ZSBTZXR0aW5nXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1yZXNldCgkc2V0dGluZ3MuLi4pIHtcclxuICBAaWYgbGVuZ3RoKCRzZXR0aW5ncykgPT0gMSB7XHJcbiAgICAkc2V0dGluZ3M6IG50aCgkc2V0dGluZ3MsIDEpO1xyXG4gIH1cclxuXHJcbiAgQGVhY2ggJHNldHRpbmcgaW4gJHNldHRpbmdzIHtcclxuICAgICRicmVha3BvaW50OiBtYXAtcmVtb3ZlKCRicmVha3BvaW50LCAkc2V0dGluZykgIWdsb2JhbDtcclxuICB9XHJcbiAgQHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5AbWl4aW4gYnJlYWtwb2ludC1yZXNldCgkc2V0dGluZ3MuLi4pIHtcclxuICAkYnJlYWtwb2ludC1yZXNldDogYnJlYWtwb2ludC1yZXNldCgkc2V0dGluZ3MpO1xyXG59XHJcblxyXG5AbWl4aW4gYmtwdC1yZXNldCgkc2V0dGluZ3MuLi4pIHtcclxuICAkYnJlYWtwb2ludC1yZXNldDogYnJlYWtwb2ludC1yZXNldCgkc2V0dGluZ3MpO1xyXG59IiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbi8vIFByaXZhdGUgQnJlYWtwb2ludCBWYXJpYWJsZXNcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXI6ICgpO1xyXG4kcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50OiAwICFkZWZhdWx0O1xyXG5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbi8vIEJyZWFrcG9pbnQgSGFzIENvbnRleHRcclxuLy8gUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB5b3UgYXJlIGluc2lkZSBhIEJyZWFrcG9pbnQgcXVlcnlcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbkBmdW5jdGlvbiBicmVha3BvaW50LWhhcy1jb250ZXh0KCkge1xyXG4gIEBpZiBsZW5ndGgoJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudCkge1xyXG4gICAgQHJldHVybiB0cnVlO1xyXG4gIH1cclxuICBAZWxzZSB7XHJcbiAgICBAcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbi8vIEJyZWFrcG9pbnQgR2V0IENvbnRleHRcclxuLy8gJGZlYXR1cmU6IElucHV0IGZlYXR1cmUgdG8gZ2V0IGl0J3MgY3VycmVudCBNUSBjb250ZXh0LiBSZXR1cm5zIGZhbHNlIGlmIG5vIGNvbnRleHRcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbkBmdW5jdGlvbiBicmVha3BvaW50LWdldC1jb250ZXh0KCRmZWF0dXJlKSB7XHJcbiAgQGlmIG1hcC1oYXMta2V5KCRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXIsICRmZWF0dXJlKSB7XHJcbiAgICAkZ2V0OiBtYXAtZ2V0KCRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXIsICRmZWF0dXJlKTtcclxuICAgIC8vIFNwZWNpYWwgaGFuZGxpbmcgb2Ygbm8tcXVlcnkgZnJvbSBnZXQgc2lkZSBzbyAvZmFsc2UvIHByZXBlbmRzIGFyZW4ndCByZXR1cm5lZFxyXG4gICAgQGlmICRmZWF0dXJlID09ICduby1xdWVyeScge1xyXG4gICAgICBAaWYgdHlwZS1vZigkZ2V0KSA9PSAnbGlzdCcgYW5kIGxlbmd0aCgkZ2V0KSA+IDEgYW5kIG50aCgkZ2V0LCAxKSA9PSBmYWxzZSB7XHJcbiAgICAgICAgJGdldDogbnRoKCRnZXQsIGxlbmd0aCgkZ2V0KSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIEByZXR1cm4gJGdldDtcclxuICB9XHJcbiAgQGVsc2Uge1xyXG4gICAgQGlmIGJyZWFrcG9pbnQtaGFzLWNvbnRleHQoKSBhbmQgJGZlYXR1cmUgPT0gJ21lZGlhJyB7XHJcbiAgICAgIEByZXR1cm4gYnJlYWtwb2ludC1nZXQoJ2RlZmF1bHQgbWVkaWEnKTtcclxuICAgIH1cclxuICAgIEBlbHNlIHtcclxuICAgICAgQHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vLyBQcml2YXRlIGZ1bmN0aW9uIHRvIHNldCBjb250ZXh0XHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5AZnVuY3Rpb24gcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KCRmZWF0dXJlLCAkdmFsdWUpIHtcclxuICBAaWYgJHZhbHVlID09ICdtb25vY2hyb21lJyB7XHJcbiAgICAkZmVhdHVyZTogJ21vbm9jaHJvbWUnO1xyXG4gIH1cclxuXHJcbiAgJGN1cnJlbnQ6IG1hcC1nZXQoJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlciwgJGZlYXR1cmUpO1xyXG4gIEBpZiAkY3VycmVudCBhbmQgbGVuZ3RoKCRjdXJyZW50KSA9PSAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50IHtcclxuICAgIEB3YXJuIFwiWW91IGhhdmUgYWxyZWFkeSBxdWVyaWVkIGFnYWluc3QgYCN7JGZlYXR1cmV9YC4gVW5leHBlY3RlZCB0aGluZ3MgbWF5IGhhcHBlbiBpZiB5b3UgcXVlcnkgYWdhaW5zdCB0aGUgc2FtZSBmZWF0dXJlIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBzYW1lIGBhbmRgIHF1ZXJ5LiBCcmVha3BvaW50IGlzIG92ZXJ3cml0aW5nIHRoZSBjdXJyZW50IGNvbnRleHQgd2l0aCBgI3skdmFsdWV9YFwiO1xyXG4gIH1cclxuXHJcbiAgQGlmIG5vdCBtYXAtaGFzLWtleSgkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyLCAkZmVhdHVyZSkge1xyXG4gICAgJHYtaG9sZGVyOiAoKTtcclxuICAgIEBmb3IgJGkgZnJvbSAxIHRvICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQge1xyXG4gICAgICBAaWYgJGZlYXR1cmUgPT0gJ21lZGlhJyB7XHJcbiAgICAgICAgJHYtaG9sZGVyOiBhcHBlbmQoJHYtaG9sZGVyLCBicmVha3BvaW50LWdldCgnZGVmYXVsdCBtZWRpYScpKTtcclxuICAgICAgfVxyXG4gICAgICBAZWxzZSB7XHJcbiAgICAgICAgJHYtaG9sZGVyOiBhcHBlbmQoJHYtaG9sZGVyLCBmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgICR2LWhvbGRlcjogYXBwZW5kKCR2LWhvbGRlciwgJHZhbHVlKTtcclxuICAgICRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXI6IG1hcC1tZXJnZSgkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyLCAoJGZlYXR1cmU6ICR2LWhvbGRlcikpICFnbG9iYWw7XHJcbiAgfVxyXG4gIEBlbHNlIHtcclxuICAgICR2LWhvbGRlcjogbWFwLWdldCgkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyLCAkZmVhdHVyZSk7XHJcbiAgICAkbGVuZ3RoOiBsZW5ndGgoJHYtaG9sZGVyKTtcclxuICAgIEBmb3IgJGkgZnJvbSAkbGVuZ3RoIHRvICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQgLSAxIHtcclxuICAgICAgQGlmICRmZWF0dXJlID09ICdtZWRpYScge1xyXG4gICAgICAgICR2LWhvbGRlcjogYXBwZW5kKCR2LWhvbGRlciwgYnJlYWtwb2ludC1nZXQoJ2RlZmF1bHQgbWVkaWEnKSk7XHJcbiAgICAgIH1cclxuICAgICAgQGVsc2Uge1xyXG4gICAgICAgICR2LWhvbGRlcjogYXBwZW5kKCR2LWhvbGRlciwgZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAkdi1ob2xkZXI6IGFwcGVuZCgkdi1ob2xkZXIsICR2YWx1ZSk7XHJcbiAgICAkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyOiBtYXAtbWVyZ2UoJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlciwgKCRmZWF0dXJlOiAkdi1ob2xkZXIpKSAhZ2xvYmFsO1xyXG4gIH1cclxuXHJcbiAgQHJldHVybiB0cnVlO1xyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gUHJpdmF0ZSBmdW5jdGlvbiB0byByZXNldCBjb250ZXh0XHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5AbWl4aW4gcHJpdmF0ZS1icmVha3BvaW50LXJlc2V0LWNvbnRleHRzIHtcclxuICAkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyOiAoKSAhZ2xvYmFsO1xyXG4gICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQ6IDAgIWdsb2JhbDtcclxufSIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vLyBDb252ZXJ0cyB0aGUgaW5wdXQgdmFsdWUgdG8gQmFzZSBFTXNcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbkBmdW5jdGlvbiBicmVha3BvaW50LXRvLWJhc2UtZW0oJHZhbHVlKSB7XHJcbiAgJHZhbHVlLXVuaXQ6IHVuaXQoJHZhbHVlKTtcclxuXHJcbiAgLy8gV2lsbCBjb252ZXJ0IHJlbGF0aXZlIEVNcyBpbnRvIHJvb3QgRU1zLlxyXG4gIEBpZiBicmVha3BvaW50LWdldCgnYmFzZSBmb250IHNpemUnKSBhbmQgdHlwZS1vZihicmVha3BvaW50LWdldCgnYmFzZSBmb250IHNpemUnKSkgPT0gJ251bWJlcicgYW5kICR2YWx1ZS11bml0ID09ICdlbScge1xyXG4gICAgJGJhc2UtdW5pdDogdW5pdChicmVha3BvaW50LWdldCgnYmFzZSBmb250IHNpemUnKSk7XHJcblxyXG4gICAgQGlmICRiYXNlLXVuaXQgPT0gJ3B4JyBvciAkYmFzZS11bml0ID09ICclJyBvciAkYmFzZS11bml0ID09ICdlbScgb3IgJGJhc2UtdW5pdCA9PSAncHQnIHtcclxuICAgICAgQHJldHVybiBiYXNlLWNvbnZlcnNpb24oJHZhbHVlKSAvIGJhc2UtY29udmVyc2lvbihicmVha3BvaW50LWdldCgnYmFzZSBmb250IHNpemUnKSkgKiAxZW07XHJcbiAgICB9XHJcbiAgICBAZWxzZSB7XHJcbiAgICAgIEB3YXJuICcje2JyZWFrcG9pbnQtZ2V0KFxcJ2Jhc2UgZm9udCBzaXplXFwnKX0gaXMgbm90IHNldCBpbiB2YWxpZCB1bml0cyBmb3IgZm9udCBzaXplISc7XHJcbiAgICAgIEByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBlbHNlIHtcclxuICAgIEByZXR1cm4gYmFzZS1jb252ZXJzaW9uKCR2YWx1ZSk7XHJcbiAgfVxyXG59XHJcblxyXG5AZnVuY3Rpb24gYmFzZS1jb252ZXJzaW9uKCR2YWx1ZSkge1xyXG4gICR1bml0OiB1bml0KCR2YWx1ZSk7XHJcblxyXG4gIEBpZiAkdW5pdCA9PSAncHgnIHtcclxuICAgIEByZXR1cm4gJHZhbHVlIC8gMTZweCAqIDFlbTtcclxuICB9XHJcbiAgQGVsc2UgaWYgJHVuaXQgPT0gJyUnIHtcclxuICAgIEByZXR1cm4gJHZhbHVlIC8gMTAwJSAqIDFlbTtcclxuICB9XHJcbiAgQGVsc2UgaWYgJHVuaXQgPT0gJ2VtJyB7XHJcbiAgICBAcmV0dXJuICR2YWx1ZTtcclxuICB9XHJcbiAgQGVsc2UgaWYgJHVuaXQgPT0gJ3B0JyB7XHJcbiAgICBAcmV0dXJuICR2YWx1ZSAvIDEycHQgKiAxZW07XHJcbiAgfVxyXG4gIEBlbHNlIHtcclxuICAgIEByZXR1cm4gJHZhbHVlO1xyXG4vLyAgICBAd2FybiAnRXZlcnl0aGluZyBpcyB0ZXJyaWJsZSEgV2hhdCBoYXZlIHlvdSBkb25lPyEnO1xyXG4gIH1cclxufVxyXG5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbi8vIFJldHVybnMgd2hldGhlciB0aGUgZmVhdHVyZSBjYW4gaGF2ZSBhIG1pbi9tYXggcGFpclxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuJGJyZWFrcG9pbnQtbWluLW1heC1mZWF0dXJlczogJ2NvbG9yJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbG9yLWluZGV4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzcGVjdC1yYXRpbycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXZpY2UtYXNwZWN0LXJhdGlvJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RldmljZS1oZWlnaHQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGV2aWNlLXdpZHRoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlaWdodCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb25vY2hyb21lJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc29sdXRpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lkdGgnO1xyXG5cclxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtbWluLW1heCgkZmVhdHVyZSkge1xyXG4gIEBlYWNoICRpdGVtIGluICRicmVha3BvaW50LW1pbi1tYXgtZmVhdHVyZXMge1xyXG4gICAgQGlmICRmZWF0dXJlID09ICRpdGVtIHtcclxuICAgICAgQHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICBAcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBmZWF0dXJlIGNhbiBoYXZlIGEgc3RyaW5nIHZhbHVlXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4kYnJlYWtwb2ludC1zdHJpbmctZmVhdHVyZXM6ICAnb3JpZW50YXRpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NhbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvcicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc3BlY3QtcmF0aW8nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGV2aWNlLWFzcGVjdC1yYXRpbycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb2ludGVyJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2x1bWlub3NpdHknO1xyXG5cclxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtc3RyaW5nLXZhbHVlKCRmZWF0dXJlKSB7XHJcbiAgQGVhY2ggJGl0ZW0gaW4gJGJyZWFrcG9pbnQtc3RyaW5nLWZlYXR1cmVzIHtcclxuICAgIEBpZiBicmVha3BvaW50LW1pbi1tYXgoJGl0ZW0pIHtcclxuICAgICAgQGlmICRmZWF0dXJlID09ICdtaW4tI3skaXRlbX0nIG9yICRmZWF0dXJlID09ICdtYXgtI3skaXRlbX0nIHtcclxuICAgICAgICBAcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIEBlbHNlIGlmICRmZWF0dXJlID09ICRpdGVtIHtcclxuICAgICAgQHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICBAcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBmZWF0dXJlIGlzIGEgbWVkaWEgdHlwZVxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuJGJyZWFrcG9pbnQtbWVkaWEtdHlwZXM6ICAnYWxsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnYnJhaWxsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VtYm9zc2VkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnaGFuZGhlbGQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdwcmludCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb2plY3Rpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdzY3JlZW4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdzcGVlY2gnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICd0dHknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICd0dic7XHJcblxyXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1pcy1tZWRpYSgkZmVhdHVyZSkge1xyXG4gIEBlYWNoICRtZWRpYSBpbiAkYnJlYWtwb2ludC1tZWRpYS10eXBlcyB7XHJcbiAgICBAaWYgKCRmZWF0dXJlID09ICRtZWRpYSkgb3IgKCRmZWF0dXJlID09ICdub3QgI3skbWVkaWF9Jykgb3IgKCRmZWF0dXJlID09ICdvbmx5ICN7JG1lZGlhfScpIHtcclxuICAgICAgQHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbi8vIFJldHVybnMgd2hldGhlciB0aGUgZmVhdHVyZSBjYW4gc3RhbmQgYWxvbmVcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiRicmVha3BvaW50LXNpbmdsZS1zdHJpbmctZmVhdHVyZXM6ICdjb2xvcicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xvci1pbmRleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdncmlkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vbm9jaHJvbWUnO1xyXG5cclxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZygkZmVhdHVyZSkge1xyXG4gIEBlYWNoICRpdGVtIGluICRicmVha3BvaW50LXNpbmdsZS1zdHJpbmctZmVhdHVyZXMge1xyXG4gICAgQGlmICRmZWF0dXJlID09ICRpdGVtIHtcclxuICAgICAgQHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuICBAcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBmZWF0dXJlXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1pcy1yZXNvbHV0aW9uKCRmZWF0dXJlKSB7XHJcbiAgJHJlc29sdXRpb25zOiAnZGV2aWNlLXBpeGVsLXJhdGlvJywgJ2Rwcic7XHJcblxyXG4gIEBpZiBicmVha3BvaW50LWdldCgndHJhbnNmb3JtIHJlc29sdXRpb25zJykge1xyXG4gICAgJHJlc29sdXRpb25zOiBhcHBlbmQoJHJlc29sdXRpb25zLCAncmVzb2x1dGlvbicpO1xyXG4gIH1cclxuXHJcbiAgQGVhY2ggJHJlc28gaW4gJHJlc29sdXRpb25zIHtcclxuICAgIEBpZiBpbmRleCgkZmVhdHVyZSwgJHJlc28pIG9yIGluZGV4KCRmZWF0dXJlLCAnbWluLSN7JHJlc299Jykgb3IgaW5kZXgoJGZlYXR1cmUsICdtYXgtI3skcmVzb30nKSB7XHJcbiAgICAgIEByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEByZXR1cm4gZmFsc2U7XHJcbn1cclxuIiwiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbi8vIEltcG9ydCBQYXJzZXIgUGllY2VzXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5AaW1wb3J0IFwicGFyc2Vycy9xdWVyeVwiO1xyXG5AaW1wb3J0IFwicGFyc2Vycy9zaW5nbGVcIjtcclxuQGltcG9ydCBcInBhcnNlcnMvZG91YmxlXCI7XHJcbkBpbXBvcnQgXCJwYXJzZXJzL3RyaXBsZVwiO1xyXG5AaW1wb3J0IFwicGFyc2Vycy9yZXNvbHV0aW9uXCI7XHJcblxyXG4kTWVtby1FeGlzdHM6IGZ1bmN0aW9uLWV4aXN0cyhtZW1vLWdldCkgYW5kIGZ1bmN0aW9uLWV4aXN0cyhtZW1vLXNldCk7XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gQnJlYWtwb2ludCBGdW5jdGlvblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQoJHF1ZXJ5LCAkY29udGV4dHMuLi4pIHtcclxuICAkcnVuOiB0cnVlO1xyXG4gICRyZXR1cm46ICgpO1xyXG5cclxuICAvLyBHcmFiIHRoZSBNZW1vIE91dHB1dCBpZiBNZW1vaXphdGlvbiBjYW4gYmUgYSB0aGluZ1xyXG4gIEBpZiAkTWVtby1FeGlzdHMge1xyXG4gICAgJHJldHVybjogbWVtby1nZXQoYnJlYWtwb2ludCwgYnJlYWtwb2ludCAkcXVlcnkgJGNvbnRleHRzKTtcclxuXHJcbiAgICBAaWYgJHJldHVybiAhPSBudWxsIHtcclxuICAgICAgJHJ1bjogZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBAaWYgbm90ICRNZW1vLUV4aXN0cyBvciAkcnVuIHtcclxuICAgIC8vIEludGVybmFsIFZhcmlhYmxlc1xyXG4gICAgJHF1ZXJ5LXN0cmluZzogJyc7XHJcbiAgICAkcXVlcnktZmFsbGJhY2s6IGZhbHNlO1xyXG4gICAgJHJldHVybjogKCk7XHJcblxyXG4gICAgLy8gUmVzZXJ2ZSBHbG9iYWwgUHJpdmF0ZSBCcmVha3BvaW50IENvbnRleHRcclxuICAgICRob2xkZXItY29udGV4dDogJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlcjtcclxuICAgICRob2xkZXItcXVlcnktY291bnQ6ICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQ7XHJcblxyXG4gICAgLy8gUmVzZXQgR2xvYmFsIFByaXZhdGUgQnJlYWtwb2ludCBDb250ZXh0XHJcbiAgICAkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyOiAoKSAhZ2xvYmFsO1xyXG4gICAgJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudDogMCAhZ2xvYmFsO1xyXG5cclxuXHJcbiAgICAvLyBUZXN0IHRvIHNlZSBpZiBpdCdzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3RcclxuICAgICRvci1saXN0OiBpZihsaXN0LXNlcGFyYXRvcigkcXVlcnkpID09ICdjb21tYScsIHRydWUsIGZhbHNlKTtcclxuXHJcblxyXG4gICAgQGlmICgkb3ItbGlzdCA9PSBmYWxzZSBhbmQgYnJlYWtwb2ludC1nZXQoJ2xlZ2FjeSBzeW50YXgnKSA9PSBmYWxzZSkge1xyXG4gICAgICAkcXVlcnktc3RyaW5nOiBicmVha3BvaW50LXBhcnNlKCRxdWVyeSk7XHJcbiAgICB9XHJcbiAgICBAZWxzZSB7XHJcbiAgICAgICRsZW5ndGg6IGxlbmd0aCgkcXVlcnkpO1xyXG5cclxuICAgICAgJGxhc3Q6IG50aCgkcXVlcnksICRsZW5ndGgpO1xyXG4gICAgICAkcXVlcnktZmFsbGJhY2s6IGJyZWFrcG9pbnQtbm8tcXVlcnkoJGxhc3QpO1xyXG5cclxuICAgICAgQGlmICgkcXVlcnktZmFsbGJhY2sgIT0gZmFsc2UpIHtcclxuICAgICAgICAkbGVuZ3RoOiAkbGVuZ3RoIC0gMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgQGlmIChicmVha3BvaW50LWdldCgnbGVnYWN5IHN5bnRheCcpID09IHRydWUpIHtcclxuICAgICAgICAkbXE6ICgpO1xyXG5cclxuICAgICAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRsZW5ndGgge1xyXG4gICAgICAgICAgJG1xOiBhcHBlbmQoJG1xLCBudGgoJHF1ZXJ5LCAkaSksIGNvbW1hKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICRxdWVyeS1zdHJpbmc6IGJyZWFrcG9pbnQtcGFyc2UoJG1xKTtcclxuICAgICAgfVxyXG4gICAgICBAZWxzZSB7XHJcbiAgICAgICAgJHF1ZXJ5LXN0cmluZzogJyc7XHJcbiAgICAgICAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkbGVuZ3RoIHtcclxuICAgICAgICAgICRxdWVyeS1zdHJpbmc6ICRxdWVyeS1zdHJpbmcgKyBpZigkaSA9PSAxLCAnJywgJywgJykgKyBicmVha3BvaW50LXBhcnNlKG50aCgkcXVlcnksICRpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgJHJldHVybjogKCdxdWVyeSc6ICRxdWVyeS1zdHJpbmcsXHJcbiAgICAgICAgJ2ZhbGxiYWNrJzogJHF1ZXJ5LWZhbGxiYWNrLFxyXG4gICAgICAgICdjb250ZXh0IGhvbGRlcic6ICRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXIsXHJcbiAgICAgICAgJ3F1ZXJ5IGNvdW50JzogJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudFxyXG4gICAgKTtcclxuICAgIEBpZiBsZW5ndGgoJGNvbnRleHRzKSA+IDAgYW5kIG50aCgkY29udGV4dHMsIDEpICE9IGZhbHNlIHtcclxuICAgICAgQGlmICRxdWVyeS1mYWxsYmFjayAhPSBmYWxzZSB7XHJcbiAgICAgICAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQoJ25vLXF1ZXJ5JywgJHF1ZXJ5LWZhbGxiYWNrKTtcclxuICAgICAgfVxyXG4gICAgICAkY29udGV4dC1tYXA6ICgpO1xyXG4gICAgICBAZWFjaCAkY29udGV4dCBpbiAkY29udGV4dHMge1xyXG4gICAgICAgICRjb250ZXh0LW1hcDogbWFwLW1lcmdlKCRjb250ZXh0LW1hcCwgKCRjb250ZXh0OiBicmVha3BvaW50LWdldC1jb250ZXh0KCRjb250ZXh0KSkpO1xyXG4gICAgICB9XHJcbiAgICAgICRyZXR1cm46IG1hcC1tZXJnZSgkcmV0dXJuLCAoY29udGV4dDogJGNvbnRleHQtbWFwKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzZXQgR2xvYmFsIFByaXZhdGUgQnJlYWtwb2ludCBDb250ZXh0XHJcbiAgICAkcHJpdmF0ZS1icmVha3BvaW50LWNvbnRleHQtaG9sZGVyOiAoKSAhZ2xvYmFsO1xyXG4gICAgJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudDogMCAhZ2xvYmFsO1xyXG5cclxuICAgIEBpZiAkTWVtby1FeGlzdHMge1xyXG4gICAgICAkaG9sZGVyOiBtZW1vLXNldChicmVha3BvaW50LCBicmVha3BvaW50ICRxdWVyeSAkY29udGV4dHMsICRyZXR1cm4pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQHJldHVybiAkcmV0dXJuO1xyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gR2VuZXJhbCBCcmVha3BvaW50IFBhcnNlclxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcGFyc2UoJHF1ZXJ5KSB7XHJcbiAgLy8gSW5jcmVhc2UgbnVtYmVyIG9mICdhbmQnIHF1ZXJpZXNcclxuICAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50OiAkcHJpdmF0ZS1icmVha3BvaW50LXF1ZXJ5LWNvdW50ICsgMSAhZ2xvYmFsO1xyXG5cclxuICAvLyBTZXQgdXAgTWVkaWEgVHlwZVxyXG4gICRxdWVyeS1wcmludDogJyc7XHJcblxyXG4gICRmb3JjZS1hbGw6ICgoYnJlYWtwb2ludC1nZXQoJ2ZvcmNlIGFsbCBtZWRpYSB0eXBlJykgPT0gdHJ1ZSkgYW5kIChicmVha3BvaW50LWdldCgnZGVmYXVsdCBtZWRpYScpID09ICdhbGwnKSk7XHJcbiAgJGVtcHR5LW1lZGlhOiB0cnVlO1xyXG4gIEBpZiAoJGZvcmNlLWFsbCA9PSB0cnVlKSBvciAoYnJlYWtwb2ludC1nZXQoJ2RlZmF1bHQgbWVkaWEnKSAhPSAnYWxsJykge1xyXG4gICAgLy8gRm9yY2UgdGhlIHByaW50IG9mIHRoZSBkZWZhdWx0IG1lZGlhIHR5cGUgaWYgKGZvcmNlIGFsbCBpcyB0cnVlIGFuZCBkZWZhdWx0IG1lZGlhIHR5cGUgaXMgYWxsKSBvciAoZGVmYXVsdCBtZWRpYSB0eXBlIGlzIG5vdCBhbGwpXHJcbiAgICAkcXVlcnktcHJpbnQ6IGJyZWFrcG9pbnQtZ2V0KCdkZWZhdWx0IG1lZGlhJyk7XHJcbiAgICAkZW1wdHktbWVkaWE6IGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gICRxdWVyeS1yZXNvbHV0aW9uOiBmYWxzZTtcclxuXHJcbiAgJHF1ZXJ5LWhvbGRlcjogYnJlYWtwb2ludC1wYXJzZS1xdWVyeSgkcXVlcnkpO1xyXG5cclxuXHJcblxyXG4gIC8vIExvb3Agb3ZlciBlYWNoIHBhcnNlZCBvdXQgcXVlcnkgYW5kIHdyaXRlIGl0IHRvICRxdWVyeS1wcmludFxyXG4gICRmaXJzdDogdHJ1ZTtcclxuXHJcbiAgQGVhY2ggJGZlYXR1cmUgaW4gJHF1ZXJ5LWhvbGRlciB7XHJcbiAgICAkbGVuZ3RoOiBsZW5ndGgoJGZlYXR1cmUpO1xyXG5cclxuICAgIC8vIFBhcnNlIGEgc2luZ2xlIGZlYXR1cmVcclxuICAgIEBpZiAoJGxlbmd0aCA9PSAxKSB7XHJcbiAgICAgIC8vIEZlYXR1cmUgaXMgY3VycmVudGx5IGEgbGlzdCwgZ3JhYiB0aGUgYWN0dWFsIHZhbHVlXHJcbiAgICAgICRmZWF0dXJlOiBudGgoJGZlYXR1cmUsIDEpO1xyXG5cclxuICAgICAgLy8gTWVkaWEgVHlwZSBtdXN0IGJ5IGNvbnZlbnRpb24gYmUgdGhlIGZpcnN0IGl0ZW0sIHNvIGl0J3Mgc2FmZSB0byBmbGF0IG92ZXJyaWRlICRxdWVyeS1wcmludCwgd2hpY2ggcmlnaHQgbm93IHNob3VsZCBvbmx5IGJlIHRoZSBkZWZhdWx0IG1lZGlhIHR5cGVcclxuICAgICAgQGlmIChicmVha3BvaW50LWlzLW1lZGlhKCRmZWF0dXJlKSkge1xyXG4gICAgICAgIEBpZiAoJGZvcmNlLWFsbCA9PSB0cnVlKSBvciAoJGZlYXR1cmUgIT0gJ2FsbCcpIHtcclxuICAgICAgICAgIC8vIEZvcmNlIHRoZSBwcmludCBvZiB0aGUgZGVmYXVsdCBtZWRpYSB0eXBlIGlmIChmb3JjZSBhbGwgaXMgdHJ1ZSBhbmQgZGVmYXVsdCBtZWRpYSB0eXBlIGlzIGFsbCkgb3IgKGRlZmF1bHQgbWVkaWEgdHlwZSBpcyBub3QgYWxsKVxyXG4gICAgICAgICAgJHF1ZXJ5LXByaW50OiAkZmVhdHVyZTtcclxuICAgICAgICAgICRlbXB0eS1tZWRpYTogZmFsc2U7XHJcblxyXG4gICAgICAgICAgLy8gU2V0IENvbnRleHRcclxuICAgICAgICAgICRjb250ZXh0LXNldHRlcjogcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KG1lZGlhLCAkcXVlcnktcHJpbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBAZWxzZSB7XHJcbiAgICAgICAgJHBhcnNlZDogYnJlYWtwb2ludC1wYXJzZS1zaW5nbGUoJGZlYXR1cmUsICRlbXB0eS1tZWRpYSwgJGZpcnN0KTtcclxuICAgICAgICAkcXVlcnktcHJpbnQ6ICcjeyRxdWVyeS1wcmludH0gI3skcGFyc2VkfSc7XHJcbiAgICAgICAgJGZpcnN0OiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gUGFyc2UgYSBkb3VibGUgZmVhdHVyZVxyXG4gICAgQGVsc2UgaWYgKCRsZW5ndGggPT0gMikge1xyXG4gICAgICBAaWYgKGJyZWFrcG9pbnQtaXMtcmVzb2x1dGlvbigkZmVhdHVyZSkgIT0gZmFsc2UpIHtcclxuICAgICAgICAkcXVlcnktcmVzb2x1dGlvbjogJGZlYXR1cmU7XHJcbiAgICAgIH1cclxuICAgICAgQGVsc2Uge1xyXG4gICAgICAgICRwYXJzZWQ6IG51bGw7XHJcbiAgICAgICAgLy8gSWYgaXQncyBhIHN0cmluZy9udW1iZXIgcGFpcixcclxuICAgICAgICAvLyB3ZSBjaGVjayB0byBzZWUgaWYgb25lIGlzIGEgc2luZ2xlLXN0cmluZyB2YWx1ZSxcclxuICAgICAgICAvLyB0aGVuIHdlIHBhcnNlIGl0IGFzIGEgbm9ybWFsIGRvdWJsZVxyXG4gICAgICAgICRhbHBoYTogbnRoKCRmZWF0dXJlLCAxKTtcclxuICAgICAgICAkYmV0YTogbnRoKCRmZWF0dXJlLCAyKTtcclxuICAgICAgICBAaWYgYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nKCRhbHBoYSkgb3IgYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nKCRiZXRhKSB7XHJcbiAgICAgICAgICAkcGFyc2VkOiBicmVha3BvaW50LXBhcnNlLXNpbmdsZSgkYWxwaGEsICRlbXB0eS1tZWRpYSwgJGZpcnN0KTtcclxuICAgICAgICAgICRxdWVyeS1wcmludDogJyN7JHF1ZXJ5LXByaW50fSAjeyRwYXJzZWR9JztcclxuICAgICAgICAgICRmaXJzdDogZmFsc2U7XHJcbiAgICAgICAgICAkcGFyc2VkOiBicmVha3BvaW50LXBhcnNlLXNpbmdsZSgkYmV0YSwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpO1xyXG4gICAgICAgICAgJHF1ZXJ5LXByaW50OiAnI3skcXVlcnktcHJpbnR9ICN7JHBhcnNlZH0nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBAZWxzZSB7XHJcbiAgICAgICAgICAkcGFyc2VkOiBicmVha3BvaW50LXBhcnNlLWRvdWJsZSgkZmVhdHVyZSwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpO1xyXG4gICAgICAgICAgJHF1ZXJ5LXByaW50OiAnI3skcXVlcnktcHJpbnR9ICN7JHBhcnNlZH0nO1xyXG4gICAgICAgICAgJGZpcnN0OiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFBhcnNlIGEgdHJpcGxlIGZlYXR1cmVcclxuICAgIEBlbHNlIGlmICgkbGVuZ3RoID09IDMpIHtcclxuICAgICAgJHBhcnNlZDogYnJlYWtwb2ludC1wYXJzZS10cmlwbGUoJGZlYXR1cmUsICRlbXB0eS1tZWRpYSwgJGZpcnN0KTtcclxuICAgICAgJHF1ZXJ5LXByaW50OiAnI3skcXVlcnktcHJpbnR9ICN7JHBhcnNlZH0nO1xyXG4gICAgICAkZmlyc3Q6IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIEBpZiAoJHF1ZXJ5LXJlc29sdXRpb24gIT0gZmFsc2UpIHtcclxuICAgICRxdWVyeS1wcmludDogYnJlYWtwb2ludC1idWlsZC1yZXNvbHV0aW9uKCRxdWVyeS1wcmludCwgJHF1ZXJ5LXJlc29sdXRpb24sICRlbXB0eS1tZWRpYSwgJGZpcnN0KTtcclxuICB9XHJcblxyXG4gIC8vIExvb3AgdGhyb3VnaCBlYWNoIGZlYXR1cmUgdGhhdCdzIGJlZW4gZGV0ZWN0ZWQgc28gZmFyIGFuZCBhcHBlbmQgJ2ZhbHNlJyB0byB0aGUgdGhlIHZhbHVlIGxpc3QgdG8gaW5jcmVtZW50IHRoZWlyIGNvdW50ZXJzXHJcbiAgQGVhY2ggJGYsICR2IGluICRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXIge1xyXG4gICAgJHYtaG9sZGVyOiAkdjtcclxuICAgICRsZW5ndGg6IGxlbmd0aCgkdi1ob2xkZXIpO1xyXG4gICAgQGlmIGxlbmd0aCgkdi1ob2xkZXIpIDwgJHByaXZhdGUtYnJlYWtwb2ludC1xdWVyeS1jb3VudCB7XHJcbiAgICAgIEBmb3IgJGkgZnJvbSAkbGVuZ3RoIHRvICRwcml2YXRlLWJyZWFrcG9pbnQtcXVlcnktY291bnQge1xyXG4gICAgICAgIEBpZiAkZiA9PSAnbWVkaWEnIHtcclxuICAgICAgICAgICR2LWhvbGRlcjogYXBwZW5kKCR2LWhvbGRlciwgYnJlYWtwb2ludC1nZXQoJ2RlZmF1bHQgbWVkaWEnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBlbHNlIHtcclxuICAgICAgICAgICR2LWhvbGRlcjogYXBwZW5kKCR2LWhvbGRlciwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgJHByaXZhdGUtYnJlYWtwb2ludC1jb250ZXh0LWhvbGRlcjogbWFwLW1lcmdlKCRwcml2YXRlLWJyZWFrcG9pbnQtY29udGV4dC1ob2xkZXIsICgkZjogJHYtaG9sZGVyKSkgIWdsb2JhbDtcclxuICB9XHJcblxyXG4gIEByZXR1cm4gJHF1ZXJ5LXByaW50O1xyXG59XHJcbiIsIkBmdW5jdGlvbiBicmVha3BvaW50LXBhcnNlLXF1ZXJ5KCRxdWVyeSkge1xyXG4gIC8vIFBhcnNlIGZlYXR1cmVzIG91dCBvZiBhbiBpbmRpdmlkdWFsIHF1ZXJ5XHJcbiAgJGZlYXR1cmUtaG9sZGVyOiAoKTtcclxuICAkcXVlcnktaG9sZGVyOiAoKTtcclxuICAkbGVuZ3RoOiBsZW5ndGgoJHF1ZXJ5KTtcclxuXHJcbiAgQGlmICRsZW5ndGggPT0gMiB7XHJcbiAgICAvLyBJZiB3ZSd2ZSBnb3QgYSBzdHJpbmcvbnVtYmVyLCBudW1iZXIvc3RyaW5nLCBjaGVjayB0byBzZWUgaWYgaXQncyBhIHZhbGlkIHN0cmluZy9udW1iZXIgcGFpciBvciB0d28gc2luZ2xlc1xyXG4gICAgQGlmICh0eXBlLW9mKG50aCgkcXVlcnksIDEpKSA9PSAnc3RyaW5nJyBhbmQgdHlwZS1vZihudGgoJHF1ZXJ5LCAyKSkgPT0gJ251bWJlcicpIG9yICh0eXBlLW9mKG50aCgkcXVlcnksIDEpKSA9PSAnbnVtYmVyJyBhbmQgdHlwZS1vZihudGgoJHF1ZXJ5LCAyKSkgPT0gJ3N0cmluZycpIHtcclxuXHJcbiAgICAgICRudW1iZXI6ICcnO1xyXG4gICAgICAkdmFsdWU6ICcnO1xyXG5cclxuICAgICAgQGlmIHR5cGUtb2YobnRoKCRxdWVyeSwgMSkpID09ICdzdHJpbmcnIHtcclxuICAgICAgICAkbnVtYmVyOiBudGgoJHF1ZXJ5LCAyKTtcclxuICAgICAgICAkdmFsdWU6IG50aCgkcXVlcnksIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIEBlbHNlIHtcclxuICAgICAgICAkbnVtYmVyOiBudGgoJHF1ZXJ5LCAxKTtcclxuICAgICAgICAkdmFsdWU6IG50aCgkcXVlcnksIDIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJZiB0aGUgc3RyaW5nIHZhbHVlIGNhbiBiZSBhIHNpbmdsZSB2YWx1ZSwgY2hlY2sgdG8gc2VlIGlmIHRoZSBudW1iZXIgcGFzc2VkIGluIGlzIGEgdmFsaWQgaW5wdXQgZm9yIHNhaWQgc2luZ2xlIHZhbHVlLiBGb3J0dW5hdGVseSwgYWxsIGN1cnJlbnQgc2luZ2xlLXZhbHVlIG9wdGlvbnMgb25seSBhY2NlcHQgdW5pdGxlc3MgbnVtYmVycywgc28gdGhpcyBjaGVjayBpcyBlYXN5LlxyXG4gICAgICBAaWYgYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nKCR2YWx1ZSkge1xyXG4gICAgICAgIEBpZiB1bml0bGVzcygkbnVtYmVyKSB7XHJcbiAgICAgICAgICAkZmVhdHVyZS1ob2xkZXI6IGFwcGVuZCgkdmFsdWUsICRudW1iZXIsIHNwYWNlKTtcclxuICAgICAgICAgICRxdWVyeS1ob2xkZXI6IGFwcGVuZCgkcXVlcnktaG9sZGVyLCAkZmVhdHVyZS1ob2xkZXIsIGNvbW1hKTtcclxuICAgICAgICAgIEByZXR1cm4gJHF1ZXJ5LWhvbGRlcjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gSWYgdGhlIHN0cmluZyBpcyBhIG1lZGlhIHR5cGUsIHNwbGl0IHRoZSBxdWVyeVxyXG4gICAgICBAaWYgYnJlYWtwb2ludC1pcy1tZWRpYSgkdmFsdWUpIHtcclxuICAgICAgICAkcXVlcnktaG9sZGVyOiBhcHBlbmQoJHF1ZXJ5LWhvbGRlciwgbnRoKCRxdWVyeSwgMSkpO1xyXG4gICAgICAgICRxdWVyeS1ob2xkZXI6IGFwcGVuZCgkcXVlcnktaG9sZGVyLCBudGgoJHF1ZXJ5LCAyKSk7XHJcbiAgICAgICAgQHJldHVybiAkcXVlcnktaG9sZGVyO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIElmIGl0J3Mgbm90IGEgc2luZ2xlIGZlYXR1cmUsIHdlJ3JlIGp1c3QgZ29pbmcgdG8gYXNzdW1lIGl0J3MgYSBwcm9wZXIgc3RyaW5nL3ZhbHVlIHBhaXIsIGFuZCByb2xsIHdpdGggaXQuXHJcbiAgICAgIEBlbHNlIHtcclxuICAgICAgICAkZmVhdHVyZS1ob2xkZXI6IGFwcGVuZCgkdmFsdWUsICRudW1iZXIsIHNwYWNlKTtcclxuICAgICAgICAkcXVlcnktaG9sZGVyOiBhcHBlbmQoJHF1ZXJ5LWhvbGRlciwgJGZlYXR1cmUtaG9sZGVyLCBjb21tYSk7XHJcbiAgICAgICAgQHJldHVybiAkcXVlcnktaG9sZGVyO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgLy8gSWYgdGhleSdyZSBib3RoIG51bWJlcnMsIHdlIGFzc3VtZSBpdCdzIGEgZG91YmxlIGFuZCByb2xsIHdpdGggdGhhdFxyXG4gICAgQGVsc2UgaWYgKHR5cGUtb2YobnRoKCRxdWVyeSwgMSkpID09ICdudW1iZXInIGFuZCB0eXBlLW9mKG50aCgkcXVlcnksIDIpKSA9PSAnbnVtYmVyJykge1xyXG4gICAgICAkZmVhdHVyZS1ob2xkZXI6IGFwcGVuZChudGgoJHF1ZXJ5LCAxKSwgbnRoKCRxdWVyeSwgMiksIHNwYWNlKTtcclxuICAgICAgJHF1ZXJ5LWhvbGRlcjogYXBwZW5kKCRxdWVyeS1ob2xkZXIsICRmZWF0dXJlLWhvbGRlciwgY29tbWEpO1xyXG4gICAgICBAcmV0dXJuICRxdWVyeS1ob2xkZXI7XHJcbiAgICB9XHJcbiAgICAvLyBJZiB0aGV5J3JlIGJvdGggc3RyaW5ncyBhbmQgbmVpdGhlciBhcmUgc2luZ2xlcywgd2Ugcm9sbCB3aXRoIHRoYXQuXHJcbiAgICBAZWxzZSBpZiAodHlwZS1vZihudGgoJHF1ZXJ5LCAxKSkgPT0gJ3N0cmluZycgYW5kIHR5cGUtb2YobnRoKCRxdWVyeSwgMikpID09ICdzdHJpbmcnKSB7XHJcbiAgICAgIEBpZiBub3QgYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nKG50aCgkcXVlcnksIDEpKSBhbmQgbm90IGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZyhudGgoJHF1ZXJ5LCAyKSkge1xyXG4gICAgICAgICRmZWF0dXJlLWhvbGRlcjogYXBwZW5kKG50aCgkcXVlcnksIDEpLCBudGgoJHF1ZXJ5LCAyKSwgc3BhY2UpO1xyXG4gICAgICAgICRxdWVyeS1ob2xkZXI6IGFwcGVuZCgkcXVlcnktaG9sZGVyLCAkZmVhdHVyZS1ob2xkZXIsIGNvbW1hKTtcclxuICAgICAgICBAcmV0dXJuICRxdWVyeS1ob2xkZXI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgQGVsc2UgaWYgJGxlbmd0aCA9PSAzIHtcclxuICAgIC8vIElmIHdlJ3ZlIGdvdCB0aHJlZSBpdGVtcyBhbmQgbm9uZSBpcyBhIGxpc3QsIHdlIGNoZWNrIHRvIHNlZVxyXG4gICAgQGlmIHR5cGUtb2YobnRoKCRxdWVyeSwgMSkpICE9ICdsaXN0JyBhbmQgdHlwZS1vZihudGgoJHF1ZXJ5LCAyKSkgIT0gJ2xpc3QnIGFuZCB0eXBlLW9mKG50aCgkcXVlcnksIDMpKSAhPSAnbGlzdCcge1xyXG4gICAgICAvLyBJZiBub25lIG9mIHRoZSBpdGVtcyBhcmUgc2luZ2xlIHN0cmluZyB2YWx1ZXMgYW5kIG5vbmUgb2YgdGhlIHZhbHVlcyBhcmUgbWVkaWEgdmFsdWVzLCB3ZSdyZSBnb29kLlxyXG4gICAgICBAaWYgKG5vdCBicmVha3BvaW50LXNpbmdsZS1zdHJpbmcobnRoKCRxdWVyeSwgMSkpIGFuZCBub3QgYnJlYWtwb2ludC1zaW5nbGUtc3RyaW5nKG50aCgkcXVlcnksIDIpKSBhbmQgbm90IGJyZWFrcG9pbnQtc2luZ2xlLXN0cmluZyhudGgoJHF1ZXJ5LCAzKSkpIGFuZCAgKChub3QgYnJlYWtwb2ludC1pcy1tZWRpYShudGgoJHF1ZXJ5LCAxKSkgYW5kIG5vdCBicmVha3BvaW50LWlzLW1lZGlhKG50aCgkcXVlcnksIDIpKSBhbmQgbm90IGJyZWFrcG9pbnQtaXMtbWVkaWEobnRoKCRxdWVyeSwgMykpKSkge1xyXG4gICAgICAgICRmZWF0dXJlLWhvbGRlcjogYXBwZW5kKG50aCgkcXVlcnksIDEpLCBudGgoJHF1ZXJ5LCAyKSwgc3BhY2UpO1xyXG4gICAgICAgICRmZWF0dXJlLWhvbGRlcjogYXBwZW5kKCRmZWF0dXJlLWhvbGRlciwgbnRoKCRxdWVyeSwgMyksIHNwYWNlKTtcclxuICAgICAgICAkcXVlcnktaG9sZGVyOiBhcHBlbmQoJHF1ZXJ5LWhvbGRlciwgJGZlYXR1cmUtaG9sZGVyLCBjb21tYSk7XHJcbiAgICAgICAgQHJldHVybiAkcXVlcnktaG9sZGVyO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGxldCdzIGNoZWNrIHRvIHNlZSBpZiB0aGUgZmlyc3QgaXRlbSBpcyBhIG1lZGlhIHR5cGVcclxuICAgICAgQGVsc2UgaWYgYnJlYWtwb2ludC1pcy1tZWRpYShudGgoJHF1ZXJ5LCAxKSkge1xyXG4gICAgICAgICRxdWVyeS1ob2xkZXI6IGFwcGVuZCgkcXVlcnktaG9sZGVyLCBudGgoJHF1ZXJ5LCAxKSk7XHJcbiAgICAgICAgJGZlYXR1cmUtaG9sZGVyOiBhcHBlbmQobnRoKCRxdWVyeSwgMiksIG50aCgkcXVlcnksIDMpLCBzcGFjZSk7XHJcbiAgICAgICAgJHF1ZXJ5LWhvbGRlcjogYXBwZW5kKCRxdWVyeS1ob2xkZXIsICRmZWF0dXJlLWhvbGRlcik7XHJcbiAgICAgICAgQHJldHVybiAkcXVlcnktaG9sZGVyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBJZiBpdCdzIGEgc2luZ2xlIGl0ZW0sIG9yIGlmIGl0J3Mgbm90IGEgc3BlY2lhbCBjYXNlIGRvdWJsZSBvciB0cmlwbGUsIHdlIGNhbiBzaW1wbHkgcmV0dXJuIHRoZSBxdWVyeS5cclxuICBAcmV0dXJuICRxdWVyeTtcclxufVxyXG4iLCIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gSW1wb3J0IFBpZWNlc1xyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuQGltcG9ydCBcInNpbmdsZS9kZWZhdWx0XCI7XHJcblxyXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1wYXJzZS1zaW5nbGUoJGZlYXR1cmUsICRlbXB0eS1tZWRpYSwgJGZpcnN0KSB7XHJcbiAgJHBhcnNlZDogJyc7XHJcbiAgJGxlYWRlcjogJyc7XHJcbiAgLy8gSWYgd2UncmUgZm9yY2luZ1xyXG4gIEBpZiBub3QgKCRlbXB0eS1tZWRpYSkgb3Igbm90ICgkZmlyc3QpIHtcclxuICAgICRsZWFkZXI6ICdhbmQgJztcclxuICB9XHJcblxyXG4gIC8vIElmIGl0J3MgYSBzaW5nbGUgZmVhdHVyZSB0aGF0IGNhbiBzdGFuZCBhbG9uZSwgd2UgbGV0IGl0XHJcbiAgQGlmIChicmVha3BvaW50LXNpbmdsZS1zdHJpbmcoJGZlYXR1cmUpKSB7XHJcbiAgICAkcGFyc2VkOiAkZmVhdHVyZTtcclxuICAgIC8vIFNldCBDb250ZXh0XHJcbiAgICAkY29udGV4dC1zZXR0ZXI6IHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dCgkZmVhdHVyZSwgJGZlYXR1cmUpO1xyXG4gIH1cclxuICAvLyBJZiBpdCdzIG5vdCBhIHN0YW5kIGFsb25lIGZlYXR1cmUsIHdlIHBhc3MgaXQgb2ZmIHRvIHRoZSBkZWZhdWx0IGhhbmRsZXIuXHJcbiAgQGVsc2Uge1xyXG4gICAgJHBhcnNlZDogYnJlYWtwb2ludC1wYXJzZS1kZWZhdWx0KCRmZWF0dXJlKTtcclxuICB9XHJcblxyXG4gIEByZXR1cm4gJGxlYWRlciArICcoJyArICRwYXJzZWQgKyAnKSc7XHJcbn1cclxuIiwiQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcGFyc2UtZGVmYXVsdCgkZmVhdHVyZSkge1xyXG4gICRkZWZhdWx0OiBicmVha3BvaW50LWdldCgnZGVmYXVsdCBmZWF0dXJlJyk7XHJcblxyXG4gIC8vIFNldCBDb250ZXh0XHJcbiAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQoJGRlZmF1bHQsICRmZWF0dXJlKTtcclxuXHJcbiAgQGlmIChicmVha3BvaW50LWdldCgndG8gZW1zJykgPT0gdHJ1ZSkgYW5kICh0eXBlLW9mKCRmZWF0dXJlKSA9PSAnbnVtYmVyJykge1xyXG4gICAgQHJldHVybiAnI3skZGVmYXVsdH06ICN7YnJlYWtwb2ludC10by1iYXNlLWVtKCRmZWF0dXJlKX0nO1xyXG4gIH1cclxuICBAZWxzZSB7XHJcbiAgICBAcmV0dXJuICcjeyRkZWZhdWx0fTogI3skZmVhdHVyZX0nO1xyXG4gIH1cclxufVxyXG4iLCIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gSW1wb3J0IFBpZWNlc1xyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuQGltcG9ydCBcImRvdWJsZS9kZWZhdWx0LXBhaXJcIjtcclxuQGltcG9ydCBcImRvdWJsZS9kb3VibGUtc3RyaW5nXCI7XHJcbkBpbXBvcnQgXCJkb3VibGUvZGVmYXVsdFwiO1xyXG5cclxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcGFyc2UtZG91YmxlKCRmZWF0dXJlLCAkZW1wdHktbWVkaWEsICRmaXJzdCkge1xyXG4gICRwYXJzZWQ6ICcnO1xyXG4gICRsZWFkZXI6ICcnO1xyXG4gIC8vIElmIHdlJ3JlIGZvcmNpbmdcclxuICBAaWYgbm90ICgkZW1wdHktbWVkaWEpIG9yIG5vdCAoJGZpcnN0KSB7XHJcbiAgICAkbGVhZGVyOiAnYW5kICc7XHJcbiAgfVxyXG5cclxuICAkZmlyc3Q6IG50aCgkZmVhdHVyZSwgMSk7XHJcbiAgJHNlY29uZDogbnRoKCRmZWF0dXJlLCAyKTtcclxuXHJcbiAgLy8gSWYgd2UndmUgZ290IHR3byBudW1iZXJzLCB3ZSBrbm93IHdlIG5lZWQgdG8gdXNlIHRoZSBkZWZhdWx0IHBhaXIgYmVjYXVzZSB0aGVyZSBhcmUgbm8gbWVkaWEgcXVlcmllcyB0aGF0IGhhcyBhIG1lZGlhIGZlYXR1cmUgdGhhdCBpcyBhIG51bWJlclxyXG4gIEBpZiB0eXBlLW9mKCRmaXJzdCkgPT0gJ251bWJlcicgYW5kIHR5cGUtb2YoJHNlY29uZCkgPT0gJ251bWJlcicge1xyXG4gICAgJHBhcnNlZDogYnJlYWtwb2ludC1wYXJzZS1kZWZhdWx0LXBhaXIoJGZpcnN0LCAkc2Vjb25kKTtcclxuICB9XHJcbiAgLy8gSWYgdGhleSBhcmUgYm90aCBzdHJpbmdzLCB3ZSBzZW5kIGl0IHRocm91Z2ggdGhlIHN0cmluZyBwYXJzZXJcclxuICBAZWxzZSBpZiB0eXBlLW9mKCRmaXJzdCkgPT0gJ3N0cmluZycgYW5kIHR5cGUtb2YoJHNlY29uZCkgPT0gJ3N0cmluZycge1xyXG4gICAgJHBhcnNlZDogYnJlYWtwb2ludC1wYXJzZS1kb3VibGUtc3RyaW5nKCRmaXJzdCwgJHNlY29uZCk7XHJcbiAgfVxyXG4gIC8vIElmIGl0J3MgYSBzdHJpbmcvbnVtYmVyIHBhaXIsIHdlIHBhcnNlIGl0IGFzIGEgbm9ybWFsIGRvdWJsZVxyXG4gIEBlbHNlIHtcclxuICAgICRwYXJzZWQ6IGJyZWFrcG9pbnQtcGFyc2UtZG91YmxlLWRlZmF1bHQoJGZpcnN0LCAkc2Vjb25kKTtcclxuICB9XHJcblxyXG4gIEByZXR1cm4gJGxlYWRlciArICRwYXJzZWQ7XHJcbn1cclxuIiwiQGZ1bmN0aW9uIGJyZWFrcG9pbnQtcGFyc2UtZGVmYXVsdC1wYWlyKCRmaXJzdCwgJHNlY29uZCkge1xyXG4gICRkZWZhdWx0OiBicmVha3BvaW50LWdldCgnZGVmYXVsdCBwYWlyJyk7XHJcbiAgJG1pbjogJyc7XHJcbiAgJG1heDogJyc7XHJcblxyXG4gIC8vIFNvcnQgaW50byBtaW4gYW5kIG1heFxyXG4gICRtaW46IG1pbigkZmlyc3QsICRzZWNvbmQpO1xyXG4gICRtYXg6IG1heCgkZmlyc3QsICRzZWNvbmQpO1xyXG5cclxuICAvLyBTZXQgQ29udGV4dFxyXG4gICRjb250ZXh0LXNldHRlcjogcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KG1pbi0jeyRkZWZhdWx0fSwgJG1pbik7XHJcbiAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQobWF4LSN7JGRlZmF1bHR9LCAkbWF4KTtcclxuXHJcbiAgLy8gTWFrZSB0aGVtIEVNcyBpZiBuZWVkIGJlXHJcbiAgQGlmIChicmVha3BvaW50LWdldCgndG8gZW1zJykgPT0gdHJ1ZSkge1xyXG4gICAgJG1pbjogYnJlYWtwb2ludC10by1iYXNlLWVtKCRtaW4pO1xyXG4gICAgJG1heDogYnJlYWtwb2ludC10by1iYXNlLWVtKCRtYXgpO1xyXG4gIH1cclxuXHJcbiAgQHJldHVybiAnKG1pbi0jeyRkZWZhdWx0fTogI3skbWlufSkgYW5kIChtYXgtI3skZGVmYXVsdH06ICN7JG1heH0pJztcclxufVxyXG4iLCJAZnVuY3Rpb24gYnJlYWtwb2ludC1wYXJzZS1kb3VibGUtc3RyaW5nKCRmaXJzdCwgJHNlY29uZCkge1xyXG4gICRmZWF0dXJlOiAnJztcclxuICAkdmFsdWU6ICcnO1xyXG5cclxuICAvLyBUZXN0IHRvIHNlZSB3aGljaCBpcyB0aGUgZmVhdHVyZSBhbmQgd2hpY2ggaXMgdGhlIHZhbHVlXHJcbiAgQGlmIChicmVha3BvaW50LXN0cmluZy12YWx1ZSgkZmlyc3QpID09IHRydWUpIHtcclxuICAgICRmZWF0dXJlOiAkZmlyc3Q7XHJcbiAgICAkdmFsdWU6ICRzZWNvbmQ7XHJcbiAgfVxyXG4gIEBlbHNlIHtcclxuICAgICRmZWF0dXJlOiAkc2Vjb25kO1xyXG4gICAgJHZhbHVlOiAkZmlyc3Q7XHJcbiAgfVxyXG5cclxuICAvLyBTZXQgQ29udGV4dFxyXG4gICRjb250ZXh0LXNldHRlcjogcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KCRmZWF0dXJlLCAkdmFsdWUpO1xyXG5cclxuICBAcmV0dXJuICcoI3skZmVhdHVyZX06ICN7JHZhbHVlfSknO1xyXG59XHJcbiIsIkBmdW5jdGlvbiBicmVha3BvaW50LXBhcnNlLWRvdWJsZS1kZWZhdWx0KCRmaXJzdCwgJHNlY29uZCkge1xyXG4gICRmZWF0dXJlOiAnJztcclxuICAkdmFsdWU6ICcnO1xyXG5cclxuICBAaWYgdHlwZS1vZigkZmlyc3QpID09ICdzdHJpbmcnIHtcclxuICAgICRmZWF0dXJlOiAkZmlyc3Q7XHJcbiAgICAkdmFsdWU6ICRzZWNvbmQ7XHJcbiAgfVxyXG4gIEBlbHNlIHtcclxuICAgICRmZWF0dXJlOiAkc2Vjb25kO1xyXG4gICAgJHZhbHVlOiAkZmlyc3Q7XHJcbiAgfVxyXG5cclxuICAvLyBTZXQgQ29udGV4dFxyXG4gICRjb250ZXh0LXNldHRlcjogcHJpdmF0ZS1icmVha3BvaW50LXNldC1jb250ZXh0KCRmZWF0dXJlLCAkdmFsdWUpO1xyXG5cclxuICBAaWYgKGJyZWFrcG9pbnQtZ2V0KCd0byBlbXMnKSA9PSB0cnVlKSB7XHJcbiAgICAkdmFsdWU6IGJyZWFrcG9pbnQtdG8tYmFzZS1lbSgkdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgQHJldHVybiAnKCN7JGZlYXR1cmV9OiAjeyR2YWx1ZX0pJ1xyXG59XHJcbiIsIi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vLyBJbXBvcnQgUGllY2VzXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5AaW1wb3J0IFwidHJpcGxlL2RlZmF1bHRcIjtcclxuXHJcbkBmdW5jdGlvbiBicmVha3BvaW50LXBhcnNlLXRyaXBsZSgkZmVhdHVyZSwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpIHtcclxuICAkcGFyc2VkOiAnJztcclxuICAkbGVhZGVyOiAnJztcclxuXHJcbiAgLy8gSWYgd2UncmUgZm9yY2luZ1xyXG4gIEBpZiBub3QgKCRlbXB0eS1tZWRpYSkgb3Igbm90ICgkZmlyc3QpIHtcclxuICAgICRsZWFkZXI6ICdhbmQgJztcclxuICB9XHJcblxyXG4gIC8vIHNlcGFyYXRlIHRoZSBzdHJpbmcgZmVhdHVyZXMgZnJvbSB0aGUgdmFsdWUgbnVtYmVyc1xyXG4gICRzdHJpbmc6IG51bGw7XHJcbiAgJG51bWJlcnM6IG51bGw7XHJcbiAgQGVhY2ggJHZhbCBpbiAkZmVhdHVyZSB7XHJcbiAgICBAaWYgdHlwZS1vZigkdmFsKSA9PSBzdHJpbmcge1xyXG4gICAgICAkc3RyaW5nOiAkdmFsO1xyXG4gICAgfVxyXG4gICAgQGVsc2Uge1xyXG4gICAgICBAaWYgdHlwZS1vZigkbnVtYmVycykgPT0gJ251bGwnIHtcclxuICAgICAgICAkbnVtYmVyczogJHZhbDtcclxuICAgICAgfVxyXG4gICAgICBAZWxzZSB7XHJcbiAgICAgICAgJG51bWJlcnM6IGFwcGVuZCgkbnVtYmVycywgJHZhbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gICRwYXJzZWQ6IGJyZWFrcG9pbnQtcGFyc2UtdHJpcGxlLWRlZmF1bHQoJHN0cmluZywgbnRoKCRudW1iZXJzLCAxKSwgbnRoKCRudW1iZXJzLCAyKSk7XHJcblxyXG4gIEByZXR1cm4gJGxlYWRlciArICRwYXJzZWQ7XHJcblxyXG59XHJcbiIsIkBmdW5jdGlvbiBicmVha3BvaW50LXBhcnNlLXRyaXBsZS1kZWZhdWx0KCRmZWF0dXJlLCAkZmlyc3QsICRzZWNvbmQpIHtcclxuXHJcbiAgLy8gU29ydCBpbnRvIG1pbiBhbmQgbWF4XHJcbiAgJG1pbjogbWluKCRmaXJzdCwgJHNlY29uZCk7XHJcbiAgJG1heDogbWF4KCRmaXJzdCwgJHNlY29uZCk7XHJcblxyXG4gIC8vIFNldCBDb250ZXh0XHJcbiAgJGNvbnRleHQtc2V0dGVyOiBwcml2YXRlLWJyZWFrcG9pbnQtc2V0LWNvbnRleHQobWluLSN7JGZlYXR1cmV9LCAkbWluKTtcclxuICAkY29udGV4dC1zZXR0ZXI6IHByaXZhdGUtYnJlYWtwb2ludC1zZXQtY29udGV4dChtYXgtI3skZmVhdHVyZX0sICRtYXgpO1xyXG5cclxuICAvLyBNYWtlIHRoZW0gRU1zIGlmIG5lZWQgYmVcclxuICBAaWYgKGJyZWFrcG9pbnQtZ2V0KCd0byBlbXMnKSA9PSB0cnVlKSB7XHJcbiAgICAkbWluOiBicmVha3BvaW50LXRvLWJhc2UtZW0oJG1pbik7XHJcbiAgICAkbWF4OiBicmVha3BvaW50LXRvLWJhc2UtZW0oJG1heCk7XHJcbiAgfVxyXG5cclxuICBAcmV0dXJuICcobWluLSN7JGZlYXR1cmV9OiAjeyRtaW59KSBhbmQgKG1heC0jeyRmZWF0dXJlfTogI3skbWF4fSknO1xyXG59XHJcbiIsIkBpbXBvcnQgXCJyZXNvbHV0aW9uL3Jlc29sdXRpb25cIjtcclxuXHJcbkBmdW5jdGlvbiBicmVha3BvaW50LWJ1aWxkLXJlc29sdXRpb24oJHF1ZXJ5LXByaW50LCAkcXVlcnktcmVzb2x1dGlvbiwgJGVtcHR5LW1lZGlhLCAkZmlyc3QpIHtcclxuICAkbGVhZGVyOiAnJztcclxuICAvLyBJZiB3ZSdyZSBmb3JjaW5nXHJcbiAgQGlmIG5vdCAoJGVtcHR5LW1lZGlhKSBvciBub3QgKCRmaXJzdCkge1xyXG4gICAgJGxlYWRlcjogJ2FuZCAnO1xyXG4gIH1cclxuXHJcbiAgQGlmIGJyZWFrcG9pbnQtZ2V0KCd0cmFuc2Zvcm0gcmVzb2x1dGlvbnMnKSBhbmQgJHF1ZXJ5LXJlc29sdXRpb24ge1xyXG4gICAgJHJlc29sdXRpb25zOiBicmVha3BvaW50LW1ha2UtcmVzb2x1dGlvbnMoJHF1ZXJ5LXJlc29sdXRpb24pO1xyXG4gICAgJGxlbmd0aDogbGVuZ3RoKCRyZXNvbHV0aW9ucyk7XHJcbiAgICAkcXVlcnktaG9sZGVyOiAnJztcclxuXHJcbiAgICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRsZW5ndGgge1xyXG4gICAgICAkcXVlcnk6ICcjeyRxdWVyeS1wcmludH0gI3skbGVhZGVyfSN7bnRoKCRyZXNvbHV0aW9ucywgJGkpfSc7XHJcbiAgICAgIEBpZiAkaSA9PSAxIHtcclxuICAgICAgICAkcXVlcnktaG9sZGVyOiAkcXVlcnk7XHJcbiAgICAgIH1cclxuICAgICAgQGVsc2Uge1xyXG4gICAgICAgICRxdWVyeS1ob2xkZXI6ICcjeyRxdWVyeS1ob2xkZXJ9LCAjeyRxdWVyeX0nO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQHJldHVybiAkcXVlcnktaG9sZGVyO1xyXG4gIH1cclxuICBAZWxzZSB7XHJcbiAgICAvLyBSZXR1cm4gd2l0aCBhdHRhY2hlZCByZXNvbHV0aW9uXHJcbiAgICBAcmV0dXJuICRxdWVyeS1wcmludDtcclxuICB9XHJcbn1cclxuIiwiQGZ1bmN0aW9uIGJyZWFrcG9pbnQtbWFrZS1yZXNvbHV0aW9ucygkcmVzb2x1dGlvbikge1xyXG4gICRsZW5ndGg6IGxlbmd0aCgkcmVzb2x1dGlvbik7XHJcblxyXG4gICRvdXRwdXQ6ICgpO1xyXG5cclxuICBAaWYgJGxlbmd0aCA9PSAyIHtcclxuICAgICRmZWF0dXJlOiAnJztcclxuICAgICR2YWx1ZTogJyc7XHJcblxyXG4gICAgLy8gRmluZCB3aGljaCBpcyBudW1iZXJcclxuICAgIEBpZiB0eXBlLW9mKG50aCgkcmVzb2x1dGlvbiwgMSkpID09ICdudW1iZXInIHtcclxuICAgICAgJHZhbHVlOiBudGgoJHJlc29sdXRpb24sIDEpO1xyXG4gICAgfVxyXG4gICAgQGVsc2Uge1xyXG4gICAgICAkdmFsdWU6IG50aCgkcmVzb2x1dGlvbiwgMik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGV0ZXJtaW5lIG1pbi9tYXgvc3RhbmRhcmRcclxuICAgIEBpZiBpbmRleCgkcmVzb2x1dGlvbiwgJ21pbi1yZXNvbHV0aW9uJykge1xyXG4gICAgICAkZmVhdHVyZTogJ21pbi0nO1xyXG4gICAgfVxyXG4gICAgQGVsc2UgaWYgaW5kZXgoJHJlc29sdXRpb24sICdtYXgtcmVzb2x1dGlvbicpIHtcclxuICAgICAgJGZlYXR1cmU6ICdtYXgtJztcclxuICAgIH1cclxuXHJcbiAgICAkc3RhbmRhcmQ6ICcoI3skZmVhdHVyZX1yZXNvbHV0aW9uOiAjeyR2YWx1ZX0pJztcclxuXHJcbiAgICAvLyBJZiB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGRwcHgsXHJcbiAgICBAaWYgdW5pdCgkdmFsdWUpICE9ICdkcHB4JyB7XHJcbiAgICAgICRiYXNlOiA5NmRwaTtcclxuICAgICAgQGlmIHVuaXQoJHZhbHVlKSA9PSAnZHBjbScge1xyXG4gICAgICAgICRiYXNlOiAyNDMuODRkcGNtO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFdyaXRlIG91dCBmZWF0dXJlIHRlc3RzXHJcbiAgICAgICR3ZWJraXQ6ICcnO1xyXG4gICAgICAkbW96OiAnJztcclxuICAgICAgJHdlYmtpdDogJygtd2Via2l0LSN7JGZlYXR1cmV9ZGV2aWNlLXBpeGVsLXJhdGlvOiAjeyR2YWx1ZSAvICRiYXNlfSknO1xyXG4gICAgICAkbW96OiAnKCN7JGZlYXR1cmV9LW1vei1kZXZpY2UtcGl4ZWwtcmF0aW86ICN7JHZhbHVlIC8gJGJhc2V9KSc7XHJcbiAgICAgIC8vIEFwcGVuZCB0byBvdXRwdXRcclxuICAgICAgJG91dHB1dDogYXBwZW5kKCRvdXRwdXQsICRzdGFuZGFyZCwgc3BhY2UpO1xyXG4gICAgICAkb3V0cHV0OiBhcHBlbmQoJG91dHB1dCwgJHdlYmtpdCwgc3BhY2UpO1xyXG4gICAgICAkb3V0cHV0OiBhcHBlbmQoJG91dHB1dCwgJG1veiwgc3BhY2UpO1xyXG4gICAgfVxyXG4gICAgQGVsc2Uge1xyXG4gICAgICAkd2Via2l0OiAnJztcclxuICAgICAgJG1vejogJyc7XHJcbiAgICAgICR3ZWJraXQ6ICcoLXdlYmtpdC0jeyRmZWF0dXJlfWRldmljZS1waXhlbC1yYXRpbzogI3skdmFsdWUgLyAxZHBweH0pJztcclxuICAgICAgJG1vejogJygjeyRmZWF0dXJlfS1tb3otZGV2aWNlLXBpeGVsLXJhdGlvOiAjeyR2YWx1ZSAvIDFkcHB4fSknO1xyXG4gICAgICAkZmFsbGJhY2s6ICcoI3skZmVhdHVyZX1yZXNvbHV0aW9uOiAjeyR2YWx1ZSAvIDFkcHB4ICogOTZkcGl9KSc7XHJcbiAgICAgIC8vIEFwcGVuZCB0byBvdXRwdXRcclxuICAgICAgJG91dHB1dDogYXBwZW5kKCRvdXRwdXQsICRzdGFuZGFyZCwgc3BhY2UpO1xyXG4gICAgICAkb3V0cHV0OiBhcHBlbmQoJG91dHB1dCwgJHdlYmtpdCwgc3BhY2UpO1xyXG4gICAgICAkb3V0cHV0OiBhcHBlbmQoJG91dHB1dCwgJG1veiwgc3BhY2UpO1xyXG4gICAgICAkb3V0cHV0OiBhcHBlbmQoJG91dHB1dCwgJGZhbGxiYWNrLCBzcGFjZSk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgQHJldHVybiAkb3V0cHV0O1xyXG59XHJcbiIsIkBmdW5jdGlvbiBicmVha3BvaW50LW5vLXF1ZXJ5KCRxdWVyeSkge1xyXG4gIEBpZiB0eXBlLW9mKCRxdWVyeSkgPT0gJ2xpc3QnIHtcclxuICAgICRrZXl3b3JkOiBudGgoJHF1ZXJ5LCAxKTtcclxuXHJcbiAgICBAaWYgdHlwZS1vZigka2V5d29yZCkgPT0gJ3N0cmluZycgYW5kICgka2V5d29yZCA9PSAnbm8tcXVlcnknIG9yICRrZXl3b3JkID09ICdubyBxdWVyeScgb3IgJGtleXdvcmQgPT0gJ2ZhbGxiYWNrJykge1xyXG4gICAgICBAcmV0dXJuIG50aCgkcXVlcnksIDIpO1xyXG4gICAgfVxyXG4gICAgQGVsc2Uge1xyXG4gICAgICBAcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICBAZWxzZSB7XHJcbiAgICBAcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCIvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gRGVmYXVsdCB0aGUgQnJlYWtwb2ludHMgdmFyaWFibGVcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiRicmVha3BvaW50czogKCkgIWRlZmF1bHQ7XHJcbiRCUkVBS1BPSU5UUzogKCkgIWRlZmF1bHQ7XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuLy8gUmVzcG9uZC10byBBUEkgTWl4aW5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbkBtaXhpbiByZXNwb25kLXRvKCRjb250ZXh0LCAkbm8tcXVlcnk6IGZhbHNlKSB7XHJcbiAgQGlmIGxlbmd0aCgkYnJlYWtwb2ludHMpID4gMCBhbmQgbGVuZ3RoKCRCUkVBS1BPSU5UUykgPT0gMCB7XHJcbiAgICBAd2FybiBcIkluIG9yZGVyIHRvIGF2b2lkIHZhcmlhYmxlIG5hbWVzcGFjZSBjb2xsaXNpb25zLCB3ZSBoYXZlIHVwZGF0ZWQgdGhlIHdheSB0byBhZGQgYnJlYWtwb2ludHMgZm9yIHJlc3BvbmQtdG8uIFBsZWFzZSBjaGFuZ2UgYWxsIGluc3RhbmNlcyBvZiBgJGJyZWFrcG9pbnRzOiBhZGQtYnJlYWtwb2ludCgpYCB0byBgQGluY2x1ZGUgYWRkLWJyZWFrcG9pbnQoKWAuIFRoZSBgYWRkLWJyZWFrcG9pbnQoKWAgZnVuY3Rpb24gd2lsbCBiZSBkZXByZWNhdGVkIGluIGEgZnV0dXJlIHJlbGVhc2UuXCI7XHJcbiAgICAkQlJFQUtQT0lOVFM6ICRicmVha3BvaW50cyAhZ2xvYmFsO1xyXG4gICAgJGJyZWFrcG9pbnRzOiAoKSAhZ2xvYmFsO1xyXG4gIH1cclxuXHJcbiAgQGlmIHR5cGUtb2YoJEJSRUFLUE9JTlRTKSAhPSAnbWFwJyB7XHJcbiAgICAvLyBKdXN0IGluIGNhc2Ugc29tZW9uZSB3cml0ZXMgZ2liYmVyaXNoIHRvIHRoZSAkYnJlYWtwb2ludHMgdmFyaWFibGUuXHJcbiAgICBAd2FybiBcIllvdXIgYnJlYWtwb2ludHMgYXJlbid0IGEgbWFwISBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3NudWd1Zy9yZXNwb25kLXRvI2FwaSBpZiB5b3UnZCBsaWtlIGEgcmVtaW5kZXIgb24gaG93IHRvIHVzZSBSZXNwb25kLXRvXCI7XHJcbiAgICBAY29udGVudDtcclxuICB9XHJcbiAgQGVsc2UgaWYgbWFwLWhhcy1rZXkoJEJSRUFLUE9JTlRTLCAkY29udGV4dCkge1xyXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludChtYXAtZ2V0KCRCUkVBS1BPSU5UUywgJGNvbnRleHQpLCAkbm8tcXVlcnkpIHtcclxuICAgICAgQGNvbnRlbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBlbHNlIGlmIG5vdCBtYXAtaGFzLWtleSgkQlJFQUtQT0lOVFMsICRjb250ZXh0KSB7XHJcbiAgICBAd2FybiBcImAjeyRjb250ZXh0fWAgaXNuJ3QgYSBkZWZpbmVkIGJyZWFrcG9pbnQhIFBsZWFzZSBhZGQgaXQgdXNpbmcgYCRicmVha3BvaW50czogYWRkLWJyZWFrcG9pbnQoYCN7JGNvbnRleHR9YCwgJHZhbHVlKTtgXCI7XHJcbiAgICBAY29udGVudDtcclxuICB9XHJcbiAgQGVsc2Uge1xyXG4gICAgQHdhcm4gXCJZb3UgaGF2ZW4ndCBjcmVhdGVkIGFueSBicmVha3BvaW50cyB5ZXQhIE1ha2Ugc29tZSBhbHJlYWR5ISBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3NudWd1Zy9yZXNwb25kLXRvI2FwaSBpZiB5b3UnZCBsaWtlIGEgcmVtaW5kZXIgb24gaG93IHRvIHVzZSBSZXNwb25kLXRvXCI7XHJcbiAgICBAY29udGVudDtcclxuICB9XHJcbn1cclxuXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4vLyBBZGQgQnJlYWtwb2ludCB0byBCcmVha3BvaW50c1xyXG4vLyBUT0RPOiBSZW1vdmUgZnVuY3Rpb24gaW4gbmV4dCByZWxlYXNlXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5AZnVuY3Rpb24gYWRkLWJyZWFrcG9pbnQoJG5hbWUsICRia3B0LCAkb3ZlcndyaXRlOiBmYWxzZSkge1xyXG4gICRvdXRwdXQ6ICgkbmFtZTogJGJrcHQpO1xyXG5cclxuICBAaWYgbGVuZ3RoKCRicmVha3BvaW50cykgPT0gMCB7XHJcbiAgICBAcmV0dXJuICRvdXRwdXQ7XHJcbiAgfVxyXG4gIEBlbHNlIHtcclxuICAgIEBpZiBtYXAtaGFzLWtleSgkYnJlYWtwb2ludHMsICRuYW1lKSBhbmQgJG92ZXJ3cml0ZSAhPSB0cnVlIHtcclxuICAgICAgQHdhcm4gXCJZb3UgYWxyZWFkeSBoYXZlIGEgYnJlYWtwb2ludCBuYW1lZCBgI3skbmFtZX1gLCBwbGVhc2UgY2hvb3NlIGFub3RoZXIgYnJlYWtwb2ludCBuYW1lLCBvciBwYXNzIGluIGAkb3ZlcndyaXRlOiB0cnVlYCB0byBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIGJyZWFrcG9pbnQuXCI7XHJcbiAgICAgIEByZXR1cm4gJGJyZWFrcG9pbnRzO1xyXG4gICAgfVxyXG4gICAgQGVsc2UgaWYgbm90IG1hcC1oYXMta2V5KCRicmVha3BvaW50cywgJG5hbWUpIG9yICRvdmVyd3JpdGUgPT0gdHJ1ZSB7XHJcbiAgICAgIEByZXR1cm4gbWFwLW1lcmdlKCRicmVha3BvaW50cywgJG91dHB1dCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5AbWl4aW4gYWRkLWJyZWFrcG9pbnQoJG5hbWUsICRia3B0LCAkb3ZlcndyaXRlOiBmYWxzZSkge1xyXG4gICRvdXRwdXQ6ICgkbmFtZTogJGJrcHQpO1xyXG5cclxuICBAaWYgbGVuZ3RoKCRCUkVBS1BPSU5UUykgPT0gMCB7XHJcbiAgICAkQlJFQUtQT0lOVFM6ICRvdXRwdXQgIWdsb2JhbDtcclxuICB9XHJcbiAgQGVsc2Uge1xyXG4gICAgQGlmIG1hcC1oYXMta2V5KCRCUkVBS1BPSU5UUywgJG5hbWUpIGFuZCAkb3ZlcndyaXRlICE9IHRydWUge1xyXG4gICAgICBAd2FybiBcIllvdSBhbHJlYWR5IGhhdmUgYSBicmVha3BvaW50IG5hbWVkIGAjeyRuYW1lfWAsIHBsZWFzZSBjaG9vc2UgYW5vdGhlciBicmVha3BvaW50IG5hbWUsIG9yIHBhc3MgaW4gYCRvdmVyd3JpdGU6IHRydWVgIHRvIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgYnJlYWtwb2ludC5cIjtcclxuICAgICAgJEJSRUFLUE9JTlRTOiAkQlJFQUtQT0lOVFMgIWdsb2JhbDtcclxuICAgIH1cclxuICAgIEBlbHNlIGlmIG5vdCBtYXAtaGFzLWtleSgkQlJFQUtQT0lOVFMsICRuYW1lKSBvciAkb3ZlcndyaXRlID09IHRydWUge1xyXG4gICAgICAkQlJFQUtQT0lOVFM6IG1hcC1tZXJnZSgkQlJFQUtQT0lOVFMsICRvdXRwdXQpICFnbG9iYWw7XHJcbiAgICB9XHJcbiAgfVxyXG59IiwiQG1peGluIGxlZ2FjeS1zZXR0aW5ncy13YXJuaW5nIHtcclxuICAkbGVnYWN5VmFyczogKFxyXG4gICAgJ2RlZmF1bHQtbWVkaWEnOiAnZGVmYXVsdCBtZWRpYScsXHJcbiAgICAnZGVmYXVsdC1mZWF0dXJlJzogJ2RlZmF1bHQgZmVhdHVyZScsXHJcbiAgICAnZm9yY2UtbWVkaWEtYWxsJzogJ2ZvcmNlIGFsbCBtZWRpYSB0eXBlJyxcclxuICAgICd0by1lbXMnOiAndG8gZW1zJyxcclxuICAgICdyZXNvbHV0aW9ucyc6ICd0cmFuc2Zvcm0gcmVzb2x1dGlvbnMnLFxyXG4gICAgJ25vLXF1ZXJpZXMnOiAnbm8gcXVlcmllcycsXHJcbiAgICAnbm8tcXVlcnktZmFsbGJhY2tzJzogJ25vIHF1ZXJ5IGZhbGxiYWNrcycsXHJcbiAgICAnYmFzZS1mb250LXNpemUnOiAnYmFzZSBmb250IHNpemUnLFxyXG4gICAgJ2xlZ2FjeS1zeW50YXgnOiAnbGVnYWN5IHN5bnRheCdcclxuICApO1xyXG5cclxuICBAZWFjaCAkbGVnYWN5LCAkbmV3IGluICRsZWdhY3lWYXJzIHtcclxuICAgIEBpZiBnbG9iYWwtdmFyaWFibGUtZXhpc3RzKCdicmVha3BvaW50LScgKyAkbGVnYWN5KSB7XHJcbiAgICAgIEB3YXJuIFwiSW4gb3JkZXIgdG8gYXZvaWQgdmFyaWFibGUgbmFtc3BhY2UgY29sbGlzaW9ucywgd2UgaGF2ZSB1cGRhdGVkIHRoZSB3YXkgdG8gY2hhbmdlIHNldHRpbmdzIGZvciBCcmVha3BvaW50LiBQbGVhc2UgY2hhbmdlIGFsbCBpbnN0YW5jZXMgb2YgYCRicmVha3BvaW50LSN7JGxlZ2FjeX06IHt7c2V0dGluZ319YCB0byBgQGluY2x1ZGUgYnJlYWtwb2ludC1zZXQoJyN7JG5ld30nLCB7e3NldHRpbmd9fSlgLiBWYXJpYWJsZSBzZXR0aW5ncywgYXMgd2VsbCBhcyB0aGlzIHdhcm5pbmcgd2lsbCBiZSBkZXByZWNhdGVkIGluIGEgZnV0dXJlIHJlbGVhc2UuXCJcclxuICAgIH1cclxuICB9O1xyXG5cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAvLyBIYW5kIGNvcnJlY3QgZWFjaCBzZXR0aW5nXHJcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoJ2JyZWFrcG9pbnQtZGVmYXVsdC1tZWRpYScpIGFuZCAkYnJlYWtwb2ludC1kZWZhdWx0LW1lZGlhICE9IGJyZWFrcG9pbnQtZ2V0KCdkZWZhdWx0IG1lZGlhJykge1xyXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludC1zZXQoJ2RlZmF1bHQgbWVkaWEnLCAkYnJlYWtwb2ludC1kZWZhdWx0LW1lZGlhKTtcclxuICB9XHJcbiAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoJ2JyZWFrcG9pbnQtZGVmYXVsdC1mZWF0dXJlJykgYW5kICRicmVha3BvaW50LWRlZmF1bHQtZmVhdHVyZSAhPSBicmVha3BvaW50LWdldCgnZGVmYXVsdCBmZWF0dXJlJykge1xyXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludC1zZXQoJ2RlZmF1bHQgZmVhdHVyZScsICRicmVha3BvaW50LWRlZmF1bHQtZmVhdHVyZSk7XHJcbiAgfVxyXG4gIEBpZiBnbG9iYWwtdmFyaWFibGUtZXhpc3RzKCdicmVha3BvaW50LWZvcmNlLW1lZGlhLWFsbCcpIGFuZCAkYnJlYWtwb2ludC1mb3JjZS1tZWRpYS1hbGwgIT0gYnJlYWtwb2ludC1nZXQoJ2ZvcmNlIGFsbCBtZWRpYSB0eXBlJykge1xyXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludC1zZXQoJ2ZvcmNlIGFsbCBtZWRpYSB0eXBlJywgJGJyZWFrcG9pbnQtZm9yY2UtbWVkaWEtYWxsKTtcclxuICB9XHJcbiAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoJ2JyZWFrcG9pbnQtdG8tZW1zJykgYW5kICRicmVha3BvaW50LXRvLWVtcyAhPSBicmVha3BvaW50LWdldCgndG8gZW1zJykge1xyXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludC1zZXQoJ3RvIGVtcycsICRicmVha3BvaW50LXRvLWVtcyk7XHJcbiAgfVxyXG4gIEBpZiBnbG9iYWwtdmFyaWFibGUtZXhpc3RzKCdicmVha3BvaW50LXJlc29sdXRpb25zJykgYW5kICRicmVha3BvaW50LXJlc29sdXRpb25zICE9IGJyZWFrcG9pbnQtZ2V0KCd0cmFuc2Zvcm0gcmVzb2x1dGlvbnMnKSB7XHJcbiAgICBAaW5jbHVkZSBicmVha3BvaW50LXNldCgndHJhbnNmb3JtIHJlc29sdXRpb25zJywgJGJyZWFrcG9pbnQtcmVzb2x1dGlvbnMpO1xyXG4gIH1cclxuICBAaWYgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cygnYnJlYWtwb2ludC1uby1xdWVyaWVzJykgYW5kICRicmVha3BvaW50LW5vLXF1ZXJpZXMgIT0gYnJlYWtwb2ludC1nZXQoJ25vIHF1ZXJpZXMnKSB7XHJcbiAgICBAaW5jbHVkZSBicmVha3BvaW50LXNldCgnbm8gcXVlcmllcycsICRicmVha3BvaW50LW5vLXF1ZXJpZXMpO1xyXG4gIH1cclxuICBAaWYgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cygnYnJlYWtwb2ludC1uby1xdWVyeS1mYWxsYmFja3MnKSBhbmQgJGJyZWFrcG9pbnQtbm8tcXVlcnktZmFsbGJhY2tzICE9IGJyZWFrcG9pbnQtZ2V0KCdubyBxdWVyeSBmYWxsYmFja3MnKSB7XHJcbiAgICBAaW5jbHVkZSBicmVha3BvaW50LXNldCgnbm8gcXVlcnkgZmFsbGJhY2tzJywgJGJyZWFrcG9pbnQtbm8tcXVlcnktZmFsbGJhY2tzKTtcclxuICB9XHJcbiAgQGlmIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoJ2JyZWFrcG9pbnQtYmFzZS1mb250LXNpemUnKSBhbmQgJGJyZWFrcG9pbnQtYmFzZS1mb250LXNpemUgIT0gYnJlYWtwb2ludC1nZXQoJ2Jhc2UgZm9udCBzaXplJykge1xyXG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludC1zZXQoJ2Jhc2UgZm9udCBzaXplJywgJGJyZWFrcG9pbnQtYmFzZS1mb250LXNpemUpO1xyXG4gIH1cclxuICBAaWYgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cygnYnJlYWtwb2ludC1sZWdhY3ktc3ludGF4JykgYW5kICRicmVha3BvaW50LWxlZ2FjeS1zeW50YXggIT0gYnJlYWtwb2ludC1nZXQoJ2xlZ2FjeSBzeW50YXgnKSB7XHJcbiAgICBAaW5jbHVkZSBicmVha3BvaW50LXNldCgnbGVnYWN5IHN5bnRheCcsICRicmVha3BvaW50LWxlZ2FjeS1zeW50YXgpO1xyXG4gIH1cclxufSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUM2Q0E7OztJQUdJO0FBdURKLFdBQVc7QUFXWCxpQkFBaUI7QUN4R2pCLEFBRUksSUFGQSxBQUFBLFFBQVEsQ0FDVixLQUFLLENBQ0gsUUFBUSxDQUFDO0VBQ1AsWUFBWSxFRGdCSixPQUFPLEdDQWhCO0VBbkJMLEFBT00sSUFQRixBQUFBLFFBQVEsQ0FDVixLQUFLLENBQ0gsUUFBUSxDQUtOLG1DQUFtQyxHQUFHLFlBQVksR0FBRyxXQUFXLEFBQUEsTUFBTTtFQVA1RSxJQUFJLEFBQUEsUUFBUSxDQUNWLEtBQUssQ0FDSCxRQUFRLENBTU4sa0NBQWtDLEdBQUcsWUFBWSxHQUFHLFdBQVcsQUFBQSxNQUFNO0VBUjNFLElBQUksQUFBQSxRQUFRLENBQ1YsS0FBSyxDQUNILFFBQVEsQ0FPTixzQ0FBc0MsR0FBRyxZQUFZLEdBQUcsV0FBVyxBQUFBLE1BQU07RUFUL0UsSUFBSSxBQUFBLFFBQVEsQ0FDVixLQUFLLENBQ0gsUUFBUSxDQVFOLGVBQWUsR0FBRyxNQUFNLEFBQUEsTUFBTSxDQUFDO0lBQzdCLGdCQUFnQixFRFFWLE9BQU8sR0NQZDs7QUFXUCxBQU1JLEtBTkMsQ0FBQyxRQUFRLENBQ1osR0FBRyxDQUFBLEFBQUEsRUFBQyxFQUFELDJCQUFDLEFBQUEsSUFLRSxFQUFFO0FBTlYsS0FBSyxDQUFDLFFBQVEsQ0FFWixHQUFHLENBQUEsQUFBQSxFQUFDLEVBQUQsK0JBQUMsQUFBQSxJQUlFLEVBQUU7QUFOVixLQUFLLENBQUMsUUFBUSxDQUdaLEdBQUcsQ0FBQSxBQUFBLEVBQUMsRUFBRCwyQkFBQyxBQUFBLElBR0UsRUFBRTtBQU5WLEtBQUssQ0FBQyxRQUFRLENBSVosR0FBRyxDQUFBLEFBQUEsRUFBQyxFQUFELGdEQUFDLEFBQUEsSUFFRSxFQUFFO0FBTlYsS0FBSyxDQUFDLFFBQVEsQ0FLWixHQUFHLENBQUEsQUFBQSxFQUFDLEVBQUQsb0RBQUMsQUFBQSxJQUNFLEVBQUUsQ0FBQztFQUNMLGFBQWEsRUFBRSxHQUFHLENBQUMsS0FBSyxDRFhoQixPQUFPLEdDWWhCOztBQUlMLEFBQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyw2QkFBNkIsQ0FBQyxZQUFZO0FBQ3pELEtBQUssQ0FBQyxRQUFRLENBQUMsaUNBQWlDLENBQUMsWUFBWTtBQUM3RCxLQUFLLENBQUMsUUFBUSxDQUFDLDBDQUEwQyxDQUFDLFlBQVk7QUFDdEUsS0FBSyxDQUFDLFFBQVEsQ0FBQywwQ0FBMEMsQ0FBQyxZQUFZO0FBQ3RFLEtBQUssQ0FBQyxRQUFRLENBQUMsK0JBQStCLEdBQUcsRUFBRTtBQUNuRCxLQUFLLENBQUMsUUFBUSxDQUFDLDJCQUEyQixHQUFHLEVBQUU7QUFDL0MsS0FBSyxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsR0FBRyxFQUFFO0FBQy9DLHNDQUFzQyxHQUFHLEVBQUU7QUFDM0MsaUNBQWlDLEdBQUcsRUFBRSxDQUNyQztFQUNDLGFBQWEsRUFBRSxHQUFHLENBQUMsS0FBSyxDRDFCWixPQUFPLEdDMkJwQjs7QUFHRCxBQUVJLGdCQUZZLENBQUMsbUJBQW1CLENBQ2xDLDJEQUEyRCxBQUN4RCxNQUFNLENBQUM7RUFDTixnQkFBZ0IsRURqQ1IsT0FBTyxHQ2tDaEI7O0FBSUwsQUFJTSxvQkFKYyxDQUFDLG1CQUFtQixDQUN0QywyREFBMkQsQ0FDekQsaUJBQWlCLEdBQUcsTUFBTSxHQUFHLFlBQVksR0FBRyxXQUFXO0FBQ3ZELFlBQVksR0FBRyxXQUFXLEFBQ3ZCLE1BQU0sQ0FBQztFQUNOLGdCQUFnQixFRDNDVixPQUFPLEdDNENkOztBQ2JILE1BQU0sRUFBRyxTQUFTLEVBQUUsS0FBSztFRE83QixBQVFRLG9CQVJZLENBQUMsbUJBQW1CLENBQ3RDLDJEQUEyRCxDQUN6RCxpQkFBaUIsR0FBRyxNQUFNLEdBQUcsWUFBWSxHQUFHLFdBQVc7QUFDdkQsWUFBWSxHQUFHLFdBQVcsQUFLckIsT0FBTyxDQUFDO0lBQ1AsZ0JBQWdCLEVEL0NaLE9BQU8sR0NnRFo7O0FBVlQsQUFjTSxvQkFkYyxDQUFDLG1CQUFtQixDQUN0QywyREFBMkQsQ0FZekQscUJBQXFCLEFBQ2xCLE1BQU0sQ0FBQztFQUNOLGdCQUFnQixFRHJEVixPQUFPLEdDc0RkOztBQWhCUCxBQW1CTSxvQkFuQmMsQ0FBQyxtQkFBbUIsQ0FDdEMsMkRBQTJELENBaUJ6RCxpQ0FBaUMsQUFDOUIsTUFBTSxDQUFDO0VBQ04sZ0JBQWdCLEVEMURWLE9BQU8sR0MyRGQ7O0FBS1AsQUFFSSxrQkFGYyxDQUFDLG1CQUFtQixDQUNwQywyREFBMkQsQUFDeEQsTUFBTSxDQUFDO0VBQ04sZ0JBQWdCLEVEbkVSLE9BQU8sR0NvRWhCOztBQUlMLEFBQ0UsbUJBRGlCLENBQUMsbUJBQW1CLENBQ3JDLHFCQUFxQixDQUFDO0VBQ2xCLGdCQUFnQixFRDFFUixPQUFPLEdDMkVsQjs7QUFJSCxBQUVJLG1CQUZlLENBQUMsbUJBQW1CLENBQ3JDLDJEQUEyRCxBQUN4RCxNQUFNLENBQUM7RUFDTixnQkFBZ0IsRURsRlIsT0FBTyxHQ21GaEI7O0FBV0wsQUFDRSxLQURHLENBQUMsUUFBUSxDQUFDLGdDQUFnQyxDQUM3QyxFQUFFLENBQUM7RUFDRCxhQUFhLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0RoR2QsT0FBTyxHQ2lHbEI7O0FBR0gsQUFDRSxLQURHLENBQUMsUUFBUSxDQUFDLCtCQUErQixDQUM1QyxFQUFFLENBQUM7RUFDRCxhQUFhLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0R0R2QsT0FBTyxHQ3VHbEI7O0FBT0gsQUFBQSwwQkFBMEIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQzlDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0VBQzFCLEtBQUssRURoSE8sT0FBTyxHQ2lIcEIifQ== */
