*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}h1,h2,h3,h4,h5,h6,dt{margin-top:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500}html{margin-top:0;font-family:Georgia,Cambria,'Times New Roman',Times,serif;font-weight:400}body,html{padding:0;margin:0;color:#404040}.container{padding:1em}.section .container{padding:0;}.section .container .article{padding:1em}a{color:#008941}.btn{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;text-decoration:none;font-size:.8em;color:#fff;text-align:center;background:-webkit-linear-gradient(top, #5f5f5f, #4d4d4d);background:-moz-linear-gradient(top, #5f5f5f, #4d4d4d);background:-o-linear-gradient(top, #5f5f5f, #4d4d4d);background:-ms-linear-gradient(top, #5f5f5f, #4d4d4d);background:linear-gradient(to bottom, #5f5f5f, #4d4d4d);-webkit-border-radius:3px;border-radius:3px;border:1px solid #454545;padding:.4em 1em}input[type=text],textarea{display:block;width:100%;-webkit-border-radius:3px;border-radius:3px;border-width:0;background:#e6e6e6}label{display:block;margin-bottom:4px}input,textarea{margin-bottom:10px}form.edit-issue textarea{font-family:Menlo,Monaco,monospace;font-size:12px;padding:1em}.navbar{background:#00a04c top center;background-image:url("/assets/img/sheer-banner.png");border-bottom:1px solid rgba(255,255,255,0.2);}.navbar .container{zoom:1;padding:0}.navbar .container:before,.navbar .container:after{content:"";display:table}.navbar .container:after{clear:both}.navbar img{max-width:90px;padding:3px 0 0 0}.navbar .download{float:right;clear:none;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;text-decoration:none;font-size:.8em;color:#fff;text-align:center;background:-webkit-linear-gradient(top, #00a54f, #007f3d);background:-moz-linear-gradient(top, #00a54f, #007f3d);background:-o-linear-gradient(top, #00a54f, #007f3d);background:-ms-linear-gradient(top, #00a54f, #007f3d);background:linear-gradient(to bottom, #00a54f, #007f3d);-webkit-border-radius:3px;border-radius:3px;border:1px solid #007237;padding:.4em 1em}.navbar .nav{zoom:1;text-align:center;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;margin:0;}.navbar .nav:before,.navbar .nav:after{content:"";display:table}.navbar .nav:after{clear:both}.navbar .nav > li{display:inline;}.navbar .nav > li a{padding:1em;display:inline-block;color:#fff;color:rgba(255,255,255,0.9);text-decoration:none;}.navbar .nav > li a:hover{background:rgba(255,255,255,0.1);color:#fff}.jumbotron{background:#00a04c top center;background-image:url("/assets/img/sheer-banner.png");}.jumbotron .container{zoom:1;padding:0}.jumbotron .container:before,.jumbotron .container:after{content:"";display:table}.jumbotron .container:after{clear:both}.jumbotron img{max-width:100%;padding:1em}.jumbotron .tag{padding:.8em 1em .8em 1em;background:rgba(255,255,255,0.1);font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;color:#fff;text-align:center;font-size:14px}.jumbotron .download{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;text-decoration:none;font-size:.8em;color:#fff;text-align:center;background:-webkit-linear-gradient(top, #3c3c3c, #262626);background:-moz-linear-gradient(top, #3c3c3c, #262626);background:-o-linear-gradient(top, #3c3c3c, #262626);background:-ms-linear-gradient(top, #3c3c3c, #262626);background:linear-gradient(to bottom, #3c3c3c, #262626);-webkit-border-radius:3px;border-radius:3px;border:1px solid #222;padding:.4em 1em;width:auto;display:block;margin:1em;padding:.6em;font-size:16px;clear:both;display:none}.jumbotron .download[href]{display:block}.info-bar{background:#262626;border-bottom:1px solid #404040;}.info-bar .container{zoom:1}.info-bar .container:before,.info-bar .container:after{content:"";display:table}.info-bar .container:after{clear:both}.info-bar .text{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;text-decoration:none;font-weight:500;display:inline;margin-bottom:0;line-height:1;text-transform:uppercase;letter-spacing:-.01em;font-size:24px;color:#fff}.info-bar .small{font-size:14px}.info-bar .download{float:right;clear:none;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;text-decoration:none;font-size:.8em;color:#fff;text-align:center;background:-webkit-linear-gradient(top, #00a54f, #007f3d);background:-moz-linear-gradient(top, #00a54f, #007f3d);background:-o-linear-gradient(top, #00a54f, #007f3d);background:-ms-linear-gradient(top, #00a54f, #007f3d);background:linear-gradient(to bottom, #00a54f, #007f3d);-webkit-border-radius:3px;border-radius:3px;border:1px solid #007237;padding:.4em 1em}.featured .article{display:block;zoom:1;position:relative;width:100%;background-repeat:no-repeat;background-position:center 10%;-webkit-background-size:cover;-moz-background-size:cover;background-size:cover;height:330px;overflow:hidden;}.featured .article:before,.featured .article:after{content:"";display:table}.featured .article:after{clear:both}.featured .article .overlay{width:100%;height:100%;position:absolute;top:0;left:0;background:rgba(0,0,0,0.4)}.featured .article:hover .overlay{background:rgba(0,0,0,0.6)}.featured .article .container{position:relative;height:100%}.featured .article .title{padding:1em 1em 0 1em;position:absolute;left:0;bottom:1em;z-index:10;}.featured .article .title h1,.featured .article .title h2,.featured .article .title h3{line-height:1;margin:0;color:#fff;margin-bottom:2px}.featured .article .title h3{text-transform:uppercase;opacity:.8;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";filter:alpha(opacity=80)}.featured .article .title h1{font-size:40px}.featured .article .title h2{font-size:22px;margin-bottom:4px}.featured .article .title h3{font-size:16px}.featured .article + .article{height:170px}.sections .section{position:relative;}.sections .section img{float:right;max-width:60px;max-height:60px;margin-right:.5em}.sections .section .title{padding:1em;background:#00a04c top center;background-image:url("/assets/img/sheer-banner.png");}.sections .section .title h1{color:#fff;font-size:24px;margin:0;padding:0;line-height:1}.sections .section .article{display:block;text-decoration:none;color:#404040;cursor:pointer;zoom:1;border-top:1px solid #f7f7f7;border-bottom:1px solid #e8e8e8;}.sections .section .article:before,.sections .section .article:after{content:"";display:table}.sections .section .article:after{clear:both}.sections .section .article:hover{background:#f7f7f7}.sections .section .article h1,.sections .section .article h2,.sections .section .article h3{line-height:1;margin-bottom:3px}.sections .section .article h1{font-size:18px}.sections .section .article h2{font-size:16px}.sections .section .article h3{font-size:14px;text-transform:uppercase;color:#a3a3a3}.solo-article h1,.solo-article h2,.solo-article h3,.solo-article h4{line-height:1;margin:0;color:#404040;margin-bottom:10px}.solo-article h3{text-transform:uppercase;opacity:.8;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";filter:alpha(opacity=80)}.solo-article h1{font-size:42px}.solo-article h2{font-size:22px}.solo-article h3{font-size:16px}.solo-article h4{font-size:24px;font-weight:bold;color:#4d4d4d;margin-bottom:1em}.solo-article p,.solo-article li{color:#666;font-size:20px;line-height:1.7}.solo-article img{min-width:100%;max-width:100%}.solo-article p,.solo-article ul,.solo-article ol{margin-bottom:1.5em}.solo-article li{margin-bottom:.4em;font-size:18px}.solo-article ul,.solo-article ol{margin-left:1.5em}@media only screen and (min-width:500px){.featured .article .title{padding:0}.jumbotron img{max-width:13em;padding:1em 1em 1em 0;float:left}.jumbotron .tag{text-align:left;margin-top:1em;max-width:14em;float:right}.jumbotron .download{margin:1em 0}.navbar .nav{clear:both;text-align:right}.container{*zoom:1;width:auto;max-width:26em;float:none;display:block;margin-right:auto;margin-left:auto;padding-left:0;padding-right:0}.container:before,.container:after{content:'';display:table}.container:after{clear:both}.section .container{*zoom:1;width:auto;max-width:28em;float:none;display:block;margin-right:auto;margin-left:auto;padding-left:0;padding-right:0}.section .container:before,.section .container:after{content:'';display:table}.section .container:after{clear:both}header{text-align:left}}@media only screen and (min-width:700px){.container{*zoom:1;width:auto;max-width:38em;float:none;display:block;margin-right:auto;margin-left:auto;padding-left:0;padding-right:0}.container:before,.container:after{content:'';display:table}.container:after{clear:both}.jumbotron img{max-width:20em}.jumbotron .tag{max-width:18em}.jumbotron .download{max-width:18em;width:15.8em;float:right;clear:right;margin:1em 0}.section .container{*zoom:1;width:auto;max-width:40em;float:none;display:block;margin-right:auto;margin-left:auto;padding-left:0;padding-right:0}.section .container:before,.section .container:after{content:'';display:table}.section .container:after{clear:both}header{text-align:left}}#content > div > div.issue-embed > div.issuuembed.issuu-isrendered > div > div:nth-child(2){display:none !important;height:0 !important}#content > div > div.issue-embed > div.issuuembed.issuu-isrendered > div > div:nth-child(1){height:100% !important}#content > div > div.issue-embed > div{max-width:100% !important;background:#2a2a2a !important}.issue-embed{background:#262626}/*# sourceMappingURL=main.css.map */
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uc3R5bCIsIi4uLy4uL25vZGVfbW9kdWxlcy9uaWIvbGliL25pYi92ZW5kb3Iuc3R5bCIsIi4uLy4uL25vZGVfbW9kdWxlcy9qZWV0L3N0eWx1cy9qZWV0L19ncmlkLnN0eWwiLCIuLi8uLi9ub2RlX21vZHVsZXMvbmliL2xpYi9uaWIvYm9yZGVyLnN0eWwiLCIuLi8uLi9ub2RlX21vZHVsZXMvbmliL2xpYi9uaWIvZmxleC5zdHlsIiwiLi4vLi4vbm9kZV9tb2R1bGVzL25pYi9saWIvbmliL2NsZWFyZml4LnN0eWwiLCIuLi8uLi9ub2RlX21vZHVsZXMvbmliL2xpYi9uaWIvb3ZlcmZsb3cuc3R5bCIsIi4uLy4uL25vZGVfbW9kdWxlcy9uaWIvbGliL25pYi9wb3NpdGlvbnMuc3R5bCIsIi4uLy4uL25vZGVfbW9kdWxlcy9ydXB0dXJlL3J1cHR1cmUvaW5kZXguc3R5bCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFlQSxFQzRCa0IsbUJBQUcsV0FBSCxnQkFBRyxXQVJOLFdBQUcsV0NuQ2UsR0FBQSxHQUFBLEdBQUEsR0FBQSxHQUFBLEdBQUEsR0Z1QjdCLFdBQVcsRUFDWCxZQUFZLDRDQUNaLFlBQVksSUFIRSxLQUNkLFdBQVcsRUFDWCxZQUFZLDhDQUNaLFlBQVksSUFNaEIsS0FBTSxLQUNKLFFBQVEsRUFDUixPQUFPLEVBQ1AsTUFBTSxRQUVSLFdBQ0UsUUFBUSxJQUNWLG9CQUNFLFFBQVEsR0FDUiw2QkFDRSxRQUFRLElBRVosRUFDRSxNQUFtQixRQWFyQixLQVZFLFlBQVksNENBQ1osZ0JBQWdCLEtBQ2hCLFVBQVUsS0FDVixNQUFNLEtBQ04sV0FBVyxPQ1ZLLFdBQXNDLCtDQUF0QyxXQUFzQyw0Q0FBdEMsV0FBc0MsMENBQXRDLFdBQXNDLDJDQVJ6QyxXQUErQiw2Q0FVNUIsc0JBQUcsSUFSTixjQUFHLElFMUJkLE9BQVEsa0JIOENWLFFBQVEsU0FNVixpQkFBa0IsU0l2Q2QsUUFBUyxNSnlDWCxNQUFNLEtDcEJVLHNCQUFHLElBUk4s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LE9BQU8sTUFDWCxvQkU1REMsTUFBTSxFQWpHUCxNQUFPLEtBQ1AsVUFBVyxLQUNYLE1BQU8sS0U1SkwsUUFBUyxNRjhKWCxhQUFjLEtBQ2QsWUFBYSxLQUNiLGFBQWMsRUFDZCxjQUFlLEVBNEZmLDJCQUFVLDBCQUNSLFFBQVMsR0U5UFQsUUFBUyxNRmlRWCwwQkFDRSxNQUFPLEtGdURULE9BQ0UsV0FBVyxNQUdmLDRGSTdUSSxRQUFTLGdCSitUWCxPQUFPLGFBQ1QsNEZBQ0UsT0FBTyxnQkFDVCx1Q0FDRSxVQUFVLGdCQytNUixXQUFXLG1CRDVNZixhQzRNSSxXQUFXIiwiZmlsZSI6Im1haW4uY3NzIiwic291cmNlUm9vdCI6Ii9zb3VyY2UvIiwic291cmNlc0NvbnRlbnQiOlsiQGltcG9ydCAnbmliJ1xuQGltcG9ydCAnamVldCdcblxuLy8gMDBhMDRjXG5DMSA9ICMwMEU1NkRcbkMyID0gI0ZDMUFBRVxuQzMgPSAjMDA3RjNEXG5cblRDMSA9IGxpZ2h0ZW4oYmxhY2ssIDI1JSlcblRDMiA9IGxpZ2h0ZW4oYmxhY2ssIDE1JSlcblxuLy8gc2V0dGluZ3M6IHR5cG9ncmFwaHlcbi8vIGJvZHkgPSBcIkhvZWZsZXIgVGV4dFwiLCBcIkJhc2tlcnZpbGxlIG9sZCBmYWNlXCIsIEdhcmFtb25kLCBcIlRpbWVzIE5ldyBSb21hblwiLCBzZXJpZlxuLy8gYm9keSA9IEJhc2tlcnZpbGxlLCBcIkJhc2tlcnZpbGxlIG9sZCBmYWNlXCIsIFwiSG9lZmxlciBUZXh0XCIsIEdhcmFtb25kLCBcIlRpbWVzIE5ldyBSb21hblwiLCBzZXJpZlxuLy8gYm9keSA9IGZyZWlnaHQtdGV4dC1wcm8sIEdlb3JnaWEsIENhbWJyaWEsICdUaW1lcyBOZXcgUm9tYW4nLCBUaW1lcywgc2VyaWZcbipcbiAgYm94LXNpemluZyBib3JkZXItYm94XG5cbmJvZHkgPSBHZW9yZ2lhLCBDYW1icmlhLCAnVGltZXMgTmV3IFJvbWFuJywgVGltZXMsIHNlcmlmXG5oZWFkID0gXCJIZWx2ZXRpY2EgTmV1ZVwiLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmXG5cbmNvbmZpZy1mb250KGZhbWlseSwgd2VpZ2h0LCB0YWdzKVxuICB7am9pbignLCAnLCB0YWdzKX1cbiAgICBtYXJnaW4tdG9wIDBcbiAgICBmb250LWZhbWlseSBmYW1pbHlcbiAgICBmb250LXdlaWdodCB3ZWlnaHRcblxuLy8gbW9iaWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuY29uZmlnLWZvbnQoaGVhZCwgNTAwLCBoMSBoMiBoMyBoNCBoNSBoNiBkdClcbmNvbmZpZy1mb250KGJvZHksIDQwMCwgaHRtbClcblxuYm9keSwgaHRtbFxuICBwYWRkaW5nIDBcbiAgbWFyZ2luIDBcbiAgY29sb3IgVEMxXG5cbi5jb250YWluZXJcbiAgcGFkZGluZyAxZW1cbi5zZWN0aW9uIC5jb250YWluZXJcbiAgcGFkZGluZyAwXG4gIC5hcnRpY2xlXG4gICAgcGFkZGluZyAxZW1cblxuYVxuICBjb2xvciBkYXJrZW4oQzEsNDAlKVxuXG5idG4oQylcbiAgZm9udC1mYW1pbHkgaGVhZFxuICB0ZXh0LWRlY29yYXRpb24gbm9uZVxuICBmb250LXNpemUgLjhlbVxuICBjb2xvciAjZmZmXG4gIHRleHQtYWxpZ24gY2VudGVyXG4gIGJhY2tncm91bmQgbGluZWFyLWdyYWRpZW50KHRvcCwgbGlnaHRlbihDLCAxMCUpLCBDKVxuICBib3JkZXItcmFkaXVzIDNweFxuICBib3JkZXIgMXB4IHNvbGlkIGRhcmtlbihDLCAxMCUpXG4gIHBhZGRpbmcgLjRlbSAxZW1cblxuLmJ0blxuICBidG4obGlnaHRlbihibGFjaywgMzAlKSlcblxuLy8gZm9ybXNcbmlucHV0W3R5cGU9dGV4dF0sIHRleHRhcmVhXG4gIGRpc3BsYXkgYmxvY2tcbiAgd2lkdGggMTAwJVxuICBib3JkZXItcmFkaXVzIDNweFxuICBib3JkZXItd2lkdGggMFxuICBiYWNrZ3JvdW5kIGxpZ2h0ZW4oYmxhY2ssIDkwJSlcblxubGFiZWxcbiAgZGlzcGxheSBibG9ja1xuICBtYXJnaW4tYm90dG9tIDRweFxuXG5pbnB1dCwgdGV4dGFyZWFcbiAgbWFyZ2luLWJvdHRvbSAxMHB4XG5cbmZvcm0uZWRpdC1pc3N1ZVxuICB0ZXh0YXJlYVxuICAgIGZvbnQtZmFtaWx5IE1lbmxvLCBNb25hY28sIG1vbm9zcGFjZVxuICAgIGZvbnQtc2l6ZSAxMnB4XG4gICAgcGFkZGluZyAxZW1cblxuLy8gdG9wIG5hdmJhclxuLm5hdmJhclxuICBiYWNrZ3JvdW5kIGRhcmtlbihDMSwgMzAlKSB0b3AgY2VudGVyXG4gIGJhY2tncm91bmQtaW1hZ2UgdXJsKC9hc3NldHMvaW1nL3NoZWVyLWJhbm5lci5wbmcpXG4gIGJvcmRlci1ib3R0b20gMXB4IHNvbGlkIHJnYmEod2hpdGUsIC4yKVxuXG4gIC5jb250YWluZXJcbiAgICBjbGVhcmZpeCgpXG4gICAgcGFkZGluZyAwXG4gIGltZ1xuICAgIG1heC13aWR0aCA5MHB4XG4gICAgcGFkZGluZyAzcHggMCAwIDBcbiAgLmRvd25sb2FkXG4gICAgZmxvYXQgcmlnaHRcbiAgICBjbGVhciBub25lXG4gICAgYnRuKEMzKVxuICAubmF2XG4gICAgY2xlYXJmaXgoKVxuICAgIHRleHQtYWxpZ24gY2VudGVyXG4gICAgZm9udC1mYW1pbHkgaGVhZFxuICAgIGZvbnQtc2l6ZSAxM3B4XG4gICAgbWFyZ2luIDBcbiAgICA+IGxpXG4gICAgICBkaXNwbGF5IGlubGluZVxuICAgICAgYVxuICAgICAgICBwYWRkaW5nIDFlbVxuICAgICAgICBkaXNwbGF5IGlubGluZS1ibG9ja1xuICAgICAgICBjb2xvciB3aGl0ZVxuICAgICAgICBjb2xvciByZ2JhKHdoaXRlLCAuOSlcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uIG5vbmVcbiAgICAgICAgJjpob3ZlclxuICAgICAgICAgIGJhY2tncm91bmQgcmdiYSh3aGl0ZSwgLjEpXG4gICAgICAgICAgY29sb3Igd2hpdGVcblxuLmp1bWJvdHJvblxuICBiYWNrZ3JvdW5kIGRhcmtlbihDMSwgMzAlKSB0b3AgY2VudGVyXG4gIGJhY2tncm91bmQtaW1hZ2UgdXJsKC9hc3NldHMvaW1nL3NoZWVyLWJhbm5lci5wbmcpXG4gIC5jb250YWluZXJcbiAgICBjbGVhcmZpeCgpXG4gICAgcGFkZGluZyAwXG4gIGltZ1xuICAgIG1heC13aWR0aCAxMDAlXG4gICAgcGFkZGluZyAxZW1cbiAgLnRhZ1xuICAgIHBhZGRpbmcgLjhlbSAxZW0gLjhlbSAxZW1cbiAgICBiYWNrZ3JvdW5kIHJnYmEod2hpdGUsIC4xKVxuICAgIGZvbnQtZmFtaWx5IGhlYWRcbiAgICBjb2xvciB3aGl0ZVxuICAgIHRleHQtYWxpZ24gY2VudGVyXG4gICAgZm9udC1zaXplIDE0cHhcbiAgLmRvd25sb2FkXG4gICAgYnRuKFRDMilcbiAgICB3aWR0aCBhdXRvXG4gICAgZGlzcGxheSBibG9ja1xuICAgIG1hcmdpbiAxZW1cbiAgICBwYWRkaW5nIC42ZW1cbiAgICBmb250LXNpemUgMTZweFxuICAgIGNsZWFyIGJvdGhcbiAgICBkaXNwbGF5IG5vbmVcbiAgLmRvd25sb2FkW2hyZWZdXG4gICAgZGlzcGxheSBibG9ja1xuXG4vLyBibGFjayBiYXJzIHdpdGggaXNzdWUgaW5mb1xuLmluZm8tYmFyXG4gIGJhY2tncm91bmQgVEMyXG4gIGJvcmRlci1ib3R0b20gMXB4IHNvbGlkIFRDMVxuICAuY29udGFpbmVyXG4gICAgY2xlYXJmaXgoKVxuICAudGV4dFxuICAgIGZvbnQtZmFtaWx5IGhlYWRcbiAgICB0ZXh0LWRlY29yYXRpb24gbm9uZVxuICAgIGZvbnQtd2VpZ2h0IDUwMFxuICAgIGRpc3BsYXkgaW5saW5lXG4gICAgbWFyZ2luLWJvdHRvbSAwXG4gICAgbGluZS1oZWlnaHQgMVxuICAgIHRleHQtdHJhbnNmb3JtIHVwcGVyY2FzZVxuICAgIGxldHRlci1zcGFjaW5nIC0wLjAxZW1cbiAgICBmb250LXNpemUgMjRweFxuICAgIGNvbG9yIHdoaXRlXG4gIC5zbWFsbFxuICAgIGZvbnQtc2l6ZSAxNHB4XG4gIC5kb3dubG9hZFxuICAgIGZsb2F0IHJpZ2h0XG4gICAgY2xlYXIgbm9uZVxuICAgIGJ0bihDMylcblxuLy8gYXJ0aWNsZXNcbi8vIGlzc3VlIGluZGV4XG4uZmVhdHVyZWRcbiAgLmFydGljbGVcbiAgICBkaXNwbGF5IGJsb2NrXG4gICAgY2xlYXJmaXgoKVxuICAgIHBvc2l0aW9uIHJlbGF0aXZlXG4gICAgd2lkdGggMTAwJVxuICAgIGJhY2tncm91bmQtcmVwZWF0IG5vLXJlcGVhdFxuICAgIGJhY2tncm91bmQtcG9zaXRpb24gY2VudGVyIDEwJVxuICAgIGJhY2tncm91bmQtc2l6ZSBjb3ZlclxuICAgIGhlaWdodCAzMzBweFxuICAgIG92ZXJmbG93IGhpZGRlblxuXG4gICAgLm92ZXJsYXlcbiAgICAgIHdpZHRoIDEwMCVcbiAgICAgIGhlaWdodCAxMDAlXG4gICAgICBhYnNvbHV0ZSB0b3AgMCBsZWZ0IDBcbiAgICAgIGJhY2tncm91bmQgcmdiYShibGFjaywgLjQpXG4gICAgJjpob3ZlciAub3ZlcmxheVxuICAgICAgYmFja2dyb3VuZCByZ2JhKGJsYWNrLCAuNilcbiAgICAuY29udGFpbmVyXG4gICAgICBwb3NpdGlvbiByZWxhdGl2ZVxuICAgICAgaGVpZ2h0IDEwMCVcbiAgICAudGl0bGVcbiAgICAgIHBhZGRpbmcgMWVtIDFlbSAwIDFlbVxuICAgICAgYWJzb2x1dGUgbGVmdCAwIGJvdHRvbSAxZW1cbiAgICAgIHotaW5kZXggMTBcbiAgICAgIGgxLCBoMiwgaDNcbiAgICAgICAgbGluZS1oZWlnaHQgMVxuICAgICAgICBtYXJnaW4gMFxuICAgICAgICBjb2xvciB3aGl0ZVxuICAgICAgICBtYXJnaW4tYm90dG9tIDJweFxuICAgICAgaDNcbiAgICAgICAgdGV4dC10cmFuc2Zvcm0gdXBwZXJjYXNlXG4gICAgICAgIG9wYWNpdHkgLjhcbiAgICAgIGgxXG4gICAgICAgIGZvbnQtc2l6ZSA0MHB4XG4gICAgICBoMlxuICAgICAgICBmb250LXNpemUgMjJweFxuICAgICAgICBtYXJnaW4tYm90dG9tIDRweFxuICAgICAgaDNcbiAgICAgICAgZm9udC1zaXplIDE2cHhcbiAgLmFydGljbGUgKyAuYXJ0aWNsZVxuICAgIGhlaWdodCAxNzBweFxuXG4uc2VjdGlvbnMgLnNlY3Rpb25cbiAgcG9zaXRpb24gcmVsYXRpdmVcbiAgaW1nXG4gICAgZmxvYXQgcmlnaHRcbiAgICBtYXgtd2lkdGggNjBweFxuICAgIG1heC1oZWlnaHQgNjBweFxuICAgIG1hcmdpbi1yaWdodCAuNWVtXG4gIC50aXRsZVxuICAgIHBhZGRpbmcgMWVtXG4gICAgYmFja2dyb3VuZCBkYXJrZW4oQzEsIDMwJSkgdG9wIGNlbnRlclxuICAgIGJhY2tncm91bmQtaW1hZ2UgdXJsKC9hc3NldHMvaW1nL3NoZWVyLWJhbm5lci5wbmcpXG4gICAgaDFcbiAgICAgIGNvbG9yIHdoaXRlXG4gICAgICBmb250LXNpemUgMjRweFxuICAgICAgbWFyZ2luIDBcbiAgICAgIHBhZGRpbmcgMFxuICAgICAgbGluZS1oZWlnaHQgMVxuXG4gIC5hcnRpY2xlXG4gICAgZGlzcGxheSBibG9ja1xuICAgIHRleHQtZGVjb3JhdGlvbiBub25lXG4gICAgY29sb3IgVEMxXG4gICAgY3Vyc29yIHBvaW50ZXJcbiAgICBjbGVhcmZpeCgpXG4gICAgYm9yZGVyLXRvcCAxcHggc29saWQgZGFya2VuKHdoaXRlLCAzJSlcbiAgICBib3JkZXItYm90dG9tIDFweCBzb2xpZCBkYXJrZW4od2hpdGUsIDklKVxuXG4gICAgJjpob3ZlclxuICAgICAgYmFja2dyb3VuZCBkYXJrZW4od2hpdGUsIDMlKVxuXG4gICAgaDEsIGgyLCBoM1xuICAgICAgbGluZS1oZWlnaHQgMVxuICAgICAgbWFyZ2luLWJvdHRvbSAzcHhcbiAgICBoMVxuICAgICAgZm9udC1zaXplIDE4cHhcbiAgICBoMlxuICAgICAgZm9udC1zaXplIDE2cHhcbiAgICBoM1xuICAgICAgZm9udC1zaXplIDE0cHhcbiAgICAgIHRleHQtdHJhbnNmb3JtIHVwcGVyY2FzZVxuICAgICAgY29sb3IgZGFya2VuKHdoaXRlLCAzNiUpXG5cbi5zb2xvLWFydGljbGVcbiAgaDEsIGgyLCBoMywgaDRcbiAgICBsaW5lLWhlaWdodCAxXG4gICAgbWFyZ2luIDBcbiAgICBjb2xvciBUQzFcbiAgICBtYXJnaW4tYm90dG9tIDEwcHhcbiAgaDNcbiAgICB0ZXh0LXRyYW5zZm9ybSB1cHBlcmNhc2VcbiAgICBvcGFjaXR5IC44XG4gIGgxXG4gICAgZm9udC1zaXplIDQycHhcbiAgaDJcbiAgICBmb250LXNpemUgMjJweFxuICBoM1xuICAgIGZvbnQtc2l6ZSAxNnB4XG4gIGg0XG4gICAgZm9udC1zaXplIDI0cHhcbiAgICBmb250LXdlaWdodCBib2xkXG4gICAgY29sb3IgbGlnaHRlbihibGFjaywgMzAlKVxuICAgIG1hcmdpbi1ib3R0b20gMWVtXG4gIHAsIGxpXG4gICAgY29sb3IgbGlnaHRlbihibGFjaywgNDAlKVxuICAgIGZvbnQtc2l6ZSAyMHB4XG4gICAgbGluZS1oZWlnaHQgMS43XG4gIGltZ1xuICAgIG1pbi13aWR0aCAxMDAlXG4gICAgbWF4LXdpZHRoIDEwMCVcbiAgcCwgdWwsIG9sXG4gICAgbWFyZ2luLWJvdHRvbSAxLjVlbVxuICBsaVxuICAgIG1hcmdpbi1ib3R0b20gLjRlbVxuICAgIGZvbnQtc2l6ZSAxOHB4XG4gIHVsLCBvbFxuICAgIG1hcmdpbi1sZWZ0IDEuNWVtXG5cbithYm92ZSg1MDBweCkgLy8gc21hbGwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC5mZWF0dXJlZCAuYXJ0aWNsZVxuICAgIC50aXRsZVxuICAgICAgcGFkZGluZyAwXG4gIC5qdW1ib3Ryb25cbiAgICBpbWdcbiAgICAgIG1heC13aWR0aCAxM2VtXG4gICAgICBwYWRkaW5nIDFlbSAxZW0gMWVtIDBcbiAgICAgIGZsb2F0IGxlZnRcbiAgICAudGFnXG4gICAgICB0ZXh0LWFsaWduIGxlZnRcbiAgICAgIG1hcmdpbi10b3AgMWVtXG4gICAgICBtYXgtd2lkdGggMTRlbVxuICAgICAgZmxvYXQgcmlnaHRcbiAgICAuZG93bmxvYWRcbiAgICAgIG1hcmdpbiAxZW0gMFxuICAubmF2YmFyIC5uYXZcbiAgICBjbGVhciBib3RoXG4gICAgdGV4dC1hbGlnbiByaWdodFxuICAuY29udGFpbmVyXG4gICAgY2VudGVyKDI2ZW0pXG4gIC5zZWN0aW9uIC5jb250YWluZXJcbiAgICBjZW50ZXIoMjhlbSlcblxuICBoZWFkZXJcbiAgICB0ZXh0LWFsaWduIGxlZnRcblxuK2Fib3ZlKDcwMHB4KSAvLyBtZWRpdW0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLmNvbnRhaW5lclxuICAgIGNlbnRlcigzOGVtKVxuICAuanVtYm90cm9uXG4gICAgaW1nXG4gICAgICBtYXgtd2lkdGggMjBlbVxuICAgIC50YWdcbiAgICAgIG1heC13aWR0aCAxOGVtXG4gICAgLmRvd25sb2FkXG4gICAgICBtYXgtd2lkdGggMThlbVxuICAgICAgd2lkdGggMTUuOGVtXG4gICAgICBmbG9hdCByaWdodFxuICAgICAgY2xlYXIgcmlnaHRcbiAgICAgIG1hcmdpbiAxZW0gMFxuICAuc2VjdGlvbiAuY29udGFpbmVyXG4gICAgY2VudGVyKDQwZW0pXG4gIGhlYWRlclxuICAgIHRleHQtYWxpZ24gbGVmdFxuXG4vLyBpc3N1dSBoYWNrc1xuI2NvbnRlbnQgPiBkaXYgPiBkaXYuaXNzdWUtZW1iZWQgPiBkaXYuaXNzdXVlbWJlZC5pc3N1dS1pc3JlbmRlcmVkID4gZGl2ID4gZGl2Om50aC1jaGlsZCgyKVxuICBkaXNwbGF5IG5vbmUgIWltcG9ydGFudFxuICBoZWlnaHQgMCAhaW1wb3J0YW50XG4jY29udGVudCA+IGRpdiA+IGRpdi5pc3N1ZS1lbWJlZCA+IGRpdi5pc3N1dWVtYmVkLmlzc3V1LWlzcmVuZGVyZWQgPiBkaXYgPiBkaXY6bnRoLWNoaWxkKDEpXG4gIGhlaWdodCAxMDAlICFpbXBvcnRhbnRcbiNjb250ZW50ID4gZGl2ID4gZGl2Lmlzc3VlLWVtYmVkID4gZGl2XG4gIG1heC13aWR0aCAxMDAlICFpbXBvcnRhbnRcbiAgYmFja2dyb3VuZCAjMmEyYTJhICFpbXBvcnRhbnQgLy8gbm90IHN1cmUgd2h5IHRoaXMgaGFjayBpcyBuZWVkZWRcblxuLmlzc3VlLWVtYmVkXG4gIGJhY2tncm91bmQgVEMyXG4iLCJ1c2UoJy4uL25vZGVzL3ZlbmRvci1oZWxwZXJzLmpzJylcbkBpbXBvcnQgJ2NvbmZpZydcblxuLypcbiAqIEFsaWFzIFwibm93cmFwXCIgYXMgXCJuby13cmFwXCIuXG4gKi9cblxubm8td3JhcCA9IHVucXVvdGUoJ25vd3JhcCcpXG5cbi8qXG4gKiBIZWxwZXIgdG8gZmluZCBvdXQgaWYgYSBnaXZlbiB2YWx1ZSBpcyBhIHdpZHRoXG4gKi9cblxuaXMtd2lkdGgodmFsKVxuICBpZiBhdXRvID09IHZhbFxuICAgIHJldHVybiB0cnVlXG4gIGVsc2UgaWYgdmFsICYmICd1bml0JyA9PSB0eXBlKHZhbClcbiAgICAvLyBTdHlsdXMgZG9lcyBub3Qgc2hvcnQgY2lyY3VpdCBzbyB3ZSBuZWVkIHRvIHBlcmZvcm0gdGhpcyBhcyBhIGRpc3RpbmN0XG4gICAgLy8gb3BlcmF0aW9uIHRvIHByZXZlbnQgZXJyb3JzXG4gICAgcmV0dXJuICcnICE9IHVuaXQodmFsKVxuICByZXR1cm4gZmFsc2VcblxuLypcbiAqIFZlbmRvciBzdXBwb3J0IGZvciB0aGUgZ2l2ZW4gcHJvcCAvIGFyZ3VtZW50cywgb3B0aW9uYWxseSBzcGVjaWZ5aW5nIHRoZVxuICogb25seSBwcmVmaXhlcyB0byB1dGlsaXplLCBvciB0aG9zZSB3aGljaCBzaG91bGQgYmUgaWdub3JlZC5cbiAqL1xuXG52ZW5kb3IocHJvcCwgYXJncywgb25seSA9IG51bGwsIGlnbm9yZSA9IG51bGwsIHZlbmRvci1wcm9wZXJ0eSA9IHRydWUpXG4gIG5lZWRfbm9ybWFsaXplID0gIXZlbmRvci1wcm9wZXJ0eSBvciBwcm9wIGluICgndHJhbnNpdGlvbicgJ3RyYW5zaXRpb24tcHJvcGVydHknICdib3JkZXItaW1hZ2UnICdib3JkZXItaW1hZ2Utc2xpY2UnKVxuICBmb3IgcHJlZml4IGluIHZlbmRvci1wcmVmaXhlc1xuICAgIHVubGVzcyAob25seSBhbmQgIShwcmVmaXggaW4gb25seSkpIG9yIChpZ25vcmUgYW5kIHByZWZpeCBpbiBpZ25vcmUpXG4gICAgICBpZiBvZmZpY2lhbCA9PSBwcmVmaXhcbiAgICAgICAgaWYgbmVlZF9ub3JtYWxpemVcbiAgICAgICAgICB7cHJvcH06IG5vcm1hbGl6ZShwcm9wLCgnJXMnICUgYXJncykpXG4gICAgICAgIGVsc2VcbiAgICAgICAgICB7cHJvcH06IGFyZ3NcbiAgICAgIGVsc2VcbiAgICAgICAgbmV3cHJvcCA9IHByb3BcbiAgICAgICAgbmV3cHJvcCA9ICctJyArIHByZWZpeCArICctJyArIHByb3AgaWYgdmVuZG9yLXByb3BlcnR5XG5cbiAgICAgICAgaWYgbmVlZF9ub3JtYWxpemVcbiAgICAgICAgICB7bmV3cHJvcH06IG5vcm1hbGl6ZShwcm9wLCgnJXMnICUgYXJncykscHJlZml4KVxuICAgICAgICBlbHNlXG4gICAgICAgICAge25ld3Byb3B9OiBhcmdzXG4vKlxuICogVmVuZG9yaXplIHRoZSBnaXZlbiB2YWx1ZS5cbiAqL1xuXG52ZW5kb3ItdmFsdWUoYXJnLCBvbmx5ID0gbnVsbCwgaWdub3JlID0gbnVsbClcbiAgcHJvcCA9IGN1cnJlbnQtcHJvcGVydHlbMF1cbiAgZm9yIHByZWZpeCBpbiB2ZW5kb3ItcHJlZml4ZXNcbiAgICB1bmxlc3MgKG9ubHkgYW5kICEocHJlZml4IGluIG9ubHkpKSBvciAoaWdub3JlIGFuZCBwcmVmaXggaW4gaWdub3JlKSBvciBvZmZpY2lhbCA9PSBwcmVmaXhcbiAgICAgIGFkZC1wcm9wZXJ0eShwcm9wLCAnLSVzLSVzJyAlIChwcmVmaXggYXJnKSlcbiAgYXJnXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtc2hhZG93XCIgc3VwcG9ydC5cbiAqL1xuXG5ib3gtc2hhZG93KClcbiAgdmVuZG9yKCdib3gtc2hhZG93JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJ1c2VyLXNlbGVjdFwiIHN1cHBvcnQuXG4gKi9cblxudXNlci1zZWxlY3QoKVxuICB2ZW5kb3IoJ3VzZXItc2VsZWN0JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiY29sdW1uLWNvdW50XCIgc3VwcG9ydC5cbiAqL1xuXG5jb2x1bW4tY291bnQoKVxuICB2ZW5kb3IoJ2NvbHVtbi1jb3VudCcsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi1nYXBcIiBzdXBwb3J0LlxuICovXG5cbmNvbHVtbi1nYXAoKVxuICB2ZW5kb3IoJ2NvbHVtbi1nYXAnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tcnVsZVwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLXJ1bGUoKVxuICB2ZW5kb3IoJ2NvbHVtbi1ydWxlJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiY29sdW1uLXJ1bGUtY29sb3JcIiBzdXBwb3J0LlxuICovXG5cbmNvbHVtbi1ydWxlLWNvbG9yKClcbiAgdmVuZG9yKCdjb2x1bW4tcnVsZS1jb2xvcicsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi1ydWxlLXdpZHRoXCIgc3VwcG9ydC5cbiAqL1xuXG5jb2x1bW4tcnVsZS13aWR0aCgpXG4gIHZlbmRvcignY29sdW1uLXJ1bGUtd2lkdGgnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJjb2x1bW4tcnVsZS1zdHlsZVwiIHN1cHBvcnQuXG4gKi9cblxuY29sdW1uLXJ1bGUtc3R5bGUoKVxuICB2ZW5kb3IoJ2NvbHVtbi1ydWxlLXN0eWxlJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiY29sdW1uLXdpZHRoXCIgc3VwcG9ydC5cbiAqL1xuXG5jb2x1bW4td2lkdGgoKVxuICB2ZW5kb3IoJ2NvbHVtbi13aWR0aCcsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi1zcGFuXCIgc3VwcG9ydC5cbiAqL1xuXG5jb2x1bW4tc3BhbigpXG4gIHZlbmRvcignY29sdW1uLXNwYW4nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImNvbHVtbi1maWxsXCIgc3VwcG9ydC5cbiAqL1xuXG5jb2x1bW4tZmlsbCgpXG4gIHZlbmRvcignY29sdW1uLWZpbGwnLCBhcmd1bWVudHMsIG9ubHk6IG1veilcblxuLypcbiAqIExlZ2FjeSBzeW50YXggc3VwcG9ydCBmb3IgYmFja2dyb3VuZC1jbGlwIGFuZCBiYWNrZ3JvdW5kLW9yaWdpblxuICovXG5cbmxlZ2FjeS1iZy12YWx1ZXMocHJvcGVydHksIGFyZ3MpXG4gIGxlZ2FjeV9hcmdzID0gKClcbiAgaW1wb3J0YW5jZSA9IHVucXVvdGUoJycpXG4gIGZvciBzdWJhcmdzIGluIGFyZ3NcbiAgICBmb3IgYXJnIGluIHN1YmFyZ3NcbiAgICAgIGlmIGFyZyBpbiAoYm9yZGVyLWJveCBwYWRkaW5nLWJveCBjb250ZW50LWJveClcbiAgICAgICAgYXJnID0gdW5xdW90ZSgnYm9yZGVyJykgIGlmIGFyZyA9PSBib3JkZXItYm94XG4gICAgICAgIGFyZyA9IHVucXVvdGUoJ3BhZGRpbmcnKSBpZiBhcmcgPT0gcGFkZGluZy1ib3hcbiAgICAgICAgYXJnID0gdW5xdW90ZSgnY29udGVudCcpIGlmIGFyZyA9PSBjb250ZW50LWJveFxuICAgICAgaWYgYXJnICE9ICchaW1wb3J0YW50J1xuICAgICAgICBwdXNoKGxlZ2FjeV9hcmdzLGFyZylcbiAgICAgIGVsc2VcbiAgICAgICAgaW1wb3J0YW5jZSA9ICFpbXBvcnRhbnRcbiAgdmVuZG9yKHByb3BlcnR5LCB1bnF1b3RlKGpvaW4oJywgJyxsZWdhY3lfYXJncykpIGltcG9ydGFuY2UsIG9ubHk6IG1veiB3ZWJraXQpXG5cbi8qXG4gKiBWZW5kb3IgXCJiYWNrZ3JvdW5kLWNsaXBcIiBzdXBwb3J0LlxuICovXG5cbmJhY2tncm91bmQtY2xpcCgpXG4gIGlmIGFyZ3VtZW50c1swXSA9PSB0ZXh0XG4gICAgdmVuZG9yKCdiYWNrZ3JvdW5kLWNsaXAnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdClcbiAgZWxzZVxuICAgIGxlZ2FjeS1iZy12YWx1ZXMoJ2JhY2tncm91bmQtY2xpcCcsIGFyZ3VtZW50cylcbiAgICBiYWNrZ3JvdW5kLWNsaXA6IGFyZ3VtZW50c1xuXG4vKlxuICogVmVuZG9yIFwiYmFja2dyb3VuZC1vcmlnaW5cIiBzdXBwb3J0LlxuICovXG5cbmJhY2tncm91bmQtb3JpZ2luKClcbiAgbGVnYWN5LWJnLXZhbHVlcygnYmFja2dyb3VuZC1vcmlnaW4nLCBhcmd1bWVudHMpXG4gIGJhY2tncm91bmQtb3JpZ2luOiBhcmd1bWVudHNcblxuLypcbiAqIFZlbmRvciBcImJhY2tncm91bmQtc2l6ZVwiIHN1cHBvcnQuXG4gKi9cblxuYmFja2dyb3VuZC1zaXplKClcbiAgdmVuZG9yKCdiYWNrZ3JvdW5kLXNpemUnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0cmFuc2Zvcm1cIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zZm9ybSgpXG4gIHZlbmRvcigndHJhbnNmb3JtJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNmb3JtLW9yaWdpblwiIHN1cHBvcnQuXG4gKi9cbnRyYW5zZm9ybS1vcmlnaW4oKVxuICAgIHZlbmRvcigndHJhbnNmb3JtLW9yaWdpbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zZm9ybS1zdHlsZVwiIHN1cHBvcnQuXG4gKi9cblxudHJhbnNmb3JtLXN0eWxlKClcbiAgdmVuZG9yKCd0cmFuc2Zvcm0tc3R5bGUnLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJib3JkZXItaW1hZ2VcIiBzdXBwb3J0LlxuICovXG5cbmJvcmRlci1pbWFnZSgpXG4gIHZlbmRvcignYm9yZGVyLWltYWdlJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG8gb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0cmFuc2l0aW9uXCIgc3VwcG9ydC5cbiAqL1xuXG50cmFuc2l0aW9uKClcbiAgdmVuZG9yKCd0cmFuc2l0aW9uJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNpdGlvbi1wcm9wZXJ0eVwiIHN1cHBvcnQuXG4gKi9cblxudHJhbnNpdGlvbi1wcm9wZXJ0eSgpXG4gIHZlbmRvcigndHJhbnNpdGlvbi1wcm9wZXJ0eScsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcInRyYW5zaXRpb24tZHVyYXRpb25cIiBzdXBwb3J0LlxuICovXG5cbnRyYW5zaXRpb24tZHVyYXRpb24oKVxuICB2ZW5kb3IoJ3RyYW5zaXRpb24tZHVyYXRpb24nLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvblwiIHN1cHBvcnQuXG4gKi9cblxudHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24oKVxuICB2ZW5kb3IoJ3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwidHJhbnNpdGlvbi1kZWxheVwiIHN1cHBvcnQuXG4gKi9cblxudHJhbnNpdGlvbi1kZWxheSgpXG4gIHZlbmRvcigndHJhbnNpdGlvbi1kZWxheScsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImJhY2tmYWNlLXZpc2liaWxpdHlcIiBzdXBwb3J0LlxuICovXG5cbmJhY2tmYWNlLXZpc2liaWxpdHkoKVxuICB2ZW5kb3IoJ2JhY2tmYWNlLXZpc2liaWxpdHknLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJwZXJzcGVjdGl2ZVwiIHN1cHBvcnQuXG4gKi9cblxucGVyc3BlY3RpdmUoKVxuICBpZiBtaXhpblxuICAgIHZlbmRvcigncGVyc3BlY3RpdmUnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG4gIGVsc2VcbiAgICAncGVyc3BlY3RpdmUoJXMpJyAlIGFyZ3VtZW50c1xuXG4vKlxuICogVmVuZG9yIFwicGVyc3BlY3RpdmUtb3JpZ2luXCIgc3VwcG9ydC5cbiAqL1xuXG5wZXJzcGVjdGl2ZS1vcmlnaW4oKVxuICB2ZW5kb3IoJ3BlcnNwZWN0aXZlLW9yaWdpbicsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBtcyBvZmZpY2lhbClcblxuLypcbiAqIE9wYWNpdHkgd2l0aCBjb25kaXRpb25hbCBJRSBzdXBwb3J0LlxuICovXG5cbm9wYWNpdHkobiwgYXJncy4uLilcbiAgb3BhY2l0eTogbiBhcmdzXG4gIGlmIHN1cHBvcnQtZm9yLWllXG4gICAgaWYgbiA9PSBpbmhlcml0IG9yIG4gPT0gaW5pdGlhbFxuICAgICAgLW1zLWZpbHRlcjogbiBhcmdzXG4gICAgICBmaWx0ZXI6IG4gYXJnc1xuICAgIGVsc2VcbiAgICAgIHZhbCA9IHJvdW5kKG4gKiAxMDApXG4gICAgICBpZiB2YWwgPT0gMTAwXG4gICAgICAgIC1tcy1maWx0ZXI6IG5vbmUgYXJnc1xuICAgICAgICBmaWx0ZXI6IG5vbmUgYXJnc1xuICAgICAgZWxzZVxuICAgICAgICAtbXMtZmlsdGVyOiAnXCJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGEoT3BhY2l0eT0lcylcIicgJSB2YWwgYXJnc1xuICAgICAgICBmaWx0ZXI6ICdhbHBoYShvcGFjaXR5PSVzKScgJSB2YWwgYXJnc1xuXG4vKlxuICogVmVuZG9yIFwidGV4dC1zaXplLWFkanVzdFwiXG4gKi9cblxudGV4dC1zaXplLWFkanVzdCgpXG4gIHZlbmRvcigndGV4dC1zaXplLWFkanVzdCcsIGFyZ3VtZW50cylcblxuLypcbiAqIEFsaWFzIHRoZSBcIndoaXRlLXNwYWNlXCIgcHJvcGVydHkuXG4gKi9cblxud2hpdGVzcGFjZSgpXG4gIHdoaXRlLXNwYWNlOiBhcmd1bWVudHNcblxuLypcbiAqIFZlbmRvciBcImJveC1zaXppbmdcIiBzdXBwb3J0LlxuICovXG5cbmJveC1zaXppbmcoKVxuICB2ZW5kb3IoJ2JveC1zaXppbmcnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtb3JpZW50XCIgc3VwcG9ydC5cbiAqL1xuXG5ib3gtb3JpZW50KClcbiAgdmVuZG9yKCdib3gtb3JpZW50JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiYm94LWZsZXgtZ3JvdXBcIiBzdXBwb3J0LlxuICovXG5cbmJveC1mbGV4LWdyb3VwKClcbiAgdmVuZG9yKCdib3gtZmxleC1ncm91cCcsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImJveC1vcmRpbmFsLWdyb3VwXCIgc3VwcG9ydC5cbiAqL1xuXG5ib3gtb3JkaW5hbC1ncm91cCgpXG4gIHZlbmRvcignYm94LW9yZGluYWwtZ3JvdXAnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cblxuLypcbiAqIFZlbmRvciBcImJveC1hbGlnblwiIHN1cHBvcnQuXG4gKi9cblxuYm94LWFsaWduKClcbiAgdmVuZG9yKCdib3gtYWxpZ24nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogbXMgb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJib3gtcGFja1wiIHN1cHBvcnQuXG4gKi9cblxuYm94LXBhY2soKVxuICB2ZW5kb3IoJ2JveC1wYWNrJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbW96IG1zIG9mZmljaWFsKVxuXG4vKlxuICogVmVuZG9yIFwiYm94LWRpcmVjdGlvblwiIHN1cHBvcnQuXG4gKi9cblxuYm94LWRpcmVjdGlvbigpXG4gIHZlbmRvcignYm94LWRpcmVjdGlvbicsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBtcyBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImFuaW1hdGlvblwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uKClcbiAgdmVuZG9yKCdhbmltYXRpb24nLCBhcmd1bWVudHMpXG5cblxuLypcbiAqIFZlbmRvciBcImFuaW1hdGlvbi1uYW1lXCIgc3VwcG9ydC5cbiAqL1xuXG5hbmltYXRpb24tbmFtZSgpXG4gIHZlbmRvcignYW5pbWF0aW9uLW5hbWUnLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tZHVyYXRpb25cIiBzdXBwb3J0LlxuICovXG5cbmFuaW1hdGlvbi1kdXJhdGlvbigpXG4gIHZlbmRvcignYW5pbWF0aW9uLWR1cmF0aW9uJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLWRlbGF5XCIgc3VwcG9ydC5cbiAqL1xuXG5hbmltYXRpb24tZGVsYXkoKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1kZWxheScsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImFuaW1hdGlvbi1kaXJlY3Rpb25cIiBzdXBwb3J0LlxuICovXG5cbmFuaW1hdGlvbi1kaXJlY3Rpb24oKVxuICB2ZW5kb3IoJ2FuaW1hdGlvbi1kaXJlY3Rpb24nLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24taXRlcmF0aW9uLWNvdW50XCIgc3VwcG9ydC5cbiAqL1xuXG5hbmltYXRpb24taXRlcmF0aW9uLWNvdW50KClcbiAgdmVuZG9yKCdhbmltYXRpb24taXRlcmF0aW9uLWNvdW50JywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvblwiIHN1cHBvcnQuXG4gKi9cblxuYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbigpXG4gIHZlbmRvcignYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbicsIGFyZ3VtZW50cylcblxuLypcbiAqIFZlbmRvciBcImFuaW1hdGlvbi1wbGF5LXN0YXRlXCIgc3VwcG9ydC5cbiAqL1xuXG5hbmltYXRpb24tcGxheS1zdGF0ZSgpXG4gIHZlbmRvcignYW5pbWF0aW9uLXBsYXktc3RhdGUnLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBWZW5kb3IgXCJhbmltYXRpb24tZmlsbC1tb2RlXCIgc3VwcG9ydC5cbiAqL1xuXG5hbmltYXRpb24tZmlsbC1tb2RlKClcbiAgdmVuZG9yKCdhbmltYXRpb24tZmlsbC1tb2RlJywgYXJndW1lbnRzKVxuXG4vKlxuICogVmVuZG9yIFwiaHlwaGVuc1wiIHN1cHBvcnQuXG4gKi9cblxuaHlwaGVucygpXG4gIHZlbmRvcignaHlwaGVucycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG1veiBtcyBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcImFwcGVhcmFuY2VcIiBzdXBwb3J0LlxuICovXG5cbmFwcGVhcmFuY2UoKVxuICB2ZW5kb3IoJ2FwcGVhcmFuY2UnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtb3ogb2ZmaWNpYWwpXG5cbi8qXG4gKiBWZW5kb3IgXCJ0YWItc2l6ZVwiIHN1cHBvcnQuXG4gKi9cblxudGFiLXNpemUoKVxuICB2ZW5kb3IoJ3RhYi1zaXplJywgYXJndW1lbnRzLCBvbmx5OiBtb3ogbyBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcIm92ZXJmbG93LXNjcm9sbGluZ1wiIHN1cHBvcnQuXG4gKi9cblxub3ZlcmZsb3ctc2Nyb2xsaW5nKClcbiAgdmVuZG9yKCdvdmVyZmxvdy1zY3JvbGxpbmcnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcblxuLypcbiAqIFZlbmRvciBcInRleHQtb3ZlcmZsb3dcIiBzdXBwb3J0LCAsIC1vLSBmb3Igb3BlcmEgOS4qIC0gMTAuKlxuICovXG5cbnRleHQtb3ZlcmZsb3coKVxuICB2ZW5kb3IoJ3RleHQtb3ZlcmZsb3cnLCBhcmd1bWVudHMsIG9ubHk6IG9mZmljaWFsIG8pXG5cbi8qXG4gKiBWZW5kb3IgXCJ0ZXh0LXNpemUtYWRqdXN0XCIgc3VwcG9ydC5cbiAqL1xudGV4dC1zaXplLWFkanVzdCgpXG4gIHZlbmRvcigndGV4dC1zaXplLWFkanVzdCcsIGFyZ3VtZW50cywgb25seTogb2ZmaWNpYWwgd2Via2l0IG1zKVxuXG4vKlxuICogVmVuZG9yIFwiZm9udC1zbW9vdGhpbmdcIiBzdXBwb3J0LCB3ZWJraXQgb25seS5cbiAqL1xuZm9udC1zbW9vdGhpbmcoKVxuICB2ZW5kb3IoJ2ZvbnQtc21vb3RoaW5nJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQpXG5cbi8qXG4gKiBIZWxwZXIgZm9yIGJvcmRlci1yYWRpdXMoKS5cbiAqL1xuXG4tYXBwbHktYm9yZGVyLXJhZGl1cyhwb3MsIGltcG9ydGFuY2UpXG4gIGlmIGxlbmd0aChwb3MpID09IDNcbiAgICAvLyBib3JkZXItcmFkaXVzOiA8dG9wIHwgYnV0dG9tPiA8bGVmdCB8IHJpZ2h0PiA8bj5cbiAgICB5ID0gcG9zWzBdXG4gICAgeCA9IHBvc1sxXVxuICAgIC8vIFdlIGRvbid0IHVzZSBtb3ogZm9yIHNpbXBsZSBib2Rlci1yYWRpdXMgYW55bW9yZVxuICAgIC8vIHZlbmRvcignYm9yZGVyLXJhZGl1cy0lcyVzJyAlIHBvcywgcG9zWzJdLCBvbmx5OiBtb3opXG4gICAgdmVuZG9yKCdib3JkZXItJXMtJXMtcmFkaXVzJyAlIHBvcywgcG9zWzJdIGltcG9ydGFuY2UsIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcbiAgZWxzZSBpZiBwb3NbMF0gaW4gKHRvcCBib3R0b20pXG4gICAgLy8gYm9yZGVyLXJhZGl1czogPHRvcCB8IGJvdHRvbT4gPG4+XG4gICAgLWFwcGx5LWJvcmRlci1yYWRpdXMocG9zWzBdIGxlZnQgcG9zWzFdLCBpbXBvcnRhbmNlKVxuICAgIC1hcHBseS1ib3JkZXItcmFkaXVzKHBvc1swXSByaWdodCBwb3NbMV0sIGltcG9ydGFuY2UpXG4gIGVsc2UgaWYgcG9zWzBdIGluIChsZWZ0IHJpZ2h0KVxuICAgIC8vIGJvcmRlci1yYWRpdXM6IDxsZWZ0IHwgcmlnaHQ+IDxuPlxuICAgIHVuc2hpZnQocG9zLCB0b3ApO1xuICAgIC1hcHBseS1ib3JkZXItcmFkaXVzKHBvcywgaW1wb3J0YW5jZSlcbiAgICBwb3NbMF0gPSBib3R0b21cbiAgICAtYXBwbHktYm9yZGVyLXJhZGl1cyhwb3MsIGltcG9ydGFuY2UpXG5cbi8qXG4gKiBib3JkZXItcmFkaXVzIHN1cHBvcnRpbmcgdmVuZG9yIHByZWZpeGVzIGFuZFxuICogYXVnbWVudGVkIGJlaGF2aW9yLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgIGJvcmRlci1yYWRpdXM6IDJweCA1cHhcbiAqICAgIGJvcmRlci1yYWRpdXM6IHRvcCA1cHggYm90dG9tIDEwcHhcbiAqICAgIGJvcmRlci1yYWRpdXM6IGxlZnQgNXB4XG4gKiAgICBib3JkZXItcmFkaXVzOiB0b3AgbGVmdCA1cHhcbiAqICAgIGJvcmRlci1yYWRpdXM6IHRvcCBsZWZ0IDEwcHggYm90dG9tIHJpZ2h0IDVweFxuICogICAgYm9yZGVyLXJhZGl1czogdG9wIGxlZnQgMTBweCwgYm90dG9tIHJpZ2h0IDVweFxuICpcbiAqL1xuXG5ib3JkZXItcmFkaXVzKClcbiAgcG9zID0gKClcbiAgYXVnbWVudGVkID0gZmFsc2VcbiAgaW1wb3J0YW5jZSA9IGFyZ3VtZW50c1tsZW5ndGgoYXJndW1lbnRzKSAtIDFdID09ICFpbXBvcnRhbnQgPyAhaW1wb3J0YW50IDogdW5xdW90ZSgnJylcblxuICBmb3IgYXJncyBpbiBhcmd1bWVudHNcbiAgICBmb3IgYXJnIGluIGFyZ3NcbiAgICAgIGlmIGFyZyBpcyBhICdpZGVudCdcbiAgICAgICAgYXBwZW5kKHBvcywgYXJnKVxuICAgICAgICBhdWdtZW50ZWQgPSB0cnVlXG4gICAgICBlbHNlXG4gICAgICAgIGFwcGVuZChwb3MsIGFyZylcbiAgICAgICAgaWYgYXVnbWVudGVkXG4gICAgICAgICAgLWFwcGx5LWJvcmRlci1yYWRpdXMocG9zLCBpbXBvcnRhbmNlKVxuICAgICAgICAgIHBvcyA9ICgpXG4gIHZlbmRvcignYm9yZGVyLXJhZGl1cycsIHBvcywgb25seTogd2Via2l0IG9mZmljaWFsKSB1bmxlc3MgYXVnbWVudGVkXG5cbi8qKlxuICogVmVuZG9yIGlucHV0LXBsYWNlaG9sZGVyL3BsYWNlaG9sZGVyIHN1cHBvcnQuXG4gKlxuICogRXhhbXBsZXM6XG4gKiAgICAvLyBEZWZhdWx0IHN5bnRheFxuICogICAgYm9keVxuICogICAgICBwbGFjZWhvbGRlcihjb2xvciAjMzMzLCBmb250LXdlaWdodCBub3JtYWwpXG4gKlxuICogICAgLy8gVGhlIGNvbW1hIGlzIGltcG9ydGFudFxuICogICAgLnBsYWNlaG9sZGVyLXJlZFxuICogICAgICBwbGFjZWhvbGRlcihjb2xvciByZWQsKVxuICpcbiAqICAgIC8vIFdlIGNhbiBwYXNzIGEgZnVuY3Rpb25cbiAqICAgIGdyZWVuLXBsYWNlaG9sZGVyKClcbiAqICAgICAgY29sb3IgZ3JlZW5cbiAqICAgIC5wbGFjZWhvbGRlci1ncmVlblxuICogICAgICBwbGFjZWhvbGRlcihncmVlbi1wbGFjZWhvbGRlcilcbiAqXG4gKiAgICAvLyBXZSBjYW4gcGFzcyBhIGhhc2hcbiAqICAgIHRleHRhcmVhXG4gKiAgICAgIHBsYWNlaG9sZGVyKChmb250LXN0eWxlIGl0YWxpYykgKGZvbnQtd2VpZ2h0IGJvbGQpIChwYWRkaW5nICc0cHggMTBweCcpKVxuICovXG5wbGFjZWhvbGRlcigpXG4gIGZvciB2IGluICc6LXdlYmtpdC1pbnB1dCcgJy1tb3onICc6LW1veicgJy1tcy1pbnB1dCdcbiAgICAmOnt2fS1wbGFjZWhvbGRlclxuICAgICAgZm9yIHBhaXIgaW4gYXJndW1lbnRzXG4gICAgICAgIGlmIHR5cGVvZihwYWlyKSA9PSAnZnVuY3Rpb24nXG4gICAgICAgICAgcGFpcigpXG4gICAgICAgIGVsc2UgaWYgcGFpciBpcyBub3QgbnVsbCAmJiBwYWlyWzBdIGlzIG5vdCBudWxsXG4gICAgICAgICAge3BhaXJbMF19OiB0eXBlKHBhaXJbMV0pID09ICdzdHJpbmcnID8gcyhwYWlyWzFdKSA6IHBhaXJbMV1cbmlucHV0LXBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXJcblxuLypcbiAqIFZlbmRvciBiYWNrZ3JvdW5kIHN1cHBvcnQgKGdyYWRpZW50cykuXG4gKi9cblxuYmFja2dyb3VuZCgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdiYWNrZ3JvdW5kJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgYmFja2dyb3VuZCBhcmd1bWVudHNcblxuYmFja2dyb3VuZC1pbWFnZSgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdiYWNrZ3JvdW5kLWltYWdlJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgYmFja2dyb3VuZC1pbWFnZSBhcmd1bWVudHNcblxuY3Vyc29yKClcbiAgaWYgbWF0Y2goJy1ncmFkaWVudFxcKCcsICcnK2FyZ3VtZW50cylcbiAgICB2ZW5kb3IoJ2N1cnNvcicsIGFyZ3VtZW50cywgdmVuZG9yLXByb3BlcnR5OiBmYWxzZSlcbiAgZWxzZVxuICAgIGN1cnNvciBhcmd1bWVudHNcblxubGlzdC1zdHlsZSgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdsaXN0LXN0eWxlJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgbGlzdC1zdHlsZSBhcmd1bWVudHNcblxubGlzdC1zdHlsZS1pbWFnZSgpXG4gIGlmIG1hdGNoKCctZ3JhZGllbnRcXCgnLCAnJythcmd1bWVudHMpXG4gICAgdmVuZG9yKCdsaXN0LXN0eWxlLWltYWdlJywgYXJndW1lbnRzLCB2ZW5kb3ItcHJvcGVydHk6IGZhbHNlKVxuICBlbHNlXG4gICAgbGlzdC1zdHlsZS1pbWFnZSBhcmd1bWVudHNcbiIsIi8qKlxuICogU3R5bGUgYW4gZWxlbWVudCBhcyBhIGNvbHVtbiB3aXRoIGEgZ3V0dGVyLlxuICogQHBhcmFtIHtudW1iZXJ9IFtyYXRpb3M9MV0gLSBBIHdpZHRoIHJlbGF0aXZlIHRvIGl0cyBjb250YWluZXIgYXMgYSBmcmFjdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0PTBdIC0gQSBvZmZzZXQgc3BlY2lmaWVkIGFzIGEgZnJhY3Rpb24gKHNlZSByYXRpb3MpLlxuICogQHBhcmFtIHtudW1iZXJ9IFtjeWNsZT0wXSAtIEVhc2lseSBjcmVhdGUgYW4gbnRoIGNvbHVtbiBncmlkIHdoZXJlIGN5Y2xlIGVxdWFscyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMuXG4gKiBAcGFyYW0ge251bWJlcn0gW3VuY3ljbGU9MF0gLSBVbmRvIGEgcHJldmlvdXMgY3ljbGUgdmFsdWUgdG8gYWxsb3cgZm9yIGEgbmV3IG9uZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZ3V0dGVyPWplZXQuZ3V0dGVyXSAtIFNwZWNpZnkgdGhlIGd1dHRlciB3aWR0aCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGNvbnRhaW5lcnMgd2lkdGguXG4gKi9cbmNvbHVtbihyYXRpb3MgPSAxLCBvZmZzZXQgPSAwLCBjeWNsZSA9IDAsIHVuY3ljbGUgPSAwLCBndXR0ZXIgPSBqZWV0Lmd1dHRlcilcbiAgc2lkZSA9IGplZXQtZ2V0LWxheW91dC1kaXJlY3Rpb24oKVxuICBvcHBvc2l0ZS1zaWRlID0gb3Bwb3NpdGUtcG9zaXRpb24oc2lkZSlcbiAgY29sdW1uLXdpZHRocyA9IGplZXQtZ2V0LWNvbHVtbihyYXRpb3MsIGd1dHRlcilcbiAgbWFyZ2luLWxhc3QgPSAwXG4gIG1hcmdpbi1sID0gbWFyZ2luLWxhc3RcbiAgbWFyZ2luLXIgPSBjb2x1bW4td2lkdGhzWzFdXG5cbiAgdW5sZXNzIG9mZnNldCA9PSAwXG4gICAgaWYgb2Zmc2V0IDwgMFxuICAgICAgb2Zmc2V0ICo9IC0xXG4gICAgICBvZmZzZXQgPSBqZWV0LWdldC1jb2x1bW4ob2Zmc2V0LCBjb2x1bW4td2lkdGhzWzFdKVswXVxuICAgICAgbWFyZ2luLXIgPSBtYXJnaW4tbGFzdCA9IG9mZnNldCArIGNvbHVtbi13aWR0aHNbMV0gKiAyXG4gICAgZWxzZVxuICAgICAgb2Zmc2V0ID0gamVldC1nZXQtY29sdW1uKG9mZnNldCwgY29sdW1uLXdpZHRoc1sxXSlbMF1cbiAgICAgIG1hcmdpbi1sID0gb2Zmc2V0ICsgY29sdW1uLXdpZHRoc1sxXVxuXG4gIGNmKClcbiAgZmxvYXQ6IHNpZGVcbiAgY2xlYXI6IG5vbmVcbiAgdGV4dC1hbGlnbjogaW5oZXJpdFxuICB3aWR0aDogKGNvbHVtbi13aWR0aHNbMF0pJVxuICBtYXJnaW4te3NpZGV9OiAobWFyZ2luLWwpJVxuICBtYXJnaW4te29wcG9zaXRlLXNpZGV9OiAobWFyZ2luLXIpJVxuXG4gIGlmIHVuY3ljbGUgIT0gMFxuICAgICY6bnRoLWNoaWxkKHt1bmN5Y2xlfW4pXG4gICAgICBtYXJnaW4te29wcG9zaXRlLXNpZGV9OiAobWFyZ2luLXIpJVxuICAgICAgZmxvYXQ6IHNpZGVcbiAgICAmOm50aC1jaGlsZCh7dW5jeWNsZX1uKzEpXG4gICAgICBjbGVhcjogbm9uZVxuXG4gIGlmIGN5Y2xlICE9IDBcbiAgICAmOm50aC1jaGlsZCh7Y3ljbGV9bilcbiAgICAgIG1hcmdpbi17b3Bwb3NpdGUtc2lkZX06IChtYXJnaW4tbGFzdCklXG4gICAgICBmbG9hdDogb3Bwb3NpdGUtc2lkZVxuICAgICY6bnRoLWNoaWxkKHtjeWNsZX1uKzEpXG4gICAgICBjbGVhcjogYm90aFxuICAgZWxzZVxuICAgICY6bGFzdC1jaGlsZFxuICAgICAgbWFyZ2luLXtvcHBvc2l0ZS1zaWRlfTogKG1hcmdpbi1sYXN0KSVcblxuLyoqXG4gKiBBbiBhbGlhcyBmb3IgdGhlIGNvbHVtbiBtaXhpbi5cbiAqL1xuY29sID0gY29sdW1uXG5cbi8qKlxuICogR2V0IHRoZSB3aWR0aCBvZiBhIGNvbHVtbiBhbmQgbm90aGluZyBlbHNlLlxuICogQHBhcmFtIHtudW1iZXJ9IFtyYXRpb3M9MV0gLSBBIHdpZHRoIHJlbGF0aXZlIHRvIGl0cyBjb250YWluZXIgYXMgYSBmcmFjdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZ3V0dGVyPWplZXQuZ3V0dGVyXSAtIFNwZWNpZnkgdGhlIGd1dHRlciB3aWR0aCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGNvbnRhaW5lcnMgd2lkdGguXG4gKi9cbmNvbHVtbi13aWR0aChyYXRpb3MgPSAxLCBndXR0ZXIgPSBqZWV0Lmd1dHRlcilcbiAgcmV0dXJuIGplZXQtZ2V0LWNvbHVtbihyYXRpb3MsIGd1dHRlcilbMF0gKyAnJSdcblxuLyoqXG4gKiBBbiBhbGlhcyBmb3IgdGhlIGNvbHVtbi13aWR0aCBmdW5jdGlvbi5cbiAqL1xuY3cgPSBjb2x1bW4td2lkdGhcblxuLyoqXG4gKiBHZXQgdGhlIGd1dHRlciBzaXplIG9mIGEgY29sdW1uIGFuZCBub3RoaW5nIGVsc2UuXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhdGlvcz0xXSAtIEEgd2lkdGggcmVsYXRpdmUgdG8gaXRzIGNvbnRhaW5lciBhcyBhIGZyYWN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtndXR0ZXI9amVldC5ndXR0ZXJdIC0gU3BlY2lmeSB0aGUgZ3V0dGVyIHdpZHRoIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgY29udGFpbmVycyB3aWR0aC5cbiAqL1xuY29sdW1uLWd1dHRlcihyYXRpb3MgPSAxLCBndXR0ZXIgPSBqZWV0Lmd1dHRlcilcbiAgcmV0dXJuIGplZXQtZ2V0LWNvbHVtbihyYXRpb3MsIGd1dHRlcilbMV0gKyAnJSdcblxuLyoqXG4gKiBBbiBhbGlhcyBmb3IgdGhlIGNvbHVtbi1ndXR0ZXIgZnVuY3Rpb24uXG4gKi9cbmNnID0gY29sdW1uLWd1dHRlclxuXG4vKipcbiAqIFN0eWxlIGFuIGVsZW1lbnQgYXMgYSBjb2x1bW4gd2l0aG91dCBhbnkgZ3V0dGVycyBmb3IgYSBzZWFtbGVzcyByb3cuXG4gKiBAcGFyYW0ge251bWJlcn0gW3JhdGlvcz0xXSAtIEEgd2lkdGggcmVsYXRpdmUgdG8gaXRzIGNvbnRhaW5lciBhcyBhIGZyYWN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXQ9MF0gLSBBIG9mZnNldCBzcGVjaWZpZWQgYXMgYSBmcmFjdGlvbiAoc2VlIHJhdGlvcykuXG4gKiBAcGFyYW0ge251bWJlcn0gW2N5Y2xlPTBdIC0gRWFzaWx5IGNyZWF0ZSBhbiBudGggY29sdW1uIGdyaWQgd2hlcmUgY3ljbGUgZXF1YWxzIHRoZSBudW1iZXIgb2YgY29sdW1ucy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbdW5jeWNsZT0wXSAtIFVuZG8gYSBwcmV2aW91cyBjeWNsZSB2YWx1ZSB0byBhbGxvdyBmb3IgYSBuZXcgb25lLlxuICovXG5zcGFuKHJhdGlvID0gMSwgb2Zmc2V0ID0gMCwgY3ljbGUgPSAwLCB1bmN5Y2xlID0gMClcbiAgc2lkZSA9IGplZXQtZ2V0LWxheW91dC1kaXJlY3Rpb24oKVxuICBvcHBvc2l0ZS1zaWRlID0gb3Bwb3NpdGUtcG9zaXRpb24oc2lkZSlcbiAgc3Bhbi13aWR0aCA9IGplZXQtZ2V0LXNwYW4ocmF0aW8pXG4gIG1hcmdpbi1yID0gMFxuICBtYXJnaW4tbCA9IG1hcmdpbi1yXG5cbiAgdW5sZXNzIG9mZnNldCA9PSAwXG4gICAgaWYgb2Zmc2V0IDwgMFxuICAgICAgb2Zmc2V0ICo9IC0xXG4gICAgICBtYXJnaW4tciA9IGplZXQtZ2V0LXNwYW4ob2Zmc2V0KVxuICAgIGVsc2VcbiAgICAgIG1hcmdpbi1sID0gamVldC1nZXQtc3BhbihvZmZzZXQpXG5cbiAgY2YoKVxuICBmbG9hdDogc2lkZVxuICBjbGVhcjogbm9uZVxuICB0ZXh0LWFsaWduOiBpbmhlcml0XG4gIHdpZHRoOiAoc3Bhbi13aWR0aCklXG4gIG1hcmdpbi17c2lkZX06IChtYXJnaW4tbCklXG4gIG1hcmdpbi17b3Bwb3NpdGUtc2lkZX06IChtYXJnaW4tciklXG5cbiAgaWYgY3ljbGUgIT0gMFxuICAgICY6bnRoLWNoaWxkKHtjeWNsZX1uKVxuICAgICAgZmxvYXQ6IG9wcG9zaXRlLXNpZGVcbiAgICAmOm50aC1jaGlsZCh7Y3ljbGV9biArIDEpXG4gICAgICBjbGVhcjogYm90aFxuXG4gIGlmIHVuY3ljbGUgIT0gMFxuICAgICY6bnRoLWNoaWxkKHt1bmN5Y2xlfW4pXG4gICAgICBmbG9hdDogc2lkZVxuICAgICY6bnRoLWNoaWxkKHt1bmN5Y2xlfW4gKyAxKVxuICAgICAgY2xlYXI6IG5vbmVcblxuLyoqXG4gKiBSZW9yZGVyIGNvbHVtbnMgd2l0aG91dCBhbHRlcmluZyB0aGUgSFRNTC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbcmF0aW9zPTBdIC0gU3BlY2lmeSBob3cgZmFyIGFsb25nIHlvdSB3YW50IHRoZSBlbGVtZW50IHRvIG1vdmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvbC1vci1zcGFuPWNvbHVtbl0gLSBTcGVjaWZ5IHdoZXRoZXIgdGhlIGVsZW1lbnQgaGFzIGEgZ3V0dGVyIG9yIG5vdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZ3V0dGVyPWplZXQuZ3V0dGVyXSAtIFNwZWNpZnkgdGhlIGd1dHRlciB3aWR0aCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIGNvbnRhaW5lcnMgd2lkdGguXG4gKi9cbnNoaWZ0KHJhdGlvcyA9IDAsIGNvbC1vci1zcGFuID0gY29sdW1uLCBndXR0ZXIgPSBqZWV0Lmd1dHRlcilcbiAgdHJhbnNsYXRlID0gJydcbiAgc2lkZSA9IGplZXQtZ2V0LWxheW91dC1kaXJlY3Rpb24oKVxuXG4gIGlmIHNpZGUgPT0gcmlnaHRcbiAgICByYXRpb3MgPSBqZWV0LXJlcGxhY2UtbnRoKHJhdGlvcywgMCwgcmF0aW9zWzBdICogLTEpXG5cbiAgaWYgY29sLW9yLXNwYW4gPT0gY29sdW1uIG9yIGNvbC1vci1zcGFuID09IGNvbCBvciBjb2wtb3Itc3BhbiA9PSBjXG4gICAgY29sdW1uLXdpZHRocyA9IGplZXQtZ2V0LWNvbHVtbihyYXRpb3MsIGd1dHRlcilcbiAgICB0cmFuc2xhdGUgPSBjb2x1bW4td2lkdGhzWzBdICsgY29sdW1uLXdpZHRoc1sxXVxuICBlbHNlXG4gICAgdHJhbnNsYXRlID0gamVldC1nZXQtc3BhbihyYXRpb3MpXG5cbiAgcG9zaXRpb246IHJlbGF0aXZlXG4gIGxlZnQ6ICh0cmFuc2xhdGUpJVxuXG4vKipcbiAqIFJlc2V0IGFuIGVsZW1lbnQgdGhhdCBoYXMgaGFkIHNoaWZ0KCkgYXBwbGllZCB0byBpdC5cbiAqL1xudW5zaGlmdCgpXG4gIHBvc2l0aW9uOiBzdGF0aWNcbiAgbGVmdDogMFxuXG4vKipcbiAqIFZpZXcgdGhlIGdyaWQgYW5kIGl0cyBsYXllcnMgZm9yIGVhc3kgZGVidWdnaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2xvcj1ibGFja10gLSBUaGUgYmFja2dyb3VuZCB0aW50IGFwcGxpZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpbXBvcnRhbnQ9ZmFsc2VdIC0gV2hldGhlciB0byBhcHBseSB0aGUgc3R5bGUgYXMgIWltcG9ydGFudC5cbiAqL1xuZWRpdChjb2xvciA9IGJsYWNrLCBpbXBvcnRhbnQgPSBmYWxzZSlcbiAgaWYgaW1wb3J0YW50XG4gICAgKlxuICAgICAgYmFja2dyb3VuZDogcmdiYShjb2xvciwgNSUpICFpbXBvcnRhbnRcbiAgZWxzZVxuICAgICpcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoY29sb3IsIDUlKVxuXG4vKipcbiAqICBBbGlhcyBmb3IgZWRpdCgpLlxuICovXG5kZWJ1ZyA9IGVkaXRcblxuLyoqXG4gKiBIb3Jpem9udGFsbHkgY2VudGVyIGFuIGVsZW1lbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gW21heC13aWR0aD1qZWV0Lm1heC13aWR0aF0gLSBUaGUgbWF4IHdpZHRoIHRoZSBlbGVtZW50IGNhbiBiZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGFkPTBdIC0gU3BlY2lmeSB0aGUgZWxlbWVudCdzIGxlZnQgYW5kIHJpZ2h0IHBhZGRpbmcuXG4gKi9cbmNlbnRlcihtYXgtd2lkdGggPSBqZWV0Lm1heC13aWR0aCwgcGFkID0gMClcbiAgY2YoKVxuICB3aWR0aDogYXV0b1xuICBtYXgtd2lkdGg6IG1heC13aWR0aFxuICBmbG9hdDogbm9uZVxuICBkaXNwbGF5OiB1bnF1b3RlKCdibG9jaycpXG4gIG1hcmdpbi1yaWdodDogYXV0b1xuICBtYXJnaW4tbGVmdDogYXV0b1xuICBwYWRkaW5nLWxlZnQ6IHBhZFxuICBwYWRkaW5nLXJpZ2h0OiBwYWRcblxuLyoqXG4gKiBVbmNlbnRlciBhbiBlbGVtZW50LlxuICovXG51bmNlbnRlcigpXG4gIG1heC13aWR0aDogbm9uZVxuICBtYXJnaW4tcmlnaHQ6IDBcbiAgbWFyZ2luLWxlZnQ6IDBcbiAgcGFkZGluZy1sZWZ0OiAwXG4gIHBhZGRpbmctcmlnaHQ6IDBcblxuLyoqXG4gKiBTdGFjayBhbiBlbGVtZW50IHNvIHRoYXQgbm90aGluZyBpcyBlaXRoZXIgc2lkZSBvZiBpdC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbcGFkPTBdIC0gU3BlY2lmeSB0aGUgZWxlbWVudCdzIGxlZnQgYW5kIHJpZ2h0IHBhZGRpbmcuXG4gKiBAcGFyYW0ge2JvbGxlYW4vc3RyaW5nfSBbYWxpZ249ZmFsc2VdIC0gU3BlY2lmeSB0aGUgdGV4dCBhbGlnbiBmb3IgdGhlIGVsZW1lbnQuXG4gKi9cbnN0YWNrKHBhZCA9IDAsIGFsaWduID0gZmFsc2UpXG4gIHNpZGUgPSBqZWV0LWdldC1sYXlvdXQtZGlyZWN0aW9uKClcbiAgb3Bwb3NpdGUtc2lkZSA9IG9wcG9zaXRlLXBvc2l0aW9uKHNpZGUpXG5cbiAgZGlzcGxheTogdW5xdW90ZSgnYmxvY2snKVxuICBjbGVhcjogYm90aFxuICBmbG9hdDogbm9uZVxuICB3aWR0aDogMTAwJVxuICBtYXJnaW4tbGVmdDogYXV0b1xuICBtYXJnaW4tcmlnaHQ6IGF1dG9cblxuICAmOmZpcnN0LWNoaWxkXG4gICAgbWFyZ2luLXtzaWRlfTogYXV0b1xuXG4gICY6bGFzdC1jaGlsZFxuICAgIG1hcmdpbi17b3Bwb3NpdGUtc2lkZX06IGF1dG9cblxuICBpZiBwYWQgIT0gMFxuICAgIHBhZGRpbmctbGVmdDogcGFkXG4gICAgcGFkZGluZy1yaWdodDogcGFkXG5cbiAgaWYgKGFsaWduIGlzIG5vdCBmYWxzZSlcbiAgICBpZiAoYWxpZ24gPT0gY2VudGVyKSBvciAoYWxpZ24gPT0gYylcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlclxuICAgIGlmIChhbGlnbiA9PSBsZWZ0KSBvciAoYWxpZ24gPT0gbClcbiAgICAgIHRleHQtYWxpZ246IGxlZnRcbiAgICBpZiAoYWxpZ24gPT0gcmlnaHQpIG9yIChhbGlnbiA9PSByKVxuICAgICAgdGV4dC1hbGlnbjogcmlnaHRcblxuLyoqXG4gKiBVbnN0YWNrIGFuIGVsZW1lbnQuXG4gKi9cbnVuc3RhY2soKVxuICBzaWRlID0gamVldC1nZXQtbGF5b3V0LWRpcmVjdGlvbigpXG4gIG9wcG9zaXRlLXNpZGUgPSBvcHBvc2l0ZS1wb3NpdGlvbihzaWRlKVxuXG4gIHRleHQtYWxpZ246IHNpZGVcbiAgZGlzcGxheTogaW5saW5lXG4gIGNsZWFyOiBub25lXG4gIHdpZHRoOiBhdXRvXG4gIG1hcmdpbi1sZWZ0OiAwXG4gIG1hcmdpbi1yaWdodDogMFxuXG4gICY6Zmlyc3QtY2hpbGRcbiAgICBtYXJnaW4te3NpZGV9OiAwXG5cbiAgJjpsYXN0LWNoaWxkXG4gICAgbWFyZ2luLXtvcHBvc2l0ZS1zaWRlfTogMFxuXG4vKipcbiAqIENlbnRlciBhbiBlbGVtZW50IG9uIGVpdGhlciBvciBib3RoIGF4ZXMuXG4gKiBAcmVxdWlyZXMgQSBwYXJlbnQgY29udGFpbmVyIHdpdGggcmVsYXRpdmUgcG9zaXRpb25pbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2RpcmVjdGlvbj1ib3RoXSAtIFNwZWNpZnkgd2hpY2ggYXhlcyB0byBjZW50ZXIgdGhlIGVsZW1lbnQgb24uXG4gKi9cbmFsaWduKGRpcmVjdGlvbiA9IGJvdGgpXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICB0cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNkXG5cbiAgaWYgKGRpcmVjdGlvbiA9PSBob3Jpem9udGFsKSBvciAoZGlyZWN0aW9uID09IGgpXG4gICAgbGVmdDogNTAlXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpXG4gIGVsc2UgaWYgKGRpcmVjdGlvbiA9PSB2ZXJ0aWNhbCkgb3IgKGRpcmVjdGlvbiA9PSB2KVxuICAgIHRvcDogNTAlXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpXG4gIGVsc2VcbiAgICB0b3A6IDUwJVxuICAgIGxlZnQ6IDUwJVxuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpXG5cbi8qKlxuICogQXBwbHkgYSBjbGVhcmZpeCB0byBhbiBlbGVtZW50LlxuICovXG5jZigpXG4gICp6b29tOiAxXG5cbiAgJjpiZWZvcmUsICY6YWZ0ZXJcbiAgICBjb250ZW50OiAnJ1xuICAgIGRpc3BsYXk6IHRhYmxlXG5cbiAgJjphZnRlclxuICAgIGNsZWFyOiBib3RoXG4iLCIvKlxuICogYm9yZGVyOiA8Y29sb3I+XG4gKiBib3JkZXI6IC4uLlxuICovXG5cbmJvcmRlcihjb2xvciwgYXJncy4uLilcbiAgaWYgY29sb3IgaXMgYSAnY29sb3InXG4gICAgYm9yZGVyOiAxcHggc29saWQgY29sb3IgYXJnc1xuICBlbHNlXG4gICAgYm9yZGVyOiBhcmd1bWVudHNcbiIsIi8qXG4gKiBWZW5kb3IgXCJkaXNwbGF5OiBmbGV4XCIgc3VwcG9ydCB3aXRoIGZhbGxiYWNrIHRvIG9ic29sZXRlIHZlcnNpb25zLlxuICovXG5cbmZsZXgtdmVyc2lvbiA/PSBib3ggZmxleFxuXG4vL1xuLy8gMS4gRGlzcGxheSB2YWx1ZXNcbi8vICAgIC0gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1mbGV4Ym94LyNmbGV4LWNvbnRhaW5lcnNcbi8vXG5kaXNwbGF5KHR5cGUsIGFyZ3MuLi4pXG4gIGlmIGZsZXggPT0gdHlwZSB8fCBpbmxpbmUtZmxleCA9PSB0eXBlXG4gICAgaWYgYm94IGluIGZsZXgtdmVyc2lvblxuICAgICAgaWYgZmxleCA9PSB0eXBlXG4gICAgICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94IGFyZ3NcbiAgICAgICAgZGlzcGxheTogdmVuZG9yLXZhbHVlKGJveCBhcmdzLCBvbmx5OiBtb3ogd2Via2l0KVxuICAgICAgZWxzZVxuICAgICAgICBkaXNwbGF5OiAtbXMtaW5saW5lLWZsZXhib3ggYXJnc1xuICAgICAgICBkaXNwbGF5OiB2ZW5kb3ItdmFsdWUoaW5saW5lLWJveCBhcmdzLCBvbmx5OiBtb3ogd2Via2l0KVxuICAgIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgICBkaXNwbGF5OiB2ZW5kb3ItdmFsdWUoYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpIC8vIG92ZXJ3cml0ZXMgb2xkIHdlYmtpdFxuICBlbHNlXG4gICAgZGlzcGxheTogYXJndW1lbnRzXG5cbi8qXG4gKiBOZXcgc3ludGF4IGZvciBicm93c2VycyBsaWtlIEdvb2dsZSBDaHJvbWUuXG4gKiBQbHVzIGEgdHJhbnNsYXRpb24gdG8gdGhlIG9sZCBzeW50YXgsIGlmIHBvc3NpYmxlLlxuICovXG5cblxuLy9cbi8vIDUuIE9yZGVyaW5nIGFuZCBPcmllbnRhdGlvblxuLy8gICAgLSBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWZsZXhib3gvI29yZGVyaW5nLWFuZC1vcmllbnRhdGlvblxuLy9cbi1mbGV4LW9ic29sZXRlLWRpcmVjdGlvbihkaXJlY3Rpb24pXG4gIGlmIGJveCBpbiBmbGV4LXZlcnNpb25cbiAgICBpZiByb3ctcmV2ZXJzZSA9PSBkaXJlY3Rpb24gfHwgY29sdW1uLXJldmVyc2UgPT0gZGlyZWN0aW9uXG4gICAgICB2ZW5kb3IoJ2JveC1kaXJlY3Rpb24nLCByZXZlcnNlLCBpZ25vcmU6IG1zIG9mZmljaWFsKVxuXG4gICAgaWYgcm93ID09IGRpcmVjdGlvbiB8fCByb3ctcmV2ZXJzZSA9PSBkaXJlY3Rpb25cbiAgICAgIHZlbmRvcignYm94LW9yaWVudCcsIGhvcml6b250YWwsIGlnbm9yZTogbXMgb2ZmaWNpYWwpXG4gICAgZWxzZSBpZiBjb2x1bW4gPT0gZGlyZWN0aW9uIHx8IGNvbHVtbi1yZXZlcnNlID09IGRpcmVjdGlvblxuICAgICAgdmVuZG9yKCdib3gtb3JpZW50JywgdmVydGljYWwsIGlnbm9yZTogbXMgb2ZmaWNpYWwpXG5cbi1mbGV4LW9ic29sZXRlLXdyYXAodmFsdWUpXG4gIGlmIGJveCBpbiBmbGV4LXZlcnNpb25cbiAgICAvLyBXQVJOOiB3cmFwLXJldmVyc2UgZG9lcyBub3QgaGF2ZSBhIGJveCBlcXVpdmFsZW50LiBUaGlzIHdpbGwgcmVuZGVyIGluIGRpZmZlcmVudCBtYW5uZXJzXG4gICAgLy8gICAgb24gYm94IHZzLiBmbGV4IHZhbHVlcy5cbiAgICBpZiAnd3JhcCcgPT0gdmFsdWUgfHwgd3JhcC1yZXZlcnNlID09IHZhbHVlXG4gICAgICB2ZW5kb3IoJ2JveC1saW5lcycsIG11bHRpcGxlLCBpZ25vcmU6IG1zIG9mZmljaWFsKVxuICAgIGVsc2UgaWYgbm93cmFwID09IHZhbHVlXG4gICAgICB2ZW5kb3IoJ2JveC1saW5lcycsIHNpbmdsZSwgaWdub3JlOiBtcyBvZmZpY2lhbClcblxuZmxleC1kaXJlY3Rpb24oZGlyZWN0aW9uKVxuICAvLyBvYnNvbGV0ZVxuICAtZmxleC1vYnNvbGV0ZS1kaXJlY3Rpb24oZGlyZWN0aW9uKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1kaXJlY3Rpb24nLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtcyBvZmZpY2lhbClcblxuZmxleC13cmFwKHZhbHVlKVxuICAvLyBvYnNvbGV0ZVxuICAtZmxleC1vYnNvbGV0ZS13cmFwKHZhbHVlKVxuXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LXdyYXAnLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBtcyBvZmZpY2lhbClcblxuZmxleC1mbG93KClcbiAgLy8gb2Jzb2xldGVcbiAgLWZsZXgtb2Jzb2xldGUtZGlyZWN0aW9uKGFyZ3VtZW50c1swXSlcbiAgLWZsZXgtb2Jzb2xldGUtZGlyZWN0aW9uKGFyZ3VtZW50c1sxXSlcbiAgLWZsZXgtb2Jzb2xldGUtd3JhcChhcmd1bWVudHNbMF0pXG4gIC1mbGV4LW9ic29sZXRlLXdyYXAoYXJndW1lbnRzWzFdKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1mbG93JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbXMgb2ZmaWNpYWwpXG5cblxub3JkZXIoKVxuICAvLyBvYnNvbGV0ZVxuICBpZiBib3ggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdib3gtb3JkaW5hbC1ncm91cCcsIGFyZ3VtZW50cywgaWdub3JlOiBtcyBvZmZpY2lhbClcblxuICAvLyBuZXdcbiAgaWYgZmxleCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2ZsZXgtb3JkZXInLCBhcmd1bWVudHMsIG9ubHk6IG1zKVxuICAgIHZlbmRvcignb3JkZXInLCBhcmd1bWVudHMsIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcblxuXG4vL1xuLy8gNy4gRmxleGliaWxpdHlcbi8vICAgIC0gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1mbGV4Ym94LyNmbGV4aWJpbGl0eVxuLy9cbmZsZXgtZ3Jvdyhncm93dGgpXG4gIC8vIG9ic29sZXRlXG4gIGlmIGJveCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2JveC1mbGV4JywgZ3Jvd3RoKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1ncm93JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbmZsZXgtYmFzaXMoKVxuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1iYXNpcycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG5mbGV4LXNocmluaygpXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LXNocmluaycsIGFyZ3VtZW50cywgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG5mbGV4KGdyb3d0aClcblxuICAvLyBvYnNvbGV0ZVxuICBpZiBib3ggaW4gZmxleC12ZXJzaW9uXG4gICAgc2hyaW5rID0gMVxuXG4gICAgaWYgbm9uZSA9PSBncm93dGggfHwgaW5pdGlhbCA9PSBncm93dGhcbiAgICAgIC8vIFdlbGwga25vd24gdmFsdWVzXG4gICAgICBzaHJpbmsgPSAwIGlmIG5vbmUgPT0gZ3Jvd3RoXG4gICAgICBncm93dGggPSAwXG4gICAgZWxzZSBpZiBpcy13aWR0aChncm93dGgpID09IHRydWVcbiAgICAgIC8vIEJhc2lzIGlzIGRlZmluZWQgYXMgdGhlIGZpcnN0IHBhcmFtZXRlclxuICAgICAgZ3Jvd3RoID0gYXJndW1lbnRzWzFdIHx8IDBcbiAgICAgIHNocmluayA9IGFyZ3VtZW50c1syXSBpZiAzIDw9IGxlbmd0aChhcmd1bWVudHMpXG4gICAgZWxzZSBpZiBhcmd1bWVudHNbMV0gJiYgaXMtd2lkdGgoYXJndW1lbnRzWzFdKSA9PSBmYWxzZVxuICAgICAgLy8gR3Jvd3RoIGlzIGZpcnN0IGFuZCBzaHJpbmsgaXMgc2Vjb25kXG4gICAgICBzaHJpbmsgPSBhcmd1bWVudHNbMV1cblxuICAgIC8vIFNpbmNlIHdlIGNhbid0IG1ha2UgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gZ3Jvd2luZyBhbmQgc2hyaW5raW5nIGluIHRoZSBib3ggbW9kZWwsIHRha2VcbiAgICAvLyB0aGUgb25lIHRoYXQgcHJvdmlkZXMgdGhlIG1vc3QgZmxleGliaWxpdHkuXG4gICAgdmVuZG9yKCdib3gtZmxleCcsIG1heChncm93dGgsIHNocmluayksIGlnbm9yZTogbXMpXG5cbiAgLy8gbmV3XG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4JywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgbXMgb2ZmaWNpYWwpXG5cblxuLy8gY29udmVydHMgdGhlIGp1c3RpZmljYXRpb24gYWxpZ25tZW50XG4tY29udmVydC1qdXN0aWZ5KGFsaWduKVxuICBpZiBmbGV4LXN0YXJ0ID09IGFsaWduXG4gICAgcmV0dXJuIHN0YXJ0XG4gIGVsc2UgaWYgZmxleC1lbmQgPT0gYWxpZ25cbiAgICByZXR1cm4gZW5kXG4gIGVsc2UgaWYgc3BhY2UtYXJvdW5kID09IGFsaWduXG4gICAgcmV0dXJuIGRpc3RyaWJ1dGVcbiAgZWxzZSBpZiBzcGFjZS1iZXR3ZWVuID09IGFsaWduXG4gICAgcmV0dXJuIGp1c3RpZnlcbiAgZWxzZVxuICAgIHJldHVybiBhbGlnblxuXG4vL1xuLy8gOC4gQWxpZ25tZW50XG4vLyAgICAtIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtZmxleGJveC8jYWxpZ25tZW50XG4vL1xuanVzdGlmeS1jb250ZW50KGFsaWduKVxuICAvLyBvYnNvbGV0ZVxuICBpZiBib3ggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdib3gtcGFjaycsIC1jb252ZXJ0LWp1c3RpZnkoYWxpZ24pLCBpZ25vcmU6IG1zIG9mZmljaWFsKVxuXG4gIC8vIG5ld1xuICBpZiBmbGV4IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignZmxleC1wYWNrJywgLWNvbnZlcnQtanVzdGlmeShhbGlnbiksIG9ubHk6IG1zKVxuICAgIHZlbmRvcignanVzdGlmeS1jb250ZW50JywgYWxpZ24sIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcblxuYWxpZ24tY29udGVudChhbGlnbilcbiAgLy8gV0FSTjogT2Jzb2xldGUgc3BlYyBkb2VzIG5vdCBhbGxvdyBmb3IgYWRqdXN0bWVudCBoZXJlXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdmbGV4LWxpbmUtcGFjaycsIC1jb252ZXJ0LWp1c3RpZnkoYWxpZ24pLCBvbmx5OiBtcylcbiAgICB2ZW5kb3IoJ2FsaWduLWNvbnRlbnQnLCBhbGlnbiwgb25seTogd2Via2l0IG9mZmljaWFsKVxuXG4vLyBjb252ZXJ0cyBhbGlnbm1lbnQgZnJvbSAnZmxleCcgdG8gbm9ybWFsIHZhbHVlXG4tY29udmVydC1hbGlnbm1lbnQoYWxpZ24pXG4gIGlmIGZsZXgtc3RhcnQgPT0gYWxpZ25cbiAgICByZXR1cm4gc3RhcnRcbiAgZWxzZSBpZiBmbGV4LWVuZCA9PSBhbGlnblxuICAgIHJldHVybiBlbmRcbiAgZWxzZVxuICAgIHJldHVybiBhbGlnblxuXG5hbGlnbi1pdGVtcyhhbGlnbilcbiAgLy8gb2Jzb2xldGVcbiAgaWYgYm94IGluIGZsZXgtdmVyc2lvblxuICAgIHZlbmRvcignYm94LWFsaWduJywgLWNvbnZlcnQtYWxpZ25tZW50KGFsaWduKSwgaWdub3JlOiBtcyBvZmZpY2lhbClcblxuICAvLyBuZXdcbiAgaWYgZmxleCBpbiBmbGV4LXZlcnNpb25cbiAgICB2ZW5kb3IoJ2ZsZXgtYWxpZ24nLCAtY29udmVydC1hbGlnbm1lbnQoYWxpZ24pLCBvbmx5OiBtcylcbiAgICB2ZW5kb3IoJ2FsaWduLWl0ZW1zJywgYXJndW1lbnRzLCBvbmx5OiB3ZWJraXQgb2ZmaWNpYWwpXG5cbmFsaWduLXNlbGYoYWxpZ24pXG4gIC8vIFdBUk46IE9ic29sZXRlIHNwZWMgZG9lcyBub3QgYWxsb3cgZm9yIG92ZXJyaWRpbmcgYWxpZ25tZW50IG9uIGluZGl2aWR1YWwgaXRlbXMuXG4gIGlmIGZsZXggaW4gZmxleC12ZXJzaW9uXG4gICAgdmVuZG9yKCdhbGlnbi1zZWxmJywgYWxpZ24sIG9ubHk6IHdlYmtpdCBvZmZpY2lhbClcbiAgICB2ZW5kb3IoJ2ZsZXgtaXRlbS1hbGlnbicsIC1jb252ZXJ0LWFsaWdubWVudChhbGlnbiksIG9ubHk6IG1zKVxuIiwiLypcbiAqIFRoZSBNYWduaWZpY2VudCBNaWNybyBDbGVhcmZpeFxuICpcbiAqIFVzZWZ1bCBmb3IgY2xlYXJpbmcgZmxvYXRzIHdpdGhvdXQgc3RydWN0dXJhbCBtYXJrdXAuXG4gKiBQcmV2ZW50cyBtYXJnaW4tY29sbGFwc2luZyBvbiBjaGlsZCBlbGVtZW50cyBpbiBtb3N0IGNhc2VzLlxuICpcbiAqIEtub3duIGlzc3VlczpcbiAqXG4gKiAxLiBGb3IgSUUgNi83IHdoZW4gYXBwbGllZCB0byBhbiBlbGVtZW50IHRoYXQgY29udGFpbnMgb25seSBsZWZ0LWZsb2F0ZWRcbiAqICAgIGNoaWxkcmVuIHRoZSBib3R0b20gbWFyZ2luIG9uIGNoaWxkIGVsZW1lbnRzIHdpbGwgYmUgY29sbGFwc2VkLlxuICpcbiAqIDIuIEZvciBGaXJlZm94IHZlcnNpb25zIHByaW9yIHRvIDMuNSB3aGVuIGFwcGxpZWQgdG8gdGhlIGZpcnN0IGNoaWxkIGVsZW1lbnRcbiAqICAgIG9mIGJvZHksIGFuZCB0aGUgZWxlbWVudCBkb2VzIG5vdCBoYXZlIG5vbi16ZXJvIHBhZGRpbmcsIGV4dHJhIHNwYWNlIHdpbGxcbiAqICAgIGFwcGVhciBiZXR3ZWVuIHRoZSBib2R5IGFuZCB0aGUgZmlyc3QgY2hpbGQuXG4gKlxuICogU2VlIGh0dHA6Ly9uaWNvbGFzZ2FsbGFnaGVyLmNvbS9taWNyby1jbGVhcmZpeC1oYWNrL1xuICogYW5kIGh0dHA6Ly9qLm1wL2Jlc3RjbGVhcmZpeFxuICpcbiAqL1xuXG5jbGVhcmZpeCgpXG4gICY6YmVmb3JlXG4gICY6YWZ0ZXJcbiAgICBjb250ZW50OiBcIlwiXG4gICAgZGlzcGxheTogdGFibGVcbiAgJjphZnRlclxuICAgIGNsZWFyOiBib3RoXG4gIHpvb206IDEgaWYgc3VwcG9ydC1mb3ItaWVcbiIsIi8qXG4gKiBPdmVyZmxvdyB1dGlsaXR5LiBNYXBzIHRvIHJlZ3VsYXIgb3ZlcmZsb3csIGFuZCBhZGRzIGFuIGVsbGlwc2lzIHZhbHVlLlxuICpcbiAqIFN5bm9wc2lzOlxuICpcbiAqICAgb3ZlcmZsb3c6IDx0eXBlPlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICBvdmVyZmxvdzogYXV0b1xuICogICAgIG92ZXJmbG93OiBoaWRkZW5cbiAqICAgICBvdmVyZmxvdzogZWxsaXBzaXNcbiAqXG4gKi9cblxub3ZlcmZsb3coKVxuICBpZiBhcmd1bWVudHNbMF0gPT0gZWxsaXBzaXNcbiAgICBlbGxpcHNpcygpXG4gIGVsc2VcbiAgICBvdmVyZmxvdzogYXJndW1lbnRzXG4iLCIvLyBoZWxwZXJcblxuLXBvcyh0eXBlLCBhcmdzKVxuICBpID0gMFxuICBwb3NpdGlvbjogdW5xdW90ZSh0eXBlKVxuICBmb3IgaiBpbiAoMS4uNClcbiAgICBpZiBsZW5ndGgoYXJncykgPiBpXG4gICAgICB7YXJnc1tpXX06IGFyZ3NbaSArIDFdIGlzIGEgJ3VuaXQnID8gYXJnc1tpICs9IDFdIDogMFxuICAgIGkgKz0gMVxuXG4vKlxuICogUG9zaXRpb24gdXRpbGl0eS5cbiAqXG4gKiBTeW5vcHNpczpcbiAqXG4gKiAgIGZpeGVkOiA8cG9zPiBbbl0gPHBvcz4gW25dXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgIGZpeGVkOiB0b3AgbGVmdFxuICogICAgIGZpeGVkOiB0b3AgNXB4IGxlZnRcbiAqICAgICBmaXhlZDogdG9wIGxlZnQgNXB4XG4gKiAgICAgZml4ZWQ6IHRvcCA1cHggbGVmdCA1cHhcbiAqXG4gKi9cblxuZml4ZWQoKVxuICAtcG9zKCdmaXhlZCcsIGFyZ3VtZW50cylcblxuLypcbiAqIFBvc2l0aW9uIHV0aWxpdHkuXG4gKlxuICogU3lub3BzaXM6XG4gKlxuICogICBhYnNvbHV0ZTogPHBvcz4gW25dIDxwb3M+IFtuXVxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICBhYnNvbHV0ZTogdG9wIGxlZnRcbiAqICAgICBhYnNvbHV0ZTogdG9wIDVweCBsZWZ0XG4gKiAgICAgYWJzb2x1dGU6IHRvcCBsZWZ0IDVweFxuICogICAgIGFic29sdXRlOiB0b3AgNXB4IGxlZnQgNXB4XG4gKlxuICovXG5cbmFic29sdXRlKClcbiAgLXBvcygnYWJzb2x1dGUnLCBhcmd1bWVudHMpXG5cbi8qXG4gKiBQb3NpdGlvbiB1dGlsaXR5LlxuICpcbiAqIFN5bm9wc2lzOlxuICpcbiAqICAgcmVsYXRpdmU6IDxwb3M+IFtuXSA8cG9zPiBbbl1cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgcmVsYXRpdmU6IHRvcCBsZWZ0XG4gKiAgICAgcmVsYXRpdmU6IHRvcCA1cHggbGVmdFxuICogICAgIHJlbGF0aXZlOiB0b3AgbGVmdCA1cHhcbiAqICAgICByZWxhdGl2ZTogdG9wIDVweCBsZWZ0IDVweFxuICpcbiAqL1xuXG5yZWxhdGl2ZSgpXG4gIC1wb3MoJ3JlbGF0aXZlJywgYXJndW1lbnRzKVxuIiwiYmFzZS1mb250LXNpemUgPz0gMTZweFxucmFzdGVyaXNlLW1lZGlhLXF1ZXJpZXMgPz0gZmFsc2VcblxucnVwdHVyZSA9IHtcbiAgcmFzdGVyaXNlLW1lZGlhLXF1ZXJpZXM6IHJhc3RlcmlzZS1tZWRpYS1xdWVyaWVzXG4gIG1vYmlsZS1jdXRvZmY6IDQwMHB4XG4gIGRlc2t0b3AtY3V0b2ZmOiAxMDUwcHhcbiAgaGQtY3V0b2ZmOiAxODAwcHhcbiAgZW5hYmxlLWVtLWJyZWFrcG9pbnRzOiBmYWxzZVxuICBiYXNlLWZvbnQtc2l6ZTogYmFzZS1mb250LXNpemVcbiAgYW50aS1vdmVybGFwOiBmYWxzZVxuICBkZW5zaXR5LXF1ZXJpZXM6ICdkcHB4JyAnd2Via2l0JyAnbW96JyAnZHBpJ1xuICByZXRpbmEtZGVuc2l0eTogMS41XG4gIHVzZS1kZXZpY2Utd2lkdGg6IGZhbHNlXG59XG5ydXB0dXJlLnNjYWxlID0gMCAocnVwdHVyZS5tb2JpbGUtY3V0b2ZmKSA2MDBweCA4MDBweCAocnVwdHVyZS5kZXNrdG9wLWN1dG9mZikgKHJ1cHR1cmUuaGQtY3V0b2ZmKVxucnVwdHVyZS5zY2FsZS1uYW1lcyA9ICd4cycgJ3MnICdtJyAnbCcgJ3hsJyAnaGQnXG5cbi1pcy1zdHJpbmcodmFsKVxuICBpZiB0eXBlb2YodmFsKSBpcyBub3QgJ3VuaXQnXG4gICAgaWYgdmFsIGlzIGEgJ3N0cmluZycgb3IgdmFsIGlzIGEgJ2lkZW50J1xuICAgICAgdHJ1ZVxuICAgIGVsc2VcbiAgICAgIGZhbHNlXG4gIGVsc2VcbiAgICBmYWxzZVxuXG4tZ2V0LXNjYWxlLW51bWJlcihzY2FsZS1uYW1lKVxuICBmb3IgbGlzdC1pdGVtLCBpIGluIHJ1cHR1cmUuc2NhbGUtbmFtZXNcbiAgICBpZiBsaXN0LWl0ZW0gaXMgc2NhbGUtbmFtZVxuICAgICAgcmV0dXJuIGkgKyAxXG4gIHJldHVybiBmYWxzZVxuXG4tY29udmVydC10byh0by11bml0LCB2YWx1ZSwgY29udGV4dCA9IHJ1cHR1cmUuYmFzZS1mb250LXNpemUpXG4gIGZyb20tdW5pdCA9IHVuaXQodmFsdWUpXG4gIHJldHVybiB2YWx1ZSBpZiB0by11bml0IGlzIGZyb20tdW5pdFxuICBpZiB0by11bml0IGluICgnZW0nICdyZW0nKVxuICAgIHJldHVybiB2YWx1ZSBpZiBmcm9tLXVuaXQgaW4gKCdlbScgJ3JlbScpXG4gICAgcmV0dXJuIHVuaXQoKHZhbHVlIC8gY29udGV4dCksIHRvLXVuaXQpXG4gIGlmIHRvLXVuaXQgaXMgJ3B4J1xuICAgIHJldHVybiB1bml0KCh2YWx1ZSAqIGNvbnRleHQpLCAncHgnKVxuXG4tb24tc2NhbGUobilcbiAgcmV0dXJuIHVuaXQobikgaXMgJydcblxuLWxhcmdlci10aGFuLXNjYWxlKG4pXG4gIHJldHVybiAobiA+IChsZW5ndGgocnVwdHVyZS5zY2FsZSkgLSAxKSkgYW5kIC1vbi1zY2FsZShuKVxuXG4taXMtemVybyhuKVxuICByZXR1cm4gbiBpcyAwXG5cbi1vdmVybGFwLXNoaWZ0KGFudGktb3ZlcmxhcCwgbilcbiAgc2hpZnQtdW5pdCA9IHVuaXQobilcbiAgYW50aS1vdmVybGFwID0gMHB4IHVubGVzcyBhbnRpLW92ZXJsYXBcbiAgYW50aS1vdmVybGFwID0gMXB4IGlmIGFudGktb3ZlcmxhcCBpcyB0cnVlXG4gIGlmIGxlbmd0aChhbnRpLW92ZXJsYXApIGlzIDFcbiAgICByZXR1cm4gLWNvbnZlcnQtdG8oc2hpZnQtdW5pdCwgYW50aS1vdmVybGFwKVxuICBmb3IgdmFsIGluIGFudGktb3ZlcmxhcFxuICAgIHJldHVybiB2YWwgaWYgdW5pdCh2YWwpIGlzIHNoaWZ0LXVuaXRcblxuLWFkanVzdC1vdmVybGFwKGFudGktb3ZlcmxhcCwgbiwgc2lkZSA9ICdtaW4nKVxuICAtc2hpZnQgPSAtb3ZlcmxhcC1zaGlmdChhbnRpLW92ZXJsYXAsIG4pXG4gIGlmIChzaWRlIGlzICdtaW4nIGFuZCAtc2hpZnQgPiAwKSBvciAoc2lkZSBpcyAnbWF4JyBhbmQgLXNoaWZ0IDwgMClcbiAgICBuID0gbiArIC1zaGlmdFxuICByZXR1cm4gblxuXG4taXMtcG9zaXRpdmUobilcbiAgcmV0dXJuIG4gPj0gMFxuXG4tZGVuc2l0eS1xdWVyaWVzKGRlbnNpdHkpXG4gIGlmIHR5cGVvZihkZW5zaXR5KSBpcyBub3QgJ3VuaXQnXG4gICAgaWYgbm90IC1pcy1zdHJpbmcoZGVuc2l0eSlcbiAgICAgIGRlbnNpdHkgPSAnJXMnICUgZGVuc2l0eVxuICBkZW5zaXR5ID0gcnVwdHVyZS5yZXRpbmEtZGVuc2l0eSBpZiBkZW5zaXR5IGlzICdyZXRpbmEnXG4gIHF1ZXJpZXMgPSAoKVxuICBmb3IgcXVlcnkgaW4gcnVwdHVyZS5kZW5zaXR5LXF1ZXJpZXNcbiAgICBpZiBxdWVyeSBpcyAnd2Via2l0J1xuICAgICAgcHVzaChxdWVyaWVzLCAnKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogJXMpJyAlIChkZW5zaXR5KSlcbiAgICBlbHNlIGlmIHF1ZXJ5IGlzICdtb3onXG4gICAgICBwdXNoKHF1ZXJpZXMsICcobWluLS1tb3otZGV2aWNlLXBpeGVsLXJhdGlvOiAlcyknICUgKGRlbnNpdHkpKVxuICAgIGVsc2UgaWYgcXVlcnkgaXMgJ28nXG4gICAgICBwdXNoKHF1ZXJpZXMsICcoLW8tbWluLWRldmljZS1waXhlbC1yYXRpbzogJXMvMSknICUgKGRlbnNpdHkpKVxuICAgIGVsc2UgaWYgcXVlcnkgaXMgJ3JhdGlvJ1xuICAgICAgcHVzaChxdWVyaWVzLCAnKG1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86ICVzKScgJSAoZGVuc2l0eSkpXG4gICAgZWxzZSBpZiBxdWVyeSBpcyAnZHBpJ1xuICAgICAgaWYgLWlzLXN0cmluZyhkZW5zaXR5KVxuICAgICAgICBkZW5zaXR5PWNvbnZlcnQoZGVuc2l0eSlcbiAgICAgIHB1c2gocXVlcmllcywgJyhtaW4tcmVzb2x1dGlvbjogJXNkcGkpJyAlIChyb3VuZChkZW5zaXR5ICogOTYsIDEpKSlcbiAgICBlbHNlIGlmIHF1ZXJ5IGlzICdkcHB4J1xuICAgICAgcHVzaChxdWVyaWVzLCAnKG1pbi1yZXNvbHV0aW9uOiAlc2RwcHgpJyAlIChkZW5zaXR5KSlcbiAgcmV0dXJuIHF1ZXJpZXNcblxuY3JlYXRlLWZhbGxiYWNrLWNsYXNzKHNlbGVjdGVkLCBjbGFzcylcbiAgL3snJyArIGNsYXNzICsgJyAnICsgc2VsZWN0ZWR9XG4gICAge2Jsb2NrfVxuXG4vLyArYmV0d2VlbihtaW4sIG1heClcbi8vIHVzYWdlIChzY2FsZSBjYW4gYmUgbWl4ZWQgd2l0aCBjdXN0b20gdmFsdWVzKTpcbi8vICAgLSArYmV0d2VlbigxLCAzKSBzY2FsZTpzY2FsZVxuLy8gICAtICtiZXR3ZWVuKDAsIDMpIDAgd2lkdGg6c2NhbGVcbi8vICAgLSArYmV0d2VlbigyMDBweCwgNTAwcHgpIGN1c3RvbTpjdXN0b21cbi8vICAgLSArYmV0d2VlbigwLCAzMDBweCkgMCB3aWR0aDpjdXN0b21cbi8vICAgLSArYmV0d2VlbigxLCAzMDBweCkgc2NhbGU6Y3VzdG9tXG4vLyAgIC0gK2JldHdlZW4oMjAwcHgsIDQpIGN1c3RvbTpzY2FsZVxuXG5iZXR3ZWVuKG1pbiwgbWF4LCBhbnRpLW92ZXJsYXAgPSBydXB0dXJlLmFudGktb3ZlcmxhcCwgZGVuc2l0eSA9IG51bGwsIG9yaWVudGF0aW9uID0gbnVsbCwgdXNlLWRldmljZS13aWR0aCA9IHJ1cHR1cmUudXNlLWRldmljZS13aWR0aCwgZmFsbGJhY2stY2xhc3MgPSBudWxsKVxuICBzZWxlY3RlZCA9IHNlbGVjdG9yKClcblxuICBpZiAtaXMtc3RyaW5nKG9yaWVudGF0aW9uKVxuICAgIG9yaWVudGF0aW9uID0gY29udmVydChvcmllbnRhdGlvbilcbiAgaWYgLWlzLXN0cmluZyhkZW5zaXR5KVxuICAgIGRlbnNpdHkgPSBjb252ZXJ0KGRlbnNpdHkpXG4gIGlmIC1pcy1zdHJpbmcobWluKVxuICAgIG1pbiA9IC1nZXQtc2NhbGUtbnVtYmVyKG1pbilcbiAgaWYgLWlzLXN0cmluZyhtYXgpXG4gICAgbWF4ID0gLWdldC1zY2FsZS1udW1iZXIobWF4KVxuXG4gIC1taW4gPSBydXB0dXJlLnNjYWxlW21pbiAtIDFdIHVubGVzcyAtaXMtemVybyhtaW4pIG9yIChub3QgLW9uLXNjYWxlKG1pbikpXG4gIC1tYXggPSBydXB0dXJlLnNjYWxlW21heF0gdW5sZXNzIG5vdCAtb24tc2NhbGUobWF4KVxuICAtbWluID89IG1pblxuICAtbWF4ID89IG1heFxuXG4gIGlmIChydXB0dXJlLnJhc3RlcmlzZS1tZWRpYS1xdWVyaWVzKVxuICAgIGlmIG5vdCAoZGVuc2l0eSBvciAtbWF4IG9yIG9yaWVudGF0aW9uKVxuICAgICAge2Jsb2NrfVxuICBlbHNlXG4gICAgY29uZGl0aW9uID0gJ29ubHkgc2NyZWVuJ1xuICAgIHVzZS1kZXZpY2Utd2lkdGggPSB1c2UtZGV2aWNlLXdpZHRoID8gJ2RldmljZS0nIDogJydcbiAgICB1bmxlc3MgLW1pbiBpcyAwXG4gICAgICAtbWluID0gLWNvbnZlcnQtdG8oJ2VtJywgLW1pbikgaWYgcnVwdHVyZS5lbmFibGUtZW0tYnJlYWtwb2ludHNcbiAgICAgIC1taW4gPSAtYWRqdXN0LW92ZXJsYXAoYW50aS1vdmVybGFwLCAtbWluLCBzaWRlOiAnbWluJylcbiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbiArICcgYW5kIChtaW4tJyArIHVzZS1kZXZpY2Utd2lkdGggKyAnd2lkdGg6ICVzKScgJSAoLW1pbilcbiAgICB1bmxlc3MgLWxhcmdlci10aGFuLXNjYWxlKG1heClcbiAgICAgIC1tYXggPSAtY29udmVydC10bygnZW0nLCAtbWF4KSBpZiBydXB0dXJlLmVuYWJsZS1lbS1icmVha3BvaW50c1xuICAgICAgLW1heCA9IC1hZGp1c3Qtb3ZlcmxhcChhbnRpLW92ZXJsYXAsIC1tYXgsIHNpZGU6ICdtYXgnKVxuICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uICsgJyBhbmQgKG1heC0nICsgdXNlLWRldmljZS13aWR0aCArICd3aWR0aDogJXMpJyAlICgtbWF4KVxuICAgIGlmIG9yaWVudGF0aW9uXG4gICAgICBjb25kaXRpb24gPSBjb25kaXRpb24gKyAnIGFuZCAob3JpZW50YXRpb246ICVzKScgJSAob3JpZW50YXRpb24pXG4gICAgaWYgZGVuc2l0eVxuICAgICAgY29uZGl0aW9ucyA9ICgpXG4gICAgICBmb3IgcXVlcnkgaW4gLWRlbnNpdHktcXVlcmllcyhkZW5zaXR5KVxuICAgICAgICBwdXNoKGNvbmRpdGlvbnMsIGNvbmRpdGlvbiArICcgYW5kICVzJyAlIChxdWVyeSkpXG4gICAgICBjb25kaXRpb24gPSBqb2luKCcsICcsIGNvbmRpdGlvbnMpXG4gICAgQG1lZGlhIGNvbmRpdGlvblxuICAgICAge2Jsb2NrfVxuICBpZiBmYWxsYmFjay1jbGFzc1xuICAgICtjcmVhdGUtZmFsbGJhY2stY2xhc3Moc2VsZWN0ZWQsIGZhbGxiYWNrLWNsYXNzKVxuICAgICAge2Jsb2NrfVxuXG5hdChzY2FsZS1wb2ludCwgYW50aS1vdmVybGFwID0gcnVwdHVyZS5hbnRpLW92ZXJsYXAsIGRlbnNpdHkgPSBudWxsLCBvcmllbnRhdGlvbiA9IG51bGwsIHVzZS1kZXZpY2Utd2lkdGggPSBydXB0dXJlLnVzZS1kZXZpY2Utd2lkdGgsIGZhbGxiYWNrLWNsYXNzID0gbnVsbClcbiAgaWYgLWlzLXN0cmluZyhvcmllbnRhdGlvbilcbiAgICBvcmllbnRhdGlvbiA9IGNvbnZlcnQob3JpZW50YXRpb24pXG4gIGlmIC1pcy1zdHJpbmcoZGVuc2l0eSlcbiAgICBkZW5zaXR5ID0gY29udmVydChkZW5zaXR5KVxuICArYmV0d2VlbihzY2FsZS1wb2ludCwgc2NhbGUtcG9pbnQsIGFudGktb3ZlcmxhcCwgZGVuc2l0eSwgb3JpZW50YXRpb24sIHVzZS1kZXZpY2Utd2lkdGgsIGZhbGxiYWNrLWNsYXNzKVxuICAgIHtibG9ja31cblxuZnJvbS13aWR0aChzY2FsZS1wb2ludCwgYW50aS1vdmVybGFwID0gcnVwdHVyZS5hbnRpLW92ZXJsYXAsIGRlbnNpdHkgPSBudWxsLCBvcmllbnRhdGlvbiA9IG51bGwsIHVzZS1kZXZpY2Utd2lkdGggPSBydXB0dXJlLnVzZS1kZXZpY2Utd2lkdGgsIGZhbGxiYWNrLWNsYXNzID0gbnVsbClcbiAgaWYgLWlzLXN0cmluZyhvcmllbnRhdGlvbilcbiAgICBvcmllbnRhdGlvbiA9IGNvbnZlcnQob3JpZW50YXRpb24pXG4gIGlmIC1pcy1zdHJpbmcoZGVuc2l0eSlcbiAgICBkZW5zaXR5ID0gY29udmVydChkZW5zaXR5KVxuICArYmV0d2VlbihzY2FsZS1wb2ludCwgbGVuZ3RoKHJ1cHR1cmUuc2NhbGUpLCBhbnRpLW92ZXJsYXAsIGRlbnNpdHksIG9yaWVudGF0aW9uLCB1c2UtZGV2aWNlLXdpZHRoLCBmYWxsYmFjay1jbGFzcylcbiAgICB7YmxvY2t9XG5cbmFib3ZlID0gZnJvbS13aWR0aFxuXG50by13aWR0aChzY2FsZS1wb2ludCwgYW50aS1vdmVybGFwID0gcnVwdHVyZS5hbnRpLW92ZXJsYXAsIGRlbnNpdHkgPSBudWxsLCBvcmllbnRhdGlvbiA9IG51bGwsIHVzZS1kZXZpY2Utd2lkdGggPSBydXB0dXJlLnVzZS1kZXZpY2Utd2lkdGgsIGZhbGxiYWNrLWNsYXNzID0gbnVsbClcbiAgaWYgLWlzLXN0cmluZyhvcmllbnRhdGlvbilcbiAgICBvcmllbnRhdGlvbiA9IGNvbnZlcnQob3JpZW50YXRpb24pXG4gIGlmIC1pcy1zdHJpbmcoZGVuc2l0eSlcbiAgICBkZW5zaXR5ID0gY29udmVydChkZW5zaXR5KVxuICArYmV0d2VlbigxLCBzY2FsZS1wb2ludCwgYW50aS1vdmVybGFwLCBkZW5zaXR5LCBvcmllbnRhdGlvbiwgdXNlLWRldmljZS13aWR0aCwgZmFsbGJhY2stY2xhc3MpXG4gICAge2Jsb2NrfVxuXG5iZWxvdyA9IHRvLXdpZHRoXG5cbm1vYmlsZShhbnRpLW92ZXJsYXAgPSBydXB0dXJlLmFudGktb3ZlcmxhcCwgZGVuc2l0eSA9IG51bGwsIG9yaWVudGF0aW9uID0gbnVsbCwgdXNlLWRldmljZS13aWR0aCA9IHJ1cHR1cmUudXNlLWRldmljZS13aWR0aCwgZmFsbGJhY2stY2xhc3MgPSBudWxsKVxuICBpZiAtaXMtc3RyaW5nKG9yaWVudGF0aW9uKVxuICAgIG9yaWVudGF0aW9uID0gY29udmVydChvcmllbnRhdGlvbilcbiAgaWYgLWlzLXN0cmluZyhkZW5zaXR5KVxuICAgIGRlbnNpdHkgPSBjb252ZXJ0KGRlbnNpdHkpXG4gICtiZWxvdyhydXB0dXJlLm1vYmlsZS1jdXRvZmYsIGFudGktb3ZlcmxhcCwgZGVuc2l0eSwgb3JpZW50YXRpb24sIHVzZS1kZXZpY2Utd2lkdGgsIGZhbGxiYWNrLWNsYXNzKVxuICAgIHtibG9ja31cblxudGFibGV0KGFudGktb3ZlcmxhcCA9IHJ1cHR1cmUuYW50aS1vdmVybGFwLCBkZW5zaXR5ID0gbnVsbCwgb3JpZW50YXRpb24gPSBudWxsLCB1c2UtZGV2aWNlLXdpZHRoID0gcnVwdHVyZS51c2UtZGV2aWNlLXdpZHRoLCBmYWxsYmFjay1jbGFzcyA9IG51bGwpXG4gIGlmIC1pcy1zdHJpbmcob3JpZW50YXRpb24pXG4gICAgb3JpZW50YXRpb24gPSBjb252ZXJ0KG9yaWVudGF0aW9uKVxuICBpZiAtaXMtc3RyaW5nKGRlbnNpdHkpXG4gICAgZGVuc2l0eSA9IGNvbnZlcnQoZGVuc2l0eSlcbiAgK2JldHdlZW4ocnVwdHVyZS5tb2JpbGUtY3V0b2ZmLCBydXB0dXJlLmRlc2t0b3AtY3V0b2ZmLCBhbnRpLW92ZXJsYXAsIGRlbnNpdHksIG9yaWVudGF0aW9uLCB1c2UtZGV2aWNlLXdpZHRoLCBmYWxsYmFjay1jbGFzcylcbiAgICB7YmxvY2t9XG5cbmRlc2t0b3AoYW50aS1vdmVybGFwID0gcnVwdHVyZS5hbnRpLW92ZXJsYXAsIGRlbnNpdHkgPSBudWxsLCBvcmllbnRhdGlvbiA9IG51bGwsIHVzZS1kZXZpY2Utd2lkdGggPSBydXB0dXJlLnVzZS1kZXZpY2Utd2lkdGgsIGZhbGxiYWNrLWNsYXNzID0gbnVsbClcbiAgaWYgLWlzLXN0cmluZyhvcmllbnRhdGlvbilcbiAgICBvcmllbnRhdGlvbiA9IGNvbnZlcnQob3JpZW50YXRpb24pXG4gIGlmIC1pcy1zdHJpbmcoZGVuc2l0eSlcbiAgICBkZW5zaXR5ID0gY29udmVydChkZW5zaXR5KVxuICArYWJvdmUocnVwdHVyZS5kZXNrdG9wLWN1dG9mZiwgYW50aS1vdmVybGFwLCBkZW5zaXR5LCBvcmllbnRhdGlvbiwgdXNlLWRldmljZS13aWR0aCwgZmFsbGJhY2stY2xhc3MpXG4gICAge2Jsb2NrfVxuXG5oZChhbnRpLW92ZXJsYXAgPSBydXB0dXJlLmFudGktb3ZlcmxhcCwgZGVuc2l0eSA9IG51bGwsIG9yaWVudGF0aW9uID0gbnVsbCwgdXNlLWRldmljZS13aWR0aCA9IHJ1cHR1cmUudXNlLWRldmljZS13aWR0aCwgZmFsbGJhY2stY2xhc3MgPSBudWxsKVxuICBpZiAtaXMtc3RyaW5nKG9yaWVudGF0aW9uKVxuICAgIG9yaWVudGF0aW9uID0gY29udmVydChvcmllbnRhdGlvbilcbiAgaWYgLWlzLXN0cmluZyhkZW5zaXR5KVxuICAgIGRlbnNpdHkgPSBjb252ZXJ0KGRlbnNpdHkpXG4gICthYm92ZShydXB0dXJlLmhkLWN1dG9mZiwgYW50aS1vdmVybGFwLCBkZW5zaXR5LCBvcmllbnRhdGlvbiwgdXNlLWRldmljZS13aWR0aCwgZmFsbGJhY2stY2xhc3MpXG4gICAge2Jsb2NrfVxuXG5kZW5zaXR5KGRlbnNpdHksIG9yaWVudGF0aW9uID0gbnVsbCwgZmFsbGJhY2stY2xhc3MgPSBudWxsKVxuICBzZWxlY3RlZCA9IHNlbGVjdG9yKClcbiAgaWYgbm90IChydXB0dXJlLnJhc3RlcmlzZS1tZWRpYS1xdWVyaWVzKVxuICAgIGNvbmRpdGlvbnMgPSAoKVxuICAgIGZvciBxdWVyeSBpbiAtZGVuc2l0eS1xdWVyaWVzKGRlbnNpdHkpXG4gICAgICBjb25kaXRpb24gPSAnb25seSBzY3JlZW4gYW5kICVzJyAlIChxdWVyeSlcbiAgICAgIGlmIG9yaWVudGF0aW9uXG4gICAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbiArICcgYW5kIChvcmllbnRhdGlvbjogJXMpJyAlIChvcmllbnRhdGlvbilcbiAgICAgIHB1c2goY29uZGl0aW9ucywgY29uZGl0aW9uKVxuICAgIGNvbmRpdGlvbiA9IGpvaW4oJywgJywgY29uZGl0aW9ucylcbiAgICBAbWVkaWEgY29uZGl0aW9uXG4gICAgICB7YmxvY2t9XG4gICAgaWYgZmFsbGJhY2stY2xhc3NcbiAgICAgICtjcmVhdGUtZmFsbGJhY2stY2xhc3Moc2VsZWN0ZWQsIGZhbGxiYWNrLWNsYXNzKVxuICAgICAgICB7YmxvY2t9XG5cbnBpeGVsLXJhdGlvID0gZGVuc2l0eVxuXG5yZXRpbmEob3JpZW50YXRpb24gPSBudWxsLCBmYWxsYmFjay1jbGFzcyA9IG51bGwpXG4gICtkZW5zaXR5KCdyZXRpbmEnLCBvcmllbnRhdGlvbiwgZmFsbGJhY2stY2xhc3MpXG4gICAge2Jsb2NrfVxuXG5sYW5kc2NhcGUoZGVuc2l0eSA9IG51bGwsIGZhbGxiYWNrLWNsYXNzID0gbnVsbClcbiAgc2VsZWN0ZWQgPSBzZWxlY3RvcigpXG4gIGlmIG5vdCAocnVwdHVyZS5yYXN0ZXJpc2UtbWVkaWEtcXVlcmllcylcbiAgICBpZiAtaXMtc3RyaW5nKGRlbnNpdHkpXG4gICAgICBkZW5zaXR5ID0gY29udmVydChkZW5zaXR5KVxuICAgIGlmIGRlbnNpdHlcbiAgICAgICtwaXhlbC1yYXRpbyhkZW5zaXR5LCBvcmllbnRhdGlvbjogbGFuZHNjYXBlLCBmYWxsYmFjay1jbGFzcylcbiAgICAgICAge2Jsb2NrfVxuICAgIGVsc2VcbiAgICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG9yaWVudGF0aW9uOiBsYW5kc2NhcGUpXG4gICAgICAgIHtibG9ja31cbiAgICAgIGlmIGZhbGxiYWNrLWNsYXNzXG4gICAgICAgICtjcmVhdGUtZmFsbGJhY2stY2xhc3Moc2VsZWN0ZWQsIGZhbGxiYWNrLWNsYXNzKVxuICAgICAgICAgIHtibG9ja31cblxucG9ydHJhaXQoZGVuc2l0eSA9IG51bGwsIGZhbGxiYWNrLWNsYXNzID0gbnVsbClcbiAgc2VsZWN0ZWQgPSBzZWxlY3RvcigpXG4gIGlmIG5vdCAocnVwdHVyZS5yYXN0ZXJpc2UtbWVkaWEtcXVlcmllcylcbiAgICBpZiAtaXMtc3RyaW5nKGRlbnNpdHkpXG4gICAgICBkZW5zaXR5ID0gY29udmVydChkZW5zaXR5KVxuICAgIGlmIGRlbnNpdHlcbiAgICAgICtwaXhlbC1yYXRpbyhkZW5zaXR5LCBvcmllbnRhdGlvbjogcG9ydHJhaXQsIGZhbGxiYWNrLWNsYXNzKVxuICAgICAgICB7YmxvY2t9XG4gICAgZWxzZVxuICAgICAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAob3JpZW50YXRpb246IHBvcnRyYWl0KVxuICAgICAgICB7YmxvY2t9XG4gICAgICBpZiBmYWxsYmFjay1jbGFzc1xuICAgICAgICArY3JlYXRlLWZhbGxiYWNrLWNsYXNzKHNlbGVjdGVkLCBmYWxsYmFjay1jbGFzcylcbiAgICAgICAgICB7YmxvY2t9XG4iXX0= */
