/********************************************************* {COPYRIGHT-TOP} ***
* Licensed Materials - Property of IBM
* 5725-Z22, 5725-Z63, 5725-U33, 5725-Z63
*
* (C) Copyright IBM Corporation 2017
*
* All Rights Reserved.
* US Government Users Restricted Rights - Use, duplication or disclosure
* restricted by GSA ADP Schedule Contract with IBM Corp.
********************************************************** {COPYRIGHT-END} **/
/** background colours, aka 50 shades of grey **/
body.apim,
html {
  background-color: #fff;
}
.apim {
/** text colors **/
  color: #152935 !important;
/* Help dialog */
/** border colours **/
/** nav banner **/
/* material styles */
}
.apim .secondaryText {
  color: #24465b;
}
.apim .error {
  color: #f00;
}
.apim a,
.apim select:not(.bx--select__input),
.apim .highlightText,
.apim .highlightTextContainer:hover .hoveredHighlightText,
.apim .hoveredHighlightText:hover {
  color: #3d70b2;
}
.apim .toc .tocItem .selected:before {
  background-color: #3d70b2;
}
.apim .toc a:not(.selected) {
  color: #152935;
}
.apim label.description,
.apim form label {
  color: #373737;
}
.apim .secondaryBackground,
.apim .secondaryBackground .spinner:after,
.apim .minorColumnRight,
.apim .unselectedCollectionContent,
.apim .tableHeaderBackground,
.apim .toc {
  background-color: #f5f7fa;
}
.apim .searchCollection .searchInput,
.apim .searchCollection .searchIcon {
  background-color: #f5f7fa;
}
.apim .tertiaryBackground {
  background-color: #fcfcfc;
}
.apim .unselectedCollectionContent:hover {
  background-color: inherit;
}
.apim .helpDialog {
  background-color: transparent;
  color: #dedfe0;
}
.apim .helpDialog .modal-content {
  background-color: transparent;
  border: 0;
  -webkit-box-shadow: none;
  box-shadow: none;
}
.apim .helpDialog h1 {
  margin: 0;
}
.apim .helpDialog button {
  margin-bottom: 10px;
  min-width: 30%;
}
.apim .helpDialog a {
  color: #fff;
}
.apim .helpDialog hr {
  margin-top: 10px;
  width: 10%;
}
.apim .helpDialog ul {
  width: 70%;
}
.apim .helpDialog ul li {
  margin-bottom: 10px;
}
.apim .helpDialog .modal-header,
.apim .helpDialog .modal-footer {
  border: 0;
}
.apim .GET {
  background-color: #4178be;
}
.apim .PUT {
  background-color: #d74108;
}
.apim .POST {
  background-color: #4b8400;
}
.apim .DELETE {
  background-color: #ad1625;
}
.apim .OPTIONS {
  background-color: #734098;
}
.apim .PATCH {
  background-color: #a36400;
}
.apim .HEAD {
  background-color: #008571;
}
.apim .tag.SOAP,
.apim .tagContainer .tag.SOAP {
  background-color: #cb4000;
  color: #fff;
}
.apim .tag.REST,
.apim .tagContainer .tag.REST {
  background-color: #006d7e;
  color: #fff;
}
.apim .primaryBorder,
.apim .majorColumnLeft,
.apim .minorColumnRight,
.apim select,
.apim .strongBorderBottom,
.apim .on-drag-hover {
  border-color: #cfcfcf;
}
.apim .secondaryBorder,
.apim .tableHeaderBackground,
.apim .leftColumnSize,
.apim .rightColumnPosition,
.apim .tableEntry,
.apim .approvals,
.apim .approval,
.apim .approvalResolution,
.apim .verticalSeparator,
.apim .section,
.apim .softBorderBottom,
.apim .on-drag-enter {
  border-color: #e5e5e5;
}
.apim .searchCollection .searchInput,
.apim .searchCollection .searchIcon {
  border-color: #e5e5e5;
}
.apim .toolbar,
.apim .toolbar .contentBox {
  border-color: #e5e5e5;
}
.apim .mainBanner {
  color: #fff;
}
.apim .mainBanner a {
  color: #fff;
}
.apim .mainBanner nav {
  width: 100%;
  height: 60px;
  -webkit-transition: background-color 0.5s linear;
  -moz-transition: background-color 0.5s linear;
  -o-transition: background-color 0.5s linear;
  -ms-transition: background-color 0.5s linear;
  transition: background-color 0.5s linear;
}
.apim .mainBanner .dropdown-menu a {
  color: #152935;
}
.apim .mainBanner .subBanner a {
  color: #152935;
}
.apim .mainBanner .subBanner a.backLink {
  color: #3d70b2;
  line-height: 50px;
  margin-top: 12px;
}
.apim .mainBanner .subBanner button span.caret {
  color: #3d70b2;
  float: right;
  margin-top: 12px;
}
.apim .mainBanner .subBanner .selected md-icon {
  fill: #3d70b2;
}
.apim .mainBanner .subBanner md-icon {
  fill: #152935;
}
.apim .mainBanner li.subBanner {
  background-color: #f5f7fa;
  color: #152935;
}
.apim nav.subBanner {
  background-color: #fff;
  color: #152935;
}
.apim nav.subBanner .menuList li.selected {
  border-color: #3d70b2;
  opacity: 1;
  -ms-filter: none;
  filter: none;
}
.apim nav.subBanner .menuList li.selected a {
  color: #3d70b2;
}
.apim md-sidenav .navItem.selected a {
  background-color: #dce1ff;
}
.apim md-slider .md-thumb:after {
  border-color: #3d70b2;
}
.apim md-slider .md-sign:after {
  border-top-color: #3d70b2;
}
.apim md-input-container.md-input-focused label:not(.md-no-float) {
  color: #3d70b2;
}
.apim md-input-container:not(.md-input-invalid).md-input-focused .md-input {
  border-color: #3d70b2;
}
.apim md-radio-button .md-off {
  border-color: #3d70b2;
}
.apim md-radio-button:not([disabled]).md-primary.md-checked .md-off {
  border-color: #3d70b2;
}
.apim md-radio-button:not([disabled]).md-primary .md-on {
  background-color: #3d70b2;
}
.apim md-slider .md-track.md-track-fill,
.apim md-slider .md-thumb:after,
.apim md-slider .md-sign {
  background-color: #3d70b2;
}
.apim md-switch.md-checked .md-bar {
  background-color: #3d70b2;
}
.apim md-checkbox.md-primary.md-checked:not([disabled]) .md-icon {
  background-color: #3d70b2;
}
/** sticky note **/
.stickyNote {
  background-color: #fefbea;
  border-radius: 5px;
  margin: 10px auto;
  max-width: 95%;
  min-height: 25px;
  padding: 10px;
}
.stickyNote a {
  color: #0180e9;
}
.catalogItem h1 {
  color: #3d70b2;
}
.catalogs.centerColumn .stickyNote {
  margin: 20px auto 0;
}
/** highlight & hover colours **/
/** primaryHighlight, secondaryHighlight, tertiaryHighlight provide three shades of blue highlight **/
/** use primary for bold highlighting, or highlighting against non-white backgrounds **/
.primaryHighlight:hover,
.lockingSection {
  background-color: #daecf8;
}
.secondaryHighlight.selected,
.secondaryHighlight:hover {
  background-color: #e4f2fb;
}
.tertiaryHighlight:hover,
.tableEntry:hover {
  background-color: #f2f9ff;
}
/** approval colors **/
.approvalResolution.rejected,
.approvalResolution.cancelled {
  background-color: #fce5ef;
}
.approvalResolution.approved {
  background-color: #e9f4d6;
}
/** details page **/
.detailsEditor {
  background-color: #f5f7fa;
  padding: 20px 20px 20px 0;
}
.detailsEditor button.iconOnlyButton {
  color: #b3b3b4;
}
.detailsContainer {
  background-color: #fff;
  border: 1px solid #e5e5e5;
  margin-bottom: 20px;
}
.detailsContainer h2,
.detailsContainer h3 {
/* background-color: $background-secondary*/
  padding: 5px 15px 5px 0;
}
.detailsContainer h2 {
  color: #3d70b2;
}
.detailsContainer h4 {
  font-weight: normal;
  padding-top: 5px;
}
.detailsSection {
  padding: 10px 20px;
}
.detailsSection .leftColumn {
  display: inline-block;
  vertical-align: top;
  width: 14%;
}
.detailsSection .rightColumn {
  display: inline-block;
  width: 85%;
}
.detailsSubSection {
  border: 1px solid #e5e5e5;
  border-bottom: 0;
  padding-bottom: 20px;
}
.detailsSubSection:last-child {
  border-bottom: 1px solid #e5e5e5;
}
.detailsSplitSection {
  border: 1px solid #e5e5e5;
  -webkit-box-shadow: 0 1px 3px 0 rgba(0,0,0,0.1);
  box-shadow: 0 1px 3px 0 rgba(0,0,0,0.1);
  margin-bottom: 7px;
}
.editorBar {
  display: -webkit-box;
  display: -moz-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: box;
  display: flex;
  -webkit-box-lines: multiple;
  -moz-box-lines: multiple;
  -o-box-lines: multiple;
  -webkit-flex-wrap: wrap;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  padding: 5px 10px;
  width: 100%;
}
.editorBar h5 {
  margin-top: 10px;
}
.editorContent md-input-container,
.editorBar md-input-container {
  -webkit-box-flex: 1;
  -moz-box-flex: 1;
  -o-box-flex: 1;
  box-flex: 1;
  -webkit-flex: 1;
  -ms-flex: 1;
  flex: 1;
  min-width: 300px;
}
.editorContent table md-input-container,
.editorBar table md-input-container {
  min-width: 0;
  padding: 0;
  width: 100%;
}
.editorBar table md-input-container {
  margin: 0;
}
.editorContent table tbody tr:hover td,
.editorBar table tbody tr:hover td {
  border: 0;
  -webkit-box-shadow: none;
  box-shadow: none;
}
button {
  background-color: #fff;
  border: 1px solid #3d70b2;
  color: #3d70b2;
}
button:not(:disabled):not(.bx--modal__close):hover,
button:not(:disabled):not(.bx--modal__close):focus {
  background-color: #3d70b2;
  color: #fff;
}
button.textOnlyButton:not(:disabled) {
  color: #3d70b2;
}
button.textOnlyButton:hover,
button.textOnlyButton:focus {
  text-decoration: underline;
}
button.buttonAndLabel.propertyRequired,
button.iconOnlyButton.propertyRequired {
  background-color: #4278bf;
  border-radius: 50%;
}
button.buttonAndLabel:not(:disabled),
button.iconOnlyButton:not(:disabled) {
  color: rgba(0,0,0,0.5);
}
button.buttonAndLabel:not(:disabled):hover,
button.iconOnlyButton:not(:disabled):hover,
button.buttonAndLabel:not(:disabled):focus,
button.iconOnlyButton:not(:disabled):focus {
  background-color: transparent;
  color: #3d70b2;
}
button + button.iconOnlyButton.dropdown-toggle {
  color: #3d70b2;
}
/** spinner icon **/
.spinner {
  background: #fff;
  background: -webkit-linear-gradient(left, #3d70b2 10%, rgba(255,255,255,0) 42%);
  background: -moz-linear-gradient(left, #3d70b2 10%, rgba(255,255,255,0) 42%);
  background: -o-linear-gradient(left, #3d70b2 10%, rgba(255,255,255,0) 42%);
  background: -ms-linear-gradient(left, #3d70b2 10%, rgba(255,255,255,0) 42%);
  background: linear-gradient(to right, #3d70b2 10%, rgba(255,255,255,0) 42%);
}
.spinner:before {
  background-color: #3d70b2;
}
.spinner:after {
  background-color: #fff;
}
/** getting started menu **/
.gettingStarted md-bottom-sheet.md-list {
  background-color: #eeefff;
}
.gettingStarted md-bottom-sheet.md-list md-list-item {
  border-bottom: 1px solid #d8d8d8;
}
.gettingStarted md-bottom-sheet.md-list md-list-item .md-list-item-content,
.gettingStarted md-bottom-sheet.md-list md-list-item .material-icons {
  color: #3d70b2 !important;
}
.gettingStarted.secureGatewayTour .wraplist .md-list-item-content:hover {
  color: #3d70b2;
}
.gettingStartedMinimized .md-button.md-fab {
  background-color: #3d70b2;
  border: 0;
  color: #fff;
}
.gettingStartedMinimized .md-button.md-fab:hover {
  background-color: #3d70b2;
}
.tooltipContainer .tooltip .tooltip-arrow:after {
  color: #3d70b2;
}
/** file selector **/
.fileSelector:not(.fileSelected) .btn,
.fileSelector.fileSelected.showAsIcon .fileSelect {
  border: 1px solid #3d70b2;
  color: #3d70b2;
}
.fileSelector:not(.fileSelected) .btn:hover,
.fileSelector.fileSelected.showAsIcon .fileSelect:hover {
  background: #3d70b2;
  color: #fff;
}
.showAsIcon .fileSelect span {
  color: #3d70b2;
}
.environmentDetails .registryMenu button:focus {
  border-bottom: 2px solid #3d70b2;
}
.usersCollection a.secondaryText {
  color: #3d70b2;
}
.rightArrow:hover,
.leftArrow:hover {
  color: #fff;
}
.card .approveComment div:hover {
  color: #3d70b2;
}
.feedbackBox .contentArea .ratingBox .selected .material-icons {
  color: #3d70b2;
  font-size: 64px;
}
.comboBox input:focus {
  border-color: #3d70b2;
}
.comboBox input:focus + .input-group-btn button {
  border-color: #3d70b2;
}
.messageArea .INFO {
  color: #3d70b2;
}
.ace_search {
  background-color: #f7f9f8;
  color: #000;
}
.ace_search input {
  color: #000;
}
.ace_search button {
  background-color: transparent;
  border: 0;
  min-height: 0;
  min-width: 0;
}
.pagination > .active > a,
.pagination > .active > a:hover,
.pagination > .active > a:focus,
.pagination > .active > span,
.pagination > .active > span:hover,
.pagination > .active > span:focus {
  background-color: #3d70b2;
  border-color: #3d70b2;
}
.pagination > li > a:hover,
.pagination > li > span:hover,
.pagination > li > a:focus,
.pagination > li > span:focus {
  color: #3d70b2;
}

/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNzcy90aGVtZS5zdHlsIiwiLi4vbm9kZV9tb2R1bGVzL25pYi9saWIvbmliL2JvcmRlci5zdHlsIiwiLi4vbm9kZV9tb2R1bGVzL25pYi9saWIvbmliL3ZlbmRvci5zdHlsIiwiLi4vbm9kZV9tb2R1bGVzL25pYi9saWIvbmliL3NpemUuc3R5bCIsIi4uL25vZGVfbW9kdWxlcy9uaWIvbGliL25pYi9ib3JkZXItcmFkaXVzLnN0eWwiLCIuLi9ub2RlX21vZHVsZXMvbmliL2xpYi9uaWIvZmxleC5zdHlsIiwiLi4vbm9kZV9tb2R1bGVzL3N0eWx1cy9saWIvZnVuY3Rpb25zL2luZGV4LnN0eWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7QUFVQTtBQUNBO0FBQ0E7RUFDRSxrQkFBa0IsS0FBbEI7O0FBRUY7QUFDRTtFQUNBLE9BQU8sbUJBQVA7QUE2Q0E7QUFpRUE7QUFpQ0E7QUFvREE7O0FBak1BO0VBQ0UsT0FBTyxRQUFQOztBQUVGO0VBQ0UsT0FBTyxLQUFQOztBQUVGO0FBQ0E7QUFDRjtBQUNFO0FBQ0E7RUFDRSxPQUFPLFFBQVA7O0FBR0E7RUFDRSxrQkFBa0IsUUFBbEI7O0FBRUY7RUFDRSxPQUFPLFFBQVA7O0FBRUo7QUFDQTtFQUNFLE9BQU8sUUFBUDs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRSxrQkFBa0IsUUFBbEI7O0FBR0E7QUFDQTtFQUNFLGtCQUFrQixRQUFsQjs7QUFFSjtFQUNFLGtCQUFrQixRQUFsQjs7QUFFRjtFQUNFLGtCQUFrQixRQUFsQjs7QUFHRjtFQUNFLGtCQUFrQixZQUFsQjtFQUNBLE9BQU8sUUFBUDs7QUFFQTtFQUNFLGtCQUFrQixZQUFsQjtFQzNERixRQUFRLEVBQVI7RUNrQ2Msb0JBQUcsS0FBSDtFQVJILFlBQUcsS0FBSDs7QUZxQ1g7RUFDRSxRQUFRLEVBQVI7O0FBRUY7RUFDRSxlQUFlLEtBQWY7RUFDQSxXQUFXLElBQVg7O0FBRUY7RUFDRSxPQUFPLEtBQVA7O0FB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TyxLQUFQOztBQUVBO0VBQ0UsT0FBTyxLQUFQOztBQUVGO0VBQ0Usa0JBQWtCLFlBQWxCO0VDdGVGLFFBQVEsRUFBUjtFRHdlRSxZQUFXLEVBQVg7RUFDQSxXQUFVLEVBQVY7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0Usa0JBQWtCLFFBQWxCO0VBQ0EsY0FBYyxRQUFkOztBQUtBO0FBQ0E7OztFQUNFLE9BQU8sUUFBUCIsImZpbGUiOiJjc3MvdGhlbWUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiB7Q09QWVJJR0hULVRPUH0gKioqXG4qIExpY2Vuc2VkIE1hdGVyaWFscyAtIFByb3BlcnR5IG9mIElCTVxuKiA1NzI1LVoyMiwgNTcyNS1aNjMsIDU3MjUtVTMzLCA1NzI1LVo2M1xuKlxuKiAoQykgQ29weXJpZ2h0IElCTSBDb3Jwb3JhdGlvbiAyMDE3XG4qXG4qIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4qIFVTIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgLSBVc2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmVcbiogcmVzdHJpY3RlZCBieSBHU0EgQURQIFNjaGVkdWxlIENvbnRyYWN0IHdpdGggSUJNIENvcnAuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIHtDT1BZUklHSFQtRU5EfSAqKi9cbi8qKiBiYWNrZ3JvdW5kIGNvbG91cnMsIGFrYSA1MCBzaGFkZXMgb2YgZ3JleSAqKi9cbmJvZHkuYXBpbVxuaHRtbFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1wcmltYXJ5XG5cbi5hcGltXG4gIC8qKiB0ZXh0IGNvbG9ycyAqKi9cbiAgY29sb3I6ICR0ZXh0LXByaW1hcnkgIWltcG9ydGFudCAvLyBAc3R5bGludCBpZ25vcmUgaW1wb3J0YW50XG5cbiAgLnNlY29uZGFyeVRleHRcbiAgICBjb2xvcjogJHRleHQtc2Vjb25kYXJ5XG5cbiAgLmVycm9yXG4gICAgY29sb3I6ICR0ZXh0LWVycm9yXG5cbiAgYVxuICBzZWxlY3Q6bm90KC5ieC0tc2VsZWN0X19pbnB1dCksXG4gIC5oaWdobGlnaHRUZXh0XG4gIC5oaWdobGlnaHRUZXh0Q29udGFpbmVyOmhvdmVyIC5ob3ZlcmVkSGlnaGxpZ2h0VGV4dFxuICAuaG92ZXJlZEhpZ2hsaWdodFRleHQ6aG92ZXJcbiAgICBjb2xvcjogJHRleHQtbGlua1xuXG4gIC50b2NcbiAgICAudG9jSXRlbSAuc2VsZWN0ZWQ6YmVmb3JlXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGV4dC1saW5rXG5cbiAgICBhOm5vdCguc2VsZWN0ZWQpXG4gICAgICBjb2xvcjogJHRleHQtcHJpbWFyeVxuXG4gIGxhYmVsLmRlc2NyaXB0aW9uXG4gIGZvcm0gbGFiZWwgLy8gQHN0eWxpbnQgaWdub3JlIGNvbG9uc1xuICAgIGNvbG9yOiAkdGV4dC1sYWJlbFxuXG4gIC5zZWNvbmRhcnlCYWNrZ3JvdW5kXG4gIC5zZWNvbmRhcnlCYWNrZ3JvdW5kIC5zcGlubmVyOmFmdGVyXG4gIC5taW5vckNvbHVtblJpZ2h0XG4gIC51bnNlbGVjdGVkQ29sbGVjdGlvbkNvbnRlbnRcbiAgLnRhYmxlSGVhZGVyQmFja2dyb3VuZFxuICAudG9jXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtc2Vjb25kYXJ5XG5cbiAgLnNlYXJjaENvbGxlY3Rpb25cbiAgICAuc2VhcmNoSW5wdXRcbiAgICAuc2VhcmNoSWNvblxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtc2Vjb25kYXJ5XG5cbiAgLnRlcnRpYXJ5QmFja2dyb3VuZFxuICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLXRlcnRpYXJ5XG5cbiAgLnVuc2VsZWN0ZWRDb2xsZWN0aW9uQ29udGVudDpob3ZlclxuICAgIGJhY2tncm91bmQtY29sb3I6IGluaGVyaXRcblxuICAvKiBIZWxwIGRpYWxvZyAqL1xuICAuaGVscERpYWxvZ1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50XG4gICAgY29sb3I6ICNkZWRmZTBcblxuICAgIC5tb2RhbC1jb250ZW50XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudFxuICAgICAgYm9yZGVyOiAwXG4gICAgICBib3gtc2hhZG93OiBub25lXG5cbiAgICBoMVxuICAgICAgbWFyZ2luOiAwXG5cbiAgICBidXR0b25cbiAgICAgIG1hcmdpbi1ib3R0b206IDEwcHhcbiAgICAgIG1pbi13aWR0aDogMzAlXG5cbiAgICBhXG4gICAgICBjb2xvcjogd2hpdGVcblxuICAgIGhyXG4gICAgICBtYXJnaW4tdG9wOiAxMHB4XG4gICAgICB3aWR0aDogMTAlXG5cbiAgICB1bFxuICAgICAgd2lkdGg6IDcwJVxuXG4gICAgICBsaVxuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4XG5cbiAgICAubW9kYWwtaGVhZGVyXG4gICAgLm1vZGFsLWZvb3RlclxuICAgICAgYm9yZGVyOiAwXG5cbiAgLkdFVFxuICAgIGJhY2tncm91bmQtY29sb3I6ICRodHRwLWdldFxuXG4gIC5QVVRcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkaHR0cC1wdXRcblxuICAuUE9TVFxuICAgIGJhY2tncm91bmQtY29sb3I6ICRodHRwLXBvc3RcblxuICAuREVMRVRFXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGh0dHAtZGVsZXRlXG5cbiAgLk9QVElPTlNcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkaHR0cC1vcHRpb25zXG5cbiAgLlBBVENIXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGh0dHAtcGF0Y2hcblxuICAuSEVBRFxuICAgIGJhY2tncm91bmQtY29sb3I6ICRodHRwLWhlYWRcblxuICAudGFnLlNPQVBcbiAgLnRhZ0NvbnRhaW5lciAudGFnLlNPQVBcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFnLXNvYXBcbiAgICBjb2xvcjogJHRleHQtdGVydGlhcnlcblxuICAudGFnLlJFU1RcbiAgLnRhZ0NvbnRhaW5lciAudGFnLlJFU1RcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGFnLXJlc3RcbiAgICBjb2xvcjogJHRleHQtdGVydGlhcnlcblxuICAvKiogYm9yZGVyIGNvbG91cnMgKiovXG4gIC5wcmltYXJ5Qm9yZGVyXG4gIC5tYWpvckNvbHVtbkxlZnRcbiAgLm1pbm9yQ29sdW1uUmlnaHRcbiAgc2VsZWN0XG4gIC5zdHJvbmdCb3JkZXJCb3R0b21cbiAgLm9uLWRyYWctaG92ZXJcbiAgICBib3JkZXItY29sb3I6ICRib3JkZXItcHJpbWFyeVxuXG4gIC5zZWNvbmRhcnlCb3JkZXJcbiAgLnRhYmxlSGVhZGVyQmFja2dyb3VuZFxuICAubGVmdENvbHVtblNpemVcbiAgLnJpZ2h0Q29sdW1uUG9zaXRpb25cbiAgLnRhYmxlRW50cnlcbiAgLmFwcHJvdmFsc1xuICAuYXBwcm92YWxcbiAgLmFwcHJvdmFsUmVzb2x1dGlvblxuICAudmVydGljYWxTZXBhcmF0b3JcbiAgLnNlY3Rpb25cbiAgLnNvZnRCb3JkZXJCb3R0b21cbiAgLm9uLWRyYWctZW50ZXJcbiAgICBib3JkZXItY29sb3I6ICRib3JkZXItc2Vjb25kYXJ5XG5cbiAgLnNlYXJjaENvbGxlY3Rpb25cbiAgICAuc2VhcmNoSW5wdXRcbiAgICAuc2VhcmNoSWNvblxuICAgICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLXNlY29uZGFyeVxuXG4gIC50b29sYmFyXG4gICAgJlxuICAgIC5jb250ZW50Qm94XG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItc2Vjb25kYXJ5XG5cbiAgLyoqIG5hdiBiYW5uZXIgKiovXG4gIC5tYWluQmFubmVyXG4gICAgY29sb3I6IHdoaXRlXG5cbiAgICBhXG4gICAgICBjb2xvcjogd2hpdGVcblxuICAgIG5hdlxuICAgICAgc2l6ZTogMTAwJSA2MHB4XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIC41cyBsaW5lYXJcblxuICAgIC5kcm9wZG93bi1tZW51IGFcbiAgICAgIGNvbG9yOiAkdGV4dC1wcmltYXJ5XG5cbiAgICAuc3ViQmFubmVyXG4gICAgICBhXG4gICAgICAgIGNvbG9yOiAkdGV4dC1wcmltYXJ5XG5cbiAgICAgICAgJi5iYWNrTGlua1xuICAgICAgICAgIGNvbG9yOiAkdGV4dC1saW5rXG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDUwcHhcbiAgICAgICAgICBtYXJnaW4tdG9wOiAxMnB4XG5cbiAgICAgIGJ1dHRvbiBzcGFuLmNhcmV0XG4gICAgICAgIGNvbG9yOiAkdGV4dC1saW5rXG4gICAgICAgIGZsb2F0OiByaWdodFxuICAgICAgICBtYXJnaW4tdG9wOiAxMnB4XG5cbiAgICAgIC5zZWxlY3RlZCBtZC1pY29uXG4gICAgICAgIGZpbGw6ICR0ZXh0LWxpbmtcblxuICAgICAgbWQtaWNvblxuICAgICAgICBmaWxsOiAkdGV4dC1wcmltYXJ5XG5cbiAgICBsaS5zdWJCYW5uZXJcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWNrZ3JvdW5kLXNlY29uZGFyeVxuICAgICAgY29sb3I6ICR0ZXh0LXByaW1hcnlcblxuICBuYXYuc3ViQmFubmVyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHdoaXRlXG4gICAgY29sb3I6ICR0ZXh0LXByaW1hcnlcblxuICAgIC5tZW51TGlzdCBsaS5zZWxlY3RlZFxuICAgICAgYm9yZGVyLWNvbG9yOiAkdGV4dC1saW5rXG4gICAgICBvcGFjaXR5OiAxXG5cbiAgICAgIGFcbiAgICAgICAgY29sb3I6ICR0ZXh0LWxpbmtcblxuICBtZC1zaWRlbmF2IC5uYXZJdGVtLnNlbGVjdGVkIGFcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGNlMWZmXG5cbiAgLyogbWF0ZXJpYWwgc3R5bGVzICovXG4gIG1kLXNsaWRlclxuICAgIC5tZC10aHVtYjphZnRlclxuICAgICAgYm9yZGVyLWNvbG9yOiAkdGV4dC1saW5rXG5cbiAgICAubWQtc2lnbjphZnRlclxuICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHRleHQtbGlua1xuXG4gIG1kLWlucHV0LWNvbnRhaW5lclxuICAgICYubWQtaW5wdXQtZm9jdXNlZFxuICAgICAgbGFiZWw6bm90KC5tZC1uby1mbG9hdClcbiAgICAgICAgY29sb3I6ICR0ZXh0LWxpbmtcblxuICAgICY6bm90KC5tZC1pbnB1dC1pbnZhbGlkKS5tZC1pbnB1dC1mb2N1c2VkIC5tZC1pbnB1dFxuICAgICAgYm9yZGVyLWNvbG9yOiAkdGV4dC1saW5rXG5cbiAgbWQtcmFkaW8tYnV0dG9uXG4gICAgLm1kLW9mZlxuICAgICAgYm9yZGVyLWNvbG9yOiAkdGV4dC1saW5rXG5cbiAgICAmOm5vdChbZGlzYWJsZWRdKS5tZC1wcmltYXJ5XG4gICAgICAmLm1kLWNoZWNrZWQgLm1kLW9mZlxuICAgICAgICBib3JkZXItY29sb3I6ICR0ZXh0LWxpbmtcblxuICAgICAgLm1kLW9uXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0ZXh0LWxpbmtcblxuICBtZC1zbGlkZXJcbiAgICAubWQtdHJhY2subWQtdHJhY2stZmlsbFxuICAgIC5tZC10aHVtYjphZnRlclxuICAgIC5tZC1zaWduXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGV4dC1saW5rXG5cbiAgbWQtc3dpdGNoLm1kLWNoZWNrZWQgLm1kLWJhclxuICAgIGJhY2tncm91bmQtY29sb3I6ICR0ZXh0LWxpbmtcblxuICBtZC1jaGVja2JveC5tZC1wcmltYXJ5Lm1kLWNoZWNrZWQ6bm90KFtkaXNhYmxlZF0pIC5tZC1pY29uXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHRleHQtbGlua1xuXG4vKiogc3RpY2t5IG5vdGUgKiovXG4gIC5zdGlja3lOb3RlXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZlZmJlYVxuICAgIGJvcmRlci1yYWRpdXM6IDVweFxuICAgIG1hcmdpbjogMTBweCBhdXRvXG4gICAgbWF4LXdpZHRoOiA5NSVcbiAgICBtaW4taGVpZ2h0OiAyNXB4XG4gICAgcGFkZGluZzogMTBweFxuXG4gIC5zdGlja3lOb3RlIGFcbiAgICBjb2xvcjogcmdiKDEsIDEyOCwgMjMzKVxuXG4gIC5jYXRhbG9nSXRlbSBoMVxuICAgIGNvbG9yOiAkdGV4dC1saW5rXG5cbiAgLmNhdGFsb2dzLmNlbnRlckNvbHVtblxuICAgIC5zdGlja3lOb3RlXG4gICAgICBtYXJnaW46IDIwcHggYXV0byAwXG5cbiAgLyoqIGhpZ2hsaWdodCAmIGhvdmVyIGNvbG91cnMgKiovXG4gIC8qKiBwcmltYXJ5SGlnaGxpZ2h0LCBzZWNvbmRhcnlIaWdobGlnaHQsIHRlcnRpYXJ5SGlnaGxpZ2h0IHByb3ZpZGUgdGhyZWUgc2hhZGVzIG9mIGJsdWUgaGlnaGxpZ2h0ICoqL1xuICAvKiogdXNlIHByaW1hcnkgZm9yIGJvbGQgaGlnaGxpZ2h0aW5nLCBvciBoaWdobGlnaHRpbmcgYWdhaW5zdCBub24td2hpdGUgYmFja2dyb3VuZHMgKiovXG4gIC5wcmltYXJ5SGlnaGxpZ2h0OmhvdmVyXG4gIC5sb2NraW5nU2VjdGlvblxuICAgIGJhY2tncm91bmQtY29sb3I6ICRoaWdobGlnaHQtcHJpbWFyeVxuXG4gIC5zZWNvbmRhcnlIaWdobGlnaHQuc2VsZWN0ZWRcbiAgLnNlY29uZGFyeUhpZ2hsaWdodDpob3ZlclxuICAgIGJhY2tncm91bmQtY29sb3I6ICRoaWdobGlnaHQtc2Vjb25kYXJ5XG5cbiAgLnRlcnRpYXJ5SGlnaGxpZ2h0OmhvdmVyXG4gIC50YWJsZUVudHJ5OmhvdmVyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGhpZ2hsaWdodC10ZXJ0aWFyeVxuXG4gIC8qKiBhcHByb3ZhbCBjb2xvcnMgKiovXG4gIC5hcHByb3ZhbFJlc29sdXRpb24ucmVqZWN0ZWRcbiAgLmFwcHJvdmFsUmVzb2x1dGlvbi5jYW5jZWxsZWRcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYXBwcm92YWwtcmVqZWN0ZWRcblxuICAuYXBwcm92YWxSZXNvbHV0aW9uLmFwcHJvdmVkXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGFwcHJvdmFsLWFwcHJvdmVkXG5cbiAgLyoqIGRldGFpbHMgcGFnZSAqKi9cbiAgLmRldGFpbHNFZGl0b3JcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkYmFja2dyb3VuZC1zZWNvbmRhcnlcbiAgICBwYWRkaW5nOiAyMHB4IDIwcHggMjBweDBcblxuICAgIGJ1dHRvblxuICAgICAgJi5pY29uT25seUJ1dHRvblxuICAgICAgICBjb2xvcjogI2IzYjNiNFxuXG4gIC5kZXRhaWxzQ29udGFpbmVyXG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtcHJpbWFyeVxuICAgIGJvcmRlcjogMXB4IHNvbGlkICRib3JkZXItc2Vjb25kYXJ5XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweFxuXG4gICAgaDJcbiAgICBoM1xuICAgICAgLyogYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQtc2Vjb25kYXJ5Ki9cbiAgICAgIHBhZGRpbmc6IDVweCAxNXB4IDVweDBcblxuICAgIGgyXG4gICAgICBjb2xvcjogJHRleHQtbGlua1xuXG4gICAgaDRcbiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWxcbiAgICAgIHBhZGRpbmctdG9wOiA1cHhcblxuICAuZGV0YWlsc1NlY3Rpb25cbiAgICBwYWRkaW5nOiAxMHB4IDIwcHhcblxuICAgIC5sZWZ0Q29sdW1uXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3BcbiAgICAgIHdpZHRoOiAxNCVcblxuICAgIC5yaWdodENvbHVtblxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICB3aWR0aDogODUlXG5cbiAgLmRldGFpbHNTdWJTZWN0aW9uXG4gICAgYm9yZGVyOiAxcHggc29saWQgJGJvcmRlci1zZWNvbmRhcnlcbiAgICBib3JkZXItYm90dG9tOiAwXG4gICAgcGFkZGluZy1ib3R0b206IDIwcHhcblxuICAgICY6bGFzdC1jaGlsZFxuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRib3JkZXItc2Vjb25kYXJ5XG5cbiAgLmRldGFpbHNTcGxpdFNlY3Rpb25cbiAgICBib3JkZXI6IDFweCBzb2xpZCAkYm9yZGVyLXNlY29uZGFyeVxuICAgIGJveC1zaGFkb3c6MCAxcHggM3B4IDAgcmdiYSgwLCAwLCAwLCAuMSlcbiAgICBtYXJnaW4tYm90dG9tOiA3cHhcblxuICAuZWRpdG9yQmFyXG4gICAgZGlzcGxheTogZmxleFxuICAgIGZsZXgtd3JhcDogd3JhcFxuICAgIHBhZGRpbmc6IDVweCAxMHB4XG4gICAgd2lkdGg6IDEwMCVcblxuICAgIGg1XG4gICAgICBtYXJnaW4tdG9wOiAxMHB4XG5cbiAgLmVkaXRvckNvbnRlbnRcbiAgLmVkaXRvckJhclxuICAgIG1kLWlucHV0LWNvbnRhaW5lclxuICAgICAgZmxleDogMVxuICAgICAgbWluLXdpZHRoOiAzMDBweFxuXG4gICAgdGFibGUgbWQtaW5wdXQtY29udGFpbmVyIC8vIEBzdHlsaW50IGlnbm9yZSBjb2xvbnNcbiAgICAgIG1pbi13aWR0aDowXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICB3aWR0aDogMTAwJVxuXG4gIC5lZGl0b3JCYXIgdGFibGUgbWQtaW5wdXQtY29udGFpbmVyXG4gICAgbWFyZ2luOiAwXG5cbiAgLmVkaXRvckNvbnRlbnRcbiAgLmVkaXRvckJhclxuICAgIHRhYmxlIHRib2R5IHRyOmhvdmVyIHRkIC8vIEBzdHlsaW50IGlnbm9yZSBjb2xvbnNcbiAgICAgIGJvcmRlcjogMFxuICAgICAgYm94LXNoYWRvdzogbm9uZVxuXG4gIGJ1dHRvblxuICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlXG4gICAgYm9yZGVyOiAxcHggc29saWQgJHRleHQtbGlua1xuICAgIGNvbG9yOiAkdGV4dC1saW5rXG5cbiAgICAmOm5vdCg6ZGlzYWJsZWQpOm5vdCguYngtLW1vZGFsX19jbG9zZSlcbiAgICAgICY6aG92ZXJcbiAgICAgICY6Zm9jdXNcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHRleHQtbGlua1xuICAgICAgICBjb2xvcjogd2hpdGVcblxuICAgICYudGV4dE9ubHlCdXR0b25cbiAgICAgICY6bm90KDpkaXNhYmxlZClcbiAgICAgICAgY29sb3I6ICR0ZXh0LWxpbmtcblxuICAgICAgJjpob3ZlclxuICAgICAgJjpmb2N1c1xuICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZVxuXG4gICAgJi5idXR0b25BbmRMYWJlbFxuICAgICYuaWNvbk9ubHlCdXR0b25cbiAgICAgICYucHJvcGVydHlSZXF1aXJlZCAvLyBAc3R5bGludCBpZ25vcmUgY29sb25zXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM0Mjc4YmZcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlXG5cbiAgICAgICY6bm90KDpkaXNhYmxlZClcbiAgICAgICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgLjUpXG5cbiAgICAgICAgJjpob3ZlclxuICAgICAgICAmOmZvY3VzXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnRcbiAgICAgICAgICBjb2xvcjogJHRleHQtbGlua1xuXG4gICAgKyBidXR0b24uaWNvbk9ubHlCdXR0b24uZHJvcGRvd24tdG9nZ2xlXG4gICAgICAgIGNvbG9yOiAkdGV4dC1saW5rXG5cbiAgLyoqIHNwaW5uZXIgaWNvbiAqKi9cbiAgLnNwaW5uZXJcbiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmXG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KGxlZnQsICR0ZXh0LWxpbmsgMTAlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDApIDQyJSlcblxuICAgICY6YmVmb3JlXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGV4dC1saW5rXG5cbiAgICAmOmFmdGVyXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZVxuXG4gIC8qKiBnZXR0aW5nIHN0YXJ0ZWQgbWVudSAqKi9cbiAgLmdldHRpbmdTdGFydGVkXG4gICAgbWQtYm90dG9tLXNoZWV0Lm1kLWxpc3RcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWVmZmZcblxuICAgICAgbWQtbGlzdC1pdGVtXG4gICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZDhkOGQ4XG5cbiAgICAgICAgLm1kLWxpc3QtaXRlbS1jb250ZW50XG4gICAgICAgIC5tYXRlcmlhbC1pY29uc1xuICAgICAgICAgIGNvbG9yOiAkdGV4dC1saW5rICFpbXBvcnRhbnQgLy8gQHN0eWxpbnQgaWdub3JlIGltcG9ydGFudFxuXG4gICAgJi5zZWN1cmVHYXRld2F5VG91ciAud3JhcGxpc3QgLm1kLWxpc3QtaXRlbS1jb250ZW50OmhvdmVyXG4gICAgICBjb2xvcjogJHRleHQtbGlua1xuXG4gIC5nZXR0aW5nU3RhcnRlZE1pbmltaXplZFxuICAgIC5tZC1idXR0b24ubWQtZmFiXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkdGV4dC1saW5rXG4gICAgICBib3JkZXI6IDBcbiAgICAgIGNvbG9yOiB3aGl0ZVxuXG4gICAgICAmOmhvdmVyXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0ZXh0LWxpbmtcblxuICAudG9vbHRpcENvbnRhaW5lciAudG9vbHRpcCAudG9vbHRpcC1hcnJvdzphZnRlclxuICAgIGNvbG9yOiAkdGV4dC1saW5rXG5cbiAgLyoqIGZpbGUgc2VsZWN0b3IgKiovXG4gIC5maWxlU2VsZWN0b3I6bm90KC5maWxlU2VsZWN0ZWQpIC5idG5cbiAgLmZpbGVTZWxlY3Rvci5maWxlU2VsZWN0ZWQuc2hvd0FzSWNvbiAuZmlsZVNlbGVjdFxuICAgIGJvcmRlcjogMXB4IHNvbGlkICR0ZXh0LWxpbmtcbiAgICBjb2xvcjogJHRleHQtbGlua1xuXG4gICAgJjpob3ZlclxuICAgICAgYmFja2dyb3VuZDogJHRleHQtbGlua1xuICAgICAgY29sb3I6IHdoaXRlXG5cbiAgLnNob3dBc0ljb24gLmZpbGVTZWxlY3Qgc3BhblxuICAgIGNvbG9yOiAkdGV4dC1saW5rXG5cbiAgLmVudmlyb25tZW50RGV0YWlscyAucmVnaXN0cnlNZW51IGJ1dHRvbjpmb2N1c1xuICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAkdGV4dC1saW5rXG5cbiAgLnVzZXJzQ29sbGVjdGlvbiBhLnNlY29uZGFyeVRleHRcbiAgICBjb2xvcjogJHRleHQtbGlua1xuXG4gIC5yaWdodEFycm93OmhvdmVyXG4gIC5sZWZ0QXJyb3c6aG92ZXJcbiAgICBjb2xvcjogd2hpdGVcblxuICAuY2FyZCAuYXBwcm92ZUNvbW1lbnQgZGl2OmhvdmVyXG4gICAgY29sb3I6ICR0ZXh0LWxpbmtcblxuICAuZmVlZGJhY2tCb3ggLmNvbnRlbnRBcmVhIC5yYXRpbmdCb3ggLnNlbGVjdGVkIC5tYXRlcmlhbC1pY29uc1xuICAgIGNvbG9yOiAkdGV4dC1saW5rXG4gICAgZm9udC1zaXplOiA2NHB4XG5cbiAgLmNvbWJvQm94XG4gICAgaW5wdXQ6Zm9jdXNcbiAgICAgIGJvcmRlci1jb2xvcjogJHRleHQtbGlua1xuXG4gICAgICArIC5pbnB1dC1ncm91cC1idG4gYnV0dG9uXG4gICAgICAgIGJvcmRlci1jb2xvcjogJHRleHQtbGlua1xuXG4gIC5tZXNzYWdlQXJlYSAuSU5GT1xuICAgIGNvbG9yOiAkdGV4dC1saW5rXG5cbiAgLmFjZV9zZWFyY2hcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjdGOUY4XG4gICAgY29sb3I6IGJsYWNrXG5cbiAgICBpbnB1dFxuICAgICAgY29sb3I6IGJsYWNrXG5cbiAgICBidXR0b25cbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50XG4gICAgICBib3JkZXI6IDBcbiAgICAgIG1pbi1oZWlnaHQ6MFxuICAgICAgbWluLXdpZHRoOjBcblxuICAucGFnaW5hdGlvbiA+XG4gICAgLmFjdGl2ZSA+XG4gICAgICBhXG4gICAgICBhOmhvdmVyXG4gICAgICBhOmZvY3VzXG4gICAgICBzcGFuXG4gICAgICBzcGFuOmhvdmVyXG4gICAgICBzcGFuOmZvY3VzXG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR0ZXh0LWxpbmtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkdGV4dC1saW5rXG5cbiAgICBsaSA+IC8vIEBzdHlsaW50IGlnbm9yZSBjb2xvbnNcbiAgICAgIGFcbiAgICAgIHNwYW5cbiAgICAgICAgJjpob3ZlclxuICAgICAgICAmOmZvY3VzXG4gICAgICAgICAgY29sb3I6ICR0ZXh0LWxpbmtcbiIsIi8qXG4gKiBib3JkZXI6IDxjb2xvcj5cbiAqIGJvcmRlcjogLi4uXG4gKi9cblxuYm9yZGVyKGNvbG9yLCBhcmdzLi4uKVxuICBpZiBjb2xvciBpcyBhICdjb2xvcidcbiAgICBib3JkZXI6IDFweCBzb2xpZCBjb2xvciBhcmdzXG4gIGVsc2VcbiAgICBib3JkZXI6IGFyZ3VtZW50c1xuIiwidXNlKCcuLi9ub2Rlcy92ZW5kb3ItaGVscGVycy5qcycpXG5AaW1wb3J0ICdjb25maWcnXG5cbi8qXG4gKiBBbGlhcyBcIm5vd3JhcFwiIGFzIFwibm8td3JhcFwiLlxuICovXG5cbm5vLXdyYXAgPSB1bnF1b3RlKCdub3dyYXAnKVxuXG4vKlxuICogSGVscGVyIHRvIGZpbmQgb3V0IGlmIGEgZ2l2ZW4gdmFsdWUgaXMgYSB3aWR0aFxuICovXG5cbmlzLXdpZHRoKHZhbClcbiAgaWYgYXV0byA9PSB2YWxcbiAgICByZXR1cm4gdHJ1ZVxuICBlbHNlIGlmIHZhbCAmJiAndW5pdCcgPT0gdHlwZSh2YWwpXG4gICAgLy8gU3R5bHVzIGRvZXMgbm90IHNob3J0IGNpcmN1aXQgc28gd2UgbmVlZCB0byBwZXJmb3JtIHRoaXMgYXMgYSBkaXN0aW5jdFxuICAgIC8vIG9wZXJhdGlvbiB0byBwcmV2ZW50IGVycm9yc1xuICAgIHJldHVybiAnJyAhPSB1bml0KHZhbClcbiAgcmV0dXJuIGZhbHNlXG5cbi8qXG4gKiBWZW5kb3Igc3VwcG9ydCBmb3IgdGhlIGdpdmVuIHByb3AgLyBhcmd1bWVudHMsIG9wdGlvbmFsbHkgc3BlY2lmeWluZyB0aGVcbiAqIG9ubHkgcHJlZml4ZXMgdG8gdXRpbGl6ZSwgb3IgdGhvc2Ugd2hpY2ggc2hvdWxkIGJlIGlnbm9yZWQuXG4gKi9cblxudmVuZG9yKHByb3AsIGFyZ3MsIG9ubHkgPSBudWxsLCBpZ25vcmUgPSBudWxsLCB2ZW5kb3ItcHJvcGVydHkgPSB0cnVlKVxuICBuZWVkX25vcm1hbGl6ZSA9ICF2ZW5kb3ItcHJvcGVydHkgb3IgcHJvcCBpbiAoJ3RyYW5zaXRpb24nICd0cmFuc2l0aW9uLXByb3BlcnR5JyAnYm9yZGVyLWltYWdlJyAnYm9yZGVyLWltYWdlLXNsaWNlJylcbiAgZm9yIHByZWZpeCBpbiB2ZW5kb3ItcHJlZml4ZXNcbiAgICB1bmxlc3MgKG9ubHkgYW5kICEocHJlZml4IGluIG9ubHkpKSBvciAoaWdub3JlIGFuZCBwcmVmaXggaW4gaWdub3JlKVxuICAgICAgaWYgb2ZmaWNpYWwgPT0gcHJlZml4XG4gICAgICAgIGlmIG5lZWRfbm9ybWFsaXplXG4gICAgICAgICAge3Byb3B9OiBub3JtYWxpemUocHJvcCwoJyVzJyAlIGFyZ3MpKVxuICAgICAgICBlbHNlXG4gICAgICAgICAge3Byb3B9OiBhcmdzXG4gICAgICBlbHNlXG4gICAgICAgIG5ld3Byb3AgPSBwcm9wXG4gICAgICAgIG5ld3Byb3AgPSAnLScgKyBwcmVmaXggKyAnLScgKyBwcm9wIGlmIHZlbmRvci1wcm9wZXJ0eVxuXG4gICAgICAgIGlmIG5lZWRfbm9ybWFsaXplXG4gICAgICAgICAge25ld3Byb3B9OiBub3JtYWxpemUocHJvcCwoJyVzJyAlIGFyZ3MpLHByZWZpeClcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHtuZXdwcm9wfTogYXJnc1xuLypcbiAqIFZlbmRvcml6ZSB0aGUgZ2l2ZW4gdmFsdWUuXG4gKi9cblxudmVuZG9yLXZhbHVlKGFyZywgb25seSA9IG51bGwsIGlnbm9yZSA9IG51bGwpXG4gIHByb3AgPSBjdXJyZW50LXByb3BlcnR5WzBdXG4gIGZvciBwcmVmaXggaW4gdmVuZG9yLXByZWZpeGVzXG4gICAgdW5sZXNzIChvbmx5IGFuZCAhKHByZWZpeCBpbiBvbmx5KSkgb3IgKGlnbm9yZSBhbmQgcHJlZml4IGluIGlnbm9yZSkgb3Igb2ZmaWNpYWwgPT0gcHJlZml4XG4gICAgICBhZGQtcHJvcGVydHkocHJvcCwgJy0lcy0lcycgJSAocHJlZml4IGFyZykpXG4gIGFyZ1xuXG4vKlxuICogVmVuZG9yIFwiYm94LXNoYWRvd1wiIHN1cHBvcnQuXG4gKi9cblxuYm94LXNoYWRvdygpXG4gIHZlbmRvcignYm94LXNoYWRvdycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidXNlci1zZWxlY3RcIiBzdXBwb3J0LlxuICovXG5cbnVzZXItc2VsZWN0KClcbiAgdmVuZG9yKCd1c2VyLXNlbGVjdCcsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBtcyBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi1jb3VudFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLWNvdW50KClcbiAgdmVuZG9yKCdjb2x1bW4tY291bnQnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tZ2FwXCIgc3VwcG9ydC5cbiAqL1xuXG5jb2x1bW4tZ2FwKClcbiAgdmVuZG9yKCdjb2x1bW4tZ2FwJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiY29sdW1uLXJ1bGVcIiBzdXBwb3J0LlxuICovXG5cbmNvbHVtbi1ydWxlKClcbiAgdmVuZG9yKCdjb2x1bW4tcnVsZScsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi1ydWxlLWNvbG9yXCIgc3VwcG9ydC5cbiAqL1xuXG5jb2x1bW4tcnVsZS1jb2xvcigpXG4gIHZlbmRvcignY29sdW1uLXJ1bGUtY29sb3InLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tcnVsZS13aWR0aFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLXJ1bGUtd2lkdGgoKVxuICB2ZW5kb3IoJ2NvbHVtbi1ydWxlLXdpZHRoJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiY29sdW1uLXJ1bGUtc3R5bGVcIiBzdXBwb3J0LlxuICovXG5cbmNvbHVtbi1ydWxlLXN0eWxlKClcbiAgdmVuZG9yKCdjb2x1bW4tcnVsZS1zdHlsZScsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi13aWR0aFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLXdpZHRoKClcbiAgdmVuZG9yKCdjb2x1bW4td2lkdGgnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tc3BhblwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLXNwYW4oKVxuICB2ZW5kb3IoJ2NvbHVtbi1zcGFuJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tZmlsbFwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLWZpbGwoKVxuICB2ZW5kb3IoJ2NvbHVtbi1maWxsJywgYXJndW1lbnRzLCBvbmx5OiBtb3opXG5cbi8qXG4gKiBMZWdhY3kgc3ludGF4IHN1cHBvcnQgZm9yIGJhY2tncm91bmQtY2xpcCBhbmQgYmFja2dyb3VuZC1vcmlnaW5cbiAqL1xuXG5sZWdhY3ktYmctdmFsdWVzKHByb3BlcnR5LCBhcmdzKVxuICBsZWdhY3lfYXJncyA9ICgpXG4gIGltcG9ydGFuY2UgPSB1bnF1b3RlKCcnKVxuICBmb3Igc3ViYXJncyBpbiBhcmdzXG4gICAgZm9yIGFyZyBpbiBzdWJhcmdzXG4gICAgICBpZiBhcmcgaW4gKGJvcmRlci1ib3ggcGFkZGluZy1ib3ggY29udGVudC1ib3gpXG4gICAgICAgIGFyZyA9IHVucXVvdGUoJ2JvcmRlcicpICBpZiBhcmcgPT0gYm9yZGVyLWJveFxuICAgICAgICBhcmcgPSB1bnF1b3RlKCdwYWRkaW5nJykgaWYgYXJnID09IHBhZGRpbmctYm94XG4gICAgICAgIGFyZyA9IHVucXVvdGUoJ2NvbnRlbnQnKSBpZiBhcmcgPT0gY29udGVudC1ib3hcbiAgICAgIGlmIGFyZyAhPSAnIWltcG9ydGFudCdcbiAgICAgICAgcHVzaChsZWdhY3lfYXJncyxhcmcpXG4gICAgICBlbHNlXG4gICAgICAgIGltcG9ydGFuY2UgPSAhaW1wb3J0YW50XG4gIHZlbmRvcihwcm9wZXJ0eSwgdW5xdW90ZShqb2luKCcsICcsbGVnYWN5X2FyZ3MpKSBpbXBvcnRhbmNlLCBvbmx5OiBtb3ogd2Via2l0KVxuXG4vKlxuICogVmVuZG9yIFwiYmFja2dyb3VuZC1jbGlwXCIgc3VwcG9ydC5cbiAqL1xuXG5iYWNrZ3JvdW5kLWNsaXAoKVxuICBpZiBhcmd1bWVudHNbMF0gPT0gdGV4dFxuICAgIHZlbmRvcignYmFja2dyb3VuZC1jbGlwJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQpXG4gIGVsc2VcbiAgICBsZWdhY3ktYmctdmFsdWVzKCdiYWNrZ3JvdW5kLWNsaXAnLCBhcmd1bWVudHMpXG4gICAgYmFja2dyb3VuZC1jbGlwOiBhcmd1bWVudHNcblxuLypcbiAqIFZlbmRvciBcImJhY2tncm91bmQtb3JpZ2luXCIgc3VwcG9ydC5cbiAqL1xuXG5iYWNrZ3JvdW5kLW9yaWdpbigpXG4gIGxlZ2FjeS1iZy12YWx1ZXMoJ2JhY2tncm91bmQtb3JpZ2luJywgYXJndW1lbnRzKVxuICBiYWNrZ3JvdW5kLW9yaWdpbjogYXJndW1lbnRzXG5cbi8qXG4gKiBWZW5kb3IgXCJiYWNrZ3JvdW5kLXNpemVcIiBzdXBwb3J0LlxuICovXG5cbmJhY2tncm91bmQtc2l6ZSgpXG4gIHZlbmRvcignYmFja2dyb3VuZC1zaXplJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNmb3JtXCIgc3VwcG9ydC5cbiAqL1xuXG50cmFuc2Zvcm0oKVxuICB2ZW5kb3IoJ3RyYW5zZm9ybScsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zZm9ybS1vcmlnaW5cIiBzdXBwb3J0LlxuICovXG50cmFuc2Zvcm0tb3JpZ2luKClcbiAgICB2ZW5kb3IoJ3RyYW5zZm9ybS1vcmlnaW4nLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0cmFuc2Zvcm0tc3R5bGVcIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zZm9ybS1zdHlsZSgpXG4gIHZlbmRvcigndHJhbnNmb3JtLXN0eWxlJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYm9yZGVyLWltYWdlXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3JkZXItaW1hZ2UoKVxuICB2ZW5kb3IoJ2JvcmRlci1pbWFnZScsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNpdGlvblwiIHN1cHBvcnQuXG4gKi9cblxudHJhbnNpdGlvbigpXG4gIHZlbmRvcigndHJhbnNpdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zaXRpb24tcHJvcGVydHlcIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tcHJvcGVydHkoKVxuICB2ZW5kb3IoJ3RyYW5zaXRpb24tcHJvcGVydHknLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0cmFuc2l0aW9uLWR1cmF0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG50cmFuc2l0aW9uLWR1cmF0aW9uKClcbiAgdmVuZG9yKCd0cmFuc2l0aW9uLWR1cmF0aW9uJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uKClcbiAgdmVuZG9yKCd0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zaXRpb24tZGVsYXlcIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tZGVsYXkoKVxuICB2ZW5kb3IoJ3RyYW5zaXRpb24tZGVsYXknLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJiYWNrZmFjZS12aXNpYmlsaXR5XCIgc3VwcG9ydC5cbiAqL1xuXG5iYWNrZmFjZS12aXNpYmlsaXR5KClcbiAgdmVuZG9yKCdiYWNrZmFjZS12aXNpYmlsaXR5JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwicGVyc3BlY3RpdmVcIiBzdXBwb3J0LlxuICovXG5cbnBlcnNwZWN0aXZlKClcbiAgaWYgbWl4aW5cbiAgICB2ZW5kb3IoJ3BlcnNwZWN0aXZlJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuICBlbHNlXG4gICAgJ3BlcnNwZWN0aXZlKCVzKScgJSBhcmd1bWVudHNcblxuLypcbiAqIFZlbmRvciBcInBlcnNwZWN0aXZlLW9yaWdpblwiIHN1cHBvcnQuXG4gKi9cblxucGVyc3BlY3RpdmUtb3JpZ2luKClcbiAgdmVuZG9yKCdwZXJzcGVjdGl2ZS1vcmlnaW4nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBPcGFjaXR5IHdpdGggY29uZGl0aW9uYWwgSUUgc3VwcG9ydC5cbiAqL1xuXG5vcGFjaXR5KG4sIGFyZ3MuLi4pXG4gIG9wYWNpdHk6IG4gYXJnc1xuICBpZiBzdXBwb3J0LWZvci1pZVxuICAgIGlmIG4gPT0gaW5oZXJpdCBvciBuID09IGluaXRpYWxcbiAgICAgIC1tcy1maWx0ZXI6IG4gYXJnc1xuICAgICAgZmlsdGVyOiBuIGFyZ3NcbiAgICBlbHNlXG4gICAgICB2YWwgPSByb3VuZChuICogMTAwKVxuICAgICAgaWYgdmFsID09IDEwMFxuICAgICAgICAtbXMtZmlsdGVyOiBub25lIGFyZ3NcbiAgICAgICAgZmlsdGVyOiBub25lIGFyZ3NcbiAgICAgIGVsc2VcbiAgICAgICAgLW1zLWZpbHRlcjogJ1wicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LkFscGhhKE9wYWNpdHk9JXMpXCInICUgdmFsIGFyZ3NcbiAgICAgICAgZmlsdGVyOiAnYWxwaGEob3BhY2l0eT0lcyknICUgdmFsIGFyZ3NcblxuLypcbiAqIFZlbmRvciBcInRleHQtc2l6ZS1hZGp1c3RcIlxuICovXG5cbnRleHQtc2l6ZS1hZGp1c3QoKVxuICB2ZW5kb3IoJ3RleHQtc2l6ZS1hZGp1c3QnLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBBbGlhcyB0aGUgXCJ3aGl0ZS1zcGFjZVwiIHByb3BlcnR5LlxuICovXG5cbndoaXRlc3BhY2UoKVxuICB3aGl0ZS1zcGFjZTogYXJndW1lbnRzXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtc2l6aW5nXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3gtc2l6aW5nKClcbiAgdmVuZG9yKCdib3gtc2l6aW5nJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiYm94LW9yaWVudFwiIHN1cHBvcnQuXG4gKi9cblxuYm94LW9yaWVudCgpXG4gIHZlbmRvcignYm94LW9yaWVudCcsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImJveC1mbGV4LWdyb3VwXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3gtZmxleC1ncm91cCgpXG4gIHZlbmRvcignYm94LWZsZXgtZ3JvdXAnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtb3JkaW5hbC1ncm91cFwiIHN1cHBvcnQuXG4gKi9cblxuYm94LW9yZGluYWwtZ3JvdXAoKVxuICB2ZW5kb3IoJ2JveC1vcmRpbmFsLWdyb3VwJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtYWxpZ25cIiBzdXBwb3J0LlxuICovXG5cbmJveC1hbGlnbigpXG4gIHZlbmRvcignYm94LWFsaWduJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiYm94LXBhY2tcIiBzdXBwb3J0LlxuICovXG5cbmJveC1wYWNrKClcbiAgdmVuZG9yKCdib3gtcGFjaycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBtcyBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImJveC1kaXJlY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbmJveC1kaXJlY3Rpb24oKVxuICB2ZW5kb3IoJ2JveC1kaXJlY3Rpb24nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb25cIiBzdXBwb3J0LlxuICovXG5cbmFuaW1hdGlvbigpXG4gIHZlbmRvcignYW5pbWF0aW9uJywgYXJndW1lbnRzKVxuXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tbmFtZVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLW5hbWUoKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1uYW1lJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWR1cmF0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG5hbmltYXRpb24tZHVyYXRpb24oKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1kdXJhdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImFuaW1hdGlvbi1kZWxheVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLWRlbGF5KClcbiAgdmVuZG9yKCdhbmltYXRpb24tZGVsYXknLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tZGlyZWN0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG5hbmltYXRpb24tZGlyZWN0aW9uKClcbiAgdmVuZG9yKCdhbmltYXRpb24tZGlyZWN0aW9uJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudFwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCgpXG4gIHZlbmRvcignYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCcsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbmFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24oKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24nLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tcGxheS1zdGF0ZVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLXBsYXktc3RhdGUoKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWZpbGwtbW9kZVwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLWZpbGwtbW9kZSgpXG4gIHZlbmRvcignYW5pbWF0aW9uLWZpbGwtbW9kZScsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImh5cGhlbnNcIiBzdXBwb3J0LlxuICovXG5cbmh5cGhlbnMoKVxuICB2ZW5kb3IoJ2h5cGhlbnMnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJhcHBlYXJhbmNlXCIgc3VwcG9ydC5cbiAqL1xuXG5hcHBlYXJhbmNlKClcbiAgdmVuZG9yKCdhcHBlYXJhbmNlJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwidGFiLXNpemVcIiBzdXBwb3J0LlxuICovXG5cbnRhYi1zaXplKClcbiAgdmVuZG9yKCd0YWItc2l6ZScsIGFyZ3VtZW50cywgb25seTogbW96IG8gb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJvdmVyZmxvdy1zY3JvbGxpbmdcIiBzdXBwb3J0LlxuICovXG5cbm92ZXJmbG93LXNjcm9sbGluZygpXG4gIHZlbmRvcignb3ZlcmZsb3ctc2Nyb2xsaW5nJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0ZXh0LW92ZXJmbG93XCIgc3VwcG9ydCwgLCAtby0gZm9yIG9wZXJhIDkuKiAtIDEwLipcbiAqL1xuXG50ZXh0LW92ZXJmbG93KClcbiAgdmVuZG9yKCd0ZXh0LW92ZXJmbG93JywgYXJndW1lbnRzLCBvbmx5OiBvZmZpY2lhbCBvKVxuXG4vKlxuICogVmVuZG9yIFwidGV4dC1zaXplLWFkanVzdFwiIHN1cHBvcnQuXG4gKi9cbnRleHQtc2l6ZS1hZGp1c3QoKVxuICB2ZW5kb3IoJ3RleHQtc2l6ZS1hZGp1c3QnLCBhcmd1bWVudHMsIG9ubHk6IG9mZmljaWFsIHdlYmtpdCBtcylcblxuLypcbiAqIFZlbmRvciBcImZvbnQtc21vb3RoaW5nXCIgc3VwcG9ydCwgd2Via2l0IG9ubHkuXG4gKi9cbmZvbnQtc21vb3RoaW5nKClcbiAgdmVuZG9yKCdmb250LXNtb290aGluZycsIGFyZ3VtZW50cywgb25seTogd2Via2l0KVxuXG5cbi8qKlxuICogVmVuZG9yIGlucHV0LXBsYWNlaG9sZGVyL3BsYWNlaG9sZGVyIHN1cHBvcnQuXG4gKlxuICogRXhhbXBsZXM6XG4gKiAgICAvLyBEZWZhdWx0IHN5bnRheFxuICogICAgYm9keVxuICogICAgICBwbGFjZWhvbGRlcihjb2xvciAjMzMzLCBmb250LXdlaWdodCBub3JtYWwpXG4gKlxuICogICAgLy8gVGhlIGNvbW1hIGlzIGltcG9ydGFudFxuICogICAgLnBsYWNlaG9sZGVyLXJlZFxuICogICAgICBwbGFjZWhvbGRlcihjb2xvciByZWQsKVxuICpcbiAqICAgIC8vIFdlIGNhbiBwYXNzIGEgZnVuY3Rpb25cbiAqICAgIGdyZWVuLXBsYWNlaG9sZGVyKClcbiAqICAgICAgY29sb3IgZ3JlZW5cbiAqICAgIC5wbGFjZWhvbGRlci1ncmVlblxuICogICAgICBwbGFjZWhvbGRlcihncmVlbi1wbGFjZWhvbGRlcilcbiAqXG4gKiAgICAvLyBXZSBjYW4gcGFzcyBhIGhhc2hcbiAqICAgIHRleHRhcmVhXG4gKiAgICAgIHBsYWNlaG9sZGVyKChmb250LXN0eWxlIGl0YWxpYykgKGZvbnQtd2VpZ2h0IGJvbGQpIChwYWRkaW5nICc0cHggMTBweCcpKVxuICovXG5wbGFjZWhvbGRlcigpXG4gIGZvciB2IGluICc6LXdlYmtpdC1pbnB1dCcgJy1tb3onICc6LW1veicgJy1tcy1pbnB1dCdcbiAgICAmOnt2fS1wbGFjZWhvbGRlclxuICAgICAgZm9yIHBhaXIgaW4gYXJndW1lbnRzXG4gICAgICAgIGlmIHR5cGVvZihwYWlyKSA9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgcGFpcigpXG4gICAgICAgIGVsc2UgaWYgcGFpciBpcyBub3QgbnVsbCAmJiBwYWlyWzBdIGlzIG5vdCBudWxsXG4gICAgICAgICAge3BhaXJbMF19OiB0eXBlKHBhaXJbMV0pID09ICdzdHJpbmcnID8gcyhwYWlyWzFdKSA6IHBhaXJbMV1cbmlucHV0LXBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXJcblxuLypcbiAqIFZlbmRvciBiYWNrZ3JvdW5kIHN1cHBvcnQgKGdyYWRpZW50cykuXG4gKi9cblxuYmFja2dyb3VuZCgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdiYWNrZ3JvdW5kJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgYmFja2dyb3VuZCBhcmd1bWVudHNcblxuYmFja2dyb3VuZC1pbWFnZSgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdiYWNrZ3JvdW5kLWltYWdlJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgYmFja2dyb3VuZC1pbWFnZSBhcmd1bWVudHNcblxuY3Vyc29yKClcbiAgaWYgbWF0Y2goJy1ncmFkaWVudFxcKCcsICcnK2FyZ3VtZW50cylcbiAgICB2ZW5kb3IoJ2N1cnNvcicsIGFyZ3VtZW50cywgdmVuZG9yLXByb3BlcnR5OiBmYWxzZSlcbiAgZWxzZVxuICAgIGN1cnNvciBhcmd1bWVudHNcblxubGlzdC1zdHlsZSgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdsaXN0LXN0eWxlJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgbGlzdC1zdHlsZSBhcmd1bWVudHNcblxubGlzdC1zdHlsZS1pbWFnZSgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdsaXN0LXN0eWxlLWltYWdlJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgbGlzdC1zdHlsZS1pbWFnZSBhcmd1bWVudHNcbiIsIi8qXG4gKiBTaXplIHV0aWxpdHkuXG4gKlxuICogU3lub3BzaXM6XG4gKlxuICogICBzaXplOiA8d2lkdGg+IDxoZWlnaHQ+IHwgPHdpZHRoICYgaGVpZ2h0PlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICBzaXplOiAxMDAlIDMwcHhcbiAqICAgICAgIHlpZWxkczpcbiAqICAgICAgICAgd2lkdGg6IDEwMCVcbiAqICAgICAgICAgaGVpZ2h0OiAzMHB4XG4gKlxuICogICAgIHNpemU6IDVweFxuICogICAgICAgeWllbGRzOlxuICogICAgICAgICB3aWR0aDogNXB4XG4gKiAgICAgICAgIGhlaWdodDogNXB4XG4gKlxuICovXG5cbnNpemUoKVxuICBpZiBsZW5ndGgoYXJndW1lbnRzKSA9PSAxXG4gICAgd2lkdGg6IGFyZ3VtZW50c1swXVxuICAgIGhlaWdodDogYXJndW1lbnRzWzBdXG4gIGVsc2VcbiAgICB3aWR0aDogYXJndW1lbnRzWzBdXG4gICAgaGVpZ2h0OiBhcmd1bWVudHNbMV1cbiIsIi8qXG4gKiBIZWxwZXIgZm9yIGJvcmRlci1yYWRpdXMoKS5cbiAqL1xuXG4tYXBwbHktYm9yZGVyLXJhZGl1cyhwb3MsIGltcG9ydGFuY2UpXG4gIGlmIGxlbmd0aChwb3MpID09IDNcbiAgICAvLyBib3JkZXItcmFkaXVzOiA8dG9wIHwgYm90dG9tPiA8bGVmdCB8IHJpZ2h0PiA8bj5cbiAgICB5ID0gcG9zWzBdXG4gICAgeCA9IHBvc1sxXVxuICAgIC8vIFdlIGRvbid0IHVzZSB2ZW5kb3IgZm9yIGJvZGVyLXJhZGl1cyBhbnltb3JlXG4gICAgLy8gdmVuZG9yKCdib3JkZXItcmFkaXVzLSVzJXMnICUgcG9zLCBwb3NbMl0sIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcbiAgICB7J2JvcmRlci0lcy0lcy1yYWRpdXMnICUgcG9zfTogcG9zWzJdIGltcG9ydGFuY2VcbiAgZWxzZSBpZiBwb3NbMF0gaW4gKHRvcCBib3R0b20pXG4gICAgLy8gYm9yZGVyLXJhZGl1czogPHRvcCB8IGJvdHRvbT4gPG4+XG4gICAgLWFwcGx5LWJvcmRlci1yYWRpdXMocG9zWzBdIGxlZnQgcG9zWzFdLCBpbXBvcnRhbmNlKVxuICAgIC1hcHBseS1ib3JkZXItcmFkaXVzKHBvc1swXSByaWdodCBwb3NbMV0sIGltcG9ydGFuY2UpXG4gIGVsc2UgaWYgcG9zWzBdIGluIChsZWZ0IHJpZ2h0KVxuICAgIC8vIGJvcmRlci1yYWRpdXM6IDxsZWZ0IHwgcmlnaHQ+IDxuPlxuICAgIHVuc2hpZnQocG9zLCB0b3ApO1xuICAgIC1hcHBseS1ib3JkZXItcmFkaXVzKHBvcywgaW1wb3J0YW5jZSlcbiAgICBwb3NbMF0gPSBib3R0b21cbiAgICAtYXBwbHktYm9yZGVyLXJhZGl1cyhwb3MsIGltcG9ydGFuY2UpXG5cbi8qXG4gKiBib3JkZXItcmFkaXVzIHN1cHBvcnRpbmcgYXVnbWVudGVkIGJlaGF2aW9yLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgIGJvcmRlci1yYWRpdXM6IDJweCA1cHhcbiAqICAgIGJvcmRlci1yYWRpdXM6IHRvcCA1cHggYm90dG9tIDEwcHhcbiAqICAgIGJvcmRlci1yYWRpdXM6IGxlZnQgNXB4XG4gKiAgICBib3JkZXItcmFkaXVzOiB0b3AgbGVmdCA1cHhcbiAqICAgIGJvcmRlci1yYWRpdXM6IHRvcCBsZWZ0IDEwcHggYm90dG9tIHJpZ2h0IDVweFxuICogICAgYm9yZGVyLXJhZGl1czogdG9wIGxlZnQgMTBweCwgYm90dG9tIHJpZ2h0IDVweFxuICpcbiAqL1xuXG5ib3JkZXItcmFkaXVzKClcbiAgcG9zID0gKClcbiAgYXVnbWVudGVkID0gZmFsc2VcbiAgaW1wb3J0YW5jZSA9IGFyZ3VtZW50c1tsZW5ndGgoYXJndW1lbnRzKSAtIDFdID09ICFpbXBvcnRhbnQgPyAhaW1wb3J0YW50IDogdW5xdW90ZSgnJylcblxuICBmb3IgYXJncyBpbiBhcmd1bWVudHNcbiAgICBmb3IgYXJnIGluIGFyZ3NcbiAgICAgIGlmIGFyZyBpcyBhICdpZGVudCdcbiAgICAgICAgYXBwZW5kKHBvcywgYXJnKVxuICAgICAgICBhdWdtZW50ZWQgPSB0cnVlXG4gICAgICBlbHNlXG4gICAgICAgIGFwcGVuZChwb3MsIGFyZylcbiAgICAgICAgaWYgYXVnbWVudGVkXG4gICAgICAgICAgLWFwcGx5LWJvcmRlci1yYWRpdXMocG9zLCBpbXBvcnRhbmNlKVxuICAgICAgICAgIHBvcyA9ICgpXG4gIGJvcmRlci1yYWRpdXMgcG9zIHVubGVzcyBhdWdtZW50ZWRcbiIsIi8qXG4gKiBWZW5kb3IgXCJkaXNwbGF5OiBmbGV4XCIgc3VwcG9ydCB3aXRoIGZhbGxiYWNrIHRvIG9ic29sZXRlIHZlcnNpb25zLlxuICovXG5cbmZsZXgtdmVyc2lvbiA/PSBib3ggZmxleFxuXG4vL1xuLy8gMS4gRGlzcGxheSB2YWx1ZXNcbi8vICAgIC0gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1mbGV4Ym94LyNmbGV4LWNvbnRhaW5lcnNcbi8vXG5kaXNwbGF5KHR5cGUsIGFyZ3MuLi4pXG4gIGlmIGZsZXggPT0gdHlwZSB8fCBpbmxpbmUtZmxleCA9PSB0eXBlXG4gICAgaWYgYm94IGluIGZsZXgtdmVyc2lvblxuICAgICAgaWYgZmxleCA9PSB0eXBlXG4gICAgICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94IGFyZ3NcbiAgICAgICAgZGlzcGxheTogdmVuZG9yLXZhbHVlKGJveCBhcmdzLCBvbmx5OiBtb3ogd2Via2l0KVxuICAgICAgZWxzZVxuICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3ggYXJnc1xuICAgICAgICBkaXNwbGF5OiB2ZW5kb3ItdmFsdWUoaW5saW5lLWJveCBhcmdzLCBvbmx5OiBtb3ogd2Via2l0KVxuICAgIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgICBkaXNwbGF5OiB2ZW5kb3ItdmFsdWUoYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpIC8vIG92ZXJ3cml0ZXMgb2xkIHdlYmtpdFxuICBlbHNlXG4gICAgZGlzcGxheTogYXJndW1lbnRzXG5cbi8qXG4gKiBOZXcgc3ludGF4IGZvciBicm93c2VycyBsaWtlIEdvb2dsZSBDaHJvbWUuXG4gKiBQbHVzIGEgdHJhbnNsYXRpb24gdG8gdGhlIG9sZCBzeW50YXgsIGlmIHBvc3NpYmxlLlxuICovXG5cblxuLy9cbi8vIDUuIE9yZGVyaW5nIGFuZCBPcmllbnRhdGlvblxuLy8gICAgLSBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZsZXhib3gvI29yZGVyaW5nLWFuZC1vcmllbnRhdGlvblxuLy9cbi1mbGV4LW9ic29sZXRlLWRpcmVjdGlvbihkaXJlY3Rpb24pXG4gIGlmIGJveCBpbiBmbGV4LXZlcnNpb25cbiAgICBpZiByb3ctcmV2ZXJzZSA9PSBkaXJlY3Rpb24gfHwgY29sdW1uLXJldmVyc2UgPT0gZGlyZWN0aW9uXG4gICAgICB2ZW5kb3IoJ2JveC1kaXJlY3Rpb24nLCByZXZlcnNlLCBpZ25vcmU6IG1zIG9mZmljaWFsKVxuXG4gICAgaWYgcm93ID09IGRpcmVjdGlvbiB8fCByb3ctcmV2ZXJzZSA9PSBkaXJlY3Rpb25cbiAgICAgIHZlbmRvcignYm94LW9yaWVudCcsIGhvcml6b250YWwsIGlnbm9yZTogbXMgb2ZmaWNpYWwpXG4gICAgZWxzZSBpZiBjb2x1bW4gPT0gZGlyZWN0aW9uIHx8IGNvbHVtbi1yZXZlcnNlID09IGRpcmVjdGlvblxuICAgICAgdmVuZG9yKCdib3gtb3JpZW50JywgdmVydGljYWwsIGlnbm9yZTogbXMgb2ZmaWNpYWwpXG5cbi1mbGV4LW9ic29sZXRlLXdyYXAodmFsdWUpXG4gIGlmIGJveCBpbiBmbGV4LXZlcnNpb25cbiAgICAvLyBXQVJOOiB3cmFwLXJldmVyc2UgZG9lcyBub3QgaGF2ZSBhIGJveCBlcXVpdmFsZW50LiBUaGlzIHdpbGwgcmVuZGVyIGluIGRpZmZlcmVudCBtYW5uZXJzXG4gICAgLy8gICAgb24gYm94IHZzLiBmbGV4IHZhbHVlcy5cbiAgICBpZiAnd3JhcCcgPT0gdmFsdWUgfHwgd3JhcC1yZXZlcnNlID09IHZhbHVlXG4gICAgICB2ZW5kb3IoJ2JveC1saW5lcycsIG11bHRpcGxlLCBpZ25vcmU6IG1zIG9mZmljaWFsKVxuICAgIGVsc2UgaWYgbm93cmFwID09IHZhbHVlXG4gICAgICB2ZW5kb3IoJ2JveC1saW5lcycsIHNpbmdsZSwgaWdub3JlOiBtcyBvZmZpY2lhbClcblxuZmxleC1kaXJlY3Rpb24oZGlyZWN0aW9uKVxuICAvLyBvYnNvbGV0ZVxuICAtZmxleC1vYnNvbGV0ZS1kaXJlY3Rpb24oZGlyZWN0aW9uKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1kaXJlY3Rpb24nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtcyBvZmZpY2lhbClcblxuZmxleC13cmFwKHZhbHVlKVxuICAvLyBvYnNvbGV0ZVxuICAtZmxleC1vYnNvbGV0ZS13cmFwKHZhbHVlKVxuXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LXdyYXAnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtcyBvZmZpY2lhbClcblxuZmxleC1mbG93KClcbiAgLy8gb2Jzb2xldGVcbiAgLWZsZXgtb2Jzb2xldGUtZGlyZWN0aW9uKGFyZ3VtZW50c1swXSlcbiAgLWZsZXgtb2Jzb2xldGUtZGlyZWN0aW9uKGFyZ3VtZW50c1sxXSlcbiAgLWZsZXgtb2Jzb2xldGUtd3JhcChhcmd1bWVudHNbMF0pXG4gIC1mbGV4LW9ic29sZXRlLXdyYXAoYXJndW1lbnRzWzFdKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1mbG93JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbXMgb2ZmaWNpYWwpXG5cblxub3JkZXIoKVxuICAvLyBvYnNvbGV0ZVxuICBpZiBib3ggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdib3gtb3JkaW5hbC1ncm91cCcsIGFyZ3VtZW50cywgaWdub3JlOiBtcyBvZmZpY2lhbClcblxuICAvLyBuZXdcbiAgaWYgZmxleCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2ZsZXgtb3JkZXInLCBhcmd1bWVudHMsIG9ubHk6IG1zKVxuICAgIHZlbmRvcignb3JkZXInLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcblxuXG4vL1xuLy8gNy4gRmxleGliaWxpdHlcbi8vICAgIC0gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1mbGV4Ym94LyNmbGV4aWJpbGl0eVxuLy9cbmZsZXgtZ3Jvdyhncm93dGgpXG4gIC8vIG9ic29sZXRlXG4gIGlmIGJveCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2JveC1mbGV4JywgZ3Jvd3RoKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1ncm93JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbmZsZXgtYmFzaXMoKVxuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1iYXNpcycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG5mbGV4LXNocmluaygpXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LXNocmluaycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG5mbGV4KGdyb3d0aClcblxuICAvLyBvYnNvbGV0ZVxuICBpZiBib3ggaW4gZmxleC12ZXJzaW9uXG4gICAgc2hyaW5rID0gMVxuXG4gICAgaWYgbm9uZSA9PSBncm93dGggfHwgaW5pdGlhbCA9PSBncm93dGhcbiAgICAgIC8vIFdlbGwga25vd24gdmFsdWVzXG4gICAgICBzaHJpbmsgPSAwIGlmIG5vbmUgPT0gZ3Jvd3RoXG4gICAgICBncm93dGggPSAwXG4gICAgZWxzZSBpZiBpcy13aWR0aChncm93dGgpID09IHRydWVcbiAgICAgIC8vIEJhc2lzIGlzIGRlZmluZWQgYXMgdGhlIGZpcnN0IHBhcmFtZXRlclxuICAgICAgZ3Jvd3RoID0gYXJndW1lbnRzWzFdIHx8IDBcbiAgICAgIHNocmluayA9IGFyZ3VtZW50c1syXSBpZiAzIDw9IGxlbmd0aChhcmd1bWVudHMpXG4gICAgZWxzZSBpZiBhcmd1bWVudHNbMV0gJiYgaXMtd2lkdGgoYXJndW1lbnRzWzFdKSA9PSBmYWxzZVxuICAgICAgLy8gR3Jvd3RoIGlzIGZpcnN0IGFuZCBzaHJpbmsgaXMgc2Vjb25kXG4gICAgICBzaHJpbmsgPSBhcmd1bWVudHNbMV1cblxuICAgIC8vIFNpbmNlIHdlIGNhbid0IG1ha2UgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gZ3Jvd2luZyBhbmQgc2hyaW5raW5nIGluIHRoZSBib3ggbW9kZWwsIHRha2VcbiAgICAvLyB0aGUgb25lIHRoYXQgcHJvdmlkZXMgdGhlIG1vc3QgZmxleGliaWxpdHkuXG4gICAgdmVuZG9yKCdib3gtZmxleCcsIG1heChncm93dGgsIHNocmluayksIGlnbm9yZTogbXMpXG5cbiAgLy8gbmV3XG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbXMgb2ZmaWNpYWwpXG5cblxuLy8gY29udmVydHMgdGhlIGp1c3RpZmljYXRpb24gYWxpZ25tZW50XG4tY29udmVydC1qdXN0aWZ5KGFsaWduKVxuICBpZiBmbGV4LXN0YXJ0ID09IGFsaWduXG4gICAgcmV0dXJuIHN0YXJ0XG4gIGVsc2UgaWYgZmxleC1lbmQgPT0gYWxpZ25cbiAgICByZXR1cm4gZW5kXG4gIGVsc2UgaWYgc3BhY2UtYXJvdW5kID09IGFsaWduXG4gICAgcmV0dXJuIGRpc3RyaWJ1dGVcbiAgZWxzZSBpZiBzcGFjZS1iZXR3ZWVuID09IGFsaWduXG4gICAgcmV0dXJuIGp1c3RpZnlcbiAgZWxzZVxuICAgIHJldHVybiBhbGlnblxuXG4vL1xuLy8gOC4gQWxpZ25tZW50XG4vLyAgICAtIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtZmxleGJveC8jYWxpZ25tZW50XG4vL1xuanVzdGlmeS1jb250ZW50KGFsaWduKVxuICAvLyBvYnNvbGV0ZVxuICBpZiBib3ggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdib3gtcGFjaycsIC1jb252ZXJ0LWp1c3RpZnkoYWxpZ24pLCBpZ25vcmU6IG1zIG9mZmljaWFsKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1wYWNrJywgLWNvbnZlcnQtanVzdGlmeShhbGlnbiksIG9ubHk6IG1zKVxuICAgIHZlbmRvcignanVzdGlmeS1jb250ZW50JywgYWxpZ24sIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcblxuYWxpZ24tY29udGVudChhbGlnbilcbiAgLy8gV0FSTjogT2Jzb2xldGUgc3BlYyBkb2VzIG5vdCBhbGxvdyBmb3IgYWRqdXN0bWVudCBoZXJlXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LWxpbmUtcGFjaycsIC1jb252ZXJ0LWp1c3RpZnkoYWxpZ24pLCBvbmx5OiBtcylcbiAgICB2ZW5kb3IoJ2FsaWduLWNvbnRlbnQnLCBhbGlnbiwgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG4vLyBjb252ZXJ0cyBhbGlnbm1lbnQgZnJvbSAnZmxleCcgdG8gbm9ybWFsIHZhbHVlXG4tY29udmVydC1hbGlnbm1lbnQoYWxpZ24pXG4gIGlmIGZsZXgtc3RhcnQgPT0gYWxpZ25cbiAgICByZXR1cm4gc3RhcnRcbiAgZWxzZSBpZiBmbGV4LWVuZCA9PSBhbGlnblxuICAgIHJldHVybiBlbmRcbiAgZWxzZVxuICAgIHJldHVybiBhbGlnblxuXG5hbGlnbi1pdGVtcyhhbGlnbilcbiAgLy8gb2Jzb2xldGVcbiAgaWYgYm94IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignYm94LWFsaWduJywgLWNvbnZlcnQtYWxpZ25tZW50KGFsaWduKSwgaWdub3JlOiBtcyBvZmZpY2lhbClcblxuICAvLyBuZXdcbiAgaWYgZmxleCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2ZsZXgtYWxpZ24nLCAtY29udmVydC1hbGlnbm1lbnQoYWxpZ24pLCBvbmx5OiBtcylcbiAgICB2ZW5kb3IoJ2FsaWduLWl0ZW1zJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbmFsaWduLXNlbGYoYWxpZ24pXG4gIC8vIFdBUk46IE9ic29sZXRlIHNwZWMgZG9lcyBub3QgYWxsb3cgZm9yIG92ZXJyaWRpbmcgYWxpZ25tZW50IG9uIGluZGl2aWR1YWwgaXRlbXMuXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdhbGlnbi1zZWxmJywgYWxpZ24sIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcbiAgICB2ZW5kb3IoJ2ZsZXgtaXRlbS1hbGlnbicsIC1jb252ZXJ0LWFsaWdubWVudChhbGlnbiksIG9ubHk6IG1zKVxuIiwiY2FsbGVkLWZyb20gPSAoKVxuXG52ZW5kb3JzID0gbW96IHdlYmtpdCBvIG1zIG9mZmljaWFsXG5cbi8vIHN0cmluZ2lmeSB0aGUgZ2l2ZW4gYXJnXG5cbi1zdHJpbmcoYXJnKVxuICB0eXBlKGFyZykgKyAnICcgKyBhcmdcblxuLy8gcmVxdWlyZSBhIGNvbG9yXG5cbnJlcXVpcmUtY29sb3IoY29sb3IpXG4gIHVubGVzcyBjb2xvciBpcyBhICdjb2xvcidcbiAgICBlcnJvcignUkdCIG9yIEhTTCB2YWx1ZSBleHBlY3RlZCwgZ290IGEgJyArIC1zdHJpbmcoY29sb3IpKVxuXG4vLyByZXF1aXJlIGEgdW5pdFxuXG5yZXF1aXJlLXVuaXQobilcbiAgdW5sZXNzIG4gaXMgYSAndW5pdCdcbiAgICBlcnJvcigndW5pdCBleHBlY3RlZCwgZ290IGEgJyArIC1zdHJpbmcobikpXG5cbi8vIHJlcXVpcmUgYSBzdHJpbmdcblxucmVxdWlyZS1zdHJpbmcoc3RyKVxuICB1bmxlc3Mgc3RyIGlzIGEgJ3N0cmluZycgb3Igc3RyIGlzIGEgJ2lkZW50J1xuICAgIGVycm9yKCdzdHJpbmcgZXhwZWN0ZWQsIGdvdCBhICcgKyAtc3RyaW5nKHN0cikpXG5cbi8vIE1hdGggZnVuY3Rpb25zXG5cbmFicyhuKSB7IG1hdGgobiwgJ2FicycpIH1cbm1pbihhLCBiKSB7IGEgPCBiID8gYSA6IGIgfVxubWF4KGEsIGIpIHsgYSA+IGIgPyBhIDogYiB9XG5cbi8vIFRyaWdvbm9tZXRyaWNzXG5QSSA9IC1tYXRoLXByb3AoJ1BJJylcblxucmFkaWFucy10by1kZWdyZWVzKGFuZ2xlKVxuICBhbmdsZSAqICgxODAgLyBQSSlcblxuZGVncmVlcy10by1yYWRpYW5zKGFuZ2xlKVxuICBhbmdsZSAqIChQSSAvIDE4MClcblxuc2luKG4pXG4gIG4gPSB1bml0KG4pID09ICdkZWcnID8gZGVncmVlcy10by1yYWRpYW5zKHVuaXQobiwgJycpKSA6IHVuaXQobiwgJycpXG4gIHJvdW5kKG1hdGgobiwgJ3NpbicpLCA5KVxuXG5jb3MobilcbiAgbiA9IHVuaXQobikgPT0gJ2RlZycgPyBkZWdyZWVzLXRvLXJhZGlhbnModW5pdChuLCAnJykpIDogdW5pdChuLCAnJylcbiAgcm91bmQobWF0aChuLCAnY29zJyksIDkpXG5cbi8vIFJvdW5kaW5nIE1hdGggZnVuY3Rpb25zXG5cbmNlaWwobiwgcHJlY2lzaW9uID0gMClcbiAgbXVsdGlwbGllciA9IDEwICoqIHByZWNpc2lvblxuICBtYXRoKG4gKiBtdWx0aXBsaWVyLCAnY2VpbCcpIC8gbXVsdGlwbGllclxuXG5mbG9vcihuLCBwcmVjaXNpb24gPSAwKVxuICBtdWx0aXBsaWVyID0gMTAgKiogcHJlY2lzaW9uXG4gIG1hdGgobiAqIG11bHRpcGxpZXIsICdmbG9vcicpIC8gbXVsdGlwbGllclxuXG5yb3VuZChuLCBwcmVjaXNpb24gPSAwKVxuICBtdWx0aXBsaWVyID0gMTAgKiogcHJlY2lzaW9uXG4gIG1hdGgobiAqIG11bHRpcGxpZXIsICdyb3VuZCcpIC8gbXVsdGlwbGllclxuXG4vLyByZXR1cm4gdGhlIHN1bSBvZiB0aGUgZ2l2ZW4gbnVtYmVyc1xuXG5zdW0obnVtcylcbiAgc3VtID0gMFxuICBzdW0gKz0gbiBmb3IgbiBpbiBudW1zXG5cbi8vIHJldHVybiB0aGUgYXZlcmFnZSBvZiB0aGUgZ2l2ZW4gbnVtYmVyc1xuXG5hdmcobnVtcylcbiAgc3VtKG51bXMpIC8gbGVuZ3RoKG51bXMpXG5cbi8vIHJldHVybiBhIHVuaXRsZXNzIG51bWJlciwgb3IgcGFzcyB0aHJvdWdoXG5cbnJlbW92ZS11bml0KG4pXG4gIGlmIHR5cGVvZihuKSBpcyBcInVuaXRcIlxuICAgIHVuaXQobiwgXCJcIilcbiAgZWxzZVxuICAgIG5cblxuLy8gY29udmVydCBhIHBlcmNlbnQgdG8gYSBkZWNpbWFsLCBvciBwYXNzIHRocm91Z2hcblxucGVyY2VudC10by1kZWNpbWFsKG4pXG4gIGlmIHVuaXQobikgaXMgXCIlXCJcbiAgICByZW1vdmUtdW5pdChuKSAvIDEwMFxuICBlbHNlXG4gICAgblxuXG4vLyBjaGVjayBpZiBuIGlzIGFuIG9kZCBudW1iZXJcblxub2RkKG4pXG4gIDEgPT0gbiAlIDJcblxuLy8gY2hlY2sgaWYgbiBpcyBhbiBldmVuIG51bWJlclxuXG5ldmVuKG4pXG4gIDAgPT0gbiAlIDJcblxuLy8gY2hlY2sgaWYgY29sb3IgaXMgbGlnaHRcblxubGlnaHQoY29sb3IpXG4gIGxpZ2h0bmVzcyhjb2xvcikgPj0gNTAlXG5cbi8vIGNoZWNrIGlmIGNvbG9yIGlzIGRhcmtcblxuZGFyayhjb2xvcilcbiAgbGlnaHRuZXNzKGNvbG9yKSA8IDUwJVxuXG4vLyBkZXNhdHVyYXRlIGNvbG9yIGJ5IGFtb3VudFxuXG5kZXNhdHVyYXRlKGNvbG9yLCBhbW91bnQpXG4gIGFkanVzdChjb2xvciwgJ3NhdHVyYXRpb24nLCAtIGFtb3VudClcblxuLy8gc2F0dXJhdGUgY29sb3IgYnkgYW1vdW50XG5cbnNhdHVyYXRlKGNvbG9yID0gJycsIGFtb3VudCA9IDEwMCUpXG4gIGlmIGNvbG9yIGlzIGEgJ2NvbG9yJ1xuICAgIGFkanVzdChjb2xvciwgJ3NhdHVyYXRpb24nLCBhbW91bnQpXG4gIGVsc2VcbiAgICB1bnF1b3RlKCBcInNhdHVyYXRlKFwiICsgY29sb3IgKyBcIilcIiApXG5cbi8vIGRhcmtlbiBieSB0aGUgZ2l2ZW4gYW1vdW50XG5cbmRhcmtlbihjb2xvciwgYW1vdW50KVxuICBhZGp1c3QoY29sb3IsICdsaWdodG5lc3MnLCAtIGFtb3VudClcblxuLy8gbGlnaHRlbiBieSB0aGUgZ2l2ZW4gYW1vdW50XG5cbmxpZ2h0ZW4oY29sb3IsIGFtb3VudClcbiAgYWRqdXN0KGNvbG9yLCAnbGlnaHRuZXNzJywgYW1vdW50KVxuXG4vLyBkZWNyZWFzZSBvcGFjaXR5IGJ5IGFtb3VudFxuXG5mYWRlLW91dChjb2xvciwgYW1vdW50KVxuICBjb2xvciAtIHJnYmEoYmxhY2ssIHBlcmNlbnQtdG8tZGVjaW1hbChhbW91bnQpKVxuXG4vLyBpbmNyZWFzZSBvcGFjaXR5IGJ5IGFtb3VudFxuXG5mYWRlLWluKGNvbG9yLCBhbW91bnQpXG4gIGNvbG9yICsgcmdiYShibGFjaywgcGVyY2VudC10by1kZWNpbWFsKGFtb3VudCkpXG5cbi8vIHNwaW4gaHVlIGJ5IGEgZ2l2ZW4gYW1vdW50XG5cbnNwaW4oY29sb3IsIGFtb3VudClcbiAgY29sb3IgKyB1bml0KGFtb3VudCwgZGVnKVxuXG4vLyBtaXggdHdvIGNvbG9ycyBieSBhIGdpdmVuIGFtb3VudFxuXG5taXgoY29sb3IxLCBjb2xvcjIsIHdlaWdodCA9IDUwJSlcbiAgdW5sZXNzIHdlaWdodCBpbiAwLi4xMDBcbiAgICBlcnJvcihcIldlaWdodCBtdXN0IGJlIGJldHdlZW4gMCUgYW5kIDEwMCVcIilcblxuICBpZiBsZW5ndGgoY29sb3IxKSA9PSAyXG4gICAgd2VpZ2h0ID0gY29sb3IxWzBdXG4gICAgY29sb3IxID0gY29sb3IxWzFdXG5cbiAgZWxzZSBpZiBsZW5ndGgoY29sb3IyKSA9PSAyXG4gICAgd2VpZ2h0ID0gMTAwIC0gY29sb3IyWzBdXG4gICAgY29sb3IyID0gY29sb3IyWzFdXG5cbiAgcmVxdWlyZS1jb2xvcihjb2xvcjEpXG4gIHJlcXVpcmUtY29sb3IoY29sb3IyKVxuXG4gIHAgPSB1bml0KHdlaWdodCAvIDEwMCwgJycpXG4gIHcgPSBwICogMiAtIDFcblxuICBhID0gYWxwaGEoY29sb3IxKSAtIGFscGhhKGNvbG9yMilcblxuICB3MSA9ICgoKHcgKiBhID09IC0xKSA/IHcgOiAodyArIGEpIC8gKDEgKyB3ICogYSkpICsgMSkgLyAyXG4gIHcyID0gMSAtIHcxXG5cbiAgY2hhbm5lbHMgPSAocmVkKGNvbG9yMSkgcmVkKGNvbG9yMikpIChncmVlbihjb2xvcjEpIGdyZWVuKGNvbG9yMikpIChibHVlKGNvbG9yMSkgYmx1ZShjb2xvcjIpKVxuICByZ2IgPSAoKVxuXG4gIGZvciBwYWlyIGluIGNoYW5uZWxzXG4gICAgcHVzaChyZ2IsIGZsb29yKHBhaXJbMF0gKiB3MSArIHBhaXJbMV0gKiB3MikpXG5cbiAgYTEgPSBhbHBoYShjb2xvcjEpICogcFxuICBhMiA9IGFscGhhKGNvbG9yMikgKiAoMSAtIHApXG4gIGFscGhhID0gYTEgKyBhMlxuXG4gIHJnYmEocmdiWzBdLCByZ2JbMV0sIHJnYlsyXSwgYWxwaGEpXG5cbi8vIGludmVydCBjb2xvcnMsIGxlYXZlIGFscGhhIGludGFjdFxuXG5pbnZlcnQoY29sb3IgPSAnJylcbiAgaWYgY29sb3IgaXMgYSAnY29sb3InXG4gICAgcmdiYSgjZmZmIC0gY29sb3IsIGFscGhhKGNvbG9yKSlcbiAgZWxzZVxuICAgIHVucXVvdGUoIFwiaW52ZXJ0KFwiICsgY29sb3IgKyBcIilcIiApXG5cbi8vIGdpdmUgY29tcGxlbWVudCBvZiB0aGUgZ2l2ZW4gY29sb3JcblxuY29tcGxlbWVudCggY29sb3IgKVxuICBzcGluKCBjb2xvciwgMTgwIClcblxuLy8gZ2l2ZSBncmF5c2NhbGUgb2YgdGhlIGdpdmVuIGNvbG9yXG5cbmdyYXlzY2FsZSggY29sb3IgPSAnJyApXG4gIGlmIGNvbG9yIGlzIGEgJ2NvbG9yJ1xuICAgIGRlc2F0dXJhdGUoIGNvbG9yLCAxMDAlIClcbiAgZWxzZVxuICAgIHVucXVvdGUoIFwiZ3JheXNjYWxlKFwiICsgY29sb3IgKyBcIilcIiApXG5cbi8vIG1peCB0aGUgZ2l2ZW4gY29sb3Igd2l0aCB3aGl0ZVxuXG50aW50KCBjb2xvciwgcGVyY2VudCApXG4gIG1peCggd2hpdGUsIGNvbG9yLCBwZXJjZW50IClcblxuLy8gbWl4IHRoZSBnaXZlbiBjb2xvciB3aXRoIGJsYWNrXG5cbnNoYWRlKCBjb2xvciwgcGVyY2VudCApXG4gIG1peCggYmxhY2ssIGNvbG9yLCBwZXJjZW50IClcblxuLy8gcmV0dXJuIHRoZSBsYXN0IHZhbHVlIGluIHRoZSBnaXZlbiBleHByXG5cbmxhc3QoZXhwcilcbiAgZXhwcltsZW5ndGgoZXhwcikgLSAxXVxuXG4vLyByZXR1cm4ga2V5cyBpbiB0aGUgZ2l2ZW4gcGFpcnMgb3Igb2JqZWN0XG5cbmtleXMocGFpcnMpXG4gIHJldCA9ICgpXG4gIGlmIHR5cGUocGFpcnMpID09ICdvYmplY3QnXG4gICAgZm9yIGtleSBpbiBwYWlyc1xuICAgICAgcHVzaChyZXQsIGtleSlcbiAgZWxzZVxuICAgIGZvciBwYWlyIGluIHBhaXJzXG4gICAgICBwdXNoKHJldCwgcGFpclswXSk7XG4gIHJldFxuXG4vLyByZXR1cm4gdmFsdWVzIGluIHRoZSBnaXZlbiBwYWlycyBvciBvYmplY3RcblxudmFsdWVzKHBhaXJzKVxuICByZXQgPSAoKVxuICBpZiB0eXBlKHBhaXJzKSA9PSAnb2JqZWN0J1xuICAgIGZvciBrZXksIHZhbCBpbiBwYWlyc1xuICAgICAgcHVzaChyZXQsIHZhbClcbiAgZWxzZVxuICAgIGZvciBwYWlyIGluIHBhaXJzXG4gICAgICBwdXNoKHJldCwgcGFpclsxXSk7XG4gIHJldFxuXG4vLyBqb2luIHZhbHVlcyB3aXRoIHRoZSBnaXZlbiBkZWxpbWl0ZXJcblxuam9pbihkZWxpbSwgdmFscy4uLilcbiAgYnVmID0gJydcbiAgdmFscyA9IHZhbHNbMF0gaWYgbGVuZ3RoKHZhbHMpID09IDFcbiAgZm9yIHZhbCwgaSBpbiB2YWxzXG4gICAgYnVmICs9IGkgPyBkZWxpbSArIHZhbCA6IHZhbFxuXG4vLyBhZGQgYSBDU1MgcnVsZSB0byB0aGUgY29udGFpbmluZyBibG9ja1xuXG4vLyAtIFRoaXMgZGVmaW5pdGlvbiBhbGxvd3MgYWRkLXByb3BlcnR5IHRvIGJlIHVzZWQgYXMgYSBtaXhpblxuLy8gLSBJdCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIGludGVycG9sYXRpb24gYnV0IGFsbG93cyB1c2Vyc1xuLy8gICB0byBvcHQgZm9yIGEgZnVuY3Rpb25hbCBzdHlsZVxuXG5hZGQtcHJvcGVydHktZnVuY3Rpb24gPSBhZGQtcHJvcGVydHlcbmFkZC1wcm9wZXJ0eShuYW1lLCBleHByKVxuICBpZiBtaXhpblxuICAgIHtuYW1lfSBleHByXG4gIGVsc2VcbiAgICBhZGQtcHJvcGVydHktZnVuY3Rpb24obmFtZSwgZXhwcilcblxucHJlZml4LWNsYXNzZXMocHJlZml4KVxuICAtcHJlZml4LWNsYXNzZXMocHJlZml4LCBibG9jaylcblxuLy8gQ2FjaGluZyBtaXhpbiwgdXNlIGluc2lkZSB5b3VyIGZ1bmN0aW9ucyB0byBlbmFibGUgY2FjaGluZyBieSBleHRlbmRpbmcuXG5cbiRzdHlsdXNfbWl4aW5fY2FjaGUgPSB7fVxuY2FjaGUoKVxuICAka2V5ID0gKGN1cnJlbnQtbWVkaWEoKSBvciAnbm8tbWVkaWEnKSArICdfXycgKyBjYWxsZWQtZnJvbVswXSArICdfXycgKyBhcmd1bWVudHNcbiAgaWYgJGtleSBpbiAkc3R5bHVzX21peGluX2NhY2hlXG4gICAgQGV4dGVuZCB7XCIkY2FjaGVfcGxhY2Vob2xkZXJfZm9yX1wiICsgJHN0eWx1c19taXhpbl9jYWNoZVska2V5XX1cbiAgZWxzZSBpZiAnY2FjaGUnIGluIGNhbGxlZC1mcm9tXG4gICAge2Jsb2NrfVxuICBlbHNlXG4gICAgJGlkID0gbGVuZ3RoKCRzdHlsdXNfbWl4aW5fY2FjaGUpXG5cbiAgICAmLFxuICAgIC8kY2FjaGVfcGxhY2Vob2xkZXJfZm9yX3skaWR9XG4gICAgICAkc3R5bHVzX21peGluX2NhY2hlWyRrZXldID0gJGlkXG4gICAgICB7YmxvY2t9XG5cbi8vIFBlcmNlbnRhZ2UgZnVuY3Rpb24gdG8gY29udmVydCBhIG51bWJlciwgZS5nLiBcIi40NVwiLCBpbnRvIGEgcGVyY2VudGFnZSwgZS5nLiBcIjQ1JVwiXG5cbnBlcmNlbnRhZ2UobnVtKVxuICByZXR1cm4gdW5pdChudW0gKiAxMDAsICclJylcblxuLy8gUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgYSBgdmFsdWVgIHdpdGhpbiBhIGBsaXN0YFxuXG5pbmRleChsaXN0LCB2YWx1ZSlcbiAgZm9yIHZhbCwgaSBpbiBsaXN0XG4gICAgcmV0dXJuIGkgaWYgdmFsID09IHZhbHVlXG4iXX0= */
