.tds-o-footer {
  display: -ms-flexbox;
  display: flex;
  -ms-flex-align: center;
      align-items: center;
  -ms-flex-line-pack: center;
      align-content: center;
  -ms-flex-pack: center;
      justify-content: center;
  -ms-flex-flow: row wrap;
      flex-flow: row wrap;
  -ms-flex-flow: var(--footer-flex-flow);
  -ms-flex-flow: var(--footer-flex-flow);
      flex-flow: var(--footer-flex-flow);
      flex-flow: var(--footer-flex-flow); }
  .tds-o-footer ol {
    display: -ms-flexbox;
    display: flex;
    -ms-flex-align: center;
        align-items: center;
    -ms-flex-line-pack: center;
        align-content: center;
    -ms-flex-flow: row wrap;
        flex-flow: row wrap;
    -ms-flex-flow: var(--footer-flex-flow);
    -ms-flex-flow: var(--footer-flex-flow);
        flex-flow: var(--footer-flex-flow);
        flex-flow: var(--footer-flex-flow);
    text-align: var(--footer-text-alignment);
    text-align: var(--footer-text-alignment);
    font-size: var(--tds-footer-font-size);
    font-size: var(--tds-footer-font-size);
    line-height: var(--tds-footer-line-height);
    line-height: var(--tds-footer-line-height);
    margin: 0 auto;
    -ms-flex-pack: space-evenly;
        justify-content: space-evenly;
    max-width: 1060px; }
    .tds-o-footer ol li:last-of-type {
      -webkit-margin-after: var(--tds-list-item--margin-block);
      -webkit-margin-after: var(--tds-list-item--margin-block);
              margin-block-end: var(--tds-list-item--margin-block);
              margin-block-end: var(--tds-list-item--margin-block); }
    .tds-o-footer ol li:first-child {
      height: auto; }

@media (min-width: 600px) {
  .tds-site-footer .tds-list-item {
    padding: var(--tds-size--1x) var(--tds-size--2x) var(--tds-size--1x) 0;
    padding: var(--tds-size--1x) var(--tds-size--2x) var(--tds-size--1x) 0; } }

@media (max-width: 599px) {
  .tds-o-footer ol {
    -ms-flex-direction: column;
        flex-direction: column; } }

[id='page-teslaaccount-product-finalize'] .tds-o-footer ol li:first-child {
  -webkit-margin-after: var(--tds-list-item--margin-block);
  -webkit-margin-after: var(--tds-list-item--margin-block);
          margin-block-end: var(--tds-list-item--margin-block);
          margin-block-end: var(--tds-list-item--margin-block); }

@media (min-width: 0) and (max-width: 639px) {
  .tds--hide_on_mobile {
    display: none; } }

@media (min-width: 640px) {
  .tds--hide_on_desk {
    display: none; } }

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1mb290ZXItdmZ4LmNzcyIsInNvdXJjZXMiOlsibWFpbi1mb290ZXItdmZ4LnNjc3MiLCJwYXJ0aWNsZXMtb3ZlcnJpZGVzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL19zdXN5LnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2UvX3N1c3kuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9fc3Uuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9zdS9fdXRpbGl0aWVzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvc3UvX3NldHRpbmdzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvc3UvX3ZhbGlkYXRpb24uc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9zdS9fZ3JpZC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9fZmxvYXQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvX3NoYXJlZC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9fc3VwcG9ydC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zdXBwb3J0L19zdXBwb3J0LnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3N1cHBvcnQvX3ByZWZpeC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zdXBwb3J0L19iYWNrZ3JvdW5kLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3N1cHBvcnQvX2JveC1zaXppbmcuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc3VwcG9ydC9fcmVtLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3N1cHBvcnQvX2NsZWFyZml4LnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3NoYXJlZC9faW5zcGVjdC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zaGFyZWQvX291dHB1dC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zaGFyZWQvX2RpcmVjdGlvbi5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zaGFyZWQvX2JhY2tncm91bmQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc2hhcmVkL19jb250YWluZXIuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc2hhcmVkL19tYXJnaW5zLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3NoYXJlZC9fcGFkZGluZy5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9mbG9hdC9fY29udGFpbmVyLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L2Zsb2F0L19zcGFuLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L2Zsb2F0L19lbmQuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvZmxvYXQvX2lzb2xhdGUuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19zZXR0aW5ncy5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX3ZhbGlkYXRpb24uc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19ncmlkcy5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2JveC1zaXppbmcuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19jb250ZXh0LnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fYmFja2dyb3VuZC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2NvbnRhaW5lci5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX3NwYW4uc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19ndXR0ZXJzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9faXNvbGF0ZS5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2dhbGxlcnkuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19yb3dzLnNjc3MiLCIuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fbWFyZ2lucy5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX3BhZGRpbmcuc2NzcyIsIi4uL25vZGVfbW9kdWxlcy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19ibGVlZC5zY3NzIiwiLi4vbm9kZV9tb2R1bGVzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2JyZWFrcG9pbnQtcGx1Z2luLnNjc3MiXSwic291cmNlc0NvbnRlbnQiOlsiQGltcG9ydCAnLi9wYXJ0aWNsZXMtb3ZlcnJpZGVzJztcblxuLnRkcy1vLWZvb3RlciB7XG4gICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgIGZsZXgtZmxvdzogdmFyKC0tZm9vdGVyLWZsZXgtZmxvdyk7XG4gICAgb2wge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgICAgIGZsZXgtZmxvdzogdmFyKC0tZm9vdGVyLWZsZXgtZmxvdyk7XG4gICAgICAgIHRleHQtYWxpZ246IHZhcigtLWZvb3Rlci10ZXh0LWFsaWdubWVudCk7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdGRzLWZvb3Rlci1mb250LXNpemUpO1xuICAgICAgICBsaW5lLWhlaWdodDogdmFyKC0tdGRzLWZvb3Rlci1saW5lLWhlaWdodCk7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWV2ZW5seTtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDYwcHg7XG4gICAgICAgIGxpOmxhc3Qtb2YtdHlwZSB7XG4gICAgICAgICAgICBtYXJnaW4tYmxvY2stZW5kOiB2YXIoLS10ZHMtbGlzdC1pdGVtLS1tYXJnaW4tYmxvY2spO1xuICAgICAgICB9XG4gICAgICAgIGxpOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgfVxuICAgIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA2MDBweCkge1xuICAgIC50ZHMtc2l0ZS1mb290ZXIge1xuICAgICAgICAudGRzLWxpc3QtaXRlbSB7XG4gICAgICAgICAgICBwYWRkaW5nOiB2YXIoLS10ZHMtc2l6ZS0tMXgpIHZhcigtLXRkcy1zaXplLS0yeCkgdmFyKC0tdGRzLXNpemUtLTF4KSAwO1xuICAgICAgICB9XG4gICAgfVxufVxuQG1lZGlhIChtYXgtd2lkdGg6IDU5OXB4KSB7XG4gICAgLnRkcy1vLWZvb3RlciBvbCB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxufVxuW2lkPSdwYWdlLXRlc2xhYWNjb3VudC1wcm9kdWN0LWZpbmFsaXplJ10ge1xuICAgIC50ZHMtby1mb290ZXIge1xuICAgICAgICBvbCB7XG4gICAgICAgICAgICBsaTpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICAgICAgbWFyZ2luLWJsb2NrLWVuZDogdmFyKC0tdGRzLWxpc3QtaXRlbS0tbWFyZ2luLWJsb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLnRkcy0taGlkZV9vbl9tb2JpbGV7XG4gICAgQGluY2x1ZGUgc3VzeS1icmVha3BvaW50KCRtb2JpbGUtb25seSkge2Rpc3BsYXk6IG5vbmU7fVxufVxuXG4udGRzLS1oaWRlX29uX2Rlc2sge1xuICAgIEBpbmNsdWRlIHN1c3ktYnJlYWtwb2ludCgkc21hbGwtZGVza3RvcCkge2Rpc3BsYXk6IG5vbmU7fVxufVxuIiwiQGltcG9ydCcuLi9ub2RlX21vZHVsZXMvc3VzeS9zYXNzL3N1c3knO1xuXG4kaW5mby1iYXNlLWNvbG9yOiAgICByZ2JhKDAsIDE5MSwgMjQzLCAxKSAhZGVmYXVsdDsgIC8vICMwMGJmZjNcbiRzdWNjZXNzLWJhc2UtY29sb3I6IHJnYmEoMTIyLCAyMjEsIDAsIDEpICFkZWZhdWx0OyAgLy8gIzdhZGQwMFxuJHdhcm4tYmFzZS1jb2xvcjogICAgcmdiYSgyNTUsIDE4MywgMjAsIDEpICFkZWZhdWx0OyAvLyAjZmZiNzE0XG4kZXJyb3ItYmFzZS1jb2xvcjogICByZ2JhKDIyNCwgMCwgMCwgMSkgIWRlZmF1bHQ7ICAgIC8vICNlMDAwMDBcblxuJGFsZXJ0cy1jb2xvcnM6IChcbiAgaW5mby1iYXNlOiAgICAkaW5mby1iYXNlLWNvbG9yLFxuICBpbmZvLWRhcmtlcjogIGRhcmtlbigkaW5mby1iYXNlLWNvbG9yLCAxNy42JSksXG4gIGluZm8tbGlnaHRlcjogbGlnaHRlbigkaW5mby1iYXNlLWNvbG9yLCA0OS43NSUpLFxuICBpbmZvLWdsb3c6ICAgIHRyYW5zcGFyZW50aXplKCRpbmZvLWJhc2UtY29sb3IsIC44NSksXG5cbiAgc3VjY2Vzcy1iYXNlOiAgICAkc3VjY2Vzcy1iYXNlLWNvbG9yLFxuICBzdWNjZXNzLWRhcmtlcjogIGRhcmtlbigkc3VjY2Vzcy1iYXNlLWNvbG9yLCAxMy40JSksXG4gIHN1Y2Nlc3MtbGlnaHRlcjogbGlnaHRlbigkc3VjY2Vzcy1iYXNlLWNvbG9yLCA1NC4yJSksXG4gIHN1Y2Nlc3MtZ2xvdzogICAgdHJhbnNwYXJlbnRpemUoJHN1Y2Nlc3MtYmFzZS1jb2xvciwgLjg1KSxcblxuICB3YXJuLWJhc2U6ICAgICR3YXJuLWJhc2UtY29sb3IsXG4gIHdhcm4tZGFya2VyOiAgZGFya2VuKCR3YXJuLWJhc2UtY29sb3IsIDIzLjklKSxcbiAgd2Fybi1saWdodGVyOiBsaWdodGVuKCR3YXJuLWJhc2UtY29sb3IsIDQzLjUlKSxcbiAgd2Fybi1nbG93OiAgICB0cmFuc3BhcmVudGl6ZSgkd2Fybi1iYXNlLWNvbG9yLCAuODUpLFxuXG4gIGVycm9yLWJhc2U6ICAgICRlcnJvci1iYXNlLWNvbG9yLFxuICBlcnJvci1kYXJrZXI6ICBkYXJrZW4oJGVycm9yLWJhc2UtY29sb3IsIDE0JSksXG4gIGVycm9yLWxpZ2h0ZXI6IGxpZ2h0ZW4oJGVycm9yLWJhc2UtY29sb3IsIDUzLjUlKSxcbiAgZXJyb3ItZ2xvdzogICAgdHJhbnNwYXJlbnRpemUoJGVycm9yLWJhc2UtY29sb3IsIC44NSlcbik7XG4vL3ZhbHVlcyByZXBsYWNlZCB3aXRoIFREUyB2YXJpYWJsZXMgZXhjZXB0IHRob3NlIHRoYXQgYXJlIHVzZWQgaW4gc2NzcyBmdW5jdGlvbnMgdXBzdHJlYW0sIHdoaWNoIHByZXZlbnRzIGNvbXBpbGF0aW9uXG4kdHNsYS1zaXplLS14c21hbGw6ICB2YXIoLS10ZHMtZm9udC1zaXplLS0xMCwgMTBweCk7XG4kdHNsYS1zaXplLS1zbWFsbDogICAyMHB4O1xuJHRzbGEtc2l6ZS0tbWVkaXVtOiAgdmFyKC0tdGRzLWZvbnQtc2l6ZS0tNzAsIDI4cHgpO1xuJHRzbGEtc2l6ZS0tbGFyZ2U6ICAgdmFyKC0tdGRzLWZvbnQtc2l6ZS0tODAsIDQwcHgpO1xuXG4kYmxhY2s6ICMwMDA7XG4kZ3JleS0xOiB2YXIoLS10ZHMtY29sb3ItLWdyZXkxMCk7XG4kZ3JleS0yOiB2YXIoLS10ZHMtY29sb3ItLWdyZXkxNSk7XG4kZ3JleS0zOiAjMzkzYzQxO1xuJGdyZXktNDogdmFyKC0tdGRzLWNvbG9yLS1ncmV5MjUpO1xuJGdyZXktNjogdmFyKC0tdGRzLWNvbG9yLS1ncmV5MzApO1xuJGdyZXktODogdmFyKC0tdGRzLWNvbG9yLS1ncmV5MzUpO1xuJGdyZXktOTogdmFyKC0tdGRzLWNvbG9yLS1ncmV5NDApO1xuXG4kZ3JleS1hOiB2YXIoLS10ZHMtY29sb3ItLWdyZXk1MCk7XG4kZ3JleS1iOiAjZWVlO1xuJGdyZXktYzogI2Y0ZjRmNDtcbiRncmV5LWQ6IHZhcigtLXRkcy1jb2xvci0tZ3JleTcwKTtcbiRncmV5LWU6IHZhcigtLXRkcy1jb2xvci0tZ3JleTcwKTtcbiR3aGl0ZTogICNmZmY7XG5cblxuJGdyZXktYmFja2dyb3VuZC1jb2xvcjogICAgICAgICAgICAgICAgICNhMmEzYTU7XG4kZ3JleS1iYWNrZ3JvdW5kLWNvbG9yLWxpZ2h0OiAgICAgICAgICAgdmFyKC0tdGRzLWNvbG9yLS1ncmV5NTApO1xuJGdyZXktYmFja2dyb3VuZC1jb2xvci1saWdodGVzdDogICAgICAgIHZhcigtLXRkcy1jb2xvci0tZ3JleTYwKTtcbiRncmV5LWJhY2tncm91bmQtY29sb3ItZXZlbi1saWdodGVyZXN0OiB2YXIoLS10ZHMtY29sb3ItLWdyZXk3MCk7XG4kbW9kYWwtYmFja2dyb3VuZC1jb2xvcjogICAgICAgICAgICAgICAgIzIyMjtcbiRkZWZhdWx0LXBhZ2UtYmctY29sb3I6ICAgICAgICAgICAgICAgICAjZmFmYWZhO1xuXG4kdWktdGV4dDogICAgICAgICAgICAgdmFyKC0tdGRzLWNvbG9yLS1ncmV5MTApO1xuJGJvcmRlci1jb250ZW50OiAgICAgIHZhcigtLXRkcy1jb2xvci0tZ3JleTUwKTtcbiR0ZXNsYS1wcmltYXJ5OiAgICAgICAjYjc0MTM0O1xuJHRlc2xhLWFjdGl2ZTogICAgICAgIHZhcigtLXRkcy1jb2xvci0tcmVkMjApO1xuJHRlc2xhLXRyYW5zYWN0aW9uYWw6IHZhcigtLXRkcy1jb2xvci0tYmx1ZTMwKTtcblxuJGZvcm0tbGFiZWwtY29sb3I6ICAgICRncmV5LTg7XG4kYm9yZGVyLWZvb3RlcjogICAgICAgJGdyZXktNDtcblxuJG1vYmlsZS1vbmx5OiAwIDYzOXB4ICFkZWZhdWx0O1xuXG4vLyBmb3IgdGFyZ2V0aW5nIGJldHdlZW4gNjQwLTk2MCBweFxuJHNtYWxsLWRlc2t0b3Atb25seTogNjQwcHggOTYwcHggIWRlZmF1bHQ7XG5cbi8vIGZvciB0YXJnZXRpbmcgZ3JlYXRlciB0aGFuIDY0MCBweFxuJHNtYWxsLWRlc2t0b3A6IDY0MHB4ICFkZWZhdWx0O1xuXG4vLyBmb3IgdGFyZ2V0aW5nIGdyZWF0ZXIgdGhhbiA5NjAgcHhcbiRsYXJnZS1kZXNrdG9wOiA5NjBweCAhZGVmYXVsdDtcblxuLy8gLS0gQWRkaXRpb25hbCBNZWRpYSBRdWVyaWVzIHRvIGluY2x1ZGUgbW9yZSBkZXZpY2VzXG4vLyBFeGFtcGxlIG9mIGluY2x1ZGVkIGRldmljZXM6IEhUQyBPbmUgKDYzOXB4KSwgR2FsYXh5IFMzLCBTNCwgUzUgKDYzOXB4KSwgaVBob25lIDUsXG4vLyA1UyAoNTY4cHgpLCBpUGhvbmUgNCAoNDgwcHgpaVBob25lIDYgKDY2N3B4KSwgaVBob25lIDYrICg3MzZweClcbiRtb2JpbGUtcGhvbmUtb25seTogMCA3MzZweCAhZGVmYXVsdDtcblxuLy8gZm9yIHRhcmdldGluZyBjb21tb24gdGFibGV0LXNpemVkIGRldmljZXNcbi8vIEV4YW1wbGUgb2YgaW5jbHVkZWQgZGV2aWNlczogaVBhZCAoNzY4cHggLSAxMDI0cHgpLCBHYWxheHkgKDgwMHB4IC0gMTI4MHB4KSxcbi8vIE5leHVzICg2MDFweCAtIDkwNnB4KSwgS2luZGxlICg4MDBweCAtIDEyODBweClcbiR0YWJsZXQtb25seTogNjAxcHggMTI4MHB4ICFkZWZhdWx0O1xuXG4vLyBmb3IgdGFyZ2V0aW5nIGRldmljZXMgMTIwMHB4KyB3aWRlXG4kbGFyZ2UtZGV2aWNlczogMTIwMHB4ICFkZWZhdWx0O1xuXG4vLyBkZWZhdWx0IHZhbHVlIGZvciBtaXhpbjogdHJhbnNpdGlvbi1kdXJhdGlvblxuJGRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbjogMXM7XG5cbkBtaXhpbiBuby1zZWxlY3Qge1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuQG1peGluIHNpbmdsZS10cmFuc2l0aW9uKCR2YXJpYWJsZXMpIHtcbiAgdHJhbnNpdGlvbjogI3skdmFyaWFibGVzfTtcblxuICAvLyBzZW5kIHRoZSBhbmltYXRpb24gdG8gdGhlIEdQVSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIGFuZFxuICAvLyBnZXQgdGhhdCBzaWxreSBzbW9vdGggNjBmcHMgOmhlYXJ0OlxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7XG59XG5cbkBtaXhpbiBib3JkZXItdG9wLXJhZGl1cygkcmFkaWkpIHtcbiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHJhZGlpO1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHJhZGlpO1xufVxuXG5AbWl4aW4gYmFzZS1tb2JpbGUtcmVzZXQge1xuICB3aWR0aDogMTAwJTtcbiAgY2xlYXI6IGJvdGg7XG4gIGZsb2F0OiBub25lO1xuICBkaXNwbGF5OiBibG9jaztcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICBtYXJnaW4tbGVmdDogYXV0bztcbn1cblxuQG1peGluIGNsZWFyZml4IHtcbiAgJjo6YmVmb3JlLFxuICAmOjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgZGlzcGxheTogdGFibGU7XG4gIH1cblxuICAmOjphZnRlciB7XG4gICAgY2xlYXI6IGJvdGg7XG4gIH1cbn1cblxuQG1peGluIGxpZ2h0IHtcbiAgZm9udC13ZWlnaHQ6IDIwMDtcbn1cblxuQG1peGluIG1lZGl1bSB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbkBtaXhpbiBlbmdsaXNoLWxvY2FsZXMge1xuICAuI3skbG9jYWxlLWF1c3RyYWxpYX0gJixcbiAgLiN7JGxvY2FsZS1ob25na29uZ30gJixcbiAgLiN7JGxvY2FsZS1tYWNhdX0gJixcbiAgLiN7JGxvY2FsZS1ncmVhdF9icml0YWlufSAmLFxuICAuI3skbG9jYWxlLW90aGVyX2V1cm9wZX0gJixcbiAgLiN7JGxvY2FsZS1jYW5hZGFfZW5nbGlzaH0gJixcbiAgLiN7JGxvY2FsZV91c30gJiB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuQG1peGluIGFwYWMtbG9jYWxlcyB7XG4gIC4jeyRsb2NhbGUtYXVzdHJhbGlhfSAmLFxuICAuI3skbG9jYWxlLWphcGFufSAmLFxuICAuI3skbG9jYWxlLWNoaW5hfSAmLFxuICAuI3skbG9jYWxlLWhvbmdrb25nfSAmLFxuICAuI3skbG9jYWxlLWhvbmdrb25nX2NoaW5lc2V9ICYsXG4gIC4jeyRsb2NhbGUtbWFjYXV9ICYsXG4gIC4jeyRsb2NhbGUtbWFjYXVfY2hpbmVzZX0gJixcbiAgLiN7JGxvY2FsZS1qb3JkYW5fZW5nbGlzaH0gJiB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuQG1peGluIG5vbmVuZ2xpc2gtbG9jYWxlcyB7XG4gIC4jeyRsb2NhbGUtYmVsZ2l1bV9mcmVuY2h9ICYsXG4gIC4jeyRsb2NhbGUtYmVsZ2l1bV9kdXRjaH0gJixcbiAgLiN7JGxvY2FsZS1kZW5tYXJrfSAmLFxuICAuI3skbG9jYWxlLWdlcm1hbnl9ICYsXG4gIC4jeyRsb2NhbGUtZnJhbmNlfSAmLFxuICAuI3skbG9jYWxlLWl0YWx5fSAmLFxuICAuI3skbG9jYWxlLW5ldGhlcmxhbmRzfSAmLFxuICAuI3skbG9jYWxlLW5vcndheX0gJixcbiAgLiN7JGxvY2FsZS1hdXN0cmlhfSAmLFxuICAuI3skbG9jYWxlLXN3aXR6ZXJsYW5kX2dlcm1hbn0gJixcbiAgLiN7JGxvY2FsZS1zd2l0emVybGFuZF9mcmVuY2h9ICYsXG4gIC4jeyRsb2NhbGUtc3dpdHplcmxhbmRfaXRhbGlhbn0gJixcbiAgLiN7JGxvY2FsZS1zd2VkZW59ICYsXG4gIC4jeyRsb2NhbGUtY2FuYWRhX2ZyZW5jaH0gJixcbiAgLiN7JGxvY2FsZS1jaGluYX0gJixcbiAgLiN7JGxvY2FsZS1qYXBhbn0gJixcbiAgLiN7JGxvY2FsZS1qb3JkYW5fYXJhYmljfSAmIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5AbWl4aW4gcm91bmRlZC1lbGVtZW50IHtcbiAgYm9yZGVyLXJhZGl1czogMTAwcHg7XG59XG5cbkBtaXhpbiB1bHRyYWxpZ2h0IHtcbiAgZm9udC13ZWlnaHQ6IDEwMDtcbn1cblxuQG1peGluIGJvb2sge1xuICBmb250LXdlaWdodDogNDAwO1xufVxuXG5AbWl4aW4gbG9jYWxlLXRleHQtYWxpZ24oJHZhbHVlKSB7XG4gIHRleHQtYWxpZ246ICR2YWx1ZTtcblxuICAuI3skbG9jYWxlLWhvbmdrb25nX2NoaW5lc2V9ICYsXG4gIC4jeyRsb2NhbGUtamFwYW59ICYsXG4gIC4jeyRsb2NhbGUtY2hpbmF9ICYsXG4gIC4jeyRsb2NhbGUtbWFjYXVfY2hpbmVzZX0gJiB7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgfVxufVxuXG5AbWl4aW4gZmFkZS1pbigkdHJhbnNpdGlvbi1wcm9wZXJ0eTogb3BhY2l0eSwgJHRyYW5zaXRpb24tZHVyYXRpb246IC41cywgJHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBsaW5lYXIpIHtcbiAgdHJhbnNpdGlvbjogJHRyYW5zaXRpb24tcHJvcGVydHkgJHRyYW5zaXRpb24tZHVyYXRpb24gJHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uO1xuICBvcGFjaXR5OiAxO1xufVxuXG5AbWl4aW4gZmFkZS1vdXQoJHRyYW5zaXRpb24tcHJvcGVydHk6IG9wYWNpdHksICR0cmFuc2l0aW9uLWR1cmF0aW9uOiAuNXMsICR0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogbGluZWFyKSB7XG4gIHRyYW5zaXRpb246ICR0cmFuc2l0aW9uLXByb3BlcnR5ICR0cmFuc2l0aW9uLWR1cmF0aW9uICR0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjtcbiAgb3BhY2l0eTogMDtcbn1cblxuQG1peGluIHRyYW5zZm9ybSgkc3RyaW5nKSB7XG4gIHRyYW5zZm9ybTogI3skc3RyaW5nfTtcbn1cblxuQG1peGluIHRyYW5zaXRpb24tZHVyYXRpb24oJHN0cmluZzogJGRlZmF1bHQtdHJhbnNpdGlvbi1kdXJhdGlvbikge1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiAkc3RyaW5nO1xufVxuXG5AbWl4aW4gb3BhY2l0eSgkdHJhbnMpIHtcbiAgb3BhY2l0eTogJHRyYW5zO1xufVxuXG5AbWl4aW4gbGlzdC1saW5rIHtcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgZm9udC1zaXplOiAxNXB4O1xuICBsaW5lLWhlaWdodDogMjFweDtcbiAgY2xlYXI6IGJvdGg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgY29sb3I6IHZhcigtLXRkcy1jb2xvci0tYmx1ZTMwKTtcblxuICBhIHtcbiAgICBjb2xvcjogdmFyKC0tdGRzLWNvbG9yLS1ibHVlMzApO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogdmFyKC0tdGRzLWNvbG9yLS1ibHVlMjApO1xuICAgIH1cbiAgfVxuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS10ZHMtY29sb3ItLWJsdWUxMCk7XG4gIH1cbn1cblxuQG1peGluIHdpdGgtcmV0aW5hKCRub24tcmV0aW5hLWltYWdlLCAkcmV0aW5hLWltYWdlLCAkY2FjaGVidXN0ZXI6ICcnKSB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnI3skbm9uLXJldGluYS1pbWFnZX0/I3skY2FjaGVidXN0ZXJ9Jyk7XG4gIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCBvbmx5IHNjcmVlbiBhbmQgKG1pbi1yZXNvbHV0aW9uOiAxOTJkcGkpLCBvbmx5IHNjcmVlbiBhbmQgKG1pbi1yZXNvbHV0aW9uOiAyZHBweCkge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnI3skcmV0aW5hLWltYWdlfT8jeyRjYWNoZWJ1c3Rlcn0nKTtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5AbWl4aW4gaW5saW5lLWJsdWUtbGluayB7XG4gIGNvbG9yOiB2YXIoLS10ZHMtY29sb3ItLWJsdWUzMCk7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDAgdHJhbnNwYXJlbnQ7XG5cbiAgJjpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLXRkcy1jb2xvci0tYmx1ZTIwKTtcbiAgICBib3gtc2hhZG93OiAwIDAgMCAwIHRyYW5zcGFyZW50O1xuICB9XG59XG5cbkBtaXhpbiBpbmxpbmUtZGFyay1saW5rIHtcbiAgY29sb3I6IHZhcigtLXRkcy1jb2xvci0tZ3JleTIwKTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBib3gtc2hhZG93OiAwIHZhcigtLXRkcy1ib3JkZXItd2lkdGgtLXNtYWxsKSAwIDAgY3VycmVudENvbG9yO1xuXG4gICY6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS10ZHMtY29sb3ItLWJsYWNrKTtcbiAgICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDI1MG1zIGN1YmljLWJlemllciguNSwgLjI1LCAuMjUsIC43NSksIGNvbG9yIDI1MG1zIGN1YmljLWJlemllciguNSwgLjI1LCAuMjUsIC43NSk7XG4gICAgYm94LXNoYWRvdzogMCB2YXIoLS10ZHMtYm9yZGVyLXdpZHRoLS1tZWRpdW0pIDAgMCBjdXJyZW50Q29sb3I7XG4gIH1cbn1cblxuQG1peGluIGlubGluZS1zZWNvbmRhcnktbGluayB7XG4gIGNvbG9yOiB2YXIoLS10ZHMtY29sb3ItLWdyZXkzMCk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgYm94LXNoYWRvdzogMCAwIDAgMCB0cmFuc3BhcmVudDtcblxuICAmOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tdGRzLWNvbG9yLS1ncmV5MjApO1xuICAgIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMjUwbXMgY3ViaWMtYmV6aWVyKC41LCAuMjUsIC4yNSwgLjc1KSwgY29sb3IgMjUwbXMgY3ViaWMtYmV6aWVyKC41LCAuMjUsIC4yNSwgLjc1KTtcbiAgICBib3gtc2hhZG93OiAwIHZhcigtLXRkcy1ib3JkZXItd2lkdGgtLW1lZGl1bSkgMCAwIGN1cnJlbnRDb2xvcjtcbiAgfVxufVxuXG5AbWl4aW4gZm9ybS1maWVsZHMge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS10ZHMtY29sb3ItLWdyZXk3MCk7XG59XG5cbi8vIFN1cGVyIHJlZ2lvbnNcbiRyZWdpb24tbmE6ICAgICAgICAgICAgICAgICAgc3VwZXJyZWdpb24tbm9ydGgtYW1lcmljYTtcbiRyZWdpb24tZXU6ICAgICAgICAgICAgICAgICAgc3VwZXJyZWdpb24tZXVyb3BlO1xuJHJlZ2lvbi1hcGFjOiAgICAgICAgICAgICAgICBzdXBlcnJlZ2lvbi1hcGFjO1xuJHJlZ2lvbi1tZTogICAgICAgICAgICAgICAgICBzdXBlcnJlZ2lvbi1taWRkbGUtZWFzdDtcblxuLy8gTm9ydGggQW1lcmljYVxuJGxvY2FsZS1jYW5hZGFfZW5nbGlzaDogICAgICBpMThuLWVuX0NBOyAvLyBlbl9DQVxuJGxvY2FsZS1jYW5hZGFfZnJlbmNoOiAgICAgICBpMThuLWZyX0NBOyAvLyBmcl9DQVxuJGxvY2FsZS1tZXhpY29fc3BhbmlzaDogICAgICBpMThuLWVzX01YOyAvLyBlc19NWFxuJGxvY2FsZV91czogICAgICAgICAgICAgICAgICBpMThuLWVuOyAgICAvLyBVUyBUT0RPOiBkZXByZWNhdGUgdGhpcyBpbiBmYXZvciBvZiB0aGUgZnVsbHkgcXVhbGlmaWVkIGxvY2FsZSArIGxhbmd1YWdlXG4kbG9jYWxlLXVzX2VuZ2xpc2g6ICAgICAgICAgIGkxOG4tZW5fVVM7IC8vIFVTXG5cbi8vIEV1cm9wZVxuJGxvY2FsZS1iZWxnaXVtX2ZyZW5jaDogICAgICBpMThuLWZyX0JFOyAvLyBmcl9CRVxuJGxvY2FsZS1iZWxnaXVtX2R1dGNoOiAgICAgICBpMThuLW5sX0JFOyAvLyBubF9CRVxuJGxvY2FsZS1kZW5tYXJrOiAgICAgICAgICAgICBpMThuLWRhOyAgICAvLyBkYV9ESyBUT0RPOiBkZXByZWNhdGUgdGhpcyBpbiBmYXZvciBvZiB0aGUgZnVsbHkgcXVhbGlmaWVkIGxvY2FsZSArIGxhbmd1YWdlXG4kbG9jYWxlLWRlbm1hcmtfZGFuaXNoOiAgICAgIGkxOG4tZGFfREs7IC8vIGRhX0RLXG4kbG9jYWxlLWdlcm1hbnk6ICAgICAgICAgICAgIGkxOG4tZGU7ICAgIC8vIGRlX0RFIFRPRE86IGRlcHJlY2F0ZSB0aGlzIGluIGZhdm9yIG9mIHRoZSBmdWxseSBxdWFsaWZpZWQgbG9jYWxlICsgbGFuZ3VhZ2VcbiRsb2NhbGUtZ2VybWFueV9nZXJtYW46ICAgICAgaTE4bi1kZV9ERTsgLy8gZGVfREVcbiRsb2NhbGUtZnJhbmNlOiAgICAgICAgICAgICAgaTE4bi1mcjsgICAgLy8gZnJfRlIgVE9ETzogZGVwcmVjYXRlIHRoaXMgaW4gZmF2b3Igb2YgdGhlIGZ1bGx5IHF1YWxpZmllZCBsb2NhbGUgKyBsYW5ndWFnZVxuJGxvY2FsZS1mcmFuY2VfZnJlbmNoOiAgICAgICBpMThuLWZyX0ZSOyAvLyBmcl9GUlxuJGxvY2FsZS1ncmVhdF9icml0YWluOiAgICAgICBpMThuLWVuX0dCOyAvLyBlbl9HQlxuJGxvY2FsZS1pdGFseTogICAgICAgICAgICAgICBpMThuLWl0OyAgICAvLyBpdF9JVCBUT0RPOiBkZXByZWNhdGUgdGhpcyBpbiBmYXZvciBvZiB0aGUgZnVsbHkgcXVhbGlmaWVkIGxvY2FsZSArIGxhbmd1YWdlXG4kbG9jYWxlLWl0YWx5X2l0YWxpYW46ICAgICAgIGkxOG4taXRfSVQ7IC8vIGl0X0lUXG4kbG9jYWxlLWlyZWxhbmQ6ICAgICAgICAgICAgIGkxOG4tZW5fSUU7IC8vIGVuX0lFXG4kbG9jYWxlLW5ldGhlcmxhbmRzOiAgICAgICAgIGkxOG4tbmw7ICAgIC8vIG5sX05MIFRPRE86IGRlcHJlY2F0ZSB0aGlzIGluIGZhdm9yIG9mIHRoZSBmdWxseSBxdWFsaWZpZWQgbG9jYWxlICsgbGFuZ3VhZ2VcbiRsb2NhbGUtbmV0aGVybGFuZHNfZHV0Y2g6ICAgaTE4bi1ubF9OTDsgLy8gbmxfTkxcbiRsb2NhbGUtbm9yd2F5OiAgICAgICAgICAgICAgaTE4bi1ubzsgICAgLy8gbm9fTk8gVE9ETzogZGVwcmVjYXRlIHRoaXMgaW4gZmF2b3Igb2YgdGhlIGZ1bGx5IHF1YWxpZmllZCBsb2NhbGUgKyBsYW5ndWFnZVxuJGxvY2FsZS1ub3J3YXlfbm9yd2VnaWFuOiAgICBpMThuLW5vX05POyAvLyBub19OT1xuJGxvY2FsZS1hdXN0cmlhOiAgICAgICAgICAgICBpMThuLWRlX0FUOyAvLyBkZV9BVFxuJGxvY2FsZS1zd2l0emVybGFuZF9nZXJtYW46ICBpMThuLWRlX0NIOyAvLyBkZV9DSFxuJGxvY2FsZS1zd2l0emVybGFuZF9mcmVuY2g6ICBpMThuLWZyX0NIOyAvLyBmcl9DSFxuJGxvY2FsZS1zd2l0emVybGFuZF9pdGFsaWFuOiBpMThuLWl0X0NIOyAvLyBpdF9DSFxuJGxvY2FsZS1zd2VkZW46ICAgICAgICAgICAgICBpMThuLXN2X1NFOyAvLyBzdl9TRVxuJGxvY2FsZS1vdGhlcl9ldXJvcGU6ICAgICAgICBpMThuLWVuX0VVOyAvLyBlbl9FVVxuJGxvY2FsZS1maW5sYW5kOiAgICAgICAgICAgICBpMThuLWZpX0ZJOyAvLyBmaV9GSVxuJGxvY2FsZS1sdXhlbWJvdXJnX2ZyZW5jaDogICBpMThuLWZyX0xVOyAvLyBmcl9MVVxuJGxvY2FsZS1sdXhlbWJvdXJnX2dlcm1hbjogICBpMThuLWRlX0xVOyAvLyBkZV9MVVxuJGxvY2FsZS1wb3J0dWdhbDogICAgICAgICAgICBpMThuLXB0X1BUOyAvLyBwdF9QVFxuJGxvY2FsZS1zcGFpbjogICAgICAgICAgICAgICBpMThuLWVzX0VTOyAvLyBlc19FU1xuXG4vLyBBc2lhLVBhY2lmaWNcbiRsb2NhbGUtYXVzdHJhbGlhOiAgICAgICAgICAgaTE4bi1lbl9BVTsgLy8gZW5fQVVcbiRsb2NhbGUtY2hpbmE6ICAgICAgICAgICAgICAgaTE4bi16aF9DTjsgLy8gemhfQ05cbiRsb2NhbGUtaG9uZ2tvbmc6ICAgICAgICAgICAgaTE4bi1lbl9ISzsgLy8gZW5fSEtcbiRsb2NhbGUtaG9uZ2tvbmdfY2hpbmVzZTogICAgaTE4bi16aF9ISzsgLy8gemhfSEtcbiRsb2NhbGUtbWFjYXU6ICAgICAgICAgICAgICAgaTE4bi1lbl9NTzsgLy8gZW5fTU9cbiRsb2NhbGUtbWFjYXVfY2hpbmVzZTogICAgICAgaTE4bi16aF9NTzsgLy8gemhfTU9cbiRsb2NhbGUtamFwYW46ICAgICAgICAgICAgICAgaTE4bi1qYV9KUDsgLy8gSmFwYW5cbiRsb2NhbGUtbmV3X3plYWxhbmQ6ICAgICAgICAgaTE4bi1lbl9OWjsgLy8gZW5fTlpcbiRsb2NhbGUtdGFpd2FuOiAgICAgICAgICAgICAgaTE4bi16aF9UVzsgLy8gemhfVFdcbiRsb2NhbGUtc291dGhfa29yZWE6ICAgICAgICAgaTE4bi1rb19LUjsgLy8ga29fS1JcblxuLy8gTWlkZGxlLUVhc3RcbiRsb2NhbGUtam9yZGFuX2VuZ2xpc2g6ICAgICAgIGkxOG4tZW5fSk87IC8vIGVuX0pPXG4kbG9jYWxlLWpvcmRhbl9hcmFiaWM6ICAgICAgICBpMThuLWFyX0pPOyAvLyBhcl9KT1xuJGxvY2FsZS11YWVfZW5nbGlzaDogICAgICAgICAgaTE4bi1lbl9BRTsgLy8gZW5fQUVcbiRsb2NhbGUtdWFlX2FyYWJpYzogICAgICAgICAgIGkxOG4tYXJfQUU7IC8vIGFyX0FFXG4kbG9jYWxlLXNhdWRpLWFyYWJpYV9lbmdsaXNoOiBpMThuLWVuX1NBOyAvLyBlbl9TQVxuJGxvY2FsZS1zYXVkaS1hcmFiaWFfYXJhYmljOiAgaTE4bi1hcl9TQTsgLy8gYXJfU0FcblxuLy8gQWZyaWNhXG4kbG9jYWxlLXNvdXRoX2FmcmljYTogICAgICAgIGkxOG4tZW5fWkE7IC8vIG5vdCBpbiBEcnVwYWwgbGFuZ3VhZ2UgbGlzdCBkZWZhdWx0XG5cbiRndXR0ZXI6ICR0c2xhLXNpemUtLXNtYWxsO1xuIiwiLy8gU3VzeVxuLy8gPT09PVxuXG5AaW1wb3J0ICdzdXN5L2xhbmd1YWdlL3N1c3knO1xuIiwiLy8gU3VzeSBOZXh0IFN5bnRheFxuLy8gPT09PT09PT09PT09PT09PVxuXG4kc3VzeS12ZXJzaW9uOiAyLjE7XG5cbkBpbXBvcnQgXCIuLi9zdVwiO1xuQGltcG9ydCBcIi4uL291dHB1dC9mbG9hdFwiO1xuXG5AaW1wb3J0IFwic3VzeS9zZXR0aW5nc1wiO1xuQGltcG9ydCBcInN1c3kvdmFsaWRhdGlvblwiO1xuQGltcG9ydCBcInN1c3kvZ3JpZHNcIjtcbkBpbXBvcnQgXCJzdXN5L2JveC1zaXppbmdcIjtcbkBpbXBvcnQgXCJzdXN5L2NvbnRleHRcIjtcbkBpbXBvcnQgXCJzdXN5L2JhY2tncm91bmRcIjtcbkBpbXBvcnQgXCJzdXN5L2NvbnRhaW5lclwiO1xuQGltcG9ydCBcInN1c3kvc3BhblwiO1xuQGltcG9ydCBcInN1c3kvZ3V0dGVyc1wiO1xuQGltcG9ydCBcInN1c3kvaXNvbGF0ZVwiO1xuQGltcG9ydCBcInN1c3kvZ2FsbGVyeVwiO1xuQGltcG9ydCBcInN1c3kvcm93c1wiO1xuQGltcG9ydCBcInN1c3kvbWFyZ2luc1wiO1xuQGltcG9ydCBcInN1c3kvcGFkZGluZ1wiO1xuQGltcG9ydCBcInN1c3kvYmxlZWRcIjtcbkBpbXBvcnQgXCJzdXN5L2JyZWFrcG9pbnQtcGx1Z2luXCI7XG4iLCIvLyBTdVxuLy8gPT1cblxuQGltcG9ydCBcInN1L3V0aWxpdGllc1wiO1xuQGltcG9ydCBcInN1L3NldHRpbmdzXCI7XG5AaW1wb3J0IFwic3UvdmFsaWRhdGlvblwiO1xuQGltcG9ydCBcInN1L2dyaWRcIjtcbiIsIi8vIE1hcCBGdW5jdGlvbnNcbi8vID09PT09PT09PT09PT1cblxuXG4vLyBUcnVuY2F0ZSBMaXN0XG4vLyAtLS0tLS0tLS0tLS0tXG4vLyAtIFJldHVybiBhIGxpc3QsIHRydW5jYXRlZCB0byBhIGdpdmVuIGxlbmd0aFxuQGZ1bmN0aW9uIF9zdXN5LXRydW5jYXRlLWxpc3QoXG4gICRsaXN0LFxuICAkbGVuZ3RoXG4pIHtcbiAgJF9yZXR1cm46ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCRsaXN0KSB7XG4gICAgJF9yZXR1cm46IGlmKCRpIDw9ICRsZW5ndGgsIGFwcGVuZCgkX3JldHVybiwgbnRoKCRsaXN0LCAkaSkpLCAkX3JldHVybik7XG4gIH1cblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuXG5cbi8vIERlZXAgR2V0XG4vLyAtLS0tLS0tLVxuLy8gLSBSZXR1cm4gYSB2YWx1ZSBkZWVwIGluIG5lc3RlZCBtYXBzXG5AZnVuY3Rpb24gX3N1c3ktZGVlcC1nZXQoXG4gICRtYXAsXG4gICRrZXlzLi4uXG4pIHtcbiAgJF9yZXR1cm46ICRtYXA7XG5cbiAgQGVhY2ggJGtleSBpbiAka2V5cyB7XG4gICAgQGlmIHR5cGUtb2YoJF9yZXR1cm4pID09IG1hcCB7XG4gICAgICAkX3JldHVybjogbWFwLWdldCgkX3JldHVybiwgJGtleSk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cblxuXG4vLyBEZWVwIFNldFxuLy8gLS0tLS0tLS1cbi8vIC0gU2V0IGEgdmFsdWUgZGVlcCBpbiBuZXN0ZWQgbWFwc1xuQGZ1bmN0aW9uIF9zdXN5LWRlZXAtc2V0KFxuICAkbWFwLFxuICAka2V5cy12YWx1ZS4uLlxuKSB7XG4gICRfdmFsdWU6IG50aCgka2V5cy12YWx1ZSwgLTEpO1xuICAkX2tleXM6IF9zdXN5LXRydW5jYXRlLWxpc3QoJGtleXMtdmFsdWUsIGxlbmd0aCgka2V5cy12YWx1ZSkgLSAxKTtcbiAgJF9sZW5ndGg6IGxlbmd0aCgkX2tleXMpO1xuICAkX3JldHVybjogKCk7XG5cbiAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCAkX2xlbmd0aCB7XG4gICAgJF9uOiAwIC0gJGk7XG4gICAgJF9sZXZlbDogX3N1c3ktdHJ1bmNhdGUtbGlzdCgkX2tleXMsICRfbGVuZ3RoICsgJF9uKTtcbiAgICAkX2xldmVsOiBfc3VzeS1kZWVwLWdldCgkbWFwLCAkX2xldmVsLi4uKTtcbiAgICAkX21lcmdlOiBudGgoJF9rZXlzLCAkX24pO1xuICAgICRfbWVyZ2U6ICgkX21lcmdlOiAkX3ZhbHVlKTtcbiAgICAkX3JldHVybjogaWYoJF9sZXZlbCwgbWFwLW1lcmdlKCRfbGV2ZWwsICRfbWVyZ2UpLCAkX21lcmdlKTtcbiAgICAkX3ZhbHVlOiAkX3JldHVybjtcbiAgfVxuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG5cblxuLy8gRGVlcCBNZXJnZVxuLy8gLS0tLS0tLS0tLVxuLy8gUmV0dXJuIDIgb2JqZWN0cyBvZiBhbnkgZGVwdGgsIG1lcmdlZFxuQGZ1bmN0aW9uIF9zdXN5LWRlZXAtbWVyZ2UoXG4gICRtYXAxLFxuICAkbWFwMlxuKSB7XG5cbiAgQGlmIHR5cGUtb2YoJG1hcDEpICE9IG1hcCBvciB0eXBlLW9mKCRtYXAyKSAhPSBtYXAge1xuICAgICRtYXAxOiAkbWFwMjtcbiAgfSBAZWxzZSB7XG4gICAgQGVhY2ggJGtleSwgJHZhbHVlIGluICRtYXAyIHtcbiAgICAgICRfbmV3OiAoJGtleTogX3N1c3lfZGVlcC1tZXJnZShtYXAtZ2V0KCRtYXAxLCAka2V5KSwgJHZhbHVlKSk7XG4gICAgICAkbWFwMTogbWFwLW1lcmdlKCRtYXAxLCAkX25ldyk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkbWFwMTtcbn1cblxuXG4vLyBEZWVwIEhhcy1LZXlcbi8vIC0tLS0tLS0tLS0tLVxuLy8gLSBSZXR1cm4gdHJ1ZSBpZiBhIGRlZXAga2V5IGV4aXN0c1xuQGZ1bmN0aW9uIF9zdXN5LWRlZXAtaGFzLWtleShcbiAgJG1hcCxcbiAgJGtleXMuLi5cbikge1xuICAkX3JldHVybjogbnVsbDtcbiAgJF9zdG9wOiBmYWxzZTtcblxuICBAZWFjaCAka2V5IGluICRrZXlzIHtcbiAgICBAaWYgbm90KCRfc3RvcCkge1xuICAgICAgJF9yZXR1cm46IG1hcC1oYXMta2V5KCRtYXAsICRrZXkpO1xuICAgIH1cblxuICAgIEBpZiAkX3JldHVybiB7XG4gICAgICAkbWFwOiBtYXAtZ2V0KCRtYXAsICRrZXkpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJF9zdG9wOiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG4iLCIvLyBTZXR0aW5nc1xuLy8gPT09PT09PT1cblxuLy8gVmVyc2lvblxuLy8gLS0tLS0tLVxuJHN1LXZlcnNpb246IDEuMTtcblxuXG4vLyBEZWZhdWx0IFNldHRpbmdzXG4vLyAtLS0tLS0tLS0tLS0tLS0tXG4vLyBQUklWQVRFOiBUaGUgYmFzaWMgc2V0dGluZ3NcbiRzdXN5LWRlZmF1bHRzOiAoXG4gIGNvbHVtbnM6IDQsXG4gIGd1dHRlcnM6IC4yNSxcbik7XG5cblxuLy8gVXNlciBTZXR0aW5nc1xuLy8gLS0tLS0tLS0tLS0tLVxuLy8gLSBEZWZpbmUgdGhlICRzdXN5IHZhcmlhYmxlIHdpdGggYSBtYXAgb2YgeW91ciBvd24gc2V0dGluZ3MuXG4vLyAtIFNldCBFSVRIRVIgJGNvbHVtbi13aWR0aCBPUiAkY29udGFpbmVyXG4vLyAtIFVzZSAkY29sdW1uLXdpZHRoIGZvciBzdGF0aWMgbGF5b3V0c1xuJHN1c3k6ICgpICFkZWZhdWx0O1xuXG5cbi8vIFN1c3kgRGVmYXVsdHNcbi8vIC0tLS0tLS0tLS0tLS1cbi8vIFBSSVZBVEU6IEFkZCBkZWZhdWx0cyB0byBTdXN5XG5AbWl4aW4gc3VzeS1kZWZhdWx0cyhcbiAgJGRlZmF1bHRzXG4pIHtcbiAgJHN1c3ktZGVmYXVsdHM6IG1hcC1tZXJnZSgkc3VzeS1kZWZhdWx0cywgJGRlZmF1bHRzKSAhZ2xvYmFsO1xufVxuXG5cbi8vIFN1c3kgU2V0XG4vLyAtLS0tLS0tLVxuLy8gQ2hhbmdlIG9uZSBzZXR0aW5nXG4vLyAtICRrZXkgICA6IHNldHRpbmcgbmFtZVxuLy8gLSAkdmFsdWUgOiBzZXR0aW5nIHZhbHVlXG5AbWl4aW4gc3VzeS1zZXQoXG4gICRrZXktdmFsdWUuLi5cbikge1xuICAkc3VzeTogX3N1c3ktZGVlcC1zZXQoJHN1c3ksICRrZXktdmFsdWUuLi4pICFnbG9iYWw7XG59XG5cblxuLy8gU3VzeSBHZXRcbi8vIC0tLS0tLS0tXG4vLyBSZXR1cm4gb25lIHNldHRpbmcgZnJvbSBhIGdyaWRcbi8vIC0gJGtleSAgICAgOiA8a2V5d29yZD5cbi8vIC0gJGxheW91dCAgOiA8c2V0dGluZ3M+XG5AZnVuY3Rpb24gc3VzeS1nZXQoXG4gICRrZXksXG4gICRsYXlvdXQ6IG1hcC1tZXJnZSgkc3VzeS1kZWZhdWx0cywgJHN1c3kpXG4pIHtcbiAgJGxheW91dDogcGFyc2UtZ3JpZCgkbGF5b3V0KTtcbiAgJF9vcHRpb25zOiAkbGF5b3V0ICRzdXN5ICRzdXN5LWRlZmF1bHRzO1xuICAkX2JyZWFrOiBmYWxzZTtcbiAgJF9yZXR1cm46IG51bGw7XG5cbiAgQGVhY2ggJG9wdCBpbiAkX29wdGlvbnMge1xuICAgIEBpZiB0eXBlLW9mKCRvcHQpID09IG1hcCBhbmQgbm90KCRfYnJlYWspIHtcbiAgICAgICRfa2V5c2V0OiBfc3VzeS1kZWVwLWhhcy1rZXkoJG9wdCwgJGtleS4uLik7XG4gICAgICBAaWYgJF9rZXlzZXQge1xuICAgICAgICAkX3JldHVybjogX3N1c3ktZGVlcC1nZXQoJG9wdCwgJGtleS4uLik7XG4gICAgICAgICRfYnJlYWs6IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cbiIsIi8vIE1hdGggVmFsaWRhdGlvblxuLy8gPT09PT09PT09PT09PT09XG5cblxuLy8gVmFsaWQgQ29sdW1uc1xuLy8gLS0tLS0tLS0tLS0tLVxuLy8gQ2hlY2sgdGhhdCBhIGNvbHVtbiBzZXR0aW5nIGlzIHZhbGlkLlxuQGZ1bmN0aW9uIHZhbGlkLWNvbHVtbnMoXG4gICRjb2x1bW5zLFxuICAkc2lsZW50OiBmYWxzZVxuKSB7XG4gICR0eXBlOiB0eXBlLW9mKCRjb2x1bW5zKTtcbiAgJHJldHVybjogbnVsbDtcblxuICBAaWYgJHR5cGUgPT0gbnVtYmVyIGFuZCB1bml0bGVzcygkY29sdW1ucykge1xuICAgICRyZXR1cm46ICRjb2x1bW5zO1xuICB9IEBlbHNlIGlmICR0eXBlID09IGxpc3Qge1xuICAgICRmYWlsOiBudWxsO1xuICAgIEBlYWNoICRjb2wgaW4gJGNvbHVtbnMge1xuICAgICAgQGlmIHR5cGUtb2YoJGNvbCkgPT0gbnVtYmVyIHtcbiAgICAgICAgJGZhaWw6ICRmYWlsIG9yIGlmKHVuaXRsZXNzKCRjb2wpLCBudWxsLCB0cnVlKTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkZmFpbDogdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgJHJldHVybjogaWYoJGZhaWwsICRyZXR1cm4sICRjb2x1bW5zKTtcbiAgfVxuXG4gIEBpZiAkcmV0dXJuICE9ICRjb2x1bW5zIGFuZCBub3QoJHNpbGVudCkge1xuICAgICRyZXR1cm46IG51bGw7XG4gICAgJHdhcm46ICckY29sdW1ucyBtdXN0IGJlIGEgdW5pdGxlc3MgbnVtYmVyIG9yIGxpc3Qgb2YgdW5pdGxlc3MgbnVtYmVycy4nO1xuICAgIEB3YXJuICR3YXJuICsgJyBDdXJyZW50IHZhbHVlIFsjeyR0eXBlfV06ICN7JGNvbHVtbnN9JztcbiAgfVxuXG4gIEByZXR1cm4gJHJldHVybjtcbn1cblxuXG4vLyBWYWxpZCBHdXR0ZXJzXG4vLyAtLS0tLS0tLS0tLS0tXG4vLyBDaGVjayB0aGF0IGEgZ3V0dGVyIHNldHRpbmcgaXMgdmFsaWQuXG5AZnVuY3Rpb24gdmFsaWQtZ3V0dGVycyhcbiAgJGd1dHRlcnMsXG4gICRzaWxlbnQ6IGZhbHNlXG4pIHtcbiAgJHR5cGU6IHR5cGUtb2YoJGd1dHRlcnMpO1xuICAkcmV0dXJuOiBudWxsO1xuXG4gIEBpZiAkdHlwZSA9PSBudW1iZXIgYW5kIHVuaXRsZXNzKCRndXR0ZXJzKSB7XG4gICAgJHJldHVybjogJGd1dHRlcnM7XG4gIH0gQGVsc2UgaWYgbm90KCRzaWxlbnQpIHtcbiAgICAkd2FybjogJyRndXR0ZXJzIG11c3QgYmUgYSB1bml0bGVzcyBudW1iZXIuJztcbiAgICBAd2FybiAkd2FybiArICcgQ3VycmVudCB2YWx1ZSBbI3skdHlwZX1dOiAjeyRndXR0ZXJzfSc7XG4gIH1cblxuICBAcmV0dXJuICRyZXR1cm47XG59XG4iLCIvLyBDb2x1bW4gbWF0aFxuLy8gPT09PT09PT09PT1cblxuXG4vLyBJcyBTeW1tZXRyaWNhbFxuLy8gLS0tLS0tLS0tLS0tLS1cbi8vIFJldHVybnMgdHJ1ZSBpZiBhIGdyaWQgaXMgc3ltbWV0cmljYWwuXG4vLyAtIFskY29sdW1uc10gICA6IDxudW1iZXI+IHwgPGxpc3Q+XG5AZnVuY3Rpb24gaXMtc3ltbWV0cmljYWwoXG4gICRjb2x1bW5zOiBzdXN5LWdldChjb2x1bW5zKVxuKSB7XG4gICRjb2x1bW5zOiB2YWxpZC1jb2x1bW5zKCRjb2x1bW5zKTtcbiAgQHJldHVybiBpZih0eXBlLW9mKCRjb2x1bW5zKSA9PSBudW1iZXIsICRjb2x1bW5zLCBudWxsKTtcbn1cblxuXG4vLyBTdXN5IENvdW50XG4vLyAtLS0tLS0tLS0tXG4vLyBGaW5kIHRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiBhIGdpdmVuIGxheW91dFxuLy8gLSBbJGNvbHVtbnNdICAgOiA8bnVtYmVyPiB8IDxsaXN0PlxuQGZ1bmN0aW9uIHN1c3ktY291bnQoXG4gICRjb2x1bW5zOiBzdXN5LWdldChjb2x1bW5zKVxuKSB7XG4gICRjb2x1bW5zOiB2YWxpZC1jb2x1bW5zKCRjb2x1bW5zKTtcbiAgQHJldHVybiBpcy1zeW1tZXRyaWNhbCgkY29sdW1ucykgb3IgbGVuZ3RoKCRjb2x1bW5zKTtcbn1cblxuXG4vLyBTdXN5IFN1bVxuLy8gLS0tLS0tLS1cbi8vIEZpbmQgdGhlIHRvdGFsIHN1bSBvZiBjb2x1bW4tdW5pdHMgaW4gYSBsYXlvdXRcbi8vIC0gWyRjb2x1bW5zXSAgIDogPG51bWJlcj4gfCA8bGlzdD5cbi8vIC0gWyRndXR0ZXJzXSAgIDogPHJhdGlvPlxuLy8gLSBbJHNwcmVhZF0gICAgOiBmYWxzZS9uYXJyb3cgfCB3aWRlIHwgd2lkZXJcbkBmdW5jdGlvbiBzdXN5LXN1bShcbiAgJGNvbHVtbnMgIDogc3VzeS1nZXQoY29sdW1ucyksXG4gICRndXR0ZXJzICA6IHN1c3ktZ2V0KGd1dHRlcnMpLFxuICAkc3ByZWFkICAgOiBmYWxzZVxuKSB7XG4gICRjb2x1bW5zOiB2YWxpZC1jb2x1bW5zKCRjb2x1bW5zKTtcbiAgJGd1dHRlcnM6IHZhbGlkLWd1dHRlcnMoJGd1dHRlcnMpO1xuXG4gICRzcHJlYWQ6IGlmKCRzcHJlYWQgPT0gd2lkZSwgMCwgaWYoJHNwcmVhZCA9PSB3aWRlciwgMSwgLTEpKTtcbiAgJGd1dHRlci1zdW06IChzdXN5LWNvdW50KCRjb2x1bW5zKSArICRzcHJlYWQpICogJGd1dHRlcnM7XG4gICRjb2x1bW4tc3VtOiBpcy1zeW1tZXRyaWNhbCgkY29sdW1ucyk7XG5cbiAgQGlmIG5vdCgkY29sdW1uLXN1bSkge1xuICAgIEBlYWNoICRjb2x1bW4gaW4gJGNvbHVtbnMge1xuICAgICAgJGNvbHVtbi1zdW06ICgkY29sdW1uLXN1bSBvciAwKSArICRjb2x1bW47XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkY29sdW1uLXN1bSArICRndXR0ZXItc3VtO1xufVxuXG5cbi8vIFN1c3kgU2xpY2Vcbi8vIC0tLS0tLS0tLS1cbi8vIFJldHVybiBhIHN1YnNldCBvZiBjb2x1bW5zIGF0IGEgZ2l2ZW4gbG9jYXRpb24uXG4vLyAtICRzcGFuICAgICAgICA6IDxudW1iZXI+XG4vLyAtICRsb2NhdGlvbiAgICA6IDxudW1iZXI+XG4vLyAtIFskY29sdW1uc10gICA6IDxudW1iZXI+IHwgPGxpc3Q+XG5AZnVuY3Rpb24gc3VzeS1zbGljZShcbiAgJHNwYW4sXG4gICRsb2NhdGlvbixcbiAgJGNvbHVtbnM6IHN1c3ktZ2V0KGNvbHVtbnMpXG4pIHtcbiAgJGNvbHVtbnM6IHZhbGlkLWNvbHVtbnMoJGNvbHVtbnMpO1xuICAkc3ViLWNvbHVtbnM6ICRzcGFuO1xuXG4gIEBpZiBub3QoaXMtc3ltbWV0cmljYWwoJGNvbHVtbnMpKSB7XG4gICAgJGxvY2F0aW9uOiAkbG9jYXRpb24gb3IgMTtcbiAgICAkc3ViLWNvbHVtbnM6ICgpO1xuICAgIEBmb3IgJGkgZnJvbSAkbG9jYXRpb24gdG8gKCRsb2NhdGlvbiArICRzcGFuKSB7XG4gICAgICAkc3ViLWNvbHVtbnM6IGFwcGVuZCgkc3ViLWNvbHVtbnMsIG50aCgkY29sdW1ucywgJGkpKTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRzdWItY29sdW1ucztcbn1cblxuXG4vLyBTdXN5XG4vLyAtLS0tXG4vLyBGaW5kIHRoZSBzdW0gb2YgYSBjb2x1bW4tc3Bhbi5cbi8vIC0gJHNwYW4gICAgICAgIDogPG51bWJlcj5cbi8vIC0gJGxvY2F0aW9uICAgIDogPG51bWJlcj5cbi8vIC0gWyRjb2x1bW5zXSAgIDogPG51bWJlcj4gfCA8bGlzdD5cbi8vIC0gWyRndXR0ZXJzXSAgIDogPHJhdGlvPlxuLy8gLSBbJHNwcmVhZF0gICAgOiBmYWxzZS9uYXJyb3cgfCB3aWRlIHwgd2lkZXJcbkBmdW5jdGlvbiBzdXN5KFxuICAkc3BhbixcbiAgJGxvY2F0aW9uICAgICA6IGZhbHNlLFxuICAkY29sdW1ucyAgICAgIDogc3VzeS1nZXQoY29sdW1ucyksXG4gICRndXR0ZXJzICAgICAgOiBzdXN5LWdldChndXR0ZXJzKSxcbiAgJHNwcmVhZCAgICAgICA6IGZhbHNlXG4pIHtcbiAgJGNvbHVtbnM6IHZhbGlkLWNvbHVtbnMoJGNvbHVtbnMpO1xuICAkZ3V0dGVyczogdmFsaWQtZ3V0dGVycygkZ3V0dGVycyk7XG4gICRzcGFuOiBzdXN5LXNsaWNlKCRzcGFuLCAkbG9jYXRpb24sICRjb2x1bW5zKTtcblxuICBAcmV0dXJuIHN1c3ktc3VtKCRzcGFuLCAkZ3V0dGVycywgJHNwcmVhZCk7XG59XG4iLCIvLyBGbG9hdCBBUElcbi8vID09PT09PT09PVxuXG5AaW1wb3J0IFwic2hhcmVkXCI7XG5cbkBpbXBvcnQgXCJmbG9hdC9jb250YWluZXJcIjtcbkBpbXBvcnQgXCJmbG9hdC9zcGFuXCI7XG5AaW1wb3J0IFwiZmxvYXQvZW5kXCI7XG5AaW1wb3J0IFwiZmxvYXQvaXNvbGF0ZVwiO1xuIiwiLy8gU2hhcmVkIEFQSVxuLy8gPT09PT09PT09PVxuXG5AaW1wb3J0IFwic3VwcG9ydFwiO1xuXG5AaW1wb3J0IFwic2hhcmVkL2luc3BlY3RcIjtcbkBpbXBvcnQgXCJzaGFyZWQvb3V0cHV0XCI7XG5AaW1wb3J0IFwic2hhcmVkL2RpcmVjdGlvblwiO1xuQGltcG9ydCBcInNoYXJlZC9iYWNrZ3JvdW5kXCI7XG5AaW1wb3J0IFwic2hhcmVkL2NvbnRhaW5lclwiO1xuQGltcG9ydCBcInNoYXJlZC9tYXJnaW5zXCI7XG5AaW1wb3J0IFwic2hhcmVkL3BhZGRpbmdcIjtcblxuXG5cbiIsIi8vIFN1c3kgQnJvd3NlciBTdXBwb3J0XG4vLyA9PT09PT09PT09PT09PT09PT09PVxuXG5AaW1wb3J0IFwic3VwcG9ydC9zdXBwb3J0XCI7XG5AaW1wb3J0IFwic3VwcG9ydC9wcmVmaXhcIjtcbkBpbXBvcnQgXCJzdXBwb3J0L2JhY2tncm91bmRcIjtcbkBpbXBvcnQgXCJzdXBwb3J0L2JveC1zaXppbmdcIjtcbkBpbXBvcnQgXCJzdXBwb3J0L3JlbVwiO1xuQGltcG9ydCBcInN1cHBvcnQvY2xlYXJmaXhcIjtcbiIsIi8vIEJyb3dzZXIgU3VwcG9ydFxuLy8gPT09PT09PT09PT09PT09XG5cbi8vIFN1c3kgU3VwcG9ydCBEZWZhdWx0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AaW5jbHVkZSBzdXN5LWRlZmF1bHRzKChcbiAgdXNlLWN1c3RvbTogKFxuICAgIGNsZWFyZml4OiBmYWxzZSxcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB0cnVlLFxuICAgIGJhY2tncm91bmQtb3B0aW9uczogZmFsc2UsXG4gICAgYnJlYWtwb2ludDogdHJ1ZSxcbiAgICBib3gtc2l6aW5nOiB0cnVlLFxuICAgIHJlbTogdHJ1ZSxcbiAgKSxcbikpO1xuXG5cbi8vIFN1c3kgU3VwcG9ydCBbbWl4aW5dXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VuZCBwcm9wZXJ0eS12YWx1ZSBwYWlycyB0byB0aGUgcHJvcGVyIHN1cHBvcnQgbW9kdWxlcy5cbi8vIC0gJHByb3AgIDogPGNzcyBwcm9wZXJ0eT5cbi8vIC0gJHZhbCAgIDogPGNzcyB2YWx1ZT5cbkBtaXhpbiBzdXN5LXN1cHBvcnQoXG4gICRwcm9wLFxuICAkdmFsXG4pIHtcbiAgLy8gQmFja2dyb3VuZCBTdXBwb3J0XG4gIEBpZiAkcHJvcCA9PSBiYWNrZ3JvdW5kLWltYWdlIHtcbiAgICBAaW5jbHVkZSBzdXN5LWJhY2tncm91bmQtaW1hZ2UoJHZhbCk7XG4gIH0gQGVsc2UgaWYgJHByb3AgPT0gYmFja2dyb3VuZC1zaXplIHtcbiAgICBAaW5jbHVkZSBzdXN5LWJhY2tncm91bmQtc2l6ZSgkdmFsKTtcbiAgfSBAZWxzZSBpZiAkcHJvcCA9PSBiYWNrZ3JvdW5kLW9yaWdpbiB7XG4gICAgQGluY2x1ZGUgc3VzeS1iYWNrZ3JvdW5kLW9yaWdpbigkdmFsKTtcbiAgfSBAZWxzZSBpZiAkcHJvcCA9PSBiYWNrZ3JvdW5kLWNsaXAge1xuICAgIEBpbmNsdWRlIHN1c3ktYmFja2dyb3VuZC1jbGlwKCR2YWwpO1xuICB9XG5cbiAgLy8gQm94LVNpemluZyBTdXBwb3J0XG4gIEBlbHNlIGlmICRwcm9wID09IGJveC1zaXppbmcge1xuICAgIEBpbmNsdWRlIHN1c3ktYm94LXNpemluZygkdmFsKTtcbiAgfVxuXG4gIC8vIFJlbSBTdXBwb3J0XG4gIEBlbHNlIHtcbiAgICBAaW5jbHVkZSBzdXN5LXJlbSgkcHJvcCwgJHZhbCk7XG4gIH1cbn1cblxuXG4vLyBTdXN5IFN1cHBvcnQgW2Z1bmN0aW9uXVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENoZWNrIGZvciBzdXBwb3J0IG9mIGEgZmVhdHVyZS5cbi8vIC0gJGZlYXR1cmUgICAgICAgOiA8c3RyaW5nPlxuLy8gICAgICAgICAgICAgICAgICAgIC0gZS5nIFwicmVtXCIgb3IgXCJib3gtc2l6aW5nXCJcbi8vIC0gJHJlcXVpcmVtZW50cyAgOiA8bWFwPlxuLy8gICAgICAgICAgICAgICAgICAgIC0gZS5nICh2YXJpYWJsZTogcmVtLXdpdGgtcHgtZmFsbGJhY2ssIG1peGluOiByZW0pXG4vLyAtICR3YXJuICAgICAgICAgIDogPGJvb2w+XG5AZnVuY3Rpb24gc3VzeS1zdXBwb3J0KFxuICAkZmVhdHVyZSxcbiAgJHJlcXVpcmVtZW50czogKCksXG4gICR3YXJuOiB0cnVlXG4pIHtcbiAgJF9zdXBwb3J0OiBzdXN5LWdldCh1c2UtY3VzdG9tICRmZWF0dXJlKTtcblxuICBAaWYgJF9zdXBwb3J0IHtcbiAgICAkX2ZhaWw6IGZhbHNlO1xuXG4gICAgQGVhY2ggJF90eXBlLCAkX3JlcSBpbiAkcmVxdWlyZW1lbnRzIHtcbiAgICAgIEBlYWNoICRfaSBpbiAkX3JlcSB7XG5cbiAgICAgICAgJF9wYXNzIDogbnVsbDtcblxuICAgICAgICAvLyBzYXNzIDMuNSBvciBncmVhdGVyXG4gICAgICAgIEBpZiBmdW5jdGlvbi1leGlzdHMoJ2dldC1mdW5jdGlvbicpIHtcbiAgICAgICAgICAkX3Bhc3M6IGNhbGwoZ2V0LWZ1bmN0aW9uKHVucXVvdGUoXCIjeyRfdHlwZX0tZXhpc3RzXCIpKSwgJF9pKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzYXNzIDMuNCBvciBsZXNzXG4gICAgICAgIEBlbHNlIHtcbiAgICAgICAgICAkX3Bhc3M6IGNhbGwodW5xdW90ZShcIiN7JF90eXBlfS1leGlzdHNcIiksICRfaSk7XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgbm90KCRfcGFzcykge1xuICAgICAgICAgICRfZmFpbDogdHJ1ZTtcbiAgICAgICAgICBAaWYgJHdhcm4ge1xuICAgICAgICAgICAgQHdhcm4gXCJZb3UgcmVxdWVzdGVkIGN1c3RvbSBzdXBwb3J0IG9mICN7JGZlYXR1cmV9LCBidXQgdGhlICN7JF9pfSAjeyRfdHlwZX0gaXMgbm90IGF2YWlsYWJsZS5cIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAkX3N1cHBvcnQ6IGlmKCRfZmFpbCwgZmFsc2UsICRfc3VwcG9ydCk7XG4gIH1cblxuICBAcmV0dXJuICRfc3VwcG9ydDtcbn1cbiIsIi8vIFN1c3kgUHJlZml4XG4vLyA9PT09PT09PT09PVxuXG4vLyBQcmVmaXhcbi8vIC0tLS0tLVxuLy8gT3V0cHV0IHNpbXBsZSBwcmVmaXhlZCBwcm9wZXJ0aWVzLlxuLy8gLSAkcHJvcCAgICAgIDogPGNzcyBwcm9wZXJ0eT5cbi8vIC0gJHZhbCAgICAgICA6IDxjc3MgdmFsdWU+XG4vLyAtIFskcHJlZml4XSAgOiA8YnJvd3NlciBwcmVmaXggbGlzdD5cbkBtaXhpbiBzdXN5LXByZWZpeChcbiAgJHByb3AsXG4gICR2YWwsXG4gICRwcmVmaXg6IG9mZmljaWFsXG4pIHtcbiAgQGVhY2ggJGZpeCBpbiAkcHJlZml4IHtcbiAgICAkZml4OiBpZigkZml4ID09IG9mZmljaWFsIG9yIG5vdCgkZml4KSwgJHByb3AsICctI3skZml4fS0jeyRwcm9wfScpO1xuICAgIEBpbmNsdWRlIHN1c3ktcmVtKCRmaXgsICR2YWwpO1xuICB9XG59XG4iLCIvLyBCYWNrZ3JvdW5kIFByb3BlcnRpZXNcbi8vID09PT09PT09PT09PT09PT09PT09PVxuXG4vLyBTdXN5IEJhY2tncm91bmQgSW1hZ2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ2hlY2sgZm9yIGFuIGV4aXN0aW5nIHN1cHBvcnQgbWl4aW4sIG9yIHByb3ZpZGUgYSBzaW1wbGUgZmFsbGJhY2suXG4vLyAtICRpbWFnZTogPGJhY2tncm91bmQtaW1hZ2U+XG5AbWl4aW4gc3VzeS1iYWNrZ3JvdW5kLWltYWdlKFxuICAkaW1hZ2Vcbikge1xuICBAaWYgc3VzeS1zdXBwb3J0KGJhY2tncm91bmQtaW1hZ2UsIChtaXhpbjogYmFja2dyb3VuZC1pbWFnZSksICR3YXJuOiBmYWxzZSkge1xuICAgIEBpbmNsdWRlIGJhY2tncm91bmQtaW1hZ2UoJGltYWdlLi4uKTtcbiAgfSBAZWxzZSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogJGltYWdlO1xuICB9XG59XG5cbi8vIFN1c3kgQmFja2dyb3VuZCBTaXplXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENoZWNrIGZvciBhbiBleGlzdGluZyBzdXBwb3J0IG1peGluLCBvciBwcm92aWRlIGEgc2ltcGxlIGZhbGxiYWNrLlxuLy8gLSAkaW1hZ2U6IDxiYWNrZ3JvdW5kLXNpemU+XG5AbWl4aW4gc3VzeS1iYWNrZ3JvdW5kLXNpemUoXG4gICRzaXplXG4pIHtcbiAgQGlmIHN1c3ktc3VwcG9ydChiYWNrZ3JvdW5kLW9wdGlvbnMsIChtaXhpbjogYmFja2dyb3VuZC1zaXplKSkge1xuICAgIEBpbmNsdWRlIGJhY2tncm91bmQtc2l6ZSgkc2l6ZSk7XG4gIH0gQGVsc2Uge1xuICAgIGJhY2tncm91bmQtc2l6ZTogJHNpemU7XG4gIH1cbn1cblxuLy8gU3VzeSBCYWNrZ3JvdW5kIE9yaWdpblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ2hlY2sgZm9yIGFuIGV4aXN0aW5nIHN1cHBvcnQgbWl4aW4sIG9yIHByb3ZpZGUgYSBzaW1wbGUgZmFsbGJhY2suXG4vLyAtICRpbWFnZTogPGJhY2tncm91bmQtb3JpZ2luPlxuQG1peGluIHN1c3ktYmFja2dyb3VuZC1vcmlnaW4oXG4gICRvcmlnaW5cbikge1xuICBAaWYgc3VzeS1zdXBwb3J0KGJhY2tncm91bmQtb3B0aW9ucywgKG1peGluOiBiYWNrZ3JvdW5kLW9yaWdpbikpIHtcbiAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLW9yaWdpbigkb3JpZ2luKTtcbiAgfSBAZWxzZSB7XG4gICAgYmFja2dyb3VuZC1vcmlnaW46ICRvcmlnaW47XG4gIH1cbn1cblxuLy8gU3VzeSBCYWNrZ3JvdW5kIENsaXBcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDaGVjayBmb3IgYW4gZXhpc3Rpbmcgc3VwcG9ydCBtaXhpbiwgb3IgcHJvdmlkZSBhIHNpbXBsZSBmYWxsYmFjay5cbi8vIC0gJGltYWdlOiA8YmFja2dyb3VuZC1jbGlwPlxuQG1peGluIHN1c3ktYmFja2dyb3VuZC1jbGlwKFxuICAkY2xpcFxuKSB7XG4gIEBpZiBzdXN5LXN1cHBvcnQoYmFja2dyb3VuZC1vcHRpb25zLCAobWl4aW46IGJhY2tncm91bmQtY2xpcCkpIHtcbiAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLWNsaXAoJGNsaXApO1xuICB9IEBlbHNlIHtcbiAgICBiYWNrZ3JvdW5kLWNsaXA6ICRjbGlwO1xuICB9XG59XG4iLCIvLyBCb3ggU2l6aW5nXG4vLyA9PT09PT09PT09XG5cbi8vIEJveCBTaXppbmdcbi8vIC0tLS0tLS0tLS1cbi8vIENoZWNrIGZvciBhbiBleGlzdGluZyBzdXBwb3J0IG1peGluLCBvciBwcm92aWRlIGEgc2ltcGxlIGZhbGxiYWNrLlxuLy8gLSAkbW9kZWw6IDxib3gtc2l6aW5nPlxuQG1peGluIHN1c3ktYm94LXNpemluZyhcbiAgJG1vZGVsOiBjb250ZW50LWJveFxuKSB7XG4gIEBpZiAkbW9kZWwge1xuICAgIEBpZiBzdXN5LXN1cHBvcnQoYm94LXNpemluZywgKG1peGluOiBib3gtc2l6aW5nKSwgJHdhcm46IGZhbHNlKSB7XG4gICAgICBAaW5jbHVkZSBib3gtc2l6aW5nKCRtb2RlbCk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkcHJlZml4OiAobW96LCB3ZWJraXQsIG9mZmljaWFsKTtcbiAgICAgIEBpbmNsdWRlIHN1c3ktcHJlZml4KGJveC1zaXppbmcsICRtb2RlbCwgJHByZWZpeCk7XG4gICAgfVxuICB9XG59XG4iLCIvLyByZW0gU3VwcG9ydFxuLy8gPT09PT09PT09PT1cblxuLy8gcmVtXG4vLyAtLS1cbi8vIENoZWNrIGZvciBhbiBleGlzdGluZyBzdXBwb3J0IG1peGluLCBvciBvdXRwdXQgZGlyZWN0bHkuXG4vLyAtICRwcm9wICA6IDxjc3MgcHJvcGVydHk+XG4vLyAtICR2YWwgICA6IDxjc3MgdmFsdWU+XG5AbWl4aW4gc3VzeS1yZW0oXG4gICRwcm9wLFxuICAkdmFsXG4pIHtcbiAgJF9yZXFzOiAoXG4gICAgdmFyaWFibGU6IHJoeXRobS11bml0IHJlbS13aXRoLXB4LWZhbGxiYWNrLFxuICAgIG1peGluOiByZW0sXG4gICk7XG4gIEBpZiBzdXN5LXN1cHBvcnQocmVtLCAkX3JlcXMsICR3YXJuOiBmYWxzZSkgYW5kICRyaHl0aG0tdW5pdCA9PSByZW0ge1xuICAgIEBpbmNsdWRlIHJlbSgkcHJvcCwgJHZhbCk7XG4gIH0gQGVsc2Uge1xuICAgICN7JHByb3B9OiAkdmFsO1xuICB9XG59XG4iLCIvLyBTdXN5IEZhbGxiYWNrIENsZWFyZml4XG4vLyA9PT09PT09PT09PT09PT09PT09PT09XG5cblxuLy8gQ2xlYXJmaXhcbi8vIC0tLS0tLS0tXG4vLyBDaGVjayBmb3IgYW4gZXhpc3Rpbmcgc3VwcG9ydCBtaXhpbiwgb3IgcHJvdmlkZSBhIHNpbXBsZSBmYWxsYmFjay5cbkBtaXhpbiBzdXN5LWNsZWFyZml4IHtcbiAgQGlmIHN1c3ktc3VwcG9ydChjbGVhcmZpeCwgKG1peGluOiBjbGVhcmZpeCkpIHtcbiAgICBAaW5jbHVkZSBjbGVhcmZpeDtcbiAgfSBAZWxzZSB7XG4gICAgJjphZnRlciB7XG4gICAgICBjb250ZW50OiBcIiBcIjtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgY2xlYXI6IGJvdGg7XG4gICAgfVxuICB9XG59XG4iLCIvLyBEZWJ1Z2dpbmdcbi8vID09PT09PT09PVxuXG4vLyBTdXN5IEluc3BlY3Rcbi8vIC0tLS0tLS0tLS0tLVxuLy8gT3V0cHV0IGFyZ3VtZW50cyBwYXNzZWQgdG8gYSBpbnNwZWN0LlxuLy8gLSAkbWl4aW4gIDogPHN1c3kgbWl4aW4+XG4vLyAtICRpbnNwZWMgICA6IDxtaXhpbiBhcmd1bWVudHM+XG5cbkBtaXhpbiBzdXN5LWluc3BlY3QoXG4gICRtaXhpbixcbiAgJGluc3BlY3Rcbikge1xuICAkc2hvdzogZmFsc2U7XG5cbiAgQGVhY2ggJGl0ZW0gaW4gJGluc3BlY3Qge1xuICAgIEBpZiBpbmRleCgkaXRlbSwgaW5zcGVjdCkge1xuICAgICAgJHNob3c6IHRydWU7XG4gICAgfVxuICB9XG5cbiAgQGlmICRzaG93IG9yIHN1c3ktZ2V0KGRlYnVnIGluc3BlY3QpIHtcbiAgICAtc3VzeS0jeyRtaXhpbn06IGluc3BlY3QoJGluc3BlY3QpO1xuICB9XG59XG4iLCIvLyBPdXRwdXRcbi8vID09PT09PVxuXG4vLyBPdXRwdXRcbi8vIC0tLS0tLVxuLy8gT3V0cHV0IENTUyB3aXRoIHByb3BlciBicm93c2VyIHN1cHBvcnQuXG4vLyAtICRzdHlsZXMgIDogPG1hcCBvZiBjc3MgcHJvcGVydHktdmFsdWUgcGFpcnM+XG5AbWl4aW4gb3V0cHV0KFxuICAkc3R5bGVzXG4pIHtcbiAgQGVhY2ggJHByb3AsICR2YWwgaW4gJHN0eWxlcyB7XG4gICAgQGluY2x1ZGUgc3VzeS1zdXBwb3J0KCRwcm9wLCAkdmFsKTtcbiAgfVxufVxuIiwiLy8gRGlyZWN0aW9uIEhlbHBlcnNcbi8vID09PT09PT09PT09PT09PT09XG5cbi8vIFN1c3kgRmxvdyBEZWZhdWx0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtIFBSSVZBVEVcbkBpbmNsdWRlIHN1c3ktZGVmYXVsdHMoKFxuICBmbG93OiBsdHIsXG4pKTtcblxuLy8gR2V0IERpcmVjdGlvblxuLy8gLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHRoZSAnZnJvbScgb3IgJ3RvJyBkaXJlY3Rpb24gb2YgYSBsdHIgb3IgcnRsIGZsb3cuXG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG4vLyAtIFska2V5XSAgIDogZnJvbSB8IHRvXG5AZnVuY3Rpb24gZ2V0LWRpcmVjdGlvbihcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpLFxuICAka2V5OiBmcm9tXG4pIHtcbiAgJHJldHVybjogaWYoJGZsb3cgPT0gcnRsLCAoZnJvbTogcmlnaHQsIHRvOiBsZWZ0KSwgKGZyb206IGxlZnQsIHRvOiByaWdodCkpO1xuICBAcmV0dXJuIG1hcC1nZXQoJHJldHVybiwgJGtleSk7XG59XG5cbi8vIFRvXG4vLyAtLVxuLy8gUmV0dXJuIHRoZSAndG8nIGRpcmVjdGlvbiBvZiBhIGZsb3dcbi8vIC0gWyRmbG93XSAgOiBsdHIgfCBydGxcbkBmdW5jdGlvbiB0byhcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpXG4pIHtcbiAgQHJldHVybiBnZXQtZGlyZWN0aW9uKCRmbG93LCB0byk7XG59XG5cbi8vIEZyb21cbi8vIC0tLS1cbi8vIFJldHVybiB0aGUgJ2Zyb20nIGRpcmVjdGlvbiBvZiBhIGZsb3dcbi8vIC0gWyRmbG93XSAgOiBsdHIgfCBydGxcbkBmdW5jdGlvbiBmcm9tKFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdylcbikge1xuICBAcmV0dXJuIGdldC1kaXJlY3Rpb24oJGZsb3csIGZyb20pO1xufVxuIiwiLy8gR3JpZCBCYWNrZ3JvdW5kIEFQSVxuLy8gPT09PT09PT09PT09PT09PT09PVxuLy8gLSBTdWItcGl4ZWwgcm91bmRpbmcgY2FuIGxlYWQgdG8gc2V2ZXJhbCBwaXhlbHMgdmFyaWF0aW9uIGJldHdlZW4gYnJvd3NlcnMuXG5cbi8vIEdyaWQgQmFja2dyb3VuZCBPdXRwdXRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gJGltYWdlOiBiYWNrZ3JvdW5kLWltYWdlXG4vLyAtICRzaXplOiBiYWNrZ3JvdW5kLXNpemVcbi8vIC0gJGNsaXA6IGJhY2tncm91bmQtY2xpcFxuLy8gLSBbJGZsb3ddOiBsdHIgfCBydGxcbkBtaXhpbiBiYWNrZ3JvdW5kLWdyaWQtb3V0cHV0IChcbiAgJGltYWdlLFxuICAkc2l6ZTogbnVsbCxcbiAgJGNsaXA6IG51bGwsXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KVxuKSB7XG4gICRvdXRwdXQ6IChcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiAkaW1hZ2UsXG4gICAgYmFja2dyb3VuZC1zaXplOiAkc2l6ZSxcbiAgICBiYWNrZ3JvdW5kLW9yaWdpbjogJGNsaXAsXG4gICAgYmFja2dyb3VuZC1jbGlwOiAkY2xpcCxcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBmcm9tKCRmbG93KSB0b3AsXG4gICk7XG5cbiAgQGluY2x1ZGUgb3V0cHV0KCRvdXRwdXQpO1xufVxuIiwiLy8gU2hhcmVkIENvbnRhaW5lciBBUElcbi8vID09PT09PT09PT09PT09PT09PT09XG5cbi8vIENvbnRhaW5lciBPdXRwdXRcbi8vIC0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gWyR3aWR0aF0gICAgICAgICA6IDxsZW5ndGg+XG4vLyAtIFskanVzdGlmeV0gICAgICAgOiBsZWZ0IHwgY2VudGVyIHwgcmlnaHRcbi8vIC0gWyRtYXRoXSAgICAgICAgICA6IGZsdWlkIHwgc3RhdGljXG5AbWl4aW4gY29udGFpbmVyLW91dHB1dChcbiAgJHdpZHRoLFxuICAkanVzdGlmeTogYXV0byBhdXRvLFxuICAkcHJvcGVydHk6IG1heC13aWR0aFxuKSB7XG4gICRvdXRwdXQ6IChcbiAgICAjeyRwcm9wZXJ0eX06ICR3aWR0aCBvciAxMDAlLFxuICAgIG1hcmdpbi1sZWZ0OiBudGgoJGp1c3RpZnksIDEpLFxuICAgIG1hcmdpbi1yaWdodDogbnRoKCRqdXN0aWZ5LCAyKSxcbiAgKTtcblxuICBAaW5jbHVkZSBvdXRwdXQoJG91dHB1dCk7XG59XG4iLCIvLyBNYXJnaW5zIEFQSVxuLy8gPT09PT09PT09PT1cblxuLy8gTWFyZ2luIE91dHB1dFxuLy8gLS0tLS0tLS0tLS0tLVxuLy8gLSAkYmVmb3JlICA6IDxsZW5ndGg+XG4vLyAtICRhZnRlciAgIDogPGxlbmd0aD5cbi8vIC0gWyRmbG93XSAgOiBsdHIgfCBydGxcbkBtaXhpbiBtYXJnaW4tb3V0cHV0KFxuICAkYmVmb3JlLFxuICAkYWZ0ZXIsXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KVxuKSB7XG4gICR0bzogdG8oJGZsb3cpO1xuICAkZnJvbTogZnJvbSgkZmxvdyk7XG5cbiAgJG91dHB1dDogKFxuICAgIG1hcmdpbi0jeyRmcm9tfTogJGJlZm9yZSxcbiAgICBtYXJnaW4tI3skdG99OiAkYWZ0ZXIsXG4gICk7XG5cbiAgQGluY2x1ZGUgb3V0cHV0KCRvdXRwdXQpO1xufVxuIiwiLy8gUGFkZGluZyBBUElcbi8vID09PT09PT09PT09XG5cbi8vIFBhZGRpbmcgT3V0cHV0XG4vLyAtLS0tLS0tLS0tLS0tLVxuLy8gLSAkYmVmb3JlICA6IDxsZW5ndGg+XG4vLyAtICRhZnRlciAgIDogPGxlbmd0aD5cbi8vIC0gWyRmbG93XSAgOiBsdHIgfCBydGxcbkBtaXhpbiBwYWRkaW5nLW91dHB1dChcbiAgJGJlZm9yZSxcbiAgJGFmdGVyLFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdylcbikge1xuICAkdG86IHRvKCRmbG93KTtcbiAgJGZyb206IGZyb20oJGZsb3cpO1xuXG4gICRvdXRwdXQ6IChcbiAgICBwYWRkaW5nLSN7JGZyb219OiAkYmVmb3JlLFxuICAgIHBhZGRpbmctI3skdG99OiAkYWZ0ZXIsXG4gICk7XG5cbiAgQGluY2x1ZGUgb3V0cHV0KCRvdXRwdXQpO1xufVxuIiwiLy8gRmxvYXQgQ29udGFpbmVyIEFQSVxuLy8gPT09PT09PT09PT09PT09PT09PVxuXG4vLyBGbG9hdCBDb250YWluZXJcbi8vIC0tLS0tLS0tLS0tLS0tLVxuLy8gLSBbJHdpZHRoXSAgICAgICAgIDogPGxlbmd0aD5cbi8vIC0gWyRqdXN0aWZ5XSAgICAgICA6IGxlZnQgfCBjZW50ZXIgfCByaWdodFxuLy8gLSBbJG1hdGhdICAgOiBmbHVpZCB8IHN0YXRpY1xuQG1peGluIGZsb2F0LWNvbnRhaW5lcihcbiAgJHdpZHRoLFxuICAkanVzdGlmeTogYXV0byBhdXRvLFxuICAkcHJvcGVydHk6IG1heC13aWR0aFxuKSB7XG4gIEBpbmNsdWRlIHN1c3ktY2xlYXJmaXg7XG4gIEBpbmNsdWRlIGNvbnRhaW5lci1vdXRwdXQoJHdpZHRoLCAkanVzdGlmeSwgJHByb3BlcnR5KTtcbn1cbiIsIi8vIEZsb2F0IFNwYW4gQVBJXG4vLyA9PT09PT09PT09PT09PVxuXG4vLyBGbG9hdCBTcGFuIE91dHB1dFxuLy8gLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gJHdpZHRoICAgICAgICAgICAgIDogPGxlbmd0aD5cbi8vIC0gWyRmbG9hdF0gICAgICAgICAgIDogZnJvbSB8IHRvXG4vLyAtIFskbWFyZ2luLWJlZm9yZV0gICA6IDxsZW5ndGg+XG4vLyAtIFskbWFyZ2luLWFmdGVyXSAgICA6IDxsZW5ndGg+XG4vLyAtIFskcGFkZGluZy1iZWZvcmVdICA6IDxsZW5ndGg+XG4vLyAtIFskcGFkZGluZy1hZnRlcl0gICA6IDxsZW5ndGg+XG4vLyAtIFskZmxvd10gICAgICAgICAgICA6IGx0ciB8IHJ0bFxuQG1peGluIGZsb2F0LXNwYW4tb3V0cHV0KFxuICAkd2lkdGgsXG4gICRmbG9hdCAgICAgICAgICAgIDogZnJvbSxcbiAgJG1hcmdpbi1iZWZvcmUgICAgOiBudWxsLFxuICAkbWFyZ2luLWFmdGVyICAgICA6IG51bGwsXG4gICRwYWRkaW5nLWJlZm9yZSAgIDogbnVsbCxcbiAgJHBhZGRpbmctYWZ0ZXIgICAgOiBudWxsLFxuICAkZmxvdyAgICAgICAgICAgICA6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpXG4pIHtcbiAgJHRvICAgICA6IHRvKCRmbG93KTtcbiAgJGZyb20gICA6IGZyb20oJGZsb3cpO1xuXG4gICRvdXRwdXQ6IChcbiAgICB3aWR0aDogJHdpZHRoLFxuICAgIGZsb2F0OiBpZigkZmxvYXQgPT0gdG8sICR0bywgbnVsbCkgb3IgaWYoJGZsb2F0ID09IGZyb20sICRmcm9tLCBudWxsKSxcbiAgICBtYXJnaW4tI3skZnJvbX06ICRtYXJnaW4tYmVmb3JlLFxuICAgIG1hcmdpbi0jeyR0b306ICRtYXJnaW4tYWZ0ZXIsXG4gICAgcGFkZGluZy0jeyRmcm9tfTogJHBhZGRpbmctYmVmb3JlLFxuICAgIHBhZGRpbmctI3skdG99OiAkcGFkZGluZy1hZnRlcixcbiAgKTtcblxuICBAaW5jbHVkZSBvdXRwdXQoJG91dHB1dCk7XG59XG4iLCIvLyBGbG9hdCBFbmRzIEFQSVxuLy8gPT09PT09PT09PT09PT1cblxuLy8gU3VzeSBFbmQgRGVmYXVsdHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtIFBSSVZBVEVcbkBpbmNsdWRlIHN1c3ktZGVmYXVsdHMoKFxuICBsYXN0LWZsb3c6IHRvLFxuKSk7XG5cbi8vIEZsb2F0IExhc3Rcbi8vIC0tLS0tLS0tLS1cbi8vIC0gWyRmbG93XSAgOiBsdHIgfCBydGxcbkBtaXhpbiBmbG9hdC1sYXN0KFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdyksXG4gICRsYXN0LWZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGxhc3QtZmxvdyksXG4gICRtYXJnaW46IDBcbikge1xuICAkdG86IHRvKCRmbG93KTtcblxuICAkb3V0cHV0OiAoXG4gICAgZmxvYXQ6IGlmKCRsYXN0LWZsb3cgPT0gdG8sICR0bywgbnVsbCksXG4gICAgbWFyZ2luLSN7JHRvfTogJG1hcmdpbixcbiAgKTtcblxuICBAaW5jbHVkZSBvdXRwdXQoJG91dHB1dCk7XG59XG5cbi8vIEZsb2F0IEZpcnN0XG4vLyAtLS0tLS0tLS0tLVxuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuQG1peGluIGZsb2F0LWZpcnN0KFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdylcbikge1xuICAkb3V0cHV0OiAoXG4gICAgbWFyZ2luLSN7ZnJvbSgkZmxvdyl9OiAwLFxuICApO1xuXG4gIEBpbmNsdWRlIG91dHB1dCgkb3V0cHV0KTtcbn1cbiIsIi8vIEZsb2F0IElzb2xhdGlvbiBBUElcbi8vID09PT09PT09PT09PT09PT09PT1cblxuLy8gSXNvbGF0ZSBPdXRwdXRcbi8vIC0tLS0tLS0tLS0tLS0tXG4vLyAtICRwdXNoICAgIDogPGxlbmd0aD5cbi8vIC0gWyRmbG93XSAgOiBsdHIgfCBydGxcbkBtaXhpbiBpc29sYXRlLW91dHB1dChcbiAgJHB1c2gsXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KVxuKSB7XG4gICR0bzogdG8oJGZsb3cpO1xuICAkZnJvbTogZnJvbSgkZmxvdyk7XG5cbiAgJG91dHB1dDogKFxuICAgIGZsb2F0OiAkZnJvbSxcbiAgICBtYXJnaW4tI3skZnJvbX06ICRwdXNoLFxuICAgIG1hcmdpbi0jeyR0b306IC0xMDAlLFxuICApO1xuXG4gIEBpbmNsdWRlIG91dHB1dCgkb3V0cHV0KTtcbn1cbiIsIi8vIFN1c3kgU2V0dGluZ3Ncbi8vID09PT09PT09PT09PT1cblxuLy8gU3VzeSBMYW5ndWFnZSBEZWZhdWx0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSBQUklWQVRFXG5AaW5jbHVkZSBzdXN5LWRlZmF1bHRzKChcbiAgY29udGFpbmVyOiBhdXRvLFxuICBtYXRoOiBmbHVpZCxcbiAgb3V0cHV0OiBmbG9hdCxcbiAgY29udGFpbmVyLXBvc2l0aW9uOiBjZW50ZXIsXG4gIGd1dHRlci1wb3NpdGlvbjogYWZ0ZXIsXG4gIGdsb2JhbC1ib3gtc2l6aW5nOiBjb250ZW50LWJveCxcbiAgZGVidWc6IChcbiAgICBpbWFnZTogaGlkZSxcbiAgICBjb2xvcjogcmdiYSgjNjZmLCAuMjUpLFxuICAgIG91dHB1dDogYmFja2dyb3VuZCxcbiAgICB0b2dnbGU6IHRvcCByaWdodCxcbiAgKSxcbikpO1xuXG5cbi8vIFZhbGlkIEtleXdvcmQgVmFsdWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSBQUklWQVRFOiBET05UJ1QgVE9VQ0hcbiRzdXN5LWtleXdvcmRzOiAoXG4gIGNvbnRhaW5lcjogYXV0byxcbiAgbWF0aDogc3RhdGljIGZsdWlkLFxuICBvdXRwdXQ6IGlzb2xhdGUgZmxvYXQsXG4gIGNvbnRhaW5lci1wb3NpdGlvbjogbGVmdCBjZW50ZXIgcmlnaHQsXG4gIGZsb3c6IGx0ciBydGwsXG4gIGd1dHRlci1wb3NpdGlvbjogYmVmb3JlIGFmdGVyIHNwbGl0IGluc2lkZSBpbnNpZGUtc3RhdGljLFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94IGNvbnRlbnQtYm94LFxuICBzcGFuOiBmdWxsLFxuICBlZGdlOiBmaXJzdCBhbHBoYSBsYXN0IG9tZWdhIGZ1bGwsXG4gIHNwcmVhZDogbmFycm93IHdpZGUgd2lkZXIsXG4gIGd1dHRlci1vdmVycmlkZTogbm8tZ3V0dGVycyBuby1ndXR0ZXIsXG4gIHJvbGU6IG5lc3QsXG4gIGNsZWFyOiBicmVhayBub2JyZWFrLFxuICBkZWJ1ZyBpbWFnZTogc2hvdyBoaWRlIHNob3ctY29sdW1ucyBzaG93LWJhc2VsaW5lLFxuICBkZWJ1ZyBvdXRwdXQ6IGJhY2tncm91bmQgb3ZlcmxheSxcbik7XG5cblxuLy8gUGFyc2UgU3VzeSBLZXl3b3JkcyBhbmQgTWFwc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQGZ1bmN0aW9uIHBhcnNlLXNldHRpbmdzKFxuICAkc2hvcnQ6ICRzdXN5XG4pIHtcbiAgJF9yZXR1cm46ICgpO1xuXG4gIEBpZiB0eXBlLW9mKCRzaG9ydCkgPT0gbWFwIHtcbiAgICAkX3JldHVybjogJHNob3J0O1xuICB9IEBlbHNlIHtcbiAgICBAZWFjaCAkaXRlbSBpbiAkc2hvcnQge1xuICAgICAgLy8gc3RyaW5nc1xuICAgICAgQGlmIHR5cGUtb2YoJGl0ZW0pID09IHN0cmluZyB7XG4gICAgICAgIEBlYWNoICRrZXksICR2YWx1ZSBpbiAkc3VzeS1rZXl3b3JkcyB7XG4gICAgICAgICAgQGlmIGluZGV4KCR2YWx1ZSwgJGl0ZW0pIHtcbiAgICAgICAgICAgICRfa2V5LXZhbHVlOiBhcHBlbmQoJGtleSwgJGl0ZW0pO1xuICAgICAgICAgICAgJF9yZXR1cm46IF9zdXN5LWRlZXAtc2V0KCRfcmV0dXJuLCAkX2tleS12YWx1ZS4uLik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAvLyBtYXBzXG4gICAgICB9IEBlbHNlIGlmIHR5cGUtb2YoJGl0ZW0pID09IG1hcCB7XG4gICAgICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sICRpdGVtKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuXG5cbi8vIFBhcnNlIENvbHVtbnMgJiBHdXR0ZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQGZ1bmN0aW9uIHBhcnNlLWxheW91dChcbiAgJHNob3J0XG4pIHtcbiAgJF9yZXR1cm46ICgpO1xuICAkX2NvbHVtbnM6ICgpO1xuICAkX2d1dHRlcnM6IG51bGw7XG5cbiAgQGlmIG5vdCh1bml0bGVzcyhudGgobnRoKCRzaG9ydCwgMSksIDEpKSkge1xuICAgICRfZ3V0dGVyczogbnRoKCRzaG9ydCwgMSk7XG4gIH0gQGVsc2Uge1xuICAgICRfY29sdW1uczogKGNvbHVtbnM6IG50aCgkc2hvcnQsIDEpKTtcbiAgICAkX2d1dHRlcnM6IGlmKGxlbmd0aCgkc2hvcnQpID4gMSwgbnRoKCRzaG9ydCwgMiksICRfZ3V0dGVycyk7XG4gIH1cblxuICBAaWYgdHlwZS1vZigkX2d1dHRlcnMpID09IGxpc3QgYW5kIGxlbmd0aCgkX2d1dHRlcnMpID4gMCB7XG4gICAgJF9ndXR0ZXJzOiAoXG4gICAgICBndXR0ZXJzOiBudGgoJF9ndXR0ZXJzLCAyKSAvIG50aCgkX2d1dHRlcnMsIDEpLFxuICAgICAgY29sdW1uLXdpZHRoOiBudGgoJF9ndXR0ZXJzLCAxKSxcbiAgICApO1xuICB9IEBlbHNlIHtcbiAgICAkX2d1dHRlcnM6IGlmKCRfZ3V0dGVycywgKGd1dHRlcnM6ICRfZ3V0dGVycyksICgpKTtcbiAgfVxuXG4gICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sICRfY29sdW1ucyk7XG4gICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sICRfZ3V0dGVycyk7XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cblxuXG4vLyBQYXJzZSBHcmlkL0NvbnRleHRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuQGZ1bmN0aW9uIHBhcnNlLWdyaWQoXG4gICRzaG9ydDogJHN1c3lcbikge1xuICAkX3JldHVybjogcGFyc2Utc2V0dGluZ3MoJHNob3J0KTtcbiAgJF9sYXlvdXQ6ICgpO1xuXG4gIEBpZiB0eXBlLW9mKCRzaG9ydCkgPT0gbWFwIHtcbiAgICAkX3JldHVybjogJHNob3J0O1xuICB9IEBlbHNlIHtcbiAgICBAZWFjaCAkaXRlbSBpbiAkc2hvcnQge1xuICAgICAgLy8gbnVtYmVyIG9yIGxpc3RcbiAgICAgIEBpZiB0eXBlLW9mKCRpdGVtKSA9PSBudW1iZXIgb3IgdHlwZS1vZigkaXRlbSkgPT0gbGlzdCB7XG4gICAgICAgIEBpZiB0eXBlLW9mKCRpdGVtKSA9PSBsaXN0IG9yIHVuaXRsZXNzKCRpdGVtKSB7XG4gICAgICAgICAgJF9sYXlvdXQ6IGFwcGVuZCgkX2xheW91dCwgJGl0ZW0pO1xuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAoY29udGFpbmVyOiAkaXRlbSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgJF9sYXlvdXQ6IGlmKGxlbmd0aCgkX2xheW91dCkgPiAwLCBwYXJzZS1sYXlvdXQoJF9sYXlvdXQpLCAkX2xheW91dCk7XG4gIH1cblxuICBAcmV0dXJuIG1hcC1tZXJnZSgkX3JldHVybiwgJF9sYXlvdXQpO1xufVxuXG5cbi8vIFBhcnNlIFNwYW5cbi8vIC0tLS0tLS0tLS1cbkBmdW5jdGlvbiBwYXJzZS1zcGFuKFxuICAkc2hvcnQsXG4gICRrZXk6IHNwYW5cbikge1xuICAkX3JldHVybjogKCk7XG5cbiAgQGlmIHR5cGUtb2YoJHNob3J0KSA9PSBtYXAge1xuICAgICRfcmV0dXJuOiAkc2hvcnQ7XG4gIH0gQGVsc2Uge1xuICAgICRfYXQ6IGluZGV4KCRzaG9ydCwgYXQpO1xuXG4gICAgQGlmICRfYXQge1xuICAgICAgJF9sb2NpOiAkX2F0ICsgMTtcbiAgICAgICRfbG9jYXRpb246IG50aCgkc2hvcnQsICRfbG9jaSk7XG4gICAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAobG9jYXRpb246ICRfbG9jYXRpb24pKTtcbiAgICAgICRzaG9ydDogc2V0LW50aCgkc2hvcnQsICRfYXQsIG51bGwpO1xuICAgICAgJHNob3J0OiBzZXQtbnRoKCRzaG9ydCwgJF9sb2NpLCBudWxsKTtcbiAgICB9XG5cbiAgICAkX2k6IDE7XG4gICAgJF9zcGFuOiAoKTtcblxuICAgIEB3aGlsZSAkX2kgPD0gbGVuZ3RoKCRzaG9ydCkge1xuICAgICAgJF90aGlzOiBudGgoJHNob3J0LCAkX2kpO1xuXG4gICAgICBAaWYgdHlwZS1vZigkX3RoaXMpID09IG51bWJlciB7XG4gICAgICAgICRfc3BhbjogYXBwZW5kKCRfc3BhbiwgJF90aGlzKTtcbiAgICAgICAgJHNob3J0OiBzZXQtbnRoKCRzaG9ydCwgJF9pLCBudWxsKTtcbiAgICAgIH0gQGVsc2UgaWYgJF90aGlzID09IG9mIHtcbiAgICAgICAgJHNob3J0OiBzZXQtbnRoKCRzaG9ydCwgJF9pLCBudWxsKTtcbiAgICAgICAgJF9pOiBsZW5ndGgoJHNob3J0KSArIDE7XG4gICAgICB9XG5cbiAgICAgICRfaTogJF9pICsgMTtcbiAgICB9XG5cbiAgICBAaWYgbGVuZ3RoKCRfc3BhbikgPiAwIHtcbiAgICAgICRfc3BhbjogaWYobGVuZ3RoKCRfc3BhbikgPT0gMSwgbnRoKCRfc3BhbiwgMSksICRfc3Bhbik7XG4gICAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAoJGtleTogJF9zcGFuKSk7XG4gICAgfVxuXG4gICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgcGFyc2UtZ3JpZCgkc2hvcnQpKTtcbiAgfVxuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG5cblxuLy8gUGFyc2UgR3V0dGVyc1xuLy8gLS0tLS0tLS0tLS0tLVxuQGZ1bmN0aW9uIHBhcnNlLWd1dHRlcnMoXG4gICRzaG9ydDogJHN1c3lcbikge1xuICAkX2d1dHRlcnM6IHBhcnNlLXNwYW4oJHNob3J0LCBndXR0ZXItb3ZlcnJpZGUpO1xuICAkX3NwYW46IHN1c3ktZ2V0KGd1dHRlci1vdmVycmlkZSwgJF9ndXR0ZXJzKTtcblxuICBAaWYgJF9zcGFuIGFuZCBub3QobWFwLWdldCgkX2d1dHRlcnMsIGNvbHVtbnMpKSB7XG4gICAgJF9jb250ZXh0OiAoKTtcbiAgICAkX25ldzogKCk7XG5cbiAgICBAZWFjaCAkaXRlbSBpbiAkX3NwYW4ge1xuICAgICAgQGlmIHR5cGUtb2YoJGl0ZW0pID09IG51bWJlciBhbmQgdW5pdGxlc3MoJGl0ZW0pIHtcbiAgICAgICAgJF9jb250ZXh0OiBhcHBlbmQoJF9jb250ZXh0LCAkaXRlbSk7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgJF9uZXc6IGFwcGVuZCgkX25ldywgJGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgICRfY29udGV4dDogcGFyc2UtZ3JpZCgkX2NvbnRleHQpO1xuICAgICRfbmV3OiBpZihsZW5ndGgoJF9uZXcpID09IDAsIG51bGwsICRfbmV3KTtcbiAgICAkX25ldzogaWYobGVuZ3RoKCRfbmV3KSA9PSAxLCBudGgoJF9uZXcsIDEpLCAkX25ldyk7XG4gICAgJF9uZXc6IChndXR0ZXItb3ZlcnJpZGU6IGlmKCRfbmV3ICE9ICRfc3BhbiwgJF9uZXcsICRfc3BhbikpO1xuXG4gICAgJF9ndXR0ZXJzOiBtYXAtbWVyZ2UoJF9ndXR0ZXJzLCAkX25ldyk7XG4gICAgJF9ndXR0ZXJzOiBtYXAtbWVyZ2UoJF9ndXR0ZXJzLCAkX2NvbnRleHQpO1xuICB9XG5cbiAgQHJldHVybiAkX2d1dHRlcnM7XG59XG4iLCIvLyBWYWxpZGF0aW9uXG4vLyA9PT09PT09PT09XG5cblxuLy8gVmFsaWRhdGUgQ29sdW1uIE1hdGhcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AZnVuY3Rpb24gdmFsaWQtY29sdW1uLW1hdGgoXG4gICRtYXRoLFxuICAkY29sdW1uLXdpZHRoXG4pIHtcbiAgQGlmICRtYXRoID09IHN0YXRpYyBhbmQgbm90KCRjb2x1bW4td2lkdGgpIHtcbiAgICBAZXJyb3IgJ1N0YXRpYyBtYXRoIHJlcXVpcmVzIGEgdmFsaWQgY29sdW1uLXdpZHRoIHNldHRpbmcuJztcbiAgfVxuXG4gIEByZXR1cm4gJGNvbHVtbi13aWR0aDtcbn1cbiIsIi8vIEdyaWQgU3ludGF4XG4vLyA9PT09PT09PT09PVxuXG5cbi8vIExheW91dFxuLy8gLS0tLS0tXG4vLyBTZXQgYSBuZXcgbGF5b3V0IHVzaW5nIGEgc2hvcnRoYW5kXG4vLyAtICRsYXlvdXQ6IDxzZXR0aW5ncz5cbi8vIC0gJGNsZWFuOiBib29sZWFuXG5AbWl4aW4gbGF5b3V0KFxuICAkbGF5b3V0LFxuICAkY2xlYW46IGZhbHNlXG4pIHtcbiAgJGluc3BlY3QgIDogJGxheW91dDtcbiAgJHN1c3kgICAgIDogX2dldC1sYXlvdXQoJGxheW91dCwgJGNsZWFuKSAhZ2xvYmFsO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChsYXlvdXQsICRpbnNwZWN0KTtcbn1cblxuXG4vLyBVc2UgR3JpZFxuLy8gLS0tLS0tLS1cbi8vIFVzZSBhbiBhcmJpdHJhcnkgbGF5b3V0IGZvciBhIHNlY3Rpb24gb2YgY29kZVxuLy8gLSAkbGF5b3V0OiA8c2V0dGluZ3M+XG4vLyAtICRjbGVhbjogYm9vbGVhblxuQG1peGluIHdpdGgtbGF5b3V0KFxuICAkbGF5b3V0LFxuICAkY2xlYW46IGZhbHNlXG4pIHtcbiAgJGluc3BlY3QgIDogJGxheW91dDtcbiAgJG9sZCAgICAgIDogJHN1c3k7XG4gICRzdXN5ICAgICA6IF9nZXQtbGF5b3V0KCRsYXlvdXQsICRjbGVhbikgIWdsb2JhbDtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3Qod2l0aC1sYXlvdXQsICRpbnNwZWN0KTtcblxuICBAY29udGVudDtcblxuICAkc3VzeTogJG9sZCAhZ2xvYmFsO1xufVxuXG5cbi8vIExheW91dFxuLy8gLS0tLS0tXG4vLyBSZXR1cm4gYSBwYXJzZWQgbGF5b3V0IG1hcCBiYXNlZCBvbiBzaG9ydGhhbmQgc3ludGF4XG4vLyAtICRsYXlvdXQ6IDxzZXR0aW5ncz5cbkBmdW5jdGlvbiBsYXlvdXQoXG4gICRsYXlvdXQ6ICRzdXN5XG4pIHtcbiAgQHJldHVybiBwYXJzZS1ncmlkKCRsYXlvdXQpO1xufVxuXG5cbi8vIEdldCBMYXlvdXRcbi8vIC0tLS0tLS0tLS1cbi8vIFJldHVybiBhIG5ldyBsYXlvdXQgYmFzZWQgb24gY3VycmVudCBhbmQgZ2l2ZW4gc2V0dGluZ3Ncbi8vIC0gJGxheW91dDogPHNldHRpbmdzPlxuLy8gLSAkY2xlYW46IGJvb2xlYW5cbkBmdW5jdGlvbiBfZ2V0LWxheW91dChcbiAgJGxheW91dCxcbiAgJGNsZWFuOiBmYWxzZVxuKSB7XG4gICRsYXlvdXQ6IGxheW91dCgkbGF5b3V0KTtcbiAgQHJldHVybiBpZigkY2xlYW4sICRsYXlvdXQsIF9zdXN5LWRlZXAtbWVyZ2UoJHN1c3ksICRsYXlvdXQpKTtcbn1cbiIsIi8vIFN1c3kgQm94IFNpemluZ1xuLy8gPT09PT09PT09PT09PT09PT1cblxuLy8gR2xvYmFsIEJveCBTaXppbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZXQgYSBib3ggbW9kZWwgZ2xvYmFsbHkgb24gYWxsIGVsZW1lbnRzLlxuLy8gLSBbJGJveF06IGJvcmRlci1ib3ggfCBjb250ZW50LWJveFxuLy8gLSBbJGluaGVyaXRdOiB0cnVlIHwgZmFsc2VcbkBtaXhpbiBnbG9iYWwtYm94LXNpemluZyhcbiAgJGJveDogc3VzeS1nZXQoZ2xvYmFsLWJveC1zaXppbmcpLFxuICAkaW5oZXJpdDogZmFsc2Vcbikge1xuICAkaW5zcGVjdDogJGJveDtcblxuICBAaWYgJGluaGVyaXQge1xuICAgIEBhdC1yb290IHtcbiAgICAgICBodG1sIHsgQGluY2x1ZGUgb3V0cHV0KChib3gtc2l6aW5nOiAkYm94KSk7IH1cbiAgICAgICAqLCAqOmJlZm9yZSwgKjphZnRlciB7IGJveC1zaXppbmc6IGluaGVyaXQ7IH1cbiAgICAgfVxuICB9IEBlbHNlIHtcbiAgICAqLCAqOmJlZm9yZSwgKjphZnRlciB7IEBpbmNsdWRlIG91dHB1dCgoYm94LXNpemluZzogJGJveCkpOyB9XG4gIH1cblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QoZ2xvYmFsLWJveC1zaXppbmcsICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgdXBkYXRlLWJveC1tb2RlbCgkYm94KTtcbn1cblxuLy8gQm9yZGVyIEJveCBTaXppbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tXG4vLyBBIGxlZ2FjeSBzaG9ydGN1dC4uLlxuLy8gLSBbJGluaGVyaXRdOiB0cnVlIHwgZmFsc2VcbkBtaXhpbiBib3JkZXItYm94LXNpemluZyhcbiAgJGluaGVyaXQ6IGZhbHNlXG4pIHtcbiAgQGluY2x1ZGUgZ2xvYmFsLWJveC1zaXppbmcoYm9yZGVyLWJveCwgJGluaGVyaXQpO1xufVxuXG4vLyBVcGRhdGUgQm94IE1vZGVsXG4vLyAtLS0tLS0tLS0tLS0tLS0tXG4vLyBQUklWQVRFOiBVcGRhdGVzIGdsb2JhbCBib3ggbW9kZWwgc2V0dGluZ1xuQG1peGluIHVwZGF0ZS1ib3gtbW9kZWwoXG4gICRib3hcbikge1xuICBAaWYgJGJveCAhPSBzdXN5LWdldChnbG9iYWwtYm94LXNpemluZykge1xuICBAaW5jbHVkZSBzdXN5LXNldChnbG9iYWwtYm94LXNpemluZywgJGJveCk7XG4gIH1cbn1cbiIsIi8vIENvbnRleHQgU3ludGF4XG4vLyA9PT09PT09PT09PT09PVxuXG4vLyBOZXN0ZWQgW2Z1bmN0aW9uXVxuLy8gLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiBhIHN1YnNldCBncmlkIGZvciBuZXN0ZWQgY29udGV4dC5cbi8vIC0gJGNvbnRleHQgICA6IDxzcGFuPlxuQGZ1bmN0aW9uIG5lc3RlZChcbiAgJGNvbnRleHRcbikge1xuICAkY29udGV4dCAgICA6IHBhcnNlLXNwYW4oJGNvbnRleHQpO1xuICAkc3BhbiAgICAgICA6IHN1c3ktZ2V0KHNwYW4sICRjb250ZXh0KTtcbiAgJGxvY2F0aW9uICAgOiBnZXQtbG9jYXRpb24oJGNvbnRleHQpO1xuICAkY29sdW1ucyAgICA6IHN1c3ktZ2V0KGNvbHVtbnMsICRjb250ZXh0KTtcblxuICBAcmV0dXJuIHN1c3ktc2xpY2UoJHNwYW4sICRsb2NhdGlvbiwgJGNvbHVtbnMpO1xufVxuXG4vLyBOZXN0ZWQgW21peGluXVxuLy8gLS0tLS0tLS0tLS0tLS1cbi8vIFVzZSBhIHN1YnNldCBncmlkIGZvciBhIG5lc3RlZCBjb250ZXh0XG4vLyAtICRjb250ZXh0ICAgOiA8c3Bhbj5cbi8vIC0gQGNvbnRlbnQgICA6IDxjb250ZW50PlxuQG1peGluIG5lc3RlZChcbiAgJGNvbnRleHRcbikge1xuICAkaW5zcGVjdCAgOiAkY29udGV4dDtcbiAgJGNvbnRleHQgIDogcGFyc2Utc3BhbigkY29udGV4dCk7XG4gICRvbGQgICAgICA6IHN1c3ktZ2V0KGNvbHVtbnMpO1xuICAkc3VzeSAgICAgOiBtYXAtbWVyZ2UoJHN1c3ksIChjb2x1bW5zOiBuZXN0ZWQoJGNvbnRleHQpKSkgIWdsb2JhbDtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QobmVzdGVkLCAkaW5zcGVjdCk7XG4gIEBjb250ZW50O1xuXG4gICRzdXN5ICAgICA6IG1hcC1tZXJnZSgkc3VzeSwgKGNvbHVtbnM6ICRvbGQpKSAhZ2xvYmFsO1xufVxuIiwiLy8gQmFja2dyb3VuZCBHcmlkIFN5bnRheFxuLy8gPT09PT09PT09PT09PT09PT09PT09PVxuXG4kc3VzeS1vdmVybGF5LWdyaWQtaGVhZC1leGlzdHM6IGZhbHNlO1xuXG5cbi8vIFNob3cgR3JpZC9zXG4vLyAtLS0tLS0tLS0tLVxuLy8gU2hvdyBncmlkIG9uIGFueSBlbGVtZW50IHVzaW5nIGVpdGhlciBiYWNrZ3JvdW5kIG9yIG92ZXJsYXkuXG4vLyAtIFskZ3JpZF0gIDogPHNldHRpbmdzPlxuQG1peGluIHNob3ctZ3JpZChcbiAgJGdyaWQ6ICRzdXN5XG4pIHtcbiAgJGluc3BlY3Q6ICRncmlkO1xuICAkX291dHB1dDogZGVidWctZ2V0KG91dHB1dCwgJGdyaWQpO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChzaG93LWdyaWQsICRpbnNwZWN0KTtcbiAgQGlmICRfb3V0cHV0ID09IG92ZXJsYXkgYW5kIHN1c3ktZ2V0KGRlYnVnIGltYWdlLCAkZ3JpZCkgIT0gaGlkZSB7XG4gICAgQGluY2x1ZGUgb3ZlcmxheS1ncmlkKCRncmlkKTtcbiAgfSBAZWxzZSB7XG4gICAgQGluY2x1ZGUgYmFja2dyb3VuZC1ncmlkKCRncmlkKTtcbiAgfVxufVxuXG5AbWl4aW4gc2hvdy1ncmlkcyhcbiAgJGdyaWQ6ICRzdXN5XG4pIHtcbiAgQGluY2x1ZGUgc2hvdy1ncmlkKCRncmlkKTtcbn1cblxuLy8gQmFja2dyb3VuZCBHcmlkXG4vLyAtLS0tLS0tLS0tLS0tLS1cbi8vIFNob3cgYSBncmlkIGJhY2tncm91bmQgb24gYW55IGVsZW1lbnQuXG4vLyAtIFskZ3JpZF0gIDogPHNldHRpbmdzPlxuQG1peGluIGJhY2tncm91bmQtZ3JpZChcbiAgJGdyaWQ6ICRzdXN5XG4pIHtcbiAgJGluc3BlY3QgIDogJGdyaWQ7XG4gICRfb3V0cHV0ICA6IGdldC1iYWNrZ3JvdW5kKCRncmlkKTtcblxuICBAaWYgbGVuZ3RoKCRfb3V0cHV0KSA+IDAge1xuICAgICRfZmxvdzogc3VzeS1nZXQoZmxvdywgJGdyaWQpO1xuXG4gICAgJF9pbWFnZTogKCk7XG4gICAgQGVhY2ggJG5hbWUsICRsYXllciBpbiBtYXAtZ2V0KCRfb3V0cHV0LCBpbWFnZSkge1xuICAgICAgJF9kaXJlY3Rpb246IGlmKCRuYW1lID09IGJhc2VsaW5lLCB0byBib3R0b20sIHRvIHRvKCRfZmxvdykpO1xuICAgICAgJF9pbWFnZTogYXBwZW5kKCRfaW1hZ2UsIGxpbmVhci1ncmFkaWVudCgkX2RpcmVjdGlvbiwgJGxheWVyKSwgY29tbWEpO1xuICAgIH1cbiAgICAkX291dHB1dDogbWFwLW1lcmdlKCRfb3V0cHV0LCAoaW1hZ2U6ICRfaW1hZ2UpKTtcblxuICAgIEBpbmNsdWRlIGJhY2tncm91bmQtZ3JpZC1vdXRwdXQoJF9vdXRwdXQuLi4pO1xuICAgIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChiYWNrZ3JvdW5kLWdyaWQsICRpbnNwZWN0KTtcbiAgfVxufVxuXG5cbi8vIE92ZXJsYXkgR3JpZFxuLy8gLS0tLS0tLS0tLS0tXG4vLyBHZW5lcmF0ZSBhbiBpY29uIHRvIHRyaWdnZXIgZ3JpZC1vdmVybGF5cyBvbiBhbnkgZ2l2ZW4gZWxlbWVudHMuXG4vLyAkZ3JpZHMuLi4gIDogPHNlbGVjdG9yPiBbPHNldHRpbmdzPl0gWywgPHNlbGVjdG9yPl0qXG5AbWl4aW4gb3ZlcmxheS1ncmlkIChcbiAgJGdyaWQ6ICRzdXN5XG4pIHtcbiAgQGlmIG5vdCgkc3VzeS1vdmVybGF5LWdyaWQtaGVhZC1leGlzdHMpIHtcbiAgICBAYXQtcm9vdCBoZWFkIHsgQGluY2x1ZGUgb3ZlcmxheS1oZWFkKCRncmlkKTsgfVxuICAgIEBhdC1yb290IGhlYWQ6YmVmb3JlIHsgQGluY2x1ZGUgb3ZlcmxheS10cmlnZ2VyOyB9XG4gICAgQGF0LXJvb3QgaGVhZDpob3ZlciB7IEBpbmNsdWRlIG92ZXJsYXktdHJpZ2dlci1ob3ZlcjsgfVxuICAgICRzdXN5LW92ZXJsYXktZ3JpZC1oZWFkLWV4aXN0czogdHJ1ZSAhZ2xvYmFsO1xuICB9XG5cbiAgaGVhZDpob3ZlciB+ICYsXG4gIGhlYWQ6aG92ZXIgfiBib2R5ICYge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAmOmJlZm9yZSB7XG4gICAgICBAaW5jbHVkZSBncmlkLW92ZXJsYXktYmFzZTtcbiAgICAgIEBpbmNsdWRlIGJhY2tncm91bmQtZ3JpZCgkZ3JpZCk7XG4gICAgfVxuICB9XG59XG5cblxuLy8gW1ByaXZhdGVdIE92ZXJsYXkgVHJpZ2dlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQG1peGluIG92ZXJsYXktdHJpZ2dlciB7XG4gIGNvbnRlbnQ6IFwifHx8XCI7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwYWRkaW5nOiA1cHggMTBweDtcbiAgZm9udDoge1xuICAgIGZhbWlseTogc2Fucy1zZXJpZjtcbiAgICBzaXplOiAxNnB4O1xuICAgIHdlaWdodDogYm9sZDtcbiAgfVxufVxuXG5cbi8vIFtQcml2YXRlXSBPdmVybGF5IFRyaWdnZXIgSG92ZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBtaXhpbiBvdmVybGF5LXRyaWdnZXItaG92ZXIge1xuICBiYWNrZ3JvdW5kOiByZ2JhKHdoaXRlLCAuNSk7XG4gIGNvbG9yOiByZWQ7XG59XG5cblxuLy8gW1ByaXZhdGVdIE92ZXJsYXkgSGVhZFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gPGhlYWQ+IHN0eWxlcyB0byBjcmVhdGUgZ3JpZCBvdmVybGF5IHRvZ2dsZVxuQG1peGluIG92ZXJsYXktaGVhZCAoXG4gICRncmlkOiAkc3VzeVxuKSB7XG4gICRfdG9nZ2xlOiBkZWJ1Zy1nZXQodG9nZ2xlLCAkZ3JpZCk7XG4gICRfaG9yejogbnVsbDtcbiAgJF92ZXJ0OiBudWxsO1xuXG4gIEBlYWNoICRzaWRlIGluICRfdG9nZ2xlIHtcbiAgICAkX2hvcno6IGlmKCRzaWRlID09IGxlZnQgb3IgJHNpZGUgPT0gcmlnaHQsICRzaWRlLCAkX2hvcnopO1xuICAgICRfdmVydDogaWYoJHNpZGUgPT0gdG9wIG9yICRzaWRlID09IGJvdHRvbSwgJHNpZGUsICRfdmVydCk7XG4gIH1cblxuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGZpeGVkO1xuICAjeyRfaG9yen06IDEwcHg7XG4gICN7JF92ZXJ0fTogMTBweDtcbiAgei1pbmRleDogOTk5O1xuICBjb2xvcjogIzMzMztcbiAgYmFja2dyb3VuZDogcmdiYSh3aGl0ZSwgLjI1KTtcbn1cblxuXG4vLyBbUHJpdmF0ZV0gR3JpZCBPdmVybGF5IEJhc2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQmFzZSBzdHlsZXMgZm9yIGdlbmVyYXRpbmcgYSBncmlkIG92ZXJsYXlcbkBtaXhpbiBncmlkLW92ZXJsYXktYmFzZSgpIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgcmlnaHQ6IDA7XG4gIGNvbnRlbnQ6IFwiIFwiO1xuICB6LWluZGV4OiA5OTg7XG59XG5cblxuLy8gR2V0IFN5bW1ldHJpY2FsIEJhY2tncm91bmRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtICRncmlkOiA8bWFwPlxuQGZ1bmN0aW9uIGdldC1iYWNrZ3JvdW5kLXN5bShcbiAgJGdyaWRcbikge1xuICAkZ3JpZCAgICAgICAgICAgOiBwYXJzZS1ncmlkKCRncmlkKTtcbiAgJF9ndXR0ZXJzICAgICAgIDogc3VzeS1nZXQoZ3V0dGVycywgJGdyaWQpO1xuICAkX2NvbHVtbi13aWR0aCAgOiBzdXN5LWdldChjb2x1bW4td2lkdGgsICRncmlkKTtcbiAgJF9tYXRoICAgICAgICAgIDogc3VzeS1nZXQobWF0aCwgJGdyaWQpO1xuXG4gICRfY29sb3IgICAgICAgICA6IGRlYnVnLWdldChjb2xvcik7XG4gICRfdHJhbnMgICAgICAgICA6IHRyYW5zcGFyZW50O1xuICAkX2xpZ2h0ICAgICAgICAgOiBsaWdodGVuKCRfY29sb3IsIDE1JSk7XG5cbiAgJF9lbmQgICAgICAgICAgIDogMSArICRfZ3V0dGVycztcbiAgJF9hZnRlciAgICAgICAgIDogcGVyY2VudGFnZSgxLyRfZW5kKTtcbiAgJF9zdG9wcyAgICAgICAgIDogKCk7XG4gICRfc2l6ZSAgICAgICAgICA6IHNwYW4oMSAkZ3JpZCB3aWRlKTtcblxuICBAaWYgaXMtaW5zaWRlKCRncmlkKSB7XG4gICAgJF9zdG9wczogJF9jb2xvciwgJF9saWdodDtcbiAgfSBAZWxzZSBpZiBpcy1zcGxpdCgkZ3JpZCkge1xuICAgICRfc3BsaXQ6ICRfZ3V0dGVycy8yO1xuICAgICRfYmVmb3JlOiBwZXJjZW50YWdlKCRfc3BsaXQvJF9lbmQpO1xuICAgICRfYWZ0ZXI6IHBlcmNlbnRhZ2UoKDEgKyAkX3NwbGl0KS8kX2VuZCk7XG4gICAgJF9zdG9wczogJF90cmFucyAkX2JlZm9yZSwgJF9jb2xvciAkX2JlZm9yZSwgJF9saWdodCAkX2FmdGVyLCAkX3RyYW5zICRfYWZ0ZXI7XG4gIH0gQGVsc2Uge1xuICAgICRfc3RvcHM6ICRfY29sb3IsICRfbGlnaHQgJF9hZnRlciwgJF90cmFucyAkX2FmdGVyO1xuICB9XG5cbiAgQGlmICRfbWF0aCA9PSBzdGF0aWMge1xuICAgICRfc2l6ZTogdmFsaWQtY29sdW1uLW1hdGgoJF9tYXRoLCAkX2NvbHVtbi13aWR0aCkgKiAkX2VuZDtcbiAgfVxuXG4gICRfb3V0cHV0OiAoXG4gICAgaW1hZ2U6IChjb2x1bW5zOiAkX3N0b3BzKSxcbiAgICBzaXplOiAkX3NpemUsXG4gICk7XG5cbiAgQHJldHVybiAkX291dHB1dDtcbn1cblxuXG4vLyBHZXQgQXN5bW1ldHJpY2FsIEluc2lkZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gJGdyaWQ6IDxzZXR0aW5ncz5cbkBmdW5jdGlvbiBnZXQtYXN5bS1pbnNpZGUoXG4gICRncmlkXG4pIHtcbiAgJGdyaWQgICAgIDogcGFyc2UtZ3JpZCgkZ3JpZCk7XG4gICRfY29sdW1ucyA6IHN1c3ktZ2V0KGNvbHVtbnMsICRncmlkKTtcblxuICAkX2NvbG9yICAgOiBkZWJ1Zy1nZXQoY29sb3IpO1xuICAkX2xpZ2h0ICAgOiBsaWdodGVuKCRfY29sb3IsIDE1JSk7XG4gICRfc3RvcHMgICA6ICgpO1xuXG4gIEBmb3IgJGxvY2F0aW9uIGZyb20gMSB0aHJvdWdoIHN1c3ktY291bnQoJF9jb2x1bW5zKSB7XG4gICAgJHRoaXMtc3RvcDogKCk7XG5cbiAgICBAaWYgJGxvY2F0aW9uID09IDEge1xuICAgICAgJHRoaXMtc3RvcDogYXBwZW5kKCR0aGlzLXN0b3AsICRfY29sb3IsIGNvbW1hKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRzdGFydDogcGFyc2Utc3BhbigxIGF0ICRsb2NhdGlvbiAkZ3JpZCk7XG4gICAgICAkc3RhcnQ6IGdldC1pc29sYXRpb24oJHN0YXJ0KTtcbiAgICAgICR0aGlzLXN0b3A6IGFwcGVuZCgkdGhpcy1zdG9wLCAkX2NvbG9yICRzdGFydCwgY29tbWEpO1xuICAgIH1cblxuICAgIEBpZiAkbG9jYXRpb24gPT0gc3VzeS1jb3VudCgkX2NvbHVtbnMpIHtcbiAgICAgICR0aGlzLXN0b3A6IGFwcGVuZCgkdGhpcy1zdG9wLCAkX2xpZ2h0LCBjb21tYSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkX2VuZDogcGFyc2Utc3BhbigxIGF0ICgkbG9jYXRpb24gKyAxKSAkZ3JpZCk7XG4gICAgICAkX2VuZDogZ2V0LWlzb2xhdGlvbigkX2VuZCk7XG4gICAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgJF9saWdodCAkX2VuZCwgY29tbWEpO1xuICAgIH1cblxuICAgICRfc3RvcHM6IGpvaW4oJF9zdG9wcywgJHRoaXMtc3RvcCwgY29tbWEpO1xuICB9XG5cbiAgQHJldHVybiAkX3N0b3BzO1xufVxuXG5cbi8vIEdldCBBc3ltbWV0cmljYWwgU3BsaXRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gJGdyaWQ6IDxzZXR0aW5ncz5cbkBmdW5jdGlvbiBnZXQtYXN5bS1zcGxpdChcbiAgJGdyaWRcbikge1xuICAkZ3JpZCAgICAgOiBwYXJzZS1ncmlkKCRncmlkKTtcbiAgJF9jb2x1bW5zIDogc3VzeS1nZXQoY29sdW1ucywgJGdyaWQpO1xuXG4gICRfY29sb3IgICA6IGRlYnVnLWdldChjb2xvcik7XG4gICRfbGlnaHQgICA6IGxpZ2h0ZW4oJF9jb2xvciwgMTUlKTtcbiAgJF9zdG9wcyAgIDogKCk7XG5cbiAgQGZvciAkbG9jYXRpb24gZnJvbSAxIHRocm91Z2ggc3VzeS1jb3VudCgkX2NvbHVtbnMpIHtcbiAgICAkdGhpcy1zdG9wOiAoKTtcblxuICAgICRzdGFydDogcGFyc2Utc3BhbigxIGF0ICRsb2NhdGlvbiAkZ3JpZCk7XG4gICAgJHN0YXJ0OiBnZXQtaXNvbGF0aW9uKCRzdGFydCk7XG4gICAgJHRoaXMtc3RvcDogYXBwZW5kKCR0aGlzLXN0b3AsIHRyYW5zcGFyZW50ICRzdGFydCwgY29tbWEpO1xuICAgICR0aGlzLXN0b3A6IGFwcGVuZCgkdGhpcy1zdG9wLCAkX2NvbG9yICRzdGFydCwgY29tbWEpO1xuXG4gICAgJF9lbmQ6ICRzdGFydCArIHNwYW4oMSBhdCAkbG9jYXRpb24gJGdyaWQpO1xuICAgICR0aGlzLXN0b3A6IGFwcGVuZCgkdGhpcy1zdG9wLCAkX2xpZ2h0ICRfZW5kLCBjb21tYSk7XG4gICAgJHRoaXMtc3RvcDogYXBwZW5kKCR0aGlzLXN0b3AsIHRyYW5zcGFyZW50ICRfZW5kLCBjb21tYSk7XG5cbiAgICAkX3N0b3BzOiBqb2luKCRfc3RvcHMsICR0aGlzLXN0b3AsIGNvbW1hKTtcbiAgfVxuXG4gIEByZXR1cm4gJF9zdG9wcztcbn1cblxuXG4vLyBHZXQgQXN5bW1ldHJpY2FsIE91dHNpZGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSAkZ3JpZDogPHNldHRpbmdzPlxuQGZ1bmN0aW9uIGdldC1hc3ltLW91dHNpZGUoXG4gICRncmlkXG4pIHtcbiAgJGdyaWQgICAgIDogcGFyc2UtZ3JpZCgkZ3JpZCk7XG4gICRfY29sdW1ucyA6IHN1c3ktZ2V0KGNvbHVtbnMsICRncmlkKTtcblxuICAkX2NvbG9yICAgOiBkZWJ1Zy1nZXQoY29sb3IpO1xuICAkX2xpZ2h0ICAgOiBsaWdodGVuKCRfY29sb3IsIDE1JSk7XG4gICRfdHJhbnMgICA6IHRyYW5zcGFyZW50O1xuICAkX3N0b3BzICAgOiAoKTtcblxuICBAZm9yICRsb2NhdGlvbiBmcm9tIDEgdGhyb3VnaCBzdXN5LWNvdW50KCRfY29sdW1ucykge1xuICAgICR0aGlzLXN0b3A6ICgpO1xuXG4gICAgQGlmICRsb2NhdGlvbiA9PSAxIHtcbiAgICAgICR0aGlzLXN0b3A6IGFwcGVuZCgkdGhpcy1zdG9wLCAkX2NvbG9yLCBjb21tYSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkc3RhcnQ6IHBhcnNlLXNwYW4oMSBhdCAkbG9jYXRpb24gJGdyaWQpO1xuICAgICAgJHN0YXJ0OiBnZXQtaXNvbGF0aW9uKCRzdGFydCk7XG4gICAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgJF9jb2xvciAkc3RhcnQsIGNvbW1hKTtcbiAgICB9XG5cbiAgICBAaWYgJGxvY2F0aW9uID09IHN1c3ktY291bnQoJF9jb2x1bW5zKSB7XG4gICAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgJF9saWdodCwgY29tbWEpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJGd1dHRlcjogZ2V0LXNwYW4td2lkdGgoZmlyc3QgJGxvY2F0aW9uICRncmlkKTtcblxuICAgICAgJF9lbmQ6IHBhcnNlLXNwYW4oMSBhdCAoJGxvY2F0aW9uICsgMSkgJGdyaWQpO1xuICAgICAgJF9lbmQ6IGdldC1pc29sYXRpb24oJF9lbmQpO1xuXG4gICAgICAkZ3V0dGVyOiAkX2xpZ2h0ICRndXR0ZXIsICRfdHJhbnMgJGd1dHRlciwgJF90cmFucyAkX2VuZDtcbiAgICAgICR0aGlzLXN0b3A6IGpvaW4oJHRoaXMtc3RvcCwgJGd1dHRlciwgY29tbWEpO1xuICAgIH1cblxuICAgICRfc3RvcHM6IGpvaW4oJF9zdG9wcywgJHRoaXMtc3RvcCwgY29tbWEpO1xuICB9XG5cbiAgQHJldHVybiAkX3N0b3BzO1xufVxuXG5cbi8vIEdldCBBc3ltbWV0cmljYWwgQmFja2dyb3VuZFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtICRncmlkOiA8c2V0dGluZ3M+XG5AZnVuY3Rpb24gZ2V0LWJhY2tncm91bmQtYXN5bShcbiAgJGdyaWRcbikge1xuICAkX3N0b3BzOiAoKTtcblxuICBAaWYgaXMtaW5zaWRlKCRncmlkKSB7XG4gICAgJF9zdG9wczogZ2V0LWFzeW0taW5zaWRlKCRncmlkKTtcbiAgfSBAZWxzZSBpZiBpcy1zcGxpdCgkZ3JpZCkge1xuICAgICRfc3RvcHM6IGdldC1hc3ltLXNwbGl0KCRncmlkKTtcbiAgfSBAZWxzZSB7XG4gICAgJF9zdG9wczogZ2V0LWFzeW0tb3V0c2lkZSgkZ3JpZCk7XG4gIH1cblxuICBAcmV0dXJuIChpbWFnZTogKGNvbHVtbnM6ICRfc3RvcHMpKTtcbn1cblxuXG4vLyBHZXQgQmFja2dyb3VuZFxuLy8gLS0tLS0tLS0tLS0tLS1cbi8vIC0gJGdyaWQ6IDxzZXR0aW5ncz5cbkBmdW5jdGlvbiBnZXQtYmFja2dyb3VuZChcbiAgJGdyaWRcbikge1xuICAkZ3JpZCAgICAgOiBwYXJzZS1ncmlkKCRncmlkKTtcbiAgJF9zaG93ICAgIDogc3VzeS1nZXQoZGVidWcgaW1hZ2UsICRncmlkKTtcbiAgJF9yZXR1cm4gIDogKCk7XG5cbiAgQGlmICRfc2hvdyBhbmQgJF9zaG93ICE9ICdoaWRlJyB7XG4gICAgJF9jb2x1bW5zOiBzdXN5LWdldChjb2x1bW5zLCAkZ3JpZCk7XG5cbiAgICBAaWYgJF9zaG93ICE9ICdzaG93LWJhc2VsaW5lJyB7XG4gICAgICAkX3N5bTogaXMtc3ltbWV0cmljYWwoJF9jb2x1bW5zKTtcbiAgICAgICRfcmV0dXJuOiBpZigkX3N5bSwgZ2V0LWJhY2tncm91bmQtc3ltKCRncmlkKSwgZ2V0LWJhY2tncm91bmQtYXN5bSgkZ3JpZCkpO1xuICAgICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgKGNsaXA6IGNvbnRlbnQtYm94KSk7XG4gICAgfVxuXG4gICAgQGlmICRfc2hvdyAhPSAnc2hvdy1jb2x1bW5zJ1xuICAgICAgYW5kIGdsb2JhbC12YXJpYWJsZS1leGlzdHMoYmFzZS1saW5lLWhlaWdodClcbiAgICAgIGFuZCB0eXBlLW9mKCRiYXNlLWxpbmUtaGVpZ2h0KSA9PSAnbnVtYmVyJ1xuICAgICAgYW5kIG5vdCB1bml0bGVzcygkYmFzZS1saW5lLWhlaWdodCkge1xuICAgICAgJF9jb2xvcjogdmFyaWFibGUtZXhpc3RzKCdncmlkLWJhY2tncm91bmQtYmFzZWxpbmUtY29sb3InKTtcbiAgICAgICRfY29sb3I6IGlmKCRfY29sb3IsICRncmlkLWJhY2tncm91bmQtYmFzZWxpbmUtY29sb3IsICMwMDApO1xuXG4gICAgICAkX2ltYWdlOiBtYXAtZ2V0KCRfcmV0dXJuLCBpbWFnZSk7XG4gICAgICAkX3NpemU6IG1hcC1nZXQoJF9yZXR1cm4sIHNpemUpO1xuICAgICAgJF9iYXNlbGluZTogKGJhc2VsaW5lOiAoJF9jb2xvciAxcHgsIHRyYW5zcGFyZW50IDFweCkpO1xuICAgICAgJF9iYXNlbGluZS1zaXplOiAxMDAlICRiYXNlLWxpbmUtaGVpZ2h0O1xuXG4gICAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAoXG4gICAgICAgIGltYWdlOiBpZigkX2ltYWdlLCBtYXAtbWVyZ2UoJF9pbWFnZSwgJF9iYXNlbGluZSksICRfYmFzZWxpbmUpLFxuICAgICAgICBzaXplOiBpZigkX3NpemUsICgkX3NpemUsICRfYmFzZWxpbmUtc2l6ZSksICRfYmFzZWxpbmUtc2l6ZSksXG4gICAgICApKTtcblxuICAgICAgQGlmICRfc2hvdyA9PSAnc2hvdycge1xuICAgICAgICAkX2NsaXA6IG1hcC1nZXQoJF9yZXR1cm4sIGNsaXApO1xuICAgICAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAoY2xpcDogam9pbigkX2NsaXAsIGJvcmRlci1ib3gsIGNvbW1hKSkpO1xuICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJF9zaG93ID09ICdzaG93LWJhc2VsaW5lJyB7XG4gICAgICBAd2FybiAnUGxlYXNlIHByb3ZpZGUgYSAkYmFzZS1saW5lLWhlaWdodCB3aXRoIHRoZSBkZXNpcmVkIGhlaWdodCBhbmQgdW5pdHMnO1xuICAgIH1cbiAgfVxuXG4gIEBpZiBtYXAtZ2V0KCRfcmV0dXJuLCBpbWFnZSkge1xuICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sIChmbG93OiBzdXN5LWdldChmbG93LCAkZ3JpZCkpKTtcbiAgfVxuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG5cblxuLy8gR2V0IERlYnVnXG4vLyAtLS0tLS0tLS1cbi8vIFJldHVybiB0aGUgdmFsdWUgb2YgYSBkZWJ1ZyBzZXR0aW5nXG4vLyAtICRrZXk6IDxzZXR0aW5nPlxuQGZ1bmN0aW9uIGRlYnVnLWdldChcbiAgJGtleSxcbiAgJGdyaWQ6ICRzdXN5XG4pIHtcbiAgJGtleTogam9pbihkZWJ1ZywgJGtleSwgc3BhY2UpO1xuICBAcmV0dXJuIHN1c3ktZ2V0KCRrZXksICRncmlkKTtcbn1cbiIsIi8vIENvbnRhaW5lciBTeW50YXhcbi8vID09PT09PT09PT09PT09PT1cblxuLy8gQ29udGFpbmVyIFttaXhpbl1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZXQgYSBjb250YWluZXIgZWxlbWVudFxuLy8gLSBbJGxheW91dF0gIDogPHNldHRpbmdzPlxuQG1peGluIGNvbnRhaW5lcihcbiAgJGxheW91dDogJHN1c3lcbikge1xuICAkaW5zcGVjdCAgICA6ICRsYXlvdXQ7XG4gICRsYXlvdXQgICAgIDogcGFyc2UtZ3JpZCgkbGF5b3V0KTtcblxuICAkX3dpZHRoICAgICA6IGdldC1jb250YWluZXItd2lkdGgoJGxheW91dCk7XG4gICRfanVzdGlmeSAgIDogcGFyc2UtY29udGFpbmVyLXBvc2l0aW9uKHN1c3ktZ2V0KGNvbnRhaW5lci1wb3NpdGlvbiwgJGxheW91dCkpO1xuICAkX3Byb3BlcnR5ICA6IGlmKHN1c3ktZ2V0KG1hdGgsICRsYXlvdXQpID09IHN0YXRpYywgd2lkdGgsIG1heC13aWR0aCk7XG5cbiAgJF9ib3ggICAgICAgOiBzdXN5LWdldChib3gtc2l6aW5nLCAkbGF5b3V0KTtcblxuICBAaWYgJF9ib3gge1xuICAgIEBpbmNsdWRlIG91dHB1dCgoYm94LXNpemluZzogJF9ib3gpKTtcbiAgfVxuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChjb250YWluZXIsICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgZmxvYXQtY29udGFpbmVyKCRfd2lkdGgsICRfanVzdGlmeSwgJF9wcm9wZXJ0eSk7XG4gIEBpbmNsdWRlIHNob3ctZ3JpZCgkbGF5b3V0KTtcbn1cblxuLy8gQ29udGFpbmVyIFtmdW5jdGlvbl1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gY29udGFpbmVyIHdpZHRoXG4vLyAtIFskbGF5b3V0XSAgOiA8c2V0dGluZ3M+XG5AZnVuY3Rpb24gY29udGFpbmVyKFxuICAkbGF5b3V0OiAkc3VzeVxuKSB7XG4gICRsYXlvdXQ6IHBhcnNlLWdyaWQoJGxheW91dCk7XG4gIEByZXR1cm4gZ2V0LWNvbnRhaW5lci13aWR0aCgkbGF5b3V0KTtcbn1cblxuLy8gR2V0IENvbnRhaW5lciBXaWR0aFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ2FsY3VsYXRlIHRoZSBjb250YWluZXIgd2lkdGhcbi8vIC0gWyRsYXlvdXRdOiA8c2V0dGluZ3M+XG5AZnVuY3Rpb24gZ2V0LWNvbnRhaW5lci13aWR0aChcbiAgJGxheW91dDogJHN1c3lcbikge1xuICAkbGF5b3V0ICAgICAgICAgOiBwYXJzZS1ncmlkKCRsYXlvdXQpO1xuICAkX3dpZHRoICAgICAgICAgOiBzdXN5LWdldChjb250YWluZXIsICRsYXlvdXQpO1xuICAkX2NvbHVtbi13aWR0aCAgOiBzdXN5LWdldChjb2x1bW4td2lkdGgsICRsYXlvdXQpO1xuICAkX21hdGggICAgICAgICAgOiBzdXN5LWdldChtYXRoLCAkbGF5b3V0KTtcblxuICBAaWYgbm90KCRfd2lkdGgpIG9yICRfd2lkdGggPT0gYXV0byB7XG4gICAgQGlmIHZhbGlkLWNvbHVtbi1tYXRoKCRfbWF0aCwgJF9jb2x1bW4td2lkdGgpIHtcbiAgICAgICRfY29sdW1ucyAgIDogc3VzeS1nZXQoY29sdW1ucywgJGxheW91dCk7XG4gICAgICAkX2d1dHRlcnMgICA6IHN1c3ktZ2V0KGd1dHRlcnMsICRsYXlvdXQpO1xuICAgICAgJF9zcHJlYWQgICAgOiBpZihpcy1zcGxpdCgkbGF5b3V0KSwgd2lkZSwgbmFycm93KTtcbiAgICAgICRfd2lkdGggICAgIDogc3VzeS1zdW0oJF9jb2x1bW5zLCAkX2d1dHRlcnMsICRfc3ByZWFkKSAqICRfY29sdW1uLXdpZHRoO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJF93aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRfd2lkdGg7XG59XG5cbi8vIFBhcnNlIENvbnRhaW5lciBQb3NpdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQYXJzZSB0aGUgJGNvbnRhaW5lci1wb3NpdGlvbiBpbnRvIG1hcmdpbiB2YWx1ZXMuXG4vLyAtIFskanVzdGlmeV0gICA6IGxlZnQgfCBjZW50ZXIgfCByaWdodCB8IDxsZW5ndGg+IFs8bGVuZ3RoPl1cbkBmdW5jdGlvbiBwYXJzZS1jb250YWluZXItcG9zaXRpb24oXG4gICRqdXN0aWZ5OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBjb250YWluZXItcG9zaXRpb24pXG4pIHtcbiAgJF9yZXR1cm46IGlmKCRqdXN0aWZ5ID09IGxlZnQsIDAsIGF1dG8pIGlmKCRqdXN0aWZ5ID09IHJpZ2h0LCAwLCBhdXRvKTtcblxuICBAaWYgbm90KGluZGV4KGxlZnQgcmlnaHQgY2VudGVyLCAkanVzdGlmeSkpIHtcbiAgICAkX3JldHVybjogbnRoKCRqdXN0aWZ5LCAxKTtcbiAgICAkX3JldHVybjogJF9yZXR1cm4gaWYobGVuZ3RoKCRqdXN0aWZ5KSA+IDEsIG50aCgkanVzdGlmeSwgMiksICRfcmV0dXJuKTtcbiAgfVxuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG4iLCIvLyBTcGFuIFN5bnRheFxuLy8gPT09PT09PT09PT1cblxuLy8gU3BhbiBbbWl4aW5dXG4vLyAtLS0tLS0tLS0tLS1cbi8vIFNldCBhIHNwYW5uaW5nIGVsZW1lbnQgdXNpbmcgc2hvcnRoYW5kIHN5bnRheC5cbi8vIC0gJHNwYW4gIDogPHNwYW4+XG5AbWl4aW4gc3BhbihcbiAgJHNwYW5cbikge1xuICAkaW5zcGVjdDogJHNwYW47XG4gICRzcGFuOiBwYXJzZS1zcGFuKCRzcGFuKTtcbiAgJG91dHB1dDogc3Bhbi1tYXRoKCRzcGFuKTtcbiAgJG5lc3Rpbmc6IHN1c3ktZ2V0KHNwYW4sICRzcGFuKTtcbiAgJGNsZWFyOiBzdXN5LWdldChjbGVhciwgJHNwYW4pO1xuXG4gICRib3g6IHN1c3ktZ2V0KGJveC1zaXppbmcsICRzcGFuKTtcbiAgJGNvbnRlbnQtYm94OiBpZihzdXN5LWdldChnbG9iYWwtYm94LXNpemluZykgIT0gJ2JvcmRlci1ib3gnLCB0cnVlLCBmYWxzZSk7XG4gICRib3g6ICRib3ggb3IgaWYoaXMtaW5zaWRlKCRzcGFuKSBhbmQgJGNvbnRlbnQtYm94LCBib3JkZXItYm94LCBudWxsKTtcblxuICBAaWYgJGNsZWFyID09IGJyZWFrIHtcbiAgICBAaW5jbHVkZSBicmVhaztcbiAgfSBAZWxzZSBpZiAkY2xlYXIgPT0gbm9icmVhayB7XG4gICAgQGluY2x1ZGUgbm9icmVhaztcbiAgfVxuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChzcGFuLCAkaW5zcGVjdCk7XG4gIEBpbmNsdWRlIG91dHB1dCgoYm94LXNpemluZzogJGJveCkpO1xuICBAaW5jbHVkZSBmbG9hdC1zcGFuLW91dHB1dCgkb3V0cHV0Li4uKTtcblxuICBAaWYgdmFsaWQtY29sdW1ucygkbmVzdGluZywgc2lsZW50KSB7XG4gICAgQGluY2x1ZGUgbmVzdGVkKCRzcGFuKSB7IEBjb250ZW50OyB9XG4gIH0gQGVsc2Uge1xuICAgIEBjb250ZW50O1xuICB9XG59XG5cbi8vIFNwYW4gW2Z1bmN0aW9uXVxuLy8gLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gdGhlIHdpZHRoIG9mIGEgc3Bhbi5cbi8vIC0gJHNwYW4gIDogPHNwYW4+XG5AZnVuY3Rpb24gc3BhbihcbiAgJHNwYW5cbikge1xuICBAcmV0dXJuIGdldC1zcGFuLXdpZHRoKCRzcGFuKTtcbn1cblxuLy8gU3BhbiBNYXRoXG4vLyAtLS0tLS0tLS1cbi8vIEdldCBhbGwgdGhlIHNwYW4gcmVzdWx0cy5cbi8vIC0gJHNwYW46IDxtYXA+XG5AZnVuY3Rpb24gc3Bhbi1tYXRoKFxuICAkc3BhblxuKSB7XG4gICRuZXN0ICAgICAgICAgICAgIDogaWYoc3VzeS1nZXQocm9sZSwgJHNwYW4pID09IG5lc3QsIHRydWUsIGZhbHNlKTtcbiAgJHNwbGl0LW5lc3QgICAgICAgOiBpZihpcy1zcGxpdCgkc3BhbikgYW5kICRuZXN0LCB0cnVlLCBmYWxzZSk7XG4gICRlZGdlICAgICAgICAgICAgIDogZ2V0LWVkZ2UoJHNwYW4pO1xuICAkbG9jYXRpb24gICAgICAgICA6IGdldC1sb2NhdGlvbigkc3Bhbik7XG5cbiAgJGZsb2F0ICAgICAgICAgICAgOiBmcm9tO1xuICAkcGFkZGluZy1iZWZvcmUgICA6IG51bGw7XG4gICRwYWRkaW5nLWFmdGVyICAgIDogbnVsbDtcbiAgJG1hcmdpbi1iZWZvcmUgICAgOiBudWxsO1xuICAkbWFyZ2luLWFmdGVyICAgICA6IG51bGw7XG5cbiAgLy8gY2FsY3VsYXRlIHdpZHRoc1xuICAkc3ByZWFkOiBpbmRleChtYXAtdmFsdWVzKCRzcGFuKSwgc3ByZWFkKTtcbiAgJHNwYW46IGlmKCRzcGxpdC1uZXN0IGFuZCBub3QoJHNwcmVhZCksIG1hcC1tZXJnZSgkc3BhbiwgKHNwcmVhZDogd2lkZSkpLCAkc3Bhbik7XG4gICR3aWR0aDogZ2V0LXNwYW4td2lkdGgoJHNwYW4pO1xuICAkZ3V0dGVyczogZ2V0LWd1dHRlcnMoJHNwYW4pO1xuXG4gIC8vIGFwcGx5IGd1dHRlcnNcbiAgQGlmIGlzLWluc2lkZSgkc3Bhbikge1xuICAgIEBpZiBub3Qoc3VzeS1nZXQocm9sZSwgJHNwYW4pKSB7XG4gICAgICAkcGFkZGluZy1iZWZvcmU6IG1hcC1nZXQoJGd1dHRlcnMsIGJlZm9yZSk7XG4gICAgICAkcGFkZGluZy1hZnRlcjogbWFwLWdldCgkZ3V0dGVycywgYWZ0ZXIpO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGlmIG5vdCgkc3BsaXQtbmVzdCkge1xuICAgICAgJG1hcmdpbi1iZWZvcmU6IG1hcC1nZXQoJGd1dHRlcnMsIGJlZm9yZSk7XG4gICAgICAkbWFyZ2luLWFmdGVyOiBtYXAtZ2V0KCRndXR0ZXJzLCBhZnRlcik7XG4gICAgfVxuICB9XG5cbiAgLy8gc3BlY2lhbCBtYXJnaW4gaGFuZGxpbmdcbiAgQGlmIHN1c3ktZ2V0KG91dHB1dCwgJHNwYW4pID09IGlzb2xhdGUgYW5kICRsb2NhdGlvbiB7XG4gICAgJG1hcmdpbi1iZWZvcmU6IGdldC1pc29sYXRpb24oJHNwYW4pO1xuICAgICRtYXJnaW4tYWZ0ZXI6IC0xMDAlO1xuICB9IEBlbHNlIGlmICRlZGdlIHtcbiAgICAkaXMtc3BsaXQ6IGlzLXNwbGl0KCRzcGFuKTtcbiAgICAkcG9zOiBzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRzcGFuKTtcblxuICAgIEBpZiAkZWRnZSA9PSBsYXN0IHtcbiAgICAgICRmbG9hdDogc3VzeS1nZXQobGFzdC1mbG93LCAkc3Bhbik7XG4gICAgfVxuXG4gICAgQGlmIG5vdCgkaXMtc3BsaXQpIHtcbiAgICAgIEBpZiAkZWRnZSA9PSBmdWxsIG9yICgkZWRnZSA9PSBmaXJzdCBhbmQgJHBvcyA9PSBiZWZvcmUpIHtcbiAgICAgICAgJG1hcmdpbi1iZWZvcmU6IDA7XG4gICAgICB9XG4gICAgICBAaWYgJGVkZ2UgPT0gZnVsbCBvciAoJGVkZ2UgPT0gbGFzdCBhbmQgJHBvcyA9PSBhZnRlcikge1xuICAgICAgICAkbWFyZ2luLWFmdGVyOiAwO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgQHJldHVybiAoXG4gICAgd2lkdGggICAgICAgICAgIDogJHdpZHRoLFxuICAgIGZsb2F0ICAgICAgICAgICA6ICRmbG9hdCxcbiAgICBtYXJnaW4tYmVmb3JlICAgOiAkbWFyZ2luLWJlZm9yZSxcbiAgICBtYXJnaW4tYWZ0ZXIgICAgOiAkbWFyZ2luLWFmdGVyLFxuICAgIHBhZGRpbmctYmVmb3JlICA6ICRwYWRkaW5nLWJlZm9yZSxcbiAgICBwYWRkaW5nLWFmdGVyICAgOiAkcGFkZGluZy1hZnRlcixcbiAgICBmbG93ICAgICAgICAgICAgOiBzdXN5LWdldChmbG93LCAkc3BhbiksXG4gICk7XG59XG5cbi8vIEdldCBTcGFuIFdpZHRoXG4vLyAtLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHNwYW4gd2lkdGguXG4vLyAtICRzcGFuOiA8bWFwPlxuQGZ1bmN0aW9uIGdldC1zcGFuLXdpZHRoKFxuICAkc3BhblxuKSB7XG4gICRzcGFuICAgICA6IHBhcnNlLXNwYW4oJHNwYW4pO1xuXG4gICRuICAgICAgICA6IHN1c3ktZ2V0KHNwYW4sICRzcGFuKTtcbiAgJGxvY2F0aW9uIDogZ2V0LWxvY2F0aW9uKCRzcGFuKTtcbiAgJGNvbHVtbnMgIDogc3VzeS1nZXQoY29sdW1ucywgJHNwYW4pO1xuICAkZ3V0dGVycyAgOiBzdXN5LWdldChndXR0ZXJzLCAkc3Bhbik7XG4gICRzcHJlYWQgICA6IHN1c3ktZ2V0KHNwcmVhZCwgJHNwYW4pO1xuXG4gICRjb250ZXh0ICA6IG51bGw7XG4gICRzcGFuLXN1bSA6IG51bGw7XG4gICR3aWR0aCAgICA6IG51bGw7XG5cbiAgQGlmICRuID09ICdmdWxsJyB7XG4gICAgJHBvczogc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkc3Bhbik7XG4gICAgJHJvbGU6IHN1c3ktZ2V0KHJvbGUsICRzcGFuKTtcbiAgICAkbjogaWYoJHBvcyA9PSBzcGxpdCBhbmQgJHJvbGUgIT0gbmVzdCwgc3VzeS1jb3VudCgkY29sdW1ucyksIDEwMCUpO1xuICB9XG5cbiAgQGlmIHR5cGUtb2YoJG4pICE9IG51bWJlciB7XG4gICAgQHdhcm4gXCIoI3t0eXBlLW9mKCRuKX0pICN7JG59IGlzIG5vdCBhIHZhbGlkIHNwYW4uXCI7XG4gIH0gQGVsc2UgaWYgdW5pdGxlc3MoJG4pIHtcbiAgICAkY29udGV4dDogc3VzeS1zdW0oJGNvbHVtbnMsICRndXR0ZXJzLCBpZihpcy1zcGxpdCgkc3BhbiksIHdpZGUsIG5hcnJvdykpO1xuICAgICRzcHJlYWQ6IGlmKGlzLWluc2lkZSgkc3BhbiksICRzcHJlYWQgb3Igd2lkZSwgJHNwcmVhZCk7XG4gICAgJHNwYW4tc3VtOiBzdXN5KCRuLCAkbG9jYXRpb24sICRjb2x1bW5zLCAkZ3V0dGVycywgJHNwcmVhZCk7XG5cbiAgICAkX21hdGg6IHN1c3ktZ2V0KG1hdGgsICRzcGFuKTtcbiAgICAkX2NvbHVtbi13aWR0aDogc3VzeS1nZXQoY29sdW1uLXdpZHRoLCAkc3Bhbik7XG4gICAgQGlmICRfbWF0aCA9PSBzdGF0aWMge1xuICAgICAgJHdpZHRoOiAkc3Bhbi1zdW0gKiB2YWxpZC1jb2x1bW4tbWF0aCgkX21hdGgsICRfY29sdW1uLXdpZHRoKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICR3aWR0aDogcGVyY2VudGFnZSgkc3Bhbi1zdW0gLyAkY29udGV4dCk7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICAkd2lkdGg6ICRuO1xuICB9XG5cbiAgQHJldHVybiAkd2lkdGg7XG59XG4iLCIvLyBHdXR0ZXIgU3ludGF4XG4vLyA9PT09PT09PT09PT09XG5cblxuLy8gR3V0dGVyc1xuLy8gLS0tLS0tLVxuLy8gU2V0IGd1dHRlcnMgb24gYW4gZWxlbWVudC5cbi8vIC0gWyRzcGFuXSAgIDogPHNldHRpbmdzPlxuQG1peGluIGd1dHRlcnMoXG4gICRzcGFuOiAkc3VzeVxuKSB7XG4gICRpbnNwZWN0ICA6ICRzcGFuO1xuICAkc3BhbiAgICAgOiBwYXJzZS1ndXR0ZXJzKCRzcGFuKTtcbiAgJF9ndXR0ZXJzIDogZ2V0LWd1dHRlcnMoJHNwYW4pO1xuXG4gICRfb3V0cHV0OiAoXG4gICAgYmVmb3JlOiBtYXAtZ2V0KCRfZ3V0dGVycywgYmVmb3JlKSxcbiAgICBhZnRlcjogbWFwLWdldCgkX2d1dHRlcnMsIGFmdGVyKSxcbiAgICBmbG93OiBzdXN5LWdldChmbG93LCAkc3BhbiksXG4gICk7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGd1dHRlcnMsICRpbnNwZWN0KTtcblxuICBAaWYgaXMtaW5zaWRlKCRzcGFuKSB7XG4gICAgQGluY2x1ZGUgcGFkZGluZy1vdXRwdXQoJF9vdXRwdXQuLi4pO1xuICB9IEBlbHNlIHtcbiAgICBAaW5jbHVkZSBtYXJnaW4tb3V0cHV0KCRfb3V0cHV0Li4uKTtcbiAgfVxufVxuXG5AbWl4aW4gZ3V0dGVyKFxuICAkc3BhbjogJHN1c3lcbikge1xuICBAaW5jbHVkZSBndXR0ZXJzKCRzcGFuKTtcbn1cblxuXG4vLyBHdXR0ZXJcbi8vIC0tLS0tLVxuLy8gUmV0dXJuIHRoZSB3aWR0aCBvZiBhIGd1dHRlci5cbi8vIC0gWyRzcGFuXSAgIDogPHNldHRpbmdzPlxuQGZ1bmN0aW9uIGd1dHRlcihcbiAgJHNwYW46ICRzdXN5XG4pIHtcbiAgJHNwYW46IHBhcnNlLWd1dHRlcnMoJHNwYW4pO1xuXG4gICRfZ3V0dGVyczogZ2V0LWd1dHRlcnMoJHNwYW4pO1xuICAkX2d1dHRlcnM6IG1hcC1nZXQoJF9ndXR0ZXJzLCBiZWZvcmUpIG9yIG1hcC1nZXQoJF9ndXR0ZXJzLCBhZnRlcik7XG5cbiAgQHJldHVybiAkX2d1dHRlcnM7XG59XG5cbkBmdW5jdGlvbiBndXR0ZXJzKFxuICAkc3BhbjogJHN1c3lcbikge1xuICBAcmV0dXJuIGd1dHRlcigkc3Bhbik7XG59XG5cblxuLy8gR2V0IEd1dHRlciBXaWR0aFxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIGd1dHRlciB3aWR0aC5cbi8vIC0gWyRjb250ZXh0XTogPGNvbnRleHQ+XG5AZnVuY3Rpb24gZ2V0LWd1dHRlci13aWR0aChcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgJGNvbnRleHQgIDogcGFyc2UtZ3V0dGVycygkY29udGV4dCk7XG5cbiAgJF9ndXR0ZXJzIDogc3VzeS1nZXQoZ3V0dGVycywgJGNvbnRleHQpO1xuICAkX2d1dHRlciAgOiBzdXN5LWdldChndXR0ZXItb3ZlcnJpZGUsICRjb250ZXh0KTtcblxuICBAaWYgJF9ndXR0ZXJzIGFuZCAoJF9ndXR0ZXJzID4gMCkgYW5kIG5vdCgkX2d1dHRlcikge1xuICAgICRfY29sdW1uLXdpZHRoOiBzdXN5LWdldChjb2x1bW4td2lkdGgsICRjb250ZXh0KTtcbiAgICAkX21hdGg6IGd1dHRlci1tYXRoKCRjb250ZXh0KTtcbiAgICBAaWYgJF9tYXRoID09IHN0YXRpYyB7XG4gICAgICAkX2d1dHRlcjogJF9ndXR0ZXJzICogdmFsaWQtY29sdW1uLW1hdGgoJF9tYXRoLCAkX2NvbHVtbi13aWR0aCk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkX2NvbHVtbnMgOiBzdXN5LWdldChjb2x1bW5zLCAkY29udGV4dCk7XG4gICAgICAkX3NwcmVhZCAgOiBpZihpcy1zcGxpdCgkY29udGV4dCksIHdpZGUsIHN1c3ktZ2V0KHNwcmVhZCwgJGNvbnRleHQpKTtcbiAgICAgICRfZ3V0dGVyICA6IHBlcmNlbnRhZ2UoJF9ndXR0ZXJzIC8gc3VzeS1zdW0oJF9jb2x1bW5zLCAkX2d1dHRlcnMsICRfc3ByZWFkKSk7XG4gICAgfVxuICB9XG5cbiAgJF9ndXR0ZXI6IGlmKCRfZ3V0dGVyID09ICduby1ndXR0ZXJzJyBvciAkX2d1dHRlciA9PSAnbm8tZ3V0dGVyJywgbnVsbCwgJF9ndXR0ZXIpO1xuXG4gIEByZXR1cm4gJF9ndXR0ZXI7XG59XG5cblxuLy8gR2V0IEd1dHRlcnNcbi8vIC0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gYmVmb3JlIGFuZCBhZnRlciBndXR0ZXIgdmFsdWVzLlxuLy8gLSBbJGNvbnRleHRdOiA8Y29udGV4dD5cbkBmdW5jdGlvbiBnZXQtZ3V0dGVycyhcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgJGNvbnRleHQgICAgICAgICAgICA6IHBhcnNlLWd1dHRlcnMoJGNvbnRleHQpO1xuXG4gICRfZ3V0dGVyLXBvc2l0aW9uICAgOiBzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRjb250ZXh0KTtcbiAgJF9ndXR0ZXIgICAgICAgICAgICA6IGdldC1ndXR0ZXItd2lkdGgoJGNvbnRleHQpO1xuXG4gICRfcmV0dXJuICAgICAgICAgICAgOiAoYmVmb3JlOiBudWxsLCBhZnRlcjogbnVsbCk7XG5cbiAgQGlmIGlzLXNwbGl0KCRjb250ZXh0KSBhbmQgJF9ndXR0ZXIge1xuICAgICRfZ3V0dGVyOiAkX2d1dHRlciAvIDI7XG4gICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgKGJlZm9yZTogJF9ndXR0ZXIsIGFmdGVyOiAkX2d1dHRlcikpO1xuICB9IEBlbHNlIHtcbiAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAoJF9ndXR0ZXItcG9zaXRpb246ICRfZ3V0dGVyKSk7XG4gIH1cblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuXG5cbi8vIElzIEluc2lkZVxuLy8gLS0tLS0tLS0tXG4vLyBSZXR1cm5zIHRydWUgaWYgZ3V0dGVycyBhcmUgaW5zaWRlLlxuLy8gJGNvbnRleHQ6IDxjb250ZXh0PlxuQGZ1bmN0aW9uIGlzLWluc2lkZShcbiAgJGNvbnRleHRcbikge1xuICAkX2luc2lkZTogaW5zaWRlIGluc2lkZS1zdGF0aWM7XG4gICRfZ3V0dGVyLXBvc2l0aW9uOiBzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRjb250ZXh0KTtcblxuICBAcmV0dXJuIGlmKGluZGV4KCRfaW5zaWRlLCAkX2d1dHRlci1wb3NpdGlvbiksIHRydWUsIGZhbHNlKTtcbn1cblxuXG4vLyBJcyBTcGxpdFxuLy8gLS0tLS0tLS1cbi8vIFJldHVybnMgdHJ1ZSBpZiBndXR0ZXJzIGFyZSBzcGxpdC5cbi8vICRjb250ZXh0OiA8Y29udGV4dD5cbkBmdW5jdGlvbiBpcy1zcGxpdChcbiAgJGNvbnRleHRcbikge1xuICAkX3NwbGl0OiBzcGxpdCBpbnNpZGUgaW5zaWRlLXN0YXRpYztcbiAgJF9ndXR0ZXItcG9zaXRpb246IHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJGNvbnRleHQpO1xuXG4gIEByZXR1cm4gaWYoaW5kZXgoJF9zcGxpdCwgJF9ndXR0ZXItcG9zaXRpb24pLCB0cnVlLCBmYWxzZSk7XG59XG5cblxuLy8gR3V0dGVyIE1hdGhcbi8vIC0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gdGhlIG1hdGggdG8gdXNlIGZvciBndXR0ZXIgY2FsY3VsYXRpb25zXG4vLyAkY29udGV4dDogPGNvbnRleHQ+XG5AZnVuY3Rpb24gZ3V0dGVyLW1hdGgoXG4gICRjb250ZXh0OiAkc3VzeVxuKSB7XG4gICRfcmV0dXJuICA6IHN1c3ktZ2V0KG1hdGgsICRjb250ZXh0KTtcbiAgJF9yZXR1cm4gIDogaWYoc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkY29udGV4dCkgPT0gaW5zaWRlLXN0YXRpYywgc3RhdGljLCAkX3JldHVybik7XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cbiIsIi8vIElzb2xhdGlvbiBTeW50YXhcbi8vID09PT09PT09PT09PT09PT1cblxuXG4vLyBJc29sYXRlIFtNaXhpbl1cbi8vIC0tLS0tLS0tLS0tLS0tLVxuLy8gU2V0IGlzb2xhdGlvbiBhcyBhbiBvdmVycmlkZS5cbi8vIC0gJGxvY2F0aW9uOiA8c3Bhbj5cbkBtaXhpbiBpc29sYXRlKFxuICAkaXNvbGF0ZTogMVxuKSB7XG4gICRpbnNwZWN0OiAkaXNvbGF0ZTtcblxuICAkb3V0cHV0OiAoXG4gICAgcHVzaDogaXNvbGF0ZSgkaXNvbGF0ZSksXG4gICAgZmxvdzogc3VzeS1nZXQoZmxvdywgJGlzb2xhdGUpLFxuICApO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChpc29sYXRlLCAkaW5zcGVjdCk7XG4gIEBpbmNsdWRlIGlzb2xhdGUtb3V0cHV0KCRvdXRwdXQuLi4pO1xufVxuXG5cbi8vIElzb2xhdGUgW2Z1bmN0aW9uXVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gYW4gaXNvbGF0aW9uIG9mZnNldCB3aWR0aC5cbi8vIC0gJGxvY2F0aW9uOiA8c3Bhbj5cbkBmdW5jdGlvbiBpc29sYXRlKFxuICAkaXNvbGF0ZTogMVxuKSB7XG4gICRpc29sYXRlOiBwYXJzZS1zcGFuKCRpc29sYXRlKTtcbiAgJGlzb2xhdGlvbjogc3VzeS1nZXQoc3BhbiwgJGlzb2xhdGUpO1xuXG4gIEBpZiAkaXNvbGF0aW9uIGFuZCBub3QoZ2V0LWxvY2F0aW9uKCRpc29sYXRlKSkge1xuICAgICRuZXc6IChcbiAgICAgIHNwYW46IG51bGwsXG4gICAgICBsb2NhdGlvbjogJGlzb2xhdGlvbixcbiAgICApO1xuICAgICRpc29sYXRlOiBtYXAtbWVyZ2UoJGlzb2xhdGUsICRuZXcpO1xuICB9XG5cbiAgQHJldHVybiBnZXQtaXNvbGF0aW9uKCRpc29sYXRlKTtcbn1cblxuXG4vLyBHZXQgSXNvbGF0aW9uXG4vLyAtLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gdGhlIGlzb2xhdGlvbiBvZmZzZXQgd2lkdGhcbi8vIC0gJGlucHV0OiA8bWFwPlxuQGZ1bmN0aW9uIGdldC1pc29sYXRpb24oXG4gICRpbnB1dFxuKSB7XG4gICRsb2NhdGlvbiAgIDogZ2V0LWxvY2F0aW9uKCRpbnB1dCk7XG4gICRjb2x1bW5zICAgIDogc3VzeS1nZXQoY29sdW1ucywgJGlucHV0KTtcbiAgJHdpZHRoICAgICAgOiBudWxsO1xuXG4gIEBpZiB0eXBlLW9mKCRsb2NhdGlvbikgPT0gbnVtYmVyIGFuZCBub3QodW5pdGxlc3MoJGxvY2F0aW9uKSkge1xuICAgICR3aWR0aDogJGxvY2F0aW9uO1xuICB9IEBlbHNlIGlmICRsb2NhdGlvbiB7XG4gICAgJHB1c2g6ICRsb2NhdGlvbiAtIDE7XG4gICAgQGlmICRwdXNoID4gMCB7XG4gICAgICAkcHVzaDogbWFwLW1lcmdlKCRpbnB1dCwgKFxuICAgICAgICBzcGFuOiAkcHVzaCxcbiAgICAgICAgbG9jYXRpb246IDEsXG4gICAgICAgIHNwcmVhZDogd2lkZSxcbiAgICAgICkpO1xuICAgICAgJHdpZHRoOiBnZXQtc3Bhbi13aWR0aCgkcHVzaCk7XG4gICAgfVxuICB9XG5cbiAgQGlmIHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJGlucHV0KSA9PSBzcGxpdFxuICAgICAgYW5kIHN1c3ktZ2V0KGd1dHRlcnMsICRpbnB1dCkgPiAwIHtcbiAgICAkd2lkdGg6IGlmKCR3aWR0aCA9PSBudWxsLCBndXR0ZXJzKCRpbnB1dCksICR3aWR0aCArIGd1dHRlcnMoJGlucHV0KSk7XG4gIH1cblxuICBAcmV0dXJuICR3aWR0aCBvciAwO1xufVxuIiwiLy8gR2FsbGVyeSBTeW50YXhcbi8vID09PT09PT09PT09PT09XG5cbi8vIEdhbGxlcnlcbi8vIC0tLS0tLS1cbi8vIENyZWF0ZSBhbiBpc29sYXRlZCBnYWxsZXJ5XG4vLyAtICRzcGFuICAgICAgICA6IDxzcGFuPlxuLy8gLSBbJHNlbGVjdG9yXSAgOiBjaGlsZCB8IG9mLXR5cGVcbkBtaXhpbiBnYWxsZXJ5KFxuICAkc3BhbixcbiAgJHNlbGVjdG9yOiBjaGlsZFxuKSB7XG4gICRpbnNwZWN0ICAgIDogJHNwYW47XG4gICRzcGFuICAgICAgIDogcGFyc2Utc3Bhbigkc3Bhbik7XG4gICRzcGFuICAgICAgIDogbWFwLW1lcmdlKCRzcGFuLCAobG9jYXRpb246IDEpKTtcblxuICAkbiAgICAgICAgICAgIDogc3VzeS1nZXQoc3BhbiwgJHNwYW4pO1xuICAkY29sdW1ucyAgICAgIDogc3VzeS1nZXQoY29sdW1ucywgJHNwYW4pO1xuICAkY29udGV4dCAgICAgIDogc3VzeS1jb3VudCgkY29sdW1ucyk7XG4gICRmbG93ICAgICAgICAgOiBzdXN5LWdldChmbG93LCAkc3Bhbik7XG5cbiAgJGluc2lkZSAgICAgICA6IGlzLWluc2lkZSgkc3Bhbik7XG4gICRmcm9tICAgICAgICAgOiBmcm9tKCRmbG93KTtcbiAgJGxpbmUgICAgICAgICA6IGZsb29yKCRjb250ZXh0IC8gJG4pO1xuICAkc3ltbWV0cmljYWwgIDogaXMtc3ltbWV0cmljYWwoJGNvbHVtbnMpO1xuXG4gICRvdXRwdXQ6IChcbiAgICB3aWR0aCAgICAgICAgICAgICA6IG51bGwsXG4gICAgZmxvYXQgICAgICAgICAgICAgOiBmcm9tLFxuICAgIG1hcmdpbi1iZWZvcmUgICAgIDogbnVsbCxcbiAgICBtYXJnaW4tYWZ0ZXIgICAgICA6IG51bGwsXG4gICAgcGFkZGluZy1iZWZvcmUgICAgOiBudWxsLFxuICAgIHBhZGRpbmctYWZ0ZXIgICAgIDogbnVsbCxcbiAgICBmbG93ICAgICAgICAgICAgICA6ICRmbG93LFxuICApO1xuXG4gIEBpZiAkaW5zaWRlIHtcbiAgICAkZ3V0dGVyczogZ2V0LWd1dHRlcnMoJHNwYW4pO1xuICAgICRvdXRwdXQ6IG1hcC1tZXJnZSgkb3V0cHV0LCAoXG4gICAgICBwYWRkaW5nLWJlZm9yZTogbWFwLWdldCgkZ3V0dGVycywgYmVmb3JlKSxcbiAgICAgIHBhZGRpbmctYWZ0ZXI6IG1hcC1nZXQoJGd1dHRlcnMsIGFmdGVyKSxcbiAgICApKTtcbiAgfVxuXG4gIEBpZiAkc3ltbWV0cmljYWwge1xuICAgICRvdXRwdXQ6IG1hcC1tZXJnZSgkb3V0cHV0LCAod2lkdGg6IGdldC1zcGFuLXdpZHRoKCRzcGFuKSkpO1xuICB9XG5cbiAgJGJveCAgICAgICAgICA6IHN1c3ktZ2V0KGJveC1zaXppbmcsICRzcGFuKTtcbiAgJGdsb2JhbC1ib3ggICA6IGlmKHN1c3ktZ2V0KGdsb2JhbC1ib3gtc2l6aW5nKSA9PSAnYm9yZGVyLWJveCcsIHRydWUsIGZhbHNlKTtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QoZ2FsbGVyeSwgJGluc3BlY3QpO1xuXG4gIC8vIENvbGxlY3RpdmUgT3V0cHV0XG4gIEBpZiAkYm94ID09IGJvcmRlci1ib3ggb3IgKCRpbnNpZGUgYW5kIG5vdCgkYm94KSBhbmQgbm90KCRnbG9iYWwtYm94KSkge1xuICAgIEBpbmNsdWRlIG91dHB1dCgoYm94LXNpemluZzogYm9yZGVyLWJveCkpO1xuICB9IEBlbHNlIGlmICRib3ggPT0gY29udGVudC1ib3gge1xuICAgIEBpbmNsdWRlIG91dHB1dCgoYm94LXNpemluZzogY29udGVudC1ib3gpKTtcbiAgfVxuXG4gIEBpbmNsdWRlIGZsb2F0LXNwYW4tb3V0cHV0KCRvdXRwdXQuLi4pO1xuXG4gIC8vIEluZGl2aWR1YWwgTG9vcFxuICBAZm9yICRpdGVtIGZyb20gMSB0aHJvdWdoICRsaW5lIHtcbiAgICAkbnRoOiAnI3skbGluZX1uICsgI3skaXRlbX0nO1xuICAgICY6bnRoLSN7JHNlbGVjdG9yfSgjeyRudGh9KSB7XG4gICAgICAvLyBJbmRpdmlkdWFsIFByZXBcbiAgICAgICRvdXRwdXQ6IChcbiAgICAgICAgd2lkdGggICAgICAgICAgICAgOiBpZigkc3ltbWV0cmljYWwsIG51bGwsIGdldC1zcGFuLXdpZHRoKCRzcGFuKSksXG4gICAgICAgIGZsb2F0ICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgbWFyZ2luLWJlZm9yZSAgICAgOiBnZXQtaXNvbGF0aW9uKCRzcGFuKSxcbiAgICAgICAgbWFyZ2luLWFmdGVyICAgICAgOiAtMTAwJSxcbiAgICAgICAgcGFkZGluZy1iZWZvcmUgICAgOiBudWxsLFxuICAgICAgICBwYWRkaW5nLWFmdGVyICAgICA6IG51bGwsXG4gICAgICAgIGZsb3cgICAgICAgICAgICAgIDogJGZsb3csXG4gICAgICApO1xuXG4gICAgICAvLyBJbmRpdmlkdWFsIE91dHB1dFxuICAgICAgQGluY2x1ZGUgZmxvYXQtc3Bhbi1vdXRwdXQoJG91dHB1dC4uLik7XG5cbiAgICAgIEBpZiBnZXQtZWRnZSgkc3BhbikgPT0gZmlyc3Qge1xuICAgICAgICBAaW5jbHVkZSBicmVhaztcbiAgICAgICAgQGluY2x1ZGUgZmlyc3QoJHNwYW4pO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEBpbmNsdWRlIG5vYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIEluZGl2aWR1YWwgTG9jYXRpb24gSW5jcmVtZW50XG4gICAgICAkbG9jYXRpb246IGdldC1sb2NhdGlvbigkc3BhbikgKyAkbjtcbiAgICAgICRsb2NhdGlvbjogaWYoJGxvY2F0aW9uID4gJGNvbnRleHQsIDEsICRsb2NhdGlvbik7XG4gICAgICAkc3BhbjogbWFwLW1lcmdlKCRzcGFuLCAobG9jYXRpb246ICRsb2NhdGlvbikpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gUm93IFN0YXJ0ICYgRW5kXG4vLyA9PT09PT09PT09PT09PT1cblxuLy8gQnJlYWtcbi8vIC0tLS0tXG4vLyBBcHBseSB0byBhbnkgZWxlbWVudCB0aGF0IHNob3VsZCBmb3JjZSBhIGxpbmUgYnJlYWsuXG5AbWl4aW4gYnJlYWsge1xuICBAaW5jbHVkZSBvdXRwdXQoKGNsZWFyOiBib3RoKSk7XG59XG5cblxuLy8gTm9CcmVha1xuLy8gLS0tLS0tLVxuLy8gQ2FuY2VsIHRoZSBicmVhaygpIGVmZmVjdCwgZS5nLiB3aGVuIHVzaW5nIG1lZGlhIHF1ZXJpZXMuXG5AbWl4aW4gbm9icmVhayB7XG4gIEBpbmNsdWRlIG91dHB1dCgoY2xlYXI6IG5vbmUpKTtcbn1cblxuXG4vLyBGdWxsXG4vLyAtLS0tXG4vLyAtIFskY29udGV4dF06IDxsYXlvdXQgc2hvcnRoYW5kPlxuQG1peGluIGZ1bGwoXG4gICRjb250ZXh0OiAkc3VzeVxuKSB7XG4gICRpbnNwZWN0IDogJGNvbnRleHQ7XG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChmdWxsLCAkaW5zcGVjdCk7XG4gIEBpbmNsdWRlIHNwYW4oZnVsbCBvZiBwYXJzZS1ncmlkKCRjb250ZXh0KSBicmVhayk7XG59XG5cblxuLy8gRmlyc3Rcbi8vIC0tLS0tXG4vLyAtIFskY29udGV4dF06IDxzZXR0aW5ncz5cbkBtaXhpbiBmaXJzdChcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgJGluc3BlY3QgIDogJGNvbnRleHQ7XG4gICRjb250ZXh0ICA6IHBhcnNlLWdyaWQoJGNvbnRleHQpO1xuICAkZmxvdyAgICAgOiBzdXN5LWdldChmbG93LCAkY29udGV4dCk7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGZpcnN0LCAkaW5zcGVjdCk7XG4gIEBpZiBub3QoaXMtc3BsaXQoJGNvbnRleHQpKSB7XG4gICAgQGluY2x1ZGUgZmxvYXQtZmlyc3QoJGZsb3cpO1xuICB9XG59XG5cbkBtaXhpbiBhbHBoYShcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgQGluY2x1ZGUgZmlyc3QoJGNvbnRleHQpO1xufVxuXG5cbi8vIExhc3Rcbi8vIC0tLS1cbi8vIC0gWyRjb250ZXh0XTogPHNldHRpbmdzPlxuQG1peGluIGxhc3QoXG4gICRjb250ZXh0OiAkc3VzeVxuKSB7XG4gICRpbnNwZWN0ICA6ICRjb250ZXh0O1xuICAkY29udGV4dCAgOiBwYXJzZS1ncmlkKCRjb250ZXh0KTtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QobGFzdCwgJGluc3BlY3QpO1xuXG4gICRvdXRwdXQ6IChcbiAgICBmbG93OiBzdXN5LWdldChmbG93LCAkY29udGV4dCksXG4gICAgbGFzdC1mbG93OiBzdXN5LWdldChsYXN0LWZsb3csICRjb250ZXh0KSxcbiAgICBtYXJnaW46IGlmKGlzLXNwbGl0KCRjb250ZXh0KSwgbnVsbCwgMCksXG4gICk7XG5cbiAgQGluY2x1ZGUgZmxvYXQtbGFzdCgkb3V0cHV0Li4uKTtcbn1cblxuQG1peGluIG9tZWdhKFxuICAkY29udGV4dDogJHN1c3lcbikge1xuICBAaW5jbHVkZSBsYXN0KCRjb250ZXh0KTtcbn1cblxuXG4vLyBHZXQgRWRnZVxuLy8gLS0tLS0tLS1cbi8vIENhbGN1bGF0ZSBlZGdlIHZhbHVlIGJhc2VkIG9uIGxvY2F0aW9uLCBpZiBwb3NzaWJsZVxuQGZ1bmN0aW9uIGdldC1lZGdlKFxuICAkc3BhblxuKSB7XG4gICRzcGFuICAgICAgIDogcGFyc2Utc3Bhbigkc3Bhbik7XG4gICRlZGdlICAgICAgIDogc3VzeS1nZXQoZWRnZSwgJHNwYW4pO1xuXG4gIEBpZiBub3QoJGVkZ2UpIHtcbiAgICAkY291bnQ6IHN1c3ktY291bnQoc3VzeS1nZXQoY29sdW1ucywgJHNwYW4pKTtcbiAgICAkbG9jYXRpb246IHN1c3ktZ2V0KGxvY2F0aW9uLCAkc3Bhbik7XG4gICAgJG46IHN1c3ktZ2V0KHNwYW4sICRzcGFuKTtcblxuICAgICRudW1iZXI6IGlmKHR5cGUtb2YoJGxvY2F0aW9uKSA9PSBudW1iZXIsIHRydWUsIGZhbHNlKTtcbiAgICAkaW5kZXg6IGlmKCRudW1iZXIgYW5kIHVuaXRsZXNzKCRsb2NhdGlvbiksIHRydWUsIGZhbHNlKTtcblxuICAgIEBpZiAkbiA9PSAkY291bnQge1xuICAgICAgJGVkZ2U6IGZ1bGw7XG4gICAgfSBAZWxzZSBpZiAkbG9jYXRpb24gYW5kICRuIGFuZCAkaW5kZXgge1xuICAgICAgQGlmICRsb2NhdGlvbiA9PSAxIHtcbiAgICAgICAgJGVkZ2U6IGlmKCRuID09ICRjb3VudCwgZnVsbCwgZmlyc3QpO1xuICAgICAgfSBAZWxzZSBpZiAkbG9jYXRpb24gKyAkbiAtIDEgPT0gJGNvdW50IHtcbiAgICAgICAgJGVkZ2U6IGxhc3Q7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGlmICRlZGdlID09IGFscGhhIG9yICRlZGdlID09IG9tZWdhIHtcbiAgICAkZWRnZTogaWYoJGVkZ2UgPT0gYWxwaGEsIGZpcnN0LCBsYXN0KTtcbiAgfVxuXG4gIEByZXR1cm4gJGVkZ2U7XG59XG5cblxuLy8gR2V0IExvY2F0aW9uXG4vLyAtLS0tLS0tLS0tLS1cbi8vIENhbGN1bGF0ZSBsb2NhdGlvbiB2YWx1ZSBiYXNlZCBvbiBlZGdlLCBpZiBwb3NzaWJsZVxuQGZ1bmN0aW9uIGdldC1sb2NhdGlvbihcbiAgJHNwYW5cbikge1xuICAkc3BhbiAgICAgICA6IHBhcnNlLXNwYW4oJHNwYW4pO1xuICAkbG9jYXRpb24gICA6IHN1c3ktZ2V0KGxvY2F0aW9uLCAkc3Bhbik7XG4gICRlZGdlICAgICAgIDogZ2V0LWVkZ2UoJHNwYW4pO1xuICAkbiAgICAgICAgICA6IHN1c3ktZ2V0KHNwYW4sICRzcGFuKTtcblxuICBAaWYgJGVkZ2UgYW5kIG5vdCgkbG9jYXRpb24pIGFuZCB0eXBlLW9mKCRuKSA9PSBudW1iZXIgYW5kIHVuaXRsZXNzKCRuKSB7XG4gICAgQGlmICRlZGdlID09IGZpcnN0IHtcbiAgICAgICRsb2NhdGlvbjogMTtcbiAgICB9IEBlbHNlIGlmICRlZGdlID09IGxhc3Qge1xuICAgICAgJGxvY2F0aW9uOiBzdXN5LWNvdW50KHN1c3ktZ2V0KGNvbHVtbnMsICRzcGFuKSkgLSAkbiArIDE7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkbG9jYXRpb25cbn1cbiIsIi8vIE1hcmdpbiBTeW50YXhcbi8vID09PT09PT09PT09PT1cblxuLy8gUHJlXG4vLyAtLS1cbi8vIEFkZCBzcGFubmluZy1tYXJnaW5zIGJlZm9yZSBhbiBlbGVtZW50LlxuLy8gLSAkc3BhbiAgOiA8c3Bhbj5cbkBtaXhpbiBwcmUoXG4gICRzcGFuXG4pIHtcbiAgJGluc3BlY3Q6ICRzcGFuO1xuICAkc3BhbiAgIDogbWFwLW1lcmdlKChzcHJlYWQ6IHdpZGUpLCBwYXJzZS1zcGFuKCRzcGFuKSk7XG4gICRmbG93ICAgOiBzdXN5LWdldChmbG93LCAkc3Bhbik7XG4gICRzcGxpdCAgOiBpZihzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRzcGFuKSA9PSBzcGxpdCwgdHJ1ZSwgZmFsc2UpO1xuICAkZ3V0dGVyIDogZ3V0dGVyKCRzcGFuKTtcbiAgJHNwYW4gICA6IHNwYW4oJHNwYW4pO1xuICAkd2lkdGggIDogaWYoJHNwbGl0IGFuZCAkZ3V0dGVyLCAkc3BhbiArICRndXR0ZXIsICRzcGFuKTtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QocHJlLCAkaW5zcGVjdCk7XG4gIEBpbmNsdWRlIG1hcmdpbi1vdXRwdXQoJHdpZHRoLCBudWxsLCAkZmxvdyk7XG59XG5cbi8vIFBvc3Rcbi8vIC0tLS1cbi8vIEFkZCBzcGFubmluZy1tYXJnaW5zIGFmdGVyIGFuIGVsZW1lbnQuXG4vLyAtICRzcGFuICA6IDxzcGFuPlxuQG1peGluIHBvc3QoXG4gICRzcGFuXG4pIHtcbiAgJGluc3BlY3QgIDogJHNwYW47XG4gICRzcGFuICAgICA6IG1hcC1tZXJnZSgoc3ByZWFkOiB3aWRlKSwgcGFyc2Utc3Bhbigkc3BhbikpO1xuICAkZmxvdyAgICAgOiBzdXN5LWdldChmbG93LCAkc3Bhbik7XG4gICRzcGxpdCAgICA6IGlmKHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJHNwYW4pID09IHNwbGl0LCB0cnVlLCBmYWxzZSk7XG4gICR3aWR0aCAgICA6IGlmKCRzcGxpdCwgc3Bhbigkc3BhbikgKyBndXR0ZXIoJHNwYW4pLCBzcGFuKCRzcGFuKSk7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KHBvc3QsICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgbWFyZ2luLW91dHB1dChudWxsLCAkd2lkdGgsICRmbG93KTtcbn1cblxuLy8gUHVzaFxuLy8gLS0tLVxuLy8gU2ltcGxlIHN5bm9ueW1uIGZvciBwcmUuXG4vLyAtICRzcGFuICA6IDxzcGFuPlxuQG1peGluIHB1c2goXG4gICRzcGFuXG4pIHtcbiAgQGluY2x1ZGUgcHJlKCRzcGFuKTtcbn1cblxuLy8gUHVsbFxuLy8gLS0tLVxuLy8gQWRkIG5lZ2F0aXZlIHNwYW5uaW5nLW1hcmdpbnMgYmVmb3JlIGFuIGVsZW1lbnQuXG4vLyAtICRzcGFuICA6IDxzcGFuPlxuQG1peGluIHB1bGwoXG4gICRzcGFuXG4pIHtcbiAgJGluc3BlY3QgIDogJHNwYW47XG4gICRzcGFuICAgICA6IG1hcC1tZXJnZSgoc3ByZWFkOiB3aWRlKSwgcGFyc2Utc3Bhbigkc3BhbikpO1xuICAkZmxvdyAgICAgOiBzdXN5LWdldChmbG93LCAkc3Bhbik7XG4gICRzcGxpdCAgICA6IGlmKHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJHNwYW4pID09IHNwbGl0LCB0cnVlLCBmYWxzZSk7XG4gICR3aWR0aCAgICA6IGlmKCRzcGxpdCwgMCAtIHNwYW4oJHNwYW4pICsgZ3V0dGVyKCRzcGFuKSwgMCAtIHNwYW4oJHNwYW4pKTtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QocHVsbCwgJGluc3BlY3QpO1xuICBAaW5jbHVkZSBtYXJnaW4tb3V0cHV0KCR3aWR0aCwgbnVsbCwgJGZsb3cpO1xufVxuXG4vLyBTcXVpc2hcbi8vIC0tLS0tLVxuLy8gQWRkIHNwYW5uaW5nLW1hcmdpbnMgYmVmb3JlIGFuZCBhZnRlciBhbiBlbGVtZW50LlxuLy8gLSAkcHJlICAgICA6IDxzcGFuPlxuLy8gLSBbJHBvc3RdICA6IDxzcGFuPlxuQG1peGluIHNxdWlzaChcbiAgJHByZSxcbiAgJHBvc3Q6IGZhbHNlXG4pIHtcbiAgJGluc3BlY3QgICAgICA6ICgkcHJlLCAkcG9zdCk7XG4gICRwcmUgICAgICAgICAgOiBtYXAtbWVyZ2UoKHNwcmVhZDogd2lkZSksIHBhcnNlLXNwYW4oJHByZSkpO1xuXG4gIEBpZiAkcG9zdCB7XG4gICAgJHBvc3Q6IG1hcC1tZXJnZSgoc3ByZWFkOiB3aWRlKSwgcGFyc2Utc3BhbigkcG9zdCkpO1xuICB9IEBlbHNlIHtcbiAgICAkc3Bhbjogc3VzeS1nZXQoc3BhbiwgJHByZSk7XG4gICAgQGlmIGxlbmd0aCgkc3BhbikgPiAxIHtcbiAgICAgICRwcmU6IG1hcC1tZXJnZSgkcHJlLCAoc3BhbjogbnRoKCRzcGFuLCAxKSkpO1xuICAgICAgJHBvc3Q6IG1hcC1tZXJnZSgkcHJlLCAoc3BhbjogbnRoKCRzcGFuLCAyKSkpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJHBvc3Q6ICRwcmU7XG4gICAgfVxuICB9XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KHNxdWlzaCwgJGluc3BlY3QpO1xuICBAaW5jbHVkZSBwcmUoJHByZSk7XG4gIEBpbmNsdWRlIHBvc3QoJHBvc3QpO1xufVxuIiwiLy8gUGFkZGluZyBTeW50YXhcbi8vID09PT09PT09PT09PT09XG5cbi8vIFByZWZpeFxuLy8gLS0tLS0tXG4vLyBBZGQgc3Bhbm5pbmctcGFkZGluZyBiZWZvcmUgYW4gZWxlbWVudC5cbi8vIC0gJHNwYW4gIDogPHNwYW4+XG5AbWl4aW4gcHJlZml4KFxuICAkc3BhblxuKSB7XG4gICRpbnNwZWN0ICA6ICRzcGFuO1xuICAkc3BhbiAgICAgOiBtYXAtbWVyZ2UoKHNwcmVhZDogd2lkZSksIHBhcnNlLXNwYW4oJHNwYW4pKTtcbiAgJGZsb3cgICAgIDogc3VzeS1nZXQoZmxvdywgJHNwYW4pO1xuICAkd2lkdGggICAgOiBzcGFuKCRzcGFuKTtcblxuICBAaWYgaXMtaW5zaWRlKCRzcGFuKSB7XG4gICAgJGd1dHRlcjogZ3V0dGVyKCRzcGFuKTtcbiAgICAkd2lkdGg6IGlmKCRndXR0ZXIgYW5kIGNvbXBhcmFibGUoJHdpZHRoLCAkZ3V0dGVyKSwgJHdpZHRoICsgJGd1dHRlciwgJHdpZHRoKTtcbiAgfVxuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChwcmVmaXgsICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgcGFkZGluZy1vdXRwdXQoJHdpZHRoLCBudWxsLCAkZmxvdyk7XG59XG5cbi8vIFN1ZmZpeFxuLy8gLS0tLS0tXG4vLyBBZGQgc3Bhbm5pbmctcGFkZGluZyBhZnRlciBhbiBlbGVtZW50LlxuLy8gLSAkc3BhbiAgOiA8c3Bhbj5cbkBtaXhpbiBzdWZmaXgoXG4gICRzcGFuXG4pIHtcbiAgJGluc3BlY3QgIDogJHNwYW47XG4gICRzcGFuICAgICA6IG1hcC1tZXJnZSgoc3ByZWFkOiB3aWRlKSwgcGFyc2Utc3Bhbigkc3BhbikpO1xuICAkZmxvdyAgICAgOiBzdXN5LWdldChmbG93LCAkc3Bhbik7XG4gICR3aWR0aCAgICA6IHNwYW4oJHNwYW4pO1xuXG4gIEBpZiBpcy1pbnNpZGUoJHNwYW4pIHtcbiAgICAkZ3V0dGVyOiBndXR0ZXIoJHNwYW4pO1xuICAgICR3aWR0aDogaWYoJGd1dHRlciBhbmQgY29tcGFyYWJsZSgkd2lkdGgsICRndXR0ZXIpLCAkd2lkdGggKyAkZ3V0dGVyLCAkd2lkdGgpO1xuICB9XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KHN1ZmZpeCwgJGluc3BlY3QpO1xuICBAaW5jbHVkZSBwYWRkaW5nLW91dHB1dChudWxsLCAkd2lkdGgsICRmbG93KTtcbn1cblxuLy8gUGFkXG4vLyAtLS1cbi8vIEFkZCBzcGFubmluZy1wYWRkaW5nIGJlZm9yZSBhbmQgYWZ0ZXIgYW4gZWxlbWVudC5cbi8vIC0gJHByZSAgICAgOiA8c3Bhbj5cbi8vIC0gWyRwb3N0XSAgOiA8c3Bhbj5cbkBtaXhpbiBwYWQoXG4gICRwcmUsXG4gICRwb3N0OiBmYWxzZVxuKSB7XG4gICRpbnNwZWN0ICA6ICgkcHJlLCAkcG9zdCk7XG4gICRwcmUgICAgICA6IG1hcC1tZXJnZSgoc3ByZWFkOiB3aWRlKSwgcGFyc2Utc3BhbigkcHJlKSk7XG5cbiAgQGlmICRwb3N0IHtcbiAgICAkcG9zdDogbWFwLW1lcmdlKChzcHJlYWQ6IHdpZGUpLCBwYXJzZS1zcGFuKCRwb3N0KSk7XG4gIH0gQGVsc2Uge1xuICAgICRzcGFuOiBzdXN5LWdldChzcGFuLCAkcHJlKTtcbiAgICBAaWYgbGVuZ3RoKCRzcGFuKSA+IDEge1xuICAgICAgJHByZTogbWFwLW1lcmdlKCRwcmUsIChzcGFuOiBudGgoJHNwYW4sIDEpKSk7XG4gICAgICAkcG9zdDogbWFwLW1lcmdlKCRwcmUsIChzcGFuOiBudGgoJHNwYW4sIDIpKSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkcG9zdDogJHByZTtcbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QocGFkLCAkaW5zcGVjdCk7XG4gIEBpbmNsdWRlIHByZWZpeCgkcHJlKTtcbiAgQGluY2x1ZGUgc3VmZml4KCRwb3N0KTtcblxufVxuIiwiLy8gQmxlZWQgU3ludGF4XG4vLyA9PT09PT09PT09PT1cblxuLy8gQmxlZWRcbi8vIC0tLS0tXG4vLyBBZGQgbmVnYXRpdmUgbWFyZ2lucywgYW5kIGVxdWFsIHBvc2l0aXZlIHBhZGRpbmcgdG8gY3JlYXRlIGJsZWVkLlxuLy8gLSAkYmxlZWQgIDogPHNwYW4+XG5AbWl4aW4gYmxlZWQoXG4gICRibGVlZDogMCBndXR0ZXIoKVxuKSB7XG4gICRpbnNwZWN0ICA6ICRibGVlZDtcbiAgJG91dHB1dCAgIDogZ2V0LWJsZWVkKCRibGVlZCk7XG5cbiAgQGlmIHN1c3ktZ2V0KGdsb2JhbC1ib3gtc2l6aW5nKSAhPSBjb250ZW50LWJveCB7XG4gICAgJG91dHB1dDogbWFwLW1lcmdlKChib3gtc2l6aW5nOiBjb250ZW50LWJveCksICRvdXRwdXQpO1xuICB9XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGJsZWVkLCAkaW5zcGVjdCk7XG4gIEBpbmNsdWRlIG91dHB1dCgkb3V0cHV0KTtcbn1cblxuXG4vLyBCbGVlZC14XG4vLyAtLS0tLS0tXG4vLyBTaG9ydGN1dCBmb3IgaG9yaXpvbnRhbCBibGVlZC5cbi8vIC0gJGJsZWVkICA6IDxzcGFuPlxuQG1peGluIGJsZWVkLXgoXG4gICRibGVlZDogZ3V0dGVyKClcbikge1xuICAkYmxlZWQgIDogcGFyc2Utc3BhbigkYmxlZWQpO1xuICAkdHJibCAgIDogc3VzeS1nZXQoc3BhbiwgJGJsZWVkKTtcblxuICBAaWYgbGVuZ3RoKCR0cmJsKSA9PSAxIHtcbiAgICAkYmxlZWQ6IG1hcC1tZXJnZSgkYmxlZWQsIChzcGFuOiAwIG50aCgkdHJibCwgMSkpKTtcbiAgfSBAZWxzZSBpZiBsZW5ndGgoJHRyYmwpID09IDIge1xuICAgICRibGVlZDogbWFwLW1lcmdlKCRibGVlZCwgKHNwYW46IDAgbnRoKCR0cmJsLCAyKSAwIG50aCgkdHJibCwgMSkpKTtcbiAgfSBAZWxzZSB7XG4gICAgQHdhcm4gJ2JsZWVkLXggb25seSB0YWtlcyAyIGxlbmd0aHMsIGJ1dCAje2xlbmd0aCgkdHJibCl9IHdlcmUgcGFzc2VkLic7XG4gIH1cblxuICBAaW5jbHVkZSBibGVlZCgkYmxlZWQpO1xufVxuXG5cbi8vIEJsZWVkLXlcbi8vIC0tLS0tLS1cbi8vIFNob3J0Y3V0IGZvciB2ZXJ0aWNhbCBibGVlZC5cbi8vIC0gJGJsZWVkICA6IDxzcGFuPlxuQG1peGluIGJsZWVkLXkoXG4gICRibGVlZDogaWYoZnVuY3Rpb24tZXhpc3RzKHJoeXRobSksIHJoeXRobSgxKSwgMWVtKVxuKSB7XG4gICRibGVlZCAgOiBwYXJzZS1zcGFuKCRibGVlZCk7XG4gICR0cmJsICAgOiBzdXN5LWdldChzcGFuLCAkYmxlZWQpO1xuXG4gIEBpZiBsZW5ndGgoJHRyYmwpID09IDEge1xuICAgICRibGVlZDogbWFwLW1lcmdlKCRibGVlZCwgKHNwYW46IG50aCgkdHJibCwgMSkgMCkpO1xuICB9IEBlbHNlIGlmIGxlbmd0aCgkdHJibCkgPT0gMiB7XG4gICAgJGJsZWVkOiBtYXAtbWVyZ2UoJGJsZWVkLCAoc3BhbjogbnRoKCR0cmJsLCAxKSAwIG50aCgkdHJibCwgMikgMCkpO1xuICB9IEBlbHNlIHtcbiAgICBAd2FybiAnYmxlZWQteSBvbmx5IHRha2VzIDIgbGVuZ3RocywgYnV0ICN7bGVuZ3RoKCR0cmJsKX0gd2VyZSBwYXNzZWQuJztcbiAgfVxuXG4gIEBpbmNsdWRlIGJsZWVkKCRibGVlZCk7XG59XG5cblxuLy8gR2V0IEJsZWVkXG4vLyAtLS0tLS0tLS1cbi8vIFJldHVybiBibGVlZCBvdXRwdXQgdmFsdWVzXG4vLyAtICRibGVlZDogPHNwYW4+XG5AZnVuY3Rpb24gZ2V0LWJsZWVkKFxuICAkYmxlZWRcbikge1xuICAkYmxlZWQgICAgOiBtYXAtbWVyZ2UoKHNwcmVhZDogd2lkZSksIHBhcnNlLXNwYW4oJGJsZWVkKSk7XG4gICR0cmJsICAgICA6IHN1c3ktZ2V0KHNwYW4sICRibGVlZCk7XG4gICRzaG9ydCAgICA6IG51bGw7XG4gICRvdXRwdXQgICA6ICgpO1xuXG4gIEBmb3IgJGkgZnJvbSAxIHRocm91Z2ggbGVuZ3RoKCR0cmJsKSB7XG4gICAgJHRoaXM6IG50aCgkdHJibCwgJGkpO1xuICAgICRuZXc6ICgpO1xuICAgICRtYXJnaW46IG51bGw7XG4gICAgJHBhZGRpbmc6IG51bGw7XG4gICAgJHBhZGRpbmcteDogbnVsbDtcblxuICAgIEBpZiAkdGhpcyA+IDAge1xuICAgICAgJHRoaXM6IG1hcC1tZXJnZSgkYmxlZWQsIChzcGFuOiAkdGhpcykpO1xuICAgICAgJG1hcmdpbjogc3BhbigkdGhpcyk7XG4gICAgICAkcGFkZGluZzogJG1hcmdpbjtcbiAgICAgICRwYWRkaW5nLXg6ICRwYWRkaW5nO1xuICAgIH1cblxuICAgIEBpZiAkbWFyZ2luIGFuZCAkbWFyZ2luID4gMCB7XG4gICAgICAkbWFyZ2luOiAtICRtYXJnaW47XG5cbiAgICAgIEBpZiBpcy1pbnNpZGUoJHRoaXMpIHtcbiAgICAgICAgJGd1dHRlcjogZ3V0dGVyKCR0aGlzKTtcbiAgICAgICAgJGpvaW46IGlmKCRndXR0ZXIgYW5kIGNvbXBhcmFibGUoJHBhZGRpbmcsICRndXR0ZXIpLCB0cnVlLCBmYWxzZSk7XG4gICAgICAgICRwYWRkaW5nLXg6IGlmKCRqb2luIGFuZCAkcGFkZGluZyA+IDAsICRwYWRkaW5nICsgJGd1dHRlciwgJHBhZGRpbmcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIEBpZiAkaSA9PSAxIHtcbiAgICAgICRuZXc6IChcbiAgICAgICAgbWFyZ2luLXRvcDogJG1hcmdpbixcbiAgICAgICAgcGFkZGluZy10b3A6ICRwYWRkaW5nLFxuICAgICAgICBtYXJnaW4tcmlnaHQ6ICRtYXJnaW4sXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6ICRwYWRkaW5nLXgsXG4gICAgICAgIG1hcmdpbi1ib3R0b206ICRtYXJnaW4sXG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAkcGFkZGluZyxcbiAgICAgICAgbWFyZ2luLWxlZnQ6ICRtYXJnaW4sXG4gICAgICAgIHBhZGRpbmctbGVmdDogJHBhZGRpbmcteCxcbiAgICAgICk7XG4gICAgfSBAZWxzZSBpZiAkaSA9PSAyIHtcbiAgICAgICRuZXc6IChcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAkbWFyZ2luLFxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAkcGFkZGluZy14LFxuICAgICAgICBtYXJnaW4tbGVmdDogJG1hcmdpbixcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAkcGFkZGluZy14LFxuICAgICAgKTtcbiAgICB9IEBlbHNlIGlmICRpID09IDMge1xuICAgICAgJG5ldzogKFxuICAgICAgICBtYXJnaW4tYm90dG9tOiAkbWFyZ2luLFxuICAgICAgICBwYWRkaW5nLWJvdHRvbTogJHBhZGRpbmcsXG4gICAgICApO1xuICAgIH0gQGVsc2UgaWYgJGkgPT0gNCB7XG4gICAgICAkbmV3OiAoXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAkbWFyZ2luLFxuICAgICAgICBwYWRkaW5nLWxlZnQ6ICRwYWRkaW5nLXgsXG4gICAgICApO1xuICAgIH1cblxuICAgICRvdXRwdXQ6IG1hcC1tZXJnZSgkb3V0cHV0LCAkbmV3KTtcbiAgfVxuXG4gIEBlYWNoICRwcm9wLCAkdmFsdWUgaW4gJG91dHB1dCB7XG4gICAgJG91dHB1dDogaWYoJHZhbHVlID09IDAsIG1hcC1tZXJnZSgkb3V0cHV0LCAoJHByb3A6IG51bGwpKSwgJG91dHB1dCk7XG4gIH1cblxuICBAcmV0dXJuIGJsZWVkLXNob3J0aGFuZCgkb3V0cHV0KTtcbn1cblxuLy8gQmxlZWQgU2hvcnRoYW5kXG4vLyAtLS0tLS0tLS0tLS0tLS1cbi8vIENvbnZlcnQgYmxlZWQgb3V0cHV0IGludG8gc2hvcnRoYW5kIHdoZW4gcG9zc2libGUuXG4vLyAtICRibGVlZDogPG91dHB1dCBtYXA+XG5AZnVuY3Rpb24gYmxlZWQtc2hvcnRoYW5kKFxuICAkYmxlZWRcbikge1xuICAkbWFyZ2luOiAoKTtcbiAgJHBhZGRpbmc6ICgpO1xuICAkcmV0dXJuOiAoKTtcblxuICBAZWFjaCAka2V5LCAkdmFsdWUgaW4gJGJsZWVkIHtcbiAgICBAaWYgc3RyLWluZGV4KCRrZXksIG1hcmdpbikge1xuICAgICAgJG1hcmdpbjogbWFwLW1lcmdlKCRtYXJnaW4sICgka2V5OiAkdmFsdWUpKTtcbiAgICB9IEBlbHNlIGlmIHN0ci1pbmRleCgka2V5LCBwYWRkaW5nKSA+IDAge1xuICAgICAgJHBhZGRpbmc6IG1hcC1tZXJnZSgkcGFkZGluZywgKCRrZXk6ICR2YWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gICRwcm9wczogKFxuICAgIG1hcmdpbjogJG1hcmdpbixcbiAgICBwYWRkaW5nOiAkcGFkZGluZyxcbiAgKTtcblxuICBAZWFjaCAkbmFtZSwgJG1hcCBpbiAkcHJvcHMge1xuICAgICRmb3VyOiBpZihsZW5ndGgobWFwLWtleXMoJG1hcCkpID09IDQsIHRydWUsIGZhbHNlKTtcbiAgICAkbnVsbDogaWYoaW5kZXgobWFwLXZhbHVlcygkbWFwKSwgbnVsbCksIHRydWUsIGZhbHNlKTtcblxuICAgIEBpZiAkZm91ciBhbmQgbm90KCRudWxsKSB7XG4gICAgICAkdG9wOiBtYXAtZ2V0KCRtYXAsICcjeyRuYW1lfS10b3AnKTtcbiAgICAgICRyaWdodDogbWFwLWdldCgkbWFwLCAnI3skbmFtZX0tcmlnaHQnKTtcbiAgICAgICRib3R0b206IG1hcC1nZXQoJG1hcCwgJyN7JG5hbWV9LWJvdHRvbScpO1xuICAgICAgJGxlZnQ6IG1hcC1nZXQoJG1hcCwgJyN7JG5hbWV9LWxlZnQnKTtcblxuICAgICAgJHRiOiBpZigkdG9wID09ICRib3R0b20sICR0b3AsIG51bGwpO1xuICAgICAgJHJsOiBpZigkcmlnaHQgPT0gJGxlZnQsICRyaWdodCwgbnVsbCk7XG4gICAgICAkYWxsOiBpZigkdGIgPT0gJHJsLCAkdGIsIG51bGwpO1xuXG4gICAgICAkbmV3OiBpZigkYWxsLCAkYWxsLCBudWxsKTtcblxuICAgICAgQGlmIG5vdCgkbmV3KSB7XG4gICAgICAgIEBpZiAkdGIgYW5kICRybCB7XG4gICAgICAgICAgJG5ldzogJHRiICRybDtcbiAgICAgICAgfSBAZWxzZSBpZiAkcmwge1xuICAgICAgICAgICRuZXc6ICR0b3AgJHJsICRib3R0b207XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICRuZXc6ICR0b3AgJHJpZ2h0ICRib3R0b20gJGxlZnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJHJldHVybjogbWFwLW1lcmdlKCRyZXR1cm4sICgkbmFtZTogJG5ldykpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJHJldHVybjogbWFwLW1lcmdlKCRyZXR1cm4sICRtYXApO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJHJldHVybjtcbn1cbiIsIi8vIEJyZWFrcG9pbnQgSW50ZWdyYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT1cblxuJHN1c3ktbWVkaWE6ICgpICFkZWZhdWx0O1xuJHN1c3ktbWVkaWEtZmFsbGJhY2s6IGZhbHNlICFkZWZhdWx0O1xuXG4kX3N1c3ktbWVkaWEtY29udGV4dDogKCk7XG5cblxuLy8gU3VzeSBCcmVha3BvaW50XG4vLyAtLS0tLS0tLS0tLS0tLS1cbi8vIENoYW5nZSBncmlkcyBhdCBkaWZmZXJlbnQgbWVkaWEgcXVlcnkgYnJlYWtwb2ludHMuXG4vLyAtICRxdWVyeSAgICAgOiA8bWluLXdpZHRoPiBbPG1heC13aWR0aD5dIHwgPHByb3BlcnR5PiA8dmFsdWU+IHwgPG1hcD5cbi8vIC0gJGxheW91dCAgICA6IDxzZXR0aW5ncz5cbi8vIC0gJG5vLXF1ZXJ5ICA6IDxib29sZWFuPiB8IDxzZWxlY3Rvcj5cbkBtaXhpbiBzdXN5LWJyZWFrcG9pbnQoXG4gICRxdWVyeSxcbiAgJGxheW91dDogZmFsc2UsXG4gICRuby1xdWVyeTogJHN1c3ktbWVkaWEtZmFsbGJhY2tcbikge1xuICBAaW5jbHVkZSBzdXN5LW1lZGlhLXJvdXRlcigkcXVlcnksICRuby1xdWVyeSkge1xuICAgIEBpZiAkbGF5b3V0IHtcbiAgICAgIEBpbmNsdWRlIHdpdGgtbGF5b3V0KCRsYXlvdXQpIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBTdXN5IE1lZGlhXG4vLyAtLS0tLS0tLS0tXG4vLyAtICRxdWVyeTogPG1pbi13aWR0aD4gWzxtYXgtd2lkdGg+XSB8IDxwcm9wZXJ0eT4gPHZhbHVlPlxuLy8gLSAkbm8tcXVlcnk6IDxib29sZWFuPiB8IDxzZWxlY3Rvcj5cbkBtaXhpbiBzdXN5LW1lZGlhKFxuICAkcXVlcnksXG4gICRuby1xdWVyeTogJHN1c3ktbWVkaWEtZmFsbGJhY2tcbikge1xuICAkb2xkLWNvbnRleHQ6ICRfc3VzeS1tZWRpYS1jb250ZXh0O1xuICAkbmFtZTogaWYobWFwLWhhcy1rZXkoJHN1c3ktbWVkaWEsICRxdWVyeSksICRxdWVyeSwgbnVsbCk7XG4gICRxdWVyeTogc3VzeS1nZXQtbWVkaWEoJHF1ZXJ5KTtcbiAgJHF1ZXJ5OiBzdXN5LXBhcnNlLW1lZGlhKCRxdWVyeSk7XG5cbiAgQGluY2x1ZGUgc3VzeS1tZWRpYS1jb250ZXh0KCRxdWVyeSwgJG5hbWUpO1xuXG4gIEBpZiAkbm8tcXVlcnkgYW5kIHR5cGUtb2YoJG5vLXF1ZXJ5KSAhPSBzdHJpbmcge1xuICAgIEBjb250ZW50O1xuICB9IEBlbHNlIHtcbiAgICBAbWVkaWEgI3tzdXN5LXJlbmRlci1tZWRpYSgkcXVlcnkpfSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG5cbiAgICBAaWYgdHlwZS1vZigkbm8tcXVlcnkpID09IHN0cmluZyB7XG4gICAgICAjeyRuby1xdWVyeX0gJiB7XG4gICAgICAgIEBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIHN1c3ktbWVkaWEtY29udGV4dCgkb2xkLWNvbnRleHQsICRjbGVhbjogdHJ1ZSk7XG59XG5cblxuLy8gTWVkaWEgUm91dGVyXG4vLyAtLS0tLS0tLS0tLS1cbi8vIFJvdXQgbWVkaWEgYXJndW1lbnRzIHRvIHRoZSBjb3JyZWN0IG1peGluLlxuQG1peGluIHN1c3ktbWVkaWEtcm91dGVyKFxuICAkcXVlcnksXG4gICRuby1xdWVyeTogJHN1c3ktbWVkaWEtZmFsbGJhY2tcbikge1xuICBAaWYgc3VzeS1zdXBwb3J0KGJyZWFrcG9pbnQsIChtaXhpbjogYnJlYWtwb2ludCksICR3YXJuOiBmYWxzZSkge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnQoJHF1ZXJ5LCAkbm8tcXVlcnkpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgQGluY2x1ZGUgc3VzeS1tZWRpYSgkcXVlcnksICRuby1xdWVyeSkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cblxuLy8gVXBkYXRlIENvbnRleHRcbi8vIC0tLS0tLS0tLS0tLS1cbi8vIFNldCB0aGUgbmV3IG1lZGlhIGNvbnRleHRcbkBtaXhpbiBzdXN5LW1lZGlhLWNvbnRleHQoXG4gICRxdWVyeSxcbiAgJG5hbWU6IG51bGwsXG4gICRjbGVhbjogZmFsc2Vcbikge1xuICAkcXVlcnk6IG1hcC1tZXJnZSgobmFtZTogJG5hbWUpLCAkcXVlcnkpO1xuXG4gIEBpZiAkY2xlYW4ge1xuICAgICRfc3VzeS1tZWRpYS1jb250ZXh0OiAkcXVlcnkgIWdsb2JhbDtcbiAgfSBAZWxzZSB7XG4gICAgJF9zdXN5LW1lZGlhLWNvbnRleHQ6IG1hcC1tZXJnZSgkX3N1c3ktbWVkaWEtY29udGV4dCwgJHF1ZXJ5KSAhZ2xvYmFsO1xuICB9XG59XG5cblxuLy8gTWVkaWEgQ29udGV4dFxuLy8gLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHRoZSBmdWxsIG1lZGlhIGNvbnRleHQsIG9yIGEgc2luZ2xlIG1lZGlhIHByb3BlcnR5IChlLmcuIG1pbi13aWR0aClcbkBmdW5jdGlvbiBzdXN5LW1lZGlhLWNvbnRleHQoXG4gICRwcm9wZXJ0eTogZmFsc2Vcbikge1xuICBAaWYgJHByb3BlcnR5IHtcbiAgICBAcmV0dXJuIG1hcC1nZXQoJF9zdXN5LW1lZGlhLWNvbnRleHQsICRwcm9wZXJ0eSk7XG4gIH0gQGVsc2Uge1xuICAgIEByZXR1cm4gJF9zdXN5LW1lZGlhLWNvbnRleHQ7XG4gIH1cbn1cblxuXG4vLyBHZXQgTWVkaWFcbi8vIC0tLS0tLS0tLVxuLy8gUmV0dXJuIGEgbmFtZWQgbWVkaWEtcXVlcnkgZnJvbSAkc3VzeS1tZWRpYS5cbi8vIC0gJG5hbWU6IDxrZXk+XG5AZnVuY3Rpb24gc3VzeS1nZXQtbWVkaWEoXG4gICRuYW1lXG4pIHtcbiAgQGlmIG1hcC1oYXMta2V5KCRzdXN5LW1lZGlhLCAkbmFtZSkge1xuICAgICRtYXAtdmFsdWU6IG1hcC1nZXQoJHN1c3ktbWVkaWEsICRuYW1lKTtcbiAgICBAaWYgKCRuYW1lID09ICRtYXAtdmFsdWUpIHtcbiAgICAgICRuYW1lOiAkbWFwLXZhbHVlO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJG5hbWU6IHN1c3ktZ2V0LW1lZGlhKCRtYXAtdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJG5hbWU7XG59XG5cblxuLy8gUmVuZGVyIE1lZGlhXG4vLyAtLS0tLS0tLS0tLS1cbi8vIEJ1aWxkIGEgbWVkaWEtcXVlcnkgc3RyaW5nIGZyb20gdmFyaW91cyBtZWRpYSBzZXR0aW5nc1xuQGZ1bmN0aW9uIHN1c3ktcmVuZGVyLW1lZGlhKFxuICAkcXVlcnlcbikge1xuICAkb3V0cHV0OiBudWxsO1xuICBAZWFjaCAkcHJvcGVydHksICR2YWx1ZSBpbiAkcXVlcnkge1xuICAgICRzdHJpbmc6IG51bGw7XG5cbiAgICBAaWYgJHByb3BlcnR5ID09IG1lZGlhIHtcbiAgICAgICRzdHJpbmc6ICR2YWx1ZTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRzdHJpbmc6ICcoI3skcHJvcGVydHl9OiAjeyR2YWx1ZX0pJztcbiAgICB9XG5cbiAgICAkb3V0cHV0OiBpZigkb3V0cHV0LCAnI3skb3V0cHV0fSBhbmQgI3skc3RyaW5nfScsICRzdHJpbmcpO1xuICB9XG5cbiAgQHJldHVybiAkb3V0cHV0O1xufVxuXG5cbi8vIFBhcnNlIE1lZGlhXG4vLyAtLS0tLS0tLS0tLVxuLy8gUmV0dXJuIHBhcnNlZCBtZWRpYS1xdWVyeSBzZXR0aW5ncyBiYXNlZCBvbiBzaG9ydGhhbmRcbkBmdW5jdGlvbiBzdXN5LXBhcnNlLW1lZGlhKFxuICAkcXVlcnlcbikge1xuICAkbXE6IG51bGw7XG4gIEBpZiB0eXBlLW9mKCRxdWVyeSkgPT0gbWFwIHtcbiAgICAkbXE6ICRxdWVyeTtcbiAgfSBAZWxzZSBpZiB0eXBlLW9mKCRxdWVyeSkgPT0gbnVtYmVyIHtcbiAgICAkbXE6IChtaW4td2lkdGg6ICRxdWVyeSk7XG4gIH0gQGVsc2UgaWYgdHlwZS1vZigkcXVlcnkpID09IGxpc3QgYW5kIGxlbmd0aCgkcXVlcnkpID09IDIge1xuICAgIEBpZiB0eXBlLW9mKG50aCgkcXVlcnksIDEpKSA9PSBudW1iZXIge1xuICAgICAgJG1xOiAoXG4gICAgICAgIG1pbi13aWR0aDogbWluKCRxdWVyeS4uLiksXG4gICAgICAgIG1heC13aWR0aDogbWF4KCRxdWVyeS4uLiksXG4gICAgICApO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJG1xOiAobnRoKCRxdWVyeSwgMSk6IG50aCgkcXVlcnksIDIpKTtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgICRtcTogKG1lZGlhOiAnI3skcXVlcnl9Jyk7XG4gIH1cblxuICBAcmV0dXJuICRtcTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxBQUFBLGFBQWEsQ0FBQztFQUNWLE9BQU8sRUFBRSxXQUFXO0VBQ3BCLE9BQU8sRUFBRSxXQUFXO0VBQ3BCLE9BQU8sRUFBRSxJQUFJO0VBQ2IsV0FBVyxFQUFFLE1BQU07RUFDbkIsYUFBYSxFQUFFLE1BQU07RUFDckIsZUFBZSxFQUFFLE1BQU07RUFDdkIsU0FBUyxFQUFFLFFBQVE7RUFDbkIsU0FBUyxFQUFFLHVCQUF1QixHQW9CckM7RUE1QkQsQUFTSSxhQVRTLENBU1QsRUFBRSxDQUFDO0lBQ0MsT0FBTyxFQUFFLElBQUk7SUFDYixXQUFXLEVBQUUsTUFBTTtJQUNuQixhQUFhLEVBQUUsTUFBTTtJQUNyQixTQUFTLEVBQUUsUUFBUTtJQUNuQixTQUFTLEVBQUUsdUJBQXVCO0lBQ2xDLFVBQVUsRUFBRSw0QkFBNEI7SUFDeEMsU0FBUyxFQUFFLDJCQUEyQjtJQUN0QyxXQUFXLEVBQUUsNkJBQTZCO0lBQzFDLE1BQU0sRUFBRSxNQUFNO0lBQ2QsZUFBZSxFQUFFLFlBQVk7SUFDN0IsU0FBUyxFQUFFLE1BQU0sR0FPcEI7SUEzQkwsQUFxQlEsYUFyQkssQ0FTVCxFQUFFLENBWUUsRUFBRSxBQUFBLGFBQWEsQ0FBQztNQUNaLGdCQUFnQixFQUFFLGtDQUFrQyxHQUN2RDtJQXZCVCxBQXdCUSxhQXhCSyxDQVNULEVBQUUsQ0FlRSxFQUFFLEFBQUEsWUFBWSxDQUFDO01BQ1gsTUFBTSxFQUFFLElBQUksR0FDZjs7QUFHVCxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUs7RUFDcEIsQUFDSSxnQkFEWSxDQUNaLGNBQWMsQ0FBQztJQUNYLE9BQU8sRUFBRSxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEdBQ3pFOztBQUdULE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSztFQUNwQixBQUFBLGFBQWEsQ0FBQyxFQUFFLENBQUM7SUFDYixjQUFjLEVBQUUsTUFBTSxHQUN6Qjs7Q0FFTCxBQUFBLEFBR1ksRUFIWCxDQUFHLG9DQUFvQyxBQUF2QyxFQUNHLGFBQWEsQ0FDVCxFQUFFLENBQ0UsRUFBRSxBQUFBLFlBQVksQ0FBQztFQUNYLGdCQUFnQixFQUFFLGtDQUFrQyxHQUN2RDs7QTRDRVQsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLE9BQU8sU0FBUyxFQUFFLEtBQUs7RTVDRy9DLEFBQUEsb0JBQW9CLENBQUE7SUFDd0IsT0FBTyxFQUFFLElBQUksR0FDeEQ7O0E0Q0xHLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSztFNUNPNUIsQUFBQSxrQkFBa0IsQ0FBQztJQUMyQixPQUFPLEVBQUUsSUFBSSxHQUMxRCJ9 */
